survey-react-ui 1.9.44 → 1.9.47

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 - Survey JavaScript library v1.9.44
2
+ * surveyjs - Survey JavaScript library v1.9.47
3
3
  * Copyright (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
4
4
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
5
  */
@@ -634,7 +634,7 @@ __webpack_require__.r(__webpack_exports__);
634
634
  /*!***************************************!*\
635
635
  !*** ./src/entries/react-ui-model.ts ***!
636
636
  \***************************************/
637
- /*! exports provided: Survey, attachKey2click, ReactSurveyElementsWrapper, SurveyNavigationBase, SurveyTimerPanel, SurveyPage, SurveyRow, SurveyPanel, SurveyFlowPanel, SurveyQuestion, SurveyElementErrors, SurveyQuestionAndErrorsCell, ReactSurveyElement, SurveyElementBase, SurveyQuestionElementBase, SurveyQuestionCommentItem, SurveyQuestionComment, SurveyQuestionCheckbox, SurveyQuestionCheckboxItem, SurveyQuestionRanking, SurveyQuestionRankingItem, SurveyQuestionOptionItem, SurveyQuestionDropdownBase, SurveyQuestionDropdown, SurveyQuestionTagboxItem, SurveyQuestionTagbox, SurveyQuestionDropdownSelect, SurveyQuestionMatrix, SurveyQuestionMatrixRow, SurveyQuestionHtml, SurveyQuestionFile, SurveyQuestionMultipleText, SurveyQuestionRadiogroup, SurveyQuestionText, SurveyQuestionBoolean, SurveyQuestionBooleanCheckbox, SurveyQuestionBooleanRadio, SurveyQuestionEmpty, SurveyQuestionMatrixDropdownCell, SurveyQuestionMatrixDropdown, SurveyQuestionMatrixDynamic, SurveyQuestionMatrixDynamicAddButton, SurveyQuestionPanelDynamic, SurveyProgress, SurveyProgressButtons, SurveyQuestionRating, SurveyQuestionRatingDropdown, SurveyQuestionExpression, SurveyWindow, ReactQuestionFactory, ReactElementFactory, SurveyQuestionImagePicker, SurveyQuestionImage, SurveyQuestionSignaturePad, SurveyQuestionButtonGroup, SurveyQuestionCustom, SurveyQuestionComposite, Popup, List, TitleActions, TitleElement, SurveyActionBar, LogoImage, SurveyHeader, SvgIcon, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, SurveyQuestionPanelDynamicAddButton, SurveyQuestionPanelDynamicRemoveButton, SurveyQuestionPanelDynamicPrevButton, SurveyQuestionPanelDynamicNextButton, SurveyQuestionPanelDynamicProgressText, SurveyNavigationButton, MatrixRow, Skeleton, SurveyLocStringViewer, SurveyLocStringEditor, ResponsivityManager, VerticalResponsivityManager, unwrap */
637
+ /*! exports provided: Survey, attachKey2click, ReactSurveyElementsWrapper, SurveyNavigationBase, SurveyTimerPanel, SurveyPage, SurveyRow, SurveyPanel, SurveyFlowPanel, SurveyQuestion, SurveyElementErrors, SurveyQuestionAndErrorsCell, ReactSurveyElement, SurveyElementBase, SurveyQuestionElementBase, SurveyQuestionCommentItem, SurveyQuestionComment, SurveyQuestionCheckbox, SurveyQuestionCheckboxItem, SurveyQuestionRanking, SurveyQuestionRankingItem, SurveyQuestionOptionItem, SurveyQuestionDropdownBase, SurveyQuestionDropdown, SurveyQuestionTagboxItem, SurveyQuestionTagbox, SurveyQuestionDropdownSelect, SurveyQuestionMatrix, SurveyQuestionMatrixRow, SurveyQuestionHtml, SurveyQuestionFile, SurveyQuestionMultipleText, SurveyQuestionRadiogroup, SurveyQuestionText, SurveyQuestionBoolean, SurveyQuestionBooleanCheckbox, SurveyQuestionBooleanRadio, SurveyQuestionEmpty, SurveyQuestionMatrixDropdownCell, SurveyQuestionMatrixDropdown, SurveyQuestionMatrixDynamic, SurveyQuestionMatrixDynamicAddButton, SurveyQuestionPanelDynamic, SurveyProgress, SurveyProgressButtons, SurveyQuestionRating, SurveyQuestionRatingDropdown, SurveyQuestionExpression, PopupSurvey, SurveyWindow, ReactQuestionFactory, ReactElementFactory, SurveyQuestionImagePicker, SurveyQuestionImage, SurveyQuestionSignaturePad, SurveyQuestionButtonGroup, SurveyQuestionCustom, SurveyQuestionComposite, Popup, List, TitleActions, TitleElement, SurveyActionBar, LogoImage, SurveyHeader, SvgIcon, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, SurveyQuestionPanelDynamicAddButton, SurveyQuestionPanelDynamicRemoveButton, SurveyQuestionPanelDynamicPrevButton, SurveyQuestionPanelDynamicNextButton, SurveyQuestionPanelDynamicProgressText, SurveyNavigationButton, MatrixRow, Skeleton, SurveyLocStringViewer, SurveyLocStringEditor, ResponsivityManager, VerticalResponsivityManager, unwrap */
638
638
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
639
639
 
640
640
  "use strict";
@@ -773,8 +773,10 @@ __webpack_require__.r(__webpack_exports__);
773
773
  /* harmony import */ var _react_reactquestion_expression__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../react/reactquestion_expression */ "./src/react/reactquestion_expression.tsx");
774
774
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionExpression", function() { return _react_reactquestion_expression__WEBPACK_IMPORTED_MODULE_37__["SurveyQuestionExpression"]; });
775
775
 
776
- /* harmony import */ var _react_reactSurveyWindow__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../react/reactSurveyWindow */ "./src/react/reactSurveyWindow.tsx");
777
- /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyWindow", function() { return _react_reactSurveyWindow__WEBPACK_IMPORTED_MODULE_38__["SurveyWindow"]; });
776
+ /* harmony import */ var _react_react_popup_survey__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../react/react-popup-survey */ "./src/react/react-popup-survey.tsx");
777
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PopupSurvey", function() { return _react_react_popup_survey__WEBPACK_IMPORTED_MODULE_38__["PopupSurvey"]; });
778
+
779
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyWindow", function() { return _react_react_popup_survey__WEBPACK_IMPORTED_MODULE_38__["SurveyWindow"]; });
778
780
 
779
781
  /* harmony import */ var _react_reactquestion_factory__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../react/reactquestion_factory */ "./src/react/reactquestion_factory.tsx");
780
782
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactQuestionFactory", function() { return _react_reactquestion_factory__WEBPACK_IMPORTED_MODULE_39__["ReactQuestionFactory"]; });
@@ -950,7 +952,7 @@ __webpack_require__.r(__webpack_exports__);
950
952
  /*!*********************************!*\
951
953
  !*** ./src/entries/react-ui.ts ***!
952
954
  \*********************************/
953
- /*! exports provided: Survey, attachKey2click, ReactSurveyElementsWrapper, SurveyNavigationBase, SurveyTimerPanel, SurveyPage, SurveyRow, SurveyPanel, SurveyFlowPanel, SurveyQuestion, SurveyElementErrors, SurveyQuestionAndErrorsCell, ReactSurveyElement, SurveyElementBase, SurveyQuestionElementBase, SurveyQuestionCommentItem, SurveyQuestionComment, SurveyQuestionCheckbox, SurveyQuestionCheckboxItem, SurveyQuestionRanking, SurveyQuestionRankingItem, SurveyQuestionOptionItem, SurveyQuestionDropdownBase, SurveyQuestionDropdown, SurveyQuestionTagboxItem, SurveyQuestionTagbox, SurveyQuestionDropdownSelect, SurveyQuestionMatrix, SurveyQuestionMatrixRow, SurveyQuestionHtml, SurveyQuestionFile, SurveyQuestionMultipleText, SurveyQuestionRadiogroup, SurveyQuestionText, SurveyQuestionBoolean, SurveyQuestionBooleanCheckbox, SurveyQuestionBooleanRadio, SurveyQuestionEmpty, SurveyQuestionMatrixDropdownCell, SurveyQuestionMatrixDropdown, SurveyQuestionMatrixDynamic, SurveyQuestionMatrixDynamicAddButton, SurveyQuestionPanelDynamic, SurveyProgress, SurveyProgressButtons, SurveyQuestionRating, SurveyQuestionRatingDropdown, SurveyQuestionExpression, SurveyWindow, ReactQuestionFactory, ReactElementFactory, SurveyQuestionImagePicker, SurveyQuestionImage, SurveyQuestionSignaturePad, SurveyQuestionButtonGroup, SurveyQuestionCustom, SurveyQuestionComposite, Popup, List, TitleActions, TitleElement, SurveyActionBar, LogoImage, SurveyHeader, SvgIcon, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, SurveyQuestionPanelDynamicAddButton, SurveyQuestionPanelDynamicRemoveButton, SurveyQuestionPanelDynamicPrevButton, SurveyQuestionPanelDynamicNextButton, SurveyQuestionPanelDynamicProgressText, SurveyNavigationButton, MatrixRow, Skeleton, SurveyLocStringViewer, SurveyLocStringEditor, ResponsivityManager, VerticalResponsivityManager, unwrap, SurveyModel, Model, SurveyWindowModel, settings, surveyLocalization, surveyStrings */
955
+ /*! exports provided: Survey, attachKey2click, ReactSurveyElementsWrapper, SurveyNavigationBase, SurveyTimerPanel, SurveyPage, SurveyRow, SurveyPanel, SurveyFlowPanel, SurveyQuestion, SurveyElementErrors, SurveyQuestionAndErrorsCell, ReactSurveyElement, SurveyElementBase, SurveyQuestionElementBase, SurveyQuestionCommentItem, SurveyQuestionComment, SurveyQuestionCheckbox, SurveyQuestionCheckboxItem, SurveyQuestionRanking, SurveyQuestionRankingItem, SurveyQuestionOptionItem, SurveyQuestionDropdownBase, SurveyQuestionDropdown, SurveyQuestionTagboxItem, SurveyQuestionTagbox, SurveyQuestionDropdownSelect, SurveyQuestionMatrix, SurveyQuestionMatrixRow, SurveyQuestionHtml, SurveyQuestionFile, SurveyQuestionMultipleText, SurveyQuestionRadiogroup, SurveyQuestionText, SurveyQuestionBoolean, SurveyQuestionBooleanCheckbox, SurveyQuestionBooleanRadio, SurveyQuestionEmpty, SurveyQuestionMatrixDropdownCell, SurveyQuestionMatrixDropdown, SurveyQuestionMatrixDynamic, SurveyQuestionMatrixDynamicAddButton, SurveyQuestionPanelDynamic, SurveyProgress, SurveyProgressButtons, SurveyQuestionRating, SurveyQuestionRatingDropdown, SurveyQuestionExpression, PopupSurvey, SurveyWindow, ReactQuestionFactory, ReactElementFactory, SurveyQuestionImagePicker, SurveyQuestionImage, SurveyQuestionSignaturePad, SurveyQuestionButtonGroup, SurveyQuestionCustom, SurveyQuestionComposite, Popup, List, TitleActions, TitleElement, SurveyActionBar, LogoImage, SurveyHeader, SvgIcon, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, SurveyQuestionPanelDynamicAddButton, SurveyQuestionPanelDynamicRemoveButton, SurveyQuestionPanelDynamicPrevButton, SurveyQuestionPanelDynamicNextButton, SurveyQuestionPanelDynamicProgressText, SurveyNavigationButton, MatrixRow, Skeleton, SurveyLocStringViewer, SurveyLocStringEditor, ResponsivityManager, VerticalResponsivityManager, unwrap, SurveyModel, Model, SurveyWindowModel, settings, surveyLocalization, surveyStrings */
954
956
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
955
957
 
956
958
  "use strict";
@@ -1052,6 +1054,8 @@ __webpack_require__.r(__webpack_exports__);
1052
1054
 
1053
1055
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionExpression", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyQuestionExpression"]; });
1054
1056
 
1057
+ /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PopupSurvey", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["PopupSurvey"]; });
1058
+
1055
1059
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SurveyWindow", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["SurveyWindow"]; });
1056
1060
 
1057
1061
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReactQuestionFactory", function() { return _react_ui_model__WEBPACK_IMPORTED_MODULE_0__["ReactQuestionFactory"]; });
@@ -1131,8 +1135,12 @@ __webpack_require__.r(__webpack_exports__);
1131
1135
 
1132
1136
  /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "surveyStrings", function() { return _core_export__WEBPACK_IMPORTED_MODULE_1__["surveyStrings"]; });
1133
1137
 
1138
+ /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! survey-core */ "survey-core");
1139
+ /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_2__);
1140
+
1134
1141
 
1135
1142
 
1143
+ Object(survey_core__WEBPACK_IMPORTED_MODULE_2__["checkLibraryVersion"])("".concat("1.9.47"), "survey-knockout-ui");
1136
1144
 
1137
1145
 
1138
1146
  /***/ }),
@@ -1848,7 +1856,7 @@ var ListItem = /** @class */ (function (_super) {
1848
1856
  var className = this.model.getItemClass(this.item);
1849
1857
  var content = [];
1850
1858
  if (!this.item.component) {
1851
- var icon = this.item.iconName ? (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_4__["SvgIcon"], { key: 1, className: "sv-list__item-icon", iconName: this.item.iconName, size: 24, "aria-label": this.item.title })) : null;
1859
+ var icon = this.item.iconName ? (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_4__["SvgIcon"], { key: 1, className: this.model.cssClasses.itemIcon, iconName: this.item.iconName, size: 24, "aria-label": this.item.title })) : null;
1852
1860
  content.push(icon);
1853
1861
  content.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { key: 2 }, this.item.title));
1854
1862
  }
@@ -1930,9 +1938,10 @@ var List = /** @class */ (function (_super) {
1930
1938
  };
1931
1939
  List.prototype.renderElement = function () {
1932
1940
  var items = this.renderItems();
1933
- return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: "sv-list__container" },
1941
+ return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: this.model.cssClasses.root },
1934
1942
  this.searchElementContent(),
1935
- react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("ul", { className: "sv-list", role: "listbox", onMouseDown: function (e) {
1943
+ this.emptyContent(),
1944
+ react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("ul", { className: this.model.cssClasses.itemsContainer, role: "listbox", onMouseDown: function (e) {
1936
1945
  e.preventDefault();
1937
1946
  }, onKeyDown: this.handleKeydown }, items)));
1938
1947
  };
@@ -1962,10 +1971,18 @@ var List = /** @class */ (function (_super) {
1962
1971
  var onKeyUp = function (e) {
1963
1972
  _this.model.goToItems(e);
1964
1973
  };
1965
- return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: "sv-list__filter" },
1966
- react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: "sv-list__filter-icon" },
1974
+ return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: this.model.cssClasses.filter },
1975
+ react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: this.model.cssClasses.filterIcon },
1967
1976
  react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_3__["SvgIcon"], { iconName: "icon-search", size: "auto" })),
1968
- react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { type: "text", className: "sv-list__input", "aria-label": this.model.filteredTextPlaceholder, placeholder: this.model.filteredTextPlaceholder, value: this.state.filteredText, onKeyUp: onKeyUp, onChange: onChange })));
1977
+ react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("input", { type: "text", className: this.model.cssClasses.filterInput, "aria-label": this.model.filteredTextPlaceholder, placeholder: this.model.filteredTextPlaceholder, value: this.state.filteredText, onKeyUp: onKeyUp, onChange: onChange })));
1978
+ }
1979
+ };
1980
+ List.prototype.emptyContent = function () {
1981
+ if (!this.model.isEmpty)
1982
+ return null;
1983
+ else {
1984
+ return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: this.model.cssClasses.emptyContainer },
1985
+ react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { className: this.model.cssClasses.emptyText, "aria-label": this.model.emptyMessage }, this.model.emptyMessage)));
1969
1986
  }
1970
1987
  };
1971
1988
  return List;
@@ -3343,9 +3360,7 @@ var TitleElement = /** @class */ (function (_super) {
3343
3360
  };
3344
3361
  }
3345
3362
  var CustomTag = element.titleTagName;
3346
- return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(CustomTag, { className: element.cssTitle, id: element.ariaTitleId, "aria-label": element.getType() === "radiogroup"
3347
- ? ""
3348
- : element.locTitle.renderedHtml, tabIndex: element.titleTabIndex, "aria-expanded": element.titleAriaExpanded, onClick: onClick, onKeyUp: onKeyUp }, titleContent));
3363
+ return (react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(CustomTag, { className: element.cssTitle, id: element.ariaTitleId, "aria-label": element.titleAriaLabel, tabIndex: element.titleTabIndex, "aria-expanded": element.titleAriaExpanded, onClick: onClick, onKeyUp: onKeyUp }, titleContent));
3349
3364
  };
3350
3365
  return TitleElement;
3351
3366
  }(react__WEBPACK_IMPORTED_MODULE_0___default.a.Component));
@@ -3548,7 +3563,7 @@ var SurveyQuestionDropdownBase = /** @class */ (function (_super) {
3548
3563
  return null;
3549
3564
  var style = { display: this.question.isEmpty() ? "none" : "" };
3550
3565
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.question.cssClasses.cleanButton, style: style, onClick: this.clear },
3551
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_3__["SvgIcon"], { className: this.question.cssClasses.cleanButtonSvg, iconName: this.question.cssClasses.cleanButtonIconId, size: "auto" })));
3566
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_3__["SvgIcon"], { className: this.question.cssClasses.cleanButtonSvg, iconName: this.question.cssClasses.cleanButtonIconId, title: this.question.cleanButtonCaption, size: "auto" })));
3552
3567
  };
3553
3568
  SurveyQuestionDropdownBase.prototype.renderOther = function (cssClasses) {
3554
3569
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: "form-group" },
@@ -4042,10 +4057,10 @@ var SurveyQuestionImage = /** @class */ (function (_super) {
4042
4057
  style: style }));
4043
4058
  }
4044
4059
  if (this.question.renderedMode === "video") {
4045
- control = (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("video", { controls: true, className: cssClasses, src: this.question.imageLink, width: this.question.renderedWidth, height: this.question.renderedHeight, style: style }));
4060
+ control = (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("video", { controls: true, className: cssClasses, src: this.question.locImageLink.renderedHtml, width: this.question.renderedWidth, height: this.question.renderedHeight, style: style }));
4046
4061
  }
4047
4062
  if (this.question.renderedMode === "youtube") {
4048
- control = (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("iframe", { className: cssClasses, src: this.question.imageLink, width: this.question.renderedWidth, height: this.question.renderedHeight, style: style }));
4063
+ control = (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("iframe", { className: cssClasses, src: this.question.locImageLink.renderedHtml, width: this.question.renderedWidth, height: this.question.renderedHeight, style: style }));
4049
4064
  }
4050
4065
  return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.question.cssClasses.root }, control);
4051
4066
  };
@@ -4658,6 +4673,117 @@ _reactquestion_factory__WEBPACK_IMPORTED_MODULE_3__["ReactQuestionFactory"].Inst
4658
4673
  survey_core__WEBPACK_IMPORTED_MODULE_1__["RendererFactory"].Instance.registerRenderer("rating", "dropdown", "sv-rating-dropdown");
4659
4674
 
4660
4675
 
4676
+ /***/ }),
4677
+
4678
+ /***/ "./src/react/react-popup-survey.tsx":
4679
+ /*!******************************************!*\
4680
+ !*** ./src/react/react-popup-survey.tsx ***!
4681
+ \******************************************/
4682
+ /*! exports provided: PopupSurvey, SurveyWindow */
4683
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
4684
+
4685
+ "use strict";
4686
+ __webpack_require__.r(__webpack_exports__);
4687
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PopupSurvey", function() { return PopupSurvey; });
4688
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyWindow", function() { return SurveyWindow; });
4689
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
4690
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
4691
+ /* harmony import */ var _reactSurvey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reactSurvey */ "./src/react/reactSurvey.tsx");
4692
+ /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
4693
+ /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-core */ "survey-core");
4694
+ /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_3__);
4695
+ var __extends = (undefined && undefined.__extends) || (function () {
4696
+ var extendStatics = function (d, b) {
4697
+ extendStatics = Object.setPrototypeOf ||
4698
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
4699
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
4700
+ return extendStatics(d, b);
4701
+ };
4702
+ return function (d, b) {
4703
+ if (typeof b !== "function" && b !== null)
4704
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
4705
+ extendStatics(d, b);
4706
+ function __() { this.constructor = d; }
4707
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
4708
+ };
4709
+ })();
4710
+
4711
+
4712
+
4713
+
4714
+ var PopupSurvey = /** @class */ (function (_super) {
4715
+ __extends(PopupSurvey, _super);
4716
+ function PopupSurvey(props) {
4717
+ var _this = _super.call(this, props) || this;
4718
+ _this.handleOnExpanded = _this.handleOnExpanded.bind(_this);
4719
+ return _this;
4720
+ }
4721
+ PopupSurvey.prototype.getStateElements = function () {
4722
+ return [this.popup, this.popup.survey];
4723
+ };
4724
+ PopupSurvey.prototype.handleOnExpanded = function (event) {
4725
+ this.popup.changeExpandCollapse();
4726
+ };
4727
+ PopupSurvey.prototype.canRender = function () {
4728
+ return _super.prototype.canRender.call(this) && this.popup.isShowing;
4729
+ };
4730
+ PopupSurvey.prototype.renderElement = function () {
4731
+ var header = this.renderWindowHeader();
4732
+ var body = this.popup.isExpanded ? this.renderBody() : null;
4733
+ var style = {
4734
+ position: "fixed",
4735
+ bottom: 3,
4736
+ right: 10,
4737
+ maxWidth: "60%",
4738
+ };
4739
+ return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.popup.cssRoot, style: style },
4740
+ header,
4741
+ body));
4742
+ };
4743
+ PopupSurvey.prototype.renderWindowHeader = function () {
4744
+ var styleA = { width: "100%", cursor: "pointer" };
4745
+ var styleTitle = { paddingRight: "10px" };
4746
+ var glyphClassName = this.popup.cssButton;
4747
+ glyphClassName = "glyphicon pull-right " + glyphClassName;
4748
+ var title = _reactquestion_element__WEBPACK_IMPORTED_MODULE_2__["SurveyElementBase"].renderLocString(this.survey.locTitle);
4749
+ return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.popup.cssHeaderRoot },
4750
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { onClick: this.handleOnExpanded, style: styleA },
4751
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.popup.cssHeaderTitle, style: styleTitle }, title),
4752
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: glyphClassName, "aria-hidden": "true" })),
4753
+ this.popup.isExpanded ? (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { onClick: this.handleOnExpanded, style: { float: "right", cursor: "pointer" } },
4754
+ react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.popup.cssHeaderTitle, style: styleTitle }, "X"))) : null));
4755
+ };
4756
+ PopupSurvey.prototype.renderBody = function () {
4757
+ return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.popup.cssBody }, this.doRender());
4758
+ };
4759
+ PopupSurvey.prototype.createSurvey = function (newProps) {
4760
+ if (!newProps)
4761
+ newProps = {};
4762
+ _super.prototype.createSurvey.call(this, newProps);
4763
+ this.popup = new survey_core__WEBPACK_IMPORTED_MODULE_3__["PopupSurveyModel"](null, this.survey);
4764
+ if (newProps.closeOnCompleteTimeout) {
4765
+ this.popup.closeOnCompleteTimeout = newProps.closeOnCompleteTimeout;
4766
+ }
4767
+ this.popup.isShowing = true;
4768
+ if (!this.popup.isExpanded && (newProps.expanded || newProps.isExpanded))
4769
+ this.popup.expand();
4770
+ };
4771
+ return PopupSurvey;
4772
+ }(_reactSurvey__WEBPACK_IMPORTED_MODULE_1__["Survey"]));
4773
+
4774
+ /**
4775
+ * Obsolete. Please use PopupSurvey
4776
+ */
4777
+ var SurveyWindow = /** @class */ (function (_super) {
4778
+ __extends(SurveyWindow, _super);
4779
+ function SurveyWindow() {
4780
+ return _super !== null && _super.apply(this, arguments) || this;
4781
+ }
4782
+ return SurveyWindow;
4783
+ }(PopupSurvey));
4784
+
4785
+
4786
+
4661
4787
  /***/ }),
4662
4788
 
4663
4789
  /***/ "./src/react/reactSurvey.tsx":
@@ -4793,7 +4919,11 @@ var Survey = /** @class */ (function (_super) {
4793
4919
  }
4794
4920
  var rootCss = this.survey.getRootCss();
4795
4921
  var cssClasses = this.rootNodeClassName ? this.rootNodeClassName + " " + rootCss : rootCss;
4796
- return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { id: this.rootNodeId, ref: this.rootRef, className: cssClasses },
4922
+ var style = {};
4923
+ if (!!this.survey.width) {
4924
+ style.width = this.survey.width;
4925
+ }
4926
+ return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { id: this.rootNodeId, ref: this.rootRef, className: cssClasses, style: style },
4797
4927
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("form", { onSubmit: onSubmit },
4798
4928
  customHeader,
4799
4929
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.css.container },
@@ -5292,105 +5422,6 @@ _element_factory__WEBPACK_IMPORTED_MODULE_3__["ReactElementFactory"].Instance.re
5292
5422
  });
5293
5423
 
5294
5424
 
5295
- /***/ }),
5296
-
5297
- /***/ "./src/react/reactSurveyWindow.tsx":
5298
- /*!*****************************************!*\
5299
- !*** ./src/react/reactSurveyWindow.tsx ***!
5300
- \*****************************************/
5301
- /*! exports provided: SurveyWindow */
5302
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
5303
-
5304
- "use strict";
5305
- __webpack_require__.r(__webpack_exports__);
5306
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyWindow", function() { return SurveyWindow; });
5307
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
5308
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
5309
- /* harmony import */ var _reactSurvey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reactSurvey */ "./src/react/reactSurvey.tsx");
5310
- /* harmony import */ var _reactquestion_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reactquestion_element */ "./src/react/reactquestion_element.tsx");
5311
- /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! survey-core */ "survey-core");
5312
- /* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_3__);
5313
- var __extends = (undefined && undefined.__extends) || (function () {
5314
- var extendStatics = function (d, b) {
5315
- extendStatics = Object.setPrototypeOf ||
5316
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5317
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
5318
- return extendStatics(d, b);
5319
- };
5320
- return function (d, b) {
5321
- if (typeof b !== "function" && b !== null)
5322
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
5323
- extendStatics(d, b);
5324
- function __() { this.constructor = d; }
5325
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
5326
- };
5327
- })();
5328
-
5329
-
5330
-
5331
-
5332
- var SurveyWindow = /** @class */ (function (_super) {
5333
- __extends(SurveyWindow, _super);
5334
- function SurveyWindow(props) {
5335
- var _this = _super.call(this, props) || this;
5336
- _this.handleOnExpanded = _this.handleOnExpanded.bind(_this);
5337
- return _this;
5338
- }
5339
- SurveyWindow.prototype.getStateElements = function () {
5340
- return [this.window, this.window.survey];
5341
- };
5342
- SurveyWindow.prototype.handleOnExpanded = function (event) {
5343
- this.window.changeExpandCollapse();
5344
- };
5345
- SurveyWindow.prototype.canRender = function () {
5346
- return _super.prototype.canRender.call(this) && this.window.isShowing;
5347
- };
5348
- SurveyWindow.prototype.renderElement = function () {
5349
- var header = this.renderWindowHeader();
5350
- var body = this.window.isExpanded ? this.renderBody() : null;
5351
- var style = {
5352
- position: "fixed",
5353
- bottom: 3,
5354
- right: 10,
5355
- maxWidth: "60%",
5356
- };
5357
- return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.window.cssRoot, style: style },
5358
- header,
5359
- body));
5360
- };
5361
- SurveyWindow.prototype.renderWindowHeader = function () {
5362
- var styleA = { width: "100%", cursor: "pointer" };
5363
- var styleTitle = { paddingRight: "10px" };
5364
- var glyphClassName = this.window.cssButton;
5365
- glyphClassName = "glyphicon pull-right " + glyphClassName;
5366
- var title = _reactquestion_element__WEBPACK_IMPORTED_MODULE_2__["SurveyElementBase"].renderLocString(this.survey.locTitle);
5367
- return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.window.cssHeaderRoot },
5368
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { onClick: this.handleOnExpanded, style: styleA },
5369
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.window.cssHeaderTitle, style: styleTitle }, title),
5370
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: glyphClassName, "aria-hidden": "true" })),
5371
- this.window.isExpanded ? (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { onClick: this.handleOnExpanded, style: { float: "right", cursor: "pointer" } },
5372
- react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.window.cssHeaderTitle, style: styleTitle }, "X"))) : null));
5373
- };
5374
- SurveyWindow.prototype.renderBody = function () {
5375
- return react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.window.cssBody }, this.doRender());
5376
- };
5377
- SurveyWindow.prototype.createSurvey = function (newProps) {
5378
- if (!newProps)
5379
- newProps = {};
5380
- _super.prototype.createSurvey.call(this, newProps);
5381
- this.window = new survey_core__WEBPACK_IMPORTED_MODULE_3__["SurveyWindowModel"](null, this.survey);
5382
- if (newProps.closeOnCompleteTimeout) {
5383
- this.window.closeOnCompleteTimeout = newProps.closeOnCompleteTimeout;
5384
- }
5385
- this.window.isShowing = true;
5386
- if (!this.window.isExpanded && (newProps.expanded || newProps.isExpanded))
5387
- this.window.expand();
5388
- };
5389
- return SurveyWindow;
5390
- }(_reactSurvey__WEBPACK_IMPORTED_MODULE_1__["Survey"]));
5391
-
5392
-
5393
-
5394
5425
  /***/ }),
5395
5426
 
5396
5427
  /***/ "./src/react/reactquestion.tsx":
@@ -7396,7 +7427,8 @@ __webpack_require__.r(__webpack_exports__);
7396
7427
  /* harmony import */ var _components_action_bar_action_bar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/action-bar/action-bar */ "./src/react/components/action-bar/action-bar.tsx");
7397
7428
  /* harmony import */ var _components_matrix_row__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/matrix/row */ "./src/react/components/matrix/row.tsx");
7398
7429
  /* harmony import */ var _components_matrix_actions_drag_drop_icon_drag_drop_icon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/matrix-actions/drag-drop-icon/drag-drop-icon */ "./src/react/components/matrix-actions/drag-drop-icon/drag-drop-icon.tsx");
7399
- /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
7430
+ /* harmony import */ var _reactquestion_comment__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactquestion_comment */ "./src/react/reactquestion_comment.tsx");
7431
+ /* harmony import */ var _element_factory__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./element-factory */ "./src/react/element-factory.tsx");
7400
7432
  var __extends = (undefined && undefined.__extends) || (function () {
7401
7433
  var extendStatics = function (d, b) {
7402
7434
  extendStatics = Object.setPrototypeOf ||
@@ -7422,6 +7454,7 @@ var __extends = (undefined && undefined.__extends) || (function () {
7422
7454
 
7423
7455
 
7424
7456
 
7457
+
7425
7458
  var SurveyQuestionMatrixDropdownBase = /** @class */ (function (_super) {
7426
7459
  __extends(SurveyQuestionMatrixDropdownBase, _super);
7427
7460
  function SurveyQuestionMatrixDropdownBase(props) {
@@ -7574,7 +7607,7 @@ var SurveyQuestionMatrixDropdownBase = /** @class */ (function (_super) {
7574
7607
  react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_matrix_actions_drag_drop_icon_drag_drop_icon__WEBPACK_IMPORTED_MODULE_8__["SurveyQuestionMatrixDynamicDragDropIcon"], { item: { data: { row: cell.row, question: this.question } } })));
7575
7608
  }
7576
7609
  if (cell.isActionsCell) {
7577
- cellContent = (_element_factory__WEBPACK_IMPORTED_MODULE_9__["ReactElementFactory"].Instance.createElement("sv-matrixdynamic-actions-cell", {
7610
+ cellContent = (_element_factory__WEBPACK_IMPORTED_MODULE_10__["ReactElementFactory"].Instance.createElement("sv-matrixdynamic-actions-cell", {
7578
7611
  question: this.question,
7579
7612
  cssClasses: cssClasses,
7580
7613
  cell: cell,
@@ -7609,7 +7642,7 @@ var SurveyQuestionMatrixActionsCell = /** @class */ (function (_super) {
7609
7642
  };
7610
7643
  return SurveyQuestionMatrixActionsCell;
7611
7644
  }(_reactquestion_element__WEBPACK_IMPORTED_MODULE_1__["ReactSurveyElement"]));
7612
- _element_factory__WEBPACK_IMPORTED_MODULE_9__["ReactElementFactory"].Instance.registerElement("sv-matrixdynamic-actions-cell", function (props) {
7645
+ _element_factory__WEBPACK_IMPORTED_MODULE_10__["ReactElementFactory"].Instance.registerElement("sv-matrixdynamic-actions-cell", function (props) {
7613
7646
  return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](SurveyQuestionMatrixActionsCell, props);
7614
7647
  });
7615
7648
  var SurveyQuestionMatrixHeaderRequired = /** @class */ (function (_super) {
@@ -7707,10 +7740,17 @@ var SurveyQuestionMatrixDropdownCell = /** @class */ (function (_super) {
7707
7740
  SurveyQuestionMatrixDropdownCell.prototype.renderQuestion = function () {
7708
7741
  if (!this.cell.isChoice)
7709
7742
  return _reactquestion__WEBPACK_IMPORTED_MODULE_2__["SurveyQuestion"].renderQuestionBody(this.creator, this.question);
7743
+ if (this.cell.isOtherChoice)
7744
+ return this.renderOtherComment();
7710
7745
  if (this.cell.isCheckbox)
7711
7746
  return this.renderCellCheckboxButton();
7712
7747
  return this.renderCellRadiogroupButton();
7713
7748
  };
7749
+ SurveyQuestionMatrixDropdownCell.prototype.renderOtherComment = function () {
7750
+ var question = this.cell.question;
7751
+ var cssClasses = question.cssClasses || {};
7752
+ return react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reactquestion_comment__WEBPACK_IMPORTED_MODULE_9__["SurveyQuestionCommentItem"], { question: question, cssClasses: cssClasses, otherCss: cssClasses.other, isDisplayMode: question.isInputReadOnly });
7753
+ };
7714
7754
  SurveyQuestionMatrixDropdownCell.prototype.renderCellCheckboxButton = function () {
7715
7755
  var key = this.cell.question.id + "item" + this.cell.choiceIndex;
7716
7756
  return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_reactquestion_checkbox__WEBPACK_IMPORTED_MODULE_3__["SurveyQuestionCheckboxItem"], { key: key, question: this.cell.question, cssClasses: this.cell.question.cssClasses, isDisplayMode: this.cell.question.isInputReadOnly, item: this.cell.item, isFirst: this.cell.isFirstChoice, index: this.cell.choiceIndex.toString(), hideCaption: true }));
@@ -9565,8 +9605,8 @@ var settings = {
9565
9605
  */
9566
9606
  useLocalTimeZone: true,
9567
9607
  /**
9568
- * The prefix that uses to store the question comment, as {questionName} + {commentPrefix}.
9569
- * The default
9608
+ * The prefix that uses to store the question comment, as "questionName + commentPrefix".
9609
+ * The default value is "-Comment"
9570
9610
  */
9571
9611
  commentPrefix: "-Comment",
9572
9612
  /**
@@ -9690,9 +9730,9 @@ var settings = {
9690
9730
  */
9691
9731
  minWidth: "300px",
9692
9732
  /**
9693
- * Set this property to change the default value of the minWidth constraint
9733
+ * Set this property to change the default value of the maxWidth constraint
9694
9734
  */
9695
- maxWidth: "initial",
9735
+ maxWidth: "100%",
9696
9736
  /**
9697
9737
  * This property tells how many times survey re-run expressions on value changes during condition running. We need it to avoid recursions in the expressions
9698
9738
  */
@@ -9990,7 +10030,7 @@ var VerticalResponsivityManager = /** @class */ (function (_super) {
9990
10030
  /*!****************************!*\
9991
10031
  !*** ./src/utils/utils.ts ***!
9992
10032
  \****************************/
9993
- /*! exports provided: unwrap, getSize, doKey2ClickBlur, doKey2ClickUp, doKey2ClickDown, sanitizeEditableContent, getElementWidth, isContainerVisible, classesToSelector, compareVersions, confirmAction, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isElementVisible, findScrollableParent, scrollElementByChildId, createSvg, getIconNameFromProxy, increaseHeightByContent, getOriginalEvent, preventDefaults, findParentByClassNames */
10033
+ /*! exports provided: unwrap, getSize, doKey2ClickBlur, doKey2ClickUp, doKey2ClickDown, sanitizeEditableContent, mergeValues, getElementWidth, isContainerVisible, classesToSelector, compareVersions, confirmAction, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isElementVisible, findScrollableParent, scrollElementByChildId, createSvg, getIconNameFromProxy, increaseHeightByContent, getOriginalEvent, preventDefaults, findParentByClassNames */
9994
10034
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
9995
10035
 
9996
10036
  "use strict";
@@ -10001,6 +10041,7 @@ __webpack_require__.r(__webpack_exports__);
10001
10041
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "doKey2ClickUp", function() { return doKey2ClickUp; });
10002
10042
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "doKey2ClickDown", function() { return doKey2ClickDown; });
10003
10043
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sanitizeEditableContent", function() { return sanitizeEditableContent; });
10044
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeValues", function() { return mergeValues; });
10004
10045
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElementWidth", function() { return getElementWidth; });
10005
10046
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isContainerVisible", function() { return isContainerVisible; });
10006
10047
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "classesToSelector", function() { return classesToSelector; });
@@ -10267,6 +10308,23 @@ function sanitizeEditableContent(element) {
10267
10308
  selection.addRange(range);
10268
10309
  }
10269
10310
  }
10311
+ function mergeValues(src, dest) {
10312
+ if (!dest || !src)
10313
+ return;
10314
+ if (typeof dest !== "object")
10315
+ return;
10316
+ for (var key in src) {
10317
+ var value = src[key];
10318
+ if (value && typeof value === "object") {
10319
+ if (!dest[key] || typeof dest[key] !== "object")
10320
+ dest[key] = {};
10321
+ mergeValues(value, dest[key]);
10322
+ }
10323
+ else {
10324
+ dest[key] = value;
10325
+ }
10326
+ }
10327
+ }
10270
10328
 
10271
10329
 
10272
10330
 
@@ -10307,4 +10365,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_core__;
10307
10365
 
10308
10366
  /******/ });
10309
10367
  });
10310
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvZW50cmllcy9jb3JlLWV4cG9ydC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9lbnRyaWVzL3JlYWN0LXVpLW1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL2VudHJpZXMvcmVhY3QtdWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1jaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1yYWRpby50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9icmFuZC1pbmZvLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC9yb3cudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wb3B1cC9wb3B1cC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9za2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL2xvZ28taW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jdXN0b20td2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1iYXNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1zZWxlY3QudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2VsZW1lbnQtZmFjdG9yeS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvZWxlbWVudC1oZWFkZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2Zsb3ctcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2ltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9pbWFnZXBpY2tlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwtYmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JhdGluZy1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3MudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NCdXR0b25zLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleVdpbmRvdy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9idXR0b25ncm91cC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9jaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9jb21tZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2N1c3RvbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VtcHR5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2V4cHJlc3Npb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmFjdG9yeS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9maWxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2h0bWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkeW5hbWljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX211bHRpcGxldGV4dC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9wYW5lbGR5bmFtaWMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9yYW5raW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhdGluZy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl90YWdib3gudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGV4dC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3R0aW1lcnBhbmVsLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yb3cudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3NpZ25hdHVyZXBhZC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvc3RyaW5nLWVkaXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvc3RyaW5nLXZpZXdlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvdGFnYm94LWl0ZW0udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3NldHRpbmdzLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3V0aWxzL3V0aWxzLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0L2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJjb21tb25qc1wiOlwicmVhY3RcIixcImFtZFwiOlwicmVhY3RcIn0iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC9leHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNvcmVcIixcImNvbW1vbmpzXCI6XCJzdXJ2ZXktY29yZVwiLFwiYW1kXCI6XCJzdXJ2ZXktY29yZVwifSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFr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Q0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7Ozs7QUN6TEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLG1CQUFPLENBQUMsaUVBQWM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDOURBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7Ozs7Ozs7Ozs7OztBQ25CQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBb0U7QUFDN0I7QUFDeUI7Ozs7Ozs7Ozs7Ozs7QUNGaEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUFRO0FBQ3VEO0FBQ1E7QUFDRztBQUNkO0FBQ2pCO0FBQ0Y7QUFDSTtBQUNTO0FBS3RCO0FBS1E7QUFJQTtBQUlDO0FBSUQ7QUFDMEI7QUFDRTtBQUNLO0FBQ1Q7QUFDSztBQUNHO0FBSWpDO0FBQzBCO0FBQ0E7QUFDZ0I7QUFDSjtBQUNaO0FBQ1I7QUFDaUI7QUFDTjtBQUNEO0FBQzBCO0FBQ1I7QUFDb0M7QUFDeEM7QUFDbkI7QUFDYztBQUNQO0FBQ0c7QUFDSztBQUNuQjtBQUNZO0FBQ1A7QUFDRTtBQUNaO0FBQ2M7QUFDWTtBQUNlO0FBRXRDO0FBQ0g7QUFDa0I7QUFDQTtBQUNLO0FBQ0g7QUFDTTtBQUNmO0FBQ3lEO0FBQ1A7QUFDUztBQUNQO0FBQ007QUFDSjtBQUNBO0FBQ087QUFDL0I7QUFFbkM7QUFDSDtBQUVPO0FBQ0E7QUFDakI7QUFDTjtBQUV4QyxnREFBZ0Q7QUFDaEQsbUZBQW1GOzs7Ozs7Ozs7Ozs7O0FDL0ZuRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBaUM7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDREM7QUFDZTtBQUNpQjtBQUNiO0FBRWxEO0lBQW1ELGlEQUFxQjtJQUN0RSx1Q0FBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDUyxxREFBYSxHQUF2QjtRQUNFLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FB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QU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUxQyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRWhFLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDM0I7QUFDSCxDQUFDO0FBcUJDOzs7Ozs7Ozs7Ozs7QUM5U0YsbUQ7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEseUQiLCJmaWxlIjoic3VydmV5LXJlYWN0LXVpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInN1cnZleS1yZWFjdC11aVwiLCBbXCJyZWFjdFwiLCBcInJlYWN0LWRvbVwiLCBcInN1cnZleS1jb3JlXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInN1cnZleS1yZWFjdC11aVwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleVJlYWN0XCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0sIHJvb3RbXCJSZWFjdERPTVwiXSwgcm9vdFtcIlN1cnZleVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2VudHJpZXMvcmVhY3QtdWkudHNcIik7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuIiwidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJleHBvcnQgeyBTdXJ2ZXlNb2RlbCwgTW9kZWwsIFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5leHBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuZXhwb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uLCBzdXJ2ZXlTdHJpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG4iLCIvLyByZWFjdFxuZXhwb3J0IHsgU3VydmV5LCBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlcIjtcbmV4cG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0c3VydmV5bW9kZWxcIjtcbmV4cG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmV4cG9ydCB7IFN1cnZleVRpbWVyUGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3R0aW1lcnBhbmVsXCI7XG5leHBvcnQgeyBTdXJ2ZXlQYWdlIH0gZnJvbSBcIi4uL3JlYWN0L3BhZ2VcIjtcbmV4cG9ydCB7IFN1cnZleVJvdyB9IGZyb20gXCIuLi9yZWFjdC9yb3dcIjtcbmV4cG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4uL3JlYWN0L3BhbmVsXCI7XG5leHBvcnQgeyBTdXJ2ZXlGbG93UGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvZmxvdy1wYW5lbFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb24sXG4gIFN1cnZleUVsZW1lbnRFcnJvcnMsXG4gIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25cIjtcbmV4cG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0sXG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudCxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveCxcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcsXG4gIFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhbmtpbmdcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uT3B0aW9uSXRlbSB9IGZyb20gXCIuLi9yZWFjdC9kcm9wZG93bi1pdGVtXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duQmFzZSB9IGZyb20gXCIuLi9yZWFjdC9kcm9wZG93bi1iYXNlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZHJvcGRvd25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uVGFnYm94SXRlbSB9IGZyb20gXCIuLi9yZWFjdC90YWdib3gtaXRlbVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25UYWdib3ggfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl90YWdib3hcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd25TZWxlY3QgfSBmcm9tIFwiLi4vcmVhY3QvZHJvcGRvd24tc2VsZWN0XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbk1hdHJpeCxcbiAgU3VydmV5UXVlc3Rpb25NYXRyaXhSb3csXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25IdG1sIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25faHRtbFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25GaWxlIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmlsZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tdWx0aXBsZXRleHRcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUmFkaW9ncm91cCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uVGV4dCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RleHRcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB9IGZyb20gXCIuLi9yZWFjdC9ib29sZWFuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCB9IGZyb20gXCIuLi9yZWFjdC9ib29sZWFuLWNoZWNrYm94XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5SYWRpbyB9IGZyb20gXCIuLi9yZWFjdC9ib29sZWFuLXJhZGlvXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVtcHR5IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZW1wdHlcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljQWRkQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHluYW1pY1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcbmV4cG9ydCB7IFN1cnZleVByb2dyZXNzIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NcIjtcbmV4cG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9ucyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzQnV0dG9uc1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25SYXRpbmcgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9yYXRpbmdcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUmF0aW5nRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmF0aW5nLWRyb3Bkb3duXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9leHByZXNzaW9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlXaW5kb3cgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlXaW5kb3dcIjtcbmV4cG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuZXhwb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi9yZWFjdC9lbGVtZW50LWZhY3RvcnlcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIgfSBmcm9tIFwiLi4vcmVhY3QvaW1hZ2VwaWNrZXJcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSW1hZ2UgfSBmcm9tIFwiLi4vcmVhY3QvaW1hZ2VcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkIH0gZnJvbSBcIi4uL3JlYWN0L3NpZ25hdHVyZXBhZFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2J1dHRvbmdyb3VwXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkN1c3RvbSwgU3VydmV5UXVlc3Rpb25Db21wb3NpdGUgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9jdXN0b21cIjtcblxuZXhwb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wb3B1cC9wb3B1cFwiO1xuZXhwb3J0IHsgTGlzdCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdFwiO1xuZXhwb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9uc1wiO1xuZXhwb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuZXhwb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5leHBvcnQgeyBMb2dvSW1hZ2UgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL2xvZ28taW1hZ2VcIjtcbmV4cG9ydCB7IFN1cnZleUhlYWRlciB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlclwiO1xuZXhwb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNSZW1vdmVCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIjtcbmV4cG9ydCB7IFN1cnZleU5hdmlnYXRpb25CdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvblwiO1xuXG5leHBvcnQgeyBNYXRyaXhSb3cgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgvcm93XCI7XG5leHBvcnQgeyBTa2VsZXRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3NrZWxldG9uXCI7XG5cbmV4cG9ydCB7IFN1cnZleUxvY1N0cmluZ1ZpZXdlciB9IGZyb20gXCIuLi9yZWFjdC9zdHJpbmctdmlld2VyXCI7XG5leHBvcnQgeyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgfSBmcm9tIFwiLi4vcmVhY3Qvc3RyaW5nLWVkaXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyXCI7XG5leHBvcnQgeyB1bndyYXAgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuLy9VbmNvbW1lbnQgdG8gaW5jbHVkZSB0aGUgXCJkYXRlXCIgcXVlc3Rpb24gdHlwZS5cbi8vZXhwb3J0IHtkZWZhdWx0IGFzIFN1cnZleVF1ZXN0aW9uRGF0ZX0gZnJvbSBcIi4uL3BsdWdpbnMvcmVhY3QvcmVhY3RxdWVzdGlvbmRhdGVcIjtcbiIsImV4cG9ydCAqIGZyb20gXCIuL3JlYWN0LXVpLW1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb3JlLWV4cG9ydFwiOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4vYm9vbGVhblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3ggZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNzcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17aXRlbUNsYXNzfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17dGhpcy5jaGVja1JlZn1cbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jb250cm9sQ2hlY2tib3h9XG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgfHwgZmFsc2V9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICB7IHRoaXMucXVlc3Rpb24uc3ZnSWNvbiA/XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLnN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICA8L3N2Zz46bnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2hlY2tcIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi50aXRsZUxvY2F0aW9uID09PSBcImhpZGRlblwiICYmIChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyhmYWxzZSl9PlxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NEaXNwbGF5TGFiZWwpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtYm9vbGVhbi1jaGVja2JveFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCwgcHJvcHMpO1xuICB9XG4pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwiY2hlY2tib3hcIixcbiAgXCJzdi1ib29sZWFuLWNoZWNrYm94XCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQm9vbGVhblJhZGlvIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Cb29sZWFuIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlclJhZGlvSXRlbSh2YWx1ZTogYW55LCBsb2NUZXh0OiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXsgdGhpcy5xdWVzdGlvbi5nZXRSYWRpb0l0ZW1DbGFzcyhjc3NDbGFzc2VzLCB2YWx1ZSkgfT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0geyBjc3NDbGFzc2VzLnJhZGlvTGFiZWwgfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBuYW1lID0geyB0aGlzLnF1ZXN0aW9uLm5hbWUgfVxuICAgICAgICAgICAgdmFsdWUgPSB7IHZhbHVlIH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnkgPSB7IHRoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5IH1cbiAgICAgICAgICAgIGNoZWNrZWQgPSB7IHZhbHVlID09PSB0aGlzLnF1ZXN0aW9uLnZhbHVlIH1cbiAgICAgICAgICAgIGRpc2FibGVkID0geyB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9XG4gICAgICAgICAgICBjbGFzc05hbWUgPSB7IGNzc0NsYXNzZXMuaXRlbUNvbnRyb2wgfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmhhbmRsZU9uQ2hhbmdlIH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsUmFkaW9EZWNvcmF0b3I/XG4gICAgICAgICAgICAoPHNwYW4gY2xhc3NOYW1lPXsgY3NzQ2xhc3Nlcy5tYXRlcmlhbFJhZGlvRGVjb3JhdG9yIH0+XG4gICAgICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgKDxzdmcgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1SYWRpb0RlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgPC9zdmc+KTpudWxsfVxuICAgICAgICAgICAgPC9zcGFuPik6bnVsbH1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9IHsgY3NzQ2xhc3Nlcy5yYWRpb0NvbnRyb2xMYWJlbCB9PlxuICAgICAgICAgICAgeyB0aGlzLnJlbmRlckxvY1N0cmluZyhsb2NUZXh0KSB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGV2ZW50Lm5hdGl2ZUV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdFJhZGlvfT5cbiAgICAgICAgPGZpZWxkc2V0IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9IHsgY3NzQ2xhc3Nlcy5yYWRpb0ZpZWxkc2V0IH0+XG4gICAgICAgICAgeyB0aGlzLnJlbmRlclJhZGlvSXRlbShmYWxzZSwgdGhpcy5xdWVzdGlvbi5sb2NMYWJlbEZhbHNlKSB9XG4gICAgICAgICAgeyB0aGlzLnJlbmRlclJhZGlvSXRlbSh0cnVlLCB0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSkgfVxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LWJvb2xlYW4tcmFkaW9cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuUmFkaW8sIHByb3BzKTtcbiAgfVxuKTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiYm9vbGVhblwiLFxuICBcInJhZGlvXCIsXG4gIFwic3YtYm9vbGVhbi1yYWRpb1wiXG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCwgQ3NzQ2xhc3NCdWlsZGVyLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBjaGVja1JlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrID0gdGhpcy5oYW5kbGVPbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2sgPSB0aGlzLmhhbmRsZU9uTGFiZWxDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25Td2l0Y2hDbGljayA9IHRoaXMuaGFuZGxlT25Td2l0Y2hDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25LZXlEb3duID0gdGhpcy5oYW5kbGVPbktleURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmNoZWNrUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQm9vbGVhbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25Cb29sZWFuTW9kZWw7XG4gIH1cbiAgLypcbiAgcHJpdmF0ZSBnZXQgYWxsb3dDbGljaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc0luZGV0ZXJtaW5hdGUgJiYgIXRoaXMuaXNEaXNwbGF5TW9kZTtcbiAgfVxuICAqL1xuICBwcml2YXRlIGRvQ2hlY2sodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRvQ2hlY2soZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1xuICB9XG4gIGhhbmRsZU9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25MYWJlbENsaWNrKGV2ZW50LCB0cnVlKTtcbiAgfVxuICBoYW5kbGVPblN3aXRjaENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uU3dpdGNoQ2xpY2tNb2RlbChldmVudC5uYXRpdmVFdmVudCk7XG4gIH1cbiAgaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50OiBhbnksIHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbkxhYmVsQ2xpY2soZXZlbnQsIHZhbHVlKTtcbiAgfVxuICBoYW5kbGVPbktleURvd24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25LZXlEb3duQ29yZShldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHRoaXMuY2hlY2tSZWYuY3VycmVudDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLmluZGV0ZXJtaW5hdGUgPSB0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sID0gZWw7XG4gICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGl0ZW1DbGFzczogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9IG9uS2V5RG93bj17dGhpcy5oYW5kbGVPbktleURvd259PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja30+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e3RoaXMuY2hlY2tSZWZ9XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgIDogdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbH1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSB8fCBmYWxzZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyhmYWxzZSl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50LCBmYWxzZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTGFiZWxGYWxzZSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnN3aXRjaH0gb25DbGljaz17dGhpcy5oYW5kbGVPblN3aXRjaENsaWNrfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zbGlkZXJ9PlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5pc0RldGVybWluYXRlZCAmJiBjc3NDbGFzc2VzLnNsaWRlclRleHQgP1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNsaWRlclRleHR9PnsgdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5nZXRDaGVja2VkTGFiZWwoKSkgfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRMYWJlbENzcyh0cnVlKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQsIHRydWUpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYm9vbGVhblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vcG9wdXAvcG9wdXBcIjtcclxuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFySXRlbSB9IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhckl0ZW1Ecm9wZG93biBleHRlbmRzIFN1cnZleUFjdGlvbkJhckl0ZW0ge1xyXG4gIHByaXZhdGUgdmlld01vZGVsOiBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbDtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnZpZXdNb2RlbCA9IG5ldyBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbCh0aGlzLml0ZW0pO1xyXG4gIH1cclxuICByZW5kZXJCdXR0b25Db250ZW50KCkge1xyXG4gICAgY29uc3QgYnV0dG9uQ29udGVudCA9IHN1cGVyLnJlbmRlckJ1dHRvbkNvbnRlbnQoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAge2J1dHRvbkNvbnRlbnR9XHJcbiAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLml0ZW0ucG9wdXBNb2RlbH0+PC9Qb3B1cD5cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XHJcbiAgICB0aGlzLnZpZXdNb2RlbC5kaXNwb3NlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJJdGVtRHJvcGRvd24sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgQmFzZSwgQWN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vLi4vcmVhY3RTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IgfSBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvclwiO1xyXG5cclxuaW50ZXJmYWNlIElBY3Rpb25CYXJJdGVtUHJvcHMge1xyXG4gIGl0ZW06IEFjdGlvbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElBY3Rpb25CYXJJdGVtUHJvcHMsIGFueT4ge1xyXG4gIGdldCBpdGVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG5cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgLy9yZWZhY3RvclxyXG4gICAgY29uc3QgaXRlbUNsYXNzID0gdGhpcy5pdGVtLmdldEFjdGlvblJvb3RDc3MoKTtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuaXRlbS5uZWVkU2VwYXJhdG9yID8gKFxyXG4gICAgICA8U3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yPjwvU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yPlxyXG4gICAgKSA6IG51bGw7XHJcblxyXG4gICAgY29uc3QgaXRlbUNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcclxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2LWFjdGlvbi1iYXItaXRlbVwiLFxyXG4gICAgICB7XHJcbiAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2l0ZW1DbGFzc30gaWQ9e3RoaXMuaXRlbS5pZH0+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cclxuICAgICAgICAgIHtzZXBhcmF0b3J9XHJcbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhckl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcclxuICBJQWN0aW9uQmFySXRlbVByb3BzLFxyXG4gIGFueVxyXG4+IHtcclxuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG5cclxuICByZW5kZXJFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIDw+e3RoaXMucmVuZGVySW5uZXJCdXR0b24oKX08Lz47XHJcbiAgfVxyXG5cclxuICByZW5kZXJUZXh0KCkge1xyXG4gICAgaWYgKCF0aGlzLml0ZW0uaGFzVGl0bGUpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdGl0bGVDbGFzcyA9IHRoaXMuaXRlbS5nZXRBY3Rpb25CYXJJdGVtVGl0bGVDc3MoKTtcclxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e3RpdGxlQ2xhc3N9Pnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPjtcclxuICB9XHJcblxyXG4gIHJlbmRlckJ1dHRvbkNvbnRlbnQoKSB7XHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJUZXh0KCk7XHJcbiAgICBjb25zdCBzdmdJY29uID0gISF0aGlzLml0ZW0uaWNvbk5hbWUgPyAoXHJcbiAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW0uY3NzQ2xhc3Nlcy5pdGVtSWNvbn1cclxuICAgICAgICBzaXplPXt0aGlzLml0ZW0uaWNvblNpemV9XHJcbiAgICAgICAgaWNvbk5hbWU9e3RoaXMuaXRlbS5pY29uTmFtZX1cclxuICAgICAgICB0aXRsZT17dGhpcy5pdGVtLnRvb2x0aXAgfHwgdGhpcy5pdGVtLnRpdGxlfVxyXG4gICAgICA+PC9TdmdJY29uPlxyXG4gICAgKSA6IG51bGw7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIHtzdmdJY29ufVxyXG4gICAgICAgIHt0ZXh0fVxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJJbm5lckJ1dHRvbigpIHtcclxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuaXRlbS5nZXRBY3Rpb25CYXJJdGVtQ3NzKCk7XHJcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuaXRlbS50b29sdGlwIHx8IHRoaXMuaXRlbS50aXRsZTtcclxuICAgIGNvbnN0IGJ1dHRvbkNvbnRlbnQgPSB0aGlzLnJlbmRlckJ1dHRvbkNvbnRlbnQoKTtcclxuICAgIGNvbnN0IHRhYkluZGV4ID0gdGhpcy5pdGVtLmRpc2FibGVUYWJTdG9wID8gLTEgOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBidXR0b24gPSBhdHRhY2hLZXkyY2xpY2soXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pdGVtLmRpc2FibGVkfVxyXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaXRlbS5hY3Rpb24odGhpcy5pdGVtKX1cclxuICAgICAgICB0aXRsZT17dGl0bGV9XHJcbiAgICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxyXG4gICAgICA+XHJcbiAgICAgICAge2J1dHRvbkNvbnRlbnR9XHJcbiAgICAgIDwvYnV0dG9uPiwgbnVsbCwgeyBwcm9jZXNzRXNjOiBmYWxzZSB9KTtcclxuXHJcbiAgICByZXR1cm4gYnV0dG9uO1xyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1hY3Rpb24tYmFyLWl0ZW1cIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5QWN0aW9uQmFySXRlbSwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhclNlcGFyYXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gYHN2LWFjdGlvbi1iYXItc2VwYXJhdG9yICR7dGhpcy5wcm9wcy5jc3NDbGFzc2VzfWA7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PjwvZGl2PjtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtYWN0aW9uLWJhci1zZXBhcmF0b3JcIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBCYXNlLFxuICBBY3Rpb24sXG4gIEFjdGlvbkNvbnRhaW5lclxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4uLy4uLy4uL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW1cIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvclwiO1xuXG5pbnRlcmZhY2UgSUFjdGlvbkJhclByb3BzIHtcbiAgbW9kZWw6IEFjdGlvbkNvbnRhaW5lcjxBY3Rpb24+O1xuICBoYW5kbGVDbGljaz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJQWN0aW9uQmFyUHJvcHMsIGFueT4ge1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElBY3Rpb25CYXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhbmRsZUNsaWNrKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhhbmRsZUNsaWNrICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzLmhhbmRsZUNsaWNrIDogdHJ1ZTtcbiAgfVxuXG4gIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmhhc0FjdGlvbnMpIHJldHVybjtcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgdGhpcy5tb2RlbC5pbml0UmVzcG9uc2l2aXR5TWFuYWdlcihjb250YWluZXIpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSB7XG4gICAgICB0aGlzLm1vZGVsLnJlc2V0UmVzcG9uc2l2aXR5TWFuYWdlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuZ2V0Um9vdENzcygpfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrID8gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSA6IHVuZGVmaW5lZH1cbiAgICAgID5cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucy5tYXAoXG4gICAgICAoaXRlbTogQWN0aW9uLCBpdGVtSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxTdXJ2ZXlBY3Rpb24gaXRlbT17aXRlbX0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0+PC9TdXJ2ZXlBY3Rpb24+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgIFN1cnZleUFjdGlvbkJhcixcbiAgICAocHJvcHMgYXMgYW55KSBhcyBJQWN0aW9uQmFyUHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgY2xhc3MgQnJhbmRJbmZvIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1icmFuZC1pbmZvXCI+XG4gICAgICAgIDxhIGNsYXNzTmFtZT1cInN2LWJyYW5kLWluZm9fX2xvZ29cIiBocmVmPVwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby8/dXRtX3NvdXJjZT1idWlsdC1pbl9saW5rcyZ1dG1fbWVkaXVtPW9ubGluZV9zdXJ2ZXlfdG9vbCZ1dG1fY2FtcGFpZ249bGFuZGluZ19wYWdlXCI+PGltZyBzcmM9XCJodHRwczovL3N1cnZleWpzLmlvL0NvbnRlbnQvSW1hZ2VzL3Bvd2VyZWRieS5zdmdcIi8+PC9hPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWJyYW5kLWluZm9fX3RleHRcIj5UcnkgYW5kIHNlZSBob3cgZWFzeSBpdCBpcyB0byA8YSBocmVmPVwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9jcmVhdGUtc3VydmV5P3V0bV9zb3VyY2U9YnVpbHQtaW5fbGlua3MmdXRtX21lZGl1bT1vbmxpbmVfc3VydmV5X3Rvb2wmdXRtX2NhbXBhaWduPWNyZWF0ZV9zdXJ2ZXlcIj5jcmVhdGUgYSBzdXJ2ZXk8L2E+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYnJhbmQtaW5mb19fdGVybXNcIj48YSBocmVmPVwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9UZXJtc09mVXNlXCI+VGVybXMgb2YgVXNlICYgUHJpdmFjeSBTdGF0ZW1lbnQ8L2E+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IExpc3RNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcclxuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcIi4uLy4uL3JlYWN0U3VydmV5XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuXHJcbmludGVyZmFjZSBJTGlzdEl0ZW1Qcm9wcyB7XHJcbiAgbW9kZWw6IExpc3RNb2RlbDtcclxuICBpdGVtOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMaXN0SXRlbVByb3BzLCBhbnk+IHtcclxuICBnZXQgbW9kZWwoKTogTGlzdE1vZGVsIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xyXG4gIH1cclxuICBnZXQgaXRlbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLm1vZGVsLm9uS2V5RG93bihldmVudCk7XHJcbiAgfTtcclxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xyXG4gIH1cclxuICByZW5kZXIoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXRlbSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IHRoaXMubW9kZWwuaXNJdGVtVmlzaWJsZSh0aGlzLml0ZW0pO1xyXG4gICAgY29uc3Qgc3R5bGUgPSB7XHJcbiAgICAgIHBhZGRpbmdMZWZ0OiB0aGlzLm1vZGVsLmdldEl0ZW1JbmRlbnQodGhpcy5pdGVtKSxcclxuICAgICAgZGlzcGxheTogaXNWaXNpYmxlID8gbnVsbCA6IFwibm9uZVwiLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMubW9kZWwuZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XHJcbiAgICBjb25zdCBjb250ZW50ID0gW107XHJcbiAgICBpZiAoIXRoaXMuaXRlbS5jb21wb25lbnQpIHtcclxuICAgICAgY29uc3QgaWNvbiA9IHRoaXMuaXRlbS5pY29uTmFtZSA/IChcclxuICAgICAgICA8U3ZnSWNvblxyXG4gICAgICAgICAga2V5PXsxfVxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3YtbGlzdF9faXRlbS1pY29uXCJcclxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9XHJcbiAgICAgICAgICBzaXplPXsyNH1cclxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMuaXRlbS50aXRsZX1cclxuICAgICAgICA+PC9TdmdJY29uPlxyXG4gICAgICApIDogbnVsbDtcclxuICAgICAgY29udGVudC5wdXNoKGljb24pO1xyXG4gICAgICBjb250ZW50LnB1c2goPHNwYW4ga2V5PXsyfT57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGVudC5wdXNoKFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0aGlzLml0ZW0uY29tcG9uZW50LCB7IGl0ZW06IHRoaXMuaXRlbSwga2V5OiB0aGlzLml0ZW0uaWQgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXHJcbiAgICAgIDxsaVxyXG4gICAgICAgIHN0eWxlPXtzdHlsZX1cclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cclxuICAgICAgICByb2xlPVwib3B0aW9uXCJcclxuICAgICAgICBhcmlhLXNlbGVjdGVkPXt0aGlzLm1vZGVsLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSl9XHJcbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kZWwub25JdGVtQ2xpY2sodGhpcy5pdGVtKTtcclxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH19XHJcbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCwgdGhpcy5pdGVtKX1cclxuICAgICAgPlxyXG4gICAgICAgIHtjb250ZW50fVxyXG4gICAgICA8L2xpPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3QtaXRlbVwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMaXN0SXRlbSwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBMaXN0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiLi9saXN0LWl0ZW1cIjtcclxuXHJcbmludGVyZmFjZSBJTGlzdFByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMaXN0UHJvcHMsIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGZpbHRlcmVkVGV4dDogdGhpcy5tb2RlbC5maWx0ZXJlZFRleHQgfHwgXCJcIlxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0IG1vZGVsKCk6IExpc3RNb2RlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcclxuICB9XHJcbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLm1vZGVsLm9uS2V5RG93bihldmVudCk7XHJcbiAgfTtcclxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcclxuICB9XHJcbiAgcmVuZGVyRWxlbWVudCgpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1saXN0X19jb250YWluZXJcIj5cclxuICAgICAgICB7dGhpcy5zZWFyY2hFbGVtZW50Q29udGVudCgpfVxyXG4gICAgICAgIDx1bFxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3YtbGlzdFwiXHJcbiAgICAgICAgICByb2xlPVwibGlzdGJveFwiXHJcbiAgICAgICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtpdGVtc31cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlbmRlckl0ZW1zKCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucztcclxuICAgIGlmICghaXRlbXMpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBJQWN0aW9uLCBpdGVtSW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxMaXN0SXRlbSBtb2RlbD17dGhpcy5tb2RlbH0gaXRlbT17aXRlbX0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0+PC9MaXN0SXRlbT5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoRWxlbWVudENvbnRlbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwubmVlZEZpbHRlcikgcmV0dXJuIG51bGw7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLmZpbHRlcmVkVGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgb25LZXlVcCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGVsLmdvVG9JdGVtcyhlKTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWxpc3RfX2ZpbHRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3YtbGlzdF9fZmlsdGVyLWljb25cIn0+XHJcbiAgICAgICAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1zZWFyY2hcIn1cclxuICAgICAgICAgICAgICBzaXplPXtcImF1dG9cIn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L1N2Z0ljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2LWxpc3RfX2lucHV0XCJcclxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5maWx0ZXJlZFRleHRQbGFjZWhvbGRlcn1cclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMubW9kZWwuZmlsdGVyZWRUZXh0UGxhY2Vob2xkZXJ9XHJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmZpbHRlcmVkVGV4dH1cclxuICAgICAgICAgICAgb25LZXlVcD17b25LZXlVcH1cclxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxyXG4gICAgICAgICAgPjwvaW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3RcIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdCwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGljayA9IHRoaXMuaGFuZGxlT25TaG93SGlkZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucm93O1xuICB9XG4gIGhhbmRsZU9uU2hvd0hpZGVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5yb3cuc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0V4cGFuZGVkID0gdGhpcy5yb3cuaXNEZXRhaWxQYW5lbFNob3dpbmc7XG4gICAgdmFyIGFyaWFFeHBhbmRlZCA9IGlzRXhwYW5kZWQ7XG4gICAgdmFyIGFyaWFDb250cm9scyA9IGlzRXhwYW5kZWQgPyB0aGlzLnJvdy5kZXRhaWxQYW5lbElkIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPblNob3dIaWRlQ2xpY2t9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEJ1dHRvbkNzcyh0aGlzLnJvdyl9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2FyaWFFeHBhbmRlZH1cbiAgICAgICAgYXJpYS1jb250cm9scz17YXJpYUNvbnRyb2xzfVxuICAgICAgPlxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEljb25Dc3ModGhpcy5yb3cpfVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsSWNvbklkKHRoaXMucm93KX1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZih0aGlzLnF1ZXN0aW9uLmljb25EcmFnRWxlbWVudCkge1xuICAgICAgcmV0dXJuICg8c3ZnIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRyYWdFbGVtZW50RGVjb3JhdG9yfSA+XG4gICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLmljb25EcmFnRWxlbWVudH0+PC91c2U+XG4gICAgICA8L3N2Zz4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25EcmFnfSAvPik7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kcmFnLWRyb3AtaWNvblwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGljayA9IHRoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCByb3coKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5yb3c7XG4gIH1cbiAgaGFuZGxlT25Sb3dSZW1vdmVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVSb3dVSSh0aGlzLnJvdyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciByZW1vdmVSb3dUZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NSZW1vdmVSb3dUZXh0KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UmVtb3ZlUm93QnV0dG9uQ3NzKCl9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgID5cbiAgICAgICAge3JlbW92ZVJvd1RleHR9XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmV9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1yZW1vdmUtYnV0dG9uXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdywgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSU1hdHJpeFJvd1Byb3BzIHtcbiAgbW9kZWw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdztcbiAgcGFyZW50TWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SU1hdHJpeFJvd1Byb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElNYXRyaXhSb3dQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBnZXQgbW9kZWwoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBnZXQgcGFyZW50TWF0cml4KCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhcmVudE1hdHJpeDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBvblBvaW50ZXJEb3duSGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5wYXJlbnRNYXRyaXgub25Qb2ludGVyRG93bihldmVudC5uYXRpdmVFdmVudCwgdGhpcy5tb2RlbC5yb3cpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICByZXR1cm4gKFxuICAgICAgPHRyXG4gICAgICAgIGNsYXNzTmFtZT17bW9kZWwuY2xhc3NOYW1lfVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LW1hdHJpeC1yb3c9e21vZGVsLnJvdyAmJiBtb2RlbC5yb3cuaWR9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm9uUG9pbnRlckRvd25IYW5kbGVyKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LXJvd1wiLFxuICAocHJvcHM6IElNYXRyaXhSb3dQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE1hdHJpeFJvdywgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pY1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLml0ZW0gJiYgdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb24pIHx8IHRoaXMucHJvcHMuZGF0YS5xdWVzdGlvbjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCBoYW5kbGVDbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi5hZGRQYW5lbFVJKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5jYW5BZGRQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRBZGRCdXR0b25Dc3MoKX0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGRUZXh0fT57dGhpcy5xdWVzdGlvbi5wYW5lbEFkZFRleHR9PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtYWRkLWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLmdvVG9OZXh0UGFuZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgdGl0bGU9e3RoaXMucXVlc3Rpb24ucGFuZWxOZXh0VGV4dH0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldE5leHRCdXR0b25Dc3MoKX0+XG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0J0bkljb259XG4gICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XG4gICAgICAgID5cbiAgICAgICAgPC9TdmdJY29uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtbmV4dC1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub1ByZXZQYW5lbCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiB0aXRsZT17dGhpcy5xdWVzdGlvbi5wYW5lbFByZXZUZXh0fSBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UHJldkJ1dHRvbkNzcygpfT5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQnRuSWNvbn1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1wcmV2LWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB9IGZyb20gXCIuL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc1RleHR9PlxuICAgICAge3RoaXMucXVlc3Rpb24ucHJvZ3Jlc3NUZXh0fVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQsIHByb3BzKTtcbiAgfVxuKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fcGFuZWxkeW5hbWljXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB9IGZyb20gXCIuL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbW92ZVBhbmVsVUkodGhpcy5wcm9wcy5kYXRhLmluZGV4KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFBhbmVsUmVtb3ZlQnV0dG9uQ3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25SZW1vdmVUZXh0fVxuICAgICAgICA+e3RoaXMucXVlc3Rpb24ucGFuZWxSZW1vdmVUZXh0fTwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uUmVtb3ZlfVxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFBvcHVwTW9kZWwsIFBvcHVwQmFzZVZpZXdNb2RlbCwgSURpYWxvZ09wdGlvbnMsIGNyZWF0ZURpYWxvZ09wdGlvbnMsIGNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWwsIENzc0NsYXNzQnVpbGRlciwgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElQb3B1cFByb3BzIHtcbiAgbW9kZWw6IFBvcHVwTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBQb3B1cCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElQb3B1cFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBwb3B1cDogUG9wdXBCYXNlVmlld01vZGVsO1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElQb3B1cFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5jcmVhdGVNb2RlbCgpO1xuICB9XG4gIGdldCBtb2RlbCgpOiBQb3B1cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5wb3B1cCA9IG5ldyBQb3B1cEJhc2VWaWV3TW9kZWwodGhpcy5wcm9wcy5tb2RlbCk7XG4gICAgdGhpcy5wb3B1cC5pbml0aWFsaXplUG9wdXBDb250YWluZXIoKTtcbiAgfVxuICBwcml2YXRlIHNldFRhcmdldEVsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYoISF0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICB0aGlzLnBvcHVwLnRhcmdldEVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5wb3B1cC5pbml0aWFsaXplUG9wdXBDb250YWluZXIoKTtcbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnBvcHVwLnVubW91bnRQb3B1cENvbnRhaW5lcigpO1xuICB9XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IElQb3B1cFByb3BzLCBuZXh0U3RhdGU6IGFueSkge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGlzTmVlZFVwZGF0ZSA9IG5leHRQcm9wcy5tb2RlbCAhPT0gdGhpcy5wb3B1cC5tb2RlbDtcbiAgICBpZihpc05lZWRVcGRhdGUpIHtcbiAgICAgIHRoaXMucG9wdXA/LmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuY3JlYXRlTW9kZWwoKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzTmVlZFVwZGF0ZTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5wb3B1cC5tb2RlbCA9IHRoaXMubW9kZWw7XG4gICAgY29uc3QgcG9wdXBDb250YWluZXIgPSBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICA8UG9wdXBDb250YWluZXIgbW9kZWw9e3RoaXMucG9wdXB9PjwvUG9wdXBDb250YWluZXI+LFxuICAgICAgdGhpcy5wb3B1cC5jb250YWluZXJcbiAgICApO1xuICAgIHJldHVybiA8ZGl2IHJlZj17dGhpcy5jb250YWluZXJSZWZ9Pntwb3B1cENvbnRhaW5lcn08L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcG9wdXBcIixcbiAgKHByb3BzOiBJUG9wdXBQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFBvcHVwLCBwcm9wcyk7XG4gIH1cbik7XG5cbmV4cG9ydCBjbGFzcyBQb3B1cENvbnRhaW5lciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHB1YmxpYyBwcmV2SXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5tb2RlbC5vbktleURvd24oZXZlbnQpO1xuICB9O1xuICBnZXQgbW9kZWwoKTogUG9wdXBCYXNlVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNsaWNrSW5zaWRlID0gKGV2OiBhbnkpID0+IHtcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfTtcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKCF0aGlzLnByZXZJc1Zpc2libGUgJiYgdGhpcy5tb2RlbC5pc1Zpc2libGUpIHtcbiAgICAgIHRoaXMubW9kZWwudXBkYXRlT25TaG93aW5nKCk7XG4gICAgfVxuICAgIHRoaXMucHJldklzVmlzaWJsZSA9IHRoaXMubW9kZWwuaXNWaXNpYmxlO1xuICB9XG4gIHJlbmRlckNvbnRhaW5lcigpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5tb2RlbC5zaG93UG9pbnRlciA/IHRoaXMucmVuZGVyUG9pbnRlcigpIDogbnVsbDtcbiAgICBjb25zdCBoZWFkZXIgPSAhIXRoaXMubW9kZWwudGl0bGUgPyB0aGlzLnJlbmRlckhlYWRlcigpIDogbnVsbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KCk7XG4gICAgY29uc3QgZm9vdGVyID0gdGhpcy5tb2RlbC5zaG93Rm9vdGVyID8gdGhpcy5yZW5kZXJGb290ZXIoKSA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2NvbnRhaW5lclwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgbGVmdDogdGhpcy5tb2RlbC5sZWZ0LFxuICAgICAgICAgIHRvcDogdGhpcy5tb2RlbC50b3AsXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGVsLmhlaWdodCxcbiAgICAgICAgICB3aWR0aDogdGhpcy5tb2RlbC53aWR0aCxcbiAgICAgICAgICBtaW5XaWR0aDogdGhpcy5tb2RlbC5taW5XaWR0aCxcbiAgICAgICAgfX1cbiAgICAgICAgb25DbGljaz17KGV2OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmNsaWNrSW5zaWRlKGV2KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fc2hhZG93XCI+XG4gICAgICAgICAge3BvaW50ZXJ9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fYm9keS1jb250ZW50XCI+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtmb290ZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJQb2ludGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGxlZnQ6IHRoaXMubW9kZWwucG9pbnRlclRhcmdldC5sZWZ0LFxuICAgICAgICAgIHRvcDogdGhpcy5tb2RlbC5wb2ludGVyVGFyZ2V0LnRvcCxcbiAgICAgICAgfX1cbiAgICAgICAgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3BvaW50ZXJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICApO1xuICB9XG4gIHJlbmRlckhlYWRlcigpIHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fYm9keS1oZWFkZXJcIj57dGhpcy5tb2RlbC50aXRsZX08L2Rpdj47XG4gIH1cbiAgcmVuZGVyQ29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50Q29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5tb2RlbC5jb250ZW50Q29tcG9uZW50TmFtZSxcbiAgICAgIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudERhdGFcbiAgICApO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX19jb250ZW50XCI+e2NvbnRlbnRDb21wb25lbnR9PC9kaXY+O1xuICB9XG4gIHJlbmRlckNhbmNlbEJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktZm9vdGVyLWl0ZW0gc3YtcG9wdXBfX2J1dHRvbiBzdi1wb3B1cF9fYnV0dG9uLS1jYW5jZWxcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jYW5jZWwoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMubW9kZWwuY2FuY2VsQnV0dG9uVGV4dH1cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyQXBwbHlCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19ib2R5LWZvb3Rlci1pdGVtIHN2LXBvcHVwX19idXR0b24gc3YtcG9wdXBfX2J1dHRvbi0tYXBwbHlcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5hcHBseSgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5tb2RlbC5hcHBseUJ1dHRvblRleHR9XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG4gIHJlbmRlckZvb3RlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fYm9keS1mb290ZXJcIj5cbiAgICAgICAge3RoaXMucmVuZGVyQ2FuY2VsQnV0dG9uKCl9XG4gICAgICAgIHt0aGlzLm1vZGVsLmlzTW9kYWwgPyB0aGlzLnJlbmRlckFwcGx5QnV0dG9uKCkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yZW5kZXJDb250YWluZXIoKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBuZXcgQ3NzQ2xhc3NCdWlsZGVyKCkuYXBwZW5kKFwic3YtcG9wdXBcIikuYXBwZW5kKHRoaXMubW9kZWwuc3R5bGVDbGFzcykudG9TdHJpbmcoKTtcbiAgICBjb25zdCBzdHlsZSA9IHsgZGlzcGxheTogdGhpcy5tb2RlbC5pc1Zpc2libGUgPyBcIlwiIDogXCJub25lXCIsIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXsoZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGlja091dHNpZGUoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5ZG93bn1cbiAgICAgID5cbiAgICAgICAge2NvbnRhaW5lcn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuLy8gcmVwbGFjZSB0byBzaG93RGlhbG9nIHRoZW4gZGVsZXRlXG5leHBvcnQgZnVuY3Rpb24gc2hvd01vZGFsKFxuICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gIGRhdGE6IGFueSxcbiAgb25BcHBseTogKCkgPT4gYm9vbGVhbixcbiAgb25DYW5jZWw/OiAoKSA9PiB2b2lkLFxuICBjc3NDbGFzcz86IHN0cmluZyxcbiAgdGl0bGU/OiBzdHJpbmcsXG4gIGRpc3BsYXlNb2RlOiBcInBvcHVwXCIgfCBcIm92ZXJsYXlcIiA9IFwicG9wdXBcIlxuKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjcmVhdGVEaWFsb2dPcHRpb25zKFxuICAgIGNvbXBvbmVudE5hbWUsXG4gICAgZGF0YSxcbiAgICBvbkFwcGx5LFxuICAgIG9uQ2FuY2VsLFxuICAgIHVuZGVmaW5lZCxcbiAgICB1bmRlZmluZWQsXG4gICAgY3NzQ2xhc3MsXG4gICAgdGl0bGUsXG4gICAgZGlzcGxheU1vZGVcbiAgKTtcbiAgc2hvd0RpYWxvZyhvcHRpb25zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaG93RGlhbG9nKGRpYWxvZ09wdGlvbnM6IElEaWFsb2dPcHRpb25zKSB7XG4gIGRpYWxvZ09wdGlvbnMub25IaWRlID0gKCkgPT4geyB7XG4gICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuICAgIHBvcHVwVmlld01vZGVsLnVubW91bnRQb3B1cENvbnRhaW5lcigpO1xuICB9IH07XG4gIGNvbnN0IHBvcHVwVmlld01vZGVsOiBQb3B1cEJhc2VWaWV3TW9kZWwgPSBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsKGRpYWxvZ09wdGlvbnMpO1xuICBSZWFjdERPTS5yZW5kZXIoPFBvcHVwQ29udGFpbmVyIG1vZGVsPXtwb3B1cFZpZXdNb2RlbH0gLz4sIHBvcHVwVmlld01vZGVsLmNvbnRhaW5lcik7XG5cbiAgcG9wdXBWaWV3TW9kZWwubW9kZWwuaXNWaXNpYmxlID0gdHJ1ZTtcbn1cblxuc2V0dGluZ3Muc2hvd01vZGFsID0gc2hvd01vZGFsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFNrZWxldG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1za2VsZXRvbi1lbGVtZW50XCI+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3Ytc2tlbGV0b25cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2tlbGV0b24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2FjdGlvbnMvYWN0aW9uXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbkJ1dHRvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmlzVmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuaXRlbS5pbm5lckNzc31cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uTW91c2VEb3duPXt0aGlzLml0ZW0uZGF0YSAmJiB0aGlzLml0ZW0uZGF0YS5tb3VzZURvd259XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaXRlbS5hY3Rpb259XG4gICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udGl0bGV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbmF2LWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmludGVyZmFjZSBJTG9nb0ltYWdlUHJvcHMge1xuICBkYXRhOiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ29JbWFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJTG9nb0ltYWdlUHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUxvZ29JbWFnZVByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNvbnRlbnQ6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICBjb250ZW50LnB1c2goXG4gICAgICA8ZGl2IGtleT17XCJsb2dvLWltYWdlXCJ9IGNsYXNzTmFtZT17dGhpcy5zdXJ2ZXkubG9nb0NsYXNzTmFtZXN9PlxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnN1cnZleS5jc3MubG9nb0ltYWdlfVxuICAgICAgICAgIHNyYz17dGhpcy5zdXJ2ZXkubG9jTG9nby5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgYWx0PXt0aGlzLnN1cnZleS5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgd2lkdGg9e3RoaXMuc3VydmV5LmxvZ29XaWR0aCA/IHRoaXMuc3VydmV5LmxvZ29XaWR0aCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBoZWlnaHQ9e3RoaXMuc3VydmV5LmxvZ29IZWlnaHQgPyB0aGlzLnN1cnZleS5sb2dvSGVpZ2h0IDogdW5kZWZpbmVkfVxuICAgICAgICAgIHN0eWxlPXt7IG9iamVjdEZpdDogdGhpcy5zdXJ2ZXkubG9nb0ZpdCBhcyBhbnkgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gICAgcmV0dXJuIDw+e2NvbnRlbnR9PC8+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtbG9nby1pbWFnZVwiLCAocHJvcHM6IElMb2dvSW1hZ2VQcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2dvSW1hZ2UsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuLi90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5cbmludGVyZmFjZSBJU3VydmV5SGVhZGVyUHJvcHMge1xuICBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5SGVhZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElTdXJ2ZXlIZWFkZXJQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5SGVhZGVyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LmNzcztcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHNlbGY6IFN1cnZleUhlYWRlciA9IHRoaXM7XG4gICAgdGhpcy5zdXJ2ZXkubG9jTG9nby5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuc3VydmV5LmxvY0xvZ28ub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkgeyB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnN1cnZleS5yZW5kZXJlZEhhc1RpdGxlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMuc3VydmV5LmxvY0Rlc2NyaXB0aW9uXG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlclRleHR9XG4gICAgICAgIHN0eWxlPXt7IG1heFdpZHRoOiB0aGlzLnN1cnZleS50aXRsZU1heFdpZHRoIH19XG4gICAgICA+XG4gICAgICAgIDxUaXRsZUVsZW1lbnQgZWxlbWVudD17dGhpcy5zdXJ2ZXl9PjwvVGl0bGVFbGVtZW50PlxuICAgICAgICB7IHRoaXMuc3VydmV5LnJlbmRlcmVkSGFzRGVzY3JpcHRpb24gPyA8aDUgY2xhc3NOYW1lPXt0aGlzLmNzcy5kZXNjcmlwdGlvbn0+e2Rlc2NyaXB0aW9ufTwvaDU+IDogbnVsbCB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJMb2dvSW1hZ2UoaXNSZW5kZXI6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFpc1JlbmRlcikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZTogc3RyaW5nID0gdGhpcy5zdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKFxuICAgICAgdGhpcy5zdXJ2ZXksXG4gICAgICBcImxvZ28taW1hZ2VcIlxuICAgICk7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YTogYW55ID0gdGhpcy5zdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgICAgdGhpcy5zdXJ2ZXksXG4gICAgICBcImxvZ28taW1hZ2VcIlxuICAgICk7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBkYXRhOiBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkucmVuZGVyZWRIYXNIZWFkZXIpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyfT5cbiAgICAgICAge3RoaXMucmVuZGVyTG9nb0ltYWdlKHRoaXMuc3VydmV5LmlzTG9nb0JlZm9yZSl9XG4gICAgICAgIHt0aGlzLnJlbmRlclRpdGxlKCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckxvZ29JbWFnZSh0aGlzLnN1cnZleS5pc0xvZ29BZnRlcil9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5oZWFkZXJDbG9zZX0+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN1cnZleS1oZWFkZXJcIixcbiAgKHByb3BzOiBJU3VydmV5SGVhZGVyUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlIZWFkZXIsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBjcmVhdGVTdmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN2Z0ljb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBzdmdJY29uUmVmOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdmdJY29uUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICB1cGRhdGVTdmcoKSB7XG4gICAgaWYodGhpcy5wcm9wcy5pY29uTmFtZSlcbiAgICAgIGNyZWF0ZVN2ZyhcbiAgICAgICAgdGhpcy5wcm9wcy5zaXplLFxuICAgICAgICB0aGlzLnByb3BzLndpZHRoLFxuICAgICAgICB0aGlzLnByb3BzLmhlaWdodCxcbiAgICAgICAgdGhpcy5wcm9wcy5pY29uTmFtZSxcbiAgICAgICAgdGhpcy5zdmdJY29uUmVmLmN1cnJlbnRcbiAgICAgICk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIHRoaXMudXBkYXRlU3ZnKCk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGxldCBjbGFzc05hbWUgPSBcInN2LXN2Zy1pY29uXCI7XG4gICAgaWYodGhpcy5wcm9wcy5jbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wcy5pY29uTmFtZSA/XG4gICAgICAgIDxzdmcgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfSByZWY9e3RoaXMuc3ZnSWNvblJlZn0gcm9sZT1cImltZ1wiIGFyaWEtbGFiZWw9e3RoaXMucHJvcHMudGl0bGV9Pjx1c2U+PC91c2U+PC9zdmc+XG4gICAgICAgIDogbnVsbFxuICAgICk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGVTdmcoKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXN2Zy1pY29uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdmdJY29uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnQsIFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuL3RpdGxlLWNvbnRlbnRcIjtcblxuZXhwb3J0IGNsYXNzIFRpdGxlQWN0aW9ucyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGVsZW1lbnQoKTogU3VydmV5RWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGl0bGVDb250ZW50OiBKU1guRWxlbWVudCA9IDxUaXRsZUNvbnRlbnQgZWxlbWVudD17dGhpcy5lbGVtZW50fSBjc3NDbGFzc2VzPXt0aGlzLmNzc0NsYXNzZXN9PjwvVGl0bGVDb250ZW50PjtcbiAgICBpZighdGhpcy5lbGVtZW50Lmhhc1RpdGxlQWN0aW9ucykgcmV0dXJuIHRpdGxlQ29udGVudDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi10aXRsZS1hY3Rpb25zXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2LXRpdGxlLWFjdGlvbnNfX3RpdGxlXCI+e3RpdGxlQ29udGVudH08L3NwYW4+XG4gICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMuZWxlbWVudC5nZXRUaXRsZVRvb2xiYXIoKX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcImVsZW1lbnRcIixcbiAgXCJ0aXRsZS1hY3Rpb25zXCIsXG4gIFwic3YtdGl0bGUtYWN0aW9uc1wiXG4pO1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXRpdGxlLWFjdGlvbnNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRpdGxlQWN0aW9ucywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50Q29yZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBJVGl0bGVPd25lciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjc3NDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cblxuICBwcml2YXRlIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnRDb3JlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGl0bGVPd25lciA9IHRoaXMuZWxlbWVudC5nZXRUaXRsZU93bmVyKCk7XG4gICAgaWYoIXRpdGxlT3duZXIpXG4gICAgICByZXR1cm4gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKHRoaXMuZWxlbWVudC5sb2NUaXRsZSk7XG4gICAgdmFyIHNwYW5zID0gdGhpcy5yZW5kZXJUaXRsZVNwYW5zKHRpdGxlT3duZXIsIHRoaXMuY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIDw+e3NwYW5zfTwvPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGVTcGFucyhlbGVtZW50OiBJVGl0bGVPd25lciwgY3NzQ2xhc3NlczogYW55KTogQXJyYXk8SlNYLkVsZW1lbnQ+IHtcbiAgICB2YXIgZ2V0U3BhY2VTcGFuID0gKGtleTogYW55KSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBkYXRhLWtleT17a2V5fSBrZXk9e2tleX0+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfTtcbiAgICB2YXIgc3BhbnMgPSBbXTtcbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0T25TdGFydCkge1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICAgIHNwYW5zLnB1c2goZ2V0U3BhY2VTcGFuKFwicmVxLXNwXCIpKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uTnVtYmVyID0gZWxlbWVudC5ubztcbiAgICBpZiAocXVlc3Rpb25OdW1iZXIpIHtcbiAgICAgIHNwYW5zLnB1c2goXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgZGF0YS1rZXk9e1wicV9udW1cIn1cbiAgICAgICAgICBrZXk9e1wicV9udW1cIn1cbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubnVtYmVyfVxuICAgICAgICAgIHN0eWxlPXt7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH19XG4gICAgICAgICAgYXJpYS1oaWRkZW49e3RydWV9XG4gICAgICAgID5cbiAgICAgICAgICB7cXVlc3Rpb25OdW1iZXJ9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcIm51bS1zcFwiKSk7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZSkge1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICAgIHNwYW5zLnB1c2goZ2V0U3BhY2VTcGFuKFwicmVxLXNwXCIpKTtcbiAgICB9XG4gICAgc3BhbnMucHVzaChcbiAgICAgIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhlbGVtZW50LmxvY1RpdGxlLCBudWxsLCBcInFfdGl0bGVcIilcbiAgICApO1xuICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZVRleHRBZnRlclRpdGxlKSB7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgICBzcGFucy5wdXNoKHRoaXMucmVuZGVyUmVxdWlyZVRleHQoZWxlbWVudCwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gc3BhbnM7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclJlcXVpcmVUZXh0KFxuICAgIGVsZW1lbnQ6IElUaXRsZU93bmVyLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEta2V5PXtcInJlcS10ZXh0XCJ9XG4gICAgICAgIGtleT17XCJyZXEtdGV4dFwifVxuICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucmVxdWlyZWRUZXh0IHx8IGNzc0NsYXNzZXMucGFuZWwucmVxdWlyZWRUZXh0fVxuICAgICAgICBhcmlhLWhpZGRlbj17dHJ1ZX1cbiAgICAgID5cbiAgICAgICAge2VsZW1lbnQucmVxdWlyZWRUZXh0fVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRDb3JlLCBkb0tleTJDbGlja1VwIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBUaXRsZUFjdGlvbnMgfSBmcm9tIFwiLi90aXRsZS1hY3Rpb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBUaXRsZUVsZW1lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnRDb3JlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuaGFzVGl0bGUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHRpdGxlQ29udGVudCA9IChcbiAgICAgIDxUaXRsZUFjdGlvbnNcbiAgICAgICAgZWxlbWVudD17ZWxlbWVudH1cbiAgICAgICAgY3NzQ2xhc3Nlcz17ZWxlbWVudC5jc3NDbGFzc2VzfVxuICAgICAgPjwvVGl0bGVBY3Rpb25zPlxuICAgICk7XG4gICAgbGV0IG9uQ2xpY2sgPSBudWxsO1xuICAgIGxldCBvbktleVVwID0gbnVsbDtcbiAgICBpZiAoZWxlbWVudC5oYXNUaXRsZUV2ZW50cykge1xuICAgICAgb25LZXlVcCA9IChldnQ6IGFueSkgPT4ge1xuICAgICAgICBkb0tleTJDbGlja1VwKGV2dC5uYXRpdmVFdmVudCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IEN1c3RvbVRhZyA9IGVsZW1lbnQudGl0bGVUYWdOYW1lIGFzIGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcbiAgICByZXR1cm4gKFxuICAgICAgPEN1c3RvbVRhZ1xuICAgICAgICBjbGFzc05hbWU9e2VsZW1lbnQuY3NzVGl0bGV9XG4gICAgICAgIGlkPXtlbGVtZW50LmFyaWFUaXRsZUlkfVxuICAgICAgICBhcmlhLWxhYmVsPXtcbiAgICAgICAgICBlbGVtZW50LmdldFR5cGUoKSA9PT0gXCJyYWRpb2dyb3VwXCJcbiAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgOiBlbGVtZW50LmxvY1RpdGxlLnJlbmRlcmVkSHRtbFxuICAgICAgICB9XG4gICAgICAgIHRhYkluZGV4PXtlbGVtZW50LnRpdGxlVGFiSW5kZXh9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2VsZW1lbnQudGl0bGVBcmlhRXhwYW5kZWR9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIG9uS2V5VXA9e29uS2V5VXB9XG4gICAgICA+XG4gICAgICAgIHt0aXRsZUNvbnRlbnR9XG4gICAgICA8L0N1c3RvbVRhZz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUN1c3RvbVdpZGdldCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcml2YXRlIHdpZGdldFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLndpZGdldFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByaXZhdGUgX2FmdGVyUmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcbiAgICAgIGxldCBlbCA9IHRoaXMud2lkZ2V0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UpIHtcbiAgICAgIHRoaXMuX2FmdGVyUmVuZGVyKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHZhciBpc0RlZmF1bHRSZW5kZXIgPVxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQgJiZcbiAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC5pc0RlZmF1bHRSZW5kZXI7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlICYmICFpc0RlZmF1bHRSZW5kZXIpIHtcbiAgICAgIHRoaXMuX2FmdGVyUmVuZGVyKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCkge1xuICAgICAgbGV0IGVsID0gdGhpcy53aWRnZXRSZWYuY3VycmVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWxsVW5tb3VudCh0aGlzLnF1ZXN0aW9uQmFzZSwgZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiB0aGlzLnF1ZXN0aW9uQmFzZS52aXNpYmxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY3VzdG9tV2lkZ2V0ID0gdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0O1xuXG4gICAgaWYgKGN1c3RvbVdpZGdldC5pc0RlZmF1bHRSZW5kZXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgcmVmPXt0aGlzLndpZGdldFJlZn0+XG4gICAgICAgICAge3RoaXMuY3JlYXRvci5jcmVhdGVRdWVzdGlvbkVsZW1lbnQodGhpcy5xdWVzdGlvbkJhc2UpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHdpZGdldCA9IG51bGw7XG4gICAgaWYgKGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcikge1xuICAgICAgd2lkZ2V0ID0gY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyKHRoaXMucXVlc3Rpb25CYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUpIHtcbiAgICAgICAgbGV0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiBjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlIH07XG4gICAgICAgIHJldHVybiA8ZGl2IHJlZj17dGhpcy53aWRnZXRSZWZ9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMud2lkZ2V0UmVmfT57d2lkZ2V0fTwvZGl2PjtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiwgRHJvcGRvd25MaXN0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wb3B1cC9wb3B1cFwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8VCBleHRlbmRzIFF1ZXN0aW9uPiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxUPiB7XG4gICBjbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgIHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWw/Lm9uQ2xpY2soZXZlbnQpO1xuICAgfTtcbiAgIGNsZWFyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbD8ub25DbGVhcihldmVudCk7XG4gICB9O1xuICAga2V5dXAgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICB0aGlzLnF1ZXN0aW9uLmRyb3Bkb3duTGlzdE1vZGVsPy5vbktleVVwKGV2ZW50KTtcbiAgIH07XG4gICBibHVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbD8ub25CbHVyKGV2ZW50KTtcbiAgIH07XG5cbiAgIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gICB9XG4gICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCk6IGFueSB7XG4gICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZS5yZW5kZXJlZFZhbHVlO1xuICAgfVxuICAgcHJvdGVjdGVkIHJlbmRlclNlbGVjdChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgIGxldCBzZWxlY3RFbGVtZW50OiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICBzZWxlY3RFbGVtZW50ID0gPGRpdiBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCl9IGRpc2FibGVkPnt0aGlzLnF1ZXN0aW9uLnJlYWRPbmx5VGV4dH08L2Rpdj47XG4gICAgIH0gZWxzZSB7XG4gICAgICAgaWYgKCEodGhpcy5xdWVzdGlvbiBhcyBhbnkpLmhhc093blByb3BlcnR5KFwiZHJvcGRvd25MaXN0TW9kZWxcIikpIHtcbiAgICAgICAgICh0aGlzLnF1ZXN0aW9uIGFzIGFueSlbXCJkcm9wZG93bkxpc3RNb2RlbFwiXSA9IG5ldyBEcm9wZG93bkxpc3RNb2RlbCh0aGlzLnF1ZXN0aW9uKTtcbiAgICAgICB9XG4gICAgICAgc2VsZWN0RWxlbWVudCA9IDw+XG4gICAgICAgICB7dGhpcy5yZW5kZXJJbnB1dCgpfVxuICAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLnF1ZXN0aW9uPy5kcm9wZG93bkxpc3RNb2RlbD8ucG9wdXBNb2RlbH0+PC9Qb3B1cD5cbiAgICAgICA8Lz47XG4gICAgIH1cblxuICAgICByZXR1cm4gKFxuICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNlbGVjdFdyYXBwZXJ9PlxuICAgICAgICAge3NlbGVjdEVsZW1lbnR9XG4gICAgICAgPC9kaXY+XG4gICAgICk7XG4gICB9XG5cbiAgIHByb3RlY3RlZCByZW5kZXJJbnB1dCgpOiBKU1guRWxlbWVudCB7XG4gICAgIHJldHVybiAoPGRpdlxuICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgIHRhYkluZGV4PXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSA/IHVuZGVmaW5lZCA6IDB9XG4gICAgICAgb25DbGljaz17dGhpcy5jbGlja31cbiAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfVxuICAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICBvbklucHV0PXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICBvbktleVVwPXt0aGlzLmtleXVwfVxuICAgICAgIG9uQmx1cj17dGhpcy5ibHVyfVxuICAgICAgIHJvbGU9e3RoaXMucXVlc3Rpb24uYXJpYVJvbGV9XG4gICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICA+XG4gICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sVmFsdWV9Pnt0aGlzLnF1ZXN0aW9uLnJlYWRPbmx5VGV4dH08L2Rpdj5cbiAgICAgICB7dGhpcy5jcmVhdGVDbGVhckJ1dHRvbigpfVxuICAgICA8L2Rpdj4pO1xuICAgfVxuXG4gICBjcmVhdGVDbGVhckJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgIGlmICghdGhpcy5xdWVzdGlvbi5hbGxvd0NsZWFyIHx8ICF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5CdXR0b25JY29uSWQpIHJldHVybiBudWxsO1xuXG4gICAgIGNvbnN0IHN0eWxlID0geyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKSA/IFwibm9uZVwiIDogXCJcIiB9O1xuICAgICByZXR1cm4gKFxuICAgICAgIDxkaXZcbiAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9ufVxuICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgb25DbGljaz17dGhpcy5jbGVhcn1cbiAgICAgICA+XG4gICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvblN2Z31cbiAgICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvbkljb25JZH1cbiAgICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XG4gICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgIDwvZGl2PlxuICAgICApO1xuICAgfVxuXG4gICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgICByZXR1cm4gKFxuICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAvPlxuICAgICAgIDwvZGl2PlxuICAgICApO1xuICAgfVxufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL2Jhc2VcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuLi9pdGVtdmFsdWVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uT3B0aW9uSXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xuICAgIHRoaXMuc2V0dXBNb2RlbCgpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMuc2V0dXBNb2RlbCgpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5pdGVtKSB7XG4gICAgICB0aGlzLml0ZW0ubG9jVGV4dC5vbkNoYW5nZWQgPSAoKSA9PiB7IH07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0dXBNb2RlbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbS5sb2NUZXh0KSByZXR1cm47XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5pdGVtLmxvY1RleHQub25DaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8b3B0aW9uIHZhbHVlPXt0aGlzLml0ZW0udmFsdWV9IGRpc2FibGVkPXshdGhpcy5pdGVtLmlzRW5hYmxlZH0+XG4gICAgICAgIHt0aGlzLml0ZW0udGV4dH1cbiAgICAgIDwvb3B0aW9uPlxuICAgICk7XG4gIH1cbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2Ryb3Bkb3duXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk9wdGlvbkl0ZW0gfSBmcm9tIFwiLi9kcm9wZG93bi1pdGVtXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi4vaXRlbXZhbHVlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duU2VsZWN0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93biB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLm9uQ2xpY2soZXZlbnQpO1xuICAgIH07XG4gICAgY29uc3Qga2V5dXAgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbi5vbktleVVwKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IHRoaXMuaXNEaXNwbGF5TW9kZSA/IChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIDxkaXYgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfSBkaXNhYmxlZD57dGhpcy5xdWVzdGlvbi5yZWFkT25seVRleHR9PC9kaXY+KSA6XG4gICAgICAoPHNlbGVjdFxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCl9XG4gICAgICAgIHJlZj17KHNlbGVjdCkgPT4gKHRoaXMuY29udHJvbCA9IHNlbGVjdCl9XG4gICAgICAgIGF1dG9Db21wbGV0ZT17dGhpcy5xdWVzdGlvbi5hdXRvQ29tcGxldGV9XG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgb25JbnB1dD17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICAgIG9uQ2xpY2s9e2NsaWNrfVxuICAgICAgICBvbktleVVwPXtrZXl1cH1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfT5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uYWxsb3dDbGVhciA/ICg8b3B0aW9uIHZhbHVlPVwiXCI+e3RoaXMucXVlc3Rpb24ucGxhY2Vob2xkZXJ9PC9vcHRpb24+KSA6IG51bGx9XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcCgoaXRlbTogSXRlbVZhbHVlLCBpOiBudW1iZXIpID0+IDxTdXJ2ZXlRdWVzdGlvbk9wdGlvbkl0ZW0ga2V5PXtcIml0ZW1cIiArIGl9IGl0ZW09e2l0ZW19IC8+KX1cbiAgICAgIDwvc2VsZWN0Pik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNlbGVjdFdyYXBwZXJ9PlxuICAgICAgICB7c2VsZWN0RWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInN2LWRyb3Bkb3duLXNlbGVjdFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Ecm9wZG93blNlbGVjdCwgcHJvcHMpO1xufSk7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFwiZHJvcGRvd25cIiwgXCJzZWxlY3RcIiwgXCJzdi1kcm9wZG93bi1zZWxlY3RcIik7IiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdEVsZW1lbnRGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVhY3RFbGVtZW50RmFjdG9yeSA9IG5ldyBSZWFjdEVsZW1lbnRGYWN0b3J5KCk7XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudD4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJFbGVtZW50KFxuICAgIGVsZW1lbnRUeXBlOiBzdHJpbmcsXG4gICAgZWxlbWVudENyZWF0b3I6IChwcm9wczogYW55KSA9PiBKU1guRWxlbWVudFxuICApIHtcbiAgICB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXSA9IGVsZW1lbnRDcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGlzRWxlbWVudFJlZ2lzdGVyZWQoZWxlbWVudFR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiAhIXRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IocGFyYW1zKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRIZWFkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBRdWVzdGlvbiB8IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgICBjb25zdCB0aXRsZSA9IGVsZW1lbnQuaGFzVGl0bGUgPyAoXG4gICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e2VsZW1lbnR9PjwvVGl0bGVFbGVtZW50PlxuICAgICkgOiBudWxsO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZWxlbWVudC5oYXNEZXNjcmlwdGlvblVuZGVyVGl0bGVcbiAgICAgID8gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbigpXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbGVtZW50LmNzc0hlYWRlcn0gb25DbGljaz17ZWxlbWVudC5jbGlja1RpdGxlRnVuY3Rpb259PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckRlc2NyaXB0aW9uKFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGRlc2NyaXB0aW9uVGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMuZWxlbWVudC5sb2NEZXNjcmlwdGlvblxuICAgICk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmVsZW1lbnQuY3NzRGVzY3JpcHRpb259PntkZXNjcmlwdGlvblRleHR9PC9kaXY+O1xuICB9XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGbG93UGFuZWxNb2RlbCwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5Rmxvd1BhbmVsIGV4dGVuZHMgU3VydmV5UGFuZWwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgZmxvd1BhbmVsKCk6IEZsb3dQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbCBhcyBGbG93UGFuZWxNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghIXRoaXMuZmxvd1BhbmVsKSB7XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkN1c3RvbUh0bWxQcm9kdWNpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9O1xuICAgICAgdGhpcy5mbG93UGFuZWwub25HZXRIdG1sRm9yUXVlc3Rpb24gPSB0aGlzLnJlbmRlclF1ZXN0aW9uO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMuZmxvd1BhbmVsKSB7XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkN1c3RvbUh0bWxQcm9kdWNpbmcgPSBudWxsO1xuICAgICAgdGhpcy5mbG93UGFuZWwub25HZXRIdG1sRm9yUXVlc3Rpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24obmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmZsb3dQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCI8cXVlc3Rpb24+XCIgKyBxdWVzdGlvbi5uYW1lICsgXCI8L3F1ZXN0aW9uPlwiO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJSb3dzKCk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgcmV0dXJuIFt0aGlzLnJlbmRlckh0bWwoKV07XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJlZEluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgZ2V0Tm9kZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRJbmRleCsrO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIdG1sKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZmxvd1BhbmVsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBodG1sID0gXCI8c3Bhbj5cIiArIHRoaXMuZmxvd1BhbmVsLnByb2R1Y2VIdG1sKCkgKyBcIjwvc3Bhbj5cIjtcbiAgICBpZiAoIURPTVBhcnNlcikge1xuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IGh0bWwgfTtcbiAgICAgIHJldHVybiA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xuICAgIH1cbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC94bWxcIik7XG4gICAgdGhpcy5yZW5kZXJlZEluZGV4ID0gMDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJlbnROb2RlKGRvYyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vZGVzKGRvbU5vZGVzOiBBcnJheTxOb2RlPik6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbU5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2Rlcy5wdXNoKHRoaXMucmVuZGVyTm9kZShkb21Ob2Rlc1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdHlsZShub2RlVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImJcIikge1xuICAgICAgc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJpXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRTdHlsZSA9IFwiaXRhbGljXCI7XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInVcIikge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcInVuZGVybGluZVwiO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhcmVudE5vZGUobm9kZTogTm9kZSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMucmVuZGVyTm9kZXModGhpcy5nZXRDaGlsZERvbU5vZGVzKG5vZGUpKTtcbiAgICBpZiAobm9kZVR5cGUgPT09IFwiZGl2XCIpXG4gICAgICByZXR1cm4gPGRpdiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9PntjaGlsZHJlbn08L2Rpdj47XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0gc3R5bGU9e3RoaXMuZ2V0U3R5bGUobm9kZVR5cGUpfT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vZGUobm9kZTogTm9kZSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJlbnROb2RlKG5vZGUpO1xuICAgIH1cbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9kZVR5cGUgPT09IFwicXVlc3Rpb25cIikge1xuICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLmZsb3dQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShub2RlLnRleHRDb250ZW50KTtcbiAgICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgcXVlc3Rpb25Cb2R5ID0gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25cbiAgICAgICAgICBrZXk9e3F1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgZWxlbWVudD17cXVlc3Rpb259XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgIGNzcz17dGhpcy5jc3N9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgcmV0dXJuIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0+e3F1ZXN0aW9uQm9keX08L3NwYW4+O1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUgPT09IFwiZGl2XCIpIHtcbiAgICAgIHJldHVybiA8ZGl2IGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0+e25vZGUudGV4dENvbnRlbnR9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4ga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfSBzdHlsZT17dGhpcy5nZXRTdHlsZShub2RlVHlwZSl9PlxuICAgICAgICB7bm9kZS50ZXh0Q29udGVudH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2hpbGREb21Ob2Rlcyhub2RlOiBOb2RlKTogQXJyYXk8Tm9kZT4ge1xuICAgIGNvbnN0IGRvbU5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRvbU5vZGVzLnB1c2gobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbU5vZGVzO1xuICB9XG4gIHByaXZhdGUgaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlcyA9IG5vZGUuY2hpbGROb2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobm9kZXNbaV0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCIjdGV4dFwiKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KHN0eWxlOiBhbnksIHJvd3M6IEpTWC5FbGVtZW50W10pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmLXBhbmVsXCIsIHsgc3R5bGU6IHN0eWxlIH0sIHJvd3MpO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwiZmxvd3BhbmVsXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Rmxvd1BhbmVsLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25JbWFnZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7IH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSW1hZ2VNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMucXVlc3Rpb24uaW1hZ2VMaW5rO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uZ2V0SW1hZ2VDc3MoKTtcbiAgICB2YXIgc3R5bGU6IGFueSA9IHsgb2JqZWN0Rml0OiB0aGlzLnF1ZXN0aW9uLmltYWdlRml0IH07XG4gICAgdmFyIGNvbnRyb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTW9kZSA9PT0gXCJpbWFnZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIGFsdD17dGhpcy5xdWVzdGlvbi50ZXh0IHx8IHRoaXMucXVlc3Rpb24udGl0bGV9XG4gICAgICAgICAgd2lkdGg9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRXaWR0aH1cbiAgICAgICAgICBoZWlnaHQ9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRIZWlnaHR9XG4gICAgICAgICAgLy9hbHQ9e2l0ZW0udGV4dCB8fCBpdGVtLnZhbHVlfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTW9kZSA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8dmlkZW8gY29udHJvbHNcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgc3JjPXt0aGlzLnF1ZXN0aW9uLmltYWdlTGlua31cbiAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFdpZHRofVxuICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID48L3ZpZGVvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcInlvdXR1YmVcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24uaW1hZ2VMaW5rfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+e2NvbnRyb2x9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25JbWFnZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCwgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSW1hZ2VJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXQgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFNlbGVjdEJhc2VSb290Q3NzKCl9PlxuICAgICAgICA8bGVnZW5kXG4gICAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH0gLz5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1ucyA/IHRoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKSA6IHRoaXMuZ2V0SXRlbXMoY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjc3NDbGFzc2VzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiaXRlbVwiICsgaTtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5yZW5kZXJJdGVtKGtleSwgaXRlbSBhcyBJbWFnZUl0ZW1WYWx1ZSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4geyBtYXJnaW5MZWZ0OiBcIjNweFwiLCBkaXNwbGF5OiBcImlubGluZVwiLCBwb3NpdGlvbjogXCJzdGF0aWNcIiB9O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IEltYWdlSXRlbVZhbHVlLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gPFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXJJdGVtIGtleT17a2V5fSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gaXRlbT17aXRlbX0gY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc30+PC9TdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VySXRlbT47XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXJJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuaXRlbS5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgcmVhY3RPblN0ckNoYW5nZWQoKSB7XG4gICAgdGhpcy5pdGVtLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbG9jSW1hZ2VMaW5rY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUubG9jSW1hZ2VMaW5rID8gdGhpcy5zdGF0ZS5sb2NJbWFnZUxpbmsgKyAxIDogMSB9KTtcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG5cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLm11bHRpU2VsZWN0KSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHRoaXMucXVlc3Rpb24udmFsdWUuY29uY2F0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY3VyclZhbHVlID0gdGhpcy5xdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgY3VyclZhbHVlLnNwbGljZSh0aGlzLnF1ZXN0aW9uLnZhbHVlLmluZGV4T2YoZXZlbnQudGFyZ2V0LnZhbHVlKSwgMSk7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBjdXJyVmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtO1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIHZhciBpc0NoZWNrZWQgPSBxdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZChpdGVtKTtcbiAgICB2YXIgaXRlbUNsYXNzID0gcXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pO1xuICAgIHZhciB0ZXh0ID0gbnVsbDtcbiAgICBpZiAocXVlc3Rpb24uc2hvd0xhYmVsKSB7XG4gICAgICB0ZXh0ID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dH1cbiAgICAgICAgPlxuICAgICAgICAgIHtpdGVtLnRleHQgPyBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KSA6IGl0ZW0udmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7IG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdCB9O1xuXG4gICAgdmFyIGNvbnRyb2wgPSBudWxsO1xuICAgIGlmIChpdGVtLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWwgJiYgdGhpcy5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJpbWFnZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmltYWdlfVxuICAgICAgICAgIHNyYz17aXRlbS5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGggfVxuICAgICAgICAgIGhlaWdodD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZUhlaWdodCB9XG4gICAgICAgICAgYWx0PXtpdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBvbkxvYWQ9eyhldmVudDogYW55KSA9PiB7IHRoaXMucXVlc3Rpb25bXCJvbkNvbnRlbnRMb2FkZWRcIl0oaXRlbSwgZXZlbnQubmF0aXZlRXZlbnQpOyB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGl0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbCAmJiB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcInZpZGVvXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDx2aWRlbyBjb250cm9sc1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e2l0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICB3aWR0aD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZVdpZHRoIH1cbiAgICAgICAgICBoZWlnaHQ9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBvbkxvYWRlZE1ldGFkYXRhPXsoZXZlbnQ6IGFueSkgPT4geyB0aGlzLnF1ZXN0aW9uW1wib25Db250ZW50TG9hZGVkXCJdKGl0ZW0sIGV2ZW50Lm5hdGl2ZUV2ZW50KTsgfX1cbiAgICAgICAgPjwvdmlkZW8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWl0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbCkge1xuICAgICAgbGV0IHN0eWxlOiBhbnkgPSB7XG4gICAgICAgIHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQsXG4gICAgICAgIG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdFxuICAgICAgfTtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbU5vSW1hZ2V9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICA+XG4gICAgICAgICAge1xuICAgICAgICAgICAgY3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZVN2Z0ljb24gP1xuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZVN2Z0ljb259PlxuICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXtjc3NDbGFzc2VzLml0ZW1Ob0ltYWdlU3ZnSWNvbklkfT48L3VzZT5cbiAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2l0ZW1DbGFzc30+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubGFiZWx9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKGl0ZW0pfVxuICAgICAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uTmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKGl0ZW0pfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZUNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIHtjb250cm9sfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gICAgcmV0dXJuIHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VwaWNrZXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWxCYXNlIH0gZnJvbSBcIi4vcGFuZWwtYmFzZVwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlIGV4dGVuZHMgU3VydmV5UGFuZWxCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wYWdlO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFnZSgpOiBQYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZSBhcyBQYWdlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0aXRsZSA9IHRoaXMucmVuZGVyVGl0bGUoKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLnJlbmRlckRlc2NyaXB0aW9uKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJlbmRlclJvd3ModGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17dGhpcy5wYWdlLmNzc1Jvb3R9PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAge3Jvd3N9XG4gICAgICA8L2RpdiA+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMucGFnZX0+PC9UaXRsZUVsZW1lbnQ+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnBhZ2UuX3Nob3dEZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYWdlLmxvY0Rlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFnZS5kZXNjcmlwdGlvbn0+e3RleHR9PC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJvd01vZGVsLCBQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVJvdyB9IGZyb20gXCIuL3Jvd1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWxCYXNlIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEJhc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZVByb3BJblN0YXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGtleSAhPT0gXCJlbGVtZW50c1wiICYmIHN1cGVyLmNhblVzZVByb3BJblN0YXRlKGtleSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENzcygpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYW5lbEJhc2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50IHx8IHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHMuc3VydmV5IHx8ICghIXRoaXMucGFuZWxCYXNlID8gdGhpcy5wYW5lbEJhc2Uuc3VydmV5IDogbnVsbClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAoXG4gICAgICAhIXByZXZQcm9wcy5wYWdlICYmXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXG4gICAgICAhIXRoaXMuc3VydmV5LmN1cnJlbnRQYWdlICYmXG4gICAgICBwcmV2UHJvcHMucGFnZS5uYW1lID09PSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZS5uYW1lXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIHByaXZhdGUgZG9BZnRlclJlbmRlcigpIHtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIGlmICh0aGlzLnBhbmVsQmFzZS5pc1BhbmVsKSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCwgZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnN1cnZleSAmJiAhIXRoaXMucGFuZWxCYXNlXG4gICAgICAmJiB0aGlzLnBhbmVsQmFzZS5pc1Zpc2libGUgJiYgISF0aGlzLnBhbmVsQmFzZS5zdXJ2ZXlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyZWRSb3dzQ2FjaGU6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgcmVuZGVyUm93cyhjc3M6IGFueSk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgaWYgKHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWUgIT09IFwicm93c1wiKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkUm93c0NhY2hlID0ge307XG4gICAgfVxuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIHF1ZXN0aW9uUm93cyA9IHRoaXMucGFuZWxCYXNlLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvblJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJlbmRlcmVkUm93c0NhY2hlW3F1ZXN0aW9uUm93c1tpXS5pZF07XG4gICAgICBpZiAoIXJvdykge1xuICAgICAgICByb3cgPSB0aGlzLmNyZWF0ZVJvdyhxdWVzdGlvblJvd3NbaV0sIGNzcyk7XG4gICAgICAgIHRoaXMucmVuZGVyZWRSb3dzQ2FjaGVbcXVlc3Rpb25Sb3dzW2ldLmlkXSA9IHJvdztcbiAgICAgIH1cbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KHJvdzogUXVlc3Rpb25Sb3dNb2RlbCwgY3NzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlSb3dcbiAgICAgICAga2V5PXtyb3cuaWR9XG4gICAgICAgIHJvdz17cm93fVxuICAgICAgICBzdXJ2ZXk9e3RoaXMuc3VydmV5fVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGNzcz17Y3NzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRFcnJvcnMgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbEJhc2UgfSBmcm9tIFwiLi9wYW5lbC1iYXNlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsLCBkb0tleTJDbGlja1VwLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50SGVhZGVyIH0gZnJvbSBcIi4vZWxlbWVudC1oZWFkZXJcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhbmVsIGV4dGVuZHMgU3VydmV5UGFuZWxCYXNlIHtcbiAgcHJpdmF0ZSBoYXNCZWVuRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcigpO1xuICAgIGNvbnN0IGVycm9ycyA9IChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucGFuZWxCYXNlfVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBwYWRkaW5nTGVmdDogdGhpcy5wYW5lbC5pbm5lclBhZGRpbmdMZWZ0LFxuICAgICAgZGlzcGxheTogIXRoaXMucGFuZWwuaXNDb2xsYXBzZWQgPyB1bmRlZmluZWQgOiBcIm5vbmVcIixcbiAgICB9O1xuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnBhbmVsLmlzQ29sbGFwc2VkIHx8IHRoaXMuaGFzQmVlbkV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmhhc0JlZW5FeHBhbmRlZCA9IHRydWU7XG4gICAgICBjb25zdCByb3dzOiBKU1guRWxlbWVudFtdID0gdGhpcy5yZW5kZXJSb3dzKHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMpO1xuICAgICAgY29uc3QgY2xhc3NOYW1lOiBzdHJpbmcgPSB0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzLnBhbmVsLmNvbnRlbnQ7XG4gICAgICBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KHN0eWxlLCByb3dzLCBjbGFzc05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXsodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCkuZ2V0Q29udGFpbmVyQ3NzKCl9XG4gICAgICAgIG9uRm9jdXM9eyh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsKS5mb2N1c0lufVxuICAgICAgPlxuICAgICAgICB7aGVhZGVyfVxuICAgICAgICB7ZXJyb3JzfVxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpIHtcbiAgICBpZiAoIXRoaXMucGFuZWwuaGFzVGl0bGUgJiYgIXRoaXMucGFuZWwuaGFzRGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUVsZW1lbnRIZWFkZXIgZWxlbWVudD17dGhpcy5wYW5lbH0+PC9TdXJ2ZXlFbGVtZW50SGVhZGVyPjtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcEVsZW1lbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucGFuZWwuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEVsZW1lbnQoc3VydmV5LCBlbGVtZW50LCB0aGlzLnBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChzdHlsZTogYW55LCByb3dzOiBKU1guRWxlbWVudFtdLCBjbGFzc05hbWU6IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBib3R0b206IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJCb3R0b20oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBpZD17dGhpcy5wYW5lbC5jb250ZW50SWR9PlxuICAgICAgICB7cm93c31cbiAgICAgICAge2JvdHRvbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucGFuZWxCYXNlLnRpdGxlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFRpdGxlRWxlbWVudCBlbGVtZW50PXt0aGlzLnBhbmVsQmFzZX0+PC9UaXRsZUVsZW1lbnQ+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsQmFzZS5kZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYW5lbEJhc2UubG9jRGVzY3JpcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wYW5lbC5jc3NDbGFzc2VzLnBhbmVsLmRlc2NyaXB0aW9ufT57dGV4dH08L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCb3R0b20oKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGZvb3RlclRvb2xiYXIgPSB0aGlzLnBhbmVsLmdldEZvb3RlclRvb2xiYXIoKTtcbiAgICBpZiAoIWZvb3RlclRvb2xiYXIuaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2Zvb3RlclRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInBhbmVsXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQYW5lbCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nTW9kZWwsIFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9kcm9wZG93bi1iYXNlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYXRpbmdEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlPFF1ZXN0aW9uUmF0aW5nTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3REcm9wZG93bn0+XG4gICAgICAgIHtzZWxlY3R9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LXJhdGluZy1kcm9wZG93blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhdGluZ0Ryb3Bkb3duLCBwcm9wcyk7XG4gIH1cbik7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcInJhdGluZ1wiLFxuICBcImRyb3Bkb3duXCIsXG4gIFwic3YtcmF0aW5nLWRyb3Bkb3duXCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uLCBQYWdlTW9kZWwsIFN1cnZleUVycm9yLCBTdHlsZXNNYW5hZ2VyLCBzdXJ2ZXlDc3MsIEhlbHBlcnMsIGRvS2V5MkNsaWNrVXAsIFN2Z1JlZ2lzdHJ5LCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFnZSB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUxvY1N0cmluZ1ZpZXdlciB9IGZyb20gXCIuL3N0cmluZy12aWV3ZXJcIjtcbmltcG9ydCB7IFN1cnZleUhlYWRlciB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlUaW1lclBhbmVsIH0gZnJvbSBcIi4vcmVhY3R0aW1lcnBhbmVsXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgZG9LZXkyQ2xpY2tCbHVyLCBkb0tleTJDbGlja0Rvd24sIElBdHRhY2hLZXkyY2xpY2tPcHRpb25zIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgQnJhbmRJbmZvIH0gZnJvbSBcIi4vY29tcG9uZW50cy9icmFuZC1pbmZvXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXkgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT5cbiAgaW1wbGVtZW50cyBJU3VydmV5Q3JlYXRvciB7XG4gIHByaXZhdGUgcHJldmlvdXNKU09OID0ge307XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcHVibGljIHN0YXRpYyBnZXQgY3NzVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlDc3MuY3VycmVudFR5cGU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgY3NzVHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgU3R5bGVzTWFuYWdlci5hcHBseVRoZW1lKHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcblxuICBwcml2YXRlIHJvb3ROb2RlSWQ6IHN0cmluZzsgLy8gcm9vdCBkb20gbm9kZSBJRCBhdHRyXG4gIHByaXZhdGUgcm9vdE5vZGVDbGFzc05hbWU6IHN0cmluZzsgLy8gcm9vdCBkb20gbm9kZSBjbGFzc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVUcnlBZ2FpbkNsaWNrID0gdGhpcy5oYW5kbGVUcnlBZ2FpbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jcmVhdGVTdXJ2ZXkocHJvcHMpO1xuICAgIHRoaXMudXBkYXRlU3VydmV5KHByb3BzLCB7fSk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5yb290Tm9kZUlkID0gcHJvcHMuaWQgfHwgbnVsbDtcbiAgICB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lIHx8IFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIH1cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSkge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmlzTW9kZWxKU09OQ2hhbmdlZChuZXh0UHJvcHMpKSB7XG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleShuZXh0UHJvcHMpO1xuICAgICAgdGhpcy51cGRhdGVTdXJ2ZXkobmV4dFByb3BzLCB7fSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMudXBkYXRlU3VydmV5KHRoaXMucHJvcHMsIHByZXZQcm9wcyk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyU3VydmV5KGVsKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnN0YXJ0VGltZXJGcm9tVUkoKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnN0b3BUaW1lcigpO1xuICAgIH1cbiAgfVxuICBkb1JlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYodGhpcy5zdXJ2ZXlbXCJuZWVkUmVuZGVySWNvbnNcIl0pIHtcbiAgICAgIFN2Z1JlZ2lzdHJ5LnJlbmRlckljb25zKCk7XG4gICAgfVxuICAgIGxldCByZW5kZXJSZXN1bHQ6IEpTWC5FbGVtZW50O1xuICAgIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckNvbXBsZXRlZCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJjb21wbGV0ZWRiZWZvcmVcIikge1xuICAgICAgcmVuZGVyUmVzdWx0ID0gdGhpcy5yZW5kZXJDb21wbGV0ZWRCZWZvcmUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwibG9hZGluZ1wiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckxvYWRpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyUmVzdWx0ID0gdGhpcy5yZW5kZXJTdXJ2ZXkoKTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyOiBKU1guRWxlbWVudCA9IDxTdXJ2ZXlIZWFkZXIgc3VydmV5PXt0aGlzLnN1cnZleX0+PC9TdXJ2ZXlIZWFkZXI+O1xuICAgIGNvbnN0IG9uU3VibWl0ID0gZnVuY3Rpb24gKGV2ZW50OiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTEZvcm1FbGVtZW50Pikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIGxldCBjdXN0b21IZWFkZXI6IEpTWC5FbGVtZW50ID0gPGRpdiBjbGFzc05hbWU9XCJzdl9jdXN0b21faGVhZGVyXCIgLz47XG4gICAgaWYgKHRoaXMuc3VydmV5Lmhhc0xvZ28pIHtcbiAgICAgIGN1c3RvbUhlYWRlciA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJvb3RDc3MgPSB0aGlzLnN1cnZleS5nZXRSb290Q3NzKCk7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPyB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lICsgXCIgXCIgKyByb290Q3NzIDogcm9vdENzcztcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGlkPXt0aGlzLnJvb3ROb2RlSWR9IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9PlxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17b25TdWJtaXR9PlxuICAgICAgICAgIHtjdXN0b21IZWFkZXJ9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAge3JlbmRlclJlc3VsdH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgICB7IHRoaXMuc3VydmV5LnNob3dCcmFuZEluZm8gPyA8QnJhbmRJbmZvLz4gOiBudWxsIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmRvUmVuZGVyKCk7XG4gIH1cbiAgcHVibGljIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuY3NzO1xuICB9XG4gIHB1YmxpYyBzZXQgY3NzKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnN1cnZleS5jc3MgPSB2YWx1ZTtcbiAgfVxuICBoYW5kbGVUcnlBZ2FpbkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnN1cnZleS5kb0NvbXBsZXRlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbXBsZXRlZCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnN1cnZleS5zaG93Q29tcGxldGVkUGFnZSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGNvbXBsZXRlZFN0YXRlID0gbnVsbDtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGUpIHtcbiAgICAgIHZhciB0cnlBZ2FpbkJ1dHRvbiA9IG51bGw7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICAgIHZhciBidG5UZXh0ID0gdGhpcy5zdXJ2ZXkuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKFwic2F2ZUFnYWluQnV0dG9uXCIpO1xuICAgICAgICB0cnlBZ2FpbkJ1dHRvbiA9IChcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9e1wiYnV0dG9uXCJ9XG4gICAgICAgICAgICB2YWx1ZT17YnRuVGV4dH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3Muc2F2ZURhdGEuc2F2ZUFnYWluQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVUcnlBZ2FpbkNsaWNrfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2YXIgY3NzID0gdGhpcy5jc3Muc2F2ZURhdGFbdGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGVdO1xuICAgICAgY29tcGxldGVkU3RhdGUgPSAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5zYXZlRGF0YS5yb290fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzfT5cbiAgICAgICAgICAgIDxzcGFuPnt0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZVRleHR9PC9zcGFuPlxuICAgICAgICAgICAge3RyeUFnYWluQnV0dG9ufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5zdXJ2ZXkuY29tcGxldGVkQ3NzfVxuICAgICAgICAvPlxuICAgICAgICB7Y29tcGxldGVkU3RhdGV9XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbXBsZXRlZEJlZm9yZSgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRCZWZvcmVIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gY2xhc3NOYW1lPXt0aGlzLmNzcy5ib2R5fSAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckxvYWRpbmcoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkTG9hZGluZ0h0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSBjbGFzc05hbWU9e3RoaXMuY3NzLmJvZHl9IC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyU3VydmV5KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgYWN0aXZlUGFnZSA9IHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2VcbiAgICAgID8gdGhpcy5yZW5kZXJQYWdlKHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2UpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgaXNTdGFyaW5nID0gdGhpcy5zdXJ2ZXkuaXNTaG93U3RhcnRpbmdQYWdlO1xuICAgIHZhciBwYWdlSWQgPSB0aGlzLnN1cnZleS5hY3RpdmVQYWdlID8gdGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZS5pZCA6IFwiXCI7XG4gICAgdmFyIHRvcFByb2dyZXNzID0gdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPblRvcCAmJiAhaXNTdGFyaW5nXG4gICAgICA/IHRoaXMucmVuZGVyUHJvZ3Jlc3ModHJ1ZSlcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgYm90dG9tUHJvZ3Jlc3MgPSB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uQm90dG9tICYmICFpc1N0YXJpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJQcm9ncmVzcyhmYWxzZSlcbiAgICAgIDogbnVsbDtcbiAgICBsZXQgY2xhc3NOYW1lID0gdGhpcy5zdXJ2ZXkuYm9keUNzcztcbiAgICBpZiAoIWFjdGl2ZVBhZ2UpIHtcbiAgICAgIGNsYXNzTmFtZSA9IHRoaXMuY3NzLmJvZHlFbXB0eTtcbiAgICAgIGFjdGl2ZVBhZ2UgPSB0aGlzLnJlbmRlckVtcHR5U3VydmV5KCk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGlkPXtwYWdlSWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgPlxuICAgICAgICB7dG9wUHJvZ3Jlc3N9XG4gICAgICAgIHt0aGlzLnJlbmRlclRpbWVyUGFuZWwoXCJ0b3BcIil9XG4gICAgICAgIHt0aGlzLnJlbmRlck5hdmlnYXRpb24oXCJ0b3BcIil9XG4gICAgICAgIHthY3RpdmVQYWdlfVxuICAgICAgICB7dGhpcy5yZW5kZXJUaW1lclBhbmVsKFwiYm90dG9tXCIpfVxuICAgICAgICB7Ym90dG9tUHJvZ3Jlc3N9XG4gICAgICAgIHt0aGlzLnJlbmRlck5hdmlnYXRpb24oXCJib3R0b21cIil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJUaW1lclBhbmVsKGxvY2F0aW9uOiBzdHJpbmcpIHtcbiAgICBpZih0aGlzLnN1cnZleS5pc1Nob3dTdGFydGluZ1BhZ2UpIHJldHVybiBudWxsO1xuICAgIGlmIChsb2NhdGlvbiA9PT0gXCJ0b3BcIiAmJiAhdGhpcy5zdXJ2ZXkuaXNUaW1lclBhbmVsU2hvd2luZ09uVG9wKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKGxvY2F0aW9uID09PSBcImJvdHRvbVwiICYmICF0aGlzLnN1cnZleS5pc1RpbWVyUGFuZWxTaG93aW5nT25Cb3R0b20pXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFN1cnZleVRpbWVyUGFuZWwgdGltZXJNb2RlbD17dGhpcy5zdXJ2ZXkudGltZXJNb2RlbH0gLz47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhZ2UocGFnZTogUGFnZU1vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UGFnZVxuICAgICAgICBzdXJ2ZXk9e3RoaXMuc3VydmV5fVxuICAgICAgICBwYWdlPXtwYWdlfVxuICAgICAgICBjc3M9e3RoaXMuY3NzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQcm9ncmVzcyhpc1RvcDogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJzdi1wcm9ncmVzcy1cIiArIHRoaXMuc3VydmV5LnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgeyBzdXJ2ZXk6IHRoaXMuc3VydmV5LCBjc3M6IHRoaXMuY3NzLCBpc1RvcDogaXNUb3AgfVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5hdmlnYXRpb24obmF2UG9zaXRpb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyAhPT0gXCJib3RoXCIgJiZcbiAgICAgICh0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyA9PT0gXCJub25lXCIgfHxcbiAgICAgICAgdGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgIT09IG5hdlBvc2l0aW9uKVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLnN1cnZleS5uYXZpZ2F0aW9uQmFyfSAvPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRW1wdHlTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8c3Bhbj57dGhpcy5zdXJ2ZXkuZW1wdHlTdXJ2ZXlUZXh0fTwvc3Bhbj47XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleShuZXdQcm9wczogYW55KSB7XG4gICAgaWYgKCFuZXdQcm9wcykgbmV3UHJvcHMgPSB7fTtcbiAgICB0aGlzLnByZXZpb3VzSlNPTiA9IHt9O1xuICAgIGlmIChuZXdQcm9wcykge1xuICAgICAgaWYgKG5ld1Byb3BzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMuc3VydmV5ID0gbmV3UHJvcHMubW9kZWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3UHJvcHMuanNvbikge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNKU09OID0gbmV3UHJvcHMuanNvbjtcbiAgICAgICAgICB0aGlzLnN1cnZleSA9IG5ldyBTdXJ2ZXlNb2RlbChuZXdQcm9wcy5qc29uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cnZleSA9IG5ldyBTdXJ2ZXlNb2RlbCgpO1xuICAgIH1cbiAgICBpZiAoISFuZXdQcm9wcy5jc3MpIHtcbiAgICAgIHRoaXMuc3VydmV5LmNzcyA9IHRoaXMuY3NzO1xuICAgIH1cbiAgICB0aGlzLnNldFN1cnZleUV2ZW50cygpO1xuICB9XG4gIHByaXZhdGUgaXNNb2RlbEpTT05DaGFuZ2VkKG5ld1Byb3BzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoISFuZXdQcm9wc1tcIm1vZGVsXCJdKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgIT09IG5ld1Byb3BzW1wibW9kZWxcIl07XG4gICAgfVxuICAgIGlmICghIW5ld1Byb3BzW1wianNvblwiXSkge1xuICAgICAgcmV0dXJuICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3UHJvcHNbXCJqc29uXCJdLCB0aGlzLnByZXZpb3VzSlNPTik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlU3VydmV5KG5ld1Byb3BzOiBhbnksIG9sZFByb3BzPzogYW55KSB7XG4gICAgaWYgKCFuZXdQcm9wcykgcmV0dXJuO1xuICAgIG9sZFByb3BzID0gb2xkUHJvcHMgfHwge307XG4gICAgZm9yICh2YXIga2V5IGluIG5ld1Byb3BzKSB7XG4gICAgICBpZiAoa2V5ID09IFwibW9kZWxcIiB8fCBrZXkgPT0gXCJjaGlsZHJlblwiIHx8IGtleSA9PSBcImpzb25cIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT0gXCJjc3NcIikge1xuICAgICAgICB0aGlzLnN1cnZleS5tZXJnZVZhbHVlcyhuZXdQcm9wcy5jc3MsIHRoaXMuc3VydmV5LmdldENzcygpKTtcbiAgICAgICAgdGhpcy5zdXJ2ZXlbXCJ1cGRhdGVOYXZpZ2F0aW9uQ3NzXCJdKCk7XG4gICAgICAgIHRoaXMuc3VydmV5W1widXBkYXRlRWxlbWVudENzc1wiXSgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdQcm9wc1trZXldID09PSBvbGRQcm9wc1trZXldKSBjb250aW51ZTtcbiAgICAgIGlmIChrZXkuaW5kZXhPZihcIm9uXCIpID09IDAgJiYgdGhpcy5zdXJ2ZXlba2V5XSAmJiB0aGlzLnN1cnZleVtrZXldLmFkZCkge1xuICAgICAgICBpZiAoISFvbGRQcm9wc1trZXldKSB7XG4gICAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XS5yZW1vdmUob2xkUHJvcHNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XS5hZGQobmV3UHJvcHNba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cnZleVtrZXldID0gbmV3UHJvcHNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHNldFN1cnZleUV2ZW50cygpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnN1cnZleS5yZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjb3VudGVyID1cbiAgICAgICAgISFzZWxmLnN0YXRlICYmICEhc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgPyBzZWxmLnN0YXRlLm1vZGVsQ2hhbmdlZCA6IDA7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgbW9kZWxDaGFuZ2VkOiBjb3VudGVyICsgMSB9KTtcbiAgICB9O1xuICAgIHRoaXMuc3VydmV5Lm9uUGFydGlhbFNlbmQuYWRkKChzZW5kZXIpID0+IHtcbiAgICAgIGlmICghIXNlbGYuc3RhdGUpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vSVN1cnZleUNyZWF0b3JcbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgIXF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZyB8fCBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICBjcmVhdG9yOiB0aGlzLFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHJlbmRlckVycm9yKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGVycm9yOiBTdXJ2ZXlFcnJvcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGtleT17a2V5fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVycm9yLmljb24gfHwgdW5kZWZpbmVkfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbSB8fCB1bmRlZmluZWR9PlxuICAgICAgICAgIDxTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIgbG9jU3RyPXtlcnJvci5sb2NUZXh0fSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3VydmV5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXksIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoS2V5MmNsaWNrKGVsZW1lbnQ6IEpTWC5FbGVtZW50LCB2aWV3TW9kZWw/OiBhbnksIG9wdGlvbnM6IElBdHRhY2hLZXkyY2xpY2tPcHRpb25zID0geyBwcm9jZXNzRXNjOiB0cnVlLCBkaXNhYmxlVGFiU3RvcDogZmFsc2UgfSk6IEpTWC5FbGVtZW50IHtcbiAgaWYgKCghIXZpZXdNb2RlbCAmJiB2aWV3TW9kZWwuZGlzYWJsZVRhYlN0b3ApIHx8ICghIW9wdGlvbnMgJiYgb3B0aW9ucy5kaXNhYmxlVGFiU3RvcCkpIHtcbiAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGVsZW1lbnQsIHsgdGFiSW5kZXg6IC0xIH0pO1xuICB9XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoXG4gICAgZWxlbWVudCxcbiAgICB7XG4gICAgICB0YWJJbmRleDogMCxcbiAgICAgIG9uS2V5VXA6IChldnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZG9LZXkyQ2xpY2tVcChldnQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgb25LZXlEb3duOiAoZXZ0OiBhbnkpID0+IGRvS2V5MkNsaWNrRG93bihldnQsIG9wdGlvbnMpLFxuICAgICAgb25CbHVyOiAoZXZ0OiBhbnkpID0+IGRvS2V5MkNsaWNrQmx1cihldnQpXG4gICAgfVxuICApO1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb25CYXNlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgdXBkYXRlOiAwIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzcztcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVN0YXRlRnVuY3Rpb246IGFueSA9IG51bGw7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLnNldFN0YXRlKHsgdXBkYXRlOiBzZWxmLnN0YXRlLnVwZGF0ZSArIDEgfSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQuYWRkKHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbik7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pIHtcbiAgICAgIHRoaXMuc3VydmV5Lm9uUGFnZVZpc2libGVDaGFuZ2VkLnJlbW92ZSh0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pO1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvZ3Jlc3NNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5TmF2aWdhdGlvbkJhc2UgfSBmcm9tIFwiLi9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9ncmVzcyBleHRlbmRzIFN1cnZleU5hdmlnYXRpb25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzVG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlzVG9wO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcHJvZ3Jlc3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1RleHQ7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgc3R5bGUgPSB0aGlzLmlzVG9wID8ge30gOiB7IG1hcmdpblRvcDogXCIxZW1cIiB9O1xuICAgIHZhciBwcm9ncmVzc1N0eWxlID0ge1xuICAgICAgd2lkdGg6IHRoaXMucHJvZ3Jlc3MgKyBcIiVcIixcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3N9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17cHJvZ3Jlc3NTdHlsZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQmFyfVxuICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgICAgYXJpYS12YWx1ZW1pbj17MH1cbiAgICAgICAgICBhcmlhLXZhbHVlbWF4PXsxMDB9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtTdXJ2ZXlQcm9ncmVzc01vZGVsLmdldFByb2dyZXNzVGV4dEluQmFyQ3NzKHRoaXMuY3NzKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9ncmVzc1RleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e1N1cnZleVByb2dyZXNzTW9kZWwuZ2V0UHJvZ3Jlc3NUZXh0VW5kZXJCYXJDc3ModGhpcy5jc3MpfVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucHJvZ3Jlc3NUZXh0fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtcHJvZ3Jlc3MtcGFnZXNcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xufSk7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXByb2dyZXNzLXF1ZXN0aW9uc1wiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG59KTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXByb2dyZXNzLWNvcnJlY3RRdWVzdGlvbnNcIixcbiAgcHJvcHMgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG4gIH1cbik7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wcm9ncmVzcy1yZXF1aXJlZFF1ZXN0aW9uc1wiLFxuICBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwsIFBhZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5TmF2aWdhdGlvbkJhc2UgfSBmcm9tIFwiLi9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMgZXh0ZW5kcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB7XG4gIHByaXZhdGUgcHJvZ3Jlc3NCdXR0b25zTW9kZWw6IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsO1xuICBwcml2YXRlIHVwZGF0ZVNjcm9sbGVyOiBhbnkgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgbGlzdENvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsID0gbmV3IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsKHRoaXMuc3VydmV5KTtcbiAgICB0aGlzLmxpc3RDb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldFNjcm9sbEJ1dHRvbkNzcyh0cnVlKX1cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5jbGlja1Njcm9sbEJ1dHRvbih0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudCwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyfVxuICAgICAgICAgICAgcmVmPXt0aGlzLmxpc3RDb250YWluZXJSZWZ9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdH0+XG4gICAgICAgICAgICAgIHt0aGlzLmdldExpc3RFbGVtZW50cygpfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0U2Nyb2xsQnV0dG9uQ3NzKGZhbHNlKX1cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5jbGlja1Njcm9sbEJ1dHRvbih0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudCwgZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldExpc3RFbGVtZW50cygpOiBKU1guRWxlbWVudFtdIHtcbiAgICBsZXQgYnV0dG9uczogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIHRoaXMuc3VydmV5LnZpc2libGVQYWdlcy5mb3JFYWNoKChwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGJ1dHRvbnMucHVzaCh0aGlzLnJlbmRlckxpc3RFbGVtZW50KHBhZ2UsIGluZGV4KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1dHRvbnM7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckxpc3RFbGVtZW50KHBhZ2U6IFBhZ2VNb2RlbCwgaW5kZXg6IG51bWJlcik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGxpXG4gICAgICAgIGtleT17XCJsaXN0ZWxlbWVudFwiICsgaW5kZXh9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRMaXN0RWxlbWVudENzcyhpbmRleCl9XG4gICAgICAgIG9uQ2xpY2s9e1xuICAgICAgICAgIHRoaXMuaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleClcbiAgICAgICAgICAgID8gKCkgPT4gdGhpcy5jbGlja0xpc3RFbGVtZW50KGluZGV4KVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGV9XG4gICAgICAgICAgdGl0bGU9e3BhZ2UubmF2aWdhdGlvblRpdGxlIHx8IHBhZ2UubmFtZX1cbiAgICAgICAgPlxuICAgICAgICAgIHtwYWdlLm5hdmlnYXRpb25UaXRsZSB8fCBwYWdlLm5hbWV9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb259XG4gICAgICAgICAgdGl0bGU9e3BhZ2UubmF2aWdhdGlvbkRlc2NyaXB0aW9ufVxuICAgICAgICA+XG4gICAgICAgICAge3BhZ2UubmF2aWdhdGlvbkRlc2NyaXB0aW9ufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldExpc3RFbGVtZW50Q3NzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xpY2tMaXN0RWxlbWVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5jbGlja0xpc3RFbGVtZW50KGluZGV4KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2Nyb2xsQnV0dG9uQ3NzKGlzTGVmdFNjcm9sbDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuZ2V0U2Nyb2xsQnV0dG9uQ3NzKHRoaXMuc3RhdGUuaGFzU2Nyb2xsZXIsIGlzTGVmdFNjcm9sbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsaWNrU2Nyb2xsQnV0dG9uKFxuICAgIGxpc3RDb250YWluZXJFbGVtZW50OiBFbGVtZW50LFxuICAgIGlzTGVmdFNjcm9sbDogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZighIWxpc3RDb250YWluZXJFbGVtZW50KSB7XG4gICAgICBsaXN0Q29udGFpbmVyRWxlbWVudC5zY3JvbGxMZWZ0ICs9IChpc0xlZnRTY3JvbGwgPyAtMSA6IDEpICogNzA7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU2Nyb2xsZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZighIXRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBoYXNTY3JvbGxlcjogdGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggPiB0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aCwgfSk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlU2Nyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVTY3JvbGxlcik7XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXByb2dyZXNzLWJ1dHRvbnNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzQnV0dG9ucywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleSB9IGZyb20gXCIuL3JlYWN0U3VydmV5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVdpbmRvdyBleHRlbmRzIFN1cnZleSB7XG4gIHByb3RlY3RlZCB3aW5kb3c6IFN1cnZleVdpbmRvd01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25FeHBhbmRlZCA9IHRoaXMuaGFuZGxlT25FeHBhbmRlZC5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICByZXR1cm4gW3RoaXMud2luZG93LCB0aGlzLndpbmRvdy5zdXJ2ZXldO1xuICB9XG4gIGhhbmRsZU9uRXhwYW5kZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMud2luZG93LmNoYW5nZUV4cGFuZENvbGxhcHNlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgdGhpcy53aW5kb3cuaXNTaG93aW5nO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaGVhZGVyID0gdGhpcy5yZW5kZXJXaW5kb3dIZWFkZXIoKTtcbiAgICB2YXIgYm9keSA9IHRoaXMud2luZG93LmlzRXhwYW5kZWQgPyB0aGlzLnJlbmRlckJvZHkoKSA6IG51bGw7XG4gICAgbGV0IHN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgIGJvdHRvbTogMyxcbiAgICAgIHJpZ2h0OiAxMCxcbiAgICAgIG1heFdpZHRoOiBcIjYwJVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLndpbmRvdy5jc3NSb290fSBzdHlsZT17c3R5bGV9PlxuICAgICAgICB7aGVhZGVyfVxuICAgICAgICB7Ym9keX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcldpbmRvd0hlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlQSA9IHsgd2lkdGg6IFwiMTAwJVwiLCBjdXJzb3I6IFwicG9pbnRlclwiIH07XG4gICAgdmFyIHN0eWxlVGl0bGUgPSB7IHBhZGRpbmdSaWdodDogXCIxMHB4XCIgfTtcbiAgICB2YXIgZ2x5cGhDbGFzc05hbWUgPSB0aGlzLndpbmRvdy5jc3NCdXR0b247XG4gICAgZ2x5cGhDbGFzc05hbWUgPSBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IFwiICsgZ2x5cGhDbGFzc05hbWU7XG4gICAgdmFyIHRpdGxlID0gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKHRoaXMuc3VydmV5LmxvY1RpdGxlKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0hlYWRlclJvb3R9PlxuICAgICAgICA8c3BhbiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uRXhwYW5kZWR9IHN0eWxlPXtzdHlsZUF9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy53aW5kb3cuY3NzSGVhZGVyVGl0bGV9IHN0eWxlPXtzdHlsZVRpdGxlfT5cbiAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnbHlwaENsYXNzTmFtZX0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy53aW5kb3cuaXNFeHBhbmRlZCA/IChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPbkV4cGFuZGVkfVxuICAgICAgICAgICAgc3R5bGU9e3sgZmxvYXQ6IFwicmlnaHRcIiwgY3Vyc29yOiBcInBvaW50ZXJcIiB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy53aW5kb3cuY3NzSGVhZGVyVGl0bGV9IHN0eWxlPXtzdHlsZVRpdGxlfT5cbiAgICAgICAgICAgICAgWFxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCb2R5KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMud2luZG93LmNzc0JvZHl9Pnt0aGlzLmRvUmVuZGVyKCl9PC9kaXY+O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkobmV3UHJvcHM6IGFueSkge1xuICAgIGlmICghbmV3UHJvcHMpIG5ld1Byb3BzID0ge307XG4gICAgc3VwZXIuY3JlYXRlU3VydmV5KG5ld1Byb3BzKTtcbiAgICB0aGlzLndpbmRvdyA9IG5ldyBTdXJ2ZXlXaW5kb3dNb2RlbChudWxsLCB0aGlzLnN1cnZleSk7XG4gICAgaWYgKG5ld1Byb3BzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQpIHtcbiAgICAgIHRoaXMud2luZG93LmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgPSBuZXdQcm9wcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0O1xuICAgIH1cbiAgICB0aGlzLndpbmRvdy5pc1Nob3dpbmcgPSB0cnVlO1xuICAgIGlmICghdGhpcy53aW5kb3cuaXNFeHBhbmRlZCAmJiAobmV3UHJvcHMuZXhwYW5kZWQgfHwgbmV3UHJvcHMuaXNFeHBhbmRlZCkpXG4gICAgICB0aGlzLndpbmRvdy5leHBhbmQoKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBCYXNlLFxuICBTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlFcnJvcixcbiAgUXVlc3Rpb24sXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gIFRvb2x0aXBNYW5hZ2VyLFxuICBTdXJ2ZXlNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UsIFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5Q3VzdG9tV2lkZ2V0IH0gZnJvbSBcIi4vY3VzdG9tLXdpZGdldFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEhlYWRlciB9IGZyb20gXCIuL2VsZW1lbnQtaGVhZGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3Ige1xuICBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQ7XG4gIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IsIGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50O1xuICBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nO1xuICBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGlzTmVlZEZvY3VzID0gZmFsc2U7XG4gIHB1YmxpYyBzdGF0aWMgcmVuZGVyUXVlc3Rpb25Cb2R5KFxuICAgIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblxuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFxdWVzdGlvbi5pc1Zpc2libGUpIHJldHVybiBudWxsO1xuICAgIHZhciBjdXN0b21XaWRnZXQgPSBxdWVzdGlvbi5jdXN0b21XaWRnZXQ7XG4gICAgaWYgKCFjdXN0b21XaWRnZXQpIHtcbiAgICAgIHJldHVybiBjcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiA8U3VydmV5Q3VzdG9tV2lkZ2V0IGNyZWF0b3I9e2NyZWF0b3J9IHF1ZXN0aW9uPXtxdWVzdGlvbn0gLz47XG4gIH1cbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbltcInJlYWN0XCJdID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uW1wicmVhY3RcIl0gPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwcml2YXRlIGRvQWZ0ZXJSZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNOZWVkRm9jdXMpIHtcbiAgICAgIGlmICghdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmNsaWNrVGl0bGVGdW5jdGlvbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5pc05lZWRGb2N1cyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZWwgJiYgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCIpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtbmFtZVwiLCB0aGlzLnF1ZXN0aW9uLm5hbWUpO1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5hZnRlclJlbmRlcikge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXIoZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmNhblJlbmRlcigpICYmXG4gICAgICAhIXRoaXMucXVlc3Rpb24gJiZcbiAgICAgICEhdGhpcy5jcmVhdG9yICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb25Db250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjb250ZW50U3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiAhdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCA/IFwiXCIgOiBcIm5vbmVcIixcbiAgICB9O1xuICAgIHZhciBjc3NDbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcXVlc3Rpb25SZW5kZXIgPSB0aGlzLnJlbmRlclF1ZXN0aW9uKCk7XG4gICAgdmFyIGVycm9yc1RvcCA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yT25Ub3BcbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJ0b3BcIilcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgZXJyb3JzQm90dG9tID0gdGhpcy5xdWVzdGlvbi5zaG93RXJyb3JPbkJvdHRvbVxuICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcImJvdHRvbVwiKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBjb21tZW50ID1cbiAgICAgIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLmhhc0NvbW1lbnQgPyB0aGlzLnJlbmRlckNvbW1lbnQoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IGVycm9yc1Rvb2x0aXAgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJ0b29sdGlwXCIpXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgZGVzY3JpcHRpb25VbmRlcklucHV0ID0gcXVlc3Rpb24uaGFzRGVzY3JpcHRpb25VbmRlcklucHV0XG4gICAgICA/IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ29udGVudCB8fCB1bmRlZmluZWR9XG4gICAgICAgIHN0eWxlPXtjb250ZW50U3R5bGV9XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICB7ZXJyb3JzVG9wfVxuICAgICAgICB7cXVlc3Rpb25SZW5kZXJ9XG4gICAgICAgIHtjb21tZW50fVxuICAgICAgICB7ZXJyb3JzQm90dG9tfVxuICAgICAgICB7ZXJyb3JzVG9vbHRpcH1cbiAgICAgICAge2Rlc2NyaXB0aW9uVW5kZXJJbnB1dH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIGNzc0NsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBoZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcihxdWVzdGlvbik7XG4gICAgdmFyIGhlYWRlclRvcCA9IHF1ZXN0aW9uLmhhc1RpdGxlT25MZWZ0VG9wID8gaGVhZGVyIDogbnVsbDtcbiAgICB2YXIgaGVhZGVyQm90dG9tID0gcXVlc3Rpb24uaGFzVGl0bGVPbkJvdHRvbSA/IGhlYWRlciA6IG51bGw7XG5cbiAgICBjb25zdCBlcnJvcnNBYm92ZVF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbi5zaG93RXJyb3JzQWJvdmVRdWVzdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcIlwiKVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgZXJyb3JzQmVsb3dRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yc0JlbG93UXVlc3Rpb25cbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJcIilcbiAgICAgIDogbnVsbDtcblxuICAgIGxldCByb290U3R5bGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdMZWZ0KSByb290U3R5bGVbXCJwYWRkaW5nTGVmdFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdMZWZ0O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdSaWdodClcbiAgICAgIHJvb3RTdHlsZVtcInBhZGRpbmdSaWdodFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdSaWdodDtcblxuICAgIGxldCBxdWVzdGlvbkNvbnRlbnQgPSB0aGlzLndyYXBRdWVzdGlvbkNvbnRlbnQodGhpcy5yZW5kZXJRdWVzdGlvbkNvbnRlbnQoKSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgICBpZD17cXVlc3Rpb24uaWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbi5nZXRSb290Q3NzKCl9XG4gICAgICAgICAgc3R5bGU9e3Jvb3RTdHlsZX1cbiAgICAgICAgICByb2xlPXtxdWVzdGlvbi5hcmlhUm9sZX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtxdWVzdGlvbi5oYXNUaXRsZSA/IHF1ZXN0aW9uLmFyaWFUaXRsZUlkIDogbnVsbH1cbiAgICAgICAgPlxuICAgICAgICAgIHtlcnJvcnNBYm92ZVF1ZXN0aW9ufVxuICAgICAgICAgIHtoZWFkZXJUb3B9XG4gICAgICAgICAge3F1ZXN0aW9uQ29udGVudH1cbiAgICAgICAgICB7aGVhZGVyQm90dG9tfVxuICAgICAgICAgIHtlcnJvcnNCZWxvd1F1ZXN0aW9ufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBFbGVtZW50KHN1cnZleSwgZWxlbWVudCwgdGhpcy5xdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBRdWVzdGlvbkNvbnRlbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcFF1ZXN0aW9uQ29udGVudChzdXJ2ZXksIGVsZW1lbnQsIHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGRlc2NyaXB0aW9uVGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMucXVlc3Rpb24ubG9jRGVzY3JpcHRpb25cbiAgICApO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NEZXNjcmlwdGlvbn0+e2Rlc2NyaXB0aW9uVGV4dH08L2Rpdj47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbW1lbnQoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjb21tZW50VGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMucXVlc3Rpb24ubG9jQ29tbWVudFRleHRcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvcm1Hcm91cH0+XG4gICAgICAgIDxkaXY+e2NvbW1lbnRUZXh0fTwvZGl2PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8U3VydmV5RWxlbWVudEhlYWRlciBlbGVtZW50PXtxdWVzdGlvbn0+PC9TdXJ2ZXlFbGVtZW50SGVhZGVyPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRXJyb3JzKGNzc0NsYXNzZXM6IGFueSwgbG9jYXRpb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17bG9jYXRpb259XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJxdWVzdGlvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb24sIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEVycm9ycyBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICB0aGlzLnRvb2x0aXBSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdGF0ZShwcmV2U3RhdGU6IGFueSA9IG51bGwpIHtcbiAgICByZXR1cm4gIXByZXZTdGF0ZSA/IHsgZXJyb3I6IDAgfSA6IHsgZXJyb3I6IHByZXZTdGF0ZS5lcnJvciArIDEgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZWxlbWVudCAmJiB0aGlzLmVsZW1lbnQuaGFzVmlzaWJsZUVycm9ycztcbiAgfVxuICBwcml2YXRlIHRvb2x0aXBNYW5hZ2VyOiBUb29sdGlwTWFuYWdlcjtcbiAgcHJpdmF0ZSB0b29sdGlwUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAodGhpcy5wcm9wcy5sb2NhdGlvbiA9PSBcInRvb2x0aXBcIikge1xuICAgICAgaWYgKHRoaXMudG9vbHRpcFJlZi5jdXJyZW50ICYmICF0aGlzLnRvb2x0aXBNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcE1hbmFnZXIgPSBuZXcgVG9vbHRpcE1hbmFnZXIodGhpcy50b29sdGlwUmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgaWYgKCEhdGhpcy50b29sdGlwTWFuYWdlciAmJiAhdGhpcy50b29sdGlwUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlVG9vbHRpcE1hbmFnZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKCEhdGhpcy50b29sdGlwTWFuYWdlcikge1xuICAgICAgdGhpcy5kaXNwb3NlVG9vbHRpcE1hbmFnZXIoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkaXNwb3NlVG9vbHRpcE1hbmFnZXIoKSB7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlci5kaXNwb3NlKCk7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlciA9IHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnQuZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IFwiZXJyb3JcIiArIGk7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgdGhpcy5jcmVhdG9yLnJlbmRlckVycm9yKGtleSwgdGhpcy5lbGVtZW50LmVycm9yc1tpXSwgdGhpcy5jc3NDbGFzc2VzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuZWxlbWVudC5jc3NFcnJvcn1cbiAgICAgICAgaWQ9e3RoaXMuaWR9XG4gICAgICAgIHJlZj17dGhpcy50b29sdGlwUmVmfVxuICAgICAgPlxuICAgICAgICB7ZXJyb3JzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbUNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW1Dc3M7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9BZnRlclJlbmRlcigpIHsgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhlcnJvcnNMb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0Vycm9ycygpID8gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGxvY2F0aW9uPXtlcnJvcnNMb2NhdGlvbn1cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBlcnJvcnNMb2NhdGlvbiA9IHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKTtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5yZW5kZXJFcnJvcnMoZXJyb3JzTG9jYXRpb24pO1xuICAgIHZhciBlcnJvcnNUb3AgPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uVG9wXG4gICAgICA/IGVycm9yc1xuICAgICAgOiBudWxsO1xuICAgIHZhciBlcnJvcnNCb3R0b20gPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uQm90dG9tXG4gICAgICA/IGVycm9yc1xuICAgICAgOiBudWxsO1xuICAgIHZhciByZW5kZXJlZFF1ZXN0aW9uID0gdGhpcy5yZW5kZXJRdWVzdGlvbigpO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7ZXJyb3JzVG9wfVxuICAgICAgICB7cmVuZGVyZWRRdWVzdGlvbn1cbiAgICAgICAge2Vycm9yc0JvdHRvbX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQ7XG4gIHByb3RlY3RlZCBnZXRTaG93RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIHtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIHByb3RlY3RlZCBjZWxsUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY2VsbFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuY2VsbFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZSA9IHRoaXMuZ2V0Q2VsbFN0eWxlKCk7XG4gICAgdmFyIGVycm9yc1Rvb2x0aXAgPSB0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXBcbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoXCJ0b29sdGlwXCIpXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZFxuICAgICAgICByZWY9e3RoaXMuY2VsbFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW1Dc3N9XG4gICAgICAgIGRhdGEtcmVzcG9uc2l2ZS10aXRsZT17dGhpcy5nZXRIZWFkZXJUZXh0KCl9XG4gICAgICAgIHRpdGxlPXt0aGlzLnByb3BzLmNlbGwuZ2V0VGl0bGUoKX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgPlxuICAgICAgICB7dGhpcy53cmFwQ2VsbCh0aGlzLnByb3BzLmNlbGwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jZWxsUXVlc3Rpb25XcmFwcGVyfT5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ29udGVudCgpfVxuICAgICAgICAgICAgICB7ZXJyb3JzVG9vbHRpcH1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgKX1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2VsbFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcENlbGwoXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgICBlbGVtZW50OiBKU1guRWxlbWVudFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFjZWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcE1hdHJpeENlbGwoc3VydmV5LCBlbGVtZW50LCBjZWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwsXG4gIEJ1dHRvbkdyb3VwSXRlbVZhbHVlLFxuICBCdXR0b25Hcm91cEl0ZW1Nb2RlbCxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsO1xuICB9XG4gIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9PntpdGVtc308L2Rpdj47XG4gIH1cbiAgcmVuZGVySXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgKGl0ZW06IEJ1dHRvbkdyb3VwSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFN1cnZleUJ1dHRvbkdyb3VwSXRlbVxuICAgICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgID48L1N1cnZleUJ1dHRvbkdyb3VwSXRlbT5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlCdXR0b25Hcm91cEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwdWJsaWMgbW9kZWw6IEJ1dHRvbkdyb3VwSXRlbU1vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIGdldCBpdGVtKCk6IEJ1dHRvbkdyb3VwSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFbGVtZW50KCkge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgQnV0dG9uR3JvdXBJdGVtTW9kZWwodGhpcy5xdWVzdGlvbiwgdGhpcy5pdGVtLCB0aGlzLmluZGV4KTtcbiAgICBjb25zdCBpY29uID0gdGhpcy5yZW5kZXJJY29uKCk7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgY29uc3QgY2FwdGlvbiA9IHRoaXMucmVuZGVyQ2FwdGlvbigpO1xuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWxcbiAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5sYWJlbH1cbiAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuY2FwdGlvbi5yZW5kZXJlZEh0bWx9XG4gICAgICA+XG4gICAgICAgIHtpbnB1dH1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmRlY29yYXRvcn0+XG4gICAgICAgICAge2ljb259XG4gICAgICAgICAge2NhcHRpb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJY29uKCkge1xuICAgIGlmICghIXRoaXMubW9kZWwuaWNvbk5hbWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5pY29ufVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLmljb25OYW1lfVxuICAgICAgICAgIHNpemU9e3RoaXMubW9kZWwuaWNvblNpemUgfHwgMjR9XG4gICAgICAgID48L1N2Z0ljb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmNvbnRyb2x9XG4gICAgICAgIGlkPXt0aGlzLm1vZGVsLmlkfVxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBuYW1lPXt0aGlzLm1vZGVsLm5hbWV9XG4gICAgICAgIGNoZWNrZWQ9e3RoaXMubW9kZWwuc2VsZWN0ZWR9XG4gICAgICAgIHZhbHVlPXt0aGlzLm1vZGVsLnZhbHVlfVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5tb2RlbC5yZWFkT25seX1cbiAgICAgICAgb25DaGFuZ2U9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLm9uQ2hhbmdlKCk7XG4gICAgICAgIH19XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMubW9kZWwuaXNSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLm1vZGVsLmhhc0Vycm9yc31cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5tb2RlbC5kZXNjcmliZWRCeX1cbiAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2FwdGlvbigpIHtcbiAgICBpZiAoIXRoaXMubW9kZWwuc2hvd0NhcHRpb24pIHJldHVybiBudWxsO1xuICAgIGxldCBjYXB0aW9uID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tb2RlbC5jYXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5jYXB0aW9ufVxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgID5cbiAgICAgICAge2NhcHRpb259XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYnV0dG9uZ3JvdXBcIiwgcHJvcHMgPT4ge1xuLy8gICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBwcm9wcyk7XG4vLyB9KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9jaGVja2JveFwiO1xuaW1wb3J0IHsgQmFzZSwgSXRlbVZhbHVlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DaGVja2JveCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25DaGVja2JveE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0U2VsZWN0QmFzZVJvb3RDc3MoKX1cbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLmNvbnRyb2wgPSBmaWVsZHNldCl9XG4gICAgICA+XG4gICAgICAgIDxsZWdlbmQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT17XCJzdi1oaWRkZW5cIn0+PC9sZWdlbmQ+XG4gICAgICAgIHt0aGlzLmdldEhlYWRlcigpfVxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5oYXNDb2x1bW5zXG4gICAgICAgICAgPyB0aGlzLmdldENvbHVtbmVkQm9keShjc3NDbGFzc2VzKVxuICAgICAgICAgIDogdGhpcy5nZXRCb2R5KGNzc0NsYXNzZXMpfVxuICAgICAgICB7dGhpcy5nZXRGb290ZXIoKX1cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzT3RoZXIgJiYgdGhpcy5xdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZCh0aGlzLnF1ZXN0aW9uLm90aGVySXRlbSkgPyB0aGlzLnJlbmRlck90aGVyKCkgOiBudWxsfVxuICAgICAgPC9maWVsZHNldD5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEhlYWRlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNIZWFkSXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmhlYWRJdGVtcy5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbV9oXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRGb290ZXIoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzRm9vdEl0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5mb290SXRlbXMubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBcIml0ZW1fZlwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1uZWRCb2R5KGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290TXVsdGlDb2x1bW59PlxuICAgICAgICB7dGhpcy5nZXRDb2x1bW5zKGNzc0NsYXNzZXMpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjaSA9PT0gMCAmJiBpaSA9PT0gMCxcbiAgICAgICAgICBjc3NDbGFzc2VzLFxuICAgICAgICAgIFwiXCIgKyBjaSArIGlpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEJvZHkoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmKHRoaXMucXVlc3Rpb24uYmxvY2tlZFJvdykge1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3RSb3d9Pnt0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMsIHRoaXMucXVlc3Rpb24uZGF0YUNob2ljZXMpfTwvZGl2PjtcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gPD57dGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzLCB0aGlzLnF1ZXN0aW9uLmJvZHlJdGVtcyl9PC8+O1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnksIGNob2ljZXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVuZGVyZWRJdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBjaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiaXRlbVwiICsgaTtcbiAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlckl0ZW0oa2V5LCBpdGVtLCBpID09IDAsIGNzc0NsYXNzZXMsIFwiXCIgKyBpKTtcbiAgICAgIHJlbmRlcmVkSXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRJdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBhbnksXG4gICAgaXNGaXJzdDogYm9vbGVhbixcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaW5kZXg6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICB0ZXh0U3R5bGU9e3RoaXMudGV4dFN0eWxlfVxuICAgICAgICBpc0ZpcnN0PXtpc0ZpcnN0fVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0U3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0ZpcnN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNGaXJzdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaGlkZUNhcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZUNhcHRpb24gPT09IHRydWU7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB2YXIgbmV3VmFsdWUgPSBbXS5jb25jYXQodGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIHx8IFtdKTtcbiAgICB2YXIgaW5kZXggPSBuZXdWYWx1ZS5pbmRleE9mKHRoaXMuaXRlbS52YWx1ZSk7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2godGhpcy5pdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgc2VsZWN0QWxsQ2hhbmdlZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi50b2dnbGVTZWxlY3RBbGwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbSAmJiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2hlY2tib3goaXNDaGVja2VkLCBudWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlucHV0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgbWFyZ2luUmlnaHQ6IFwiM3B4XCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2hlY2tib3goXG4gICAgaXNDaGVja2VkOiBib29sZWFuLFxuICAgIG90aGVySXRlbTogSlNYLkVsZW1lbnRcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpZCA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKHRoaXMuaXRlbSk7XG4gICAgdmFyIHRleHQgPSAhdGhpcy5oaWRlQ2FwdGlvbiA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0KSA6IFwiXCI7XG4gICAgbGV0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XG4gICAgbGV0IGxhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgb25JdGVtQ2hhbmdlZCA9XG4gICAgICB0aGlzLml0ZW0gPT0gdGhpcy5xdWVzdGlvbi5zZWxlY3RBbGxJdGVtXG4gICAgICAgID8gdGhpcy5zZWxlY3RBbGxDaGFuZ2VkXG4gICAgICAgIDogdGhpcy5oYW5kbGVPbkNoYW5nZTtcblxuICAgIHZhciBsb2NUZXh0OiBhbnkgPSB0aGlzLml0ZW0ubG9jVGV4dDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17aXRlbUNsYXNzfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2xhYmVsQ2xhc3N9IGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uZ2V0QXJpYUl0ZW1MYWJlbCh0aGlzLml0ZW0pfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udmFsdWUgIT0gXCJzZWxlY3RhbGxcIiA/IHRoaXMuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLmlucHV0U3R5bGV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkl0ZW1DaGFuZ2VkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgP1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPiA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsfT5cbiAgICAgICAgICAgIHt0ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAge290aGVySXRlbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNoZWNrYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50LCBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ29tbWVudE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uQ29tbWVudE1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBvbkJsdXIgPSAhdGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSA/IHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50IDogbnVsbDtcbiAgICB2YXIgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZXZlbnQpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB9O1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlaG9sZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jbGFzc05hbWV9XG4gICAgICAgIGRpc2FibGVkPXsgdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfVxuICAgICAgICByZWFkT25seT17IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH1cbiAgICAgICAgcmVmPXsodGV0eGFyZWEpID0+ICh0aGlzLmNvbnRyb2wgPSB0ZXR4YXJlYSl9XG4gICAgICAgIG1heExlbmd0aD17dGhpcy5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHsgdGhpcy5xdWVzdGlvbi5vbktleURvd24oZXZlbnQpOyB9fVxuICAgICAgICBjb2xzPXt0aGlzLnF1ZXN0aW9uLmNvbHN9XG4gICAgICAgIHJvd3M9e3RoaXMucXVlc3Rpb24ucm93c31cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICBzdHlsZT17eyByZXNpemU6IHRoaXMucXVlc3Rpb24ucmVzaXplU3R5bGUgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgICBsZXQgY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5vdGhlckNzcyB8fCB0aGlzLmNzc0NsYXNzZXMuY29tbWVudDtcbiAgICBsZXQgaGFuZGxlT25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbW1lbnQ6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcbiAgICAgIHF1ZXN0aW9uLm9uQ29tbWVudENoYW5nZShldmVudCk7XG4gICAgfTtcbiAgICBsZXQgc3RhdGVDb21tZW50OiBzdHJpbmcgPSAhIXRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLmNvbW1lbnQgOiB1bmRlZmluZWQ7XG4gICAgaWYoc3RhdGVDb21tZW50ICE9PSB1bmRlZmluZWQgJiYgc3RhdGVDb21tZW50LnRyaW0oKSAhPT0gcXVlc3Rpb24uY29tbWVudCkge1xuICAgICAgc3RhdGVDb21tZW50ID0gcXVlc3Rpb24uY29tbWVudDtcbiAgICB9XG4gICAgbGV0IGNvbW1lbnQgPSBzdGF0ZUNvbW1lbnQgIT09IHVuZGVmaW5lZCA/IHN0YXRlQ29tbWVudCA6IHF1ZXN0aW9uLmNvbW1lbnQgfHwgXCJcIjtcblxuICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pntjb21tZW50fTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgdmFsdWU9e2NvbW1lbnR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIG1heExlbmd0aD17cXVlc3Rpb24uZ2V0T3RoZXJzTWF4TGVuZ3RoKCl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtxdWVzdGlvbi5jb21tZW50T3JPdGhlclBsYWNlSG9sZGVyfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlT25DaGFuZ2V9XG4gICAgICAgIG9uQmx1cj17KGUpID0+IHsgcXVlc3Rpb24ub25Db21tZW50Q2hhbmdlKGUpOyBoYW5kbGVPbkNoYW5nZShlKTsgfSB9XG4gICAgICAgIG9uSW5wdXQ9eyhlKSA9PiBxdWVzdGlvbi5vbkNvbW1lbnRJbnB1dChlKX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17cXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17cXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICBzdHlsZT17eyByZXNpemU6IHF1ZXN0aW9uLnJlc2l6ZVN0eWxlIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ29tbWVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbkN1c3RvbU1vZGVsLCBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DdXN0b20gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25DdXN0b21Nb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICBjb25zdCByZXMgPSBzdXBlci5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgaWYoISF0aGlzLnF1ZXN0aW9uLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgcmVzLnB1c2godGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb24ucmVuZGVyUXVlc3Rpb25Cb2R5KFxuICAgICAgdGhpcy5jcmVhdG9yLFxuICAgICAgdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb25cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlQYW5lbFxuICAgICAgICBlbGVtZW50PXt0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbH1cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgPjwvU3VydmV5UGFuZWw+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY3VzdG9tXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkN1c3RvbSwgcHJvcHMpO1xufSk7XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY29tcG9zaXRlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9kcm9wZG93bi1iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb24+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJkcm9wZG93blwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Ecm9wZG93biwgcHJvcHMpO1xufSk7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnQgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgQmFzZSwgQXJyYXlDaGFuZ2VzLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50QmFzZTxQLCBTPiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQLCBTPiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVuZGVyTG9jU3RyaW5nKFxuICAgIGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcsXG4gICAgc3R5bGU6IGFueSA9IG51bGwsXG4gICAga2V5Pzogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGxvY1N0ci5yZW5kZXJBcywge1xuICAgICAgbG9jU3RyOiBsb2NTdHIucmVuZGVyQXNEYXRhLFxuICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAga2V5OiBrZXksXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBjaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tYWtlQmFzZUVsZW1lbnRzUmVhY3QoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnVuTWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHRoaXMubWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfYWxsb3dDb21wb25lbnRVcGRhdGUgPSB0cnVlO1xuICBwcm90ZWN0ZWQgYWxsb3dDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGUgPSB0cnVlO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZGVueUNvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hbGxvd0NvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xuICB9XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6YW55LCBuZXh0U3RhdGU6YW55KTpib29sZWFuIHtcbiAgICBpZih0aGlzLl9hbGxvd0NvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGU7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuY2FuUmVuZGVyKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRFbmRSZW5kZXJpbmcoMSk7XG4gICAgdmFyIHJlcyA9IHRoaXMucmVuZGVyRWxlbWVudCgpO1xuICAgIHRoaXMuc3RhcnRFbmRSZW5kZXJpbmcoLTEpO1xuXG4gICAgcmVzID0gdGhpcy53cmFwRWxlbWVudChyZXMpO1xuXG4gICAgdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgdmFyIHN0YXRlRWxzOiBBcnJheTxhbnk+ID0gdGhpcy5nZXRSZW5kZXJlZEVsZW1lbnRzKCk7XG4gICAgZm9yKGxldCBzdGF0ZUVsIG9mIHN0YXRlRWxzKSB7XG4gICAgICBpZihzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nID4gMCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRFbGVtZW50cygpOiBCYXNlW10ge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXRlRWxlbWVudHMoKTtcbiAgfVxuICBwcml2YXRlIHN0YXJ0RW5kUmVuZGVyaW5nKHZhbDogbnVtYmVyKSB7XG4gICAgdmFyIHN0YXRlRWxzOiBBcnJheTxhbnk+ID0gdGhpcy5nZXRSZW5kZXJlZEVsZW1lbnRzKCk7XG4gICAgZm9yKGxldCBzdGF0ZUVsIG9mIHN0YXRlRWxzKSB7XG4gICAgICBpZiAoIXN0YXRlRWwucmVhY3RSZW5kZXJpbmcpIHN0YXRlRWwucmVhY3RSZW5kZXJpbmcgPSAwO1xuICAgICAgc3RhdGVFbC5yZWFjdFJlbmRlcmluZyArPSB2YWw7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY2hhbmdlZFN0YXRlUHJvcE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlO1xuICB9XG4gIHByaXZhdGUgbWFrZUJhc2VFbGVtZW50c1JlYWN0KCkge1xuICAgIHZhciBlbHMgPSB0aGlzLmdldFN0YXRlRWxlbWVudHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tYWtlQmFzZUVsZW1lbnRSZWFjdChlbHNbaV0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHVuTWFrZUJhc2VFbGVtZW50c1JlYWN0KCkge1xuICAgIHZhciBlbHMgPSB0aGlzLmdldFN0YXRlRWxlbWVudHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudFJlYWN0KGVsc1tpXSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICB2YXIgZWwgPSB0aGlzLmdldFN0YXRlRWxlbWVudCgpO1xuICAgIHJldHVybiAhIWVsID8gW2VsXSA6IFtdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByb3BzOiBhbnkgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiBwcm9wcy5pc0Rpc3BsYXlNb2RlIHx8IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJMb2NTdHJpbmcoXG4gICAgbG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyxcbiAgICBzdHlsZTogYW55ID0gbnVsbFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhsb2NTdHIsIHN0eWxlKTtcbiAgfVxuICBwcml2YXRlIGNhbk1ha2VSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFzdGF0ZUVsZW1lbnQgJiYgISFzdGF0ZUVsZW1lbnQuaXRlcmF0ZVByb3BlcnRpZXNIYXNoO1xuICB9XG4gIHByaXZhdGUgbWFrZUJhc2VFbGVtZW50UmVhY3Qoc3RhdGVFbGVtZW50OiBCYXNlKSB7XG4gICAgaWYgKCF0aGlzLmNhbk1ha2VSZWFjdChzdGF0ZUVsZW1lbnQpKSByZXR1cm47XG4gICAgc3RhdGVFbGVtZW50Lml0ZXJhdGVQcm9wZXJ0aWVzSGFzaCgoaGFzaCwga2V5KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2FuVXNlUHJvcEluU3RhdGUoa2V5KSkgcmV0dXJuO1xuICAgICAgdmFyIHZhbDogYW55ID0gaGFzaFtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgdmFsOiBhbnkgPSB2YWw7XG4gICAgICAgIHZhbFtcIm9uQXJyYXlDaGFuZ2VkXCJdID0gKGFycmF5Q2hhbmdlczogQXJyYXlDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICAgICAgICB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWUgPSBrZXk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdmFyIG5ld1N0YXRlOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgICAgIG5ld1N0YXRlW2tleV0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gbmV3U3RhdGUgYXMgUztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzdGF0ZUVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyID0gKFxuICAgICAgaGFzaDogYW55LFxuICAgICAga2V5OiBzdHJpbmcsXG4gICAgICB2YWw6IGFueVxuICAgICkgPT4ge1xuICAgICAgaWYgKGhhc2hba2V5XSAhPT0gdmFsKSB7XG4gICAgICAgIGhhc2hba2V5XSA9IHZhbDtcbiAgICAgICAgaWYgKCF0aGlzLmNhblVzZVByb3BJblN0YXRlKGtleSkpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlID0ga2V5O1xuICAgICAgICB0aGlzLnNldFN0YXRlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgdmFyIG5ld1N0YXRlOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gdmFsO1xuICAgICAgICAgIHJldHVybiBuZXdTdGF0ZSBhcyBTO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBjYW5Vc2VQcm9wSW5TdGF0ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgdW5NYWtlQmFzZUVsZW1lbnRSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpIHtcbiAgICBpZiAoIXRoaXMuY2FuTWFrZVJlYWN0KHN0YXRlRWxlbWVudCkpIHJldHVybjtcbiAgICBzdGF0ZUVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyID0gdW5kZWZpbmVkO1xuICAgIHN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2gsIGtleSkgPT4ge1xuICAgICAgdmFyIHZhbDogYW55ID0gaGFzaFtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgdmFsOiBhbnkgPSB2YWw7XG4gICAgICAgIHZhbFtcIm9uQXJyYXlDaGFuZ2VkXCJdID0gKCkgPT4ge307XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5RWxlbWVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnRyb2w6IEhUTUxFbGVtZW50O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uQmFzZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudCh0aGlzLmNvbnRyb2wpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLmNvbnRyb2w7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIikge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIsIFwiclwiKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uQmFzZSgpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudHMoKTogQmFzZVtdIHtcbiAgICByZXR1cm4gW3RoaXMucXVlc3Rpb25CYXNlXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uQmFzZSAmJiAhIXRoaXMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LndpZGdldEpzb24uaXNEZWZhdWx0UmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlclxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByb3BzOiBhbnkgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICBwcm9wcy5pc0Rpc3BsYXlNb2RlIHx8XG4gICAgICAoISF0aGlzLnF1ZXN0aW9uQmFzZSAmJiB0aGlzLnF1ZXN0aW9uQmFzZS5pc0lucHV0UmVhZE9ubHkpIHx8IGZhbHNlXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcENlbGwoXG4gICAgY2VsbDogYW55LFxuICAgIGVsZW1lbnQ6IEpTWC5FbGVtZW50LFxuICAgIHJlYXNvbjogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uQmFzZVxuICAgICAgLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBNYXRyaXhDZWxsKHN1cnZleSwgZWxlbWVudCwgY2VsbCwgcmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFxuICBUIGV4dGVuZHMgUXVlc3Rpb25cbj4gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudCA9IHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50LmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgVDtcbiAgfVxuICB1cGRhdGVWYWx1ZU9uRXZlbnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGlmIChcbiAgICAgICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModGhpcy5xdWVzdGlvbkJhc2UudmFsdWUsIGV2ZW50LnRhcmdldC52YWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgfVxuICB9O1xuICBwcm90ZWN0ZWQgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uQmFzZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UudmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250cm9sKSB7XG4gICAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmNvbnRyb2w7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVDb3JlKCk7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgY29udHJvbC52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbCkpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FbXB0eU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FbXB0eSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkVtcHR5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkVtcHR5TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IC8+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJlbXB0eVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25FbXB0eSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FeHByZXNzaW9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH1cbiAgICAgICAgcmVmPXsoZGl2KSA9PiAodGhpcy5jb250cm9sID0gZGl2KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uZm9ybWF0ZWRWYWx1ZX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImV4cHJlc3Npb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRXhwcmVzc2lvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0UXVlc3Rpb25GYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVhY3RRdWVzdGlvbkZhY3RvcnkgPSBuZXcgUmVhY3RRdWVzdGlvbkZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50PiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlclF1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdID0gcXVlc3Rpb25DcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3JlYXRvciA9IHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXTtcbiAgICBpZiAoY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRvcihwYXJhbXMpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmlsZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkZpbGUgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uRmlsZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25GaWxlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBwcmV2aWV3ID0gdGhpcy5yZW5kZXJQcmV2aWV3KCk7XG4gICAgdmFyIGZpbGVJbnB1dCA9IG51bGw7XG4gICAgdmFyIGZpbGVEZWNvcmF0b3IgPSB0aGlzLnJlbmRlckZpbGVEZWNvcmF0b3IoKTtcbiAgICB2YXIgY2xlYXJCdXR0b24gPSB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKFxuICAgICAgdGhpcy5xdWVzdGlvbi5zaG93UmVtb3ZlQnV0dG9uXG4gICAgKTtcbiAgICB2YXIgY2xlYXJCdXR0b25Cb3R0b20gPSB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKFxuICAgICAgdGhpcy5xdWVzdGlvbi5zaG93UmVtb3ZlQnV0dG9uQm90dG9tXG4gICAgKTtcblxuICAgIGxldCBtb2JpbGVGaWxlTmF2aWdhdG9yID0gdGhpcy5xdWVzdGlvbi5tb2JpbGVGaWxlTmF2aWdhdG9yVmlzaWJsZT8oPFN1cnZleUFjdGlvbkJhciBtb2RlbCA9IHt0aGlzLnF1ZXN0aW9uLm1vYmlsZUZpbGVOYXZpZ2F0b3J9PjwvU3VydmV5QWN0aW9uQmFyPik6bnVsbDtcbiAgICBmaWxlSW5wdXQgPSAoXG4gICAgICB0aGlzLmlzRGlzcGxheU1vZGUgP1xuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICBjbGFzc05hbWU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUlucHV0IDogdGhpcy5xdWVzdGlvbi5nZXRSZWFkT25seUZpbGVDc3MoKX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgIHJlZj17aW5wdXQgPT4gKHRoaXMuY29udHJvbCA9IGlucHV0KX1cbiAgICAgICAgICBzdHlsZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHt9IDogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmRvQ2hhbmdlIDogbnVsbH1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnF1ZXN0aW9uLnRpdGxlfVxuICAgICAgICAgIGFjY2VwdD17dGhpcy5xdWVzdGlvbi5hY2NlcHRlZFR5cGVzfVxuICAgICAgICAvPlxuICAgICAgICA6XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNsYXNzTmFtZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQgOiB0aGlzLnF1ZXN0aW9uLmdldFJlYWRPbmx5RmlsZUNzcygpfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgcmVmPXtpbnB1dCA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICAgIHN0eWxlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8ge30gOiB7IGNvbG9yOiBcInRyYW5zcGFyZW50XCIgfX1cbiAgICAgICAgICBvbkNoYW5nZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uZG9DaGFuZ2UgOiBudWxsfVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VGl0bGV9XG4gICAgICAgICAgYWNjZXB0PXt0aGlzLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXN9XG4gICAgICAgIC8+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZmlsZVJvb3RDc3N9PlxuICAgICAgICB7ZmlsZUlucHV0fVxuICAgICAgICB7ZmlsZURlY29yYXRvcn1cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgICB7cHJldmlld31cbiAgICAgICAge2NsZWFyQnV0dG9uQm90dG9tfVxuICAgICAgICB7bW9iaWxlRmlsZU5hdmlnYXRvcn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZpbGVEZWNvcmF0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uQ3NzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGxldCBub0ZpbGVDaG9zZW4gPSBudWxsO1xuICAgIGxldCBjaG9vc2VGaWxlID0gbnVsbDtcbiAgICBjaG9vc2VGaWxlID0gKFxuICAgICAgPGxhYmVsXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q2hvb3NlRmlsZUNzcygpfVxuICAgICAgICBodG1sRm9yPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn1cbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn08L3NwYW4+XG4gICAgICAgIHsoISF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUljb25JZCkgPyA8U3ZnSWNvbiB0aXRsZT17dGhpcy5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9ufSBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGVJY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+OiBudWxsIH1cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgIG5vRmlsZUNob3NlbiA9IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9GaWxlQ2hvc2VufT5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5ub0ZpbGVDaG9zZW5DYXB0aW9ufVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RmlsZURlY29yYXRvckNzcygpfVxuICAgICAgICBvbkRyb3A9e3RoaXMucXVlc3Rpb24ub25Ecm9wfVxuICAgICAgICBvbkRyYWdPdmVyPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ092ZXJ9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ0xlYXZlfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kcmFnQXJlYVBsYWNlaG9sZGVyfT57dGhpcy5xdWVzdGlvbi5kcmFnQXJlYVBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy53cmFwcGVyfT5cbiAgICAgICAgICB7Y2hvb3NlRmlsZX1cbiAgICAgICAgICB7bm9GaWxlQ2hvc2VufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNsZWFyQnV0dG9uKGNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBjbGFzc05hbWUgPyAoXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLnF1ZXN0aW9uLmRvQ2xlYW59IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPHNwYW4+e3RoaXMucXVlc3Rpb24uY2xlYW5CdXR0b25DYXB0aW9ufTwvc3Bhbj5cbiAgICAgICAgeyghIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25JY29uSWQpID8gPFN2Z0ljb24gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25JY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+OiBudWxsIH1cbiAgICAgIDwvYnV0dG9uPlxuICAgICkgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGaWxlU2lnbihjbGFzc05hbWU6IHN0cmluZywgdmFsOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYoIWNsYXNzTmFtZSB8fCAhdmFsLm5hbWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPGFcbiAgICAgICAgICBocmVmPXt2YWwuY29udGVudH1cbiAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmRvRG93bmxvYWRGaWxlKGV2ZW50LCB2YWwpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgdGl0bGU9e3ZhbC5uYW1lfVxuICAgICAgICAgIGRvd25sb2FkPXt2YWwubmFtZX1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aDogdGhpcy5xdWVzdGlvbi5pbWFnZVdpZHRoUmVuZGVyZWQgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt2YWwubmFtZX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUHJldmlldygpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZSB8fCAhdGhpcy5xdWVzdGlvbi5wcmV2aWV3VmFsdWUubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcHJldmlld3MgPSB0aGlzLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZS5tYXAoKHZhbCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghdmFsKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByZXZpZXd9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogdGhpcy5xdWVzdGlvbi5pc1ByZXZpZXdWaXNpYmxlKGluZGV4KSA/IHVuZGVmaW5lZCA6IFwibm9uZVwiIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJGaWxlU2lnbih0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZVNpZ24sIHZhbCl9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZVdyYXBwZXJ9PlxuICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uY2FuUHJldmlld0ltYWdlKHZhbCkgPyAoXG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9e3ZhbC5jb250ZW50fVxuICAgICAgICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5pbWFnZUhlaWdodH1cbiAgICAgICAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5pbWFnZVdpZHRofVxuICAgICAgICAgICAgICAgIGFsdD1cIkZpbGUgcHJldmlld1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kZWZhdWx0SW1hZ2U/KFxuICAgICAgICAgICAgICA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRlZmF1bHRJbWFnZUljb25JZH0gc2l6ZT17XCJhdXRvXCJ9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRlZmF1bHRJbWFnZX0+PC9TdmdJY29uPlxuICAgICAgICAgICAgKTpudWxsKX1cbiAgICAgICAgICAgIHt2YWwubmFtZSAmJiAhdGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5ID8gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVCdXR0b259IG9uQ2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uZG9SZW1vdmVGaWxlKHZhbCl9PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLnJlbW92ZUZpbGVDYXB0aW9ufVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7KHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnSWNvbklkKSA/XG4gICAgICAgICAgICAgICAgICAoPFN2Z0ljb24gdGl0bGU9e3RoaXMucXVlc3Rpb24ucmVtb3ZlRmlsZUNhcHRpb259IGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZVN2Z0ljb25JZH0gc2l6ZT17XCJhdXRvXCJ9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmd9PjwvU3ZnSWNvbj4pOiBudWxsIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJGaWxlU2lnbih0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZVNpZ25Cb3R0b20sIHZhbCl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUxpc3QgfHwgdW5kZWZpbmVkfT57cHJldmlld3N9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJmaWxlXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25GaWxlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25IdG1sTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkh0bWwgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSHRtbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25IdG1sTW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSHRtbC5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgcmVhY3RPblN0ckNoYW5nZWQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NIdG1sLm9uQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjaGFuZ2VkOiAhIXRoaXMuc3RhdGUgJiYgdGhpcy5zdGF0ZS5jaGFuZ2VkID8gdGhpcy5zdGF0ZS5jaGFuZ2VkICsgMSA6IDEgfSk7XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMucXVlc3Rpb24uaHRtbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnF1ZXN0aW9uLmxvY0h0bWwucmVuZGVyZWRIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLnJlbmRlckNzc1Jvb3R9XG4gICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImh0bWxcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSHRtbCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNYXRyaXhSb3dNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgcm93c0NoYW5nZWQ6IDAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk1hdHJpeE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7IHJvd3NDaGFuZ2VkOiBzZWxmLnN0YXRlLnJvd3NDaGFuZ2VkICsgMSB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcm93c1RIID0gdGhpcy5xdWVzdGlvbi5oYXNSb3dzID8gPHRkIC8+IDogbnVsbDtcbiAgICB2YXIgaGVhZGVycyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XG4gICAgICB2YXIgY29sdW1UZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoY29sdW1uLmxvY1RleHQpO1xuICAgICAgaGVhZGVycy5wdXNoKFxuICAgICAgICA8dGggY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbH0ga2V5PXtrZXl9PlxuICAgICAgICAgIHt0aGlzLndyYXBDZWxsKHsgY29sdW1uOiBjb2x1bW4gfSwgY29sdW1UZXh0LCBcImNvbHVtbi1oZWFkZXJcIil9XG4gICAgICAgIDwvdGg+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciB2aXNpYmxlUm93cyA9IHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHZpc2libGVSb3dzW2ldO1xuICAgICAgdmFyIGtleSA9IFwicm93LVwiICsgcm93Lm5hbWUgKyBcIi1cIiArIGk7XG4gICAgICByb3dzLnB1c2goXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeFJvd1xuICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIHJvdz17cm93fVxuICAgICAgICAgIGlzRmlyc3Q9e2kgPT0gMH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHZhciBoZWFkZXIgPSAhdGhpcy5xdWVzdGlvbi5zaG93SGVhZGVyID8gbnVsbCA6IChcbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIHtyb3dzVEh9XG4gICAgICAgICAge2hlYWRlcnN9XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnRhYmxlV3JhcHBlcn1cbiAgICAgICAgcmVmPXtyb290ID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX1cbiAgICAgID5cbiAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgIDxsZWdlbmQgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9IC8+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRUYWJsZUNzcygpfT5cbiAgICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAgICA8dGJvZHk+e3Jvd3N9PC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhSb3cgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeFJvd01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucm93LnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5yb3cudmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKGNlbGw6IGFueSwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHJlYXNvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCFyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwTWF0cml4Q2VsbChzdXJ2ZXksIGVsZW1lbnQsIGNlbGwsIHJlYXNvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvdztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHJvd3NURCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNSb3dzKSB7XG4gICAgICB2YXIgcm93VGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucm93LmxvY1RleHQpO1xuICAgICAgcm93c1REID0gPHRkIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvd1RleHRDZWxsfT5cbiAgICAgICAge3RoaXMud3JhcENlbGwoeyByb3c6IHRoaXMucm93IH0sIHJvd1RleHQsIFwicm93LWhlYWRlclwiKX1cbiAgICAgIDwvdGQ+O1xuICAgIH1cblxuICAgIHZhciB0ZHMgPSB0aGlzLmdlbmVyYXRlVGRzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBjbGFzc05hbWU9e3RoaXMucm93LnJvd0NsYXNzZXMgfHwgdW5kZWZpbmVkfT5cbiAgICAgICAge3Jvd3NURH1cbiAgICAgICAge3Rkc31cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxuXG4gIGdlbmVyYXRlVGRzKCkge1xuICAgIHZhciB0ZHMgPSBbXTtcbiAgICB2YXIgcm93ID0gdGhpcy5yb3c7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ZCA9IG51bGw7XG4gICAgICB2YXIgY29sdW1uID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1uc1tpXTtcbiAgICAgIHZhciBrZXkgPSBcInZhbHVlXCIgKyBpO1xuXG4gICAgICAvL3ZhciBpc0NoZWNrZWQgPSBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMocm93LnZhbHVlLCBjb2x1bW4udmFsdWUpO1xuICAgICAgdmFyIGlzQ2hlY2tlZCA9IHJvdy52YWx1ZSA9PSBjb2x1bW4udmFsdWU7XG4gICAgICBsZXQgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3Mocm93LCBjb2x1bW4pO1xuICAgICAgdmFyIGlucHV0SWQgPSB0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIHJvdy5uYW1lICsgXCJfXCIgKyBpO1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzQ2VsbFRleHQpIHtcbiAgICAgICAgdmFyIGdldEhhbmRsZXIgPSAhdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHlcbiAgICAgICAgICA/IChjb2x1bW46IGFueSkgPT4gKCkgPT4gdGhpcy5jZWxsQ2xpY2socm93LCBjb2x1bW4pXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICB0ZCA9IChcbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9XG4gICAgICAgICAgICBvbkNsaWNrPXtnZXRIYW5kbGVyID8gZ2V0SGFuZGxlcihjb2x1bW4pIDogbnVsbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KHJvdy5uYW1lLCBjb2x1bW4pXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZCA9IChcbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgZGF0YS1yZXNwb25zaXZlLXRpdGxlPXtjb2x1bW4ubG9jVGV4dC5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2l0ZW1DbGFzc30+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlkPXtpbnB1dElkfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbVZhbHVlfVxuICAgICAgICAgICAgICAgIG5hbWU9e3Jvdy5mdWxsTmFtZX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17Y29sdW1uLnZhbHVlfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2NvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPiA6XG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXshdGhpcy5xdWVzdGlvbi5pc01vYmlsZSA/IHsgZGlzcGxheTogXCJub25lXCIgfSA6IHVuZGVmaW5lZCB9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGxSZXNwb25zaXZlVGl0bGV9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyhjb2x1bW4ubG9jVGV4dCl9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRkcy5wdXNoKHRkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGRzO1xuICB9XG4gIGNlbGxDbGljayhyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICByb3cudmFsdWUgPSBjb2x1bW4udmFsdWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnJvdy52YWx1ZSB9KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXgsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHJvcGRvd25cIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24sIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gIFF1ZXN0aW9uLFxuICBCYXNlXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cFwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IE1hdHJpeFJvdyB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWF0cml4L3Jvd1wiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvblwiO1xuaW1wb3J0IHsgTWF0cml4RHJvcGRvd25Db2x1bW4gfSBmcm9tIFwiLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25jb2x1bW5cIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy9DcmVhdGUgcmVuZGVyZWQgdGFibGUgaW4gY29udHJ1Y3RvciBhbmQgbm90IG9uIHJlbmRlcmluZ1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbiAgfVxuICBwcml2YXRlIGdldFN0YXRlKHByZXZTdGF0ZTogYW55ID0gbnVsbCkge1xuICAgIHJldHVybiB7IHJvd0NvdW50ZXI6ICFwcmV2U3RhdGUgPyAwIDogcHJldlN0YXRlLnJvd0NvdW50ZXIgKyAxIH07XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuZ2V0U3RhdGUodGhpcy5zdGF0ZSkpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgICAgfTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJlbmRlcmVkUm93c0NoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyVGFibGVEaXYoKTtcbiAgfVxuICByZW5kZXJUYWJsZURpdigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XG4gICAgdmFyIGZvb3RlcnMgPSB0aGlzLnJlbmRlckZvb3RlcigpO1xuICAgIHZhciByb3dzID0gdGhpcy5yZW5kZXJSb3dzKCk7XG4gICAgdmFyIGRpdlN0eWxlID0gdGhpcy5xdWVzdGlvbi5zaG93SG9yaXpvbnRhbFNjcm9sbFxuICAgICAgPyAoeyBvdmVyZmxvd1g6IFwic2Nyb2xsXCIgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKVxuICAgICAgOiAoe30gYXMgUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e2RpdlN0eWxlfSByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFRhYmxlQ3NzKCl9PlxuICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAge3Jvd3N9XG4gICAgICAgICAge2Zvb3RlcnN9XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIGlmICghdGFibGUuc2hvd0hlYWRlcikgcmV0dXJuIG51bGw7XG4gICAgdmFyIGhlYWRlcnM6IGFueVtdID0gW107XG4gICAgdmFyIGNlbGxzID0gdGFibGUuaGVhZGVyUm93LmNlbGxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxsID0gY2VsbHNbaV07XG4gICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XG4gICAgICB2YXIgY29sdW1uU3R5bGU6IGFueSA9IHt9O1xuICAgICAgaWYgKCEhY2VsbC53aWR0aCkge1xuICAgICAgICBjb2x1bW5TdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICAgIGNvbHVtblN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICAgIH1cbiAgICAgIHZhciBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyQ2VsbENvbnRlbnQoY2VsbCwgXCJjb2x1bW4taGVhZGVyXCIsIHt9KTtcbiAgICAgIGhlYWRlcnMucHVzaChcbiAgICAgICAgPHRoXG4gICAgICAgICAgY2xhc3NOYW1lPXtjZWxsLmNsYXNzTmFtZX1cbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBzdHlsZT17Y29sdW1uU3R5bGV9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2VsbENvbnRlbnR9XG4gICAgICAgIDwvdGg+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+e2hlYWRlcnN9PC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgKTtcbiAgfVxuICByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0YWJsZSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZTtcbiAgICBpZiAoIXRhYmxlLnNob3dGb290ZXIpIHJldHVybiBudWxsO1xuICAgIHZhciByb3cgPSB0aGlzLnJlbmRlclJvdyhcbiAgICAgIFwiZm9vdGVyXCIsXG4gICAgICB0YWJsZS5mb290ZXJSb3csXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICApO1xuICAgIHJldHVybiA8dGZvb3Q+e3Jvd308L3Rmb290PjtcbiAgfVxuICByZW5kZXJSb3dzKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciByZW5kZXJlZFJvd3MgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbmRlcmVkUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKFxuICAgICAgICB0aGlzLnJlbmRlclJvdyhyZW5kZXJlZFJvd3NbaV0uaWQsIHJlbmRlcmVkUm93c1tpXSwgY3NzQ2xhc3NlcylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8dGJvZHk+e3Jvd3N9PC90Ym9keT47XG4gIH1cbiAgcmVuZGVyUm93KFxuICAgIGtleVZhbHVlOiBhbnksXG4gICAgcm93OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgbWF0cml4cm93ID0gW107XG4gICAgdmFyIGNlbGxzID0gcm93LmNlbGxzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4cm93LnB1c2godGhpcy5yZW5kZXJDZWxsKGNlbGxzW2ldLCBpLCBjc3NDbGFzc2VzKSk7XG4gICAgfVxuICAgIHZhciBrZXkgPSBcInJvd1wiICsga2V5VmFsdWU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17a2V5fT5cbiAgICAgICAgPE1hdHJpeFJvdyBtb2RlbD17cm93fSBwYXJlbnRNYXRyaXg9e3RoaXMucXVlc3Rpb259PnttYXRyaXhyb3d9PC9NYXRyaXhSb3c+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDZWxsKFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSBcImNlbGxcIiArIGluZGV4O1xuICAgIGlmIChjZWxsLmhhc1F1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGxcbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGNlbGw9e2NlbGx9XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IHJlYXNvbiA9IGNlbGwuaGFzVGl0bGUgPyBcInJvdy1oZWFkZXJcIiA6IFwiXCI7XG4gICAgdmFyIGNlbGxDb250ZW50ID0gdGhpcy5yZW5kZXJDZWxsQ29udGVudChjZWxsLCByZWFzb24sIGNzc0NsYXNzZXMpO1xuICAgIHZhciBjZWxsU3R5bGU6IGFueSA9IG51bGw7XG4gICAgaWYgKCEhY2VsbC53aWR0aCB8fCAhIWNlbGwubWluV2lkdGgpIHtcbiAgICAgIGNlbGxTdHlsZSA9IHt9O1xuICAgICAgaWYgKCEhY2VsbC53aWR0aCkgY2VsbFN0eWxlLndpZHRoID0gY2VsbC53aWR0aDtcbiAgICAgIGlmICghIWNlbGwubWluV2lkdGgpIGNlbGxTdHlsZS5taW5XaWR0aCA9IGNlbGwubWluV2lkdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZFxuICAgICAgICBjbGFzc05hbWU9e2NlbGwuY2xhc3NOYW1lfVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgc3R5bGU9e2NlbGxTdHlsZX1cbiAgICAgICAgY29sU3Bhbj17Y2VsbC5jb2xTcGFuc31cbiAgICAgID5cbiAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyQ2VsbENvbnRlbnQoXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgICByZWFzb246IHN0cmluZyxcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjZWxsQ29udGVudCA9IG51bGw7XG4gICAgdmFyIGNlbGxTdHlsZTogYW55ID0gbnVsbDtcbiAgICBpZiAoISFjZWxsLndpZHRoIHx8ICEhY2VsbC5taW5XaWR0aCkge1xuICAgICAgY2VsbFN0eWxlID0ge307XG4gICAgICBpZiAoISFjZWxsLndpZHRoKSBjZWxsU3R5bGUud2lkdGggPSBjZWxsLndpZHRoO1xuICAgICAgaWYgKCEhY2VsbC5taW5XaWR0aCkgY2VsbFN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzVGl0bGUpIHtcbiAgICAgIHJlYXNvbiA9IFwicm93LWhlYWRlclwiO1xuICAgICAgY29uc3Qgc3RyID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoY2VsbC5sb2NUaXRsZSk7XG4gICAgICBjb25zdCByZXF1aXJlID0gISFjZWxsLmNvbHVtbiA/IDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeEhlYWRlclJlcXVpcmVkIGNvbHVtbj17Y2VsbC5jb2x1bW59IHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufS8+IDogbnVsbDtcbiAgICAgIGNlbGxDb250ZW50ID0gKDw+e3N0cn17cmVxdWlyZX08Lz4pO1xuICAgIH1cbiAgICBpZiAoY2VsbC5pc0RyYWdIYW5kbGVyQ2VsbCkge1xuICAgICAgY2VsbENvbnRlbnQgPSAoPD5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBpdGVtPXt7IGRhdGE6IHsgcm93OiBjZWxsLnJvdywgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfSB9fS8+XG4gICAgICA8Lz4pO1xuICAgIH1cbiAgICBpZiAoY2VsbC5pc0FjdGlvbnNDZWxsKSB7XG4gICAgICBjZWxsQ29udGVudCA9IChcbiAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3YtbWF0cml4ZHluYW1pYy1hY3Rpb25zLWNlbGxcIiwge1xuICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLCBjc3NDbGFzc2VzLCBjZWxsLCBtb2RlbDogY2VsbC5pdGVtLmdldERhdGEoKVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzUGFuZWwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKFxuICAgICAgICA8U3VydmV5UGFuZWxcbiAgICAgICAgICBrZXk9e2NlbGwucGFuZWwuaWR9XG4gICAgICAgICAgZWxlbWVudD17Y2VsbC5wYW5lbH1cbiAgICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY2VsbENvbnRlbnQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmVhZHlDZWxsID0gKFxuICAgICAgPD5cbiAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgPC8+XG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy53cmFwQ2VsbChjZWxsLCByZWFkeUNlbGwsIHJlYXNvbik7XG4gIH1cbn1cblxuY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhBY3Rpb25zQ2VsbCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWx9IGhhbmRsZUNsaWNrPXtmYWxzZX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXhkeW5hbWljLWFjdGlvbnMtY2VsbFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeEFjdGlvbnNDZWxsLCBwcm9wcyk7XG4gIH1cbik7XG5jbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeEhlYWRlclJlcXVpcmVkIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBnZXQgY29sdW1uKCk6IE1hdHJpeERyb3Bkb3duQ29sdW1uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW47XG4gIH1cbiAgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYoIXRoaXMuY29sdW1uLmlzUmVuZGVyZWRSZXF1aXJlZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGxSZXF1aXJlZFRleHR9Pnt0aGlzLmNvbHVtbi5yZXF1aXJlZFRleHR9PC9zcGFuPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGwgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNlbGwoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2VsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1Dc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmNlbGwgPyB0aGlzLmNlbGwuY2xhc3NOYW1lIDogXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHZhciBxID0gc3VwZXIuZ2V0UXVlc3Rpb24oKTtcbiAgICBpZiAoISFxKSByZXR1cm4gcTtcbiAgICByZXR1cm4gISF0aGlzLmNlbGwgPyB0aGlzLmNlbGwucXVlc3Rpb24gOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBkb0FmdGVyUmVuZGVyKCkge1xuICAgIHZhciBlbCA9IHRoaXMuY2VsbFJlZi5jdXJyZW50O1xuICAgIGlmIChcbiAgICAgIGVsICYmXG4gICAgICB0aGlzLmNlbGwgJiZcbiAgICAgIHRoaXMucXVlc3Rpb24gJiZcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5ICYmXG4gICAgICBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIlxuICAgICkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICBjZWxsUXVlc3Rpb246IHRoaXMucXVlc3Rpb24sXG4gICAgICAgIGh0bWxFbGVtZW50OiBlbCxcbiAgICAgICAgcm93OiB0aGlzLmNlbGwucm93LFxuICAgICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleS5tYXRyaXhBZnRlckNlbGxSZW5kZXIodGhpcy5xdWVzdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTaG93RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZSAmJlxuICAgICAgKCF0aGlzLmNlbGwuaXNDaG9pY2UgfHwgdGhpcy5jZWxsLmlzRmlyc3RDaG9pY2UpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2VsbFN0eWxlKCk6IGFueSB7XG4gICAgdmFyIHJlczogYW55ID0gc3VwZXIuZ2V0Q2VsbFN0eWxlKCk7XG4gICAgaWYgKCEhdGhpcy5jZWxsLndpZHRoIHx8ICEhdGhpcy5jZWxsLm1pbldpZHRoKSB7XG4gICAgICBpZiAoIXJlcykgcmVzID0ge307XG4gICAgICBpZiAoISF0aGlzLmNlbGwud2lkdGgpIHJlcy53aWR0aCA9IHRoaXMuY2VsbC53aWR0aDtcbiAgICAgIGlmICghIXRoaXMuY2VsbC5taW5XaWR0aCkgcmVzLm1pbldpZHRoID0gdGhpcy5jZWxsLm1pbldpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGwuaGVhZGVycztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5jZWxsLmlzQ2hvaWNlKVxuICAgICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICAgIGlmICh0aGlzLmNlbGwuaXNDaGVja2JveCkgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbENoZWNrYm94QnV0dG9uKCk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFJhZGlvZ3JvdXBCdXR0b24oKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckNlbGxDaGVja2JveEJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pZCArIFwiaXRlbVwiICsgdGhpcy5jZWxsLmNob2ljZUluZGV4O1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLmNlbGwucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY2VsbC5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICBpdGVtPXt0aGlzLmNlbGwuaXRlbX1cbiAgICAgICAgaXNGaXJzdD17dGhpcy5jZWxsLmlzRmlyc3RDaG9pY2V9XG4gICAgICAgIGluZGV4PXt0aGlzLmNlbGwuY2hvaWNlSW5kZXgudG9TdHJpbmcoKX1cbiAgICAgICAgaGlkZUNhcHRpb249e3RydWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsUmFkaW9ncm91cEJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pZCArIFwiaXRlbVwiICsgdGhpcy5jZWxsLmNob2ljZUluZGV4O1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25SYWRpb0l0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLmNlbGwucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY2VsbC5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICBpdGVtPXt0aGlzLmNlbGwuaXRlbX1cbiAgICAgICAgaW5kZXg9e3RoaXMuY2VsbC5jaG9pY2VJbmRleC50b1N0cmluZygpfVxuICAgICAgICBpc0NoZWNrZWQ9e3RoaXMuY2VsbC5xdWVzdGlvbi52YWx1ZSA9PT0gdGhpcy5jZWxsLml0ZW0udmFsdWV9XG4gICAgICAgIGlzRGlzYWJsZWQ9e3RoaXMuY2VsbC5xdWVzdGlvbi5pc1JlYWRPbmx5IHx8ICF0aGlzLmNlbGwuaXRlbS5pc0VuYWJsZWR9XG4gICAgICAgIGhpZGVDYXB0aW9uPXt0cnVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWMgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrID0gdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBtYXRyaXgoKTogUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbDtcbiAgfVxuICBoYW5kbGVPblJvd0FkZENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm1hdHJpeC5hZGRSb3dVSSgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgc2hvd1RhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnNob3dUYWJsZTtcbiAgICB2YXIgbWFpbkRpdiA9IHNob3dUYWJsZVxuICAgICAgPyB0aGlzLnJlbmRlclRhYmxlRGl2KClcbiAgICAgIDogdGhpcy5yZW5kZXJOb1Jvd3NDb250ZW50KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b25PblRvcChjc3NDbGFzc2VzKX1cbiAgICAgICAge21haW5EaXZ9XG4gICAgICAgIHt0aGlzLnJlbmRlckFkZFJvd0J1dHRvbk9uQm90dG9tKGNzc0NsYXNzZXMpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQWRkUm93QnV0dG9uT25Ub3AoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tYXRyaXgucmVuZGVyZWRUYWJsZS5zaG93QWRkUm93T25Ub3ApIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbihjc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQWRkUm93QnV0dG9uT25Cb3R0b20oY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tYXRyaXgucmVuZGVyZWRUYWJsZS5zaG93QWRkUm93T25Cb3R0b20pIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbihjc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTm9Sb3dzQ29udGVudChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGV4dDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLm1hdHJpeC5sb2NFbXB0eVJvd3NUZXh0KTtcbiAgICBjb25zdCB0ZXh0RGl2OiBKU1guRWxlbWVudCA9IDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVtcHR5Um93c1RleHR9Pnt0ZXh0fTwvZGl2PjtcbiAgICBjb25zdCBidG46IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oY3NzQ2xhc3NlcywgdHJ1ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVtcHR5Um93c1NlY3Rpb259PlxuICAgICAgICB7dGV4dERpdn1cbiAgICAgICAge2J0bn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbihcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaXNFbXB0eVNlY3Rpb246IGJvb2xlYW4gPSBmYWxzZVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2LW1hdHJpeGR5bmFtaWMtYWRkLWJ0blwiLCB7XG4gICAgICBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiwgY3NzQ2xhc3NlcywgaXNFbXB0eVNlY3Rpb25cbiAgICB9KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHluYW1pY1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0FkZEJ1dHRvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrID0gdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBtYXRyaXgoKTogUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xuICB9XG4gIGhhbmRsZU9uUm93QWRkQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubWF0cml4LmFkZFJvd1VJKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFkZFJvd1RleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tYXRyaXgubG9jQWRkUm93VGV4dCk7XG4gICAgY29uc3QgYWRkQnV0dG9uID0gKDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT17dGhpcy5tYXRyaXguZ2V0QWRkUm93QnV0dG9uQ3NzKHRoaXMucHJvcHMuaXNFbXB0eVNlY3Rpb24pfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkaXNhYmxlZD17dGhpcy5tYXRyaXguaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgb25DbGljaz17XG4gICAgICAgIHRoaXMubWF0cml4LmlzRGVzaWduTW9kZSA/IHVuZGVmaW5lZCA6IHRoaXMuaGFuZGxlT25Sb3dBZGRDbGlja1xuICAgICAgfVxuICAgID5cbiAgICAgIHthZGRSb3dUZXh0fVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNzc0NsYXNzZXMuaWNvbkFkZH0gLz5cbiAgICA8L2J1dHRvbj4pO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb3BzLmlzRW1wdHlTZWN0aW9uID8gYWRkQnV0dG9uIDogPGRpdiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY3NzQ2xhc3Nlcy5mb290ZXJ9PnthZGRCdXR0b259PC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXhkeW5hbWljLWFkZC1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljQWRkQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yLCBTdXJ2ZXlFbGVtZW50RXJyb3JzLCBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNdWx0aXBsZVRleHRJdGVtTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgdGFibGVSb3dzID0gdGhpcy5xdWVzdGlvbi5nZXRSb3dzKCk7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKHRoaXMucmVuZGVyUm93KGksIHRhYmxlUm93c1tpXSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPHRib2R5Pntyb3dzfTwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclJvdyhcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGl0ZW1zOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+LFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApIHtcbiAgICB2YXIga2V5OiBzdHJpbmcgPSBcIml0ZW1cIiArIHJvd0luZGV4O1xuICAgIHZhciB0ZHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgdGRzLnB1c2goXG4gICAgICAgIDx0ZCBrZXk9e1wiaXRlbVwiICsgaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbH0+XG4gICAgICAgICAgPFN1cnZleU11bHRpcGxlVGV4dEl0ZW0gcXVlc3Rpb249e3RoaXMucXVlc3Rpb259IGl0ZW09e2l0ZW19IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc30+PC9TdXJ2ZXlNdWx0aXBsZVRleHRJdGVtPlxuICAgICAgICA8L3RkPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBrZXk9e2tleX0gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvd30+XG4gICAgICAgIHt0ZHN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleU11bHRpcGxlVGV4dEl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCBpdGVtKCk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpIHtcbiAgICByZXR1cm4gW3RoaXMuaXRlbSwgdGhpcy5pdGVtLmVkaXRvcl07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW07XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKDxsYWJlbCBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUxhYmVsQ3NzKGl0ZW0pfT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtVGl0bGV9PlxuICAgICAgICA8VGl0bGVDb250ZW50IGVsZW1lbnQ9e2l0ZW0uZWRpdG9yfSBjc3NDbGFzc2VzPXtpdGVtLmVkaXRvci5jc3NDbGFzc2VzfT48L1RpdGxlQ29udGVudD5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtRWRpdG9yXG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGl0ZW1Dc3M9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUNzcygpfVxuICAgICAgICBxdWVzdGlvbj17aXRlbS5lZGl0b3J9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgIC8+XG4gICAgICB7dGhpcy5yZW5kZXJJdGVtVG9vbHRpcEVycm9yKGl0ZW0sIGNzc0NsYXNzZXMpfVxuICAgIDwvbGFiZWw+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJdGVtVG9vbHRpcEVycm9yKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZWRpdG9yLmlzRXJyb3JzTW9kZVRvb2x0aXAgPyAoXG4gICAgICA8U3VydmV5RWxlbWVudEVycm9yc1xuICAgICAgICBlbGVtZW50PXtpdGVtLmVkaXRvcn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17XCJ0b29sdGlwXCJ9XG4gICAgICAgIGlkPXtpdGVtLmVkaXRvci5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApOiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtRWRpdG9yIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIHtcbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5pdGVtQ3NzfT57dGhpcy5yZW5kZXJDb250ZW50KCl9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0blwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUmVtb3ZlQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0blwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHBhbmVsQ291bnRlcjogMCB9KTtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyA9IHRoaXM7XG4gICAgdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyTW9kZUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVRdWVzdGlvblJlbmRlcmluZygpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHBhbmVsQ291bnRlcjogdGhpcy5zdGF0ZSA/IHRoaXMuc3RhdGUucGFuZWxDb3VudGVyICsgMSA6IDEsXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnF1ZXN0aW9uLnBhbmVsc1tpXTtcbiAgICAgICAgcGFuZWxzLnB1c2goXG4gICAgICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICAgICAgICAga2V5PXtwYW5lbC5pZH1cbiAgICAgICAgICAgIGVsZW1lbnQ9e3BhbmVsfVxuICAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsO1xuICAgICAgICBwYW5lbHMucHVzaChcbiAgICAgICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXG4gICAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uY3VycmVudEluZGV4fVxuICAgICAgICAgICAgZWxlbWVudD17cGFuZWx9XG4gICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgIGluZGV4PXt0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleH1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBidG5BZGQ6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMucXVlc3Rpb25bXCJzaG93TGVnYWN5TmF2aWdhdGlvblwiXVxuICAgICAgPyB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgbmF2VG9wOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJOYXZpZ2F0b3IoKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG5hdkJvdHRvbTogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NCb3R0b21TaG93aW5nXG4gICAgICA/IHRoaXMucmVuZGVyTmF2aWdhdG9yKClcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICBjb25zdCBuYXZWMiA9IHRoaXMucmVuZGVyTmF2aWdhdG9yVjIoKTtcbiAgICBjb25zdCBub0VudHJpZXNQbGFjZWhvbGRlciA9IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAge25vRW50cmllc1BsYWNlaG9sZGVyfVxuICAgICAgICB7bmF2VG9wfVxuICAgICAgICB7cGFuZWxzfVxuICAgICAgICB7bmF2Qm90dG9tfVxuICAgICAgICB7YnRuQWRkfVxuICAgICAgICB7bmF2VjJ9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCF0aGlzLnF1ZXN0aW9uW1wic2hvd0xlZ2FjeU5hdmlnYXRpb25cIl0pIHtcbiAgICAgIGlmKHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgJiYgdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJSYW5nZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhbmdlOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgPyB0aGlzLnJlbmRlclJhbmdlKCkgOiBudWxsO1xuICAgIGNvbnN0IGJ0blByZXY6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kcmVyUHJldkJ1dHRvbigpO1xuICAgIGNvbnN0IGJ0bk5leHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kcmVyTmV4dEJ1dHRvbigpO1xuICAgIGNvbnN0IGJ0bkFkZDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpO1xuICAgIGNvbnN0IHByb2dyZXNzQ2xhc3M6IHN0cmluZyA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmdcbiAgICAgID8gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVG9wXG4gICAgICA6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0JvdHRvbTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb2dyZXNzQ2xhc3N9PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGNsZWFyOiBcImJvdGhcIiB9fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQ29udGFpbmVyfT5cbiAgICAgICAgICAgIHtidG5QcmV2fVxuICAgICAgICAgICAge3JhbmdlfVxuICAgICAgICAgICAge2J0bk5leHR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2J0bkFkZH1cbiAgICAgICAgICB7dGhpcy5yZW5kZXJQcm9ncmVzc1RleHQoKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyUHJvZ3Jlc3NUZXh0KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IGRhdGE9eyB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH19PjwvU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kcmVyUHJldkJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVyTmV4dEJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbj5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclJhbmdlKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc30+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0Jhcn1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aDogdGhpcy5xdWVzdGlvbi5wcm9ncmVzcyB9fVxuICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdi1wYW5lbGR5bmFtaWMtYWRkLWJ0blwiLCB7XG4gICAgICBkYXRhOiB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH1cbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdG9yVjIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgPT09IDAgfHwgdGhpcy5xdWVzdGlvbltcInNob3dMZWdhY3lOYXZpZ2F0aW9uXCJdKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByYW5nZTogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nICYmICF0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nID8gdGhpcy5yZW5kZXJSYW5nZSgpIDogbnVsbDtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyfT5cbiAgICAgIDxociBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZXBhcmF0b3J9IC8+XG4gICAgICB7cmFuZ2V9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3RlckJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLnF1ZXN0aW9uLmZvb3RlclRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmdldFNob3dOb0VudHJpZXNQbGFjZWhvbGRlcigpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm5vRW50cmllc1BsYWNlaG9sZGVyfT5cbiAgICAgICAgICA8c3Bhbj57dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NOb0VudHJpZXNUZXh0KX08L3NwYW4+XG4gICAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uKCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSBleHRlbmRzIFN1cnZleVBhbmVsIHtcbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uID8gKHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzcygpOiBhbnkge1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgcmV0dXJuICEhc3VydmV5ID8gc3VydmV5LmdldENzcygpIDoge307XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBwYW5lbDogSlNYLkVsZW1lbnQgPSBzdXBlci5yZW5kZXIoKTtcbiAgICBjb25zdCByZW1vdmVCdXR0b246IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJCdXR0b24oKTtcbiAgICBjb25zdCBzZXBhcmF0b3I6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMuaW5kZXggPCB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgLSAxID9cbiAgICAgICg8aHIgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yfSAvPikgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRQYW5lbFdyYXBwZXJDc3MoKX0+XG4gICAgICAgICAge3BhbmVsfVxuICAgICAgICAgIHtyZW1vdmVCdXR0b259XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2VwYXJhdG9yfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQnV0dG9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbi5jYW5SZW1vdmVQYW5lbCB8fFxuICAgICAgKHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCAmJiB0aGlzLnBhbmVsLmlzQ29sbGFwc2VkKVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdi1wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0blwiLCB7XG4gICAgICBkYXRhOiB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLCBpbmRleDogdGhpcy5pbmRleCB9XG4gICAgfSk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInBhbmVsZHluYW1pY1wiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSwgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgY2xlYXJCdXR0b24gPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnNob3dDbGVhckJ1dHRvbkluQ29udGVudCkge1xuICAgICAgY2xlYXJCdXR0b24gPSAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5jbGVhclZhbHVlKCl9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLmNvbnRyb2wgPSBmaWVsZHNldCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IHRoaXMuZ2V0Q29sdW1uZWRCb2R5KGNzc0NsYXNzZXMpXG4gICAgICAgICAgOiB0aGlzLmdldEJvZHkoY3NzQ2xhc3Nlcyl9XG4gICAgICAgIHt0aGlzLmdldEZvb3RlcigpfVxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5oYXNPdGhlciAmJiB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMucXVlc3Rpb24ub3RoZXJJdGVtKSA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsfVxuICAgICAgICB7Y2xlYXJCdXR0b259XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZvb3RlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNGb290SXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmZvb3RJdGVtcy5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbV9mXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRDb2x1bW5lZEJvZHkoY3NzQ2xhc3NlczogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3RNdWx0aUNvbHVtbn0+XG4gICAgICAgIHt0aGlzLmdldENvbHVtbnMoY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zKGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0U3RhdGVWYWx1ZSgpO1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubWFwKChjb2x1bW46IGFueSwgY2k6IG51bWJlcikgPT4ge1xuICAgICAgdmFyIGl0ZW1zID0gY29sdW1uLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXCJpdGVtXCIgKyBjaSArIGlpLCBpdGVtLCB2YWx1ZSwgY3NzQ2xhc3NlcywgXCJcIiArIGNpICsgaWkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBrZXk9e1wiY29sdW1uXCIgKyBjaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbHVtbkNsYXNzKCl9IHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICB7aXRlbXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRCb2R5KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZih0aGlzLnF1ZXN0aW9uLmJsb2NrZWRSb3cpIHtcbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290Um93fT57dGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzLCB0aGlzLnF1ZXN0aW9uLmRhdGFDaG9pY2VzKX08L2Rpdj47XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIDw+e3RoaXMuZ2V0SXRlbXMoY3NzQ2xhc3NlcywgdGhpcy5xdWVzdGlvbi5ib2R5SXRlbXMpfTwvPjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnksIGNob2ljZXM6IEFycmF5IDxJdGVtVmFsdWU+KTogQXJyYXk8YW55PiB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRTdGF0ZVZhbHVlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGNob2ljZXNbaV07XG4gICAgICB2YXIgcmVuZGVyZWRJdGVtID0gdGhpcy5yZW5kZXJJdGVtKFwiaXRlbVwiICsgaSwgaXRlbSwgdmFsdWUsIGNzc0NsYXNzZXMsIFwiXCIgKyBpKTtcbiAgICAgIGl0ZW1zLnB1c2gocmVuZGVyZWRJdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7Ly97IGRpc3BsYXk6IFwiaW5saW5lXCIsIHBvc2l0aW9uOiBcInN0YXRpY1wiIH07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck90aGVyKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgdmFsdWU6IGFueSxcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaW5kZXg6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICB0ZXh0U3R5bGU9e3RoaXMudGV4dFN0eWxlfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGlzQ2hlY2tlZD17dmFsdWUgPT09IGl0ZW0udmFsdWV9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdGF0ZVZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuICF0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKSA/IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA6IFwiXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dFN0eWxlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzQ2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NoZWNrZWQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaGlkZUNhcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZUNhcHRpb24gPT09IHRydWU7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSB0aGlzLml0ZW0udmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uICYmICEhdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXRlbVRleHQgPSAhdGhpcy5oaWRlQ2FwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLml0ZW0ubG9jVGV4dCwgdGhpcy50ZXh0U3R5bGUpXG4gICAgICA6IFwiXCI7XG4gICAgdmFyIGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XG4gICAgdmFyIGxhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgbG9jVGV4dDogYW55ID0gdGhpcy5pdGVtLmxvY1RleHQ7XG4gICAgdmFyIGNvbnRyb2xMYWJlbENsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRDb250cm9sTGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtsYWJlbENsYXNzfSBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmdldEFyaWFJdGVtTGFiZWwodGhpcy5pdGVtKX0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKHRoaXMuaXRlbSl9XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5xdWVzdGlvbk5hbWV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLmlzQ2hlY2tlZH1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udmFsdWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yID9cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+IDpcbiAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj4gOlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y29udHJvbExhYmVsQ2xhc3N9PlxuICAgICAgICAgICAge2l0ZW1UZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtLCBwcm9wcyk7XG59KTtcblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmFkaW9ncm91cCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuLi9pdGVtdmFsdWVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFua2luZyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmFua2luZ01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25SYW5raW5nTW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLnJvb3RDbGFzc31cbiAgICAgICAgcmVmPXsocm9vdCkgPT4gKHRoaXMuY29udHJvbCA9IHJvb3QpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5nZXRJdGVtcygpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtcygpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IHJhbmtpbmdDaG9pY2VzID0gdGhpcy5xdWVzdGlvbi5yYW5raW5nQ2hvaWNlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmtpbmdDaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gcmFua2luZ0Nob2ljZXNbaV07XG4gICAgICBpdGVtcy5wdXNoKFxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBpLFxuICAgICAgICAgIChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmhhbmRsZUtleWRvd24uY2FsbCh0aGlzLnF1ZXN0aW9uLCBldmVudCwgaXRlbSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgZXZlbnQucGVyc2lzdCgpO1xuICAgICAgICAgICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5oYW5kbGVQb2ludGVyRG93bi5jYWxsKFxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBpOiBudW1iZXIsXG4gICAgaGFuZGxlS2V5ZG93bjogKGV2ZW50OiBhbnkpID0+IHZvaWQsXG4gICAgaGFuZGxlUG9pbnRlckRvd246IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB2b2lkLFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpdGVtQ2xhc3M6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25SYW5raW5nTW9kZWxcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGtleTogc3RyaW5nID0gaXRlbS52YWx1ZSArIFwiLVwiICsgaSArIFwiLWl0ZW1cIjtcbiAgICBjb25zdCB0ZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGl0ZW0ubG9jVGV4dCk7XG4gICAgY29uc3QgaW5kZXggPSBpO1xuICAgIGNvbnN0IGluZGV4VGV4dDogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5nZXROdW1iZXJCeUluZGV4KGkpO1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblJhbmtpbmdJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGluZGV4VGV4dD17aW5kZXhUZXh0fVxuICAgICAgICBoYW5kbGVLZXlkb3duPXtoYW5kbGVLZXlkb3dufVxuICAgICAgICBoYW5kbGVQb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGl0ZW1DbGFzcz17aXRlbUNsYXNzfVxuICAgICAgICBxdWVzdGlvbj17cXVlc3Rpb259XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4VGV4dDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhbmRsZUtleWRvd24oKTogKGV2ZW50OiBhbnkpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhhbmRsZUtleWRvd247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBoYW5kbGVQb2ludGVyRG93bigpOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlUG9pbnRlckRvd247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1DbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW1DbGFzcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtQ2xhc3N9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxuICAgICAgICBvblBvaW50ZXJEb3duPXt0aGlzLmhhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXJhbmtpbmctaXRlbT17dGhpcy5pbmRleH1cbiAgICAgID5cbiAgICAgICAgPGRpdiB0YWJJbmRleD17LTF9IHN0eWxlPXt7IG91dGxpbmU6IFwibm9uZVwiIH19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUdob3N0Tm9kZX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250ZW50fT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXJ9PlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMTZcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJY29uSG92ZXJDc3MoKX1cbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAyQzYgMC45IDYuOSAwIDggMEM5LjEgMCAxMCAwLjkgMTAgMkMxMCAzLjEgOS4xIDQgOCA0QzYuOSA0IDYgMy4xIDYgMlpNMiAwQzAuOSAwIDAgMC45IDAgMkMwIDMuMSAwLjkgNCAyIDRDMy4xIDQgNCAzLjEgNCAyQzQgMC45IDMuMSAwIDIgMFpNOCA2QzYuOSA2IDYgNi45IDYgOEM2IDkuMSA2LjkgMTAgOCAxMEM5LjEgMTAgMTAgOS4xIDEwIDhDMTAgNi45IDkuMSA2IDggNlpNMiA2QzAuOSA2IDAgNi45IDAgOEMwIDkuMSAwLjkgMTAgMiAxMEMzLjEgMTAgNCA5LjEgNCA4QzQgNi45IDMuMSA2IDIgNlpNOCAxMkM2LjkgMTIgNiAxMi45IDYgMTRDNiAxNS4xIDYuOSAxNiA4IDE2QzkuMSAxNiAxMCAxNS4xIDEwIDE0QzEwIDEyLjkgOS4xIDEyIDggMTJaTTIgMTJDMC45IDEyIDAgMTIuOSAwIDE0QzAgMTUuMSAwLjkgMTYgMiAxNkMzLjEgMTYgNCAxNS4xIDQgMTRDNCAxMi45IDMuMSAxMiAyIDEyWlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMjRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJY29uRm9jdXNDc3MoKX1cbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNUw1IDBMMCA1SDRWOUg2VjVIMTBaXCIgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTlWMTVINFYxOUgwTDUgMjRMMTAgMTlINlpcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1JbmRleH0+e3RoaXMuaW5kZXhUZXh0fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWx9Pnt0aGlzLnRleHR9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFua2luZ1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYW5raW5nLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVuZGVyZWRSYXRpbmdJdGVtIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYXRpbmcgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2sgPSB0aGlzLmhhbmRsZU9uQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmF0aW5nTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhdGluZ01vZGVsO1xuICB9XG4gIGhhbmRsZU9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uc2V0VmFsdWVGcm9tQ2xpY2soZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBtaW5UZXh0ID0gdGhpcy5xdWVzdGlvbi5taW5SYXRlRGVzY3JpcHRpb25cbiAgICAgID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NNaW5SYXRlRGVzY3JpcHRpb24pXG4gICAgICA6IG51bGw7XG4gICAgdmFyIG1heFRleHQgPSB0aGlzLnF1ZXN0aW9uLm1heFJhdGVEZXNjcmlwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY01heFJhdGVEZXNjcmlwdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucmF0aW5nUm9vdENzc30gcmVmPXsoZGl2KSA9PiAodGhpcy5jb250cm9sID0gZGl2KX0+XG4gICAgICAgIDxmaWVsZHNldCByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICAgIDxsZWdlbmQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT17XCJzdi1oaWRkZW5cIn0+PC9sZWdlbmQ+XG4gICAgICAgICAgeyEhdGhpcy5xdWVzdGlvbi5oYXNNaW5MYWJlbCA/IDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5taW5UZXh0fT57bWluVGV4dH08L3NwYW4+OiBudWxsfVxuICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkUmF0ZUl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5yZW5kZXJJdGVtKFwidmFsdWVcIiArIGksIGl0ZW0sIGksIGNzc0NsYXNzZXMpKX1cbiAgICAgICAgICB7ISF0aGlzLnF1ZXN0aW9uLmhhc01heExhYmVsID8gPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1heFRleHR9PnttYXhUZXh0fTwvc3Bhbj46IG51bGx9XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IFJlbmRlcmVkUmF0aW5nSXRlbSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGl0ZW1UZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsIGtleT17a2V5fSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0uaXRlbVZhbHVlKX0+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3YtdmlzdWFsbHloaWRkZW5cIlxuICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5nZXRJbnB1dElkKGluZGV4KX1cbiAgICAgICAgICB2YWx1ZT17aXRlbS52YWx1ZX1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZX1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uQ2xpY2t9XG4gICAgICAgICAgb25DaGFuZ2U9eygpPT57fX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtVGV4dH0+e2l0ZW1UZXh0fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxufVxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhdGluZ1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYXRpbmcsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblRhZ2JveE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9kcm9wZG93bi1iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblRhZ2JveEl0ZW0gfSBmcm9tIFwiLi90YWdib3gtaXRlbVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uVGFnYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb25UYWdib3hNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oa2V5OiBzdHJpbmcsIGl0ZW06IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25UYWdib3hJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlZEl0ZW06IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLnF1ZXN0aW9uLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xdWVzdGlvbi5zZWxlY3RlZEl0ZW1zLm1hcCgoY2hvaWNlLCBpbmRleCkgPT4geyByZXR1cm4gdGhpcy5yZW5kZXJJdGVtKFwiaXRlbVwiICsgaW5kZXgsIGNob2ljZSk7IH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX1cbiAgICAgICAgdGFiSW5kZXg9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5ID8gdW5kZWZpbmVkIDogMH1cbiAgICAgICAgb25DbGljaz17dGhpcy5jbGlja31cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBvbklucHV0PXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgb25LZXlVcD17dGhpcy5rZXl1cH1cbiAgICAgICAgb25CbHVyPXt0aGlzLmJsdXJ9XG4gICAgICAgIHJvbGU9e3RoaXMucXVlc3Rpb24uYXJpYVJvbGV9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgID5cbiAgICAgICAgeyBpc0VtcHR5ID9cbiAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sVmFsdWV9Pnt0aGlzLnF1ZXN0aW9uLnBsYWNlaG9sZGVyfTwvZGl2PikgOlxuICAgICAgICAgICg8dWwgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udHJvbFZhbHVlfT5cbiAgICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgICA8L3VsPilcbiAgICAgICAgfVxuICAgICAgICB7dGhpcy5jcmVhdGVDbGVhckJ1dHRvbigpfVxuICAgICAgPC9kaXY+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0YWdib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uVGFnYm94LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8XG4gIFF1ZXN0aW9uVGV4dE1vZGVsXG4+IHtcbiAgcHJpdmF0ZSBfaXNXYWl0aW5nRm9yRW50ZXIgPSBmYWxzZTtcbiAgLy9jb250cm9sUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy90aGlzLmNvbnRyb2xSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgaW5wdXRDbGFzcyA9ICh0aGlzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uVGV4dE1vZGVsKS5nZXRDb250cm9sQ2xhc3MoKTtcbiAgICB2YXIgb25LZXlEb3duID0gbnVsbDtcbiAgICB2YXIgb25LZXlVcCA9IG51bGw7XG4gICAgdmFyIG9uQ29tcG9zaXRpb25VcGRhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKSB7XG4gICAgICBvbktleURvd24gPSAoZTogYW55KSA9PiAodGhpcy5faXNXYWl0aW5nRm9yRW50ZXIgPSBlLmtleUNvZGUgPT09IDIyOSk7XG4gICAgICBvbktleVVwID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2lzV2FpdGluZ0ZvckVudGVyIHx8IGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgICAgICB0aGlzLl9pc1dhaXRpbmdGb3JFbnRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgb25Db21wb3NpdGlvblVwZGF0ZSA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgZS5wZXJzaXN0KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9LCAxKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL3N1cnZleWpzL3N1cnZleS1saWJyYXJ5L2lzc3Vlcy8zMzg0XG4gICAgICBvbktleVVwID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBvbkNoYW5nZSA9IChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlaG9sZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIGNsYXNzTmFtZT17aW5wdXRDbGFzc31cbiAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgIC8vcmVmPXt0aGlzLmNvbnRyb2xSZWZ9XG4gICAgICAgIHJlZj17KGlucHV0KSA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICBzdHlsZT17dGhpcy5xdWVzdGlvbi5pbnB1dFN0eWxlfVxuICAgICAgICBtYXhMZW5ndGg9e3RoaXMucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCl9XG4gICAgICAgIG1pbj17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1pbn1cbiAgICAgICAgbWF4PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTWF4fVxuICAgICAgICBzdGVwPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkU3RlcH1cbiAgICAgICAgc2l6ZT17dGhpcy5xdWVzdGlvbi5pbnB1dFNpemV9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgbGlzdD17dGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkfVxuICAgICAgICBhdXRvQ29tcGxldGU9e3RoaXMucXVlc3Rpb24uYXV0b0NvbXBsZXRlfVxuICAgICAgICBvbkJsdXI9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG9uS2V5VXA9e29uS2V5VXB9XG4gICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICBvbkNvbXBvc2l0aW9uVXBkYXRlPXtvbkNvbXBvc2l0aW9uVXBkYXRlfVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWQgP1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHsgdGhpcy5yZW5kZXJJbnB1dCgpIH1cbiAgICAgICAgICB7IHRoaXMucmVuZGVyRGF0YUxpc3QoKSB9XG4gICAgICAgIDwvZGl2PjpcbiAgICAgICAgdGhpcy5yZW5kZXJJbnB1dCgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckRhdGFMaXN0KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uZGF0YUxpc3RJZCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5xdWVzdGlvbi5kYXRhTGlzdDtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICAgIHZhciBvcHRpb25zID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9ucy5wdXNoKDxvcHRpb24ga2V5PXtcIml0ZW1cIitpfSB2YWx1ZT17aXRlbXNbaV19Pjwvb3B0aW9uPik7XG4gICAgfVxuICAgIHJldHVybiA8ZGF0YWxpc3QgaWQ9e3RoaXMucXVlc3Rpb24uZGF0YUxpc3RJZH0+e29wdGlvbnN9PC9kYXRhbGlzdD47XG4gIH1cbiAgLy8gcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gIC8vICAgdGhpcy5jb250cm9sID0gdGhpcy5jb250cm9sUmVmLmN1cnJlbnQ7XG4gIC8vICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICAvLyB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblRleHQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIFN1cnZleVdpbmRvd01vZGVsLCBTdXJ2ZXlFbGVtZW50LCBRdWVzdGlvblJvd01vZGVsLCBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIge1xuICBwdWJsaWMgc3RhdGljIHdyYXBSb3coc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHJvdzogUXVlc3Rpb25Sb3dNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldFJvd1dyYXBwZXJDb21wb25lbnROYW1lKHJvdyk7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRSb3dXcmFwcGVyQ29tcG9uZW50RGF0YShyb3cpO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHJvdyxcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwRWxlbWVudChzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcXVlc3Rpb246IFN1cnZleUVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUocXVlc3Rpb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwUXVlc3Rpb25Db250ZW50KHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogU3VydmV5RWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldFF1ZXN0aW9uQ29udGVudFdyYXBwZXJDb21wb25lbnROYW1lKHF1ZXN0aW9uKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShxdWVzdGlvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgd3JhcEl0ZW1WYWx1ZShzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSwgaXRlbTogSXRlbVZhbHVlKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudE5hbWUoaXRlbSwgcXVlc3Rpb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudERhdGEoaXRlbSwgcXVlc3Rpb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAga2V5OiBlbGVtZW50LmtleSxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGl0ZW0sXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgd3JhcE1hdHJpeENlbGwoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIHJlYXNvbjogc3RyaW5nID0gXCJjZWxsXCIpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbCwgcmVhc29uKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShjZWxsLCByZWFzb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNlbGwsXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG59XG5cblN1cnZleU1vZGVsLnBsYXRmb3JtID0gXCJyZWFjdFwiO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlUaW1lck1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVRpbWVyUGFuZWwgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudGltZXJNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRpbWVyTW9kZWwoKTogU3VydmV5VGltZXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGltZXJNb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy50aW1lck1vZGVsLnN1cnZleS5nZXRDc3MoKS50aW1lclJvb3R9Pnt0aGlzLnRpbWVyTW9kZWwudGV4dH08L2Rpdj47XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IElFbGVtZW50LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUNzcygpO1xuICB9XG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDc3MoKSB7XG4gICAgdGhpcy5yb3cudmlzaWJsZUVsZW1lbnRzLm1hcChlbGVtZW50ID0+IChlbGVtZW50IGFzIFF1ZXN0aW9uKS5jc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnJvdztcbiAgfVxuICBwcml2YXRlIGdldCByb3coKTogUXVlc3Rpb25Sb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvdyAmJiAhIXRoaXMuc3VydmV5ICYmICEhdGhpcy5jcmVhdG9yICYmIHRoaXMucm93LnZpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnRDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgZWxlbWVudHMgPSBudWxsO1xuICAgIGVsZW1lbnRzID0gdGhpcy5yb3cudmlzaWJsZUVsZW1lbnRzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyRWxlbWVudCA9IHRoaXMuY3JlYXRlRWxlbWVudChlbGVtZW50LCBpbmRleCk7XG4gICAgICBjb25zdCBjc3MgPSAoZWxlbWVudCBhcyBRdWVzdGlvbikuY3NzQ2xhc3Nlc1ZhbHVlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzLnF1ZXN0aW9uV3JhcHBlcn1cbiAgICAgICAgICBzdHlsZT17KGVsZW1lbnQgYXMgYW55KS5yb290U3R5bGV9XG4gICAgICAgICAgZGF0YS1rZXk9e2lubmVyRWxlbWVudC5rZXl9XG4gICAgICAgICAga2V5PXtpbm5lckVsZW1lbnQua2V5fVxuICAgICAgICAgIG9uRm9jdXM9eyhlbGVtZW50IGFzIFF1ZXN0aW9uKS5mb2N1c0lufVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucm93LmlzTmVlZFJlbmRlciA/IGlubmVyRWxlbWVudCA6IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChlbGVtZW50LnNrZWxldG9uQ29tcG9uZW50TmFtZSwgeyBlbGVtZW50OiBlbGVtZW50LCBjc3M6IHRoaXMuY3NzLCB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17dGhpcy5yb3cuZ2V0Um93Q3NzKCl9ID5cbiAgICAgICAge2VsZW1lbnRzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnJlbmRlckVsZW1lbnRDb250ZW50KCk7XG4gICAgY29uc3Qgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBSb3coc3VydmV5LCBjb250ZW50LCB0aGlzLnJvdyk7XG4gICAgcmV0dXJuIHdyYXBwZXIgfHwgY29udGVudDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsICYmICF0aGlzLnJvdy5pc05lZWRSZW5kZXIpIHtcbiAgICAgIHZhciByb3dDb250YWluZXJEaXYgPSBlbDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvdy5zdGFydExhenlSZW5kZXJpbmcocm93Q29udGFpbmVyRGl2KTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChuZXh0UHJvcHMucm93ICE9PSB0aGlzLnJvdykge1xuICAgICAgbmV4dFByb3BzLnJvdy5pc05lZWRSZW5kZXIgPSB0aGlzLnJvdy5pc05lZWRSZW5kZXI7XG4gICAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gICAgfVxuICAgIHRoaXMucmVjYWxjdWxhdGVDc3MoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHN0b3BMYXp5UmVuZGVyaW5nKCkge1xuICAgIHRoaXMucm93LnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gICAgdGhpcy5yb3cuaXNOZWVkUmVuZGVyID0gIXRoaXMucm93LmlzTGF6eVJlbmRlcmluZygpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGVsZW1lbnRJbmRleD86IG51bWJlcik6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpbmRleCA9IGVsZW1lbnRJbmRleCA/IFwiLVwiICsgZWxlbWVudEluZGV4IDogMDtcbiAgICB2YXIgZWxlbWVudFR5cGUgPSBlbGVtZW50LmdldFR5cGUoKTtcbiAgICBpZiAoIVJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuaXNFbGVtZW50UmVnaXN0ZXJlZChlbGVtZW50VHlwZSkpIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gXCJxdWVzdGlvblwiO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlLCB7XG4gICAgICBrZXk6IGVsZW1lbnQubmFtZSArIGluZGV4LFxuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgIHN1cnZleTogdGhpcy5zdXJ2ZXksXG4gICAgICBjc3M6IHRoaXMuY3NzLFxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25TaWduYXR1cmVQYWQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBjbGVhckJ1dHRvbiA9IHRoaXMucmVuZGVyQ2xlYW5CdXR0b24oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0gcmVmPXsocm9vdCkgPT4gKHRoaXMuY29udHJvbCA9IHJvb3QpfSBzdHlsZT17eyBoZWlnaHQ6IHRoaXMucXVlc3Rpb24uc2lnbmF0dXJlSGVpZ2h0LCB3aWR0aDogdGhpcy5xdWVzdGlvbi5zaWduYXR1cmVXaWR0aCB9fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLm5lZWRTaG93UGxhY2Vob2xkZXIoKSA/IFwiXCIgOiBcIm5vbmVcIiB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24ucGxhY2VIb2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8Y2FudmFzIHRhYkluZGV4PXswfT48L2NhbnZhcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtjbGVhckJ1dHRvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDbGVhbkJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYoIXRoaXMucXVlc3Rpb24uY2FuU2hvd0NsZWFyQnV0dG9uKSByZXR1cm4gbnVsbDtcblxuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jb250cm9sc30+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY2xlYXJCdXR0b259XG4gICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmNsZWFyQnV0dG9uQ2FwdGlvbn1cbiAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5jbGVhclZhbHVlKCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b25JY29uSWQgPyA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uSWNvbklkfSBzaXplPXtcImF1dG9cIn0+PC9TdmdJY29uPiA6IDxzcGFuPuKcljwvc3Bhbj59XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInNpZ25hdHVyZXBhZFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25TaWduYXR1cmVQYWQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5TG9jU3RyaW5nRWRpdG9yIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBsb2NTdHIoKTogTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyO1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3R5bGU7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdGhpcy5sb2NTdHIub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcclxuICAgIH07XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XHJcbiAgfVxyXG4gIG9uSW5wdXQgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5sb2NTdHIudGV4dCA9IGV2ZW50LnRhcmdldC5pbm5lclRleHQ7XHJcbiAgfTtcclxuICBvbkNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9O1xyXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubG9jU3RyLmhhc0h0bWwpIHtcclxuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMubG9jU3RyLnJlbmRlcmVkSHRtbCB9O1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcclxuICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZT1cInRydWVcIlxyXG4gICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxyXG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGV9XHJcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxyXG4gICAgICAgICAgb25CbHVyPXt0aGlzLm9uSW5wdXR9XHJcbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLm9uQ2xpY2t9XHJcbiAgICAgICAgLz5cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxzcGFuXHJcbiAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXHJcbiAgICAgICAgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxyXG4gICAgICAgIHN0eWxlPXt0aGlzLnN0eWxlfVxyXG4gICAgICAgIG9uQmx1cj17dGhpcy5vbklucHV0fVxyXG4gICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cclxuICAgICAgPlxyXG4gICAgICAgIHt0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWx9XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcclxuICBMb2NhbGl6YWJsZVN0cmluZy5lZGl0YWJsZVJlbmRlcmVyLFxyXG4gIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TG9jU3RyaW5nRWRpdG9yLCBwcm9wcyk7XHJcbiAgfVxyXG4pO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTFNwYW5FbGVtZW50PjtcclxuICBwcml2YXRlIGdldCBsb2NTdHIoKTogTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyO1xyXG4gIH1cclxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3R5bGU7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHRoaXMubG9jU3RyLm9uU3RyaW5nQ2hhbmdlZC5yZW1vdmUodGhpcy5vbkNoYW5nZWRIYW5kbGVyKTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xyXG4gICAgaWYoISFwcmV2UHJvcHMubG9jU3RyKSB7XHJcbiAgICAgIHRoaXMubG9jU3RyLm9uU3RyaW5nQ2hhbmdlZC5yZW1vdmUodGhpcy5vbkNoYW5nZWRIYW5kbGVyKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBpc1JlbmRlcmluZzogYm9vbGVhbjtcclxuICBwcml2YXRlIG9uQ2hhbmdlZEhhbmRsZXIgPSAoc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSkgPT4ge1xyXG4gICAgaWYodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNoYW5nZWQ6ICEhdGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLmNoYW5nZWQgPyB0aGlzLnN0YXRlLmNoYW5nZWQgKyAxIDogMSB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSByZWFjdE9uU3RyQ2hhbmdlZCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHRoaXMubG9jU3RyLm9uU3RyaW5nQ2hhbmdlZC5hZGQodGhpcy5vbkNoYW5nZWRIYW5kbGVyKTtcclxuICB9XHJcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybiBudWxsO1xyXG4gICAgdGhpcy5pc1JlbmRlcmluZyA9IHRydWU7XHJcbiAgICBjb25zdCBzdHJFbCA9IHRoaXMucmVuZGVyU3RyaW5nKCk7XHJcbiAgICB0aGlzLmlzUmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICByZXR1cm4gc3RyRWw7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCByZW5kZXJTdHJpbmcoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgaWYgKHRoaXMubG9jU3RyLmhhc0h0bWwpIHtcclxuICAgICAgbGV0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWwgfTtcclxuICAgICAgcmV0dXJuIDxzcGFuIHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdi1zdHJpbmctdmlld2VyXCIgc3R5bGU9e3RoaXMuc3R5bGV9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxzcGFuIHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdi1zdHJpbmctdmlld2VyXCIgc3R5bGU9e3RoaXMuc3R5bGV9Pnt0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWx9PC9zcGFuPjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRSZW5kZXJlcixcclxuICAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ1ZpZXdlciwgcHJvcHMpO1xyXG4gIH1cclxuKTtcclxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uVGFnYm94TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vYmFzZVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uVGFnYm94SXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25UYWdib3hNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbSAmJiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLml0ZW0ubG9jVGV4dCk7XG5cbiAgICBjb25zdCByZW1vdmVJdGVtID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWwuZGVzZWxlY3RJdGVtKHRoaXMuaXRlbS52YWx1ZSk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsaSBjbGFzc05hbWU9XCJzdi10YWdib3hfX2l0ZW1cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi10YWdib3hfX2l0ZW0tdGV4dFwiPnt0ZXh0fTwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuSXRlbUJ1dHRvbn1cbiAgICAgICAgICBvbkNsaWNrPXtyZW1vdmVJdGVtfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuSXRlbUJ1dHRvblN2Z31cbiAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5JdGVtQnV0dG9uSWNvbklkfVxuICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIEdsb2JhbCBzdXJ2ZXkgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IHZhciBzZXR0aW5ncyA9IHtcbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIFN1cnZleUpTIGNvbXBhcmF0b3IuIEJ5IGRlZmF1bHQgd2UgdHJpbSBzdHJpbmdzIGFuZCBjb21wYXJlIHRoZW0gYXMgY2FzZSBpbnNlbnNpdGl2ZS4gVG8gY2hhbmdlIHRoZSBiZWhhdmlvciB5b3UgY2FuIHVzZSBmb2xsb3dpbmcgY29kZTpcbiAgICogc2V0dGluZ3MuY29tcGFyYXRvci50cmltU3RyaW5ncyA9IGZhbHNlOyAvL1wiYWJjIFwiIHdpbGwgbm90IGVxdWFsIHRvIFwiYWJjXCIuIFRoZXkgYXJlIGVxdWFsIGJ5IGRlZmF1bHQuXG4gICAqIHNldHRpbmdzLmNvbXBhcmF0b3IuY2FzZVNlbnNpdGl2ZSA9IHRydWU7IC8vXCJhYmMgXCIgd2lsbCBub3QgZXF1YWwgdG8gXCJBYmNcIi4gVGhleSBhcmUgZXF1YWwgYnkgZGVmYXVsdC5cbiAgICovXG4gIGNvbXBhcmF0b3I6IHtcbiAgICB0cmltU3RyaW5nczogdHJ1ZSxcbiAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuICB9LFxuICAvKipcbiAgICogU2V0IHRoaXMgdmFsdWUgdG8gZmFsc2UsIGlmIHlvdSB3YW50IHRvIGhhdmUgVVRDIGZ1Y3Rpb25zLCBmb3IgZXhhbXBsZSBzZXRVVENIb3VycyBpbnNpZGUgb3VyIGZ1bmN0aW9ucywgbGlrZSB0b2RheS5cbiAgICogQnkgZGVmYXVsdCBpdCB1c2VzIHNldEhvdXJzIGZ1bmN0aW9uLCB3aXRoIGxvY2FsIGRhdGVcbiAgICovXG4gIHVzZUxvY2FsVGltZVpvbmU6IHRydWUsXG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRoYXQgdXNlcyB0byBzdG9yZSB0aGUgcXVlc3Rpb24gY29tbWVudCwgYXMge3F1ZXN0aW9uTmFtZX0gKyB7Y29tbWVudFByZWZpeH0uXG4gICAqIFRoZSBkZWZhdWx0XG4gICAqL1xuICBjb21tZW50UHJlZml4OiBcIi1Db21tZW50XCIsXG4gIC8qKlxuICAgKiBFbmNvZGUgcGFyYW1ldGVyIG9uIGNhbGxpbmcgcmVzdGZ1bCB3ZWIgQVBJXG4gICAqL1xuICB3ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyczogdHJ1ZSxcbiAgLyoqXG4gICAqIENhY2hlIHRoZSByZXN1bHQgZm9yIGNob2ljZXMgZ2V0dGluZyBmcm9tIHdlYiBzZXJ2aWNlcy4gU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UsIHRvIGRpc2FibGUgdGhlIGNhY2hpbmcuXG4gICAqL1xuICB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw6IHRydWUsXG4gIGdldCB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWxsKCkge1xuICAgIHJldHVybiBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw7XG4gIH0sXG4gIHNldCB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWxsKHZhbDogYm9vbGVhbikge1xuICAgIHNldHRpbmdzLnVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bCA9IHZhbDtcbiAgfSxcbiAgLyoqXG4gICAqIFN1cnZleUpTIHdlYiBzZXJ2aWNlIEFQSSB1cmxcbiAgICovXG4gIHN1cnZleVNlcnZpY2VVcmw6IFwiaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8vcHVibGljL3YxL1N1cnZleVwiLFxuICAvKipcbiAgICogc2VwYXJhdG9yIHRoYXQgY2FuIGFsbG93IHRvIHNldCB2YWx1ZSBhbmQgdGV4dCBvZiBJdGVtVmFsdWUgb2JqZWN0IGluIG9uZSBzdHJpbmcgYXM6IFwidmFsdWV8dGV4dFwiXG4gICAqL1xuICBpdGVtVmFsdWVTZXBhcmF0b3I6IFwifFwiLFxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2VyaWFsaXplIGl0ZW12YWx1ZSBpbnN0YW5jZSBhbHdheXMgYXMgb2JqZWN0IGV2ZW4gaWYgdGV4dCBwcm9wZXJ0eSBpcyBlbXB0eVxuICAgKiBjb25zdCBpdGVtID0gbmV3IFN1cnZleS5JdGVtVmFsdWUoNSk7XG4gICAqIGl0ZW0udG9KU09OKCk7IC8vd2lsbCByZXR1cm4ge3ZhbHVlOiA1fSwgaW5zdGVhZCBvZiA1IGJ5IGRlZmF1bHQuXG4gICAqL1xuICBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzZXJpYWxpemUgaXRlbXZhbHVlIHRleHQgcHJvcGVydHksIGV2ZW4gaWYgaXQgaXMgZW1wdHkgb3IgZXF1YWxzIHRvIHZhbHVlXG4gICAqIGNvbnN0IGl0ZW0gPSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZShcIml0ZW0xXCIpO1xuICAgKiBpdGVtLnRvSlNPTigpOyAvL3dpbGwgcmV0dXJuIHt2YWx1ZTogaXRlbTEsIHRleHQ6IFwiaXRlbTFcIn0sIGluc3RlYWQgb2YgXCJpdGVtMVwiIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVUZXh0OiBmYWxzZSxcbiAgLyoqXG4gICAqIGRlZmF1bHQgbG9jYWxlIG5hbWUgZm9yIGxvY2FsaXphYmxlIHN0cmluZ3MgdGhhdCB1c2VzIGR1cmluZyBzZXJpYWxpemF0aW9uLCB7XCJkZWZhdWx0XCI6IFwiTXkgdGV4dFwiLCBcImRlXCI6IFwiTWVpbiBUZXh0XCJ9XG4gICAqL1xuICBkZWZhdWx0TG9jYWxlTmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJvdyBuYW1lIGZvciBtYXRyaXggKHNpbmdsZSBjaG9pY2UpXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Um93TmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IGNlbGwgdHlwZSBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXNcbiAgICovXG4gIG1hdHJpeERlZmF1bHRDZWxsVHlwZTogXCJkcm9wZG93blwiLFxuICAvKipcbiAgICogVG90YWwgdmFsdWUgcG9zdGZpeCBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXMuIFRoZSB0b3RhbCB2YWx1ZSBzdG9yZXMgYXM6IHttYXRyaXhOYW1lfSArIHtwb3N0Zml4fVxuICAgKi9cbiAgbWF0cml4VG90YWxWYWx1ZVBvc3RGaXg6IFwiLXRvdGFsXCIsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJvdyBjb3VudCBpbiBkeW5hbWljIG1hdHJpeFxuICAgKi9cbiAgbWF0cml4TWF4aW11bVJvd0NvdW50OiAxMDAwLFxuICAvKipcbiAgICogTWF4aW11bSByb3dDb3VudCB0aGF0IHJldHVybnMgaW4gYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCBmdW5jdGlvblxuICAgKi9cbiAgbWF0cml4TWF4Um93Q291bnRJbkNvbmRpdGlvbjogMSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlLCB0byByZW5kZXIgbWF0cml4IGR5bmFtaWMgcmVtb3ZlIGFjdGlvbiBhcyBidXR0b24uXG4gICAqIEl0IGlzIHJlbmRlcmVkIGFzIGljb24gaW4gbmV3IHRoZW1lcyAoXCJkZWZhdWx0VjJcIikgYnkgZGVmYXVsdC5cbiAgICovXG4gIG1hdHJpeFJlbmRlclJlbW92ZUFzSWNvbjogdHJ1ZSxcbiAgLyoqXG4gICAqIE1heGltdW0gcGFuZWwgY291bnQgaW4gZHluYW1pYyBwYW5lbFxuICAgKi9cbiAgcGFuZWxNYXhpbXVtUGFuZWxDb3VudDogMTAwLFxuICAvKipcbiAgICogTWF4aW11bSByYXRlIHZhbHVlIGNvdW50IGluIHJhdGluZyBxdWVzdGlvblxuICAgKi9cbiAgcmF0aW5nTWF4aW11bVJhdGVWYWx1ZUNvdW50OiAyMCxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHF1ZXN0aW9uIHdoaWxlIGNob2ljZXMgYXJlIGdldHRpbmcgZnJvbSB0aGUgd2ViIHNlcnZpY2VcbiAgICovXG4gIGRpc2FibGVPbkdldHRpbmdDaG9pY2VzRnJvbVdlYjogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBhbHdheXMgc2VyaWFsaXplIHRoZSBsb2NhbGl6YXRpb24gc3RyaW5nIGFzIG9iamVjdCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lIHZhbHVlIGZvciBkZWZhdWx0IGxvY2FsZS4gSW5zdGVhZCBvZiBzdHJpbmcgXCJNeVN0clwiIHNlcmlhbGl6ZSBhcyB7ZGVmYXVsdDogXCJNeVN0clwifVxuICAgKi9cbiAgc2VyaWFsaXplTG9jYWxpemFibGVTdHJpbmdBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBpbiBkZXNpZ24gbW9kZVxuICAgKi9cbiAgYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBoaWRlIGVtcHR5IHBhZ2UgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGV4ZWN1dGUgdGhlIGNvbXBsZXRlIHRyaWdnZXIgb24gdmFsdWUgY2hhbmdlIGluc3RlYWQgb2Ygb24gbmV4dCBwYWdlLlxuICAgKi9cbiAgZXhlY3V0ZUNvbXBsZXRlVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGV4ZWN1dGUgdGhlIHNraXAgdHJpZ2dlciBvbiBuZXh0IHBhZ2UgaW5zdGVhZCBvZiBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqL1xuICBleGVjdXRlU2tpcFRyaWdnZXJPblZhbHVlQ2hhbmdlZDogdHJ1ZSxcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgdGhlIGlucHV0IGZpZWxkIG9mIFtDb21tZW50XShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbmNvbW1lbnRtb2RlbCkgcXVlc3Rpb25zIGlzIHJlbmRlcmVkIGluIHRoZSByZWFkLW9ubHkgbW9kZS5cbiAgICogQXZhaWxhYmxlIHZhbHVlczpcbiAgICogXCJ0ZXh0YXJlYVwiIChkZWZhdWx0KSAtIEEgJ3RleHRhcmVhJyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgQ29tbWVudCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKiBcImRpdlwiIC0gQSAnZGl2JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgQ29tbWVudCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgcmVhZE9ubHlDb21tZW50UmVuZGVyTW9kZTogXCJ0ZXh0YXJlYVwiLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyB0aGUgaW5wdXQgZmllbGQgb2YgW1RleHRdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9udGV4dG1vZGVsKSBxdWVzdGlvbnMgaXMgcmVuZGVyZWQgaW4gdGhlIHJlYWQtb25seSBtb2RlLlxuICAgKiBBdmFpbGFibGUgdmFsdWVzOlxuICAgKiBcImlucHV0XCIgKGRlZmF1bHQpIC0gQW4gJ2lucHV0JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgVGV4dCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKiBcImRpdlwiIC0gQSAnZGl2JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgVGV4dCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgcmVhZE9ubHlUZXh0UmVuZGVyTW9kZTogXCJpbnB1dFwiLFxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiwgc2V0IHlvdXIgZnVuY3Rpb24sIGlmIHlvdSB3YW50IHRvIHNob3cgeW91ciBvd24gZGlhbG9nIGNvbmZpcm0gd2luZG93IGluc3RlYWQgb2Ygc3RhbmRhcmQgYnJvd3NlciB3aW5kb3cuXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqL1xuICBjb25maXJtQWN0aW9uRnVuYzogZnVuY3Rpb24gKG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb25maXJtKG1lc3NhZ2UpO1xuICB9LFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtaW5XaWR0aCBjb25zdHJhaW50XG4gICAqL1xuICBtaW5XaWR0aDogXCIzMDBweFwiLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtaW5XaWR0aCBjb25zdHJhaW50XG4gICAqL1xuICBtYXhXaWR0aDogXCJpbml0aWFsXCIsXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IHRlbGxzIGhvdyBtYW55IHRpbWVzIHN1cnZleSByZS1ydW4gZXhwcmVzc2lvbnMgb24gdmFsdWUgY2hhbmdlcyBkdXJpbmcgY29uZGl0aW9uIHJ1bm5pbmcuIFdlIG5lZWQgaXQgdG8gYXZvaWQgcmVjdXJzaW9ucyBpbiB0aGUgZXhwcmVzc2lvbnNcbiAgICovXG4gIG1heGltdW1Db25kaXRpb25SdW5Db3VudE9uVmFsdWVDaGFuZ2VkOiAxMCxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdmlzaWJsZUluZGV4IGZvciBxdWVzdGlvbiB3aXRoIHRpdGxlTG9jYXRpb24gPSBcImhpZGRlblwiIGlzIC0xLCBhbmQgc3VydmV5IGRvZXNuJ3QgY291bnQgdGhlc2UgcXVlc3Rpb25zIHdoZW4gc2V0IHF1ZXN0aW9ucyBudW1iZXJzLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIGEgcXVlc3Rpb24gbmV4dCB0byBhIHF1ZXN0aW9uIHdpdGggaGlkZGVuIHRpdGxlIHdpbGwgaW5jcmVhc2UgaXQncyBudW1iZXIuXG4gICAqL1xuICBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlblRpdGxlOiBmYWxzZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdmlzaWJsZUluZGV4IGZvciBxdWVzdGlvbiB3aXRoIGhpZGVOdW1iZXIgPSB0cnVlIGlzIC0xLCBhbmQgc3VydmV5IGRvZXNuJ3QgY291bnQgdGhlc2UgcXVlc3Rpb25zIHdoZW4gc2V0IHF1ZXN0aW9ucyBudW1iZXJzLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIGEgcXVlc3Rpb24gbmV4dCB0byBhIHF1ZXN0aW9uIHdpdGggaGlkZGVuIHRpdGxlIG51bWJlciB3aWxsIGluY3JlYXNlIGl0J3MgbnVtYmVyLlxuICAgKi9cbiAgc2V0UXVlc3Rpb25WaXNpYmxlSW5kZXhGb3JIaWRkZW5OdW1iZXI6IGZhbHNlLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCBhbGwgcm93cyBhcmUgcmVuZGVyZWQgbm8gbWF0dGVycyB3aHd0aGVyIHRoZXkgYXJlIHZpc2libGUuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgc3VydmV5IG1hcmt1cCByb3dzIHdpbGwgYmUgcmVuZGVyZWQgb25seSBpZiB0aGV5IGFyZSB2aXNpYmxlIGluIHZpZXdwb3J0LlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWFudGFsIGFuZCBtaWdodCBkbyBub3Qgc3VwcG9ydCBhbGwgdGhlIHVzZSBjYXNlcy5cbiAgICovXG4gIGxhenlSb3dzUmVuZGVyaW5nOiBmYWxzZSxcbiAgbGF6eVJvd3NSZW5kZXJpbmdTdGFydFJvdzogMyxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgY2hlY2tib3ggYW5kIHJhZGlvZ3JvdXAgaXRlbXMgYXJlIG9yZGVyZWQgaW4gcm93cy5cbiAgICogU2V0IGl0IFwiY29sdW1uXCIsIGFuZCBpdGVtcyB3aWxsIGJlIG9yZGVyZWQgaW4gY29sdW1ucy5cbiAgICovXG4gIHNob3dJdGVtc0luT3JkZXI6IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogU3VwcG9ydGVkIHZhbGlkYXRvcnMgYnkgcXVlc3Rpb24gdHlwZXMuIFlvdSBjYW4gbW9kaWZ5IHRoaXMgdmFyaWFibGUgdG8gYWRkIHZhbGlkYXRvcnMgZm9yIG5ldyBxdWVzdGlvbiB0eXBlcyBvciBhZGQvcmVtb3ZlIGZvciBleGlzdGluZyBxdWVzdGlvbiB0eXBlcy5cbiAgICovXG4gIHN1cHBvcnRlZFZhbGlkYXRvcnM6IHtcbiAgICBxdWVzdGlvbjogW1wiZXhwcmVzc2lvblwiXSxcbiAgICBjb21tZW50OiBbXCJ0ZXh0XCIsIFwicmVnZXhcIl0sXG4gICAgdGV4dDogW1wibnVtZXJpY1wiLCBcInRleHRcIiwgXCJyZWdleFwiLCBcImVtYWlsXCJdLFxuICAgIGNoZWNrYm94OiBbXCJhbnN3ZXJjb3VudFwiXSxcbiAgICBpbWFnZXBpY2tlcjogW1wiYW5zd2VyY291bnRcIl0sXG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgbGVzcyB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1pbkRhdGU6IFwiXCIsXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1heERhdGU6IFwiXCIsXG4gIHNob3dNb2RhbDogPFxuICAgIChcbiAgICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIG9uQXBwbHk6ICgpID0+IGJvb2xlYW4sXG4gICAgICBvbkNhbmNlbD86ICgpID0+IHZvaWQsXG4gICAgICBjc3NDbGFzcz86IHN0cmluZyxcbiAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgZGlzcGxheU1vZGU/OiBcInBvcHVwXCIgfCBcIm92ZXJsYXlcIlxuICAgICkgPT4gdm9pZFxuICAgID51bmRlZmluZWQsXG4gIHN1cHBvcnRDcmVhdG9yVjI6IGZhbHNlLFxuICBzaG93RGVmYXVsdEl0ZW1zSW5DcmVhdG9yVjI6IHRydWUsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBsaXN0IG9mIGN1c3RvbSBpY29ucy5cbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVwbGFjZSBTdXJ2ZXlKUyBkZWZhdWx0IGljb25zIChkaXNwbGF5ZWQgaW4gVUkgZWxlbWVudHMgb2YgU3VydmV5SlMgTGlicmFyeSBvciBDcmVhdG9yKSB3aXRoIHlvdXIgY3VzdG9tIGljb25zLlxuICAgKiBGb3IgZXZlcnkgZGVmYXVsdCBpY29uIHRvIHJlcGxhY2UsIGFkZCBhIGtleS92YWx1ZSBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCBpY29uJ3MgbmFtZSBhcyBhIGtleSBhbmQgdGhlIG5hbWUgb2YgeW91ciBjdXN0b20gaWNvbiBhcyBhIHZhbHVlLlxuICAgKiBGb3IgZXhhbXBsZTogU3VydmV5LnNldHRpbmdzLmN1c3RvbUljb25zW1wiaWNvbi1yZWRvXCJdID0gXCJteS1vd24tcmVkby1pY29uXCJcbiAgICovXG4gIGN1c3RvbUljb25zOiB7fSxcbiAgdGl0bGVUYWdzOiB7XG4gICAgc3VydmV5OiBcImgzXCIsXG4gICAgcGFnZTogXCJoNFwiLFxuICAgIHBhbmVsOiBcImg0XCIsXG4gICAgcXVlc3Rpb246IFwiaDVcIixcbiAgfSxcbiAgcXVlc3Rpb25zOiB7XG4gICAgaW5wdXRUeXBlczogW1xuICAgICAgXCJjb2xvclwiLFxuICAgICAgXCJkYXRlXCIsXG4gICAgICBcImRhdGV0aW1lXCIsXG4gICAgICBcImRhdGV0aW1lLWxvY2FsXCIsXG4gICAgICBcImVtYWlsXCIsXG4gICAgICBcIm1vbnRoXCIsXG4gICAgICBcIm51bWJlclwiLFxuICAgICAgXCJwYXNzd29yZFwiLFxuICAgICAgXCJyYW5nZVwiLFxuICAgICAgXCJ0ZWxcIixcbiAgICAgIFwidGV4dFwiLFxuICAgICAgXCJ0aW1lXCIsXG4gICAgICBcInVybFwiLFxuICAgICAgXCJ3ZWVrXCIsXG4gICAgXSxcbiAgICBkYXRhTGlzdDogW1xuICAgICAgXCJuYW1lXCIsXG4gICAgICBcImhvbm9yaWZpYy1wcmVmaXhcIixcbiAgICAgIFwiZ2l2ZW4tbmFtZVwiLFxuICAgICAgXCJhZGRpdGlvbmFsLW5hbWVcIixcbiAgICAgIFwiZmFtaWx5LW5hbWVcIixcbiAgICAgIFwiaG9ub3JpZmljLXN1ZmZpeFwiLFxuICAgICAgXCJuaWNrbmFtZVwiLFxuICAgICAgXCJvcmdhbml6YXRpb24tdGl0bGVcIixcbiAgICAgIFwidXNlcm5hbWVcIixcbiAgICAgIFwibmV3LXBhc3N3b3JkXCIsXG4gICAgICBcImN1cnJlbnQtcGFzc3dvcmRcIixcbiAgICAgIFwib3JnYW5pemF0aW9uXCIsXG4gICAgICBcInN0cmVldC1hZGRyZXNzXCIsXG4gICAgICBcImFkZHJlc3MtbGluZTFcIixcbiAgICAgIFwiYWRkcmVzcy1saW5lMlwiLFxuICAgICAgXCJhZGRyZXNzLWxpbmUzXCIsXG4gICAgICBcImFkZHJlc3MtbGV2ZWw0XCIsXG4gICAgICBcImFkZHJlc3MtbGV2ZWwzXCIsXG4gICAgICBcImFkZHJlc3MtbGV2ZWwyXCIsXG4gICAgICBcImFkZHJlc3MtbGV2ZWwxXCIsXG4gICAgICBcImNvdW50cnlcIixcbiAgICAgIFwiY291bnRyeS1uYW1lXCIsXG4gICAgICBcInBvc3RhbC1jb2RlXCIsXG4gICAgICBcImNjLW5hbWVcIixcbiAgICAgIFwiY2MtZ2l2ZW4tbmFtZVwiLFxuICAgICAgXCJjYy1hZGRpdGlvbmFsLW5hbWVcIixcbiAgICAgIFwiY2MtZmFtaWx5LW5hbWVcIixcbiAgICAgIFwiY2MtbnVtYmVyXCIsXG4gICAgICBcImNjLWV4cFwiLFxuICAgICAgXCJjYy1leHAtbW9udGhcIixcbiAgICAgIFwiY2MtZXhwLXllYXJcIixcbiAgICAgIFwiY2MtY3NjXCIsXG4gICAgICBcImNjLXR5cGVcIixcbiAgICAgIFwidHJhbnNhY3Rpb24tY3VycmVuY3lcIixcbiAgICAgIFwidHJhbnNhY3Rpb24tYW1vdW50XCIsXG4gICAgICBcImxhbmd1YWdlXCIsXG4gICAgICBcImJkYXlcIixcbiAgICAgIFwiYmRheS1kYXlcIixcbiAgICAgIFwiYmRheS1tb250aFwiLFxuICAgICAgXCJiZGF5LXllYXJcIixcbiAgICAgIFwic2V4XCIsXG4gICAgICBcInVybFwiLFxuICAgICAgXCJwaG90b1wiLFxuICAgICAgXCJ0ZWxcIixcbiAgICAgIFwidGVsLWNvdW50cnktY29kZVwiLFxuICAgICAgXCJ0ZWwtbmF0aW9uYWxcIixcbiAgICAgIFwidGVsLWFyZWEtY29kZVwiLFxuICAgICAgXCJ0ZWwtbG9jYWxcIixcbiAgICAgIFwidGVsLWxvY2FsLXByZWZpeFwiLFxuICAgICAgXCJ0ZWwtbG9jYWwtc3VmZml4XCIsXG4gICAgICBcInRlbC1leHRlbnNpb25cIixcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIFwiaW1wcFwiLFxuICAgIF1cbiAgfVxufTtcbiIsImltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi4vYWN0aW9ucy9hY3Rpb25cIjtcbmltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5pbXBvcnQgeyBpc0NvbnRhaW5lclZpc2libGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgSURpbWVuc2lvbnMge1xuICBzY3JvbGw6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNwb25zaXZpdHlNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgbWluRGltZW5zaW9uQ29uc3QgPSA1NjtcbiAgcHJpdmF0ZSBzZXBhcmF0b3JTaXplID0gMTc7XG4gIHByaXZhdGUgc2VwYXJhdG9yQWRkQ29uc3QgPSAxO1xuICBwcml2YXRlIHBhZGRpbmdTaXplQ29uc3QgPSA4O1xuICBwcm90ZWN0ZWQgcmVjYWxjTWluRGltZW5zaW9uQ29uc3QgPSB0cnVlO1xuXG4gIHB1YmxpYyBnZXRDb21wdXRlZFN0eWxlOiAoXG4gICAgZWx0OiBFbGVtZW50XG4gICkgPT4gQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLmJpbmQod2luZG93KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCxcbiAgICBwcml2YXRlIG1vZGVsOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcixcbiAgICBwcml2YXRlIGl0ZW1zU2VsZWN0b3I6IHN0cmluZyxcbiAgICBwcml2YXRlIGRvdHNJdGVtU2l6ZTogbnVtYmVyID0gNDgsXG4gICkge1xuXG4gICAgdGhpcy5tb2RlbC51cGRhdGVDYWxsYmFjayA9IChpc1Jlc2V0SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmKGlzUmVzZXRJbml0aWFsaXplZClcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICBlbHNlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnByb2Nlc3MoKTsgfSwgMSk7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChfKSA9PiB0aGlzLnByb2Nlc3MoKSk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXIucGFyZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpbWVuc2lvbnMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogZWxlbWVudC5zY3JvbGxXaWR0aCxcbiAgICAgIG9mZnNldDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZSA9IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1JpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0V2lkdGg7XG4gIH1cblxuICBwcml2YXRlIGNhbGNNaW5EaW1lbnNpb24oY3VycmVudEFjdGlvbjogQWN0aW9uKSB7XG4gICAgbGV0IG1pbkRpbWVuc2lvbkNvbnN0ID0gdGhpcy5taW5EaW1lbnNpb25Db25zdDtcbiAgICBpZihjdXJyZW50QWN0aW9uLmljb25TaXplICYmIHRoaXMucmVjYWxjTWluRGltZW5zaW9uQ29uc3QpIHtcbiAgICAgIG1pbkRpbWVuc2lvbkNvbnN0ID0gMiAqIGN1cnJlbnRBY3Rpb24uaWNvblNpemUgKyB0aGlzLnBhZGRpbmdTaXplQ29uc3Q7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50QWN0aW9uLmNhblNocmlua1xuICAgICAgPyBtaW5EaW1lbnNpb25Db25zdCArXG4gICAgICAoY3VycmVudEFjdGlvbi5uZWVkU2VwYXJhdG9yID8gdGhpcy5zZXBhcmF0b3JTaXplIDogMClcbiAgICAgIDogY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb247XG4gIH1cblxuICBwcml2YXRlIGNhbGNJdGVtc1NpemVzKCkge1xuICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLm1vZGVsLmFjdGlvbnM7XG4gICAgdGhpcy5jb250YWluZXJcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuaXRlbXNTZWxlY3RvcilcbiAgICAgIC5mb3JFYWNoKChpdGVtOiBIVE1MRGl2RWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQgY3VycmVudEFjdGlvbiA9IGFjdGlvbnNbaW5kZXhdO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbiA9IHRoaXMuY2FsY0l0ZW1TaXplKGl0ZW0pO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1pbkRpbWVuc2lvbiA9IHRoaXMuY2FsY01pbkRpbWVuc2lvbihjdXJyZW50QWN0aW9uKTtcbiAgICAgIH0pO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzQ29udGFpbmVyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDb250YWluZXJWaXNpYmxlKHRoaXMuY29udGFpbmVyKTtcbiAgfVxuICBwcml2YXRlIHByb2Nlc3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNDb250YWluZXJWaXNpYmxlICYmICF0aGlzLm1vZGVsLmlzUmVzcG9uc2l2ZW5lc3NEaXNhYmxlZCkge1xuICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRBY3Rpb25zTW9kZShcImxhcmdlXCIpO1xuICAgICAgICB0aGlzLmNhbGNJdGVtc1NpemVzKCk7XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLm1vZGVsLmZpdCh0aGlzLmdldEF2YWlsYWJsZVNwYWNlKCksIHRoaXMuZG90c0l0ZW1TaXplKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIGlmICghIXRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyIGV4dGVuZHMgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIGl0ZW1zU2VsZWN0b3I6IHN0cmluZyxcbiAgICBkb3RzSXRlbVNpemU/OiBudW1iZXIsXG4gICAgbWluRGltZW5zaW9uID0gNDBcbiAgKSB7XG4gICAgc3VwZXIoY29udGFpbmVyLCBtb2RlbCwgaXRlbXNTZWxlY3RvciwgZG90c0l0ZW1TaXplKTtcbiAgICB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0ID0gbWluRGltZW5zaW9uO1xuICAgIHRoaXMucmVjYWxjTWluRGltZW5zaW9uQ29uc3QgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaW1lbnNpb25zKCk6IElEaW1lbnNpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsOiB0aGlzLmNvbnRhaW5lci5zY3JvbGxIZWlnaHQsXG4gICAgICBvZmZzZXQ6IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZTogbnVtYmVyID0gdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3ApICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0SGVpZ2h0O1xuICB9XG59XG4iLCJpbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuLy4uL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4uL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3JjL2Jhc2VcIjtcbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyhhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCByZWdFeFN0cmlwMDogUmVnRXhwID0gLyhcXC4wKykrJC87XG4gIGNvbnN0IHNlZ21lbnRzQTogc3RyaW5nW10gPSBhLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgY29uc3Qgc2VnbWVudHNCOiBzdHJpbmdbXSA9IGIucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBsZW46IG51bWJlciA9IE1hdGgubWluKHNlZ21lbnRzQS5sZW5ndGgsIHNlZ21lbnRzQi5sZW5ndGgpO1xuICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBkaWZmOiBudW1iZXIgPVxuICAgICAgcGFyc2VJbnQoc2VnbWVudHNBW2ldLCAxMCkgLSBwYXJzZUludChzZWdtZW50c0JbaV0sIDEwKTtcbiAgICBpZiAoZGlmZikge1xuICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZWdtZW50c0EubGVuZ3RoIC0gc2VnbWVudHNCLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1BY3Rpb24obWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghIXNldHRpbmdzICYmICEhc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMpXG4gICAgcmV0dXJuIHNldHRpbmdzLmNvbmZpcm1BY3Rpb25GdW5jKG1lc3NhZ2UpO1xuICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGRldGVjdElFQnJvd3NlcigpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdWE6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICBjb25zdCBvbGRJZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICBjb25zdCBlbGV2ZW5JZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICByZXR1cm4gb2xkSWUgPiAtMSB8fCBlbGV2ZW5JZSA+IC0xO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVPckVkZ2UoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICAgIGNvbnN0IHRyaWRlbnQ6IG51bWJlciA9IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKTtcbiAgICBjb25zdCBlZGdlOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiRWRnZS9cIik7XG4gICAgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPSBlZGdlID4gMCB8fCB0cmlkZW50ID4gMCB8fCBtc2llID4gMDtcbiAgfVxuICByZXR1cm4gKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2U7XG59XG5mdW5jdGlvbiBsb2FkRmlsZUZyb21CYXNlNjQoYjY0RGF0YTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYnl0ZVN0cmluZzogc3RyaW5nID0gYXRvYihiNjREYXRhLnNwbGl0KFwiLFwiKVsxXSk7XG5cbiAgICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gICAgY29uc3QgbWltZVN0cmluZzogc3RyaW5nID0gYjY0RGF0YVxuICAgICAgLnNwbGl0KFwiLFwiKVswXVxuICAgICAgLnNwbGl0KFwiOlwiKVsxXVxuICAgICAgLnNwbGl0KFwiO1wiKVswXTtcblxuICAgIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXG4gICAgY29uc3QgYWI6IEFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYTogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICAvLyB3cml0ZSB0aGUgQXJyYXlCdWZmZXIgdG8gYSBibG9iLCBhbmQgeW91J3JlIGRvbmVcbiAgICBjb25zdCBiYjogQmxvYiA9IG5ldyBCbG9iKFthYl0sIHsgdHlwZTogbWltZVN0cmluZyB9KTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICB3aW5kb3cubmF2aWdhdG9yICYmXG4gICAgICAoPGFueT53aW5kb3cubmF2aWdhdG9yKVtcIm1zU2F2ZUJsb2JcIl1cbiAgICApIHtcbiAgICAgICg8YW55PndpbmRvdy5uYXZpZ2F0b3IpW1wibXNTYXZlT3JPcGVuQmxvYlwiXShiYiwgZmlsZU5hbWUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7IH1cbn1cbmZ1bmN0aW9uIGlzTW9iaWxlKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgdGhyZXNob2xkOiBudW1iZXIgPSAwXG4pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbGVtZW50UmVjdDogRE9NUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHZpZXdIZWlnaHQ6IG51bWJlciA9IE1hdGgubWF4KFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgd2luZG93LmlubmVySGVpZ2h0XG4gICk7XG4gIGNvbnN0IHRvcFdpbjogbnVtYmVyID0gLXRocmVzaG9sZDtcbiAgY29uc3QgYm90dG9tV2luOiBudW1iZXIgPSB2aWV3SGVpZ2h0ICsgdGhyZXNob2xkO1xuICBjb25zdCB0b3BFbDogbnVtYmVyID0gZWxlbWVudFJlY3QudG9wO1xuICBjb25zdCBib3R0b21FbDogbnVtYmVyID0gZWxlbWVudFJlY3QuYm90dG9tO1xuXG4gIGNvbnN0IG1heFRvcDogbnVtYmVyID0gTWF0aC5tYXgodG9wV2luLCB0b3BFbCk7XG4gIGNvbnN0IG1pbkJvdHRvbTogbnVtYmVyID0gTWF0aC5taW4oYm90dG9tV2luLCBib3R0b21FbCk7XG4gIHJldHVybiBtYXhUb3AgPD0gbWluQm90dG9tO1xufVxuXG5mdW5jdGlvbiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuICBpZiAoXG4gICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WSA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGlmIChcbiAgICBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WCA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1ggPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxFbGVtZW50QnlDaGlsZElkKGlkOiBzdHJpbmcpIHtcbiAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICBjb25zdCBzY3JvbGxhYmxlRWwgPSBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbCk7XG4gIGlmICghIXNjcm9sbGFibGVFbCkge1xuICAgIHNjcm9sbGFibGVFbC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNjcm9sbFwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaWNvbk5hbWUpIHJldHVybiBpY29uTmFtZTtcbiAgdmFyIHByb3h5TmFtZSA9ICg8YW55PnNldHRpbmdzLmN1c3RvbUljb25zKVtpY29uTmFtZV07XG4gIHJldHVybiAhIXByb3h5TmFtZSA/IHByb3h5TmFtZSA6IGljb25OYW1lO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdmcoXG4gIHNpemU6IG51bWJlciB8IHN0cmluZyxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGljb25OYW1lOiBzdHJpbmcsXG4gIHN2Z0VsZW06IGFueVxuKSB7XG4gIGlmICghc3ZnRWxlbSkgcmV0dXJuO1xuICBpZiAoc2l6ZSAhPT0gXCJhdXRvXCIpIHtcbiAgICBzdmdFbGVtLnN0eWxlLndpZHRoID0gKHNpemUgfHwgd2lkdGggfHwgMTYpICsgXCJweFwiO1xuICAgIHN2Z0VsZW0uc3R5bGUuaGVpZ2h0ID0gKHNpemUgfHwgaGVpZ2h0IHx8IDE2KSArIFwicHhcIjtcbiAgfVxuICBjb25zdCBub2RlOiBhbnkgPSBzdmdFbGVtLmNoaWxkTm9kZXNbMF07XG4gIGNvbnN0IHJlYWxJY29uTmFtZSA9IGdldEljb25OYW1lRnJvbVByb3h5KGljb25OYW1lKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhcbiAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICBcInhsaW5rOmhyZWZcIixcbiAgICBcIiNcIiArIHJlYWxJY29uTmFtZVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwPFQ+KHZhbHVlOiBUIHwgKCgpID0+IFQpKTogVCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKDwoKSA9PiBUPnZhbHVlKSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaXplKHZhbHVlOiBhbnkpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBcIlwiICsgdmFsdWUgKyBcInB4XCI7XG4gIH1cbiAgaWYgKCEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsYXN0U3ltYm9sOiBzdHJpbmcgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcbiAgICBpZiAoKGxhc3RTeW1ib2wgPj0gXCIwXCIgJiYgbGFzdFN5bWJvbCA8PSBcIjlcIikgfHwgbGFzdFN5bWJvbCA9PSBcIi5cIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbnVtOiBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFwiXCIgKyBudW0gKyBcInB4XCI7XG4gICAgICB9IGNhdGNoIHsgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF0dGFjaEtleTJjbGlja09wdGlvbnMge1xuICBwcm9jZXNzRXNjPzogYm9vbGVhbjtcbiAgZGlzYWJsZVRhYlN0b3A/OiBib29sZWFuO1xufVxuXG5jb25zdCBrZXlGb2N1c2VkQ2xhc3NOYW1lID0gXCJzdi1mb2N1c2VkLS1ieS1rZXlcIjtcbmV4cG9ydCBmdW5jdGlvbiBkb0tleTJDbGlja0JsdXIoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gIGNvbnN0IGVsZW1lbnQ6IGFueSA9IGV2dC50YXJnZXQ7XG4gIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5jbGFzc0xpc3QpIHJldHVybjtcbiAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGtleUZvY3VzZWRDbGFzc05hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9LZXkyQ2xpY2tVcChldnQ6IEtleWJvYXJkRXZlbnQsIG9wdGlvbnM/OiBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyk6IHZvaWQge1xuICBpZiAoISFldnQudGFyZ2V0ICYmICg8YW55PmV2dC50YXJnZXQpW1wiY29udGVudEVkaXRhYmxlXCJdID09PSBcInRydWVcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlbGVtZW50OiBhbnkgPSBldnQudGFyZ2V0O1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgY29uc3QgY2hhcjogbnVtYmVyID0gZXZ0LndoaWNoIHx8IGV2dC5rZXlDb2RlO1xuICBpZiAoY2hhciA9PT0gOSkge1xuICAgIGlmICghIWVsZW1lbnQuY2xhc3NMaXN0ICYmICFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhrZXlGb2N1c2VkQ2xhc3NOYW1lKSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGtleUZvY3VzZWRDbGFzc05hbWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjaGFyID09PSAxMyB8fCBjaGFyID09PSAzMikge1xuICAgIGlmIChlbGVtZW50LmNsaWNrKSBlbGVtZW50LmNsaWNrKCk7XG4gIH0gZWxzZSBpZiAoKCFvcHRpb25zIHx8IG9wdGlvbnMucHJvY2Vzc0VzYykgJiYgY2hhciA9PT0gMjcpIHtcbiAgICBpZiAoZWxlbWVudC5ibHVyKSBlbGVtZW50LmJsdXIoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9LZXkyQ2xpY2tEb3duKGV2dDogS2V5Ym9hcmRFdmVudCwgb3B0aW9uczogSUF0dGFjaEtleTJjbGlja09wdGlvbnMgPSB7IHByb2Nlc3NFc2M6IHRydWUgfSk6IHZvaWQge1xuICBpZiAoISFldnQudGFyZ2V0ICYmICg8YW55PmV2dC50YXJnZXQpW1wiY29udGVudEVkaXRhYmxlXCJdID09PSBcInRydWVcIikge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY2hhciA9IGV2dC53aGljaCB8fCBldnQua2V5Q29kZTtcbiAgY29uc3Qgc3VwcG9ydGVkQ29kZXMgPSBbMTMsIDMyXTtcbiAgaWYgKG9wdGlvbnMucHJvY2Vzc0VzYykge1xuICAgIHN1cHBvcnRlZENvZGVzLnB1c2goMjcpO1xuICB9XG4gIGlmIChzdXBwb3J0ZWRDb2Rlcy5pbmRleE9mKGNoYXIpICE9PSAtMSkge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5mdW5jdGlvbiBpbmNyZWFzZUhlaWdodEJ5Q29udGVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgZ2V0Q29tcHV0ZWRTdHlsZT86IChlbHQ6IEVsZW1lbnQpID0+IGFueSkge1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgaWYgKCFnZXRDb21wdXRlZFN0eWxlKSBnZXRDb21wdXRlZFN0eWxlID0gKGVsdDogRWxlbWVudCkgPT4geyByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWx0KTsgfTtcblxuICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XG4gIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gKGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgKyBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSkgKyBcInB4XCI7XG59XG5mdW5jdGlvbiBnZXRPcmlnaW5hbEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgcmV0dXJuIGV2ZW50Lm9yaWdpbmFsRXZlbnQgfHwgZXZlbnQ7XG59XG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdHMoZXZlbnQ6IGFueSkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cbmZ1bmN0aW9uIGNsYXNzZXNUb1NlbGVjdG9yKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmUgPSAvXFxzKj8oW1xcdy1dKylcXHMqPy9nO1xuICByZXR1cm4gc3RyLnJlcGxhY2UocmUsIFwiLiQxXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50V2lkdGgoZWw6IEhUTUxFbGVtZW50KSB7XG4gIHJldHVybiAhIWdldENvbXB1dGVkU3R5bGUgPyBOdW1iZXIucGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKGVsKS53aWR0aCkgOiBlbC5vZmZzZXRXaWR0aDtcbn1cblxuZnVuY3Rpb24gaXNDb250YWluZXJWaXNpYmxlKGVsOiBIVE1MRWxlbWVudCkge1xuICByZXR1cm4gISEoXG4gICAgZWwub2Zmc2V0V2lkdGggfHxcbiAgICBlbC5vZmZzZXRIZWlnaHQgfHxcbiAgICBlbC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aFxuICApO1xufVxuXG5mdW5jdGlvbiBmaW5kUGFyZW50QnlDbGFzc05hbWVzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjbGFzc05hbWVzOiBBcnJheTxzdHJpbmc+KTogRWxlbWVudCB7XG4gIGlmICghIWVsZW1lbnQpIHtcbiAgICBpZiAoY2xhc3NOYW1lcy5ldmVyeShjbGFzc05hbWUgPT4gIWNsYXNzTmFtZSB8fCBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaW5kUGFyZW50QnlDbGFzc05hbWVzKGVsZW1lbnQucGFyZW50RWxlbWVudCwgY2xhc3NOYW1lcyk7XG4gICAgfVxuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVFZGl0YWJsZUNvbnRlbnQoZWxlbWVudDogYW55KSB7XG4gIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50LmNyZWF0ZVJhbmdlICYmIGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBsZXQgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICByYW5nZS5zZXRTdGFydChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kQWZ0ZXIoZWxlbWVudC5sYXN0Q2hpbGQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIGNvbnN0IHRhaWxfbGVuID0gc2VsZWN0aW9uLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxuL2csIFwiXCIpLmxlbmd0aDtcblxuICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gZWxlbWVudC5pbm5lclRleHQucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChlbGVtZW50LmNoaWxkTm9kZXNbMF0sIGVsZW1lbnQuaW5uZXJUZXh0Lmxlbmd0aCAtIHRhaWxfbGVuKTtcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBnZXRFbGVtZW50V2lkdGgsXG4gIGlzQ29udGFpbmVyVmlzaWJsZSxcbiAgY2xhc3Nlc1RvU2VsZWN0b3IsXG4gIGNvbXBhcmVWZXJzaW9ucyxcbiAgY29uZmlybUFjdGlvbixcbiAgZGV0ZWN0SUVPckVkZ2UsXG4gIGRldGVjdElFQnJvd3NlcixcbiAgbG9hZEZpbGVGcm9tQmFzZTY0LFxuICBpc01vYmlsZSxcbiAgaXNFbGVtZW50VmlzaWJsZSxcbiAgZmluZFNjcm9sbGFibGVQYXJlbnQsXG4gIHNjcm9sbEVsZW1lbnRCeUNoaWxkSWQsXG4gIGNyZWF0ZVN2ZyxcbiAgZ2V0SWNvbk5hbWVGcm9tUHJveHksXG4gIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50LFxuICBnZXRPcmlnaW5hbEV2ZW50LFxuICBwcmV2ZW50RGVmYXVsdHMsXG4gIGZpbmRQYXJlbnRCeUNsYXNzTmFtZXNcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX187Il0sInNvdXJjZVJvb3QiOiIifQ==
10368
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvZW50cmllcy9jb3JlLWV4cG9ydC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9lbnRyaWVzL3JlYWN0LXVpLW1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL2VudHJpZXMvcmVhY3QtdWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1jaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1yYWRpby50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9icmFuZC1pbmZvLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC9yb3cudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wb3B1cC9wb3B1cC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9za2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL2xvZ28taW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jdXN0b20td2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1iYXNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1zZWxlY3QudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2VsZW1lbnQtZmFjdG9yeS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvZWxlbWVudC1oZWFkZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2Zsb3ctcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2ltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9pbWFnZXBpY2tlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwtYmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JhdGluZy1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3QtcG9wdXAtc3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fYnV0dG9uZ3JvdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY2hlY2tib3gudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9jdXN0b20udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZWxlbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9lbXB0eS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9leHByZXNzaW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmlsZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9odG1sLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHluYW1pYy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tdWx0aXBsZXRleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFua2luZy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9yYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGFnYm94LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0c3VydmV5bW9kZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0dGltZXJwYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvcm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9zaWduYXR1cmVwYWQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy1lZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy12aWV3ZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3RhZ2JveC1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy91dGlscy9yZXNwb25zaXZpdHktbWFuYWdlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy91dGlscy91dGlscy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleVJlYWN0L2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1jb3JlXCIsXCJjb21tb25qc1wiOlwic3VydmV5LWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNvcmVcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFB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QUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7O0FDekxEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLGlFQUFjO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQzlEQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7Ozs7Ozs7Ozs7Ozs7QUNuQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQW9FO0FBQzdCO0FBQ3lCOzs7Ozs7Ozs7Ozs7O0FDRmhFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQVE7QUFDdUQ7QUFDUTtBQUNHO0FBQ2Q7QUFDakI7QUFDRjtBQUNJO0FBQ1M7QUFLdEI7QUFLUTtBQUlBO0FBSUM7QUFJRDtBQUMwQjtBQUNFO0FBQ0s7QUFDVDtBQUNLO0FBQ0c7QUFJakM7QUFDMEI7QUFDQTtBQUNnQjtBQUNKO0FBQ1o7QUFDUjtBQUNpQjtBQUNOO0FBQ0Q7QUFDMEI7QUFDUjtBQUNvQztBQUN4QztBQUNuQjtBQUNjO0FBQ1A7QUFDRztBQUNLO0FBQ0w7QUFDRjtBQUNQO0FBQ0U7QUFDWjtBQUNjO0FBQ1k7QUFDZTtBQUV0QztBQUNIO0FBQ2tCO0FBQ0E7QUFDSztBQUNIO0FBQ007QUFDZjtBQUN5RDtBQUNQO0FBQ1M7QUFDUDtBQUNNO0FBQ0o7QUFDQTtBQUNPO0FBQy9CO0FBRW5DO0FBQ0g7QUFFTztBQUNBO0FBQ2pCO0FBQ047QUFFeEMsZ0RBQWdEO0FBQ2hELG1GQUFtRjs7Ozs7Ozs7Ozs7OztBQy9GbkY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBaUM7QUFDSDtBQUVvQjtBQUVsRCx1RUFBbUIsQ0FBQyxVQUFHLFFBQW1CLENBQUUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNMckM7QUFDZTtBQUNpQjtBQUNiO0FBRWxEO0lBQW1ELGlEQUFxQjtJQUN0RSx1Q0FBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDUyxxREFBYSxHQUF2QjtRQUNFLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzVDLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0MsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxVQUFVLENBQUMsSUFBSTtZQUM3QiwrREFBTyxTQUFTLEVBQUUsU0FBUztnQkFDekIsK0RBQ0UsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQ2xCLElBQUksRUFBQyxVQUFVLEVBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUN4QixLQUFLLEVBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEtBQUssSUFBSTt3QkFDakMsQ0FBQyxDQUFDLEVBQUU7d0JBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUVoQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQ3pCLFNBQVMsRUFBRSxVQUFVLENBQUMsZUFBZSxFQUNyQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLEtBQUssRUFDNUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLG1CQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxnQkFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLGtCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsc0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUMvQztnQkFDRiw4REFBTSxTQUFTLEVBQUUsVUFBVSxDQUFDLGlCQUFpQjtvQkFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDdkIsNkRBQ0UsU0FBUyxFQUFFLFVBQVUsQ0FBQyxhQUFhOzRCQUVuQyw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQVEsQ0FDekMsRUFBQyxLQUFJO29CQUViLDhEQUFNLFNBQVMsRUFBQyxPQUFPLEdBQUcsQ0FDckI7Z0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEtBQUssUUFBUSxJQUFJLENBQzNDLDhEQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUMvQyxDQUNSLENBQ0ssQ0FDSixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsb0NBQUM7QUFBRCxDQUFDLENBaERrRCw4REFBcUIsR0FnRHZFOztBQUVELDJFQUFvQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDNUMscUJBQXFCLEVBQ3JCLFVBQUMsS0FBSztJQUNKLE9BQU8sbURBQW1CLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUNGLENBQUM7QUFFRiwyREFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDdkMsU0FBUyxFQUNULFVBQVUsRUFDVixxQkFBcUIsQ0FDdEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEU2QjtBQUNlO0FBQ2lCO0FBQ2I7QUFFbEQ7SUFBZ0QsOENBQXFCO0lBQ25FLG9DQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FDYjtRQThCRCxvQkFBYyxHQUFHLFVBQUMsS0FBVTtZQUMxQixLQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDdkQsQ0FBQzs7SUFoQ0QsQ0FBQztJQUNPLG9EQUFlLEdBQXZCLFVBQXdCLEtBQVUsRUFBRSxPQUFZO1FBQzlDLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzVDLE9BQU8sQ0FDTCw2REFBSyxJQUFJLEVBQUMsY0FBYyxFQUFDLFNBQVMsRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7WUFDckYsK0RBQU8sU0FBUyxFQUFJLFVBQVUsQ0FBQyxVQUFVO2dCQUN2QywrREFDRSxJQUFJLEVBQUMsT0FBTyxFQUNaLElBQUksRUFBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFDM0IsS0FBSyxFQUFLLEtBQUssc0JBQ00sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQ2xELE9BQU8sRUFBSyxLQUFLLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQ3pDLFFBQVEsRUFBSyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFDMUMsU0FBUyxFQUFLLFVBQVUsQ0FBQyxXQUFXLEVBQ3BDLFFBQVEsRUFBRyxJQUFJLENBQUMsY0FBYyxHQUM5QjtnQkFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBQztvQkFDaEQsQ0FBQyw4REFBTSxTQUFTLEVBQUcsVUFBVSxDQUFDLHNCQUFzQixJQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUMzQixDQUFDLDZEQUFLLFNBQVMsRUFBRSxVQUFVLENBQUMsa0JBQWtCOzRCQUM1Qyw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQVEsQ0FDN0MsQ0FBQyxFQUFDLEtBQUksQ0FDVCxDQUFDLEVBQUMsS0FBSTtnQkFDZiw4REFBTSxTQUFTLEVBQUksVUFBVSxDQUFDLGlCQUFpQixJQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUMxQixDQUNELENBQ0osQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUlTLGtEQUFhLEdBQXZCO1FBQ0UsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDNUMsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztZQUNsQyxrRUFBVSxJQUFJLEVBQUMsY0FBYyxFQUFDLFNBQVMsRUFBSSxVQUFVLENBQUMsYUFBYTtnQkFDL0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQy9DLENBQ1AsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNILGlDQUFDO0FBQUQsQ0FBQyxDQS9DK0MsOERBQXFCLEdBK0NwRTs7QUFFRCwyRUFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQzVDLGtCQUFrQixFQUNsQixVQUFDLEtBQUs7SUFDSixPQUFPLG1EQUFtQixDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FDRixDQUFDO0FBRUYsMkRBQWUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQ3ZDLFNBQVMsRUFDVCxPQUFPLEVBQ1Asa0JBQWtCLENBQ25CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqRTZCO0FBRXFDO0FBQ0w7QUFFL0Q7SUFBMkMseUNBQXlCO0lBRWxFLCtCQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FPYjtRQU5DLEtBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLENBQUM7UUFDckQsS0FBSSxDQUFDLGFBQWEsR0FBRyxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUNuRCxLQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUM3RCxLQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUMvRCxLQUFJLENBQUMsZUFBZSxHQUFHLEtBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQ3ZELEtBQUksQ0FBQyxRQUFRLEdBQUcsK0NBQWUsRUFBRSxDQUFDOztJQUNwQyxDQUFDO0lBQ1MsK0NBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUNELHNCQUFjLDJDQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsWUFBb0MsQ0FBQztRQUNuRCxDQUFDOzs7T0FBQTtJQUNEOzs7O01BSUU7SUFDTSx1Q0FBTyxHQUFmLFVBQWdCLEtBQWM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFDRCw4Q0FBYyxHQUFkLFVBQWUsS0FBVTtRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELDZDQUFhLEdBQWIsVUFBYyxLQUFVO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsbURBQW1CLEdBQW5CLFVBQW9CLEtBQVU7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELGtEQUFrQixHQUFsQixVQUFtQixLQUFVLEVBQUUsS0FBYztRQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELCtDQUFlLEdBQWYsVUFBZ0IsS0FBVTtRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRVMsZ0RBQWdCLEdBQTFCO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMzQixJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUNqQyxJQUFJLEVBQUUsRUFBRTtZQUNOLEVBQUUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixpQkFBTSxnQkFBZ0IsV0FBRSxDQUFDO0lBQzNCLENBQUM7SUFDUyw2Q0FBYSxHQUF2QjtRQUFBLGlCQWlEQztRQWhEQyxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUM1QyxJQUFNLFNBQVMsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JELE9BQU8sQ0FDTCw2REFBSyxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDOUQsK0RBQU8sU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQ3RELCtEQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUNsQixJQUFJLEVBQUMsVUFBVSxFQUNmLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFDeEIsS0FBSyxFQUNILElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxLQUFLLElBQUk7d0JBQ2pDLENBQUMsQ0FBQyxFQUFFO3dCQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFFaEMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUN6QixTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxLQUFLLEVBQzVDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxtQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksZ0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxrQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLHNCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FDL0M7Z0JBQ0YsOERBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUMzQyxPQUFPLEVBQUUsVUFBQyxLQUFLLElBQUssWUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBckMsQ0FBcUMsSUFFeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUM3QztnQkFDUCw2REFBSyxTQUFTLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtvQkFDbEUsOERBQU0sU0FBUyxFQUFFLFVBQVUsQ0FBQyxNQUFNLElBRTlCLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDckQsOERBQU0sU0FBUyxFQUFFLFVBQVUsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQVM7d0JBQ3hHLENBQUMsQ0FBQyxJQUFJLENBRUwsQ0FDSDtnQkFDTiw4REFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQzFDLE9BQU8sRUFBRSxVQUFDLEtBQUssSUFBSyxZQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFwQyxDQUFvQyxJQUV2RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQzVDLENBQ0QsQ0FDSixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsNEJBQUM7QUFBRCxDQUFDLENBcEcwQyxnRkFBeUIsR0FvR25FOztBQUVELDJFQUFvQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBQyxLQUFLO0lBQzlELE9BQU8sbURBQW1CLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3R3VCO0FBQzRCO0FBQ007QUFDckI7QUFDaUI7QUFFeEQ7SUFBaUQsK0NBQW1CO0lBRWxFLHFDQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxtRUFBdUIsQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBQzFELENBQUM7SUFDRCx5REFBbUIsR0FBbkI7UUFDRSxJQUFNLGFBQWEsR0FBRyxpQkFBTSxtQkFBbUIsV0FBRSxDQUFDO1FBQ2xELE9BQU8sQ0FDTDtZQUNHLGFBQWE7WUFDZCwyREFBQyxrREFBSyxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBVSxDQUMzQyxDQUNKLENBQUM7SUFDSixDQUFDO0lBQ0QsMERBQW9CLEdBQXBCO1FBQ0UsaUJBQU0sb0JBQW9CLFdBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDSCxrQ0FBQztBQUFELENBQUMsQ0FuQmdELG9FQUFtQixHQW1CbkU7O0FBRUQsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsRUFBRSxVQUFDLEtBQUs7SUFDaEYsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3QnVCO0FBRWtDO0FBQ0k7QUFDWjtBQUNMO0FBQ21CO0FBTWxFO0lBQWtDLGdDQUEyQztJQUE3RTs7SUE4QkEsQ0FBQztJQTdCQyxzQkFBSSw4QkFBSTthQUFSO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNTLHNDQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxvQ0FBYSxHQUFiO1FBQ0UsVUFBVTtRQUNWLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMvQyxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FDMUMsMkRBQUMsOEVBQXdCLE9BQTRCLENBQ3RELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVULElBQU0sYUFBYSxHQUFHLG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLG9CQUFvQixFQUMzQztZQUNFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUNGLENBQUM7UUFDRixPQUFPLENBQ0wsb0VBQUssU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pDLG9FQUFLLFNBQVMsRUFBQyxvQkFBb0I7Z0JBQ2hDLFNBQVM7Z0JBQ1QsYUFBYSxDQUNWLENBQ0YsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxDQTlCaUMsd0VBQWlCLEdBOEJsRDs7QUFFRDtJQUF5Qyx1Q0FHeEM7SUFIRDs7SUEwREEsQ0FBQztJQXREQyxzQkFBSSxxQ0FBSTthQUFSO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNTLDZDQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCwyQ0FBYSxHQUFiO1FBQ0UsT0FBTyx3SEFBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBSSxDQUFDO0lBQ3pDLENBQUM7SUFFRCx3Q0FBVSxHQUFWO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3JDLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUN4RCxPQUFPLHFFQUFNLFNBQVMsRUFBRSxVQUFVLElBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQVEsQ0FBQztJQUMvRCxDQUFDO0lBRUQsaURBQW1CLEdBQW5CO1FBQ0UsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9CLElBQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDckMsMkRBQUMsMERBQU8sSUFDTixTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUN4QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUNsQyxDQUNaLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULE9BQU8sQ0FDTDtZQUNHLE9BQU87WUFDUCxJQUFJLENBQ0osQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVELCtDQUFpQixHQUFqQjtRQUFBLGlCQWtCQztRQWpCQyxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDbEQsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbkQsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDakQsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDM0QsSUFBTSxNQUFNLEdBQUcsb0VBQWUsQ0FDNUIsdUVBQ0UsU0FBUyxFQUFFLFNBQVMsRUFDcEIsSUFBSSxFQUFDLFFBQVEsRUFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQzVCLE9BQU8sRUFBRSxjQUFNLFlBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsRUFBM0IsQ0FBMkIsRUFDMUMsS0FBSyxFQUFFLEtBQUssRUFDWixRQUFRLEVBQUUsUUFBUSxJQUVqQixhQUFhLENBQ1AsRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUxQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQ0gsMEJBQUM7QUFBRCxDQUFDLENBMUR3Qyx3RUFBaUIsR0EwRHpEOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsVUFBQyxLQUFLO0lBQ3ZFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFHdUI7QUFDa0M7QUFFNUQ7SUFBOEMsNENBQXlCO0lBQ3JFLGtDQUFZLEtBQVU7ZUFDcEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELHlDQUFNLEdBQU47UUFDRSxJQUFJLFNBQVMsR0FBRyxrQ0FBMkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUUsQ0FBQztRQUNuRSxPQUFPLG9FQUFLLFNBQVMsRUFBRSxTQUFTLEdBQVEsQ0FBQztJQUMzQyxDQUFDO0lBQ0gsK0JBQUM7QUFBRCxDQUFDLENBUjZDLDRDQUFLLENBQUMsU0FBUyxHQVE1RDs7QUFDRCxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMxQyx5QkFBeUIsRUFDekIsVUFBQyxLQUFLO0lBQ0osT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQndCO0FBT2tDO0FBQ0k7QUFDZjtBQUVOO0FBQ0o7QUFPdkM7SUFBcUMsbUNBQXVDO0lBRzFFLHlCQUFZLEtBQXNCO1FBQWxDLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFEQyxLQUFJLENBQUMsT0FBTyxHQUFHLDRDQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7O0lBQ25DLENBQUM7SUFFRCxzQkFBWSx3Q0FBVzthQUF2QjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzlFLENBQUM7OztPQUFBO0lBRUQsc0JBQUksa0NBQUs7YUFBVDtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFFRCwyQ0FBaUIsR0FBakI7UUFDRSxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQ25DLElBQU0sU0FBUyxHQUFtQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCw4Q0FBb0IsR0FBcEI7UUFDRSxpQkFBTSxvQkFBb0IsV0FBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFUyx5Q0FBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsdUNBQWEsR0FBYjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QyxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsT0FBTyxDQUNMLG9FQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFDbEMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVMsS0FBSztnQkFDeEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUVaLEtBQUssQ0FDRixDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQscUNBQVcsR0FBWDtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUNuQyxVQUFDLElBQVksRUFBRSxTQUFpQjtZQUM5QixPQUFPLENBQ0wsMkRBQUMsNkRBQVksSUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsU0FBUyxHQUFpQixDQUNuRSxDQUFDO1FBQ0osQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0gsc0JBQUM7QUFBRCxDQUFDLENBMURvQyx3RUFBaUIsR0EwRHJEOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLFVBQUMsS0FBSztJQUNsRSxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUN4QixlQUFlLEVBQ2QsS0FBZ0MsQ0FDbEMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BGdUI7QUFFMUI7SUFBK0IsNkJBQXlCO0lBQXhEOztJQVVBLENBQUM7SUFUQywwQkFBTSxHQUFOO1FBQ0UsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBQyxlQUFlO1lBQzVCLGtFQUFHLFNBQVMsRUFBQyxxQkFBcUIsRUFBQyxJQUFJLEVBQUMsd0dBQXdHO2dCQUFDLG9FQUFLLEdBQUcsRUFBQyxrREFBa0QsR0FBRSxDQUFJO1lBQ2xOLG9FQUFLLFNBQVMsRUFBQyxxQkFBcUI7O2dCQUErQixrRUFBRyxJQUFJLEVBQUMsc0hBQXNILHNCQUFvQixDQUFNO1lBQzNOLG9FQUFLLFNBQVMsRUFBQyxzQkFBc0I7Z0JBQUMsa0VBQUcsSUFBSSxFQUFDLGdDQUFnQyx1Q0FBcUMsQ0FBTSxDQUNySCxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsZ0JBQUM7QUFBRCxDQUFDLENBVjhCLDRDQUFLLENBQUMsU0FBUyxHQVU3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1p5QjtBQUVrQztBQUNJO0FBQ1o7QUFDTDtBQU8vQztJQUE4Qiw0QkFBc0M7SUFBcEU7UUFBQSxxRUF5REM7UUFsREMsbUJBQWEsR0FBRyxVQUFDLEtBQVU7WUFDekIsS0FBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDOztJQWdESixDQUFDO0lBeERDLHNCQUFJLDJCQUFLO2FBQVQ7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQUksMEJBQUk7YUFBUjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFJRCxrQ0FBZSxHQUFmO1FBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCx5QkFBTSxHQUFOO1FBQUEsaUJBMENDO1FBekNDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFNLEtBQUssR0FBRztZQUNaLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2hELE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUNuQyxDQUFDO1FBQ0YsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDeEIsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQ2hDLDJEQUFDLDBEQUFPLElBQ04sR0FBRyxFQUFFLENBQUMsRUFDTixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUN6QyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQzVCLElBQUksRUFBRSxFQUFFLGdCQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUNsQixDQUNaLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxxRUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFRLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZIO1FBRUQsT0FBTyxvRUFBZSxDQUNwQixtRUFDRSxLQUFLLEVBQUUsS0FBSyxFQUNaLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLElBQUksRUFBQyxRQUFRLG1CQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDbkQsT0FBTyxFQUFFLFVBQUMsS0FBVTtnQkFDbEIsS0FBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxFQUNELGFBQWEsRUFBRSxVQUFDLEtBQVUsSUFBSyxZQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUExQyxDQUEwQyxJQUV4RSxPQUFPLENBQ0wsQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVILGVBQUM7QUFBRCxDQUFDLENBekQ2Qix3RUFBaUIsR0F5RDlDOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsY0FBYyxFQUFFLFVBQUMsS0FBSztJQUNqRSxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekV1QjtBQUVrQztBQUNJO0FBQ2pCO0FBQ1I7QUFNdkM7SUFBMEIsd0JBQWtDO0lBQzFELGNBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUliO1FBSUQsbUJBQWEsR0FBRyxVQUFDLEtBQVU7WUFDekIsS0FBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBVEEsS0FBSSxDQUFDLEtBQUssR0FBRztZQUNYLFlBQVksRUFBRSxLQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxFQUFFO1NBQzVDLENBQUM7O0lBQ0osQ0FBQztJQUNELHNCQUFJLHVCQUFLO2FBQVQ7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBSUQsOEJBQWUsR0FBZjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsNEJBQWEsR0FBYjtRQUNFLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxPQUFPLENBQ0wsb0VBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUk7WUFDdkMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzNCLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsbUVBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFDL0MsSUFBSSxFQUFDLFNBQVMsRUFDZCxXQUFXLEVBQUUsVUFBQyxDQUFDO29CQUNiLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDckIsQ0FBQyxFQUNELFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUU1QixLQUFLLENBQ0gsQ0FDRCxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0QsMEJBQVcsR0FBWDtRQUFBLGlCQWFDO1FBWkMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDekMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFhLEVBQUUsU0FBaUI7WUFDaEQsT0FBTyxDQUNMLDJEQUFDLG1EQUFRLElBQUMsS0FBSyxFQUFFLEtBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLFNBQVMsR0FBYSxDQUM5RSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUNBQW9CLEdBQXBCO1FBQUEsaUJBZ0NDO1FBL0JDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQzthQUNuQztZQUNILElBQU0sUUFBUSxHQUFHLFVBQUMsQ0FBTTtnQkFDdEIsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxhQUFhLEVBQUU7b0JBQ3ZDLEtBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2lCQUMxQztZQUNILENBQUMsQ0FBQztZQUNGLElBQU0sT0FBTyxHQUFHLFVBQUMsQ0FBTTtnQkFDckIsS0FBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDO1lBQ0YsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNO2dCQUMxQyxvRUFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVTtvQkFDOUMsMkRBQUMsMERBQU8sSUFDTixRQUFRLEVBQUUsYUFBYSxFQUN2QixJQUFJLEVBQUUsTUFBTSxHQUVKLENBQ047Z0JBQ04sc0VBQ0UsSUFBSSxFQUFDLE1BQU0sRUFDWCxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFDOUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQy9DLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsT0FBTyxFQUFFLE9BQU8sRUFDaEIsUUFBUSxFQUFFLFFBQVEsR0FDWCxDQUNMLENBQ1AsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUNELDJCQUFZLEdBQVo7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUM7YUFDaEM7WUFDSCxPQUFPLENBQUMsb0VBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWM7Z0JBQzFELG9FQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLGdCQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFPLENBQ2pILENBQUMsQ0FBQztTQUNUO0lBQ0gsQ0FBQztJQUNILFdBQUM7QUFBRCxDQUFDLENBM0Z5Qix3RUFBaUIsR0EyRjFDOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFVBQUMsS0FBSztJQUM1RCxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxR3VCO0FBRXFDO0FBQ0s7QUFDbEI7QUFFbEQ7SUFBc0Qsb0RBQWtCO0lBQ3RFLDBDQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUNyRSxDQUFDO0lBQ1MsMERBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxzQkFBSSxrREFBSTthQUFSO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNELHNCQUFZLHNEQUFRO2FBQXBCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVksaURBQUc7YUFBZjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNsQyxDQUFDOzs7T0FBQTtJQUNELGdFQUFxQixHQUFyQixVQUFzQixLQUFVO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBQ1Msd0RBQWEsR0FBdkI7UUFDRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO1FBQy9DLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUQsT0FBTyxDQUNMLHVFQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFDbkMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFDM0MsWUFBWSxtQkFDWixZQUFZO1lBRTNCLDJEQUFDLDBEQUFPLElBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUN4RCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQ3RELElBQUksRUFBRSxNQUFNLEdBRUosQ0FDSCxDQUNWLENBQUM7SUFDSixDQUFDO0lBQ0gsdUNBQUM7QUFBRCxDQUFDLENBekNxRCx5RUFBa0IsR0F5Q3ZFOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLHlCQUF5QixFQUN6QixlQUFLO0lBQ0gsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3REd0I7QUFFcUM7QUFDSztBQUVwRTtJQUE2RCwyREFBa0I7SUFBL0U7O0lBY0EsQ0FBQztJQWJDLHNCQUFZLDZEQUFRO2FBQXBCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUM7OztPQUFBO0lBRVMsK0RBQWEsR0FBdkI7UUFDRSxJQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxvRUFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsb0JBQW9CO2dCQUNuRSxvRUFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQVEsQ0FDakQsQ0FBQyxDQUFDO1NBQ1Q7YUFBTTtZQUNMLE9BQU8sQ0FBQyxxRUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFJLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFDSCw4Q0FBQztBQUFELENBQUMsQ0FkNEQseUVBQWtCLEdBYzlFOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLDBCQUEwQixFQUMxQixVQUFDLEtBQUs7SUFDSixPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUJ3QjtBQUtxQztBQUNLO0FBRXBFO0lBQTZELDJEQUFrQjtJQUM3RSxpREFBWSxLQUFVO1FBQXRCLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFEQyxLQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDdkUsQ0FBQztJQUNELHNCQUFZLDZEQUFRO2FBQXBCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVksd0RBQUc7YUFBZjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNsQyxDQUFDOzs7T0FBQTtJQUNELHdFQUFzQixHQUF0QixVQUF1QixLQUFVO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ1MsK0RBQWEsR0FBdkI7UUFDRSxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RSxPQUFPLENBQ0wsdUVBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsRUFDaEQsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUNwQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlO1lBRXRDLGFBQWE7WUFDZCxxRUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFJLENBQ2pELENBQ1YsQ0FBQztJQUNKLENBQUM7SUFDSCw4Q0FBQztBQUFELENBQUMsQ0E1QjRELHlFQUFrQixHQTRCOUU7O0FBRUQsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDMUMseUJBQXlCLEVBQ3pCLFVBQUMsS0FBSztJQUNKLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQ3dCO0FBR2tDO0FBQ0k7QUFPaEU7SUFBK0IsNkJBQXVDO0lBQ3BFLG1CQUFZLEtBQXNCO1FBQWxDLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBQ2I7UUFVUywwQkFBb0IsR0FBRyxVQUFDLEtBQVU7WUFDMUMsS0FBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7O0lBWkQsQ0FBQztJQUNELHNCQUFJLDRCQUFLO2FBQVQ7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQUksbUNBQVk7YUFBaEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ2pDLENBQUM7OztPQUFBO0lBQ1MsbUNBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUtELDBCQUFNLEdBQU47UUFBQSxpQkFXQztRQVZDLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsT0FBTyxDQUNMLG1FQUNFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxvQ0FDTSxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUN6RCxhQUFhLEVBQUUsVUFBQyxLQUFVLElBQUssWUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFoQyxDQUFnQyxJQUU5RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUNILGdCQUFDO0FBQUQsQ0FBQyxDQTdCOEIsd0VBQWlCLEdBNkIvQzs7QUFFRCxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMxQyxlQUFlLEVBQ2YsVUFBQyxLQUFzQjtJQUNyQixPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQ3dCO0FBSWtDO0FBQ0s7QUFHakU7SUFBc0Qsb0RBQWtCO0lBQ3RFLDBDQUFZLEtBQVU7ZUFDcEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELHNCQUFjLHNEQUFRO2FBQXRCO1lBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDeEYsQ0FBQzs7O09BQUE7SUFDSCx1Q0FBQztBQUFELENBQUMsQ0FQcUQseUVBQWtCLEdBT3ZFOztBQUVEO0lBQXlELHVEQUFnQztJQUF6RjtRQUFBLHFFQVlDO1FBWFcsaUJBQVcsR0FBRyxVQUFDLEtBQVU7WUFDakMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QixDQUFDOztJQVNILENBQUM7SUFSVywyREFBYSxHQUF2QjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM1QyxPQUFPLENBQ0wsdUVBQVEsSUFBSSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDekYscUVBQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBUSxDQUNyRixDQUNWLENBQUM7SUFDSixDQUFDO0lBQ0gsMENBQUM7QUFBRCxDQUFDLENBWndELGdDQUFnQyxHQVl4Rjs7QUFFRCxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMxQyx5QkFBeUIsRUFDekIsVUFBQyxLQUFLO0lBQ0osT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6RSxDQUFDLENBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQ3dCO0FBQ2tDO0FBQ2I7QUFDMkI7QUFFMUU7SUFBMEQsd0RBQWdDO0lBQTFGO1FBQUEscUVBZUM7UUFkVyxpQkFBVyxHQUFHLFVBQUMsS0FBVTtZQUNqQyxLQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLENBQUM7O0lBWUgsQ0FBQztJQVhXLDREQUFhLEdBQXZCO1FBQ0UsT0FBTyxDQUNMLG9FQUFLLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtZQUM3RywyREFBQywwREFBTyxJQUNOLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQ2xELElBQUksRUFBRSxNQUFNLEdBRUosQ0FDTixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsMkNBQUM7QUFBRCxDQUFDLENBZnlELHNGQUFnQyxHQWV6Rjs7QUFFRCxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMxQywwQkFBMEIsRUFDMUIsVUFBQyxLQUFLO0lBQ0osT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQndCO0FBQ2tDO0FBQ2I7QUFDMkI7QUFFMUU7SUFBMEQsd0RBQWdDO0lBQTFGO1FBQUEscUVBZUM7UUFkVyxpQkFBVyxHQUFHLFVBQUMsS0FBVTtZQUNqQyxLQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLENBQUM7O0lBWUgsQ0FBQztJQVhXLDREQUFhLEdBQXZCO1FBQ0UsT0FBTyxDQUNMLG9FQUFLLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtZQUM3RywyREFBQywwREFBTyxJQUNOLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQ2xELElBQUksRUFBRSxNQUFNLEdBRUosQ0FDTixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsMkNBQUM7QUFBRCxDQUFDLENBZnlELHNGQUFnQyxHQWV6Rjs7QUFFRCxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMxQywwQkFBMEIsRUFDMUIsVUFBQyxLQUFLO0lBQ0osT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNCd0I7QUFDa0M7QUFDYztBQUUxRTtJQUE0RCwwREFBZ0M7SUFBNUY7O0lBTUEsQ0FBQztJQUxXLDhEQUFhLEdBQXZCO1FBQ0UsT0FBTyxDQUFDLG9FQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLElBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUN2QixDQUFDLENBQUM7SUFDVixDQUFDO0lBQ0gsNkNBQUM7QUFBRCxDQUFDLENBTjJELHNGQUFnQyxHQU0zRjs7QUFFRCxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMxQywrQkFBK0IsRUFDL0IsVUFBQyxLQUFLO0lBQ0osT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1RSxDQUFDLENBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pCd0I7QUFJa0M7QUFHYztBQUUxRTtJQUE0RCwwREFBZ0M7SUFBNUY7UUFBQSxxRUFtQkM7UUFsQlcsaUJBQVcsR0FBRyxVQUFDLEtBQVU7WUFDakMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsQ0FBQzs7SUFnQkgsQ0FBQztJQWZXLDhEQUFhLEdBQXZCO1FBQ0UsT0FBTyxDQUNMLHVFQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEVBQ2xELE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUN6QixJQUFJLEVBQUMsUUFBUTtZQUNiLHFFQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsSUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQVE7WUFDdkMscUVBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FDeEMsQ0FDRCxDQUNWLENBQUM7SUFDSixDQUFDO0lBQ0gsNkNBQUM7QUFBRCxDQUFDLENBbkIyRCxzRkFBZ0MsR0FtQjNGOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLDRCQUE0QixFQUM1QixVQUFDLEtBQUs7SUFDSixPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLHNDQUFzQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVFLENBQUMsQ0FDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25DK0I7QUFDUDtBQUM4SDtBQUM1RjtBQUNJO0FBTWhFO0lBQTJCLHlCQUFtQztJQUc1RCxlQUFZLEtBQWtCO1FBQTlCLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBR2I7UUFGQyxLQUFJLENBQUMsWUFBWSxHQUFHLDRDQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMsS0FBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOztJQUNyQixDQUFDO0lBQ0Qsc0JBQUksd0JBQUs7YUFBVDtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFDUywrQkFBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ08sMkJBQVcsR0FBbkI7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksOERBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUNPLGdDQUFnQixHQUF4QjtRQUNFLElBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUNwRTtJQUNILENBQUM7SUFDRCxpQ0FBaUIsR0FBakI7UUFDRSxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0Qsa0NBQWtCLEdBQWxCLFVBQW1CLFNBQWMsRUFBRSxTQUFjO1FBQy9DLGlCQUFNLGtCQUFrQixZQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0Qsb0NBQW9CLEdBQXBCO1FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFDRCxxQ0FBcUIsR0FBckIsVUFBc0IsU0FBc0IsRUFBRSxTQUFjOztRQUMxRCxJQUFJLENBQUMsaUJBQU0scUJBQXFCLFlBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3JFLElBQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUQsSUFBRyxZQUFZLEVBQUU7WUFDZixVQUFJLENBQUMsS0FBSywwQ0FBRSxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBQ0Qsc0JBQU0sR0FBTjtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDOUIsSUFBTSxjQUFjLEdBQUcsZ0RBQVEsQ0FBQyxZQUFZLENBQzFDLDJEQUFDLGNBQWMsSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBbUIsRUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQ3JCLENBQUM7UUFDRixPQUFPLG9FQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFHLGNBQWMsQ0FBTyxDQUFDO0lBQzdELENBQUM7SUFDSCxZQUFDO0FBQUQsQ0FBQyxDQXBEMEIsd0VBQWlCLEdBb0QzQzs7QUFFRCxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMxQyxVQUFVLEVBQ1YsVUFBQyxLQUFrQjtJQUNqQixPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQ0YsQ0FBQztBQUVGO0lBQW9DLGtDQUEyQjtJQUU3RCx3QkFBWSxLQUFVO1FBQXRCLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBQ2I7UUFITSxtQkFBYSxHQUFZLEtBQUssQ0FBQztRQUl0QyxtQkFBYSxHQUFHLFVBQUMsS0FBVTtZQUN6QixLQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUM7UUFPRixpQkFBVyxHQUFHLFVBQUMsRUFBTztZQUNwQixFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDOztJQVpGLENBQUM7SUFJRCxzQkFBSSxpQ0FBSzthQUFUO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixDQUFDOzs7T0FBQTtJQUNTLHdDQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFJRCwyQ0FBa0IsR0FBbEIsVUFBbUIsU0FBYyxFQUFFLFNBQWM7UUFDL0MsaUJBQU0sa0JBQWtCLFlBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDOUI7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQzVDLENBQUM7SUFDRCx3Q0FBZSxHQUFmO1FBQUEsaUJBK0JDO1FBOUJDLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNyRSxJQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9ELElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQyxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEUsT0FBTyxDQUNMLG9FQUNFLFNBQVMsRUFBQyxxQkFBcUIsRUFDL0IsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQ3JCLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUc7Z0JBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7YUFDOUIsRUFDRCxPQUFPLEVBQUUsVUFBQyxFQUFPO2dCQUNmLEtBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUVELG9FQUFLLFNBQVMsRUFBQyxrQkFBa0I7Z0JBQzlCLE9BQU87Z0JBQ1Isb0VBQUssU0FBUyxFQUFDLHdCQUF3QjtvQkFDcEMsTUFBTTtvQkFDUCxvRUFBSyxTQUFTLEVBQUMsNkJBQTZCLElBQ3pDLE9BQU8sQ0FDSjtvQkFDTCxNQUFNLENBQ0gsQ0FDRixDQUNGLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDRCxzQ0FBYSxHQUFiO1FBQ0UsT0FBTyxDQUNMLHFFQUNFLEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSTtnQkFDbkMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUc7YUFDbEMsRUFDRCxTQUFTLEVBQUMsbUJBQW1CLEdBQ3ZCLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFDRCxxQ0FBWSxHQUFaO1FBQ0UsT0FBTyxvRUFBSyxTQUFTLEVBQUMsdUJBQXVCLElBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQU8sQ0FBQztJQUN6RSxDQUFDO0lBQ0Qsc0NBQWEsR0FBYjtRQUNFLElBQU0sZ0JBQWdCLEdBQUcsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDakUsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FDaEMsQ0FBQztRQUNGLE9BQU8sb0VBQUssU0FBUyxFQUFDLG1CQUFtQixJQUFFLGdCQUFnQixDQUFPLENBQUM7SUFDckUsQ0FBQztJQUNELDJDQUFrQixHQUFsQjtRQUFBLGlCQVlDO1FBWEMsT0FBTyxDQUNMLHVFQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsU0FBUyxFQUFDLHNFQUFzRSxFQUNoRixPQUFPLEVBQUU7Z0JBQ1AsS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixDQUFDLElBRUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDckIsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUNELDBDQUFpQixHQUFqQjtRQUFBLGlCQVlDO1FBWEMsT0FBTyxDQUNMLHVFQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsU0FBUyxFQUFDLHFFQUFxRSxFQUMvRSxPQUFPLEVBQUU7Z0JBQ1AsS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixDQUFDLElBRUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQ3BCLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFDRCxxQ0FBWSxHQUFaO1FBQ0UsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBQyx1QkFBdUI7WUFDbkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNqRCxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0QsK0JBQU0sR0FBTjtRQUFBLGlCQWtCQztRQWpCQyxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekMsSUFBTSxTQUFTLEdBQUcsSUFBSSwyREFBZSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BHLElBQU0sS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQy9ELE9BQU8sQ0FDTCxvRUFDRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQ1osU0FBUyxFQUFFLFNBQVMsRUFDcEIsS0FBSyxFQUFFLEtBQUssRUFDWixPQUFPLEVBQUUsVUFBQyxDQUFNO2dCQUNkLEtBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN0QixDQUFDLEVBQ0QsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLElBRTVCLFNBQVMsQ0FDTixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLENBbEltQyx3RUFBaUIsR0FrSXBEOztBQUVELG9DQUFvQztBQUM3QixTQUFTLFNBQVMsQ0FDdkIsYUFBcUIsRUFDckIsSUFBUyxFQUNULE9BQXNCLEVBQ3RCLFFBQXFCLEVBQ3JCLFFBQWlCLEVBQ2pCLEtBQWMsRUFDZCxXQUEwQztJQUExQyxtREFBMEM7SUFFMUMsSUFBTSxPQUFPLEdBQUcsdUVBQW1CLENBQ2pDLGFBQWEsRUFDYixJQUFJLEVBQ0osT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsV0FBVyxDQUNaLENBQUM7SUFDRixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUNNLFNBQVMsVUFBVSxDQUFDLGFBQTZCO0lBQ3RELGFBQWEsQ0FBQyxNQUFNLEdBQUc7UUFBUTtZQUM3QixnREFBUSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxjQUFjLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUN4QztJQUFDLENBQUMsQ0FBQztJQUNKLElBQU0sY0FBYyxHQUF1Qiw2RUFBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRixnREFBUSxDQUFDLE1BQU0sQ0FBQywyREFBQyxjQUFjLElBQUMsS0FBSyxFQUFFLGNBQWMsR0FBSSxFQUFFLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVyRixjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDeEMsQ0FBQztBQUVELG9EQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN09MO0FBQytCO0FBRXpEO0lBQThCLDRCQUF5QjtJQUF2RDs7SUFPQSxDQUFDO0lBTkMseUJBQU0sR0FBTjtRQUNFLE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUMscUJBQXFCLEdBQzlCLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCxlQUFDO0FBQUQsQ0FBQyxDQVA2Qiw0Q0FBSyxDQUFDLFNBQVMsR0FPNUM7O0FBRUQsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsVUFBQyxLQUFVO0lBQ3JFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZHVCO0FBRWtDO0FBQ0s7QUFFakU7SUFBNEMsMENBQWtCO0lBQTlEOztJQWtCQSxDQUFDO0lBakJDLHNCQUFjLHdDQUFJO2FBQWxCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNTLDBDQUFTLEdBQW5CO1FBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBQ1MsOENBQWEsR0FBdkI7UUFDRSxPQUFPLENBQ0wsc0VBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUM3QixJQUFJLEVBQUMsUUFBUSxFQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQ3ZELE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUN0QixDQUNILENBQUM7SUFDSixDQUFDO0lBQ0gsNkJBQUM7QUFBRCxDQUFDLENBbEIyQyx5RUFBa0IsR0FrQjdEOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLFlBQVksRUFDWixVQUFDLEtBQUs7SUFDSixPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5QndCO0FBRWtDO0FBTTVEO0lBQStCLDZCQUFxQztJQUNsRSxtQkFBWSxLQUFzQjtlQUNoQyxrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0Qsc0JBQVksNkJBQU07YUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBQ00sMEJBQU0sR0FBYjtRQUNFLElBQU0sT0FBTyxHQUFrQixFQUFFLENBQUM7UUFDbEMsT0FBTyxDQUFDLElBQUksQ0FDVixvRUFBSyxHQUFHLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWM7WUFDM0Qsb0VBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFDcEMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFDckMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksRUFDdEMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNoRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ25FLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQWMsRUFBRSxHQUNoRCxDQUNFLENBQ1AsQ0FBQztRQUNGLE9BQU8sd0hBQUcsT0FBTyxDQUFJLENBQUM7SUFDeEIsQ0FBQztJQUNILGdCQUFDO0FBQUQsQ0FBQyxDQXZCOEIsNENBQUssQ0FBQyxTQUFTLEdBdUI3Qzs7QUFFRCxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxVQUFDLEtBQXNCO0lBQ25GLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25DdUI7QUFFc0M7QUFDSjtBQUNOO0FBTXREO0lBQWtDLGdDQUF3QztJQUN4RSxzQkFBWSxLQUF5QjtRQUFyQyxZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBREMsS0FBSSxDQUFDLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQzs7SUFDOUIsQ0FBQztJQUVELHNCQUFZLGdDQUFNO2FBQWxCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQixDQUFDOzs7T0FBQTtJQUNELHNCQUFZLDZCQUFHO2FBQWY7WUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBRUQsd0NBQWlCLEdBQWpCO1FBQ0UsSUFBTSxJQUFJLEdBQWlCLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUc7WUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRCwyQ0FBb0IsR0FBcEI7UUFDRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVPLGtDQUFXLEdBQW5CO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDL0MsSUFBTSxXQUFXLEdBQUcsd0VBQWlCLENBQUMsZUFBZSxDQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FDM0IsQ0FBQztRQUNGLE9BQU8sQ0FDTCxvRUFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQzlCLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUU5QywyREFBQyxpRUFBWSxJQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFpQjtZQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxtRUFBSSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUcsV0FBVyxDQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakcsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVPLHNDQUFlLEdBQXZCLFVBQXdCLFFBQWlCO1FBQ3ZDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0IsSUFBTSxhQUFhLEdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FDdEUsSUFBSSxDQUFDLE1BQU0sRUFDWCxZQUFZLENBQ2IsQ0FBQztRQUNGLElBQU0sYUFBYSxHQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQ25FLElBQUksQ0FBQyxNQUFNLEVBQ1gsWUFBWSxDQUNiLENBQUM7UUFDRixPQUFPLG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFO1lBQy9ELElBQUksRUFBRSxhQUFhO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTSw2QkFBTSxHQUFiO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDaEQsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU07WUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUM5QyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDOUMsb0VBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFRLENBQ3hDLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCxtQkFBQztBQUFELENBQUMsQ0FoRWlDLDRDQUFLLENBQUMsU0FBUyxHQWdFaEQ7O0FBRUQsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDMUMsZUFBZSxFQUNmLFVBQUMsS0FBeUI7SUFDeEIsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakZ3QjtBQUNrQztBQUNwQjtBQUV4QztJQUE2QiwyQkFBeUI7SUFFcEQsaUJBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBREMsS0FBSSxDQUFDLFVBQVUsR0FBRyw0Q0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDOztJQUN0QyxDQUFDO0lBRUQsMkJBQVMsR0FBVDtRQUNFLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ3BCLDZEQUFTLENBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQ3hCLENBQUM7SUFDTixDQUFDO0lBQ0Qsb0NBQWtCLEdBQWxCO1FBQ0UsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFDRCx3QkFBTSxHQUFOO1FBQ0UsSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDO1FBQzlCLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDdkIsU0FBUyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztTQUN6QztRQUNELE9BQU8sQ0FDTCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25CLG9FQUFLLFNBQVMsRUFBRyxTQUFTLEVBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBQyxLQUFLLGdCQUFhLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztnQkFBRSx1RUFBVyxDQUFNO1lBQzFJLENBQUMsQ0FBQyxJQUFJLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFDRCxtQ0FBaUIsR0FBakI7UUFDRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNILGNBQUM7QUFBRCxDQUFDLENBbEM0Qiw0Q0FBSyxDQUFDLFNBQVMsR0FrQzNDOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLFVBQUMsS0FBSztJQUNoRSxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFDdUI7QUFDbUM7QUFDRDtBQUNEO0FBQ1o7QUFFL0M7SUFBa0MsZ0NBQXlCO0lBQTNEOztJQWtCQSxDQUFDO0lBakJDLHNCQUFjLG9DQUFVO2FBQXhCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUMvQixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLGlDQUFPO2FBQXJCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUVELDZCQUFNLEdBQU47UUFDRSxJQUFNLFlBQVksR0FBZ0IsMkRBQUMsMkRBQVksSUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBaUIsQ0FBQztRQUNwSCxJQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFDdEQsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBQyxrQkFBa0I7WUFDL0IscUVBQU0sU0FBUyxFQUFDLHlCQUF5QixJQUFFLFlBQVksQ0FBUTtZQUMvRCwyREFBQyxzRUFBZSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxHQUFvQixDQUN0RSxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsbUJBQUM7QUFBRCxDQUFDLENBbEJpQyw0Q0FBSyxDQUFDLFNBQVMsR0FrQmhEOztBQUVELDJEQUFlLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUN2QyxTQUFTLEVBQ1QsZUFBZSxFQUNmLGtCQUFrQixDQUNuQixDQUFDO0FBRUYsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxVQUFDLEtBQUs7SUFDckUsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xDdUI7QUFFc0M7QUFHaEU7SUFBa0MsZ0NBQXlCO0lBQ3pELHNCQUFZLEtBQVU7ZUFDcEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVELHNCQUFZLG9DQUFVO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUMvQixDQUFDOzs7T0FBQTtJQUVELHNCQUFZLGlDQUFPO2FBQW5CO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELDZCQUFNLEdBQU47UUFDRSxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hELElBQUcsQ0FBQyxVQUFVO1lBQ1osT0FBTyx3RUFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxPQUFPLHdIQUFHLEtBQUssQ0FBSSxDQUFDO0lBQ3RCLENBQUM7SUFDUyx1Q0FBZ0IsR0FBMUIsVUFBMkIsT0FBb0IsRUFBRSxVQUFlO1FBQzlELElBQUksWUFBWSxHQUFHLFVBQUMsR0FBUTtZQUMxQixPQUFPLENBQ0wsaUZBQWdCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxhQUV0QixDQUNSLENBQUM7UUFDSixDQUFDLENBQUM7UUFDRixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTtZQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN4RCxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxJQUFJLGNBQWMsRUFBRTtZQUNsQixLQUFLLENBQUMsSUFBSSxDQUNSLGlGQUNZLE9BQU8sRUFDakIsR0FBRyxFQUFFLE9BQU8sRUFDWixTQUFTLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFDNUIsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxpQkFDaEIsSUFBSSxJQUVoQixjQUFjLENBQ1YsQ0FDUixDQUFDO1lBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNwQztRQUNELElBQUksT0FBTyxDQUFDLHdCQUF3QixFQUFFO1lBQ3BDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3hELEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDcEM7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUNSLHdFQUFpQixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FDckUsQ0FBQztRQUNGLElBQUksT0FBTyxDQUFDLHVCQUF1QixFQUFFO1lBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbkMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDekQ7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyx3Q0FBaUIsR0FBekIsVUFDRSxPQUFvQixFQUNwQixVQUFlO1FBRWYsT0FBTyxDQUNMLGlGQUNZLFVBQVUsRUFDcEIsR0FBRyxFQUFFLFVBQVUsRUFDZixTQUFTLEVBQUUsVUFBVSxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFlBQVksaUJBQ3RELElBQUksSUFFaEIsT0FBTyxDQUFDLFlBQVksQ0FDaEIsQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxDQTVFaUMsNENBQUssQ0FBQyxTQUFTLEdBNEVoRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakZ5QjtBQUNxQztBQUNoQjtBQUUvQztJQUFrQyxnQ0FBeUI7SUFDekQsc0JBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0Qsc0JBQVksaUNBQU87YUFBbkI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzVCLENBQUM7OztPQUFBO0lBQ0QsNkJBQU0sR0FBTjtRQUNFLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDL0MsSUFBTSxZQUFZLEdBQUcsQ0FDbkIsMkRBQUMsMkRBQVksSUFDWCxPQUFPLEVBQUUsT0FBTyxFQUNoQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsR0FDaEIsQ0FDakIsQ0FBQztRQUNGLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFO1lBQzFCLE9BQU8sR0FBRyxVQUFDLEdBQVE7Z0JBQ2pCLGlFQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQztTQUNIO1FBRUQsSUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQTJDLENBQUM7UUFDdEUsT0FBTyxDQUNMLDJEQUFDLFNBQVMsSUFDUixTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFDM0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxXQUFXLGdCQUNYLE9BQU8sQ0FBQyxjQUFjLEVBQ2xDLFFBQVEsRUFBRSxPQUFPLENBQUMsYUFBYSxtQkFDaEIsT0FBTyxDQUFDLGlCQUFpQixFQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUNoQixPQUFPLEVBQUUsT0FBTyxJQUVmLFlBQVksQ0FDSCxDQUNiLENBQUM7SUFDSixDQUFDO0lBQ0gsbUJBQUM7QUFBRCxDQUFDLENBdkNpQyw0Q0FBSyxDQUFDLFNBQVMsR0F1Q2hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0M4QjtBQUNxQztBQUVwRTtJQUF3QyxzQ0FBeUI7SUFFL0QsNEJBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBREMsS0FBSSxDQUFDLFNBQVMsR0FBRywrQ0FBZSxFQUFFLENBQUM7O0lBQ3JDLENBQUM7SUFDTyx5Q0FBWSxHQUFwQjtRQUNFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUU7WUFDbEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDaEMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7YUFDekQ7U0FDRjtJQUNILENBQUM7SUFDRCw4Q0FBaUIsR0FBakI7UUFDRSxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBQ0QsK0NBQWtCLEdBQWxCLFVBQW1CLFNBQWMsRUFBRSxTQUFjO1FBQy9DLGlCQUFNLGtCQUFrQixZQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQyxJQUFJLGVBQWUsR0FDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWTtZQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUM7UUFDakQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFDRCxpREFBb0IsR0FBcEI7UUFDRSxpQkFBTSxvQkFBb0IsV0FBRSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUU7WUFDbEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDaEMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ25FO1NBQ0Y7SUFDSCxDQUFDO0lBQ1Msc0NBQVMsR0FBbkI7UUFDRSxPQUFPLGlCQUFNLFNBQVMsV0FBRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ3hELENBQUM7SUFDUywwQ0FBYSxHQUF2QjtRQUNFLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBRWxELElBQUksWUFBWSxDQUFDLGVBQWUsRUFBRTtZQUNoQyxPQUFPLENBQ0wsNkRBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUNsRCxDQUNQLENBQUM7U0FDSDtRQUVELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2xDLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDNUQ7YUFBTTtZQUNMLElBQUksWUFBWSxDQUFDLFlBQVksRUFBRTtnQkFDN0IsSUFBSSxTQUFTLEdBQUcsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0RCxPQUFPLDZEQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsR0FBSSxDQUFDO2FBQ3pFO1NBQ0Y7UUFDRCxPQUFPLDZEQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFHLE1BQU0sQ0FBTyxDQUFDO0lBQ2xELENBQUM7SUFDSCx5QkFBQztBQUFELENBQUMsQ0FoRXVDLGdGQUF5QixHQWdFaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25FOEI7QUFDMkI7QUFDVDtBQUNRO0FBQ1c7QUFDUTtBQUU1RTtJQUFvRSw4Q0FBb0M7SUFBeEc7UUFBQSxxRUFvR0M7UUFuR0UsV0FBSyxHQUFHLFVBQUMsS0FBVTs7WUFDakIsV0FBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsMENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQztRQUNGLFdBQUssR0FBRyxVQUFDLEtBQVU7O1lBQ2pCLFdBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLDBDQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUFDRixXQUFLLEdBQUcsVUFBQyxLQUFVOztZQUNqQixXQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQiwwQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDO1FBQ0YsVUFBSSxHQUFHLFVBQUMsS0FBVTs7WUFDaEIsV0FBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsMENBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQzs7SUF3RkwsQ0FBQztJQXRGWSxpREFBWSxHQUF0QixVQUF1QixRQUFhO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztJQUM3QyxDQUFDO0lBQ1MsaURBQVksR0FBdEI7UUFDRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFDUyxpREFBWSxHQUF0QixVQUF1QixVQUFlOztRQUNwQyxJQUFJLGFBQWEsR0FBdUIsSUFBSSxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDNUIsNkRBQTZEO1lBQzdELGFBQWE7WUFDYixhQUFhLEdBQUcsNkRBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsVUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBTyxDQUFDO1NBQ3pJO2FBQU07WUFDTCxJQUFJLENBQUUsSUFBSSxDQUFDLFFBQWdCLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7Z0JBQzlELElBQUksQ0FBQyxRQUFnQixDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSw2REFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDcEY7WUFDRCxhQUFhLEdBQUc7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbkIsb0RBQUMsNkRBQUssSUFBQyxLQUFLLEVBQUUsZ0JBQUksQ0FBQyxRQUFRLDBDQUFFLGlCQUFpQiwwQ0FBRSxVQUFVLEdBQVUsQ0FDbkUsQ0FBQztTQUNMO1FBRUQsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxVQUFVLENBQUMsYUFBYSxJQUNyQyxhQUFhLENBQ1YsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVTLGdEQUFXLEdBQXJCO1FBQ0UsT0FBTyxDQUFDLDZEQUNOLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQzFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3ZELE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSztZQUNuQiw2REFBNkQ7WUFDN0QsYUFBYTtZQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFDdkMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUNsQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUNoQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsbUJBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLGdCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsa0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxzQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlO1lBRS9DLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLElBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQU87WUFDeEYsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQ3JCLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxzREFBaUIsR0FBakI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUI7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxRixJQUFNLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pFLE9BQU8sQ0FDTCw2REFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUMvQyxLQUFLLEVBQUUsS0FBSyxFQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSztZQUVuQixvREFBQyxxRUFBTyxJQUNOLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQ2xELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQ3ZDLElBQUksRUFBRSxNQUFNLEdBQ0gsQ0FDUCxDQUNQLENBQUM7SUFDSixDQUFDO0lBRVMsZ0RBQVcsR0FBckIsVUFBc0IsVUFBZTtRQUNuQyxPQUFPLENBQ0wsNkRBQUssU0FBUyxFQUFDLFlBQVk7WUFDekIsb0RBQUMsZ0ZBQXlCLElBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUN2QixRQUFRLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFDMUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEdBQ2pDLENBQ0UsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNKLGlDQUFDO0FBQUQsQ0FBQyxDQXBHbUUsd0ZBQWlDLEdBb0dwRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNHOEI7QUFDOEI7QUFJN0Q7SUFBOEMsNENBQWtCO0lBQzlELGtDQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FHYjtRQUZDLEtBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDNUIsS0FBSSxDQUFDLFVBQVUsRUFBRSxDQUFDOztJQUNwQixDQUFDO0lBQ0QscURBQWtCLEdBQWxCLFVBQW1CLFNBQWMsRUFBRSxTQUFjO1FBQy9DLGlCQUFNLGtCQUFrQixZQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELHVEQUFvQixHQUFwQjtRQUNFLGlCQUFNLG9CQUFvQixXQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxjQUFRLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFDTyw2Q0FBVSxHQUFsQjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQy9CLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUc7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQztJQUNKLENBQUM7SUFDUyxrREFBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0Qsc0JBQVksMENBQUk7YUFBaEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBQ1MsNENBQVMsR0FBbkI7UUFDRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFDUyxnREFBYSxHQUF2QjtRQUNFLE9BQU8sQ0FDTCxnRUFBUSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNSLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFDSCwrQkFBQztBQUFELENBQUMsQ0F2QzZDLHlFQUFrQixHQXVDL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUM4QjtBQUNlO0FBQ2lCO0FBQ0c7QUFDUDtBQUczRDtJQUFrRCxnREFBc0I7SUFDdEUsc0NBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRVMsbURBQVksR0FBdEIsVUFBdUIsVUFBZTtRQUF0QyxpQkFrQ0M7UUFqQ0MsSUFBTSxLQUFLLEdBQUcsVUFBQyxLQUFVO1lBQ3ZCLEtBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQztRQUNGLElBQU0sS0FBSyxHQUFHLFVBQUMsS0FBVTtZQUN2QixLQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUM7UUFFRixJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUN6Qyw2REFBNkQ7UUFDN0QsYUFBYTtRQUNiLDZEQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLFVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQU8sQ0FBQyxDQUFDLENBQUM7WUFDMUgsQ0FBQyxnRUFDQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUMxQyxHQUFHLEVBQUUsVUFBQyxNQUFNLElBQUssUUFBQyxLQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxFQUF2QixDQUF1QixFQUN4QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQ3hDLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQ2hDLE9BQU8sRUFBRSxLQUFLLEVBQ2QsT0FBTyxFQUFFLEtBQUssbUJBQ0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLGdCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsa0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxzQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQy9DLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdFQUFRLEtBQUssRUFBQyxFQUFFLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUN6RixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFlLEVBQUUsQ0FBUyxJQUFLLDJEQUFDLHVFQUF3QixJQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUksRUFBekQsQ0FBeUQsQ0FBQyxDQUNySCxDQUFDLENBQUM7UUFDYixPQUFPLENBQ0wsNkRBQUssU0FBUyxFQUFFLFVBQVUsQ0FBQyxhQUFhLElBQ3JDLGFBQWEsQ0FDVixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsbUNBQUM7QUFBRCxDQUFDLENBeENpRCw4RUFBc0IsR0F3Q3ZFOztBQUVELDJFQUFvQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxVQUFDLEtBQUs7SUFDekUsT0FBTyxtREFBbUIsQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMsQ0FBQztBQUVILDJEQUFlLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ25EdEY7QUFBQTtBQUFBO0lBQUE7UUFFVSxnQkFBVyxHQUE2QyxFQUFFLENBQUM7SUF1QnJFLENBQUM7SUFyQlEsNkNBQWUsR0FBdEIsVUFDRSxXQUFtQixFQUNuQixjQUEyQztRQUUzQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLGNBQWMsQ0FBQztJQUNqRCxDQUFDO0lBQ00seUNBQVcsR0FBbEI7UUFDRSxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ2pDLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNNLGlEQUFtQixHQUExQixVQUEyQixXQUFtQjtRQUM1QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDTSwyQ0FBYSxHQUFwQixVQUFxQixXQUFtQixFQUFFLE1BQVc7UUFDbkQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDakMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQXZCYSw0QkFBUSxHQUF3QixJQUFJLG1CQUFtQixFQUFFLENBQUM7SUF3QjFFLDBCQUFDO0NBQUE7QUF6QitCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRk47QUFHc0M7QUFDSjtBQUU1RDtJQUF5Qyx1Q0FBeUI7SUFBbEU7O0lBMEJBLENBQUM7SUF6QkMsc0JBQVksd0NBQU87YUFBbkI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzVCLENBQUM7OztPQUFBO0lBQ00sb0NBQU0sR0FBYjtRQUNFLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDL0IsMkRBQUMsNEVBQVksSUFBQyxPQUFPLEVBQUUsT0FBTyxHQUFpQixDQUNoRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxJQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsd0JBQXdCO1lBQ2xELENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLGtCQUFrQjtZQUNuRSxLQUFLO1lBQ0wsV0FBVyxDQUNSLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDUywrQ0FBaUIsR0FBM0I7UUFFRSxJQUFJLGVBQWUsR0FBRyx3RUFBaUIsQ0FBQyxlQUFlLENBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUM1QixDQUFDO1FBQ0YsT0FBTyxvRUFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUcsZUFBZSxDQUFPLENBQUM7SUFDOUUsQ0FBQztJQUNILDBCQUFDO0FBQUQsQ0FBQyxDQTFCd0MsNENBQUssQ0FBQyxTQUFTLEdBMEJ2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEM4QjtBQUV5QjtBQUNsQjtBQUNXO0FBRWpEO0lBQXFDLG1DQUFXO0lBQzlDLHlCQUFZLEtBQVU7ZUFDcEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELHNCQUFXLHNDQUFTO2FBQXBCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBdUIsQ0FBQztRQUN0QyxDQUFDOzs7T0FBQTtJQUNELDJDQUFpQixHQUFqQjtRQUNFLGlCQUFNLGlCQUFpQixXQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixHQUFHO2dCQUNyQyxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFDRCw4Q0FBb0IsR0FBcEI7UUFDRSxpQkFBTSxvQkFBb0IsV0FBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBQ1MscUNBQVcsR0FBckIsVUFBc0IsSUFBWTtRQUNoQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNTLHdDQUFjLEdBQXhCLFVBQXlCLFFBQWtCO1FBQ3pDLE9BQU8sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO0lBQ3RELENBQUM7SUFDUyxvQ0FBVSxHQUFwQjtRQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU8sc0NBQVksR0FBcEI7UUFDRSxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ1Msb0NBQVUsR0FBcEI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNqQyxJQUFNLElBQUksR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDakUsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLElBQU0sU0FBUyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ25DLE9BQU8sNkRBQUssdUJBQXVCLEVBQUUsU0FBUyxHQUFJLENBQUM7U0FDcEQ7UUFDRCxJQUFNLEdBQUcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNTLHFDQUFXLEdBQXJCLFVBQXNCLFFBQXFCO1FBQ3pDLElBQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNPLGtDQUFRLEdBQWhCLFVBQWlCLFFBQWdCO1FBQy9CLElBQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztRQUN0QixJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDbEMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7U0FDM0I7UUFDRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDbEMsS0FBSyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7U0FDNUI7UUFDRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7WUFDbEMsS0FBSyxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUM7U0FDcEM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDUywwQ0FBZ0IsR0FBMUIsVUFBMkIsSUFBVTtRQUNuQyxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxRQUFRLEtBQUssS0FBSztZQUNwQixPQUFPLDZEQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUcsUUFBUSxDQUFPLENBQUM7UUFDekQsT0FBTyxDQUNMLDhEQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQzNELFFBQVEsQ0FDSixDQUNSLENBQUM7SUFDSixDQUFDO0lBQ1Msb0NBQVUsR0FBcEIsVUFBcUIsSUFBVTtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QyxJQUFJLFFBQVEsS0FBSyxVQUFVLEVBQUU7WUFDM0IsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDM0IsSUFBTSxZQUFZLEdBQUcsQ0FDbkIsb0RBQUMsNkRBQWMsSUFDYixHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksRUFDbEIsT0FBTyxFQUFFLFFBQVEsRUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQ3JCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUNiLENBQ0gsQ0FBQztZQUNGLE9BQU8sOERBQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBRyxZQUFZLENBQVEsQ0FBQztTQUM5RDtRQUNELElBQUksUUFBUSxLQUFLLEtBQUssRUFBRTtZQUN0QixPQUFPLDZEQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBTyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxDQUNMLDhEQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQzNELElBQUksQ0FBQyxXQUFXLENBQ1osQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUNPLDBDQUFnQixHQUF4QixVQUF5QixJQUFVO1FBQ2pDLElBQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ08sK0NBQXFCLEdBQTdCLFVBQThCLElBQVU7UUFDdEMsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTztnQkFBRSxPQUFPLEtBQUssQ0FBQztTQUMvRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNTLHVDQUFhLEdBQXZCLFVBQXdCLEtBQVUsRUFBRSxJQUFtQjtRQUNyRCxPQUFPLG1EQUFtQixDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0gsc0JBQUM7QUFBRCxDQUFDLENBMUhvQyxrREFBVyxHQTBIL0M7O0FBRUQsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsZUFBSztJQUM3RCxPQUFPLG1EQUFtQixDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BJNEI7QUFDcUM7QUFFTDtBQUUvRDtJQUF5Qyx1Q0FBeUI7SUFDaEUsNkJBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0QsK0NBQWlCLEdBQWpCO1FBQUEsaUJBS0M7UUFKQyxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRztZQUNyQyxLQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNELGtEQUFvQixHQUFwQjtRQUNFLGlCQUFNLG9CQUFvQixXQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLGNBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxzQkFBYyx5Q0FBUTthQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLFlBQWtDLENBQUM7UUFDakQsQ0FBQzs7O09BQUE7SUFDUyx1Q0FBUyxHQUFuQjtRQUNFLE9BQU8saUJBQU0sU0FBUyxXQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ3hELENBQUM7SUFDUywyQ0FBYSxHQUF2QjtRQUNFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0MsSUFBSSxLQUFLLEdBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksS0FBSyxPQUFPLEVBQUU7WUFDMUMsT0FBTyxHQUFHLENBQ1IsNkRBQ0UsU0FBUyxFQUFFLFVBQVUsRUFDckIsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFlBQVksRUFDNUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUM5QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWM7Z0JBQ3BDLCtCQUErQjtnQkFDL0IsS0FBSyxFQUFFLEtBQUssR0FDWixDQUNILENBQUM7U0FDSDtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEtBQUssT0FBTyxFQUFFO1lBQzFDLE9BQU8sR0FBRyxDQUNSLCtEQUFPLFFBQVEsUUFDYixTQUFTLEVBQUUsVUFBVSxFQUNyQixHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUM1QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFDcEMsS0FBSyxFQUFFLEtBQUssR0FDTCxDQUNWLENBQUM7U0FDSDtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQzVDLE9BQU8sR0FBRyxDQUNSLGdFQUNFLFNBQVMsRUFBRSxVQUFVLEVBQ3JCLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQzVDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUNwQyxLQUFLLEVBQUUsS0FBSyxHQUNKLENBQ1gsQ0FBQztTQUNIO1FBQ0QsT0FBTyw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFHLE9BQU8sQ0FBTyxDQUFDO0lBQ3hFLENBQUM7SUFDSCwwQkFBQztBQUFELENBQUMsQ0E5RHdDLGdGQUF5QixHQThEakU7O0FBRUQsMkVBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFDLEtBQUs7SUFDNUQsT0FBTyxtREFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6RCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkU0QjtBQUM0RTtBQUc1QztBQUNDO0FBRWhFO0lBQStDLDZDQUF5QjtJQUN0RSxtQ0FBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxzQkFBYywrQ0FBUTthQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLFlBQXdDLENBQUM7UUFDdkQsQ0FBQzs7O09BQUE7SUFDUyxpREFBYSxHQUF2QjtRQUNFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzFDLE9BQU8sQ0FDTCxrRUFBVSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtZQUN2RCxnRUFDRSxJQUFJLEVBQUMsT0FBTyxnQkFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUk7WUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQzFFLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFUyw4Q0FBVSxHQUFwQixVQUFxQixVQUFlO1FBQXBDLGlCQWVDO1FBZEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFXLEVBQUUsRUFBVTtZQUN2RCxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBUyxFQUFFLEVBQVU7Z0JBQzNDLFlBQUksQ0FBQyxVQUFVLENBQ2IsTUFBTSxHQUFHLEVBQUUsRUFDWCxJQUFJLEVBQ0osVUFBVSxDQUNYO1lBSkQsQ0FJQyxDQUNGLENBQUM7WUFDRixPQUFPLENBQ0wsNkRBQUssR0FBRyxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFDLGNBQWMsSUFDcEYsS0FBSyxDQUNGLENBQ1AsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLDRDQUFRLEdBQWxCLFVBQW1CLFVBQWU7UUFDaEMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1RCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBc0IsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0Qsc0JBQWMsZ0RBQVM7YUFBdkI7WUFDRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN0RSxDQUFDOzs7T0FBQTtJQUNTLDhDQUFVLEdBQXBCLFVBQ0UsR0FBVyxFQUNYLElBQW9CLEVBQ3BCLFVBQWU7UUFFZixJQUFNLFlBQVksR0FBRyxvREFBQyw2QkFBNkIsSUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBa0MsQ0FBQztRQUM1SixJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQXFCLENBQUM7UUFDbkQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNYLFdBQVcsR0FBRyw0RUFBMEIsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25HO1FBQ0QsT0FBTyxXQUFXLGFBQVgsV0FBVyxjQUFYLFdBQVcsR0FBSSxZQUFZLENBQUM7SUFDckMsQ0FBQztJQUNILGdDQUFDO0FBQUQsQ0FBQyxDQTdEOEMsZ0ZBQXlCLEdBNkR2RTs7QUFDRDtJQUFtRCxpREFBa0I7SUFDbkUsdUNBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBREMsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDdkQsQ0FBQztJQUNTLHVEQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCx5REFBaUIsR0FBakI7UUFDRSxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDRCw0REFBb0IsR0FBcEI7UUFDRSxpQkFBTSxvQkFBb0IsV0FBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxjQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsMERBQWtCLEdBQWxCLFVBQW1CLFNBQWMsRUFBRSxTQUFjO1FBQy9DLGlCQUFNLGtCQUFrQixZQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ08seURBQWlCLEdBQXpCO1FBQUEsaUJBSUM7UUFIQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUc7WUFDakMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxLQUFJLENBQUMsS0FBSyxJQUFJLEtBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEgsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNELHNCQUFjLHFEQUFVO2FBQXhCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUMvQixDQUFDOzs7T0FBQTtJQUVELHNCQUFjLCtDQUFJO2FBQWxCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUVELHNCQUFjLG1EQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQUVELHNEQUFjLEdBQWQsVUFBZSxLQUFVO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEU7aUJBQU07Z0JBQ0wsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQzthQUNqQztTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUMxQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFUyxxREFBYSxHQUF2QjtRQUFBLGlCQThGQztRQTdGQyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUN0QixJQUFJLEdBQUcsQ0FDTCw4REFDRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHdFQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQ3BFLENBQ1IsQ0FBQztTQUNIO1FBRUQsSUFBSSxLQUFLLEdBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV2RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxPQUFPLEVBQUU7WUFDM0UsT0FBTyxHQUFHLENBQ1IsNkRBQ0UsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQzNCLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFDbkMsS0FBSyxFQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQ3hDLE1BQU0sRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUMxQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQzlCLEtBQUssRUFBRSxLQUFLLEVBQ1osTUFBTSxFQUFFLFVBQUMsS0FBVSxJQUFPLEtBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUN0RixDQUNILENBQUM7U0FDSDtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssT0FBTyxFQUFFO1lBQzNFLE9BQU8sR0FBRyxDQUNSLCtEQUFPLFFBQVEsUUFDYixTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFDM0IsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUNuQyxLQUFLLEVBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFDeEMsTUFBTSxFQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQzFDLEtBQUssRUFBRSxLQUFLLEVBQ1osZ0JBQWdCLEVBQUUsVUFBQyxLQUFVLElBQU8sS0FBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQ3pGLENBQ1YsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFO1lBQ25DLElBQUksT0FBSyxHQUFRO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQjtnQkFDdkMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CO2dCQUN6QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRO2FBQ2xDLENBQUM7WUFDRixPQUFPLEdBQUcsQ0FDUiw2REFDRSxTQUFTLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFDakMsS0FBSyxFQUFFLE9BQUssSUFHVixVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDN0IsNkRBQUssU0FBUyxFQUFFLFVBQVUsQ0FBQyxrQkFBa0I7b0JBQzNDLDZEQUFLLFNBQVMsRUFBRSxVQUFVLENBQUMsb0JBQW9CLEdBQVEsQ0FDbkQsRUFBQztnQkFDUCxJQUFJLENBRUosQ0FDUCxDQUFDO1NBQ0g7UUFFRCxJQUFNLFlBQVksR0FBRyxDQUNuQiw2REFBSyxTQUFTLEVBQUUsU0FBUztZQUN2QiwrREFBTyxTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUs7Z0JBQ2hDLCtEQUNFLFNBQVMsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUNqQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUNsQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFDakIsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQzdDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxtQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksZ0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxrQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLHNCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FDL0M7Z0JBQ0YsNkRBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWE7b0JBQ3BELDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLElBQ3BELE9BQU8sQ0FDSjtvQkFDTCxJQUFJLENBQ0QsQ0FDQSxDQUNKLENBQ1AsQ0FBQztRQUNGLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFDSCxvQ0FBQztBQUFELENBQUMsQ0FuSmtELHlFQUFrQixHQW1KcEU7O0FBRUQsMkVBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxVQUFDLEtBQUs7SUFDbEUsT0FBTyxtREFBbUIsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1TjRCO0FBRTZCO0FBRWI7QUFDaUI7QUFFaEU7SUFBZ0MsOEJBQWU7SUFDN0Msb0JBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ1MsaUNBQVksR0FBdEI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxzQkFBVyw0QkFBSTthQUFmO1lBQ0UsT0FBTyxJQUFJLENBQUMsU0FBc0IsQ0FBQztRQUNyQyxDQUFDOzs7T0FBQTtJQUNTLGtDQUFhLEdBQXZCO1FBQ0UsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxPQUFPLENBQ0wsNkRBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNqRCxLQUFLO1lBQ0wsV0FBVztZQUNYLElBQUksQ0FDQSxDQUNSLENBQUM7SUFDSixDQUFDO0lBQ1MsZ0NBQVcsR0FBckI7UUFDRSxPQUFPLG9EQUFDLDRFQUFZLElBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQWlCLENBQUM7SUFDM0QsQ0FBQztJQUNTLHNDQUFpQixHQUEzQjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzdDLElBQUksSUFBSSxHQUFHLHdFQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sQ0FDTCw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBRyxJQUFJLENBQU8sQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFDSCxpQkFBQztBQUFELENBQUMsQ0FoQytCLDJEQUFlLEdBZ0M5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2QzhCO0FBSTZCO0FBRTFCO0FBRWxDO0lBQXFDLG1DQUEyQjtJQUU5RCx5QkFBWSxLQUFVO1FBQXRCLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFvRU8sdUJBQWlCLEdBQVEsRUFBRSxDQUFDO1FBckVsQyxLQUFJLENBQUMsT0FBTyxHQUFHLCtDQUFlLEVBQUUsQ0FBQzs7SUFDbkMsQ0FBQztJQUNTLHlDQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDUywyQ0FBaUIsR0FBM0IsVUFBNEIsR0FBVztRQUNyQyxPQUFPLEdBQUcsS0FBSyxVQUFVLElBQUksaUJBQU0saUJBQWlCLFlBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELHNCQUFjLG1DQUFNO2FBQXBCO1lBQ0UsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBYyxvQ0FBTzthQUFyQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDNUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBYyxnQ0FBRzthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVcsc0NBQVM7YUFBcEI7WUFDRSxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQUNTLHNDQUFZLEdBQXRCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUNuRCxDQUFDO0lBQ1MsbUNBQVMsR0FBbkI7UUFDRSxPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUNTLGdDQUFNLEdBQWhCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUN4QixDQUFDO0lBQ0QsMkNBQWlCLEdBQWpCO1FBQ0UsaUJBQU0saUJBQWlCLFdBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELDhDQUFvQixHQUFwQjtRQUNFLGlCQUFNLG9CQUFvQixXQUFFLENBQUM7UUFDN0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFDRCw0Q0FBa0IsR0FBbEIsVUFBbUIsU0FBYyxFQUFFLFNBQWM7UUFDL0MsaUJBQU0sa0JBQWtCLFlBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLElBQ0UsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJO1lBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUNiLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVc7WUFDekIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSTtZQUVwRCxPQUFPO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDTyx1Q0FBYSxHQUFyQjtRQUNFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNoRTtpQkFBTTtnQkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNqQztTQUNGO0lBQ0gsQ0FBQztJQUNTLG1DQUFTLEdBQW5CO1FBQ0UsT0FBTyxDQUNMLGlCQUFNLFNBQVMsV0FBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztlQUNuRCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQ3ZELENBQUM7SUFDSixDQUFDO0lBRVMsb0NBQVUsR0FBcEIsVUFBcUIsR0FBUTtRQUMzQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxNQUFNLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztTQUM3QjtRQUNELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDUixHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ2xEO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNoQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNTLG1DQUFTLEdBQW5CLFVBQW9CLEdBQXFCLEVBQUUsR0FBUTtRQUNqRCxPQUFPLENBQ0wsb0RBQUMsOENBQVMsSUFDUixHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFDWCxHQUFHLEVBQUUsR0FBRyxFQUNSLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFDckIsR0FBRyxFQUFFLEdBQUcsR0FDUixDQUNILENBQUM7SUFDSixDQUFDO0lBQ0gsc0JBQUM7QUFBRCxDQUFDLENBckdvQyx3RUFBaUIsR0FxR3JEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdHOEI7QUFDdUI7QUFDTTtBQUNKO0FBRVQ7QUFFaUI7QUFDSztBQUNMO0FBQ1Q7QUFFdkQ7SUFBaUMsK0JBQWU7SUFFOUMscUJBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUNiO1FBSE8scUJBQWUsR0FBWSxLQUFLLENBQUM7O0lBR3pDLENBQUM7SUFDRCxzQkFBVyw4QkFBSzthQUFoQjtZQUNFLE9BQU8sSUFBSSxDQUFDLFNBQXVCLENBQUM7UUFDdEMsQ0FBQzs7O09BQUE7SUFDUyxtQ0FBYSxHQUF2QjtRQUNFLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxJQUFNLE1BQU0sR0FBRyxDQUNiLG9EQUFDLGtFQUFtQixJQUNsQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUNyQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FDckIsQ0FDSCxDQUFDO1FBQ0YsSUFBTSxLQUFLLEdBQUc7WUFDWixXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUN0RCxDQUFDO1FBQ0YsSUFBSSxPQUFPLEdBQWdCLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFNLElBQUksR0FBa0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZFLElBQU0sU0FBUyxHQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDbEUsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN0RDtRQUNELE9BQU8sQ0FDTCw2REFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFDakIsU0FBUyxFQUFHLElBQUksQ0FBQyxTQUF3QixDQUFDLGVBQWUsRUFBRSxFQUMzRCxPQUFPLEVBQUcsSUFBSSxDQUFDLFNBQXdCLENBQUMsT0FBTztZQUU5QyxNQUFNO1lBQ04sTUFBTTtZQUNOLE9BQU8sQ0FDSixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ1Msa0NBQVksR0FBdEI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUN0RCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxvREFBQyxtRUFBbUIsSUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBd0IsQ0FBQztJQUMxRSxDQUFDO0lBQ1MsaUNBQVcsR0FBckIsVUFBc0IsT0FBb0I7UUFDeEMsSUFBTSxNQUFNLEdBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUM3RCxJQUFJLE9BQW9CLENBQUM7UUFDekIsSUFBSSxNQUFNLEVBQUU7WUFDVixPQUFPLEdBQUcsNEVBQTBCLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsT0FBTyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxPQUFPLENBQUM7SUFDNUIsQ0FBQztJQUNTLG1DQUFhLEdBQXZCLFVBQXdCLEtBQVUsRUFBRSxJQUFtQixFQUFFLFNBQWlCO1FBQ3hFLElBQU0sTUFBTSxHQUFnQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsT0FBTyxDQUNMLDZEQUFLLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO1lBQzlELElBQUk7WUFDSixNQUFNLENBQ0gsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNTLGlDQUFXLEdBQXJCO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3ZDLE9BQU8sb0RBQUMsNEVBQVksSUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBaUIsQ0FBQztJQUNoRSxDQUFDO0lBQ1MsdUNBQWlCLEdBQTNCO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzdDLElBQUksSUFBSSxHQUFHLHdFQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sQ0FDTCw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBRyxJQUFJLENBQU8sQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFDUyxrQ0FBWSxHQUF0QjtRQUNFLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMzQyxPQUFPLG9EQUFDLGlGQUFlLElBQUMsS0FBSyxFQUFFLGFBQWEsR0FBb0IsQ0FBQztJQUNuRSxDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLENBL0VnQywyREFBZSxHQStFL0M7O0FBRUQsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsVUFBQyxLQUFLO0lBQzFELE9BQU8sbURBQW1CLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvRjRCO0FBQ29DO0FBQ047QUFDRTtBQUUvRDtJQUFrRCxnREFBK0M7SUFDL0Ysc0NBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ1Msb0RBQWEsR0FBdkI7UUFDRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sQ0FDTCw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUNsRCxNQUFNLENBQ0gsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNILG1DQUFDO0FBQUQsQ0FBQyxDQWJpRCx5RUFBMEIsR0FhM0U7O0FBQ0QsMkVBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUM1QyxvQkFBb0IsRUFDcEIsVUFBQyxLQUFLO0lBQ0osT0FBTyxtREFBbUIsQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQ0YsQ0FBQztBQUVGLDJEQUFlLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUN2QyxRQUFRLEVBQ1IsVUFBVSxFQUNWLG9CQUFvQixDQUNyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUI2QjtBQUNRO0FBQ3FCO0FBQ1A7QUFFckQ7SUFBaUMsK0JBQU07SUFFckMscUJBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBREMsS0FBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLENBQUM7O0lBQzNELENBQUM7SUFDUyxzQ0FBZ0IsR0FBMUI7UUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxzQ0FBZ0IsR0FBaEIsVUFBaUIsS0FBVTtRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNTLCtCQUFTLEdBQW5CO1FBQ0UsT0FBTyxpQkFBTSxTQUFTLFdBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNuRCxDQUFDO0lBQ1MsbUNBQWEsR0FBdkI7UUFDRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUQsSUFBSSxLQUFLLEdBQXdCO1lBQy9CLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE1BQU0sRUFBRSxDQUFDO1lBQ1QsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDO1FBQ0YsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSztZQUM3QyxNQUFNO1lBQ04sSUFBSSxDQUNELENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDUyx3Q0FBa0IsR0FBNUI7UUFDRSxJQUFJLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ2xELElBQUksVUFBVSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzFDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzFDLGNBQWMsR0FBRyx1QkFBdUIsR0FBRyxjQUFjLENBQUM7UUFDMUQsSUFBSSxLQUFLLEdBQUcsd0VBQWlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEUsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7WUFDdEMsOERBQU0sT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTTtnQkFDakQsOERBQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxVQUFVLElBQzFELEtBQUssQ0FDRDtnQkFDUCw4REFBTSxTQUFTLEVBQUUsY0FBYyxpQkFBYyxNQUFNLEdBQUcsQ0FDakQ7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDdkIsOERBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFDOUIsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO2dCQUU1Qyw4REFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLFVBQVUsUUFFdEQsQ0FDRixDQUNSLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDSixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ1MsZ0NBQVUsR0FBcEI7UUFDRSxPQUFPLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQU8sQ0FBQztJQUNyRSxDQUFDO0lBQ1Msa0NBQVksR0FBdEIsVUFBdUIsUUFBYTtRQUNsQyxJQUFJLENBQUMsUUFBUTtZQUFFLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDN0IsaUJBQU0sWUFBWSxZQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSw0REFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksUUFBUSxDQUFDLHNCQUFzQixFQUFFO1lBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1NBQ3JFO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN0RSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDSCxrQkFBQztBQUFELENBQUMsQ0F4RWdDLG1EQUFNLEdBd0V0Qzs7QUFDRDs7R0FFRztBQUNIO0lBQWtDLGdDQUFXO0lBQTdDOztJQUErQyxDQUFDO0lBQUQsbUJBQUM7QUFBRCxDQUFDLENBQWQsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakZqQjtBQUNrSDtBQUM3RztBQUV3QjtBQUNKO0FBQ2dCO0FBQ25CO0FBQ1U7QUFDUDtBQUNtQztBQUN0QjtBQUNqQjtBQUVwRDtJQUE0QiwwQkFBMkI7SUFlckQsZ0JBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQU9iO1FBckJPLGtCQUFZLEdBQUcsRUFBRSxDQUFDO1FBZXhCLEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQy9ELEtBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsS0FBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0IsS0FBSSxDQUFDLE9BQU8sR0FBRywrQ0FBZSxFQUFFLENBQUM7UUFDakMsS0FBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztRQUNuQyxLQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7O0lBQ2pELENBQUM7SUFuQkQsc0JBQWtCLGlCQUFPO2FBQXpCO1lBQ0UsT0FBTyxxREFBUyxDQUFDLFdBQVcsQ0FBQztRQUMvQixDQUFDO2FBQ0QsVUFBMEIsS0FBYTtZQUNyQyx5REFBYSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDOzs7T0FIQTtJQWtCUyxnQ0FBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0Qsc0NBQXFCLEdBQXJCLFVBQXNCLFNBQWMsRUFBRSxTQUFjO1FBQ2xELElBQUksQ0FBQyxpQkFBTSxxQkFBcUIsWUFBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDckUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNsQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELG1DQUFrQixHQUFsQixVQUFtQixTQUFjLEVBQUUsU0FBYztRQUMvQyxpQkFBTSxrQkFBa0IsWUFBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxrQ0FBaUIsR0FBakI7UUFDRSxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBQ0QscUNBQW9CLEdBQXBCO1FBQ0UsaUJBQU0sb0JBQW9CLFdBQUUsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUNELHlCQUFRLEdBQVI7UUFDRSxJQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUNqQyx1REFBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxZQUF5QixDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksV0FBVyxFQUFFO1lBQ3BDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDdkM7YUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLGlCQUFpQixFQUFFO1lBQ2pELFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUM3QzthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksU0FBUyxFQUFFO1lBQ3pDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDckM7YUFBTTtZQUNMLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDcEM7UUFDRCxJQUFNLE1BQU0sR0FBZ0Isb0RBQUMsb0ZBQVksSUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBaUIsQ0FBQztRQUMvRSxJQUFNLFFBQVEsR0FBRyxVQUFVLEtBQXVDO1lBQ2hFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUM7UUFDRixJQUFJLFlBQVksR0FBZ0IsNkRBQUssU0FBUyxFQUFDLGtCQUFrQixHQUFHLENBQUM7UUFDckUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUN2QixZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBQ0QsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN6QyxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDN0YsSUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ3RCLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDakM7UUFFRCxPQUFPLENBQ0wsNkRBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSztZQUM5RSw4REFBTSxRQUFRLEVBQUUsUUFBUTtnQkFDckIsWUFBWTtnQkFDYiw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTO29CQUMvQixNQUFNO29CQUNOLFlBQVksQ0FDVCxDQUNEO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLG9EQUFDLGlFQUFTLE9BQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM3QyxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ1MsOEJBQWEsR0FBdkI7UUFDRSxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0Qsc0JBQVcsdUJBQUc7YUFBZDtZQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDekIsQ0FBQzthQUNELFVBQWUsS0FBVTtZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQzs7O09BSEE7SUFJRCxvQ0FBbUIsR0FBbkIsVUFBb0IsS0FBVTtRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDUyxnQ0FBZSxHQUF6QjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQjtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFO1lBQzlCLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLE9BQU8sRUFBRTtnQkFDekMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNuRSxjQUFjLEdBQUcsQ0FDZiwrREFDRSxJQUFJLEVBQUUsUUFBUSxFQUNkLEtBQUssRUFBRSxPQUFPLEVBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFDNUMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsR0FDakMsQ0FDSCxDQUFDO2FBQ0g7WUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3hELGNBQWMsR0FBRyxDQUNmLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJO2dCQUNwQyw2REFBSyxTQUFTLEVBQUUsR0FBRztvQkFDakIsa0VBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBUTtvQkFDNUMsY0FBYyxDQUNYLENBQ0YsQ0FDUCxDQUFDO1NBQ0g7UUFDRCxJQUFJLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDL0QsT0FBTyxDQUNMLG9EQUFDLDhDQUFjO1lBQ2IsNkRBQ0UsdUJBQXVCLEVBQUUsU0FBUyxFQUNsQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQ25DO1lBQ0QsY0FBYyxDQUNBLENBQ2xCLENBQUM7SUFDSixDQUFDO0lBQ1Msc0NBQXFCLEdBQS9CO1FBQ0UsSUFBSSxTQUFTLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sQ0FDTCw2REFBSyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFJLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBQ1MsOEJBQWEsR0FBdkI7UUFDRSxJQUFJLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDN0QsT0FBTyxDQUNMLDZEQUFLLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUksQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFDUyw2QkFBWSxHQUF0QjtRQUNFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUN6QyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1QsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckUsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLFNBQVM7WUFDaEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHlCQUF5QixJQUFJLENBQUMsU0FBUztZQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDL0IsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxDQUNMLDZEQUNFLEVBQUUsRUFBRSxNQUFNLEVBQ1YsU0FBUyxFQUFFLFNBQVM7WUFFbkIsV0FBVztZQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUM1QixVQUFVO1lBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztZQUMvQixjQUFjO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUM1QixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ1MsaUNBQWdCLEdBQTFCLFVBQTJCLFFBQWdCO1FBQ3pDLElBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0I7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvQyxJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QjtZQUM3RCxPQUFPLElBQUksQ0FBQztRQUNkLElBQUksUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsMkJBQTJCO1lBQ25FLE9BQU8sSUFBSSxDQUFDO1FBQ2QsT0FBTyxvREFBQyxpRUFBZ0IsSUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUksQ0FBQztJQUNsRSxDQUFDO0lBQ1MsMkJBQVUsR0FBcEIsVUFBcUIsSUFBZTtRQUNsQyxPQUFPLENBQ0wsb0RBQUMsZ0RBQVUsSUFDVCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFDbkIsSUFBSSxFQUFFLElBQUksRUFDVixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFDYixPQUFPLEVBQUUsSUFBSSxHQUNiLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFDUywrQkFBYyxHQUF4QixVQUF5QixLQUFjO1FBQ3JDLE9BQU8sb0VBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDL0MsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxFQUMxRCxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FDckQsQ0FBQztJQUNKLENBQUM7SUFDUyxpQ0FBZ0IsR0FBMUIsVUFBMkIsV0FBbUI7UUFDNUMsSUFDRSxJQUFJLENBQUMsTUFBTSxDQUFDLDBCQUEwQixLQUFLLE1BQU07WUFDakQsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLDBCQUEwQixLQUFLLE1BQU07Z0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEtBQUssV0FBVyxDQUFDLEVBQ3pEO1lBQ0EsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sb0RBQUMsa0ZBQWUsSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUksQ0FBQztJQUMvRCxDQUFDO0lBQ1Msa0NBQWlCLEdBQTNCO1FBQ0UsT0FBTyxrRUFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBUSxDQUFDO0lBQ3BELENBQUM7SUFDUyw2QkFBWSxHQUF0QixVQUF1QixRQUFhO1FBQ2xDLElBQUksQ0FBQyxRQUFRO1lBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtvQkFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksdURBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzlDO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHVEQUFXLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ08sbUNBQWtCLEdBQTFCLFVBQTJCLFFBQWE7UUFDdEMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDMUM7UUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdEIsT0FBTyxDQUFDLG1EQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN2RTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNTLDZCQUFZLEdBQXRCLFVBQXVCLFFBQWEsRUFBRSxRQUFjO1FBQ2xELElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUMxQixLQUFLLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRTtZQUN4QixJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLFVBQVUsSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFO2dCQUN4RCxTQUFTO2FBQ1Y7WUFDRCxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLFNBQVM7YUFDVjtZQUNELElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsU0FBUztZQUM5QyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3RFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3JDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xDO1NBQ0Y7SUFDSCxDQUFDO0lBQ1MsZ0NBQWUsR0FBekI7UUFDRSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFFaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEdBQUc7WUFDM0IsSUFBSSxPQUFPLEdBQ1QsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQUMsTUFBTTtZQUNuQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMzQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtJQUNULHNDQUFxQixHQUE1QixVQUE2QixRQUFrQjtRQUM3QyxPQUFPLDJFQUFvQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQ2pELENBQUMsUUFBUSxDQUFDLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtZQUMzRCxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRTtZQUN4QixDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEVBQy9CO1lBQ0UsUUFBUSxFQUFFLFFBQVE7WUFDbEIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxlQUFlO1lBQ3ZDLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNNLDRCQUFXLEdBQWxCLFVBQ0UsR0FBVyxFQUNYLEtBQWtCLEVBQ2xCLFVBQWU7UUFFZixPQUFPLENBQ0wsNkRBQUssR0FBRyxFQUFFLEdBQUc7WUFDWCw4REFBTSxTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxpQkFBYyxNQUFNLEdBQUc7WUFDMUUsOERBQU0sU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFNBQVM7Z0JBQ2pELG9EQUFDLG9FQUFxQixJQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxHQUFJLENBQzNDLENBQ0gsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNNLHNDQUFxQixHQUE1QjtRQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztJQUMzQyxDQUFDO0lBQ00sc0NBQXFCLEdBQTVCO1FBQ0UsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0lBQzNDLENBQUM7SUFDSCxhQUFDO0FBQUQsQ0FBQyxDQXRVMkIsd0VBQWlCLEdBc1U1Qzs7QUFFRCxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxVQUFDLEtBQUs7SUFDM0QsT0FBTyxtREFBbUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFFSSxTQUFTLGVBQWUsQ0FBQyxPQUFvQixFQUFFLFNBQWUsRUFBRSxPQUE4RTtJQUE5RSxzQ0FBcUMsVUFBVSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFO0lBQ25KLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQ3RGLE9BQU8sa0RBQWtCLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN0RDtJQUNELE9BQU8sa0RBQWtCLENBQ3ZCLE9BQU8sRUFDUDtRQUNFLFFBQVEsRUFBRSxDQUFDO1FBQ1gsT0FBTyxFQUFFLFVBQUMsR0FBa0I7WUFDMUIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN0QixpRUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM1QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxTQUFTLEVBQUUsVUFBQyxHQUFRLElBQUssMkVBQWUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQTdCLENBQTZCO1FBQ3RELE1BQU0sRUFBRSxVQUFDLEdBQVEsSUFBSywyRUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFwQixDQUFvQjtLQUMzQyxDQUNGLENBQUM7QUFDSixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVXOEI7QUFHL0I7SUFBMEMsd0NBQXlCO0lBQ2pFLDhCQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQU9PLHlCQUFtQixHQUFRLElBQUksQ0FBQztRQVJ0QyxLQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDOztJQUM3QixDQUFDO0lBQ0Qsc0JBQWMsd0NBQU07YUFBcEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQWMscUNBQUc7YUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3hCLENBQUM7OztPQUFBO0lBRUQsZ0RBQWlCLEdBQWpCO1FBQ0UsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRztnQkFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ2hFO0lBQ0gsQ0FBQztJQUNELG1EQUFvQixHQUFwQjtRQUNFLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztTQUNqQztJQUNILENBQUM7SUFDSCwyQkFBQztBQUFELENBQUMsQ0EzQnlDLCtDQUFlLEdBMkJ4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlCOEI7QUFDbUI7QUFDaUI7QUFDWDtBQUV4RDtJQUFvQyxrQ0FBb0I7SUFDdEQsd0JBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0Qsc0JBQWMsaUNBQUs7YUFBbkI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQWMsb0NBQVE7YUFBdEI7WUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQ25DLENBQUM7OztPQUFBO0lBQ0Qsc0JBQWMsd0NBQVk7YUFBMUI7WUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ2xDLENBQUM7OztPQUFBO0lBQ0QsK0JBQU0sR0FBTjtRQUNFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbkQsSUFBSSxhQUFhLEdBQUc7WUFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRztTQUMzQixDQUFDO1FBQ0YsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSztZQUM3Qyw2REFDRSxLQUFLLEVBQUUsYUFBYSxFQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQy9CLElBQUksRUFBQyxhQUFhLG1CQUNILENBQUMsbUJBQ0QsR0FBRztnQkFFbEIsOERBQ0UsU0FBUyxFQUFFLCtEQUFtQixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFFL0QsSUFBSSxDQUFDLFlBQVksQ0FDYixDQUNIO1lBQ04sOERBQ0UsU0FBUyxFQUFFLCtEQUFtQixDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFFbEUsSUFBSSxDQUFDLFlBQVksQ0FDYixDQUNILENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCxxQkFBQztBQUFELENBQUMsQ0F6Q21DLCtFQUFvQixHQXlDdkQ7O0FBRUQsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxlQUFLO0lBQ3JFLE9BQU8sbURBQW1CLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyxDQUFDO0FBQ0gsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxlQUFLO0lBQ3pFLE9BQU8sbURBQW1CLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyxDQUFDO0FBQ0gsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDMUMsOEJBQThCLEVBQzlCLGVBQUs7SUFDSCxPQUFPLG1EQUFtQixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQ0YsQ0FBQztBQUNGLG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLCtCQUErQixFQUMvQixlQUFLO0lBQ0gsT0FBTyxtREFBbUIsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pFNkI7QUFDcUM7QUFDRDtBQUNYO0FBRXhEO0lBQTJDLHlDQUFvQjtJQUk3RCwrQkFBWSxLQUFVO1FBQXRCLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBR2I7UUFOTyxvQkFBYyxHQUFRLFNBQVMsQ0FBQztRQUl0QyxLQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxzRUFBMEIsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEUsS0FBSSxDQUFDLGdCQUFnQixHQUFHLCtDQUFlLEVBQUUsQ0FBQzs7SUFDNUMsQ0FBQztJQUNELHNDQUFNLEdBQU47UUFBQSxpQkE2QkM7UUE1QkMsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLDhCQUE4QjtZQUNyRCw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0I7Z0JBQy9DLDZEQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQ3hDLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFO3dCQUNQLFlBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztvQkFBM0QsQ0FBMkQsR0FFeEQ7Z0JBQ1AsNkRBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQ2hELEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO29CQUUxQiw0REFBSSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsSUFDeEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUNwQixDQUNEO2dCQUNOLDZEQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQ3pDLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFO3dCQUNQLFlBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztvQkFBNUQsQ0FBNEQsR0FFekQsQ0FDSCxDQUNGLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDUywrQ0FBZSxHQUF6QjtRQUFBLGlCQU1DO1FBTEMsSUFBSSxPQUFPLEdBQWtCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBQyxJQUFlLEVBQUUsS0FBYTtZQUM5RCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDUyxpREFBaUIsR0FBM0IsVUFBNEIsSUFBZSxFQUFFLEtBQWE7UUFBMUQsaUJBeUJDO1FBeEJDLE9BQU8sQ0FDTCw0REFDRSxHQUFHLEVBQUUsYUFBYSxHQUFHLEtBQUssRUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFDeEMsT0FBTyxFQUNMLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxjQUFNLFlBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBNUIsQ0FBNEI7Z0JBQ3BDLENBQUMsQ0FBQyxTQUFTO1lBR2YsNkRBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQzVDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLElBRXZDLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLElBQUksQ0FDOUI7WUFDTiw2REFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFDbEQsS0FBSyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsSUFFaEMsSUFBSSxDQUFDLHFCQUFxQixDQUN2QixDQUNILENBQ04sQ0FBQztJQUNKLENBQUM7SUFDUyxzREFBc0IsR0FBaEMsVUFBaUMsS0FBYTtRQUM1QyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ1MsaURBQWlCLEdBQTNCLFVBQTRCLEtBQWE7UUFDdkMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNTLGdEQUFnQixHQUExQixVQUEyQixLQUFhO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ1Msa0RBQWtCLEdBQTVCLFVBQTZCLFlBQXFCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFDUyxpREFBaUIsR0FBM0IsVUFDRSxvQkFBNkIsRUFDN0IsWUFBcUI7UUFFckIsSUFBRyxDQUFDLENBQUMsb0JBQW9CLEVBQUU7WUFDekIsb0JBQW9CLENBQUMsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQztJQUNELGlEQUFpQixHQUFqQjtRQUFBLGlCQU1DO1FBTEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUM7WUFDaEMsSUFBRyxDQUFDLENBQUMsS0FBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQkFDbEMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7YUFDeEg7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQ0Qsb0RBQW9CLEdBQXBCO1FBQ0UsSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssV0FBVyxFQUFFO1lBQzlDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBQ0gsNEJBQUM7QUFBRCxDQUFDLENBekcwQywrRUFBb0IsR0F5RzlEOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMscUJBQXFCLEVBQUUsVUFBQyxLQUFLO0lBQ3hFLE9BQU8sbURBQW1CLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsSDRCO0FBU1Y7QUFDMkM7QUFDUjtBQUN3QjtBQUNaO0FBQ2Y7QUFDRTtBQVN2RDtJQUFvQyxrQ0FBMkI7SUFjN0Qsd0JBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBaEJPLGlCQUFXLEdBQUcsS0FBSyxDQUFDO1FBZTFCLEtBQUksQ0FBQyxPQUFPLEdBQUcsK0NBQWUsRUFBRSxDQUFDOztJQUNuQyxDQUFDO0lBZmEsaUNBQWtCLEdBQWhDLFVBQ0UsT0FBdUIsRUFDdkIsUUFBa0I7UUFFbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDckMsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE9BQU8sT0FBTyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsT0FBTyxvREFBQyxpRUFBa0IsSUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEdBQUksQ0FBQztJQUN0RSxDQUFDO0lBTVMsd0NBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUNELHNCQUFjLG9DQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELHNCQUFZLG1DQUFPO2FBQW5CO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELDBDQUFpQixHQUFqQjtRQUNFLGlCQUFNLGlCQUFpQixXQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztTQUMvQjtRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0QsNkNBQW9CLEdBQXBCO1FBQ0UsaUJBQU0sb0JBQW9CLFdBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQy9CO1FBQ0QsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDaEMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFDRCwyQ0FBa0IsR0FBbEIsVUFBbUIsU0FBYyxFQUFFLFNBQWM7UUFDL0MsaUJBQU0sa0JBQWtCLFlBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ08sc0NBQWEsR0FBckI7UUFDRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFO2dCQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDcEM7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztTQUMxQjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUM5QixJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsRUFBRTtnQkFDbEQsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBQ1Msa0NBQVMsR0FBbkI7UUFDRSxPQUFPLENBQ0wsaUJBQU0sU0FBUyxXQUFFO1lBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVTLDhDQUFxQixHQUEvQjtRQUNFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsSUFBSSxZQUFZLEdBQUc7WUFDakIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUNsRCxDQUFDO1FBQ0YsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0MsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjO1lBQzFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7WUFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCO1lBQ2hELENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7WUFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULElBQUksT0FBTyxHQUNULFFBQVEsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUUsSUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CO1lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7WUFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNYLElBQUkscUJBQXFCLEdBQUcsUUFBUSxDQUFDLHdCQUF3QjtZQUMzRCxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxPQUFPLENBQ0wsNkRBQ0UsU0FBUyxFQUFFLFFBQVEsQ0FBQyxVQUFVLElBQUksU0FBUyxFQUMzQyxLQUFLLEVBQUUsWUFBWSxFQUNuQixJQUFJLEVBQUMsY0FBYztZQUVsQixTQUFTO1lBQ1QsY0FBYztZQUNkLE9BQU87WUFDUCxZQUFZO1lBQ1osYUFBYTtZQUNiLHFCQUFxQixDQUNsQixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ1Msc0NBQWEsR0FBdkI7UUFDRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzNELElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFN0QsSUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QjtZQUMvRCxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFVCxJQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCO1lBQy9ELENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVULElBQUksU0FBUyxHQUE2QixFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVc7WUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUM1RSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUN6QixTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUVwRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUM3RSxPQUFPLENBQ0w7WUFDRSw2REFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFDakIsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQ2YsU0FBUyxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFDaEMsS0FBSyxFQUFFLFNBQVMsRUFDaEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRLG1CQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxrQkFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLHFCQUN0QixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUUvRCxtQkFBbUI7Z0JBQ25CLFNBQVM7Z0JBQ1QsZUFBZTtnQkFDZixZQUFZO2dCQUNaLG1CQUFtQixDQUNoQixDQUNMLENBQ0osQ0FBQztJQUNKLENBQUM7SUFDUyxvQ0FBVyxHQUFyQixVQUFzQixPQUFvQjtRQUN4QyxJQUFNLE1BQU0sR0FBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFxQixDQUFDO1FBQ2hFLElBQUksT0FBb0IsQ0FBQztRQUN6QixJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sR0FBRyw0RUFBMEIsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEY7UUFDRCxPQUFPLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBQ1MsNENBQW1CLEdBQTdCLFVBQThCLE9BQW9CO1FBQ2hELElBQU0sTUFBTSxHQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQXFCLENBQUM7UUFDaEUsSUFBSSxPQUFvQixDQUFDO1FBQ3pCLElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxHQUFHLDRFQUEwQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzFGO1FBQ0QsT0FBTyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxPQUFPLENBQUM7SUFDNUIsQ0FBQztJQUNTLHVDQUFjLEdBQXhCO1FBQ0UsT0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUNTLDBDQUFpQixHQUEzQjtRQUNFLElBQUksZUFBZSxHQUFHLHdFQUFpQixDQUFDLGVBQWUsQ0FDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQzdCLENBQUM7UUFDRixPQUFPLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsSUFBRyxlQUFlLENBQU8sQ0FBQztJQUMvRSxDQUFDO0lBQ1Msc0NBQWEsR0FBdkIsVUFBd0IsVUFBZTtRQUNyQyxJQUFJLFdBQVcsR0FBRyx3RUFBaUIsQ0FBQyxlQUFlLENBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUM3QixDQUFDO1FBQ0YsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTO1lBQ2hELGlFQUFNLFdBQVcsQ0FBTztZQUN4QixvREFBQyxnRkFBeUIsSUFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQ3ZCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUMxQixhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQzVDLENBQ0UsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNTLHFDQUFZLEdBQXRCLFVBQXVCLFFBQWtCO1FBQ3ZDLE9BQU8sb0RBQUMsbUVBQW1CLElBQUMsT0FBTyxFQUFFLFFBQVEsR0FBd0IsQ0FBQztJQUN4RSxDQUFDO0lBQ1MscUNBQVksR0FBdEIsVUFBdUIsVUFBZSxFQUFFLFFBQWdCO1FBQ3RELE9BQU8sQ0FDTCxvREFBQyxtQkFBbUIsSUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQ3RCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUNyQixRQUFRLEVBQUUsUUFBUSxFQUNsQixFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsU0FBUyxHQUNoQyxDQUNILENBQUM7SUFDSixDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLENBak5tQyx3RUFBaUIsR0FpTnBEOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFVBQUMsS0FBSztJQUM3RCxPQUFPLG1EQUFtQixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMsQ0FBQztBQUVIO0lBQXlDLHVDQUFrQjtJQUN6RCw2QkFBWSxLQUFVO1FBQXRCLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBR2I7UUFGQyxLQUFJLENBQUMsS0FBSyxHQUFHLEtBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixLQUFJLENBQUMsVUFBVSxHQUFHLCtDQUFlLEVBQUUsQ0FBQzs7SUFDdEMsQ0FBQztJQUNELHNCQUFjLG1DQUFFO2FBQWhCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLHdDQUFPO2FBQXJCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELHNCQUFZLHdDQUFPO2FBQW5CO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLHlDQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQUNPLHNDQUFRLEdBQWhCLFVBQWlCLFNBQXFCO1FBQXJCLDRDQUFxQjtRQUNwQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNwRSxDQUFDO0lBQ1MsdUNBQVMsR0FBbkI7UUFDRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7SUFDekQsQ0FBQztJQUdELGdEQUFrQixHQUFsQixVQUFtQixTQUFjLEVBQUUsU0FBYztRQUMvQyxpQkFBTSxrQkFBa0IsWUFBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDL0MsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxTQUFTLEVBQUU7WUFDcEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSwwREFBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDbkU7WUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0lBQ0Qsa0RBQW9CLEdBQXBCO1FBQ0UsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN6QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFDTyxtREFBcUIsR0FBN0I7UUFDRSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFDUywyQ0FBYSxHQUF2QjtRQUNFLElBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELElBQU0sR0FBRyxHQUFXLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDaEMsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUN2RSxDQUFDO1NBQ0g7UUFFRCxPQUFPLENBQ0wsNkRBQ0UsSUFBSSxFQUFDLE9BQU8sZUFDRixRQUFRLEVBQ2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFDaEMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQ1gsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLElBRW5CLE1BQU0sQ0FDSCxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsMEJBQUM7QUFBRCxDQUFDLENBbkV3Qyx5RUFBa0IsR0FtRTFEOztBQUVEO0lBQTZELGtEQUFrQjtJQUU3RSx3Q0FBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDUyx3REFBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0Qsc0JBQWMsb0RBQVE7YUFBdEI7WUFDRSxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLG1EQUFPO2FBQXJCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNTLG9EQUFXLEdBQXJCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBQ0Qsc0JBQWMsbURBQU87YUFBckI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzVCLENBQUM7OztPQUFBO0lBQ0QsMERBQWlCLEdBQWpCO1FBQ0UsaUJBQU0saUJBQWlCLFdBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELDJEQUFrQixHQUFsQixVQUFtQixTQUFjLEVBQUUsU0FBYztRQUMvQyxpQkFBTSxrQkFBa0IsWUFBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDUyxzREFBYSxHQUF2QixjQUE0QixDQUFDO0lBQ25CLGtEQUFTLEdBQW5CO1FBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBQ1MscURBQVksR0FBdEIsVUFBdUIsY0FBc0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzVCLG9EQUFDLG1CQUFtQixJQUNsQixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFDdEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUNyQixRQUFRLEVBQUUsY0FBYyxHQUN4QixDQUNILENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7SUFDUyxzREFBYSxHQUF2QjtRQUNFLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMxRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYztZQUMxQyxDQUFDLENBQUMsTUFBTTtZQUNSLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQjtZQUNoRCxDQUFDLENBQUMsTUFBTTtZQUNSLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM3QyxPQUFPLENBQ0w7WUFDRyxTQUFTO1lBQ1QsZ0JBQWdCO1lBQ2hCLFlBQVksQ0FDWixDQUNKLENBQUM7SUFDSixDQUFDO0lBRVMsc0RBQWEsR0FBdkI7UUFDRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFDUyx1REFBYyxHQUF4QjtRQUNFLE9BQU8sY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDSCxxQ0FBQztBQUFELENBQUMsQ0FuRTRELHlFQUFrQixHQW1FOUU7O0FBRUQ7SUFBaUQsK0NBQThCO0lBRzdFLHFDQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxPQUFPLEdBQUcsK0NBQWUsRUFBRSxDQUFDOztJQUNuQyxDQUFDO0lBQ0QsMERBQW9CLEdBQXBCO1FBQ0UsaUJBQU0sb0JBQW9CLFdBQUUsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDOUIsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNSLEVBQUUsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDckM7U0FDRjtJQUNILENBQUM7SUFDUyxtREFBYSxHQUF2QjtRQUNFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQjtZQUNuRCxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULE9BQU8sQ0FDTCw0REFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFDakIsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLDJCQUNBLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFDM0MsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNqQyxLQUFLLEVBQUUsS0FBSyxJQUVYLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQzVCLENBQ0UsNkRBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CO1lBQ2hELElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsYUFBYSxDQUNWLENBQUMsQ0FDVixDQUNFLENBQ04sQ0FBQztJQUNKLENBQUM7SUFDUyxrREFBWSxHQUF0QjtRQUNFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNTLG1EQUFhLEdBQXZCO1FBQ0UsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ1MsOENBQVEsR0FBbEIsVUFDRSxJQUF3QyxFQUN4QyxPQUFvQjtRQUVwQixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFDRCxJQUFNLE1BQU0sR0FBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFxQixDQUFDO1FBQ2hFLElBQUksT0FBb0IsQ0FBQztRQUN6QixJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sR0FBRyw0RUFBMEIsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM1RTtRQUNELE9BQU8sT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksT0FBTyxDQUFDO0lBQzVCLENBQUM7SUFDSCxrQ0FBQztBQUFELENBQUMsQ0EzRGdELDhCQUE4QixHQTJEOUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcGJtRTtBQUMxQztBQUVrQztBQUNIO0FBS3BDO0FBR3JCO0lBQStDLDZDQUF5QjtJQUN0RSxtQ0FBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxzQkFBYywrQ0FBUTthQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLFlBQXdDLENBQUM7UUFDdkQsQ0FBQzs7O09BQUE7SUFDRCxtREFBZSxHQUFmO1FBQ0UsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxpREFBYSxHQUFiO1FBQ0UsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sb0VBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksSUFBRyxLQUFLLENBQU8sQ0FBQztJQUN0RSxDQUFDO0lBQ0QsK0NBQVcsR0FBWDtRQUFBLGlCQWFDO1FBWkMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JDLFVBQUMsSUFBMEIsRUFBRSxLQUFhO1lBQ3hDLE9BQU8sQ0FDTCwyREFBQyxxQkFBcUIsSUFDcEIsR0FBRyxFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQ3hDLElBQUksRUFBRSxJQUFJLEVBQ1YsUUFBUSxFQUFFLEtBQUksQ0FBQyxRQUFRLEVBQ3ZCLEtBQUssRUFBRSxLQUFLLEdBQ1csQ0FDMUIsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNILGdDQUFDO0FBQUQsQ0FBQyxDQTVCOEMsZ0ZBQXlCLEdBNEJ2RTs7QUFFRDtJQUEyQyx5Q0FBMkI7SUFFcEUsK0JBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0Qsc0JBQUksd0NBQUs7YUFBVDtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBSSwyQ0FBUTthQUFaO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQUNELHNCQUFJLHVDQUFJO2FBQVI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBQ0QsK0NBQWUsR0FBZjtRQUNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ00sNkNBQWEsR0FBcEI7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZ0VBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQyxPQUFPLENBQ0wsc0VBQ0UsSUFBSSxFQUFDLE9BQU8sRUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWTtZQUVyQyxLQUFLO1lBQ04sb0VBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVM7Z0JBQ3JDLElBQUk7Z0JBQ0osT0FBTyxDQUNKLENBQ0EsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUNTLDBDQUFVLEdBQXBCO1FBQ0UsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDekIsT0FBTyxDQUNMLDJEQUFDLHFFQUFPLElBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFDOUIsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxHQUN0QixDQUNaLENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNTLDJDQUFXLEdBQXJCO1FBQUEsaUJBb0JDO1FBbkJDLE9BQU8sQ0FDTCxzRUFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUNqQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQ2pCLElBQUksRUFBQyxPQUFPLEVBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQzVCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUM3QixRQUFRLEVBQUU7Z0JBQ1IsS0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixDQUFDLG1CQUNjLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxnQkFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxrQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLHNCQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFDeEMsSUFBSSxFQUFDLE9BQU8sR0FDWixDQUNILENBQUM7SUFDSixDQUFDO0lBQ1MsNkNBQWEsR0FBdkI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sQ0FDTCxxRUFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUVyQyxPQUFPLENBQ0gsQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUNILDRCQUFDO0FBQUQsQ0FBQyxDQWpGMEMsd0VBQWlCLEdBaUYzRDs7QUFFRCwyRUFBMkU7QUFDM0Usa0VBQWtFO0FBQ2xFLE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvSHlCO0FBSUU7QUFDbUM7QUFDTDtBQUNDO0FBSWhFO0lBQTRDLDBDQUF5QjtJQUNuRSxnQ0FBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxzQkFBYyw0Q0FBUTthQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLFlBQXFDLENBQUM7UUFDcEQsQ0FBQzs7O09BQUE7SUFDUyw4Q0FBYSxHQUF2QjtRQUFBLGlCQWlCQztRQWhCQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxPQUFPLENBQ0wsa0VBQ0UsSUFBSSxFQUFDLGNBQWMsRUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsRUFDL0MsR0FBRyxFQUFFLFVBQUMsUUFBUSxJQUFLLFFBQUMsS0FBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsRUFBekIsQ0FBeUI7WUFFNUMsZ0VBQVEsSUFBSSxFQUFDLGNBQWMsRUFBQyxTQUFTLEVBQUUsV0FBVyxHQUFXO1lBQzVELElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVO2dCQUN2QixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNuRyxDQUNaLENBQUM7SUFDSixDQUFDO0lBRVMsMENBQVMsR0FBbkI7UUFBQSxpQkFZQztRQVhDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFTLEVBQUUsRUFBVTtnQkFDdkQsWUFBSSxDQUFDLFVBQVUsQ0FDYixRQUFRLEdBQUcsRUFBRSxFQUNiLElBQUksRUFDSixLQUFLLEVBQ0wsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQ3hCLElBQUksQ0FDTDtZQU5ELENBTUMsQ0FDRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBQ1MsMENBQVMsR0FBbkI7UUFBQSxpQkFZQztRQVhDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFTLEVBQUUsRUFBVTtnQkFDdkQsWUFBSSxDQUFDLFVBQVUsQ0FDYixRQUFRLEdBQUcsRUFBRSxFQUNiLElBQUksRUFDSixLQUFLLEVBQ0wsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQ3hCLElBQUksQ0FDTDtZQU5ELENBTUMsQ0FDRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBQ1MsZ0RBQWUsR0FBekIsVUFBMEIsVUFBZTtRQUN2QyxPQUFPLENBQ0wsNkRBQUssU0FBUyxFQUFFLFVBQVUsQ0FBQyxlQUFlLElBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQ3hCLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDUywyQ0FBVSxHQUFwQixVQUFxQixVQUFlO1FBQXBDLGlCQWlCQztRQWhCQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQVcsRUFBRSxFQUFVO1lBQ3ZELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFTLEVBQUUsRUFBVTtnQkFDM0MsWUFBSSxDQUFDLFVBQVUsQ0FDYixNQUFNLEdBQUcsRUFBRSxFQUNYLElBQUksRUFDSixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQ3BCLFVBQVUsRUFDVixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FDYjtZQU5ELENBTUMsQ0FDRixDQUFDO1lBQ0YsT0FBTyxDQUNMLDZEQUFLLEdBQUcsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBQyxjQUFjLElBQ3BGLEtBQUssQ0FDRixDQUNQLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyx3Q0FBTyxHQUFqQixVQUFrQixVQUFlO1FBQy9CLElBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDM0IsT0FBTyw2REFBSyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFPLENBQUM7U0FDekc7O1lBQ0ksT0FBTywwR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFJLENBQUM7SUFDeEUsQ0FBQztJQUNTLHlDQUFRLEdBQWxCLFVBQW1CLFVBQWUsRUFBRSxPQUF5QjtRQUMzRCxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDckIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRSxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUNELHNCQUFjLDZDQUFTO2FBQXZCO1lBQ0UsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDOzs7T0FBQTtJQUNTLDRDQUFXLEdBQXJCO1FBQ0UsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDMUMsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBQyxZQUFZO1lBQ3pCLG9EQUFDLGdGQUF5QixJQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFDdkIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQzFCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxHQUNqQyxDQUNFLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDUywyQ0FBVSxHQUFwQixVQUNFLEdBQVcsRUFDWCxJQUFTLEVBQ1QsT0FBZ0IsRUFDaEIsVUFBZSxFQUNmLEtBQWE7UUFFYixJQUFNLFlBQVksR0FBRyxDQUNuQixvREFBQywwQkFBMEIsSUFDekIsR0FBRyxFQUFFLEdBQUcsRUFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFDdkIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQ2pDLElBQUksRUFBRSxJQUFJLEVBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQ3pCLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLEtBQUssRUFBRSxLQUFLLEdBQ1osQ0FDSCxDQUFDO1FBQ0YsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFxQixDQUFDO1FBQ25ELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDWCxXQUFXLEdBQUcsNEVBQTBCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNuRztRQUNELE9BQU8sV0FBVyxhQUFYLFdBQVcsY0FBWCxXQUFXLEdBQUksWUFBWSxDQUFDO0lBQ3JDLENBQUM7SUFDSCw2QkFBQztBQUFELENBQUMsQ0F4STJDLGdGQUF5QixHQXdJcEU7O0FBQ0Q7SUFBZ0QsOENBQWtCO0lBQ2hFLG9DQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FDYjtRQStCRCxvQkFBYyxHQUFHLFVBQUMsS0FBVTtZQUMxQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUN4QixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNoQzthQUNGO2lCQUFNO2dCQUNMLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNkLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMzQjthQUNGO1lBQ0QsS0FBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1FBQ3pDLENBQUM7UUFDRCxzQkFBZ0IsR0FBRyxVQUFDLEtBQVU7WUFDNUIsS0FBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNsQyxDQUFDOztJQS9DRCxDQUFDO0lBQ1Msb0RBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELHNCQUFjLGdEQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLDRDQUFJO2FBQWxCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLGlEQUFTO2FBQXZCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUM5QixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLCtDQUFPO2FBQXJCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLDZDQUFLO2FBQW5CO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixDQUFDOzs7T0FBQTtJQUNELHNCQUFZLG1EQUFXO2FBQXZCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUM7UUFDekMsQ0FBQzs7O09BQUE7SUFDTSwwREFBcUIsR0FBNUIsVUFBNkIsU0FBYyxFQUFFLFNBQWM7UUFDekQsSUFBSSxDQUFDLGlCQUFNLHFCQUFxQixZQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNyRSxPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVk7WUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsWUFBWTtZQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGVBQWU7WUFDdkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQy9DLENBQUM7SUFDSixDQUFDO0lBa0JTLDhDQUFTLEdBQW5CO1FBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBQ1Msa0RBQWEsR0FBdkI7UUFDRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0Qsc0JBQWMsa0RBQVU7YUFBeEI7WUFDRSxPQUFPLElBQUksQ0FBQywwQkFBeUI7UUFDdkMsQ0FBQzs7O09BQUE7SUFDUyxtREFBYyxHQUF4QixVQUNFLFNBQWtCLEVBQ2xCLFNBQXNCO1FBRXRCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxhQUFhLEdBQ2YsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWE7WUFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFMUIsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFckMsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLGNBQWM7WUFDNUMsK0RBQU8sU0FBUyxFQUFFLFVBQVUsZ0JBQWMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNqRiwrREFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQ3RDLElBQUksRUFBQyxVQUFVLEVBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNuRSxFQUFFLEVBQUUsRUFBRSxFQUNOLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUN0QixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQ2xCLFFBQVEsRUFBRSxhQUFhLHNCQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUMvQztnQkFFQSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ2pDLDhEQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixJQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUMzQiw2REFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhOzRCQUV4Qyw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQVEsQ0FDN0MsRUFBQzt3QkFDUCxJQUFJLENBRUQsQ0FBQyxDQUFDO29CQUNULElBQUk7Z0JBRVIsOERBQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUMxQyxJQUFJLENBQ0EsQ0FDRDtZQUNQLFNBQVMsQ0FDTixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsaUNBQUM7QUFBRCxDQUFDLENBakgrQyx5RUFBa0IsR0FpSGpFOztBQUVELDJFQUFvQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsVUFBQyxLQUFLO0lBQy9ELE9BQU8sbURBQW1CLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDelE0QjtBQUNpRTtBQUVqQztBQUUvRDtJQUEyQyx5Q0FBdUQ7SUFDaEcsK0JBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ1MsNkNBQWEsR0FBdkI7UUFBQSxpQkFpQ0M7UUFoQ0MsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMvRSxJQUFJLE9BQU8sR0FBRyxVQUFDLEtBQVU7WUFDdkIsSUFBSSxLQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQjtnQkFDakMsS0FBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDOztnQkFFL0IsS0FBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUM7UUFDRixJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZDLE9BQU8saUVBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQU8sQ0FBQztTQUN6QztRQUNELE9BQU8sQ0FDTCxrRUFDRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFDbEMsUUFBUSxFQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUN4QyxRQUFRLEVBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQ3hDLEdBQUcsRUFBRSxVQUFDLFFBQVEsSUFBSyxRQUFDLEtBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEVBQXpCLENBQXlCLEVBQzVDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUN2QyxXQUFXLEVBQUUsV0FBVyxFQUN4QixNQUFNLEVBQUUsTUFBTSxFQUNkLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLFNBQVMsRUFBRSxVQUFDLEtBQUssSUFBTyxLQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekQsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLG1CQUNULElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxnQkFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLGtCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsc0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUMvQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FDNUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUNILDRCQUFDO0FBQUQsQ0FBQyxDQXRDMEMsd0ZBQWlDLEdBc0MzRTs7QUFFRDtJQUErQyw2Q0FBa0I7SUFBakU7O0lBb0NBLENBQUM7SUFuQ1csNkNBQVMsR0FBbkI7UUFDRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBQ1MsaURBQWEsR0FBdkI7UUFBQSxpQkErQkM7UUE5QkMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDbkMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDL0QsSUFBSSxjQUFjLEdBQUcsVUFBQyxLQUFVO1lBQzlCLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxZQUFZLEdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDekUsSUFBRyxZQUFZLEtBQUssU0FBUyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ3pFLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxPQUFPLEdBQUcsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUVqRixJQUFJLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQ2xDLE9BQU8saUVBQU0sT0FBTyxDQUFPLENBQUM7U0FDN0I7UUFDRCxPQUFPLENBQ0wsa0VBQ0UsU0FBUyxFQUFFLFNBQVMsRUFDcEIsS0FBSyxFQUFFLE9BQU8sRUFDZCxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFDNUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxFQUN4QyxXQUFXLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixFQUMvQyxRQUFRLEVBQUUsY0FBYyxFQUN4QixNQUFNLEVBQUUsVUFBQyxDQUFDLElBQU8sUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbEUsT0FBTyxFQUFFLFVBQUMsQ0FBQyxJQUFLLGVBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQTFCLENBQTBCLG1CQUMzQixRQUFRLENBQUMsVUFBVSxnQkFDdEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQzFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQ3ZDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFDSCxnQ0FBQztBQUFELENBQUMsQ0FwQzhDLHlFQUFrQixHQW9DaEU7O0FBRUQsMkVBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxVQUFDLEtBQUs7SUFDOUQsT0FBTyxtREFBbUIsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JGNEI7QUFDNkM7QUFDM0I7QUFFYztBQUN6QjtBQUV0QztJQUEwQyx3Q0FBc0Q7SUFDOUYsOEJBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ1MsK0NBQWdCLEdBQTFCO1FBQ0UsSUFBTSxHQUFHLEdBQUcsaUJBQU0sZ0JBQWdCLFdBQUUsQ0FBQztRQUNyQyxJQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRTtZQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDekM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDUyw0Q0FBYSxHQUF2QjtRQUNFLE9BQU8sNkRBQWMsQ0FBQyxrQkFBa0IsQ0FDdEMsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDOUIsQ0FBQztJQUNKLENBQUM7SUFDSCwyQkFBQztBQUFELENBQUMsQ0FqQnlDLHdGQUFpQyxHQWlCMUU7O0FBRUQ7SUFBNkMsMkNBQXlEO0lBQ3BHLGlDQUFZLEtBQVU7ZUFDcEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNTLDJDQUFTLEdBQW5CO1FBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDdEMsQ0FBQztJQUNTLCtDQUFhLEdBQXZCO1FBQ0UsT0FBTyxDQUNMLG9EQUFDLGtEQUFXLElBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUNuQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUNmLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBQ0gsOEJBQUM7QUFBRCxDQUFDLENBaEI0Qyx3RkFBaUMsR0FnQjdFOztBQUVELDJFQUFvQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsVUFBQyxLQUFLO0lBQzdELE9BQU8sbURBQW1CLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLENBQUM7QUFDSCwyRUFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFVBQUMsS0FBSztJQUNoRSxPQUFPLG1EQUFtQixDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakQ0QjtBQUVnQztBQUNGO0FBRzdEO0lBQTRDLDBDQUFvQztJQUM5RSxnQ0FBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFUyw4Q0FBYSxHQUF2QjtRQUNFLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzVDLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDcEYsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQ0wsNkRBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYTtZQUN4QyxNQUFNO1lBQ04sT0FBTyxDQUNKLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCw2QkFBQztBQUFELENBQUMsQ0FoQjJDLHlFQUEwQixHQWdCckU7O0FBRUQsMkVBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxVQUFDLEtBQUs7SUFDL0QsT0FBTyxtREFBbUIsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1RCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUI0QjtBQUNPO0FBTWtCO0FBQ1E7QUFFaEU7SUFBNkMscUNBQXFCO0lBYWhFLDJCQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FDYjtRQVVPLDJCQUFxQixHQUFHLElBQUksQ0FBQzs7SUFWckMsQ0FBQztJQWRhLGlDQUFlLEdBQTdCLFVBQ0UsTUFBeUIsRUFDekIsS0FBaUIsRUFDakIsR0FBWTtRQURaLG9DQUFpQjtRQUdqQixPQUFPLG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNqRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFlBQVk7WUFDM0IsS0FBSyxFQUFFLEtBQUs7WUFDWixHQUFHLEVBQUUsR0FBRztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUFLRCw2Q0FBaUIsR0FBakI7UUFDRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsZ0RBQW9CLEdBQXBCO1FBQ0UsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUNELDhDQUFrQixHQUFsQixVQUFtQixTQUFjLEVBQUUsU0FBYztRQUMvQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRVMsZ0RBQW9CLEdBQTlCO1FBQ0UsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNTLCtDQUFtQixHQUE3QjtRQUNFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUNELGlEQUFxQixHQUFyQixVQUFzQixTQUFhLEVBQUUsU0FBYTtRQUNoRCxJQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM3QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUNoQztRQUNELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7SUFDRCxrQ0FBTSxHQUFOO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzQixHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMseUJBQXlCLEdBQUcsU0FBUyxDQUFDO1FBQzNDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNTLHVDQUFXLEdBQXJCLFVBQXNCLE9BQW9CO1FBQ3hDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxzQkFBYywwQ0FBVzthQUF6QjtZQUNFLElBQUksUUFBUSxHQUFlLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RELEtBQW1CLFVBQVEsRUFBUixxQkFBUSxFQUFSLHNCQUFRLEVBQVIsSUFBUSxFQUFFO2dCQUF6QixJQUFJLE9BQU87Z0JBQ2IsSUFBRyxPQUFPLENBQUMsY0FBYyxHQUFHLENBQUM7b0JBQUUsT0FBTyxJQUFJLENBQUM7YUFDNUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7OztPQUFBO0lBQ1MsK0NBQW1CLEdBQTdCO1FBQ0UsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ08sNkNBQWlCLEdBQXpCLFVBQTBCLEdBQVc7UUFDbkMsSUFBSSxRQUFRLEdBQWUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDdEQsS0FBbUIsVUFBUSxFQUFSLHFCQUFRLEVBQVIsc0JBQVEsRUFBUixJQUFRLEVBQUU7WUFBekIsSUFBSSxPQUFPO1lBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjO2dCQUFFLE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUNTLHFDQUFTLEdBQW5CO1FBQ0UsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ1MseUNBQWEsR0FBdkI7UUFDRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxzQkFBYyxtREFBb0I7YUFBbEM7WUFDRSxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztRQUN4QyxDQUFDOzs7T0FBQTtJQUNPLGlEQUFxQixHQUE3QjtRQUNFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFDTyxtREFBdUIsR0FBL0I7UUFDRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNsQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBQ1MsNENBQWdCLEdBQTFCO1FBQ0UsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDUywyQ0FBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELHNCQUFjLDRDQUFhO2FBQTNCO1lBQ0UsSUFBTSxLQUFLLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM5QixPQUFPLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDO1FBQ3RDLENBQUM7OztPQUFBO0lBQ1MsMkNBQWUsR0FBekIsVUFDRSxNQUF5QixFQUN6QixLQUFpQjtRQUFqQixvQ0FBaUI7UUFFakIsT0FBTyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDTyx3Q0FBWSxHQUFwQixVQUFxQixZQUFrQjtRQUNyQyxPQUFPLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztJQUNoRSxDQUFDO0lBQ08sZ0RBQW9CLEdBQTVCLFVBQTZCLFlBQWtCO1FBQS9DLGlCQW1DQztRQWxDQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFBRSxPQUFPO1FBQzdDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFDLElBQUksRUFBRSxHQUFHO1lBQzNDLElBQUksQ0FBQyxLQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDO2dCQUFFLE9BQU87WUFDekMsSUFBSSxHQUFHLEdBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxHQUFHLEdBQVEsR0FBRyxDQUFDO2dCQUNuQixHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxVQUFDLFlBQTBCO29CQUNqRCxJQUFJLEtBQUksQ0FBQyxXQUFXO3dCQUFFLE9BQU87b0JBQzdCLEtBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUM7b0JBQ3JDLEtBQUksQ0FBQyxRQUFRLENBQUMsVUFBQyxLQUFVO3dCQUN2QixJQUFJLFFBQVEsR0FBNkIsRUFBRSxDQUFDO3dCQUM1QyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO3dCQUNwQixPQUFPLFFBQWEsQ0FBQztvQkFDdkIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILFlBQVksQ0FBQywyQkFBMkIsR0FBRyxVQUN6QyxJQUFTLEVBQ1QsR0FBVyxFQUNYLEdBQVE7WUFFUixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxLQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDO29CQUFFLE9BQU87Z0JBQ3pDLElBQUksS0FBSSxDQUFDLFdBQVc7b0JBQUUsT0FBTztnQkFDN0IsS0FBSSxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztnQkFDckMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFDLEtBQVU7b0JBQ3ZCLElBQUksUUFBUSxHQUE2QixFQUFFLENBQUM7b0JBQzVDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQ3BCLE9BQU8sUUFBYSxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNTLDZDQUFpQixHQUEzQixVQUE0QixHQUFXO1FBQ3JDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNPLGtEQUFzQixHQUE5QixVQUErQixZQUFrQjtRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFBRSxPQUFPO1FBQzdDLFlBQVksQ0FBQywyQkFBMkIsR0FBRyxTQUFTLENBQUM7UUFDckQsWUFBWSxDQUFDLHFCQUFxQixDQUFDLFVBQUMsSUFBSSxFQUFFLEdBQUc7WUFDM0MsSUFBSSxHQUFHLEdBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxHQUFHLEdBQVEsR0FBRyxDQUFDO2dCQUNuQixHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxjQUFPLENBQUMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNILHdCQUFDO0FBQUQsQ0FBQyxDQXBLNEMsK0NBQWUsR0FvSzNEOztBQUVEO0lBQXdDLHNDQUEyQjtJQUNqRSw0QkFBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxzQkFBYywwQ0FBVTthQUF4QjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDL0IsQ0FBQzs7O09BQUE7SUFDSCx5QkFBQztBQUFELENBQUMsQ0FQdUMsaUJBQWlCLEdBT3hEOztBQUVEO0lBQStDLDZDQUEyQjtJQUV4RSxtQ0FBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxzREFBa0IsR0FBbEIsVUFBbUIsU0FBYyxFQUFFLFNBQWM7UUFDL0MsaUJBQU0sa0JBQWtCLFlBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxxREFBaUIsR0FBakI7UUFDRSxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCx3REFBb0IsR0FBcEI7UUFDRSxpQkFBTSxvQkFBb0IsV0FBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUQ7SUFDSCxDQUFDO0lBQ1Msb0RBQWdCLEdBQTFCO1FBQ0UsSUFBTSxFQUFFLEdBQWdCLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDckMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsRUFBRTtnQkFDNUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbEQ7U0FDRjtJQUNILENBQUM7SUFDRCxzQkFBYyxtREFBWTthQUExQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDN0IsQ0FBQzs7O09BQUE7SUFDUyx1REFBbUIsR0FBN0I7UUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxzQkFBYyw4Q0FBTzthQUFyQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDNUIsQ0FBQzs7O09BQUE7SUFDUyw2Q0FBUyxHQUFuQjtRQUNFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDL0MsQ0FBQztJQUNNLHlEQUFxQixHQUE1QixVQUE2QixTQUFjLEVBQUUsU0FBYztRQUN6RCxJQUFJLENBQUMsaUJBQU0scUJBQXFCLFlBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXJFLE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWTtZQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZO1lBQ2pELENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsZUFBZTtZQUMzRCxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFDRCxzQkFBYyxvREFBYTthQUEzQjtZQUNFLElBQU0sS0FBSyxHQUFRLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDOUIsT0FBTyxDQUNMLEtBQUssQ0FBQyxhQUFhO2dCQUNuQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSyxDQUNwRSxDQUFDO1FBQ0osQ0FBQzs7O09BQUE7SUFDUyw0Q0FBUSxHQUFsQixVQUNFLElBQVMsRUFDVCxPQUFvQixFQUNwQixNQUFjO1FBRWQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBQ0QsSUFBTSxNQUFNLEdBQWdCLElBQUksQ0FBQyxZQUFZO2FBQzFDLE1BQXFCLENBQUM7UUFDekIsSUFBSSxPQUFvQixDQUFDO1FBQ3pCLElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxHQUFHLDRFQUEwQixDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNwRjtRQUNELE9BQU8sT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksT0FBTyxDQUFDO0lBQzVCLENBQUM7SUFDSCxnQ0FBQztBQUFELENBQUMsQ0F6RThDLGlCQUFpQixHQXlFL0Q7O0FBRUQ7SUFFVSxxREFBeUI7SUFDakMsMkNBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBSUQsd0JBQWtCLEdBQUcsVUFBQyxLQUFVO1lBQzlCLElBQ0UsQ0FBQyxtREFBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQ3RFO2dCQUNBLEtBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2QztRQUNILENBQUMsQ0FBQztRQVhBLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUMvRCxDQUFDO0lBQ0Qsc0JBQWMsdURBQVE7YUFBdEI7WUFDRSxPQUFPLElBQUksQ0FBQyxZQUFpQixDQUFDO1FBQ2hDLENBQUM7OztPQUFBO0lBUVMsd0RBQVksR0FBdEIsVUFBdUIsUUFBYTtRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7SUFDckMsQ0FBQztJQUNTLHdEQUFZLEdBQXRCO1FBQ0UsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBQ1MsNERBQWdCLEdBQTFCO1FBQ0UsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNsQixJQUFNLE9BQU8sR0FBUSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2xDLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsbURBQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0RCxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDekM7U0FDRjtRQUNELGlCQUFNLGdCQUFnQixXQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNPLG9EQUFRLEdBQWhCLFVBQWlCLEdBQVE7UUFDdkIsSUFBSSxtREFBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN6QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDSCx3Q0FBQztBQUFELENBQUMsQ0FuQ1MseUJBQXlCLEdBbUNsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6UzhCO0FBQ3FDO0FBRUw7QUFFL0Q7SUFBeUMsdUNBQXlCO0lBQ2hFLDZCQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7SUFDOUMsQ0FBQztJQUNELHNCQUFjLHlDQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsWUFBa0MsQ0FBQztRQUNqRCxDQUFDOzs7T0FBQTtJQUNTLDJDQUFhLEdBQXZCO1FBQ0UsT0FBTyxnRUFBTyxDQUFDO0lBQ2pCLENBQUM7SUFDSCwwQkFBQztBQUFELENBQUMsQ0FYd0MsZ0ZBQXlCLEdBV2pFOztBQUVELDJFQUFvQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBQyxLQUFLO0lBQzVELE9BQU8sbURBQW1CLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQjRCO0FBQ3FDO0FBRUw7QUFFL0Q7SUFBOEMsNENBQXlCO0lBQ3JFLGtDQUFZLEtBQVU7ZUFDcEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELHNCQUFjLDhDQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsWUFBdUMsQ0FBQztRQUN0RCxDQUFDOzs7T0FBQTtJQUNTLGdEQUFhLEdBQXZCO1FBQUEsaUJBV0M7UUFWQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxPQUFPLENBQ0wsNkRBQ0UsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUN6QixTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksRUFDMUIsR0FBRyxFQUFFLFVBQUMsR0FBRyxJQUFLLFFBQUMsS0FBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBcEIsQ0FBb0IsSUFFakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQ3hCLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCwrQkFBQztBQUFELENBQUMsQ0FuQjZDLGdGQUF5QixHQW1CdEU7O0FBRUQsMkVBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxVQUFDLEtBQUs7SUFDakUsT0FBTyxtREFBbUIsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQzFCSDtBQUFBO0FBQUE7SUFBQTtRQUVVLGdCQUFXLEdBQTZDLEVBQUUsQ0FBQztJQW9CckUsQ0FBQztJQWxCUSwrQ0FBZ0IsR0FBdkIsVUFDRSxZQUFvQixFQUNwQixlQUE4QztRQUU5QyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLGVBQWUsQ0FBQztJQUNuRCxDQUFDO0lBQ00sMENBQVcsR0FBbEI7UUFDRSxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ2pDLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNNLDZDQUFjLEdBQXJCLFVBQXNCLFlBQW9CLEVBQUUsTUFBVztRQUNyRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLElBQUksT0FBTyxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNqQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBcEJhLDZCQUFRLEdBQXlCLElBQUksb0JBQW9CLEVBQUUsQ0FBQztJQXFCNUUsMkJBQUM7Q0FBQTtBQXRCZ0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0ZGO0FBRXNDO0FBQ1o7QUFDVztBQUNMO0FBRS9EO0lBQXdDLHNDQUF5QjtJQUMvRCw0QkFBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxzQkFBYyx3Q0FBUTthQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLFlBQWlDLENBQUM7UUFDaEQsQ0FBQzs7O09BQUE7SUFDUywwQ0FBYSxHQUF2QjtRQUFBLGlCQXNEQztRQXJEQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9DLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FDL0IsQ0FBQztRQUNGLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUNyQyxDQUFDO1FBRUYsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixFQUFDLEVBQUMsb0RBQUMsaUZBQWUsSUFBQyxLQUFLLEVBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsR0FBb0IsQ0FBQyxFQUFDLEtBQUksQ0FBQztRQUMxSixTQUFTLEdBQUcsQ0FDVixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEIsK0RBQ0UsSUFBSSxFQUFDLE1BQU0sRUFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFDNUIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEVBQ3hHLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFDekIsR0FBRyxFQUFFLGVBQUssSUFBSSxRQUFDLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQXRCLENBQXNCLEVBQ3BDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQzFELFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQzdELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFDckMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQ25DO1lBQ0YsQ0FBQztnQkFDRCwrREFDRSxJQUFJLEVBQUMsTUFBTSxFQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUM1QixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsRUFDeEcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUN6QixHQUFHLEVBQUUsZUFBSyxJQUFJLFFBQUMsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBdEIsQ0FBc0IsRUFDcEMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFDMUQsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksbUJBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxnQkFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLGtCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsc0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUMvQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUNuQyxDQUNMLENBQUM7UUFDRixPQUFPLENBQ0wsNkRBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVztZQUN0QyxTQUFTO1lBQ1QsYUFBYTtZQUNiLFdBQVc7WUFDWCxPQUFPO1lBQ1AsaUJBQWlCO1lBQ2pCLG1CQUFtQixDQUNoQixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ1MsZ0RBQW1CLEdBQTdCO1FBQ0UsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDN0MsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixVQUFVLEdBQUcsQ0FDWCwrREFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEVBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sZ0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CO1lBRTdDLGtFQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQVE7WUFDL0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsb0RBQUMscUVBQU8sSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sR0FBWSxFQUFDLENBQUMsSUFBSSxDQUNqTCxDQUNULENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDM0IsWUFBWSxHQUFHLENBQ2IsOERBQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksSUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FDN0IsQ0FDUixDQUFDO1NBQ0g7UUFDRCxPQUFPLENBQ0wsNkRBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFDOUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQ3BDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVc7WUFFdEMsOERBQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLG1CQUFtQixJQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQVE7WUFDekcsNkRBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU87Z0JBQzdDLFVBQVU7Z0JBQ1YsWUFBWSxDQUNULENBQ0YsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNTLDhDQUFpQixHQUEzQixVQUE0QixTQUFpQjtRQUMzQyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDakIsZ0VBQVEsSUFBSSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVM7WUFDeEUsa0VBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBUTtZQUM5QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvREFBQyxxRUFBTyxJQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFZLEVBQUMsQ0FBQyxJQUFJLENBQzFJLENBQ1YsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUNTLDJDQUFjLEdBQXhCLFVBQXlCLFNBQWlCLEVBQUUsR0FBUTtRQUFwRCxpQkFpQkM7UUFoQkMsSUFBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEMsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxTQUFTO1lBQ3ZCLDJEQUNFLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxFQUNqQixPQUFPLEVBQUUsZUFBSztvQkFDWixLQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLENBQUMsRUFDRCxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFDZixRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksRUFDbEIsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsSUFFakQsR0FBRyxDQUFDLElBQUksQ0FDUCxDQUNBLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDUywwQ0FBYSxHQUF2QjtRQUFBLGlCQXVDQztRQXRDQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkYsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQUMsR0FBRyxFQUFFLEtBQUs7WUFDdkQsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDdEIsT0FBTyxDQUNMLDhEQUNFLEdBQUcsRUFBRSxLQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUN4QyxTQUFTLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUMzQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBRTdFLEtBQUksQ0FBQyxjQUFjLENBQUMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQztnQkFDNUQsNkRBQUssU0FBUyxFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVk7b0JBQ2xELEtBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNwQyw2REFDRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFDaEIsTUFBTSxFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUNqQyxLQUFLLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQy9CLEdBQUcsRUFBQyxjQUFjLEdBQ2xCLENBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUMsRUFDekMsb0RBQUMscUVBQU8sSUFBQyxRQUFRLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFZLENBQzNJLEVBQUMsS0FBSSxDQUFDO29CQUNOLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDdkMsNkRBQUssU0FBUyxFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxjQUFNLFlBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUEvQixDQUErQjt3QkFDdkcsOERBQ0UsU0FBUyxFQUFFLEtBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFFN0MsS0FBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FDM0I7d0JBQ04sQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7NEJBQy9DLENBQUMsb0RBQUMscUVBQU8sSUFBQyxLQUFLLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFZLENBQUMsRUFBQyxDQUFDLElBQUksQ0FDMUwsQ0FDUCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ0o7Z0JBQ0wsS0FBSSxDQUFDLGNBQWMsQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQzdELENBQ1IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBRyxRQUFRLENBQU8sQ0FBQztJQUMxRixDQUFDO0lBQ0gseUJBQUM7QUFBRCxDQUFDLENBckt1QyxnRkFBeUIsR0FxS2hFOztBQUVELDJFQUFvQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsZUFBSztJQUMxRCxPQUFPLG1EQUFtQixDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEw0QjtBQUNxQztBQUVMO0FBRS9EO0lBQXdDLHNDQUF5QjtJQUMvRCw0QkFBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxzQkFBYyx3Q0FBUTthQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLFlBQWlDLENBQUM7UUFDaEQsQ0FBQzs7O09BQUE7SUFDRCw4Q0FBaUIsR0FBakI7UUFDRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsaURBQW9CLEdBQXBCO1FBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLGNBQWEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCwrQ0FBa0IsR0FBbEIsVUFBbUIsU0FBYyxFQUFFLFNBQWM7UUFDL0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNPLDhDQUFpQixHQUF6QjtRQUFBLGlCQUlDO1FBSEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHO1lBQ2hDLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLElBQUksS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RixDQUFDLENBQUM7SUFDSixDQUFDO0lBQ1Msc0NBQVMsR0FBbkI7UUFDRSxPQUFPLGlCQUFNLFNBQVMsV0FBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUNuRCxDQUFDO0lBQ1MsMENBQWEsR0FBdkI7UUFDRSxJQUFJLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvRCxPQUFPLENBQ0wsNkRBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUN0Qyx1QkFBdUIsRUFBRSxTQUFTLEdBQ2xDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFDSCx5QkFBQztBQUFELENBQUMsQ0FqQ3VDLGdGQUF5QixHQWlDaEU7O0FBRUQsMkVBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFDLEtBQUs7SUFDM0QsT0FBTyxtREFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUM0QjtBQUlFO0FBRzhCO0FBRUM7QUFFaEU7SUFBMEMsd0NBQXlCO0lBQ2pFLDhCQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7O0lBQ2xDLENBQUM7SUFDRCxzQkFBYywwQ0FBUTthQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLFlBQW1DLENBQUM7UUFDbEQsQ0FBQzs7O09BQUE7SUFDRCxnREFBaUIsR0FBakI7UUFDRSxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsR0FBRztnQkFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUNELG1EQUFvQixHQUFwQjtRQUNFLGlCQUFNLG9CQUFvQixXQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQztJQUVTLDRDQUFhLEdBQXZCO1FBQUEsaUJBb0RDO1FBbkRDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzFDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywrREFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsSUFBSSxHQUFHLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxPQUFPLENBQUMsSUFBSSxDQUNWLDREQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQzNELENBQ04sQ0FBQztTQUNIO1FBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLElBQUksR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FDUCxvREFBQyx1QkFBdUIsSUFDdEIsR0FBRyxFQUFFLEdBQUcsRUFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFDdkIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQ2pDLEdBQUcsRUFBRSxHQUFHLEVBQ1IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQ2YsQ0FDSCxDQUFDO1NBQ0g7UUFDRCxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQzlDO1lBQ0U7Z0JBQ0csTUFBTTtnQkFDTixPQUFPLENBQ0wsQ0FDQyxDQUNULENBQUM7UUFDRixPQUFPLENBQ0wsNkRBQ0UsU0FBUyxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQ2xDLEdBQUcsRUFBRSxjQUFJLElBQUksUUFBQyxLQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFyQixDQUFxQjtZQUVsQztnQkFDRSw4RUFBb0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFJO2dCQUMzRCwrREFBTyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7b0JBQzFDLE1BQU07b0JBQ1AsbUVBQVEsSUFBSSxDQUFTLENBQ2YsQ0FDQyxDQUNQLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCwyQkFBQztBQUFELENBQUMsQ0E3RXlDLGdGQUF5QixHQTZFbEU7O0FBRUQ7SUFBNkMsMkNBQWtCO0lBQzdELGlDQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLENBQUM7O0lBQ3ZELENBQUM7SUFDRCxzQkFBWSw2Q0FBUTthQUFwQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDN0IsQ0FBQzs7O09BQUE7SUFDRCxzQkFBWSx3Q0FBRzthQUFmO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUN4QixDQUFDOzs7T0FBQTtJQUNELGdEQUFjLEdBQWQsVUFBZSxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDUywwQ0FBUSxHQUFsQixVQUFtQixJQUFTLEVBQUUsT0FBb0IsRUFBRSxNQUFjO1FBQ2hFLElBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDVixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELElBQU0sTUFBTSxHQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQXFCLENBQUM7UUFDaEUsSUFBSSxPQUFvQixDQUFDO1FBQ3pCLElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxHQUFHLDRFQUEwQixDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNwRjtRQUNELE9BQU8sT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksT0FBTyxDQUFDO0lBQzVCLENBQUM7SUFDUywyQ0FBUyxHQUFuQjtRQUNFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQUNTLCtDQUFhLEdBQXZCO1FBQ0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBRWxCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDekIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELE1BQU0sR0FBRyw0REFBSSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxJQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQ3JELENBQUM7U0FDUDtRQUVELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQ0wsNERBQUksU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLFNBQVM7WUFDNUMsTUFBTTtZQUNOLEdBQUcsQ0FDRCxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsNkNBQVcsR0FBWDtRQUFBLGlCQXVFQztRQXRFQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBRW5CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsSUFBSSxHQUFHLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUV0QixvRUFBb0U7WUFDcEUsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzFDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7Z0JBQzdCLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlO29CQUM3QyxDQUFDLENBQUMsVUFBQyxNQUFXLElBQUsscUJBQU0sWUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQTNCLENBQTJCLEVBQWpDLENBQWlDO29CQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNULEVBQUUsR0FBRyxDQUNILDREQUNFLEdBQUcsRUFBRSxHQUFHLEVBQ1IsU0FBUyxFQUFFLFNBQVMsRUFDcEIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBRTlDLElBQUksQ0FBQyxlQUFlLENBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FDdEQsQ0FDRSxDQUNOLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxFQUFFLEdBQUcsQ0FDSCw0REFDRSxHQUFHLEVBQUUsR0FBRywyQkFDZSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUk7b0JBRXhDLCtEQUFPLFNBQVMsRUFBRSxTQUFTO3dCQUN6QiwrREFDRSxFQUFFLEVBQUUsT0FBTyxFQUNYLElBQUksRUFBQyxPQUFPLEVBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUNwQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFDbEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUM1QixPQUFPLEVBQUUsU0FBUyxFQUNsQixRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsbUJBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLGdCQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksa0JBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxzQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQy9DO3dCQUNGLDhEQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsSUFDeEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDMUIsNkRBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYTtnQ0FFeEMsNkRBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFRLENBQzdDLENBQUMsQ0FBQzs0QkFDUixJQUFJLENBRUQ7d0JBQ1AsOERBQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLG1CQUFtQixJQUM3SCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FDaEMsQ0FDRCxDQUNMLENBQ04sQ0FBQzthQUNIO1lBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNkO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsMkNBQVMsR0FBVCxVQUFVLEdBQVEsRUFBRSxNQUFXO1FBQzdCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0gsOEJBQUM7QUFBRCxDQUFDLENBNUg0Qyx5RUFBa0IsR0E0SDlEOztBQUVELDJFQUFvQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsZUFBSztJQUM1RCxPQUFPLG1EQUFtQixDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMU40QjtBQUN1RDtBQUN2QjtBQUUvRDtJQUFrRCxnREFBZ0M7SUFDaEYsc0NBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0gsbUNBQUM7QUFBRCxDQUFDLENBSmlELGtHQUFnQyxHQUlqRjs7QUFFRCwyRUFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsZUFBSztJQUNwRSxPQUFPLG1EQUFtQixDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWjRCO0FBSUU7QUFDNkM7QUFTUjtBQUNEO0FBQy9CO0FBQytCO0FBQ2pCO0FBQ2dFO0FBRWhEO0FBQ1o7QUFFeEQ7SUFBc0Qsb0RBQXlCO0lBQzdFLDBDQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FJYjtRQUhDLDBEQUEwRDtRQUMxRCxJQUFNLEtBQUssR0FBRyxLQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxLQUFJLENBQUMsS0FBSyxHQUFHLEtBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7SUFDL0IsQ0FBQztJQUNELHNCQUFjLHNEQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsWUFBK0MsQ0FBQztRQUM5RCxDQUFDOzs7T0FBQTtJQUNPLG1EQUFRLEdBQWhCLFVBQWlCLFNBQXFCO1FBQXJCLDRDQUFxQjtRQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUNPLGdFQUFxQixHQUE3QjtRQUNFLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsNERBQWlCLEdBQWpCO1FBQUEsaUJBY0M7UUFiQyxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsMEJBQTBCLEdBQUc7WUFDekMsS0FBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsR0FBRztZQUMzQyxLQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsR0FBRztnQkFDeEQsS0FBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDO1lBQ0YsS0FBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLEdBQUc7WUFDeEQsS0FBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNELCtEQUFvQixHQUFwQjtRQUNFLGlCQUFNLG9CQUFvQixXQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsR0FBRyxTQUFTLENBQUM7UUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsR0FBRyxTQUFTLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLEdBQUcsU0FBUyxDQUFDO0lBQ3RFLENBQUM7SUFDUyx3REFBYSxHQUF2QjtRQUNFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFDRCx5REFBYyxHQUFkO1FBQUEsaUJBZ0JDO1FBZkMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0I7WUFDL0MsQ0FBQyxDQUFFLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBMEI7WUFDbEQsQ0FBQyxDQUFFLEVBQTBCLENBQUM7UUFDaEMsT0FBTyxDQUNMLDZEQUFLLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFVBQUMsSUFBSSxJQUFLLFFBQUMsS0FBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBckIsQ0FBcUI7WUFDeEQsK0RBQU8sU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxNQUFNO2dCQUNOLElBQUk7Z0JBQ0osT0FBTyxDQUNGLENBQ0osQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNELHVEQUFZLEdBQVo7UUFDRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNuQyxJQUFJLE9BQU8sR0FBVSxFQUFFLENBQUM7UUFDeEIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksR0FBRyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxXQUFXLEdBQVEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2hCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUNoQztZQUNELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ25CLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUN0QztZQUNELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNERBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQ3pCLEdBQUcsRUFBRSxHQUFHLEVBQ1IsS0FBSyxFQUFFLFdBQVcsSUFFakIsV0FBVyxDQUNULENBQ04sQ0FBQztTQUNIO1FBQ0QsT0FBTyxDQUNMO1lBQ0UsZ0VBQUssT0FBTyxDQUFNLENBQ1osQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUNELHVEQUFZLEdBQVo7UUFDRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNuQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUN0QixRQUFRLEVBQ1IsS0FBSyxDQUFDLFNBQVMsRUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FDekIsQ0FBQztRQUNGLE9BQU8sbUVBQVEsR0FBRyxDQUFTLENBQUM7SUFDOUIsQ0FBQztJQUNELHFEQUFVLEdBQVY7UUFDRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFDcEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUNoRSxDQUFDO1NBQ0g7UUFDRCxPQUFPLG1FQUFRLElBQUksQ0FBUyxDQUFDO0lBQy9CLENBQUM7SUFDRCxvREFBUyxHQUFULFVBQ0UsUUFBYSxFQUNiLEdBQXNDLEVBQ3RDLFVBQWU7UUFFZixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUV0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsSUFBSSxHQUFHLEdBQUcsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUUzQixPQUFPLENBQ0wsb0RBQUMsOENBQWMsSUFBQyxHQUFHLEVBQUUsR0FBRztZQUN0QixvREFBQyxnRUFBUyxJQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUcsU0FBUyxDQUFhLENBQzVELENBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQscURBQVUsR0FBVixVQUNFLElBQXdDLEVBQ3hDLEtBQWEsRUFDYixVQUFlO1FBRWYsSUFBSSxHQUFHLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsT0FBTyxDQUNMLG9EQUFDLGdDQUFnQyxJQUMvQixHQUFHLEVBQUUsR0FBRyxFQUNSLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLElBQUksRUFBRSxJQUFJLEVBQ1YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQ3JCLENBQ0gsQ0FBQztTQUNIO1FBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkUsSUFBSSxTQUFTLEdBQVEsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbkMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUFFLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMvQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFBRSxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDekQ7UUFFRCxPQUFPLENBQ0wsNERBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQ3pCLEdBQUcsRUFBRSxHQUFHLEVBQ1IsS0FBSyxFQUFFLFNBQVMsRUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLElBRXJCLFdBQVcsQ0FDVCxDQUNOLENBQUM7SUFDSixDQUFDO0lBQ08sNERBQWlCLEdBQXpCLFVBQ0UsSUFBd0MsRUFDeEMsTUFBYyxFQUNkLFVBQWU7UUFFZixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxTQUFTLEdBQVEsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbkMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUFFLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMvQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFBRSxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDekQ7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsTUFBTSxHQUFHLFlBQVksQ0FBQztZQUN0QixJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxJQUFNLFNBQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0RBQUMsa0NBQWtDLElBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzNILFdBQVcsR0FBRyxDQUFDO2dCQUFHLEdBQUc7Z0JBQUUsU0FBTyxDQUFJLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLFdBQVcsR0FBRyxDQUFDO2dCQUNiLG9EQUFDLGdJQUF1QyxJQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUNyRyxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixXQUFXLEdBQUcsQ0FDWixxRUFBbUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLCtCQUErQixFQUFFO2dCQUMxRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsVUFBVTtnQkFBRSxJQUFJO2dCQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTthQUN0RSxDQUFDLENBQ0gsQ0FBQztTQUNIO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLFdBQVcsR0FBRyxDQUNaLG9EQUFDLGtEQUFXLElBQ1YsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUNsQixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUM1QixVQUFVLEVBQUUsVUFBVSxFQUN0QixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQ3JCLENBQ0gsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUU5QixJQUFNLFNBQVMsR0FBRyxDQUNoQiwwR0FDRyxXQUFXLENBQ1gsQ0FDSixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNILHVDQUFDO0FBQUQsQ0FBQyxDQTFOcUQsZ0ZBQXlCLEdBME45RTs7QUFFRDtJQUE4QyxtREFBa0I7SUFDOUQseUNBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0Qsc0JBQUksa0RBQUs7YUFBVDtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFDUyx1REFBYSxHQUF2QjtRQUNFLE9BQU8sQ0FDTCxvREFBQyxpRkFBZSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEdBQW9CLENBQzNFLENBQUM7SUFDSixDQUFDO0lBQ0gsc0NBQUM7QUFBRCxDQUFDLENBWjZDLHlFQUFrQixHQVkvRDtBQUVELHFFQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLCtCQUErQixFQUMvQixVQUFDLEtBQUs7SUFDSixPQUFPLG1EQUFtQixDQUFDLCtCQUErQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JFLENBQUMsQ0FDRixDQUFDO0FBQ0Y7SUFBaUQsc0RBQWtCO0lBQ2pFLDRDQUFZLEtBQVU7ZUFDcEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELHNCQUFJLHNEQUFNO2FBQVY7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQUksd0RBQVE7YUFBWjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDN0IsQ0FBQzs7O09BQUE7SUFDUyw0REFBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ1MsMERBQWEsR0FBdkI7UUFDRSxJQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0I7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNoRCxPQUFPLENBQ0w7WUFDRSw4REFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLElBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQVEsQ0FDNUYsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUNILHlDQUFDO0FBQUQsQ0FBQyxDQXJCZ0QseUVBQWtCLEdBcUJsRTtBQUVEO0lBQXNELG9EQUEyQjtJQUMvRSwwQ0FBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxzQkFBWSxrREFBSTthQUFoQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBYyxxREFBTzthQUFyQjtZQUNFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsQ0FBQzs7O09BQUE7SUFDUyxzREFBVyxHQUFyQjtRQUNFLElBQUksQ0FBQyxHQUFHLGlCQUFNLFdBQVcsV0FBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pELENBQUM7SUFDUyx3REFBYSxHQUF2QjtRQUNFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQ0UsRUFBRTtZQUNGLElBQUksQ0FBQyxJQUFJO1lBQ1QsSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDcEIsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLEVBQ3hDO1lBQ0EsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEMsSUFBSSxPQUFPLEdBQUc7Z0JBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDM0IsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRztnQkFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07YUFDOUIsQ0FBQztZQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDcEU7SUFDSCxDQUFDO0lBQ1Msd0RBQWEsR0FBdkI7UUFDRSxPQUFPLENBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1lBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUNqRCxDQUFDO0lBQ0osQ0FBQztJQUNTLHVEQUFZLEdBQXRCO1FBQ0UsSUFBSSxHQUFHLEdBQVEsaUJBQU0sWUFBWSxXQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzdDLElBQUksQ0FBQyxHQUFHO2dCQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbkQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO2dCQUFFLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDN0Q7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFUyx3REFBYSxHQUF2QjtRQUNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUNTLHlEQUFjLEdBQXhCO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNyQixPQUFPLDZEQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFDTyw2REFBa0IsR0FBMUI7UUFDRSxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxJQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxPQUFPLG9EQUFDLGdGQUF5QixJQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLGVBQWUsR0FBSSxDQUFDO0lBQ3hKLENBQUM7SUFDTyxtRUFBd0IsR0FBaEM7UUFDRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pFLE9BQU8sQ0FDTCxvREFBQyxrRkFBMEIsSUFDekIsR0FBRyxFQUFFLEdBQUcsRUFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQzVCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQ3pDLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQ2pELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQ3ZDLFdBQVcsRUFBRSxJQUFJLEdBQ2pCLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFDTyxxRUFBMEIsR0FBbEM7UUFDRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pFLE9BQU8sQ0FDTCxvREFBQyxpRkFBdUIsSUFDdEIsR0FBRyxFQUFFLEdBQUcsRUFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQzVCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQ3pDLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQ2pELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUN2QyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFDNUQsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFDdEUsV0FBVyxFQUFFLElBQUksR0FDakIsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUNILHVDQUFDO0FBQUQsQ0FBQyxDQWxHcUQsMEVBQTJCLEdBa0doRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqWThCO0FBQ2dDO0FBQ3VCO0FBRTlCO0FBQ0s7QUFFN0Q7SUFBaUQsK0NBQWdDO0lBQy9FLHFDQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUNqRSxDQUFDO0lBQ0Qsc0JBQWMsK0NBQU07YUFBcEI7WUFDRSxPQUFPLElBQUksQ0FBQyxZQUEwQyxDQUFDO1FBQ3pELENBQUM7OztPQUFBO0lBQ0QseURBQW1CLEdBQW5CLFVBQW9CLEtBQVU7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ1MsbURBQWEsR0FBdkI7UUFDRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDdEQsSUFBSSxPQUFPLEdBQUcsU0FBUztZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FDTDtZQUNHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7WUFDeEMsT0FBTztZQUNQLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLENBQUMsQ0FDeEMsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNTLDZEQUF1QixHQUFqQyxVQUFrQyxVQUFlO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNTLGdFQUEwQixHQUFwQyxVQUFxQyxVQUFlO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0I7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ1MseURBQW1CLEdBQTdCLFVBQThCLFVBQWU7UUFDM0MsSUFBTSxJQUFJLEdBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdFLElBQU0sT0FBTyxHQUFnQiw2REFBSyxTQUFTLEVBQUUsVUFBVSxDQUFDLGFBQWEsSUFBRyxJQUFJLENBQU8sQ0FBQztRQUNwRixJQUFNLEdBQUcsR0FBZ0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxPQUFPLENBQ0wsNkRBQUssU0FBUyxFQUFFLFVBQVUsQ0FBQyxnQkFBZ0I7WUFDeEMsT0FBTztZQUNQLEdBQUcsQ0FDQSxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ1Msd0RBQWtCLEdBQTVCLFVBQ0UsVUFBZSxFQUNmLGNBQStCO1FBQS9CLHVEQUErQjtRQUUvQixPQUFPLG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsMEJBQTBCLEVBQUU7WUFDNUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQUUsVUFBVTtZQUFFLGNBQWM7U0FDcEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNILGtDQUFDO0FBQUQsQ0FBQyxDQXBEZ0Qsa0dBQWdDLEdBb0RoRjs7QUFFRCwyRUFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLFVBQUMsS0FBSztJQUNwRSxPQUFPLG1EQUFtQixDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLENBQUMsQ0FBQyxDQUFDO0FBRUg7SUFBMEQsd0RBQWtCO0lBQzFFLDhDQUFZLEtBQVU7UUFBdEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUNqRSxDQUFDO0lBQ0Qsc0JBQWMsd0RBQU07YUFBcEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBc0MsQ0FBQztRQUMzRCxDQUFDOzs7T0FBQTtJQUNELGtFQUFtQixHQUFuQixVQUFvQixLQUFVO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNTLDREQUFhLEdBQXZCO1FBQ0UsSUFBTSxVQUFVLEdBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRixJQUFNLFNBQVMsR0FBRyxDQUFDLGdFQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUNwRSxJQUFJLEVBQUMsUUFBUSxFQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFDckMsT0FBTyxFQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUI7WUFHaEUsVUFBVTtZQUNYLDhEQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUksQ0FDM0MsQ0FBQyxDQUFDO1FBQ1gsT0FBTyxDQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUcsU0FBUyxDQUFPLENBQ3hHLENBQUM7SUFDSixDQUFDO0lBQ0gsMkNBQUM7QUFBRCxDQUFDLENBNUJ5RCx5RUFBa0IsR0E0QjNFOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLDBCQUEwQixFQUMxQixVQUFDLEtBQUs7SUFDSixPQUFPLG1EQUFtQixDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BHNkI7QUFDcUM7QUFDa0M7QUFHdkM7QUFDRjtBQUNHO0FBRWhFO0lBQWdELDhDQUF5QjtJQUN2RSxvQ0FBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxzQkFBYyxnREFBUTthQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLFlBQXlDLENBQUM7UUFDeEQsQ0FBQzs7O09BQUE7SUFDUyxrREFBYSxHQUF2QjtRQUNFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzFDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUNELE9BQU8sQ0FDTCwrREFBTyxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDL0IsbUVBQVEsSUFBSSxDQUFTLENBQ2YsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUNTLDhDQUFTLEdBQW5CLFVBQ0UsUUFBZ0IsRUFDaEIsS0FBbUMsRUFDbkMsVUFBZTtRQUVmLElBQUksR0FBRyxHQUFXLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDcEMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQ04sNERBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUk7Z0JBQzNELG9EQUFDLHNCQUFzQixJQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsR0FBMkIsQ0FDbEksQ0FDTixDQUFDO1NBQ0g7UUFDRCxPQUFPLENBQ0wsNERBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsSUFDcEMsR0FBRyxDQUNELENBQ04sQ0FBQztJQUNKLENBQUM7SUFDSCxpQ0FBQztBQUFELENBQUMsQ0F6QytDLGdGQUF5QixHQXlDeEU7O0FBRUQ7SUFBNEMsMENBQWtCO0lBQTlEOztJQTBDQSxDQUFDO0lBekNDLHNCQUFZLDRDQUFRO2FBQXBCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQUNELHNCQUFZLHdDQUFJO2FBQWhCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNTLGlEQUFnQixHQUExQjtRQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELHNCQUFZLDJDQUFPO2FBQW5CO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUVTLDhDQUFhLEdBQXZCO1FBQ0UsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE9BQU8sQ0FBQywrREFBTyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQzNELDhEQUFNLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztnQkFDbkMsb0RBQUMsNEVBQVksSUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQWlCLENBQ2xGO1lBQ1Asb0RBQUMsNEJBQTRCLElBQzNCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUNuQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQ3JCO1lBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FDeEMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVTLHVEQUFzQixHQUFoQyxVQUFpQyxJQUEyQixFQUFFLFVBQWU7UUFDM0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FDNUMsb0RBQUMsa0VBQW1CLElBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUNwQixVQUFVLEVBQUUsVUFBVSxFQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFDckIsUUFBUSxFQUFFLFNBQVMsRUFDbkIsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLFNBQVMsR0FDOUIsQ0FDSCxFQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1YsQ0FBQztJQUNILDZCQUFDO0FBQUQsQ0FBQyxDQTFDMkMseUVBQWtCLEdBMEM3RDs7QUFFRDtJQUFrRCxnREFBOEI7SUFBaEY7O0lBSUEsQ0FBQztJQUhXLG9EQUFhLEdBQXZCO1FBQ0UsT0FBTyw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQU8sQ0FBQztJQUNwRSxDQUFDO0lBQ0gsbUNBQUM7QUFBRCxDQUFDLENBSmlELDZFQUE4QixHQUkvRTs7QUFFRCwyRUFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLFVBQUMsS0FBSztJQUNuRSxPQUFPLG1EQUFtQixDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hHNEI7QUFDcUM7QUFFOUI7QUFDeUI7QUFFTTtBQUMwQztBQUNBO0FBQ087QUFHOUQ7QUFFeEQ7SUFBZ0QsOENBQXlCO0lBQ3ZFLG9DQUFZLEtBQVU7ZUFDcEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELHNCQUFjLGdEQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsWUFBeUMsQ0FBQztRQUN4RCxDQUFDOzs7T0FBQTtJQUNELHNEQUFpQixHQUFqQjtRQUNFLGlCQUFNLGlCQUFpQixXQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLElBQU0sSUFBSSxHQUErQixJQUFJLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsR0FBRztZQUN4QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNqQyxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixHQUFHO1lBQzFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLEdBQUc7WUFDeEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNELHlEQUFvQixHQUFwQjtRQUNFLGlCQUFNLG9CQUFvQixXQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7SUFDakQsQ0FBQztJQUNPLDREQUF1QixHQUEvQjtRQUNFLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDWixZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNELENBQUMsQ0FBQztJQUNMLENBQUM7SUFDUyxrREFBYSxHQUF2QjtRQUNFLElBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7WUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDcEQsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQ1Qsb0RBQUMsOEJBQThCLElBQzdCLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUNiLE9BQU8sRUFBRSxLQUFLLEVBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQ3ZCLEtBQUssRUFBRSxDQUFDLEVBQ1IsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUNwQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQ3JCLENBQ0gsQ0FBQzthQUNIO1NBQ0Y7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO2dCQUN0QyxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztnQkFDekMsTUFBTSxDQUFDLElBQUksQ0FDVCxvREFBQyw4QkFBOEIsSUFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUMvQixPQUFPLEVBQUUsS0FBSyxFQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQ2pDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFDcEMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxHQUNyQixDQUNILENBQUM7YUFDSDtTQUNGO1FBQ0QsSUFBTSxNQUFNLEdBQWdCLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQztZQUNqRyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxJQUFNLE1BQU0sR0FBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0I7WUFDNUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULElBQU0sU0FBUyxHQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QjtZQUNsRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDO1FBRVQsSUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZDLElBQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEQsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJO1lBQzFDLG9CQUFvQjtZQUNwQixNQUFNO1lBQ04sTUFBTTtZQUNOLFNBQVM7WUFDVCxNQUFNO1lBQ04sS0FBSyxDQUNGLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDUyxvREFBZSxHQUF6QjtRQUNFLElBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDekMsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFO2dCQUNyRSxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUMzQjtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFDRCxJQUFNLEtBQUssR0FBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3BGLElBQU0sT0FBTyxHQUFnQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN0RCxJQUFNLE9BQU8sR0FBZ0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEQsSUFBTSxNQUFNLEdBQWdCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3RELElBQU0sYUFBYSxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CO1lBQzlELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7UUFDNUMsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxhQUFhO1lBQzNCLDZEQUFLLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7Z0JBQzNCLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUI7b0JBQ3ZELE9BQU87b0JBQ1AsS0FBSztvQkFDTCxPQUFPLENBQ0o7Z0JBQ0wsTUFBTTtnQkFDTixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FDdEIsQ0FDRixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ08sdURBQWtCLEdBQTFCO1FBQ0UsT0FBTyxDQUNMLG9EQUFDLGtJQUFzQyxJQUFDLElBQUksRUFBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQTJDLENBQ3RILENBQUM7SUFDSixDQUFDO0lBRVMsc0RBQWlCLEdBQTNCO1FBQ0UsT0FBTyxDQUNMLG9EQUFDLDJIQUFvQyxJQUFDLElBQUksRUFBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQXlDLENBQ2xILENBQUM7SUFDSixDQUFDO0lBQ1Msc0RBQWlCLEdBQTNCO1FBQ0UsT0FBTyxDQUNMLG9EQUFDLDJIQUFvQyxJQUFDLElBQUksRUFBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQXlDLENBQ2xILENBQUM7SUFDSixDQUFDO0lBRVMsZ0RBQVcsR0FBckI7UUFDRSxPQUFPLENBQ0wsNkRBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFDL0MsNkRBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFDL0MsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQ3hDLElBQUksRUFBQyxhQUFhLEdBQ2xCLENBQ0UsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNTLHVEQUFrQixHQUE1QjtRQUNFLE9BQU8sb0VBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsRUFBRTtZQUMzRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ1Msc0RBQWlCLEdBQTNCO1FBQ0UsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pGLElBQU0sS0FBSyxHQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzNILElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDcEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sQ0FBQyw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUNyRCw0REFBSSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFJO1lBQ3BELEtBQUs7WUFDTiw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsc0JBQXNCO2dCQUM3RCxvREFBQyxpRkFBZSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBb0IsQ0FDbkUsQ0FDRixDQUFDLENBQUM7SUFDVixDQUFDO0lBQ1Msc0RBQWlCLEdBQTNCO1FBQ0UsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEVBQUU7WUFDL0MsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0I7Z0JBQzNELGtFQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFRO2dCQUNsRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FDdEIsQ0FDUCxDQUFDO1NBQ0g7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDSCxpQ0FBQztBQUFELENBQUMsQ0FoTCtDLGdGQUF5QixHQWdMeEU7O0FBRUQ7SUFBb0Qsa0RBQVc7SUFBL0Q7O0lBd0NBLENBQUM7SUF2Q0Msc0JBQVksb0RBQVE7YUFBcEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQzdCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVksaURBQUs7YUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBQ1Msa0RBQVMsR0FBbkI7UUFDRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQXNCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN4RSxDQUFDO0lBQ1MsK0NBQU0sR0FBaEI7UUFDRSxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBQ00sK0NBQU0sR0FBYjtRQUNFLElBQU0sS0FBSyxHQUFnQixpQkFBTSxNQUFNLFdBQUUsQ0FBQztRQUMxQyxJQUFNLFlBQVksR0FBZ0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RELElBQU0sU0FBUyxHQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUcsQ0FBQyw0REFBSSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pFLE9BQU8sQ0FDTDtZQUNFLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFO2dCQUMvQyxLQUFLO2dCQUNMLFlBQVksQ0FDVDtZQUNMLFNBQVMsQ0FDVCxDQUNKLENBQUM7SUFDSixDQUFDO0lBQ1MscURBQVksR0FBdEI7UUFDRSxJQUNFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjO1lBQzdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUMxRDtZQUNBLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsNEJBQTRCLEVBQUU7WUFDOUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNILHFDQUFDO0FBQUQsQ0FBQyxDQXhDbUQsa0RBQVcsR0F3QzlEOztBQUVELDJFQUFvQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsZUFBSztJQUNsRSxPQUFPLG1EQUFtQixDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVPNEI7QUFDeUQ7QUFHcEI7QUFDTDtBQUVDO0FBQ1I7QUFFeEQ7SUFBOEMsNENBQXlCO0lBQ3JFLGtDQUFZLEtBQVU7ZUFDcEIsa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELHNCQUFjLDhDQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsWUFBdUMsQ0FBQztRQUN0RCxDQUFDOzs7T0FBQTtJQUNTLGdEQUFhLEdBQXZCO1FBQUEsaUJBNkJDO1FBNUJDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzFDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUU7WUFDMUMsV0FBVyxHQUFHLENBQ1o7Z0JBQ0UsK0RBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUMvQyxPQUFPLEVBQUUsY0FBTSxZQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUExQixDQUEwQixFQUN6QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsR0FDdkMsQ0FDRSxDQUNQLENBQUM7U0FDSDtRQUNELE9BQU8sQ0FDTCxrRUFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxFQUMvQyxJQUFJLEVBQUMsY0FBYyxFQUNuQixHQUFHLEVBQUUsVUFBQyxRQUFRLElBQUssUUFBQyxLQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxFQUF6QixDQUF5QjtZQUUzQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7Z0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNySCxXQUFXLENBQ0gsQ0FDWixDQUFDO0lBQ0osQ0FBQztJQUNTLDRDQUFTLEdBQW5CO1FBQUEsaUJBWUM7UUFYQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBUyxFQUFFLEVBQVU7Z0JBQ3ZELFlBQUksQ0FBQyxVQUFVLENBQ2IsUUFBUSxHQUFHLEVBQUUsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUNMLEtBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUN4QixJQUFJLENBQ0w7WUFORCxDQU1DLENBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUNTLGtEQUFlLEdBQXpCLFVBQTBCLFVBQWU7UUFDdkMsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxVQUFVLENBQUMsZUFBZSxJQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUN4QixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ1MsNkNBQVUsR0FBcEIsVUFBcUIsVUFBZTtRQUFwQyxpQkFZQztRQVhDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQVcsRUFBRSxFQUFVO1lBQ3ZELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFTLEVBQUUsRUFBVTtnQkFDM0MsWUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUF4RSxDQUF3RSxDQUN6RSxDQUFDO1lBQ0YsT0FBTyxDQUNMLDZEQUFLLEdBQUcsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBQyxjQUFjLElBQ3BGLEtBQUssQ0FDRixDQUNQLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUywwQ0FBTyxHQUFqQixVQUFrQixVQUFlO1FBQy9CLElBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDM0IsT0FBTyw2REFBSyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFPLENBQUM7U0FDekc7O1lBQ0ksT0FBTywwR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFJLENBQUM7SUFDeEUsQ0FBQztJQUVTLDJDQUFRLEdBQWxCLFVBQW1CLFVBQWUsRUFBRSxPQUEwQjtRQUM1RCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEYsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELHNCQUFjLCtDQUFTO2FBQXZCO1lBQ0UsT0FBTyxJQUFJLENBQUMsNkNBQTRDO1FBQzFELENBQUM7OztPQUFBO0lBQ1MsOENBQVcsR0FBckIsVUFBc0IsVUFBZTtRQUNuQyxPQUFPLENBQ0wsNkRBQUssU0FBUyxFQUFDLFlBQVk7WUFDekIsb0RBQUMsZ0ZBQXlCLElBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUN2QixRQUFRLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFDMUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEdBQ2pDLENBQ0UsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNPLDZDQUFVLEdBQWxCLFVBQ0UsR0FBVyxFQUNYLElBQWUsRUFDZixLQUFVLEVBQ1YsVUFBZSxFQUNmLEtBQWE7UUFFYixJQUFNLFlBQVksR0FBRyxDQUNuQixvREFBQyx1QkFBdUIsSUFDdEIsR0FBRyxFQUFFLEdBQUcsRUFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFDdkIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQ2pDLElBQUksRUFBRSxJQUFJLEVBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQ3pCLEtBQUssRUFBRSxLQUFLLEVBQ1osU0FBUyxFQUFFLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxHQUMvQixDQUNILENBQUM7UUFDRixJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQXFCLENBQUM7UUFDbkQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNaLFdBQVcsR0FBRyw0RUFBMEIsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25HO1FBQ0QsT0FBTyxXQUFXLGFBQVgsV0FBVyxjQUFYLFdBQVcsR0FBSSxZQUFZLENBQUM7SUFDckMsQ0FBQztJQUNPLGdEQUFhLEdBQXJCO1FBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckUsQ0FBQztJQUNILCtCQUFDO0FBQUQsQ0FBQyxDQXBJNkMsZ0ZBQXlCLEdBb0l0RTs7QUFFRDtJQUE2QywyQ0FBa0I7SUFDN0QsaUNBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBREMsS0FBSSxDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsQ0FBQzs7SUFDdkQsQ0FBQztJQUNTLGlEQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxzQkFBYyw2Q0FBUTthQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDN0IsQ0FBQzs7O09BQUE7SUFDRCxzQkFBYyx5Q0FBSTthQUFsQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBYyw4Q0FBUzthQUF2QjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDOUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBYywwQ0FBSzthQUFuQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBYyw4Q0FBUzthQUF2QjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDOUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBWSxnREFBVzthQUF2QjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDO1FBQ3pDLENBQUM7OztPQUFBO0lBQ00sdURBQXFCLEdBQTVCLFVBQTZCLFNBQWMsRUFBRSxTQUFjO1FBQ3pELElBQUksQ0FBQyxpQkFBTSxxQkFBcUIsWUFBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDckUsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFlBQVk7WUFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxlQUFlO1lBQ3ZELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUNELGdEQUFjLEdBQWQsVUFBZSxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2hELENBQUM7SUFDUywyQ0FBUyxHQUFuQjtRQUNFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEMsQ0FBQztJQUNTLCtDQUFhLEdBQXZCO1FBQ0UsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVztZQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQUksT0FBTyxHQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3JDLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEUsT0FBTyxDQUNMLDZEQUNFLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLElBQUksRUFBQyxjQUFjO1lBRW5CLCtEQUFPLFNBQVMsRUFBRSxVQUFVLGdCQUFjLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDakYsbUZBQ29CLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUMvQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQ3RDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3RDLElBQUksRUFBQyxPQUFPLEVBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUNoQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUN0QixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ2xELFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxHQUM3QjtnQkFFQSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBQ2pDLDhEQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixJQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUMxQiw2REFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhOzRCQUV4Qyw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQVEsQ0FDN0MsQ0FBQyxDQUFDO3dCQUNSLElBQUksQ0FFRCxDQUFDLENBQUM7b0JBQ1QsSUFBSTtnQkFFUiw4REFBTSxTQUFTLEVBQUUsaUJBQWlCLElBQy9CLFFBQVEsQ0FDSixDQUNELENBQ0osQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNILDhCQUFDO0FBQUQsQ0FBQyxDQXhGNEMseUVBQWtCLEdBd0Y5RDs7QUFFRCxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLHdCQUF3QixFQUFFLFVBQUMsS0FBVTtJQUNoRixPQUFPLG1EQUFtQixDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyxDQUFDO0FBRUgsMkVBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxVQUFDLEtBQUs7SUFDakUsT0FBTyxtREFBbUIsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaFA0QjtBQUlFO0FBRThCO0FBQ0M7QUFHaEU7SUFBMkMseUNBQXlCO0lBQXBFOztJQWdGQSxDQUFDO0lBL0VDLHNCQUFjLDJDQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsWUFBb0MsQ0FBQztRQUNuRCxDQUFDOzs7T0FBQTtJQUVTLDZDQUFhLEdBQXZCO1FBQUEsaUJBU0M7UUFSQyxPQUFPLENBQ0wsNkRBQ0UsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUNsQyxHQUFHLEVBQUUsVUFBQyxJQUFJLElBQUssUUFBQyxLQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFyQixDQUFxQixJQUVuQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQ1osQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVTLHdDQUFRLEdBQWxCO1FBQUEsaUJBNkJDO1FBNUJDLElBQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQ0FDM0MsQ0FBQztZQUNSLElBQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixLQUFLLENBQUMsSUFBSSxDQUNSLE9BQUssVUFBVSxDQUNiLElBQUksRUFDSixDQUFDLEVBQ0QsVUFBQyxLQUFtQjtnQkFDbEIsS0FBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9ELENBQUMsRUFDRCxVQUFDLEtBQVU7Z0JBQ1QsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoQix5QkFBeUI7Z0JBQ3pCLEtBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUNsQyxLQUFJLENBQUMsUUFBUSxFQUNiLEtBQUssRUFDTCxJQUFJLEVBQ0osS0FBSyxDQUFDLGFBQWEsQ0FDcEIsQ0FBQztZQUNKLENBQUMsRUFDRCxPQUFLLFFBQVEsQ0FBQyxVQUFVLEVBQ3hCLE9BQUssUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFDaEMsT0FBSyxRQUFRLENBQ2QsQ0FDRixDQUFDOzs7UUF2QkosS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO29CQUFyQyxDQUFDO1NBd0JUO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsMENBQVUsR0FBcEIsVUFDRSxJQUFlLEVBQ2YsQ0FBUyxFQUNULGFBQW1DLEVBQ25DLGlCQUFnRCxFQUNoRCxVQUFlLEVBQ2YsU0FBaUIsRUFDakIsUUFBOEI7UUFFOUIsSUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNuRCxJQUFNLElBQUksR0FBZ0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0QsSUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQU0sU0FBUyxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBTSxZQUFZLEdBQUcsQ0FDbkIsb0RBQUMseUJBQXlCLElBQ3hCLEdBQUcsRUFBRSxHQUFHLEVBQ1IsSUFBSSxFQUFFLElBQUksRUFDVixLQUFLLEVBQUUsS0FBSyxFQUNaLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLGlCQUFpQixFQUFFLGlCQUFpQixFQUNwQyxVQUFVLEVBQUUsVUFBVSxFQUN0QixTQUFTLEVBQUUsU0FBUyxFQUNwQixRQUFRLEVBQUUsUUFBUSxHQUNsQixDQUNILENBQUM7UUFDRixJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQXFCLENBQUM7UUFDbkQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNaLFdBQVcsR0FBRyw0RUFBMEIsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25HO1FBQ0QsT0FBTyxXQUFXLGFBQVgsV0FBVyxjQUFYLFdBQVcsR0FBSSxZQUFZLENBQUM7SUFDckMsQ0FBQztJQUNILDRCQUFDO0FBQUQsQ0FBQyxDQWhGMEMsZ0ZBQXlCLEdBZ0ZuRTs7QUFFRDtJQUErQyw2Q0FBa0I7SUFBakU7O0lBbUVBLENBQUM7SUFsRUMsc0JBQWMsMkNBQUk7YUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQWMsNENBQUs7YUFBbkI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQWMsZ0RBQVM7YUFBdkI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzlCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQWMsb0RBQWE7YUFBM0I7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ2xDLENBQUM7OztPQUFBO0lBQ0Qsc0JBQWMsd0RBQWlCO2FBQS9CO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBQ3RDLENBQUM7OztPQUFBO0lBQ0Qsc0JBQWMsaURBQVU7YUFBeEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQy9CLENBQUM7OztPQUFBO0lBQ0Qsc0JBQWMsZ0RBQVM7YUFBdkI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzlCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQWMsK0NBQVE7YUFBdEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQzdCLENBQUM7OztPQUFBO0lBRVMsaURBQWEsR0FBdkI7UUFDRSxPQUFPLENBQ0wsNkRBQ0UsUUFBUSxFQUFFLENBQUMsRUFDWCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQzdCLGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLHNDQUNILElBQUksQ0FBQyxLQUFLO1lBRTVDLDZEQUFLLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO2dCQUMzQyw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEdBQUk7Z0JBQ2pELDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7b0JBQ3pDLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQjt3QkFDL0MsNkRBQ0UsS0FBSyxFQUFDLElBQUksRUFDVixNQUFNLEVBQUMsSUFBSSxFQUNYLE9BQU8sRUFBQyxXQUFXLEVBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUMxQyxLQUFLLEVBQUMsNEJBQTRCOzRCQUVsQyw4REFBTSxDQUFDLEVBQUMseWNBQXljLEdBQUcsQ0FDaGQ7d0JBQ04sNkRBQ0UsS0FBSyxFQUFDLElBQUksRUFDVixNQUFNLEVBQUMsSUFBSSxFQUNYLE9BQU8sRUFBQyxXQUFXLEVBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUMxQyxLQUFLLEVBQUMsNEJBQTRCOzRCQUVsQyw4REFBTSxDQUFDLEVBQUMsMkJBQTJCLEdBQUc7NEJBQ3RDLDhEQUFNLENBQUMsRUFBQywrQkFBK0IsR0FBRyxDQUN0QyxDQUNGO29CQUVOLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBRyxJQUFJLENBQUMsU0FBUyxDQUFPO29CQUNqRSw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLElBQUcsSUFBSSxDQUFDLElBQUksQ0FBTyxDQUMzRCxDQUNGLENBQ0YsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNILGdDQUFDO0FBQUQsQ0FBQyxDQW5FOEMseUVBQWtCLEdBbUVoRTs7QUFFRCwyRUFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFVBQUMsS0FBSztJQUM5RCxPQUFPLG1EQUFtQixDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbks0QjtBQUNxQztBQUlMO0FBRS9EO0lBQTBDLHdDQUF5QjtJQUNqRSw4QkFBWSxLQUFVO1FBQXRCLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFEQyxLQUFJLENBQUMsYUFBYSxHQUFHLEtBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDOztJQUNyRCxDQUFDO0lBQ0Qsc0JBQWMsMENBQVE7YUFBdEI7WUFDRSxPQUFPLElBQUksQ0FBQyxZQUFtQyxDQUFDO1FBQ2xELENBQUM7OztPQUFBO0lBQ0QsNENBQWEsR0FBYixVQUFjLEtBQVU7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDUyw0Q0FBYSxHQUF2QjtRQUFBLGlCQWtCQztRQWpCQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQjtZQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDO1lBQzNELENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQjtZQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDO1lBQzNELENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxPQUFPLENBQ0wsNkRBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxVQUFDLEdBQUcsSUFBSyxRQUFDLEtBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEVBQXBCLENBQW9CO1lBQzdFLGtFQUFVLElBQUksRUFBQyxZQUFZO2dCQUN6QixnRUFBUSxJQUFJLEVBQUMsY0FBYyxFQUFDLFNBQVMsRUFBRSxXQUFXLEdBQVc7Z0JBQzVELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsOERBQU0sU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLElBQUcsT0FBTyxDQUFRLEVBQUMsQ0FBQyxJQUFJO2dCQUN6RixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxVQUFDLElBQUksRUFBRSxDQUFDLElBQUssWUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQWpELENBQWlELENBQUM7Z0JBQ25HLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsOERBQU0sU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLElBQUcsT0FBTyxDQUFRLEVBQUMsQ0FBQyxJQUFJLENBQ2pGLENBQ1AsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNTLHlDQUFVLEdBQXBCLFVBQ0UsR0FBVyxFQUNYLElBQXdCLEVBQ3hCLEtBQWEsRUFDYixVQUFlO1FBRWYsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUNMLCtEQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDcEUsK0RBQ0UsSUFBSSxFQUFDLE9BQU8sRUFDWixTQUFTLEVBQUMsbUJBQW1CLEVBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFDeEIsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUMxQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFDM0IsUUFBUSxFQUFFLGNBQUssQ0FBQyxtQkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksZ0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxrQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLHNCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FDL0M7WUFDRiw4REFBTSxTQUFTLEVBQUUsVUFBVSxDQUFDLFFBQVEsSUFBRyxRQUFRLENBQVEsQ0FDakQsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUNILDJCQUFDO0FBQUQsQ0FBQyxDQTNEeUMsZ0ZBQXlCLEdBMkRsRTs7QUFDRCwyRUFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQUMsS0FBSztJQUM3RCxPQUFPLG1EQUFtQixDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyRTRCO0FBRWdDO0FBQ0Y7QUFDSjtBQUNPO0FBR2hFO0lBQTBDLHdDQUErQztJQUN2Riw4QkFBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFUyx5Q0FBVSxHQUFwQixVQUFxQixHQUFXLEVBQUUsSUFBUztRQUN6QyxJQUFNLFlBQVksR0FBRyxDQUNuQixvREFBQyxxRUFBd0IsSUFDdkIsR0FBRyxFQUFFLEdBQUcsRUFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFDdkIsSUFBSSxFQUFFLElBQUksR0FDVixDQUNILENBQUM7UUFDRixJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQXFCLENBQUM7UUFDbkQsSUFBSSxXQUFXLEdBQXVCLElBQUksQ0FBQztRQUMzQyxJQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDWCxXQUFXLEdBQUcsNEVBQTBCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNuRztRQUNELE9BQU8sV0FBVyxhQUFYLFdBQVcsY0FBWCxXQUFXLEdBQUksWUFBWSxDQUFDO0lBQ3JDLENBQUM7SUFFUywwQ0FBVyxHQUFyQjtRQUFBLGlCQStCQztRQTlCQyxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ3pELElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQU0sRUFBRSxLQUFLLElBQU8sT0FBTyxLQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0SCxPQUFPLENBQ0wsNkRBQ0UsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFDMUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdkQsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ25CLDZEQUE2RDtZQUM3RCxhQUFhO1lBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUN2QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQ2xDLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxtQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksZ0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxrQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLHNCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWU7WUFFN0MsT0FBTyxDQUFDLENBQUM7Z0JBQ1QsQ0FBQyw2REFBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUM1RixDQUFDLDREQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLElBQ2xELEtBQUssQ0FDSCxDQUFDO1lBRVAsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQ3JCLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFUyw0Q0FBYSxHQUF2QjtRQUNFLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzVDLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDcEYsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQ0wsNkRBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYTtZQUN4QyxNQUFNO1lBQ04sT0FBTyxDQUNKLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCwyQkFBQztBQUFELENBQUMsQ0FqRXlDLHlFQUEwQixHQWlFbkU7O0FBRUQsMkVBQW9CLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFDLEtBQUs7SUFDN0QsT0FBTyxtREFBbUIsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdFNEI7QUFDNkM7QUFFYjtBQUUvRDtJQUF3QyxzQ0FFdkM7SUFFQyxnREFBZ0Q7SUFDaEQsNEJBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBTE8sd0JBQWtCLEdBQUcsS0FBSyxDQUFDOztRQUlqQyxzQ0FBc0M7SUFDeEMsQ0FBQztJQUNTLHdDQUFXLEdBQXJCO1FBQUEsaUJBcUVDO1FBcEVDLElBQU0sVUFBVSxHQUFJLElBQUksQ0FBQyxRQUE4QixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1lBQ25DLFNBQVMsR0FBRyxVQUFDLENBQU0sSUFBSyxRQUFDLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxFQUE3QyxDQUE2QyxDQUFDO1lBQ3RFLE9BQU8sR0FBRyxVQUFDLENBQU07Z0JBQ2YsSUFBSSxDQUFDLEtBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtvQkFDaEQsS0FBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzQixLQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2lCQUNqQztZQUNILENBQUMsQ0FBQztZQUNGLG1CQUFtQixHQUFHLFVBQUMsQ0FBTTtnQkFDM0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNaLFVBQVUsQ0FBQztvQkFDVCxLQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUMsQ0FBQztTQUNIO2FBQU07WUFDTCx3REFBd0Q7WUFDeEQsT0FBTyxHQUFHLFVBQUMsQ0FBTTtnQkFDZixJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO29CQUNwQixLQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzVCO1lBQ0gsQ0FBQyxDQUFDO1NBQ0g7UUFFRCxJQUFJLFFBQVEsR0FBRyxVQUFDLENBQU07WUFDcEIsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3ZDLElBQUksS0FBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtvQkFDbkMsS0FBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM1QjthQUNGO2lCQUFNO2dCQUNMLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQztRQUNGLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7WUFDdkMsT0FBTyxpRUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBTyxDQUFDO1NBQ3pDO1FBQ0QsT0FBTyxDQUNMLCtEQUNFLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQzVCLFNBQVMsRUFBRSxVQUFVLEVBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7WUFDN0IsdUJBQXVCO1lBQ3ZCLEdBQUcsRUFBRSxVQUFDLEtBQUssSUFBSyxRQUFDLEtBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQXRCLENBQXNCLEVBQ3RDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQ3ZDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFDOUIsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUM5QixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQ2hDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFDN0IsV0FBVyxFQUFFLFdBQVcsRUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUM5QixZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQ3hDLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQy9CLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLG1CQUFtQixFQUFFLG1CQUFtQixtQkFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLGdCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsa0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxzQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQy9DLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFDUywwQ0FBYSxHQUF2QjtRQUNFLE9BQU8sQ0FDTCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hCO2dCQUNJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FDbkIsRUFBQztZQUNQLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckIsQ0FBQztJQUNKLENBQUM7SUFDTywyQ0FBYyxHQUF0QjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMzQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ25DLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdFQUFRLEdBQUcsRUFBRSxNQUFNLEdBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQVcsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxrRUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUcsT0FBTyxDQUFZLENBQUM7SUFDdEUsQ0FBQztJQUtILHlCQUFDO0FBQUQsQ0FBQyxDQXZHdUMsd0ZBQWlDLEdBdUd4RTs7QUFFRCwyRUFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQUMsS0FBSztJQUMzRCxPQUFPLG1EQUFtQixDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FDaEhIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBOEk7QUFDdEY7QUFFeEQ7SUFBQTtJQWdEQSxDQUFDO0lBL0NlLGtDQUFPLEdBQXJCLFVBQXNCLE1BQW1CLEVBQUUsT0FBb0IsRUFBRSxHQUFxQjtRQUNwRixJQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0QsSUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE9BQU8sb0VBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUU7WUFDL0QsT0FBTztZQUNQLEdBQUc7WUFDSCxhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNhLHNDQUFXLEdBQXpCLFVBQTBCLE1BQW1CLEVBQUUsT0FBb0IsRUFBRSxRQUF1QjtRQUMxRixJQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEUsSUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sb0VBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUU7WUFDL0QsT0FBTztZQUNQLFFBQVE7WUFDUixhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNhLDhDQUFtQixHQUFqQyxVQUFrQyxNQUFtQixFQUFFLE9BQW9CLEVBQUUsUUFBdUI7UUFDbEcsSUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLHNDQUFzQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlFLElBQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RSxPQUFPLG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFO1lBQy9ELE9BQU87WUFDUCxRQUFRO1lBQ1IsYUFBYTtTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDYSx3Q0FBYSxHQUEzQixVQUE0QixNQUFtQixFQUFFLE9BQW9CLEVBQUUsUUFBNEIsRUFBRSxJQUFlO1FBQ2xILElBQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUUsSUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RSxPQUFPLG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFO1lBQy9ELEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUNoQixPQUFPO1lBQ1AsUUFBUTtZQUNSLElBQUk7WUFDSixhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNhLHlDQUFjLEdBQTVCLFVBQTZCLE1BQW1CLEVBQUUsT0FBb0IsRUFBRSxJQUF3QyxFQUFFLE1BQXVCO1FBQXZCLHdDQUF1QjtRQUN2SSxJQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLElBQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUUsT0FBTyxvRUFBbUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRTtZQUMvRCxPQUFPO1lBQ1AsSUFBSTtZQUNKLGFBQWE7U0FDZCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0gsaUNBQUM7QUFBRCxDQUFDOztBQUVELHVEQUFXLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckRBO0FBRThCO0FBRTdEO0lBQXNDLG9DQUFrQjtJQUN0RCwwQkFBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDUywwQ0FBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0Qsc0JBQWMsd0NBQVU7YUFBeEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQy9CLENBQUM7OztPQUFBO0lBQ0QsaUNBQU0sR0FBTjtRQUNFLE9BQU8sNkRBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBTyxDQUFDO0lBQ2pHLENBQUM7SUFDSCx1QkFBQztBQUFELENBQUMsQ0FicUMseUVBQWtCLEdBYXZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQjhCO0FBSTZCO0FBRUo7QUFDUTtBQUdoRTtJQUErQiw2QkFBMkI7SUFFeEQsbUJBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUdiO1FBRkMsS0FBSSxDQUFDLE9BQU8sR0FBRywrQ0FBZSxFQUFFLENBQUM7UUFDakMsS0FBSSxDQUFDLGNBQWMsRUFBRSxDQUFDOztJQUN4QixDQUFDO0lBQ08sa0NBQWMsR0FBdEI7UUFDRSxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsaUJBQU8sSUFBSSxPQUFDLE9BQW9CLENBQUMsVUFBVSxFQUFoQyxDQUFnQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNTLG1DQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFDRCxzQkFBWSwwQkFBRzthQUFmO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUN4QixDQUFDOzs7T0FBQTtJQUNELHNCQUFZLDZCQUFNO2FBQWxCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQixDQUFDOzs7T0FBQTtJQUNELHNCQUFZLDhCQUFPO2FBQW5CO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLDBCQUFHO2FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUN4QixDQUFDOzs7T0FBQTtJQUNTLDZCQUFTLEdBQW5CO1FBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUMzRSxDQUFDO0lBQ1Msd0NBQW9CLEdBQTlCO1FBQUEsaUJBdUJDO1FBdEJDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQUMsT0FBTyxFQUFFLEtBQUs7WUFDckQsSUFBTSxZQUFZLEdBQUcsS0FBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEQsSUFBTSxHQUFHLEdBQUksT0FBb0IsQ0FBQyxlQUFlLENBQUM7WUFDbEQsT0FBTyxDQUNMLDZEQUNFLFNBQVMsRUFBRSxHQUFHLENBQUMsZUFBZSxFQUM5QixLQUFLLEVBQUcsT0FBZSxDQUFDLFNBQVMsY0FDdkIsWUFBWSxDQUFDLEdBQUcsRUFDMUIsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQ3JCLE9BQU8sRUFBRyxPQUFvQixDQUFDLE9BQU8sSUFFckMsS0FBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsb0VBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FDbkosQ0FDUCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQ0wsNkRBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQ3BELFFBQVEsQ0FDTCxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ1MsaUNBQWEsR0FBdkI7UUFDRSxJQUFNLE1BQU0sR0FBZ0IsSUFBSSxDQUFDLE1BQXFCLENBQUM7UUFDdkQsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUMsSUFBTSxPQUFPLEdBQUcsNEVBQTBCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sT0FBTyxJQUFJLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBQ0QscUNBQWlCLEdBQWpCO1FBQUEsaUJBU0M7UUFSQyxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFO1lBQ2xDLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUN6QixVQUFVLENBQUM7Z0JBQ1QsS0FBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDUjtJQUNILENBQUM7SUFDTSx5Q0FBcUIsR0FBNUIsVUFBNkIsU0FBYyxFQUFFLFNBQWM7UUFDekQsSUFBSSxDQUFDLGlCQUFNLHFCQUFxQixZQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVyRSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUM5QixTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztZQUNuRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDTyxxQ0FBaUIsR0FBekI7UUFDRSxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFDRCx3Q0FBb0IsR0FBcEI7UUFDRSxpQkFBTSxvQkFBb0IsV0FBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFUyxpQ0FBYSxHQUF2QixVQUF3QixPQUFpQixFQUFFLFlBQXFCO1FBQzlELElBQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsb0VBQW1CLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2xFLFdBQVcsR0FBRyxVQUFVLENBQUM7U0FDMUI7UUFDRCxPQUFPLG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO1lBQzdELEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUs7WUFDekIsT0FBTyxFQUFFLE9BQU87WUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7U0FDZCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0gsZ0JBQUM7QUFBRCxDQUFDLENBckc4Qix3RUFBaUIsR0FxRy9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvRzhCO0FBQ3FDO0FBRUw7QUFDTjtBQUV6RDtJQUFnRCw4Q0FBeUI7SUFDdkUsb0NBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBREMsS0FBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDOztJQUM5QyxDQUFDO0lBQ0Qsc0JBQWMsZ0RBQVE7YUFBdEI7WUFDRSxPQUFPLElBQUksQ0FBQyxZQUF5QyxDQUFDO1FBQ3hELENBQUM7OztPQUFBO0lBQ1Msa0RBQWEsR0FBdkI7UUFBQSxpQkFpQkM7UUFoQkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDMUMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUNMLDZEQUFLLFNBQVMsRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFDLElBQUksSUFBSyxRQUFDLEtBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQXJCLENBQXFCLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRTtZQUMxSiw2REFDRSxTQUFTLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFDakMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFFcEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFCO1lBQ047Z0JBQ0UsZ0VBQVEsUUFBUSxFQUFFLENBQUMsR0FBVyxDQUMxQjtZQUNMLFdBQVcsQ0FDUixDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsc0RBQWlCLEdBQWpCO1FBQUEsaUJBY0M7UUFiQyxJQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0I7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVsRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxPQUFPLDZEQUFLLFNBQVMsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUN4QyxnRUFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLFNBQVMsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFDdkMsT0FBTyxFQUFFLGNBQU0sWUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBMUIsQ0FBMEIsSUFFeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLG9EQUFDLHFFQUFPLElBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxNQUFNLEdBQVksQ0FBQyxDQUFDLENBQUMsMkVBQWMsQ0FDL0ksQ0FDTCxDQUFDO0lBQ1QsQ0FBQztJQUNILGlDQUFDO0FBQUQsQ0FBQyxDQTFDK0MsZ0ZBQXlCLEdBMEN4RTs7QUFFRCwyRUFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLFVBQUMsS0FBSztJQUNuRSxPQUFPLG1EQUFtQixDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BEdUI7QUFDc0I7QUFDUTtBQUV4RDtJQUEyQyx5Q0FBeUI7SUFDbEUsK0JBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBa0JELGFBQU8sR0FBRyxVQUFDLEtBQVU7WUFDbkIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBQ0YsYUFBTyxHQUFHLFVBQUMsS0FBVTtZQUNuQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQXpCQSxLQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDOztJQUM5QixDQUFDO0lBQ0Qsc0JBQVkseUNBQU07YUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVksd0NBQUs7YUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBQ0QsaURBQWlCLEdBQWpCO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUc7WUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRCxvREFBb0IsR0FBcEI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFRRCxzQ0FBTSxHQUFOO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDdkIsSUFBTSxTQUFTLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2RCxPQUFPLENBQ0wscUVBQ0UsU0FBUyxFQUFDLGtCQUFrQixFQUM1QixlQUFlLEVBQUMsTUFBTSxFQUN0Qiw4QkFBOEIsRUFBRSxJQUFJLEVBQ3BDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUNqQix1QkFBdUIsRUFBRSxTQUFTLEVBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FDckIsQ0FDSCxDQUFDO1NBQ0g7UUFDRCxPQUFPLENBQ0wscUVBQ0UsU0FBUyxFQUFDLGtCQUFrQixFQUM1QixlQUFlLEVBQUMsTUFBTSxFQUN0Qiw4QkFBOEIsRUFBRSxJQUFJLEVBQ3BDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLElBRXBCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUNwQixDQUNSLENBQUM7SUFDSixDQUFDO0lBQ0gsNEJBQUM7QUFBRCxDQUFDLENBNUQwQyw0Q0FBSyxDQUFDLFNBQVMsR0E0RHpEOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLDZEQUFpQixDQUFDLGdCQUFnQixFQUNsQyxVQUFDLEtBQUs7SUFDSixPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNELENBQUMsQ0FDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZFd0I7QUFDc0I7QUFDUTtBQUV4RDtJQUEyQyx5Q0FBeUI7SUFDbEUsK0JBQVksS0FBVTtRQUF0QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUViO1FBc0JPLHNCQUFnQixHQUFHLFVBQUMsTUFBVyxFQUFFLE9BQVk7WUFDbkQsSUFBRyxLQUFJLENBQUMsV0FBVztnQkFBRSxPQUFPO1lBQzVCLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLElBQUksS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBMUJDLEtBQUksQ0FBQyxPQUFPLEdBQUcsNENBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7SUFDbkMsQ0FBQztJQUVELHNCQUFZLHlDQUFNO2FBQWxCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQixDQUFDOzs7T0FBQTtJQUNELHNCQUFZLHdDQUFLO2FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixDQUFDOzs7T0FBQTtJQUNELGlEQUFpQixHQUFqQjtRQUNFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDRCxvREFBb0IsR0FBcEI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0Qsa0RBQWtCLEdBQWxCLFVBQW1CLFNBQWMsRUFBRSxTQUFjO1FBQy9DLElBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQU1PLGlEQUFpQixHQUF6QjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxzQ0FBTSxHQUFOO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNTLDRDQUFZLEdBQXRCO1FBQ0UsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUN2QixJQUFJLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JELE9BQU8scUVBQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFDLGtCQUFrQixFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsR0FBSSxDQUFDO1NBQ3hIO1FBQ0QsT0FBTyxxRUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUMsa0JBQWtCLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQVEsQ0FBQztJQUNwSCxDQUFDO0lBQ0gsNEJBQUM7QUFBRCxDQUFDLENBaEQwQyw0Q0FBSyxDQUFDLFNBQVMsR0FnRHpEOztBQUVELG9FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLDZEQUFpQixDQUFDLGVBQWUsRUFDakMsVUFBQyxLQUFLO0lBQ0osT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRCxDQUFDLENBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNENkI7QUFDOEI7QUFJSjtBQUV6RDtJQUE4Qyw0Q0FBa0I7SUFDOUQsa0NBQVksS0FBVTtlQUNwQixrQkFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ1Msa0RBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELHNCQUFjLDhDQUFRO2FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLDBDQUFJO2FBQWxCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNTLDRDQUFTLEdBQW5CO1FBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBQ1MsZ0RBQWEsR0FBdkI7UUFBQSxpQkF1QkM7UUF0QkMsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJELElBQU0sVUFBVSxHQUFHLFVBQUMsS0FBVTtZQUM1QixLQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFFRixPQUFPLENBQ0wsNERBQUksU0FBUyxFQUFDLGlCQUFpQjtZQUM3Qiw2REFBSyxTQUFTLEVBQUMsc0JBQXNCLElBQUUsSUFBSSxDQUFPO1lBQ2xELDZEQUNFLFNBQVMsRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQ3BELE9BQU8sRUFBRSxVQUFVO2dCQUVuQixvREFBQyxxRUFBTyxJQUNOLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFDdEQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUN4RCxJQUFJLEVBQUUsRUFBRSxHQUNDLENBQ1AsQ0FDSCxDQUNOLENBQUM7SUFDSixDQUFDO0lBQ0gsK0JBQUM7QUFBRCxDQUFDLENBeEM2Qyx5RUFBa0IsR0F3Qy9EOzs7Ozs7Ozs7Ozs7OztBQy9DRDtBQUFBO0FBQUE7O0dBRUc7QUFDSSxJQUFJLFFBQVEsR0FBRztJQUNwQjs7OztPQUlHO0lBQ0gsVUFBVSxFQUFFO1FBQ1YsV0FBVyxFQUFFLElBQUk7UUFDakIsYUFBYSxFQUFFLEtBQUs7S0FDckI7SUFDRDs7O09BR0c7SUFDSCxnQkFBZ0IsRUFBRSxJQUFJO0lBQ3RCOzs7T0FHRztJQUNILGFBQWEsRUFBRSxVQUFVO0lBQ3pCOztPQUVHO0lBQ0gsMEJBQTBCLEVBQUUsSUFBSTtJQUNoQzs7T0FFRztJQUNILDJCQUEyQixFQUFFLElBQUk7SUFDakMsSUFBSSw0QkFBNEI7UUFDOUIsT0FBTyxRQUFRLENBQUMsMkJBQTJCLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksNEJBQTRCLENBQUMsR0FBWTtRQUMzQyxRQUFRLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxDQUFDO0lBQzdDLENBQUM7SUFDRDs7T0FFRztJQUNILGdCQUFnQixFQUFFLDBDQUEwQztJQUM1RDs7T0FFRztJQUNILGtCQUFrQixFQUFFLEdBQUc7SUFDdkI7Ozs7T0FJRztJQUNILGdDQUFnQyxFQUFFLEtBQUs7SUFDdkM7Ozs7T0FJRztJQUNILDRCQUE0QixFQUFFLEtBQUs7SUFDbkM7O09BRUc7SUFDSCxpQkFBaUIsRUFBRSxTQUFTO0lBQzVCOztPQUVHO0lBQ0gsb0JBQW9CLEVBQUUsU0FBUztJQUMvQjs7T0FFRztJQUNILHFCQUFxQixFQUFFLFVBQVU7SUFDakM7O09BRUc7SUFDSCx1QkFBdUIsRUFBRSxRQUFRO0lBQ2pDOztPQUVHO0lBQ0gscUJBQXFCLEVBQUUsSUFBSTtJQUMzQjs7T0FFRztJQUNILDRCQUE0QixFQUFFLENBQUM7SUFDL0I7OztPQUdHO0lBQ0gsd0JBQXdCLEVBQUUsSUFBSTtJQUM5Qjs7T0FFRztJQUNILHNCQUFzQixFQUFFLEdBQUc7SUFDM0I7O09BRUc7SUFDSCwyQkFBMkIsRUFBRSxFQUFFO0lBQy9COztPQUVHO0lBQ0gsOEJBQThCLEVBQUUsS0FBSztJQUNyQzs7T0FFRztJQUNILGtDQUFrQyxFQUFFLEtBQUs7SUFDekM7O09BRUc7SUFDSCwrQkFBK0IsRUFBRSxJQUFJO0lBQ3JDOztPQUVHO0lBQ0gscUNBQXFDLEVBQUUsSUFBSTtJQUMzQzs7T0FFRztJQUNILG9DQUFvQyxFQUFFLEtBQUs7SUFDM0M7O09BRUc7SUFDSCxnQ0FBZ0MsRUFBRSxJQUFJO0lBQ3RDOzs7OztPQUtHO0lBQ0gseUJBQXlCLEVBQUUsVUFBVTtJQUNyQzs7Ozs7T0FLRztJQUNILHNCQUFzQixFQUFFLE9BQU87SUFDL0I7OztPQUdHO0lBQ0gsaUJBQWlCLEVBQUUsVUFBVSxPQUFlO1FBQzFDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRDs7T0FFRztJQUNILFFBQVEsRUFBRSxPQUFPO0lBQ2pCOztPQUVHO0lBQ0gsUUFBUSxFQUFFLE1BQU07SUFDaEI7O09BRUc7SUFDSCxzQ0FBc0MsRUFBRSxFQUFFO0lBQzFDOzs7T0FHRztJQUNILHFDQUFxQyxFQUFFLEtBQUs7SUFDNUM7OztPQUdHO0lBQ0gsc0NBQXNDLEVBQUUsS0FBSztJQUM3Qzs7OztPQUlHO0lBQ0gsaUJBQWlCLEVBQUUsS0FBSztJQUN4Qix5QkFBeUIsRUFBRSxDQUFDO0lBQzVCOzs7T0FHRztJQUNILGdCQUFnQixFQUFFLFNBQVM7SUFDM0I7O09BRUc7SUFDSCxtQkFBbUIsRUFBRTtRQUNuQixRQUFRLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDeEIsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUMxQixJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDM0MsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQ3pCLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQztLQUM3QjtJQUNEOztPQUVHO0lBQ0gsT0FBTyxFQUFFLEVBQUU7SUFDWDs7T0FFRztJQUNILE9BQU8sRUFBRSxFQUFFO0lBQ1gsU0FBUyxFQVVOLFNBQVM7SUFDWixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLDJCQUEyQixFQUFFLElBQUk7SUFDakM7Ozs7O09BS0c7SUFDSCxXQUFXLEVBQUUsRUFBRTtJQUNmLFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxJQUFJO1FBQ1osSUFBSSxFQUFFLElBQUk7UUFDVixLQUFLLEVBQUUsSUFBSTtRQUNYLFFBQVEsRUFBRSxJQUFJO0tBQ2Y7SUFDRCxTQUFTLEVBQUU7UUFDVCxVQUFVLEVBQUU7WUFDVixPQUFPO1lBQ1AsTUFBTTtZQUNOLFVBQVU7WUFDVixnQkFBZ0I7WUFDaEIsT0FBTztZQUNQLE9BQU87WUFDUCxRQUFRO1lBQ1IsVUFBVTtZQUNWLE9BQU87WUFDUCxLQUFLO1lBQ0wsTUFBTTtZQUNOLE1BQU07WUFDTixLQUFLO1lBQ0wsTUFBTTtTQUNQO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsTUFBTTtZQUNOLGtCQUFrQjtZQUNsQixZQUFZO1lBQ1osaUJBQWlCO1lBQ2pCLGFBQWE7WUFDYixrQkFBa0I7WUFDbEIsVUFBVTtZQUNWLG9CQUFvQjtZQUNwQixVQUFVO1lBQ1YsY0FBYztZQUNkLGtCQUFrQjtZQUNsQixjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixlQUFlO1lBQ2YsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixTQUFTO1lBQ1QsY0FBYztZQUNkLGFBQWE7WUFDYixTQUFTO1lBQ1QsZUFBZTtZQUNmLG9CQUFvQjtZQUNwQixnQkFBZ0I7WUFDaEIsV0FBVztZQUNYLFFBQVE7WUFDUixjQUFjO1lBQ2QsYUFBYTtZQUNiLFFBQVE7WUFDUixTQUFTO1lBQ1Qsc0JBQXNCO1lBQ3RCLG9CQUFvQjtZQUNwQixVQUFVO1lBQ1YsTUFBTTtZQUNOLFVBQVU7WUFDVixZQUFZO1lBQ1osV0FBVztZQUNYLEtBQUs7WUFDTCxLQUFLO1lBQ0wsT0FBTztZQUNQLEtBQUs7WUFDTCxrQkFBa0I7WUFDbEIsY0FBYztZQUNkLGVBQWU7WUFDZixXQUFXO1lBQ1gsa0JBQWtCO1lBQ2xCLGtCQUFrQjtZQUNsQixlQUFlO1lBQ2YsT0FBTztZQUNQLE1BQU07U0FDUDtLQUNGO0NBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xTa0M7QUFHUztBQU83QztJQWFFLDZCQUNZLFNBQXlCLEVBQzNCLEtBQThCLEVBQzlCLGFBQXFCLEVBQ3JCLFlBQXlCO1FBQXpCLGdEQUF5QjtRQUpuQyxpQkFpQkM7UUFoQlcsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFDM0IsVUFBSyxHQUFMLEtBQUssQ0FBeUI7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFoQjNCLG1CQUFjLEdBQW1CLFNBQVMsQ0FBQztRQUMzQyxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUNwQixzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDekIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNuQiw0QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFFbEMscUJBQWdCLEdBRUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQVM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxVQUFDLGtCQUEyQjtZQUN0RCxJQUFHLGtCQUFrQjtnQkFDbkIsS0FBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7O2dCQUUzQix5REFBVSxDQUFDLGNBQVEsS0FBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQztRQUNGLElBQUksT0FBTyxjQUFjLEtBQUssV0FBVyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsVUFBQyxDQUFDLElBQUssWUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFkLENBQWMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0lBRVMsMkNBQWEsR0FBdkIsVUFBd0IsT0FBb0I7UUFDMUMsT0FBTztZQUNMLE1BQU0sRUFBRSxPQUFPLENBQUMsV0FBVztZQUMzQixNQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVc7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFUywrQ0FBaUIsR0FBM0I7UUFDRSxJQUFNLEtBQUssR0FBd0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztRQUN2QyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssWUFBWSxFQUFFO1lBQ3BDLEtBQUssSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDekU7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUywwQ0FBWSxHQUF0QixVQUF1QixJQUFvQjtRQUN6QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVPLDhDQUFnQixHQUF4QixVQUF5QixhQUFxQjtRQUM1QyxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUMvQyxJQUFHLGFBQWEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQ3pELGlCQUFpQixHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUN4RTtRQUNELE9BQU8sYUFBYSxDQUFDLFNBQVM7WUFDNUIsQ0FBQyxDQUFDLGlCQUFpQjtnQkFDbkIsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7SUFDakMsQ0FBQztJQUVPLDRDQUFjLEdBQXRCO1FBQUEsaUJBU0M7UUFSQyxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUzthQUNYLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDcEMsT0FBTyxDQUFDLFVBQUMsSUFBb0IsRUFBRSxLQUFhO1lBQzNDLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxhQUFhLENBQUMsWUFBWSxHQUFHLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckQsYUFBYSxDQUFDLFlBQVksR0FBRyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0Qsc0JBQVksbURBQWtCO2FBQTlCO1lBQ0UsT0FBTyxpRUFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUMsQ0FBQzs7O09BQUE7SUFDTyxxQ0FBTyxHQUFmO1FBQ0UsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFO1lBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzthQUMzQjtZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM3RDtJQUNILENBQUM7SUFFTSxxQ0FBTyxHQUFkO1FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNsQztJQUNILENBQUM7SUFDSCwwQkFBQztBQUFELENBQUM7O0FBRUQ7SUFBaUQsK0NBQW1CO0lBQ2xFLHFDQUNFLFNBQXlCLEVBQ3pCLEtBQThCLEVBQzlCLGFBQXFCLEVBQ3JCLFlBQXFCLEVBQ3JCLFlBQWlCO1FBQWpCLGdEQUFpQjtRQUxuQixZQU9FLGtCQUFNLFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxTQUdyRDtRQUZDLEtBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUM7UUFDdEMsS0FBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQzs7SUFDdkMsQ0FBQztJQUVTLG1EQUFhLEdBQXZCO1FBQ0UsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVk7WUFDbkMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWTtTQUNwQyxDQUFDO0lBQ0osQ0FBQztJQUVTLHVEQUFpQixHQUEzQjtRQUNFLElBQU0sS0FBSyxHQUF3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksS0FBSyxHQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQ2hELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxZQUFZLEVBQUU7WUFDcEMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN6RTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLGtEQUFZLEdBQXRCLFVBQXVCLElBQW9CO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBQ0gsa0NBQUM7QUFBRCxDQUFDLENBaENnRCxtQkFBbUIsR0FnQ25FOzs7Ozs7Ozs7Ozs7OztBQ3pJRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBeUM7QUFHekMsU0FBUyxlQUFlLENBQUMsQ0FBTSxFQUFFLENBQU07SUFDckMsSUFBTSxXQUFXLEdBQVcsVUFBVSxDQUFDO0lBQ3ZDLElBQU0sU0FBUyxHQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxJQUFNLFNBQVMsR0FBYSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEUsSUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRSxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLElBQU0sSUFBSSxHQUNSLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQzdDLENBQUM7QUFDRCxTQUFTLGFBQWEsQ0FBQyxPQUFlO0lBQ3BDLElBQUksQ0FBQyxDQUFDLGtEQUFRLElBQUksQ0FBQyxDQUFDLGtEQUFRLENBQUMsaUJBQWlCO1FBQzVDLE9BQU8sa0RBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBQ0QsU0FBUyxlQUFlO0lBQ3RCLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hELElBQU0sRUFBRSxHQUFXLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQzlDLElBQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsSUFBTSxRQUFRLEdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoRCxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUNELFNBQVMsY0FBYztJQUNyQixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNoRCxJQUFJLE9BQWEsY0FBZSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7UUFDM0QsSUFBTSxFQUFFLEdBQVcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDOUMsSUFBTSxJQUFJLEdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFNLE9BQU8sR0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQU0sSUFBSSxHQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsY0FBZSxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztLQUN4RTtJQUNELE9BQWEsY0FBZSxDQUFDLFVBQVUsQ0FBQztBQUMxQyxDQUFDO0FBQ0QsU0FBUyxrQkFBa0IsQ0FBQyxPQUFlLEVBQUUsUUFBZ0I7SUFDM0QsSUFBSTtRQUNGLElBQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkQsa0NBQWtDO1FBQ2xDLElBQU0sVUFBVSxHQUFXLE9BQU87YUFDL0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakIsa0RBQWtEO1FBQ2xELElBQU0sRUFBRSxHQUFnQixJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsSUFBTSxFQUFFLEdBQWUsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEM7UUFDRCxtREFBbUQ7UUFDbkQsSUFBTSxFQUFFLEdBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQ0UsT0FBTyxNQUFNLEtBQUssV0FBVztZQUM3QixNQUFNLENBQUMsU0FBUztZQUNWLE1BQU0sQ0FBQyxTQUFVLENBQUMsWUFBWSxDQUFDLEVBQ3JDO1lBQ00sTUFBTSxDQUFDLFNBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMzRDtLQUNGO0lBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRztBQUNuQixDQUFDO0FBQ0QsU0FBUyxRQUFRO0lBQ2YsT0FBTyxDQUNMLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUMzRSxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQ3ZCLE9BQW9CLEVBQ3BCLFNBQXFCO0lBQXJCLHlDQUFxQjtJQUVyQixJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRTtRQUNuQyxPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsSUFBTSxXQUFXLEdBQVksT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDN0QsSUFBTSxVQUFVLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FDakMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQ3JDLE1BQU0sQ0FBQyxXQUFXLENBQ25CLENBQUM7SUFDRixJQUFNLE1BQU0sR0FBVyxDQUFDLFNBQVMsQ0FBQztJQUNsQyxJQUFNLFNBQVMsR0FBVyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQ2pELElBQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFDdEMsSUFBTSxRQUFRLEdBQVcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUU1QyxJQUFNLE1BQU0sR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQyxJQUFNLFNBQVMsR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4RCxPQUFPLE1BQU0sSUFBSSxTQUFTLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsT0FBb0I7SUFDaEQsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE9BQU8sUUFBUSxDQUFDLGVBQWUsQ0FBQztLQUNqQztJQUNELElBQ0UsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWTtRQUMzQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSyxRQUFRO1lBQy9DLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsRUFDakQ7UUFDQSxPQUFPLE9BQU8sQ0FBQztLQUNoQjtJQUVELElBQ0UsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVztRQUN6QyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSyxRQUFRO1lBQy9DLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsRUFDakQ7UUFDQSxPQUFPLE9BQU8sQ0FBQztLQUNoQjtJQUVELE9BQU8sb0JBQW9CLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLEVBQVU7SUFDeEMsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPO0lBQ3RCLElBQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFPO0lBQ2hCLElBQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRTtRQUNsQixZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7S0FDdkQ7QUFDSCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxRQUFnQjtJQUM1QyxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQy9CLElBQUksU0FBUyxHQUFTLGtEQUFRLENBQUMsV0FBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDNUMsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUNoQixJQUFxQixFQUNyQixLQUFhLEVBQ2IsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLE9BQVk7SUFFWixJQUFJLENBQUMsT0FBTztRQUFFLE9BQU87SUFDckIsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUN0RDtJQUNELElBQU0sSUFBSSxHQUFRLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FDakIsOEJBQThCLEVBQzlCLFlBQVksRUFDWixHQUFHLEdBQUcsWUFBWSxDQUNuQixDQUFDO0FBQ0osQ0FBQztBQUVNLFNBQVMsTUFBTSxDQUFJLEtBQW9CO0lBQzVDLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7U0FBTTtRQUNMLE9BQWlCLEtBQU0sRUFBRSxDQUFDO0tBQzNCO0FBQ0gsQ0FBQztBQUVNLFNBQVMsT0FBTyxDQUFDLEtBQVU7SUFDaEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxFQUFFLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztLQUMxQjtJQUNELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDNUQsSUFBTSxVQUFVLEdBQVcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLElBQUksVUFBVSxJQUFJLEdBQUcsQ0FBQyxJQUFJLFVBQVUsSUFBSSxHQUFHLEVBQUU7WUFDakUsSUFBSTtnQkFDRixJQUFNLEdBQUcsR0FBVyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7YUFDeEI7WUFBQyxXQUFNLEdBQUc7U0FDWjtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBT0QsSUFBTSxtQkFBbUIsR0FBRyxvQkFBb0IsQ0FBQztBQUMxQyxTQUFTLGVBQWUsQ0FBQyxHQUFrQjtJQUNoRCxJQUFNLE9BQU8sR0FBUSxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ2hDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUztRQUFFLE9BQU87SUFDM0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRU0sU0FBUyxhQUFhLENBQUMsR0FBa0IsRUFBRSxPQUFpQztJQUNqRixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFVLEdBQUcsQ0FBQyxNQUFPLENBQUMsaUJBQWlCLENBQUMsS0FBSyxNQUFNLEVBQUU7UUFDbkUsT0FBTztLQUNSO0lBQ0QsSUFBTSxPQUFPLEdBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUNoQyxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU87SUFDckIsSUFBTSxJQUFJLEdBQVcsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQzlDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNkLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQzNFLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDNUM7S0FDRjtTQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1FBQ3JDLElBQUksT0FBTyxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDcEM7U0FBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7UUFDMUQsSUFBSSxPQUFPLENBQUMsSUFBSTtZQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNsQztBQUNILENBQUM7QUFFTSxTQUFTLGVBQWUsQ0FBQyxHQUFrQixFQUFFLE9BQXVEO0lBQXZELHNDQUFxQyxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQ3pHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQVUsR0FBRyxDQUFDLE1BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLE1BQU0sRUFBRTtRQUNuRSxPQUFPO0tBQ1I7SUFDRCxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUM7SUFDcEMsSUFBTSxjQUFjLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEMsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO1FBQ3RCLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDekI7SUFDRCxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDdkMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0tBQ3RCO0FBQ0gsQ0FBQztBQUNELFNBQVMsdUJBQXVCLENBQUMsT0FBb0IsRUFBRSxnQkFBd0M7SUFDN0YsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPO0lBQ3JCLElBQUksQ0FBQyxnQkFBZ0I7UUFBRSxnQkFBZ0IsR0FBRyxVQUFDLEdBQVksSUFBTyxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVyRyxJQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hJLENBQUM7QUFDRCxTQUFTLGdCQUFnQixDQUFDLEtBQVU7SUFDbEMsT0FBTyxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQztBQUN0QyxDQUFDO0FBQ0QsU0FBUyxlQUFlLENBQUMsS0FBVTtJQUNqQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzFCLENBQUM7QUFDRCxTQUFTLGlCQUFpQixDQUFDLEdBQVc7SUFDcEMsSUFBTSxFQUFFLEdBQUcsbUJBQW1CLENBQUM7SUFDL0IsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsRUFBZTtJQUN0QyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztBQUM3RixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxFQUFlO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLENBQ1AsRUFBRSxDQUFDLFdBQVc7UUFDZCxFQUFFLENBQUMsWUFBWTtRQUNmLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQzNCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxPQUFvQixFQUFFLFVBQXlCO0lBQzdFLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNiLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBUyxJQUFJLFFBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFuRCxDQUFtRCxDQUFDLEVBQUU7WUFDdEYsT0FBTyxPQUFPLENBQUM7U0FDaEI7YUFBTTtZQUNMLE9BQU8sc0JBQXNCLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNsRTtLQUNGO0FBQ0gsQ0FBQztBQUNNLFNBQVMsdUJBQXVCLENBQUMsT0FBWTtJQUNsRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDaEYsSUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTFDLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFaEUsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekQsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDM0UsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMzQjtBQUNILENBQUM7QUFDRCxTQUFTLFdBQVcsQ0FBQyxHQUFRLEVBQUUsSUFBUztJQUN0QyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU87SUFDMUIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTztJQUNyQyxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNuQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUTtnQkFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDL0I7YUFBTTtZQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDbkI7S0FDRjtBQUNILENBQUM7QUFzQkM7Ozs7Ozs7Ozs7OztBQzVURixtRDs7Ozs7Ozs7Ozs7QUNBQSx1RDs7Ozs7Ozs7Ozs7QUNBQSx5RCIsImZpbGUiOiJzdXJ2ZXktcmVhY3QtdWkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwic3VydmV5LXJlYWN0LXVpXCIsIFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCIsIFwic3VydmV5LWNvcmVcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic3VydmV5LXJlYWN0LXVpXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5UmVhY3RcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdLCByb290W1wiU3VydmV5XCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy9yZWFjdC11aS50c1wiKTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG4iLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsImV4cG9ydCB7IFN1cnZleU1vZGVsLCBNb2RlbCwgU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmV4cG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5leHBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24sIHN1cnZleVN0cmluZ3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbiIsIi8vIHJlYWN0XG5leHBvcnQgeyBTdXJ2ZXksIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVwiO1xuZXhwb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RzdXJ2ZXltb2RlbFwiO1xuZXhwb3J0IHsgU3VydmV5TmF2aWdhdGlvbkJhc2UgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuZXhwb3J0IHsgU3VydmV5VGltZXJQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHRpbWVycGFuZWxcIjtcbmV4cG9ydCB7IFN1cnZleVBhZ2UgfSBmcm9tIFwiLi4vcmVhY3QvcGFnZVwiO1xuZXhwb3J0IHsgU3VydmV5Um93IH0gZnJvbSBcIi4uL3JlYWN0L3Jvd1wiO1xuZXhwb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvcGFuZWxcIjtcbmV4cG9ydCB7IFN1cnZleUZsb3dQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9mbG93LXBhbmVsXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbixcbiAgU3VydmV5RWxlbWVudEVycm9ycyxcbiAgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsLFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvblwiO1xuZXhwb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSxcbiAgU3VydmV5UXVlc3Rpb25Db21tZW50LFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94LFxuICBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94SXRlbSxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY2hlY2tib3hcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uUmFua2luZyxcbiAgU3VydmV5UXVlc3Rpb25SYW5raW5nSXRlbSxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFua2luZ1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIH0gZnJvbSBcIi4uL3JlYWN0L2Ryb3Bkb3duLWl0ZW1cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlIH0gZnJvbSBcIi4uL3JlYWN0L2Ryb3Bkb3duLWJhc2VcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25UYWdib3hJdGVtIH0gZnJvbSBcIi4uL3JlYWN0L3RhZ2JveC1pdGVtXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblRhZ2JveCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RhZ2JveFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93blNlbGVjdCB9IGZyb20gXCIuLi9yZWFjdC9kcm9wZG93bi1zZWxlY3RcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uTWF0cml4LFxuICBTdXJ2ZXlRdWVzdGlvbk1hdHJpeFJvdyxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkh0bWwgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9odG1sXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkZpbGUgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9maWxlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX211bHRpcGxldGV4dFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25UZXh0IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGV4dFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbkNoZWNrYm94IH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW4tY2hlY2tib3hcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhblJhZGlvIH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW4tcmFkaW9cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRW1wdHkgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9lbXB0eVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGwgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljLCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNBZGRCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pY1wiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3MgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc1wiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3NCdXR0b25zIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NCdXR0b25zXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhdGluZyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhdGluZ1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25SYXRpbmdEcm9wZG93biB9IGZyb20gXCIuLi9yZWFjdC9yYXRpbmctZHJvcGRvd25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2V4cHJlc3Npb25cIjtcbmV4cG9ydCB7IFBvcHVwU3VydmV5LCBTdXJ2ZXlXaW5kb3cgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3QtcG9wdXAtc3VydmV5XCI7XG5leHBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmV4cG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vcmVhY3QvZWxlbWVudC1mYWN0b3J5XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIH0gZnJvbSBcIi4uL3JlYWN0L2ltYWdlcGlja2VyXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkltYWdlIH0gZnJvbSBcIi4uL3JlYWN0L2ltYWdlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCB9IGZyb20gXCIuLi9yZWFjdC9zaWduYXR1cmVwYWRcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9idXR0b25ncm91cFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25DdXN0b20sIFN1cnZleVF1ZXN0aW9uQ29tcG9zaXRlIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY3VzdG9tXCI7XG5cbmV4cG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcG9wdXAvcG9wdXBcIjtcbmV4cG9ydCB7IExpc3QgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9saXN0L2xpc3RcIjtcbmV4cG9ydCB7IFRpdGxlQWN0aW9ucyB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnNcIjtcbmV4cG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcbmV4cG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuZXhwb3J0IHsgTG9nb0ltYWdlIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9sb2dvLWltYWdlXCI7XG5leHBvcnQgeyBTdXJ2ZXlIZWFkZXIgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL3N1cnZleS1oZWFkZXJcIjtcbmV4cG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUmVtb3ZlQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXJlbW92ZS1idG5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0XCI7XG5leHBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWFjdGlvbnMvc3VydmV5LW5hdi1idXR0b25cIjtcblxuZXhwb3J0IHsgTWF0cml4Um93IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4L3Jvd1wiO1xuZXhwb3J0IHsgU2tlbGV0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9za2VsZXRvblwiO1xuXG5leHBvcnQgeyBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIgfSBmcm9tIFwiLi4vcmVhY3Qvc3RyaW5nLXZpZXdlclwiO1xuZXhwb3J0IHsgU3VydmV5TG9jU3RyaW5nRWRpdG9yIH0gZnJvbSBcIi4uL3JlYWN0L3N0cmluZy1lZGl0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi91dGlscy9yZXNwb25zaXZpdHktbWFuYWdlclwiO1xuZXhwb3J0IHsgdW53cmFwIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5cbi8vVW5jb21tZW50IHRvIGluY2x1ZGUgdGhlIFwiZGF0ZVwiIHF1ZXN0aW9uIHR5cGUuXG4vL2V4cG9ydCB7ZGVmYXVsdCBhcyBTdXJ2ZXlRdWVzdGlvbkRhdGV9IGZyb20gXCIuLi9wbHVnaW5zL3JlYWN0L3JlYWN0cXVlc3Rpb25kYXRlXCI7XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9yZWFjdC11aS1tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29yZS1leHBvcnRcIjtcblxuaW1wb3J0IHsgY2hlY2tMaWJyYXJ5VmVyc2lvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5jaGVja0xpYnJhcnlWZXJzaW9uKGAke3Byb2Nlc3MuZW52LlZFUlNJT059YCwgXCJzdXJ2ZXkta25vY2tvdXQtdWlcIik7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gfSBmcm9tIFwiLi9ib29sZWFuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgY29uc3QgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXt0aGlzLmNoZWNrUmVmfVxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5jaGVja2VkVmFsdWUgPT09IG51bGxcbiAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICA6IHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNvbnRyb2xDaGVja2JveH1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSB8fCBmYWxzZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5zdmdJY29uID9cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uc3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgIDwvc3ZnPjpudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjaGVja1wiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLnRpdGxlTG9jYXRpb24gPT09IFwiaGlkZGVuXCIgJiYgKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ3NzKGZhbHNlKX0+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY0Rpc3BsYXlMYWJlbCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcbiAgXCJzdi1ib29sZWFuLWNoZWNrYm94XCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQm9vbGVhbkNoZWNrYm94LCBwcm9wcyk7XG4gIH1cbik7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcImJvb2xlYW5cIixcbiAgXCJjaGVja2JveFwiLFxuICBcInN2LWJvb2xlYW4tY2hlY2tib3hcIlxuKTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4vYm9vbGVhblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuUmFkaW8gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyUmFkaW9JdGVtKHZhbHVlOiBhbnksIGxvY1RleHQ6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9eyB0aGlzLnF1ZXN0aW9uLmdldFJhZGlvSXRlbUNsYXNzKGNzc0NsYXNzZXMsIHZhbHVlKSB9PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPSB7IGNzc0NsYXNzZXMucmFkaW9MYWJlbCB9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIG5hbWUgPSB7IHRoaXMucXVlc3Rpb24ubmFtZSB9XG4gICAgICAgICAgICB2YWx1ZSA9IHsgdmFsdWUgfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieSA9IHsgdGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnkgfVxuICAgICAgICAgICAgY2hlY2tlZCA9IHsgdmFsdWUgPT09IHRoaXMucXVlc3Rpb24udmFsdWUgfVxuICAgICAgICAgICAgZGlzYWJsZWQgPSB7IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH1cbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IHsgY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbCB9XG4gICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuaGFuZGxlT25DaGFuZ2UgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxSYWRpb0RlY29yYXRvcj9cbiAgICAgICAgICAgICg8c3BhbiBjbGFzc05hbWU9eyBjc3NDbGFzc2VzLm1hdGVyaWFsUmFkaW9EZWNvcmF0b3IgfT5cbiAgICAgICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAoPHN2ZyBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbVJhZGlvRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICA8L3N2Zz4pOm51bGx9XG4gICAgICAgICAgICA8L3NwYW4+KTpudWxsfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0geyBjc3NDbGFzc2VzLnJhZGlvQ29udHJvbExhYmVsIH0+XG4gICAgICAgICAgICB7IHRoaXMucmVuZGVyTG9jU3RyaW5nKGxvY1RleHQpIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQubmF0aXZlRXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290UmFkaW99PlxuICAgICAgICA8ZmllbGRzZXQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT0geyBjc3NDbGFzc2VzLnJhZGlvRmllbGRzZXQgfT5cbiAgICAgICAgICB7IHRoaXMucmVuZGVyUmFkaW9JdGVtKGZhbHNlLCB0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsRmFsc2UpIH1cbiAgICAgICAgICB7IHRoaXMucmVuZGVyUmFkaW9JdGVtKHRydWUsIHRoaXMucXVlc3Rpb24ubG9jTGFiZWxUcnVlKSB9XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtYm9vbGVhbi1yYWRpb1wiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5SYWRpbywgcHJvcHMpO1xuICB9XG4pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwicmFkaW9cIixcbiAgXCJzdi1ib29sZWFuLXJhZGlvXCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQm9vbGVhbk1vZGVsLCBDc3NDbGFzc0J1aWxkZXIsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGNoZWNrUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2sgPSB0aGlzLmhhbmRsZU9uQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU9uTGFiZWxDbGljayA9IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPblN3aXRjaENsaWNrID0gdGhpcy5oYW5kbGVPblN3aXRjaENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbktleURvd24gPSB0aGlzLmhhbmRsZU9uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY2hlY2tSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25Cb29sZWFuTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkJvb2xlYW5Nb2RlbDtcbiAgfVxuICAvKlxuICBwcml2YXRlIGdldCBhbGxvd0NsaWNrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSAmJiAhdGhpcy5pc0Rpc3BsYXlNb2RlO1xuICB9XG4gICovXG4gIHByaXZhdGUgZG9DaGVjayh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZG9DaGVjayhldmVudC50YXJnZXQuY2hlY2tlZCk7XG4gIH1cbiAgaGFuZGxlT25DbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbkxhYmVsQ2xpY2soZXZlbnQsIHRydWUpO1xuICB9XG4gIGhhbmRsZU9uU3dpdGNoQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25Td2l0Y2hDbGlja01vZGVsKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfVxuICBoYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQ6IGFueSwgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uTGFiZWxDbGljayhldmVudCwgdmFsdWUpO1xuICB9XG4gIGhhbmRsZU9uS2V5RG93bihldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbktleURvd25Db3JlKGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbikgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jaGVja1JlZi5jdXJyZW50O1xuICAgIGlmIChlbCkge1xuICAgICAgZWwuaW5kZXRlcm1pbmF0ZSA9IHRoaXMucXVlc3Rpb24uaXNJbmRldGVybWluYXRlO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2wgPSBlbDtcbiAgICBzdXBlci51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgY29uc3QgaXRlbUNsYXNzOiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1Dc3MoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0gb25LZXlEb3duPXt0aGlzLmhhbmRsZU9uS2V5RG93bn0+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2l0ZW1DbGFzc30gb25DbGljaz17dGhpcy5oYW5kbGVPbkNsaWNrfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17dGhpcy5jaGVja1JlZn1cbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiB0aGlzLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jb250cm9sfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24uY2hlY2tlZFZhbHVlIHx8IGZhbHNlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ3NzKGZhbHNlKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQsIGZhbHNlKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NMYWJlbEZhbHNlKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc3dpdGNofSBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uU3dpdGNoQ2xpY2t9PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNsaWRlcn0+XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmlzRGV0ZXJtaW5hdGVkICYmIGNzc0NsYXNzZXMuc2xpZGVyVGV4dCA/XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc2xpZGVyVGV4dH0+eyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmdldENoZWNrZWRMYWJlbCgpKSB9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ3NzKHRydWUpfVxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB0aGlzLmhhbmRsZU9uTGFiZWxDbGljayhldmVudCwgdHJ1ZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTGFiZWxUcnVlKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJib29sZWFuXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gXCIuLi9wb3B1cC9wb3B1cFwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXJJdGVtIH0gZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFySXRlbURyb3Bkb3duIGV4dGVuZHMgU3VydmV5QWN0aW9uQmFySXRlbSB7XHJcbiAgcHJpdmF0ZSB2aWV3TW9kZWw6IEFjdGlvbkRyb3Bkb3duVmlld01vZGVsO1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMudmlld01vZGVsID0gbmV3IEFjdGlvbkRyb3Bkb3duVmlld01vZGVsKHRoaXMuaXRlbSk7XHJcbiAgfVxyXG4gIHJlbmRlckJ1dHRvbkNvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBidXR0b25Db250ZW50ID0gc3VwZXIucmVuZGVyQnV0dG9uQ29udGVudCgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPD5cclxuICAgICAgICB7YnV0dG9uQ29udGVudH1cclxuICAgICAgICA8UG9wdXAgbW9kZWw9e3RoaXMuaXRlbS5wb3B1cE1vZGVsfT48L1BvcHVwPlxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xyXG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcclxuICAgIHRoaXMudmlld01vZGVsLmRpc3Bvc2UoKTtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhckl0ZW1Ecm9wZG93biwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBCYXNlLCBBY3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljayB9IGZyb20gXCIuLi8uLi9yZWFjdFN1cnZleVwiO1xyXG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XHJcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhclNlcGFyYXRvciB9IGZyb20gXCIuL2FjdGlvbi1iYXItc2VwYXJhdG9yXCI7XHJcblxyXG5pbnRlcmZhY2UgSUFjdGlvbkJhckl0ZW1Qcm9wcyB7XHJcbiAgaXRlbTogQWN0aW9uO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUFjdGlvbkJhckl0ZW1Qcm9wcywgYW55PiB7XHJcbiAgZ2V0IGl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcblxyXG4gIHJlbmRlckVsZW1lbnQoKSB7XHJcbiAgICAvL3JlZmFjdG9yXHJcbiAgICBjb25zdCBpdGVtQ2xhc3MgPSB0aGlzLml0ZW0uZ2V0QWN0aW9uUm9vdENzcygpO1xyXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5pdGVtLm5lZWRTZXBhcmF0b3IgPyAoXHJcbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3I+PC9TdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3I+XHJcbiAgICApIDogbnVsbDtcclxuXHJcbiAgICBjb25zdCBpdGVtQ29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxyXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3YtYWN0aW9uLWJhci1pdGVtXCIsXHJcbiAgICAgIHtcclxuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17aXRlbUNsYXNzfSBpZD17dGhpcy5pdGVtLmlkfT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWFjdGlvbl9fY29udGVudFwiPlxyXG4gICAgICAgICAge3NlcGFyYXRvcn1cclxuICAgICAgICAgIHtpdGVtQ29tcG9uZW50fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFySXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxyXG4gIElBY3Rpb25CYXJJdGVtUHJvcHMsXHJcbiAgYW55XHJcbj4ge1xyXG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcblxyXG4gIHJlbmRlckVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gPD57dGhpcy5yZW5kZXJJbm5lckJ1dHRvbigpfTwvPjtcclxuICB9XHJcblxyXG4gIHJlbmRlclRleHQoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXRlbS5oYXNUaXRsZSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB0aXRsZUNsYXNzID0gdGhpcy5pdGVtLmdldEFjdGlvbkJhckl0ZW1UaXRsZUNzcygpO1xyXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17dGl0bGVDbGFzc30+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyQnV0dG9uQ29udGVudCgpIHtcclxuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlclRleHQoKTtcclxuICAgIGNvbnN0IHN2Z0ljb24gPSAhIXRoaXMuaXRlbS5pY29uTmFtZSA/IChcclxuICAgICAgPFN2Z0ljb25cclxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuaXRlbS5jc3NDbGFzc2VzLml0ZW1JY29ufVxyXG4gICAgICAgIHNpemU9e3RoaXMuaXRlbS5pY29uU2l6ZX1cclxuICAgICAgICBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfVxyXG4gICAgICAgIHRpdGxlPXt0aGlzLml0ZW0udG9vbHRpcCB8fCB0aGlzLml0ZW0udGl0bGV9XHJcbiAgICAgID48L1N2Z0ljb24+XHJcbiAgICApIDogbnVsbDtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAge3N2Z0ljb259XHJcbiAgICAgICAge3RleHR9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcklubmVyQnV0dG9uKCkge1xyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5pdGVtLmdldEFjdGlvbkJhckl0ZW1Dc3MoKTtcclxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5pdGVtLnRvb2x0aXAgfHwgdGhpcy5pdGVtLnRpdGxlO1xyXG4gICAgY29uc3QgYnV0dG9uQ29udGVudCA9IHRoaXMucmVuZGVyQnV0dG9uQ29udGVudCgpO1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLml0ZW0uZGlzYWJsZVRhYlN0b3AgPyAtMSA6IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IGF0dGFjaEtleTJjbGljayhcclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGRpc2FibGVkPXt0aGlzLml0ZW0uZGlzYWJsZWR9XHJcbiAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5pdGVtLmFjdGlvbih0aGlzLml0ZW0pfVxyXG4gICAgICAgIHRpdGxlPXt0aXRsZX1cclxuICAgICAgICB0YWJJbmRleD17dGFiSW5kZXh9XHJcbiAgICAgID5cclxuICAgICAgICB7YnV0dG9uQ29udGVudH1cclxuICAgICAgPC9idXR0b24+LCBudWxsLCB7IHByb2Nlc3NFc2M6IGZhbHNlIH0pO1xyXG5cclxuICAgIHJldHVybiBidXR0b247XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXItaXRlbVwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJJdGVtLCBwcm9wcyk7XHJcbn0pO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIHZhciBjbGFzc05hbWUgPSBgc3YtYWN0aW9uLWJhci1zZXBhcmF0b3IgJHt0aGlzLnByb3BzLmNzc0NsYXNzZXN9YDtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+PC9kaXY+O1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIEFjdGlvbixcbiAgQWN0aW9uQ29udGFpbmVyXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQWRhcHRpdmVBY3Rpb25Db250YWluZXIgfSBmcm9tIFwiLi4vLi4vLi4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXJcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbVwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItc2VwYXJhdG9yXCI7XG5cbmludGVyZmFjZSBJQWN0aW9uQmFyUHJvcHMge1xuICBtb2RlbDogQWN0aW9uQ29udGFpbmVyPEFjdGlvbj47XG4gIGhhbmRsZUNsaWNrPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUFjdGlvbkJhciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElBY3Rpb25CYXJQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSUFjdGlvbkJhclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFuZGxlQ2xpY2soKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlQ2xpY2sgIT09IHVuZGVmaW5lZCA/IHRoaXMucHJvcHMuaGFuZGxlQ2xpY2sgOiB0cnVlO1xuICB9XG5cbiAgZ2V0IG1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoIXRoaXMubW9kZWwuaGFzQWN0aW9ucykgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICB0aGlzLm1vZGVsLmluaXRSZXNwb25zaXZpdHlNYW5hZ2VyKGNvbnRhaW5lcik7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLm1vZGVsLmhhc0FjdGlvbnMpIHtcbiAgICAgIHRoaXMubW9kZWwucmVzZXRSZXNwb25zaXZpdHlNYW5hZ2VyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogYW55IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnJlbmRlckl0ZW1zKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5nZXRSb290Q3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2sgPyBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9IDogdW5kZWZpbmVkfVxuICAgICAgPlxuICAgICAgICB7aXRlbXN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwucmVuZGVyZWRBY3Rpb25zLm1hcChcbiAgICAgIChpdGVtOiBBY3Rpb24sIGl0ZW1JbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFN1cnZleUFjdGlvbiBpdGVtPXtpdGVtfSBrZXk9e1wiaXRlbVwiICsgaXRlbUluZGV4fT48L1N1cnZleUFjdGlvbj5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtYWN0aW9uLWJhclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgU3VydmV5QWN0aW9uQmFyLFxuICAgIChwcm9wcyBhcyBhbnkpIGFzIElBY3Rpb25CYXJQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjbGFzcyBCcmFuZEluZm8gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWJyYW5kLWluZm9cIj5cbiAgICAgICAgPGEgY2xhc3NOYW1lPVwic3YtYnJhbmQtaW5mb19fbG9nb1wiIGhyZWY9XCJodHRwczovL3N1cnZleWpzLmlvLz91dG1fc291cmNlPWJ1aWx0LWluX2xpbmtzJnV0bV9tZWRpdW09b25saW5lX3N1cnZleV90b29sJnV0bV9jYW1wYWlnbj1sYW5kaW5nX3BhZ2VcIj48aW1nIHNyYz1cImh0dHBzOi8vc3VydmV5anMuaW8vQ29udGVudC9JbWFnZXMvcG93ZXJlZGJ5LnN2Z1wiLz48L2E+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYnJhbmQtaW5mb19fdGV4dFwiPlRyeSBhbmQgc2VlIGhvdyBlYXN5IGl0IGlzIHRvIDxhIGhyZWY9XCJodHRwczovL3N1cnZleWpzLmlvL2NyZWF0ZS1zdXJ2ZXk/dXRtX3NvdXJjZT1idWlsdC1pbl9saW5rcyZ1dG1fbWVkaXVtPW9ubGluZV9zdXJ2ZXlfdG9vbCZ1dG1fY2FtcGFpZ249Y3JlYXRlX3N1cnZleVwiPmNyZWF0ZSBhIHN1cnZleTwvYT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1icmFuZC1pbmZvX190ZXJtc1wiPjxhIGhyZWY9XCJodHRwczovL3N1cnZleWpzLmlvL1Rlcm1zT2ZVc2VcIj5UZXJtcyBvZiBVc2UgJiBQcml2YWN5IFN0YXRlbWVudDwvYT48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vLi4vcmVhY3RTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xyXG5cclxuaW50ZXJmYWNlIElMaXN0SXRlbVByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG4gIGl0ZW06IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpc3RJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUxpc3RJdGVtUHJvcHMsIGFueT4ge1xyXG4gIGdldCBtb2RlbCgpOiBMaXN0TW9kZWwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XHJcbiAgfVxyXG4gIGdldCBpdGVtKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBoYW5kbGVLZXlkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcclxuICB9O1xyXG4gIGdldFN0YXRlRWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGlmICghdGhpcy5pdGVtKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXNWaXNpYmxlID0gdGhpcy5tb2RlbC5pc0l0ZW1WaXNpYmxlKHRoaXMuaXRlbSk7XHJcbiAgICBjb25zdCBzdHlsZSA9IHtcclxuICAgICAgcGFkZGluZ0xlZnQ6IHRoaXMubW9kZWwuZ2V0SXRlbUluZGVudCh0aGlzLml0ZW0pLFxyXG4gICAgICBkaXNwbGF5OiBpc1Zpc2libGUgPyBudWxsIDogXCJub25lXCIsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5tb2RlbC5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBbXTtcclxuICAgIGlmICghdGhpcy5pdGVtLmNvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpY29uID0gdGhpcy5pdGVtLmljb25OYW1lID8gKFxyXG4gICAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgICBrZXk9ezF9XHJcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlcy5pdGVtSWNvbn1cclxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9XHJcbiAgICAgICAgICBzaXplPXsyNH1cclxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMuaXRlbS50aXRsZX1cclxuICAgICAgICA+PC9TdmdJY29uPlxyXG4gICAgICApIDogbnVsbDtcclxuICAgICAgY29udGVudC5wdXNoKGljb24pO1xyXG4gICAgICBjb250ZW50LnB1c2goPHNwYW4ga2V5PXsyfT57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGVudC5wdXNoKFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0aGlzLml0ZW0uY29tcG9uZW50LCB7IGl0ZW06IHRoaXMuaXRlbSwga2V5OiB0aGlzLml0ZW0uaWQgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXHJcbiAgICAgIDxsaVxyXG4gICAgICAgIHN0eWxlPXtzdHlsZX1cclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cclxuICAgICAgICByb2xlPVwib3B0aW9uXCJcclxuICAgICAgICBhcmlhLXNlbGVjdGVkPXt0aGlzLm1vZGVsLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSl9XHJcbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kZWwub25JdGVtQ2xpY2sodGhpcy5pdGVtKTtcclxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH19XHJcbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCwgdGhpcy5pdGVtKX1cclxuICAgICAgPlxyXG4gICAgICAgIHtjb250ZW50fVxyXG4gICAgICA8L2xpPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3QtaXRlbVwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMaXN0SXRlbSwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBMaXN0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiLi9saXN0LWl0ZW1cIjtcclxuXHJcbmludGVyZmFjZSBJTGlzdFByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMaXN0UHJvcHMsIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGZpbHRlcmVkVGV4dDogdGhpcy5tb2RlbC5maWx0ZXJlZFRleHQgfHwgXCJcIlxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0IG1vZGVsKCk6IExpc3RNb2RlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcclxuICB9XHJcbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLm1vZGVsLm9uS2V5RG93bihldmVudCk7XHJcbiAgfTtcclxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcclxuICB9XHJcbiAgcmVuZGVyRWxlbWVudCgpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlcy5yb290fT5cclxuICAgICAgICB7dGhpcy5zZWFyY2hFbGVtZW50Q29udGVudCgpfVxyXG4gICAgICAgIHt0aGlzLmVtcHR5Q29udGVudCgpfVxyXG4gICAgICAgIDx1bFxyXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXMuaXRlbXNDb250YWluZXJ9XHJcbiAgICAgICAgICByb2xlPVwibGlzdGJveFwiXHJcbiAgICAgICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtpdGVtc31cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIHJlbmRlckl0ZW1zKCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucztcclxuICAgIGlmICghaXRlbXMpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBJQWN0aW9uLCBpdGVtSW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxMaXN0SXRlbSBtb2RlbD17dGhpcy5tb2RlbH0gaXRlbT17aXRlbX0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0+PC9MaXN0SXRlbT5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoRWxlbWVudENvbnRlbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwubmVlZEZpbHRlcikgcmV0dXJuIG51bGw7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3Qgb25DaGFuZ2UgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLmZpbHRlcmVkVGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgb25LZXlVcCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGVsLmdvVG9JdGVtcyhlKTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3NDbGFzc2VzLmZpbHRlcn0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3NDbGFzc2VzLmZpbHRlckljb259PlxyXG4gICAgICAgICAgICA8U3ZnSWNvblxyXG4gICAgICAgICAgICAgIGljb25OYW1lPXtcImljb24tc2VhcmNoXCJ9XHJcbiAgICAgICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9TdmdJY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlcy5maWx0ZXJJbnB1dH1cclxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5maWx0ZXJlZFRleHRQbGFjZWhvbGRlcn1cclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMubW9kZWwuZmlsdGVyZWRUZXh0UGxhY2Vob2xkZXJ9XHJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmZpbHRlcmVkVGV4dH1cclxuICAgICAgICAgICAgb25LZXlVcD17b25LZXlVcH1cclxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxyXG4gICAgICAgICAgPjwvaW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGVtcHR5Q29udGVudCgpIHtcclxuICAgIGlmICghdGhpcy5tb2RlbC5pc0VtcHR5KSByZXR1cm4gbnVsbDtcclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXMuZW1wdHlDb250YWluZXJ9PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXMuZW1wdHlUZXh0fSBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmVtcHR5TWVzc2FnZX0+e3RoaXMubW9kZWwuZW1wdHlNZXNzYWdlfTwvZGl2PlxyXG4gICAgICA8L2Rpdj4pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1saXN0XCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExpc3QsIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiwgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uLy4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblNob3dIaWRlQ2xpY2sgPSB0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnJvdztcbiAgfVxuICBoYW5kbGVPblNob3dIaWRlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucm93LnNob3dIaWRlRGV0YWlsUGFuZWxDbGljaygpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXNFeHBhbmRlZCA9IHRoaXMucm93LmlzRGV0YWlsUGFuZWxTaG93aW5nO1xuICAgIHZhciBhcmlhRXhwYW5kZWQgPSBpc0V4cGFuZGVkO1xuICAgIHZhciBhcmlhQ29udHJvbHMgPSBpc0V4cGFuZGVkID8gdGhpcy5yb3cuZGV0YWlsUGFuZWxJZCA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25TaG93SGlkZUNsaWNrfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxCdXR0b25Dc3ModGhpcy5yb3cpfVxuICAgICAgICBhcmlhLWV4cGFuZGVkPXthcmlhRXhwYW5kZWR9XG4gICAgICAgIGFyaWEtY29udHJvbHM9e2FyaWFDb250cm9sc31cbiAgICAgID5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxJY29uQ3NzKHRoaXMucm93KX1cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEljb25JZCh0aGlzLnJvdyl9XG4gICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XG4gICAgICAgID5cbiAgICAgICAgPC9TdmdJY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXgtZGV0YWlsLWJ1dHRvblwiLFxuICBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYodGhpcy5xdWVzdGlvbi5pY29uRHJhZ0VsZW1lbnQpIHtcbiAgICAgIHJldHVybiAoPHN2ZyBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kcmFnRWxlbWVudERlY29yYXRvcn0gPlxuICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pY29uRHJhZ0VsZW1lbnR9PjwvdXNlPlxuICAgICAgPC9zdmc+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICg8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uRHJhZ30gLz4pO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXgtZHJhZy1kcm9wLWljb25cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4uLy4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2sgPSB0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucm93O1xuICB9XG4gIGhhbmRsZU9uUm93UmVtb3ZlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVtb3ZlUm93VUkodGhpcy5yb3cpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcmVtb3ZlUm93VGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jUmVtb3ZlUm93VGV4dCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFJlbW92ZVJvd0J1dHRvbkNzcygpfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICA+XG4gICAgICAgIHtyZW1vdmVSb3dUZXh0fVxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uUmVtb3ZlfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXgtcmVtb3ZlLWJ1dHRvblwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElNYXRyaXhSb3dQcm9wcyB7XG4gIG1vZGVsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c7XG4gIHBhcmVudE1hdHJpeDogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeFJvdyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElNYXRyaXhSb3dQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJTWF0cml4Um93UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgZ2V0IHBhcmVudE1hdHJpeCgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wYXJlbnRNYXRyaXg7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qb2ludGVyRG93bkhhbmRsZXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucGFyZW50TWF0cml4Lm9uUG9pbnRlckRvd24oZXZlbnQubmF0aXZlRXZlbnQsIHRoaXMubW9kZWwucm93KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWw7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0clxuICAgICAgICBjbGFzc05hbWU9e21vZGVsLmNsYXNzTmFtZX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1tYXRyaXgtcm93PXttb2RlbC5yb3cgJiYgbW9kZWwucm93LmlkfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5vblBvaW50ZXJEb3duSGFuZGxlcihldmVudCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1yb3dcIixcbiAgKHByb3BzOiBJTWF0cml4Um93UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChNYXRyaXhSb3csIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiAodGhpcy5wcm9wcy5pdGVtICYmIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uKSB8fCB0aGlzLnByb3BzLmRhdGEucXVlc3Rpb247XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUGFuZWxVSSgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uY2FuQWRkUGFuZWwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0QWRkQnV0dG9uQ3NzKCl9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9ID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkVGV4dH0+e3RoaXMucXVlc3Rpb24ucGFuZWxBZGRUZXh0fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLWFkZC1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB9IGZyb20gXCIuL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCBoYW5kbGVDbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi5nb1RvTmV4dFBhbmVsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHRpdGxlPXt0aGlzLnF1ZXN0aW9uLnBhbmVsTmV4dFRleHR9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXROZXh0QnV0dG9uQ3NzKCl9PlxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCdG5JY29ufVxuICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICA+XG4gICAgICAgIDwvU3ZnSWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLW5leHQtYnRuXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLmdvVG9QcmV2UGFuZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgdGl0bGU9e3RoaXMucXVlc3Rpb24ucGFuZWxQcmV2VGV4dH0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFByZXZCdXR0b25Dc3MoKX0+XG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0J0bkljb259XG4gICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XG4gICAgICAgID5cbiAgICAgICAgPC9TdmdJY29uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtcHJldi1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUZXh0fT5cbiAgICAgIHt0aGlzLnF1ZXN0aW9uLnByb2dyZXNzVGV4dH1cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0XCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0LCBwcm9wcyk7XG4gIH1cbik7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pY1wiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNSZW1vdmVCdXR0b24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCBoYW5kbGVDbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVQYW5lbFVJKHRoaXMucHJvcHMuZGF0YS5pbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRQYW5lbFJlbW92ZUJ1dHRvbkNzcygpfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlVGV4dH1cbiAgICAgICAgPnt0aGlzLnF1ZXN0aW9uLnBhbmVsUmVtb3ZlVGV4dH08L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZX1cbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLXJlbW92ZS1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNSZW1vdmVCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQb3B1cE1vZGVsLCBQb3B1cEJhc2VWaWV3TW9kZWwsIElEaWFsb2dPcHRpb25zLCBjcmVhdGVEaWFsb2dPcHRpb25zLCBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsLCBDc3NDbGFzc0J1aWxkZXIsIHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmludGVyZmFjZSBJUG9wdXBQcm9wcyB7XG4gIG1vZGVsOiBQb3B1cE1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUG9wdXAgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJUG9wdXBQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgcG9wdXA6IFBvcHVwQmFzZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJUG9wdXBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuY3JlYXRlTW9kZWwoKTtcbiAgfVxuICBnZXQgbW9kZWwoKTogUG9wdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucG9wdXAgPSBuZXcgUG9wdXBCYXNlVmlld01vZGVsKHRoaXMucHJvcHMubW9kZWwpO1xuICAgIHRoaXMucG9wdXAuaW5pdGlhbGl6ZVBvcHVwQ29udGFpbmVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRUYXJnZXRFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmKCEhdGhpcy5jb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgdGhpcy5wb3B1cC50YXJnZXRFbGVtZW50ID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucG9wdXAuaW5pdGlhbGl6ZVBvcHVwQ29udGFpbmVyKCk7XG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5wb3B1cC51bm1vdW50UG9wdXBDb250YWluZXIoKTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBJUG9wdXBQcm9wcywgbmV4dFN0YXRlOiBhbnkpIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBpc05lZWRVcGRhdGUgPSBuZXh0UHJvcHMubW9kZWwgIT09IHRoaXMucG9wdXAubW9kZWw7XG4gICAgaWYoaXNOZWVkVXBkYXRlKSB7XG4gICAgICB0aGlzLnBvcHVwPy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gICAgfVxuICAgIHJldHVybiBpc05lZWRVcGRhdGU7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMucG9wdXAubW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIGNvbnN0IHBvcHVwQ29udGFpbmVyID0gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFBvcHVwQ29udGFpbmVyIG1vZGVsPXt0aGlzLnBvcHVwfT48L1BvcHVwQ29udGFpbmVyPixcbiAgICAgIHRoaXMucG9wdXAuY29udGFpbmVyXG4gICAgKTtcbiAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfT57cG9wdXBDb250YWluZXJ9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBvcHVwXCIsXG4gIChwcm9wczogSVBvcHVwUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChQb3B1cCwgcHJvcHMpO1xuICB9XG4pO1xuXG5leHBvcnQgY2xhc3MgUG9wdXBDb250YWluZXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwdWJsaWMgcHJldklzVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcbiAgfTtcbiAgZ2V0IG1vZGVsKCk6IFBvcHVwQmFzZVZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjbGlja0luc2lkZSA9IChldjogYW55KSA9PiB7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH07XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGlmICghdGhpcy5wcmV2SXNWaXNpYmxlICYmIHRoaXMubW9kZWwuaXNWaXNpYmxlKSB7XG4gICAgICB0aGlzLm1vZGVsLnVwZGF0ZU9uU2hvd2luZygpO1xuICAgIH1cbiAgICB0aGlzLnByZXZJc1Zpc2libGUgPSB0aGlzLm1vZGVsLmlzVmlzaWJsZTtcbiAgfVxuICByZW5kZXJDb250YWluZXIoKSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMubW9kZWwuc2hvd1BvaW50ZXIgPyB0aGlzLnJlbmRlclBvaW50ZXIoKSA6IG51bGw7XG4gICAgY29uc3QgaGVhZGVyID0gISF0aGlzLm1vZGVsLnRpdGxlID8gdGhpcy5yZW5kZXJIZWFkZXIoKSA6IG51bGw7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudCgpO1xuICAgIGNvbnN0IGZvb3RlciA9IHRoaXMubW9kZWwuc2hvd0Zvb3RlciA/IHRoaXMucmVuZGVyRm9vdGVyKCkgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19jb250YWluZXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGxlZnQ6IHRoaXMubW9kZWwubGVmdCxcbiAgICAgICAgICB0b3A6IHRoaXMubW9kZWwudG9wLFxuICAgICAgICAgIGhlaWdodDogdGhpcy5tb2RlbC5oZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHRoaXMubW9kZWwud2lkdGgsXG4gICAgICAgICAgbWluV2lkdGg6IHRoaXMubW9kZWwubWluV2lkdGgsXG4gICAgICAgIH19XG4gICAgICAgIG9uQ2xpY2s9eyhldjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGlja0luc2lkZShldik7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3NoYWRvd1wiPlxuICAgICAgICAgIHtwb2ludGVyfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktY29udGVudFwiPlxuICAgICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7Zm9vdGVyfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUG9pbnRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiB0aGlzLm1vZGVsLnBvaW50ZXJUYXJnZXQubGVmdCxcbiAgICAgICAgICB0b3A6IHRoaXMubW9kZWwucG9pbnRlclRhcmdldC50b3AsXG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19wb2ludGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgKTtcbiAgfVxuICByZW5kZXJIZWFkZXIoKSB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktaGVhZGVyXCI+e3RoaXMubW9kZWwudGl0bGV9PC9kaXY+O1xuICB9XG4gIHJlbmRlckNvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudENvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudE5hbWUsXG4gICAgICB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhXG4gICAgKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fY29udGVudFwiPntjb250ZW50Q29tcG9uZW50fTwvZGl2PjtcbiAgfVxuICByZW5kZXJDYW5jZWxCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19ib2R5LWZvb3Rlci1pdGVtIHN2LXBvcHVwX19idXR0b24gc3YtcG9wdXBfX2J1dHRvbi0tY2FuY2VsXCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2FuY2VsKCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0aGlzLm1vZGVsLmNhbmNlbEJ1dHRvblRleHR9XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG4gIHJlbmRlckFwcGx5QnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9XCJzdi1wb3B1cF9fYm9keS1mb290ZXItaXRlbSBzdi1wb3B1cF9fYnV0dG9uIHN2LXBvcHVwX19idXR0b24tLWFwcGx5XCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuYXBwbHkoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3RoaXMubW9kZWwuYXBwbHlCdXR0b25UZXh0fVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuICByZW5kZXJGb290ZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktZm9vdGVyXCI+XG4gICAgICAgIHt0aGlzLnJlbmRlckNhbmNlbEJ1dHRvbigpfVxuICAgICAgICB7dGhpcy5tb2RlbC5pc01vZGFsID8gdGhpcy5yZW5kZXJBcHBseUJ1dHRvbigpIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucmVuZGVyQ29udGFpbmVyKCk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gbmV3IENzc0NsYXNzQnVpbGRlcigpLmFwcGVuZChcInN2LXBvcHVwXCIpLmFwcGVuZCh0aGlzLm1vZGVsLnN0eWxlQ2xhc3MpLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6IHRoaXMubW9kZWwuaXNWaXNpYmxlID8gXCJcIiA6IFwibm9uZVwiLCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgb25DbGljaz17KGU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2xpY2tPdXRzaWRlKCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XG4gICAgICA+XG4gICAgICAgIHtjb250YWluZXJ9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbi8vIHJlcGxhY2UgdG8gc2hvd0RpYWxvZyB0aGVuIGRlbGV0ZVxuZXhwb3J0IGZ1bmN0aW9uIHNob3dNb2RhbChcbiAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICBkYXRhOiBhbnksXG4gIG9uQXBwbHk6ICgpID0+IGJvb2xlYW4sXG4gIG9uQ2FuY2VsPzogKCkgPT4gdm9pZCxcbiAgY3NzQ2xhc3M/OiBzdHJpbmcsXG4gIHRpdGxlPzogc3RyaW5nLFxuICBkaXNwbGF5TW9kZTogXCJwb3B1cFwiIHwgXCJvdmVybGF5XCIgPSBcInBvcHVwXCJcbikge1xuICBjb25zdCBvcHRpb25zID0gY3JlYXRlRGlhbG9nT3B0aW9ucyhcbiAgICBjb21wb25lbnROYW1lLFxuICAgIGRhdGEsXG4gICAgb25BcHBseSxcbiAgICBvbkNhbmNlbCxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICAgIGNzc0NsYXNzLFxuICAgIHRpdGxlLFxuICAgIGRpc3BsYXlNb2RlXG4gICk7XG4gIHNob3dEaWFsb2cob3B0aW9ucyk7XG59XG5leHBvcnQgZnVuY3Rpb24gc2hvd0RpYWxvZyhkaWFsb2dPcHRpb25zOiBJRGlhbG9nT3B0aW9ucykge1xuICBkaWFsb2dPcHRpb25zLm9uSGlkZSA9ICgpID0+IHsge1xuICAgIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUocG9wdXBWaWV3TW9kZWwuY29udGFpbmVyKTtcbiAgICBwb3B1cFZpZXdNb2RlbC51bm1vdW50UG9wdXBDb250YWluZXIoKTtcbiAgfSB9O1xuICBjb25zdCBwb3B1cFZpZXdNb2RlbDogUG9wdXBCYXNlVmlld01vZGVsID0gY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbChkaWFsb2dPcHRpb25zKTtcbiAgUmVhY3RET00ucmVuZGVyKDxQb3B1cENvbnRhaW5lciBtb2RlbD17cG9wdXBWaWV3TW9kZWx9IC8+LCBwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuXG4gIHBvcHVwVmlld01vZGVsLm1vZGVsLmlzVmlzaWJsZSA9IHRydWU7XG59XG5cbnNldHRpbmdzLnNob3dNb2RhbCA9IHNob3dNb2RhbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTa2VsZXRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Ytc2tlbGV0b24tZWxlbWVudFwiPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9hY3Rpb25zL2FjdGlvblwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb25CdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5pc1Zpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW0uaW5uZXJDc3N9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbk1vdXNlRG93bj17dGhpcy5pdGVtLmRhdGEgJiYgdGhpcy5pdGVtLmRhdGEubW91c2VEb3dufVxuICAgICAgICBvbkNsaWNrPXt0aGlzLml0ZW0uYWN0aW9ufVxuICAgICAgICB2YWx1ZT17dGhpcy5pdGVtLnRpdGxlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW5hdi1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TmF2aWdhdGlvbkJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZVByb3BzIHtcbiAgZGF0YTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SUxvZ29JbWFnZVByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250ZW50OiBKU1guRWxlbWVudFtdID0gW107XG4gICAgY29udGVudC5wdXNoKFxuICAgICAgPGRpdiBrZXk9e1wibG9nby1pbWFnZVwifSBjbGFzc05hbWU9e3RoaXMuc3VydmV5LmxvZ29DbGFzc05hbWVzfT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5zdXJ2ZXkuY3NzLmxvZ29JbWFnZX1cbiAgICAgICAgICBzcmM9e3RoaXMuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIGFsdD17dGhpcy5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnN1cnZleS5sb2dvV2lkdGggPyB0aGlzLnN1cnZleS5sb2dvV2lkdGggOiB1bmRlZmluZWR9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnN1cnZleS5sb2dvSGVpZ2h0ID8gdGhpcy5zdXJ2ZXkubG9nb0hlaWdodCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBzdHlsZT17eyBvYmplY3RGaXQ6IHRoaXMuc3VydmV5LmxvZ29GaXQgYXMgYW55IH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICAgIHJldHVybiA8Pntjb250ZW50fTwvPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxvZ28taW1hZ2VcIiwgKHByb3BzOiBJTG9nb0ltYWdlUHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9nb0ltYWdlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleUhlYWRlclByb3BzIHtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJU3VydmV5SGVhZGVyUHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlIZWFkZXIgPSB0aGlzO1xuICAgIHRoaXMuc3VydmV5LmxvY0xvZ28ub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnN1cnZleS5sb2NMb2dvLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkucmVuZGVyZWRIYXNUaXRsZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnN1cnZleS5sb2NEZXNjcmlwdGlvblxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5oZWFkZXJUZXh0fVxuICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogdGhpcy5zdXJ2ZXkudGl0bGVNYXhXaWR0aCB9fVxuICAgICAgPlxuICAgICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMuc3VydmV5fT48L1RpdGxlRWxlbWVudD5cbiAgICAgICAgeyB0aGlzLnN1cnZleS5yZW5kZXJlZEhhc0Rlc2NyaXB0aW9uID8gPGg1IGNsYXNzTmFtZT17dGhpcy5jc3MuZGVzY3JpcHRpb259PntkZXNjcmlwdGlvbn08L2g1PiA6IG51bGwgfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyTG9nb0ltYWdlKGlzUmVuZGVyOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghaXNSZW5kZXIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWU6IHN0cmluZyA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGE6IGFueSA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZGF0YTogY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnJlbmRlcmVkSGFzSGVhZGVyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlcn0+XG4gICAgICAgIHt0aGlzLnJlbmRlckxvZ29JbWFnZSh0aGlzLnN1cnZleS5pc0xvZ29CZWZvcmUpfVxuICAgICAgICB7dGhpcy5yZW5kZXJUaXRsZSgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJMb2dvSW1hZ2UodGhpcy5zdXJ2ZXkuaXNMb2dvQWZ0ZXIpfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyQ2xvc2V9PjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdXJ2ZXktaGVhZGVyXCIsXG4gIChwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5SGVhZGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgY3JlYXRlU3ZnIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdJY29uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgc3ZnSWNvblJlZjogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3ZnSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgdXBkYXRlU3ZnKCkge1xuICAgIGlmKHRoaXMucHJvcHMuaWNvbk5hbWUpXG4gICAgICBjcmVhdGVTdmcoXG4gICAgICAgIHRoaXMucHJvcHMuc2l6ZSxcbiAgICAgICAgdGhpcy5wcm9wcy53aWR0aCxcbiAgICAgICAgdGhpcy5wcm9wcy5oZWlnaHQsXG4gICAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUsXG4gICAgICAgIHRoaXMuc3ZnSWNvblJlZi5jdXJyZW50XG4gICAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZVN2ZygpO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdi1zdmctaWNvblwiO1xuICAgIGlmKHRoaXMucHJvcHMuY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUgP1xuICAgICAgICA8c3ZnIGNsYXNzTmFtZT17IGNsYXNzTmFtZSB9IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30gcmVmPXt0aGlzLnN2Z0ljb25SZWZ9IHJvbGU9XCJpbWdcIiBhcmlhLWxhYmVsPXt0aGlzLnByb3BzLnRpdGxlfT48dXNlPjwvdXNlPjwvc3ZnPlxuICAgICAgICA6IG51bGxcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3ZnKCk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1zdmctaWNvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3ZnSWNvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50LCBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi4vYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi90aXRsZS1jb250ZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBUaXRsZUFjdGlvbnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRpdGxlQ29udGVudDogSlNYLkVsZW1lbnQgPSA8VGl0bGVDb250ZW50IGVsZW1lbnQ9e3RoaXMuZWxlbWVudH0gY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfT48L1RpdGxlQ29udGVudD47XG4gICAgaWYoIXRoaXMuZWxlbWVudC5oYXNUaXRsZUFjdGlvbnMpIHJldHVybiB0aXRsZUNvbnRlbnQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtdGl0bGUtYWN0aW9uc1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdi10aXRsZS1hY3Rpb25zX190aXRsZVwiPnt0aXRsZUNvbnRlbnR9PC9zcGFuPlxuICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLmVsZW1lbnQuZ2V0VGl0bGVUb29sYmFyKCl9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJlbGVtZW50XCIsXG4gIFwidGl0bGUtYWN0aW9uc1wiLFxuICBcInN2LXRpdGxlLWFjdGlvbnNcIlxuKTtcblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi10aXRsZS1hY3Rpb25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUaXRsZUFjdGlvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudENvcmUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgSVRpdGxlT3duZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRpdGxlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50Q29yZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRpdGxlT3duZXIgPSB0aGlzLmVsZW1lbnQuZ2V0VGl0bGVPd25lcigpO1xuICAgIGlmKCF0aXRsZU93bmVyKVxuICAgICAgcmV0dXJuIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLmVsZW1lbnQubG9jVGl0bGUpO1xuICAgIHZhciBzcGFucyA9IHRoaXMucmVuZGVyVGl0bGVTcGFucyh0aXRsZU93bmVyLCB0aGlzLmNzc0NsYXNzZXMpO1xuICAgIHJldHVybiA8PntzcGFuc308Lz47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlU3BhbnMoZWxlbWVudDogSVRpdGxlT3duZXIsIGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgdmFyIGdldFNwYWNlU3BhbiA9IChrZXk6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW4gZGF0YS1rZXk9e2tleX0ga2V5PXtrZXl9PlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH07XG4gICAgdmFyIHNwYW5zID0gW107XG4gICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlVGV4dE9uU3RhcnQpIHtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgfVxuICAgIHZhciBxdWVzdGlvbk51bWJlciA9IGVsZW1lbnQubm87XG4gICAgaWYgKHF1ZXN0aW9uTnVtYmVyKSB7XG4gICAgICBzcGFucy5wdXNoKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGRhdGEta2V5PXtcInFfbnVtXCJ9XG4gICAgICAgICAga2V5PXtcInFfbnVtXCJ9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm51bWJlcn1cbiAgICAgICAgICBzdHlsZT17eyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9fVxuICAgICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgICA+XG4gICAgICAgICAge3F1ZXN0aW9uTnVtYmVyfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJudW0tc3BcIikpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUpIHtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgfVxuICAgIHNwYW5zLnB1c2goXG4gICAgICBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoZWxlbWVudC5sb2NUaXRsZSwgbnVsbCwgXCJxX3RpdGxlXCIpXG4gICAgKTtcbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0QWZ0ZXJUaXRsZSkge1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJyZXEtc3BcIikpO1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYW5zO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSZXF1aXJlVGV4dChcbiAgICBlbGVtZW50OiBJVGl0bGVPd25lcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBkYXRhLWtleT17XCJyZXEtdGV4dFwifVxuICAgICAgICBrZXk9e1wicmVxLXRleHRcIn1cbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB8fCBjc3NDbGFzc2VzLnBhbmVsLnJlcXVpcmVkVGV4dH1cbiAgICAgICAgYXJpYS1oaWRkZW49e3RydWV9XG4gICAgICA+XG4gICAgICAgIHtlbGVtZW50LnJlcXVpcmVkVGV4dH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50Q29yZSwgZG9LZXkyQ2xpY2tVcCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4vdGl0bGUtYWN0aW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVFbGVtZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50Q29yZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lmhhc1RpdGxlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0aXRsZUNvbnRlbnQgPSAoXG4gICAgICA8VGl0bGVBY3Rpb25zXG4gICAgICAgIGVsZW1lbnQ9e2VsZW1lbnR9XG4gICAgICAgIGNzc0NsYXNzZXM9e2VsZW1lbnQuY3NzQ2xhc3Nlc31cbiAgICAgID48L1RpdGxlQWN0aW9ucz5cbiAgICApO1xuICAgIGxldCBvbkNsaWNrID0gbnVsbDtcbiAgICBsZXQgb25LZXlVcCA9IG51bGw7XG4gICAgaWYgKGVsZW1lbnQuaGFzVGl0bGVFdmVudHMpIHtcbiAgICAgIG9uS2V5VXAgPSAoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgZG9LZXkyQ2xpY2tVcChldnQubmF0aXZlRXZlbnQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBDdXN0b21UYWcgPSBlbGVtZW50LnRpdGxlVGFnTmFtZSBhcyBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDdXN0b21UYWdcbiAgICAgICAgY2xhc3NOYW1lPXtlbGVtZW50LmNzc1RpdGxlfVxuICAgICAgICBpZD17ZWxlbWVudC5hcmlhVGl0bGVJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17ZWxlbWVudC50aXRsZUFyaWFMYWJlbH1cbiAgICAgICAgdGFiSW5kZXg9e2VsZW1lbnQudGl0bGVUYWJJbmRleH1cbiAgICAgICAgYXJpYS1leHBhbmRlZD17ZWxlbWVudC50aXRsZUFyaWFFeHBhbmRlZH1cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgb25LZXlVcD17b25LZXlVcH1cbiAgICAgID5cbiAgICAgICAge3RpdGxlQ29udGVudH1cbiAgICAgIDwvQ3VzdG9tVGFnPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3VzdG9tV2lkZ2V0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByaXZhdGUgd2lkZ2V0UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMud2lkZ2V0UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJpdmF0ZSBfYWZ0ZXJSZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCkge1xuICAgICAgbGV0IGVsID0gdGhpcy53aWRnZXRSZWYuY3VycmVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC5hZnRlclJlbmRlcih0aGlzLnF1ZXN0aW9uQmFzZSwgZWwpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZSkge1xuICAgICAgdGhpcy5fYWZ0ZXJSZW5kZXIoKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdmFyIGlzRGVmYXVsdFJlbmRlciA9XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCAmJlxuICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LmlzRGVmYXVsdFJlbmRlcjtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UgJiYgIWlzRGVmYXVsdFJlbmRlcikge1xuICAgICAgdGhpcy5fYWZ0ZXJSZW5kZXIoKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICBsZXQgZWwgPSB0aGlzLndpZGdldFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LndpbGxVbm1vdW50KHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmIHRoaXMucXVlc3Rpb25CYXNlLnZpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjdXN0b21XaWRnZXQgPSB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQ7XG5cbiAgICBpZiAoY3VzdG9tV2lkZ2V0LmlzRGVmYXVsdFJlbmRlcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiByZWY9e3RoaXMud2lkZ2V0UmVmfT5cbiAgICAgICAgICB7dGhpcy5jcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudCh0aGlzLnF1ZXN0aW9uQmFzZSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgd2lkZ2V0ID0gbnVsbDtcbiAgICBpZiAoY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyKSB7XG4gICAgICB3aWRnZXQgPSBjdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXIodGhpcy5xdWVzdGlvbkJhc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZSkge1xuICAgICAgICBsZXQgaHRtbFZhbHVlID0geyBfX2h0bWw6IGN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUgfTtcbiAgICAgICAgcmV0dXJuIDxkaXYgcmVmPXt0aGlzLndpZGdldFJlZn0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gLz47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiA8ZGl2IHJlZj17dGhpcy53aWRnZXRSZWZ9Pnt3aWRnZXR9PC9kaXY+O1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uLCBEcm9wZG93bkxpc3RNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi9jb21wb25lbnRzL3BvcHVwL3BvcHVwXCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duQmFzZTxUIGV4dGVuZHMgUXVlc3Rpb24+IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFQ+IHtcbiAgIGNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbD8ub25DbGljayhldmVudCk7XG4gICB9O1xuICAgY2xlYXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICB0aGlzLnF1ZXN0aW9uLmRyb3Bkb3duTGlzdE1vZGVsPy5vbkNsZWFyKGV2ZW50KTtcbiAgIH07XG4gICBrZXl1cCA9IChldmVudDogYW55KSA9PiB7XG4gICAgIHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWw/Lm9uS2V5VXAoZXZlbnQpO1xuICAgfTtcbiAgIGJsdXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICB0aGlzLnF1ZXN0aW9uLmRyb3Bkb3duTGlzdE1vZGVsPy5vbkJsdXIoZXZlbnQpO1xuICAgfTtcblxuICAgcHJvdGVjdGVkIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XG4gICAgIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcmVkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgIH1cbiAgIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKTogYW55IHtcbiAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcmVkVmFsdWU7XG4gICB9XG4gICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICAgbGV0IHNlbGVjdEVsZW1lbnQ6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgIHNlbGVjdEVsZW1lbnQgPSA8ZGl2IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX0gZGlzYWJsZWQ+e3RoaXMucXVlc3Rpb24ucmVhZE9ubHlUZXh0fTwvZGl2PjtcbiAgICAgfSBlbHNlIHtcbiAgICAgICBpZiAoISh0aGlzLnF1ZXN0aW9uIGFzIGFueSkuaGFzT3duUHJvcGVydHkoXCJkcm9wZG93bkxpc3RNb2RlbFwiKSkge1xuICAgICAgICAgKHRoaXMucXVlc3Rpb24gYXMgYW55KVtcImRyb3Bkb3duTGlzdE1vZGVsXCJdID0gbmV3IERyb3Bkb3duTGlzdE1vZGVsKHRoaXMucXVlc3Rpb24pO1xuICAgICAgIH1cbiAgICAgICBzZWxlY3RFbGVtZW50ID0gPD5cbiAgICAgICAgIHt0aGlzLnJlbmRlcklucHV0KCl9XG4gICAgICAgICA8UG9wdXAgbW9kZWw9e3RoaXMucXVlc3Rpb24/LmRyb3Bkb3duTGlzdE1vZGVsPy5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgIDwvPjtcbiAgICAgfVxuXG4gICAgIHJldHVybiAoXG4gICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc2VsZWN0V3JhcHBlcn0+XG4gICAgICAgICB7c2VsZWN0RWxlbWVudH1cbiAgICAgICA8L2Rpdj5cbiAgICAgKTtcbiAgIH1cblxuICAgcHJvdGVjdGVkIHJlbmRlcklucHV0KCk6IEpTWC5FbGVtZW50IHtcbiAgICAgcmV0dXJuICg8ZGl2XG4gICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCl9XG4gICAgICAgdGFiSW5kZXg9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5ID8gdW5kZWZpbmVkIDogMH1cbiAgICAgICBvbkNsaWNrPXt0aGlzLmNsaWNrfVxuICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgIHJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmlzUmVxdWlyZWR9XG4gICAgICAgb25DaGFuZ2U9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgIG9uSW5wdXQ9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgIG9uS2V5VXA9e3RoaXMua2V5dXB9XG4gICAgICAgb25CbHVyPXt0aGlzLmJsdXJ9XG4gICAgICAgcm9sZT17dGhpcy5xdWVzdGlvbi5hcmlhUm9sZX1cbiAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgID5cbiAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xWYWx1ZX0+e3RoaXMucXVlc3Rpb24ucmVhZE9ubHlUZXh0fTwvZGl2PlxuICAgICAgIHt0aGlzLmNyZWF0ZUNsZWFyQnV0dG9uKCl9XG4gICAgIDwvZGl2Pik7XG4gICB9XG5cbiAgIGNyZWF0ZUNsZWFyQnV0dG9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmFsbG93Q2xlYXIgfHwgIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvbkljb25JZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6IHRoaXMucXVlc3Rpb24uaXNFbXB0eSgpID8gXCJub25lXCIgOiBcIlwiIH07XG4gICAgIHJldHVybiAoXG4gICAgICAgPGRpdlxuICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5CdXR0b259XG4gICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICBvbkNsaWNrPXt0aGlzLmNsZWFyfVxuICAgICAgID5cbiAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uU3ZnfVxuICAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uSWNvbklkfVxuICAgICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi5jbGVhbkJ1dHRvbkNhcHRpb259XG4gICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICA8L2Rpdj5cbiAgICAgKTtcbiAgIH1cblxuICAgcHJvdGVjdGVkIHJlbmRlck90aGVyKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICAgcmV0dXJuIChcbiAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICBvdGhlckNzcz17Y3NzQ2xhc3Nlcy5vdGhlcn1cbiAgICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgLz5cbiAgICAgICA8L2Rpdj5cbiAgICAgKTtcbiAgIH1cbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi9iYXNlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi4vaXRlbXZhbHVlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk9wdGlvbkl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcbiAgICB0aGlzLnNldHVwTW9kZWwoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnNldHVwTW9kZWwoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMuaXRlbSkge1xuICAgICAgdGhpcy5pdGVtLmxvY1RleHQub25DaGFuZ2VkID0gKCkgPT4geyB9O1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldHVwTW9kZWwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLml0ZW0ubG9jVGV4dCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuaXRlbS5sb2NUZXh0Lm9uQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBjaGFuZ2VkOiBzZWxmLnN0YXRlLmNoYW5nZWQgKyAxIH0pO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPG9wdGlvbiB2YWx1ZT17dGhpcy5pdGVtLnZhbHVlfSBkaXNhYmxlZD17IXRoaXMuaXRlbS5pc0VuYWJsZWR9PlxuICAgICAgICB7dGhpcy5pdGVtLnRleHR9XG4gICAgICA8L29wdGlvbj5cbiAgICApO1xuICB9XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIH0gZnJvbSBcIi4vZHJvcGRvd24taXRlbVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93blNlbGVjdCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRHJvcGRvd24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclNlbGVjdChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbi5vbkNsaWNrKGV2ZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGtleXVwID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMucXVlc3Rpb24ub25LZXlVcChldmVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdEVsZW1lbnQgPSB0aGlzLmlzRGlzcGxheU1vZGUgPyAoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICA8ZGl2IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX0gZGlzYWJsZWQ+e3RoaXMucXVlc3Rpb24ucmVhZE9ubHlUZXh0fTwvZGl2PikgOlxuICAgICAgKDxzZWxlY3RcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgICByZWY9eyhzZWxlY3QpID0+ICh0aGlzLmNvbnRyb2wgPSBzZWxlY3QpfVxuICAgICAgICBhdXRvQ29tcGxldGU9e3RoaXMucXVlc3Rpb24uYXV0b0NvbXBsZXRlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICAgIG9uSW5wdXQ9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBvbkNsaWNrPXtjbGlja31cbiAgICAgICAgb25LZXlVcD17a2V5dXB9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uaXNSZXF1aXJlZH0+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmFsbG93Q2xlYXIgPyAoPG9wdGlvbiB2YWx1ZT1cIlwiPnt0aGlzLnF1ZXN0aW9uLnBsYWNlaG9sZGVyfTwvb3B0aW9uPikgOiBudWxsfVxuICAgICAgICB7dGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoKGl0ZW06IEl0ZW1WYWx1ZSwgaTogbnVtYmVyKSA9PiA8U3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIGtleT17XCJpdGVtXCIgKyBpfSBpdGVtPXtpdGVtfSAvPil9XG4gICAgICA8L3NlbGVjdD4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zZWxlY3RXcmFwcGVyfT5cbiAgICAgICAge3NlbGVjdEVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzdi1kcm9wZG93bi1zZWxlY3RcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRHJvcGRvd25TZWxlY3QsIHByb3BzKTtcbn0pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcImRyb3Bkb3duXCIsIFwic2VsZWN0XCIsIFwic3YtZHJvcGRvd24tc2VsZWN0XCIpOyIsImltcG9ydCB7IEhhc2hUYWJsZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RFbGVtZW50RmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFJlYWN0RWxlbWVudEZhY3RvcnkgPSBuZXcgUmVhY3RFbGVtZW50RmFjdG9yeSgpO1xuICBwcml2YXRlIGNyZWF0b3JIYXNoOiBIYXNoVGFibGU8KG5hbWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnQ+ID0ge307XG5cbiAgcHVibGljIHJlZ2lzdGVyRWxlbWVudChcbiAgICBlbGVtZW50VHlwZTogc3RyaW5nLFxuICAgIGVsZW1lbnRDcmVhdG9yOiAocHJvcHM6IGFueSkgPT4gSlNYLkVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV0gPSBlbGVtZW50Q3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xuICB9XG4gIHB1YmxpYyBpc0VsZW1lbnRSZWdpc3RlcmVkKGVsZW1lbnRUeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gISF0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3JlYXRvciA9IHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdG9yKHBhcmFtcyk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi4vcGFuZWxcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50SGVhZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IGVsZW1lbnQoKTogUXVlc3Rpb24gfCBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgY29uc3QgdGl0bGUgPSBlbGVtZW50Lmhhc1RpdGxlID8gKFxuICAgICAgPFRpdGxlRWxlbWVudCBlbGVtZW50PXtlbGVtZW50fT48L1RpdGxlRWxlbWVudD5cbiAgICApIDogbnVsbDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGVsZW1lbnQuaGFzRGVzY3JpcHRpb25VbmRlclRpdGxlXG4gICAgICA/IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17ZWxlbWVudC5jc3NIZWFkZXJ9IG9uQ2xpY2s9e2VsZW1lbnQuY2xpY2tUaXRsZUZ1bmN0aW9ufT5cbiAgICAgICAge3RpdGxlfVxuICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbihcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBkZXNjcmlwdGlvblRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLmVsZW1lbnQubG9jRGVzY3JpcHRpb25cbiAgICApO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5lbGVtZW50LmNzc0Rlc2NyaXB0aW9ufT57ZGVzY3JpcHRpb25UZXh0fTwvZGl2PjtcbiAgfVxufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRmxvd1BhbmVsTW9kZWwsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbiB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUZsb3dQYW5lbCBleHRlbmRzIFN1cnZleVBhbmVsIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZsb3dQYW5lbCgpOiBGbG93UGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWwgYXMgRmxvd1BhbmVsTW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoISF0aGlzLmZsb3dQYW5lbCkge1xuICAgICAgdGhpcy5mbG93UGFuZWwub25DdXN0b21IdG1sUHJvZHVjaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uR2V0SHRtbEZvclF1ZXN0aW9uID0gdGhpcy5yZW5kZXJRdWVzdGlvbjtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLmZsb3dQYW5lbCkge1xuICAgICAgdGhpcy5mbG93UGFuZWwub25DdXN0b21IdG1sUHJvZHVjaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uR2V0SHRtbEZvclF1ZXN0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5mbG93UGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiPHF1ZXN0aW9uPlwiICsgcXVlc3Rpb24ubmFtZSArIFwiPC9xdWVzdGlvbj5cIjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUm93cygpOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIHJldHVybiBbdGhpcy5yZW5kZXJIdG1sKCldO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyZWRJbmRleDogbnVtYmVyO1xuICBwcml2YXRlIGdldE5vZGVJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkSW5kZXgrKztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySHRtbCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmZsb3dQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgaHRtbCA9IFwiPHNwYW4+XCIgKyB0aGlzLmZsb3dQYW5lbC5wcm9kdWNlSHRtbCgpICsgXCI8L3NwYW4+XCI7XG4gICAgaWYgKCFET01QYXJzZXIpIHtcbiAgICAgIGNvbnN0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiBodG1sIH07XG4gICAgICByZXR1cm4gPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCBcInRleHQveG1sXCIpO1xuICAgIHRoaXMucmVuZGVyZWRJbmRleCA9IDA7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyUGFyZW50Tm9kZShkb2MpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOb2Rlcyhkb21Ob2RlczogQXJyYXk8Tm9kZT4pOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21Ob2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZXMucHVzaCh0aGlzLnJlbmRlck5vZGUoZG9tTm9kZXNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG4gIHByaXZhdGUgZ2V0U3R5bGUobm9kZVR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJiXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiaVwiKSB7XG4gICAgICBzdHlsZS5mb250U3R5bGUgPSBcIml0YWxpY1wiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ1XCIpIHtcbiAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYXJlbnROb2RlKG5vZGU6IE5vZGUpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnJlbmRlck5vZGVzKHRoaXMuZ2V0Q2hpbGREb21Ob2Rlcyhub2RlKSk7XG4gICAgaWYgKG5vZGVUeXBlID09PSBcImRpdlwiKVxuICAgICAgcmV0dXJuIDxkaXYga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfT57Y2hpbGRyZW59PC9kaXY+O1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9IHN0eWxlPXt0aGlzLmdldFN0eWxlKG5vZGVUeXBlKX0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOb2RlKG5vZGU6IE5vZGUpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmhhc1RleHRDaGlsZE5vZGVzT25seShub2RlKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFyZW50Tm9kZShub2RlKTtcbiAgICB9XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vZGVUeXBlID09PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5mbG93UGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobm9kZS50ZXh0Q29udGVudCk7XG4gICAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uQm9keSA9IChcbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uXG4gICAgICAgICAga2V5PXtxdWVzdGlvbi5uYW1lfVxuICAgICAgICAgIGVsZW1lbnQ9e3F1ZXN0aW9ufVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICBjc3M9e3RoaXMuY3NzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICAgIHJldHVybiA8c3BhbiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9PntxdWVzdGlvbkJvZHl9PC9zcGFuPjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlID09PSBcImRpdlwiKSB7XG4gICAgICByZXR1cm4gPGRpdiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9Pntub2RlLnRleHRDb250ZW50fTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0gc3R5bGU9e3RoaXMuZ2V0U3R5bGUobm9kZVR5cGUpfT5cbiAgICAgICAge25vZGUudGV4dENvbnRlbnR9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldENoaWxkRG9tTm9kZXMobm9kZTogTm9kZSk6IEFycmF5PE5vZGU+IHtcbiAgICBjb25zdCBkb21Ob2RlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkb21Ob2Rlcy5wdXNoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBkb21Ob2RlcztcbiAgfVxuICBwcml2YXRlIGhhc1RleHRDaGlsZE5vZGVzT25seShub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9kZXMgPSBub2RlLmNoaWxkTm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5vZGVzW2ldLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiI3RleHRcIikgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChzdHlsZTogYW55LCByb3dzOiBKU1guRWxlbWVudFtdKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZi1wYW5lbFwiLCB7IHN0eWxlOiBzdHlsZSB9LCByb3dzKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcImZsb3dwYW5lbFwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUZsb3dQYW5lbCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSW1hZ2UgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLm9uQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gKCkgPT4geyB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkltYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkltYWdlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnF1ZXN0aW9uLmltYWdlTGluaztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmdldEltYWdlQ3NzKCk7XG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7IG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdCB9O1xuICAgIHZhciBjb250cm9sID0gbnVsbDtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICBhbHQ9e3RoaXMucXVlc3Rpb24udGV4dCB8fCB0aGlzLnF1ZXN0aW9uLnRpdGxlfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIC8vYWx0PXtpdGVtLnRleHQgfHwgaXRlbS52YWx1ZX1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwidmlkZW9cIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHZpZGVvIGNvbnRyb2xzXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvdmlkZW8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwieW91dHViZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+e2NvbnRyb2x9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25JbWFnZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCwgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSW1hZ2VJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXQgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFNlbGVjdEJhc2VSb290Q3NzKCl9PlxuICAgICAgICA8bGVnZW5kXG4gICAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH0gLz5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1ucyA/IHRoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKSA6IHRoaXMuZ2V0SXRlbXMoY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjc3NDbGFzc2VzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiaXRlbVwiICsgaTtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5yZW5kZXJJdGVtKGtleSwgaXRlbSBhcyBJbWFnZUl0ZW1WYWx1ZSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4geyBtYXJnaW5MZWZ0OiBcIjNweFwiLCBkaXNwbGF5OiBcImlubGluZVwiLCBwb3NpdGlvbjogXCJzdGF0aWNcIiB9O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IEltYWdlSXRlbVZhbHVlLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gPFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXJJdGVtIGtleT17a2V5fSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gaXRlbT17aXRlbX0gY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc30+PC9TdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VySXRlbT47XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXJJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuaXRlbS5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgcmVhY3RPblN0ckNoYW5nZWQoKSB7XG4gICAgdGhpcy5pdGVtLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbG9jSW1hZ2VMaW5rY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUubG9jSW1hZ2VMaW5rID8gdGhpcy5zdGF0ZS5sb2NJbWFnZUxpbmsgKyAxIDogMSB9KTtcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG5cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLm11bHRpU2VsZWN0KSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHRoaXMucXVlc3Rpb24udmFsdWUuY29uY2F0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY3VyclZhbHVlID0gdGhpcy5xdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgY3VyclZhbHVlLnNwbGljZSh0aGlzLnF1ZXN0aW9uLnZhbHVlLmluZGV4T2YoZXZlbnQudGFyZ2V0LnZhbHVlKSwgMSk7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBjdXJyVmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtO1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIHZhciBpc0NoZWNrZWQgPSBxdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZChpdGVtKTtcbiAgICB2YXIgaXRlbUNsYXNzID0gcXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pO1xuICAgIHZhciB0ZXh0ID0gbnVsbDtcbiAgICBpZiAocXVlc3Rpb24uc2hvd0xhYmVsKSB7XG4gICAgICB0ZXh0ID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dH1cbiAgICAgICAgPlxuICAgICAgICAgIHtpdGVtLnRleHQgPyBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KSA6IGl0ZW0udmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7IG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdCB9O1xuXG4gICAgdmFyIGNvbnRyb2wgPSBudWxsO1xuICAgIGlmIChpdGVtLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWwgJiYgdGhpcy5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJpbWFnZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmltYWdlfVxuICAgICAgICAgIHNyYz17aXRlbS5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGggfVxuICAgICAgICAgIGhlaWdodD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZUhlaWdodCB9XG4gICAgICAgICAgYWx0PXtpdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBvbkxvYWQ9eyhldmVudDogYW55KSA9PiB7IHRoaXMucXVlc3Rpb25bXCJvbkNvbnRlbnRMb2FkZWRcIl0oaXRlbSwgZXZlbnQubmF0aXZlRXZlbnQpOyB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGl0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbCAmJiB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcInZpZGVvXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDx2aWRlbyBjb250cm9sc1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e2l0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICB3aWR0aD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZVdpZHRoIH1cbiAgICAgICAgICBoZWlnaHQ9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICBvbkxvYWRlZE1ldGFkYXRhPXsoZXZlbnQ6IGFueSkgPT4geyB0aGlzLnF1ZXN0aW9uW1wib25Db250ZW50TG9hZGVkXCJdKGl0ZW0sIGV2ZW50Lm5hdGl2ZUV2ZW50KTsgfX1cbiAgICAgICAgPjwvdmlkZW8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWl0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbCkge1xuICAgICAgbGV0IHN0eWxlOiBhbnkgPSB7XG4gICAgICAgIHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQsXG4gICAgICAgIG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdFxuICAgICAgfTtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbU5vSW1hZ2V9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICA+XG4gICAgICAgICAge1xuICAgICAgICAgICAgY3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZVN2Z0ljb24gP1xuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZVN2Z0ljb259PlxuICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXtjc3NDbGFzc2VzLml0ZW1Ob0ltYWdlU3ZnSWNvbklkfT48L3VzZT5cbiAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2l0ZW1DbGFzc30+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubGFiZWx9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKGl0ZW0pfVxuICAgICAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uTmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKGl0ZW0pfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZUNvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIHtjb250cm9sfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gICAgcmV0dXJuIHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VwaWNrZXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWxCYXNlIH0gZnJvbSBcIi4vcGFuZWwtYmFzZVwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlIGV4dGVuZHMgU3VydmV5UGFuZWxCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wYWdlO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFnZSgpOiBQYWdlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZSBhcyBQYWdlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0aXRsZSA9IHRoaXMucmVuZGVyVGl0bGUoKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLnJlbmRlckRlc2NyaXB0aW9uKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJlbmRlclJvd3ModGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17dGhpcy5wYWdlLmNzc1Jvb3R9PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAge3Jvd3N9XG4gICAgICA8L2RpdiA+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMucGFnZX0+PC9UaXRsZUVsZW1lbnQ+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnBhZ2UuX3Nob3dEZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYWdlLmxvY0Rlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFnZS5kZXNjcmlwdGlvbn0+e3RleHR9PC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJvd01vZGVsLCBQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVJvdyB9IGZyb20gXCIuL3Jvd1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWxCYXNlIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEJhc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZVByb3BJblN0YXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGtleSAhPT0gXCJlbGVtZW50c1wiICYmIHN1cGVyLmNhblVzZVByb3BJblN0YXRlKGtleSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENzcygpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYW5lbEJhc2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50IHx8IHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcHMuc3VydmV5IHx8ICghIXRoaXMucGFuZWxCYXNlID8gdGhpcy5wYW5lbEJhc2Uuc3VydmV5IDogbnVsbClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAoXG4gICAgICAhIXByZXZQcm9wcy5wYWdlICYmXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXG4gICAgICAhIXRoaXMuc3VydmV5LmN1cnJlbnRQYWdlICYmXG4gICAgICBwcmV2UHJvcHMucGFnZS5uYW1lID09PSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZS5uYW1lXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIHByaXZhdGUgZG9BZnRlclJlbmRlcigpIHtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoZWwgJiYgdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIGlmICh0aGlzLnBhbmVsQmFzZS5pc1BhbmVsKSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCwgZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnN1cnZleSAmJiAhIXRoaXMucGFuZWxCYXNlXG4gICAgICAmJiB0aGlzLnBhbmVsQmFzZS5pc1Zpc2libGUgJiYgISF0aGlzLnBhbmVsQmFzZS5zdXJ2ZXlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyZWRSb3dzQ2FjaGU6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgcmVuZGVyUm93cyhjc3M6IGFueSk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgaWYgKHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWUgIT09IFwicm93c1wiKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkUm93c0NhY2hlID0ge307XG4gICAgfVxuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIHF1ZXN0aW9uUm93cyA9IHRoaXMucGFuZWxCYXNlLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvblJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJlbmRlcmVkUm93c0NhY2hlW3F1ZXN0aW9uUm93c1tpXS5pZF07XG4gICAgICBpZiAoIXJvdykge1xuICAgICAgICByb3cgPSB0aGlzLmNyZWF0ZVJvdyhxdWVzdGlvblJvd3NbaV0sIGNzcyk7XG4gICAgICAgIHRoaXMucmVuZGVyZWRSb3dzQ2FjaGVbcXVlc3Rpb25Sb3dzW2ldLmlkXSA9IHJvdztcbiAgICAgIH1cbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KHJvdzogUXVlc3Rpb25Sb3dNb2RlbCwgY3NzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlSb3dcbiAgICAgICAga2V5PXtyb3cuaWR9XG4gICAgICAgIHJvdz17cm93fVxuICAgICAgICBzdXJ2ZXk9e3RoaXMuc3VydmV5fVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGNzcz17Y3NzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRFcnJvcnMgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbEJhc2UgfSBmcm9tIFwiLi9wYW5lbC1iYXNlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsLCBkb0tleTJDbGlja1VwLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50SGVhZGVyIH0gZnJvbSBcIi4vZWxlbWVudC1oZWFkZXJcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhbmVsIGV4dGVuZHMgU3VydmV5UGFuZWxCYXNlIHtcbiAgcHJpdmF0ZSBoYXNCZWVuRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcigpO1xuICAgIGNvbnN0IGVycm9ycyA9IChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucGFuZWxCYXNlfVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBwYWRkaW5nTGVmdDogdGhpcy5wYW5lbC5pbm5lclBhZGRpbmdMZWZ0LFxuICAgICAgZGlzcGxheTogIXRoaXMucGFuZWwuaXNDb2xsYXBzZWQgPyB1bmRlZmluZWQgOiBcIm5vbmVcIixcbiAgICB9O1xuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnBhbmVsLmlzQ29sbGFwc2VkIHx8IHRoaXMuaGFzQmVlbkV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmhhc0JlZW5FeHBhbmRlZCA9IHRydWU7XG4gICAgICBjb25zdCByb3dzOiBKU1guRWxlbWVudFtdID0gdGhpcy5yZW5kZXJSb3dzKHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMpO1xuICAgICAgY29uc3QgY2xhc3NOYW1lOiBzdHJpbmcgPSB0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzLnBhbmVsLmNvbnRlbnQ7XG4gICAgICBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KHN0eWxlLCByb3dzLCBjbGFzc05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXsodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCkuZ2V0Q29udGFpbmVyQ3NzKCl9XG4gICAgICAgIG9uRm9jdXM9eyh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsKS5mb2N1c0lufVxuICAgICAgPlxuICAgICAgICB7aGVhZGVyfVxuICAgICAgICB7ZXJyb3JzfVxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpIHtcbiAgICBpZiAoIXRoaXMucGFuZWwuaGFzVGl0bGUgJiYgIXRoaXMucGFuZWwuaGFzRGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUVsZW1lbnRIZWFkZXIgZWxlbWVudD17dGhpcy5wYW5lbH0+PC9TdXJ2ZXlFbGVtZW50SGVhZGVyPjtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcEVsZW1lbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucGFuZWwuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEVsZW1lbnQoc3VydmV5LCBlbGVtZW50LCB0aGlzLnBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChzdHlsZTogYW55LCByb3dzOiBKU1guRWxlbWVudFtdLCBjbGFzc05hbWU6IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBib3R0b206IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJCb3R0b20oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBpZD17dGhpcy5wYW5lbC5jb250ZW50SWR9PlxuICAgICAgICB7cm93c31cbiAgICAgICAge2JvdHRvbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucGFuZWxCYXNlLnRpdGxlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFRpdGxlRWxlbWVudCBlbGVtZW50PXt0aGlzLnBhbmVsQmFzZX0+PC9UaXRsZUVsZW1lbnQ+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsQmFzZS5kZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYW5lbEJhc2UubG9jRGVzY3JpcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wYW5lbC5jc3NDbGFzc2VzLnBhbmVsLmRlc2NyaXB0aW9ufT57dGV4dH08L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCb3R0b20oKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGZvb3RlclRvb2xiYXIgPSB0aGlzLnBhbmVsLmdldEZvb3RlclRvb2xiYXIoKTtcbiAgICBpZiAoIWZvb3RlclRvb2xiYXIuaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2Zvb3RlclRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInBhbmVsXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQYW5lbCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nTW9kZWwsIFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9kcm9wZG93bi1iYXNlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYXRpbmdEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlPFF1ZXN0aW9uUmF0aW5nTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3REcm9wZG93bn0+XG4gICAgICAgIHtzZWxlY3R9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LXJhdGluZy1kcm9wZG93blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhdGluZ0Ryb3Bkb3duLCBwcm9wcyk7XG4gIH1cbik7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcInJhdGluZ1wiLFxuICBcImRyb3Bkb3duXCIsXG4gIFwic3YtcmF0aW5nLWRyb3Bkb3duXCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleSB9IGZyb20gXCIuL3JlYWN0U3VydmV5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgQmFzZSwgUG9wdXBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUG9wdXBTdXJ2ZXkgZXh0ZW5kcyBTdXJ2ZXkge1xuICBwcm90ZWN0ZWQgcG9wdXA6IFBvcHVwU3VydmV5TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkV4cGFuZGVkID0gdGhpcy5oYW5kbGVPbkV4cGFuZGVkLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKTogQXJyYXk8QmFzZT4ge1xuICAgIHJldHVybiBbdGhpcy5wb3B1cCwgdGhpcy5wb3B1cC5zdXJ2ZXldO1xuICB9XG4gIGhhbmRsZU9uRXhwYW5kZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9wdXAuY2hhbmdlRXhwYW5kQ29sbGFwc2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiB0aGlzLnBvcHVwLmlzU2hvd2luZztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVyV2luZG93SGVhZGVyKCk7XG4gICAgdmFyIGJvZHkgPSB0aGlzLnBvcHVwLmlzRXhwYW5kZWQgPyB0aGlzLnJlbmRlckJvZHkoKSA6IG51bGw7XG4gICAgbGV0IHN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgIGJvdHRvbTogMyxcbiAgICAgIHJpZ2h0OiAxMCxcbiAgICAgIG1heFdpZHRoOiBcIjYwJVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnBvcHVwLmNzc1Jvb3R9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIHtoZWFkZXJ9XG4gICAgICAgIHtib2R5fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyV2luZG93SGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgc3R5bGVBID0geyB3aWR0aDogXCIxMDAlXCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfTtcbiAgICB2YXIgc3R5bGVUaXRsZSA9IHsgcGFkZGluZ1JpZ2h0OiBcIjEwcHhcIiB9O1xuICAgIHZhciBnbHlwaENsYXNzTmFtZSA9IHRoaXMucG9wdXAuY3NzQnV0dG9uO1xuICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xuICAgIHZhciB0aXRsZSA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnN1cnZleS5sb2NUaXRsZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnBvcHVwLmNzc0hlYWRlclJvb3R9PlxuICAgICAgICA8c3BhbiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uRXhwYW5kZWR9IHN0eWxlPXtzdHlsZUF9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5wb3B1cC5jc3NIZWFkZXJUaXRsZX0gc3R5bGU9e3N0eWxlVGl0bGV9PlxuICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dseXBoQ2xhc3NOYW1lfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnBvcHVwLmlzRXhwYW5kZWQgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25FeHBhbmRlZH1cbiAgICAgICAgICAgIHN0eWxlPXt7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucG9wdXAuY3NzSGVhZGVyVGl0bGV9IHN0eWxlPXtzdHlsZVRpdGxlfT5cbiAgICAgICAgICAgICAgWFxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCb2R5KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMucG9wdXAuY3NzQm9keX0+e3RoaXMuZG9SZW5kZXIoKX08L2Rpdj47XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleShuZXdQcm9wczogYW55KSB7XG4gICAgaWYgKCFuZXdQcm9wcykgbmV3UHJvcHMgPSB7fTtcbiAgICBzdXBlci5jcmVhdGVTdXJ2ZXkobmV3UHJvcHMpO1xuICAgIHRoaXMucG9wdXAgPSBuZXcgUG9wdXBTdXJ2ZXlNb2RlbChudWxsLCB0aGlzLnN1cnZleSk7XG4gICAgaWYgKG5ld1Byb3BzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQpIHtcbiAgICAgIHRoaXMucG9wdXAuY2xvc2VPbkNvbXBsZXRlVGltZW91dCA9IG5ld1Byb3BzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQ7XG4gICAgfVxuICAgIHRoaXMucG9wdXAuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMucG9wdXAuaXNFeHBhbmRlZCAmJiAobmV3UHJvcHMuZXhwYW5kZWQgfHwgbmV3UHJvcHMuaXNFeHBhbmRlZCkpXG4gICAgICB0aGlzLnBvcHVwLmV4cGFuZCgpO1xuICB9XG59XG4vKipcbiAqIE9ic29sZXRlLiBQbGVhc2UgdXNlIFBvcHVwU3VydmV5XG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlXaW5kb3cgZXh0ZW5kcyBQb3B1cFN1cnZleSB7fVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiwgUGFnZU1vZGVsLCBTdXJ2ZXlFcnJvciwgU3R5bGVzTWFuYWdlciwgc3VydmV5Q3NzLCBIZWxwZXJzLCBkb0tleTJDbGlja1VwLCBTdmdSZWdpc3RyeSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIgfSBmcm9tIFwiLi9zdHJpbmctdmlld2VyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlIZWFkZXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlclwiO1xuaW1wb3J0IHsgU3VydmV5VGltZXJQYW5lbCB9IGZyb20gXCIuL3JlYWN0dGltZXJwYW5lbFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IGRvS2V5MkNsaWNrQmx1ciwgZG9LZXkyQ2xpY2tEb3duLCBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IEJyYW5kSW5mbyB9IGZyb20gXCIuL2NvbXBvbmVudHMvYnJhbmQtaW5mb1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+XG4gIGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xuICBwcml2YXRlIHByZXZpb3VzSlNPTiA9IHt9O1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNzc1R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5Q3NzLmN1cnJlbnRUeXBlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IGNzc1R5cGUodmFsdWU6IHN0cmluZykge1xuICAgIFN0eWxlc01hbmFnZXIuYXBwbHlUaGVtZSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHN1cnZleTogU3VydmV5TW9kZWw7XG5cbiAgcHJpdmF0ZSByb290Tm9kZUlkOiBzdHJpbmc7IC8vIHJvb3QgZG9tIG5vZGUgSUQgYXR0clxuICBwcml2YXRlIHJvb3ROb2RlQ2xhc3NOYW1lOiBzdHJpbmc7IC8vIHJvb3QgZG9tIG5vZGUgY2xhc3NcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlVHJ5QWdhaW5DbGljayA9IHRoaXMuaGFuZGxlVHJ5QWdhaW5DbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlU3VydmV5KHByb3BzKTtcbiAgICB0aGlzLnVwZGF0ZVN1cnZleShwcm9wcywge30pO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMucm9vdE5vZGVJZCA9IHByb3BzLmlkIHx8IG51bGw7XG4gICAgdGhpcy5yb290Tm9kZUNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSB8fCBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5O1xuICB9XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc01vZGVsSlNPTkNoYW5nZWQobmV4dFByb3BzKSkge1xuICAgICAgdGhpcy5jcmVhdGVTdXJ2ZXkobmV4dFByb3BzKTtcbiAgICAgIHRoaXMudXBkYXRlU3VydmV5KG5leHRQcm9wcywge30pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnVwZGF0ZVN1cnZleSh0aGlzLnByb3BzLCBwcmV2UHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsICYmIHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5hZnRlclJlbmRlclN1cnZleShlbCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zdGFydFRpbWVyRnJvbVVJKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zdG9wVGltZXIoKTtcbiAgICB9XG4gIH1cbiAgZG9SZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKHRoaXMuc3VydmV5W1wibmVlZFJlbmRlckljb25zXCJdKSB7XG4gICAgICBTdmdSZWdpc3RyeS5yZW5kZXJJY29ucygpO1xuICAgIH1cbiAgICBsZXQgcmVuZGVyUmVzdWx0OiBKU1guRWxlbWVudDtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgcmVuZGVyUmVzdWx0ID0gdGhpcy5yZW5kZXJDb21wbGV0ZWQoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwiY29tcGxldGVkYmVmb3JlXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyQ29tcGxldGVkQmVmb3JlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImxvYWRpbmdcIikge1xuICAgICAgcmVuZGVyUmVzdWx0ID0gdGhpcy5yZW5kZXJMb2FkaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyU3VydmV5KCk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcjogSlNYLkVsZW1lbnQgPSA8U3VydmV5SGVhZGVyIHN1cnZleT17dGhpcy5zdXJ2ZXl9PjwvU3VydmV5SGVhZGVyPjtcbiAgICBjb25zdCBvblN1Ym1pdCA9IGZ1bmN0aW9uIChldmVudDogUmVhY3QuRm9ybUV2ZW50PEhUTUxGb3JtRWxlbWVudD4pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcbiAgICBsZXQgY3VzdG9tSGVhZGVyOiBKU1guRWxlbWVudCA9IDxkaXYgY2xhc3NOYW1lPVwic3ZfY3VzdG9tX2hlYWRlclwiIC8+O1xuICAgIGlmICh0aGlzLnN1cnZleS5oYXNMb2dvKSB7XG4gICAgICBjdXN0b21IZWFkZXIgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCByb290Q3NzID0gdGhpcy5zdXJ2ZXkuZ2V0Um9vdENzcygpO1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lID8gdGhpcy5yb290Tm9kZUNsYXNzTmFtZSArIFwiIFwiICsgcm9vdENzcyA6IHJvb3RDc3M7XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmKCEhdGhpcy5zdXJ2ZXkud2lkdGgpIHtcbiAgICAgIHN0eWxlLndpZHRoID0gdGhpcy5zdXJ2ZXkud2lkdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgaWQ9e3RoaXMucm9vdE5vZGVJZH0gcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc30gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e29uU3VibWl0fT5cbiAgICAgICAgICB7Y3VzdG9tSGVhZGVyfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5jb250YWluZXJ9PlxuICAgICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICAgIHtyZW5kZXJSZXN1bHR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgICAgeyB0aGlzLnN1cnZleS5zaG93QnJhbmRJbmZvID8gPEJyYW5kSW5mby8+IDogbnVsbCB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5kb1JlbmRlcigpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LmNzcztcbiAgfVxuICBwdWJsaWMgc2V0IGNzcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkuY3NzID0gdmFsdWU7XG4gIH1cbiAgaGFuZGxlVHJ5QWdhaW5DbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkuZG9Db21wbGV0ZSgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb21wbGV0ZWQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkuc2hvd0NvbXBsZXRlZFBhZ2UpIHJldHVybiBudWxsO1xuICAgIHZhciBjb21wbGV0ZWRTdGF0ZSA9IG51bGw7XG4gICAgaWYgKHRoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlKSB7XG4gICAgICB2YXIgdHJ5QWdhaW5CdXR0b24gPSBudWxsO1xuICAgICAgaWYgKHRoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlID09IFwiZXJyb3JcIikge1xuICAgICAgICB2YXIgYnRuVGV4dCA9IHRoaXMuc3VydmV5LmdldExvY2FsaXphdGlvblN0cmluZyhcInNhdmVBZ2FpbkJ1dHRvblwiKTtcbiAgICAgICAgdHJ5QWdhaW5CdXR0b24gPSAoXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPXtcImJ1dHRvblwifVxuICAgICAgICAgICAgdmFsdWU9e2J0blRleHR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnNhdmVEYXRhLnNhdmVBZ2FpbkJ1dHRvbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlVHJ5QWdhaW5DbGlja31cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdmFyIGNzcyA9IHRoaXMuY3NzLnNhdmVEYXRhW3RoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlXTtcbiAgICAgIGNvbXBsZXRlZFN0YXRlID0gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3Muc2F2ZURhdGEucm9vdH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc30+XG4gICAgICAgICAgICA8c3Bhbj57dGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGVUZXh0fTwvc3Bhbj5cbiAgICAgICAgICAgIHt0cnlBZ2FpbkJ1dHRvbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEh0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuc3VydmV5LmNvbXBsZXRlZENzc31cbiAgICAgICAgLz5cbiAgICAgICAge2NvbXBsZXRlZFN0YXRlfVxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb21wbGV0ZWRCZWZvcmUoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkQmVmb3JlSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IGNsYXNzTmFtZT17dGhpcy5jc3MuYm9keX0gLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJMb2FkaW5nKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZExvYWRpbmdIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gY2xhc3NOYW1lPXt0aGlzLmNzcy5ib2R5fSAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclN1cnZleSgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGFjdGl2ZVBhZ2UgPSB0aGlzLnN1cnZleS5hY3RpdmVQYWdlXG4gICAgICA/IHRoaXMucmVuZGVyUGFnZSh0aGlzLnN1cnZleS5hY3RpdmVQYWdlKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGlzU3RhcmluZyA9IHRoaXMuc3VydmV5LmlzU2hvd1N0YXJ0aW5nUGFnZTtcbiAgICB2YXIgcGFnZUlkID0gdGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZSA/IHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2UuaWQgOiBcIlwiO1xuICAgIHZhciB0b3BQcm9ncmVzcyA9IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Ub3AgJiYgIWlzU3RhcmluZ1xuICAgICAgPyB0aGlzLnJlbmRlclByb2dyZXNzKHRydWUpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIGJvdHRvbVByb2dyZXNzID0gdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbSAmJiAhaXNTdGFyaW5nXG4gICAgICA/IHRoaXMucmVuZGVyUHJvZ3Jlc3MoZmFsc2UpXG4gICAgICA6IG51bGw7XG4gICAgbGV0IGNsYXNzTmFtZSA9IHRoaXMuc3VydmV5LmJvZHlDc3M7XG4gICAgaWYgKCFhY3RpdmVQYWdlKSB7XG4gICAgICBjbGFzc05hbWUgPSB0aGlzLmNzcy5ib2R5RW1wdHk7XG4gICAgICBhY3RpdmVQYWdlID0gdGhpcy5yZW5kZXJFbXB0eVN1cnZleSgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBpZD17cGFnZUlkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgID5cbiAgICAgICAge3RvcFByb2dyZXNzfVxuICAgICAgICB7dGhpcy5yZW5kZXJUaW1lclBhbmVsKFwidG9wXCIpfVxuICAgICAgICB7dGhpcy5yZW5kZXJOYXZpZ2F0aW9uKFwidG9wXCIpfVxuICAgICAgICB7YWN0aXZlUGFnZX1cbiAgICAgICAge3RoaXMucmVuZGVyVGltZXJQYW5lbChcImJvdHRvbVwiKX1cbiAgICAgICAge2JvdHRvbVByb2dyZXNzfVxuICAgICAgICB7dGhpcy5yZW5kZXJOYXZpZ2F0aW9uKFwiYm90dG9tXCIpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGltZXJQYW5lbChsb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgaWYodGhpcy5zdXJ2ZXkuaXNTaG93U3RhcnRpbmdQYWdlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAobG9jYXRpb24gPT09IFwidG9wXCIgJiYgIXRoaXMuc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPblRvcClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGlmIChsb2NhdGlvbiA9PT0gXCJib3R0b21cIiAmJiAhdGhpcy5zdXJ2ZXkuaXNUaW1lclBhbmVsU2hvd2luZ09uQm90dG9tKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlUaW1lclBhbmVsIHRpbWVyTW9kZWw9e3RoaXMuc3VydmV5LnRpbWVyTW9kZWx9IC8+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYWdlKHBhZ2U6IFBhZ2VNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVBhZ2VcbiAgICAgICAgc3VydmV5PXt0aGlzLnN1cnZleX1cbiAgICAgICAgcGFnZT17cGFnZX1cbiAgICAgICAgY3NzPXt0aGlzLmNzc31cbiAgICAgICAgY3JlYXRvcj17dGhpc31cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUHJvZ3Jlc3MoaXNUb3A6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIFwic3YtcHJvZ3Jlc3MtXCIgKyB0aGlzLnN1cnZleS5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgIHsgc3VydmV5OiB0aGlzLnN1cnZleSwgY3NzOiB0aGlzLmNzcywgaXNUb3A6IGlzVG9wIH1cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0aW9uKG5hdlBvc2l0aW9uOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgIT09IFwiYm90aFwiICYmXG4gICAgICAodGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgPT09IFwibm9uZVwiIHx8XG4gICAgICAgIHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nICE9PSBuYXZQb3NpdGlvbilcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5zdXJ2ZXkubmF2aWdhdGlvbkJhcn0gLz47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVtcHR5U3VydmV5KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPHNwYW4+e3RoaXMuc3VydmV5LmVtcHR5U3VydmV5VGV4dH08L3NwYW4+O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkobmV3UHJvcHM6IGFueSkge1xuICAgIGlmICghbmV3UHJvcHMpIG5ld1Byb3BzID0ge307XG4gICAgdGhpcy5wcmV2aW91c0pTT04gPSB7fTtcbiAgICBpZiAobmV3UHJvcHMpIHtcbiAgICAgIGlmIChuZXdQcm9wcy5tb2RlbCkge1xuICAgICAgICB0aGlzLnN1cnZleSA9IG5ld1Byb3BzLm1vZGVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld1Byb3BzLmpzb24pIHtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzSlNPTiA9IG5ld1Byb3BzLmpzb247XG4gICAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXcgU3VydmV5TW9kZWwobmV3UHJvcHMuanNvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXcgU3VydmV5TW9kZWwoKTtcbiAgICB9XG4gICAgaWYgKCEhbmV3UHJvcHMuY3NzKSB7XG4gICAgICB0aGlzLnN1cnZleS5jc3MgPSB0aGlzLmNzcztcbiAgICB9XG4gICAgdGhpcy5zZXRTdXJ2ZXlFdmVudHMoKTtcbiAgfVxuICBwcml2YXRlIGlzTW9kZWxKU09OQ2hhbmdlZChuZXdQcm9wczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCEhbmV3UHJvcHNbXCJtb2RlbFwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ICE9PSBuZXdQcm9wc1tcIm1vZGVsXCJdO1xuICAgIH1cbiAgICBpZiAoISFuZXdQcm9wc1tcImpzb25cIl0pIHtcbiAgICAgIHJldHVybiAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1Byb3BzW1wianNvblwiXSwgdGhpcy5wcmV2aW91c0pTT04pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVN1cnZleShuZXdQcm9wczogYW55LCBvbGRQcm9wcz86IGFueSkge1xuICAgIGlmICghbmV3UHJvcHMpIHJldHVybjtcbiAgICBvbGRQcm9wcyA9IG9sZFByb3BzIHx8IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBuZXdQcm9wcykge1xuICAgICAgaWYgKGtleSA9PSBcIm1vZGVsXCIgfHwga2V5ID09IFwiY2hpbGRyZW5cIiB8fCBrZXkgPT0gXCJqc29uXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09IFwiY3NzXCIpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkubWVyZ2VWYWx1ZXMobmV3UHJvcHMuY3NzLCB0aGlzLnN1cnZleS5nZXRDc3MoKSk7XG4gICAgICAgIHRoaXMuc3VydmV5W1widXBkYXRlTmF2aWdhdGlvbkNzc1wiXSgpO1xuICAgICAgICB0aGlzLnN1cnZleVtcInVwZGF0ZUVsZW1lbnRDc3NcIl0oKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAobmV3UHJvcHNba2V5XSA9PT0gb2xkUHJvcHNba2V5XSkgY29udGludWU7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoXCJvblwiKSA9PSAwICYmIHRoaXMuc3VydmV5W2tleV0gJiYgdGhpcy5zdXJ2ZXlba2V5XS5hZGQpIHtcbiAgICAgICAgaWYgKCEhb2xkUHJvcHNba2V5XSkge1xuICAgICAgICAgIHRoaXMuc3VydmV5W2tleV0ucmVtb3ZlKG9sZFByb3BzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VydmV5W2tleV0uYWRkKG5ld1Byb3BzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XSA9IG5ld1Byb3BzW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXRTdXJ2ZXlFdmVudHMoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY291bnRlciA9XG4gICAgICAgICEhc2VsZi5zdGF0ZSAmJiAhIXNlbGYuc3RhdGUubW9kZWxDaGFuZ2VkID8gc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgOiAwO1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IG1vZGVsQ2hhbmdlZDogY291bnRlciArIDEgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN1cnZleS5vblBhcnRpYWxTZW5kLmFkZCgoc2VuZGVyKSA9PiB7XG4gICAgICBpZiAoISFzZWxmLnN0YXRlKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvL0lTdXJ2ZXlDcmVhdG9yXG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29uIHx8IHVuZGVmaW5lZH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVycm9yLml0ZW0gfHwgdW5kZWZpbmVkfT5cbiAgICAgICAgICA8U3VydmV5TG9jU3RyaW5nVmlld2VyIGxvY1N0cj17ZXJyb3IubG9jVGV4dH0gLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEtleTJjbGljayhlbGVtZW50OiBKU1guRWxlbWVudCwgdmlld01vZGVsPzogYW55LCBvcHRpb25zOiBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSwgZGlzYWJsZVRhYlN0b3A6IGZhbHNlIH0pOiBKU1guRWxlbWVudCB7XG4gIGlmICgoISF2aWV3TW9kZWwgJiYgdmlld01vZGVsLmRpc2FibGVUYWJTdG9wKSB8fCAoISFvcHRpb25zICYmIG9wdGlvbnMuZGlzYWJsZVRhYlN0b3ApKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7IHRhYkluZGV4OiAtMSB9KTtcbiAgfVxuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KFxuICAgIGVsZW1lbnQsXG4gICAge1xuICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICBvbktleVVwOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGRvS2V5MkNsaWNrVXAoZXZ0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIG9uS2V5RG93bjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0Rvd24oZXZ0LCBvcHRpb25zKSxcbiAgICAgIG9uQmx1cjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0JsdXIoZXZ0KVxuICAgIH1cbiAgKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHVwZGF0ZTogMCB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZUZ1bmN0aW9uOiBhbnkgPSBudWxsO1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7IHVwZGF0ZTogc2VsZi5zdGF0ZS51cGRhdGUgKyAxIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc3VydmV5Lm9uUGFnZVZpc2libGVDaGFuZ2VkLmFkZCh0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKSB7XG4gICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5yZW1vdmUodGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvZ3Jlc3MgZXh0ZW5kcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc1RvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc1RvcDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnByb2dyZXNzVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwcm9ncmVzc1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NUZXh0O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlID0gdGhpcy5pc1RvcCA/IHt9IDogeyBtYXJnaW5Ub3A6IFwiMWVtXCIgfTtcbiAgICB2YXIgcHJvZ3Jlc3NTdHlsZSA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLnByb2dyZXNzICsgXCIlXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3Byb2dyZXNzU3R5bGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0Jhcn1cbiAgICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICAgIGFyaWEtdmFsdWVtaW49ezB9XG4gICAgICAgICAgYXJpYS12YWx1ZW1heD17MTAwfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17U3VydmV5UHJvZ3Jlc3NNb2RlbC5nZXRQcm9ncmVzc1RleHRJbkJhckNzcyh0aGlzLmNzcyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvZ3Jlc3NUZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXtTdXJ2ZXlQcm9ncmVzc01vZGVsLmdldFByb2dyZXNzVGV4dFVuZGVyQmFyQ3NzKHRoaXMuY3NzKX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnByb2dyZXNzVGV4dH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXByb2dyZXNzLXBhZ2VzXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbn0pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1xdWVzdGlvbnNcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xufSk7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wcm9ncmVzcy1jb3JyZWN0UXVlc3Rpb25zXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xuICB9XG4pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcHJvZ3Jlc3MtcmVxdWlyZWRRdWVzdGlvbnNcIixcbiAgcHJvcHMgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsLCBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvZ3Jlc3NCdXR0b25zIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xuICBwcml2YXRlIHByb2dyZXNzQnV0dG9uc01vZGVsOiBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbDtcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxlcjogYW55ID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGxpc3RDb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbCA9IG5ldyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCh0aGlzLnN1cnZleSk7XG4gICAgdGhpcy5saXN0Q29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlcn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRTY3JvbGxCdXR0b25Dc3ModHJ1ZSl9XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuY2xpY2tTY3JvbGxCdXR0b24odGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcn1cbiAgICAgICAgICAgIHJlZj17dGhpcy5saXN0Q29udGFpbmVyUmVmfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0xpc3R9PlxuICAgICAgICAgICAgICB7dGhpcy5nZXRMaXN0RWxlbWVudHMoKX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldFNjcm9sbEJ1dHRvbkNzcyhmYWxzZSl9XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuY2xpY2tTY3JvbGxCdXR0b24odGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRMaXN0RWxlbWVudHMoKTogSlNYLkVsZW1lbnRbXSB7XG4gICAgbGV0IGJ1dHRvbnM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICB0aGlzLnN1cnZleS52aXNpYmxlUGFnZXMuZm9yRWFjaCgocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBidXR0b25zLnB1c2godGhpcy5yZW5kZXJMaXN0RWxlbWVudChwYWdlLCBpbmRleCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBidXR0b25zO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJMaXN0RWxlbWVudChwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsaVxuICAgICAgICBrZXk9e1wibGlzdGVsZW1lbnRcIiArIGluZGV4fVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpfVxuICAgICAgICBvbkNsaWNrPXtcbiAgICAgICAgICB0aGlzLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpXG4gICAgICAgICAgICA/ICgpID0+IHRoaXMuY2xpY2tMaXN0RWxlbWVudChpbmRleClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlfVxuICAgICAgICAgIHRpdGxlPXtwYWdlLm5hdmlnYXRpb25UaXRsZSB8fCBwYWdlLm5hbWV9XG4gICAgICAgID5cbiAgICAgICAgICB7cGFnZS5uYXZpZ2F0aW9uVGl0bGUgfHwgcGFnZS5uYW1lfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9ufVxuICAgICAgICAgIHRpdGxlPXtwYWdlLm5hdmlnYXRpb25EZXNjcmlwdGlvbn1cbiAgICAgICAgPlxuICAgICAgICAgIHtwYWdlLm5hdmlnYXRpb25EZXNjcmlwdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRMaXN0RWxlbWVudENzcyhpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5nZXRMaXN0RWxlbWVudENzcyhpbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsaWNrTGlzdEVsZW1lbnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuY2xpY2tMaXN0RWxlbWVudChpbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNjcm9sbEJ1dHRvbkNzcyhpc0xlZnRTY3JvbGw6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldFNjcm9sbEJ1dHRvbkNzcyh0aGlzLnN0YXRlLmhhc1Njcm9sbGVyLCBpc0xlZnRTY3JvbGwpO1xuICB9XG4gIHByb3RlY3RlZCBjbGlja1Njcm9sbEJ1dHRvbihcbiAgICBsaXN0Q29udGFpbmVyRWxlbWVudDogRWxlbWVudCxcbiAgICBpc0xlZnRTY3JvbGw6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgaWYoISFsaXN0Q29udGFpbmVyRWxlbWVudCkge1xuICAgICAgbGlzdENvbnRhaW5lckVsZW1lbnQuc2Nyb2xsTGVmdCArPSAoaXNMZWZ0U2Nyb2xsID8gLTEgOiAxKSAqIDcwO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYoISF0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgaGFzU2Nyb2xsZXI6IHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LnNjcm9sbFdpZHRoID4gdGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgsIH0pO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZVNjcm9sbGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlU2Nyb2xsZXIpO1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1idXR0b25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBCYXNlLFxuICBTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlFcnJvcixcbiAgUXVlc3Rpb24sXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gIFRvb2x0aXBNYW5hZ2VyLFxuICBTdXJ2ZXlNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UsIFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5Q3VzdG9tV2lkZ2V0IH0gZnJvbSBcIi4vY3VzdG9tLXdpZGdldFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEhlYWRlciB9IGZyb20gXCIuL2VsZW1lbnQtaGVhZGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3Ige1xuICBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQ7XG4gIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IsIGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50O1xuICBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nO1xuICBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGlzTmVlZEZvY3VzID0gZmFsc2U7XG4gIHB1YmxpYyBzdGF0aWMgcmVuZGVyUXVlc3Rpb25Cb2R5KFxuICAgIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblxuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFxdWVzdGlvbi5pc1Zpc2libGUpIHJldHVybiBudWxsO1xuICAgIHZhciBjdXN0b21XaWRnZXQgPSBxdWVzdGlvbi5jdXN0b21XaWRnZXQ7XG4gICAgaWYgKCFjdXN0b21XaWRnZXQpIHtcbiAgICAgIHJldHVybiBjcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiA8U3VydmV5Q3VzdG9tV2lkZ2V0IGNyZWF0b3I9e2NyZWF0b3J9IHF1ZXN0aW9uPXtxdWVzdGlvbn0gLz47XG4gIH1cbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbltcInJlYWN0XCJdID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uW1wicmVhY3RcIl0gPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwcml2YXRlIGRvQWZ0ZXJSZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNOZWVkRm9jdXMpIHtcbiAgICAgIGlmICghdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmNsaWNrVGl0bGVGdW5jdGlvbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5pc05lZWRGb2N1cyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZWwgJiYgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCIpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtbmFtZVwiLCB0aGlzLnF1ZXN0aW9uLm5hbWUpO1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5hZnRlclJlbmRlcikge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXIoZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmNhblJlbmRlcigpICYmXG4gICAgICAhIXRoaXMucXVlc3Rpb24gJiZcbiAgICAgICEhdGhpcy5jcmVhdG9yICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb25Db250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjb250ZW50U3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiAhdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCA/IFwiXCIgOiBcIm5vbmVcIixcbiAgICB9O1xuICAgIHZhciBjc3NDbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcXVlc3Rpb25SZW5kZXIgPSB0aGlzLnJlbmRlclF1ZXN0aW9uKCk7XG4gICAgdmFyIGVycm9yc1RvcCA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yT25Ub3BcbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJ0b3BcIilcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgZXJyb3JzQm90dG9tID0gdGhpcy5xdWVzdGlvbi5zaG93RXJyb3JPbkJvdHRvbVxuICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcImJvdHRvbVwiKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBjb21tZW50ID1cbiAgICAgIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLmhhc0NvbW1lbnQgPyB0aGlzLnJlbmRlckNvbW1lbnQoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IGVycm9yc1Rvb2x0aXAgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJ0b29sdGlwXCIpXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgZGVzY3JpcHRpb25VbmRlcklucHV0ID0gcXVlc3Rpb24uaGFzRGVzY3JpcHRpb25VbmRlcklucHV0XG4gICAgICA/IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ29udGVudCB8fCB1bmRlZmluZWR9XG4gICAgICAgIHN0eWxlPXtjb250ZW50U3R5bGV9XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICB7ZXJyb3JzVG9wfVxuICAgICAgICB7cXVlc3Rpb25SZW5kZXJ9XG4gICAgICAgIHtjb21tZW50fVxuICAgICAgICB7ZXJyb3JzQm90dG9tfVxuICAgICAgICB7ZXJyb3JzVG9vbHRpcH1cbiAgICAgICAge2Rlc2NyaXB0aW9uVW5kZXJJbnB1dH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIGNzc0NsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBoZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcihxdWVzdGlvbik7XG4gICAgdmFyIGhlYWRlclRvcCA9IHF1ZXN0aW9uLmhhc1RpdGxlT25MZWZ0VG9wID8gaGVhZGVyIDogbnVsbDtcbiAgICB2YXIgaGVhZGVyQm90dG9tID0gcXVlc3Rpb24uaGFzVGl0bGVPbkJvdHRvbSA/IGhlYWRlciA6IG51bGw7XG5cbiAgICBjb25zdCBlcnJvcnNBYm92ZVF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbi5zaG93RXJyb3JzQWJvdmVRdWVzdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcIlwiKVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgZXJyb3JzQmVsb3dRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yc0JlbG93UXVlc3Rpb25cbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJcIilcbiAgICAgIDogbnVsbDtcblxuICAgIGxldCByb290U3R5bGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdMZWZ0KSByb290U3R5bGVbXCJwYWRkaW5nTGVmdFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdMZWZ0O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdSaWdodClcbiAgICAgIHJvb3RTdHlsZVtcInBhZGRpbmdSaWdodFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdSaWdodDtcblxuICAgIGxldCBxdWVzdGlvbkNvbnRlbnQgPSB0aGlzLndyYXBRdWVzdGlvbkNvbnRlbnQodGhpcy5yZW5kZXJRdWVzdGlvbkNvbnRlbnQoKSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgICBpZD17cXVlc3Rpb24uaWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbi5nZXRSb290Q3NzKCl9XG4gICAgICAgICAgc3R5bGU9e3Jvb3RTdHlsZX1cbiAgICAgICAgICByb2xlPXtxdWVzdGlvbi5hcmlhUm9sZX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtxdWVzdGlvbi5oYXNUaXRsZSA/IHF1ZXN0aW9uLmFyaWFUaXRsZUlkIDogbnVsbH1cbiAgICAgICAgPlxuICAgICAgICAgIHtlcnJvcnNBYm92ZVF1ZXN0aW9ufVxuICAgICAgICAgIHtoZWFkZXJUb3B9XG4gICAgICAgICAge3F1ZXN0aW9uQ29udGVudH1cbiAgICAgICAgICB7aGVhZGVyQm90dG9tfVxuICAgICAgICAgIHtlcnJvcnNCZWxvd1F1ZXN0aW9ufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBFbGVtZW50KHN1cnZleSwgZWxlbWVudCwgdGhpcy5xdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBRdWVzdGlvbkNvbnRlbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcFF1ZXN0aW9uQ29udGVudChzdXJ2ZXksIGVsZW1lbnQsIHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGRlc2NyaXB0aW9uVGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMucXVlc3Rpb24ubG9jRGVzY3JpcHRpb25cbiAgICApO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NEZXNjcmlwdGlvbn0+e2Rlc2NyaXB0aW9uVGV4dH08L2Rpdj47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbW1lbnQoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjb21tZW50VGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMucXVlc3Rpb24ubG9jQ29tbWVudFRleHRcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvcm1Hcm91cH0+XG4gICAgICAgIDxkaXY+e2NvbW1lbnRUZXh0fTwvZGl2PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8U3VydmV5RWxlbWVudEhlYWRlciBlbGVtZW50PXtxdWVzdGlvbn0+PC9TdXJ2ZXlFbGVtZW50SGVhZGVyPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRXJyb3JzKGNzc0NsYXNzZXM6IGFueSwgbG9jYXRpb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17bG9jYXRpb259XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJxdWVzdGlvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb24sIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEVycm9ycyBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICB0aGlzLnRvb2x0aXBSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdGF0ZShwcmV2U3RhdGU6IGFueSA9IG51bGwpIHtcbiAgICByZXR1cm4gIXByZXZTdGF0ZSA/IHsgZXJyb3I6IDAgfSA6IHsgZXJyb3I6IHByZXZTdGF0ZS5lcnJvciArIDEgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZWxlbWVudCAmJiB0aGlzLmVsZW1lbnQuaGFzVmlzaWJsZUVycm9ycztcbiAgfVxuICBwcml2YXRlIHRvb2x0aXBNYW5hZ2VyOiBUb29sdGlwTWFuYWdlcjtcbiAgcHJpdmF0ZSB0b29sdGlwUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAodGhpcy5wcm9wcy5sb2NhdGlvbiA9PSBcInRvb2x0aXBcIikge1xuICAgICAgaWYgKHRoaXMudG9vbHRpcFJlZi5jdXJyZW50ICYmICF0aGlzLnRvb2x0aXBNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcE1hbmFnZXIgPSBuZXcgVG9vbHRpcE1hbmFnZXIodGhpcy50b29sdGlwUmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgaWYgKCEhdGhpcy50b29sdGlwTWFuYWdlciAmJiAhdGhpcy50b29sdGlwUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlVG9vbHRpcE1hbmFnZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKCEhdGhpcy50b29sdGlwTWFuYWdlcikge1xuICAgICAgdGhpcy5kaXNwb3NlVG9vbHRpcE1hbmFnZXIoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkaXNwb3NlVG9vbHRpcE1hbmFnZXIoKSB7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlci5kaXNwb3NlKCk7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlciA9IHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnQuZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IFwiZXJyb3JcIiArIGk7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgdGhpcy5jcmVhdG9yLnJlbmRlckVycm9yKGtleSwgdGhpcy5lbGVtZW50LmVycm9yc1tpXSwgdGhpcy5jc3NDbGFzc2VzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuZWxlbWVudC5jc3NFcnJvcn1cbiAgICAgICAgaWQ9e3RoaXMuaWR9XG4gICAgICAgIHJlZj17dGhpcy50b29sdGlwUmVmfVxuICAgICAgPlxuICAgICAgICB7ZXJyb3JzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbUNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW1Dc3M7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9BZnRlclJlbmRlcigpIHsgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhlcnJvcnNMb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0Vycm9ycygpID8gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGxvY2F0aW9uPXtlcnJvcnNMb2NhdGlvbn1cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBlcnJvcnNMb2NhdGlvbiA9IHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKTtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5yZW5kZXJFcnJvcnMoZXJyb3JzTG9jYXRpb24pO1xuICAgIHZhciBlcnJvcnNUb3AgPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uVG9wXG4gICAgICA/IGVycm9yc1xuICAgICAgOiBudWxsO1xuICAgIHZhciBlcnJvcnNCb3R0b20gPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uQm90dG9tXG4gICAgICA/IGVycm9yc1xuICAgICAgOiBudWxsO1xuICAgIHZhciByZW5kZXJlZFF1ZXN0aW9uID0gdGhpcy5yZW5kZXJRdWVzdGlvbigpO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7ZXJyb3JzVG9wfVxuICAgICAgICB7cmVuZGVyZWRRdWVzdGlvbn1cbiAgICAgICAge2Vycm9yc0JvdHRvbX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQ7XG4gIHByb3RlY3RlZCBnZXRTaG93RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIHtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIHByb3RlY3RlZCBjZWxsUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY2VsbFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuY2VsbFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZSA9IHRoaXMuZ2V0Q2VsbFN0eWxlKCk7XG4gICAgdmFyIGVycm9yc1Rvb2x0aXAgPSB0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXBcbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoXCJ0b29sdGlwXCIpXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZFxuICAgICAgICByZWY9e3RoaXMuY2VsbFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW1Dc3N9XG4gICAgICAgIGRhdGEtcmVzcG9uc2l2ZS10aXRsZT17dGhpcy5nZXRIZWFkZXJUZXh0KCl9XG4gICAgICAgIHRpdGxlPXt0aGlzLnByb3BzLmNlbGwuZ2V0VGl0bGUoKX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgPlxuICAgICAgICB7dGhpcy53cmFwQ2VsbCh0aGlzLnByb3BzLmNlbGwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jZWxsUXVlc3Rpb25XcmFwcGVyfT5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ29udGVudCgpfVxuICAgICAgICAgICAgICB7ZXJyb3JzVG9vbHRpcH1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgKX1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2VsbFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcENlbGwoXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgICBlbGVtZW50OiBKU1guRWxlbWVudFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFjZWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcE1hdHJpeENlbGwoc3VydmV5LCBlbGVtZW50LCBjZWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwsXG4gIEJ1dHRvbkdyb3VwSXRlbVZhbHVlLFxuICBCdXR0b25Hcm91cEl0ZW1Nb2RlbCxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsO1xuICB9XG4gIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9PntpdGVtc308L2Rpdj47XG4gIH1cbiAgcmVuZGVySXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgKGl0ZW06IEJ1dHRvbkdyb3VwSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFN1cnZleUJ1dHRvbkdyb3VwSXRlbVxuICAgICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgID48L1N1cnZleUJ1dHRvbkdyb3VwSXRlbT5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlCdXR0b25Hcm91cEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwdWJsaWMgbW9kZWw6IEJ1dHRvbkdyb3VwSXRlbU1vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIGdldCBpdGVtKCk6IEJ1dHRvbkdyb3VwSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFbGVtZW50KCkge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgQnV0dG9uR3JvdXBJdGVtTW9kZWwodGhpcy5xdWVzdGlvbiwgdGhpcy5pdGVtLCB0aGlzLmluZGV4KTtcbiAgICBjb25zdCBpY29uID0gdGhpcy5yZW5kZXJJY29uKCk7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgY29uc3QgY2FwdGlvbiA9IHRoaXMucmVuZGVyQ2FwdGlvbigpO1xuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWxcbiAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5sYWJlbH1cbiAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuY2FwdGlvbi5yZW5kZXJlZEh0bWx9XG4gICAgICA+XG4gICAgICAgIHtpbnB1dH1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmRlY29yYXRvcn0+XG4gICAgICAgICAge2ljb259XG4gICAgICAgICAge2NhcHRpb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJY29uKCkge1xuICAgIGlmICghIXRoaXMubW9kZWwuaWNvbk5hbWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5pY29ufVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLmljb25OYW1lfVxuICAgICAgICAgIHNpemU9e3RoaXMubW9kZWwuaWNvblNpemUgfHwgMjR9XG4gICAgICAgID48L1N2Z0ljb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmNvbnRyb2x9XG4gICAgICAgIGlkPXt0aGlzLm1vZGVsLmlkfVxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBuYW1lPXt0aGlzLm1vZGVsLm5hbWV9XG4gICAgICAgIGNoZWNrZWQ9e3RoaXMubW9kZWwuc2VsZWN0ZWR9XG4gICAgICAgIHZhbHVlPXt0aGlzLm1vZGVsLnZhbHVlfVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5tb2RlbC5yZWFkT25seX1cbiAgICAgICAgb25DaGFuZ2U9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLm9uQ2hhbmdlKCk7XG4gICAgICAgIH19XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMubW9kZWwuaXNSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLm1vZGVsLmhhc0Vycm9yc31cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5tb2RlbC5kZXNjcmliZWRCeX1cbiAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2FwdGlvbigpIHtcbiAgICBpZiAoIXRoaXMubW9kZWwuc2hvd0NhcHRpb24pIHJldHVybiBudWxsO1xuICAgIGxldCBjYXB0aW9uID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tb2RlbC5jYXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5jYXB0aW9ufVxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgID5cbiAgICAgICAge2NhcHRpb259XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG4vLyBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYnV0dG9uZ3JvdXBcIiwgcHJvcHMgPT4ge1xuLy8gICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBwcm9wcyk7XG4vLyB9KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9jaGVja2JveFwiO1xuaW1wb3J0IHsgQmFzZSwgSXRlbVZhbHVlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DaGVja2JveCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25DaGVja2JveE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0U2VsZWN0QmFzZVJvb3RDc3MoKX1cbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLmNvbnRyb2wgPSBmaWVsZHNldCl9XG4gICAgICA+XG4gICAgICAgIDxsZWdlbmQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT17XCJzdi1oaWRkZW5cIn0+PC9sZWdlbmQ+XG4gICAgICAgIHt0aGlzLmdldEhlYWRlcigpfVxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5oYXNDb2x1bW5zXG4gICAgICAgICAgPyB0aGlzLmdldENvbHVtbmVkQm9keShjc3NDbGFzc2VzKVxuICAgICAgICAgIDogdGhpcy5nZXRCb2R5KGNzc0NsYXNzZXMpfVxuICAgICAgICB7dGhpcy5nZXRGb290ZXIoKX1cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzT3RoZXIgJiYgdGhpcy5xdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZCh0aGlzLnF1ZXN0aW9uLm90aGVySXRlbSkgPyB0aGlzLnJlbmRlck90aGVyKCkgOiBudWxsfVxuICAgICAgPC9maWVsZHNldD5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEhlYWRlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNIZWFkSXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmhlYWRJdGVtcy5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbV9oXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRGb290ZXIoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzRm9vdEl0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5mb290SXRlbXMubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBcIml0ZW1fZlwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1uZWRCb2R5KGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290TXVsdGlDb2x1bW59PlxuICAgICAgICB7dGhpcy5nZXRDb2x1bW5zKGNzc0NsYXNzZXMpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjaSA9PT0gMCAmJiBpaSA9PT0gMCxcbiAgICAgICAgICBjc3NDbGFzc2VzLFxuICAgICAgICAgIFwiXCIgKyBjaSArIGlpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEJvZHkoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmKHRoaXMucXVlc3Rpb24uYmxvY2tlZFJvdykge1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3RSb3d9Pnt0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMsIHRoaXMucXVlc3Rpb24uZGF0YUNob2ljZXMpfTwvZGl2PjtcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gPD57dGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzLCB0aGlzLnF1ZXN0aW9uLmJvZHlJdGVtcyl9PC8+O1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnksIGNob2ljZXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVuZGVyZWRJdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBjaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiaXRlbVwiICsgaTtcbiAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlckl0ZW0oa2V5LCBpdGVtLCBpID09IDAsIGNzc0NsYXNzZXMsIFwiXCIgKyBpKTtcbiAgICAgIHJlbmRlcmVkSXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRJdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBhbnksXG4gICAgaXNGaXJzdDogYm9vbGVhbixcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaW5kZXg6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICB0ZXh0U3R5bGU9e3RoaXMudGV4dFN0eWxlfVxuICAgICAgICBpc0ZpcnN0PXtpc0ZpcnN0fVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0U3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0ZpcnN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNGaXJzdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaGlkZUNhcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZUNhcHRpb24gPT09IHRydWU7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB2YXIgbmV3VmFsdWUgPSBbXS5jb25jYXQodGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIHx8IFtdKTtcbiAgICB2YXIgaW5kZXggPSBuZXdWYWx1ZS5pbmRleE9mKHRoaXMuaXRlbS52YWx1ZSk7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2godGhpcy5pdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgc2VsZWN0QWxsQ2hhbmdlZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi50b2dnbGVTZWxlY3RBbGwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbSAmJiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2hlY2tib3goaXNDaGVja2VkLCBudWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlucHV0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgbWFyZ2luUmlnaHQ6IFwiM3B4XCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2hlY2tib3goXG4gICAgaXNDaGVja2VkOiBib29sZWFuLFxuICAgIG90aGVySXRlbTogSlNYLkVsZW1lbnRcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpZCA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKHRoaXMuaXRlbSk7XG4gICAgdmFyIHRleHQgPSAhdGhpcy5oaWRlQ2FwdGlvbiA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0KSA6IFwiXCI7XG4gICAgbGV0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XG4gICAgbGV0IGxhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgb25JdGVtQ2hhbmdlZCA9XG4gICAgICB0aGlzLml0ZW0gPT0gdGhpcy5xdWVzdGlvbi5zZWxlY3RBbGxJdGVtXG4gICAgICAgID8gdGhpcy5zZWxlY3RBbGxDaGFuZ2VkXG4gICAgICAgIDogdGhpcy5oYW5kbGVPbkNoYW5nZTtcblxuICAgIHZhciBsb2NUZXh0OiBhbnkgPSB0aGlzLml0ZW0ubG9jVGV4dDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17aXRlbUNsYXNzfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2xhYmVsQ2xhc3N9IGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uZ2V0QXJpYUl0ZW1MYWJlbCh0aGlzLml0ZW0pfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udmFsdWUgIT0gXCJzZWxlY3RhbGxcIiA/IHRoaXMuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLmlucHV0U3R5bGV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkl0ZW1DaGFuZ2VkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgP1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+OlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPiA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsfT5cbiAgICAgICAgICAgIHt0ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAge290aGVySXRlbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNoZWNrYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50LCBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ29tbWVudE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uQ29tbWVudE1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBvbkJsdXIgPSAhdGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSA/IHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50IDogbnVsbDtcbiAgICB2YXIgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQoZXZlbnQpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB9O1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlaG9sZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jbGFzc05hbWV9XG4gICAgICAgIGRpc2FibGVkPXsgdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfVxuICAgICAgICByZWFkT25seT17IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH1cbiAgICAgICAgcmVmPXsodGV0eGFyZWEpID0+ICh0aGlzLmNvbnRyb2wgPSB0ZXR4YXJlYSl9XG4gICAgICAgIG1heExlbmd0aD17dGhpcy5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHsgdGhpcy5xdWVzdGlvbi5vbktleURvd24oZXZlbnQpOyB9fVxuICAgICAgICBjb2xzPXt0aGlzLnF1ZXN0aW9uLmNvbHN9XG4gICAgICAgIHJvd3M9e3RoaXMucXVlc3Rpb24ucm93c31cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICBzdHlsZT17eyByZXNpemU6IHRoaXMucXVlc3Rpb24ucmVzaXplU3R5bGUgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgICBsZXQgY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5vdGhlckNzcyB8fCB0aGlzLmNzc0NsYXNzZXMuY29tbWVudDtcbiAgICBsZXQgaGFuZGxlT25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbW1lbnQ6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcbiAgICAgIHF1ZXN0aW9uLm9uQ29tbWVudENoYW5nZShldmVudCk7XG4gICAgfTtcbiAgICBsZXQgc3RhdGVDb21tZW50OiBzdHJpbmcgPSAhIXRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLmNvbW1lbnQgOiB1bmRlZmluZWQ7XG4gICAgaWYoc3RhdGVDb21tZW50ICE9PSB1bmRlZmluZWQgJiYgc3RhdGVDb21tZW50LnRyaW0oKSAhPT0gcXVlc3Rpb24uY29tbWVudCkge1xuICAgICAgc3RhdGVDb21tZW50ID0gcXVlc3Rpb24uY29tbWVudDtcbiAgICB9XG4gICAgbGV0IGNvbW1lbnQgPSBzdGF0ZUNvbW1lbnQgIT09IHVuZGVmaW5lZCA/IHN0YXRlQ29tbWVudCA6IHF1ZXN0aW9uLmNvbW1lbnQgfHwgXCJcIjtcblxuICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pntjb21tZW50fTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgdmFsdWU9e2NvbW1lbnR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIG1heExlbmd0aD17cXVlc3Rpb24uZ2V0T3RoZXJzTWF4TGVuZ3RoKCl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtxdWVzdGlvbi5jb21tZW50T3JPdGhlclBsYWNlSG9sZGVyfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlT25DaGFuZ2V9XG4gICAgICAgIG9uQmx1cj17KGUpID0+IHsgcXVlc3Rpb24ub25Db21tZW50Q2hhbmdlKGUpOyBoYW5kbGVPbkNoYW5nZShlKTsgfSB9XG4gICAgICAgIG9uSW5wdXQ9eyhlKSA9PiBxdWVzdGlvbi5vbkNvbW1lbnRJbnB1dChlKX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17cXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17cXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICBzdHlsZT17eyByZXNpemU6IHF1ZXN0aW9uLnJlc2l6ZVN0eWxlIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ29tbWVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbkN1c3RvbU1vZGVsLCBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DdXN0b20gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25DdXN0b21Nb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICBjb25zdCByZXMgPSBzdXBlci5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgaWYoISF0aGlzLnF1ZXN0aW9uLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgcmVzLnB1c2godGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb24ucmVuZGVyUXVlc3Rpb25Cb2R5KFxuICAgICAgdGhpcy5jcmVhdG9yLFxuICAgICAgdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb25cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlQYW5lbFxuICAgICAgICBlbGVtZW50PXt0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbH1cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgPjwvU3VydmV5UGFuZWw+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY3VzdG9tXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkN1c3RvbSwgcHJvcHMpO1xufSk7XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY29tcG9zaXRlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9kcm9wZG93bi1iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb24+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJkcm9wZG93blwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Ecm9wZG93biwgcHJvcHMpO1xufSk7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnQgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgQmFzZSwgQXJyYXlDaGFuZ2VzLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50QmFzZTxQLCBTPiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQLCBTPiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVuZGVyTG9jU3RyaW5nKFxuICAgIGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcsXG4gICAgc3R5bGU6IGFueSA9IG51bGwsXG4gICAga2V5Pzogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGxvY1N0ci5yZW5kZXJBcywge1xuICAgICAgbG9jU3RyOiBsb2NTdHIucmVuZGVyQXNEYXRhLFxuICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAga2V5OiBrZXksXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBjaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tYWtlQmFzZUVsZW1lbnRzUmVhY3QoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnVuTWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHRoaXMubWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfYWxsb3dDb21wb25lbnRVcGRhdGUgPSB0cnVlO1xuICBwcm90ZWN0ZWQgYWxsb3dDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGUgPSB0cnVlO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZGVueUNvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hbGxvd0NvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xuICB9XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6YW55LCBuZXh0U3RhdGU6YW55KTpib29sZWFuIHtcbiAgICBpZih0aGlzLl9hbGxvd0NvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGU7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuY2FuUmVuZGVyKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRFbmRSZW5kZXJpbmcoMSk7XG4gICAgdmFyIHJlcyA9IHRoaXMucmVuZGVyRWxlbWVudCgpO1xuICAgIHRoaXMuc3RhcnRFbmRSZW5kZXJpbmcoLTEpO1xuXG4gICAgcmVzID0gdGhpcy53cmFwRWxlbWVudChyZXMpO1xuXG4gICAgdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgdmFyIHN0YXRlRWxzOiBBcnJheTxhbnk+ID0gdGhpcy5nZXRSZW5kZXJlZEVsZW1lbnRzKCk7XG4gICAgZm9yKGxldCBzdGF0ZUVsIG9mIHN0YXRlRWxzKSB7XG4gICAgICBpZihzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nID4gMCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRFbGVtZW50cygpOiBCYXNlW10ge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXRlRWxlbWVudHMoKTtcbiAgfVxuICBwcml2YXRlIHN0YXJ0RW5kUmVuZGVyaW5nKHZhbDogbnVtYmVyKSB7XG4gICAgdmFyIHN0YXRlRWxzOiBBcnJheTxhbnk+ID0gdGhpcy5nZXRSZW5kZXJlZEVsZW1lbnRzKCk7XG4gICAgZm9yKGxldCBzdGF0ZUVsIG9mIHN0YXRlRWxzKSB7XG4gICAgICBpZiAoIXN0YXRlRWwucmVhY3RSZW5kZXJpbmcpIHN0YXRlRWwucmVhY3RSZW5kZXJpbmcgPSAwO1xuICAgICAgc3RhdGVFbC5yZWFjdFJlbmRlcmluZyArPSB2YWw7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY2hhbmdlZFN0YXRlUHJvcE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlO1xuICB9XG4gIHByaXZhdGUgbWFrZUJhc2VFbGVtZW50c1JlYWN0KCkge1xuICAgIHZhciBlbHMgPSB0aGlzLmdldFN0YXRlRWxlbWVudHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tYWtlQmFzZUVsZW1lbnRSZWFjdChlbHNbaV0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHVuTWFrZUJhc2VFbGVtZW50c1JlYWN0KCkge1xuICAgIHZhciBlbHMgPSB0aGlzLmdldFN0YXRlRWxlbWVudHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudFJlYWN0KGVsc1tpXSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICB2YXIgZWwgPSB0aGlzLmdldFN0YXRlRWxlbWVudCgpO1xuICAgIHJldHVybiAhIWVsID8gW2VsXSA6IFtdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByb3BzOiBhbnkgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiBwcm9wcy5pc0Rpc3BsYXlNb2RlIHx8IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJMb2NTdHJpbmcoXG4gICAgbG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyxcbiAgICBzdHlsZTogYW55ID0gbnVsbFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhsb2NTdHIsIHN0eWxlKTtcbiAgfVxuICBwcml2YXRlIGNhbk1ha2VSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFzdGF0ZUVsZW1lbnQgJiYgISFzdGF0ZUVsZW1lbnQuaXRlcmF0ZVByb3BlcnRpZXNIYXNoO1xuICB9XG4gIHByaXZhdGUgbWFrZUJhc2VFbGVtZW50UmVhY3Qoc3RhdGVFbGVtZW50OiBCYXNlKSB7XG4gICAgaWYgKCF0aGlzLmNhbk1ha2VSZWFjdChzdGF0ZUVsZW1lbnQpKSByZXR1cm47XG4gICAgc3RhdGVFbGVtZW50Lml0ZXJhdGVQcm9wZXJ0aWVzSGFzaCgoaGFzaCwga2V5KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2FuVXNlUHJvcEluU3RhdGUoa2V5KSkgcmV0dXJuO1xuICAgICAgdmFyIHZhbDogYW55ID0gaGFzaFtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgdmFsOiBhbnkgPSB2YWw7XG4gICAgICAgIHZhbFtcIm9uQXJyYXlDaGFuZ2VkXCJdID0gKGFycmF5Q2hhbmdlczogQXJyYXlDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICAgICAgICB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWUgPSBrZXk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdmFyIG5ld1N0YXRlOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgICAgIG5ld1N0YXRlW2tleV0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gbmV3U3RhdGUgYXMgUztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzdGF0ZUVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyID0gKFxuICAgICAgaGFzaDogYW55LFxuICAgICAga2V5OiBzdHJpbmcsXG4gICAgICB2YWw6IGFueVxuICAgICkgPT4ge1xuICAgICAgaWYgKGhhc2hba2V5XSAhPT0gdmFsKSB7XG4gICAgICAgIGhhc2hba2V5XSA9IHZhbDtcbiAgICAgICAgaWYgKCF0aGlzLmNhblVzZVByb3BJblN0YXRlKGtleSkpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlID0ga2V5O1xuICAgICAgICB0aGlzLnNldFN0YXRlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgdmFyIG5ld1N0YXRlOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gdmFsO1xuICAgICAgICAgIHJldHVybiBuZXdTdGF0ZSBhcyBTO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBjYW5Vc2VQcm9wSW5TdGF0ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgdW5NYWtlQmFzZUVsZW1lbnRSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpIHtcbiAgICBpZiAoIXRoaXMuY2FuTWFrZVJlYWN0KHN0YXRlRWxlbWVudCkpIHJldHVybjtcbiAgICBzdGF0ZUVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyID0gdW5kZWZpbmVkO1xuICAgIHN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2gsIGtleSkgPT4ge1xuICAgICAgdmFyIHZhbDogYW55ID0gaGFzaFtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgdmFsOiBhbnkgPSB2YWw7XG4gICAgICAgIHZhbFtcIm9uQXJyYXlDaGFuZ2VkXCJdID0gKCkgPT4ge307XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5RWxlbWVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnRyb2w6IEhUTUxFbGVtZW50O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uQmFzZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudCh0aGlzLmNvbnRyb2wpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLmNvbnRyb2w7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIikge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIsIFwiclwiKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uQmFzZSgpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudHMoKTogQmFzZVtdIHtcbiAgICByZXR1cm4gW3RoaXMucXVlc3Rpb25CYXNlXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uQmFzZSAmJiAhIXRoaXMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LndpZGdldEpzb24uaXNEZWZhdWx0UmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlclxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByb3BzOiBhbnkgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICBwcm9wcy5pc0Rpc3BsYXlNb2RlIHx8XG4gICAgICAoISF0aGlzLnF1ZXN0aW9uQmFzZSAmJiB0aGlzLnF1ZXN0aW9uQmFzZS5pc0lucHV0UmVhZE9ubHkpIHx8IGZhbHNlXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcENlbGwoXG4gICAgY2VsbDogYW55LFxuICAgIGVsZW1lbnQ6IEpTWC5FbGVtZW50LFxuICAgIHJlYXNvbjogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uQmFzZVxuICAgICAgLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQ7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBNYXRyaXhDZWxsKHN1cnZleSwgZWxlbWVudCwgY2VsbCwgcmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFxuICBUIGV4dGVuZHMgUXVlc3Rpb25cbj4gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudCA9IHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50LmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgVDtcbiAgfVxuICB1cGRhdGVWYWx1ZU9uRXZlbnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGlmIChcbiAgICAgICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHModGhpcy5xdWVzdGlvbkJhc2UudmFsdWUsIGV2ZW50LnRhcmdldC52YWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVDb3JlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgfVxuICB9O1xuICBwcm90ZWN0ZWQgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uQmFzZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UudmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250cm9sKSB7XG4gICAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmNvbnRyb2w7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVDb3JlKCk7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgY29udHJvbC52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRWYWx1ZSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbCkpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FbXB0eU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FbXB0eSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkVtcHR5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkVtcHR5TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IC8+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJlbXB0eVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25FbXB0eSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FeHByZXNzaW9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH1cbiAgICAgICAgcmVmPXsoZGl2KSA9PiAodGhpcy5jb250cm9sID0gZGl2KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uZm9ybWF0ZWRWYWx1ZX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImV4cHJlc3Npb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRXhwcmVzc2lvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0UXVlc3Rpb25GYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVhY3RRdWVzdGlvbkZhY3RvcnkgPSBuZXcgUmVhY3RRdWVzdGlvbkZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50PiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlclF1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdID0gcXVlc3Rpb25DcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3JlYXRvciA9IHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXTtcbiAgICBpZiAoY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRvcihwYXJhbXMpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmlsZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkZpbGUgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uRmlsZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25GaWxlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBwcmV2aWV3ID0gdGhpcy5yZW5kZXJQcmV2aWV3KCk7XG4gICAgdmFyIGZpbGVJbnB1dCA9IG51bGw7XG4gICAgdmFyIGZpbGVEZWNvcmF0b3IgPSB0aGlzLnJlbmRlckZpbGVEZWNvcmF0b3IoKTtcbiAgICB2YXIgY2xlYXJCdXR0b24gPSB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKFxuICAgICAgdGhpcy5xdWVzdGlvbi5zaG93UmVtb3ZlQnV0dG9uXG4gICAgKTtcbiAgICB2YXIgY2xlYXJCdXR0b25Cb3R0b20gPSB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKFxuICAgICAgdGhpcy5xdWVzdGlvbi5zaG93UmVtb3ZlQnV0dG9uQm90dG9tXG4gICAgKTtcblxuICAgIGxldCBtb2JpbGVGaWxlTmF2aWdhdG9yID0gdGhpcy5xdWVzdGlvbi5tb2JpbGVGaWxlTmF2aWdhdG9yVmlzaWJsZT8oPFN1cnZleUFjdGlvbkJhciBtb2RlbCA9IHt0aGlzLnF1ZXN0aW9uLm1vYmlsZUZpbGVOYXZpZ2F0b3J9PjwvU3VydmV5QWN0aW9uQmFyPik6bnVsbDtcbiAgICBmaWxlSW5wdXQgPSAoXG4gICAgICB0aGlzLmlzRGlzcGxheU1vZGUgP1xuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICBjbGFzc05hbWU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUlucHV0IDogdGhpcy5xdWVzdGlvbi5nZXRSZWFkT25seUZpbGVDc3MoKX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgIHJlZj17aW5wdXQgPT4gKHRoaXMuY29udHJvbCA9IGlucHV0KX1cbiAgICAgICAgICBzdHlsZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHt9IDogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmRvQ2hhbmdlIDogbnVsbH1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnF1ZXN0aW9uLnRpdGxlfVxuICAgICAgICAgIGFjY2VwdD17dGhpcy5xdWVzdGlvbi5hY2NlcHRlZFR5cGVzfVxuICAgICAgICAvPlxuICAgICAgICA6XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNsYXNzTmFtZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQgOiB0aGlzLnF1ZXN0aW9uLmdldFJlYWRPbmx5RmlsZUNzcygpfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgcmVmPXtpbnB1dCA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICAgIHN0eWxlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8ge30gOiB7IGNvbG9yOiBcInRyYW5zcGFyZW50XCIgfX1cbiAgICAgICAgICBvbkNoYW5nZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uZG9DaGFuZ2UgOiBudWxsfVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VGl0bGV9XG4gICAgICAgICAgYWNjZXB0PXt0aGlzLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXN9XG4gICAgICAgIC8+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZmlsZVJvb3RDc3N9PlxuICAgICAgICB7ZmlsZUlucHV0fVxuICAgICAgICB7ZmlsZURlY29yYXRvcn1cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgICB7cHJldmlld31cbiAgICAgICAge2NsZWFyQnV0dG9uQm90dG9tfVxuICAgICAgICB7bW9iaWxlRmlsZU5hdmlnYXRvcn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZpbGVEZWNvcmF0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uQ3NzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGxldCBub0ZpbGVDaG9zZW4gPSBudWxsO1xuICAgIGxldCBjaG9vc2VGaWxlID0gbnVsbDtcbiAgICBjaG9vc2VGaWxlID0gKFxuICAgICAgPGxhYmVsXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q2hvb3NlRmlsZUNzcygpfVxuICAgICAgICBodG1sRm9yPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn1cbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn08L3NwYW4+XG4gICAgICAgIHsoISF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUljb25JZCkgPyA8U3ZnSWNvbiB0aXRsZT17dGhpcy5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9ufSBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGVJY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+OiBudWxsIH1cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgIG5vRmlsZUNob3NlbiA9IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9GaWxlQ2hvc2VufT5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5ub0ZpbGVDaG9zZW5DYXB0aW9ufVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RmlsZURlY29yYXRvckNzcygpfVxuICAgICAgICBvbkRyb3A9e3RoaXMucXVlc3Rpb24ub25Ecm9wfVxuICAgICAgICBvbkRyYWdPdmVyPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ092ZXJ9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ0xlYXZlfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kcmFnQXJlYVBsYWNlaG9sZGVyfT57dGhpcy5xdWVzdGlvbi5kcmFnQXJlYVBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy53cmFwcGVyfT5cbiAgICAgICAgICB7Y2hvb3NlRmlsZX1cbiAgICAgICAgICB7bm9GaWxlQ2hvc2VufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNsZWFyQnV0dG9uKGNsYXNzTmFtZTogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBjbGFzc05hbWUgPyAoXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLnF1ZXN0aW9uLmRvQ2xlYW59IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPHNwYW4+e3RoaXMucXVlc3Rpb24uY2xlYW5CdXR0b25DYXB0aW9ufTwvc3Bhbj5cbiAgICAgICAgeyghIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25JY29uSWQpID8gPFN2Z0ljb24gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25JY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+OiBudWxsIH1cbiAgICAgIDwvYnV0dG9uPlxuICAgICkgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGaWxlU2lnbihjbGFzc05hbWU6IHN0cmluZywgdmFsOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYoIWNsYXNzTmFtZSB8fCAhdmFsLm5hbWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPGFcbiAgICAgICAgICBocmVmPXt2YWwuY29udGVudH1cbiAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmRvRG93bmxvYWRGaWxlKGV2ZW50LCB2YWwpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgdGl0bGU9e3ZhbC5uYW1lfVxuICAgICAgICAgIGRvd25sb2FkPXt2YWwubmFtZX1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aDogdGhpcy5xdWVzdGlvbi5pbWFnZVdpZHRoUmVuZGVyZWQgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt2YWwubmFtZX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUHJldmlldygpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZSB8fCAhdGhpcy5xdWVzdGlvbi5wcmV2aWV3VmFsdWUubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcHJldmlld3MgPSB0aGlzLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZS5tYXAoKHZhbCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghdmFsKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4fVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByZXZpZXd9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogdGhpcy5xdWVzdGlvbi5pc1ByZXZpZXdWaXNpYmxlKGluZGV4KSA/IHVuZGVmaW5lZCA6IFwibm9uZVwiIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJGaWxlU2lnbih0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZVNpZ24sIHZhbCl9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZVdyYXBwZXJ9PlxuICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uY2FuUHJldmlld0ltYWdlKHZhbCkgPyAoXG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9e3ZhbC5jb250ZW50fVxuICAgICAgICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5pbWFnZUhlaWdodH1cbiAgICAgICAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5pbWFnZVdpZHRofVxuICAgICAgICAgICAgICAgIGFsdD1cIkZpbGUgcHJldmlld1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kZWZhdWx0SW1hZ2U/KFxuICAgICAgICAgICAgICA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRlZmF1bHRJbWFnZUljb25JZH0gc2l6ZT17XCJhdXRvXCJ9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRlZmF1bHRJbWFnZX0+PC9TdmdJY29uPlxuICAgICAgICAgICAgKTpudWxsKX1cbiAgICAgICAgICAgIHt2YWwubmFtZSAmJiAhdGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5ID8gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVCdXR0b259IG9uQ2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uZG9SZW1vdmVGaWxlKHZhbCl9PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLnJlbW92ZUZpbGVDYXB0aW9ufVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7KHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnSWNvbklkKSA/XG4gICAgICAgICAgICAgICAgICAoPFN2Z0ljb24gdGl0bGU9e3RoaXMucXVlc3Rpb24ucmVtb3ZlRmlsZUNhcHRpb259IGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZVN2Z0ljb25JZH0gc2l6ZT17XCJhdXRvXCJ9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmd9PjwvU3ZnSWNvbj4pOiBudWxsIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJGaWxlU2lnbih0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZVNpZ25Cb3R0b20sIHZhbCl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUxpc3QgfHwgdW5kZWZpbmVkfT57cHJldmlld3N9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJmaWxlXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25GaWxlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25IdG1sTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkh0bWwgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSHRtbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25IdG1sTW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSHRtbC5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgcmVhY3RPblN0ckNoYW5nZWQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NIdG1sLm9uQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjaGFuZ2VkOiAhIXRoaXMuc3RhdGUgJiYgdGhpcy5zdGF0ZS5jaGFuZ2VkID8gdGhpcy5zdGF0ZS5jaGFuZ2VkICsgMSA6IDEgfSk7XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMucXVlc3Rpb24uaHRtbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnF1ZXN0aW9uLmxvY0h0bWwucmVuZGVyZWRIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLnJlbmRlckNzc1Jvb3R9XG4gICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImh0bWxcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSHRtbCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNYXRyaXhSb3dNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgcm93c0NoYW5nZWQ6IDAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk1hdHJpeE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7IHJvd3NDaGFuZ2VkOiBzZWxmLnN0YXRlLnJvd3NDaGFuZ2VkICsgMSB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcm93c1RIID0gdGhpcy5xdWVzdGlvbi5oYXNSb3dzID8gPHRkIC8+IDogbnVsbDtcbiAgICB2YXIgaGVhZGVycyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XG4gICAgICB2YXIgY29sdW1UZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoY29sdW1uLmxvY1RleHQpO1xuICAgICAgaGVhZGVycy5wdXNoKFxuICAgICAgICA8dGggY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbH0ga2V5PXtrZXl9PlxuICAgICAgICAgIHt0aGlzLndyYXBDZWxsKHsgY29sdW1uOiBjb2x1bW4gfSwgY29sdW1UZXh0LCBcImNvbHVtbi1oZWFkZXJcIil9XG4gICAgICAgIDwvdGg+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciB2aXNpYmxlUm93cyA9IHRoaXMucXVlc3Rpb24udmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHZpc2libGVSb3dzW2ldO1xuICAgICAgdmFyIGtleSA9IFwicm93LVwiICsgcm93Lm5hbWUgKyBcIi1cIiArIGk7XG4gICAgICByb3dzLnB1c2goXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeFJvd1xuICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIHJvdz17cm93fVxuICAgICAgICAgIGlzRmlyc3Q9e2kgPT0gMH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIHZhciBoZWFkZXIgPSAhdGhpcy5xdWVzdGlvbi5zaG93SGVhZGVyID8gbnVsbCA6IChcbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIHtyb3dzVEh9XG4gICAgICAgICAge2hlYWRlcnN9XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnRhYmxlV3JhcHBlcn1cbiAgICAgICAgcmVmPXtyb290ID0+ICh0aGlzLmNvbnRyb2wgPSByb290KX1cbiAgICAgID5cbiAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgIDxsZWdlbmQgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9IC8+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRUYWJsZUNzcygpfT5cbiAgICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAgICA8dGJvZHk+e3Jvd3N9PC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhSb3cgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeFJvd01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucm93LnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5yb3cudmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKGNlbGw6IGFueSwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHJlYXNvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCFyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50O1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwTWF0cml4Q2VsbChzdXJ2ZXksIGVsZW1lbnQsIGNlbGwsIHJlYXNvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvdztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHJvd3NURCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNSb3dzKSB7XG4gICAgICB2YXIgcm93VGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucm93LmxvY1RleHQpO1xuICAgICAgcm93c1REID0gPHRkIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvd1RleHRDZWxsfT5cbiAgICAgICAge3RoaXMud3JhcENlbGwoeyByb3c6IHRoaXMucm93IH0sIHJvd1RleHQsIFwicm93LWhlYWRlclwiKX1cbiAgICAgIDwvdGQ+O1xuICAgIH1cblxuICAgIHZhciB0ZHMgPSB0aGlzLmdlbmVyYXRlVGRzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBjbGFzc05hbWU9e3RoaXMucm93LnJvd0NsYXNzZXMgfHwgdW5kZWZpbmVkfT5cbiAgICAgICAge3Jvd3NURH1cbiAgICAgICAge3Rkc31cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxuXG4gIGdlbmVyYXRlVGRzKCkge1xuICAgIHZhciB0ZHMgPSBbXTtcbiAgICB2YXIgcm93ID0gdGhpcy5yb3c7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ZCA9IG51bGw7XG4gICAgICB2YXIgY29sdW1uID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1uc1tpXTtcbiAgICAgIHZhciBrZXkgPSBcInZhbHVlXCIgKyBpO1xuXG4gICAgICAvL3ZhciBpc0NoZWNrZWQgPSBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMocm93LnZhbHVlLCBjb2x1bW4udmFsdWUpO1xuICAgICAgdmFyIGlzQ2hlY2tlZCA9IHJvdy52YWx1ZSA9PSBjb2x1bW4udmFsdWU7XG4gICAgICBsZXQgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3Mocm93LCBjb2x1bW4pO1xuICAgICAgdmFyIGlucHV0SWQgPSB0aGlzLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIHJvdy5uYW1lICsgXCJfXCIgKyBpO1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzQ2VsbFRleHQpIHtcbiAgICAgICAgdmFyIGdldEhhbmRsZXIgPSAhdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHlcbiAgICAgICAgICA/IChjb2x1bW46IGFueSkgPT4gKCkgPT4gdGhpcy5jZWxsQ2xpY2socm93LCBjb2x1bW4pXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICB0ZCA9IChcbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9XG4gICAgICAgICAgICBvbkNsaWNrPXtnZXRIYW5kbGVyID8gZ2V0SGFuZGxlcihjb2x1bW4pIDogbnVsbH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KHJvdy5uYW1lLCBjb2x1bW4pXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZCA9IChcbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgZGF0YS1yZXNwb25zaXZlLXRpdGxlPXtjb2x1bW4ubG9jVGV4dC5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2l0ZW1DbGFzc30+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlkPXtpbnB1dElkfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbVZhbHVlfVxuICAgICAgICAgICAgICAgIG5hbWU9e3Jvdy5mdWxsTmFtZX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17Y29sdW1uLnZhbHVlfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2NvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPiA6XG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXshdGhpcy5xdWVzdGlvbi5pc01vYmlsZSA/IHsgZGlzcGxheTogXCJub25lXCIgfSA6IHVuZGVmaW5lZCB9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGxSZXNwb25zaXZlVGl0bGV9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyhjb2x1bW4ubG9jVGV4dCl9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRkcy5wdXNoKHRkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGRzO1xuICB9XG4gIGNlbGxDbGljayhyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICByb3cudmFsdWUgPSBjb2x1bW4udmFsdWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnJvdy52YWx1ZSB9KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXgsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHJvcGRvd25cIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24sIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gIFF1ZXN0aW9uLFxuICBCYXNlXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cFwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IE1hdHJpeFJvdyB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWF0cml4L3Jvd1wiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvblwiO1xuaW1wb3J0IHsgTWF0cml4RHJvcGRvd25Db2x1bW4gfSBmcm9tIFwiLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25jb2x1bW5cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy9DcmVhdGUgcmVuZGVyZWQgdGFibGUgaW4gY29udHJ1Y3RvciBhbmQgbm90IG9uIHJlbmRlcmluZ1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbiAgfVxuICBwcml2YXRlIGdldFN0YXRlKHByZXZTdGF0ZTogYW55ID0gbnVsbCkge1xuICAgIHJldHVybiB7IHJvd0NvdW50ZXI6ICFwcmV2U3RhdGUgPyAwIDogcHJldlN0YXRlLnJvd0NvdW50ZXIgKyAxIH07XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuZ2V0U3RhdGUodGhpcy5zdGF0ZSkpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgICAgfTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJlbmRlcmVkUm93c0NoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyVGFibGVEaXYoKTtcbiAgfVxuICByZW5kZXJUYWJsZURpdigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XG4gICAgdmFyIGZvb3RlcnMgPSB0aGlzLnJlbmRlckZvb3RlcigpO1xuICAgIHZhciByb3dzID0gdGhpcy5yZW5kZXJSb3dzKCk7XG4gICAgdmFyIGRpdlN0eWxlID0gdGhpcy5xdWVzdGlvbi5zaG93SG9yaXpvbnRhbFNjcm9sbFxuICAgICAgPyAoeyBvdmVyZmxvd1g6IFwic2Nyb2xsXCIgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKVxuICAgICAgOiAoe30gYXMgUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e2RpdlN0eWxlfSByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFRhYmxlQ3NzKCl9PlxuICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAge3Jvd3N9XG4gICAgICAgICAge2Zvb3RlcnN9XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIGlmICghdGFibGUuc2hvd0hlYWRlcikgcmV0dXJuIG51bGw7XG4gICAgdmFyIGhlYWRlcnM6IGFueVtdID0gW107XG4gICAgdmFyIGNlbGxzID0gdGFibGUuaGVhZGVyUm93LmNlbGxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxsID0gY2VsbHNbaV07XG4gICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XG4gICAgICB2YXIgY29sdW1uU3R5bGU6IGFueSA9IHt9O1xuICAgICAgaWYgKCEhY2VsbC53aWR0aCkge1xuICAgICAgICBjb2x1bW5TdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICAgIGNvbHVtblN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICAgIH1cbiAgICAgIHZhciBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyQ2VsbENvbnRlbnQoY2VsbCwgXCJjb2x1bW4taGVhZGVyXCIsIHt9KTtcbiAgICAgIGhlYWRlcnMucHVzaChcbiAgICAgICAgPHRoXG4gICAgICAgICAgY2xhc3NOYW1lPXtjZWxsLmNsYXNzTmFtZX1cbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBzdHlsZT17Y29sdW1uU3R5bGV9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2VsbENvbnRlbnR9XG4gICAgICAgIDwvdGg+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+e2hlYWRlcnN9PC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgKTtcbiAgfVxuICByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciB0YWJsZSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZTtcbiAgICBpZiAoIXRhYmxlLnNob3dGb290ZXIpIHJldHVybiBudWxsO1xuICAgIHZhciByb3cgPSB0aGlzLnJlbmRlclJvdyhcbiAgICAgIFwiZm9vdGVyXCIsXG4gICAgICB0YWJsZS5mb290ZXJSb3csXG4gICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICApO1xuICAgIHJldHVybiA8dGZvb3Q+e3Jvd308L3Rmb290PjtcbiAgfVxuICByZW5kZXJSb3dzKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciByZW5kZXJlZFJvd3MgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbmRlcmVkUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKFxuICAgICAgICB0aGlzLnJlbmRlclJvdyhyZW5kZXJlZFJvd3NbaV0uaWQsIHJlbmRlcmVkUm93c1tpXSwgY3NzQ2xhc3NlcylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8dGJvZHk+e3Jvd3N9PC90Ym9keT47XG4gIH1cbiAgcmVuZGVyUm93KFxuICAgIGtleVZhbHVlOiBhbnksXG4gICAgcm93OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgbWF0cml4cm93ID0gW107XG4gICAgdmFyIGNlbGxzID0gcm93LmNlbGxzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4cm93LnB1c2godGhpcy5yZW5kZXJDZWxsKGNlbGxzW2ldLCBpLCBjc3NDbGFzc2VzKSk7XG4gICAgfVxuICAgIHZhciBrZXkgPSBcInJvd1wiICsga2V5VmFsdWU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17a2V5fT5cbiAgICAgICAgPE1hdHJpeFJvdyBtb2RlbD17cm93fSBwYXJlbnRNYXRyaXg9e3RoaXMucXVlc3Rpb259PnttYXRyaXhyb3d9PC9NYXRyaXhSb3c+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDZWxsKFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSBcImNlbGxcIiArIGluZGV4O1xuICAgIGlmIChjZWxsLmhhc1F1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGxcbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGNlbGw9e2NlbGx9XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IHJlYXNvbiA9IGNlbGwuaGFzVGl0bGUgPyBcInJvdy1oZWFkZXJcIiA6IFwiXCI7XG4gICAgdmFyIGNlbGxDb250ZW50ID0gdGhpcy5yZW5kZXJDZWxsQ29udGVudChjZWxsLCByZWFzb24sIGNzc0NsYXNzZXMpO1xuICAgIHZhciBjZWxsU3R5bGU6IGFueSA9IG51bGw7XG4gICAgaWYgKCEhY2VsbC53aWR0aCB8fCAhIWNlbGwubWluV2lkdGgpIHtcbiAgICAgIGNlbGxTdHlsZSA9IHt9O1xuICAgICAgaWYgKCEhY2VsbC53aWR0aCkgY2VsbFN0eWxlLndpZHRoID0gY2VsbC53aWR0aDtcbiAgICAgIGlmICghIWNlbGwubWluV2lkdGgpIGNlbGxTdHlsZS5taW5XaWR0aCA9IGNlbGwubWluV2lkdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZFxuICAgICAgICBjbGFzc05hbWU9e2NlbGwuY2xhc3NOYW1lfVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgc3R5bGU9e2NlbGxTdHlsZX1cbiAgICAgICAgY29sU3Bhbj17Y2VsbC5jb2xTcGFuc31cbiAgICAgID5cbiAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyQ2VsbENvbnRlbnQoXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgICByZWFzb246IHN0cmluZyxcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjZWxsQ29udGVudCA9IG51bGw7XG4gICAgdmFyIGNlbGxTdHlsZTogYW55ID0gbnVsbDtcbiAgICBpZiAoISFjZWxsLndpZHRoIHx8ICEhY2VsbC5taW5XaWR0aCkge1xuICAgICAgY2VsbFN0eWxlID0ge307XG4gICAgICBpZiAoISFjZWxsLndpZHRoKSBjZWxsU3R5bGUud2lkdGggPSBjZWxsLndpZHRoO1xuICAgICAgaWYgKCEhY2VsbC5taW5XaWR0aCkgY2VsbFN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzVGl0bGUpIHtcbiAgICAgIHJlYXNvbiA9IFwicm93LWhlYWRlclwiO1xuICAgICAgY29uc3Qgc3RyID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoY2VsbC5sb2NUaXRsZSk7XG4gICAgICBjb25zdCByZXF1aXJlID0gISFjZWxsLmNvbHVtbiA/IDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeEhlYWRlclJlcXVpcmVkIGNvbHVtbj17Y2VsbC5jb2x1bW59IHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufS8+IDogbnVsbDtcbiAgICAgIGNlbGxDb250ZW50ID0gKDw+e3N0cn17cmVxdWlyZX08Lz4pO1xuICAgIH1cbiAgICBpZiAoY2VsbC5pc0RyYWdIYW5kbGVyQ2VsbCkge1xuICAgICAgY2VsbENvbnRlbnQgPSAoPD5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBpdGVtPXt7IGRhdGE6IHsgcm93OiBjZWxsLnJvdywgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfSB9fS8+XG4gICAgICA8Lz4pO1xuICAgIH1cbiAgICBpZiAoY2VsbC5pc0FjdGlvbnNDZWxsKSB7XG4gICAgICBjZWxsQ29udGVudCA9IChcbiAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3YtbWF0cml4ZHluYW1pYy1hY3Rpb25zLWNlbGxcIiwge1xuICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLCBjc3NDbGFzc2VzLCBjZWxsLCBtb2RlbDogY2VsbC5pdGVtLmdldERhdGEoKVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzUGFuZWwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKFxuICAgICAgICA8U3VydmV5UGFuZWxcbiAgICAgICAgICBrZXk9e2NlbGwucGFuZWwuaWR9XG4gICAgICAgICAgZWxlbWVudD17Y2VsbC5wYW5lbH1cbiAgICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY2VsbENvbnRlbnQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmVhZHlDZWxsID0gKFxuICAgICAgPD5cbiAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgPC8+XG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy53cmFwQ2VsbChjZWxsLCByZWFkeUNlbGwsIHJlYXNvbik7XG4gIH1cbn1cblxuY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhBY3Rpb25zQ2VsbCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWx9IGhhbmRsZUNsaWNrPXtmYWxzZX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXhkeW5hbWljLWFjdGlvbnMtY2VsbFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeEFjdGlvbnNDZWxsLCBwcm9wcyk7XG4gIH1cbik7XG5jbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeEhlYWRlclJlcXVpcmVkIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBnZXQgY29sdW1uKCk6IE1hdHJpeERyb3Bkb3duQ29sdW1uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW47XG4gIH1cbiAgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYoIXRoaXMuY29sdW1uLmlzUmVuZGVyZWRSZXF1aXJlZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGxSZXF1aXJlZFRleHR9Pnt0aGlzLmNvbHVtbi5yZXF1aXJlZFRleHR9PC9zcGFuPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGwgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNlbGwoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2VsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1Dc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmNlbGwgPyB0aGlzLmNlbGwuY2xhc3NOYW1lIDogXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHZhciBxID0gc3VwZXIuZ2V0UXVlc3Rpb24oKTtcbiAgICBpZiAoISFxKSByZXR1cm4gcTtcbiAgICByZXR1cm4gISF0aGlzLmNlbGwgPyB0aGlzLmNlbGwucXVlc3Rpb24gOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBkb0FmdGVyUmVuZGVyKCkge1xuICAgIHZhciBlbCA9IHRoaXMuY2VsbFJlZi5jdXJyZW50O1xuICAgIGlmIChcbiAgICAgIGVsICYmXG4gICAgICB0aGlzLmNlbGwgJiZcbiAgICAgIHRoaXMucXVlc3Rpb24gJiZcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5ICYmXG4gICAgICBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIlxuICAgICkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICBjZWxsUXVlc3Rpb246IHRoaXMucXVlc3Rpb24sXG4gICAgICAgIGh0bWxFbGVtZW50OiBlbCxcbiAgICAgICAgcm93OiB0aGlzLmNlbGwucm93LFxuICAgICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICAgIH07XG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleS5tYXRyaXhBZnRlckNlbGxSZW5kZXIodGhpcy5xdWVzdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTaG93RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZSAmJlxuICAgICAgKCF0aGlzLmNlbGwuaXNDaG9pY2UgfHwgdGhpcy5jZWxsLmlzRmlyc3RDaG9pY2UpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2VsbFN0eWxlKCk6IGFueSB7XG4gICAgdmFyIHJlczogYW55ID0gc3VwZXIuZ2V0Q2VsbFN0eWxlKCk7XG4gICAgaWYgKCEhdGhpcy5jZWxsLndpZHRoIHx8ICEhdGhpcy5jZWxsLm1pbldpZHRoKSB7XG4gICAgICBpZiAoIXJlcykgcmVzID0ge307XG4gICAgICBpZiAoISF0aGlzLmNlbGwud2lkdGgpIHJlcy53aWR0aCA9IHRoaXMuY2VsbC53aWR0aDtcbiAgICAgIGlmICghIXRoaXMuY2VsbC5taW5XaWR0aCkgcmVzLm1pbldpZHRoID0gdGhpcy5jZWxsLm1pbldpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGwuaGVhZGVycztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5jZWxsLmlzQ2hvaWNlKVxuICAgICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICAgIGlmICh0aGlzLmNlbGwuaXNPdGhlckNob2ljZSkgcmV0dXJuIHRoaXMucmVuZGVyT3RoZXJDb21tZW50KCk7XG4gICAgaWYgKHRoaXMuY2VsbC5pc0NoZWNrYm94KSByZXR1cm4gdGhpcy5yZW5kZXJDZWxsQ2hlY2tib3hCdXR0b24oKTtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsUmFkaW9ncm91cEJ1dHRvbigpO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyT3RoZXJDb21tZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuY2VsbC5xdWVzdGlvbjtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcyB8fCB7fTtcbiAgICByZXR1cm4gPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gcXVlc3Rpb249e3F1ZXN0aW9ufSBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfSBvdGhlckNzcz17Y3NzQ2xhc3Nlcy5vdGhlcn0gaXNEaXNwbGF5TW9kZT17cXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fSAvPjtcbiAgfVxuICBwcml2YXRlIHJlbmRlckNlbGxDaGVja2JveEJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pZCArIFwiaXRlbVwiICsgdGhpcy5jZWxsLmNob2ljZUluZGV4O1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLmNlbGwucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY2VsbC5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICBpdGVtPXt0aGlzLmNlbGwuaXRlbX1cbiAgICAgICAgaXNGaXJzdD17dGhpcy5jZWxsLmlzRmlyc3RDaG9pY2V9XG4gICAgICAgIGluZGV4PXt0aGlzLmNlbGwuY2hvaWNlSW5kZXgudG9TdHJpbmcoKX1cbiAgICAgICAgaGlkZUNhcHRpb249e3RydWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsUmFkaW9ncm91cEJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGtleSA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pZCArIFwiaXRlbVwiICsgdGhpcy5jZWxsLmNob2ljZUluZGV4O1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25SYWRpb0l0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLmNlbGwucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMuY2VsbC5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICBpdGVtPXt0aGlzLmNlbGwuaXRlbX1cbiAgICAgICAgaW5kZXg9e3RoaXMuY2VsbC5jaG9pY2VJbmRleC50b1N0cmluZygpfVxuICAgICAgICBpc0NoZWNrZWQ9e3RoaXMuY2VsbC5xdWVzdGlvbi52YWx1ZSA9PT0gdGhpcy5jZWxsLml0ZW0udmFsdWV9XG4gICAgICAgIGlzRGlzYWJsZWQ9e3RoaXMuY2VsbC5xdWVzdGlvbi5pc1JlYWRPbmx5IHx8ICF0aGlzLmNlbGwuaXRlbS5pc0VuYWJsZWR9XG4gICAgICAgIGhpZGVDYXB0aW9uPXt0cnVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWMgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrID0gdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBtYXRyaXgoKTogUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbDtcbiAgfVxuICBoYW5kbGVPblJvd0FkZENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm1hdHJpeC5hZGRSb3dVSSgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgc2hvd1RhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnNob3dUYWJsZTtcbiAgICB2YXIgbWFpbkRpdiA9IHNob3dUYWJsZVxuICAgICAgPyB0aGlzLnJlbmRlclRhYmxlRGl2KClcbiAgICAgIDogdGhpcy5yZW5kZXJOb1Jvd3NDb250ZW50KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2PlxuICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b25PblRvcChjc3NDbGFzc2VzKX1cbiAgICAgICAge21haW5EaXZ9XG4gICAgICAgIHt0aGlzLnJlbmRlckFkZFJvd0J1dHRvbk9uQm90dG9tKGNzc0NsYXNzZXMpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQWRkUm93QnV0dG9uT25Ub3AoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tYXRyaXgucmVuZGVyZWRUYWJsZS5zaG93QWRkUm93T25Ub3ApIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbihjc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQWRkUm93QnV0dG9uT25Cb3R0b20oY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tYXRyaXgucmVuZGVyZWRUYWJsZS5zaG93QWRkUm93T25Cb3R0b20pIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbihjc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTm9Sb3dzQ29udGVudChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGV4dDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLm1hdHJpeC5sb2NFbXB0eVJvd3NUZXh0KTtcbiAgICBjb25zdCB0ZXh0RGl2OiBKU1guRWxlbWVudCA9IDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVtcHR5Um93c1RleHR9Pnt0ZXh0fTwvZGl2PjtcbiAgICBjb25zdCBidG46IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oY3NzQ2xhc3NlcywgdHJ1ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVtcHR5Um93c1NlY3Rpb259PlxuICAgICAgICB7dGV4dERpdn1cbiAgICAgICAge2J0bn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbihcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaXNFbXB0eVNlY3Rpb246IGJvb2xlYW4gPSBmYWxzZVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2LW1hdHJpeGR5bmFtaWMtYWRkLWJ0blwiLCB7XG4gICAgICBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiwgY3NzQ2xhc3NlcywgaXNFbXB0eVNlY3Rpb25cbiAgICB9KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHluYW1pY1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0FkZEJ1dHRvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrID0gdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBtYXRyaXgoKTogUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xuICB9XG4gIGhhbmRsZU9uUm93QWRkQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubWF0cml4LmFkZFJvd1VJKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFkZFJvd1RleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tYXRyaXgubG9jQWRkUm93VGV4dCk7XG4gICAgY29uc3QgYWRkQnV0dG9uID0gKDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT17dGhpcy5tYXRyaXguZ2V0QWRkUm93QnV0dG9uQ3NzKHRoaXMucHJvcHMuaXNFbXB0eVNlY3Rpb24pfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkaXNhYmxlZD17dGhpcy5tYXRyaXguaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgb25DbGljaz17XG4gICAgICAgIHRoaXMubWF0cml4LmlzRGVzaWduTW9kZSA/IHVuZGVmaW5lZCA6IHRoaXMuaGFuZGxlT25Sb3dBZGRDbGlja1xuICAgICAgfVxuICAgID5cbiAgICAgIHthZGRSb3dUZXh0fVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNzc0NsYXNzZXMuaWNvbkFkZH0gLz5cbiAgICA8L2J1dHRvbj4pO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb3BzLmlzRW1wdHlTZWN0aW9uID8gYWRkQnV0dG9uIDogPGRpdiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY3NzQ2xhc3Nlcy5mb290ZXJ9PnthZGRCdXR0b259PC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXhkeW5hbWljLWFkZC1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljQWRkQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yLCBTdXJ2ZXlFbGVtZW50RXJyb3JzLCBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNdWx0aXBsZVRleHRJdGVtTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgdGFibGVSb3dzID0gdGhpcy5xdWVzdGlvbi5nZXRSb3dzKCk7XG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKHRoaXMucmVuZGVyUm93KGksIHRhYmxlUm93c1tpXSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAgPHRib2R5Pntyb3dzfTwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclJvdyhcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGl0ZW1zOiBBcnJheTxNdWx0aXBsZVRleHRJdGVtTW9kZWw+LFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApIHtcbiAgICB2YXIga2V5OiBzdHJpbmcgPSBcIml0ZW1cIiArIHJvd0luZGV4O1xuICAgIHZhciB0ZHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgdGRzLnB1c2goXG4gICAgICAgIDx0ZCBrZXk9e1wiaXRlbVwiICsgaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbH0+XG4gICAgICAgICAgPFN1cnZleU11bHRpcGxlVGV4dEl0ZW0gcXVlc3Rpb249e3RoaXMucXVlc3Rpb259IGl0ZW09e2l0ZW19IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc30+PC9TdXJ2ZXlNdWx0aXBsZVRleHRJdGVtPlxuICAgICAgICA8L3RkPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBrZXk9e2tleX0gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvd30+XG4gICAgICAgIHt0ZHN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleU11bHRpcGxlVGV4dEl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCBpdGVtKCk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpIHtcbiAgICByZXR1cm4gW3RoaXMuaXRlbSwgdGhpcy5pdGVtLmVkaXRvcl07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW07XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKDxsYWJlbCBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUxhYmVsQ3NzKGl0ZW0pfT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtVGl0bGV9PlxuICAgICAgICA8VGl0bGVDb250ZW50IGVsZW1lbnQ9e2l0ZW0uZWRpdG9yfSBjc3NDbGFzc2VzPXtpdGVtLmVkaXRvci5jc3NDbGFzc2VzfT48L1RpdGxlQ29udGVudD5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtRWRpdG9yXG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGl0ZW1Dc3M9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUNzcygpfVxuICAgICAgICBxdWVzdGlvbj17aXRlbS5lZGl0b3J9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgIC8+XG4gICAgICB7dGhpcy5yZW5kZXJJdGVtVG9vbHRpcEVycm9yKGl0ZW0sIGNzc0NsYXNzZXMpfVxuICAgIDwvbGFiZWw+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJdGVtVG9vbHRpcEVycm9yKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZWRpdG9yLmlzRXJyb3JzTW9kZVRvb2x0aXAgPyAoXG4gICAgICA8U3VydmV5RWxlbWVudEVycm9yc1xuICAgICAgICBlbGVtZW50PXtpdGVtLmVkaXRvcn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17XCJ0b29sdGlwXCJ9XG4gICAgICAgIGlkPXtpdGVtLmVkaXRvci5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApOiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtRWRpdG9yIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIHtcbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5pdGVtQ3NzfT57dGhpcy5yZW5kZXJDb250ZW50KCl9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0blwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUmVtb3ZlQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0blwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHBhbmVsQ291bnRlcjogMCB9KTtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyA9IHRoaXM7XG4gICAgdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyTW9kZUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVRdWVzdGlvblJlbmRlcmluZygpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHBhbmVsQ291bnRlcjogdGhpcy5zdGF0ZSA/IHRoaXMuc3RhdGUucGFuZWxDb3VudGVyICsgMSA6IDEsXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnF1ZXN0aW9uLnBhbmVsc1tpXTtcbiAgICAgICAgcGFuZWxzLnB1c2goXG4gICAgICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICAgICAgICAga2V5PXtwYW5lbC5pZH1cbiAgICAgICAgICAgIGVsZW1lbnQ9e3BhbmVsfVxuICAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsO1xuICAgICAgICBwYW5lbHMucHVzaChcbiAgICAgICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXG4gICAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uY3VycmVudEluZGV4fVxuICAgICAgICAgICAgZWxlbWVudD17cGFuZWx9XG4gICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgIGluZGV4PXt0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleH1cbiAgICAgICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBidG5BZGQ6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMucXVlc3Rpb25bXCJzaG93TGVnYWN5TmF2aWdhdGlvblwiXVxuICAgICAgPyB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgbmF2VG9wOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJOYXZpZ2F0b3IoKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG5hdkJvdHRvbTogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NCb3R0b21TaG93aW5nXG4gICAgICA/IHRoaXMucmVuZGVyTmF2aWdhdG9yKClcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICBjb25zdCBuYXZWMiA9IHRoaXMucmVuZGVyTmF2aWdhdG9yVjIoKTtcbiAgICBjb25zdCBub0VudHJpZXNQbGFjZWhvbGRlciA9IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290fT5cbiAgICAgICAge25vRW50cmllc1BsYWNlaG9sZGVyfVxuICAgICAgICB7bmF2VG9wfVxuICAgICAgICB7cGFuZWxzfVxuICAgICAgICB7bmF2Qm90dG9tfVxuICAgICAgICB7YnRuQWRkfVxuICAgICAgICB7bmF2VjJ9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCF0aGlzLnF1ZXN0aW9uW1wic2hvd0xlZ2FjeU5hdmlnYXRpb25cIl0pIHtcbiAgICAgIGlmKHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgJiYgdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJSYW5nZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhbmdlOiBKU1guRWxlbWVudCA9IHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgPyB0aGlzLnJlbmRlclJhbmdlKCkgOiBudWxsO1xuICAgIGNvbnN0IGJ0blByZXY6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kcmVyUHJldkJ1dHRvbigpO1xuICAgIGNvbnN0IGJ0bk5leHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kcmVyTmV4dEJ1dHRvbigpO1xuICAgIGNvbnN0IGJ0bkFkZDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpO1xuICAgIGNvbnN0IHByb2dyZXNzQ2xhc3M6IHN0cmluZyA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmdcbiAgICAgID8gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVG9wXG4gICAgICA6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0JvdHRvbTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb2dyZXNzQ2xhc3N9PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGNsZWFyOiBcImJvdGhcIiB9fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQ29udGFpbmVyfT5cbiAgICAgICAgICAgIHtidG5QcmV2fVxuICAgICAgICAgICAge3JhbmdlfVxuICAgICAgICAgICAge2J0bk5leHR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2J0bkFkZH1cbiAgICAgICAgICB7dGhpcy5yZW5kZXJQcm9ncmVzc1RleHQoKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyUHJvZ3Jlc3NUZXh0KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IGRhdGE9eyB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH19PjwvU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kcmVyUHJldkJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVyTmV4dEJ1dHRvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbj5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclJhbmdlKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc30+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0Jhcn1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aDogdGhpcy5xdWVzdGlvbi5wcm9ncmVzcyB9fVxuICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdi1wYW5lbGR5bmFtaWMtYWRkLWJ0blwiLCB7XG4gICAgICBkYXRhOiB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH1cbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdG9yVjIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgPT09IDAgfHwgdGhpcy5xdWVzdGlvbltcInNob3dMZWdhY3lOYXZpZ2F0aW9uXCJdKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByYW5nZTogSlNYLkVsZW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nICYmICF0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nID8gdGhpcy5yZW5kZXJSYW5nZSgpIDogbnVsbDtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyfT5cbiAgICAgIDxociBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZXBhcmF0b3J9IC8+XG4gICAgICB7cmFuZ2V9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3RlckJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLnF1ZXN0aW9uLmZvb3RlclRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmdldFNob3dOb0VudHJpZXNQbGFjZWhvbGRlcigpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm5vRW50cmllc1BsYWNlaG9sZGVyfT5cbiAgICAgICAgICA8c3Bhbj57dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NOb0VudHJpZXNUZXh0KX08L3NwYW4+XG4gICAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uKCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSBleHRlbmRzIFN1cnZleVBhbmVsIHtcbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uID8gKHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzcygpOiBhbnkge1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgcmV0dXJuICEhc3VydmV5ID8gc3VydmV5LmdldENzcygpIDoge307XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBwYW5lbDogSlNYLkVsZW1lbnQgPSBzdXBlci5yZW5kZXIoKTtcbiAgICBjb25zdCByZW1vdmVCdXR0b246IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJCdXR0b24oKTtcbiAgICBjb25zdCBzZXBhcmF0b3I6IEpTWC5FbGVtZW50ID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMuaW5kZXggPCB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgLSAxID9cbiAgICAgICg8aHIgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yfSAvPikgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRQYW5lbFdyYXBwZXJDc3MoKX0+XG4gICAgICAgICAge3BhbmVsfVxuICAgICAgICAgIHtyZW1vdmVCdXR0b259XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2VwYXJhdG9yfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQnV0dG9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbi5jYW5SZW1vdmVQYW5lbCB8fFxuICAgICAgKHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCAmJiB0aGlzLnBhbmVsLmlzQ29sbGFwc2VkKVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdi1wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0blwiLCB7XG4gICAgICBkYXRhOiB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLCBpbmRleDogdGhpcy5pbmRleCB9XG4gICAgfSk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInBhbmVsZHluYW1pY1wiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSwgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgY2xlYXJCdXR0b24gPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnNob3dDbGVhckJ1dHRvbkluQ29udGVudCkge1xuICAgICAgY2xlYXJCdXR0b24gPSAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5jbGVhclZhbHVlKCl9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLmNvbnRyb2wgPSBmaWVsZHNldCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IHRoaXMuZ2V0Q29sdW1uZWRCb2R5KGNzc0NsYXNzZXMpXG4gICAgICAgICAgOiB0aGlzLmdldEJvZHkoY3NzQ2xhc3Nlcyl9XG4gICAgICAgIHt0aGlzLmdldEZvb3RlcigpfVxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5oYXNPdGhlciAmJiB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMucXVlc3Rpb24ub3RoZXJJdGVtKSA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsfVxuICAgICAgICB7Y2xlYXJCdXR0b259XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZvb3RlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNGb290SXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmZvb3RJdGVtcy5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbV9mXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRDb2x1bW5lZEJvZHkoY3NzQ2xhc3NlczogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3RNdWx0aUNvbHVtbn0+XG4gICAgICAgIHt0aGlzLmdldENvbHVtbnMoY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zKGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0U3RhdGVWYWx1ZSgpO1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbHVtbnMubWFwKChjb2x1bW46IGFueSwgY2k6IG51bWJlcikgPT4ge1xuICAgICAgdmFyIGl0ZW1zID0gY29sdW1uLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXCJpdGVtXCIgKyBjaSArIGlpLCBpdGVtLCB2YWx1ZSwgY3NzQ2xhc3NlcywgXCJcIiArIGNpICsgaWkpXG4gICAgICApO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBrZXk9e1wiY29sdW1uXCIgKyBjaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbHVtbkNsYXNzKCl9IHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICB7aXRlbXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRCb2R5KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZih0aGlzLnF1ZXN0aW9uLmJsb2NrZWRSb3cpIHtcbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290Um93fT57dGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzLCB0aGlzLnF1ZXN0aW9uLmRhdGFDaG9pY2VzKX08L2Rpdj47XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIDw+e3RoaXMuZ2V0SXRlbXMoY3NzQ2xhc3NlcywgdGhpcy5xdWVzdGlvbi5ib2R5SXRlbXMpfTwvPjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnksIGNob2ljZXM6IEFycmF5IDxJdGVtVmFsdWU+KTogQXJyYXk8YW55PiB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRTdGF0ZVZhbHVlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGNob2ljZXNbaV07XG4gICAgICB2YXIgcmVuZGVyZWRJdGVtID0gdGhpcy5yZW5kZXJJdGVtKFwiaXRlbVwiICsgaSwgaXRlbSwgdmFsdWUsIGNzc0NsYXNzZXMsIFwiXCIgKyBpKTtcbiAgICAgIGl0ZW1zLnB1c2gocmVuZGVyZWRJdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7Ly97IGRpc3BsYXk6IFwiaW5saW5lXCIsIHBvc2l0aW9uOiBcInN0YXRpY1wiIH07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck90aGVyKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgdmFsdWU6IGFueSxcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaW5kZXg6IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICB0ZXh0U3R5bGU9e3RoaXMudGV4dFN0eWxlfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGlzQ2hlY2tlZD17dmFsdWUgPT09IGl0ZW0udmFsdWV9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdGF0ZVZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuICF0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKSA/IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA6IFwiXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dFN0eWxlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzQ2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NoZWNrZWQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaGlkZUNhcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZUNhcHRpb24gPT09IHRydWU7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSB0aGlzLml0ZW0udmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uICYmICEhdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXRlbVRleHQgPSAhdGhpcy5oaWRlQ2FwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLml0ZW0ubG9jVGV4dCwgdGhpcy50ZXh0U3R5bGUpXG4gICAgICA6IFwiXCI7XG4gICAgdmFyIGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHRoaXMuaXRlbSk7XG4gICAgdmFyIGxhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgbG9jVGV4dDogYW55ID0gdGhpcy5pdGVtLmxvY1RleHQ7XG4gICAgdmFyIGNvbnRyb2xMYWJlbENsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRDb250cm9sTGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtsYWJlbENsYXNzfSBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmdldEFyaWFJdGVtTGFiZWwodGhpcy5pdGVtKX0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250cm9sfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUlkKHRoaXMuaXRlbSl9XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5xdWVzdGlvbk5hbWV9XG4gICAgICAgICAgICBjaGVja2VkPXt0aGlzLmlzQ2hlY2tlZH1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udmFsdWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yID9cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+IDpcbiAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj4gOlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y29udHJvbExhYmVsQ2xhc3N9PlxuICAgICAgICAgICAge2l0ZW1UZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtLCBwcm9wcyk7XG59KTtcblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhZGlvZ3JvdXBcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmFkaW9ncm91cCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuLi9pdGVtdmFsdWVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFua2luZyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmFua2luZ01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25SYW5raW5nTW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLnJvb3RDbGFzc31cbiAgICAgICAgcmVmPXsocm9vdCkgPT4gKHRoaXMuY29udHJvbCA9IHJvb3QpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5nZXRJdGVtcygpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtcygpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IHJhbmtpbmdDaG9pY2VzID0gdGhpcy5xdWVzdGlvbi5yYW5raW5nQ2hvaWNlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmtpbmdDaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gcmFua2luZ0Nob2ljZXNbaV07XG4gICAgICBpdGVtcy5wdXNoKFxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBpLFxuICAgICAgICAgIChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmhhbmRsZUtleWRvd24uY2FsbCh0aGlzLnF1ZXN0aW9uLCBldmVudCwgaXRlbSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgZXZlbnQucGVyc2lzdCgpO1xuICAgICAgICAgICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5oYW5kbGVQb2ludGVyRG93bi5jYWxsKFxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBpOiBudW1iZXIsXG4gICAgaGFuZGxlS2V5ZG93bjogKGV2ZW50OiBhbnkpID0+IHZvaWQsXG4gICAgaGFuZGxlUG9pbnRlckRvd246IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB2b2lkLFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpdGVtQ2xhc3M6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25SYW5raW5nTW9kZWxcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGtleTogc3RyaW5nID0gaXRlbS52YWx1ZSArIFwiLVwiICsgaSArIFwiLWl0ZW1cIjtcbiAgICBjb25zdCB0ZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGl0ZW0ubG9jVGV4dCk7XG4gICAgY29uc3QgaW5kZXggPSBpO1xuICAgIGNvbnN0IGluZGV4VGV4dDogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5nZXROdW1iZXJCeUluZGV4KGkpO1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblJhbmtpbmdJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGluZGV4VGV4dD17aW5kZXhUZXh0fVxuICAgICAgICBoYW5kbGVLZXlkb3duPXtoYW5kbGVLZXlkb3dufVxuICAgICAgICBoYW5kbGVQb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGl0ZW1DbGFzcz17aXRlbUNsYXNzfVxuICAgICAgICBxdWVzdGlvbj17cXVlc3Rpb259XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtID0gbnVsbDtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4VGV4dDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhbmRsZUtleWRvd24oKTogKGV2ZW50OiBhbnkpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhhbmRsZUtleWRvd247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBoYW5kbGVQb2ludGVyRG93bigpOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlUG9pbnRlckRvd247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1DbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW1DbGFzcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtQ2xhc3N9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxuICAgICAgICBvblBvaW50ZXJEb3duPXt0aGlzLmhhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXJhbmtpbmctaXRlbT17dGhpcy5pbmRleH1cbiAgICAgID5cbiAgICAgICAgPGRpdiB0YWJJbmRleD17LTF9IHN0eWxlPXt7IG91dGxpbmU6IFwibm9uZVwiIH19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUdob3N0Tm9kZX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250ZW50fT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXJ9PlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMTZcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJY29uSG92ZXJDc3MoKX1cbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAyQzYgMC45IDYuOSAwIDggMEM5LjEgMCAxMCAwLjkgMTAgMkMxMCAzLjEgOS4xIDQgOCA0QzYuOSA0IDYgMy4xIDYgMlpNMiAwQzAuOSAwIDAgMC45IDAgMkMwIDMuMSAwLjkgNCAyIDRDMy4xIDQgNCAzLjEgNCAyQzQgMC45IDMuMSAwIDIgMFpNOCA2QzYuOSA2IDYgNi45IDYgOEM2IDkuMSA2LjkgMTAgOCAxMEM5LjEgMTAgMTAgOS4xIDEwIDhDMTAgNi45IDkuMSA2IDggNlpNMiA2QzAuOSA2IDAgNi45IDAgOEMwIDkuMSAwLjkgMTAgMiAxMEMzLjEgMTAgNCA5LjEgNCA4QzQgNi45IDMuMSA2IDIgNlpNOCAxMkM2LjkgMTIgNiAxMi45IDYgMTRDNiAxNS4xIDYuOSAxNiA4IDE2QzkuMSAxNiAxMCAxNS4xIDEwIDE0QzEwIDEyLjkgOS4xIDEyIDggMTJaTTIgMTJDMC45IDEyIDAgMTIuOSAwIDE0QzAgMTUuMSAwLjkgMTYgMiAxNkMzLjEgMTYgNCAxNS4xIDQgMTRDNCAxMi45IDMuMSAxMiAyIDEyWlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMjRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJY29uRm9jdXNDc3MoKX1cbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNUw1IDBMMCA1SDRWOUg2VjVIMTBaXCIgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTlWMTVINFYxOUgwTDUgMjRMMTAgMTlINlpcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1JbmRleH0+e3RoaXMuaW5kZXhUZXh0fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWx9Pnt0aGlzLnRleHR9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFua2luZ1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYW5raW5nLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVuZGVyZWRSYXRpbmdJdGVtIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYXRpbmcgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2sgPSB0aGlzLmhhbmRsZU9uQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmF0aW5nTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhdGluZ01vZGVsO1xuICB9XG4gIGhhbmRsZU9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uc2V0VmFsdWVGcm9tQ2xpY2soZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBtaW5UZXh0ID0gdGhpcy5xdWVzdGlvbi5taW5SYXRlRGVzY3JpcHRpb25cbiAgICAgID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NNaW5SYXRlRGVzY3JpcHRpb24pXG4gICAgICA6IG51bGw7XG4gICAgdmFyIG1heFRleHQgPSB0aGlzLnF1ZXN0aW9uLm1heFJhdGVEZXNjcmlwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY01heFJhdGVEZXNjcmlwdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucmF0aW5nUm9vdENzc30gcmVmPXsoZGl2KSA9PiAodGhpcy5jb250cm9sID0gZGl2KX0+XG4gICAgICAgIDxmaWVsZHNldCByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICAgIDxsZWdlbmQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT17XCJzdi1oaWRkZW5cIn0+PC9sZWdlbmQ+XG4gICAgICAgICAgeyEhdGhpcy5xdWVzdGlvbi5oYXNNaW5MYWJlbCA/IDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5taW5UZXh0fT57bWluVGV4dH08L3NwYW4+OiBudWxsfVxuICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkUmF0ZUl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5yZW5kZXJJdGVtKFwidmFsdWVcIiArIGksIGl0ZW0sIGksIGNzc0NsYXNzZXMpKX1cbiAgICAgICAgICB7ISF0aGlzLnF1ZXN0aW9uLmhhc01heExhYmVsID8gPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1heFRleHR9PnttYXhUZXh0fTwvc3Bhbj46IG51bGx9XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IFJlbmRlcmVkUmF0aW5nSXRlbSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGl0ZW1UZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsIGtleT17a2V5fSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0uaXRlbVZhbHVlKX0+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3YtdmlzdWFsbHloaWRkZW5cIlxuICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5nZXRJbnB1dElkKGluZGV4KX1cbiAgICAgICAgICB2YWx1ZT17aXRlbS52YWx1ZX1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24udmFsdWUgPT0gaXRlbS52YWx1ZX1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uQ2xpY2t9XG4gICAgICAgICAgb25DaGFuZ2U9eygpPT57fX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtVGV4dH0+e2l0ZW1UZXh0fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxufVxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInJhdGluZ1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYXRpbmcsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblRhZ2JveE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9kcm9wZG93bi1iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblRhZ2JveEl0ZW0gfSBmcm9tIFwiLi90YWdib3gtaXRlbVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuLi9zdXJ2ZXlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uVGFnYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb25UYWdib3hNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oa2V5OiBzdHJpbmcsIGl0ZW06IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25UYWdib3hJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlZEl0ZW06IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLnF1ZXN0aW9uLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xdWVzdGlvbi5zZWxlY3RlZEl0ZW1zLm1hcCgoY2hvaWNlLCBpbmRleCkgPT4geyByZXR1cm4gdGhpcy5yZW5kZXJJdGVtKFwiaXRlbVwiICsgaW5kZXgsIGNob2ljZSk7IH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX1cbiAgICAgICAgdGFiSW5kZXg9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5ID8gdW5kZWZpbmVkIDogMH1cbiAgICAgICAgb25DbGljaz17dGhpcy5jbGlja31cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBvbklucHV0PXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgb25LZXlVcD17dGhpcy5rZXl1cH1cbiAgICAgICAgb25CbHVyPXt0aGlzLmJsdXJ9XG4gICAgICAgIHJvbGU9e3RoaXMucXVlc3Rpb24uYXJpYVJvbGV9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgID5cbiAgICAgICAgeyBpc0VtcHR5ID9cbiAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sVmFsdWV9Pnt0aGlzLnF1ZXN0aW9uLnBsYWNlaG9sZGVyfTwvZGl2PikgOlxuICAgICAgICAgICg8dWwgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udHJvbFZhbHVlfT5cbiAgICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgICA8L3VsPilcbiAgICAgICAgfVxuICAgICAgICB7dGhpcy5jcmVhdGVDbGVhckJ1dHRvbigpfVxuICAgICAgPC9kaXY+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0YWdib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uVGFnYm94LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8XG4gIFF1ZXN0aW9uVGV4dE1vZGVsXG4+IHtcbiAgcHJpdmF0ZSBfaXNXYWl0aW5nRm9yRW50ZXIgPSBmYWxzZTtcbiAgLy9jb250cm9sUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy90aGlzLmNvbnRyb2xSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgaW5wdXRDbGFzcyA9ICh0aGlzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uVGV4dE1vZGVsKS5nZXRDb250cm9sQ2xhc3MoKTtcbiAgICB2YXIgb25LZXlEb3duID0gbnVsbDtcbiAgICB2YXIgb25LZXlVcCA9IG51bGw7XG4gICAgdmFyIG9uQ29tcG9zaXRpb25VcGRhdGUgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKSB7XG4gICAgICBvbktleURvd24gPSAoZTogYW55KSA9PiAodGhpcy5faXNXYWl0aW5nRm9yRW50ZXIgPSBlLmtleUNvZGUgPT09IDIyOSk7XG4gICAgICBvbktleVVwID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2lzV2FpdGluZ0ZvckVudGVyIHx8IGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgICAgICB0aGlzLl9pc1dhaXRpbmdGb3JFbnRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgb25Db21wb3NpdGlvblVwZGF0ZSA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgZS5wZXJzaXN0KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9LCAxKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL3N1cnZleWpzL3N1cnZleS1saWJyYXJ5L2lzc3Vlcy8zMzg0XG4gICAgICBvbktleVVwID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBvbkNoYW5nZSA9IChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlaG9sZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIGNsYXNzTmFtZT17aW5wdXRDbGFzc31cbiAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgIC8vcmVmPXt0aGlzLmNvbnRyb2xSZWZ9XG4gICAgICAgIHJlZj17KGlucHV0KSA9PiAodGhpcy5jb250cm9sID0gaW5wdXQpfVxuICAgICAgICBzdHlsZT17dGhpcy5xdWVzdGlvbi5pbnB1dFN0eWxlfVxuICAgICAgICBtYXhMZW5ndGg9e3RoaXMucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCl9XG4gICAgICAgIG1pbj17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1pbn1cbiAgICAgICAgbWF4PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTWF4fVxuICAgICAgICBzdGVwPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkU3RlcH1cbiAgICAgICAgc2l6ZT17dGhpcy5xdWVzdGlvbi5pbnB1dFNpemV9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgbGlzdD17dGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkfVxuICAgICAgICBhdXRvQ29tcGxldGU9e3RoaXMucXVlc3Rpb24uYXV0b0NvbXBsZXRlfVxuICAgICAgICBvbkJsdXI9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG9uS2V5VXA9e29uS2V5VXB9XG4gICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICBvbkNvbXBvc2l0aW9uVXBkYXRlPXtvbkNvbXBvc2l0aW9uVXBkYXRlfVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWQgP1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHsgdGhpcy5yZW5kZXJJbnB1dCgpIH1cbiAgICAgICAgICB7IHRoaXMucmVuZGVyRGF0YUxpc3QoKSB9XG4gICAgICAgIDwvZGl2PjpcbiAgICAgICAgdGhpcy5yZW5kZXJJbnB1dCgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckRhdGFMaXN0KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uZGF0YUxpc3RJZCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5xdWVzdGlvbi5kYXRhTGlzdDtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICAgIHZhciBvcHRpb25zID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9ucy5wdXNoKDxvcHRpb24ga2V5PXtcIml0ZW1cIitpfSB2YWx1ZT17aXRlbXNbaV19Pjwvb3B0aW9uPik7XG4gICAgfVxuICAgIHJldHVybiA8ZGF0YWxpc3QgaWQ9e3RoaXMucXVlc3Rpb24uZGF0YUxpc3RJZH0+e29wdGlvbnN9PC9kYXRhbGlzdD47XG4gIH1cbiAgLy8gcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gIC8vICAgdGhpcy5jb250cm9sID0gdGhpcy5jb250cm9sUmVmLmN1cnJlbnQ7XG4gIC8vICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICAvLyB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblRleHQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIFN1cnZleUVsZW1lbnQsIFF1ZXN0aW9uUm93TW9kZWwsIEl0ZW1WYWx1ZSwgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgd3JhcFJvdyhzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcm93OiBRdWVzdGlvblJvd01vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0Um93V3JhcHBlckNvbXBvbmVudE5hbWUocm93KTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldFJvd1dyYXBwZXJDb21wb25lbnREYXRhKHJvdyk7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcm93LFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBFbGVtZW50KHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogU3VydmV5RWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEocXVlc3Rpb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBRdWVzdGlvbkNvbnRlbnQoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHF1ZXN0aW9uOiBTdXJ2ZXlFbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0UXVlc3Rpb25Db250ZW50V3JhcHBlckNvbXBvbmVudE5hbWUocXVlc3Rpb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwSXRlbVZhbHVlKHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLCBpdGVtOiBJdGVtVmFsdWUpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50TmFtZShpdGVtLCBxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50RGF0YShpdGVtLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBrZXk6IGVsZW1lbnQua2V5LFxuICAgICAgZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgaXRlbSxcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwTWF0cml4Q2VsbChzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCwgcmVhc29uOiBzdHJpbmcgPSBcImNlbGxcIik6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShjZWxsLCByZWFzb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGwsIHJlYXNvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgY2VsbCxcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbn1cblxuU3VydmV5TW9kZWwucGxhdGZvcm0gPSBcInJlYWN0XCI7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleVRpbWVyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5VGltZXJQYW5lbCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy50aW1lck1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGltZXJNb2RlbCgpOiBTdXJ2ZXlUaW1lck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50aW1lck1vZGVsO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnRpbWVyTW9kZWwuc3VydmV5LmdldENzcygpLnRpbWVyUm9vdH0+e3RoaXMudGltZXJNb2RlbC50ZXh0fTwvZGl2PjtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgSUVsZW1lbnQsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVJvdyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLnJlY2FsY3VsYXRlQ3NzKCk7XG4gIH1cbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUNzcygpIHtcbiAgICB0aGlzLnJvdy52aXNpYmxlRWxlbWVudHMubWFwKGVsZW1lbnQgPT4gKGVsZW1lbnQgYXMgUXVlc3Rpb24pLmNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucm93O1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBRdWVzdGlvblJvd01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzcztcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucm93ICYmICEhdGhpcy5zdXJ2ZXkgJiYgISF0aGlzLmNyZWF0b3IgJiYgdGhpcy5yb3cudmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBlbGVtZW50cyA9IG51bGw7XG4gICAgZWxlbWVudHMgPSB0aGlzLnJvdy52aXNpYmxlRWxlbWVudHMubWFwKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KGVsZW1lbnQsIGluZGV4KTtcbiAgICAgIGNvbnN0IGNzcyA9IChlbGVtZW50IGFzIFF1ZXN0aW9uKS5jc3NDbGFzc2VzVmFsdWU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3MucXVlc3Rpb25XcmFwcGVyfVxuICAgICAgICAgIHN0eWxlPXsoZWxlbWVudCBhcyBhbnkpLnJvb3RTdHlsZX1cbiAgICAgICAgICBkYXRhLWtleT17aW5uZXJFbGVtZW50LmtleX1cbiAgICAgICAgICBrZXk9e2lubmVyRWxlbWVudC5rZXl9XG4gICAgICAgICAgb25Gb2N1cz17KGVsZW1lbnQgYXMgUXVlc3Rpb24pLmZvY3VzSW59XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5yb3cuaXNOZWVkUmVuZGVyID8gaW5uZXJFbGVtZW50IDogUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGVsZW1lbnQuc2tlbGV0b25Db21wb25lbnROYW1lLCB7IGVsZW1lbnQ6IGVsZW1lbnQsIGNzczogdGhpcy5jc3MsIH0pfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPXt0aGlzLnJvdy5nZXRSb3dDc3MoKX0gPlxuICAgICAgICB7ZWxlbWVudHN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKTtcbiAgICBjb25zdCB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcFJvdyhzdXJ2ZXksIGNvbnRlbnQsIHRoaXMucm93KTtcbiAgICByZXR1cm4gd3JhcHBlciB8fCBjb250ZW50O1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwgJiYgIXRoaXMucm93LmlzTmVlZFJlbmRlcikge1xuICAgICAgdmFyIHJvd0NvbnRhaW5lckRpdiA9IGVsO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucm93LnN0YXJ0TGF6eVJlbmRlcmluZyhyb3dDb250YWluZXJEaXYpO1xuICAgICAgfSwgMTApO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKG5leHRQcm9wcy5yb3cgIT09IHRoaXMucm93KSB7XG4gICAgICBuZXh0UHJvcHMucm93LmlzTmVlZFJlbmRlciA9IHRoaXMucm93LmlzTmVlZFJlbmRlcjtcbiAgICAgIHRoaXMuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUNzcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgc3RvcExhenlSZW5kZXJpbmcoKSB7XG4gICAgdGhpcy5yb3cuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgICB0aGlzLnJvdy5pc05lZWRSZW5kZXIgPSAhdGhpcy5yb3cuaXNMYXp5UmVuZGVyaW5nKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgZWxlbWVudEluZGV4PzogbnVtYmVyKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudEluZGV4ID8gXCItXCIgKyBlbGVtZW50SW5kZXggOiAwO1xuICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQuZ2V0VHlwZSgpO1xuICAgIGlmICghUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5pc0VsZW1lbnRSZWdpc3RlcmVkKGVsZW1lbnRUeXBlKSkge1xuICAgICAgZWxlbWVudFR5cGUgPSBcInF1ZXN0aW9uXCI7XG4gICAgfVxuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGUsIHtcbiAgICAgIGtleTogZWxlbWVudC5uYW1lICsgaW5kZXgsXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgY3JlYXRvcjogdGhpcy5jcmVhdG9yLFxuICAgICAgc3VydmV5OiB0aGlzLnN1cnZleSxcbiAgICAgIGNzczogdGhpcy5jc3MsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHZhbHVlOiB0aGlzLnF1ZXN0aW9uLnZhbHVlIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhbkJ1dHRvbigpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fSByZWY9eyhyb290KSA9PiAodGhpcy5jb250cm9sID0gcm9vdCl9IHN0eWxlPXt7IGhlaWdodDogdGhpcy5xdWVzdGlvbi5zaWduYXR1cmVIZWlnaHQsIHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnNpZ25hdHVyZVdpZHRoIH19PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IHRoaXMucXVlc3Rpb24ubmVlZFNob3dQbGFjZWhvbGRlcigpID8gXCJcIiA6IFwibm9uZVwiIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5wbGFjZUhvbGRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxjYW52YXMgdGFiSW5kZXg9ezB9PjwvY2FudmFzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckNsZWFuQnV0dG9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZighdGhpcy5xdWVzdGlvbi5jYW5TaG93Q2xlYXJCdXR0b24pIHJldHVybiBudWxsO1xuXG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNvbnRyb2xzfT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbn1cbiAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24uY2xlYXJCdXR0b25DYXB0aW9ufVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmNsZWFyVmFsdWUoKX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbkljb25JZCA/IDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b25JY29uSWR9IHNpemU9e1wiYXV0b1wifT48L1N2Z0ljb24+IDogPHNwYW4+4pyWPC9zcGFuPn1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic2lnbmF0dXJlcGFkXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblNpZ25hdHVyZVBhZCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IGxvY1N0cigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBjaGFuZ2VkOiBzZWxmLnN0YXRlLmNoYW5nZWQgKyAxIH0pO1xyXG4gICAgfTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMubG9jU3RyKSByZXR1cm47XHJcbiAgICB0aGlzLmxvY1N0ci5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7fTtcclxuICB9XHJcbiAgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLmxvY1N0ci50ZXh0ID0gZXZlbnQudGFyZ2V0LmlubmVyVGV4dDtcclxuICB9O1xyXG4gIG9uQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH07XHJcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sb2NTdHIuaGFzSHRtbCkge1xyXG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sIH07XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxyXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsZX1cclxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XHJcbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25JbnB1dH1cclxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cclxuICAgICAgICAvPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPHNwYW5cclxuICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcclxuICAgICAgICBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCJcclxuICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGV9XHJcbiAgICAgICAgb25CbHVyPXt0aGlzLm9uSW5wdXR9XHJcbiAgICAgICAgb25DbGljaz17dGhpcy5vbkNsaWNrfVxyXG4gICAgICA+XHJcbiAgICAgICAge3RoaXMubG9jU3RyLnJlbmRlcmVkSHRtbH1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmVkaXRhYmxlUmVuZGVyZXIsXHJcbiAgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IsIHByb3BzKTtcclxuICB9XHJcbik7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ1ZpZXdlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gIH1cclxuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MU3BhbkVsZW1lbnQ+O1xyXG4gIHByaXZhdGUgZ2V0IGxvY1N0cigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25TdHJpbmdDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XHJcbiAgICBpZighIXByZXZQcm9wcy5sb2NTdHIpIHtcclxuICAgICAgdGhpcy5sb2NTdHIub25TdHJpbmdDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xyXG4gIH1cclxuICBwcml2YXRlIGlzUmVuZGVyaW5nOiBib29sZWFuO1xyXG4gIHByaXZhdGUgb25DaGFuZ2VkSGFuZGxlciA9IChzZW5kZXI6IGFueSwgb3B0aW9uczogYW55KSA9PiB7XHJcbiAgICBpZih0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25TdHJpbmdDaGFuZ2VkLmFkZCh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xyXG4gIH1cclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuIG51bGw7XHJcbiAgICB0aGlzLmlzUmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHN0ckVsID0gdGhpcy5yZW5kZXJTdHJpbmcoKTtcclxuICAgIHRoaXMuaXNSZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgIHJldHVybiBzdHJFbDtcclxuICB9XHJcbiAgcHJvdGVjdGVkIHJlbmRlclN0cmluZygpOiBKU1guRWxlbWVudCB7XHJcbiAgICBpZiAodGhpcy5sb2NTdHIuaGFzSHRtbCkge1xyXG4gICAgICBsZXQgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMubG9jU3RyLnJlbmRlcmVkSHRtbCB9O1xyXG4gICAgICByZXR1cm4gPHNwYW4gcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT1cInN2LXN0cmluZy12aWV3ZXJcIiBzdHlsZT17dGhpcy5zdHlsZX0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gLz47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPHNwYW4gcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT1cInN2LXN0cmluZy12aWV3ZXJcIiBzdHlsZT17dGhpcy5zdHlsZX0+e3RoaXMubG9jU3RyLnJlbmRlcmVkSHRtbH08L3NwYW4+O1xyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXHJcbiAgTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdFJlbmRlcmVyLFxyXG4gIChwcm9wcykgPT4ge1xyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TG9jU3RyaW5nVmlld2VyLCBwcm9wcyk7XHJcbiAgfVxyXG4pO1xyXG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UYWdib3hNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi9iYXNlXCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25UYWdib3hJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblRhZ2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pdGVtICYmICEhdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0KTtcblxuICAgIGNvbnN0IHJlbW92ZUl0ZW0gPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbC5kZXNlbGVjdEl0ZW0odGhpcy5pdGVtLnZhbHVlKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGxpIGNsYXNzTmFtZT1cInN2LXRhZ2JveF9faXRlbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LXRhZ2JveF9faXRlbS10ZXh0XCI+e3RleHR9PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9eyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5JdGVtQnV0dG9ufVxuICAgICAgICAgIG9uQ2xpY2s9e3JlbW92ZUl0ZW19XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5JdGVtQnV0dG9uU3ZnfVxuICAgICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkl0ZW1CdXR0b25JY29uSWR9XG4gICAgICAgICAgICBzaXplPXsxNn1cbiAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogR2xvYmFsIHN1cnZleSBzZXR0aW5nc1xuICovXG5leHBvcnQgdmFyIHNldHRpbmdzID0ge1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgU3VydmV5SlMgY29tcGFyYXRvci4gQnkgZGVmYXVsdCB3ZSB0cmltIHN0cmluZ3MgYW5kIGNvbXBhcmUgdGhlbSBhcyBjYXNlIGluc2Vuc2l0aXZlLiBUbyBjaGFuZ2UgdGhlIGJlaGF2aW9yIHlvdSBjYW4gdXNlIGZvbGxvd2luZyBjb2RlOlxuICAgKiBzZXR0aW5ncy5jb21wYXJhdG9yLnRyaW1TdHJpbmdzID0gZmFsc2U7IC8vXCJhYmMgXCIgd2lsbCBub3QgZXF1YWwgdG8gXCJhYmNcIi4gVGhleSBhcmUgZXF1YWwgYnkgZGVmYXVsdC5cbiAgICogc2V0dGluZ3MuY29tcGFyYXRvci5jYXNlU2Vuc2l0aXZlID0gdHJ1ZTsgLy9cImFiYyBcIiB3aWxsIG5vdCBlcXVhbCB0byBcIkFiY1wiLiBUaGV5IGFyZSBlcXVhbCBieSBkZWZhdWx0LlxuICAgKi9cbiAgY29tcGFyYXRvcjoge1xuICAgIHRyaW1TdHJpbmdzOiB0cnVlLFxuICAgIGNhc2VTZW5zaXRpdmU6IGZhbHNlXG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB2YWx1ZSB0byBmYWxzZSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBVVEMgZnVjdGlvbnMsIGZvciBleGFtcGxlIHNldFVUQ0hvdXJzIGluc2lkZSBvdXIgZnVuY3Rpb25zLCBsaWtlIHRvZGF5LlxuICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgc2V0SG91cnMgZnVuY3Rpb24sIHdpdGggbG9jYWwgZGF0ZVxuICAgKi9cbiAgdXNlTG9jYWxUaW1lWm9uZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdGhhdCB1c2VzIHRvIHN0b3JlIHRoZSBxdWVzdGlvbiBjb21tZW50LCBhcyBcInF1ZXN0aW9uTmFtZSArIGNvbW1lbnRQcmVmaXhcIi5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCItQ29tbWVudFwiXG4gICAqL1xuICBjb21tZW50UHJlZml4OiBcIi1Db21tZW50XCIsXG4gIC8qKlxuICAgKiBFbmNvZGUgcGFyYW1ldGVyIG9uIGNhbGxpbmcgcmVzdGZ1bCB3ZWIgQVBJXG4gICAqL1xuICB3ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyczogdHJ1ZSxcbiAgLyoqXG4gICAqIENhY2hlIHRoZSByZXN1bHQgZm9yIGNob2ljZXMgZ2V0dGluZyBmcm9tIHdlYiBzZXJ2aWNlcy4gU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UsIHRvIGRpc2FibGUgdGhlIGNhY2hpbmcuXG4gICAqL1xuICB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw6IHRydWUsXG4gIGdldCB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWxsKCkge1xuICAgIHJldHVybiBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw7XG4gIH0sXG4gIHNldCB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWxsKHZhbDogYm9vbGVhbikge1xuICAgIHNldHRpbmdzLnVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bCA9IHZhbDtcbiAgfSxcbiAgLyoqXG4gICAqIFN1cnZleUpTIHdlYiBzZXJ2aWNlIEFQSSB1cmxcbiAgICovXG4gIHN1cnZleVNlcnZpY2VVcmw6IFwiaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8vcHVibGljL3YxL1N1cnZleVwiLFxuICAvKipcbiAgICogc2VwYXJhdG9yIHRoYXQgY2FuIGFsbG93IHRvIHNldCB2YWx1ZSBhbmQgdGV4dCBvZiBJdGVtVmFsdWUgb2JqZWN0IGluIG9uZSBzdHJpbmcgYXM6IFwidmFsdWV8dGV4dFwiXG4gICAqL1xuICBpdGVtVmFsdWVTZXBhcmF0b3I6IFwifFwiLFxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2VyaWFsaXplIGl0ZW12YWx1ZSBpbnN0YW5jZSBhbHdheXMgYXMgb2JqZWN0IGV2ZW4gaWYgdGV4dCBwcm9wZXJ0eSBpcyBlbXB0eVxuICAgKiBjb25zdCBpdGVtID0gbmV3IFN1cnZleS5JdGVtVmFsdWUoNSk7XG4gICAqIGl0ZW0udG9KU09OKCk7IC8vd2lsbCByZXR1cm4ge3ZhbHVlOiA1fSwgaW5zdGVhZCBvZiA1IGJ5IGRlZmF1bHQuXG4gICAqL1xuICBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzZXJpYWxpemUgaXRlbXZhbHVlIHRleHQgcHJvcGVydHksIGV2ZW4gaWYgaXQgaXMgZW1wdHkgb3IgZXF1YWxzIHRvIHZhbHVlXG4gICAqIGNvbnN0IGl0ZW0gPSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZShcIml0ZW0xXCIpO1xuICAgKiBpdGVtLnRvSlNPTigpOyAvL3dpbGwgcmV0dXJuIHt2YWx1ZTogaXRlbTEsIHRleHQ6IFwiaXRlbTFcIn0sIGluc3RlYWQgb2YgXCJpdGVtMVwiIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVUZXh0OiBmYWxzZSxcbiAgLyoqXG4gICAqIGRlZmF1bHQgbG9jYWxlIG5hbWUgZm9yIGxvY2FsaXphYmxlIHN0cmluZ3MgdGhhdCB1c2VzIGR1cmluZyBzZXJpYWxpemF0aW9uLCB7XCJkZWZhdWx0XCI6IFwiTXkgdGV4dFwiLCBcImRlXCI6IFwiTWVpbiBUZXh0XCJ9XG4gICAqL1xuICBkZWZhdWx0TG9jYWxlTmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJvdyBuYW1lIGZvciBtYXRyaXggKHNpbmdsZSBjaG9pY2UpXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Um93TmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IGNlbGwgdHlwZSBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXNcbiAgICovXG4gIG1hdHJpeERlZmF1bHRDZWxsVHlwZTogXCJkcm9wZG93blwiLFxuICAvKipcbiAgICogVG90YWwgdmFsdWUgcG9zdGZpeCBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXMuIFRoZSB0b3RhbCB2YWx1ZSBzdG9yZXMgYXM6IHttYXRyaXhOYW1lfSArIHtwb3N0Zml4fVxuICAgKi9cbiAgbWF0cml4VG90YWxWYWx1ZVBvc3RGaXg6IFwiLXRvdGFsXCIsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJvdyBjb3VudCBpbiBkeW5hbWljIG1hdHJpeFxuICAgKi9cbiAgbWF0cml4TWF4aW11bVJvd0NvdW50OiAxMDAwLFxuICAvKipcbiAgICogTWF4aW11bSByb3dDb3VudCB0aGF0IHJldHVybnMgaW4gYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCBmdW5jdGlvblxuICAgKi9cbiAgbWF0cml4TWF4Um93Q291bnRJbkNvbmRpdGlvbjogMSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlLCB0byByZW5kZXIgbWF0cml4IGR5bmFtaWMgcmVtb3ZlIGFjdGlvbiBhcyBidXR0b24uXG4gICAqIEl0IGlzIHJlbmRlcmVkIGFzIGljb24gaW4gbmV3IHRoZW1lcyAoXCJkZWZhdWx0VjJcIikgYnkgZGVmYXVsdC5cbiAgICovXG4gIG1hdHJpeFJlbmRlclJlbW92ZUFzSWNvbjogdHJ1ZSxcbiAgLyoqXG4gICAqIE1heGltdW0gcGFuZWwgY291bnQgaW4gZHluYW1pYyBwYW5lbFxuICAgKi9cbiAgcGFuZWxNYXhpbXVtUGFuZWxDb3VudDogMTAwLFxuICAvKipcbiAgICogTWF4aW11bSByYXRlIHZhbHVlIGNvdW50IGluIHJhdGluZyBxdWVzdGlvblxuICAgKi9cbiAgcmF0aW5nTWF4aW11bVJhdGVWYWx1ZUNvdW50OiAyMCxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHF1ZXN0aW9uIHdoaWxlIGNob2ljZXMgYXJlIGdldHRpbmcgZnJvbSB0aGUgd2ViIHNlcnZpY2VcbiAgICovXG4gIGRpc2FibGVPbkdldHRpbmdDaG9pY2VzRnJvbVdlYjogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBhbHdheXMgc2VyaWFsaXplIHRoZSBsb2NhbGl6YXRpb24gc3RyaW5nIGFzIG9iamVjdCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lIHZhbHVlIGZvciBkZWZhdWx0IGxvY2FsZS4gSW5zdGVhZCBvZiBzdHJpbmcgXCJNeVN0clwiIHNlcmlhbGl6ZSBhcyB7ZGVmYXVsdDogXCJNeVN0clwifVxuICAgKi9cbiAgc2VyaWFsaXplTG9jYWxpemFibGVTdHJpbmdBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBpbiBkZXNpZ24gbW9kZVxuICAgKi9cbiAgYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBoaWRlIGVtcHR5IHBhZ2UgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGV4ZWN1dGUgdGhlIGNvbXBsZXRlIHRyaWdnZXIgb24gdmFsdWUgY2hhbmdlIGluc3RlYWQgb2Ygb24gbmV4dCBwYWdlLlxuICAgKi9cbiAgZXhlY3V0ZUNvbXBsZXRlVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGV4ZWN1dGUgdGhlIHNraXAgdHJpZ2dlciBvbiBuZXh0IHBhZ2UgaW5zdGVhZCBvZiBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqL1xuICBleGVjdXRlU2tpcFRyaWdnZXJPblZhbHVlQ2hhbmdlZDogdHJ1ZSxcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgdGhlIGlucHV0IGZpZWxkIG9mIFtDb21tZW50XShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbmNvbW1lbnRtb2RlbCkgcXVlc3Rpb25zIGlzIHJlbmRlcmVkIGluIHRoZSByZWFkLW9ubHkgbW9kZS5cbiAgICogQXZhaWxhYmxlIHZhbHVlczpcbiAgICogXCJ0ZXh0YXJlYVwiIChkZWZhdWx0KSAtIEEgJ3RleHRhcmVhJyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgQ29tbWVudCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKiBcImRpdlwiIC0gQSAnZGl2JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgQ29tbWVudCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgcmVhZE9ubHlDb21tZW50UmVuZGVyTW9kZTogXCJ0ZXh0YXJlYVwiLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyB0aGUgaW5wdXQgZmllbGQgb2YgW1RleHRdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9udGV4dG1vZGVsKSBxdWVzdGlvbnMgaXMgcmVuZGVyZWQgaW4gdGhlIHJlYWQtb25seSBtb2RlLlxuICAgKiBBdmFpbGFibGUgdmFsdWVzOlxuICAgKiBcImlucHV0XCIgKGRlZmF1bHQpIC0gQW4gJ2lucHV0JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgVGV4dCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKiBcImRpdlwiIC0gQSAnZGl2JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgVGV4dCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgcmVhZE9ubHlUZXh0UmVuZGVyTW9kZTogXCJpbnB1dFwiLFxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiwgc2V0IHlvdXIgZnVuY3Rpb24sIGlmIHlvdSB3YW50IHRvIHNob3cgeW91ciBvd24gZGlhbG9nIGNvbmZpcm0gd2luZG93IGluc3RlYWQgb2Ygc3RhbmRhcmQgYnJvd3NlciB3aW5kb3cuXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqL1xuICBjb25maXJtQWN0aW9uRnVuYzogZnVuY3Rpb24gKG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb25maXJtKG1lc3NhZ2UpO1xuICB9LFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtaW5XaWR0aCBjb25zdHJhaW50XG4gICAqL1xuICBtaW5XaWR0aDogXCIzMDBweFwiLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBtYXhXaWR0aCBjb25zdHJhaW50XG4gICAqL1xuICBtYXhXaWR0aDogXCIxMDAlXCIsXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IHRlbGxzIGhvdyBtYW55IHRpbWVzIHN1cnZleSByZS1ydW4gZXhwcmVzc2lvbnMgb24gdmFsdWUgY2hhbmdlcyBkdXJpbmcgY29uZGl0aW9uIHJ1bm5pbmcuIFdlIG5lZWQgaXQgdG8gYXZvaWQgcmVjdXJzaW9ucyBpbiB0aGUgZXhwcmVzc2lvbnNcbiAgICovXG4gIG1heGltdW1Db25kaXRpb25SdW5Db3VudE9uVmFsdWVDaGFuZ2VkOiAxMCxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdmlzaWJsZUluZGV4IGZvciBxdWVzdGlvbiB3aXRoIHRpdGxlTG9jYXRpb24gPSBcImhpZGRlblwiIGlzIC0xLCBhbmQgc3VydmV5IGRvZXNuJ3QgY291bnQgdGhlc2UgcXVlc3Rpb25zIHdoZW4gc2V0IHF1ZXN0aW9ucyBudW1iZXJzLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIGEgcXVlc3Rpb24gbmV4dCB0byBhIHF1ZXN0aW9uIHdpdGggaGlkZGVuIHRpdGxlIHdpbGwgaW5jcmVhc2UgaXQncyBudW1iZXIuXG4gICAqL1xuICBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlblRpdGxlOiBmYWxzZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdmlzaWJsZUluZGV4IGZvciBxdWVzdGlvbiB3aXRoIGhpZGVOdW1iZXIgPSB0cnVlIGlzIC0xLCBhbmQgc3VydmV5IGRvZXNuJ3QgY291bnQgdGhlc2UgcXVlc3Rpb25zIHdoZW4gc2V0IHF1ZXN0aW9ucyBudW1iZXJzLlxuICAgKiBTZXQgaXQgdHJ1ZSwgYW5kIGEgcXVlc3Rpb24gbmV4dCB0byBhIHF1ZXN0aW9uIHdpdGggaGlkZGVuIHRpdGxlIG51bWJlciB3aWxsIGluY3JlYXNlIGl0J3MgbnVtYmVyLlxuICAgKi9cbiAgc2V0UXVlc3Rpb25WaXNpYmxlSW5kZXhGb3JIaWRkZW5OdW1iZXI6IGZhbHNlLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCBhbGwgcm93cyBhcmUgcmVuZGVyZWQgbm8gbWF0dGVycyB3aHd0aGVyIHRoZXkgYXJlIHZpc2libGUuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgc3VydmV5IG1hcmt1cCByb3dzIHdpbGwgYmUgcmVuZGVyZWQgb25seSBpZiB0aGV5IGFyZSB2aXNpYmxlIGluIHZpZXdwb3J0LlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWFudGFsIGFuZCBtaWdodCBkbyBub3Qgc3VwcG9ydCBhbGwgdGhlIHVzZSBjYXNlcy5cbiAgICovXG4gIGxhenlSb3dzUmVuZGVyaW5nOiBmYWxzZSxcbiAgbGF6eVJvd3NSZW5kZXJpbmdTdGFydFJvdzogMyxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgY2hlY2tib3ggYW5kIHJhZGlvZ3JvdXAgaXRlbXMgYXJlIG9yZGVyZWQgaW4gcm93cy5cbiAgICogU2V0IGl0IFwiY29sdW1uXCIsIGFuZCBpdGVtcyB3aWxsIGJlIG9yZGVyZWQgaW4gY29sdW1ucy5cbiAgICovXG4gIHNob3dJdGVtc0luT3JkZXI6IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogU3VwcG9ydGVkIHZhbGlkYXRvcnMgYnkgcXVlc3Rpb24gdHlwZXMuIFlvdSBjYW4gbW9kaWZ5IHRoaXMgdmFyaWFibGUgdG8gYWRkIHZhbGlkYXRvcnMgZm9yIG5ldyBxdWVzdGlvbiB0eXBlcyBvciBhZGQvcmVtb3ZlIGZvciBleGlzdGluZyBxdWVzdGlvbiB0eXBlcy5cbiAgICovXG4gIHN1cHBvcnRlZFZhbGlkYXRvcnM6IHtcbiAgICBxdWVzdGlvbjogW1wiZXhwcmVzc2lvblwiXSxcbiAgICBjb21tZW50OiBbXCJ0ZXh0XCIsIFwicmVnZXhcIl0sXG4gICAgdGV4dDogW1wibnVtZXJpY1wiLCBcInRleHRcIiwgXCJyZWdleFwiLCBcImVtYWlsXCJdLFxuICAgIGNoZWNrYm94OiBbXCJhbnN3ZXJjb3VudFwiXSxcbiAgICBpbWFnZXBpY2tlcjogW1wiYW5zd2VyY291bnRcIl0sXG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgbGVzcyB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1pbkRhdGU6IFwiXCIsXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGFzIHN0cmluZyBcInl5eXktbW0tZGRcIi4gdGV4dCBxdWVzdGlvbnMgd2l0aCBpbnB1dFR5cGUgXCJkYXRlXCIgd2lsbCBub3QgYWxsb3cgdG8gc2V0IHRvIHN1cnZleSBkYXRlIHRoYXQgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWVcbiAgICovXG4gIG1heERhdGU6IFwiXCIsXG4gIHNob3dNb2RhbDogPFxuICAgIChcbiAgICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIG9uQXBwbHk6ICgpID0+IGJvb2xlYW4sXG4gICAgICBvbkNhbmNlbD86ICgpID0+IHZvaWQsXG4gICAgICBjc3NDbGFzcz86IHN0cmluZyxcbiAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgZGlzcGxheU1vZGU/OiBcInBvcHVwXCIgfCBcIm92ZXJsYXlcIlxuICAgICkgPT4gdm9pZFxuICAgID51bmRlZmluZWQsXG4gIHN1cHBvcnRDcmVhdG9yVjI6IGZhbHNlLFxuICBzaG93RGVmYXVsdEl0ZW1zSW5DcmVhdG9yVjI6IHRydWUsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBsaXN0IG9mIGN1c3RvbSBpY29ucy5cbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVwbGFjZSBTdXJ2ZXlKUyBkZWZhdWx0IGljb25zIChkaXNwbGF5ZWQgaW4gVUkgZWxlbWVudHMgb2YgU3VydmV5SlMgTGlicmFyeSBvciBDcmVhdG9yKSB3aXRoIHlvdXIgY3VzdG9tIGljb25zLlxuICAgKiBGb3IgZXZlcnkgZGVmYXVsdCBpY29uIHRvIHJlcGxhY2UsIGFkZCBhIGtleS92YWx1ZSBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCBpY29uJ3MgbmFtZSBhcyBhIGtleSBhbmQgdGhlIG5hbWUgb2YgeW91ciBjdXN0b20gaWNvbiBhcyBhIHZhbHVlLlxuICAgKiBGb3IgZXhhbXBsZTogU3VydmV5LnNldHRpbmdzLmN1c3RvbUljb25zW1wiaWNvbi1yZWRvXCJdID0gXCJteS1vd24tcmVkby1pY29uXCJcbiAgICovXG4gIGN1c3RvbUljb25zOiB7fSxcbiAgdGl0bGVUYWdzOiB7XG4gICAgc3VydmV5OiBcImgzXCIsXG4gICAgcGFnZTogXCJoNFwiLFxuICAgIHBhbmVsOiBcImg0XCIsXG4gICAgcXVlc3Rpb246IFwiaDVcIixcbiAgfSxcbiAgcXVlc3Rpb25zOiB7XG4gICAgaW5wdXRUeXBlczogW1xuICAgICAgXCJjb2xvclwiLFxuICAgICAgXCJkYXRlXCIsXG4gICAgICBcImRhdGV0aW1lXCIsXG4gICAgICBcImRhdGV0aW1lLWxvY2FsXCIsXG4gICAgICBcImVtYWlsXCIsXG4gICAgICBcIm1vbnRoXCIsXG4gICAgICBcIm51bWJlclwiLFxuICAgICAgXCJwYXNzd29yZFwiLFxuICAgICAgXCJyYW5nZVwiLFxuICAgICAgXCJ0ZWxcIixcbiAgICAgIFwidGV4dFwiLFxuICAgICAgXCJ0aW1lXCIsXG4gICAgICBcInVybFwiLFxuICAgICAgXCJ3ZWVrXCIsXG4gICAgXSxcbiAgICBkYXRhTGlzdDogW1xuICAgICAgXCJuYW1lXCIsXG4gICAgICBcImhvbm9yaWZpYy1wcmVmaXhcIixcbiAgICAgIFwiZ2l2ZW4tbmFtZVwiLFxuICAgICAgXCJhZGRpdGlvbmFsLW5hbWVcIixcbiAgICAgIFwiZmFtaWx5LW5hbWVcIixcbiAgICAgIFwiaG9ub3JpZmljLXN1ZmZpeFwiLFxuICAgICAgXCJuaWNrbmFtZVwiLFxuICAgICAgXCJvcmdhbml6YXRpb24tdGl0bGVcIixcbiAgICAgIFwidXNlcm5hbWVcIixcbiAgICAgIFwibmV3LXBhc3N3b3JkXCIsXG4gICAgICBcImN1cnJlbnQtcGFzc3dvcmRcIixcbiAgICAgIFwib3JnYW5pemF0aW9uXCIsXG4gICAgICBcInN0cmVldC1hZGRyZXNzXCIsXG4gICAgICBcImFkZHJlc3MtbGluZTFcIixcbiAgICAgIFwiYWRkcmVzcy1saW5lMlwiLFxuICAgICAgXCJhZGRyZXNzLWxpbmUzXCIsXG4gICAgICBcImFkZHJlc3MtbGV2ZWw0XCIsXG4gICAgICBcImFkZHJlc3MtbGV2ZWwzXCIsXG4gICAgICBcImFkZHJlc3MtbGV2ZWwyXCIsXG4gICAgICBcImFkZHJlc3MtbGV2ZWwxXCIsXG4gICAgICBcImNvdW50cnlcIixcbiAgICAgIFwiY291bnRyeS1uYW1lXCIsXG4gICAgICBcInBvc3RhbC1jb2RlXCIsXG4gICAgICBcImNjLW5hbWVcIixcbiAgICAgIFwiY2MtZ2l2ZW4tbmFtZVwiLFxuICAgICAgXCJjYy1hZGRpdGlvbmFsLW5hbWVcIixcbiAgICAgIFwiY2MtZmFtaWx5LW5hbWVcIixcbiAgICAgIFwiY2MtbnVtYmVyXCIsXG4gICAgICBcImNjLWV4cFwiLFxuICAgICAgXCJjYy1leHAtbW9udGhcIixcbiAgICAgIFwiY2MtZXhwLXllYXJcIixcbiAgICAgIFwiY2MtY3NjXCIsXG4gICAgICBcImNjLXR5cGVcIixcbiAgICAgIFwidHJhbnNhY3Rpb24tY3VycmVuY3lcIixcbiAgICAgIFwidHJhbnNhY3Rpb24tYW1vdW50XCIsXG4gICAgICBcImxhbmd1YWdlXCIsXG4gICAgICBcImJkYXlcIixcbiAgICAgIFwiYmRheS1kYXlcIixcbiAgICAgIFwiYmRheS1tb250aFwiLFxuICAgICAgXCJiZGF5LXllYXJcIixcbiAgICAgIFwic2V4XCIsXG4gICAgICBcInVybFwiLFxuICAgICAgXCJwaG90b1wiLFxuICAgICAgXCJ0ZWxcIixcbiAgICAgIFwidGVsLWNvdW50cnktY29kZVwiLFxuICAgICAgXCJ0ZWwtbmF0aW9uYWxcIixcbiAgICAgIFwidGVsLWFyZWEtY29kZVwiLFxuICAgICAgXCJ0ZWwtbG9jYWxcIixcbiAgICAgIFwidGVsLWxvY2FsLXByZWZpeFwiLFxuICAgICAgXCJ0ZWwtbG9jYWwtc3VmZml4XCIsXG4gICAgICBcInRlbC1leHRlbnNpb25cIixcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIFwiaW1wcFwiLFxuICAgIF1cbiAgfVxufTtcbiIsImltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tIFwidGltZXJzXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi4vYWN0aW9ucy9hY3Rpb25cIjtcbmltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5pbXBvcnQgeyBpc0NvbnRhaW5lclZpc2libGUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbnRlcmZhY2UgSURpbWVuc2lvbnMge1xuICBzY3JvbGw6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNwb25zaXZpdHlNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgbWluRGltZW5zaW9uQ29uc3QgPSA1NjtcbiAgcHJpdmF0ZSBzZXBhcmF0b3JTaXplID0gMTc7XG4gIHByaXZhdGUgc2VwYXJhdG9yQWRkQ29uc3QgPSAxO1xuICBwcml2YXRlIHBhZGRpbmdTaXplQ29uc3QgPSA4O1xuICBwcm90ZWN0ZWQgcmVjYWxjTWluRGltZW5zaW9uQ29uc3QgPSB0cnVlO1xuXG4gIHB1YmxpYyBnZXRDb21wdXRlZFN0eWxlOiAoXG4gICAgZWx0OiBFbGVtZW50XG4gICkgPT4gQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlLmJpbmQod2luZG93KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCxcbiAgICBwcml2YXRlIG1vZGVsOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcixcbiAgICBwcml2YXRlIGl0ZW1zU2VsZWN0b3I6IHN0cmluZyxcbiAgICBwcml2YXRlIGRvdHNJdGVtU2l6ZTogbnVtYmVyID0gNDgsXG4gICkge1xuXG4gICAgdGhpcy5tb2RlbC51cGRhdGVDYWxsYmFjayA9IChpc1Jlc2V0SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmKGlzUmVzZXRJbml0aWFsaXplZClcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICBlbHNlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnByb2Nlc3MoKTsgfSwgMSk7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChfKSA9PiB0aGlzLnByb2Nlc3MoKSk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXIucGFyZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpbWVuc2lvbnMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogZWxlbWVudC5zY3JvbGxXaWR0aCxcbiAgICAgIG9mZnNldDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZSA9IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1JpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0V2lkdGg7XG4gIH1cblxuICBwcml2YXRlIGNhbGNNaW5EaW1lbnNpb24oY3VycmVudEFjdGlvbjogQWN0aW9uKSB7XG4gICAgbGV0IG1pbkRpbWVuc2lvbkNvbnN0ID0gdGhpcy5taW5EaW1lbnNpb25Db25zdDtcbiAgICBpZihjdXJyZW50QWN0aW9uLmljb25TaXplICYmIHRoaXMucmVjYWxjTWluRGltZW5zaW9uQ29uc3QpIHtcbiAgICAgIG1pbkRpbWVuc2lvbkNvbnN0ID0gMiAqIGN1cnJlbnRBY3Rpb24uaWNvblNpemUgKyB0aGlzLnBhZGRpbmdTaXplQ29uc3Q7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50QWN0aW9uLmNhblNocmlua1xuICAgICAgPyBtaW5EaW1lbnNpb25Db25zdCArXG4gICAgICAoY3VycmVudEFjdGlvbi5uZWVkU2VwYXJhdG9yID8gdGhpcy5zZXBhcmF0b3JTaXplIDogMClcbiAgICAgIDogY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb247XG4gIH1cblxuICBwcml2YXRlIGNhbGNJdGVtc1NpemVzKCkge1xuICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLm1vZGVsLmFjdGlvbnM7XG4gICAgdGhpcy5jb250YWluZXJcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuaXRlbXNTZWxlY3RvcilcbiAgICAgIC5mb3JFYWNoKChpdGVtOiBIVE1MRGl2RWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQgY3VycmVudEFjdGlvbiA9IGFjdGlvbnNbaW5kZXhdO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbiA9IHRoaXMuY2FsY0l0ZW1TaXplKGl0ZW0pO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1pbkRpbWVuc2lvbiA9IHRoaXMuY2FsY01pbkRpbWVuc2lvbihjdXJyZW50QWN0aW9uKTtcbiAgICAgIH0pO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzQ29udGFpbmVyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDb250YWluZXJWaXNpYmxlKHRoaXMuY29udGFpbmVyKTtcbiAgfVxuICBwcml2YXRlIHByb2Nlc3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNDb250YWluZXJWaXNpYmxlICYmICF0aGlzLm1vZGVsLmlzUmVzcG9uc2l2ZW5lc3NEaXNhYmxlZCkge1xuICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRBY3Rpb25zTW9kZShcImxhcmdlXCIpO1xuICAgICAgICB0aGlzLmNhbGNJdGVtc1NpemVzKCk7XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLm1vZGVsLmZpdCh0aGlzLmdldEF2YWlsYWJsZVNwYWNlKCksIHRoaXMuZG90c0l0ZW1TaXplKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIGlmICghIXRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyIGV4dGVuZHMgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIGl0ZW1zU2VsZWN0b3I6IHN0cmluZyxcbiAgICBkb3RzSXRlbVNpemU/OiBudW1iZXIsXG4gICAgbWluRGltZW5zaW9uID0gNDBcbiAgKSB7XG4gICAgc3VwZXIoY29udGFpbmVyLCBtb2RlbCwgaXRlbXNTZWxlY3RvciwgZG90c0l0ZW1TaXplKTtcbiAgICB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0ID0gbWluRGltZW5zaW9uO1xuICAgIHRoaXMucmVjYWxjTWluRGltZW5zaW9uQ29uc3QgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaW1lbnNpb25zKCk6IElEaW1lbnNpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsOiB0aGlzLmNvbnRhaW5lci5zY3JvbGxIZWlnaHQsXG4gICAgICBvZmZzZXQ6IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZTogbnVtYmVyID0gdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3ApICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0SGVpZ2h0O1xuICB9XG59XG4iLCJpbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuLy4uL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4uL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3JjL2Jhc2VcIjtcbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyhhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCByZWdFeFN0cmlwMDogUmVnRXhwID0gLyhcXC4wKykrJC87XG4gIGNvbnN0IHNlZ21lbnRzQTogc3RyaW5nW10gPSBhLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgY29uc3Qgc2VnbWVudHNCOiBzdHJpbmdbXSA9IGIucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBsZW46IG51bWJlciA9IE1hdGgubWluKHNlZ21lbnRzQS5sZW5ndGgsIHNlZ21lbnRzQi5sZW5ndGgpO1xuICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBkaWZmOiBudW1iZXIgPVxuICAgICAgcGFyc2VJbnQoc2VnbWVudHNBW2ldLCAxMCkgLSBwYXJzZUludChzZWdtZW50c0JbaV0sIDEwKTtcbiAgICBpZiAoZGlmZikge1xuICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZWdtZW50c0EubGVuZ3RoIC0gc2VnbWVudHNCLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1BY3Rpb24obWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghIXNldHRpbmdzICYmICEhc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMpXG4gICAgcmV0dXJuIHNldHRpbmdzLmNvbmZpcm1BY3Rpb25GdW5jKG1lc3NhZ2UpO1xuICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGRldGVjdElFQnJvd3NlcigpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdWE6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICBjb25zdCBvbGRJZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICBjb25zdCBlbGV2ZW5JZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICByZXR1cm4gb2xkSWUgPiAtMSB8fCBlbGV2ZW5JZSA+IC0xO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVPckVkZ2UoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICAgIGNvbnN0IHRyaWRlbnQ6IG51bWJlciA9IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKTtcbiAgICBjb25zdCBlZGdlOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiRWRnZS9cIik7XG4gICAgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPSBlZGdlID4gMCB8fCB0cmlkZW50ID4gMCB8fCBtc2llID4gMDtcbiAgfVxuICByZXR1cm4gKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2U7XG59XG5mdW5jdGlvbiBsb2FkRmlsZUZyb21CYXNlNjQoYjY0RGF0YTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYnl0ZVN0cmluZzogc3RyaW5nID0gYXRvYihiNjREYXRhLnNwbGl0KFwiLFwiKVsxXSk7XG5cbiAgICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gICAgY29uc3QgbWltZVN0cmluZzogc3RyaW5nID0gYjY0RGF0YVxuICAgICAgLnNwbGl0KFwiLFwiKVswXVxuICAgICAgLnNwbGl0KFwiOlwiKVsxXVxuICAgICAgLnNwbGl0KFwiO1wiKVswXTtcblxuICAgIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXG4gICAgY29uc3QgYWI6IEFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYTogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICAvLyB3cml0ZSB0aGUgQXJyYXlCdWZmZXIgdG8gYSBibG9iLCBhbmQgeW91J3JlIGRvbmVcbiAgICBjb25zdCBiYjogQmxvYiA9IG5ldyBCbG9iKFthYl0sIHsgdHlwZTogbWltZVN0cmluZyB9KTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICB3aW5kb3cubmF2aWdhdG9yICYmXG4gICAgICAoPGFueT53aW5kb3cubmF2aWdhdG9yKVtcIm1zU2F2ZUJsb2JcIl1cbiAgICApIHtcbiAgICAgICg8YW55PndpbmRvdy5uYXZpZ2F0b3IpW1wibXNTYXZlT3JPcGVuQmxvYlwiXShiYiwgZmlsZU5hbWUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7IH1cbn1cbmZ1bmN0aW9uIGlzTW9iaWxlKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgdGhyZXNob2xkOiBudW1iZXIgPSAwXG4pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbGVtZW50UmVjdDogRE9NUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHZpZXdIZWlnaHQ6IG51bWJlciA9IE1hdGgubWF4KFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgd2luZG93LmlubmVySGVpZ2h0XG4gICk7XG4gIGNvbnN0IHRvcFdpbjogbnVtYmVyID0gLXRocmVzaG9sZDtcbiAgY29uc3QgYm90dG9tV2luOiBudW1iZXIgPSB2aWV3SGVpZ2h0ICsgdGhyZXNob2xkO1xuICBjb25zdCB0b3BFbDogbnVtYmVyID0gZWxlbWVudFJlY3QudG9wO1xuICBjb25zdCBib3R0b21FbDogbnVtYmVyID0gZWxlbWVudFJlY3QuYm90dG9tO1xuXG4gIGNvbnN0IG1heFRvcDogbnVtYmVyID0gTWF0aC5tYXgodG9wV2luLCB0b3BFbCk7XG4gIGNvbnN0IG1pbkJvdHRvbTogbnVtYmVyID0gTWF0aC5taW4oYm90dG9tV2luLCBib3R0b21FbCk7XG4gIHJldHVybiBtYXhUb3AgPD0gbWluQm90dG9tO1xufVxuXG5mdW5jdGlvbiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuICBpZiAoXG4gICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WSA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGlmIChcbiAgICBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WCA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1ggPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxFbGVtZW50QnlDaGlsZElkKGlkOiBzdHJpbmcpIHtcbiAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICBjb25zdCBzY3JvbGxhYmxlRWwgPSBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbCk7XG4gIGlmICghIXNjcm9sbGFibGVFbCkge1xuICAgIHNjcm9sbGFibGVFbC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNjcm9sbFwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaWNvbk5hbWUpIHJldHVybiBpY29uTmFtZTtcbiAgdmFyIHByb3h5TmFtZSA9ICg8YW55PnNldHRpbmdzLmN1c3RvbUljb25zKVtpY29uTmFtZV07XG4gIHJldHVybiAhIXByb3h5TmFtZSA/IHByb3h5TmFtZSA6IGljb25OYW1lO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdmcoXG4gIHNpemU6IG51bWJlciB8IHN0cmluZyxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGljb25OYW1lOiBzdHJpbmcsXG4gIHN2Z0VsZW06IGFueVxuKSB7XG4gIGlmICghc3ZnRWxlbSkgcmV0dXJuO1xuICBpZiAoc2l6ZSAhPT0gXCJhdXRvXCIpIHtcbiAgICBzdmdFbGVtLnN0eWxlLndpZHRoID0gKHNpemUgfHwgd2lkdGggfHwgMTYpICsgXCJweFwiO1xuICAgIHN2Z0VsZW0uc3R5bGUuaGVpZ2h0ID0gKHNpemUgfHwgaGVpZ2h0IHx8IDE2KSArIFwicHhcIjtcbiAgfVxuICBjb25zdCBub2RlOiBhbnkgPSBzdmdFbGVtLmNoaWxkTm9kZXNbMF07XG4gIGNvbnN0IHJlYWxJY29uTmFtZSA9IGdldEljb25OYW1lRnJvbVByb3h5KGljb25OYW1lKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhcbiAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICBcInhsaW5rOmhyZWZcIixcbiAgICBcIiNcIiArIHJlYWxJY29uTmFtZVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwPFQ+KHZhbHVlOiBUIHwgKCgpID0+IFQpKTogVCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKDwoKSA9PiBUPnZhbHVlKSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaXplKHZhbHVlOiBhbnkpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBcIlwiICsgdmFsdWUgKyBcInB4XCI7XG4gIH1cbiAgaWYgKCEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsYXN0U3ltYm9sOiBzdHJpbmcgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcbiAgICBpZiAoKGxhc3RTeW1ib2wgPj0gXCIwXCIgJiYgbGFzdFN5bWJvbCA8PSBcIjlcIikgfHwgbGFzdFN5bWJvbCA9PSBcIi5cIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbnVtOiBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFwiXCIgKyBudW0gKyBcInB4XCI7XG4gICAgICB9IGNhdGNoIHsgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF0dGFjaEtleTJjbGlja09wdGlvbnMge1xuICBwcm9jZXNzRXNjPzogYm9vbGVhbjtcbiAgZGlzYWJsZVRhYlN0b3A/OiBib29sZWFuO1xufVxuXG5jb25zdCBrZXlGb2N1c2VkQ2xhc3NOYW1lID0gXCJzdi1mb2N1c2VkLS1ieS1rZXlcIjtcbmV4cG9ydCBmdW5jdGlvbiBkb0tleTJDbGlja0JsdXIoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gIGNvbnN0IGVsZW1lbnQ6IGFueSA9IGV2dC50YXJnZXQ7XG4gIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5jbGFzc0xpc3QpIHJldHVybjtcbiAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGtleUZvY3VzZWRDbGFzc05hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9LZXkyQ2xpY2tVcChldnQ6IEtleWJvYXJkRXZlbnQsIG9wdGlvbnM/OiBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyk6IHZvaWQge1xuICBpZiAoISFldnQudGFyZ2V0ICYmICg8YW55PmV2dC50YXJnZXQpW1wiY29udGVudEVkaXRhYmxlXCJdID09PSBcInRydWVcIikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlbGVtZW50OiBhbnkgPSBldnQudGFyZ2V0O1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgY29uc3QgY2hhcjogbnVtYmVyID0gZXZ0LndoaWNoIHx8IGV2dC5rZXlDb2RlO1xuICBpZiAoY2hhciA9PT0gOSkge1xuICAgIGlmICghIWVsZW1lbnQuY2xhc3NMaXN0ICYmICFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhrZXlGb2N1c2VkQ2xhc3NOYW1lKSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGtleUZvY3VzZWRDbGFzc05hbWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjaGFyID09PSAxMyB8fCBjaGFyID09PSAzMikge1xuICAgIGlmIChlbGVtZW50LmNsaWNrKSBlbGVtZW50LmNsaWNrKCk7XG4gIH0gZWxzZSBpZiAoKCFvcHRpb25zIHx8IG9wdGlvbnMucHJvY2Vzc0VzYykgJiYgY2hhciA9PT0gMjcpIHtcbiAgICBpZiAoZWxlbWVudC5ibHVyKSBlbGVtZW50LmJsdXIoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9LZXkyQ2xpY2tEb3duKGV2dDogS2V5Ym9hcmRFdmVudCwgb3B0aW9uczogSUF0dGFjaEtleTJjbGlja09wdGlvbnMgPSB7IHByb2Nlc3NFc2M6IHRydWUgfSk6IHZvaWQge1xuICBpZiAoISFldnQudGFyZ2V0ICYmICg8YW55PmV2dC50YXJnZXQpW1wiY29udGVudEVkaXRhYmxlXCJdID09PSBcInRydWVcIikge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY2hhciA9IGV2dC53aGljaCB8fCBldnQua2V5Q29kZTtcbiAgY29uc3Qgc3VwcG9ydGVkQ29kZXMgPSBbMTMsIDMyXTtcbiAgaWYgKG9wdGlvbnMucHJvY2Vzc0VzYykge1xuICAgIHN1cHBvcnRlZENvZGVzLnB1c2goMjcpO1xuICB9XG4gIGlmIChzdXBwb3J0ZWRDb2Rlcy5pbmRleE9mKGNoYXIpICE9PSAtMSkge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5mdW5jdGlvbiBpbmNyZWFzZUhlaWdodEJ5Q29udGVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgZ2V0Q29tcHV0ZWRTdHlsZT86IChlbHQ6IEVsZW1lbnQpID0+IGFueSkge1xuICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgaWYgKCFnZXRDb21wdXRlZFN0eWxlKSBnZXRDb21wdXRlZFN0eWxlID0gKGVsdDogRWxlbWVudCkgPT4geyByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWx0KTsgfTtcblxuICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XG4gIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gKGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZS5ib3JkZXJUb3BXaWR0aCkgKyBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSkgKyBcInB4XCI7XG59XG5mdW5jdGlvbiBnZXRPcmlnaW5hbEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgcmV0dXJuIGV2ZW50Lm9yaWdpbmFsRXZlbnQgfHwgZXZlbnQ7XG59XG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdHMoZXZlbnQ6IGFueSkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cbmZ1bmN0aW9uIGNsYXNzZXNUb1NlbGVjdG9yKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmUgPSAvXFxzKj8oW1xcdy1dKylcXHMqPy9nO1xuICByZXR1cm4gc3RyLnJlcGxhY2UocmUsIFwiLiQxXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50V2lkdGgoZWw6IEhUTUxFbGVtZW50KSB7XG4gIHJldHVybiAhIWdldENvbXB1dGVkU3R5bGUgPyBOdW1iZXIucGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKGVsKS53aWR0aCkgOiBlbC5vZmZzZXRXaWR0aDtcbn1cblxuZnVuY3Rpb24gaXNDb250YWluZXJWaXNpYmxlKGVsOiBIVE1MRWxlbWVudCkge1xuICByZXR1cm4gISEoXG4gICAgZWwub2Zmc2V0V2lkdGggfHxcbiAgICBlbC5vZmZzZXRIZWlnaHQgfHxcbiAgICBlbC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aFxuICApO1xufVxuXG5mdW5jdGlvbiBmaW5kUGFyZW50QnlDbGFzc05hbWVzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjbGFzc05hbWVzOiBBcnJheTxzdHJpbmc+KTogRWxlbWVudCB7XG4gIGlmICghIWVsZW1lbnQpIHtcbiAgICBpZiAoY2xhc3NOYW1lcy5ldmVyeShjbGFzc05hbWUgPT4gIWNsYXNzTmFtZSB8fCBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaW5kUGFyZW50QnlDbGFzc05hbWVzKGVsZW1lbnQucGFyZW50RWxlbWVudCwgY2xhc3NOYW1lcyk7XG4gICAgfVxuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVFZGl0YWJsZUNvbnRlbnQoZWxlbWVudDogYW55KSB7XG4gIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50LmNyZWF0ZVJhbmdlICYmIGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBsZXQgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICByYW5nZS5zZXRTdGFydChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kQWZ0ZXIoZWxlbWVudC5sYXN0Q2hpbGQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIGNvbnN0IHRhaWxfbGVuID0gc2VsZWN0aW9uLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxuL2csIFwiXCIpLmxlbmd0aDtcblxuICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gZWxlbWVudC5pbm5lclRleHQucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChlbGVtZW50LmNoaWxkTm9kZXNbMF0sIGVsZW1lbnQuaW5uZXJUZXh0Lmxlbmd0aCAtIHRhaWxfbGVuKTtcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgfVxufVxuZnVuY3Rpb24gbWVyZ2VWYWx1ZXMoc3JjOiBhbnksIGRlc3Q6IGFueSkge1xuICBpZiAoIWRlc3QgfHwgIXNyYykgcmV0dXJuO1xuICBpZiAodHlwZW9mIGRlc3QgIT09IFwib2JqZWN0XCIpIHJldHVybjtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIHZhciB2YWx1ZSA9IHNyY1trZXldO1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmICghZGVzdFtrZXldIHx8IHR5cGVvZiBkZXN0W2tleV0gIT09IFwib2JqZWN0XCIpIGRlc3Rba2V5XSA9IHt9O1xuICAgICAgbWVyZ2VWYWx1ZXModmFsdWUsIGRlc3Rba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc3Rba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge1xuICBtZXJnZVZhbHVlcyxcbiAgZ2V0RWxlbWVudFdpZHRoLFxuICBpc0NvbnRhaW5lclZpc2libGUsXG4gIGNsYXNzZXNUb1NlbGVjdG9yLFxuICBjb21wYXJlVmVyc2lvbnMsXG4gIGNvbmZpcm1BY3Rpb24sXG4gIGRldGVjdElFT3JFZGdlLFxuICBkZXRlY3RJRUJyb3dzZXIsXG4gIGxvYWRGaWxlRnJvbUJhc2U2NCxcbiAgaXNNb2JpbGUsXG4gIGlzRWxlbWVudFZpc2libGUsXG4gIGZpbmRTY3JvbGxhYmxlUGFyZW50LFxuICBzY3JvbGxFbGVtZW50QnlDaGlsZElkLFxuICBjcmVhdGVTdmcsXG4gIGdldEljb25OYW1lRnJvbVByb3h5LFxuICBpbmNyZWFzZUhlaWdodEJ5Q29udGVudCxcbiAgZ2V0T3JpZ2luYWxFdmVudCxcbiAgcHJldmVudERlZmF1bHRzLFxuICBmaW5kUGFyZW50QnlDbGFzc05hbWVzXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fOyJdLCJzb3VyY2VSb290IjoiIn0=