survey-creator-react 1.9.39 → 1.9.40

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * SurveyJS Creator React v1.9.39
2
+ * SurveyJS Creator React v1.9.40
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
@@ -372,13 +372,8 @@ var LogoImageComponent = /** @class */ (function (_super) {
372
372
  var _this = this;
373
373
  var content = null;
374
374
  if (this.model.survey.locLogo.renderedHtml) {
375
- content = react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_1___default.a.Fragment, null,
376
- react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["LogoImage"], { data: this.props.data.survey }),
377
- this.model.allowEdit ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-image-item-value-controls" },
378
- Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: "svc-image-item-value-controls__button svc-image-item-value-controls__choose-file", onClick: function () { return _this.model.chooseFile(_this.model); } },
379
- react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["SvgIcon"], { size: 24, iconName: "icon-file" }))),
380
- Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { className: "svc-image-item-value-controls__button svc-image-item-value-controls__remove", onClick: function () { return _this.model.remove(_this.model); } },
381
- react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["SvgIcon"], { size: 24, iconName: "icon-delete" })))) : null);
375
+ content = Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: this.model.containerCss, onClick: function () { return _this.model.chooseFile(_this.model); } },
376
+ react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["LogoImage"], { data: this.props.data.survey })));
382
377
  }
383
378
  else {
384
379
  content = this.model.allowEdit ? Object(survey_react_ui__WEBPACK_IMPORTED_MODULE_2__["attachKey2click"])(react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-logo-image-placeholder", onClick: function () { return _this.model.chooseFile(_this.model); } },
@@ -2816,7 +2811,7 @@ __webpack_require__.r(__webpack_exports__);
2816
2811
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StylesManager", function() { return survey_creator_core__WEBPACK_IMPORTED_MODULE_43__["StylesManager"]; });
2817
2812
 
2818
2813
  var Version;
2819
- Version = "".concat("1.9.39");
2814
+ Version = "".concat("1.9.40");
2820
2815
  // import "@survey/creator/survey-creator-core.css";
2821
2816
 
2822
2817
 
@@ -4075,4 +4070,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_react_ui__;
4075
4070
 
4076
4071
  /******/ });
4077
4072
  });
4078
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Nb2RlbEVsZW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvTmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Ob3RpZmllci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9PYmplY3RTZWxlY3Rvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9QYWdlTmF2aWdhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Byb3BlcnR5R3JpZC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVkaXRvckNvbnRlbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUXVlc3Rpb25FbWJlZGRlZFN1cnZleS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkxpbmtWYWx1ZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9SZXN1bHRzLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1NpZGVCYXIudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3RyaW5nRWRpdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1N1cnZleUNyZWF0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3ZnQnVuZGxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1RhYmJlZE1lbnUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1BhZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkZvb3Rlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uUmF0aW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uV2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1Jvdy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2hlbHBlcnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2luZGV4LnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvZXZlbnRzLnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9EZXNpZ25lci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0VtYmVkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvckFjZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0pzb25FZGl0b3JUZXh0YXJlYS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0xvZ2ljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvUHJldmlldy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1N1cnZleVNpbXVsYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1RyYW5zbGF0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb25MaW5lU2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9BZGFwdGl2ZVRvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3Rvb2xib3gvVG9vbGJveENhdGVnb3J5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3Rvb2xib3gvVG9vbGJveEl0ZW0udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNvcmVcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXktY29yZVwiLFwiYW1kXCI6XCJzdXJ2ZXktY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleUNyZWF0b3JDb3JlXCIsXCJjb21tb25qczJcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIn0iLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIixcImFtZFwiOlwic3VydmV5LXJlYWN0LXVpXCJ9Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FB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Ozs7Ozs7Ozs7Ozs7QUN0REY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQU8sSUFBSSxPQUFlLENBQUM7QUFDM0IsT0FBTyxHQUFHLFVBQUcsUUFBbUIsQ0FBRSxDQUFDO0FBRW5D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Q0FBQztvQkFDRCxxRUFBTSxTQUFTLEVBQUMseUJBQXlCLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQVEsQ0FDbkUsQ0FDRyxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsK0JBQUM7QUFBRCxDQUFDLENBckQ2QyxpRUFBbUIsR0FxRGhFOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsVUFBQyxLQUFLO0lBQ3JFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7OztBQzVJSCxtRDs7Ozs7Ozs7Ozs7QUNBQSx1RDs7Ozs7Ozs7Ozs7QUNBQSx5RDs7Ozs7Ozs7Ozs7QUNBQSxpRTs7Ozs7Ozs7Ozs7QUNBQSw2RCIsImZpbGUiOiJzdXJ2ZXktY3JlYXRvci1yZWFjdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LXJlYWN0LXVpXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5Q3JlYXRvclwiLCBbXCJyZWFjdFwiLCBcInJlYWN0LWRvbVwiLCBcInN1cnZleS1jb3JlXCIsIFwic3VydmV5LWNyZWF0b3ItY29yZVwiLCBcInN1cnZleS1yZWFjdC11aVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTdXJ2ZXlDcmVhdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1jcmVhdG9yLWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktcmVhY3QtdWlcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleUNyZWF0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdLCByb290W1wiU3VydmV5XCJdLCByb290W1wiU3VydmV5Q3JlYXRvckNvcmVcIl0sIHJvb3RbXCJTdXJ2ZXlSZWFjdFwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY3JlYXRvcl9jb3JlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X3JlYWN0X3VpX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9lbnRyaWVzL2luZGV4LnRzXCIpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdXJ2ZXlFbGVtZW50QmFzZSwgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25CdXR0b24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NlcyArIFwiIHN2Yy1hY3Rpb24tYnV0dG9uXCI7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgIGNsYXNzZXMgKz0gXCIgc3ZjLWFjdGlvbi1idXR0b24tLXNlbGVjdGVkXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIHN2Yy1hY3Rpb24tYnV0dG9uLS1kaXNhYmxlZFwiO1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3Nlc30+e3RoaXMucHJvcHMudGV4dH08L3NwYW4+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayhcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmNsaWNrKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGl0bGU9e3RoaXMucHJvcHMudGl0bGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMudGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJbWFnZUl0ZW1WYWx1ZSwgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGl0ZW06IEltYWdlSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWw7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgdGhpcy5wcm9wcy5pdGVtLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiaXRlbVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5pdGVtc1Jvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuXG4gIHByZXZlbnREcmFnSGFuZGxlciA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgaXNOZXcgPSAhdGhpcy5wcm9wcy5xdWVzdGlvbi5pc0l0ZW1Jbkxpc3QodGhpcy5wcm9wcy5pdGVtKTtcbiAgICBjb25zdCBpbWFnZVN0eWxlID0gIXRoaXMubW9kZWwuZ2V0SXNOZXdJdGVtU2luZ2xlKCkgPyB7IHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCwgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfSA6IG51bGw7XG5cbiAgICBsZXQgY29udGVudCA9IG51bGw7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBjb250ZW50ID0gKDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIlxuICAgICAgICAgIG9uRHJvcD17dGhpcy5tb2RlbC5vbkRyb3B9IG9uRHJhZ092ZXI9e3RoaXMubW9kZWwub25EcmFnT3Zlcn0gb25EcmFnTGVhdmU9e3RoaXMubW9kZWwub25EcmFnTGVhdmV9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0gc2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWlubGluZVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19sYWJlbFwiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbWFnZVN0eWxlfSBjbGFzc05hbWU9XCJzZC1pbWFnZXBpY2tlcl9faW1hZ2VcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VOZXdGaWxlKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWFkZC1sZ1wifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1hcmVhLWluZGljYXRvclwiXG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kcmFnLWFyZWEtaW5kaWNhdG9yXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZGVsZXRlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuZ2V0Um9vdENzcygpfVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtaXRlbS12YWx1ZT17XG4gICAgICAgICAgdGhpcy5tb2RlbC5pc0RyYWdnYWJsZSA/IHRoaXMubW9kZWwuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgICBvbkRyYWdTdGFydD17dGhpcy5wcmV2ZW50RHJhZ0hhbmRsZXJ9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlLXdyYXBwZXJfX2dob3N0XCJ9IHN0eWxlPXtpbWFnZVN0eWxlfT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlcl9fY29udGVudFwifT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1jaG9vc2UtZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWltYWdlLWl0ZW0tdmFsdWVcIixcbiAgKHByb3BzOiBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgZ2V0TG9jU3RyaW5nLCBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50IH0gZnJvbSBcInNyYy9ldmVudHNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICB0aGlzLnByb3BzLml0ZW1cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiaXRlbVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5tb2RlbC5hbGxvd0FkZCA/IChcbiAgICAgIGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIlxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLnRvb2x0aXB9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLmFkZCh0aGlzLm1vZGVsKTtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzTmV3ID0gZmFsc2U7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLWFkZF8xNngxNlwifSB0aXRsZT17dGhpcy5tb2RlbC50b29sdGlwfT48L1N2Z0ljb24+XG4gICAgICA8L3NwYW4+KVxuICAgICkgOiAoXG4gICAgICA8PlxuICAgICAgICB7XCIgXCJ9XG4gICAgICAgIHt0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuZHJhZ1Rvb2x0aXB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWctaWNvblwiIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JcIn0gdGl0bGU9e3RoaXMubW9kZWwuZHJhZ1Rvb2x0aXB9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX3JlbW92ZVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC50b29sdGlwfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwucmVtb3ZlKHRoaXMubW9kZWwpfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tcmVtb3ZlXzE2eDE2XCJ9IHRpdGxlPXt0aGlzLm1vZGVsLnRvb2x0aXB9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgPC8+XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgXCJzdmMtaXRlbS12YWx1ZS13cmFwcGVyXCIgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmFsbG93QWRkID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW5ld1wiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ2dpbmcgPyBcIiBzdmMtaXRlbS12YWx1ZS0tZHJhZ2dpbmdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wR2hvc3QgPyBcIiBzdmMtaXRlbS12YWx1ZS0tZ2hvc3RcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wTW92ZURvd24gPyBcIiBzdmMtaXRlbS12YWx1ZS0tbW92ZWRvd25cIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wTW92ZVVwID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW1vdmV1cFwiIDogXCJcIilcbiAgICAgICAgfVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtaXRlbS12YWx1ZT17XG4gICAgICAgICAgdGhpcy5tb2RlbC5pc0RyYWdnYWJsZSA/IHRoaXMubW9kZWwuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlX19naG9zdFwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNcIj57YnV0dG9ufTwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pdGVtLXZhbHVlX19pdGVtXCJ9IG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5tb2RlbC5zZWxlY3QodGhpcy5tb2RlbCwgZXZlbnQpfT57dGhpcy5wcm9wcy5lbGVtZW50fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtaXRlbS12YWx1ZVwiLFxuICAocHJvcHM6IEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBMb2dvSW1hZ2UsIFN2Z0ljb24sIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBMb2dvSW1hZ2VWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogQ3JlYXRvckJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2VDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgbW9kZWw6IExvZ29JbWFnZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IExvZ29JbWFnZVZpZXdNb2RlbCh0aGlzLnByb3BzLmRhdGEsIG51bGwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImRhdGFcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwucm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNvbnRlbnQ6IEpTWC5FbGVtZW50ID0gbnVsbDtcbiAgICBpZiAodGhpcy5tb2RlbC5zdXJ2ZXkubG9jTG9nby5yZW5kZXJlZEh0bWwpIHtcbiAgICAgIGNvbnRlbnQgPSA8PlxuICAgICAgICA8TG9nb0ltYWdlIGRhdGE9e3RoaXMucHJvcHMuZGF0YS5zdXJ2ZXl9PjwvTG9nb0ltYWdlPlxuICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd0VkaXQgPyA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge2F0dGFjaEtleTJjbGljayhcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2Nob29zZS1maWxlXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VGaWxlKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5yZW1vdmUodGhpcy5tb2RlbCl9PlxuICAgICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kZWxldGVcIn0+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PiA6IG51bGx9XG4gICAgICA8Lz47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29udGVudCA9IHRoaXMubW9kZWwuYWxsb3dFZGl0ID8gYXR0YWNoS2V5MmNsaWNrKDxkaXYgY2xhc3NOYW1lPVwic3ZjLWxvZ28taW1hZ2UtcGxhY2Vob2xkZXJcIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZUZpbGUodGhpcy5tb2RlbCl9Pjxzdmc+PHVzZSB4bGlua0hyZWY9XCIjaWNvbi1sb2dvXCI+PC91c2U+PC9zdmc+PC9kaXY+KSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdmMtbG9nby1pbWFnZVwiPlxuICAgICAgICA8aW5wdXQgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdHlwZT1cImZpbGVcIiB0YWJJbmRleD17LTF9IGFjY2VwdD1cImltYWdlLypcIiBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIiAvPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtbG9nby1pbWFnZVwiLFxuICAocHJvcHM6IElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvZ29JbWFnZUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSXRlbVZhbHVlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgY29tcG9uZW50RGF0YTogYW55O1xuICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlO1xuICBjZWxsOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBNYXRyaXhDZWxsV3JhcHBlclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnByb3BzLmNvbXBvbmVudERhdGE7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBNYXRyaXhDZWxsV3JhcHBlclZpZXdNb2RlbChcbiAgICAgIGRhdGEuY3JlYXRvcixcbiAgICAgIGRhdGEuZWxlbWVudCxcbiAgICAgIGRhdGEucXVlc3Rpb24sXG4gICAgICBkYXRhLnJvdyxcbiAgICAgIGRhdGEuY29sdW1uLFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9wcy5jb21wb25lbnREYXRhO1xuICAgIHRoaXMubW9kZWwudGVtcGxhdGVEYXRhID0gZGF0YS5lbGVtZW50O1xuICAgIHRoaXMubW9kZWwucm93ID0gZGF0YS5yb3c7XG4gICAgdGhpcy5tb2RlbC5jb2x1bW4gPSBkYXRhLmNvbHVtbjtcbiAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uID0gZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY29udHJvbHMgPSBudWxsO1xuICAgIGlmICghIXRoaXMubW9kZWwucXVlc3Rpb24pIHtcbiAgICAgIGNvbnRyb2xzID0gPGRpdiBjbGFzc05hbWU9XCJzdmMtbWF0cml4LWNlbGxfX3F1ZXN0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLW1hdHJpeC1jZWxsX19xdWVzdGlvbi1jb250cm9scy1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmVkaXRRdWVzdGlvbih0aGlzLm1vZGVsKX0+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZWRpdFwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pfVxuICAgICAgPC9kaXY+O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtbWF0cml4LWNlbGxcIn1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBvbkNsaWNrPXsoZTogYW55KSA9PiAhdGhpcy5wcm9wcy5xdWVzdGlvbiAmJiB0aGlzLm1vZGVsLnNlbGVjdENvbnRleHQodGhpcy5tb2RlbCwgZSl9XG4gICAgICAgIG9uTW91c2VPdXQ9e2UgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17ZSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1tYXRyaXgtY2VsbC0tc2VsZWN0ZWRcIiArICh0aGlzLm1vZGVsLmlzU2VsZWN0ZWQgPyBcIiBzdmMtdmlzaWJsZVwiIDogXCJcIil9PjwvZGl2PlxuXG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG5cbiAgICAgICAge2NvbnRyb2xzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtbWF0cml4LWNlbGxcIixcbiAgKHByb3BzOiBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRvck1vZGVsRWxlbWVudDxQLCBTPiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFAsIFM+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFApIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jcmVhdGVNb2RlbCgpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGlmKHRoaXMubmVlZFVwZGF0ZU1vZGVsKHByZXZQcm9wcykpIHtcbiAgICAgIHRoaXMuY3JlYXRlTW9kZWwoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge31cbiAgcHJvdGVjdGVkIG5lZWRVcGRhdGVNb2RlbChwcmV2UHJvcHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5hbWVzID0gdGhpcy5nZXRVcGRhdGVkTW9kZWxQcm9wcygpO1xuICAgIGlmKCFBcnJheS5pc0FycmF5KG5hbWVzKSkgcmV0dXJuIHRydWU7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSArKykge1xuICAgICAgY29uc3Qga2V5ID0gbmFtZXNbaV07XG4gICAgICBpZih0aGlzLnByb3BzW2tleV0gIT09IHByZXZQcm9wc1trZXldKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufSIsImltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuc2V0SGFuZGxlcigpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMuc2V0SGFuZGxlcigpO1xuICB9XG4gIHByaXZhdGUgc2V0SGFuZGxlcigpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zdXJ2ZXkgfHxcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25Qcm9wZXJ0eUNoYW5nZWQuaGFzRnVuYyh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5hZGQodGhpcy5vblByb3BDaGFuZ2VkSGFuZGxlcik7XG4gIH1cbiAgICBwcml2YXRlIG9uUHJvcENoYW5nZWRIYW5kbGVyID0gKHNlbmRlcjogYW55LCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICAgIGNvbnN0IHJlYWN0aXZlUHJvcHMgPSBbXG4gICAgICAgIFwic2hvd1Byb2dyZXNzQmFyXCIsXG4gICAgICAgIFwicHJvZ3Jlc3NCYXJUeXBlXCIsXG4gICAgICAgIFwiY3VycmVudFBhZ2VWYWx1ZVwiXG4gICAgICBdO1xuICAgICAgaWYgKHJlYWN0aXZlUHJvcHMuaW5kZXhPZihvcHRpb25zLm5hbWUpIDwgMCkgcmV0dXJuO1xuICAgICAgdmFyIHZhbDogYW55ID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlYWN0aXZlUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gcmVhY3RpdmVQcm9wc1tpXTtcbiAgICAgICAgdmFsW3Byb3BOYW1lXSA9IHRoaXMuc3VydmV5W3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUodmFsKTtcbiAgICB9O1xuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5yZW1vdmUodGhpcy5vblByb3BDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0IGxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NhdGlvbjtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldCBpc1RvcCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uID09IFwidG9wXCI7XG4gICAgfVxuICAgIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RvcFxuICAgICAgICA/IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Ub3BcbiAgICAgICAgOiB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uQm90dG9tO1xuICAgIH1cbiAgICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3YtcHJvZ3Jlc3MtXCIgKyB0aGlzLnN1cnZleS5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgeyBzdXJ2ZXk6IHRoaXMuc3VydmV5LCBjc3M6IHRoaXMuc3VydmV5LmNzcywgaXNUb3A6IHRoaXMuaXNUb3AgfVxuICAgICAgKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UsIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIE5vdGlmaWVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmllckNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIG5vdGlmaWVyOiBOb3RpZmllcjtcbn1cblxuZXhwb3J0IGNsYXNzIE5vdGlmaWVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8Tm90aWZpZXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIGdldCBub3RpZmllcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5ub3RpZmllcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm5vdGlmaWVyO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5ub3RpZmllci5hY3RpdmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubm90aWZpZXIuY3NzfT5cbiAgICAgICAgPHNwYW4+e3RoaXMubm90aWZpZXIubWVzc2FnZX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBPYmplY3RTZWxlY3Rvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBMaXN0IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogT2JqZWN0U2VsZWN0b3JNb2RlbDtcbn1cbmNsYXNzIE9iamVjdFNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcm90ZWN0ZWQgZ2V0IG1vZGVsKCk6IE9iamVjdFNlbGVjdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmlzVmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtb2JqZWN0LXNlbGVjdG9yXCI+XG4gICAgICAgIDxMaXN0IG1vZGVsPXt0aGlzLm1vZGVsLmxpc3R9PjwvTGlzdD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtb2JqZWN0LXNlbGVjdG9yXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBPYmplY3RTZWxlY3RvckNvbXBvbmVudCxcbiAgICBwcm9wcyBhcyBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQge1xuICBCYXNlLFxuICBJQWN0aW9uLFxuICB1bndyYXBcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdmdJY29uLFxuICBQb3B1cCxcbiAgYXR0YWNoS2V5MmNsaWNrXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWwsIFBhZ2VzQ29udHJvbGxlciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBJU3VydmV5UGFnZU5hdmlnYXRvclByb3BzIHtcbiAgcGFnZXNDb250cm9sbGVyOiBQYWdlc0NvbnRyb2xsZXI7XG4gIHBhZ2VFZGl0TW9kZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFnZU5hdmlnYXRvciBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWw6IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWw7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5UGFnZU5hdmlnYXRvclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUGFnZU5hdmlnYXRvclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMucGFnZXNDb250cm9sbGVyLFxuICAgICAgdGhpcy5wcm9wcy5wYWdlRWRpdE1vZGVcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInBhZ2VzQ29udHJvbGxlclwiLCBcInBhZ2VFZGl0TW9kZVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnZUVkaXRNb2RlICE9PSBcImJ5cGFnZVwiKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQub25zY3JvbGwgPSBmdW5jdGlvbiAodGhpczogR2xvYmFsRXZlbnRIYW5kbGVycywgZXY6IEV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGYubW9kZWwub25Db250YWluZXJTY3JvbGwoZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vbnNjcm9sbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwic3ZjLXBhZ2UtbmF2aWdhdG9yX19zZWxlY3RvclwiO1xuICAgIGlmICh0aGlzLm1vZGVsLmlzUG9wdXBPcGVuZWQpXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yX19zZWxlY3Rvci0tb3BlbmVkXCI7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yXCIgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3sgZGlzcGxheTogdGhpcy5tb2RlbC52aXNpYmxlID8gXCJmbGV4XCIgOiBcIm5vbmVcIiB9fT5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC50b2dnbGVQYWdlU2VsZWN0b3IoKX1cbiAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5wYWdlU2VsZWN0b3JDYXB0aW9ufVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvcl9fbmF2aWdhdG9yLWljb25cIlxuICAgICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwuaWNvbn1cbiAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwucGFnZVNlbGVjdG9yQ2FwdGlvbn1cbiAgICAgICAgICA+PC9TdmdJY29uPlxuXG4gICAgICAgICAgPFBvcHVwXG4gICAgICAgICAgICBtb2RlbD17dGhpcy5tb2RlbC5wb3B1cE1vZGVsfVxuICAgICAgICAgIC8vY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yX19wb3B1cFwiXG4gICAgICAgICAgPjwvUG9wdXA+XG4gICAgICAgIDwvZGl2Pil9XG4gICAgICAgIHt0aGlzLm1vZGVsLml0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgIDxTdXJ2ZXlQYWdlTmF2aWdhdG9ySXRlbVxuICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICA+PC9TdXJ2ZXlQYWdlTmF2aWdhdG9ySXRlbT5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UGFnZU5hdmlnYXRvckl0ZW0gZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PGFueSwgYW55PiB7XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbSBhcyBCYXNlO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS1jb250ZW50XCI7XG4gICAgaWYgKHVud3JhcChpdGVtLmFjdGl2ZSkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS0tc2VsZWN0ZWRcIjtcbiAgICB9XG4gICAgaWYgKHVud3JhcChpdGVtLmRpc2FibGVkKSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbVwiPlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hY3Rpb24oaXRlbSk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIiB0aXRsZT17aXRlbS50aXRsZX0+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1zbWFsbCBzdmMtdGV4dC0tYm9sZFwiPntpdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2Pil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UsIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSVByb3BlcnR5R3JpZENvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFByb3BlcnR5R3JpZFZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R3JpZENvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElQcm9wZXJ0eUdyaWRDb21wb25lbnRQcm9wcywgYW55PiB7XG5cbiAgZ2V0IG1vZGVsKCk6IFByb3BlcnR5R3JpZFZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYnV0dG9uZ3JvdXBcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQcm9wZXJ0eUdyaWRDb21wb25lbnQ7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXByb3BlcnR5LWdyaWRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5R3JpZENvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiwgU3VydmV5RXJyb3IsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciwgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xuICBnZXQgc3VydmV5KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oXG4gICAgICAhcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nIHx8IHF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZygpXG4gICAgICAgID8gcXVlc3Rpb24uZ2V0VGVtcGxhdGUoKVxuICAgICAgICA6IHF1ZXN0aW9uLmdldENvbXBvbmVudE5hbWUoKSxcbiAgICAgIHtcbiAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICBpc0Rpc3BsYXlNb2RlOiBxdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgIGNyZWF0b3I6IHRoaXMsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbjtcbiAgfVxuICByZW5kZXJFcnJvcihrZXk6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yLCBjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5zdXJ2ZXkuZ2V0QWxsUXVlc3Rpb25zKClbMF07XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbiBjcmVhdG9yPXt0aGlzfSBlbGVtZW50PXtxdWVzdGlvbn0+PC9TdXJ2ZXlRdWVzdGlvbj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWVkaXRvci1jb250ZW50XCIsXG4gIChwcm9wczogSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgU3VydmV5UGFnZSwgSVN1cnZleUNyZWF0b3IsIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkVtYmVkZGVkU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEVtYmVkZGVkU3VydmV5IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBnZXQgZW1iZWRkZWRTdXJ2ZXkoKTogUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcHMuZWxlbWVudCB8fCB0aGlzLnByb3BzLnF1ZXN0aW9uKSBhcyBRdWVzdGlvbkVtYmVkZGVkU3VydmV5TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5lbWJlZGRlZFN1cnZleSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5lbWJlZGRlZFN1cnZleS5lbWJlZGRlZFN1cnZleTtcbiAgICBpZiAoIXN1cnZleSB8fCAhc3VydmV5LmN1cnJlbnRQYWdlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFN1cnZleVBhZ2VcbiAgICAgIHN1cnZleT17c3VydmV5fVxuICAgICAgcGFnZT17c3VydmV5LmN1cnJlbnRQYWdlfVxuICAgICAgY3NzPXtzdXJ2ZXkuY3NzfVxuICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgIC8+O1xuXG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImVtYmVkZGVkc3VydmV5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlFbGVtZW50RW1iZWRkZWRTdXJ2ZXksIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RRdWVzdGlvbkZhY3RvcnksXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Vcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uLCBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25MaW5rVmFsdWUgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2xlYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHNob3dDbGVhciA9ICh0aGlzLnF1ZXN0aW9uQmFzZSBhcyBhbnkpLnNob3dDbGVhcjtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25CYXNlLmlzUmVhZE9ubHkgJiYgc2hvd0NsZWFyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgY2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5saW5rQ2xlYXJCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvQ2xlYXJDbGljaygpfVxuICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLnF1ZXN0aW9uLmlzU2VsZWN0ZWR9XG4gICAgICAgICAgdGV4dD17ZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmNsZWFyXCIpfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICBjbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmxpbmtTZXRCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvTGlua0NsaWNrKCl9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMucXVlc3Rpb24uaXNTZWxlY3RlZH1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5fVxuICAgICAgICAgIHRleHQ9e3RoaXMucXVlc3Rpb24ubGlua1ZhbHVlVGV4dH1cbiAgICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi50b29sdGlwfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgIHt0aGlzLnJlbmRlckNsZWFyKCl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJsaW5rdmFsdWVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSZXN1bHRzSXRlbU1vZGVsLCBTdXJ2ZXlSZXN1bHRzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSBcIi4vQWN0aW9uQnV0dG9uXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBJU3VydmV5UmVzdWx0c1Byb3BzIHtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSZXN1bHRzIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgSVN1cnZleVJlc3VsdHNQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFN1cnZleVJlc3VsdHNNb2RlbDtcbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLnN1cnZleSkge1xuICAgICAgdGhpcy5tb2RlbCA9IG5ldyBTdXJ2ZXlSZXN1bHRzTW9kZWwodGhpcy5wcm9wcy5zdXJ2ZXkpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJzdXJ2ZXlcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlci10ZXh0XCI+e3RoaXMubW9kZWwuc3VydmV5UmVzdWx0c1RleHR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXItdHlwZXNcIj5cbiAgICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMubW9kZWwuc2VsZWN0VGFibGVDbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLmdldExvY1N0cmluZyhcImVkLnN1cnZleVJlc3VsdHNUYWJsZVwiKX1cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMubW9kZWwuaXNUYWJsZVNlbGVjdGVkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnNlbGVjdEpzb25DbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLmdldExvY1N0cmluZyhcImVkLnN1cnZleVJlc3VsdHNKc29uXCIpfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dGhpcy5tb2RlbC5pc0pzb25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucmVuZGVyUmVzdWx0QXNUZXh0KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlclJlc3VsdEFzVGFibGUoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUmVzdWx0QXNUZXh0KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5yZXN1bHRWaWV3VHlwZSAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190ZXh0IHN2ZC1saWdodC1iZy1jb2xvclwiPlxuICAgICAgICA8ZGl2Pnt0aGlzLm1vZGVsLnJlc3VsdFRleHR9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclJlc3VsdEFzVGFibGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLnJlc3VsdFZpZXdUeXBlICE9PSBcInRhYmxlXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190YWJsZSBzdmQtbGlnaHQtYmctY29sb3JcIj5cbiAgICAgICAgPHRhYmxlPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJzdmQtbGlnaHQtYmFja2dyb3VuZC1jb2xvclwiPlxuICAgICAgICAgICAgICA8dGgga2V5PXsxfSBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5yZXN1bHRzVGl0bGV9XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aCBrZXk9ezJ9IGNsYXNzTmFtZT1cInN2ZC1kYXJrLWJvcmRlci1jb2xvclwiPlxuICAgICAgICAgICAgICAgIHt0aGlzLm1vZGVsLnJlc3VsdHNEaXNwbGF5VmFsdWV9XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PntTdXJ2ZXlSZXN1bHRzLnJlbmRlclJvd3ModGhpcy5tb2RlbC5yZXN1bHREYXRhKX08L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBzdGF0aWMgcmVuZGVyUm93cyhkYXRhOiBBcnJheTxhbnk+KTogQXJyYXk8SlNYLkVsZW1lbnQ+IHtcbiAgICBjb25zdCByb3dzID0gW107XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICsrKSB7XG4gICAgICByb3dzLnB1c2goPFN1cnZleVJlc3VsdHNCeVJvdyBrZXk9e2kgKyAxfSByb3c9e2RhdGFbaV19IC8+KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVJlc3VsdHNCeVJvdyBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgcm93KCk6IFN1cnZleVJlc3VsdHNJdGVtTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnJvdztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucm93O1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8dHIgb25DbGljaz17KCkgPT4gdGhpcy5yb3cudG9nZ2xlKCl9PlxuICAgICAgICAgIDx0ZCBrZXk9ezF9XG4gICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nTGVmdDogdGhpcy5yb3cudGV4dE1hcmdpbiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5pc05vZGUgPyAoXG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogdGhpcy5yb3cubWFya2VyTWFyZ2luIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcInN2ZC10ZXN0LXJlc3VsdHNfX21hcmtlciBcIiArICh0aGlzLnJvdy5jb2xsYXBzZWQgPyBcIlwiIDogXCJzdmQtdGVzdC1yZXN1bHRzX19tYXJrZXItLWV4cGFuZGVkXCIpfT5cbiAgICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1leHBhbmRfMTZ4MTZcIn1cbiAgICAgICAgICAgICAgICAgIHNpemU9ezE2fVxuICAgICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICA8c3Bhbj57dGhpcy5yb3cudGl0bGV9PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGtleT17Mn0gY2xhc3NOYW1lPXt0aGlzLnJvdy5pc05vZGUgPyBcInN2ZC10ZXN0LXJlc3VsdHNfX25vZGUtdmFsdWVcIiA6IFwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCJ9PlxuICAgICAgICAgICAge3RoaXMucm93LmdldFN0cmluZyh0aGlzLnJvdy5kaXNwbGF5VmFsdWUpfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+KX1cbiAgICAgICAge3RoaXMucm93LmlzTm9kZSAmJiAhdGhpcy5yb3cuY29sbGFwc2VkID8gU3VydmV5UmVzdWx0cy5yZW5kZXJSb3dzKHRoaXMucm93LmRhdGEpIDogbnVsbH1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNpZGViYXJUYWJNb2RlbCwgU2lkZWJhck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlBY3Rpb25CYXIsIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSVNpZGViYXJDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBTaWRlYmFyTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBTaWRlYmFyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVNpZGViYXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGdldCBtb2RlbCgpOiBTaWRlYmFyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTaWRlYmFyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwuaW5pdFJlc2l6ZU1hbmFnZXIodGhpcy5jb250YWluZXJSZWYuY3VycmVudCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLnJlc2V0UmVzaXplTWFuYWdlcigpO1xuICB9XG4gIHB1YmxpYyBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6ICF0aGlzLm1vZGVsLnZpc2libGUgPyBcIm5vbmVcIiA6IFwiXCIgfTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy1zaWRlLWJhclwiICsgKHRoaXMubW9kZWwuZmx5b3V0UGFuZWxNb2RlID8gXCIgc3ZjLWZseW91dC1zaWRlLWJhclwiIDogXCJcIik7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnRhYnMubWFwKChpdGVtKSA9PiA8U2lkZWJhclRhYiBpdGVtPXtpdGVtfSBrZXk9e2l0ZW0uaWR9IC8+KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gc3R5bGU9e3sgZGlzcGxheTogIXRoaXMubW9kZWwuaGFzVmlzaWJsZVRhYnMgPyBcIm5vbmVcIiA6IFwiXCIgfX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19zaGFkb3dcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3ZjLXNpZGUtYmFyX193cmFwcGVyXCI+XG4gICAgICAgICAgPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfSBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLnRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgeyghIXRoaXMubW9kZWwuaGVhZGVyVGV4dCA/XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAge3RoaXMubW9kZWwuaGVhZGVyVGV4dH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA6IG51bGwpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAge2l0ZW1zfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNsb3NlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtYnRuIHNkLWJ0bi0tYWN0aW9uIHN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNsb3NlLWJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY29sbGFwc2VTaWRlYmFyKCl9PiB7dGhpcy5tb2RlbC5jbG9zZVRleHR9IDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBTaWRlYmFyVGFiIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBTaWRlYmFyVGFiTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuaXRlbS52aXNpYmxlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0aGlzLml0ZW0uY29tcG9uZW50TmFtZSwgeyBtb2RlbDogdGhpcy5pdGVtLm1vZGVsIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic3ZjLXNpZGUtYmFyLXRhYlwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhclRhYiwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNpZGViYXJDb21wb25lbnQ7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXNpZGUtYmFyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlYmFyQ29tcG9uZW50LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZywgU2VyaWFsaXplciwgSnNvbk9iamVjdFByb3BlcnR5LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBTdHJpbmdFZGl0b3JWaWV3TW9kZWxCYXNlLCBlZGl0YWJsZVN0cmluZ1JlbmRlcmVyTmFtZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgYmFzZU1vZGVsOiBTdHJpbmdFZGl0b3JWaWV3TW9kZWxCYXNlO1xuICBwcml2YXRlIHN2U3RyaW5nRWRpdG9yUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMuYmFzZU1vZGVsID0gbmV3IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2UodGhpcy5sb2NTdHJpbmcsIHRoaXMuY3JlYXRvcik7XG4gICAgdGhpcy5iYXNlTW9kZWwuYmx1ckVkaXRvciA9ICgpID0+IHtcbiAgICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5ibHVyKCk7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuc3BlbGxjaGVjayA9IGZhbHNlO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY3JlYXRvclwiLCBcImxvY1N0cmluZ1wiXTtcbiAgfVxuICBwcml2YXRlIGdldCBsb2NTdHJpbmcoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0ci5sb2NTdHI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBDcmVhdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyLmNyZWF0b3I7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgc3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldCBlcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuZXJyb3JUZXh0O1xuICB9XG5cbiAgcHVibGljIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCF0aGlzLmxvY1N0cmluZykgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGY6IFN1cnZleUxvY1N0cmluZ0VkaXRvciA9IHRoaXM7XG4gICAgdGhpcy5sb2NTdHJpbmcub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XG4gICAgfTtcbiAgICBpZiAodGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSkge1xuICAgICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJywgZmFsc2UsIG51bGwpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgdGhpcy5sb2NTdHJpbmcub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkgeyB9O1xuICB9XG4gIHByaXZhdGUgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLnBsYWNlaG9sZGVyO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNvbnRlbnRFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuY29udGVudEVkaXRhYmxlO1xuICB9XG4gIHByaXZhdGUgb25CbHVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuc3BlbGxjaGVjayA9IGZhbHNlO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSBmYWxzZTtcbiAgICB0aGlzLmp1c3RGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlTW9kZWwub25JbnB1dChldmVudC5uYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmVycm9yVGV4dDtcbiAgfTtcbiAgcHJpdmF0ZSBqdXN0Rm9jdXNlZCA9IGZhbHNlO1xuICBwcml2YXRlIG9uRm9jdXMgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uRm9jdXMoZXZlbnQubmF0aXZlRXZlbnQpO1xuICAgIHRoaXMuanVzdEZvY3VzZWQgPSB0cnVlO1xuICB9O1xuICBwcml2YXRlIG9uS2V5RG93biA9IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uS2V5RG93bihldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgb25LZXlVcCA9IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uS2V5VXAoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIG9uTW91c2VVcCA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uTW91c2VVcChldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgZG9uZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwuZG9uZShldmVudCk7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IGZhbHNlO1xuICB9O1xuICBwcml2YXRlIGVkaXQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IHRydWU7XG4gICAgdGhpcy5iYXNlTW9kZWwub25DbGljayhldmVudCk7XG4gIH07XG4gIHByaXZhdGUgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuY2xhc3NOYW1lKHRoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCk7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmxvY1N0cmluZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5iYXNlTW9kZWwuc2V0TG9jU3RyaW5nKHRoaXMubG9jU3RyaW5nKTtcbiAgICB9XG4gICAgbGV0IGNvbnRyb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLmxvY1N0cmluZy5oYXNIdG1sKSB7XG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5iYXNlTW9kZWwuZm9jdXNlZCAmJiB0aGlzLmJhc2VNb2RlbC5lZGl0QXNUZXh0ICYmIHRoaXMubG9jU3RyaW5nLnRleHQgfHwgdGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sIH07XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMub25Gb2N1c31cbiAgICAgICAgICBvbktleURvd249e3RoaXMub25LZXlEb3dufVxuICAgICAgICAgIG9uS2V5VXA9e3RoaXMub25LZXlVcH1cbiAgICAgICAgICBvbk1vdXNlVXA9e3RoaXMub25Nb3VzZVVwfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWx9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY2xhc3NOYW1lfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19ib3JkZXJcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19idXR0b24gc3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbi0tZWRpdFwiXG4gICAgICAgICAgICAgIHNpemU9ezE2fVxuICAgICAgICAgICAgICBpY29uTmFtZT17XCJpY29uLWVkaXRcIn1cbiAgICAgICAgICAgID48L1N2Z0ljb24+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7Y29udHJvbH1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19jb250cm9sc1wiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLmVycm9yVGV4dCA/IDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19lcnJvclwiPnt0aGlzLmVycm9yVGV4dH08L3NwYW4+IDogXCJcIn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBlZGl0YWJsZVN0cmluZ1JlbmRlcmVyTmFtZSxcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TG9jU3RyaW5nRWRpdG9yLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5pbXBvcnQge1xuICBCYXNlLFxuICBRdWVzdGlvbixcbiAgU3VydmV5RXJyb3IsXG4gIFN1cnZleU1vZGVsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBSZWFjdFF1ZXN0aW9uRmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleUxvY1N0cmluZ1ZpZXdlcixcbiAgU3VydmV5XG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIElDcmVhdG9yT3B0aW9ucyxcbiAgQ3JlYXRvckJhc2UsXG4gIElUYWJiZWRNZW51SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgVGFiYmVkTWVudUNvbXBvbmVudCB9IGZyb20gXCIuL1RhYmJlZE1lbnVcIjtcbmltcG9ydCB7IE5vdGlmaWVyQ29tcG9uZW50IH0gZnJvbSBcIi4vTm90aWZpZXJcIjtcbmltcG9ydCB7IFN2Z0J1bmRsZUNvbXBvbmVudCB9IGZyb20gXCIuL1N2Z0J1bmRsZVwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IFN1cnZleUNyZWF0b3I7XG4gIHN0eWxlPzogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3JlYXRvckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5Q3JlYXRvckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3ROb2RlID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgZ2V0IGNyZWF0b3IoKTogQ3JlYXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIGdldCBzdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5jcmVhdG9yLmluaXRLZXlib2FyZFNob3J0Y3V0cyh0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICAgIHRoaXMuY3JlYXRvci5pbml0UmVzcG9uc2l2aXR5TWFuYWdlcih0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5jcmVhdG9yLnJlbW92ZUtleWJvYXJkU2hvcnRjdXRzKHRoaXMucm9vdE5vZGUuY3VycmVudCk7XG4gICAgdGhpcy5jcmVhdG9yLnJlc2V0UmVzcG9uc2l2aXR5TWFuYWdlcigpO1xuICB9XG4gIHByaXZhdGUgcm9vdE5vZGU6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgcmVuZGVyRWxlbWVudCgpIHtcbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBpZiAoY3JlYXRvci5pc0NyZWF0b3JEaXNwb3NlZCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY3JlYXRvckNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3JcIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCIgc3ZjLWNyZWF0b3ItLW1vYmlsZVwiIDogXCJcIik7XG4gICAgY29uc3QgYXJlYUNsYXNzTmFtZSA9IFwic3ZjLWZ1bGwtY29udGFpbmVyIHN2Yy1jcmVhdG9yX19hcmVhIHN2Yy1mbGV4LWNvbHVtblwiICsgKHRoaXMucHJvcHMuY3JlYXRvci5oYXZlQ29tbWVyY2lhbExpY2Vuc2UgPyBcIlwiIDogXCIgc3ZjLWNyZWF0b3JfX2FyZWEtLXdpdGgtYmFubmVyXCIpO1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyQ2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvcl9fY29udGVudC13cmFwcGVyIHN2Yy1mbGV4LXJvd1wiICsgKHRoaXMucHJvcHMuY3JlYXRvci5pc01vYmlsZVZpZXcgPyBcIiBzdmMtY3JlYXRvcl9fY29udGVudC13cmFwcGVyLS1mb290ZXItdG9vbGJhclwiIDogXCJcIik7XG4gICAgY29uc3QgZnVsbENvbnRhaW5lckNsYXNzTmFtZSA9IFwic3ZjLWZsZXgtcm93IHN2Yy1mdWxsLWNvbnRhaW5lclwiICsgKFwiIHN2Yy1jcmVhdG9yX19zaWRlLWJhci0tXCIgKyB0aGlzLmNyZWF0b3Iuc2lkZWJhckxvY2F0aW9uKTtcbiAgICBsZXQgbGljZW5zZUJhbm5lciA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnByb3BzLmNyZWF0b3IuaGF2ZUNvbW1lcmNpYWxMaWNlbnNlKSB7XG4gICAgICBsaWNlbnNlQmFubmVyID0gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19iYW5uZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fbm9uLWNvbW1lcmNpYWwtdGV4dFwiPlxuICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vc3VydmV5anMuaW8vYnV5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNyZWF0b3IubGljZW5zZVRleHR9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICAgIC8vQU06IHdpZHRoIHVucmVjb2duaXplZCBieSByZWFjdFxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3JlYXRvckNsYXNzTmFtZX0gcmVmPXt0aGlzLnJvb3ROb2RlfSBzdHlsZT17dGhpcy5zdHlsZX0+XG4gICAgICAgIDxTdmdCdW5kbGVDb21wb25lbnQ+PC9TdmdCdW5kbGVDb21wb25lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXthcmVhQ2xhc3NOYW1lfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZnVsbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtbiBzdmMtZmxleC1yb3dfX2VsZW1lbnQgc3ZjLWZsZXgtcm93X19lbGVtZW50LS1ncm93aW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvcC1iYXJcIj5cbiAgICAgICAgICAgICAgICB7KGNyZWF0b3Iuc2hvd1RhYnMgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiYmVkLW1lbnUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8VGFiYmVkTWVudUNvbXBvbmVudCBtb2RlbD17Y3JlYXRvci50YWJiZWRNZW51fT48L1RhYmJlZE1lbnVDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gOiBudWxsKX1cbiAgICAgICAgICAgICAgICB7KGNyZWF0b3Iuc2hvd1Rvb2xiYXIgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2NyZWF0b3IudG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y29udGVudFdyYXBwZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtaG9sZGVyIHN2Yy1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQWN0aXZlVGFiKCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mb290ZXItYmFyXCI+XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLmlzTW9iaWxlVmlldyA/XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYmFyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17Y3JlYXRvci5mb290ZXJUb29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgOiBudWxsKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlclNpZGViYXIoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7bGljZW5zZUJhbm5lcn1cbiAgICAgICAgICA8Tm90aWZpZXJDb21wb25lbnRcbiAgICAgICAgICAgIGNyZWF0b3I9e2NyZWF0b3J9XG4gICAgICAgICAgICBub3RpZmllcj17Y3JlYXRvci5ub3RpZmllcn1cbiAgICAgICAgICA+PC9Ob3RpZmllckNvbXBvbmVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlckFjdGl2ZVRhYigpIHtcbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNyZWF0b3IudGFicy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNyZWF0b3IudGFic1tpXS5pZCA9PT0gY3JlYXRvci5hY3RpdmVUYWIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3JlYXRvclRhYihjcmVhdG9yLnRhYnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZW5kZXJDcmVhdG9yVGFiKHRhYjogSVRhYmJlZE1lbnVJdGVtKSB7XG4gICAgaWYgKHRhYi52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNyZWF0b3I6IENyZWF0b3JCYXNlID0gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9ICEhdGFiLnJlbmRlclRhYlxuICAgICAgPyB0YWIucmVuZGVyVGFiKClcbiAgICAgIDogUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRhYi5jb21wb25lbnRDb250ZW50LCB7XG4gICAgICAgIGNyZWF0b3I6IGNyZWF0b3IsXG4gICAgICAgIHN1cnZleTogY3JlYXRvci5zdXJ2ZXksXG4gICAgICAgIGRhdGE6IHRhYi5kYXRhLm1vZGVsXG4gICAgICB9KTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yLXRhYlwiICsgKGNyZWF0b3IudG9vbGJveExvY2F0aW9uID09IFwicmlnaHRcIiA/IFwiIHN2Yy1jcmVhdG9yX190b29sYm94LS1yaWdodFwiIDogXCJcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAga2V5PXt0YWIuaWR9XG4gICAgICAgIGlkPXtcInNjcm9sbGFibGVEaXYtXCIgKyB0YWIuaWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgPlxuICAgICAgICB7Y29tcG9uZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJTaWRlYmFyKCkge1xuICAgIGlmICghIXRoaXMuY3JlYXRvci5zaWRlYmFyKSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCJzdi1tb2JpbGUtc2lkZS1iYXJcIiA6IFwiXCI7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICB7UmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXNpZGUtYmFyXCIsIHsgbW9kZWw6IHRoaXMuY3JlYXRvci5zaWRlYmFyIH0pfVxuICAgICAgICA8L2Rpdj4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3IgZXh0ZW5kcyBDcmVhdG9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElDcmVhdG9yT3B0aW9ucyA9IHt9LCBvcHRpb25zMj86IElDcmVhdG9yT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMsIG9wdGlvbnMyKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKHRhcmdldDogc3RyaW5nIHwgSFRNTEVsZW1lbnQpIHtcbiAgICBsZXQgbm9kZTogSFRNTEVsZW1lbnQgPSB0YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpO1xuICAgIH1cbiAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKG5vZGUpO1xuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIDxSZWFjdC5TdHJpY3RNb2RlPlxuICAgICAgICA8U3VydmV5Q3JlYXRvckNvbXBvbmVudCBjcmVhdG9yPXt0aGlzfSAvPlxuICAgICAgPC9SZWFjdC5TdHJpY3RNb2RlPixcbiAgICAgIG5vZGVcbiAgICApO1xuICB9XG5cbiAgLy9JU3VydmV5Q3JlYXRvclxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oXG4gICAgICBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpc1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHJlbmRlckVycm9yKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGVycm9yOiBTdXJ2ZXlFcnJvcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGtleT17a2V5fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVycm9yLmljb259IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pdGVtfT5cbiAgICAgICAgICA8U3VydmV5TG9jU3RyaW5nVmlld2VyIGxvY1N0cj17ZXJyb3IubG9jVGV4dH0gLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleS13aWRnZXRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleSwgcHJvcHMpO1xufSk7XG4iLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN2Z1JlZ2lzdHJ5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBzdmdCdW5kbGUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFN2Z0J1bmRsZUNvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8U1ZHU1ZHRWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICghIXRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gU3ZnUmVnaXN0cnkuaWNvbnNSZW5kZXJlZEh0bWwoKTtcbiAgICB9XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHN2Z1N0eWxlID0ge1xuICAgICAgZGlzcGxheTogXCJub25lXCJcbiAgICB9O1xuICAgIHJldHVybiA8c3ZnIHN0eWxlPXtzdmdTdHlsZX0gaWQ9XCJzdi1pY29uLWhvbGRlci1nbG9iYWwtY29udGFpbmVyXCIgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0+PC9zdmc+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXN2Zy1idW5kbGVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN2Z0J1bmRsZUNvbXBvbmVudCwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ1NTUHJvcGVydGllcyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSVRhYmJlZE1lbnVJdGVtLCBUYWJiZWRNZW51SXRlbSwgVGFiYmVkTWVudUNvbnRhaW5lciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQge1xuICBCYXNlLFxuICBJQWN0aW9uLFxuICBBY3Rpb24sXG4gIFJlc3BvbnNpdml0eU1hbmFnZXIsXG4gIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJVGFiYmVkTWVudUNvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFRhYmJlZE1lbnVDb250YWluZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJiZWRNZW51Q29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJiZWRNZW51Q29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbWFuYWdlcjogUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgZ2V0IG1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucy5tYXAoKGl0ZW0pID0+IDxUYWJiZWRNZW51SXRlbVdyYXBwZXIgaXRlbT17aXRlbX0ga2V5PXtpdGVtLmlkfSAvPik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT1cInN2Yy10YWJiZWQtbWVudVwiPlxuICAgICAgICB7aXRlbXN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgUmVzcG9uc2l2aXR5TWFuYWdlcihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHRoaXMubW9kZWwsXG4gICAgICBcIi5zdmMtdGFiYmVkLW1lbnUtaXRlbS1jb250YWluZXI6bm90KC5zdi1kb3RzKT4uc3YtYWN0aW9uX19jb250ZW50XCJcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubWFuYWdlciAmJiAodGhpcy5tYW5hZ2VyLmRpc3Bvc2UoKSk7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxufVxuXG5jbGFzcyBUYWJiZWRNZW51SXRlbVdyYXBwZXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgYW55LFxuICBhbnlcbj4ge1xuXG4gIHByaXZhdGUgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjc3M6IHN0cmluZyA9IFwic3ZjLXRhYmJlZC1tZW51LWl0ZW0tY29udGFpbmVyXCI7XG4gICAgaWYgKHRoaXMuaXRlbS5jc3MpIHtcbiAgICAgIGNzcyArPSBcIiBcIiArIHRoaXMuaXRlbS5jc3M7XG4gICAgfVxuICAgIGNzcyArPSAoIXRoaXMuaXRlbS5pc1Zpc2libGUgPyBcIiBzdi1hY3Rpb24tLWhpZGRlblwiIDogXCJcIik7XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIixcbiAgICAgIHsgaXRlbTogdGhpcy5pdGVtIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5pdGVtLmlkfSBjbGFzc05hbWU9e2Nzc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYWN0aW9uX19jb250ZW50XCI+XG4gICAgICAgICAge2NvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJiZWRNZW51SXRlbUNvbXBvbmVudFByb3BzIHtcbiAgaXRlbTogQWN0aW9uO1xufVxuZXhwb3J0IGNsYXNzIFRhYmJlZE1lbnVJdGVtQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJiZWRNZW51SXRlbUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtO1xuICAgIGxldCBjbGFzc05hbWU6IHN0cmluZyA9IFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIjtcbiAgICBpZiAoaXRlbS5hY3RpdmUpIGNsYXNzTmFtZSArPSBcIiBzdmMtdGFiYmVkLW1lbnUtaXRlbS0tc2VsZWN0ZWRcIjtcbiAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIWl0ZW0uZW5hYmxlZClcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtdGFiYmVkLW1lbnUtaXRlbS0tZGlzYWJsZWRcIjtcbiAgICBsZXQgdGl0bGVDbGFzc05hbWU6IHN0cmluZyA9XG4gICAgICBcInN2Yy10ZXh0IHN2Yy10YWJiZWQtbWVudS1pdGVtX190ZXh0IHN2Yy10ZXh0LS1ub3JtYWxcIjtcbiAgICBpZiAoaXRlbS5hY3RpdmUpIHRpdGxlQ2xhc3NOYW1lICs9IFwiIHN2Yy10ZXh0LS1ib2xkXCI7XG5cbiAgICByZXR1cm4gKGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpID0+IGl0ZW0uYWN0aW9uKGl0ZW0pfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aXRsZUNsYXNzTmFtZX0+e2l0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiYmVkTWVudUl0ZW1Db21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbmV4cG9ydCBkZWZhdWx0IFRhYmJlZE1lbnVDb21wb25lbnQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5XG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIENlbGxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNEcmFnZ2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5lbGVtZW50Lm5hbWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwifVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiIHN2Yy1xdWVzdGlvbl9fY29udGVudC0tc2VsZWN0ZWQtbm8tYm9yZGVyIHN2Yy1xdWVzdGlvbl9fY29udGVudFwifT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1jZWxsLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDZWxsUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIEl0ZW1WYWx1ZSwgUXVlc3Rpb25TZWxlY3RCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgQ2VsbFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRHJhZ2dlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gICAgY29uc3QgdGV4dFN0eWxlID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS50ZXh0U3R5bGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lfVxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIn1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcIiBzdmMtcXVlc3Rpb25fX2NvbnRlbnQtLXNlbGVjdGVkLW5vLWJvcmRlciBzdmMtcXVlc3Rpb25fX2NvbnRlbnRcIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlc1wiPlxuICAgICAgICAgICAgICB7cXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2BlZGl0YWJsZV9jaG9pY2VfJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7UmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShxdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogcXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkOiBxdWVzdGlvbi52YWx1ZSA9PT0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1jZWxsLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDZWxsUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IEJhc2UsIFBhZ2VNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUG9wdXAsXG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5UGFnZSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuaW1wb3J0IHtcbiAgQ3JlYXRvckJhc2UsXG4gIFBhZ2VBZG9ybmVyLFxuICBTdXJ2ZXlIZWxwZXIsXG4gIHRvZ2dsZUhvdmVyZWRcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcblxuaW50ZXJmYWNlIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIHBhZ2U6IFBhZ2VNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgSUNyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWw6IFBhZ2VBZG9ybmVyO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlQWRvcm5lcihcbiAgICAgIHRoaXMucHJvcHMuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucGFnZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY3JlYXRvclwiLCBcInBhZ2VcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwub25QYWdlU2VsZWN0ZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghIXRoaXMucm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICAgIFN1cnZleUhlbHBlci5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKHRoaXMucm9vdFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLm1vZGVsICYmXG4gICAgICB0aGlzLm1vZGVsLmlzUGFnZUxpdmUgJiZcbiAgICAgICEhdGhpcy5tb2RlbC5wYWdlICYmXG4gICAgICAhIXRoaXMubW9kZWwucGFnZS5zdXJ2ZXlcbiAgICApO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wcm9wcy5wYWdlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcGFnZV9fY29udGVudCBcIiArIHRoaXMubW9kZWwuY3NzfVxuICAgICAgICBpZD17dGhpcy5wcm9wcy5wYWdlLmlkfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17KGUpID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyRm9vdGVyKCl9XG4gICAgICA8L2Rpdj4pXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8U3VydmV5UGFnZSBwYWdlPXt0aGlzLnByb3BzLnBhZ2V9IHN1cnZleT17dGhpcy5wcm9wcy5zdXJ2ZXl9IGNyZWF0b3I9e3RoaXMucHJvcHMuY3JlYXRvcn0gY3NzPXt0aGlzLm1vZGVsLmNzc30+PC9TdXJ2ZXlQYWdlPik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlX19jb250ZW50LWFjdGlvbnNcIj5cbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWwuYWN0aW9uQ29udGFpbmVyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICA8L2Rpdj4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5zaG93QWRkUXVlc3Rpb25CdXR0b24pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwgPSB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWw7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZV9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYnRuXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24odGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSk7XG4gICAgICB9fVxuICAgICAgb25Nb3VzZU92ZXI9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyU3RvcHBlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICB7YXR0YWNoS2V5MmNsaWNrKDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmFjdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZV9fcXVlc3Rpb24tdHlwZS1zZWxlY3RvclwiXG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3ItaWNvblwiPlxuICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICBpY29uTmFtZT17cXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5pY29uTmFtZX1cbiAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPFBvcHVwIG1vZGVsPXtxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICA8L2J1dHRvbj4pfVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtcGFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBQYW5lbEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJfZnJhbWVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMubW9kZWwuc2hvd0FkZFF1ZXN0aW9uQnV0dG9uID8gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWFjdGlvbi1idXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbigpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj4pIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZvb3RlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7IXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQgJiYgdGhpcy5tb2RlbC5lbGVtZW50LmlzUGFuZWwgJiYgdGhpcy5tb2RlbC5zaG93QWRkUXVlc3Rpb25CdXR0b24gPyBhdHRhY2hLZXkyY2xpY2soXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2F0dGFjaEtleTJjbGljayg8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHRoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5hY3Rpb24oKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3JcIlxuICAgICAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcXVlc3Rpb24tdHlwZS1zZWxlY3Rvci1pY29uXCI+XG4gICAgICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5pY29uTmFtZX1cbiAgICAgICAgICAgICAgICBzaXplPXsyNH1cbiAgICAgICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxQb3B1cCBtb2RlbD17dGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICAgICAgPC9idXR0b24+KX1cbiAgICAgICAgPC9kaXY+KSA6IG51bGx9XG5cbiAgICAgIHtzdXBlci5yZW5kZXJGb290ZXIoKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXBhbmVsXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChQYW5lbEFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBxdWVzdGlvbjogUXVlc3Rpb247XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgcHVibGljIGdldCBtb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiAhdGhpcy5tb2RlbC5pc0RyYWdnZWQ7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBhbGxvd0ludGVyYWN0aW9ucyA9IHRoaXMubW9kZWwuZWxlbWVudFxuICAgICAgLmlzSW50ZXJhY3RpdmVEZXNpZ25FbGVtZW50O1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnJlbmRlckNvbnRlbnQoYWxsb3dJbnRlcmFjdGlvbnMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXt0aGlzLm1vZGVsLmVsZW1lbnQubmFtZSB8fCBudWxsfVxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19hZG9ybmVyXCIgKyB0aGlzLm1vZGVsLnJvb3RDc3MoKX1cbiAgICAgICAgb25Nb3VzZU91dD17ZSA9PiBhbGxvd0ludGVyYWN0aW9ucyAmJiB0b2dnbGVIb3ZlcmVkKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICAgIG9uTW91c2VPdmVyPXtlID0+IGFsbG93SW50ZXJhY3Rpb25zICYmIHRvZ2dsZUhvdmVyZWQoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KGFsbG93SW50ZXJhY3Rpb25zOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpO1xuICAgIGlmICghYWxsb3dJbnRlcmFjdGlvbnMpIHJldHVybiA8PnsgY29udGVudCB9e3RoaXMucmVuZGVyRm9vdGVyKCl9PC8+O1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2NvbnRlbnQgXCIgKyB0aGlzLm1vZGVsLmNzcygpfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4gdGhpcy5tb2RlbC5zZWxlY3QodGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlckhlYWRlcigpfVxuICAgICAgICB7Y29udGVudH1cbiAgICAgICAge3RoaXMucmVuZGVyRm9vdGVyKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtcXVlc3Rpb24taGVhZGVyXCIsIHsgbW9kZWw6IHRoaXMubW9kZWwgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZvb3RlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1xdWVzdGlvbi1mb290ZXJcIiwgeyBjbGFzc05hbWU6IFwic3ZjLXF1ZXN0aW9uX19jb250ZW50LWFjdGlvbnNcIiwgbW9kZWw6IHRoaXMubW9kZWwgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnRDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgICAge3RoaXMucmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlcl9mcmFtZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5wbGFjZWhvbGRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlLCBRdWVzdGlvblNlbGVjdEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25TZWxlY3RCYXNlO1xuICAgIGNvbnN0IHRleHRTdHlsZSA9ICh0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSkudGV4dFN0eWxlO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlc1wiPlxuICAgICAgICB7KHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzIHx8IFtdKS5tYXAoXG4gICAgICAgICAgKGl0ZW06IEl0ZW1WYWx1ZSwgaW5kZXg6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZVwiXG4gICAgICAgICAgICAgIGtleT17YGVkaXRhYmxlX2Nob2ljZV8ke2luZGV4fWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbCxcbiAgICAgICAgICAgICAgICBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICBcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzc2VzOiBxdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICBpc0Rpc3BsYXlNb2RlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0U3R5bGU6IHRleHRTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBpc0NoZWNrZWQ6IHF1ZXN0aW9uLnZhbHVlID09PSBpdGVtLnZhbHVlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1kcm9wZG93bi1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbldyYXBwZXJGb290ZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbn1cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbldyYXBwZXJGb290ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMsIGFueT4ge1xuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lfT5cbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMucHJvcHMubW9kZWwuYWN0aW9uQ29udGFpbmVyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1mb290ZXJcIixcbiAgKHByb3BzOiBRdWVzdGlvbldyYXBwZXJGb290ZXJQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV3JhcHBlckZvb3RlciwgcHJvcHMpO1xuICB9XG4pO1xuXG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25XcmFwcGVySGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbldyYXBwZXJIZWFkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UXVlc3Rpb25XcmFwcGVySGVhZGVyUHJvcHMsIGFueT4ge1xuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wcm9wcy5tb2RlbC5hbGxvd0RyYWdnaW5nKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19kcmFnLWFyZWFcIn1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+XG4gICAgICAgICAgdGhpcy5wcm9wcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KVxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19kcmFnLWVsZW1lbnRcIn1cbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24taGVhZGVyXCIsXG4gIChwcm9wczogUXVlc3Rpb25XcmFwcGVySGVhZGVyUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbldyYXBwZXJIZWFkZXIsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsLFxuICBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uSW1hZ2VBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSxcbiAgICAgIG51bGwsXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGltYWdlTW9kZWwoKTogUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5pbWFnZU1vZGVsLnF1ZXN0aW9uUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgIH19XG4gICAgICAvPlxuXG4gICAgICB7c3VwZXIucmVuZGVySGVhZGVyKCl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1xdWVzdGlvbi1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1xdWVzdGlvbi1jb250cm9sc19fY2hvb3NlLWZpbGVcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaW1hZ2VNb2RlbC5jaG9vc2VGaWxlKHRoaXMuaW1hZ2VNb2RlbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1maWxlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtaW1hZ2UtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uSW1hZ2VBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8UXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbDtcblxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgcHVibGljIGdldCByYXRpbmdNb2RlbCgpOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMucmF0aW5nTW9kZWw7XG4gICAgcmV0dXJuICg8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRyb2xzIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge21vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17bW9kZWwucmVtb3ZlVG9vbHRpcH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG1vZGVsLnJlbW92ZUl0ZW0obW9kZWwpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLXJlbW92ZV8xNngxNlwifSB0aXRsZT17bW9kZWwucmVtb3ZlVG9vbHRpcH0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICB7bW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2FkZFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXttb2RlbC5hZGRUb29sdGlwfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW9kZWwuYWRkSXRlbShtb2RlbCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tYWRkXzE2eDE2XCJ9IHRpdGxlPXttb2RlbC5hZGRUb29sdGlwfT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgIDwvPik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJhdGluZy1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRlbnRcIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbldpZGdldEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCB3aWRnZXRNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtd2lkZ2V0X19jb250ZW50XCJ9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy13aWRnZXQtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV2lkZ2V0QWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUm93Vmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgUm93V3JhcHBlckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcm93OiBRdWVzdGlvblJvd01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUm93V3JhcHBlciBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFJvd1ZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBSb3dWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucm93LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicm93XCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBrZXk9e1wic3ZjLXJvdy1cIiArIHRoaXMucHJvcHMucm93LmlkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlc31cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJvd1wiLFxuICAocHJvcHM6IFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvd1dyYXBwZXIsIHByb3BzKTtcbiAgfVxuKTtcbiIsImRlY2xhcmUgdmFyIFJlZmxlY3Q6YW55O1xuXG5leHBvcnQgdmFyIF9fZGVjb3JhdGUgPSBmdW5jdGlvbihcbiAgZGVjb3JhdG9yczogYW55LFxuICB0YXJnZXQ6IGFueSxcbiAga2V5OiBhbnksXG4gIGRlc2M6IGFueVxuKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICByID1cbiAgICAgIGMgPCAzXG4gICAgICAgID8gdGFyZ2V0XG4gICAgICAgIDogZGVzYyA9PT0gbnVsbFxuICAgICAgICAgID8gKGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSlcbiAgICAgICAgICA6IGRlc2MsXG4gICAgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpXG4gICAgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICBpZiAoKGQgPSBkZWNvcmF0b3JzW2ldKSlcbiAgICAgICAgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5leHBvcnQgdmFyIF9fYXNzaWduID1cbiAgT2JqZWN0W1wiYXNzaWduXCJdIHx8XG4gIGZ1bmN0aW9uKHRhcmdldCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIHAgaW4gcylcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyh0aGlzQ2xhc3MsIGJhc2VDbGFzcykge1xuICBmb3IgKHZhciBwIGluIGJhc2VDbGFzcylcbiAgICBpZiAoYmFzZUNsYXNzLmhhc093blByb3BlcnR5KHApKSB0aGlzQ2xhc3NbcF0gPSBiYXNlQ2xhc3NbcF07XG4gIGZ1bmN0aW9uIF9fKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0aGlzQ2xhc3M7XG4gIH1cbiAgdGhpc0NsYXNzLnByb3RvdHlwZSA9XG4gICAgYmFzZUNsYXNzID09PSBudWxsXG4gICAgICA/IE9iamVjdC5jcmVhdGUoYmFzZUNsYXNzKVxuICAgICAgOiAoKF9fLnByb3RvdHlwZSA9IGJhc2VDbGFzcy5wcm90b3R5cGUpLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19zcHJlYWRBcnJheXMgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59O1xuIiwiZXhwb3J0IGxldCBWZXJzaW9uOiBzdHJpbmc7XG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xuXG4vLyBpbXBvcnQgXCJAc3VydmV5L2NyZWF0b3Ivc3VydmV5LWNyZWF0b3ItY29yZS5jc3NcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL1N1cnZleUNyZWF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1Jvd1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25IZWFkZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkZvb3RlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbldpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL0NlbGxRdWVzdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUGFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1BhbmVsXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9Mb2dvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkxpbmtWYWx1ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkVkaXRvckNvbnRlbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9JdGVtVmFsdWVXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vSW1hZ2VJdGVtVmFsdWVXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTWF0cml4Q2VsbFdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9SZXN1bHRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94SXRlbVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvVG9vbGJveENhdGVnb3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9BZGFwdGl2ZVRvb2xib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9UYWJiZWRNZW51XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTm90aWZpZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9OYXZpZ2F0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vU2lkZUJhclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvVHJhbnNsYXRpb25MaW5lU2tlbGV0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9BY3Rpb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9TdHJpbmdFZGl0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvRGVzaWduZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0VtYmVkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9Kc29uRWRpdG9yQWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9Kc29uRWRpdG9yVGV4dGFyZWFcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0xvZ2ljXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9QcmV2aWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9UcmFuc2xhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvU3VydmV5U2ltdWxhdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9ldmVudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9PYmplY3RTZWxlY3RvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1Byb3BlcnR5R3JpZFwiO1xuXG5leHBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24sIGxvY2FsaXphdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBzdmdCdW5kbGUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgU3VydmV5TG9naWMsIFN1cnZleUxvZ2ljVUkgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IElTdXJ2ZXlDcmVhdG9yT3B0aW9ucywgSVByb3BlcnR5R3JpZEVkaXRvciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBUb29sYm94VG9vbFZpZXdNb2RlbCwgUHJvcGVydHlHcmlkRWRpdG9yQ29sbGVjdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdHlsZXNNYW5hZ2VyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjsiLCJpbXBvcnQgeyBJUG9ydGFibGVEcmFnRXZlbnQsIElQb3J0YWJsZU1vdXNlRXZlbnQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RNb3VzZUV2ZW50IGltcGxlbWVudHMgSVBvcnRhYmxlTW91c2VFdmVudCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudCwgTW91c2VFdmVudD4pIHt9XG4gIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgICB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGdldCBjYW5jZWxCdWJibGUoKTogYm9vbGVhbiB7XG4gICAgLy9yZXR1cm4gdGhpcy5ldmVudC5jYW5jZWxCdWJibGU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNldCBjYW5jZWxCdWJibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvL3RoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHRhcmdldCgpOiBFdmVudFRhcmdldCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LnRhcmdldDtcbiAgfVxuICBnZXQgY3VycmVudFRhcmdldCgpOiBFdmVudFRhcmdldCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIH1cbiAgZ2V0IGNsaWVudFgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jbGllbnRYO1xuICB9XG4gIGdldCBjbGllbnRZKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY2xpZW50WTtcbiAgfVxuICBnZXQgb2Zmc2V0WCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50Lm9mZnNldFg7XG4gIH1cbiAgZ2V0IG9mZnNldFkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5uYXRpdmVFdmVudC5vZmZzZXRZO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWFjdERyYWdFdmVudCBleHRlbmRzIFJlYWN0TW91c2VFdmVudFxuICBpbXBsZW1lbnRzIElQb3J0YWJsZURyYWdFdmVudCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBldmVudDogUmVhY3QuRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50Pikge1xuICAgIHN1cGVyKGV2ZW50KTtcbiAgfVxuXG4gIGdldCBkYXRhVHJhbnNmZXIoKTogRGF0YVRyYW5zZmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5kYXRhVHJhbnNmZXI7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsLCBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlIZWFkZXJcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIFRhYkRlc2lnbmVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhZ2VOYXZpZ2F0b3IgfSBmcm9tIFwiLi4vUGFnZU5hdmlnYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TmF2aWdhdGlvbiB9IGZyb20gXCIuLi9OYXZpZ2F0aW9uXCI7XG5cbmludGVyZmFjZSBJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IFRhYkRlc2lnbmVyVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiRGVzaWduZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRhYkRlc2lnbmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBDcmVhdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwuY3JlYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgZGVueVVwZGF0ZSA9ICgpID0+IHtcbiAgICB0aGlzLmRlbnlDb21wb25lbnRVcGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsb3dVcGRhdGUgPSAoKSA9PiB7XG4gICAgdGhpcy5hbGxvd0NvbXBvbmVudFVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREcmFnRHJvcEV2ZW50cyA9ICgpID0+IHtcbiAgICB0aGlzLmNyZWF0b3Iub25CZWZvcmVEcm9wLmFkZCh0aGlzLmRlbnlVcGRhdGUpO1xuICAgIHRoaXMuY3JlYXRvci5vbkFmdGVyRHJvcC5hZGQodGhpcy5hbGxvd1VwZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRHJhZ0Ryb3BFdmVudHMgPSAoKSA9PiB7XG4gICAgdGhpcy5jcmVhdG9yLm9uQmVmb3JlRHJvcC5yZW1vdmUodGhpcy5kZW55VXBkYXRlKTtcbiAgICB0aGlzLmNyZWF0b3Iub25BZnRlckRyb3AucmVtb3ZlKHRoaXMuYWxsb3dVcGRhdGUpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmFkZERyYWdEcm9wRXZlbnRzKCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY2xlYXJEcmFnRHJvcEV2ZW50cygpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgcmV0dXJuIFt0aGlzLm1vZGVsLCB0aGlzLm1vZGVsLnN1cnZleSwgdGhpcy5tb2RlbC5wYWdlc0NvbnRyb2xsZXJdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJlZFBhZ2VzQ2FjaGU6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRQYWdlcygpOiBKU1guRWxlbWVudFtdIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZSAhPT0gXCJwYWdlc1wiKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZSA9IHt9O1xuICAgIH1cbiAgICBjb25zdCByZW5kZXJlZFBhZ2VzID0gW107XG5cbiAgICBpZiAodGhpcy5jcmVhdG9yLnBhZ2VFZGl0TW9kZSAhPT0gXCJieXBhZ2VcIikge1xuICAgICAgY29uc3QgcGFnZXMgPSB0aGlzLmNyZWF0b3Iuc3VydmV5LnBhZ2VzO1xuXG4gICAgICBwYWdlcy5mb3JFYWNoKChwYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgY2FjaGVkUGFnZSA9IHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlW3BhZ2UuaWRdO1xuICAgICAgICBpZiAoIWNhY2hlZFBhZ2UpIHtcbiAgICAgICAgICBjYWNoZWRQYWdlID0gdGhpcy5jcmVhdGVSZW5kZXJlZFBhZ2UocGFnZSwgaW5kZXgpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlW3BhZ2UuaWRdID0gY2FjaGVkUGFnZTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJlZFBhZ2VzLnB1c2goY2FjaGVkUGFnZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMubW9kZWwuc2hvd05ld1BhZ2UpIHtcbiAgICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKHRoaXMucmVuZGVyTmV3UGFnZShcInN2Yy1wYWdlXCIsIHRoaXMubW9kZWwubmV3UGFnZS5pZCArIFwiLWdob3N0LW5ldy1wYWdlXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFnZTJEaXNwbGF5ID0gdGhpcy5tb2RlbC5wYWdlc0NvbnRyb2xsZXIucGFnZTJEaXNwbGF5O1xuICAgICAgbGV0IGNhY2hlZFBhZ2UgPSB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlMkRpc3BsYXkuaWRdO1xuICAgICAgaWYgKCFjYWNoZWRQYWdlKSB7XG4gICAgICAgIGNhY2hlZFBhZ2UgPSB0aGlzLmNyZWF0ZVJlbmRlcmVkUGFnZShwYWdlMkRpc3BsYXksIDAsIHRydWUpO1xuICAgICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlMkRpc3BsYXkuaWRdID0gY2FjaGVkUGFnZTtcbiAgICAgIH1cbiAgICAgIHJlbmRlcmVkUGFnZXMucHVzaChjYWNoZWRQYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyZWRQYWdlcztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2U6IFBhZ2VNb2RlbCwgaW5kZXg6IG51bWJlciwgaXNHaG9zdFBhZ2U/OiBib29sZWFuKTogYW55IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXBhZ2VcIn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1wYWdlPXtwYWdlLm5hbWV9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e2lzR2hvc3RQYWdlID8gXCJuZXdHaG9zdFBhZ2VcIiA6IHBhZ2UubmFtZX1cbiAgICAgICAga2V5PXtwYWdlLmlkICsgXCItXCIgKyBpbmRleH1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVyUGFnZShwYWdlKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJOZXdQYWdlKGNsYXNzTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZyA9IFwiXCIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17a2V5fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e1wibmV3R2hvc3RQYWdlXCJ9XG4gICAgICAgID5cbiAgICAgICAgICB7ISF0aGlzLm1vZGVsLm5ld1BhZ2UgPyB0aGlzLnJlbmRlclBhZ2UodGhpcy5tb2RlbC5uZXdQYWdlKSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYWdlKHBhZ2VWOiBQYWdlTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1wYWdlXCIsIHsgc3VydmV5OiB0aGlzLmNyZWF0b3Iuc3VydmV5LCBwYWdlOiBwYWdlViwgY3JlYXRvcjogdGhpcy5jcmVhdG9yIH0pO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGRlc2lnbmVyVGFiQ2xhc3NOYW1lID0gXCJzdmMtdGFiLWRlc2lnbmVyIFwiICsgdGhpcy5tb2RlbC5nZXRSb290Q3NzKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmlzVG9vbGJveFZpc2libGUgPyBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtYWRhcHRpdmUtdG9vbGJveFwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3IgfSkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Rlc2lnbmVyVGFiQ2xhc3NOYW1lfSBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNsaWNrRGVzaWduZXIoKX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiLWRlc2lnbmVyX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLnNob3dQbGFjZWhvbGRlciA/IHRoaXMucmVuZGVyUGxhY2VIb2xkZXIoKSA6IHRoaXMucmVuZGVyVGFiQ29udGVudCgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckhlYWRlcihjb25kaXRpb246IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFjb25kaXRpb24pIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMuY3JlYXRvci5zdXJ2ZXk7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lci1oZWFkZXJcIj5cbiAgICAgICAgPFN1cnZleUhlYWRlciBzdXJ2ZXk9e3N1cnZleX0+PC9TdXJ2ZXlIZWFkZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcmVuZGVyUGxhY2VIb2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleUhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKHRoaXMuY3JlYXRvci5hbGxvd0VkaXRTdXJ2ZXlUaXRsZSAmJiB0aGlzLmNyZWF0b3Iuc2hvd0hlYWRlckluRW1wdHlTdXJ2ZXkpO1xuXG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7c3VydmV5SGVhZGVyfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXJfX3BsYWNlaG9sZGVyLWNvbnRhaW5lclwiIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e1wibmV3R2hvc3RQYWdlXCJ9PlxuICAgICAgICB7dGhpcy5yZW5kZXJQbGFjZUhvbGRlckNvbnRlbnQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyTmV3UGFnZShcInN2Yy1kZXNpZ25lci1wbGFjZWhvbGRlci1wYWdlXCIpfVxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHJlbmRlclBsYWNlSG9sZGVyQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lci1wbGFjZWhvbGRlci10ZXh0IHN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWxcIj57dGhpcy5tb2RlbC5wbGFjZWhvbGRlclRleHR9PC9zcGFuPjtcbiAgfVxuICByZW5kZXJUYWJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5jcmVhdG9yLnN1cnZleTtcbiAgICBjb25zdCBzdXJ2ZXlIZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcih0aGlzLmNyZWF0b3IuYWxsb3dFZGl0U3VydmV5VGl0bGUpO1xuXG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5nZXREZXNpZ25lckNzcygpfT5cbiAgICAgICAge3N1cnZleUhlYWRlcn1cbiAgICAgICAgPFN1cnZleU5hdmlnYXRpb24gc3VydmV5PXtzdXJ2ZXl9IGxvY2F0aW9uPVwidG9wXCIgLz5cbiAgICAgICAge3RoaXMuZ2V0UmVuZGVyZWRQYWdlcygpfVxuICAgICAgICA8U3VydmV5TmF2aWdhdGlvblxuICAgICAgICAgIHN1cnZleT17c3VydmV5fVxuICAgICAgICAgIGxvY2F0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICBjc3M9e3N1cnZleS5jc3N9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHt0aGlzLmNyZWF0b3Iuc2hvd1BhZ2VOYXZpZ2F0b3IgP1xuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10YWItZGVzaWduZXJfX3BhZ2UtbmF2aWdhdG9yXCI+PFN1cnZleVBhZ2VOYXZpZ2F0b3JcbiAgICAgICAgICBwYWdlc0NvbnRyb2xsZXI9e3RoaXMubW9kZWwucGFnZXNDb250cm9sbGVyfSBwYWdlRWRpdE1vZGU9e3RoaXMubW9kZWwuY3JlYXRvci5wYWdlRWRpdE1vZGV9XG4gICAgICAgID48L1N1cnZleVBhZ2VOYXZpZ2F0b3I+PC9kaXY+XG4gICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItZGVzaWduZXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgIFRhYkRlc2lnbmVyQ29tcG9uZW50LFxuICAgIHByb3BzIGFzIElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleSxcbiAgU3VydmV5RWxlbWVudEJhc2Vcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgRW1iZWRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJVGFiRW1iZWRDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IEVtYmVkTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJFbWJlZENvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiRW1iZWRDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogRW1iZWRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudCBzdmMtZW1iZWQtdGFiX19jb250ZW50XCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnN1cnZleSA/IDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT4gOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWVtYmVkXCIsXG4gIChwcm9wczogSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJFbWJlZENvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBBY2VKc29uRWRpdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IEFjZUpzb25FZGl0b3JNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkpzb25FZGl0b3JBY2VDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBhY2VFZGl0b3JyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmFjZUVkaXRvcnJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEFjZUpzb25FZGl0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vZGVsLmluaXQoYWNlLmVkaXQodGhpcy5hY2VFZGl0b3JyUmVmLmN1cnJlbnQgYXMgSFRNTEVsZW1lbnQpKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fYWNlLWVkaXRvclwiXG4gICAgICAgICAgICByZWY9e3RoaXMuYWNlRWRpdG9yclJlZn1cbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWpzb24tZWRpdG9yLWFjZVwiLFxuICAocHJvcHM6IElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVGV4dGFyZWFKc29uRWRpdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogVGV4dGFyZWFKc29uRWRpdG9yTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsLmNhblNob3dFcnJvcnMgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVycm9yczogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIHZhciBrZXkgPSAxO1xuICAgIGNvbnN0IHVzZXJGcmllbmRseUVycm9yczogYW55W10gPSB0aGlzLm1vZGVsLnVzZXJGcmllbmRseUVycm9ycztcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdXNlckZyaWVuZGx5RXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlcnJvcnMucHVzaCg8c3BhbiBrZXk9e2tleX0+PGI+RXJyb3I6IDwvYj48L3NwYW4+KTtcbiAgICAgIGtleSsrO1xuICAgICAgZXJyb3JzLnB1c2goPHNwYW4ga2V5PXtrZXl9Pnt1c2VyRnJpZW5kbHlFcnJvcnNbaV19PC9zcGFuPik7XG4gICAgICBrZXkrKztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudC1hcmVhXCJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLm1vZGVsLnRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGU6IENoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PlxuICAgICAgICAgICAgICAodGhpcy5tb2RlbC50ZXh0ID0gZS50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB0aGlzLm1vZGVsLmNoZWNrS2V5KGUsIGUpfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMubW9kZWwucmVhZE9ubHl9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmFyaWFMYWJlbH1cbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICB7ZXJyb3JzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2VycnJvc19idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnRvZ2dsZUVycm9ycygpfT5cbiAgICAgICAgICAgICAge3RoaXMubW9kZWwuZXJyb3JCdXR0b25UZXh0fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt0aGlzLm1vZGVsLmNhblNob3dFcnJvcnMgJiYgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50LWVycm9yc1wiPntlcnJvcnN9PC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1qc29uLWVkaXRvci10ZXh0YXJlYVwiLFxuICAocHJvcHM6IElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24sIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXksIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleUxvZ2ljVUkgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGFiTG9naWNBZGRCdXR0b25Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmJ1dHRvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYnV0dG9uQ2xhc3NOYW1lID0gXCJzdmMtbG9naWMtdGFiX19jb250ZW50LWFjdGlvbiBzdmMtYnRuXCIgKyAoKHRoaXMubW9kZWwuZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICF0aGlzLm1vZGVsLmVuYWJsZWQpID8gXCIgc3ZjLWxvZ2ljLXRhYl9fY29udGVudC1hY3Rpb24tLWRpc2FibGVkXCIgOiBcIlwiKTtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RlbC5hY3Rpb24oKTtcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWU9e2J1dHRvbkNsYXNzTmFtZX1cbiAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnRpdGxlfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwudGl0bGV9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWxvZ2ljLWFkZC1idXR0b25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFRhYkxvZ2ljQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogU3VydmV5TG9naWNVSSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGxvZ2ljID0gdGhpcy5tb2RlbDtcbiAgICB2YXIgcm9vdENsYXNzID0gXCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIjtcbiAgICB2YXIgY29udGVudCA9IHRoaXMucmVuZGVyVmlld0NvbnRlbnQoKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3Jvb3RDbGFzc30+e2NvbnRlbnR9PC9kaXY+O1xuICB9XG4gIHByaXZhdGUgcmVuZGVyVmlld0NvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGxvZ2ljVGFiQ2xhc3NOYW1lID0gXCJzdmMtcGx1Z2luLXRhYl9fY29udGVudCBzdmMtbG9naWMtdGFiX19jb250ZW50IFwiICsgKHRoaXMubW9kZWwuaGFzSXRlbXMgPyBcIlwiIDogXCJzdmMtbG9naWMtdGFiX19lbXB0eVwiKTtcbiAgICBjb25zdCBhZGRMb2dpYyA9ICF0aGlzLm1vZGVsLnJlYWRPbmx5ID8gPFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50IGJ1dHRvbj17dGhpcy5tb2RlbC5hZGROZXdCdXR0b259IC8+IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiAoXG4gICAgICA8RnJhZ21lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtsb2dpY1RhYkNsYXNzTmFtZX0+XG4gICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5pdGVtc1N1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAge3RoaXMubW9kZWwuaGFzSXRlbXMgPyBudWxsIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtbG9naWMtdGFiX19jb250ZW50LWVtcHR5XCIgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dFwiPnt0aGlzLm1vZGVsLmVtcHR5VGFiUGxhY2VIb2xkZXJ9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+KX1cbiAgICAgICAgICB7YWRkTG9naWN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItbG9naWNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkxvZ2ljQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgYXR0YWNoS2V5MmNsaWNrXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRlc3RTdXJ2ZXlUYWJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5U2ltdWxhdG9yIH0gZnJvbSBcIi4vU3VydmV5U2ltdWxhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSZXN1bHRzIH0gZnJvbSBcIi4uL1Jlc3VsdHNcIjtcblxuZXhwb3J0IGNsYXNzIFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmJ1dHRvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYnV0dG9uQ2xhc3NOYW1lID0gXCJzdmMtcHJldmlld19fdGVzdC1hZ2FpbiBzdmMtYnRuXCI7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9uKCk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc05hbWV9XG4gICAgICB0aXRsZT17dGhpcy5tb2RlbC50aXRsZX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnRpdGxlfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1wcmV2aWV3LXRlc3QtYWdhaW5cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVGFiUHJldmlld1N1cnZleUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRlc3RTdXJ2ZXlUYWJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRhYkNvbnRlbnRDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudCBzdmMtdGVzdC10YWJfX2NvbnRlbnRcIiArICh0aGlzLm1vZGVsLmlzUGFnZVRvb2xiYXJWaXNpYmxlID8gXCIgc3ZjLWNyZWF0b3ItdGFiX19jb250ZW50LS13aXRoLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGFiQ29udGVudENsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBsdWdpbi10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8U3VydmV5U2ltdWxhdG9yIG1vZGVsPXt0aGlzLm1vZGVsLnNpbXVsYXRvcn0+PC9TdXJ2ZXlTaW11bGF0b3I+XG4gICAgICAgICAgeyF0aGlzLm1vZGVsLmlzUnVubmluZyA/IDxUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50IGJ1dHRvbj17dGhpcy5tb2RlbC50ZXN0QWdhaW5BY3Rpb259IC8+IDogbnVsbH1cbiAgICAgICAgICB7IXRoaXMubW9kZWwuaXNSdW5uaW5nID8gPFN1cnZleVJlc3VsdHMgc3VydmV5PXt0aGlzLm1vZGVsLnNpbXVsYXRvci5zdXJ2ZXl9IC8+IDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmdldEJvdHRvbVRvb2xiYXIoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgZ2V0Qm90dG9tVG9vbGJhcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNQYWdlVG9vbGJhclZpc2libGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRlc3QtdGFiX19jb250ZW50LWFjdGlvbnNcIj5cbiAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLnBhZ2VzfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXRlc3RcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlByZXZpZXdTdXJ2ZXlDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleVNpbXVsYXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVNpbXVsYXRvciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFN1cnZleVNpbXVsYXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBtYWluU2ltdWxhdG9yQ2xhc3MgPSBcInN2ZC1zaW11bGF0b3ItbWFpblwiICtcbiAgICAgICh0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBcIiBzdmQtc2ltdWxhdG9yLW1haW4tLWRlc2t0b3BcIiA6IFwiXCIpO1xuICAgIGlmICghdGhpcy5tb2RlbC5zdXJ2ZXkpIHtcbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzfT48L2Rpdj47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGVsLmhhc0ZyYW1lKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3MgKyBcIiBcIiArIHRoaXMubW9kZWwuc2ltdWxhdG9yTWFpbkNzc0NsYXNzfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB0aGlzLm1vZGVsLnRyeVRvWm9vbShlLCBlKX1cbiAgICAgICAgICBvbk1vdXNlRW50ZXI9e3RoaXMubW9kZWwuZGV2aWNlID09PSBcImRlc2t0b3BcIiA/IG51bGwgOiB0aGlzLm1vZGVsLmFjdGl2YXRlWm9vbX1cbiAgICAgICAgICBvbk1vdXNlTGVhdmU9e3RoaXMubW9kZWwuZGV2aWNlID09PSBcImRlc2t0b3BcIiA/IG51bGwgOiB0aGlzLm1vZGVsLmRlYWN0aXZhdGVab29tfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci13cmFwcGVyXCJcbiAgICAgICAgICAgIGlkPVwic3ZkLXNpbXVsYXRvci13cmFwcGVyXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHdpZHRoOiB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lV2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgICAgICAgXCJzdmQtc2ltdWxhdG9yLWZyYW1lIFwiICsgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5jc3NDbGFzc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmxhbmRzY2FwZWRGcmFtZVdpZHRoICsgXCJweFwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUubGFuZHNjYXBlZEZyYW1lSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5kZXZpY2VXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmRldmljZUhlaWdodCArIFwicHhcIixcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICBcInNjYWxlKFwiICtcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuc2NhbGUgK1xuICAgICAgICAgICAgICAgICAgXCIpIHRyYW5zbGF0ZSgtNTAlLCAtNTAlKVwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJUcmFuc2xhdGlvbkNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRyYW5zbGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLXRyYW5zbGF0aW9uLXRhYlwiPlxuICAgICAgICB7dGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNFbXB0eSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdC1uby1zdHJpbmdzXCI+XG4gICAgICAgICAgPHNwYW4+e3RoaXMubW9kZWwubm9TdHJpbmdzVGV4dH08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdC1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3Qtc3RyaW5ncy13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LXJvdyBzdC1zdHJpbmdzLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN0cmluZ3NIZWFkZXJTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LXJvdyBzdmMtcGx1Z2luLXRhYl9fY29udGVudCBzdC1zdHJpbmdzXCI+XG4gICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3RyaW5nc1N1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItdHJhbnNsYXRpb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlRyYW5zbGF0aW9uQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkxpbmVTa2VsZXRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtdHJhbnNsYXRpb24tbGluZS1za2VsZXRvblwiPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInNkLXRyYW5zbGF0aW9uLWxpbmUtc2tlbGV0b25cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNsYXRpb25MaW5lU2tlbGV0b24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3JUb29sYm94UHJvcHMsIFRvb2xib3ggfSBmcm9tIFwiLi9Ub29sYm94XCI7XG5cbmV4cG9ydCBjbGFzcyBBZGFwdGl2ZVRvb2xib3ggZXh0ZW5kcyBUb29sYm94IHtcbiAgcHJpdmF0ZSBtYW5hZ2VyOiBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXI7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleUNyZWF0b3JUb29sYm94UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlcihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHRoaXMudG9vbGJveCxcbiAgICAgIFwiLnN2Yy10b29sYm94X190b29sOm5vdCguc3YtZG90cyk+LnN2LWFjdGlvbl9fY29udGVudFwiLFxuICAgICAgNDQsXG4gICAgICA0NFxuICAgICk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tYW5hZ2VyICYmICh0aGlzLm1hbmFnZXIuZGlzcG9zZSgpKTtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy10b29sYm94XCIgKyAodGhpcy50b29sYm94LmlzQ29tcGFjdCA/IFwiIHN2Yy10b29sYm94LS1jb21wYWN0XCIgOiBcIlwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jb250YWluZXJcIj5cbiAgICAgICAgICB7KHRoaXMudG9vbGJveC5pc0NvbXBhY3QgfHwgdGhpcy50b29sYm94LmNhdGVnb3JpZXMubGVuZ3RoID09IDEpID9cbiAgICAgICAgICAgICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeVwiPlxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJJdGVtcyh0aGlzLnRvb2xib3gucmVuZGVyZWRBY3Rpb25zLCB0aGlzLnRvb2xib3guaXNDb21wYWN0KX1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgICAgIDogdGhpcy5yZW5kZXJDYXRlZ29yaWVzKClcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBZGFwdGl2ZVRvb2xib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgfSBmcm9tIFwiLi9Ub29sYm94SXRlbVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeSB9IGZyb20gXCIuL1Rvb2xib3hDYXRlZ29yeVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzIHtcbiAgbW9kZWw6IENyZWF0b3JCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgVG9vbGJveCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzLCBhbnk+IHtcbiAgcHVibGljIGdldCBjcmVhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIHB1YmxpYyBnZXQgdG9vbGJveCgpIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdG9yLnRvb2xib3g7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94O1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMudG9vbGJveC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NvbnRhaW5lclwiPlxuICAgICAgICAgIHsodGhpcy50b29sYm94LmNhdGVnb3JpZXMubGVuZ3RoID09IDEpID9cbiAgICAgICAgICAgICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeVwiPlxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJJdGVtcyh0aGlzLnRvb2xib3gudmlzaWJsZUFjdGlvbnMpfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICAgICAgOiB0aGlzLnJlbmRlckNhdGVnb3JpZXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGlzQ29tcGFjdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PlxuICAgICAgPFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBpdGVtPXsoaXRlbSBhcyBhbnkpfSBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9IGlzQ29tcGFjdD17aXNDb21wYWN0fSBrZXk9e1wiaXRlbVwiICsgaXRlbUluZGV4fSA+PC9TdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2w+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckNhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gPFN1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnkgY2F0ZWdvcnk9e2NhdGVnb3J5fSB0b29sYm94PXt0aGlzLnRvb2xib3h9IGtleT17XCJpdGVtXCIgKyBpbmRleH0gPjwvU3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeT47XG4gICAgfSk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbGJveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Ub29sYm94LCBRdWVzdGlvblRvb2xib3hDYXRlZ29yeSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgfSBmcm9tIFwiLi9Ub29sYm94SXRlbVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5UHJvcHMge1xuICBjYXRlZ29yeTogUXVlc3Rpb25Ub29sYm94Q2F0ZWdvcnk7XG4gIHRvb2xib3g6IFF1ZXN0aW9uVG9vbGJveDtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnkgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJU3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeVByb3BzLCBhbnk+IHtcblxuICBwdWJsaWMgZ2V0IGNhdGVnb3J5KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNhdGVnb3J5O1xuICB9XG4gIHB1YmxpYyBnZXQgdG9vbGJveCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50b29sYm94O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gKHRoaXMuY2F0ZWdvcnkgYXMgYW55KTtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZW5kZXJDYXRlZ29yeUhlYWRlcigpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJDYXRlZ29yeUNvbnRlbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIiBrZXk9e3RoaXMuY2F0ZWdvcnkubmFtZX0+XG4gICAgICAgIHtoZWFkZXJ9XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDYXRlZ29yeUhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LWhlYWRlclwiO1xuICAgIGlmICh0aGlzLnRvb2xib3guY2FuQ29sbGFwc2VDYXRlZ29yaWVzKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXRvb2xib3hfX2NhdGVnb3J5LWhlYWRlci0tY29sbGFwc2VkXCI7XG4gICAgfVxuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXtlID0+IHRoaXMuY2F0ZWdvcnkudG9nZ2xlU3RhdGUoKX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS10aXRsZVwiPnt0aGlzLmNhdGVnb3J5Lm5hbWV9PC9zcGFuPlxuICAgICAgICB7dGhpcy5yZW5kZXJCdXR0b24oKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy50b29sYm94LmNhbkNvbGxhcHNlQ2F0ZWdvcmllcykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBpY29uTmFtZSA9IHRoaXMuY2F0ZWdvcnkuY29sbGFwc2VkID8gXCJhcnJvdy1kb3duXCIgOiBcImFycm93LXVwXCI7XG4gICAgY29uc3Qgc3VmZml4TmFtZSA9IHRoaXMuY2F0ZWdvcnkuY29sbGFwc2VkID8gXCJleHBhbmRcIiA6IFwiY29sbGFwc2VcIjtcbiAgICBjb25zdCBzdmdJY29uQ2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyX19idXR0b24gc3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbi0tXCIgKyBzdWZmaXhOYW1lO1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyX19jb250cm9sc1wiPlxuICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPXtzdmdJY29uQ2xhc3NOYW1lfSBpY29uTmFtZT17XCJpY29uLVwiICsgaWNvbk5hbWV9IHNpemU9ezI0fT48L1N2Z0ljb24+XG4gICAgPC9kaXY+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJDYXRlZ29yeUNvbnRlbnQoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuICF0aGlzLmNhdGVnb3J5LmNvbGxhcHNlZCA/IHRoaXMucmVuZGVySXRlbXModGhpcy5jYXRlZ29yeS5pdGVtcykgOiBbXTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+LCBpc0NvbXBhY3QgPSBmYWxzZSkge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT5cbiAgICAgIDxTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgaXRlbT17KGl0ZW0gYXMgYW55KX0gY3JlYXRvcj17dGhpcy50b29sYm94LmNyZWF0b3J9IGlzQ29tcGFjdD17aXNDb21wYWN0fSBrZXk9e1wiaXRlbVwiICsgaXRlbUluZGV4fSA+PC9TdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2w+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10b29sYm94LWNhdGVnb3J5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgZWRpdG9yTG9jYWxpemF0aW9uLFxuICBJUXVlc3Rpb25Ub29sYm94SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0LCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQmFzZSxcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMge1xuICBpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbTtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIGlzQ29tcGFjdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW1Qcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFRvb2xib3hUb29sVmlld01vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRoaXMuaXRlbSwgdGhpcy5wcm9wcy5jcmVhdG9yKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJjcmVhdG9yXCIsIFwiaXRlbVwiXTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcGFjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NvbXBhY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiAodGhpcy5pdGVtIGFzIGFueSk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSAoKHRoaXMuaXRlbSBhcyBhbnkpIGFzIEFjdGlvbik7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fdG9vbCBcIiArIGl0ZW0uY3NzICsgKGl0ZW0uaXNWaXNpYmxlID8gXCJcIiA6IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIpO1xuICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRvb2xib3gtaXRlbVwiLFxuICAgICAge1xuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXG4gICAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgICAgaXNDb21wYWN0OiB0aGlzLmlzQ29tcGFjdFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IGtleT17aXRlbS5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7KHRoaXMuaXNDb21wYWN0ICYmIGl0ZW0ubmVlZFNlcGFyYXRvcikgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0gZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBUb29sYm94VG9vbFZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHRvb2xib3hJdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRvb2xib3hJdGVtLCB0aGlzLnByb3BzLmNyZWF0b3IpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImNyZWF0b3JcIiwgXCJpdGVtXCJdO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGFzc05hbWUgPVxuICAgICAgXCJzdmMtdG9vbGJveF9faXRlbSBzdmMtdG9vbGJveF9faXRlbS0tXCIgKyB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gICAgY29uc3QgYXJpYUxhYmVsID0gdGhpcy5pdGVtLnRvb2x0aXAgKyBcIiBcIiArIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ0b29sYm94XCIpICsgXCIgaXRlbVwiO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGljayhldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSB0aXRsZT17YXJpYUxhYmVsfT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgeyh0aGlzLnByb3BzLmlzQ29tcGFjdCA/XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1pY29uXCIgdGl0bGU9e2FyaWFMYWJlbH0+PC9TdmdJY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgOlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLXRpdGxlXCI+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3gtaXRlbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtLCBwcm9wcyk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXzsiXSwic291cmNlUm9vdCI6IiJ9
4073
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Nb2RlbEVsZW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvTmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Ob3RpZmllci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9PYmplY3RTZWxlY3Rvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9QYWdlTmF2aWdhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Byb3BlcnR5R3JpZC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVkaXRvckNvbnRlbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUXVlc3Rpb25FbWJlZGRlZFN1cnZleS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkxpbmtWYWx1ZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9SZXN1bHRzLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1NpZGVCYXIudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3RyaW5nRWRpdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1N1cnZleUNyZWF0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3ZnQnVuZGxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1RhYmJlZE1lbnUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1BhZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkZvb3Rlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uUmF0aW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uV2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1Jvdy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2hlbHBlcnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2luZGV4LnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvZXZlbnRzLnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9EZXNpZ25lci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0VtYmVkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvckFjZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0pzb25FZGl0b3JUZXh0YXJlYS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0xvZ2ljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvUHJldmlldy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1N1cnZleVNpbXVsYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1RyYW5zbGF0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb25MaW5lU2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9BZGFwdGl2ZVRvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3Rvb2xib3gvVG9vbGJveENhdGVnb3J5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3Rvb2xib3gvVG9vbGJveEl0ZW0udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNvcmVcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXktY29yZVwiLFwiYW1kXCI6XCJzdXJ2ZXktY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleUNyZWF0b3JDb3JlXCIsXCJjb21tb25qczJcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIn0iLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIixcImFtZFwiOlwic3VydmV5LXJlYWN0LXVpXCJ9Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FB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QUEsaUU7Ozs7Ozs7Ozs7O0FDQUEsNkQiLCJmaWxlIjoic3VydmV5LWNyZWF0b3ItcmVhY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LWNyZWF0b3ItY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1yZWFjdC11aVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIlN1cnZleUNyZWF0b3JcIiwgW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIiwgXCJzdXJ2ZXktY29yZVwiLCBcInN1cnZleS1jcmVhdG9yLWNvcmVcIiwgXCJzdXJ2ZXktcmVhY3QtdWlcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiU3VydmV5Q3JlYXRvclwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LXJlYWN0LXVpXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlDcmVhdG9yXCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0sIHJvb3RbXCJSZWFjdERPTVwiXSwgcm9vdFtcIlN1cnZleVwiXSwgcm9vdFtcIlN1cnZleUNyZWF0b3JDb3JlXCJdLCByb290W1wiU3VydmV5UmVhY3RcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9yZWFjdF91aV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy9pbmRleC50c1wiKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgU3VydmV5RWxlbWVudEJhc2UsIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzZXMgPSB0aGlzLnByb3BzLmNsYXNzZXMgKyBcIiBzdmMtYWN0aW9uLWJ1dHRvblwiO1xuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIHN2Yy1hY3Rpb24tYnV0dG9uLS1zZWxlY3RlZFwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgY2xhc3NlcyArPSBcIiBzdmMtYWN0aW9uLWJ1dHRvbi0tZGlzYWJsZWRcIjtcbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e2NsYXNzZXN9Pnt0aGlzLnByb3BzLnRleHR9PC9zcGFuPjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzfVxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5jbGljaygpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLnByb3BzLnRpdGxlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSW1hZ2VJdGVtVmFsdWUsIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgY29tcG9uZW50RGF0YTogYW55O1xuICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlO1xuICBpdGVtOiBJbWFnZUl0ZW1WYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IEltYWdlSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YS5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIHRoaXMucHJvcHMuaXRlbSxcbiAgICAgIG51bGwsXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcIml0ZW1cIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwuaXRlbXNSb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cblxuICBwcmV2ZW50RHJhZ0hhbmRsZXIgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgLy8gaWYgKHRoaXMubW9kZWwucXVlc3Rpb24uaXNEcmFnZ2VkKSB7XG4gICAgLy8gICByZXR1cm4gbnVsbDtcbiAgICAvLyB9XG4gICAgdGhpcy5tb2RlbC5pdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIGNvbnN0IGlzTmV3ID0gIXRoaXMucHJvcHMucXVlc3Rpb24uaXNJdGVtSW5MaXN0KHRoaXMucHJvcHMuaXRlbSk7XG4gICAgY29uc3QgaW1hZ2VTdHlsZSA9ICF0aGlzLm1vZGVsLmdldElzTmV3SXRlbVNpbmdsZSgpID8geyB3aWR0aDogdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGgsIGhlaWdodDogdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlSGVpZ2h0IH0gOiBudWxsO1xuXG4gICAgbGV0IGNvbnRlbnQgPSBudWxsO1xuICAgIGlmIChpc05ldykge1xuICAgICAgY29udGVudCA9ICg8PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlX19pdGVtXCJcbiAgICAgICAgICBvbkRyb3A9e3RoaXMubW9kZWwub25Ecm9wfSBvbkRyYWdPdmVyPXt0aGlzLm1vZGVsLm9uRHJhZ092ZXJ9IG9uRHJhZ0xlYXZlPXt0aGlzLm1vZGVsLm9uRHJhZ0xlYXZlfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19pdGVtIHNkLWltYWdlcGlja2VyX19pdGVtLS1pbmxpbmVcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJzZC1pbWFnZXBpY2tlcl9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17aW1hZ2VTdHlsZX0gY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2ltYWdlXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc1wiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmFsbG93QWRkID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2FkZFwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlTmV3RmlsZSh0aGlzLm1vZGVsKX0+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1hZGQtbGdcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8Lz4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlX19pdGVtXCJ9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWctYXJlYS1pbmRpY2F0b3JcIlxuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZHJhZy1hcmVhLWluZGljYXRvclwifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc1wiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fY2hvb3NlLWZpbGVcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZUZpbGUodGhpcy5tb2RlbCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWZpbGVcIn0+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5yZW1vdmUodGhpcy5tb2RlbCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRlbGV0ZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmdldFJvb3RDc3MoKX1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWU9e1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyB0aGlzLm1vZGVsLml0ZW0udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgb25EcmFnU3RhcnQ9e3RoaXMucHJldmVudERyYWdIYW5kbGVyfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyX19naG9zdFwifSBzdHlsZT17aW1hZ2VTdHlsZX0+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlLXdyYXBwZXJfX2NvbnRlbnRcIn0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pbWFnZS1pdGVtLXZhbHVlXCIsXG4gIChwcm9wczogSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IGdldExvY1N0cmluZywgSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCB9IGZyb20gXCJzcmMvZXZlbnRzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGl0ZW06IEl0ZW1WYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgdGhpcy5wcm9wcy5pdGVtXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcIml0ZW1cIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgLy8gaWYgKHRoaXMubW9kZWwucXVlc3Rpb24uaXNEcmFnZ2VkKSB7XG4gICAgLy8gICByZXR1cm4gbnVsbDtcbiAgICAvLyB9XG4gICAgdGhpcy5tb2RlbC5pdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMubW9kZWwuYWxsb3dBZGQgPyAoXG4gICAgICBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCJcbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC50b29sdGlwfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5hZGQodGhpcy5tb2RlbCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5pc05ldyA9IGZhbHNlO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1hZGRfMTZ4MTZcIn0gdGl0bGU9e3RoaXMubW9kZWwudG9vbHRpcH0+PC9TdmdJY29uPlxuICAgICAgPC9zcGFuPilcbiAgICApIDogKFxuICAgICAgPD5cbiAgICAgICAge1wiIFwifVxuICAgICAgICB7dGhpcy5tb2RlbC5pc0RyYWdnYWJsZSA/IChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZ1wiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmRyYWdUb29sdGlwfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnLWljb25cIiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kcmFnLWFyZWEtaW5kaWNhdG9yXCJ9IHRpdGxlPXt0aGlzLm1vZGVsLmRyYWdUb29sdGlwfT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwudG9vbHRpcH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLXJlbW92ZV8xNngxNlwifSB0aXRsZT17dGhpcy5tb2RlbC50b29sdGlwfT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgIDwvPlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgIFwic3ZjLWl0ZW0tdmFsdWUtd3JhcHBlclwiICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5hbGxvd0FkZCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1uZXdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdnaW5nID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLWRyYWdnaW5nXCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcEdob3N0ID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLWdob3N0XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcE1vdmVEb3duID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW1vdmVkb3duXCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcE1vdmVVcCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1tb3ZldXBcIiA6IFwiXCIpXG4gICAgICAgIH1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWU9e1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyB0aGlzLm1vZGVsLml0ZW0udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZV9fZ2hvc3RcIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+e2J1dHRvbn08L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaXRlbS12YWx1ZV9faXRlbVwifSBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIGV2ZW50KX0+e3RoaXMucHJvcHMuZWxlbWVudH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWl0ZW0tdmFsdWVcIixcbiAgKHByb3BzOiBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgTG9nb0ltYWdlLCBTdmdJY29uLCBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgTG9nb0ltYWdlVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IENyZWF0b3JCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgTG9nb0ltYWdlQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIG1vZGVsOiBMb2dvSW1hZ2VWaWV3TW9kZWw7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBMb2dvSW1hZ2VWaWV3TW9kZWwodGhpcy5wcm9wcy5kYXRhLCBudWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJkYXRhXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLnJvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudCA9IG51bGw7XG4gICAgaWYgKHRoaXMubW9kZWwuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sKSB7XG4gICAgICBjb250ZW50ID0gYXR0YWNoS2V5MmNsaWNrKDxkaXYgY2xhc3NOYW1lPXsgdGhpcy5tb2RlbC5jb250YWluZXJDc3MgfSBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZUZpbGUodGhpcy5tb2RlbCl9PlxuICAgICAgICA8TG9nb0ltYWdlIGRhdGE9e3RoaXMucHJvcHMuZGF0YS5zdXJ2ZXl9PjwvTG9nb0ltYWdlPlxuICAgICAgPC9kaXY+KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPGRpdiBjbGFzc05hbWU9XCJzdmMtbG9nby1pbWFnZS1wbGFjZWhvbGRlclwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX0+PHN2Zz48dXNlIHhsaW5rSHJlZj1cIiNpY29uLWxvZ29cIj48L3VzZT48L3N2Zz48L2Rpdj4pIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT1cInN2Yy1sb2dvLWltYWdlXCI+XG4gICAgICAgIDxpbnB1dCBhcmlhLWhpZGRlbj1cInRydWVcIiB0eXBlPVwiZmlsZVwiIHRhYkluZGV4PXstMX0gYWNjZXB0PVwiaW1hZ2UvKlwiIGNsYXNzTmFtZT1cInN2Yy1jaG9vc2UtZmlsZS1pbnB1dFwiIC8+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1sb2dvLWltYWdlXCIsXG4gIChwcm9wczogSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9nb0ltYWdlQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNYXRyaXhDZWxsV3JhcHBlclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGNlbGw6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucHJvcHMuY29tcG9uZW50RGF0YTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsKFxuICAgICAgZGF0YS5jcmVhdG9yLFxuICAgICAgZGF0YS5lbGVtZW50LFxuICAgICAgZGF0YS5xdWVzdGlvbixcbiAgICAgIGRhdGEucm93LFxuICAgICAgZGF0YS5jb2x1bW4sXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnByb3BzLmNvbXBvbmVudERhdGE7XG4gICAgdGhpcy5tb2RlbC50ZW1wbGF0ZURhdGEgPSBkYXRhLmVsZW1lbnQ7XG4gICAgdGhpcy5tb2RlbC5yb3cgPSBkYXRhLnJvdztcbiAgICB0aGlzLm1vZGVsLmNvbHVtbiA9IGRhdGEuY29sdW1uO1xuICAgIHRoaXMubW9kZWwucXVlc3Rpb24gPSBkYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjb250cm9scyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5xdWVzdGlvbikge1xuICAgICAgY29udHJvbHMgPSA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1tYXRyaXgtY2VsbF9fcXVlc3Rpb24tY29udHJvbHNcIj5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8c3BhbiBjbGFzc05hbWU9XCJzdmMtbWF0cml4LWNlbGxfX3F1ZXN0aW9uLWNvbnRyb2xzLWJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuZWRpdFF1ZXN0aW9uKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1lZGl0XCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPil9XG4gICAgICA8L2Rpdj47XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1tYXRyaXgtY2VsbFwifVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIG9uQ2xpY2s9eyhlOiBhbnkpID0+ICF0aGlzLnByb3BzLnF1ZXN0aW9uICYmIHRoaXMubW9kZWwuc2VsZWN0Q29udGV4dCh0aGlzLm1vZGVsLCBlKX1cbiAgICAgICAgb25Nb3VzZU91dD17ZSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICAgIG9uTW91c2VPdmVyPXtlID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLW1hdHJpeC1jZWxsLS1zZWxlY3RlZFwiICsgKHRoaXMubW9kZWwuaXNTZWxlY3RlZCA/IFwiIHN2Yy12aXNpYmxlXCIgOiBcIlwiKX0+PC9kaXY+XG5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cblxuICAgICAgICB7Y29udHJvbHN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1tYXRyaXgtY2VsbFwiLFxuICAocHJvcHM6IE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBDcmVhdG9yTW9kZWxFbGVtZW50PFAsIFM+IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8UCwgUz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUCkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYodGhpcy5uZWVkVXBkYXRlTW9kZWwocHJldlByb3BzKSkge1xuICAgICAgdGhpcy5jcmVhdGVNb2RlbCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7fVxuICBwcm90ZWN0ZWQgbmVlZFVwZGF0ZU1vZGVsKHByZXZQcm9wczogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmFtZXMgPSB0aGlzLmdldFVwZGF0ZWRNb2RlbFByb3BzKCk7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkobmFtZXMpKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpICsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBuYW1lc1tpXTtcbiAgICAgIGlmKHRoaXMucHJvcHNba2V5XSAhPT0gcHJldlByb3BzW2tleV0pIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59IiwiaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnN1cnZleSB8fFxuICAgICAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5oYXNGdW5jKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgfVxuICAgIHByaXZhdGUgb25Qcm9wQ2hhbmdlZEhhbmRsZXIgPSAoc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgY29uc3QgcmVhY3RpdmVQcm9wcyA9IFtcbiAgICAgICAgXCJzaG93UHJvZ3Jlc3NCYXJcIixcbiAgICAgICAgXCJwcm9ncmVzc0JhclR5cGVcIixcbiAgICAgICAgXCJjdXJyZW50UGFnZVZhbHVlXCJcbiAgICAgIF07XG4gICAgICBpZiAocmVhY3RpdmVQcm9wcy5pbmRleE9mKG9wdGlvbnMubmFtZSkgPCAwKSByZXR1cm47XG4gICAgICB2YXIgdmFsOiBhbnkgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhY3RpdmVQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSByZWFjdGl2ZVByb3BzW2ldO1xuICAgICAgICB2YWxbcHJvcE5hbWVdID0gdGhpcy5zdXJ2ZXlbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh2YWwpO1xuICAgIH07XG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXQgbG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0IGlzVG9wKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYXRpb24gPT0gXCJ0b3BcIjtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVG9wXG4gICAgICAgID8gdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPblRvcFxuICAgICAgICA6IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b207XG4gICAgfVxuICAgIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdi1wcm9ncmVzcy1cIiArIHRoaXMuc3VydmV5LnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICB7IHN1cnZleTogdGhpcy5zdXJ2ZXksIGNzczogdGhpcy5zdXJ2ZXkuY3NzLCBpc1RvcDogdGhpcy5pc1RvcCB9XG4gICAgICApO1xuICAgIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgTm90aWZpZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWVyQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgbm90aWZpZXI6IE5vdGlmaWVyO1xufVxuXG5leHBvcnQgY2xhc3MgTm90aWZpZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxOb3RpZmllckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgZ2V0IG5vdGlmaWVyKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm5vdGlmaWVyO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZpZXI7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm5vdGlmaWVyLmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5ub3RpZmllci5jc3N9PlxuICAgICAgICA8c3Bhbj57dGhpcy5ub3RpZmllci5tZXNzYWdlfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9iamVjdFNlbGVjdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIExpc3QgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBPYmplY3RTZWxlY3Rvck1vZGVsO1xufVxuY2xhc3MgT2JqZWN0U2VsZWN0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByb3RlY3RlZCBnZXQgbW9kZWwoKTogT2JqZWN0U2VsZWN0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNWaXNpYmxlKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1vYmplY3Qtc2VsZWN0b3JcIj5cbiAgICAgICAgPExpc3QgbW9kZWw9e3RoaXMubW9kZWwubGlzdH0+PC9MaXN0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1vYmplY3Qtc2VsZWN0b3JcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgIE9iamVjdFNlbGVjdG9yQ29tcG9uZW50LFxuICAgIHByb3BzIGFzIElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCB7XG4gIEJhc2UsXG4gIElBY3Rpb24sXG4gIHVud3JhcFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN2Z0ljb24sXG4gIFBvcHVwLFxuICBhdHRhY2hLZXkyY2xpY2tcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUGFnZU5hdmlnYXRvclZpZXdNb2RlbCwgUGFnZXNDb250cm9sbGVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMge1xuICBwYWdlc0NvbnRyb2xsZXI6IFBhZ2VzQ29udHJvbGxlcjtcbiAgcGFnZUVkaXRNb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9yIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtb2RlbDogUGFnZU5hdmlnYXRvclZpZXdNb2RlbDtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlTmF2aWdhdG9yVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5wYWdlc0NvbnRyb2xsZXIsXG4gICAgICB0aGlzLnByb3BzLnBhZ2VFZGl0TW9kZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicGFnZXNDb250cm9sbGVyXCIsIFwicGFnZUVkaXRNb2RlXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdlRWRpdE1vZGUgIT09IFwiYnlwYWdlXCIpIHtcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBlbC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vbnNjcm9sbCA9IGZ1bmN0aW9uICh0aGlzOiBHbG9iYWxFdmVudEhhbmRsZXJzLCBldjogRXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5tb2RlbC5vbkNvbnRhaW5lclNjcm9sbChldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50Lm9uc2Nyb2xsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLm1vZGVsLmRpc3Bvc2UoKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdmMtcGFnZS1uYXZpZ2F0b3JfX3NlbGVjdG9yXCI7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNQb3B1cE9wZW5lZClcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3JfX3NlbGVjdG9yLS1vcGVuZWRcIjtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JcIiByZWY9e3RoaXMuY29udGFpbmVyUmVmfSBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLm1vZGVsLnZpc2libGUgPyBcImZsZXhcIiA6IFwibm9uZVwiIH19PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnRvZ2dsZVBhZ2VTZWxlY3RvcigpfVxuICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnBhZ2VTZWxlY3RvckNhcHRpb259XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yX19uYXZpZ2F0b3ItaWNvblwiXG4gICAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5pY29ufVxuICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5wYWdlU2VsZWN0b3JDYXB0aW9ufVxuICAgICAgICAgID48L1N2Z0ljb24+XG5cbiAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgIG1vZGVsPXt0aGlzLm1vZGVsLnBvcHVwTW9kZWx9XG4gICAgICAgICAgLy9jbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JfX3BvcHVwXCJcbiAgICAgICAgICA+PC9Qb3B1cD5cbiAgICAgICAgPC9kaXY+KX1cbiAgICAgICAge3RoaXMubW9kZWwuaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgPFN1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtXG4gICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgID48L1N1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9ySXRlbSBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtIGFzIEJhc2U7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICBsZXQgY2xhc3NOYW1lOiBzdHJpbmcgPSBcInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLWNvbnRlbnRcIjtcbiAgICBpZiAodW53cmFwKGl0ZW0uYWN0aXZlKSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLS1zZWxlY3RlZFwiO1xuICAgIH1cbiAgICBpZiAodW53cmFwKGl0ZW0uZGlzYWJsZWQpKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW0tLWRpc2FibGVkXCI7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtXCI+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFjdGlvbihpdGVtKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1fX2RvdFwiIHRpdGxlPXtpdGVtLnRpdGxlfT48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19iYW5uZXIgc3ZjLWl0ZW1fX2Jhbm5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLXNtYWxsIHN2Yy10ZXh0LS1ib2xkXCI+e2l0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1fX2RvdFwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+KX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFByb3BlcnR5R3JpZFZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJUHJvcGVydHlHcmlkQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogUHJvcGVydHlHcmlkVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUHJvcGVydHlHcmlkQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVByb3BlcnR5R3JpZENvbXBvbmVudFByb3BzLCBhbnk+IHtcblxuICBnZXQgbW9kZWwoKTogUHJvcGVydHlHcmlkVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBwdWJsaWMgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJidXR0b25ncm91cFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFByb3BlcnR5R3JpZENvbXBvbmVudDtcblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtcHJvcGVydHktZ3JpZFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUHJvcGVydHlHcmlkQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uLCBTdXJ2ZXlFcnJvciwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgU3VydmV5UXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmludGVyZmFjZSBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzLFxuICBhbnlcbj4gaW1wbGVtZW50cyBJU3VydmV5Q3JlYXRvciB7XG4gIGdldCBzdXJ2ZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uO1xuICB9XG4gIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IsIGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnN1cnZleS5nZXRBbGxRdWVzdGlvbnMoKVswXTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uIGNyZWF0b3I9e3RoaXN9IGVsZW1lbnQ9e3F1ZXN0aW9ufT48L1N1cnZleVF1ZXN0aW9uPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24tZWRpdG9yLWNvbnRlbnRcIixcbiAgKHByb3BzOiBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlQYWdlLCBJU3VydmV5Q3JlYXRvciwgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50RW1iZWRkZWRTdXJ2ZXkgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGdldCBlbWJlZGRlZFN1cnZleSgpOiBRdWVzdGlvbkVtYmVkZGVkU3VydmV5TW9kZWwge1xuICAgIHJldHVybiAodGhpcy5wcm9wcy5lbGVtZW50IHx8IHRoaXMucHJvcHMucXVlc3Rpb24pIGFzIFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmVtYmVkZGVkU3VydmV5KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLmVtYmVkZGVkU3VydmV5LmVtYmVkZGVkU3VydmV5O1xuICAgIGlmICghc3VydmV5IHx8ICFzdXJ2ZXkuY3VycmVudFBhZ2UpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8U3VydmV5UGFnZVxuICAgICAgc3VydmV5PXtzdXJ2ZXl9XG4gICAgICBwYWdlPXtzdXJ2ZXkuY3VycmVudFBhZ2V9XG4gICAgICBjc3M9e3N1cnZleS5jc3N9XG4gICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgLz47XG5cbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZW1iZWRkZWRzdXJ2ZXlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUVsZW1lbnRFbWJlZGRlZFN1cnZleSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFF1ZXN0aW9uRmFjdG9yeSxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24sIFF1ZXN0aW9uTGlua1ZhbHVlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSBcIi4vQWN0aW9uQnV0dG9uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkxpbmtWYWx1ZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTGlua1ZhbHVlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDbGVhcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc2hvd0NsZWFyID0gKHRoaXMucXVlc3Rpb25CYXNlIGFzIGFueSkuc2hvd0NsZWFyO1xuICAgIGlmICghdGhpcy5xdWVzdGlvbkJhc2UuaXNSZWFkT25seSAmJiBzaG93Q2xlYXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICBjbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmxpbmtDbGVhckJ1dHRvbkNzc0NsYXNzZXN9XG4gICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uZG9DbGVhckNsaWNrKCl9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMucXVlc3Rpb24uaXNTZWxlY3RlZH1cbiAgICAgICAgICB0ZXh0PXtlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuY2xlYXJcIil9XG4gICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgIGNsYXNzZXM9e3RoaXMucXVlc3Rpb24ubGlua1NldEJ1dHRvbkNzc0NsYXNzZXN9XG4gICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uZG9MaW5rQ2xpY2soKX1cbiAgICAgICAgICBzZWxlY3RlZD17dGhpcy5xdWVzdGlvbi5pc1NlbGVjdGVkfVxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHl9XG4gICAgICAgICAgdGV4dD17dGhpcy5xdWVzdGlvbi5saW5rVmFsdWVUZXh0fVxuICAgICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLnRvb2x0aXB9XG4gICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICAge3RoaXMucmVuZGVyQ2xlYXIoKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImxpbmt2YWx1ZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25MaW5rVmFsdWUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVJlc3VsdHNJdGVtTW9kZWwsIFN1cnZleVJlc3VsdHNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tIFwiLi9BY3Rpb25CdXR0b25cIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlSZXN1bHRzUHJvcHMge1xuICBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xufVxuZXhwb3J0IGNsYXNzIFN1cnZleVJlc3VsdHMgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJU3VydmV5UmVzdWx0c1Byb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogU3VydmV5UmVzdWx0c01vZGVsO1xuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuc3VydmV5KSB7XG4gICAgICB0aGlzLm1vZGVsID0gbmV3IFN1cnZleVJlc3VsdHNNb2RlbCh0aGlzLnByb3BzLnN1cnZleSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInN1cnZleVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19faGVhZGVyLXRleHRcIj57dGhpcy5tb2RlbC5zdXJ2ZXlSZXN1bHRzVGV4dH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlci10eXBlc1wiPlxuICAgICAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5tb2RlbC5zZWxlY3RUYWJsZUNsaWNrKCl9XG4gICAgICAgICAgICAgIHRleHQ9e3RoaXMubW9kZWwuZ2V0TG9jU3RyaW5nKFwiZWQuc3VydmV5UmVzdWx0c1RhYmxlXCIpfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dGhpcy5tb2RlbC5pc1RhYmxlU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMubW9kZWwuc2VsZWN0SnNvbkNsaWNrKCl9XG4gICAgICAgICAgICAgIHRleHQ9e3RoaXMubW9kZWwuZ2V0TG9jU3RyaW5nKFwiZWQuc3VydmV5UmVzdWx0c0pzb25cIil9XG4gICAgICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLm1vZGVsLmlzSnNvblNlbGVjdGVkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5yZW5kZXJSZXN1bHRBc1RleHQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyUmVzdWx0QXNUYWJsZSgpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJSZXN1bHRBc1RleHQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLnJlc3VsdFZpZXdUeXBlICE9PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX3RleHQgc3ZkLWxpZ2h0LWJnLWNvbG9yXCI+XG4gICAgICAgIDxkaXY+e3RoaXMubW9kZWwucmVzdWx0VGV4dH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUmVzdWx0QXNUYWJsZSgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwucmVzdWx0Vmlld1R5cGUgIT09IFwidGFibGVcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX3RhYmxlIHN2ZC1saWdodC1iZy1jb2xvclwiPlxuICAgICAgICA8dGFibGU+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cInN2ZC1saWdodC1iYWNrZ3JvdW5kLWNvbG9yXCI+XG4gICAgICAgICAgICAgIDx0aCBrZXk9ezF9IGNsYXNzTmFtZT1cInN2ZC1kYXJrLWJvcmRlci1jb2xvclwiPlxuICAgICAgICAgICAgICAgIHt0aGlzLm1vZGVsLnJlc3VsdHNUaXRsZX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRoIGtleT17Mn0gY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c0Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+e1N1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLm1vZGVsLnJlc3VsdERhdGEpfTwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHN0YXRpYyByZW5kZXJSb3dzKGRhdGE6IEFycmF5PGFueT4pOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKyspIHtcbiAgICAgIHJvd3MucHVzaCg8U3VydmV5UmVzdWx0c0J5Um93IGtleT17aSArIDF9IHJvdz17ZGF0YVtpXX0gLz4pO1xuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UmVzdWx0c0J5Um93IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCByb3coKTogU3VydmV5UmVzdWx0c0l0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5yb3c7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDx0ciBvbkNsaWNrPXsoKSA9PiB0aGlzLnJvdy50b2dnbGUoKX0+XG4gICAgICAgICAgPHRkIGtleT17MX1cbiAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiB0aGlzLnJvdy50ZXh0TWFyZ2luIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cblxuICAgICAgICAgICAge3RoaXMucm93LmlzTm9kZSA/IChcbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBsZWZ0OiB0aGlzLnJvdy5tYXJrZXJNYXJnaW4gfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1wic3ZkLXRlc3QtcmVzdWx0c19fbWFya2VyIFwiICsgKHRoaXMucm93LmNvbGxhcHNlZCA/IFwiXCIgOiBcInN2ZC10ZXN0LXJlc3VsdHNfX21hcmtlci0tZXhwYW5kZWRcIil9PlxuICAgICAgICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICAgICAgICBpY29uTmFtZT17XCJpY29uLWV4cGFuZF8xNngxNlwifVxuICAgICAgICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgIDxzcGFuPnt0aGlzLnJvdy50aXRsZX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQga2V5PXsyfSBjbGFzc05hbWU9e3RoaXMucm93LmlzTm9kZSA/IFwic3ZkLXRlc3QtcmVzdWx0c19fbm9kZS12YWx1ZVwiIDogXCJzdmQtZGFyay1ib3JkZXItY29sb3JcIn0+XG4gICAgICAgICAgICB7dGhpcy5yb3cuZ2V0U3RyaW5nKHRoaXMucm93LmRpc3BsYXlWYWx1ZSl9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj4pfVxuICAgICAgICB7dGhpcy5yb3cuaXNOb2RlICYmICF0aGlzLnJvdy5jb2xsYXBzZWQgPyBTdXJ2ZXlSZXN1bHRzLnJlbmRlclJvd3ModGhpcy5yb3cuZGF0YSkgOiBudWxsfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU2lkZWJhclRhYk1vZGVsLCBTaWRlYmFyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleUFjdGlvbkJhciwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJU2lkZWJhckNvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFNpZGViYXJNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFNpZGViYXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJU2lkZWJhckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgZ2V0IG1vZGVsKCk6IFNpZGViYXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVNpZGViYXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5pbml0UmVzaXplTWFuYWdlcih0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50KTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMubW9kZWwucmVzZXRSZXNpemVNYW5hZ2VyKCk7XG4gIH1cbiAgcHVibGljIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpIHtcbiAgICBjb25zdCBzdHlsZSA9IHsgZGlzcGxheTogIXRoaXMubW9kZWwudmlzaWJsZSA/IFwibm9uZVwiIDogXCJcIiB9O1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXNpZGUtYmFyXCIgKyAodGhpcy5tb2RlbC5mbHlvdXRQYW5lbE1vZGUgPyBcIiBzdmMtZmx5b3V0LXNpZGUtYmFyXCIgOiBcIlwiKTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMubW9kZWwudGFicy5tYXAoKGl0ZW0pID0+IDxTaWRlYmFyVGFiIGl0ZW09e2l0ZW19IGtleT17aXRlbS5pZH0gLz4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBzdHlsZT17eyBkaXNwbGF5OiAhdGhpcy5tb2RlbC5oYXNWaXNpYmxlVGFicyA/IFwibm9uZVwiIDogXCJcIiB9fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX3NoYWRvd1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtbiBzdmMtc2lkZS1iYXJfX3dyYXBwZXJcIj5cbiAgICAgICAgICA8ZGl2IHJlZj17dGhpcy5jb250YWluZXJSZWZ9IHN0eWxlPXtzdHlsZX0gY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWwudG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB7KCEhdGhpcy5tb2RlbC5oZWFkZXJUZXh0ID9cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5oZWFkZXJUZXh0fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItY29udGVudFwiPlxuICAgICAgICAgICAgICB7aXRlbXN9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItY2xvc2VcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZC1idG4gc2QtYnRuLS1hY3Rpb24gc3ZjLXNpZGUtYmFyX19jb250YWluZXItY2xvc2UtYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jb2xsYXBzZVNpZGViYXIoKX0+IHt0aGlzLm1vZGVsLmNsb3NlVGV4dH0gPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFNpZGViYXJUYWIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBpdGVtKCk6IFNpZGViYXJUYWJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5pdGVtLnZpc2libGUpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRoaXMuaXRlbS5jb21wb25lbnROYW1lLCB7IG1vZGVsOiB0aGlzLml0ZW0ubW9kZWwgfSk7XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzdmMtc2lkZS1iYXItdGFiXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlYmFyVGFiLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgU2lkZWJhckNvbXBvbmVudDtcblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtc2lkZS1iYXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJDb21wb25lbnQsIHByb3BzKTtcbn0pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nLCBTZXJpYWxpemVyLCBKc29uT2JqZWN0UHJvcGVydHksIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2UsIGVkaXRhYmxlU3RyaW5nUmVuZGVyZXJOYW1lIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ0VkaXRvciBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBiYXNlTW9kZWw6IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2U7XG4gIHByaXZhdGUgc3ZTdHJpbmdFZGl0b3JSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5iYXNlTW9kZWwgPSBuZXcgU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZSh0aGlzLmxvY1N0cmluZywgdGhpcy5jcmVhdG9yKTtcbiAgICB0aGlzLmJhc2VNb2RlbC5ibHVyRWRpdG9yID0gKCkgPT4ge1xuICAgICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LmJsdXIoKTtcbiAgICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5zcGVsbGNoZWNrID0gZmFsc2U7XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJjcmVhdG9yXCIsIFwibG9jU3RyaW5nXCJdO1xuICB9XG4gIHByaXZhdGUgZ2V0IGxvY1N0cmluZygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyLmxvY1N0cjtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHIuY3JlYXRvcjtcbiAgfVxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5lcnJvclRleHQ7XG4gIH1cblxuICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZjogU3VydmV5TG9jU3RyaW5nRWRpdG9yID0gdGhpcztcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcbiAgICB9O1xuICAgIGlmICh0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdKSB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHJldHVybjtcbiAgICB0aGlzLmxvY1N0cmluZy5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwucGxhY2Vob2xkZXI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY29udGVudEVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5jb250ZW50RWRpdGFibGU7XG4gIH1cbiAgcHJpdmF0ZSBvbkJsdXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5zcGVsbGNoZWNrID0gZmFsc2U7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IGZhbHNlO1xuICAgIHRoaXMuanVzdEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbklucHV0KGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuZXJyb3JUZXh0O1xuICB9O1xuICBwcml2YXRlIGp1c3RGb2N1c2VkID0gZmFsc2U7XG4gIHByaXZhdGUgb25Gb2N1cyA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwub25Gb2N1cyhldmVudC5uYXRpdmVFdmVudCk7XG4gICAgdGhpcy5qdXN0Rm9jdXNlZCA9IHRydWU7XG4gIH07XG4gIHByaXZhdGUgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25LZXlEb3duKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbktleVVwID0gKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25LZXlVcChldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgb25Nb3VzZVVwID0gKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxTcGFuRWxlbWVudD4pOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25Nb3VzZVVwKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBkb25lID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmJhc2VNb2RlbC5kb25lKGV2ZW50KTtcbiAgICB0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdID0gZmFsc2U7XG4gIH07XG4gIHByaXZhdGUgZWRpdCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgLy8gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcsIGZhbHNlLCBudWxsKTtcbiAgICB0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdID0gdHJ1ZTtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbkNsaWNrKGV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBnZXQgY2xhc3NOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5jbGFzc05hbWUodGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmJhc2VNb2RlbC5zZXRMb2NTdHJpbmcodGhpcy5sb2NTdHJpbmcpO1xuICAgIH1cbiAgICBsZXQgY29udHJvbCA9IG51bGw7XG4gICAgaWYgKHRoaXMubG9jU3RyaW5nLmhhc0h0bWwpIHtcbiAgICAgIGNvbnN0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLmJhc2VNb2RlbC5mb2N1c2VkICYmIHRoaXMuYmFzZU1vZGVsLmVkaXRBc1RleHQgJiYgdGhpcy5sb2NTdHJpbmcudGV4dCB8fCB0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwgfTtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICAgIHJlZj17dGhpcy5zdlN0cmluZ0VkaXRvclJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcbiAgICAgICAgICBjb250ZW50RWRpdGFibGU9e3RoaXMuY29udGVudEVkaXRhYmxlfVxuICAgICAgICAgIHNwZWxsQ2hlY2s9e2ZhbHNlfVxuICAgICAgICAgIGFyaWEtcGxhY2Vob2xkZXI9e3RoaXMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxuICAgICAgICAgIC8vIHN0eWxlPXt0aGlzLnN0eWxlfVxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLm9uQmx1cn1cbiAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLm9uS2V5RG93bn1cbiAgICAgICAgICBvbk1vdXNlVXA9e3RoaXMub25Nb3VzZVVwfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICAgIHJlZj17dGhpcy5zdlN0cmluZ0VkaXRvclJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcbiAgICAgICAgICBjb250ZW50RWRpdGFibGU9e3RoaXMuY29udGVudEVkaXRhYmxlfVxuICAgICAgICAgIHNwZWxsQ2hlY2s9e2ZhbHNlfVxuICAgICAgICAgIGFyaWEtcGxhY2Vob2xkZXI9e3RoaXMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxuICAgICAgICAgIC8vIHN0eWxlPXt0aGlzLnN0eWxlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25LZXlVcD17dGhpcy5vbktleVVwfVxuICAgICAgICAgIG9uTW91c2VVcD17dGhpcy5vbk1vdXNlVXB9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jbGFzc05hbWV9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2JvcmRlclwiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1lZGl0XCJcbiAgICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgICAgIGljb25OYW1lPXtcImljb24tZWRpdFwifVxuICAgICAgICAgICAgPjwvU3ZnSWNvbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtjb250cm9sfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2NvbnRyb2xzXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMuZXJyb3JUZXh0ID8gPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2Vycm9yXCI+e3RoaXMuZXJyb3JUZXh0fTwvc3Bhbj4gOiBcIlwifVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIGVkaXRhYmxlU3RyaW5nUmVuZGVyZXJOYW1lLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7XG4gIEJhc2UsXG4gIFF1ZXN0aW9uLFxuICBTdXJ2ZXlFcnJvcixcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5TG9jU3RyaW5nVmlld2VyLFxuICBTdXJ2ZXlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgSUNyZWF0b3JPcHRpb25zLFxuICBDcmVhdG9yQmFzZSxcbiAgSVRhYmJlZE1lbnVJdGVtXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBUYWJiZWRNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4vVGFiYmVkTWVudVwiO1xuaW1wb3J0IHsgTm90aWZpZXJDb21wb25lbnQgfSBmcm9tIFwiLi9Ob3RpZmllclwiO1xuaW1wb3J0IHsgU3ZnQnVuZGxlQ29tcG9uZW50IH0gZnJvbSBcIi4vU3ZnQnVuZGxlXCI7XG5cbmludGVyZmFjZSBJU3VydmV5Q3JlYXRvckNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogU3VydmV5Q3JlYXRvcjtcbiAgc3R5bGU/OiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdE5vZGUgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBnZXQgY3JlYXRvcigpOiBDcmVhdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgZ2V0IHN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3R5bGU7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmNyZWF0b3IuaW5pdEtleWJvYXJkU2hvcnRjdXRzKHRoaXMucm9vdE5vZGUuY3VycmVudCk7XG4gICAgdGhpcy5jcmVhdG9yLmluaXRSZXNwb25zaXZpdHlNYW5hZ2VyKHRoaXMucm9vdE5vZGUuY3VycmVudCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLmNyZWF0b3IucmVtb3ZlS2V5Ym9hcmRTaG9ydGN1dHModGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgICB0aGlzLmNyZWF0b3IucmVzZXRSZXNwb25zaXZpdHlNYW5hZ2VyKCk7XG4gIH1cbiAgcHJpdmF0ZSByb290Tm9kZTogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IGNyZWF0b3I6IENyZWF0b3JCYXNlID0gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICAgIGlmIChjcmVhdG9yLmlzQ3JlYXRvckRpc3Bvc2VkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjcmVhdG9yQ2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvclwiICsgKHRoaXMucHJvcHMuY3JlYXRvci5pc01vYmlsZVZpZXcgPyBcIiBzdmMtY3JlYXRvci0tbW9iaWxlXCIgOiBcIlwiKTtcbiAgICBjb25zdCBhcmVhQ2xhc3NOYW1lID0gXCJzdmMtZnVsbC1jb250YWluZXIgc3ZjLWNyZWF0b3JfX2FyZWEgc3ZjLWZsZXgtY29sdW1uXCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZSA/IFwiXCIgOiBcIiBzdmMtY3JlYXRvcl9fYXJlYS0td2l0aC1iYW5uZXJcIik7XG4gICAgY29uc3QgY29udGVudFdyYXBwZXJDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yX19jb250ZW50LXdyYXBwZXIgc3ZjLWZsZXgtcm93XCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwiIHN2Yy1jcmVhdG9yX19jb250ZW50LXdyYXBwZXItLWZvb3Rlci10b29sYmFyXCIgOiBcIlwiKTtcbiAgICBjb25zdCBmdWxsQ29udGFpbmVyQ2xhc3NOYW1lID0gXCJzdmMtZmxleC1yb3cgc3ZjLWZ1bGwtY29udGFpbmVyXCIgKyAoXCIgc3ZjLWNyZWF0b3JfX3NpZGUtYmFyLS1cIiArIHRoaXMuY3JlYXRvci5zaWRlYmFyTG9jYXRpb24pO1xuICAgIGxldCBsaWNlbnNlQmFubmVyID0gbnVsbDtcbiAgICBpZiAoIXRoaXMucHJvcHMuY3JlYXRvci5oYXZlQ29tbWVyY2lhbExpY2Vuc2UpIHtcbiAgICAgIGxpY2Vuc2VCYW5uZXIgPSAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX2Jhbm5lclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19ub24tY29tbWVyY2lhbC10ZXh0XCI+XG4gICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9idXlcIj5cbiAgICAgICAgICAgICAge3RoaXMucHJvcHMuY3JlYXRvci5saWNlbnNlVGV4dH1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgLy9BTTogd2lkdGggdW5yZWNvZ25pemVkIGJ5IHJlYWN0XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjcmVhdG9yQ2xhc3NOYW1lfSByZWY9e3RoaXMucm9vdE5vZGV9IHN0eWxlPXt0aGlzLnN0eWxlfT5cbiAgICAgICAgPFN2Z0J1bmRsZUNvbXBvbmVudD48L1N2Z0J1bmRsZUNvbXBvbmVudD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2FyZWFDbGFzc05hbWV9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtmdWxsQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN2Yy1mbGV4LXJvd19fZWxlbWVudCBzdmMtZmxleC1yb3dfX2VsZW1lbnQtLWdyb3dpbmdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9wLWJhclwiPlxuICAgICAgICAgICAgICAgIHsoY3JlYXRvci5zaG93VGFicyA/XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10YWJiZWQtbWVudS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJiZWRNZW51Q29tcG9uZW50IG1vZGVsPXtjcmVhdG9yLnRhYmJlZE1lbnV9PjwvVGFiYmVkTWVudUNvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiA6IG51bGwpfVxuICAgICAgICAgICAgICAgIHsoY3JlYXRvci5zaG93VG9vbGJhciA/XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYmFyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17Y3JlYXRvci50b29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgOiBudWxsKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjb250ZW50V3JhcHBlckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fY29udGVudC1ob2xkZXIgc3ZjLWZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJBY3RpdmVUYWIoKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZvb3Rlci1iYXJcIj5cbiAgICAgICAgICAgICAgICB7KGNyZWF0b3IuaXNNb2JpbGVWaWV3ID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xiYXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtjcmVhdG9yLmZvb3RlclRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA6IG51bGwpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge3RoaXMucmVuZGVyU2lkZWJhcigpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtsaWNlbnNlQmFubmVyfVxuICAgICAgICAgIDxOb3RpZmllckNvbXBvbmVudFxuICAgICAgICAgICAgY3JlYXRvcj17Y3JlYXRvcn1cbiAgICAgICAgICAgIG5vdGlmaWVyPXtjcmVhdG9yLm5vdGlmaWVyfVxuICAgICAgICAgID48L05vdGlmaWVyQ29tcG9uZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyQWN0aXZlVGFiKCkge1xuICAgIGNvbnN0IGNyZWF0b3I6IENyZWF0b3JCYXNlID0gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3JlYXRvci50YWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY3JlYXRvci50YWJzW2ldLmlkID09PSBjcmVhdG9yLmFjdGl2ZVRhYikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDcmVhdG9yVGFiKGNyZWF0b3IudGFic1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJlbmRlckNyZWF0b3JUYWIodGFiOiBJVGFiYmVkTWVudUl0ZW0pIHtcbiAgICBpZiAodGFiLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgY29uc3QgY29tcG9uZW50ID0gISF0YWIucmVuZGVyVGFiXG4gICAgICA/IHRhYi5yZW5kZXJUYWIoKVxuICAgICAgOiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGFiLmNvbXBvbmVudENvbnRlbnQsIHtcbiAgICAgICAgY3JlYXRvcjogY3JlYXRvcixcbiAgICAgICAgc3VydmV5OiBjcmVhdG9yLnN1cnZleSxcbiAgICAgICAgZGF0YTogdGFiLmRhdGEubW9kZWxcbiAgICAgIH0pO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3ItdGFiXCIgKyAoY3JlYXRvci50b29sYm94TG9jYXRpb24gPT0gXCJyaWdodFwiID8gXCIgc3ZjLWNyZWF0b3JfX3Rvb2xib3gtLXJpZ2h0XCIgOiBcIlwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBrZXk9e3RhYi5pZH1cbiAgICAgICAgaWQ9e1wic2Nyb2xsYWJsZURpdi1cIiArIHRhYi5pZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICA+XG4gICAgICAgIHtjb21wb25lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclNpZGViYXIoKSB7XG4gICAgaWYgKCEhdGhpcy5jcmVhdG9yLnNpZGViYXIpIHtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuY3JlYXRvci5pc01vYmlsZVZpZXcgPyBcInN2LW1vYmlsZS1zaWRlLWJhclwiIDogXCJcIjtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgIHtSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtc2lkZS1iYXJcIiwgeyBtb2RlbDogdGhpcy5jcmVhdG9yLnNpZGViYXIgfSl9XG4gICAgICAgIDwvZGl2Pik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3JlYXRvciBleHRlbmRzIENyZWF0b3JCYXNlIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogSUNyZWF0b3JPcHRpb25zID0ge30sIG9wdGlvbnMyPzogSUNyZWF0b3JPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucywgb3B0aW9uczIpO1xuICB9XG4gIHB1YmxpYyByZW5kZXIodGFyZ2V0OiBzdHJpbmcgfCBIVE1MRWxlbWVudCkge1xuICAgIGxldCBub2RlOiBIVE1MRWxlbWVudCA9IHRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCk7XG4gICAgfVxuICAgIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUobm9kZSk7XG4gICAgUmVhY3RET00ucmVuZGVyKFxuICAgICAgPFJlYWN0LlN0cmljdE1vZGU+XG4gICAgICAgIDxTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50IGNyZWF0b3I9e3RoaXN9IC8+XG4gICAgICA8L1JlYWN0LlN0cmljdE1vZGU+LFxuICAgICAgbm9kZVxuICAgICk7XG4gIH1cblxuICAvL0lTdXJ2ZXlDcmVhdG9yXG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgIHF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZygpXG4gICAgICAgID8gcXVlc3Rpb24uZ2V0VGVtcGxhdGUoKVxuICAgICAgICA6IHF1ZXN0aW9uLmdldENvbXBvbmVudE5hbWUoKSxcbiAgICAgIHtcbiAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICBpc0Rpc3BsYXlNb2RlOiBxdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICBjcmVhdG9yOiB0aGlzXG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyRXJyb3IoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZXJyb3I6IFN1cnZleUVycm9yLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYga2V5PXtrZXl9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaWNvbn0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVycm9yLml0ZW19PlxuICAgICAgICAgIDxTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIgbG9jU3RyPXtlcnJvci5sb2NUZXh0fSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3VydmV5LXdpZGdldFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5LCBwcm9wcyk7XG59KTtcbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3ZnUmVnaXN0cnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IHN2Z0J1bmRsZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3ZnQnVuZGxlQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxTVkdTVkdFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgdGhpcy5jb250YWluZXJSZWYuY3VycmVudC5pbm5lckhUTUwgPSBTdmdSZWdpc3RyeS5pY29uc1JlbmRlcmVkSHRtbCgpO1xuICAgIH1cbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgc3ZnU3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiBcIm5vbmVcIlxuICAgIH07XG4gICAgcmV0dXJuIDxzdmcgc3R5bGU9e3N2Z1N0eWxlfSBpZD1cInN2LWljb24taG9sZGVyLWdsb2JhbC1jb250YWluZXJcIiByZWY9e3RoaXMuY29udGFpbmVyUmVmfT48L3N2Zz47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtc3ZnLWJ1bmRsZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3ZnQnVuZGxlQ29tcG9uZW50LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJVGFiYmVkTWVudUl0ZW0sIFRhYmJlZE1lbnVJdGVtLCBUYWJiZWRNZW51Q29udGFpbmVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIElBY3Rpb24sXG4gIEFjdGlvbixcbiAgUmVzcG9uc2l2aXR5TWFuYWdlcixcbiAgQWRhcHRpdmVBY3Rpb25Db250YWluZXJcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJiZWRNZW51Q29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogVGFiYmVkTWVudUNvbnRhaW5lcjtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYmJlZE1lbnVDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYmJlZE1lbnVDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtYW5hZ2VyOiBSZXNwb25zaXZpdHlNYW5hZ2VyO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMubW9kZWwucmVuZGVyZWRBY3Rpb25zLm1hcCgoaXRlbSkgPT4gPFRhYmJlZE1lbnVJdGVtV3JhcHBlciBpdGVtPXtpdGVtfSBrZXk9e2l0ZW0uaWR9IC8+KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPVwic3ZjLXRhYmJlZC1tZW51XCI+XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy5tb2RlbCxcbiAgICAgIFwiLnN2Yy10YWJiZWQtbWVudS1pdGVtLWNvbnRhaW5lcjpub3QoLnN2LWRvdHMpPi5zdi1hY3Rpb25fX2NvbnRlbnRcIlxuICAgICk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tYW5hZ2VyICYmICh0aGlzLm1hbmFnZXIuZGlzcG9zZSgpKTtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59XG5cbmNsYXNzIFRhYmJlZE1lbnVJdGVtV3JhcHBlciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBhbnksXG4gIGFueVxuPiB7XG5cbiAgcHJpdmF0ZSBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNzczogc3RyaW5nID0gXCJzdmMtdGFiYmVkLW1lbnUtaXRlbS1jb250YWluZXJcIjtcbiAgICBpZiAodGhpcy5pdGVtLmNzcykge1xuICAgICAgY3NzICs9IFwiIFwiICsgdGhpcy5pdGVtLmNzcztcbiAgICB9XG4gICAgY3NzICs9ICghdGhpcy5pdGVtLmlzVmlzaWJsZSA/IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIgOiBcIlwiKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMuaXRlbS5jb21wb25lbnQgfHwgXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiLFxuICAgICAgeyBpdGVtOiB0aGlzLml0ZW0gfVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4ga2V5PXt0aGlzLml0ZW0uaWR9IGNsYXNzTmFtZT17Y3NzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7Y29tcG9uZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmJlZE1lbnVJdGVtQ29tcG9uZW50UHJvcHMge1xuICBpdGVtOiBBY3Rpb247XG59XG5leHBvcnQgY2xhc3MgVGFiYmVkTWVudUl0ZW1Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYmJlZE1lbnVJdGVtQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiO1xuICAgIGlmIChpdGVtLmFjdGl2ZSkgY2xhc3NOYW1lICs9IFwiIHN2Yy10YWJiZWQtbWVudS1pdGVtLS1zZWxlY3RlZFwiO1xuICAgIGlmIChpdGVtLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhaXRlbS5lbmFibGVkKVxuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy10YWJiZWQtbWVudS1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIGxldCB0aXRsZUNsYXNzTmFtZTogc3RyaW5nID1cbiAgICAgIFwic3ZjLXRleHQgc3ZjLXRhYmJlZC1tZW51LWl0ZW1fX3RleHQgc3ZjLXRleHQtLW5vcm1hbFwiO1xuICAgIGlmIChpdGVtLmFjdGl2ZSkgdGl0bGVDbGFzc05hbWUgKz0gXCIgc3ZjLXRleHQtLWJvbGRcIjtcblxuICAgIHJldHVybiAoYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gb25DbGljaz17KCkgPT4gaXRlbS5hY3Rpb24oaXRlbSl9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RpdGxlQ2xhc3NOYW1lfT57aXRlbS50aXRsZX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJiZWRNZW51SXRlbUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuZXhwb3J0IGRlZmF1bHQgVGFiYmVkTWVudUNvbXBvbmVudDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3Rvcnlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgQ2VsbFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc0RyYWdnZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXt0aGlzLm1vZGVsLmVsZW1lbnQubmFtZX1cbiAgICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19hZG9ybmVyXCJ9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCIgc3ZjLXF1ZXN0aW9uX19jb250ZW50LS1zZWxlY3RlZC1uby1ib3JkZXIgc3ZjLXF1ZXN0aW9uX19jb250ZW50XCJ9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWNlbGwtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENlbGxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgSXRlbVZhbHVlLCBRdWVzdGlvblNlbGVjdEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBDZWxsUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNEcmFnZ2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgICBjb25zdCB0ZXh0U3R5bGUgPSAodGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnkpLnRleHRTdHlsZTtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5lbGVtZW50Lm5hbWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwifVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiIHN2Yy1xdWVzdGlvbl9fY29udGVudC0tc2VsZWN0ZWQtbm8tYm9yZGVyIHN2Yy1xdWVzdGlvbl9fY29udGVudFwifT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VzXCI+XG4gICAgICAgICAgICAgIHtxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoXG4gICAgICAgICAgICAgICAgKGl0ZW06IEl0ZW1WYWx1ZSwgaW5kZXg6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZVwiXG4gICAgICAgICAgICAgICAgICAgIGtleT17YGVkaXRhYmxlX2Nob2ljZV8ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgICBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzc2VzOiBxdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Rpc3BsYXlNb2RlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3R5bGU6IHRleHRTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NoZWNrZWQ6IHF1ZXN0aW9uLnZhbHVlID09PSBpdGVtLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWNlbGwtZHJvcGRvd24tcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENlbGxRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgQmFzZSwgUGFnZU1vZGVsLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBQb3B1cCxcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlQYWdlLFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5pbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgUGFnZUFkb3JuZXIsXG4gIFN1cnZleUhlbHBlcixcbiAgdG9nZ2xlSG92ZXJlZFxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuXG5pbnRlcmZhY2UgSUNyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgcGFnZTogUGFnZU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtb2RlbDogUGFnZUFkb3JuZXI7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFBhZ2VBZG9ybmVyKFxuICAgICAgdGhpcy5wcm9wcy5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5wYWdlXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJjcmVhdG9yXCIsIFwicGFnZVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5vblBhZ2VTZWxlY3RlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCEhdGhpcy5yb290UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgU3VydmV5SGVscGVyLnNjcm9sbEludG9WaWV3SWZOZWVkZWQodGhpcy5yb290UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLmRpc3Bvc2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMubW9kZWwgJiZcbiAgICAgIHRoaXMubW9kZWwuaXNQYWdlTGl2ZSAmJlxuICAgICAgISF0aGlzLm1vZGVsLnBhZ2UgJiZcbiAgICAgICEhdGhpcy5tb2RlbC5wYWdlLnN1cnZleVxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnBhZ2UpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1wYWdlX19jb250ZW50IFwiICsgdGhpcy5tb2RlbC5jc3N9XG4gICAgICAgIGlkPXt0aGlzLnByb3BzLnBhZ2UuaWR9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpO1xuICAgICAgICB9fVxuICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICAgIG9uTW91c2VPdmVyPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJIZWFkZXIoKX1cbiAgICAgICAge3RoaXMucmVuZGVyQ29udGVudCgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJGb290ZXIoKX1cbiAgICAgIDwvZGl2PilcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxTdXJ2ZXlQYWdlIHBhZ2U9e3RoaXMucHJvcHMucGFnZX0gc3VydmV5PXt0aGlzLnByb3BzLnN1cnZleX0gY3JlYXRvcj17dGhpcy5wcm9wcy5jcmVhdG9yfSBjc3M9e3RoaXMubW9kZWwuY3NzfT48L1N1cnZleVBhZ2U+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX2NvbnRlbnQtYWN0aW9uc1wiPlxuICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC5hY3Rpb25Db250YWluZXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgIDwvZGl2Pik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZvb3RlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLnNob3dBZGRRdWVzdGlvbkJ1dHRvbikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbCA9IHRoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbDtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1idG5cIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbih0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKTtcbiAgICAgIH19XG4gICAgICBvbk1vdXNlT3Zlcj17KGUpID0+IHRoaXMubW9kZWwuaG92ZXJTdG9wcGVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIHthdHRhY2hLZXkyY2xpY2soPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuYWN0aW9uKCk7XG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yXCJcbiAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFnZV9fcXVlc3Rpb24tdHlwZS1zZWxlY3Rvci1pY29uXCI+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGljb25OYW1lPXtxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmljb25OYW1lfVxuICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8UG9wdXAgbW9kZWw9e3F1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwucG9wdXBNb2RlbH0+PC9Qb3B1cD5cbiAgICAgIDwvYnV0dG9uPil9XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1wYWdlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFBhbmVsQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlcl9mcmFtZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5wbGFjZWhvbGRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5tb2RlbC5zaG93QWRkUXVlc3Rpb25CdXR0b24gPyBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uKCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PikgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHshdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCAmJiB0aGlzLm1vZGVsLmVsZW1lbnQuaXNQYW5lbCAmJiB0aGlzLm1vZGVsLnNob3dBZGRRdWVzdGlvbkJ1dHRvbiA/IGF0dGFjaEtleTJjbGljayhcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24oKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmFjdGlvbigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcXVlc3Rpb24tdHlwZS1zZWxlY3RvclwiXG4gICAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yLWljb25cIj5cbiAgICAgICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmljb25OYW1lfVxuICAgICAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwucG9wdXBNb2RlbH0+PC9Qb3B1cD5cbiAgICAgICAgICA8L2J1dHRvbj4pfVxuICAgICAgICA8L2Rpdj4pIDogbnVsbH1cblxuICAgICAge3N1cGVyLnJlbmRlckZvb3RlcigpfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcGFuZWxcIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFBhbmVsQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbiAgY29tcG9uZW50RGF0YTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWxWYWx1ZTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmICF0aGlzLm1vZGVsLmlzRHJhZ2dlZDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFsbG93SW50ZXJhY3Rpb25zID0gdGhpcy5tb2RlbC5lbGVtZW50XG4gICAgICAuaXNJbnRlcmFjdGl2ZURlc2lnbkVsZW1lbnQ7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudChhbGxvd0ludGVyYWN0aW9ucyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lIHx8IG51bGx9XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIiArIHRoaXMubW9kZWwucm9vdENzcygpfVxuICAgICAgICBvbk1vdXNlT3V0PXtlID0+IGFsbG93SW50ZXJhY3Rpb25zICYmIHRvZ2dsZUhvdmVyZWQoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9e2UgPT4gYWxsb3dJbnRlcmFjdGlvbnMgJiYgdG9nZ2xlSG92ZXJlZChlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoYWxsb3dJbnRlcmFjdGlvbnM6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnJlbmRlckVsZW1lbnRDb250ZW50KCk7XG4gICAgaWYgKCFhbGxvd0ludGVyYWN0aW9ucykgcmV0dXJuIDw+eyBjb250ZW50IH17dGhpcy5yZW5kZXJGb290ZXIoKX08Lz47XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fY29udGVudCBcIiArIHRoaXMubW9kZWwuY3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgICB7dGhpcy5yZW5kZXJGb290ZXIoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1xdWVzdGlvbi1oZWFkZXJcIiwgeyBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXF1ZXN0aW9uLWZvb3RlclwiLCB7IGNsYXNzTmFtZTogXCJzdmMtcXVlc3Rpb25fX2NvbnRlbnQtYWN0aW9uc1wiLCBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICB7dGhpcy5yZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyX2ZyYW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gICAgY29uc3QgdGV4dFN0eWxlID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS50ZXh0U3R5bGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VzXCI+XG4gICAgICAgIHsocXVlc3Rpb24udmlzaWJsZUNob2ljZXMgfHwgW10pLm1hcChcbiAgICAgICAgICAoaXRlbTogSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlXCJcbiAgICAgICAgICAgICAga2V5PXtgZWRpdGFibGVfY2hvaWNlXyR7aW5kZXh9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge1JlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUocXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsLFxuICAgICAgICAgICAgICAgIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgIFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IHF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHRleHRTdHlsZTogdGV4dFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZDogcXVlc3Rpb24udmFsdWUgPT09IGl0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIClcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckZvb3RlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJGb290ZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWV9PlxuICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5wcm9wcy5tb2RlbC5hY3Rpb25Db250YWluZXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWZvb3RlclwiLFxuICAocHJvcHM6IFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XcmFwcGVyRm9vdGVyLCBwcm9wcyk7XG4gIH1cbik7XG5cbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLm1vZGVsLmFsbG93RHJhZ2dpbmcpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2RyYWctYXJlYVwifVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT5cbiAgICAgICAgICB0aGlzLnByb3BzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2RyYWctZWxlbWVudFwifVxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1oZWFkZXJcIixcbiAgKHByb3BzOiBRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV3JhcHBlckhlYWRlciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwsXG4gIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbFxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25JbWFnZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaW1hZ2VNb2RlbCgpOiBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmltYWdlTW9kZWwucXVlc3Rpb25Sb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICAgICAgfX1cbiAgICAgIC8+XG5cbiAgICAgIHtzdXBlci5yZW5kZXJIZWFkZXIoKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNcIj5cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dFZGl0ID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5pbWFnZU1vZGVsLmNob29zZUZpbGUodGhpcy5pbWFnZU1vZGVsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWZpbGVcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pbWFnZS1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25JbWFnZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgbW9kZWxWYWx1ZTogUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsO1xuXG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsVmFsdWUgPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJhdGluZ01vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsO1xuICB9XG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5yYXRpbmdNb2RlbDtcbiAgICByZXR1cm4gKDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udHJvbHMgc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICB7bW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX3JlbW92ZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXttb2RlbC5yZW1vdmVUb29sdGlwfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW9kZWwucmVtb3ZlSXRlbShtb2RlbCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tcmVtb3ZlXzE2eDE2XCJ9IHRpdGxlPXttb2RlbC5yZW1vdmVUb29sdGlwfT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICAgIHttb2RlbC5hbGxvd0FkZCA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e21vZGVsLmFkZFRvb2x0aXB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBtb2RlbC5hZGRJdGVtKG1vZGVsKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1hZGRfMTZ4MTZcIn0gdGl0bGU9e21vZGVsLmFkZFRvb2x0aXB9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgPC8+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcmF0aW5nLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udGVudFwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV2lkZ2V0QWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHdpZGdldE1vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy13aWRnZXRfX2NvbnRlbnRcIn1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXdpZGdldC1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XaWRnZXRBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBSb3dWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgY29tcG9uZW50RGF0YTogYW55O1xuICByb3c6IFF1ZXN0aW9uUm93TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBSb3dXcmFwcGVyIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgUm93V3JhcHBlckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogUm93Vmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUm93V3JhcHBlckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFJvd1ZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YS5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5yb3csXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJyb3dcIiwgXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGtleT17XCJzdmMtcm93LVwiICsgdGhpcy5wcm9wcy5yb3cuaWR9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3NDbGFzc2VzfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcm93XCIsXG4gIChwcm9wczogUm93V3JhcHBlckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm93V3JhcHBlciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiZGVjbGFyZSB2YXIgUmVmbGVjdDphbnk7XG5cbmV4cG9ydCB2YXIgX19kZWNvcmF0ZSA9IGZ1bmN0aW9uKFxuICBkZWNvcmF0b3JzOiBhbnksXG4gIHRhcmdldDogYW55LFxuICBrZXk6IGFueSxcbiAgZGVzYzogYW55XG4pIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgIHIgPVxuICAgICAgYyA8IDNcbiAgICAgICAgPyB0YXJnZXRcbiAgICAgICAgOiBkZXNjID09PSBudWxsXG4gICAgICAgICAgPyAoZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpKVxuICAgICAgICAgIDogZGVzYyxcbiAgICBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIilcbiAgICByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2VcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgIGlmICgoZCA9IGRlY29yYXRvcnNbaV0pKVxuICAgICAgICByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPVxuICBPYmplY3RbXCJhc3NpZ25cIl0gfHxcbiAgZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIgcCBpbiBzKVxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0YXJnZXRbcF0gPSBzW3BdO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKHRoaXNDbGFzcywgYmFzZUNsYXNzKSB7XG4gIGZvciAodmFyIHAgaW4gYmFzZUNsYXNzKVxuICAgIGlmIChiYXNlQ2xhc3MuaGFzT3duUHJvcGVydHkocCkpIHRoaXNDbGFzc1twXSA9IGJhc2VDbGFzc1twXTtcbiAgZnVuY3Rpb24gX18oKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IHRoaXNDbGFzcztcbiAgfVxuICB0aGlzQ2xhc3MucHJvdG90eXBlID1cbiAgICBiYXNlQ2xhc3MgPT09IG51bGxcbiAgICAgID8gT2JqZWN0LmNyZWF0ZShiYXNlQ2xhc3MpXG4gICAgICA6ICgoX18ucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZSksIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX3NwcmVhZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn07XG4iLCJleHBvcnQgbGV0IFZlcnNpb246IHN0cmluZztcblZlcnNpb24gPSBgJHtwcm9jZXNzLmVudi5WRVJTSU9OfWA7XG5cbi8vIGltcG9ydCBcIkBzdXJ2ZXkvY3JlYXRvci9zdXJ2ZXktY3JlYXRvci1jb3JlLmNzc1wiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vU3VydmV5Q3JlYXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUm93XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkhlYWRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uRm9vdGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvblJhdGluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9QYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUGFuZWxcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL0xvZ29JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uTGlua1ZhbHVlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25FbWJlZGRlZFN1cnZleVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uRWRpdG9yQ29udGVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0l0ZW1WYWx1ZVdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9JbWFnZUl0ZW1WYWx1ZVdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9NYXRyaXhDZWxsV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1Jlc3VsdHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L1Rvb2xib3hJdGVtXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94Q2F0ZWdvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L1Rvb2xib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L0FkYXB0aXZlVG9vbGJveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1RhYmJlZE1lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9Ob3RpZmllclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL05hdmlnYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9TaWRlQmFyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0FjdGlvbkJ1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1N0cmluZ0VkaXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9EZXNpZ25lclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvRW1iZWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0pzb25FZGl0b3JBY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0pzb25FZGl0b3JUZXh0YXJlYVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvTG9naWNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1ByZXZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1RyYW5zbGF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9TdXJ2ZXlTaW11bGF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL2V2ZW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL09iamVjdFNlbGVjdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUHJvcGVydHlHcmlkXCI7XG5cbmV4cG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgbG9jYWxpemF0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IHN2Z0J1bmRsZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdXJ2ZXlMb2dpYywgU3VydmV5TG9naWNVSSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgSVN1cnZleUNyZWF0b3JPcHRpb25zLCBJUHJvcGVydHlHcmlkRWRpdG9yIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsLCBQcm9wZXJ0eUdyaWRFZGl0b3JDb2xsZWN0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN0eWxlc01hbmFnZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiOyIsImltcG9ydCB7IElQb3J0YWJsZURyYWdFdmVudCwgSVBvcnRhYmxlTW91c2VFdmVudCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdE1vdXNlRXZlbnQgaW1wbGVtZW50cyBJUG9ydGFibGVNb3VzZUV2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50LCBNb3VzZUV2ZW50Pikge31cbiAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgIHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxuICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgZ2V0IGNhbmNlbEJ1YmJsZSgpOiBib29sZWFuIHtcbiAgICAvL3JldHVybiB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2V0IGNhbmNlbEJ1YmJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIC8vdGhpcy5ldmVudC5jYW5jZWxCdWJibGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdGFyZ2V0KCk6IEV2ZW50VGFyZ2V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQudGFyZ2V0O1xuICB9XG4gIGdldCBjdXJyZW50VGFyZ2V0KCk6IEV2ZW50VGFyZ2V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY3VycmVudFRhcmdldDtcbiAgfVxuICBnZXQgY2xpZW50WCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmNsaWVudFg7XG4gIH1cbiAgZ2V0IGNsaWVudFkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jbGllbnRZO1xuICB9XG4gIGdldCBvZmZzZXRYKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQubmF0aXZlRXZlbnQub2Zmc2V0WDtcbiAgfVxuICBnZXQgb2Zmc2V0WSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50Lm9mZnNldFk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0RHJhZ0V2ZW50IGV4dGVuZHMgUmVhY3RNb3VzZUV2ZW50XG4gIGltcGxlbWVudHMgSVBvcnRhYmxlRHJhZ0V2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGV2ZW50OiBSZWFjdC5EcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSB7XG4gICAgc3VwZXIoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IGRhdGFUcmFuc2ZlcigpOiBEYXRhVHJhbnNmZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwsIFBhZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleUhlYWRlclxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgVGFiRGVzaWduZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFnZU5hdmlnYXRvciB9IGZyb20gXCIuLi9QYWdlTmF2aWdhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uIH0gZnJvbSBcIi4uL05hdmlnYXRpb25cIjtcblxuaW50ZXJmYWNlIElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogVGFiRGVzaWduZXJWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJEZXNpZ25lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGFiRGVzaWduZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBkZW55VXBkYXRlID0gKCkgPT4ge1xuICAgIHRoaXMuZGVueUNvbXBvbmVudFVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGxvd1VwZGF0ZSA9ICgpID0+IHtcbiAgICB0aGlzLmFsbG93Q29tcG9uZW50VXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFkZERyYWdEcm9wRXZlbnRzID0gKCkgPT4ge1xuICAgIHRoaXMuY3JlYXRvci5vbkJlZm9yZURyb3AuYWRkKHRoaXMuZGVueVVwZGF0ZSk7XG4gICAgdGhpcy5jcmVhdG9yLm9uQWZ0ZXJEcm9wLmFkZCh0aGlzLmFsbG93VXBkYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJEcmFnRHJvcEV2ZW50cyA9ICgpID0+IHtcbiAgICB0aGlzLmNyZWF0b3Iub25CZWZvcmVEcm9wLnJlbW92ZSh0aGlzLmRlbnlVcGRhdGUpO1xuICAgIHRoaXMuY3JlYXRvci5vbkFmdGVyRHJvcC5yZW1vdmUodGhpcy5hbGxvd1VwZGF0ZSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuYWRkRHJhZ0Ryb3BFdmVudHMoKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5jbGVhckRyYWdEcm9wRXZlbnRzKCk7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICByZXR1cm4gW3RoaXMubW9kZWwsIHRoaXMubW9kZWwuc3VydmV5LCB0aGlzLm1vZGVsLnBhZ2VzQ29udHJvbGxlcl07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcmVkUGFnZXNDYWNoZTogYW55ID0ge307XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZFBhZ2VzKCk6IEpTWC5FbGVtZW50W10ge1xuICAgIGlmICh0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lICE9PSBcInBhZ2VzXCIpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlID0ge307XG4gICAgfVxuICAgIGNvbnN0IHJlbmRlcmVkUGFnZXMgPSBbXTtcblxuICAgIGlmICh0aGlzLmNyZWF0b3IucGFnZUVkaXRNb2RlICE9PSBcImJ5cGFnZVwiKSB7XG4gICAgICBjb25zdCBwYWdlcyA9IHRoaXMuY3JlYXRvci5zdXJ2ZXkucGFnZXM7XG5cbiAgICAgIHBhZ2VzLmZvckVhY2goKHBhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBjYWNoZWRQYWdlID0gdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZS5pZF07XG4gICAgICAgIGlmICghY2FjaGVkUGFnZSkge1xuICAgICAgICAgIGNhY2hlZFBhZ2UgPSB0aGlzLmNyZWF0ZVJlbmRlcmVkUGFnZShwYWdlLCBpbmRleCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZS5pZF0gPSBjYWNoZWRQYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVkUGFnZXMucHVzaChjYWNoZWRQYWdlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5tb2RlbC5zaG93TmV3UGFnZSkge1xuICAgICAgICByZW5kZXJlZFBhZ2VzLnB1c2godGhpcy5yZW5kZXJOZXdQYWdlKFwic3ZjLXBhZ2VcIiwgdGhpcy5tb2RlbC5uZXdQYWdlLmlkICsgXCItZ2hvc3QtbmV3LXBhZ2VcIikpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYWdlMkRpc3BsYXkgPSB0aGlzLm1vZGVsLnBhZ2VzQ29udHJvbGxlci5wYWdlMkRpc3BsYXk7XG4gICAgICBsZXQgY2FjaGVkUGFnZSA9IHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlW3BhZ2UyRGlzcGxheS5pZF07XG4gICAgICBpZiAoIWNhY2hlZFBhZ2UpIHtcbiAgICAgICAgY2FjaGVkUGFnZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2UyRGlzcGxheSwgMCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlW3BhZ2UyRGlzcGxheS5pZF0gPSBjYWNoZWRQYWdlO1xuICAgICAgfVxuICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKGNhY2hlZFBhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJlZFBhZ2VzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVSZW5kZXJlZFBhZ2UocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyLCBpc0dob3N0UGFnZT86IGJvb2xlYW4pOiBhbnkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcGFnZVwifVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXBhZ2U9e3BhZ2UubmFtZX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17aXNHaG9zdFBhZ2UgPyBcIm5ld0dob3N0UGFnZVwiIDogcGFnZS5uYW1lfVxuICAgICAgICBrZXk9e3BhZ2UuaWQgKyBcIi1cIiArIGluZGV4fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJQYWdlKHBhZ2UpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlck5ld1BhZ2UoY2xhc3NOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nID0gXCJcIikge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtrZXl9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17XCJuZXdHaG9zdFBhZ2VcIn1cbiAgICAgICAgPlxuICAgICAgICAgIHshIXRoaXMubW9kZWwubmV3UGFnZSA/IHRoaXMucmVuZGVyUGFnZSh0aGlzLm1vZGVsLm5ld1BhZ2UpIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhZ2UocGFnZVY6IFBhZ2VNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXBhZ2VcIiwgeyBzdXJ2ZXk6IHRoaXMuY3JlYXRvci5zdXJ2ZXksIHBhZ2U6IHBhZ2VWLCBjcmVhdG9yOiB0aGlzLmNyZWF0b3IgfSk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZGVzaWduZXJUYWJDbGFzc05hbWUgPSBcInN2Yy10YWItZGVzaWduZXIgXCIgKyB0aGlzLm1vZGVsLmdldFJvb3RDc3MoKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuaXNUb29sYm94VmlzaWJsZSA/IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIHsgbW9kZWw6IHRoaXMuY3JlYXRvciB9KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZGVzaWduZXJUYWJDbGFzc05hbWV9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2xpY2tEZXNpZ25lcigpfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10YWItZGVzaWduZXJfY29udGVudFwiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuc2hvd1BsYWNlaG9sZGVyID8gdGhpcy5yZW5kZXJQbGFjZUhvbGRlcigpIDogdGhpcy5yZW5kZXJUYWJDb250ZW50KCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySGVhZGVyKGNvbmRpdGlvbjogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIWNvbmRpdGlvbikgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5jcmVhdG9yLnN1cnZleTtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWRlc2lnbmVyLWhlYWRlclwiPlxuICAgICAgICA8U3VydmV5SGVhZGVyIHN1cnZleT17c3VydmV5fT48L1N1cnZleUhlYWRlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuICByZW5kZXJQbGFjZUhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5SGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIodGhpcy5jcmVhdG9yLmFsbG93RWRpdFN1cnZleVRpdGxlICYmIHRoaXMuY3JlYXRvci5zaG93SGVhZGVySW5FbXB0eVN1cnZleSk7XG5cbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHtzdXJ2ZXlIZWFkZXJ9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lcl9fcGxhY2Vob2xkZXItY29udGFpbmVyXCIgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17XCJuZXdHaG9zdFBhZ2VcIn0+XG4gICAgICAgIHt0aGlzLnJlbmRlclBsYWNlSG9sZGVyQ29udGVudCgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJOZXdQYWdlKFwic3ZjLWRlc2lnbmVyLXBsYWNlaG9sZGVyLXBhZ2VcIil9XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcmVuZGVyUGxhY2VIb2xkZXJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWRlc2lnbmVyLXBsYWNlaG9sZGVyLXRleHQgc3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbFwiPnt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH08L3NwYW4+O1xuICB9XG4gIHJlbmRlclRhYkNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLmNyZWF0b3Iuc3VydmV5O1xuICAgIGNvbnN0IHN1cnZleUhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKHRoaXMuY3JlYXRvci5hbGxvd0VkaXRTdXJ2ZXlUaXRsZSk7XG5cbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmdldERlc2lnbmVyQ3NzKCl9PlxuICAgICAgICB7c3VydmV5SGVhZGVyfVxuICAgICAgICA8U3VydmV5TmF2aWdhdGlvbiBzdXJ2ZXk9e3N1cnZleX0gbG9jYXRpb249XCJ0b3BcIiAvPlxuICAgICAgICB7dGhpcy5nZXRSZW5kZXJlZFBhZ2VzKCl9XG4gICAgICAgIDxTdXJ2ZXlOYXZpZ2F0aW9uXG4gICAgICAgICAgc3VydmV5PXtzdXJ2ZXl9XG4gICAgICAgICAgbG9jYXRpb249XCJib3R0b21cIlxuICAgICAgICAgIGNzcz17c3VydmV5LmNzc31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge3RoaXMuY3JlYXRvci5zaG93UGFnZU5hdmlnYXRvciA/XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYi1kZXNpZ25lcl9fcGFnZS1uYXZpZ2F0b3JcIj48U3VydmV5UGFnZU5hdmlnYXRvclxuICAgICAgICAgIHBhZ2VzQ29udHJvbGxlcj17dGhpcy5tb2RlbC5wYWdlc0NvbnRyb2xsZXJ9IHBhZ2VFZGl0TW9kZT17dGhpcy5tb2RlbC5jcmVhdG9yLnBhZ2VFZGl0TW9kZX1cbiAgICAgICAgPjwvU3VydmV5UGFnZU5hdmlnYXRvcj48L2Rpdj5cbiAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1kZXNpZ25lclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgVGFiRGVzaWduZXJDb21wb25lbnQsXG4gICAgcHJvcHMgYXMgSVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBFbWJlZE1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJFbWJlZENvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogRW1iZWRNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkVtYmVkQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJFbWJlZENvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBFbWJlZE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy1lbWJlZC10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAge3RoaXMubW9kZWwuc3VydmV5ID8gPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PiA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItZW1iZWRcIixcbiAgKHByb3BzOiBJVGFiRW1iZWRDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkVtYmVkQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEFjZUpzb25FZGl0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogQWNlSnNvbkVkaXRvck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIGFjZUVkaXRvcnJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuYWNlRWRpdG9yclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWNlSnNvbkVkaXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW9kZWwuaW5pdChhY2UuZWRpdCh0aGlzLmFjZUVkaXRvcnJSZWYuY3VycmVudCBhcyBIVE1MRWxlbWVudCkpO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19hY2UtZWRpdG9yXCJcbiAgICAgICAgICAgIHJlZj17dGhpcy5hY2VFZGl0b3JyUmVmfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItanNvbi1lZGl0b3ItYWNlXCIsXG4gIChwcm9wczogSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkpzb25FZGl0b3JBY2VDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMubW9kZWwuY2FuU2hvd0Vycm9ycyA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGV4dGFyZWFKc29uRWRpdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZXJyb3JzOiBKU1guRWxlbWVudFtdID0gW107XG4gICAgdmFyIGtleSA9IDE7XG4gICAgY29uc3QgdXNlckZyaWVuZGx5RXJyb3JzOiBhbnlbXSA9IHRoaXMubW9kZWwudXNlckZyaWVuZGx5RXJyb3JzO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB1c2VyRnJpZW5kbHlFcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVycm9ycy5wdXNoKDxzcGFuIGtleT17a2V5fT48Yj5FcnJvcjogPC9iPjwvc3Bhbj4pO1xuICAgICAga2V5Kys7XG4gICAgICBlcnJvcnMucHVzaCg8c3BhbiBrZXk9e2tleX0+e3VzZXJGcmllbmRseUVycm9yc1tpXX08L3NwYW4+KTtcbiAgICAgIGtleSsrO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50LWFyZWFcIlxuICAgICAgICAgICAgdmFsdWU9e3RoaXMubW9kZWwudGV4dH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZTogQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+XG4gICAgICAgICAgICAgICh0aGlzLm1vZGVsLnRleHQgPSBlLnRhcmdldC52YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHRoaXMubW9kZWwuY2hlY2tLZXkoZSwgZSl9XG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5tb2RlbC5yZWFkT25seX1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuYXJpYUxhYmVsfVxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgIHtlcnJvcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fZXJycm9zX2J1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwudG9nZ2xlRXJyb3JzKCl9PlxuICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5lcnJvckJ1dHRvblRleHR9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3RoaXMubW9kZWwuY2FuU2hvd0Vycm9ycyAmJiA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnQtZXJyb3JzXCI+e2Vycm9yc308L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWpzb24tZWRpdG9yLXRleHRhcmVhXCIsXG4gIChwcm9wczogSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleSwgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgU3VydmV5TG9naWNVSSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYnV0dG9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBidXR0b25DbGFzc05hbWUgPSBcInN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtYWN0aW9uIHN2Yy1idG5cIiArICgodGhpcy5tb2RlbC5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIXRoaXMubW9kZWwuZW5hYmxlZCkgPyBcIiBzdmMtbG9naWMtdGFiX19jb250ZW50LWFjdGlvbi0tZGlzYWJsZWRcIiA6IFwiXCIpO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbigpO1xuICAgICAgfX1cbiAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3NOYW1lfVxuICAgICAgdGl0bGU9e3RoaXMubW9kZWwudGl0bGV9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC50aXRsZX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItbG9naWMtYWRkLWJ1dHRvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiTG9naWNBZGRCdXR0b25Db21wb25lbnQsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVGFiTG9naWNDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBTdXJ2ZXlMb2dpY1VJIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgbG9naWMgPSB0aGlzLm1vZGVsO1xuICAgIHZhciByb290Q2xhc3MgPSBcInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiO1xuICAgIHZhciBjb250ZW50ID0gdGhpcy5yZW5kZXJWaWV3Q29udGVudCgpO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17cm9vdENsYXNzfT57Y29udGVudH08L2Rpdj47XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJWaWV3Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbG9naWNUYWJDbGFzc05hbWUgPSBcInN2Yy1wbHVnaW4tdGFiX19jb250ZW50IHN2Yy1sb2dpYy10YWJfX2NvbnRlbnQgXCIgKyAodGhpcy5tb2RlbC5oYXNJdGVtcyA/IFwiXCIgOiBcInN2Yy1sb2dpYy10YWJfX2VtcHR5XCIpO1xuICAgIGNvbnN0IGFkZExvZ2ljID0gIXRoaXMubW9kZWwucmVhZE9ubHkgPyA8VGFiTG9naWNBZGRCdXR0b25Db21wb25lbnQgYnV0dG9uPXt0aGlzLm1vZGVsLmFkZE5ld0J1dHRvbn0gLz4gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2xvZ2ljVGFiQ2xhc3NOYW1lfT5cbiAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLml0ZW1zU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5oYXNJdGVtcyA/IG51bGwgOiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtZW1wdHlcIiA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0XCI+e3RoaXMubW9kZWwuZW1wdHlUYWJQbGFjZUhvbGRlcn08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj4pfVxuICAgICAgICAgIHthZGRMb2dpY31cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0ZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1sb2dpY1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiTG9naWNDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBhdHRhY2hLZXkyY2xpY2tcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVGVzdFN1cnZleVRhYlZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlTaW11bGF0b3IgfSBmcm9tIFwiLi9TdXJ2ZXlTaW11bGF0b3JcIjtcbmltcG9ydCB7IFN1cnZleVJlc3VsdHMgfSBmcm9tIFwiLi4vUmVzdWx0c1wiO1xuXG5leHBvcnQgY2xhc3MgVGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYnV0dG9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBidXR0b25DbGFzc05hbWUgPSBcInN2Yy1wcmV2aWV3X190ZXN0LWFnYWluIHN2Yy1idG5cIjtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RlbC5hY3Rpb24oKTtcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWU9e2J1dHRvbkNsYXNzTmFtZX1cbiAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnRpdGxlfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwudGl0bGV9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXByZXZpZXctdGVzdC1hZ2FpblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBUYWJQcmV2aWV3U3VydmV5Q29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGVzdFN1cnZleVRhYlZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGFiQ29udGVudENsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy10ZXN0LXRhYl9fY29udGVudFwiICsgKHRoaXMubW9kZWwuaXNQYWdlVG9vbGJhclZpc2libGUgPyBcIiBzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQtLXdpdGgtdG9vbGJhclwiIDogXCJcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0YWJDb250ZW50Q2xhc3NOYW1lfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGx1Z2luLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDxTdXJ2ZXlTaW11bGF0b3IgbW9kZWw9e3RoaXMubW9kZWwuc2ltdWxhdG9yfT48L1N1cnZleVNpbXVsYXRvcj5cbiAgICAgICAgICB7IXRoaXMubW9kZWwuaXNSdW5uaW5nID8gPFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQgYnV0dG9uPXt0aGlzLm1vZGVsLnRlc3RBZ2FpbkFjdGlvbn0gLz4gOiBudWxsfVxuICAgICAgICAgIHshdGhpcy5tb2RlbC5pc1J1bm5pbmcgPyA8U3VydmV5UmVzdWx0cyBzdXJ2ZXk9e3RoaXMubW9kZWwuc2ltdWxhdG9yLnN1cnZleX0gLz4gOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMuZ2V0Qm90dG9tVG9vbGJhcigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBnZXRCb3R0b21Ub29sYmFyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc1BhZ2VUb29sYmFyVmlzaWJsZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGVzdC10YWJfX2NvbnRlbnQtYWN0aW9uc1wiPlxuICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWwucGFnZXN9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItdGVzdFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiUHJldmlld1N1cnZleUNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgU3VydmV5U2ltdWxhdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5U2ltdWxhdG9yIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogU3VydmV5U2ltdWxhdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG1haW5TaW11bGF0b3JDbGFzcyA9IFwic3ZkLXNpbXVsYXRvci1tYWluXCIgK1xuICAgICAgKHRoaXMubW9kZWwuZGV2aWNlID09PSBcImRlc2t0b3BcIiA/IFwiIHN2ZC1zaW11bGF0b3ItbWFpbi0tZGVza3RvcFwiIDogXCJcIik7XG4gICAgaWYgKCF0aGlzLm1vZGVsLnN1cnZleSkge1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3N9PjwvZGl2PjtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZWwuaGFzRnJhbWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzcyArIFwiIFwiICsgdGhpcy5tb2RlbC5zaW11bGF0b3JNYWluQ3NzQ2xhc3N9XG4gICAgICAgICAgb25LZXlEb3duPXtlID0+IHRoaXMubW9kZWwudHJ5VG9ab29tKGUsIGUpfVxuICAgICAgICAgIG9uTW91c2VFbnRlcj17dGhpcy5tb2RlbC5kZXZpY2UgPT09IFwiZGVza3RvcFwiID8gbnVsbCA6IHRoaXMubW9kZWwuYWN0aXZhdGVab29tfVxuICAgICAgICAgIG9uTW91c2VMZWF2ZT17dGhpcy5tb2RlbC5kZXZpY2UgPT09IFwiZGVza3RvcFwiID8gbnVsbCA6IHRoaXMubW9kZWwuZGVhY3RpdmF0ZVpvb219XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yLXdyYXBwZXJcIlxuICAgICAgICAgICAgaWQ9XCJzdmQtc2ltdWxhdG9yLXdyYXBwZXJcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgd2lkdGg6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICBcInN2ZC1zaW11bGF0b3ItZnJhbWUgXCIgKyB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmNzc0NsYXNzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUubGFuZHNjYXBlZEZyYW1lV2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5sYW5kc2NhcGVkRnJhbWVIZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvclwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmRldmljZVdpZHRoICsgXCJweFwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZGV2aWNlSGVpZ2h0ICsgXCJweFwiLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgICAgIFwic2NhbGUoXCIgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5zY2FsZSArXG4gICAgICAgICAgICAgICAgICBcIikgdHJhbnNsYXRlKC01MCUsIC01MCUpXCJcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5XG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRhYlRyYW5zbGF0aW9uQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVHJhbnNsYXRpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudCBzdmMtdHJhbnNsYXRpb24tdGFiXCI+XG4gICAgICAgIHt0aGlzLnJlbmRlckVsZW1lbnRDb250ZW50KCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlckVsZW1lbnRDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc0VtcHR5KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN0LW5vLXN0cmluZ3NcIj5cbiAgICAgICAgICA8c3Bhbj57dGhpcy5tb2RlbC5ub1N0cmluZ3NUZXh0fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN0LWNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtbiBzdC1zdHJpbmdzLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtcm93IHN0LXN0cmluZ3MtaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3RyaW5nc0hlYWRlclN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtcm93IHN2Yy1wbHVnaW4tdGFiX19jb250ZW50IHN0LXN0cmluZ3NcIj5cbiAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdHJpbmdzU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi10cmFuc2xhdGlvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiVHJhbnNsYXRpb25Db21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uTGluZVNrZWxldG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZC10cmFuc2xhdGlvbi1saW5lLXNrZWxldG9uXCI+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic2QtdHJhbnNsYXRpb24tbGluZS1za2VsZXRvblwiLCAocHJvcHM6IGFueSkgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2xhdGlvbkxpbmVTa2VsZXRvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcywgVG9vbGJveCB9IGZyb20gXCIuL1Rvb2xib3hcIjtcblxuZXhwb3J0IGNsYXNzIEFkYXB0aXZlVG9vbGJveCBleHRlbmRzIFRvb2xib3gge1xuICBwcml2YXRlIG1hbmFnZXI6IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy50b29sYm94LFxuICAgICAgXCIuc3ZjLXRvb2xib3hfX3Rvb2w6bm90KC5zdi1kb3RzKT4uc3YtYWN0aW9uX19jb250ZW50XCIsXG4gICAgICA0NCxcbiAgICAgIDQ0XG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMudG9vbGJveC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hcIiArICh0aGlzLnRvb2xib3guaXNDb21wYWN0ID8gXCIgc3ZjLXRvb2xib3gtLWNvbXBhY3RcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NvbnRhaW5lclwiPlxuICAgICAgICAgIHsodGhpcy50b29sYm94LmlzQ29tcGFjdCB8fCB0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSkgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC5yZW5kZXJlZEFjdGlvbnMsIHRoaXMudG9vbGJveC5pc0NvbXBhY3QpfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICAgICAgOiB0aGlzLnJlbmRlckNhdGVnb3JpZXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLWFkYXB0aXZlLXRvb2xib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEFkYXB0aXZlVG9vbGJveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5pbXBvcnQgeyBTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5IH0gZnJvbSBcIi4vVG9vbGJveENhdGVnb3J5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JUb29sYm94UHJvcHMge1xuICBtb2RlbDogQ3JlYXRvckJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBUb29sYm94IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVN1cnZleUNyZWF0b3JUb29sYm94UHJvcHMsIGFueT4ge1xuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHVibGljIGdldCB0b29sYm94KCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0b3IudG9vbGJveDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnRvb2xib3g7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy50b29sYm94Lmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY29udGFpbmVyXCI+XG4gICAgICAgICAgeyh0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSkgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC52aXNpYmxlQWN0aW9ucyl9XG4gICAgICAgICAgICA8L2Rpdj4pXG4gICAgICAgICAgICA6IHRoaXMucmVuZGVyQ2F0ZWdvcmllcygpXG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJJdGVtcyhpdGVtczogQXJyYXk8YW55PiwgaXNDb21wYWN0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICA8U3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGl0ZW09eyhpdGVtIGFzIGFueSl9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gaXNDb21wYWN0PXtpc0NvbXBhY3R9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9ID48L1N1cnZleUNyZWF0b3JUb29sYm94VG9vbD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyQ2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94LmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiA8U3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeSBjYXRlZ29yeT17Y2F0ZWdvcnl9IHRvb2xib3g9e3RoaXMudG9vbGJveH0ga2V5PXtcIml0ZW1cIiArIGluZGV4fSA+PC9TdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5PjtcbiAgICB9KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10b29sYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUb29sYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvblRvb2xib3gsIFF1ZXN0aW9uVG9vbGJveENhdGVnb3J5IH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnlQcm9wcyB7XG4gIGNhdGVnb3J5OiBRdWVzdGlvblRvb2xib3hDYXRlZ29yeTtcbiAgdG9vbGJveDogUXVlc3Rpb25Ub29sYm94O1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5UHJvcHMsIGFueT4ge1xuXG4gIHB1YmxpYyBnZXQgY2F0ZWdvcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2F0ZWdvcnk7XG4gIH1cbiAgcHVibGljIGdldCB0b29sYm94KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRvb2xib3g7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiAodGhpcy5jYXRlZ29yeSBhcyBhbnkpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlbmRlckNhdGVnb3J5SGVhZGVyKCk7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnJlbmRlckNhdGVnb3J5Q29udGVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeVwiIGtleT17dGhpcy5jYXRlZ29yeS5uYW1lfT5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckNhdGVnb3J5SGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyXCI7XG4gICAgaWYgKHRoaXMudG9vbGJveC5jYW5Db2xsYXBzZUNhdGVnb3JpZXMpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyLS1jb2xsYXBzZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9e2UgPT4gdGhpcy5jYXRlZ29yeS50b2dnbGVTdGF0ZSgpfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXRpdGxlXCI+e3RoaXMuY2F0ZWdvcnkubmFtZX08L3NwYW4+XG4gICAgICAgIHt0aGlzLnJlbmRlckJ1dHRvbigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guY2FuQ29sbGFwc2VDYXRlZ29yaWVzKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGljb25OYW1lID0gdGhpcy5jYXRlZ29yeS5jb2xsYXBzZWQgPyBcImFycm93LWRvd25cIiA6IFwiYXJyb3ctdXBcIjtcbiAgICBjb25zdCBzdWZmaXhOYW1lID0gdGhpcy5jYXRlZ29yeS5jb2xsYXBzZWQgPyBcImV4cGFuZFwiIDogXCJjb2xsYXBzZVwiO1xuICAgIGNvbnN0IHN2Z0ljb25DbGFzc05hbWUgPSBcInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1cIiArIHN1ZmZpeE5hbWU7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2NvbnRyb2xzXCI+XG4gICAgICA8U3ZnSWNvbiBjbGFzc05hbWU9e3N2Z0ljb25DbGFzc05hbWV9IGljb25OYW1lPXtcImljb24tXCIgKyBpY29uTmFtZX0gc2l6ZT17MjR9PjwvU3ZnSWNvbj5cbiAgICA8L2Rpdj4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckNhdGVnb3J5Q29udGVudCgpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gIXRoaXMuY2F0ZWdvcnkuY29sbGFwc2VkID8gdGhpcy5yZW5kZXJJdGVtcyh0aGlzLmNhdGVnb3J5Lml0ZW1zKSA6IFtdO1xuICB9XG5cbiAgcmVuZGVySXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGlzQ29tcGFjdCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PlxuICAgICAgPFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBpdGVtPXsoaXRlbSBhcyBhbnkpfSBjcmVhdG9yPXt0aGlzLnRvb2xib3guY3JlYXRvcn0gaXNDb21wYWN0PXtpc0NvbXBhY3R9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9ID48L1N1cnZleUNyZWF0b3JUb29sYm94VG9vbD5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3gtY2F0ZWdvcnlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnksIHByb3BzKTtcbn0pOyIsImltcG9ydCB7XG4gIENyZWF0b3JCYXNlLFxuICBlZGl0b3JMb2NhbGl6YXRpb24sXG4gIElRdWVzdGlvblRvb2xib3hJdGVtXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgVG9vbGJveFRvb2xWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBCYXNlLFxuICBTdXJ2ZXlNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW1Qcm9wcyB7XG4gIGl0ZW06IElRdWVzdGlvblRvb2xib3hJdGVtO1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgaXNDb21wYWN0OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgSVN1cnZleUNyZWF0b3JUb29sYm94SXRlbVByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogVG9vbGJveFRvb2xWaWV3TW9kZWw7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgVG9vbGJveFRvb2xWaWV3TW9kZWwodGhpcy5pdGVtLCB0aGlzLnByb3BzLmNyZWF0b3IpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImNyZWF0b3JcIiwgXCJpdGVtXCJdO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wYWN0KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlzQ29tcGFjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuICh0aGlzLml0ZW0gYXMgYW55KTtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbSA9ICgodGhpcy5pdGVtIGFzIGFueSkgYXMgQWN0aW9uKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy10b29sYm94X190b29sIFwiICsgaXRlbS5jc3MgKyAoaXRlbS5pc1Zpc2libGUgPyBcIlwiIDogXCIgc3YtYWN0aW9uLS1oaWRkZW5cIik7XG4gICAgY29uc3QgaXRlbUNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMuaXRlbS5jb21wb25lbnQgfHwgXCJzdmMtdG9vbGJveC1pdGVtXCIsXG4gICAgICB7XG4gICAgICAgIGl0ZW06IHRoaXMuaXRlbSxcbiAgICAgICAgY3JlYXRvcjogdGhpcy5jcmVhdG9yLFxuICAgICAgICBpc0NvbXBhY3Q6IHRoaXMuaXNDb21wYWN0XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0ga2V5PXtpdGVtLmlkfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICAgICAgICB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWFjdGlvbl9fY29udGVudFwiPlxuICAgICAgICAgIHsodGhpcy5pc0NvbXBhY3QgJiYgaXRlbS5uZWVkU2VwYXJhdG9yKSA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXNlcGFyYXRvclwiPjwvZGl2PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHtpdGVtQ29tcG9uZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94SXRlbSBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW1Qcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFRvb2xib3hUb29sVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgY29uc3QgdG9vbGJveEl0ZW06IElRdWVzdGlvblRvb2xib3hJdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgVG9vbGJveFRvb2xWaWV3TW9kZWwodG9vbGJveEl0ZW0sIHRoaXMucHJvcHMuY3JlYXRvcik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY3JlYXRvclwiLCBcIml0ZW1cIl07XG4gIH1cbiAgcHVibGljIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHVibGljIGdldCBjcmVhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9XG4gICAgICBcInN2Yy10b29sYm94X19pdGVtIHN2Yy10b29sYm94X19pdGVtLS1cIiArIHRoaXMuaXRlbS5pY29uTmFtZTtcbiAgICBjb25zdCBhcmlhTGFiZWwgPSB0aGlzLml0ZW0udG9vbHRpcCArIFwiIFwiICsgZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInRvb2xib3hcIikgKyBcIiBpdGVtXCI7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICAgICAgICB0aGlzLm1vZGVsLmNsaWNrKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9IHRpdGxlPXthcmlhTGFiZWx9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7KHRoaXMucHJvcHMuaXNDb21wYWN0ID9cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1iYW5uZXIgc3ZjLWl0ZW1fX2Jhbm5lclwiPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWljb25cIiB0aXRsZT17YXJpYUxhYmVsfT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS10aXRsZVwiPnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA6XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveC1pdGVtXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0sIHByb3BzKTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY3JlYXRvcl9jb3JlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9yZWFjdF91aV9fOyJdLCJzb3VyY2VSb290IjoiIn0=