survey-creator-react 1.9.21 → 1.9.24
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 +2 -2
- package/survey-creator-react.d.ts +23 -9
- package/survey-creator-react.js +63 -44
- package/survey-creator-react.min.js +2 -2
package/survey-creator-react.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SurveyJS Creator React v1.9.
|
|
2
|
+
* SurveyJS Creator React v1.9.24
|
|
3
3
|
* (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
|
|
4
4
|
* Github: https://github.com/surveyjs/survey-creator
|
|
5
5
|
* License: https://surveyjs.io/Licenses#SurveyCreator
|
|
@@ -648,7 +648,7 @@ var SurveyPageNavigator = /** @class */ (function (_super) {
|
|
|
648
648
|
function SurveyPageNavigator(props) {
|
|
649
649
|
var _this = _super.call(this, props) || this;
|
|
650
650
|
_this.containerRef = react__WEBPACK_IMPORTED_MODULE_4___default.a.createRef();
|
|
651
|
-
_this.model = new survey_creator_core__WEBPACK_IMPORTED_MODULE_3__["PageNavigatorViewModel"](props.
|
|
651
|
+
_this.model = new survey_creator_core__WEBPACK_IMPORTED_MODULE_3__["PageNavigatorViewModel"](props.pagesController, props.pageEditMode);
|
|
652
652
|
return _this;
|
|
653
653
|
}
|
|
654
654
|
SurveyPageNavigator.prototype.getStateElement = function () {
|
|
@@ -656,12 +656,14 @@ var SurveyPageNavigator = /** @class */ (function (_super) {
|
|
|
656
656
|
};
|
|
657
657
|
SurveyPageNavigator.prototype.componentDidMount = function () {
|
|
658
658
|
_super.prototype.componentDidMount.call(this);
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
659
|
+
if (this.props.pageEditMode !== "bypage") {
|
|
660
|
+
var el = this.containerRef.current;
|
|
661
|
+
if (!!el) {
|
|
662
|
+
var self_1 = this;
|
|
663
|
+
el.parentElement.parentElement.onscroll = function (ev) {
|
|
664
|
+
return self_1.model.onContainerScroll(ev.currentTarget);
|
|
665
|
+
};
|
|
666
|
+
}
|
|
665
667
|
}
|
|
666
668
|
};
|
|
667
669
|
SurveyPageNavigator.prototype.componentWillUnmount = function () {
|
|
@@ -1385,6 +1387,13 @@ var SurveyCreatorComponent = /** @class */ (function (_super) {
|
|
|
1385
1387
|
SurveyCreatorComponent.prototype.getStateElement = function () {
|
|
1386
1388
|
return this.props.creator;
|
|
1387
1389
|
};
|
|
1390
|
+
Object.defineProperty(SurveyCreatorComponent.prototype, "style", {
|
|
1391
|
+
get: function () {
|
|
1392
|
+
return this.props.style;
|
|
1393
|
+
},
|
|
1394
|
+
enumerable: false,
|
|
1395
|
+
configurable: true
|
|
1396
|
+
});
|
|
1388
1397
|
SurveyCreatorComponent.prototype.componentDidMount = function () {
|
|
1389
1398
|
_super.prototype.componentDidMount.call(this);
|
|
1390
1399
|
this.creator.initKeyboardShortcuts(this.rootNode.current);
|
|
@@ -1410,7 +1419,7 @@ var SurveyCreatorComponent = /** @class */ (function (_super) {
|
|
|
1410
1419
|
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("a", { href: "https://surveyjs.io/buy" }, this.props.creator.licenseText))));
|
|
1411
1420
|
}
|
|
1412
1421
|
//AM: width unrecognized by react
|
|
1413
|
-
return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: creatorClassName, ref: this.rootNode },
|
|
1422
|
+
return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: creatorClassName, ref: this.rootNode, style: this.style },
|
|
1414
1423
|
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_SvgBundle__WEBPACK_IMPORTED_MODULE_7__["SvgBundleComponent"], null),
|
|
1415
1424
|
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: areaClassName },
|
|
1416
1425
|
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: fullContainerClassName },
|
|
@@ -1529,8 +1538,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1529
1538
|
/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./src/entries/helpers.ts");
|
|
1530
1539
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
|
|
1531
1540
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
1532
|
-
/* harmony import */ var
|
|
1533
|
-
/* harmony import */ var
|
|
1541
|
+
/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ "survey-core");
|
|
1542
|
+
/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_2__);
|
|
1534
1543
|
/* harmony import */ var survey_react_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-react-ui */ "survey-react-ui");
|
|
1535
1544
|
/* harmony import */ var survey_react_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(survey_react_ui__WEBPACK_IMPORTED_MODULE_3__);
|
|
1536
1545
|
|
|
@@ -1545,12 +1554,17 @@ var SvgBundleComponent = /** @class */ (function (_super) {
|
|
|
1545
1554
|
return _this;
|
|
1546
1555
|
}
|
|
1547
1556
|
SvgBundleComponent.prototype.componentDidMount = function () {
|
|
1548
|
-
this.containerRef.current
|
|
1557
|
+
if (!!this.containerRef.current) {
|
|
1558
|
+
this.containerRef.current.innerHTML = survey_core__WEBPACK_IMPORTED_MODULE_2__["SvgRegistry"].iconsRenderedHtml();
|
|
1559
|
+
}
|
|
1549
1560
|
};
|
|
1550
1561
|
SvgBundleComponent.prototype.componentWillUnmount = function () {
|
|
1551
1562
|
};
|
|
1552
1563
|
SvgBundleComponent.prototype.render = function () {
|
|
1553
|
-
|
|
1564
|
+
var svgStyle = {
|
|
1565
|
+
display: "none"
|
|
1566
|
+
};
|
|
1567
|
+
return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("svg", { style: svgStyle, ref: this.containerRef });
|
|
1554
1568
|
};
|
|
1555
1569
|
return SvgBundleComponent;
|
|
1556
1570
|
}(react__WEBPACK_IMPORTED_MODULE_1___default.a.Component));
|
|
@@ -1721,7 +1735,7 @@ var CellQuestionAdornerComponent = /** @class */ (function (_super) {
|
|
|
1721
1735
|
return null;
|
|
1722
1736
|
}
|
|
1723
1737
|
return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
|
|
1724
|
-
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { "data-sv-drop-target-survey-element": this.model.
|
|
1738
|
+
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { "data-sv-drop-target-survey-element": this.model.element.name, className: "svc-question__adorner" },
|
|
1725
1739
|
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: " svc-question__content--selected-no-border svc-question__content" }, this.props.element))));
|
|
1726
1740
|
};
|
|
1727
1741
|
return CellQuestionAdornerComponent;
|
|
@@ -1772,7 +1786,7 @@ var CellQuestionDropdownAdornerComponent = /** @class */ (function (_super) {
|
|
|
1772
1786
|
var question = this.props.question;
|
|
1773
1787
|
var textStyle = this.props.question.textStyle;
|
|
1774
1788
|
return (react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_2___default.a.Fragment, null,
|
|
1775
|
-
react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { "data-sv-drop-target-survey-element": this.model.
|
|
1789
|
+
react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { "data-sv-drop-target-survey-element": this.model.element.name, className: "svc-question__adorner" },
|
|
1776
1790
|
react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: " svc-question__content--selected-no-border svc-question__content" },
|
|
1777
1791
|
this.props.element,
|
|
1778
1792
|
react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svc-question__dropdown-choices" }, question.visibleChoices.map(function (item, index) { return (react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svc-question__dropdown-choice", key: "editable_choice_".concat(index) }, survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactSurveyElementsWrapper"].wrapItemValue(question.survey, survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactElementFactory"].Instance.createElement("survey-radiogroup-item", {
|
|
@@ -1822,7 +1836,7 @@ var CreatorSurveyPageComponent = /** @class */ (function (_super) {
|
|
|
1822
1836
|
Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(CreatorSurveyPageComponent, _super);
|
|
1823
1837
|
function CreatorSurveyPageComponent(props) {
|
|
1824
1838
|
var _this = _super.call(this, props) || this;
|
|
1825
|
-
_this.model = new survey_creator_core__WEBPACK_IMPORTED_MODULE_2__["
|
|
1839
|
+
_this.model = new survey_creator_core__WEBPACK_IMPORTED_MODULE_2__["PageAdorner"](_this.props.creator, _this.props.page);
|
|
1826
1840
|
_this.rootRef = react__WEBPACK_IMPORTED_MODULE_3___default.a.createRef();
|
|
1827
1841
|
return _this;
|
|
1828
1842
|
}
|
|
@@ -1935,7 +1949,7 @@ var PanelAdornerComponent = /** @class */ (function (_super) {
|
|
|
1935
1949
|
PanelAdornerComponent.prototype.renderFooter = function () {
|
|
1936
1950
|
var _this = this;
|
|
1937
1951
|
return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
|
|
1938
|
-
!this.model.isEmptyElement && this.model.
|
|
1952
|
+
!this.model.isEmptyElement && this.model.element.isPanel && this.model.allowEdit ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-panel__add-new-question-container" },
|
|
1939
1953
|
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-panel__add-new-question svc-action-button", onClick: function (e) {
|
|
1940
1954
|
e.stopPropagation();
|
|
1941
1955
|
_this.model.addNewQuestion();
|
|
@@ -2007,10 +2021,10 @@ var QuestionAdornerComponent = /** @class */ (function (_super) {
|
|
|
2007
2021
|
return _super.prototype.canRender.call(this) && !this.model.isDragged;
|
|
2008
2022
|
};
|
|
2009
2023
|
QuestionAdornerComponent.prototype.renderElement = function () {
|
|
2010
|
-
var allowInteractions = this.model.
|
|
2024
|
+
var allowInteractions = this.model.element
|
|
2011
2025
|
.isInteractiveDesignElement;
|
|
2012
2026
|
var content = this.renderContent(allowInteractions);
|
|
2013
|
-
return (react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { ref: this.rootRef, "data-sv-drop-target-survey-element": this.model.
|
|
2027
|
+
return (react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { ref: this.rootRef, "data-sv-drop-target-survey-element": this.model.element.name || null, className: "svc-question__adorner" + this.model.rootCss(), onMouseOut: function (e) { return allowInteractions && Object(survey_creator_core__WEBPACK_IMPORTED_MODULE_1__["toggleHovered"])(e.nativeEvent, e.currentTarget); }, onMouseOver: function (e) { return allowInteractions && Object(survey_creator_core__WEBPACK_IMPORTED_MODULE_1__["toggleHovered"])(e.nativeEvent, e.currentTarget); } }, content));
|
|
2014
2028
|
};
|
|
2015
2029
|
QuestionAdornerComponent.prototype.renderContent = function (allowInteractions) {
|
|
2016
2030
|
var _this = this;
|
|
@@ -2648,7 +2662,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2648
2662
|
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StylesManager", function() { return survey_creator_core__WEBPACK_IMPORTED_MODULE_42__["StylesManager"]; });
|
|
2649
2663
|
|
|
2650
2664
|
var Version;
|
|
2651
|
-
Version = "".concat("1.9.
|
|
2665
|
+
Version = "".concat("1.9.24");
|
|
2652
2666
|
// import "@survey/creator/survey-creator-core.css";
|
|
2653
2667
|
|
|
2654
2668
|
|
|
@@ -2870,9 +2884,10 @@ var TabDesignerComponent = /** @class */ (function (_super) {
|
|
|
2870
2884
|
TabDesignerComponent.prototype.componentWillUnmount = function () {
|
|
2871
2885
|
_super.prototype.componentWillUnmount.call(this);
|
|
2872
2886
|
this.clearDragDropEvents();
|
|
2887
|
+
_super.prototype.componentWillUnmount.call(this);
|
|
2873
2888
|
};
|
|
2874
2889
|
TabDesignerComponent.prototype.getStateElements = function () {
|
|
2875
|
-
return [this.model, this.model.survey];
|
|
2890
|
+
return [this.model, this.model.survey, this.model.pagesController];
|
|
2876
2891
|
};
|
|
2877
2892
|
TabDesignerComponent.prototype.getRenderedPages = function () {
|
|
2878
2893
|
var _this = this;
|
|
@@ -2880,17 +2895,28 @@ var TabDesignerComponent = /** @class */ (function (_super) {
|
|
|
2880
2895
|
this.renderedPagesCache = {};
|
|
2881
2896
|
}
|
|
2882
2897
|
var renderedPages = [];
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2898
|
+
if (this.creator.pageEditMode !== "bypage") {
|
|
2899
|
+
var pages = this.creator.survey.pages;
|
|
2900
|
+
pages.forEach(function (page, index) {
|
|
2901
|
+
var cachedPage = _this.renderedPagesCache[page.id];
|
|
2902
|
+
if (!cachedPage) {
|
|
2903
|
+
cachedPage = _this.createRenderedPage(page, index);
|
|
2904
|
+
_this.renderedPagesCache[page.id] = cachedPage;
|
|
2905
|
+
}
|
|
2906
|
+
renderedPages.push(cachedPage);
|
|
2907
|
+
});
|
|
2908
|
+
if (this.model.showNewPage) {
|
|
2909
|
+
renderedPages.push(this.renderNewPage("svc-page", this.model.newPage.id + "-ghost-new-page"));
|
|
2910
|
+
}
|
|
2911
|
+
}
|
|
2912
|
+
else {
|
|
2913
|
+
var page2Display = this.model.pagesController.page2Display;
|
|
2914
|
+
var cachedPage = this.renderedPagesCache[page2Display.id];
|
|
2886
2915
|
if (!cachedPage) {
|
|
2887
|
-
cachedPage =
|
|
2888
|
-
|
|
2916
|
+
cachedPage = this.createRenderedPage(page2Display, 0);
|
|
2917
|
+
this.renderedPagesCache[page2Display.id] = cachedPage;
|
|
2889
2918
|
}
|
|
2890
2919
|
renderedPages.push(cachedPage);
|
|
2891
|
-
});
|
|
2892
|
-
if (this.model.showNewPage) {
|
|
2893
|
-
renderedPages.push(this.renderNewPage("svc-page", this.model.newPage.id + "-ghost-new-page"));
|
|
2894
2920
|
}
|
|
2895
2921
|
return renderedPages;
|
|
2896
2922
|
};
|
|
@@ -2910,7 +2936,8 @@ var TabDesignerComponent = /** @class */ (function (_super) {
|
|
|
2910
2936
|
var designerTabClassName = "svc-tab-designer " + this.model.getRootCss();
|
|
2911
2937
|
return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
|
|
2912
2938
|
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-flex-column" }, this.model.isToolboxVisible ? survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["ReactElementFactory"].Instance.createElement("svc-adaptive-toolbox", { model: this.creator }) : null),
|
|
2913
|
-
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: designerTabClassName, onClick: function () { return _this.model.clickDesigner(); } },
|
|
2939
|
+
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: designerTabClassName, onClick: function () { return _this.model.clickDesigner(); } },
|
|
2940
|
+
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-tab-designer_content" }, this.model.showPlaceholder ? this.renderPlaceHolder() : this.renderTabContent()))));
|
|
2914
2941
|
};
|
|
2915
2942
|
TabDesignerComponent.prototype.renderPlaceHolder = function () {
|
|
2916
2943
|
return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
|
|
@@ -2930,7 +2957,7 @@ var TabDesignerComponent = /** @class */ (function (_super) {
|
|
|
2930
2957
|
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_Navigation__WEBPACK_IMPORTED_MODULE_4__["SurveyNavigation"], { survey: survey, location: "bottom", css: survey.css })),
|
|
2931
2958
|
this.creator.showPageNavigator ?
|
|
2932
2959
|
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-tab-designer__page-navigator" },
|
|
2933
|
-
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_PageNavigator__WEBPACK_IMPORTED_MODULE_3__["SurveyPageNavigator"], {
|
|
2960
|
+
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(_PageNavigator__WEBPACK_IMPORTED_MODULE_3__["SurveyPageNavigator"], { pagesController: this.model.pagesController, pageEditMode: this.model.creator.pageEditMode }))
|
|
2934
2961
|
: null));
|
|
2935
2962
|
};
|
|
2936
2963
|
return TabDesignerComponent;
|
|
@@ -3340,20 +3367,12 @@ var SurveySimulator = /** @class */ (function (_super) {
|
|
|
3340
3367
|
height: this.model.simulatorFrame.frameHeight + "px"
|
|
3341
3368
|
} },
|
|
3342
3369
|
react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svd-simulator-frame " + this.model.simulatorFrame.cssClass, style: {
|
|
3343
|
-
width:
|
|
3344
|
-
|
|
3345
|
-
: this.model.simulatorFrame.frameWidth) + "px",
|
|
3346
|
-
height: (this.model.landscapeOrientation
|
|
3347
|
-
? this.model.simulatorFrame.frameWidth
|
|
3348
|
-
: this.model.simulatorFrame.frameHeight) + "px"
|
|
3370
|
+
width: this.model.simulatorFrame.landscapedFrameWidth + "px",
|
|
3371
|
+
height: this.model.simulatorFrame.landscapedFrameHeight + "px"
|
|
3349
3372
|
} }),
|
|
3350
3373
|
react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svd-simulator", style: {
|
|
3351
|
-
width: this.model.simulatorFrame.
|
|
3352
|
-
|
|
3353
|
-
"px",
|
|
3354
|
-
height: this.model.simulatorFrame.height /
|
|
3355
|
-
this.model.simulatorFrame.scale +
|
|
3356
|
-
"px",
|
|
3374
|
+
width: this.model.simulatorFrame.deviceWidth + "px",
|
|
3375
|
+
height: this.model.simulatorFrame.deviceHeight + "px",
|
|
3357
3376
|
transform: "scale(" +
|
|
3358
3377
|
this.model.simulatorFrame.scale +
|
|
3359
3378
|
") translate(-50%, -50%)"
|
|
@@ -3819,4 +3838,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_react_ui__;
|
|
|
3819
3838
|
|
|
3820
3839
|
/******/ });
|
|
3821
3840
|
});
|
|
3822
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9OYXZpZ2F0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL05vdGlmaWVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL09iamVjdFNlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1BhZ2VOYXZpZ2F0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUHJvcGVydHlHcmlkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uRWRpdG9yQ29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVtYmVkZGVkU3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uTGlua1ZhbHVlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Jlc3VsdHMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU2lkZUJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdHJpbmdFZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3VydmV5Q3JlYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdmdCdW5kbGUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvVGFiYmVkTWVudS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9DZWxsUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uRHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9QYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25XaWRnZXQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaGVscGVycy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9ldmVudHMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0Rlc2lnbmVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvRW1iZWQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9Kc29uRWRpdG9yQWNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvclRleHRhcmVhLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvTG9naWMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9QcmV2aWV3LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvU3VydmV5U2ltdWxhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L0FkYXB0aXZlVG9vbGJveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L1Rvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94SXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5Q3JlYXRvckNvcmVcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVJlYWN0XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiYW1kXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FB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InN1cnZleS1jcmVhdG9yLXJlYWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1jcmVhdG9yLWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktcmVhY3QtdWlcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJTdXJ2ZXlDcmVhdG9yXCIsIFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCIsIFwic3VydmV5LWNvcmVcIiwgXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIsIFwic3VydmV5LXJlYWN0LXVpXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlN1cnZleUNyZWF0b3JcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LWNyZWF0b3ItY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1yZWFjdC11aVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5Q3JlYXRvclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0sIHJvb3RbXCJTdXJ2ZXlcIl0sIHJvb3RbXCJTdXJ2ZXlDcmVhdG9yQ29yZVwiXSwgcm9vdFtcIlN1cnZleVJlYWN0XCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jcmVhdG9yX2NvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2VudHJpZXMvaW5kZXgudHNcIik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFN1cnZleUVsZW1lbnRCYXNlLCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIEFjdGlvbkJ1dHRvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NlcyArIFwiIHN2Yy1hY3Rpb24tYnV0dG9uXCI7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgIGNsYXNzZXMgKz0gXCIgc3ZjLWFjdGlvbi1idXR0b24tLXNlbGVjdGVkXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIHN2Yy1hY3Rpb24tYnV0dG9uLS1kaXNhYmxlZFwiO1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3Nlc30+e3RoaXMucHJvcHMudGV4dH08L3NwYW4+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayhcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmNsaWNrKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGl0bGU9e3RoaXMucHJvcHMudGl0bGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMudGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJbWFnZUl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSW1hZ2VJdGVtVmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWw7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICB0aGlzLnByb3BzLml0ZW0sXG4gICAgICBudWxsLFxuICAgICAgbnVsbFxuICAgICk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5pdGVtc1Jvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuXG4gIHByZXZlbnREcmFnSGFuZGxlciA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgaXNOZXcgPSAhdGhpcy5wcm9wcy5xdWVzdGlvbi5pc0l0ZW1Jbkxpc3QodGhpcy5wcm9wcy5pdGVtKTtcbiAgICBjb25zdCBpbWFnZVdpZHRoID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS5pbWFnZVdpZHRoO1xuICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS5pbWFnZUhlaWdodDtcblxuICAgIGxldCBjb250ZW50ID0gbnVsbDtcbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGNvbnRlbnQgPSAoPD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZV9faXRlbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0gc2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWlubGluZVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19sYWJlbFwiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiBpbWFnZVdpZHRoID8gaW1hZ2VXaWR0aCArIFwicHhcIiA6IHVuZGVmaW5lZCwgaGVpZ2h0OiBpbWFnZUhlaWdodCA/IGltYWdlSGVpZ2h0ICsgXCJweFwiIDogdW5kZWZpbmVkIH19IGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19pbWFnZVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd0FkZCA/IGF0dGFjaEtleTJjbGljayg8c3BhbiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZU5ld0ZpbGUodGhpcy5tb2RlbCl9PlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tYWRkLWxnXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC8+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCA9IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZV9faXRlbVwifT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnLWFyZWEtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2Nob29zZS1maWxlXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VGaWxlKHRoaXMubW9kZWwpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1maWxlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX3JlbW92ZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwucmVtb3ZlKHRoaXMubW9kZWwpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kZWxldGVcIn0+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgXCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyXCIgK1xuICAgICAgICAgIChpc05ldyA/IFwiIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLS1uZXdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wR2hvc3QgPyBcIiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyLS1naG9zdFwiIDogXCJcIilcbiAgICAgICAgfVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtaXRlbS12YWx1ZT17XG4gICAgICAgICAgdGhpcy5tb2RlbC5pc0RyYWdnYWJsZSA/IHRoaXMubW9kZWwuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgICBvbkRyYWdTdGFydD17dGhpcy5wcmV2ZW50RHJhZ0hhbmRsZXJ9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlLXdyYXBwZXJfX2dob3N0XCJ9PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyX19jb250ZW50XCJ9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtaW1hZ2UtaXRlbS12YWx1ZVwiLFxuICAocHJvcHM6IEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBnZXRMb2NTdHJpbmcsIEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQgfSBmcm9tIFwic3JjL2V2ZW50c1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJdGVtVmFsdWUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YS5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIHRoaXMucHJvcHMuaXRlbVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgLy8gaWYgKHRoaXMubW9kZWwucXVlc3Rpb24uaXNEcmFnZ2VkKSB7XG4gICAgLy8gICByZXR1cm4gbnVsbDtcbiAgICAvLyB9XG4gICAgdGhpcy5tb2RlbC5pdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMubW9kZWwuYWxsb3dBZGQgPyAoXG4gICAgICBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCJcbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC50b29sdGlwfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmFkZCh0aGlzLm1vZGVsKX1cbiAgICAgID5cbiAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tYWRkXzE2eDE2XCJ9PjwvU3ZnSWNvbj5cbiAgICAgIDwvc3Bhbj4pXG4gICAgKSA6IChcbiAgICAgIDw+XG4gICAgICAgIHtcIiBcIn1cbiAgICAgICAge3RoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWdcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5kcmFnVG9vbHRpcH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1pY29uXCIgc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZHJhZy1hcmVhLWluZGljYXRvclwifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwudG9vbHRpcH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLXJlbW92ZV8xNngxNlwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgIDwvPlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgIFwic3ZjLWl0ZW0tdmFsdWUtd3JhcHBlclwiICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5hbGxvd0FkZCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1uZXdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdnaW5nID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLWRyYWdnaW5nXCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcEdob3N0ID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLWdob3N0XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcE1vdmVEb3duID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW1vdmVkb3duXCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcE1vdmVVcCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1tb3ZldXBcIiA6IFwiXCIpXG4gICAgICAgIH1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWU9e1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyB0aGlzLm1vZGVsLml0ZW0udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZV9fZ2hvc3RcIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+e2J1dHRvbn08L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaXRlbS12YWx1ZV9faXRlbVwifSBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIGV2ZW50KX0+e3RoaXMucHJvcHMuZWxlbWVudH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWl0ZW0tdmFsdWVcIixcbiAgKHByb3BzOiBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIExvZ29JbWFnZSwgU3ZnSWNvbiwgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIExvZ29JbWFnZVZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBDcmVhdG9yQmFzZTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ29JbWFnZUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgbW9kZWw6IExvZ29JbWFnZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgTG9nb0ltYWdlVmlld01vZGVsKHByb3BzLmRhdGEsIG51bGwpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLnJvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudCA9IG51bGw7XG4gICAgaWYgKHRoaXMubW9kZWwuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sKSB7XG4gICAgICBjb250ZW50ID0gPD5cbiAgICAgICAgPExvZ29JbWFnZSBkYXRhPXt0aGlzLnByb3BzLmRhdGEuc3VydmV5fT48L0xvZ29JbWFnZT5cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dFZGl0ID8gPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc1wiPlxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fY2hvb3NlLWZpbGVcIiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1maWxlXCJ9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX0+PC9TdmdJY29uPil9XG4gICAgICAgICAge2F0dGFjaEtleTJjbGljayg8U3ZnSWNvbiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kZWxldGVcIn0gb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5yZW1vdmUodGhpcy5tb2RlbCl9PjwvU3ZnSWNvbj4pfVxuICAgICAgICA8L2Rpdj4gOiBudWxsfVxuICAgICAgPC8+O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayg8ZGl2IGNsYXNzTmFtZT1cInN2Yy1sb2dvLWltYWdlLXBsYWNlaG9sZGVyXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VGaWxlKHRoaXMubW9kZWwpfT57dGhpcy5tb2RlbC5jaG9vc2VMb2dvUGxhY2Vob2xkZXJ9PC9kaXY+KSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdmMtbG9nby1pbWFnZVwiPlxuICAgICAgICA8aW5wdXQgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdHlwZT1cImZpbGVcIiB0YWJJbmRleD17LTF9IGFjY2VwdD1cImltYWdlLypcIiBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIiAvPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtbG9nby1pbWFnZVwiLFxuICAocHJvcHM6IElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvZ29JbWFnZUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSXRlbVZhbHVlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgY2VsbDogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9wcy5jb21wb25lbnREYXRhO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICBkYXRhLmNyZWF0b3IsXG4gICAgICBkYXRhLmVsZW1lbnQsXG4gICAgICBkYXRhLnF1ZXN0aW9uLFxuICAgICAgZGF0YS5yb3csXG4gICAgICBkYXRhLmNvbHVtbixcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnByb3BzLmNvbXBvbmVudERhdGE7XG4gICAgdGhpcy5tb2RlbC50ZW1wbGF0ZURhdGEgPSBkYXRhLmVsZW1lbnQ7XG4gICAgdGhpcy5tb2RlbC5yb3cgPSBkYXRhLnJvdztcbiAgICB0aGlzLm1vZGVsLmNvbHVtbiA9IGRhdGEuY29sdW1uO1xuICAgIHRoaXMubW9kZWwucXVlc3Rpb24gPSBkYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjb250cm9scyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5xdWVzdGlvbikge1xuICAgICAgY29udHJvbHMgPSA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1tYXRyaXgtY2VsbF9fcXVlc3Rpb24tY29udHJvbHNcIj5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8c3BhbiBjbGFzc05hbWU9XCJzdmMtbWF0cml4LWNlbGxfX3F1ZXN0aW9uLWNvbnRyb2xzLWJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuZWRpdFF1ZXN0aW9uKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1lZGl0XCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPil9XG4gICAgICA8L2Rpdj47XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1tYXRyaXgtY2VsbFwifVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIG9uQ2xpY2s9eyhlOiBhbnkpID0+ICF0aGlzLnByb3BzLnF1ZXN0aW9uICYmIHRoaXMubW9kZWwuc2VsZWN0Q29udGV4dCh0aGlzLm1vZGVsLCBlKX1cbiAgICAgICAgb25Nb3VzZU91dD17ZSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICAgIG9uTW91c2VPdmVyPXtlID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLW1hdHJpeC1jZWxsLS1zZWxlY3RlZFwiICsgKHRoaXMubW9kZWwuaXNTZWxlY3RlZCA/IFwiIHN2Yy12aXNpYmxlXCIgOiBcIlwiKX0+PC9kaXY+XG5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cblxuICAgICAgICB7Y29udHJvbHN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1tYXRyaXgtY2VsbFwiLFxuICAocHJvcHM6IE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnN1cnZleSB8fFxuICAgICAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5oYXNGdW5jKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgfVxuICAgIHByaXZhdGUgb25Qcm9wQ2hhbmdlZEhhbmRsZXIgPSAoc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgY29uc3QgcmVhY3RpdmVQcm9wcyA9IFtcbiAgICAgICAgXCJzaG93UHJvZ3Jlc3NCYXJcIixcbiAgICAgICAgXCJwcm9ncmVzc0JhclR5cGVcIixcbiAgICAgICAgXCJjdXJyZW50UGFnZVZhbHVlXCJcbiAgICAgIF07XG4gICAgICBpZiAocmVhY3RpdmVQcm9wcy5pbmRleE9mKG9wdGlvbnMubmFtZSkgPCAwKSByZXR1cm47XG4gICAgICB2YXIgdmFsOiBhbnkgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhY3RpdmVQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSByZWFjdGl2ZVByb3BzW2ldO1xuICAgICAgICB2YWxbcHJvcE5hbWVdID0gdGhpcy5zdXJ2ZXlbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh2YWwpO1xuICAgIH07XG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXQgbG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0IGlzVG9wKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYXRpb24gPT0gXCJ0b3BcIjtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVG9wXG4gICAgICAgID8gdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPblRvcFxuICAgICAgICA6IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b207XG4gICAgfVxuICAgIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdi1wcm9ncmVzcy1cIiArIHRoaXMuc3VydmV5LnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICB7IHN1cnZleTogdGhpcy5zdXJ2ZXksIGNzczogdGhpcy5zdXJ2ZXkuY3NzLCBpc1RvcDogdGhpcy5pc1RvcCB9XG4gICAgICApO1xuICAgIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgTm90aWZpZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWVyQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgbm90aWZpZXI6IE5vdGlmaWVyO1xufVxuXG5leHBvcnQgY2xhc3MgTm90aWZpZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgTm90aWZpZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IE5vdGlmaWVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBnZXQgbm90aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubm90aWZpZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWVyO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm5vdGlmaWVyLmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5ub3RpZmllci5jc3N9PlxuICAgICAgICA8c3Bhbj57dGhpcy5ub3RpZmllci5tZXNzYWdlfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9iamVjdFNlbGVjdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIExpc3QgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBPYmplY3RTZWxlY3Rvck1vZGVsO1xufVxuY2xhc3MgT2JqZWN0U2VsZWN0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IG1vZGVsKCk6IE9iamVjdFNlbGVjdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmlzVmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtb2JqZWN0LXNlbGVjdG9yXCI+XG4gICAgICAgIDxMaXN0IG1vZGVsPXt0aGlzLm1vZGVsLmxpc3R9PjwvTGlzdD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtb2JqZWN0LXNlbGVjdG9yXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBPYmplY3RTZWxlY3RvckNvbXBvbmVudCxcbiAgICBwcm9wcyBhcyBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQge1xuICBCYXNlLFxuICBJQWN0aW9uLFxuICBTdXJ2ZXlNb2RlbCxcbiAgUGFnZU1vZGVsLFxuICB1bndyYXBcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3ZnSWNvbixcbiAgUG9wdXAsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgZ2V0TG9jU3RyaW5nLCBQYWdlTmF2aWdhdG9yVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgcGFnZXM6IEFycmF5PFBhZ2VNb2RlbD47XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWw6IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWw7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5UGFnZU5hdmlnYXRvclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlTmF2aWdhdG9yVmlld01vZGVsKFxuICAgICAgcHJvcHMuY3JlYXRvci5wYWdlc0NvbnRyb2xsZXJcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICBlbC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQub25zY3JvbGwgPSBmdW5jdGlvbiAodGhpczogR2xvYmFsRXZlbnRIYW5kbGVycywgZXY6IEV2ZW50KSB7XG4gICAgICAgIHJldHVybiBzZWxmLm1vZGVsLm9uQ29udGFpbmVyU2Nyb2xsKGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vbnNjcm9sbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwic3ZjLXBhZ2UtbmF2aWdhdG9yX19zZWxlY3RvclwiO1xuICAgIGlmICh0aGlzLm1vZGVsLmlzUG9wdXBPcGVuZWQpXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yX19zZWxlY3Rvci0tb3BlbmVkXCI7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yXCIgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3sgZGlzcGxheTogdGhpcy5tb2RlbC52aXNpYmxlID8gXCJmbGV4XCIgOiBcIm5vbmVcIiB9fT5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC50b2dnbGVQYWdlU2VsZWN0b3IoKX1cbiAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5wYWdlU2VsZWN0b3JDYXB0aW9ufVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvcl9fbmF2aWdhdG9yLWljb25cIlxuICAgICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwuaWNvbn1cbiAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgID48L1N2Z0ljb24+XG5cbiAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgIG1vZGVsPXt0aGlzLm1vZGVsLnBvcHVwTW9kZWx9XG4gICAgICAgICAgLy9jbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JfX3BvcHVwXCJcbiAgICAgICAgICA+PC9Qb3B1cD5cbiAgICAgICAgPC9kaXY+KX1cbiAgICAgICAge3RoaXMubW9kZWwuaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgPFN1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtXG4gICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgID48L1N1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9ySXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQWN0aW9uKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbSBhcyBCYXNlO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS1jb250ZW50XCI7XG4gICAgaWYgKHVud3JhcChpdGVtLmFjdGl2ZSkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS0tc2VsZWN0ZWRcIjtcbiAgICB9XG4gICAgaWYgKHVud3JhcChpdGVtLmRpc2FibGVkKSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbVwiPlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hY3Rpb24oaXRlbSk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIiB0aXRsZT17aXRlbS50aXRsZX0+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1zbWFsbCBzdmMtdGV4dC0tYm9sZFwiPntpdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2Pil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UsIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSVByb3BlcnR5R3JpZENvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFByb3BlcnR5R3JpZFZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R3JpZENvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElQcm9wZXJ0eUdyaWRDb21wb25lbnRQcm9wcywgYW55PiB7XG5cbiAgZ2V0IG1vZGVsKCk6IFByb3BlcnR5R3JpZFZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYnV0dG9uZ3JvdXBcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQcm9wZXJ0eUdyaWRDb21wb25lbnQ7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXByb3BlcnR5LWdyaWRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5R3JpZENvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiwgU3VydmV5RXJyb3IsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciwgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBzdXJ2ZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uO1xuICB9XG4gIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IsIGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnN1cnZleS5nZXRBbGxRdWVzdGlvbnMoKVswXTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uIGNyZWF0b3I9e3RoaXN9IGVsZW1lbnQ9e3F1ZXN0aW9ufT48L1N1cnZleVF1ZXN0aW9uPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24tZWRpdG9yLWNvbnRlbnRcIixcbiAgKHByb3BzOiBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlQYWdlLCBJU3VydmV5Q3JlYXRvciwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50RW1iZWRkZWRTdXJ2ZXkgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGVtYmVkZGVkU3VydmV5KCk6IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLmVsZW1lbnQgfHwgdGhpcy5wcm9wcy5xdWVzdGlvbikgYXMgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZW1iZWRkZWRTdXJ2ZXkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZW1iZWRkZWRTdXJ2ZXkuZW1iZWRkZWRTdXJ2ZXk7XG4gICAgaWYgKCFzdXJ2ZXkgfHwgIXN1cnZleS5jdXJyZW50UGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlQYWdlXG4gICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgIHBhZ2U9e3N1cnZleS5jdXJyZW50UGFnZX1cbiAgICAgIGNzcz17c3VydmV5LmNzc31cbiAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAvPjtcblxuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJlbWJlZGRlZHN1cnZleVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5RWxlbWVudEVtYmVkZGVkU3VydmV5LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tIFwiLi9BY3Rpb25CdXR0b25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2xlYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHNob3dDbGVhciA9ICh0aGlzLnF1ZXN0aW9uQmFzZSBhcyBhbnkpLnNob3dDbGVhcjtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25CYXNlLmlzUmVhZE9ubHkgJiYgc2hvd0NsZWFyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgY2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5saW5rQ2xlYXJCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvQ2xlYXJDbGljaygpfVxuICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLnF1ZXN0aW9uLmlzU2VsZWN0ZWR9XG4gICAgICAgICAgdGV4dD17ZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmNsZWFyXCIpfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICBjbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmxpbmtTZXRCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvTGlua0NsaWNrKCl9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMucXVlc3Rpb24uaXNTZWxlY3RlZH1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5fVxuICAgICAgICAgIHRleHQ9e3RoaXMucXVlc3Rpb24ubGlua1ZhbHVlVGV4dH1cbiAgICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi50b29sdGlwfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgIHt0aGlzLnJlbmRlckNsZWFyKCl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJsaW5rdmFsdWVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSZXN1bHRzSXRlbU1vZGVsLCBTdXJ2ZXlSZXN1bHRzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVJlc3VsdHNQcm9wcyB7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UmVzdWx0cyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5UmVzdWx0c1Byb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogU3VydmV5UmVzdWx0c01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleVJlc3VsdHNQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBpZiAocHJvcHMuc3VydmV5KSB7XG4gICAgICB0aGlzLm1vZGVsID0gbmV3IFN1cnZleVJlc3VsdHNNb2RlbChwcm9wcy5zdXJ2ZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlci10ZXh0XCI+e3RoaXMubW9kZWwuc3VydmV5UmVzdWx0c1RleHR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXItdHlwZXNcIj5cbiAgICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMubW9kZWwuc2VsZWN0VGFibGVDbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLmdldExvY1N0cmluZyhcImVkLnN1cnZleVJlc3VsdHNUYWJsZVwiKX1cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMubW9kZWwuaXNUYWJsZVNlbGVjdGVkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnNlbGVjdEpzb25DbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLmdldExvY1N0cmluZyhcImVkLnN1cnZleVJlc3VsdHNKc29uXCIpfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dGhpcy5tb2RlbC5pc0pzb25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucmVuZGVyUmVzdWx0QXNUZXh0KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlclJlc3VsdEFzVGFibGUoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUmVzdWx0QXNUZXh0KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5yZXN1bHRWaWV3VHlwZSAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190ZXh0IHN2ZC1saWdodC1iZy1jb2xvclwiPlxuICAgICAgICA8ZGl2Pnt0aGlzLm1vZGVsLnJlc3VsdFRleHR9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclJlc3VsdEFzVGFibGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLnJlc3VsdFZpZXdUeXBlICE9PSBcInRhYmxlXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190YWJsZSBzdmQtbGlnaHQtYmctY29sb3JcIj5cbiAgICAgICAgPHRhYmxlPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJzdmQtbGlnaHQtYmFja2dyb3VuZC1jb2xvclwiPlxuICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c1RpdGxlfVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c0Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+e1N1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLm1vZGVsLnJlc3VsdERhdGEpfTwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHN0YXRpYyByZW5kZXJSb3dzKGRhdGE6IEFycmF5PGFueT4pOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbSkgPT4gPFN1cnZleVJlc3VsdHNCeVJvdyBrZXk9e2l0ZW0uaWR9IHJvdz17aXRlbX0gLz4pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSZXN1bHRzQnlSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCByb3coKTogU3VydmV5UmVzdWx0c0l0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5yb3c7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDx0ciBvbkNsaWNrPXsoKSA9PiB0aGlzLnJvdy50b2dnbGUoKX0+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nTGVmdDogdGhpcy5yb3cudGV4dE1hcmdpbiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5pc05vZGUgPyAoXG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogdGhpcy5yb3cubWFya2VyTWFyZ2luIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcInN2ZC10ZXN0LXJlc3VsdHNfX21hcmtlciBcIiArICh0aGlzLnJvdy5jb2xsYXBzZWQgPyBcIlwiIDogXCJzdmQtdGVzdC1yZXN1bHRzX19tYXJrZXItLWV4cGFuZGVkXCIpfT5cbiAgICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1leHBhbmRfMTZ4MTZcIn1cbiAgICAgICAgICAgICAgICAgIHNpemU9ezE2fVxuICAgICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICA8c3Bhbj57dGhpcy5yb3cudGl0bGV9PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzTmFtZT17dGhpcy5yb3cuaXNOb2RlID8gXCJzdmQtdGVzdC1yZXN1bHRzX19ub2RlLXZhbHVlXCIgOiBcInN2ZC1kYXJrLWJvcmRlci1jb2xvclwifT5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5nZXRTdHJpbmcodGhpcy5yb3cuZGlzcGxheVZhbHVlKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPil9XG4gICAgICAgIHt0aGlzLnJvdy5pc05vZGUgJiYgIXRoaXMucm93LmNvbGxhcHNlZCA/IFN1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLnJvdy5kYXRhKSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTaWRlYmFyVGFiTW9kZWwsIFNpZGViYXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5QWN0aW9uQmFyLCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElTaWRlYmFyQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogU2lkZWJhck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTaWRlYmFyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBnZXQgbW9kZWwoKTogU2lkZWJhck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU2lkZWJhckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLmluaXRSZXNpemVNYW5hZ2VyKHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yZXNldFJlc2l6ZU1hbmFnZXIoKTtcbiAgfVxuICBwdWJsaWMgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IHN0eWxlID0geyBkaXNwbGF5OiAhdGhpcy5tb2RlbC52aXNpYmxlID8gXCJub25lXCIgOiBcIlwiIH07XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtc2lkZS1iYXJcIiArICh0aGlzLm1vZGVsLmZseW91dFBhbmVsTW9kZSA/IFwiIHN2Yy1mbHlvdXQtc2lkZS1iYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC50YWJzLm1hcCgoaXRlbSkgPT4gPFNpZGViYXJUYWIgaXRlbT17aXRlbX0ga2V5PXtpdGVtLmlkfSAvPik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IHN0eWxlPXt7IGRpc3BsYXk6ICF0aGlzLm1vZGVsLmhhc1Zpc2libGVUYWJzID8gXCJub25lXCIgOiBcIlwiIH19PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fc2hhZG93XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN2Yy1zaWRlLWJhcl9fd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC50b29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5oZWFkZXJUZXh0fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jb250ZW50XCI+XG4gICAgICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLWJ0biBzZC1idG4tLWFjdGlvbiBzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZS1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNvbGxhcHNlU2lkZWJhcigpfT4ge3RoaXMubW9kZWwuY2xvc2VUZXh0fSA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgU2lkZWJhclRhYiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogU2lkZWJhclRhYk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLml0ZW0udmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGhpcy5pdGVtLmNvbXBvbmVudE5hbWUsIHsgbW9kZWw6IHRoaXMuaXRlbS5tb2RlbCB9KTtcblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInN2Yy1zaWRlLWJhci10YWJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJUYWIsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTaWRlYmFyQ29tcG9uZW50O1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhckNvbXBvbmVudCwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcsIFNlcmlhbGl6ZXIsIEpzb25PYmplY3RQcm9wZXJ0eSwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZSwgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TG9jU3RyaW5nRWRpdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBiYXNlTW9kZWw6IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2U7XG4gIHByaXZhdGUgc3ZTdHJpbmdFZGl0b3JSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHByaXZhdGUgYmx1cnJlZEJ5RXNjYXBlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xuICAgIHRoaXMuYmFzZU1vZGVsID0gbmV3IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2UodGhpcy5sb2NTdHJpbmcsIHRoaXMuY3JlYXRvcik7XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuYmFzZU1vZGVsLmJsdXJFZGl0b3IgPSAoKSA9PiB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuYmx1cigpO1xuICAgICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LnNwZWxsY2hlY2sgPSBmYWxzZTtcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgZ2V0IGxvY1N0cmluZygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyLmxvY1N0cjtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHIuY3JlYXRvcjtcbiAgfVxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5lcnJvclRleHQ7XG4gIH1cblxuICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZjogU3VydmV5TG9jU3RyaW5nRWRpdG9yID0gdGhpcztcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcbiAgICB9O1xuICAgIGlmICh0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdKSB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHJldHVybjtcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwucGxhY2Vob2xkZXI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY29udGVudEVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5jb250ZW50RWRpdGFibGU7XG4gIH1cbiAgcHJpdmF0ZSBvbkJsdXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5zcGVsbGNoZWNrID0gZmFsc2U7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IGZhbHNlO1xuICAgIHRoaXMuanVzdEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbklucHV0KGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuZXJyb3JUZXh0O1xuICB9O1xuICBwcml2YXRlIGp1c3RGb2N1c2VkID0gZmFsc2U7XG4gIHByaXZhdGUgb25Gb2N1cyA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwub25Gb2N1cyhldmVudC5uYXRpdmVFdmVudCk7XG4gICAgdGhpcy5qdXN0Rm9jdXNlZCA9IHRydWU7XG4gIH07XG4gIHByaXZhdGUgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25LZXlEb3duKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5vbk1vdXNlVXAoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGRvbmUgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLmRvbmUoZXZlbnQpO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSBmYWxzZTtcbiAgfTtcbiAgcHJpdmF0ZSBlZGl0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJywgZmFsc2UsIG51bGwpO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSB0cnVlO1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uQ2xpY2soZXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGdldCBjbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmNsYXNzTmFtZSh0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYmFzZU1vZGVsLnNldExvY1N0cmluZyh0aGlzLmxvY1N0cmluZyk7XG4gICAgfVxuICAgIGxldCBjb250cm9sID0gbnVsbDtcbiAgICBpZiAodGhpcy5sb2NTdHJpbmcuaGFzSHRtbCkge1xuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuYmFzZU1vZGVsLmZvY3VzZWQgJiYgdGhpcy5sb2NTdHJpbmcudGV4dCB8fCB0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwgfTtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgcmVmPXt0aGlzLnN2U3RyaW5nRWRpdG9yUmVmfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxuICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZT17dGhpcy5jb250ZW50RWRpdGFibGV9XG4gICAgICAgICAgc3BlbGxDaGVjaz17ZmFsc2V9XG4gICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj17dGhpcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XG4gICAgICAgICAgLy8gc3R5bGU9e3RoaXMuc3R5bGV9XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX1cbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMub25Gb2N1c31cbiAgICAgICAgICBvbktleURvd249e3RoaXMub25LZXlEb3dufVxuICAgICAgICAgIG9uTW91c2VVcD17dGhpcy5vbk1vdXNlVXB9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMub25Gb2N1c31cbiAgICAgICAgICBvbktleURvd249e3RoaXMub25LZXlEb3dufVxuICAgICAgICAgIG9uTW91c2VVcD17dGhpcy5vbk1vdXNlVXB9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jbGFzc05hbWV9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2JvcmRlclwiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1lZGl0XCJcbiAgICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgICAgIGljb25OYW1lPXtcImljb24tZWRpdFwifVxuICAgICAgICAgICAgPjwvU3ZnSWNvbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtjb250cm9sfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2NvbnRyb2xzXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMuZXJyb3JUZXh0ID8gPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2Vycm9yXCI+e3RoaXMuZXJyb3JUZXh0fTwvc3Bhbj4gOiBcIlwifVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIGVkaXRhYmxlU3RyaW5nUmVuZGVyZXJOYW1lLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7XG4gIEJhc2UsXG4gIFF1ZXN0aW9uLFxuICBTdXJ2ZXlFcnJvcixcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5TG9jU3RyaW5nVmlld2VyLFxuICBTdXJ2ZXlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgSUNyZWF0b3JPcHRpb25zLFxuICBDcmVhdG9yQmFzZSxcbiAgSVRhYmJlZE1lbnVJdGVtXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBUYWJiZWRNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4vVGFiYmVkTWVudVwiO1xuaW1wb3J0IHsgTm90aWZpZXJDb21wb25lbnQgfSBmcm9tIFwiLi9Ob3RpZmllclwiO1xuaW1wb3J0IHsgU3ZnQnVuZGxlQ29tcG9uZW50IH0gZnJvbSBcIi4vU3ZnQnVuZGxlXCI7XG5cbmludGVyZmFjZSBJU3VydmV5Q3JlYXRvckNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogU3VydmV5Q3JlYXRvcjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290Tm9kZSA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5pbml0S2V5Ym9hcmRTaG9ydGN1dHModGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgICB0aGlzLmNyZWF0b3IuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIodGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5yZW1vdmVLZXlib2FyZFNob3J0Y3V0cyh0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICAgIHRoaXMuY3JlYXRvci5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgfVxuICBwcml2YXRlIHJvb3ROb2RlOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgaWYgKGNyZWF0b3IuaXNDcmVhdG9yRGlzcG9zZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNyZWF0b3JDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yXCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwiIHN2Yy1jcmVhdG9yLS1tb2JpbGVcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGFyZWFDbGFzc05hbWUgPSBcInN2Yy1mdWxsLWNvbnRhaW5lciBzdmMtY3JlYXRvcl9fYXJlYSBzdmMtZmxleC1jb2x1bW5cIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaGF2ZUNvbW1lcmNpYWxMaWNlbnNlID8gXCJcIiA6IFwiIHN2Yy1jcmVhdG9yX19hcmVhLS13aXRoLWJhbm5lclwiKTtcbiAgICBjb25zdCBjb250ZW50V3JhcHBlckNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlciBzdmMtZmxleC1yb3dcIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCIgc3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlci0tZm9vdGVyLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGZ1bGxDb250YWluZXJDbGFzc05hbWUgPSBcInN2Yy1mbGV4LXJvdyBzdmMtZnVsbC1jb250YWluZXJcIiArIChcIiBzdmMtY3JlYXRvcl9fc2lkZS1iYXItLVwiICsgdGhpcy5jcmVhdG9yLnNpZGViYXJMb2NhdGlvbik7XG4gICAgbGV0IGxpY2Vuc2VCYW5uZXIgPSBudWxsO1xuICAgIGlmICghdGhpcy5wcm9wcy5jcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZSkge1xuICAgICAgbGljZW5zZUJhbm5lciA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fYmFubmVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX25vbi1jb21tZXJjaWFsLXRleHRcIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3N1cnZleWpzLmlvL2J1eVwiPlxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jcmVhdG9yLmxpY2Vuc2VUZXh0fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICAvL0FNOiB3aWR0aCB1bnJlY29nbml6ZWQgYnkgcmVhY3RcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NyZWF0b3JDbGFzc05hbWV9IHJlZj17dGhpcy5yb290Tm9kZX0+XG4gICAgICAgIDxTdmdCdW5kbGVDb21wb25lbnQ+PC9TdmdCdW5kbGVDb21wb25lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXthcmVhQ2xhc3NOYW1lfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZnVsbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtbiBzdmMtZmxleC1yb3dfX2VsZW1lbnQgc3ZjLWZsZXgtcm93X19lbGVtZW50LS1ncm93aW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvcC1iYXJcIj5cbiAgICAgICAgICAgICAgICB7KGNyZWF0b3Iuc2hvd1RhYnMgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiYmVkLW1lbnUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8VGFiYmVkTWVudUNvbXBvbmVudCBtb2RlbD17Y3JlYXRvci50YWJiZWRNZW51fT48L1RhYmJlZE1lbnVDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gOiBudWxsKX1cbiAgICAgICAgICAgICAgICB7KGNyZWF0b3Iuc2hvd1Rvb2xiYXIgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2NyZWF0b3IudG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y29udGVudFdyYXBwZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtaG9sZGVyIHN2Yy1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQWN0aXZlVGFiKCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mb290ZXItYmFyXCI+XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLmlzTW9iaWxlVmlldyA/XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYmFyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17Y3JlYXRvci5mb290ZXJUb29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgOiBudWxsKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlclNpZGViYXIoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7bGljZW5zZUJhbm5lcn1cbiAgICAgICAgICA8Tm90aWZpZXJDb21wb25lbnRcbiAgICAgICAgICAgIGNyZWF0b3I9e2NyZWF0b3J9XG4gICAgICAgICAgICBub3RpZmllcj17Y3JlYXRvci5ub3RpZmllcn1cbiAgICAgICAgICA+PC9Ob3RpZmllckNvbXBvbmVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlckFjdGl2ZVRhYigpIHtcbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNyZWF0b3IudGFicy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNyZWF0b3IudGFic1tpXS5pZCA9PT0gY3JlYXRvci5hY3RpdmVUYWIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3JlYXRvclRhYihjcmVhdG9yLnRhYnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZW5kZXJDcmVhdG9yVGFiKHRhYjogSVRhYmJlZE1lbnVJdGVtKSB7XG4gICAgaWYgKHRhYi52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNyZWF0b3I6IENyZWF0b3JCYXNlID0gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9ICEhdGFiLnJlbmRlclRhYlxuICAgICAgPyB0YWIucmVuZGVyVGFiKClcbiAgICAgIDogUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRhYi5jb21wb25lbnRDb250ZW50LCB7XG4gICAgICAgIGNyZWF0b3I6IGNyZWF0b3IsXG4gICAgICAgIHN1cnZleTogY3JlYXRvci5zdXJ2ZXksXG4gICAgICAgIGRhdGE6IHRhYi5kYXRhLm1vZGVsXG4gICAgICB9KTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yLXRhYlwiICsgKGNyZWF0b3IudG9vbGJveExvY2F0aW9uID09IFwicmlnaHRcIiA/IFwiIHN2Yy1jcmVhdG9yX190b29sYm94LS1yaWdodFwiIDogXCJcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAga2V5PXt0YWIuaWR9XG4gICAgICAgIGlkPXtcInNjcm9sbGFibGVEaXYtXCIgKyB0YWIuaWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgPlxuICAgICAgICB7Y29tcG9uZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJTaWRlYmFyKCkge1xuICAgIGlmICghIXRoaXMuY3JlYXRvci5zaWRlYmFyKSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCJzdi1tb2JpbGUtc2lkZS1iYXJcIiA6IFwiXCI7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICB7UmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXNpZGUtYmFyXCIsIHsgbW9kZWw6IHRoaXMuY3JlYXRvci5zaWRlYmFyIH0pfVxuICAgICAgICA8L2Rpdj4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3IgZXh0ZW5kcyBDcmVhdG9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElDcmVhdG9yT3B0aW9ucyA9IHt9LCBvcHRpb25zMj86IElDcmVhdG9yT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMsIG9wdGlvbnMyKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKHRhcmdldDogc3RyaW5nIHwgSFRNTEVsZW1lbnQpIHtcbiAgICBsZXQgbm9kZTogSFRNTEVsZW1lbnQgPSB0YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpO1xuICAgIH1cbiAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKG5vZGUpO1xuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIDxSZWFjdC5TdHJpY3RNb2RlPlxuICAgICAgICA8U3VydmV5Q3JlYXRvckNvbXBvbmVudCBjcmVhdG9yPXt0aGlzfSAvPlxuICAgICAgPC9SZWFjdC5TdHJpY3RNb2RlPixcbiAgICAgIG5vZGVcbiAgICApO1xuICB9XG5cbiAgLy9JU3VydmV5Q3JlYXRvclxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oXG4gICAgICBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpc1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHJlbmRlckVycm9yKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGVycm9yOiBTdXJ2ZXlFcnJvcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGtleT17a2V5fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVycm9yLmljb259IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pdGVtfT5cbiAgICAgICAgICA8U3VydmV5TG9jU3RyaW5nVmlld2VyIGxvY1N0cj17ZXJyb3IubG9jVGV4dH0gLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleS13aWRnZXRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleSwgcHJvcHMpO1xufSk7XG4iLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHN2Z0J1bmRsZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3ZnQnVuZGxlQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gc3ZnQnVuZGxlO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfT48L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtc3ZnLWJ1bmRsZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3ZnQnVuZGxlQ29tcG9uZW50LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJVGFiYmVkTWVudUl0ZW0sIFRhYmJlZE1lbnVJdGVtLCBUYWJiZWRNZW51Q29udGFpbmVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIElBY3Rpb24sXG4gIEFjdGlvbixcbiAgUmVzcG9uc2l2aXR5TWFuYWdlcixcbiAgQWRhcHRpdmVBY3Rpb25Db250YWluZXJcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJiZWRNZW51Q29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogVGFiYmVkTWVudUNvbnRhaW5lcjtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYmJlZE1lbnVDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYmJlZE1lbnVDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtYW5hZ2VyOiBSZXNwb25zaXZpdHlNYW5hZ2VyO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMubW9kZWwucmVuZGVyZWRBY3Rpb25zLm1hcCgoaXRlbSkgPT4gPFRhYmJlZE1lbnVJdGVtV3JhcHBlciBpdGVtPXtpdGVtfSBrZXk9e2l0ZW0uaWR9IC8+KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPVwic3ZjLXRhYmJlZC1tZW51XCI+XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy5tb2RlbCxcbiAgICAgIFwiLnN2Yy10YWJiZWQtbWVudS1pdGVtLWNvbnRhaW5lcjpub3QoLnN2LWRvdHMpPi5zdi1hY3Rpb25fX2NvbnRlbnRcIlxuICAgICk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tYW5hZ2VyICYmICh0aGlzLm1hbmFnZXIuZGlzcG9zZSgpKTtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59XG5cbmNsYXNzIFRhYmJlZE1lbnVJdGVtV3JhcHBlciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBhbnksXG4gIGFueVxuPiB7XG5cbiAgcHJpdmF0ZSBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNzczogc3RyaW5nID0gXCJzdmMtdGFiYmVkLW1lbnUtaXRlbS1jb250YWluZXJcIjtcbiAgICBpZiAodGhpcy5pdGVtLmNzcykge1xuICAgICAgY3NzICs9IFwiIFwiICsgdGhpcy5pdGVtLmNzcztcbiAgICB9XG4gICAgY3NzICs9ICghdGhpcy5pdGVtLmlzVmlzaWJsZSA/IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIgOiBcIlwiKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMuaXRlbS5jb21wb25lbnQgfHwgXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiLFxuICAgICAgeyBpdGVtOiB0aGlzLml0ZW0gfVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4ga2V5PXt0aGlzLml0ZW0uaWR9IGNsYXNzTmFtZT17Y3NzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7Y29tcG9uZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmJlZE1lbnVJdGVtQ29tcG9uZW50UHJvcHMge1xuICBpdGVtOiBBY3Rpb247XG59XG5leHBvcnQgY2xhc3MgVGFiYmVkTWVudUl0ZW1Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYmJlZE1lbnVJdGVtQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtO1xuICAgIGxldCBjbGFzc05hbWU6IHN0cmluZyA9IFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIjtcbiAgICBpZiAoaXRlbS5hY3RpdmUpIGNsYXNzTmFtZSArPSBcIiBzdmMtdGFiYmVkLW1lbnUtaXRlbS0tc2VsZWN0ZWRcIjtcbiAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIWl0ZW0uZW5hYmxlZClcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtdGFiYmVkLW1lbnUtaXRlbS0tZGlzYWJsZWRcIjtcbiAgICBsZXQgdGl0bGVDbGFzc05hbWU6IHN0cmluZyA9XG4gICAgICBcInN2Yy10ZXh0IHN2Yy10YWJiZWQtbWVudS1pdGVtX190ZXh0IHN2Yy10ZXh0LS1ub3JtYWxcIjtcbiAgICBpZiAoaXRlbS5hY3RpdmUpIHRpdGxlQ2xhc3NOYW1lICs9IFwiIHN2Yy10ZXh0LS1ib2xkXCI7XG5cbiAgICByZXR1cm4gKGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpID0+IGl0ZW0uYWN0aW9uKGl0ZW0pfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aXRsZUNsYXNzTmFtZX0+e2l0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiYmVkTWVudUl0ZW1Db21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbmV4cG9ydCBkZWZhdWx0IFRhYmJlZE1lbnVDb21wb25lbnQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIENlbGxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc0RyYWdnZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXt0aGlzLm1vZGVsLnN1cnZleUVsZW1lbnQubmFtZX1cbiAgICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19hZG9ybmVyXCJ9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCIgc3ZjLXF1ZXN0aW9uX19jb250ZW50LS1zZWxlY3RlZC1uby1ib3JkZXIgc3ZjLXF1ZXN0aW9uX19jb250ZW50XCJ9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWNlbGwtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENlbGxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgSXRlbVZhbHVlLCBRdWVzdGlvblNlbGVjdEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBDZWxsUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc0RyYWdnZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25TZWxlY3RCYXNlO1xuICAgIGNvbnN0IHRleHRTdHlsZSA9ICh0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSkudGV4dFN0eWxlO1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXt0aGlzLm1vZGVsLnN1cnZleUVsZW1lbnQubmFtZX1cbiAgICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19hZG9ybmVyXCJ9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCIgc3ZjLXF1ZXN0aW9uX19jb250ZW50LS1zZWxlY3RlZC1uby1ib3JkZXIgc3ZjLXF1ZXN0aW9uX19jb250ZW50XCJ9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZXNcIj5cbiAgICAgICAgICAgICAge3F1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcChcbiAgICAgICAgICAgICAgICAoaXRlbTogSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlXCJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgZWRpdGFibGVfY2hvaWNlXyR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge1JlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUocXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAgIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IHF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdHlsZTogdGV4dFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZDogcXVlc3Rpb24udmFsdWUgPT09IGl0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtY2VsbC1kcm9wZG93bi1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2VsbFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBCYXNlLCBQYWdlTW9kZWwsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFBvcHVwLFxuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlQYWdlLFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIENyZWF0b3JCYXNlLFxuICBQYWdlVmlld01vZGVsLFxuICBTdXJ2ZXlIZWxwZXIsXG4gIHRvZ2dsZUhvdmVyZWRcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcblxuaW50ZXJmYWNlIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIHBhZ2U6IFBhZ2VNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsOiBQYWdlVmlld01vZGVsO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFBhZ2VWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnBhZ2VcbiAgICApO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLm9uUGFnZVNlbGVjdGVkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoISF0aGlzLnJvb3RSZWYuY3VycmVudCkge1xuICAgICAgICBTdXJ2ZXlIZWxwZXIuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0aGlzLnJvb3RSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMubW9kZWwuZGlzcG9zZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5tb2RlbCAmJlxuICAgICAgdGhpcy5tb2RlbC5pc1BhZ2VMaXZlICYmXG4gICAgICAhIXRoaXMubW9kZWwucGFnZSAmJlxuICAgICAgISF0aGlzLm1vZGVsLnBhZ2Uuc3VydmV5XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXBhZ2VfX2NvbnRlbnQgXCIgKyB0aGlzLm1vZGVsLmNzc31cbiAgICAgICAgaWQ9e3RoaXMucHJvcHMucGFnZS5pZH1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5zZWxlY3QodGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSk7XG4gICAgICAgIH19XG4gICAgICAgIG9uTW91c2VMZWF2ZT17KGUpID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlckhlYWRlcigpfVxuICAgICAgICB7dGhpcy5yZW5kZXJDb250ZW50KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckZvb3RlcigpfVxuICAgICAgPC9kaXY+KVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFN1cnZleVBhZ2UgcGFnZT17dGhpcy5wcm9wcy5wYWdlfSBzdXJ2ZXk9e3RoaXMucHJvcHMuc3VydmV5fSBjcmVhdG9yPXt0aGlzLnByb3BzLmNyZWF0b3J9IGNzcz17dGhpcy5tb2RlbC5jc3N9PjwvU3VydmV5UGFnZT4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZV9fY29udGVudC1hY3Rpb25zXCI+XG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLmFjdGlvbkNvbnRhaW5lcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgPC9kaXY+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuYWxsb3dFZGl0KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsID0gdGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWJ0blwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uKHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpO1xuICAgICAgfX1cbiAgICAgIG9uTW91c2VPdmVyPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlclN0b3BwZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAge2F0dGFjaEtleTJjbGljayg8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5hY3Rpb24oKTtcbiAgICAgICAgfX1cbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3JcIlxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYWdlX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yLWljb25cIj5cbiAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgaWNvbk5hbWU9e3F1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgICBzaXplPXsyNH1cbiAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxQb3B1cCBtb2RlbD17cXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgPC9idXR0b24+KX1cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXBhZ2VcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUGFuZWxBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlcl9mcmFtZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5wbGFjZWhvbGRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uKCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PikgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHshdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCAmJiB0aGlzLm1vZGVsLnN1cnZleUVsZW1lbnQuaXNQYW5lbCAmJiB0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayhcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24oKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmFjdGlvbigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcXVlc3Rpb24tdHlwZS1zZWxlY3RvclwiXG4gICAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yLWljb25cIj5cbiAgICAgICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmljb25OYW1lfVxuICAgICAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwucG9wdXBNb2RlbH0+PC9Qb3B1cD5cbiAgICAgICAgICA8L2J1dHRvbj4pfVxuICAgICAgICA8L2Rpdj4pIDogbnVsbH1cblxuICAgICAge3N1cGVyLnJlbmRlckZvb3RlcigpfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcGFuZWxcIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFBhbmVsQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbiAgY29tcG9uZW50RGF0YTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmICF0aGlzLm1vZGVsLmlzRHJhZ2dlZDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFsbG93SW50ZXJhY3Rpb25zID0gdGhpcy5tb2RlbC5zdXJ2ZXlFbGVtZW50XG4gICAgICAuaXNJbnRlcmFjdGl2ZURlc2lnbkVsZW1lbnQ7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudChhbGxvd0ludGVyYWN0aW9ucyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuc3VydmV5RWxlbWVudC5uYW1lIHx8IG51bGx9XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIiArIHRoaXMubW9kZWwucm9vdENzcygpfVxuICAgICAgICBvbk1vdXNlT3V0PXtlID0+IGFsbG93SW50ZXJhY3Rpb25zICYmIHRvZ2dsZUhvdmVyZWQoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9e2UgPT4gYWxsb3dJbnRlcmFjdGlvbnMgJiYgdG9nZ2xlSG92ZXJlZChlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoYWxsb3dJbnRlcmFjdGlvbnM6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnJlbmRlckVsZW1lbnRDb250ZW50KCk7XG4gICAgaWYgKCFhbGxvd0ludGVyYWN0aW9ucykgcmV0dXJuIDw+eyBjb250ZW50IH17dGhpcy5yZW5kZXJGb290ZXIoKX08Lz47XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fY29udGVudCBcIiArIHRoaXMubW9kZWwuY3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgICB7dGhpcy5yZW5kZXJGb290ZXIoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1xdWVzdGlvbi1oZWFkZXJcIiwgeyBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXF1ZXN0aW9uLWZvb3RlclwiLCB7IGNsYXNzTmFtZTogXCJzdmMtcXVlc3Rpb25fX2NvbnRlbnQtYWN0aW9uc1wiLCBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICB7dGhpcy5yZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyX2ZyYW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gICAgY29uc3QgdGV4dFN0eWxlID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS50ZXh0U3R5bGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VzXCI+XG4gICAgICAgIHsocXVlc3Rpb24udmlzaWJsZUNob2ljZXMgfHwgW10pLm1hcChcbiAgICAgICAgICAoaXRlbTogSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlXCJcbiAgICAgICAgICAgICAga2V5PXtgZWRpdGFibGVfY2hvaWNlXyR7aW5kZXh9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge1JlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUocXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsLFxuICAgICAgICAgICAgICAgIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgIFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IHF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHRleHRTdHlsZTogdGV4dFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZDogcXVlc3Rpb24udmFsdWUgPT09IGl0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIClcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckZvb3RlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJGb290ZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWV9PlxuICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5wcm9wcy5tb2RlbC5hY3Rpb25Db250YWluZXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWZvb3RlclwiLFxuICAocHJvcHM6IFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XcmFwcGVyRm9vdGVyLCBwcm9wcyk7XG4gIH1cbik7XG5cbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLm1vZGVsLmFsbG93RHJhZ2dpbmcpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2RyYWctYXJlYVwifVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT5cbiAgICAgICAgICB0aGlzLnByb3BzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2RyYWctZWxlbWVudFwifVxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1oZWFkZXJcIixcbiAgKHByb3BzOiBRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV3JhcHBlckhlYWRlciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwsXG4gIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbFxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25JbWFnZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaW1hZ2VNb2RlbCgpOiBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmltYWdlTW9kZWwucXVlc3Rpb25Sb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICAgICAgfX1cbiAgICAgIC8+XG5cbiAgICAgIHtzdXBlci5yZW5kZXJIZWFkZXIoKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNcIj5cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dFZGl0ID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5pbWFnZU1vZGVsLmNob29zZUZpbGUodGhpcy5pbWFnZU1vZGVsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWZpbGVcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pbWFnZS1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25JbWFnZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCxcbiAgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCByYXRpbmdNb2RlbCgpOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5yYXRpbmdNb2RlbDtcbiAgICByZXR1cm4gKDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udHJvbHMgc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICB7bW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX3JlbW92ZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXttb2RlbC5yZW1vdmVUb29sdGlwfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW9kZWwucmVtb3ZlSXRlbShtb2RlbCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tcmVtb3ZlXzE2eDE2XCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAge21vZGVsLmFsbG93QWRkID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17bW9kZWwuYWRkVG9vbHRpcH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG1vZGVsLmFkZEl0ZW0obW9kZWwpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLWFkZF8xNngxNlwifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgIDwvPik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJhdGluZy1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRlbnRcIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbldpZGdldEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCB3aWRnZXRNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtd2lkZ2V0X19jb250ZW50XCJ9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy13aWRnZXQtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV2lkZ2V0QWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUm93Vmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5pbnRlcmZhY2UgUm93V3JhcHBlckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcm93OiBRdWVzdGlvblJvd01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUm93V3JhcHBlciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBSb3dWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBSb3dWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucm93LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAga2V5PXtcInN2Yy1yb3ctXCIgKyB0aGlzLnByb3BzLnJvdy5pZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXN9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yb3dcIixcbiAgKHByb3BzOiBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSb3dXcmFwcGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJkZWNsYXJlIHZhciBSZWZsZWN0OmFueTtcblxuZXhwb3J0IHZhciBfX2RlY29yYXRlID0gZnVuY3Rpb24oXG4gIGRlY29yYXRvcnM6IGFueSxcbiAgdGFyZ2V0OiBhbnksXG4gIGtleTogYW55LFxuICBkZXNjOiBhbnlcbikge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgciA9XG4gICAgICBjIDwgM1xuICAgICAgICA/IHRhcmdldFxuICAgICAgICA6IGRlc2MgPT09IG51bGxcbiAgICAgICAgICA/IChkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkpXG4gICAgICAgICAgOiBkZXNjLFxuICAgIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKVxuICAgIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZVxuICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgaWYgKChkID0gZGVjb3JhdG9yc1tpXSkpXG4gICAgICAgIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9XG4gIE9iamVjdFtcImFzc2lnblwiXSB8fFxuICBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBwIGluIHMpXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRhcmdldFtwXSA9IHNbcF07XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHModGhpc0NsYXNzLCBiYXNlQ2xhc3MpIHtcbiAgZm9yICh2YXIgcCBpbiBiYXNlQ2xhc3MpXG4gICAgaWYgKGJhc2VDbGFzcy5oYXNPd25Qcm9wZXJ0eShwKSkgdGhpc0NsYXNzW3BdID0gYmFzZUNsYXNzW3BdO1xuICBmdW5jdGlvbiBfXygpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdGhpc0NsYXNzO1xuICB9XG4gIHRoaXNDbGFzcy5wcm90b3R5cGUgPVxuICAgIGJhc2VDbGFzcyA9PT0gbnVsbFxuICAgICAgPyBPYmplY3QuY3JlYXRlKGJhc2VDbGFzcylcbiAgICAgIDogKChfXy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MucHJvdG90eXBlKSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fc3ByZWFkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufTtcbiIsImV4cG9ydCBsZXQgVmVyc2lvbjogc3RyaW5nO1xuVmVyc2lvbiA9IGAke3Byb2Nlc3MuZW52LlZFUlNJT059YDtcblxuLy8gaW1wb3J0IFwiQHN1cnZleS9jcmVhdG9yL3N1cnZleS1jcmVhdG9yLWNvcmUuY3NzXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9TdXJ2ZXlDcmVhdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9Sb3dcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uSGVhZGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25Gb290ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uUmF0aW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25XaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9DZWxsUXVlc3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9DZWxsUXVlc3Rpb25Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1BhZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9QYW5lbFwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vTG9nb0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25MaW5rVmFsdWVcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkVtYmVkZGVkU3VydmV5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25FZGl0b3JDb250ZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vSXRlbVZhbHVlV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0ltYWdlSXRlbVZhbHVlV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL01hdHJpeENlbGxXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUmVzdWx0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvVG9vbGJveEl0ZW1cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L1Rvb2xib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L0FkYXB0aXZlVG9vbGJveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1RhYmJlZE1lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9Ob3RpZmllclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL05hdmlnYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9TaWRlQmFyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0FjdGlvbkJ1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1N0cmluZ0VkaXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9EZXNpZ25lclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvRW1iZWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0pzb25FZGl0b3JBY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0pzb25FZGl0b3JUZXh0YXJlYVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvTG9naWNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1ByZXZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1RyYW5zbGF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9TdXJ2ZXlTaW11bGF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL2V2ZW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL09iamVjdFNlbGVjdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUHJvcGVydHlHcmlkXCI7XG5cbmV4cG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgbG9jYWxpemF0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IHN2Z0J1bmRsZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdXJ2ZXlMb2dpYywgU3VydmV5TG9naWNVSSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgSVN1cnZleUNyZWF0b3JPcHRpb25zLCBJUHJvcGVydHlHcmlkRWRpdG9yIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsLCBQcm9wZXJ0eUdyaWRFZGl0b3JDb2xsZWN0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN0eWxlc01hbmFnZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiOyIsImltcG9ydCB7IElQb3J0YWJsZURyYWdFdmVudCwgSVBvcnRhYmxlTW91c2VFdmVudCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdE1vdXNlRXZlbnQgaW1wbGVtZW50cyBJUG9ydGFibGVNb3VzZUV2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50LCBNb3VzZUV2ZW50Pikge31cbiAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgIHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxuICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgZ2V0IGNhbmNlbEJ1YmJsZSgpOiBib29sZWFuIHtcbiAgICAvL3JldHVybiB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2V0IGNhbmNlbEJ1YmJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIC8vdGhpcy5ldmVudC5jYW5jZWxCdWJibGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdGFyZ2V0KCk6IEV2ZW50VGFyZ2V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQudGFyZ2V0O1xuICB9XG4gIGdldCBjdXJyZW50VGFyZ2V0KCk6IEV2ZW50VGFyZ2V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY3VycmVudFRhcmdldDtcbiAgfVxuICBnZXQgY2xpZW50WCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmNsaWVudFg7XG4gIH1cbiAgZ2V0IGNsaWVudFkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jbGllbnRZO1xuICB9XG4gIGdldCBvZmZzZXRYKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQubmF0aXZlRXZlbnQub2Zmc2V0WDtcbiAgfVxuICBnZXQgb2Zmc2V0WSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50Lm9mZnNldFk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0RHJhZ0V2ZW50IGV4dGVuZHMgUmVhY3RNb3VzZUV2ZW50XG4gIGltcGxlbWVudHMgSVBvcnRhYmxlRHJhZ0V2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGV2ZW50OiBSZWFjdC5EcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSB7XG4gICAgc3VwZXIoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IGRhdGFUcmFuc2ZlcigpOiBEYXRhVHJhbnNmZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwsIFBhZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleUhlYWRlclxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgVGFiRGVzaWduZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFnZU5hdmlnYXRvciB9IGZyb20gXCIuLi9QYWdlTmF2aWdhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uIH0gZnJvbSBcIi4uL05hdmlnYXRpb25cIjtcblxuaW50ZXJmYWNlIElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogVGFiRGVzaWduZXJWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJEZXNpZ25lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGFiRGVzaWduZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdG9yO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVueVVwZGF0ZSA9ICgpID0+IHtcbiAgICB0aGlzLmRlbnlDb21wb25lbnRVcGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsb3dVcGRhdGUgPSAoKSA9PiB7XG4gICAgdGhpcy5hbGxvd0NvbXBvbmVudFVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREcmFnRHJvcEV2ZW50cyA9ICgpID0+IHtcbiAgICB0aGlzLmNyZWF0b3Iub25CZWZvcmVEcm9wLmFkZCh0aGlzLmRlbnlVcGRhdGUpO1xuICAgIHRoaXMuY3JlYXRvci5vbkFmdGVyRHJvcC5hZGQodGhpcy5hbGxvd1VwZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRHJhZ0Ryb3BFdmVudHMgPSAoKSA9PiB7XG4gICAgdGhpcy5jcmVhdG9yLm9uQmVmb3JlRHJvcC5yZW1vdmUodGhpcy5kZW55VXBkYXRlKTtcbiAgICB0aGlzLmNyZWF0b3Iub25BZnRlckRyb3AucmVtb3ZlKHRoaXMuYWxsb3dVcGRhdGUpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmFkZERyYWdEcm9wRXZlbnRzKCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY2xlYXJEcmFnRHJvcEV2ZW50cygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKTogQXJyYXk8QmFzZT4ge1xuICAgIHJldHVybiBbdGhpcy5tb2RlbCwgdGhpcy5tb2RlbC5zdXJ2ZXldO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJlZFBhZ2VzQ2FjaGU6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRQYWdlcygpOiBKU1guRWxlbWVudFtdIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZSAhPT0gXCJwYWdlc1wiKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZSA9IHt9O1xuICAgIH1cbiAgICBjb25zdCByZW5kZXJlZFBhZ2VzID0gW107XG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLmNyZWF0b3Iuc3VydmV5LnBhZ2VzO1xuXG4gICAgcGFnZXMuZm9yRWFjaCgocGFnZSwgaW5kZXgpID0+IHtcbiAgICAgIGxldCBjYWNoZWRQYWdlID0gdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZS5pZF07XG4gICAgICBpZiAoIWNhY2hlZFBhZ2UpIHtcbiAgICAgICAgY2FjaGVkUGFnZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2UsIGluZGV4KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZS5pZF0gPSBjYWNoZWRQYWdlO1xuICAgICAgfVxuICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKGNhY2hlZFBhZ2UpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubW9kZWwuc2hvd05ld1BhZ2UpIHtcbiAgICAgIHJlbmRlcmVkUGFnZXMucHVzaCh0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtcGFnZVwiLCB0aGlzLm1vZGVsLm5ld1BhZ2UuaWQgKyBcIi1naG9zdC1uZXctcGFnZVwiKSk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJlZFBhZ2VzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVSZW5kZXJlZFBhZ2UocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXBhZ2VcIn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1wYWdlPXtwYWdlLm5hbWV9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3BhZ2UubmFtZX1cbiAgICAgICAga2V5PXtwYWdlLmlkICsgXCItXCIgKyBpbmRleH1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVyUGFnZShwYWdlKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJOZXdQYWdlKGNsYXNzTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZyA9IFwiXCIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17a2V5fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e1wibmV3R2hvc3RQYWdlXCJ9XG4gICAgICAgID5cbiAgICAgICAgICB7ISF0aGlzLm1vZGVsLm5ld1BhZ2UgPyB0aGlzLnJlbmRlclBhZ2UodGhpcy5tb2RlbC5uZXdQYWdlKSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYWdlKHBhZ2VWOiBQYWdlTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1wYWdlXCIsIHsgc3VydmV5OiB0aGlzLmNyZWF0b3Iuc3VydmV5LCBwYWdlOiBwYWdlViwgY3JlYXRvcjogdGhpcy5jcmVhdG9yIH0pO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGRlc2lnbmVyVGFiQ2xhc3NOYW1lID0gXCJzdmMtdGFiLWRlc2lnbmVyIFwiICsgdGhpcy5tb2RlbC5nZXRSb290Q3NzKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmlzVG9vbGJveFZpc2libGUgPyBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtYWRhcHRpdmUtdG9vbGJveFwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3IgfSkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Rlc2lnbmVyVGFiQ2xhc3NOYW1lfSBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNsaWNrRGVzaWduZXIoKX0+XG4gICAgICAgICAge3RoaXMubW9kZWwuc2hvd1BsYWNlaG9sZGVyID8gdGhpcy5yZW5kZXJQbGFjZUhvbGRlcigpIDogdGhpcy5yZW5kZXJUYWJDb250ZW50KCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyUGxhY2VIb2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXJfX3BsYWNlaG9sZGVyLWNvbnRhaW5lclwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXItcGxhY2Vob2xkZXItdGV4dCBzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtZGVzaWduZXItcGxhY2Vob2xkZXItcGFnZVwiKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuXG4gIHJlbmRlclRhYkNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLmNyZWF0b3Iuc3VydmV5O1xuXG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5nZXREZXNpZ25lckNzcygpfT5cbiAgICAgICAgeyF0aGlzLmNyZWF0b3IuYWxsb3dFZGl0U3VydmV5VGl0bGUgPyBudWxsIDpcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lci1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxTdXJ2ZXlIZWFkZXIgc3VydmV5PXtzdXJ2ZXl9PjwvU3VydmV5SGVhZGVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxTdXJ2ZXlOYXZpZ2F0aW9uIHN1cnZleT17c3VydmV5fSBsb2NhdGlvbj1cInRvcFwiIC8+XG4gICAgICAgIHt0aGlzLmdldFJlbmRlcmVkUGFnZXMoKX1cbiAgICAgICAgPFN1cnZleU5hdmlnYXRpb25cbiAgICAgICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgICAgICBsb2NhdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgY3NzPXtzdXJ2ZXkuY3NzfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7dGhpcy5jcmVhdG9yLnNob3dQYWdlTmF2aWdhdG9yID9cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiLWRlc2lnbmVyX19wYWdlLW5hdmlnYXRvclwiPjxTdXJ2ZXlQYWdlTmF2aWdhdG9yXG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgIHBhZ2VzPXt0aGlzLmNyZWF0b3IucGFnZXNDb250cm9sbGVyLnBhZ2VzfVxuICAgICAgICA+PC9TdXJ2ZXlQYWdlTmF2aWdhdG9yPjwvZGl2PlxuICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWRlc2lnbmVyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBUYWJEZXNpZ25lckNvbXBvbmVudCxcbiAgICBwcm9wcyBhcyBJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXksXG4gIFN1cnZleUVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEVtYmVkTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBFbWJlZE1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiRW1iZWRDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEVtYmVkTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLWVtYmVkLXRhYl9fY29udGVudFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC5zdXJ2ZXkgPyA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+IDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1lbWJlZFwiLFxuICAocHJvcHM6IElUYWJFbWJlZENvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiRW1iZWRDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQWNlSnNvbkVkaXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBBY2VKc29uRWRpdG9yTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgYWNlRWRpdG9yclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5hY2VFZGl0b3JyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY2VKc29uRWRpdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb2RlbC5pbml0KGFjZS5lZGl0KHRoaXMuYWNlRWRpdG9yclJlZi5jdXJyZW50IGFzIEhUTUxFbGVtZW50KSk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2FjZS1lZGl0b3JcIlxuICAgICAgICAgICAgcmVmPXt0aGlzLmFjZUVkaXRvcnJSZWZ9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1qc29uLWVkaXRvci1hY2VcIixcbiAgKHByb3BzOiBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbC5jYW5TaG93RXJyb3JzID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlcnJvcnM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICB2YXIga2V5ID0gMTtcbiAgICBjb25zdCB1c2VyRnJpZW5kbHlFcnJvcnM6IGFueVtdID0gdGhpcy5tb2RlbC51c2VyRnJpZW5kbHlFcnJvcnM7XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHVzZXJGcmllbmRseUVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgZXJyb3JzLnB1c2goPHNwYW4ga2V5PXtrZXl9PjxiPkVycm9yOiA8L2I+PC9zcGFuPik7XG4gICAgICBrZXkrKztcbiAgICAgIGVycm9ycy5wdXNoKDxzcGFuIGtleT17a2V5fT57dXNlckZyaWVuZGx5RXJyb3JzW2ldfTwvc3Bhbj4pO1xuICAgICAga2V5Kys7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnQtYXJlYVwiXG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5tb2RlbC50ZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlOiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT5cbiAgICAgICAgICAgICAgKHRoaXMubW9kZWwudGV4dCA9IGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4gdGhpcy5tb2RlbC5jaGVja0tleShlLCBlKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLm1vZGVsLnJlYWRPbmx5fVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5hcmlhTGFiZWx9XG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAge2Vycm9ycy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19lcnJyb3NfYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC50b2dnbGVFcnJvcnMoKX0+XG4gICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmVycm9yQnV0dG9uVGV4dH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7dGhpcy5tb2RlbC5jYW5TaG93RXJyb3JzICYmIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudC1lcnJvcnNcIj57ZXJyb3JzfTwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItanNvbi1lZGl0b3ItdGV4dGFyZWFcIixcbiAgKHByb3BzOiBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5LCBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlMb2dpY1VJIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5idXR0b247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IFwic3ZjLWxvZ2ljLXRhYl9fY29udGVudC1hY3Rpb24gc3ZjLWJ0blwiICsgKCh0aGlzLm1vZGVsLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5tb2RlbC5lbmFibGVkKSA/IFwiIHN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtYWN0aW9uLS1kaXNhYmxlZFwiIDogXCJcIik7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9uKCk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc05hbWV9XG4gICAgICB0aXRsZT17dGhpcy5tb2RlbC50aXRsZX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnRpdGxlfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1sb2dpYy1hZGQtYnV0dG9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBUYWJMb2dpY0NvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFN1cnZleUxvZ2ljVUkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBsb2dpYyA9IHRoaXMubW9kZWw7XG4gICAgdmFyIHJvb3RDbGFzcyA9IFwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnJlbmRlclZpZXdDb250ZW50KCk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtyb290Q2xhc3N9Pntjb250ZW50fTwvZGl2PjtcbiAgfVxuICBwcml2YXRlIHJlbmRlclZpZXdDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBsb2dpY1RhYkNsYXNzTmFtZSA9IFwic3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3ZjLWxvZ2ljLXRhYl9fY29udGVudCBcIiArICh0aGlzLm1vZGVsLmhhc0l0ZW1zID8gXCJcIiA6IFwic3ZjLWxvZ2ljLXRhYl9fZW1wdHlcIik7XG4gICAgY29uc3QgYWRkTG9naWMgPSAhdGhpcy5tb2RlbC5yZWFkT25seSA/IDxUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCBidXR0b249e3RoaXMubW9kZWwuYWRkTmV3QnV0dG9ufSAvPiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKFxuICAgICAgPEZyYWdtZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bG9naWNUYWJDbGFzc05hbWV9PlxuICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuaXRlbXNTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmhhc0l0ZW1zID8gbnVsbCA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWxvZ2ljLXRhYl9fY29udGVudC1lbXB0eVwiID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHRcIj57dGhpcy5tb2RlbC5lbXB0eVRhYlBsYWNlSG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2Pil9XG4gICAgICAgICAge2FkZExvZ2ljfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWxvZ2ljXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJMb2dpY0NvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24sIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUZXN0U3VydmV5VGFiVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVNpbXVsYXRvciB9IGZyb20gXCIuL1N1cnZleVNpbXVsYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UmVzdWx0cyB9IGZyb20gXCIuLi9SZXN1bHRzXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5idXR0b247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IFwic3ZjLXByZXZpZXdfX3Rlc3QtYWdhaW4gc3ZjLWJ0blwiO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbigpO1xuICAgICAgfX1cbiAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3NOYW1lfVxuICAgICAgdGl0bGU9e3RoaXMubW9kZWwudGl0bGV9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC50aXRsZX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItcHJldmlldy10ZXN0LWFnYWluXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFRhYlByZXZpZXdTdXJ2ZXlDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUZXN0U3VydmV5VGFiVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0YWJDb250ZW50Q2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLXRlc3QtdGFiX19jb250ZW50XCIgKyAodGhpcy5tb2RlbC5pc1BhZ2VUb29sYmFyVmlzaWJsZSA/IFwiIHN2Yy1jcmVhdG9yLXRhYl9fY29udGVudC0td2l0aC10b29sYmFyXCIgOiBcIlwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RhYkNvbnRlbnRDbGFzc05hbWV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wbHVnaW4tdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPFN1cnZleVNpbXVsYXRvciBtb2RlbD17dGhpcy5tb2RlbC5zaW11bGF0b3J9PjwvU3VydmV5U2ltdWxhdG9yPlxuICAgICAgICAgIHshdGhpcy5tb2RlbC5pc1J1bm5pbmcgPyA8VGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCBidXR0b249e3RoaXMubW9kZWwudGVzdEFnYWluQWN0aW9ufSAvPiA6IG51bGx9XG4gICAgICAgICAgeyF0aGlzLm1vZGVsLmlzUnVubmluZyA/IDxTdXJ2ZXlSZXN1bHRzIHN1cnZleT17dGhpcy5tb2RlbC5zaW11bGF0b3Iuc3VydmV5fSAvPiA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5nZXRCb3R0b21Ub29sYmFyKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIGdldEJvdHRvbVRvb2xiYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzUGFnZVRvb2xiYXJWaXNpYmxlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10ZXN0LXRhYl9fY29udGVudC1hY3Rpb25zXCI+XG4gICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC5wYWdlc30+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi10ZXN0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJQcmV2aWV3U3VydmV5Q29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlTaW11bGF0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTaW11bGF0b3IgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBTdXJ2ZXlTaW11bGF0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBtYWluU2ltdWxhdG9yQ2xhc3MgPSBcInN2ZC1zaW11bGF0b3ItbWFpblwiICtcbiAgICAgICh0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBcIiBzdmQtc2ltdWxhdG9yLW1haW4tLWRlc2t0b3BcIiA6IFwiXCIpO1xuICAgIGlmICghdGhpcy5tb2RlbC5zdXJ2ZXkpIHtcbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzfT48L2Rpdj47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGVsLmhhc0ZyYW1lKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3MgKyBcIiBcIiArIHRoaXMubW9kZWwuc2ltdWxhdG9yTWFpbkNzc0NsYXNzfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yLXdyYXBwZXJcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgd2lkdGg6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICBcInN2ZC1zaW11bGF0b3ItZnJhbWUgXCIgKyB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmNzc0NsYXNzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICAgICh0aGlzLm1vZGVsLmxhbmRzY2FwZU9yaWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZUhlaWdodFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVXaWR0aCkgKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgICAgKHRoaXMubW9kZWwubGFuZHNjYXBlT3JpZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lSGVpZ2h0KSArIFwicHhcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUud2lkdGggL1xuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5zY2FsZSArXG4gICAgICAgICAgICAgICAgICBcInB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5oZWlnaHQgL1xuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5zY2FsZSArXG4gICAgICAgICAgICAgICAgICBcInB4XCIsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgXCJzY2FsZShcIiArXG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLnNjYWxlICtcbiAgICAgICAgICAgICAgICAgIFwiKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSlcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3N9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGFiVHJhbnNsYXRpb25Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUcmFuc2xhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy10cmFuc2xhdGlvbi10YWJcIj5cbiAgICAgICAge3RoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRW1wdHkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Qtbm8tc3RyaW5nc1wiPlxuICAgICAgICAgIDxzcGFuPnt0aGlzLm1vZGVsLm5vU3RyaW5nc1RleHR9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3QtY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN0LXN0cmluZ3Mtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3Qtc3RyaW5ncy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdHJpbmdzSGVhZGVyU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3Qtc3RyaW5nc1wiPlxuICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN0cmluZ3NTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXRyYW5zbGF0aW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJUcmFuc2xhdGlvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25MaW5lU2tlbGV0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLXRyYW5zbGF0aW9uLWxpbmUtc2tlbGV0b25cIj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzZC10cmFuc2xhdGlvbi1saW5lLXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zbGF0aW9uTGluZVNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcywgVG9vbGJveCB9IGZyb20gXCIuL1Rvb2xib3hcIjtcblxuZXhwb3J0IGNsYXNzIEFkYXB0aXZlVG9vbGJveCBleHRlbmRzIFRvb2xib3gge1xuICBwcml2YXRlIG1hbmFnZXI6IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy50b29sYm94LFxuICAgICAgXCIuc3ZjLXRvb2xib3hfX3Rvb2w6bm90KC5zdi1kb3RzKT4uc3YtYWN0aW9uX19jb250ZW50XCIsXG4gICAgICA0NCxcbiAgICAgIDQ0XG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMudG9vbGJveC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hcIiArICh0aGlzLnRvb2xib3guaXNDb21wYWN0ID8gXCIgc3ZjLXRvb2xib3gtLWNvbXBhY3RcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NvbnRhaW5lclwiPlxuICAgICAgICAgIHsodGhpcy50b29sYm94LmlzQ29tcGFjdCB8fCB0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSkgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC5yZW5kZXJlZEFjdGlvbnMsIHRoaXMudG9vbGJveC5pc0NvbXBhY3QpfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICAgICAgOiB0aGlzLnJlbmRlckNhdGVnb3JpZXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGlzQ29tcGFjdD86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICA8U3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGl0ZW09eyhpdGVtIGFzIGFueSl9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gaXNDb21wYWN0PXtpc0NvbXBhY3R9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgaXRlbXMgPSBbXTtcbiAgICBpZiAoIWNhdGVnb3J5LmNvbGxhcHNlZCkge1xuICAgICAgaXRlbXMgPSB0aGlzLnJlbmRlckl0ZW1zKGNhdGVnb3J5Lml0ZW1zLCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBZGFwdGl2ZVRvb2xib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIH0gZnJvbSBcIi4vVG9vbGJveEl0ZW1cIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzIHtcbiAgbW9kZWw6IENyZWF0b3JCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgVG9vbGJveCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvb2xib3goKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRvci50b29sYm94O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jb250YWluZXJcIj5cbiAgICAgICAgICB7KHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLmxlbmd0aCA9PSAxKSA/XG4gICAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbXModGhpcy50b29sYm94LnZpc2libGVBY3Rpb25zKX1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgICAgIDogdGhpcy5yZW5kZXJDYXRlZ29yaWVzKClcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PlxuICAgICAgPFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBpdGVtPXsoaXRlbSBhcyBhbnkpfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9IGlzQ29tcGFjdD17ZmFsc2V9PjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyQ2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94LmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZW5kZXJDYXRlZ29yeUhlYWRlcihjYXRlZ29yeSk7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5KTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCIga2V5PXtjYXRlZ29yeS5uYW1lfT5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyQ2F0ZWdvcnlIZWFkZXIoY2F0ZWdvcnk6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpY29uTmFtZSA9IGNhdGVnb3J5LmNvbGxhcHNlZCA/IFwiYXJyb3ctZG93blwiIDogXCJhcnJvdy11cFwiO1xuICAgIGNvbnN0IHN2Z0ljb25DbGFzc05hbWUgPSBcInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1cIiArIChjYXRlZ29yeS5jb2xsYXBzZWQgPyBcImV4cGFuZFwiIDogXCJjb2xsYXBzZVwiKTtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyXCIgb25DbGljaz17ZSA9PiBjYXRlZ29yeS50b2dnbGVTdGF0ZSgpfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXRpdGxlXCI+e2NhdGVnb3J5Lm5hbWV9PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPXtzdmdJY29uQ2xhc3NOYW1lfSBpY29uTmFtZT17XCJpY29uLVwiICsgaWNvbk5hbWV9IHNpemU9ezI0fT48L1N2Z0ljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2F0ZWdvcnlDb250ZW50KGNhdGVnb3J5OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gIWNhdGVnb3J5LmNvbGxhcHNlZCA/IHRoaXMucmVuZGVySXRlbXMoY2F0ZWdvcnkuaXRlbXMpIDogW107XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbGJveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgZWRpdG9yTG9jYWxpemF0aW9uLFxuICBJUXVlc3Rpb25Ub29sYm94SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0LCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQmFzZSxcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMge1xuICBpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbTtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIGlzQ29tcGFjdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBUb29sYm94VG9vbFZpZXdNb2RlbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRoaXMuaXRlbSwgdGhpcy5wcm9wcy5jcmVhdG9yKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcGFjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NvbXBhY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiAodGhpcy5pdGVtIGFzIGFueSk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSAoKHRoaXMuaXRlbSBhcyBhbnkpIGFzIEFjdGlvbik7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fdG9vbCBcIiArIGl0ZW0uY3NzICsgKGl0ZW0uaXNWaXNpYmxlID8gXCJcIiA6IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIpO1xuICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRvb2xib3gtaXRlbVwiLFxuICAgICAge1xuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXG4gICAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgICAgaXNDb21wYWN0OiB0aGlzLmlzQ29tcGFjdFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IGtleT17aXRlbS5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7KHRoaXMuaXNDb21wYWN0ICYmIGl0ZW0ubmVlZFNlcGFyYXRvcikgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JUb29sYm94SXRlbVByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogVG9vbGJveFRvb2xWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHRvb2xib3hJdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRvb2xib3hJdGVtLCB0aGlzLnByb3BzLmNyZWF0b3IpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGFzc05hbWUgPVxuICAgICAgXCJzdmMtdG9vbGJveF9faXRlbSBzdmMtdG9vbGJveF9faXRlbS0tXCIgKyB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgdGhpcy5pdGVtLnRvb2x0aXAgK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidG9vbGJveFwiKSArXG4gICAgICAgICAgXCIgaXRlbVwiXG4gICAgICAgIH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGljayhldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgeyh0aGlzLnByb3BzLmlzQ29tcGFjdCA/XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1pY29uXCI+PC9TdmdJY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgOlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLXRpdGxlXCI+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3gtaXRlbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtLCBwcm9wcyk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXzsiXSwic291cmNlUm9vdCI6IiJ9
|
|
3841
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9OYXZpZ2F0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL05vdGlmaWVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL09iamVjdFNlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1BhZ2VOYXZpZ2F0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUHJvcGVydHlHcmlkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uRWRpdG9yQ29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVtYmVkZGVkU3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1F1ZXN0aW9uTGlua1ZhbHVlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Jlc3VsdHMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU2lkZUJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdHJpbmdFZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3VydmV5Q3JlYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9TdmdCdW5kbGUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvVGFiYmVkTWVudS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9DZWxsUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uRHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9QYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uSW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25XaWRnZXQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaGVscGVycy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2VudHJpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9ldmVudHMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0Rlc2lnbmVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvRW1iZWQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9Kc29uRWRpdG9yQWNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvclRleHRhcmVhLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvTG9naWMudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9QcmV2aWV3LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvU3VydmV5U2ltdWxhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L0FkYXB0aXZlVG9vbGJveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L1Rvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94SXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5Q3JlYXRvckNvcmVcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVJlYWN0XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiYW1kXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FB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LEVBQUUsQ0FBQyxFQUFFO1lBQy9ELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUN0REY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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QUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUMsd0JBQXdCLEdBQVc7b0JBQzlGLHFFQUFNLFNBQVMsRUFBQyx5QkFBeUIsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBUSxDQUM3RDtnQkFDUCxDQUFDO29CQUNELHFFQUFNLFNBQVMsRUFBQyx5QkFBeUIsSUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBUSxDQUNuRSxDQUNHLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCwrQkFBQztBQUFELENBQUMsQ0FwRDZDLGlFQUFpQixHQW9EOUQ7O0FBRUQsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxVQUFDLEtBQUs7SUFDckUsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FDdElILG1EOzs7Ozs7Ozs7OztBQ0FBLHVEOzs7Ozs7Ozs7OztBQ0FBLHlEOzs7Ozs7Ozs7OztBQ0FBLGlFOzs7Ozs7Ozs7OztBQ0FBLDZEIiwiZmlsZSI6InN1cnZleS1jcmVhdG9yLXJlYWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1jcmVhdG9yLWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktcmVhY3QtdWlcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJTdXJ2ZXlDcmVhdG9yXCIsIFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCIsIFwic3VydmV5LWNvcmVcIiwgXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIsIFwic3VydmV5LXJlYWN0LXVpXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlN1cnZleUNyZWF0b3JcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LWNyZWF0b3ItY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1yZWFjdC11aVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5Q3JlYXRvclwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0sIHJvb3RbXCJTdXJ2ZXlcIl0sIHJvb3RbXCJTdXJ2ZXlDcmVhdG9yQ29yZVwiXSwgcm9vdFtcIlN1cnZleVJlYWN0XCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jcmVhdG9yX2NvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2VudHJpZXMvaW5kZXgudHNcIik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFN1cnZleUVsZW1lbnRCYXNlLCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIEFjdGlvbkJ1dHRvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NlcyArIFwiIHN2Yy1hY3Rpb24tYnV0dG9uXCI7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgIGNsYXNzZXMgKz0gXCIgc3ZjLWFjdGlvbi1idXR0b24tLXNlbGVjdGVkXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIHN2Yy1hY3Rpb24tYnV0dG9uLS1kaXNhYmxlZFwiO1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3Nlc30+e3RoaXMucHJvcHMudGV4dH08L3NwYW4+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayhcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmNsaWNrKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGl0bGU9e3RoaXMucHJvcHMudGl0bGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMudGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJbWFnZUl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSW1hZ2VJdGVtVmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWw7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICB0aGlzLnByb3BzLml0ZW0sXG4gICAgICBudWxsLFxuICAgICAgbnVsbFxuICAgICk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5pdGVtc1Jvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuXG4gIHByZXZlbnREcmFnSGFuZGxlciA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgaXNOZXcgPSAhdGhpcy5wcm9wcy5xdWVzdGlvbi5pc0l0ZW1Jbkxpc3QodGhpcy5wcm9wcy5pdGVtKTtcbiAgICBjb25zdCBpbWFnZVdpZHRoID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS5pbWFnZVdpZHRoO1xuICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS5pbWFnZUhlaWdodDtcblxuICAgIGxldCBjb250ZW50ID0gbnVsbDtcbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGNvbnRlbnQgPSAoPD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZV9faXRlbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0gc2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWlubGluZVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19sYWJlbFwiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiBpbWFnZVdpZHRoID8gaW1hZ2VXaWR0aCArIFwicHhcIiA6IHVuZGVmaW5lZCwgaGVpZ2h0OiBpbWFnZUhlaWdodCA/IGltYWdlSGVpZ2h0ICsgXCJweFwiIDogdW5kZWZpbmVkIH19IGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19pbWFnZVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd0FkZCA/IGF0dGFjaEtleTJjbGljayg8c3BhbiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZU5ld0ZpbGUodGhpcy5tb2RlbCl9PlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tYWRkLWxnXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC8+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCA9IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZV9faXRlbVwifT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnLWFyZWEtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2Nob29zZS1maWxlXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VGaWxlKHRoaXMubW9kZWwpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1maWxlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX3JlbW92ZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwucmVtb3ZlKHRoaXMubW9kZWwpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kZWxldGVcIn0+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgXCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyXCIgK1xuICAgICAgICAgIChpc05ldyA/IFwiIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLS1uZXdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wR2hvc3QgPyBcIiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyLS1naG9zdFwiIDogXCJcIilcbiAgICAgICAgfVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtaXRlbS12YWx1ZT17XG4gICAgICAgICAgdGhpcy5tb2RlbC5pc0RyYWdnYWJsZSA/IHRoaXMubW9kZWwuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgICBvbkRyYWdTdGFydD17dGhpcy5wcmV2ZW50RHJhZ0hhbmRsZXJ9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlLXdyYXBwZXJfX2dob3N0XCJ9PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyX19jb250ZW50XCJ9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtaW1hZ2UtaXRlbS12YWx1ZVwiLFxuICAocHJvcHM6IEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBnZXRMb2NTdHJpbmcsIEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQgfSBmcm9tIFwic3JjL2V2ZW50c1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJdGVtVmFsdWUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YS5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIHRoaXMucHJvcHMuaXRlbVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgLy8gaWYgKHRoaXMubW9kZWwucXVlc3Rpb24uaXNEcmFnZ2VkKSB7XG4gICAgLy8gICByZXR1cm4gbnVsbDtcbiAgICAvLyB9XG4gICAgdGhpcy5tb2RlbC5pdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMubW9kZWwuYWxsb3dBZGQgPyAoXG4gICAgICBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCJcbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC50b29sdGlwfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmFkZCh0aGlzLm1vZGVsKX1cbiAgICAgID5cbiAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tYWRkXzE2eDE2XCJ9PjwvU3ZnSWNvbj5cbiAgICAgIDwvc3Bhbj4pXG4gICAgKSA6IChcbiAgICAgIDw+XG4gICAgICAgIHtcIiBcIn1cbiAgICAgICAge3RoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWdcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5kcmFnVG9vbHRpcH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1pY29uXCIgc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZHJhZy1hcmVhLWluZGljYXRvclwifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwudG9vbHRpcH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLXJlbW92ZV8xNngxNlwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgIDwvPlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgIFwic3ZjLWl0ZW0tdmFsdWUtd3JhcHBlclwiICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5hbGxvd0FkZCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1uZXdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdnaW5nID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLWRyYWdnaW5nXCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcEdob3N0ID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLWdob3N0XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcE1vdmVEb3duID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW1vdmVkb3duXCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcE1vdmVVcCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1tb3ZldXBcIiA6IFwiXCIpXG4gICAgICAgIH1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWU9e1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyB0aGlzLm1vZGVsLml0ZW0udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZV9fZ2hvc3RcIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+e2J1dHRvbn08L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaXRlbS12YWx1ZV9faXRlbVwifSBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIGV2ZW50KX0+e3RoaXMucHJvcHMuZWxlbWVudH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWl0ZW0tdmFsdWVcIixcbiAgKHByb3BzOiBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIExvZ29JbWFnZSwgU3ZnSWNvbiwgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIExvZ29JbWFnZVZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBDcmVhdG9yQmFzZTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ29JbWFnZUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgbW9kZWw6IExvZ29JbWFnZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgTG9nb0ltYWdlVmlld01vZGVsKHByb3BzLmRhdGEsIG51bGwpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLnJvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudCA9IG51bGw7XG4gICAgaWYgKHRoaXMubW9kZWwuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sKSB7XG4gICAgICBjb250ZW50ID0gPD5cbiAgICAgICAgPExvZ29JbWFnZSBkYXRhPXt0aGlzLnByb3BzLmRhdGEuc3VydmV5fT48L0xvZ29JbWFnZT5cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dFZGl0ID8gPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc1wiPlxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fY2hvb3NlLWZpbGVcIiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1maWxlXCJ9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX0+PC9TdmdJY29uPil9XG4gICAgICAgICAge2F0dGFjaEtleTJjbGljayg8U3ZnSWNvbiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kZWxldGVcIn0gb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5yZW1vdmUodGhpcy5tb2RlbCl9PjwvU3ZnSWNvbj4pfVxuICAgICAgICA8L2Rpdj4gOiBudWxsfVxuICAgICAgPC8+O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayg8ZGl2IGNsYXNzTmFtZT1cInN2Yy1sb2dvLWltYWdlLXBsYWNlaG9sZGVyXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VGaWxlKHRoaXMubW9kZWwpfT57dGhpcy5tb2RlbC5jaG9vc2VMb2dvUGxhY2Vob2xkZXJ9PC9kaXY+KSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdmMtbG9nby1pbWFnZVwiPlxuICAgICAgICA8aW5wdXQgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdHlwZT1cImZpbGVcIiB0YWJJbmRleD17LTF9IGFjY2VwdD1cImltYWdlLypcIiBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIiAvPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtbG9nby1pbWFnZVwiLFxuICAocHJvcHM6IElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvZ29JbWFnZUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSXRlbVZhbHVlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgY2VsbDogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9wcy5jb21wb25lbnREYXRhO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICBkYXRhLmNyZWF0b3IsXG4gICAgICBkYXRhLmVsZW1lbnQsXG4gICAgICBkYXRhLnF1ZXN0aW9uLFxuICAgICAgZGF0YS5yb3csXG4gICAgICBkYXRhLmNvbHVtbixcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnByb3BzLmNvbXBvbmVudERhdGE7XG4gICAgdGhpcy5tb2RlbC50ZW1wbGF0ZURhdGEgPSBkYXRhLmVsZW1lbnQ7XG4gICAgdGhpcy5tb2RlbC5yb3cgPSBkYXRhLnJvdztcbiAgICB0aGlzLm1vZGVsLmNvbHVtbiA9IGRhdGEuY29sdW1uO1xuICAgIHRoaXMubW9kZWwucXVlc3Rpb24gPSBkYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjb250cm9scyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5xdWVzdGlvbikge1xuICAgICAgY29udHJvbHMgPSA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1tYXRyaXgtY2VsbF9fcXVlc3Rpb24tY29udHJvbHNcIj5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8c3BhbiBjbGFzc05hbWU9XCJzdmMtbWF0cml4LWNlbGxfX3F1ZXN0aW9uLWNvbnRyb2xzLWJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuZWRpdFF1ZXN0aW9uKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1lZGl0XCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPil9XG4gICAgICA8L2Rpdj47XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1tYXRyaXgtY2VsbFwifVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIG9uQ2xpY2s9eyhlOiBhbnkpID0+ICF0aGlzLnByb3BzLnF1ZXN0aW9uICYmIHRoaXMubW9kZWwuc2VsZWN0Q29udGV4dCh0aGlzLm1vZGVsLCBlKX1cbiAgICAgICAgb25Nb3VzZU91dD17ZSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICAgIG9uTW91c2VPdmVyPXtlID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLW1hdHJpeC1jZWxsLS1zZWxlY3RlZFwiICsgKHRoaXMubW9kZWwuaXNTZWxlY3RlZCA/IFwiIHN2Yy12aXNpYmxlXCIgOiBcIlwiKX0+PC9kaXY+XG5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cblxuICAgICAgICB7Y29udHJvbHN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1tYXRyaXgtY2VsbFwiLFxuICAocHJvcHM6IE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnN1cnZleSB8fFxuICAgICAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5oYXNGdW5jKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgfVxuICAgIHByaXZhdGUgb25Qcm9wQ2hhbmdlZEhhbmRsZXIgPSAoc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgY29uc3QgcmVhY3RpdmVQcm9wcyA9IFtcbiAgICAgICAgXCJzaG93UHJvZ3Jlc3NCYXJcIixcbiAgICAgICAgXCJwcm9ncmVzc0JhclR5cGVcIixcbiAgICAgICAgXCJjdXJyZW50UGFnZVZhbHVlXCJcbiAgICAgIF07XG4gICAgICBpZiAocmVhY3RpdmVQcm9wcy5pbmRleE9mKG9wdGlvbnMubmFtZSkgPCAwKSByZXR1cm47XG4gICAgICB2YXIgdmFsOiBhbnkgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhY3RpdmVQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSByZWFjdGl2ZVByb3BzW2ldO1xuICAgICAgICB2YWxbcHJvcE5hbWVdID0gdGhpcy5zdXJ2ZXlbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh2YWwpO1xuICAgIH07XG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXQgbG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0IGlzVG9wKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYXRpb24gPT0gXCJ0b3BcIjtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVG9wXG4gICAgICAgID8gdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPblRvcFxuICAgICAgICA6IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b207XG4gICAgfVxuICAgIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdi1wcm9ncmVzcy1cIiArIHRoaXMuc3VydmV5LnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICB7IHN1cnZleTogdGhpcy5zdXJ2ZXksIGNzczogdGhpcy5zdXJ2ZXkuY3NzLCBpc1RvcDogdGhpcy5pc1RvcCB9XG4gICAgICApO1xuICAgIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgTm90aWZpZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWVyQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgbm90aWZpZXI6IE5vdGlmaWVyO1xufVxuXG5leHBvcnQgY2xhc3MgTm90aWZpZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgTm90aWZpZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IE5vdGlmaWVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBnZXQgbm90aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubm90aWZpZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWVyO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm5vdGlmaWVyLmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5ub3RpZmllci5jc3N9PlxuICAgICAgICA8c3Bhbj57dGhpcy5ub3RpZmllci5tZXNzYWdlfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9iamVjdFNlbGVjdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIExpc3QgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBPYmplY3RTZWxlY3Rvck1vZGVsO1xufVxuY2xhc3MgT2JqZWN0U2VsZWN0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IG1vZGVsKCk6IE9iamVjdFNlbGVjdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmlzVmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtb2JqZWN0LXNlbGVjdG9yXCI+XG4gICAgICAgIDxMaXN0IG1vZGVsPXt0aGlzLm1vZGVsLmxpc3R9PjwvTGlzdD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtb2JqZWN0LXNlbGVjdG9yXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBPYmplY3RTZWxlY3RvckNvbXBvbmVudCxcbiAgICBwcm9wcyBhcyBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQge1xuICBCYXNlLFxuICBJQWN0aW9uLFxuICB1bndyYXBcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3ZnSWNvbixcbiAgUG9wdXAsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBQYWdlTmF2aWdhdG9yVmlld01vZGVsLCBQYWdlc0NvbnRyb2xsZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcyB7XG4gIHBhZ2VzQ29udHJvbGxlcjogUGFnZXNDb250cm9sbGVyO1xuICBwYWdlRWRpdE1vZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2VOYXZpZ2F0b3IgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtb2RlbDogUGFnZU5hdmlnYXRvclZpZXdNb2RlbDtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWwoXG4gICAgICBwcm9wcy5wYWdlc0NvbnRyb2xsZXIsXG4gICAgICBwcm9wcy5wYWdlRWRpdE1vZGVcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmKHRoaXMucHJvcHMucGFnZUVkaXRNb2RlICE9PSBcImJ5cGFnZVwiKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50Lm9uc2Nyb2xsID0gZnVuY3Rpb24gKHRoaXM6IEdsb2JhbEV2ZW50SGFuZGxlcnMsIGV2OiBFdmVudCkge1xuICAgICAgICAgIHJldHVybiBzZWxmLm1vZGVsLm9uQ29udGFpbmVyU2Nyb2xsKGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50Lm9uc2Nyb2xsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLm1vZGVsLmRpc3Bvc2UoKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdmMtcGFnZS1uYXZpZ2F0b3JfX3NlbGVjdG9yXCI7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNQb3B1cE9wZW5lZClcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3JfX3NlbGVjdG9yLS1vcGVuZWRcIjtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JcIiByZWY9e3RoaXMuY29udGFpbmVyUmVmfSBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLm1vZGVsLnZpc2libGUgPyBcImZsZXhcIiA6IFwibm9uZVwiIH19PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnRvZ2dsZVBhZ2VTZWxlY3RvcigpfVxuICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnBhZ2VTZWxlY3RvckNhcHRpb259XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yX19uYXZpZ2F0b3ItaWNvblwiXG4gICAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5pY29ufVxuICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cblxuICAgICAgICAgIDxQb3B1cFxuICAgICAgICAgICAgbW9kZWw9e3RoaXMubW9kZWwucG9wdXBNb2RlbH1cbiAgICAgICAgICAvL2NsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvcl9fcG9wdXBcIlxuICAgICAgICAgID48L1BvcHVwPlxuICAgICAgICA8L2Rpdj4pfVxuICAgICAgICB7dGhpcy5tb2RlbC5pdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICA8U3VydmV5UGFnZU5hdmlnYXRvckl0ZW1cbiAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgPjwvU3VydmV5UGFnZU5hdmlnYXRvckl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElBY3Rpb24pIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtIGFzIEJhc2U7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICBsZXQgY2xhc3NOYW1lOiBzdHJpbmcgPSBcInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLWNvbnRlbnRcIjtcbiAgICBpZiAodW53cmFwKGl0ZW0uYWN0aXZlKSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLS1zZWxlY3RlZFwiO1xuICAgIH1cbiAgICBpZiAodW53cmFwKGl0ZW0uZGlzYWJsZWQpKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW0tLWRpc2FibGVkXCI7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtXCI+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFjdGlvbihpdGVtKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1fX2RvdFwiIHRpdGxlPXtpdGVtLnRpdGxlfT48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19iYW5uZXIgc3ZjLWl0ZW1fX2Jhbm5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLXNtYWxsIHN2Yy10ZXh0LS1ib2xkXCI+e2l0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1fX2RvdFwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+KX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFByb3BlcnR5R3JpZFZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJUHJvcGVydHlHcmlkQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogUHJvcGVydHlHcmlkVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUHJvcGVydHlHcmlkQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVByb3BlcnR5R3JpZENvbXBvbmVudFByb3BzLCBhbnk+IHtcblxuICBnZXQgbW9kZWwoKTogUHJvcGVydHlHcmlkVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBwdWJsaWMgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJidXR0b25ncm91cFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFByb3BlcnR5R3JpZENvbXBvbmVudDtcblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtcHJvcGVydHktZ3JpZFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUHJvcGVydHlHcmlkQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uLCBTdXJ2ZXlFcnJvciwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgU3VydmV5UXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzLFxuICBhbnlcbj4gaW1wbGVtZW50cyBJU3VydmV5Q3JlYXRvciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgIXF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZyB8fCBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICBjcmVhdG9yOiB0aGlzLFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbiAgcmVuZGVyRXJyb3Ioa2V5OiBzdHJpbmcsIGVycm9yOiBTdXJ2ZXlFcnJvciwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpWzBdO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb24gY3JlYXRvcj17dGhpc30gZWxlbWVudD17cXVlc3Rpb259PjwvU3VydmV5UXVlc3Rpb24+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1lZGl0b3ItY29udGVudFwiLFxuICAocHJvcHM6IElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVBhZ2UsIElTdXJ2ZXlDcmVhdG9yLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRFbWJlZGRlZFN1cnZleSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZW1iZWRkZWRTdXJ2ZXkoKTogUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcHMuZWxlbWVudCB8fCB0aGlzLnByb3BzLnF1ZXN0aW9uKSBhcyBRdWVzdGlvbkVtYmVkZGVkU3VydmV5TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5lbWJlZGRlZFN1cnZleSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5lbWJlZGRlZFN1cnZleS5lbWJlZGRlZFN1cnZleTtcbiAgICBpZiAoIXN1cnZleSB8fCAhc3VydmV5LmN1cnJlbnRQYWdlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFN1cnZleVBhZ2VcbiAgICAgIHN1cnZleT17c3VydmV5fVxuICAgICAgcGFnZT17c3VydmV5LmN1cnJlbnRQYWdlfVxuICAgICAgY3NzPXtzdXJ2ZXkuY3NzfVxuICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgIC8+O1xuXG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImVtYmVkZGVkc3VydmV5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlFbGVtZW50RW1iZWRkZWRTdXJ2ZXksIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RRdWVzdGlvbkZhY3RvcnksXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Vcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uLCBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25MaW5rVmFsdWUgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTGlua1ZhbHVlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDbGVhcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc2hvd0NsZWFyID0gKHRoaXMucXVlc3Rpb25CYXNlIGFzIGFueSkuc2hvd0NsZWFyO1xuICAgIGlmICghdGhpcy5xdWVzdGlvbkJhc2UuaXNSZWFkT25seSAmJiBzaG93Q2xlYXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICBjbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmxpbmtDbGVhckJ1dHRvbkNzc0NsYXNzZXN9XG4gICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uZG9DbGVhckNsaWNrKCl9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMucXVlc3Rpb24uaXNTZWxlY3RlZH1cbiAgICAgICAgICB0ZXh0PXtlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuY2xlYXJcIil9XG4gICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgIGNsYXNzZXM9e3RoaXMucXVlc3Rpb24ubGlua1NldEJ1dHRvbkNzc0NsYXNzZXN9XG4gICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uZG9MaW5rQ2xpY2soKX1cbiAgICAgICAgICBzZWxlY3RlZD17dGhpcy5xdWVzdGlvbi5pc1NlbGVjdGVkfVxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHl9XG4gICAgICAgICAgdGV4dD17dGhpcy5xdWVzdGlvbi5saW5rVmFsdWVUZXh0fVxuICAgICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLnRvb2x0aXB9XG4gICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICAge3RoaXMucmVuZGVyQ2xlYXIoKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImxpbmt2YWx1ZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25MaW5rVmFsdWUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVJlc3VsdHNJdGVtTW9kZWwsIFN1cnZleVJlc3VsdHNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSBcIi4vQWN0aW9uQnV0dG9uXCI7XG5cbmludGVyZmFjZSBJU3VydmV5UmVzdWx0c1Byb3BzIHtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSZXN1bHRzIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElTdXJ2ZXlSZXN1bHRzUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBTdXJ2ZXlSZXN1bHRzTW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5UmVzdWx0c1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGlmIChwcm9wcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMubW9kZWwgPSBuZXcgU3VydmV5UmVzdWx0c01vZGVsKHByb3BzLnN1cnZleSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19faGVhZGVyLXRleHRcIj57dGhpcy5tb2RlbC5zdXJ2ZXlSZXN1bHRzVGV4dH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlci10eXBlc1wiPlxuICAgICAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5tb2RlbC5zZWxlY3RUYWJsZUNsaWNrKCl9XG4gICAgICAgICAgICAgIHRleHQ9e3RoaXMubW9kZWwuZ2V0TG9jU3RyaW5nKFwiZWQuc3VydmV5UmVzdWx0c1RhYmxlXCIpfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dGhpcy5tb2RlbC5pc1RhYmxlU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMubW9kZWwuc2VsZWN0SnNvbkNsaWNrKCl9XG4gICAgICAgICAgICAgIHRleHQ9e3RoaXMubW9kZWwuZ2V0TG9jU3RyaW5nKFwiZWQuc3VydmV5UmVzdWx0c0pzb25cIil9XG4gICAgICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLm1vZGVsLmlzSnNvblNlbGVjdGVkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5yZW5kZXJSZXN1bHRBc1RleHQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyUmVzdWx0QXNUYWJsZSgpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJSZXN1bHRBc1RleHQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLnJlc3VsdFZpZXdUeXBlICE9PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX3RleHQgc3ZkLWxpZ2h0LWJnLWNvbG9yXCI+XG4gICAgICAgIDxkaXY+e3RoaXMubW9kZWwucmVzdWx0VGV4dH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUmVzdWx0QXNUYWJsZSgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwucmVzdWx0Vmlld1R5cGUgIT09IFwidGFibGVcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX3RhYmxlIHN2ZC1saWdodC1iZy1jb2xvclwiPlxuICAgICAgICA8dGFibGU+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cInN2ZC1saWdodC1iYWNrZ3JvdW5kLWNvbG9yXCI+XG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5yZXN1bHRzVGl0bGV9XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5yZXN1bHRzRGlzcGxheVZhbHVlfVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keT57U3VydmV5UmVzdWx0cy5yZW5kZXJSb3dzKHRoaXMubW9kZWwucmVzdWx0RGF0YSl9PC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgc3RhdGljIHJlbmRlclJvd3MoZGF0YTogQXJyYXk8YW55Pik6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgcmV0dXJuIGRhdGEubWFwKChpdGVtKSA9PiA8U3VydmV5UmVzdWx0c0J5Um93IGtleT17aXRlbS5pZH0gcm93PXtpdGVtfSAvPik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVJlc3VsdHNCeVJvdyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBTdXJ2ZXlSZXN1bHRzSXRlbU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnJvdztcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPHRyIG9uQ2xpY2s9eygpID0+IHRoaXMucm93LnRvZ2dsZSgpfT5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiB0aGlzLnJvdy50ZXh0TWFyZ2luIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cblxuICAgICAgICAgICAge3RoaXMucm93LmlzTm9kZSA/IChcbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBsZWZ0OiB0aGlzLnJvdy5tYXJrZXJNYXJnaW4gfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1wic3ZkLXRlc3QtcmVzdWx0c19fbWFya2VyIFwiICsgKHRoaXMucm93LmNvbGxhcHNlZCA/IFwiXCIgOiBcInN2ZC10ZXN0LXJlc3VsdHNfX21hcmtlci0tZXhwYW5kZWRcIil9PlxuICAgICAgICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICAgICAgICBpY29uTmFtZT17XCJpY29uLWV4cGFuZF8xNngxNlwifVxuICAgICAgICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgIDxzcGFuPnt0aGlzLnJvdy50aXRsZX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3NOYW1lPXt0aGlzLnJvdy5pc05vZGUgPyBcInN2ZC10ZXN0LXJlc3VsdHNfX25vZGUtdmFsdWVcIiA6IFwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCJ9PlxuICAgICAgICAgICAge3RoaXMucm93LmdldFN0cmluZyh0aGlzLnJvdy5kaXNwbGF5VmFsdWUpfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+KX1cbiAgICAgICAge3RoaXMucm93LmlzTm9kZSAmJiAhdGhpcy5yb3cuY29sbGFwc2VkID8gU3VydmV5UmVzdWx0cy5yZW5kZXJSb3dzKHRoaXMucm93LmRhdGEpIDogbnVsbH1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNpZGViYXJUYWJNb2RlbCwgU2lkZWJhck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlBY3Rpb25CYXIsIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSVNpZGViYXJDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBTaWRlYmFyTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBTaWRlYmFyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVNpZGViYXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGdldCBtb2RlbCgpOiBTaWRlYmFyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTaWRlYmFyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwuaW5pdFJlc2l6ZU1hbmFnZXIodGhpcy5jb250YWluZXJSZWYuY3VycmVudCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLnJlc2V0UmVzaXplTWFuYWdlcigpO1xuICB9XG4gIHB1YmxpYyBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6ICF0aGlzLm1vZGVsLnZpc2libGUgPyBcIm5vbmVcIiA6IFwiXCIgfTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy1zaWRlLWJhclwiICsgKHRoaXMubW9kZWwuZmx5b3V0UGFuZWxNb2RlID8gXCIgc3ZjLWZseW91dC1zaWRlLWJhclwiIDogXCJcIik7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnRhYnMubWFwKChpdGVtKSA9PiA8U2lkZWJhclRhYiBpdGVtPXtpdGVtfSBrZXk9e2l0ZW0uaWR9IC8+KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gc3R5bGU9e3sgZGlzcGxheTogIXRoaXMubW9kZWwuaGFzVmlzaWJsZVRhYnMgPyBcIm5vbmVcIiA6IFwiXCIgfX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19zaGFkb3dcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3ZjLXNpZGUtYmFyX193cmFwcGVyXCI+XG4gICAgICAgICAgPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfSBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLnRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci10aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmhlYWRlclRleHR9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAge2l0ZW1zfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNsb3NlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtYnRuIHNkLWJ0bi0tYWN0aW9uIHN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNsb3NlLWJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY29sbGFwc2VTaWRlYmFyKCl9PiB7dGhpcy5tb2RlbC5jbG9zZVRleHR9IDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBTaWRlYmFyVGFiIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBTaWRlYmFyVGFiTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuaXRlbS52aXNpYmxlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0aGlzLml0ZW0uY29tcG9uZW50TmFtZSwgeyBtb2RlbDogdGhpcy5pdGVtLm1vZGVsIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic3ZjLXNpZGUtYmFyLXRhYlwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhclRhYiwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNpZGViYXJDb21wb25lbnQ7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXNpZGUtYmFyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlYmFyQ29tcG9uZW50LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZywgU2VyaWFsaXplciwgSnNvbk9iamVjdFByb3BlcnR5LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBTdHJpbmdFZGl0b3JWaWV3TW9kZWxCYXNlLCBlZGl0YWJsZVN0cmluZ1JlbmRlcmVyTmFtZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGJhc2VNb2RlbDogU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZTtcbiAgcHJpdmF0ZSBzdlN0cmluZ0VkaXRvclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcHJpdmF0ZSBibHVycmVkQnlFc2NhcGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XG4gICAgdGhpcy5iYXNlTW9kZWwgPSBuZXcgU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZSh0aGlzLmxvY1N0cmluZywgdGhpcy5jcmVhdG9yKTtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5iYXNlTW9kZWwuYmx1ckVkaXRvciA9ICgpID0+IHtcbiAgICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5ibHVyKCk7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuc3BlbGxjaGVjayA9IGZhbHNlO1xuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbG9jU3RyaW5nKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHIubG9jU3RyO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogQ3JlYXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0ci5jcmVhdG9yO1xuICB9XG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3R5bGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmVycm9yVGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHJldHVybjtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgPSB0aGlzO1xuICAgIHRoaXMubG9jU3RyaW5nLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBjaGFuZ2VkOiBzZWxmLnN0YXRlLmNoYW5nZWQgKyAxIH0pO1xuICAgIH07XG4gICAgaWYgKHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0pIHtcbiAgICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgLy8gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcsIGZhbHNlLCBudWxsKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCF0aGlzLmxvY1N0cmluZykgcmV0dXJuO1xuICAgIHRoaXMubG9jU3RyaW5nLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgfVxuICBwcml2YXRlIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5wbGFjZWhvbGRlcjtcbiAgfVxuICBwcml2YXRlIGdldCBjb250ZW50RWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmNvbnRlbnRFZGl0YWJsZTtcbiAgfVxuICBwcml2YXRlIG9uQmx1ciA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LnNwZWxsY2hlY2sgPSBmYWxzZTtcbiAgICB0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdID0gZmFsc2U7XG4gICAgdGhpcy5qdXN0Rm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uSW5wdXQoZXZlbnQubmF0aXZlRXZlbnQpO1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5lcnJvclRleHQ7XG4gIH07XG4gIHByaXZhdGUganVzdEZvY3VzZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvbkZvY3VzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbkZvY3VzKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICB0aGlzLmp1c3RGb2N1c2VkID0gdHJ1ZTtcbiAgfTtcbiAgcHJpdmF0ZSBvbktleURvd24gPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5vbktleURvd24oZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIG9uTW91c2VVcCA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uTW91c2VVcChldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgZG9uZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwuZG9uZShldmVudCk7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IGZhbHNlO1xuICB9O1xuICBwcml2YXRlIGVkaXQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IHRydWU7XG4gICAgdGhpcy5iYXNlTW9kZWwub25DbGljayhldmVudCk7XG4gIH07XG4gIHByaXZhdGUgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuY2xhc3NOYW1lKHRoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCk7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmxvY1N0cmluZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5iYXNlTW9kZWwuc2V0TG9jU3RyaW5nKHRoaXMubG9jU3RyaW5nKTtcbiAgICB9XG4gICAgbGV0IGNvbnRyb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLmxvY1N0cmluZy5oYXNIdG1sKSB7XG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5iYXNlTW9kZWwuZm9jdXNlZCAmJiB0aGlzLmxvY1N0cmluZy50ZXh0IHx8IHRoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCB9O1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJlZj17dGhpcy5zdlN0cmluZ0VkaXRvclJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcbiAgICAgICAgICBjb250ZW50RWRpdGFibGU9e3RoaXMuY29udGVudEVkaXRhYmxlfVxuICAgICAgICAgIHNwZWxsQ2hlY2s9e2ZhbHNlfVxuICAgICAgICAgIGFyaWEtcGxhY2Vob2xkZXI9e3RoaXMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxuICAgICAgICAgIC8vIHN0eWxlPXt0aGlzLnN0eWxlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNsYXNzTmFtZX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fYm9yZGVyXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uIHN2Yy1zdHJpbmctZWRpdG9yX19idXR0b24tLWVkaXRcIlxuICAgICAgICAgICAgICBzaXplPXsxNn1cbiAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1lZGl0XCJ9XG4gICAgICAgICAgICA+PC9TdmdJY29uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2NvbnRyb2x9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fY29udHJvbHNcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5lcnJvclRleHQgPyA8c3BhbiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fZXJyb3JcIj57dGhpcy5lcnJvclRleHR9PC9zcGFuPiA6IFwiXCJ9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ0VkaXRvciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHtcbiAgQmFzZSxcbiAgUXVlc3Rpb24sXG4gIFN1cnZleUVycm9yLFxuICBTdXJ2ZXlNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgUmVhY3RRdWVzdGlvbkZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIsXG4gIFN1cnZleVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBJQ3JlYXRvck9wdGlvbnMsXG4gIENyZWF0b3JCYXNlLFxuICBJVGFiYmVkTWVudUl0ZW1cbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFRhYmJlZE1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi9UYWJiZWRNZW51XCI7XG5pbXBvcnQgeyBOb3RpZmllckNvbXBvbmVudCB9IGZyb20gXCIuL05vdGlmaWVyXCI7XG5pbXBvcnQgeyBTdmdCdW5kbGVDb21wb25lbnQgfSBmcm9tIFwiLi9TdmdCdW5kbGVcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBTdXJ2ZXlDcmVhdG9yO1xuICBzdHlsZT86IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290Tm9kZSA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBnZXQgc3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5pbml0S2V5Ym9hcmRTaG9ydGN1dHModGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgICB0aGlzLmNyZWF0b3IuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIodGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5yZW1vdmVLZXlib2FyZFNob3J0Y3V0cyh0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICAgIHRoaXMuY3JlYXRvci5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgfVxuICBwcml2YXRlIHJvb3ROb2RlOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgaWYgKGNyZWF0b3IuaXNDcmVhdG9yRGlzcG9zZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNyZWF0b3JDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yXCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwiIHN2Yy1jcmVhdG9yLS1tb2JpbGVcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGFyZWFDbGFzc05hbWUgPSBcInN2Yy1mdWxsLWNvbnRhaW5lciBzdmMtY3JlYXRvcl9fYXJlYSBzdmMtZmxleC1jb2x1bW5cIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaGF2ZUNvbW1lcmNpYWxMaWNlbnNlID8gXCJcIiA6IFwiIHN2Yy1jcmVhdG9yX19hcmVhLS13aXRoLWJhbm5lclwiKTtcbiAgICBjb25zdCBjb250ZW50V3JhcHBlckNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlciBzdmMtZmxleC1yb3dcIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCIgc3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlci0tZm9vdGVyLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGZ1bGxDb250YWluZXJDbGFzc05hbWUgPSBcInN2Yy1mbGV4LXJvdyBzdmMtZnVsbC1jb250YWluZXJcIiArIChcIiBzdmMtY3JlYXRvcl9fc2lkZS1iYXItLVwiICsgdGhpcy5jcmVhdG9yLnNpZGViYXJMb2NhdGlvbik7XG4gICAgbGV0IGxpY2Vuc2VCYW5uZXIgPSBudWxsO1xuICAgIGlmICghdGhpcy5wcm9wcy5jcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZSkge1xuICAgICAgbGljZW5zZUJhbm5lciA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fYmFubmVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX25vbi1jb21tZXJjaWFsLXRleHRcIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3N1cnZleWpzLmlvL2J1eVwiPlxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jcmVhdG9yLmxpY2Vuc2VUZXh0fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICAvL0FNOiB3aWR0aCB1bnJlY29nbml6ZWQgYnkgcmVhY3RcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NyZWF0b3JDbGFzc05hbWV9IHJlZj17dGhpcy5yb290Tm9kZX0gc3R5bGU9e3RoaXMuc3R5bGV9PlxuICAgICAgICA8U3ZnQnVuZGxlQ29tcG9uZW50PjwvU3ZnQnVuZGxlQ29tcG9uZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YXJlYUNsYXNzTmFtZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Z1bGxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3ZjLWZsZXgtcm93X19lbGVtZW50IHN2Yy1mbGV4LXJvd19fZWxlbWVudC0tZ3Jvd2luZ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b3AtYmFyXCI+XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUYWJzID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYmJlZC1tZW51LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmJlZE1lbnVDb21wb25lbnQgbW9kZWw9e2NyZWF0b3IudGFiYmVkTWVudX0+PC9UYWJiZWRNZW51Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IDogbnVsbCl9XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUb29sYmFyID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xiYXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtjcmVhdG9yLnRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA6IG51bGwpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbnRlbnRXcmFwcGVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19jb250ZW50LWhvbGRlciBzdmMtZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckFjdGl2ZVRhYigpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZm9vdGVyLWJhclwiPlxuICAgICAgICAgICAgICAgIHsoY3JlYXRvci5pc01vYmlsZVZpZXcgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2NyZWF0b3IuZm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJTaWRlYmFyKCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2xpY2Vuc2VCYW5uZXJ9XG4gICAgICAgICAgPE5vdGlmaWVyQ29tcG9uZW50XG4gICAgICAgICAgICBjcmVhdG9yPXtjcmVhdG9yfVxuICAgICAgICAgICAgbm90aWZpZXI9e2NyZWF0b3Iubm90aWZpZXJ9XG4gICAgICAgICAgPjwvTm90aWZpZXJDb21wb25lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJBY3RpdmVUYWIoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjcmVhdG9yLnRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjcmVhdG9yLnRhYnNbaV0uaWQgPT09IGNyZWF0b3IuYWN0aXZlVGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNyZWF0b3JUYWIoY3JlYXRvci50YWJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmVuZGVyQ3JlYXRvclRhYih0YWI6IElUYWJiZWRNZW51SXRlbSkge1xuICAgIGlmICh0YWIudmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBjb25zdCBjb21wb25lbnQgPSAhIXRhYi5yZW5kZXJUYWJcbiAgICAgID8gdGFiLnJlbmRlclRhYigpXG4gICAgICA6IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0YWIuY29tcG9uZW50Q29udGVudCwge1xuICAgICAgICBjcmVhdG9yOiBjcmVhdG9yLFxuICAgICAgICBzdXJ2ZXk6IGNyZWF0b3Iuc3VydmV5LFxuICAgICAgICBkYXRhOiB0YWIuZGF0YS5tb2RlbFxuICAgICAgfSk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJcIiArIChjcmVhdG9yLnRvb2xib3hMb2NhdGlvbiA9PSBcInJpZ2h0XCIgPyBcIiBzdmMtY3JlYXRvcl9fdG9vbGJveC0tcmlnaHRcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICBpZD17XCJzY3JvbGxhYmxlRGl2LVwiICsgdGFiLmlkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgID5cbiAgICAgICAge2NvbXBvbmVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyU2lkZWJhcigpIHtcbiAgICBpZiAoISF0aGlzLmNyZWF0b3Iuc2lkZWJhcikge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwic3YtbW9iaWxlLXNpZGUtYmFyXCIgOiBcIlwiO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAge1JlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3Iuc2lkZWJhciB9KX1cbiAgICAgICAgPC9kaXY+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yIGV4dGVuZHMgQ3JlYXRvckJhc2Uge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJQ3JlYXRvck9wdGlvbnMgPSB7fSwgb3B0aW9uczI/OiBJQ3JlYXRvck9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zLCBvcHRpb25zMik7XG4gIH1cbiAgcHVibGljIHJlbmRlcih0YXJnZXQ6IHN0cmluZyB8IEhUTUxFbGVtZW50KSB7XG4gICAgbGV0IG5vZGU6IEhUTUxFbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KTtcbiAgICB9XG4gICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShub2RlKTtcbiAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICA8UmVhY3QuU3RyaWN0TW9kZT5cbiAgICAgICAgPFN1cnZleUNyZWF0b3JDb21wb25lbnQgY3JlYXRvcj17dGhpc30gLz5cbiAgICAgIDwvUmVhY3QuU3RyaWN0TW9kZT4sXG4gICAgICBub2RlXG4gICAgKTtcbiAgfVxuXG4gIC8vSVN1cnZleUNyZWF0b3JcbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgIGNyZWF0b3I6IHRoaXNcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29ufSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbX0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktd2lkZ2V0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXksIHByb3BzKTtcbn0pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdmdSZWdpc3RyeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgc3ZnQnVuZGxlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdCdW5kbGVDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PFNWR1NWR0VsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LmlubmVySFRNTCA9IFN2Z1JlZ2lzdHJ5Lmljb25zUmVuZGVyZWRIdG1sKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBzdmdTdHlsZSA9IHtcbiAgICAgIGRpc3BsYXk6IFwibm9uZVwiXG4gICAgfTtcbiAgICByZXR1cm4gPHN2ZyBzdHlsZT17c3ZnU3R5bGV9IHJlZj17dGhpcy5jb250YWluZXJSZWZ9Pjwvc3ZnPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zdmctYnVuZGxlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdmdCdW5kbGVDb21wb25lbnQsIHByb3BzKTtcbn0pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElUYWJiZWRNZW51SXRlbSwgVGFiYmVkTWVudUl0ZW0sIFRhYmJlZE1lbnVDb250YWluZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgSUFjdGlvbixcbiAgQWN0aW9uLFxuICBSZXNwb25zaXZpdHlNYW5hZ2VyLFxuICBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lclxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmJlZE1lbnVDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBUYWJiZWRNZW51Q29udGFpbmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiYmVkTWVudUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiYmVkTWVudUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1hbmFnZXI6IFJlc3BvbnNpdml0eU1hbmFnZXI7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBwcml2YXRlIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnMubWFwKChpdGVtKSA9PiA8VGFiYmVkTWVudUl0ZW1XcmFwcGVyIGl0ZW09e2l0ZW19IGtleT17aXRlbS5pZH0gLz4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdmMtdGFiYmVkLW1lbnVcIj5cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFJlc3BvbnNpdml0eU1hbmFnZXIoXG4gICAgICBjb250YWluZXIsXG4gICAgICB0aGlzLm1vZGVsLFxuICAgICAgXCIuc3ZjLXRhYmJlZC1tZW51LWl0ZW0tY29udGFpbmVyOm5vdCguc3YtZG90cyk+LnN2LWFjdGlvbl9fY29udGVudFwiXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbn1cblxuY2xhc3MgVGFiYmVkTWVudUl0ZW1XcmFwcGVyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIGFueSxcbiAgYW55XG4+IHtcblxuICBwcml2YXRlIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY3NzOiBzdHJpbmcgPSBcInN2Yy10YWJiZWQtbWVudS1pdGVtLWNvbnRhaW5lclwiO1xuICAgIGlmICh0aGlzLml0ZW0uY3NzKSB7XG4gICAgICBjc3MgKz0gXCIgXCIgKyB0aGlzLml0ZW0uY3NzO1xuICAgIH1cbiAgICBjc3MgKz0gKCF0aGlzLml0ZW0uaXNWaXNpYmxlID8gXCIgc3YtYWN0aW9uLS1oaWRkZW5cIiA6IFwiXCIpO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCIsXG4gICAgICB7IGl0ZW06IHRoaXMuaXRlbSB9XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBrZXk9e3RoaXMuaXRlbS5pZH0gY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWFjdGlvbl9fY29udGVudFwiPlxuICAgICAgICAgIHtjb21wb25lbnR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFiYmVkTWVudUl0ZW1Db21wb25lbnRQcm9wcyB7XG4gIGl0ZW06IEFjdGlvbjtcbn1cbmV4cG9ydCBjbGFzcyBUYWJiZWRNZW51SXRlbUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiYmVkTWVudUl0ZW1Db21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiO1xuICAgIGlmIChpdGVtLmFjdGl2ZSkgY2xhc3NOYW1lICs9IFwiIHN2Yy10YWJiZWQtbWVudS1pdGVtLS1zZWxlY3RlZFwiO1xuICAgIGlmIChpdGVtLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhaXRlbS5lbmFibGVkKVxuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy10YWJiZWQtbWVudS1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIGxldCB0aXRsZUNsYXNzTmFtZTogc3RyaW5nID1cbiAgICAgIFwic3ZjLXRleHQgc3ZjLXRhYmJlZC1tZW51LWl0ZW1fX3RleHQgc3ZjLXRleHQtLW5vcm1hbFwiO1xuICAgIGlmIChpdGVtLmFjdGl2ZSkgdGl0bGVDbGFzc05hbWUgKz0gXCIgc3ZjLXRleHQtLWJvbGRcIjtcblxuICAgIHJldHVybiAoYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gb25DbGljaz17KCkgPT4gaXRlbS5hY3Rpb24oaXRlbSl9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RpdGxlQ2xhc3NOYW1lfT57aXRlbS50aXRsZX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJiZWRNZW51SXRlbUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuZXhwb3J0IGRlZmF1bHQgVGFiYmVkTWVudUNvbXBvbmVudDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgQ2VsbFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRHJhZ2dlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lfVxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIn1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcIiBzdmMtcXVlc3Rpb25fX2NvbnRlbnQtLXNlbGVjdGVkLW5vLWJvcmRlciBzdmMtcXVlc3Rpb25fX2NvbnRlbnRcIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtY2VsbC1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2VsbFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIENlbGxRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRHJhZ2dlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gICAgY29uc3QgdGV4dFN0eWxlID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS50ZXh0U3R5bGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lfVxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIn1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcIiBzdmMtcXVlc3Rpb25fX2NvbnRlbnQtLXNlbGVjdGVkLW5vLWJvcmRlciBzdmMtcXVlc3Rpb25fX2NvbnRlbnRcIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlc1wiPlxuICAgICAgICAgICAgICB7cXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2BlZGl0YWJsZV9jaG9pY2VfJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7UmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShxdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogcXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkOiBxdWVzdGlvbi52YWx1ZSA9PT0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1jZWxsLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDZWxsUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IEJhc2UsIFBhZ2VNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUG9wdXAsXG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVBhZ2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgQ3JlYXRvckJhc2UsXG4gIFBhZ2VBZG9ybmVyLFxuICBTdXJ2ZXlIZWxwZXIsXG4gIHRvZ2dsZUhvdmVyZWRcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcblxuaW50ZXJmYWNlIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIHBhZ2U6IFBhZ2VNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsOiBQYWdlQWRvcm5lcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUNyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlQWRvcm5lcihcbiAgICAgIHRoaXMucHJvcHMuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucGFnZVxuICAgICk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwub25QYWdlU2VsZWN0ZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghIXRoaXMucm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICAgIFN1cnZleUhlbHBlci5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKHRoaXMucm9vdFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLm1vZGVsICYmXG4gICAgICB0aGlzLm1vZGVsLmlzUGFnZUxpdmUgJiZcbiAgICAgICEhdGhpcy5tb2RlbC5wYWdlICYmXG4gICAgICAhIXRoaXMubW9kZWwucGFnZS5zdXJ2ZXlcbiAgICApO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wcm9wcy5wYWdlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcGFnZV9fY29udGVudCBcIiArIHRoaXMubW9kZWwuY3NzfVxuICAgICAgICBpZD17dGhpcy5wcm9wcy5wYWdlLmlkfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17KGUpID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyRm9vdGVyKCl9XG4gICAgICA8L2Rpdj4pXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8U3VydmV5UGFnZSBwYWdlPXt0aGlzLnByb3BzLnBhZ2V9IHN1cnZleT17dGhpcy5wcm9wcy5zdXJ2ZXl9IGNyZWF0b3I9e3RoaXMucHJvcHMuY3JlYXRvcn0gY3NzPXt0aGlzLm1vZGVsLmNzc30+PC9TdXJ2ZXlQYWdlPik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlX19jb250ZW50LWFjdGlvbnNcIj5cbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWwuYWN0aW9uQ29udGFpbmVyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICA8L2Rpdj4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5hbGxvd0VkaXQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwgPSB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWw7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZV9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYnRuXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24odGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSk7XG4gICAgICB9fVxuICAgICAgb25Nb3VzZU92ZXI9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyU3RvcHBlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICB7YXR0YWNoS2V5MmNsaWNrKDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmFjdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZV9fcXVlc3Rpb24tdHlwZS1zZWxlY3RvclwiXG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3ItaWNvblwiPlxuICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICBpY29uTmFtZT17cXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5pY29uTmFtZX1cbiAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPFBvcHVwIG1vZGVsPXtxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICA8L2J1dHRvbj4pfVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtcGFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBQYW5lbEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyX2ZyYW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24oKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgeyF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50ICYmIHRoaXMubW9kZWwuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMubW9kZWwuYWxsb3dFZGl0ID8gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWFjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuYWN0aW9uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yXCJcbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3ItaWNvblwiPlxuICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8UG9wdXAgbW9kZWw9e3RoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgICAgIDwvYnV0dG9uPil9XG4gICAgICAgIDwvZGl2PikgOiBudWxsfVxuXG4gICAgICB7c3VwZXIucmVuZGVyRm9vdGVyKCl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1wYW5lbFwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBjb21wb25lbnREYXRhOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWxWYWx1ZTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgIXRoaXMubW9kZWwuaXNEcmFnZ2VkO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYWxsb3dJbnRlcmFjdGlvbnMgPSB0aGlzLm1vZGVsLmVsZW1lbnRcbiAgICAgIC5pc0ludGVyYWN0aXZlRGVzaWduRWxlbWVudDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KGFsbG93SW50ZXJhY3Rpb25zKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5lbGVtZW50Lm5hbWUgfHwgbnVsbH1cbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwiICsgdGhpcy5tb2RlbC5yb290Q3NzKCl9XG4gICAgICAgIG9uTW91c2VPdXQ9e2UgPT4gYWxsb3dJbnRlcmFjdGlvbnMgJiYgdG9nZ2xlSG92ZXJlZChlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17ZSA9PiBhbGxvd0ludGVyYWN0aW9ucyAmJiB0b2dnbGVIb3ZlcmVkKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChhbGxvd0ludGVyYWN0aW9uczogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY29udGVudCA9IHRoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKTtcbiAgICBpZiAoIWFsbG93SW50ZXJhY3Rpb25zKSByZXR1cm4gPD57IGNvbnRlbnQgfXt0aGlzLnJlbmRlckZvb3RlcigpfTwvPjtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19jb250ZW50IFwiICsgdGhpcy5tb2RlbC5jc3MoKX1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJIZWFkZXIoKX1cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIHt0aGlzLnJlbmRlckZvb3RlcigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXF1ZXN0aW9uLWhlYWRlclwiLCB7IG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtcXVlc3Rpb24tZm9vdGVyXCIsIHsgY2xhc3NOYW1lOiBcInN2Yy1xdWVzdGlvbl9fY29udGVudC1hY3Rpb25zXCIsIG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgIHt0aGlzLnJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJfZnJhbWVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSwgUXVlc3Rpb25TZWxlY3RCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgICBjb25zdCB0ZXh0U3R5bGUgPSAodGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnkpLnRleHRTdHlsZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZXNcIj5cbiAgICAgICAgeyhxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcyB8fCBbXSkubWFwKFxuICAgICAgICAgIChpdGVtOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VcIlxuICAgICAgICAgICAgICBrZXk9e2BlZGl0YWJsZV9jaG9pY2VfJHtpbmRleH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7UmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShxdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwsXG4gICAgICAgICAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogcXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkOiBxdWVzdGlvbi52YWx1ZSA9PT0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKVxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtZHJvcGRvd24tcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XcmFwcGVyRm9vdGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzLCBhbnk+IHtcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZX0+XG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLnByb3BzLm1vZGVsLmFjdGlvbkNvbnRhaW5lcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24tZm9vdGVyXCIsXG4gIChwcm9wczogUXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbldyYXBwZXJGb290ZXIsIHByb3BzKTtcbiAgfVxuKTtcblxuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XcmFwcGVySGVhZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzLCBhbnk+IHtcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucHJvcHMubW9kZWwuYWxsb3dEcmFnZ2luZykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fZHJhZy1hcmVhXCJ9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PlxuICAgICAgICAgIHRoaXMucHJvcHMubW9kZWwub25Qb2ludGVyRG93bihldmVudClcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fZHJhZy1lbGVtZW50XCJ9XG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWhlYWRlclwiLFxuICAocHJvcHM6IFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XcmFwcGVySGVhZGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQge1xuICBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbCxcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpbWFnZU1vZGVsKCk6IFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCBhcyBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuaW1hZ2VNb2RlbC5xdWVzdGlvblJvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1jaG9vc2UtZmlsZS1pbnB1dFwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIlxuICAgICAgICB9fVxuICAgICAgLz5cblxuICAgICAge3N1cGVyLnJlbmRlckhlYWRlcigpfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1xdWVzdGlvbi1jb250cm9sc1wiPlxuICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNfX2Nob29zZS1maWxlXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmltYWdlTW9kZWwuY2hvb3NlRmlsZSh0aGlzLmltYWdlTW9kZWwpfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWltYWdlLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkltYWdlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLFxuICBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWxWYWx1ZTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJhdGluZ01vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnJhdGluZ01vZGVsO1xuICAgIHJldHVybiAoPD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXJhdGluZy1xdWVzdGlvbi1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXJhdGluZy1xdWVzdGlvbi1jb250cm9scyBzdmMtaXRlbS12YWx1ZS1jb250cm9sc1wiPlxuICAgICAgICAgIHttb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e21vZGVsLnJlbW92ZVRvb2x0aXB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBtb2RlbC5yZW1vdmVJdGVtKG1vZGVsKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1yZW1vdmVfMTZ4MTZcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICB7bW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2FkZFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXttb2RlbC5hZGRUb29sdGlwfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW9kZWwuYWRkSXRlbShtb2RlbCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tYWRkXzE2eDE2XCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgPC8+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcmF0aW5nLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udGVudFwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV2lkZ2V0QWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHdpZGdldE1vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy13aWRnZXRfX2NvbnRlbnRcIn1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXdpZGdldC1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XaWRnZXRBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBSb3dWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmludGVyZmFjZSBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgY29tcG9uZW50RGF0YTogYW55O1xuICByb3c6IFF1ZXN0aW9uUm93TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBSb3dXcmFwcGVyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFJvd1ZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFJvd1ZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YS5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5yb3csXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBrZXk9e1wic3ZjLXJvdy1cIiArIHRoaXMucHJvcHMucm93LmlkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlc31cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJvd1wiLFxuICAocHJvcHM6IFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvd1dyYXBwZXIsIHByb3BzKTtcbiAgfVxuKTtcbiIsImRlY2xhcmUgdmFyIFJlZmxlY3Q6YW55O1xuXG5leHBvcnQgdmFyIF9fZGVjb3JhdGUgPSBmdW5jdGlvbihcbiAgZGVjb3JhdG9yczogYW55LFxuICB0YXJnZXQ6IGFueSxcbiAga2V5OiBhbnksXG4gIGRlc2M6IGFueVxuKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICByID1cbiAgICAgIGMgPCAzXG4gICAgICAgID8gdGFyZ2V0XG4gICAgICAgIDogZGVzYyA9PT0gbnVsbFxuICAgICAgICAgID8gKGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSlcbiAgICAgICAgICA6IGRlc2MsXG4gICAgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpXG4gICAgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICBpZiAoKGQgPSBkZWNvcmF0b3JzW2ldKSlcbiAgICAgICAgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5leHBvcnQgdmFyIF9fYXNzaWduID1cbiAgT2JqZWN0W1wiYXNzaWduXCJdIHx8XG4gIGZ1bmN0aW9uKHRhcmdldCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIHAgaW4gcylcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyh0aGlzQ2xhc3MsIGJhc2VDbGFzcykge1xuICBmb3IgKHZhciBwIGluIGJhc2VDbGFzcylcbiAgICBpZiAoYmFzZUNsYXNzLmhhc093blByb3BlcnR5KHApKSB0aGlzQ2xhc3NbcF0gPSBiYXNlQ2xhc3NbcF07XG4gIGZ1bmN0aW9uIF9fKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0aGlzQ2xhc3M7XG4gIH1cbiAgdGhpc0NsYXNzLnByb3RvdHlwZSA9XG4gICAgYmFzZUNsYXNzID09PSBudWxsXG4gICAgICA/IE9iamVjdC5jcmVhdGUoYmFzZUNsYXNzKVxuICAgICAgOiAoKF9fLnByb3RvdHlwZSA9IGJhc2VDbGFzcy5wcm90b3R5cGUpLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19zcHJlYWRBcnJheXMgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59O1xuIiwiZXhwb3J0IGxldCBWZXJzaW9uOiBzdHJpbmc7XG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xuXG4vLyBpbXBvcnQgXCJAc3VydmV5L2NyZWF0b3Ivc3VydmV5LWNyZWF0b3ItY29yZS5jc3NcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL1N1cnZleUNyZWF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1Jvd1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25IZWFkZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkZvb3RlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbldpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL0NlbGxRdWVzdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUGFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1BhbmVsXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9Mb2dvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkxpbmtWYWx1ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkVkaXRvckNvbnRlbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9JdGVtVmFsdWVXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vSW1hZ2VJdGVtVmFsdWVXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTWF0cml4Q2VsbFdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9SZXN1bHRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94SXRlbVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvVG9vbGJveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvQWRhcHRpdmVUb29sYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vVGFiYmVkTWVudVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL05vdGlmaWVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTmF2aWdhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1NpZGVCYXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1RyYW5zbGF0aW9uTGluZVNrZWxldG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vQWN0aW9uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vU3RyaW5nRWRpdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0Rlc2lnbmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9FbWJlZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvSnNvbkVkaXRvckFjZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvSnNvbkVkaXRvclRleHRhcmVhXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9Mb2dpY1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvUHJldmlld1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvVHJhbnNsYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1N1cnZleVNpbXVsYXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vZXZlbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vT2JqZWN0U2VsZWN0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9Qcm9wZXJ0eUdyaWRcIjtcblxuZXhwb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uLCBsb2NhbGl6YXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgc3ZnQnVuZGxlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN1cnZleUxvZ2ljLCBTdXJ2ZXlMb2dpY1VJIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBJU3VydmV5Q3JlYXRvck9wdGlvbnMsIElQcm9wZXJ0eUdyaWRFZGl0b3IgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgVG9vbGJveFRvb2xWaWV3TW9kZWwsIFByb3BlcnR5R3JpZEVkaXRvckNvbGxlY3Rpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7IiwiaW1wb3J0IHsgSVBvcnRhYmxlRHJhZ0V2ZW50LCBJUG9ydGFibGVNb3VzZUV2ZW50IH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0TW91c2VFdmVudCBpbXBsZW1lbnRzIElQb3J0YWJsZU1vdXNlRXZlbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTERpdkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSB7fVxuICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG4gIHByZXZlbnREZWZhdWx0KCkge1xuICAgIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBnZXQgY2FuY2VsQnViYmxlKCk6IGJvb2xlYW4ge1xuICAgIC8vcmV0dXJuIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzZXQgY2FuY2VsQnViYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgLy90aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHZhbHVlO1xuICB9XG4gIGdldCB0YXJnZXQoKTogRXZlbnRUYXJnZXQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC50YXJnZXQ7XG4gIH1cbiAgZ2V0IGN1cnJlbnRUYXJnZXQoKTogRXZlbnRUYXJnZXQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jdXJyZW50VGFyZ2V0O1xuICB9XG4gIGdldCBjbGllbnRYKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY2xpZW50WDtcbiAgfVxuICBnZXQgY2xpZW50WSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmNsaWVudFk7XG4gIH1cbiAgZ2V0IG9mZnNldFgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5uYXRpdmVFdmVudC5vZmZzZXRYO1xuICB9XG4gIGdldCBvZmZzZXRZKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQubmF0aXZlRXZlbnQub2Zmc2V0WTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVhY3REcmFnRXZlbnQgZXh0ZW5kcyBSZWFjdE1vdXNlRXZlbnRcbiAgaW1wbGVtZW50cyBJUG9ydGFibGVEcmFnRXZlbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXZlbnQ6IFJlYWN0LkRyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pIHtcbiAgICBzdXBlcihldmVudCk7XG4gIH1cblxuICBnZXQgZGF0YVRyYW5zZmVyKCk6IERhdGFUcmFuc2ZlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuZGF0YVRyYW5zZmVyO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCwgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5SGVhZGVyXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBUYWJEZXNpZ25lclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYWdlTmF2aWdhdG9yIH0gZnJvbSBcIi4uL1BhZ2VOYXZpZ2F0b3JcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb24gfSBmcm9tIFwiLi4vTmF2aWdhdGlvblwiO1xuXG5pbnRlcmZhY2UgSVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBUYWJEZXNpZ25lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkRlc2lnbmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUYWJEZXNpZ25lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogQ3JlYXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsLmNyZWF0b3I7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZW55VXBkYXRlID0gKCkgPT4ge1xuICAgIHRoaXMuZGVueUNvbXBvbmVudFVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGxvd1VwZGF0ZSA9ICgpID0+IHtcbiAgICB0aGlzLmFsbG93Q29tcG9uZW50VXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFkZERyYWdEcm9wRXZlbnRzID0gKCkgPT4ge1xuICAgIHRoaXMuY3JlYXRvci5vbkJlZm9yZURyb3AuYWRkKHRoaXMuZGVueVVwZGF0ZSk7XG4gICAgdGhpcy5jcmVhdG9yLm9uQWZ0ZXJEcm9wLmFkZCh0aGlzLmFsbG93VXBkYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJEcmFnRHJvcEV2ZW50cyA9ICgpID0+IHtcbiAgICB0aGlzLmNyZWF0b3Iub25CZWZvcmVEcm9wLnJlbW92ZSh0aGlzLmRlbnlVcGRhdGUpO1xuICAgIHRoaXMuY3JlYXRvci5vbkFmdGVyRHJvcC5yZW1vdmUodGhpcy5hbGxvd1VwZGF0ZSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuYWRkRHJhZ0Ryb3BFdmVudHMoKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5jbGVhckRyYWdEcm9wRXZlbnRzKCk7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICByZXR1cm4gW3RoaXMubW9kZWwsIHRoaXMubW9kZWwuc3VydmV5LCB0aGlzLm1vZGVsLnBhZ2VzQ29udHJvbGxlcl07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcmVkUGFnZXNDYWNoZTogYW55ID0ge307XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZFBhZ2VzKCk6IEpTWC5FbGVtZW50W10ge1xuICAgIGlmICh0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lICE9PSBcInBhZ2VzXCIpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlID0ge307XG4gICAgfVxuICAgIGNvbnN0IHJlbmRlcmVkUGFnZXMgPSBbXTtcblxuICAgIGlmKHRoaXMuY3JlYXRvci5wYWdlRWRpdE1vZGUgIT09IFwiYnlwYWdlXCIpIHtcbiAgICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5jcmVhdG9yLnN1cnZleS5wYWdlcztcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGNhY2hlZFBhZ2UgPSB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlLmlkXTtcbiAgICAgICAgaWYgKCFjYWNoZWRQYWdlKSB7XG4gICAgICAgICAgY2FjaGVkUGFnZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2UsIGluZGV4KTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlLmlkXSA9IGNhY2hlZFBhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKGNhY2hlZFBhZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm1vZGVsLnNob3dOZXdQYWdlKSB7XG4gICAgICAgIHJlbmRlcmVkUGFnZXMucHVzaCh0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtcGFnZVwiLCB0aGlzLm1vZGVsLm5ld1BhZ2UuaWQgKyBcIi1naG9zdC1uZXctcGFnZVwiKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhZ2UyRGlzcGxheSA9IHRoaXMubW9kZWwucGFnZXNDb250cm9sbGVyLnBhZ2UyRGlzcGxheTtcbiAgICAgIGxldCBjYWNoZWRQYWdlID0gdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZTJEaXNwbGF5LmlkXTtcbiAgICAgIGlmICghY2FjaGVkUGFnZSkge1xuICAgICAgICBjYWNoZWRQYWdlID0gdGhpcy5jcmVhdGVSZW5kZXJlZFBhZ2UocGFnZTJEaXNwbGF5LCAwKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZTJEaXNwbGF5LmlkXSA9IGNhY2hlZFBhZ2U7XG4gICAgICB9XG4gICAgICByZW5kZXJlZFBhZ2VzLnB1c2goY2FjaGVkUGFnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlcmVkUGFnZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlbmRlcmVkUGFnZShwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcGFnZVwifVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXBhZ2U9e3BhZ2UubmFtZX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17cGFnZS5uYW1lfVxuICAgICAgICBrZXk9e3BhZ2UuaWQgKyBcIi1cIiArIGluZGV4fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJQYWdlKHBhZ2UpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlck5ld1BhZ2UoY2xhc3NOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nID0gXCJcIikge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtrZXl9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17XCJuZXdHaG9zdFBhZ2VcIn1cbiAgICAgICAgPlxuICAgICAgICAgIHshIXRoaXMubW9kZWwubmV3UGFnZSA/IHRoaXMucmVuZGVyUGFnZSh0aGlzLm1vZGVsLm5ld1BhZ2UpIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhZ2UocGFnZVY6IFBhZ2VNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXBhZ2VcIiwgeyBzdXJ2ZXk6IHRoaXMuY3JlYXRvci5zdXJ2ZXksIHBhZ2U6IHBhZ2VWLCBjcmVhdG9yOiB0aGlzLmNyZWF0b3IgfSk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZGVzaWduZXJUYWJDbGFzc05hbWUgPSBcInN2Yy10YWItZGVzaWduZXIgXCIgKyB0aGlzLm1vZGVsLmdldFJvb3RDc3MoKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuaXNUb29sYm94VmlzaWJsZSA/IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIHsgbW9kZWw6IHRoaXMuY3JlYXRvciB9KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZGVzaWduZXJUYWJDbGFzc05hbWV9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2xpY2tEZXNpZ25lcigpfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10YWItZGVzaWduZXJfY29udGVudFwiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuc2hvd1BsYWNlaG9sZGVyID8gdGhpcy5yZW5kZXJQbGFjZUhvbGRlcigpIDogdGhpcy5yZW5kZXJUYWJDb250ZW50KCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyUGxhY2VIb2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXJfX3BsYWNlaG9sZGVyLWNvbnRhaW5lclwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXItcGxhY2Vob2xkZXItdGV4dCBzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtZGVzaWduZXItcGxhY2Vob2xkZXItcGFnZVwiKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuXG4gIHJlbmRlclRhYkNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLmNyZWF0b3Iuc3VydmV5O1xuXG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5nZXREZXNpZ25lckNzcygpfT5cbiAgICAgICAgeyF0aGlzLmNyZWF0b3IuYWxsb3dFZGl0U3VydmV5VGl0bGUgPyBudWxsIDpcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lci1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxTdXJ2ZXlIZWFkZXIgc3VydmV5PXtzdXJ2ZXl9PjwvU3VydmV5SGVhZGVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxTdXJ2ZXlOYXZpZ2F0aW9uIHN1cnZleT17c3VydmV5fSBsb2NhdGlvbj1cInRvcFwiIC8+XG4gICAgICAgIHt0aGlzLmdldFJlbmRlcmVkUGFnZXMoKX1cbiAgICAgICAgPFN1cnZleU5hdmlnYXRpb25cbiAgICAgICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgICAgICBsb2NhdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgY3NzPXtzdXJ2ZXkuY3NzfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7dGhpcy5jcmVhdG9yLnNob3dQYWdlTmF2aWdhdG9yID9cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiLWRlc2lnbmVyX19wYWdlLW5hdmlnYXRvclwiPjxTdXJ2ZXlQYWdlTmF2aWdhdG9yXG4gICAgICAgICAgcGFnZXNDb250cm9sbGVyPXt0aGlzLm1vZGVsLnBhZ2VzQ29udHJvbGxlcn0gcGFnZUVkaXRNb2RlPXt0aGlzLm1vZGVsLmNyZWF0b3IucGFnZUVkaXRNb2RlfVxuICAgICAgICA+PC9TdXJ2ZXlQYWdlTmF2aWdhdG9yPjwvZGl2PlxuICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWRlc2lnbmVyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBUYWJEZXNpZ25lckNvbXBvbmVudCxcbiAgICBwcm9wcyBhcyBJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXksXG4gIFN1cnZleUVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEVtYmVkTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBFbWJlZE1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiRW1iZWRDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEVtYmVkTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLWVtYmVkLXRhYl9fY29udGVudFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC5zdXJ2ZXkgPyA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+IDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1lbWJlZFwiLFxuICAocHJvcHM6IElUYWJFbWJlZENvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiRW1iZWRDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQWNlSnNvbkVkaXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBBY2VKc29uRWRpdG9yTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgYWNlRWRpdG9yclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5hY2VFZGl0b3JyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY2VKc29uRWRpdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb2RlbC5pbml0KGFjZS5lZGl0KHRoaXMuYWNlRWRpdG9yclJlZi5jdXJyZW50IGFzIEhUTUxFbGVtZW50KSk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2FjZS1lZGl0b3JcIlxuICAgICAgICAgICAgcmVmPXt0aGlzLmFjZUVkaXRvcnJSZWZ9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1qc29uLWVkaXRvci1hY2VcIixcbiAgKHByb3BzOiBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbC5jYW5TaG93RXJyb3JzID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlcnJvcnM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICB2YXIga2V5ID0gMTtcbiAgICBjb25zdCB1c2VyRnJpZW5kbHlFcnJvcnM6IGFueVtdID0gdGhpcy5tb2RlbC51c2VyRnJpZW5kbHlFcnJvcnM7XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHVzZXJGcmllbmRseUVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgZXJyb3JzLnB1c2goPHNwYW4ga2V5PXtrZXl9PjxiPkVycm9yOiA8L2I+PC9zcGFuPik7XG4gICAgICBrZXkrKztcbiAgICAgIGVycm9ycy5wdXNoKDxzcGFuIGtleT17a2V5fT57dXNlckZyaWVuZGx5RXJyb3JzW2ldfTwvc3Bhbj4pO1xuICAgICAga2V5Kys7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnQtYXJlYVwiXG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5tb2RlbC50ZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlOiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT5cbiAgICAgICAgICAgICAgKHRoaXMubW9kZWwudGV4dCA9IGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4gdGhpcy5tb2RlbC5jaGVja0tleShlLCBlKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLm1vZGVsLnJlYWRPbmx5fVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5hcmlhTGFiZWx9XG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAge2Vycm9ycy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19lcnJyb3NfYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC50b2dnbGVFcnJvcnMoKX0+XG4gICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmVycm9yQnV0dG9uVGV4dH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7dGhpcy5tb2RlbC5jYW5TaG93RXJyb3JzICYmIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudC1lcnJvcnNcIj57ZXJyb3JzfTwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItanNvbi1lZGl0b3ItdGV4dGFyZWFcIixcbiAgKHByb3BzOiBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5LCBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlMb2dpY1VJIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5idXR0b247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IFwic3ZjLWxvZ2ljLXRhYl9fY29udGVudC1hY3Rpb24gc3ZjLWJ0blwiICsgKCh0aGlzLm1vZGVsLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5tb2RlbC5lbmFibGVkKSA/IFwiIHN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtYWN0aW9uLS1kaXNhYmxlZFwiIDogXCJcIik7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9uKCk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc05hbWV9XG4gICAgICB0aXRsZT17dGhpcy5tb2RlbC50aXRsZX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnRpdGxlfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1sb2dpYy1hZGQtYnV0dG9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBUYWJMb2dpY0NvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFN1cnZleUxvZ2ljVUkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBsb2dpYyA9IHRoaXMubW9kZWw7XG4gICAgdmFyIHJvb3RDbGFzcyA9IFwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnJlbmRlclZpZXdDb250ZW50KCk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtyb290Q2xhc3N9Pntjb250ZW50fTwvZGl2PjtcbiAgfVxuICBwcml2YXRlIHJlbmRlclZpZXdDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBsb2dpY1RhYkNsYXNzTmFtZSA9IFwic3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3ZjLWxvZ2ljLXRhYl9fY29udGVudCBcIiArICh0aGlzLm1vZGVsLmhhc0l0ZW1zID8gXCJcIiA6IFwic3ZjLWxvZ2ljLXRhYl9fZW1wdHlcIik7XG4gICAgY29uc3QgYWRkTG9naWMgPSAhdGhpcy5tb2RlbC5yZWFkT25seSA/IDxUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCBidXR0b249e3RoaXMubW9kZWwuYWRkTmV3QnV0dG9ufSAvPiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKFxuICAgICAgPEZyYWdtZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bG9naWNUYWJDbGFzc05hbWV9PlxuICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuaXRlbXNTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmhhc0l0ZW1zID8gbnVsbCA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWxvZ2ljLXRhYl9fY29udGVudC1lbXB0eVwiID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHRcIj57dGhpcy5tb2RlbC5lbXB0eVRhYlBsYWNlSG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2Pil9XG4gICAgICAgICAge2FkZExvZ2ljfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWxvZ2ljXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJMb2dpY0NvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24sIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUZXN0U3VydmV5VGFiVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVNpbXVsYXRvciB9IGZyb20gXCIuL1N1cnZleVNpbXVsYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UmVzdWx0cyB9IGZyb20gXCIuLi9SZXN1bHRzXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5idXR0b247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IFwic3ZjLXByZXZpZXdfX3Rlc3QtYWdhaW4gc3ZjLWJ0blwiO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbigpO1xuICAgICAgfX1cbiAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3NOYW1lfVxuICAgICAgdGl0bGU9e3RoaXMubW9kZWwudGl0bGV9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC50aXRsZX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItcHJldmlldy10ZXN0LWFnYWluXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFRhYlByZXZpZXdTdXJ2ZXlDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUZXN0U3VydmV5VGFiVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0YWJDb250ZW50Q2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLXRlc3QtdGFiX19jb250ZW50XCIgKyAodGhpcy5tb2RlbC5pc1BhZ2VUb29sYmFyVmlzaWJsZSA/IFwiIHN2Yy1jcmVhdG9yLXRhYl9fY29udGVudC0td2l0aC10b29sYmFyXCIgOiBcIlwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RhYkNvbnRlbnRDbGFzc05hbWV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wbHVnaW4tdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPFN1cnZleVNpbXVsYXRvciBtb2RlbD17dGhpcy5tb2RlbC5zaW11bGF0b3J9PjwvU3VydmV5U2ltdWxhdG9yPlxuICAgICAgICAgIHshdGhpcy5tb2RlbC5pc1J1bm5pbmcgPyA8VGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCBidXR0b249e3RoaXMubW9kZWwudGVzdEFnYWluQWN0aW9ufSAvPiA6IG51bGx9XG4gICAgICAgICAgeyF0aGlzLm1vZGVsLmlzUnVubmluZyA/IDxTdXJ2ZXlSZXN1bHRzIHN1cnZleT17dGhpcy5tb2RlbC5zaW11bGF0b3Iuc3VydmV5fSAvPiA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5nZXRCb3R0b21Ub29sYmFyKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIGdldEJvdHRvbVRvb2xiYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzUGFnZVRvb2xiYXJWaXNpYmxlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10ZXN0LXRhYl9fY29udGVudC1hY3Rpb25zXCI+XG4gICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC5wYWdlc30+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi10ZXN0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJQcmV2aWV3U3VydmV5Q29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlTaW11bGF0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTaW11bGF0b3IgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBTdXJ2ZXlTaW11bGF0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBtYWluU2ltdWxhdG9yQ2xhc3MgPSBcInN2ZC1zaW11bGF0b3ItbWFpblwiICtcbiAgICAgICh0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBcIiBzdmQtc2ltdWxhdG9yLW1haW4tLWRlc2t0b3BcIiA6IFwiXCIpO1xuICAgIGlmICghdGhpcy5tb2RlbC5zdXJ2ZXkpIHtcbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzfT48L2Rpdj47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGVsLmhhc0ZyYW1lKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3MgKyBcIiBcIiArIHRoaXMubW9kZWwuc2ltdWxhdG9yTWFpbkNzc0NsYXNzfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yLXdyYXBwZXJcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgd2lkdGg6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICBcInN2ZC1zaW11bGF0b3ItZnJhbWUgXCIgKyB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmNzc0NsYXNzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUubGFuZHNjYXBlZEZyYW1lV2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5sYW5kc2NhcGVkRnJhbWVIZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvclwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmRldmljZVdpZHRoICsgXCJweFwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZGV2aWNlSGVpZ2h0ICsgXCJweFwiLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgICAgIFwic2NhbGUoXCIgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5zY2FsZSArXG4gICAgICAgICAgICAgICAgICBcIikgdHJhbnNsYXRlKC01MCUsIC01MCUpXCJcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5XG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRhYlRyYW5zbGF0aW9uQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVHJhbnNsYXRpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudCBzdmMtdHJhbnNsYXRpb24tdGFiXCI+XG4gICAgICAgIHt0aGlzLnJlbmRlckVsZW1lbnRDb250ZW50KCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlckVsZW1lbnRDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc0VtcHR5KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN0LW5vLXN0cmluZ3NcIj5cbiAgICAgICAgICA8c3Bhbj57dGhpcy5tb2RlbC5ub1N0cmluZ3NUZXh0fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN0LWNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtbiBzdC1zdHJpbmdzLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtcm93IHN0LXN0cmluZ3MtaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3RyaW5nc0hlYWRlclN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtcm93IHN2Yy1wbHVnaW4tdGFiX19jb250ZW50IHN0LXN0cmluZ3NcIj5cbiAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdHJpbmdzU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi10cmFuc2xhdGlvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiVHJhbnNsYXRpb25Db21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uTGluZVNrZWxldG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZC10cmFuc2xhdGlvbi1saW5lLXNrZWxldG9uXCI+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic2QtdHJhbnNsYXRpb24tbGluZS1za2VsZXRvblwiLCAocHJvcHM6IGFueSkgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2xhdGlvbkxpbmVTa2VsZXRvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgfSBmcm9tIFwiLi9Ub29sYm94SXRlbVwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3JUb29sYm94UHJvcHMsIFRvb2xib3ggfSBmcm9tIFwiLi9Ub29sYm94XCI7XG5cbmV4cG9ydCBjbGFzcyBBZGFwdGl2ZVRvb2xib3ggZXh0ZW5kcyBUb29sYm94IHtcbiAgcHJpdmF0ZSBtYW5hZ2VyOiBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXI7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleUNyZWF0b3JUb29sYm94UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlcihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHRoaXMudG9vbGJveCxcbiAgICAgIFwiLnN2Yy10b29sYm94X190b29sOm5vdCguc3YtZG90cyk+LnN2LWFjdGlvbl9fY29udGVudFwiLFxuICAgICAgNDQsXG4gICAgICA0NFxuICAgICk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tYW5hZ2VyICYmICh0aGlzLm1hbmFnZXIuZGlzcG9zZSgpKTtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy10b29sYm94XCIgKyAodGhpcy50b29sYm94LmlzQ29tcGFjdCA/IFwiIHN2Yy10b29sYm94LS1jb21wYWN0XCIgOiBcIlwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jb250YWluZXJcIj5cbiAgICAgICAgICB7KHRoaXMudG9vbGJveC5pc0NvbXBhY3QgfHwgdGhpcy50b29sYm94LmNhdGVnb3JpZXMubGVuZ3RoID09IDEpID9cbiAgICAgICAgICAgICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeVwiPlxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJJdGVtcyh0aGlzLnRvb2xib3gucmVuZGVyZWRBY3Rpb25zLCB0aGlzLnRvb2xib3guaXNDb21wYWN0KX1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgICAgIDogdGhpcy5yZW5kZXJDYXRlZ29yaWVzKClcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+LCBpc0NvbXBhY3Q/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PlxuICAgICAgPFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBpdGVtPXsoaXRlbSBhcyBhbnkpfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IGlzQ29tcGFjdD17aXNDb21wYWN0fSBrZXk9e1wiaXRlbVwiICsgaXRlbUluZGV4fT48L1N1cnZleUNyZWF0b3JUb29sYm94VG9vbD5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckNhdGVnb3J5Q29udGVudChjYXRlZ29yeTogYW55KTogQXJyYXk8YW55PiB7XG4gICAgbGV0IGl0ZW1zID0gW107XG4gICAgaWYgKCFjYXRlZ29yeS5jb2xsYXBzZWQpIHtcbiAgICAgIGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcyhjYXRlZ29yeS5pdGVtcywgZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtYWRhcHRpdmUtdG9vbGJveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRhcHRpdmVUb29sYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcyB7XG4gIG1vZGVsOiBDcmVhdG9yQmFzZTtcbn1cblxuZXhwb3J0IGNsYXNzIFRvb2xib3ggZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHVibGljIGdldCB0b29sYm94KCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0b3IudG9vbGJveDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnRvb2xib3g7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy50b29sYm94Lmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY29udGFpbmVyXCI+XG4gICAgICAgICAgeyh0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSkgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC52aXNpYmxlQWN0aW9ucyl9XG4gICAgICAgICAgICA8L2Rpdj4pXG4gICAgICAgICAgICA6IHRoaXMucmVuZGVyQ2F0ZWdvcmllcygpXG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJJdGVtcyhpdGVtczogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT5cbiAgICAgIDxTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgaXRlbT17KGl0ZW0gYXMgYW55KX0gY3JlYXRvcj17dGhpcy5jcmVhdG9yfSBrZXk9e1wiaXRlbVwiICsgaXRlbUluZGV4fSBpc0NvbXBhY3Q9e2ZhbHNlfT48L1N1cnZleUNyZWF0b3JUb29sYm94VG9vbD5cbiAgICApO1xuICB9XG4gIHJlbmRlckNhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVuZGVyQ2F0ZWdvcnlIZWFkZXIoY2F0ZWdvcnkpO1xuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnJlbmRlckNhdGVnb3J5Q29udGVudChjYXRlZ29yeSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeVwiIGtleT17Y2F0ZWdvcnkubmFtZX0+XG4gICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICB7aXRlbXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlckNhdGVnb3J5SGVhZGVyKGNhdGVnb3J5OiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaWNvbk5hbWUgPSBjYXRlZ29yeS5jb2xsYXBzZWQgPyBcImFycm93LWRvd25cIiA6IFwiYXJyb3ctdXBcIjtcbiAgICBjb25zdCBzdmdJY29uQ2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyX19idXR0b24gc3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbi0tXCIgKyAoY2F0ZWdvcnkuY29sbGFwc2VkID8gXCJleHBhbmRcIiA6IFwiY29sbGFwc2VcIik7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LWhlYWRlclwiIG9uQ2xpY2s9e2UgPT4gY2F0ZWdvcnkudG9nZ2xlU3RhdGUoKX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS10aXRsZVwiPntjYXRlZ29yeS5uYW1lfTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyX19jb250cm9sc1wiPlxuICAgICAgICAgIDxTdmdJY29uIGNsYXNzTmFtZT17c3ZnSWNvbkNsYXNzTmFtZX0gaWNvbk5hbWU9e1wiaWNvbi1cIiArIGljb25OYW1lfSBzaXplPXsyNH0+PC9TdmdJY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNhdGVnb3J5Q29udGVudChjYXRlZ29yeTogYW55KTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuICFjYXRlZ29yeS5jb2xsYXBzZWQgPyB0aGlzLnJlbmRlckl0ZW1zKGNhdGVnb3J5Lml0ZW1zKSA6IFtdO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHtcbiAgQ3JlYXRvckJhc2UsXG4gIGVkaXRvckxvY2FsaXphdGlvbixcbiAgSVF1ZXN0aW9uVG9vbGJveEl0ZW1cbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCwgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBUb29sYm94VG9vbFZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIEJhc2UsXG4gIFN1cnZleU1vZGVsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JUb29sYm94SXRlbVByb3BzIHtcbiAgaXRlbTogSVF1ZXN0aW9uVG9vbGJveEl0ZW07XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBpc0NvbXBhY3Q6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JUb29sYm94SXRlbVByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogVG9vbGJveFRvb2xWaWV3TW9kZWw7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBUb29sYm94VG9vbFZpZXdNb2RlbCh0aGlzLml0ZW0sIHRoaXMucHJvcHMuY3JlYXRvcik7XG4gIH1cbiAgcHVibGljIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHVibGljIGdldCBjcmVhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBhY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNDb21wYWN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gKHRoaXMuaXRlbSBhcyBhbnkpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gKCh0aGlzLml0ZW0gYXMgYW55KSBhcyBBY3Rpb24pO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hfX3Rvb2wgXCIgKyBpdGVtLmNzcyArIChpdGVtLmlzVmlzaWJsZSA/IFwiXCIgOiBcIiBzdi1hY3Rpb24tLWhpZGRlblwiKTtcbiAgICBjb25zdCBpdGVtQ29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2Yy10b29sYm94LWl0ZW1cIixcbiAgICAgIHtcbiAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxuICAgICAgICBjcmVhdG9yOiB0aGlzLmNyZWF0b3IsXG4gICAgICAgIGlzQ29tcGFjdDogdGhpcy5pc0NvbXBhY3RcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBrZXk9e2l0ZW0uaWR9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgZXZlbnQucGVyc2lzdCgpO1xuICAgICAgICAgIHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYWN0aW9uX19jb250ZW50XCI+XG4gICAgICAgICAgeyh0aGlzLmlzQ29tcGFjdCAmJiBpdGVtLm5lZWRTZXBhcmF0b3IpID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge2l0ZW1Db21wb25lbnR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW1Qcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFRvb2xib3hUb29sVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB0b29sYm94SXRlbTogSVF1ZXN0aW9uVG9vbGJveEl0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBUb29sYm94VG9vbFZpZXdNb2RlbCh0b29sYm94SXRlbSwgdGhpcy5wcm9wcy5jcmVhdG9yKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY2xhc3NOYW1lID1cbiAgICAgIFwic3ZjLXRvb2xib3hfX2l0ZW0gc3ZjLXRvb2xib3hfX2l0ZW0tLVwiICsgdGhpcy5pdGVtLmljb25OYW1lO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e1xuICAgICAgICAgIHRoaXMuaXRlbS50b29sdGlwICtcbiAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInRvb2xib3hcIikgK1xuICAgICAgICAgIFwiIGl0ZW1cIlxuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgZXZlbnQucGVyc2lzdCgpO1xuICAgICAgICAgIHRoaXMubW9kZWwuY2xpY2soZXZlbnQpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1jb250YWluZXJcIj5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e3RoaXMuaXRlbS5pY29uTmFtZX0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHsodGhpcy5wcm9wcy5pc0NvbXBhY3QgP1xuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWJhbm5lciBzdmMtaXRlbV9fYmFubmVyXCI+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e3RoaXMuaXRlbS5pY29uTmFtZX0gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0taWNvblwiPjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLXRpdGxlXCI+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDpcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS10aXRsZVwiPnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10b29sYm94LWl0ZW1cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUNyZWF0b3JUb29sYm94SXRlbSwgcHJvcHMpO1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jcmVhdG9yX2NvcmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X3JlYWN0X3VpX187Il0sInNvdXJjZVJvb3QiOiIifQ==
|