@imperium/layout 7.3.1 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -345
- package/dist/client.js +389 -112
- package/dist/client.min.js +1 -1
- package/dist/client.min.js.map +1 -1
- package/dist/commonItems.d.ts +5 -4
- package/dist/content/hooks/useBuildContentData.d.ts +3 -1
- package/dist/content/types.d.ts +6 -3
- package/dist/content/utils.d.ts +1 -1
- package/dist/datahooks/DataHooks.d.ts +1 -1
- package/dist/datahooks/ExecutePermissionHook.d.ts +7 -0
- package/dist/datahooks/PermissionHooks.d.ts +7 -0
- package/dist/datahooks/types.d.ts +1 -1
- package/dist/hooks/useBuildData.d.ts +3 -2
- package/dist/hooks/useSelectPermission.d.ts +2 -0
- package/dist/layout/types.d.ts +5 -4
- package/dist/layout/utils.d.ts +1 -1
- package/dist/state.d.ts +38 -0
- package/dist/types.d.ts +4 -0
- package/package.json +7 -6
- package/dist/content/components/ActionLinkSidebarItemComponent.d.ts +0 -9
- package/dist/content/components/ContentItemWrapper.d.ts +0 -12
- package/dist/content/components/dividerSidebarItem.d.ts +0 -2
- package/dist/hooks/DataHooks.d.ts +0 -12
- package/dist/hooks/ExecuteDataHook.d.ts +0 -7
- package/dist/hooks/types.d.ts +0 -19
- package/dist/layout/components/CustomItem.d.ts +0 -7
- package/dist/layout/components/CustomItemComponent.d.ts +0 -7
- package/dist/layout/components/ItemBar.d.ts +0 -15
- package/dist/layout/components/ItemWrapper.d.ts +0 -19
- package/dist/layout/components/SidebarToggleMenuItem.d.ts +0 -7
- package/dist/layout/hooks/useBuildData.d.ts +0 -3
- package/dist/layout/hooks/useIsActiveRoute.d.ts +0 -2
- package/dist/layout/hooks/useSelectState.d.ts +0 -2
- package/dist/layout/mergeItems.d.ts +0 -2
package/dist/client.js
CHANGED
|
@@ -21,12 +21,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
21
21
|
|
|
22
22
|
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
23
23
|
// Module
|
|
24
|
-
___CSS_LOADER_EXPORT___.push([module.id, ".content-components-styles__parent--qcZqw {\n\tflex: 1;\n\tdisplay: flex;\n\tflex-direction: row;\n\theight: 100%;\n}\n\n.content-components-styles__wrapper--mbzSi {\n\tflex: 1;\n\tflex-basis: calc(65%);\n}\n\n.content-components-styles__content--fhSXG {\n\tmargin: 0 0.8rem 0.8rem 0.8rem;\n}\n\n.content-components-styles__header--NOGyc {\n\tpadding: 0.8rem 0.8rem 0 0.8rem;\n\tmargin-bottom: 0.8rem;\n}\n\n.content-components-styles__sidebar--rLU5R {\n\tmin-width: 250px;\n\tpadding: 10px;\n\toverflow-y: auto;\n\toverflow-x: hidden;\n}\n\n.content-components-styles__sidebarItem--Eylgf {\n\tmargin-bottom: 5px;\n}\n\n.content-components-styles__actionsHeader--N6zzM {\n\tdisplay: none;\n}\n\n@media only screen and (max-width:
|
|
24
|
+
___CSS_LOADER_EXPORT___.push([module.id, ".content-components-styles__parent--qcZqw {\n\tflex: 1;\n\tdisplay: flex;\n\tflex-direction: row;\n\theight: 100%;\n}\n\n.content-components-styles__wrapper--mbzSi {\n\tflex: 1;\n\tflex-basis: calc(65%);\n}\n\n.content-components-styles__content--fhSXG {\n\tmargin: 0 0.8rem 0.8rem 0.8rem;\n}\n\n.content-components-styles__contentFull--kUW3_ {\n\theight: 100%;\n\tmargin: 0 0;\n}\n\n.content-components-styles__header--NOGyc {\n\tpadding: 0.8rem 0.8rem 0 0.8rem;\n\tmargin-bottom: 0.8rem;\n}\n\n.content-components-styles__sidebar--rLU5R {\n\tmin-width: 250px;\n\tpadding: 10px;\n\toverflow-y: auto;\n\toverflow-x: hidden;\n}\n\n.content-components-styles__sidebarItem--Eylgf {\n\tmargin-bottom: 5px;\n}\n\n.content-components-styles__actionsHeader--N6zzM {\n\tdisplay: none;\n}\n\n@media only screen and (max-width: 768px) {\n\t.content-components-styles__parent--qcZqw {\n\t\tflex-direction: column;\n\t\theight: auto;\n\t}\n\t.content-components-styles__wrapper--mbzSi {\n\t\tborder-right: none;\n\t\tpadding-bottom: 20px;\n\t}\n\t.content-components-styles__sidebar--rLU5R {\n\t\tmin-width: auto;\n\t}\n\t.content-components-styles__actionsHeader--N6zzM {\n\t\tdisplay: block;\n\t\tmargin-bottom: 5px;\n\t}\n}\n", "",{"version":3,"sources":["webpack://./content/components/styles.css"],"names":[],"mappings":"AAAA;CACC,OAAO;CACP,aAAa;CACb,mBAAmB;CACnB,YAAY;AACb;;AAEA;CACC,OAAO;CACP,qBAAqB;AACtB;;AAEA;CACC,8BAA8B;AAC/B;;AAEA;CACC,YAAY;CACZ,WAAW;AACZ;;AAEA;CACC,+BAA+B;CAC/B,qBAAqB;AACtB;;AAEA;CACC,gBAAgB;CAChB,aAAa;CACb,gBAAgB;CAChB,kBAAkB;AACnB;;AAEA;CACC,kBAAkB;AACnB;;AAEA;CACC,aAAa;AACd;;AAEA;CACC;EACC,sBAAsB;EACtB,YAAY;CACb;CACA;EACC,kBAAkB;EAClB,oBAAoB;CACrB;CACA;EACC,eAAe;CAChB;CACA;EACC,cAAc;EACd,kBAAkB;CACnB;AACD","sourcesContent":[".parent {\n\tflex: 1;\n\tdisplay: flex;\n\tflex-direction: row;\n\theight: 100%;\n}\n\n.wrapper {\n\tflex: 1;\n\tflex-basis: calc(65%);\n}\n\n.content {\n\tmargin: 0 0.8rem 0.8rem 0.8rem;\n}\n\n.contentFull {\n\theight: 100%;\n\tmargin: 0 0;\n}\n\n.header {\n\tpadding: 0.8rem 0.8rem 0 0.8rem;\n\tmargin-bottom: 0.8rem;\n}\n\n.sidebar {\n\tmin-width: 250px;\n\tpadding: 10px;\n\toverflow-y: auto;\n\toverflow-x: hidden;\n}\n\n.sidebarItem {\n\tmargin-bottom: 5px;\n}\n\n.actionsHeader {\n\tdisplay: none;\n}\n\n@media only screen and (max-width: 768px) {\n\t.parent {\n\t\tflex-direction: column;\n\t\theight: auto;\n\t}\n\t.wrapper {\n\t\tborder-right: none;\n\t\tpadding-bottom: 20px;\n\t}\n\t.sidebar {\n\t\tmin-width: auto;\n\t}\n\t.actionsHeader {\n\t\tdisplay: block;\n\t\tmargin-bottom: 5px;\n\t}\n}\n"],"sourceRoot":""}]);
|
|
25
25
|
// Exports
|
|
26
26
|
___CSS_LOADER_EXPORT___.locals = {
|
|
27
27
|
"parent": "content-components-styles__parent--qcZqw",
|
|
28
28
|
"wrapper": "content-components-styles__wrapper--mbzSi",
|
|
29
29
|
"content": "content-components-styles__content--fhSXG",
|
|
30
|
+
"contentFull": "content-components-styles__contentFull--kUW3_",
|
|
30
31
|
"header": "content-components-styles__header--NOGyc",
|
|
31
32
|
"sidebar": "content-components-styles__sidebar--rLU5R",
|
|
32
33
|
"sidebarItem": "content-components-styles__sidebarItem--Eylgf",
|
|
@@ -558,18 +559,28 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
558
559
|
/* harmony export */ });
|
|
559
560
|
/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! debug */ "debug");
|
|
560
561
|
/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_0__);
|
|
561
|
-
/* harmony import */ var
|
|
562
|
-
/* harmony import */ var
|
|
563
|
-
/* harmony import */ var
|
|
564
|
-
/* harmony import */ var
|
|
565
|
-
/* harmony import */ var
|
|
566
|
-
/* harmony import */ var
|
|
567
|
-
/* harmony import */ var
|
|
568
|
-
/* harmony import */ var
|
|
569
|
-
/* harmony import */ var
|
|
570
|
-
/* harmony import */ var
|
|
562
|
+
/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash");
|
|
563
|
+
/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);
|
|
564
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
|
|
565
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
|
|
566
|
+
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "react-redux");
|
|
567
|
+
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_3__);
|
|
568
|
+
/* harmony import */ var _datahooks_DataHooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../datahooks/DataHooks */ "./datahooks/DataHooks.tsx");
|
|
569
|
+
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../state */ "./state.ts");
|
|
570
|
+
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils */ "./utils.ts");
|
|
571
|
+
/* harmony import */ var _hooks_useBuildContentData__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../hooks/useBuildContentData */ "./content/hooks/useBuildContentData.ts");
|
|
572
|
+
/* harmony import */ var _Header__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Header */ "./content/components/Header.tsx");
|
|
573
|
+
/* harmony import */ var _SidebarItemWrapper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./SidebarItemWrapper */ "./content/components/SidebarItemWrapper.tsx");
|
|
574
|
+
/* harmony import */ var _styles_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./styles.css */ "./content/components/styles.css");
|
|
575
|
+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
|
|
576
|
+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__);
|
|
571
577
|
var _jsxFileName = "/home/mike/dev/imperium/packages/layout/src/content/components/ContentComponent.tsx",
|
|
572
|
-
_s = $RefreshSig$()
|
|
578
|
+
_s = $RefreshSig$(),
|
|
579
|
+
_s2 = $RefreshSig$(),
|
|
580
|
+
_s3 = $RefreshSig$();
|
|
581
|
+
|
|
582
|
+
|
|
583
|
+
|
|
573
584
|
|
|
574
585
|
|
|
575
586
|
|
|
@@ -581,100 +592,130 @@ var _jsxFileName = "/home/mike/dev/imperium/packages/layout/src/content/componen
|
|
|
581
592
|
|
|
582
593
|
|
|
583
594
|
var d = debug__WEBPACK_IMPORTED_MODULE_0___default()('imperium.layout.content.components.ContentComponent');
|
|
584
|
-
|
|
595
|
+
|
|
596
|
+
function useDeepCompareMemoize(value) {
|
|
585
597
|
_s();
|
|
586
598
|
|
|
599
|
+
var ref = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)();
|
|
600
|
+
if (!value && !ref.current) return ref.current;
|
|
601
|
+
|
|
602
|
+
if (!(0,lodash__WEBPACK_IMPORTED_MODULE_1__.isEqual)(value, ref.current)) {
|
|
603
|
+
ref.current = value;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
return ref.current;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
_s(useDeepCompareMemoize, "QMBuJFIdzLIeqBcFwhMf246mjOM=");
|
|
610
|
+
|
|
611
|
+
function useDeepCompareEffect(callback, deps) {
|
|
612
|
+
_s2();
|
|
613
|
+
|
|
614
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
615
|
+
(0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(callback, deps.map(useDeepCompareMemoize));
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
_s2(useDeepCompareEffect, "OD7bBpZva5O2jO+Puf00hKivP7c=");
|
|
619
|
+
|
|
620
|
+
function ContentComponent(_ref) {
|
|
621
|
+
_s3();
|
|
622
|
+
|
|
587
623
|
var _this = this;
|
|
588
624
|
|
|
589
625
|
var page = _ref.page,
|
|
590
626
|
params = _ref.params;
|
|
591
|
-
var
|
|
627
|
+
var dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
|
|
628
|
+
var data = (0,_hooks_useBuildContentData__WEBPACK_IMPORTED_MODULE_7__.useBuildContentData)({
|
|
592
629
|
stateSelectorHook: page.stateSelectorHook,
|
|
630
|
+
permissionSelectorHook: page.permissionSelectorHook,
|
|
593
631
|
params: params
|
|
594
632
|
});
|
|
633
|
+
useDeepCompareEffect(function () {
|
|
634
|
+
dispatch(_state__WEBPACK_IMPORTED_MODULE_5__.actions.setParams(params));
|
|
635
|
+
}, [dispatch, params]);
|
|
595
636
|
var content = page.content(data);
|
|
596
|
-
var sidebarItems = (0,
|
|
597
|
-
var sidebar = sidebarItems.length > 0 ? /*#__PURE__*/(0,
|
|
598
|
-
className: "".concat(
|
|
599
|
-
children: [/*#__PURE__*/(0,
|
|
600
|
-
className: "".concat(
|
|
601
|
-
children: /*#__PURE__*/(0,
|
|
637
|
+
var sidebarItems = (0,_utils__WEBPACK_IMPORTED_MODULE_6__.sortWeightedItems)(page.sidebar || []);
|
|
638
|
+
var sidebar = sidebarItems.length > 0 ? /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
|
|
639
|
+
className: "".concat(_styles_css__WEBPACK_IMPORTED_MODULE_10__["default"].sidebar, " imperiumContentSidebar"),
|
|
640
|
+
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
|
|
641
|
+
className: "".concat(_styles_css__WEBPACK_IMPORTED_MODULE_10__["default"].actionsHeader, " imperiumContentSidebarHeader"),
|
|
642
|
+
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("h3", {
|
|
602
643
|
children: "Actions"
|
|
603
644
|
}, void 0, false, {
|
|
604
645
|
fileName: _jsxFileName,
|
|
605
|
-
lineNumber:
|
|
646
|
+
lineNumber: 51,
|
|
606
647
|
columnNumber: 6
|
|
607
648
|
}, this)
|
|
608
649
|
}, void 0, false, {
|
|
609
650
|
fileName: _jsxFileName,
|
|
610
|
-
lineNumber:
|
|
651
|
+
lineNumber: 50,
|
|
611
652
|
columnNumber: 5
|
|
612
653
|
}, this), sidebarItems.map(function (sb, index) {
|
|
613
654
|
return (
|
|
614
655
|
/*#__PURE__*/
|
|
615
656
|
// eslint-disable-next-line react/no-array-index-key
|
|
616
|
-
(0,
|
|
617
|
-
className:
|
|
618
|
-
children: /*#__PURE__*/(0,
|
|
657
|
+
(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
|
|
658
|
+
className: _styles_css__WEBPACK_IMPORTED_MODULE_10__["default"].sidebarItem,
|
|
659
|
+
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_SidebarItemWrapper__WEBPACK_IMPORTED_MODULE_9__.SidebarItemWrapper, {
|
|
619
660
|
item: sb,
|
|
620
661
|
params: params,
|
|
621
662
|
data: data
|
|
622
663
|
}, void 0, false, {
|
|
623
664
|
fileName: _jsxFileName,
|
|
624
|
-
lineNumber:
|
|
665
|
+
lineNumber: 57,
|
|
625
666
|
columnNumber: 8
|
|
626
667
|
}, _this)
|
|
627
668
|
}, index, false, {
|
|
628
669
|
fileName: _jsxFileName,
|
|
629
|
-
lineNumber:
|
|
670
|
+
lineNumber: 56,
|
|
630
671
|
columnNumber: 7
|
|
631
672
|
}, _this)
|
|
632
673
|
);
|
|
633
674
|
})]
|
|
634
675
|
}, void 0, true, {
|
|
635
676
|
fileName: _jsxFileName,
|
|
636
|
-
lineNumber:
|
|
677
|
+
lineNumber: 49,
|
|
637
678
|
columnNumber: 4
|
|
638
679
|
}, this) : null;
|
|
639
|
-
return /*#__PURE__*/(0,
|
|
640
|
-
className: "".concat(
|
|
641
|
-
children: [/*#__PURE__*/(0,
|
|
642
|
-
className: "".concat(
|
|
643
|
-
children: [/*#__PURE__*/(0,
|
|
680
|
+
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
|
|
681
|
+
className: "".concat(_styles_css__WEBPACK_IMPORTED_MODULE_10__["default"].parent, " imperiumContentWrapperParent"),
|
|
682
|
+
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
|
|
683
|
+
className: "".concat(_styles_css__WEBPACK_IMPORTED_MODULE_10__["default"].wrapper, " imperiumContentWrapper"),
|
|
684
|
+
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_Header__WEBPACK_IMPORTED_MODULE_8__.Header, {
|
|
644
685
|
header: page.header,
|
|
645
686
|
data: data
|
|
646
687
|
}, void 0, false, {
|
|
647
688
|
fileName: _jsxFileName,
|
|
648
|
-
lineNumber:
|
|
689
|
+
lineNumber: 67,
|
|
649
690
|
columnNumber: 5
|
|
650
|
-
}, this), /*#__PURE__*/(0,
|
|
651
|
-
className: "".concat(
|
|
691
|
+
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
|
|
692
|
+
className: "".concat(_styles_css__WEBPACK_IMPORTED_MODULE_10__["default"].content, " imperiumContent ").concat(page.full && _styles_css__WEBPACK_IMPORTED_MODULE_10__["default"].contentFull),
|
|
652
693
|
children: content
|
|
653
694
|
}, void 0, false, {
|
|
654
695
|
fileName: _jsxFileName,
|
|
655
|
-
lineNumber:
|
|
696
|
+
lineNumber: 68,
|
|
656
697
|
columnNumber: 5
|
|
657
698
|
}, this)]
|
|
658
699
|
}, void 0, true, {
|
|
659
700
|
fileName: _jsxFileName,
|
|
660
|
-
lineNumber:
|
|
701
|
+
lineNumber: 66,
|
|
661
702
|
columnNumber: 4
|
|
662
|
-
}, this), sidebar, /*#__PURE__*/(0,
|
|
703
|
+
}, this), sidebar, /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_datahooks_DataHooks__WEBPACK_IMPORTED_MODULE_4__.DataHooks, {
|
|
663
704
|
dataHooks: page.dataHooks || []
|
|
664
705
|
}, void 0, false, {
|
|
665
706
|
fileName: _jsxFileName,
|
|
666
|
-
lineNumber:
|
|
707
|
+
lineNumber: 71,
|
|
667
708
|
columnNumber: 4
|
|
668
709
|
}, this)]
|
|
669
710
|
}, void 0, true, {
|
|
670
711
|
fileName: _jsxFileName,
|
|
671
|
-
lineNumber:
|
|
712
|
+
lineNumber: 65,
|
|
672
713
|
columnNumber: 3
|
|
673
714
|
}, this);
|
|
674
715
|
}
|
|
675
716
|
|
|
676
|
-
|
|
677
|
-
return [
|
|
717
|
+
_s3(ContentComponent, "TsIGechvpJywByg0eItU4mkBCro=", false, function () {
|
|
718
|
+
return [react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch, _hooks_useBuildContentData__WEBPACK_IMPORTED_MODULE_7__.useBuildContentData, useDeepCompareEffect];
|
|
678
719
|
});
|
|
679
720
|
|
|
680
721
|
_c = ContentComponent;
|
|
@@ -876,6 +917,7 @@ function SidebarItemWrapper(_ref) {
|
|
|
876
917
|
var data = (0,_hooks_useBuildContentData__WEBPACK_IMPORTED_MODULE_4__.useBuildContentData)({
|
|
877
918
|
data: parentData,
|
|
878
919
|
stateSelectorHook: item.stateSelectorHook,
|
|
920
|
+
permissionSelectorHook: item.permissionSelectorHook,
|
|
879
921
|
params: params
|
|
880
922
|
}); // Check if visible
|
|
881
923
|
|
|
@@ -894,7 +936,7 @@ function SidebarItemWrapper(_ref) {
|
|
|
894
936
|
data: data
|
|
895
937
|
}, void 0, false, {
|
|
896
938
|
fileName: _jsxFileName,
|
|
897
|
-
lineNumber:
|
|
939
|
+
lineNumber: 41,
|
|
898
940
|
columnNumber: 10
|
|
899
941
|
}, this);
|
|
900
942
|
}
|
|
@@ -905,7 +947,7 @@ function SidebarItemWrapper(_ref) {
|
|
|
905
947
|
data: data
|
|
906
948
|
}, void 0, false, {
|
|
907
949
|
fileName: _jsxFileName,
|
|
908
|
-
lineNumber:
|
|
950
|
+
lineNumber: 45,
|
|
909
951
|
columnNumber: 10
|
|
910
952
|
}, this);
|
|
911
953
|
}
|
|
@@ -916,7 +958,7 @@ function SidebarItemWrapper(_ref) {
|
|
|
916
958
|
data: data
|
|
917
959
|
}, void 0, false, {
|
|
918
960
|
fileName: _jsxFileName,
|
|
919
|
-
lineNumber:
|
|
961
|
+
lineNumber: 49,
|
|
920
962
|
columnNumber: 10
|
|
921
963
|
}, this);
|
|
922
964
|
}
|
|
@@ -924,7 +966,7 @@ function SidebarItemWrapper(_ref) {
|
|
|
924
966
|
if ((0,_types__WEBPACK_IMPORTED_MODULE_5__.isDividerSidebarItem)(item)) {
|
|
925
967
|
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)(semantic_ui_react__WEBPACK_IMPORTED_MODULE_3__.Divider, {}, void 0, false, {
|
|
926
968
|
fileName: _jsxFileName,
|
|
927
|
-
lineNumber:
|
|
969
|
+
lineNumber: 53,
|
|
928
970
|
columnNumber: 10
|
|
929
971
|
}, this);
|
|
930
972
|
} // @ts-ignore These types should work, not sure why it's not. Runtime code is fine.
|
|
@@ -935,7 +977,7 @@ function SidebarItemWrapper(_ref) {
|
|
|
935
977
|
data: data
|
|
936
978
|
}, void 0, false, {
|
|
937
979
|
fileName: _jsxFileName,
|
|
938
|
-
lineNumber:
|
|
980
|
+
lineNumber: 57,
|
|
939
981
|
columnNumber: 9
|
|
940
982
|
}, this);
|
|
941
983
|
}
|
|
@@ -969,8 +1011,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
969
1011
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
|
|
970
1012
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
|
|
971
1013
|
/* harmony import */ var _components_ContentComponent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/ContentComponent */ "./content/components/ContentComponent.tsx");
|
|
972
|
-
/* harmony import */ var
|
|
973
|
-
/* harmony import */ var
|
|
1014
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./types */ "./content/types.ts");
|
|
1015
|
+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
|
|
1016
|
+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__);
|
|
974
1017
|
|
|
975
1018
|
var _jsxFileName = "/home/mike/dev/imperium/packages/layout/src/content/createPages.tsx";
|
|
976
1019
|
|
|
@@ -982,19 +1025,35 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
982
1025
|
|
|
983
1026
|
|
|
984
1027
|
|
|
1028
|
+
|
|
985
1029
|
var d = debug__WEBPACK_IMPORTED_MODULE_1___default()('imperium.layout.content.createPages');
|
|
986
1030
|
function createPages(routes, pages) {
|
|
987
1031
|
var _this = this;
|
|
988
1032
|
|
|
989
1033
|
var renderRoutePropsObj = Object.keys(routes.types).reduce(function (memo, key) {
|
|
990
1034
|
return _objectSpread(_objectSpread({}, memo), {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()({}, key, function (params) {
|
|
991
|
-
|
|
992
|
-
|
|
1035
|
+
var pg = pages[key];
|
|
1036
|
+
|
|
1037
|
+
if ((0,_types__WEBPACK_IMPORTED_MODULE_4__.isPage)(pg)) {
|
|
1038
|
+
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(_components_ContentComponent__WEBPACK_IMPORTED_MODULE_3__.ContentComponent, {
|
|
1039
|
+
page: pg,
|
|
1040
|
+
params: params
|
|
1041
|
+
}, void 0, false, {
|
|
1042
|
+
fileName: _jsxFileName,
|
|
1043
|
+
lineNumber: 17,
|
|
1044
|
+
columnNumber: 13
|
|
1045
|
+
}, _this);
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(_components_ContentComponent__WEBPACK_IMPORTED_MODULE_3__.ContentComponent, {
|
|
1049
|
+
page: {
|
|
1050
|
+
content: pg
|
|
1051
|
+
},
|
|
993
1052
|
params: params
|
|
994
1053
|
}, void 0, false, {
|
|
995
1054
|
fileName: _jsxFileName,
|
|
996
|
-
lineNumber:
|
|
997
|
-
columnNumber:
|
|
1055
|
+
lineNumber: 20,
|
|
1056
|
+
columnNumber: 6
|
|
998
1057
|
}, _this);
|
|
999
1058
|
}));
|
|
1000
1059
|
}, {});
|
|
@@ -1047,11 +1106,13 @@ function useBuildContentData(_ref) {
|
|
|
1047
1106
|
|
|
1048
1107
|
var data = _ref.data,
|
|
1049
1108
|
stateSelectorHook = _ref.stateSelectorHook,
|
|
1109
|
+
permissionSelectorHook = _ref.permissionSelectorHook,
|
|
1050
1110
|
routeItem = _ref.routeItem,
|
|
1051
1111
|
params = _ref.params;
|
|
1052
1112
|
var buildData = (0,_hooks_useBuildData__WEBPACK_IMPORTED_MODULE_1__.useBuildData)({
|
|
1053
1113
|
data: data,
|
|
1054
1114
|
stateSelectorHook: stateSelectorHook,
|
|
1115
|
+
permissionSelectorHook: permissionSelectorHook,
|
|
1055
1116
|
routeItem: routeItem
|
|
1056
1117
|
});
|
|
1057
1118
|
return _objectSpread(_objectSpread({}, buildData), {}, {
|
|
@@ -1073,11 +1134,15 @@ _s(useBuildContentData, "yk5pGS0moWWVjdJ9ddvs9cW3Gsc=", false, function () {
|
|
|
1073
1134
|
|
|
1074
1135
|
__webpack_require__.r(__webpack_exports__);
|
|
1075
1136
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1137
|
+
/* harmony export */ "isPage": () => (/* binding */ isPage),
|
|
1076
1138
|
/* harmony export */ "isActionSidebarItem": () => (/* binding */ isActionSidebarItem),
|
|
1077
1139
|
/* harmony export */ "isActionFormSidebarItem": () => (/* binding */ isActionFormSidebarItem),
|
|
1078
1140
|
/* harmony export */ "isCustomSidebarItem": () => (/* binding */ isCustomSidebarItem),
|
|
1079
1141
|
/* harmony export */ "isDividerSidebarItem": () => (/* binding */ isDividerSidebarItem)
|
|
1080
1142
|
/* harmony export */ });
|
|
1143
|
+
function isPage(value) {
|
|
1144
|
+
return !!value.content;
|
|
1145
|
+
}
|
|
1081
1146
|
function isActionSidebarItem(value) {
|
|
1082
1147
|
return !!value.onClick;
|
|
1083
1148
|
}
|
|
@@ -1181,7 +1246,7 @@ var _jsxFileName = "/home/mike/dev/imperium/packages/layout/src/datahooks/DataHo
|
|
|
1181
1246
|
var d = debug__WEBPACK_IMPORTED_MODULE_0___default()('imperium.layout.datahooks.DataHooks');
|
|
1182
1247
|
|
|
1183
1248
|
/**
|
|
1184
|
-
* Renders layout data hooks. These hooks should return nothing. All interaction should be in side
|
|
1249
|
+
* Renders layout data hooks. These hooks should return nothing. All interaction should be in side effects, usually retrieving data and setting Redux state.
|
|
1185
1250
|
* @param dataHooks
|
|
1186
1251
|
* @constructor
|
|
1187
1252
|
*/
|
|
@@ -1284,6 +1349,105 @@ $RefreshReg$(_c, "ExecuteDataHook");
|
|
|
1284
1349
|
|
|
1285
1350
|
/***/ }),
|
|
1286
1351
|
|
|
1352
|
+
/***/ "./datahooks/ExecutePermissionHook.tsx":
|
|
1353
|
+
/*!*********************************************!*\
|
|
1354
|
+
!*** ./datahooks/ExecutePermissionHook.tsx ***!
|
|
1355
|
+
\*********************************************/
|
|
1356
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1357
|
+
|
|
1358
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1359
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1360
|
+
/* harmony export */ "ExecutePermissionHook": () => (/* binding */ ExecutePermissionHook)
|
|
1361
|
+
/* harmony export */ });
|
|
1362
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
1363
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
1364
|
+
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "react-redux");
|
|
1365
|
+
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
|
|
1366
|
+
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../state */ "./state.ts");
|
|
1367
|
+
var _s = $RefreshSig$();
|
|
1368
|
+
|
|
1369
|
+
|
|
1370
|
+
|
|
1371
|
+
|
|
1372
|
+
function ExecutePermissionHook(_ref) {
|
|
1373
|
+
_s();
|
|
1374
|
+
|
|
1375
|
+
var permissionHook = _ref.permissionHook,
|
|
1376
|
+
routeParams = _ref.routeParams;
|
|
1377
|
+
var dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();
|
|
1378
|
+
var perms = permissionHook(routeParams);
|
|
1379
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
|
|
1380
|
+
Object.keys(perms).forEach(function (permission) {
|
|
1381
|
+
dispatch(_state__WEBPACK_IMPORTED_MODULE_2__.actions.setPermission({
|
|
1382
|
+
permission: permission,
|
|
1383
|
+
result: perms[permission]
|
|
1384
|
+
}));
|
|
1385
|
+
});
|
|
1386
|
+
}, [dispatch, perms]);
|
|
1387
|
+
return null;
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1390
|
+
_s(ExecutePermissionHook, "rAh3tY+Iv6hWC9AI4Dm+rCbkwNE=", false, function () {
|
|
1391
|
+
return [react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch];
|
|
1392
|
+
});
|
|
1393
|
+
|
|
1394
|
+
_c = ExecutePermissionHook;
|
|
1395
|
+
|
|
1396
|
+
var _c;
|
|
1397
|
+
|
|
1398
|
+
$RefreshReg$(_c, "ExecutePermissionHook");
|
|
1399
|
+
|
|
1400
|
+
/***/ }),
|
|
1401
|
+
|
|
1402
|
+
/***/ "./datahooks/PermissionHooks.tsx":
|
|
1403
|
+
/*!***************************************!*\
|
|
1404
|
+
!*** ./datahooks/PermissionHooks.tsx ***!
|
|
1405
|
+
\***************************************/
|
|
1406
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1407
|
+
|
|
1408
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1409
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1410
|
+
/* harmony export */ "PermissionHooks": () => (/* binding */ PermissionHooks)
|
|
1411
|
+
/* harmony export */ });
|
|
1412
|
+
/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! debug */ "debug");
|
|
1413
|
+
/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_0__);
|
|
1414
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
|
|
1415
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
1416
|
+
/* harmony import */ var _ExecutePermissionHook__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ExecutePermissionHook */ "./datahooks/ExecutePermissionHook.tsx");
|
|
1417
|
+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
|
|
1418
|
+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__);
|
|
1419
|
+
var _jsxFileName = "/home/mike/dev/imperium/packages/layout/src/datahooks/PermissionHooks.tsx";
|
|
1420
|
+
|
|
1421
|
+
|
|
1422
|
+
|
|
1423
|
+
|
|
1424
|
+
|
|
1425
|
+
var d = debug__WEBPACK_IMPORTED_MODULE_0___default()('imperium.layout.datahooks.PermissionHooks');
|
|
1426
|
+
function PermissionHooks(_ref) {
|
|
1427
|
+
var _this = this;
|
|
1428
|
+
|
|
1429
|
+
var permissionHooks = _ref.permissionHooks;
|
|
1430
|
+
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {
|
|
1431
|
+
children: permissionHooks.map(function (hook, index) {
|
|
1432
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
1433
|
+
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(_ExecutePermissionHook__WEBPACK_IMPORTED_MODULE_2__.ExecutePermissionHook, {
|
|
1434
|
+
permissionHook: hook
|
|
1435
|
+
}, index, false, {
|
|
1436
|
+
fileName: _jsxFileName,
|
|
1437
|
+
lineNumber: 17,
|
|
1438
|
+
columnNumber: 12
|
|
1439
|
+
}, _this);
|
|
1440
|
+
})
|
|
1441
|
+
}, void 0, false);
|
|
1442
|
+
}
|
|
1443
|
+
_c = PermissionHooks;
|
|
1444
|
+
|
|
1445
|
+
var _c;
|
|
1446
|
+
|
|
1447
|
+
$RefreshReg$(_c, "PermissionHooks");
|
|
1448
|
+
|
|
1449
|
+
/***/ }),
|
|
1450
|
+
|
|
1287
1451
|
/***/ "./hooks/useBuildData.ts":
|
|
1288
1452
|
/*!*******************************!*\
|
|
1289
1453
|
!*** ./hooks/useBuildData.ts ***!
|
|
@@ -1294,20 +1458,34 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1294
1458
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1295
1459
|
/* harmony export */ "useBuildData": () => (/* binding */ useBuildData)
|
|
1296
1460
|
/* harmony export */ });
|
|
1297
|
-
/* harmony import */ var
|
|
1298
|
-
/* harmony import */ var
|
|
1299
|
-
/* harmony import */ var
|
|
1300
|
-
/* harmony import */ var
|
|
1301
|
-
/* harmony import */ var
|
|
1302
|
-
/* harmony import */ var
|
|
1303
|
-
/* harmony import */ var
|
|
1304
|
-
/* harmony import */ var
|
|
1305
|
-
/* harmony import */ var
|
|
1306
|
-
/* harmony import */ var
|
|
1307
|
-
/* harmony import */ var
|
|
1308
|
-
/* harmony import */ var
|
|
1461
|
+
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
|
|
1462
|
+
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
|
|
1463
|
+
/* harmony import */ var _imperium_auth_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @imperium/auth-client */ "@imperium/auth-client");
|
|
1464
|
+
/* harmony import */ var _imperium_auth_client__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_imperium_auth_client__WEBPACK_IMPORTED_MODULE_1__);
|
|
1465
|
+
/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! debug */ "debug");
|
|
1466
|
+
/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_2__);
|
|
1467
|
+
/* harmony import */ var lodash_compact__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/compact */ "lodash/compact");
|
|
1468
|
+
/* harmony import */ var lodash_compact__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_compact__WEBPACK_IMPORTED_MODULE_3__);
|
|
1469
|
+
/* harmony import */ var lodash_merge__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/merge */ "lodash/merge");
|
|
1470
|
+
/* harmony import */ var lodash_merge__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_merge__WEBPACK_IMPORTED_MODULE_4__);
|
|
1471
|
+
/* harmony import */ var querystring__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! querystring */ "querystring");
|
|
1472
|
+
/* harmony import */ var querystring__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(querystring__WEBPACK_IMPORTED_MODULE_5__);
|
|
1473
|
+
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router-dom */ "react-router-dom");
|
|
1474
|
+
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_router_dom__WEBPACK_IMPORTED_MODULE_6__);
|
|
1475
|
+
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../state */ "./state.ts");
|
|
1476
|
+
/* harmony import */ var _useIsActiveRoute__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./useIsActiveRoute */ "./hooks/useIsActiveRoute.ts");
|
|
1477
|
+
/* harmony import */ var _useSelectPermission__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./useSelectPermission */ "./hooks/useSelectPermission.ts");
|
|
1478
|
+
/* harmony import */ var _useSelectState__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./useSelectState */ "./hooks/useSelectState.ts");
|
|
1479
|
+
|
|
1480
|
+
|
|
1309
1481
|
var _s = $RefreshSig$();
|
|
1310
1482
|
|
|
1483
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
1484
|
+
|
|
1485
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
1486
|
+
|
|
1487
|
+
|
|
1488
|
+
|
|
1311
1489
|
|
|
1312
1490
|
|
|
1313
1491
|
|
|
@@ -1315,37 +1493,58 @@ var _s = $RefreshSig$();
|
|
|
1315
1493
|
|
|
1316
1494
|
|
|
1317
1495
|
|
|
1318
|
-
|
|
1496
|
+
|
|
1497
|
+
var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('imperium.layout.hooks.useBuildData');
|
|
1319
1498
|
function useBuildData(_ref) {
|
|
1320
1499
|
_s();
|
|
1321
1500
|
|
|
1322
1501
|
var stateSelectorHook = _ref.stateSelectorHook,
|
|
1502
|
+
permissionSelectorHook = _ref.permissionSelectorHook,
|
|
1323
1503
|
data = _ref.data,
|
|
1324
1504
|
routeItem = _ref.routeItem;
|
|
1325
|
-
|
|
1326
|
-
var
|
|
1505
|
+
|
|
1506
|
+
var _useAuth = (0,_imperium_auth_client__WEBPACK_IMPORTED_MODULE_1__.useAuth)(),
|
|
1507
|
+
id = _useAuth.id;
|
|
1508
|
+
|
|
1509
|
+
var _useLayoutState = (0,_state__WEBPACK_IMPORTED_MODULE_7__.useLayoutState)(),
|
|
1510
|
+
permissions = _useLayoutState.permissions;
|
|
1511
|
+
|
|
1512
|
+
var state = (0,_useSelectState__WEBPACK_IMPORTED_MODULE_10__.useSelectState)(stateSelectorHook);
|
|
1513
|
+
var loc = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useLocation)();
|
|
1327
1514
|
var route = {
|
|
1328
|
-
path:
|
|
1515
|
+
path: lodash_compact__WEBPACK_IMPORTED_MODULE_3___default()(loc.pathname.split('/')),
|
|
1329
1516
|
hash: loc.hash,
|
|
1330
|
-
search:
|
|
1517
|
+
search: querystring__WEBPACK_IMPORTED_MODULE_5___default().parse(loc.search)
|
|
1331
1518
|
};
|
|
1332
|
-
var active = (0,
|
|
1519
|
+
var active = (0,_useIsActiveRoute__WEBPACK_IMPORTED_MODULE_8__.useIsActiveRoute)({
|
|
1333
1520
|
loc: loc,
|
|
1334
1521
|
route: route,
|
|
1335
1522
|
state: state,
|
|
1336
|
-
active: false
|
|
1523
|
+
active: false,
|
|
1524
|
+
id: id,
|
|
1525
|
+
permissions: permissions
|
|
1337
1526
|
}, routeItem);
|
|
1527
|
+
var permissionsX = (0,_useSelectPermission__WEBPACK_IMPORTED_MODULE_9__.useSelectPermission)({
|
|
1528
|
+
state: state,
|
|
1529
|
+
loc: loc,
|
|
1530
|
+
active: active,
|
|
1531
|
+
route: route,
|
|
1532
|
+
id: id,
|
|
1533
|
+
permissions: permissions
|
|
1534
|
+
}, permissionSelectorHook);
|
|
1338
1535
|
var newData = {
|
|
1339
1536
|
state: state,
|
|
1340
1537
|
loc: loc,
|
|
1341
1538
|
active: active,
|
|
1342
|
-
route: route
|
|
1539
|
+
route: route,
|
|
1540
|
+
permissions: _objectSpread(_objectSpread({}, permissions), permissionsX),
|
|
1541
|
+
id: id
|
|
1343
1542
|
};
|
|
1344
|
-
return data ?
|
|
1543
|
+
return data ? lodash_merge__WEBPACK_IMPORTED_MODULE_4___default()(data, newData) : newData;
|
|
1345
1544
|
}
|
|
1346
1545
|
|
|
1347
|
-
_s(useBuildData, "
|
|
1348
|
-
return [
|
|
1546
|
+
_s(useBuildData, "NMDuLcIxXrtjYS0wpu117oP2RFQ=", false, function () {
|
|
1547
|
+
return [_imperium_auth_client__WEBPACK_IMPORTED_MODULE_1__.useAuth, _state__WEBPACK_IMPORTED_MODULE_7__.useLayoutState, _useSelectState__WEBPACK_IMPORTED_MODULE_10__.useSelectState, react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useLocation, _useIsActiveRoute__WEBPACK_IMPORTED_MODULE_8__.useIsActiveRoute, _useSelectPermission__WEBPACK_IMPORTED_MODULE_9__.useSelectPermission];
|
|
1349
1548
|
});
|
|
1350
1549
|
|
|
1351
1550
|
/***/ }),
|
|
@@ -1397,6 +1596,33 @@ _s(useIsActiveRoute, "L9+tG2+BZKTwRUciW8KKlSP2K7c=", false, function () {
|
|
|
1397
1596
|
|
|
1398
1597
|
/***/ }),
|
|
1399
1598
|
|
|
1599
|
+
/***/ "./hooks/useSelectPermission.ts":
|
|
1600
|
+
/*!**************************************!*\
|
|
1601
|
+
!*** ./hooks/useSelectPermission.ts ***!
|
|
1602
|
+
\**************************************/
|
|
1603
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1604
|
+
|
|
1605
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1606
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1607
|
+
/* harmony export */ "useSelectPermission": () => (/* binding */ useSelectPermission)
|
|
1608
|
+
/* harmony export */ });
|
|
1609
|
+
/* harmony import */ var lodash_flowRight__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/flowRight */ "lodash/flowRight");
|
|
1610
|
+
/* harmony import */ var lodash_flowRight__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_flowRight__WEBPACK_IMPORTED_MODULE_0__);
|
|
1611
|
+
|
|
1612
|
+
function useSelectPermission(data, permissionSelectorHook) {
|
|
1613
|
+
var finalSelectorHook = function finalSelectorHook() {
|
|
1614
|
+
return {};
|
|
1615
|
+
};
|
|
1616
|
+
|
|
1617
|
+
if (permissionSelectorHook) {
|
|
1618
|
+
finalSelectorHook = Array.isArray(permissionSelectorHook) ? lodash_flowRight__WEBPACK_IMPORTED_MODULE_0___default()(permissionSelectorHook) : permissionSelectorHook;
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1621
|
+
return finalSelectorHook(data);
|
|
1622
|
+
}
|
|
1623
|
+
|
|
1624
|
+
/***/ }),
|
|
1625
|
+
|
|
1400
1626
|
/***/ "./hooks/useSelectState.ts":
|
|
1401
1627
|
/*!*********************************!*\
|
|
1402
1628
|
!*** ./hooks/useSelectState.ts ***!
|
|
@@ -1926,6 +2152,7 @@ function LayoutItemWrapper(_ref) {
|
|
|
1926
2152
|
parentData = _ref.data;
|
|
1927
2153
|
var data = (0,_hooks_useBuildData__WEBPACK_IMPORTED_MODULE_4__.useBuildData)({
|
|
1928
2154
|
stateSelectorHook: item.stateSelectorHook,
|
|
2155
|
+
permissionSelectorHook: item.permissionSelectorHook,
|
|
1929
2156
|
routeItem: item,
|
|
1930
2157
|
data: parentData
|
|
1931
2158
|
}); // Check if visible
|
|
@@ -1945,7 +2172,7 @@ function LayoutItemWrapper(_ref) {
|
|
|
1945
2172
|
data: data
|
|
1946
2173
|
}, void 0, false, {
|
|
1947
2174
|
fileName: _jsxFileName,
|
|
1948
|
-
lineNumber:
|
|
2175
|
+
lineNumber: 51,
|
|
1949
2176
|
columnNumber: 10
|
|
1950
2177
|
}, this);
|
|
1951
2178
|
}
|
|
@@ -1959,7 +2186,7 @@ function LayoutItemWrapper(_ref) {
|
|
|
1959
2186
|
data: data
|
|
1960
2187
|
}, index, false, {
|
|
1961
2188
|
fileName: _jsxFileName,
|
|
1962
|
-
lineNumber:
|
|
2189
|
+
lineNumber: 55,
|
|
1963
2190
|
columnNumber: 71
|
|
1964
2191
|
}, _this);
|
|
1965
2192
|
});
|
|
@@ -1970,7 +2197,7 @@ function LayoutItemWrapper(_ref) {
|
|
|
1970
2197
|
data: data
|
|
1971
2198
|
}, void 0, false, {
|
|
1972
2199
|
fileName: _jsxFileName,
|
|
1973
|
-
lineNumber:
|
|
2200
|
+
lineNumber: 56,
|
|
1974
2201
|
columnNumber: 10
|
|
1975
2202
|
}, this);
|
|
1976
2203
|
}
|
|
@@ -1988,7 +2215,7 @@ function LayoutItemWrapper(_ref) {
|
|
|
1988
2215
|
data: data
|
|
1989
2216
|
}, index, false, {
|
|
1990
2217
|
fileName: _jsxFileName,
|
|
1991
|
-
lineNumber:
|
|
2218
|
+
lineNumber: 62,
|
|
1992
2219
|
columnNumber: 4
|
|
1993
2220
|
}, _this)
|
|
1994
2221
|
);
|
|
@@ -1999,7 +2226,7 @@ function LayoutItemWrapper(_ref) {
|
|
|
1999
2226
|
children: _children
|
|
2000
2227
|
}, void 0, false, {
|
|
2001
2228
|
fileName: _jsxFileName,
|
|
2002
|
-
lineNumber:
|
|
2229
|
+
lineNumber: 64,
|
|
2003
2230
|
columnNumber: 10
|
|
2004
2231
|
}, this);
|
|
2005
2232
|
}
|
|
@@ -2010,7 +2237,7 @@ function LayoutItemWrapper(_ref) {
|
|
|
2010
2237
|
as: as
|
|
2011
2238
|
}, void 0, false, {
|
|
2012
2239
|
fileName: _jsxFileName,
|
|
2013
|
-
lineNumber:
|
|
2240
|
+
lineNumber: 66,
|
|
2014
2241
|
columnNumber: 9
|
|
2015
2242
|
}, this);
|
|
2016
2243
|
}
|
|
@@ -2192,33 +2419,44 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2192
2419
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2193
2420
|
/* harmony export */ "useMobileLayout": () => (/* binding */ useMobileLayout)
|
|
2194
2421
|
/* harmony export */ });
|
|
2195
|
-
/* harmony import */ var
|
|
2196
|
-
/* harmony import */ var
|
|
2197
|
-
/* harmony import */ var
|
|
2198
|
-
/* harmony import */ var
|
|
2199
|
-
/* harmony import */ var
|
|
2200
|
-
/* harmony import */ var
|
|
2201
|
-
/* harmony import */ var
|
|
2422
|
+
/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! debug */ "debug");
|
|
2423
|
+
/* harmony import */ var debug__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(debug__WEBPACK_IMPORTED_MODULE_0__);
|
|
2424
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
|
|
2425
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
2426
|
+
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "react-redux");
|
|
2427
|
+
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
|
|
2428
|
+
/* harmony import */ var react_responsive__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-responsive */ "react-responsive");
|
|
2429
|
+
/* harmony import */ var react_responsive__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_responsive__WEBPACK_IMPORTED_MODULE_3__);
|
|
2430
|
+
/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../state */ "./state.ts");
|
|
2202
2431
|
var _s = $RefreshSig$();
|
|
2203
2432
|
|
|
2204
2433
|
|
|
2205
2434
|
|
|
2206
2435
|
|
|
2207
2436
|
|
|
2437
|
+
|
|
2438
|
+
var d = debug__WEBPACK_IMPORTED_MODULE_0___default()('imperium.layout.hooks.useMobileLayout');
|
|
2208
2439
|
function useMobileLayout() {
|
|
2209
2440
|
_s();
|
|
2210
2441
|
|
|
2211
|
-
var dispatch = (0,
|
|
2212
|
-
|
|
2442
|
+
var dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch)();
|
|
2443
|
+
|
|
2444
|
+
var _useLayoutState = (0,_state__WEBPACK_IMPORTED_MODULE_4__.useLayoutState)(),
|
|
2445
|
+
isMobile = _useLayoutState.isMobile;
|
|
2446
|
+
|
|
2447
|
+
var isMobileX = (0,react_responsive__WEBPACK_IMPORTED_MODULE_3__.useMediaQuery)({
|
|
2213
2448
|
query: '(max-width: 900px)'
|
|
2214
2449
|
});
|
|
2215
|
-
(0,
|
|
2216
|
-
|
|
2217
|
-
|
|
2450
|
+
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function () {
|
|
2451
|
+
if (isMobile !== isMobileX) {
|
|
2452
|
+
d("Media query change detected: ".concat(isMobile, " -> ").concat(isMobileX));
|
|
2453
|
+
dispatch(_state__WEBPACK_IMPORTED_MODULE_4__.actions.setMobile(isMobileX));
|
|
2454
|
+
}
|
|
2455
|
+
}, [dispatch, isMobile, isMobileX]);
|
|
2218
2456
|
}
|
|
2219
2457
|
|
|
2220
|
-
_s(useMobileLayout, "
|
|
2221
|
-
return [
|
|
2458
|
+
_s(useMobileLayout, "qsguf0hDkZ0k/kSUZF7YdTswnNU=", false, function () {
|
|
2459
|
+
return [react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch, _state__WEBPACK_IMPORTED_MODULE_4__.useLayoutState, react_responsive__WEBPACK_IMPORTED_MODULE_3__.useMediaQuery];
|
|
2222
2460
|
});
|
|
2223
2461
|
|
|
2224
2462
|
/***/ }),
|
|
@@ -2448,10 +2686,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2448
2686
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
|
|
2449
2687
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
|
|
2450
2688
|
/* harmony import */ var _datahooks_DataHooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../datahooks/DataHooks */ "./datahooks/DataHooks.tsx");
|
|
2451
|
-
/* harmony import */ var
|
|
2452
|
-
/* harmony import */ var
|
|
2453
|
-
/* harmony import */ var
|
|
2454
|
-
/* harmony import */ var
|
|
2689
|
+
/* harmony import */ var _datahooks_PermissionHooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../datahooks/PermissionHooks */ "./datahooks/PermissionHooks.tsx");
|
|
2690
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../types */ "./types.ts");
|
|
2691
|
+
/* harmony import */ var _components_Layout__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/Layout */ "./layout/components/Layout.tsx");
|
|
2692
|
+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime");
|
|
2693
|
+
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__);
|
|
2455
2694
|
|
|
2456
2695
|
|
|
2457
2696
|
var _jsxFileName = "/home/mike/dev/imperium/packages/layout/src/layout/withLayout.tsx";
|
|
@@ -2467,9 +2706,11 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
2467
2706
|
|
|
2468
2707
|
|
|
2469
2708
|
|
|
2709
|
+
|
|
2470
2710
|
var d = debug__WEBPACK_IMPORTED_MODULE_2___default()('imperium.layout.withLayout');
|
|
2471
2711
|
var initialLayoutModuleData = {
|
|
2472
2712
|
dataHooks: [],
|
|
2713
|
+
permissionSelectorHooks: [],
|
|
2473
2714
|
primaryMenu: [],
|
|
2474
2715
|
statusbar: [],
|
|
2475
2716
|
secondaryMenu: [],
|
|
@@ -2477,9 +2718,10 @@ var initialLayoutModuleData = {
|
|
|
2477
2718
|
};
|
|
2478
2719
|
function withLayout(client) {
|
|
2479
2720
|
var layoutModuleData = client.modules.reduce(function (memo, module) {
|
|
2480
|
-
if ((0,
|
|
2721
|
+
if ((0,_types__WEBPACK_IMPORTED_MODULE_6__.isImperiumLayoutClientModule)(module)) {
|
|
2481
2722
|
return {
|
|
2482
2723
|
dataHooks: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(memo.dataHooks || []), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(module.layout.dataHooks || [])),
|
|
2724
|
+
permissionSelectorHooks: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(memo.permissionSelectorHooks || []), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(module.layout.permissionSelectorHooks || [])),
|
|
2483
2725
|
primaryMenu: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(memo.primaryMenu || []), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(module.layout.primaryMenu || [])),
|
|
2484
2726
|
statusbar: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(memo.statusbar || []), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(module.layout.statusbar || [])),
|
|
2485
2727
|
secondaryMenu: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(memo.secondaryMenu || []), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(module.layout.secondaryMenu || [])),
|
|
@@ -2495,24 +2737,30 @@ function withLayout(client) {
|
|
|
2495
2737
|
var displayName = Wrapped.displayName || Wrapped.name || '';
|
|
2496
2738
|
|
|
2497
2739
|
function WithLayout(props) {
|
|
2498
|
-
return /*#__PURE__*/(0,
|
|
2499
|
-
children: [/*#__PURE__*/(0,
|
|
2500
|
-
children: /*#__PURE__*/(0,
|
|
2740
|
+
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.Fragment, {
|
|
2741
|
+
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(_components_Layout__WEBPACK_IMPORTED_MODULE_7__.Layout, _objectSpread(_objectSpread({}, layoutModuleData), {}, {
|
|
2742
|
+
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(Wrapped, _objectSpread(_objectSpread({}, props), {}, {
|
|
2501
2743
|
layout: layoutModuleData
|
|
2502
2744
|
}), void 0, false, {
|
|
2503
2745
|
fileName: _jsxFileName,
|
|
2504
|
-
lineNumber:
|
|
2746
|
+
lineNumber: 45,
|
|
2505
2747
|
columnNumber: 7
|
|
2506
2748
|
}, this)
|
|
2507
2749
|
}), void 0, false, {
|
|
2508
2750
|
fileName: _jsxFileName,
|
|
2509
|
-
lineNumber:
|
|
2751
|
+
lineNumber: 44,
|
|
2510
2752
|
columnNumber: 6
|
|
2511
|
-
}, this), /*#__PURE__*/(0,
|
|
2753
|
+
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(_datahooks_DataHooks__WEBPACK_IMPORTED_MODULE_4__.DataHooks, {
|
|
2512
2754
|
dataHooks: layoutModuleData.dataHooks
|
|
2513
2755
|
}, void 0, false, {
|
|
2514
2756
|
fileName: _jsxFileName,
|
|
2515
|
-
lineNumber:
|
|
2757
|
+
lineNumber: 47,
|
|
2758
|
+
columnNumber: 6
|
|
2759
|
+
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxDEV)(_datahooks_PermissionHooks__WEBPACK_IMPORTED_MODULE_5__.PermissionHooks, {
|
|
2760
|
+
permissionHooks: layoutModuleData.permissionSelectorHooks
|
|
2761
|
+
}, void 0, false, {
|
|
2762
|
+
fileName: _jsxFileName,
|
|
2763
|
+
lineNumber: 48,
|
|
2516
2764
|
columnNumber: 6
|
|
2517
2765
|
}, this)]
|
|
2518
2766
|
}, void 0, true);
|
|
@@ -2549,18 +2797,27 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
2549
2797
|
|
|
2550
2798
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
2551
2799
|
|
|
2800
|
+
/* eslint-disable no-param-reassign */
|
|
2552
2801
|
|
|
2553
2802
|
|
|
2554
2803
|
var state = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_2__.createSlice)({
|
|
2555
2804
|
name: 'imperiumLayout',
|
|
2556
2805
|
initialState: {
|
|
2557
|
-
isMobile: false
|
|
2806
|
+
isMobile: false,
|
|
2807
|
+
params: {},
|
|
2808
|
+
permissions: {}
|
|
2558
2809
|
},
|
|
2559
2810
|
reducers: {
|
|
2560
2811
|
setMobile: function setMobile(st, action) {
|
|
2561
2812
|
return _objectSpread(_objectSpread({}, st), {}, {
|
|
2562
2813
|
isMobile: action.payload
|
|
2563
2814
|
});
|
|
2815
|
+
},
|
|
2816
|
+
setParams: function setParams(st, action) {
|
|
2817
|
+
st.params = action.payload;
|
|
2818
|
+
},
|
|
2819
|
+
setPermission: function setPermission(st, action) {
|
|
2820
|
+
st.permissions[action.payload.permission] = action.payload.result;
|
|
2564
2821
|
}
|
|
2565
2822
|
}
|
|
2566
2823
|
});
|
|
@@ -3076,6 +3333,16 @@ module.exports = require("@babel/runtime/helpers/toConsumableArray");
|
|
|
3076
3333
|
|
|
3077
3334
|
/***/ }),
|
|
3078
3335
|
|
|
3336
|
+
/***/ "@imperium/auth-client":
|
|
3337
|
+
/*!****************************************!*\
|
|
3338
|
+
!*** external "@imperium/auth-client" ***!
|
|
3339
|
+
\****************************************/
|
|
3340
|
+
/***/ ((module) => {
|
|
3341
|
+
|
|
3342
|
+
module.exports = require("@imperium/auth-client");
|
|
3343
|
+
|
|
3344
|
+
/***/ }),
|
|
3345
|
+
|
|
3079
3346
|
/***/ "@imperium/state":
|
|
3080
3347
|
/*!**********************************!*\
|
|
3081
3348
|
!*** external "@imperium/state" ***!
|
|
@@ -3116,6 +3383,16 @@ module.exports = require("debug");
|
|
|
3116
3383
|
|
|
3117
3384
|
/***/ }),
|
|
3118
3385
|
|
|
3386
|
+
/***/ "lodash":
|
|
3387
|
+
/*!*************************!*\
|
|
3388
|
+
!*** external "lodash" ***!
|
|
3389
|
+
\*************************/
|
|
3390
|
+
/***/ ((module) => {
|
|
3391
|
+
|
|
3392
|
+
module.exports = require("lodash");
|
|
3393
|
+
|
|
3394
|
+
/***/ }),
|
|
3395
|
+
|
|
3119
3396
|
/***/ "lodash/compact":
|
|
3120
3397
|
/*!*********************************!*\
|
|
3121
3398
|
!*** external "lodash/compact" ***!
|
|
@@ -3385,4 +3662,4 @@ function layoutClientModule() {
|
|
|
3385
3662
|
module.exports = __webpack_exports__;
|
|
3386
3663
|
/******/ })()
|
|
3387
3664
|
;
|
|
3388
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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MEVBQUQ7QUFESjtBQUxGLEdBQVA7QUFTQTtBQUdEO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb250ZW50L2NvbXBvbmVudHMvc3R5bGVzLmNzcyIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvY29tcG9uZW50cy9zdHlsZXMuY3NzIiwid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly8vLi9jb21tb25JdGVtcy50cyIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2NvbXBvbmVudHMvQWN0aW9uRm9ybS50c3giLCJ3ZWJwYWNrOi8vLy4vY29udGVudC9jb21wb25lbnRzL0FjdGlvbkZvcm1TaWRlYmFySXRlbUNvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vY29udGVudC9jb21wb25lbnRzL0FjdGlvblNpZGViYXJJdGVtQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2NvbXBvbmVudHMvQ29udGVudENvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vY29udGVudC9jb21wb25lbnRzL0N1c3RvbVNpZGViYXJJdGVtQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2NvbXBvbmVudHMvSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2NvbXBvbmVudHMvUGxhaW5TaWRlYmFySXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vY29udGVudC9jb21wb25lbnRzL1NpZGViYXJJdGVtV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vLy4vY29udGVudC9jcmVhdGVQYWdlcy50c3giLCJ3ZWJwYWNrOi8vLy4vY29udGVudC9kaXZpZGVyU2lkZWJhckl0ZW0udHMiLCJ3ZWJwYWNrOi8vLy4vY29udGVudC9ob29rcy91c2VCdWlsZENvbnRlbnREYXRhLnRzIiwid2VicGFjazovLy8uL2NvbnRlbnQvdHlwZXMudHMiLCJ3ZWJwYWNrOi8vLy4vY29udGVudC91dGlscy50c3giLCJ3ZWJwYWNrOi8vLy4vZGF0YWhvb2tzL0RhdGFIb29rcy50c3giLCJ3ZWJwYWNrOi8vLy4vZGF0YWhvb2tzL0V4ZWN1dGVEYXRhSG9vay50c3giLCJ3ZWJwYWNrOi8vLy4vaG9va3MvdXNlQnVpbGREYXRhLnRzIiwid2VicGFjazovLy8uL2hvb2tzL3VzZUlzQWN0aXZlUm91dGUudHMiLCJ3ZWJwYWNrOi8vLy4vaG9va3MvdXNlU2VsZWN0U3RhdGUudHMiLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0L2NvbXBvbmVudHMvQ3VzdG9tTGF5b3V0SXRlbUNvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0L2NvbXBvbmVudHMvRHJvcGRvd25JdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvY29tcG9uZW50cy9MYXlvdXQudHN4Iiwid2VicGFjazovLy8uL2xheW91dC9jb21wb25lbnRzL0xheW91dEl0ZW1CYXIudHN4Iiwid2VicGFjazovLy8uL2xheW91dC9jb21wb25lbnRzL0xheW91dEl0ZW1XcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvY29tcG9uZW50cy9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0L2NvbXBvbmVudHMvUGxhaW5JdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvY29tcG9uZW50cy9TZWNvbmRhcnlNZW51VG9nZ2xlSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0L2hvb2tzL3VzZU1vYmlsZUxheW91dC50cyIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvbW92ZUl0ZW1zLnRzIiwid2VicGFjazovLy8uL2xheW91dC90eXBlcy50cyIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvdXRpbHMudHN4Iiwid2VicGFjazovLy8uL2xheW91dC93aXRoTGF5b3V0LnRzeCIsIndlYnBhY2s6Ly8vLi9zdGF0ZS50cyIsIndlYnBhY2s6Ly8vLi90eXBlcy50cyIsIndlYnBhY2s6Ly8vLi91dGlscy50cyIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2NvbXBvbmVudHMvc3R5bGVzLmNzcz9kMWY1Iiwid2VicGFjazovLy8uL2xheW91dC9jb21wb25lbnRzL3N0eWxlcy5jc3M/MTZmMCIsIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzIiwid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzIiwid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qcyIsIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanMiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBpbXBlcml1bS9zdGF0ZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkByZWR1eGpzL3Rvb2xraXRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAdGh4L2NvbnRyb2xzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiZGVidWdcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJsb2Rhc2gvY29tcGFjdFwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImxvZGFzaC9mbG93UmlnaHRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJsb2Rhc2gvZnBcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJsb2Rhc2gvZ3JvdXBCeVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImxvZGFzaC9tZW1vaXplXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoL21lcmdlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoL3NvcnRCeVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIm1pbmdvXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicXVlcnlzdHJpbmdcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdFwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LXJlZHV4XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtcmVzcG9uc2l2ZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LXJvdXRlclwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LXJvdXRlci1kb21cIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJzZW1hbnRpYy11aS1yZWFjdFwiIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vLi9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19wYXJlbnQtLXFjWnF3IHtcXG5cXHRmbGV4OiAxO1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0ZmxleC1kaXJlY3Rpb246IHJvdztcXG5cXHRoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX193cmFwcGVyLS1tYnpTaSB7XFxuXFx0ZmxleDogMTtcXG5cXHRmbGV4LWJhc2lzOiBjYWxjKDY1JSk7XFxufVxcblxcbi5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19jb250ZW50LS1maFNYRyB7XFxuXFx0bWFyZ2luOiAwIDAuOHJlbSAwLjhyZW0gMC44cmVtO1xcbn1cXG5cXG4uY29udGVudC1jb21wb25lbnRzLXN0eWxlc19faGVhZGVyLS1OT0d5YyB7XFxuXFx0cGFkZGluZzogMC44cmVtIDAuOHJlbSAwIDAuOHJlbTtcXG5cXHRtYXJnaW4tYm90dG9tOiAwLjhyZW07XFxufVxcblxcbi5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19zaWRlYmFyLS1yTFU1UiB7XFxuXFx0bWluLXdpZHRoOiAyNTBweDtcXG5cXHRwYWRkaW5nOiAxMHB4O1xcblxcdG92ZXJmbG93LXk6IGF1dG87XFxuXFx0b3ZlcmZsb3cteDogaGlkZGVuO1xcbn1cXG5cXG4uY29udGVudC1jb21wb25lbnRzLXN0eWxlc19fc2lkZWJhckl0ZW0tLUV5bGdmIHtcXG5cXHRtYXJnaW4tYm90dG9tOiA1cHg7XFxufVxcblxcbi5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19hY3Rpb25zSGVhZGVyLS1ONnp6TSB7XFxuXFx0ZGlzcGxheTogbm9uZTtcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjcuOThweCkge1xcblxcdC5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19wYXJlbnQtLXFjWnF3IHtcXG5cXHRcXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcblxcdFxcdGhlaWdodDogYXV0bztcXG5cXHR9XFxuXFx0LmNvbnRlbnQtY29tcG9uZW50cy1zdHlsZXNfX3dyYXBwZXItLW1ielNpIHtcXG5cXHRcXHRib3JkZXItcmlnaHQ6IG5vbmU7XFxuXFx0XFx0cGFkZGluZy1ib3R0b206IDIwcHg7XFxuXFx0fVxcblxcdC5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19zaWRlYmFyLS1yTFU1UiB7XFxuXFx0XFx0bWluLXdpZHRoOiBhdXRvO1xcblxcdH1cXG5cXHQuY29udGVudC1jb21wb25lbnRzLXN0eWxlc19fYWN0aW9uc0hlYWRlci0tTjZ6ek0ge1xcblxcdFxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdFxcdG1hcmdpbi1ib3R0b206IDVweDtcXG5cXHR9XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbnRlbnQvY29tcG9uZW50cy9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0NBQ0MsT0FBTztDQUNQLGFBQWE7Q0FDYixtQkFBbUI7Q0FDbkIsWUFBWTtBQUNiOztBQUVBO0NBQ0MsT0FBTztDQUNQLHFCQUFxQjtBQUN0Qjs7QUFFQTtDQUNDLDhCQUE4QjtBQUMvQjs7QUFFQTtDQUNDLCtCQUErQjtDQUMvQixxQkFBcUI7QUFDdEI7O0FBRUE7Q0FDQyxnQkFBZ0I7Q0FDaEIsYUFBYTtDQUNiLGdCQUFnQjtDQUNoQixrQkFBa0I7QUFDbkI7O0FBRUE7Q0FDQyxrQkFBa0I7QUFDbkI7O0FBRUE7Q0FDQyxhQUFhO0FBQ2Q7O0FBRUE7Q0FDQztFQUNDLHNCQUFzQjtFQUN0QixZQUFZO0NBQ2I7Q0FDQTtFQUNDLGtCQUFrQjtFQUNsQixvQkFBb0I7Q0FDckI7Q0FDQTtFQUNDLGVBQWU7Q0FDaEI7Q0FDQTtFQUNDLGNBQWM7RUFDZCxrQkFBa0I7Q0FDbkI7QUFDRFwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIucGFyZW50IHtcXG5cXHRmbGV4OiAxO1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0ZmxleC1kaXJlY3Rpb246IHJvdztcXG5cXHRoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi53cmFwcGVyIHtcXG5cXHRmbGV4OiAxO1xcblxcdGZsZXgtYmFzaXM6IGNhbGMoNjUlKTtcXG59XFxuXFxuLmNvbnRlbnQge1xcblxcdG1hcmdpbjogMCAwLjhyZW0gMC44cmVtIDAuOHJlbTtcXG59XFxuXFxuLmhlYWRlciB7XFxuXFx0cGFkZGluZzogMC44cmVtIDAuOHJlbSAwIDAuOHJlbTtcXG5cXHRtYXJnaW4tYm90dG9tOiAwLjhyZW07XFxufVxcblxcbi5zaWRlYmFyIHtcXG5cXHRtaW4td2lkdGg6IDI1MHB4O1xcblxcdHBhZGRpbmc6IDEwcHg7XFxuXFx0b3ZlcmZsb3cteTogYXV0bztcXG5cXHRvdmVyZmxvdy14OiBoaWRkZW47XFxufVxcblxcbi5zaWRlYmFySXRlbSB7XFxuXFx0bWFyZ2luLWJvdHRvbTogNXB4O1xcbn1cXG5cXG4uYWN0aW9uc0hlYWRlciB7XFxuXFx0ZGlzcGxheTogbm9uZTtcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjcuOThweCkge1xcblxcdC5wYXJlbnQge1xcblxcdFxcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXFx0XFx0aGVpZ2h0OiBhdXRvO1xcblxcdH1cXG5cXHQud3JhcHBlciB7XFxuXFx0XFx0Ym9yZGVyLXJpZ2h0OiBub25lO1xcblxcdFxcdHBhZGRpbmctYm90dG9tOiAyMHB4O1xcblxcdH1cXG5cXHQuc2lkZWJhciB7XFxuXFx0XFx0bWluLXdpZHRoOiBhdXRvO1xcblxcdH1cXG5cXHQuYWN0aW9uc0hlYWRlciB7XFxuXFx0XFx0ZGlzcGxheTogYmxvY2s7XFxuXFx0XFx0bWFyZ2luLWJvdHRvbTogNXB4O1xcblxcdH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5sb2NhbHMgPSB7XG5cdFwicGFyZW50XCI6IFwiY29udGVudC1jb21wb25lbnRzLXN0eWxlc19fcGFyZW50LS1xY1pxd1wiLFxuXHRcIndyYXBwZXJcIjogXCJjb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX193cmFwcGVyLS1tYnpTaVwiLFxuXHRcImNvbnRlbnRcIjogXCJjb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19jb250ZW50LS1maFNYR1wiLFxuXHRcImhlYWRlclwiOiBcImNvbnRlbnQtY29tcG9uZW50cy1zdHlsZXNfX2hlYWRlci0tTk9HeWNcIixcblx0XCJzaWRlYmFyXCI6IFwiY29udGVudC1jb21wb25lbnRzLXN0eWxlc19fc2lkZWJhci0tckxVNVJcIixcblx0XCJzaWRlYmFySXRlbVwiOiBcImNvbnRlbnQtY29tcG9uZW50cy1zdHlsZXNfX3NpZGViYXJJdGVtLS1FeWxnZlwiLFxuXHRcImFjdGlvbnNIZWFkZXJcIjogXCJjb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19hY3Rpb25zSGVhZGVyLS1ONnp6TVwiXG59O1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi8qIE5lZWQgdG8gcGFzcyAxMDAlIGhlaWdodCBhbGwgdGhlIHdheSBkb3duICovXFxuI3Jvb3Qge1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuI3Jvb3QgPiBkaXYge1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuXFxuLmxheW91dC1jb21wb25lbnRzLXN0eWxlc19fcGFyZW50LS1zd3M4TyB7XFxuXFx0bWluLWhlaWdodDogMTAwJTtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcblxcbi5sYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX21lbnViYXItLVdNY1huIHtcXG5cXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxuXFx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5sYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3N0YXR1c2Jhci0tSGE0Zl8ge1xcblxcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xcblxcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxheW91dC1jb21wb25lbnRzLXN0eWxlc19fc2Vjb25kYXJ5TWVudS0tYnl1Nnkge1xcblxcdG1pbi13aWR0aDogMjIwcHggIWltcG9ydGFudDtcXG5cXHR3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcblxcdGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcblxcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG5cXHRtYXJnaW46IDAgIWltcG9ydGFudDtcXG5cXHRvdmVyZmxvdy14OiBhdXRvOyAvKiBhZGRlZCB0byBtYWtlIHRoZSBjb250ZW50IHNjcm9sbCBhbmQgbm90IHRoZSB3aG9sZSBsYXlvdXQgKi9cXG5cXHR0cmFuc2l0aW9uOiBtYXJnaW4tbGVmdCAwLjNzIGVhc2UtaW4tb3V0O1xcbn1cXG5cXG4ubGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19zZWNvbmRhcnlNZW51SGlkZGVuLS1lazdReiB7XFxuXFx0bWFyZ2luLWxlZnQ6IC0yMjBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19jb250ZW50V3JhcHBlci0tU2FZR24ge1xcblxcdGZsZXg6IDE7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRmbGV4LWRpcmVjdGlvbjogcm93O1xcblxcdGZsZXgtd3JhcDogbm93cmFwO1xcblxcdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG5cXHRib3JkZXI6IDAgc29saWQgdHJhbnNwYXJlbnQgIWltcG9ydGFudDsgLyogdGhpcyBpcyBhIHNlZ21lbnQsIGFuZCB0aGV5IHNlZW0gdG8gaGF2ZSBhIDFweCB3aGl0ZSBib3JkZXIgYnkgZGVmYXVsdCAqL1xcblxcdG92ZXJmbG93LXk6IGF1dG87IC8qIGFkZGVkIHRvIG1ha2UgdGhlIGNvbnRlbnQgc2Nyb2xsIGFuZCBub3QgdGhlIHdob2xlIGxheW91dCAqL1xcbn1cXG5cXG4ubGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19jb250ZW50LS1KR0R1VyB7XFxuXFx0ZmxleDogMTsgLyogY2hhbmdlZCB0aGlzIHRvIGhhdmUgYSBmbGV4IG9mIG9uZSBpbnN0ZWFkIG9mIGF1dG8gc28gdGhlIHNpZGUgbWVudSBkb2Vzbid0IGdldCBzcXVpc2hlZCAqL1xcblxcdGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdG1heC1oZWlnaHQ6IDEwMCU7IC8qIGFkZGVkIHRvIG1ha2UgdGhlIGNvbnRlbnQgc2Nyb2xsIGFuZCBub3QgdGhlIHdob2xlIGxheW91dCAqL1xcblxcdG92ZXJmbG93LXg6IGhpZGRlbjsgLyogYWRkZWQgdG8gbWFrZSB0aGUgY29udGVudCBzY3JvbGwgYW5kIG5vdCB0aGUgd2hvbGUgbGF5b3V0ICovXFxufVxcblxcbi5sYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX2Zvb3Rlci0tQTdMU0gge1xcblxcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xcblxcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLmxheW91dC1jb21wb25lbnRzLXN0eWxlc19fdmVydGljYWxEcm9wZG93bkljb24tLVY2OUN3IHtcXG5cXHR0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyA7XFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4ubGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX192ZXJ0aWNhbERyb3Bkb3duSWNvblJvdGF0ZWQtLWJaeU5PIHtcXG5cXHR0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgO1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmxheW91dC1jb21wb25lbnRzLXN0eWxlc19fdmVydGljYWxEcm9wZG93blRpdGxlLS1zNkFzcSB7XFxuXFx0cGFkZGluZzogMDtcXG5cXHRjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX192ZXJ0aWNhbERyb3Bkb3duQ29udGVudC0teEdIeGEge1xcblxcdHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XFxuXFx0bWFyZ2luOiAwIC0xLjE0Mjg1NzE0ZW0gMCAwO1xcblxcdGJvcmRlci1yYWRpdXM6IDA7XFxufVxcblxcbi5sYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX2ljb24tLUd0bDR0IHtcXG5cXHR0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40cyBsaW5lYXI7XFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4ubGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19pY29uUm90YXRlZC0tWEI2N1kge1xcblxcdHRyYW5zZm9ybTogcm90YXRlKC0xODBkZWcpO1xcblxcdHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzO1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbGF5b3V0L2NvbXBvbmVudHMvc3R5bGVzLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSw4Q0FBOEM7QUFDOUM7Q0FDQyxZQUFZO0FBQ2I7QUFDQTtDQUNDLFlBQVk7QUFDYjs7QUFFQTtDQUNDLGdCQUFnQjtDQUNoQixhQUFhO0NBQ2Isc0JBQXNCO0FBQ3ZCOztBQUVBO0NBQ0MsMkJBQTJCO0NBQzNCLG9CQUFvQjtBQUNyQjs7QUFFQTtDQUNDLG9CQUFvQjtDQUNwQiwyQkFBMkI7QUFDNUI7O0FBRUE7Q0FDQywyQkFBMkI7Q0FDM0Isc0JBQXNCO0NBQ3RCLHVCQUF1QjtDQUN2QiwyQkFBMkI7Q0FDM0Isb0JBQW9CO0NBQ3BCLGdCQUFnQixFQUFFLDhEQUE4RDtDQUNoRix3Q0FBd0M7QUFDekM7O0FBRUE7Q0FDQyw4QkFBOEI7QUFDL0I7O0FBRUE7Q0FDQyxPQUFPO0NBQ1AsYUFBYTtDQUNiLG1CQUFtQjtDQUNuQixpQkFBaUI7Q0FDakIscUJBQXFCO0NBQ3JCLHNDQUFzQyxFQUFFLDJFQUEyRTtDQUNuSCxnQkFBZ0IsRUFBRSw4REFBOEQ7QUFDakY7O0FBRUE7Q0FDQyxPQUFPLEVBQUUsNkZBQTZGO0NBQ3RHLHlCQUF5QjtDQUN6QixZQUFZO0NBQ1osZ0JBQWdCLEVBQUUsOERBQThEO0NBQ2hGLGtCQUFrQixFQUFFLDhEQUE4RDtBQUNuRjs7QUFFQTtDQUNDLG9CQUFvQjtDQUNwQiwyQkFBMkI7QUFDNUI7O0FBRUE7Q0FDQyx1QkFBdUI7Q0FDdkIsMkJBQTJCO0NBQzNCLGVBQWU7QUFDaEI7O0FBRUE7Q0FDQyx3QkFBd0I7Q0FDeEIsMkJBQTJCO0NBQzNCLGVBQWU7QUFDaEI7O0FBRUE7Q0FDQyxVQUFVO0NBQ1Ysc0JBQXNCO0FBQ3ZCOztBQUVBO0NBQ0MseUJBQXlCO0NBQ3pCLDJCQUEyQjtDQUMzQixnQkFBZ0I7QUFDakI7O0FBRUE7Q0FDQyx1QkFBdUI7Q0FDdkIsaUNBQWlDO0NBQ2pDLGVBQWU7QUFDaEI7O0FBRUE7Q0FDQywwQkFBMEI7Q0FDMUIsMEJBQTBCO0NBQzFCLGVBQWU7QUFDaEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLyogTmVlZCB0byBwYXNzIDEwMCUgaGVpZ2h0IGFsbCB0aGUgd2F5IGRvd24gKi9cXG46Z2xvYmFsKCNyb290KSB7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcbn1cXG46Z2xvYmFsKCNyb290KSA+IGRpdiB7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4ucGFyZW50IHtcXG5cXHRtaW4taGVpZ2h0OiAxMDAlO1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuXFxuLm1lbnViYXIge1xcblxcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG5cXHRtYXJnaW46IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnN0YXR1c2JhciB7XFxuXFx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuXFx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uc2Vjb25kYXJ5TWVudSB7XFxuXFx0bWluLXdpZHRoOiAyMjBweCAhaW1wb3J0YW50O1xcblxcdHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxuXFx0aGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XFxuXFx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xcblxcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xcblxcdG92ZXJmbG93LXg6IGF1dG87IC8qIGFkZGVkIHRvIG1ha2UgdGhlIGNvbnRlbnQgc2Nyb2xsIGFuZCBub3QgdGhlIHdob2xlIGxheW91dCAqL1xcblxcdHRyYW5zaXRpb246IG1hcmdpbi1sZWZ0IDAuM3MgZWFzZS1pbi1vdXQ7XFxufVxcblxcbi5zZWNvbmRhcnlNZW51SGlkZGVuIHtcXG5cXHRtYXJnaW4tbGVmdDogLTIyMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5jb250ZW50V3JhcHBlciB7XFxuXFx0ZmxleDogMTtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuXFx0ZmxleC13cmFwOiBub3dyYXA7XFxuXFx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xcblxcdGJvcmRlcjogMCBzb2xpZCB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyAvKiB0aGlzIGlzIGEgc2VnbWVudCwgYW5kIHRoZXkgc2VlbSB0byBoYXZlIGEgMXB4IHdoaXRlIGJvcmRlciBieSBkZWZhdWx0ICovXFxuXFx0b3ZlcmZsb3cteTogYXV0bzsgLyogYWRkZWQgdG8gbWFrZSB0aGUgY29udGVudCBzY3JvbGwgYW5kIG5vdCB0aGUgd2hvbGUgbGF5b3V0ICovXFxufVxcblxcbi5jb250ZW50IHtcXG5cXHRmbGV4OiAxOyAvKiBjaGFuZ2VkIHRoaXMgdG8gaGF2ZSBhIGZsZXggb2Ygb25lIGluc3RlYWQgb2YgYXV0byBzbyB0aGUgc2lkZSBtZW51IGRvZXNuJ3QgZ2V0IHNxdWlzaGVkICovXFxuXFx0YWxpZ24tY29udGVudDogZmxleC1zdGFydDtcXG5cXHRoZWlnaHQ6IDEwMCU7XFxuXFx0bWF4LWhlaWdodDogMTAwJTsgLyogYWRkZWQgdG8gbWFrZSB0aGUgY29udGVudCBzY3JvbGwgYW5kIG5vdCB0aGUgd2hvbGUgbGF5b3V0ICovXFxuXFx0b3ZlcmZsb3cteDogaGlkZGVuOyAvKiBhZGRlZCB0byBtYWtlIHRoZSBjb250ZW50IHNjcm9sbCBhbmQgbm90IHRoZSB3aG9sZSBsYXlvdXQgKi9cXG59XFxuXFxuLmZvb3RlciB7XFxuXFx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuXFx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4udmVydGljYWxEcm9wZG93bkljb24ge1xcblxcdHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcblxcdHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIDtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi52ZXJ0aWNhbERyb3Bkb3duSWNvblJvdGF0ZWQge1xcblxcdHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyA7XFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udmVydGljYWxEcm9wZG93blRpdGxlIHtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XFxufVxcblxcbi52ZXJ0aWNhbERyb3Bkb3duQ29udGVudCB7XFxuXFx0cGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcXG5cXHRtYXJnaW46IDAgLTEuMTQyODU3MTRlbSAwIDA7XFxuXFx0Ym9yZGVyLXJhZGl1czogMDtcXG59XFxuXFxuLmljb24ge1xcblxcdHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcblxcdHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGxpbmVhcjtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5pY29uUm90YXRlZCB7XFxuXFx0dHJhbnNmb3JtOiByb3RhdGUoLTE4MGRlZyk7XFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXM7XFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmxvY2FscyA9IHtcblx0XCJwYXJlbnRcIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3BhcmVudC0tc3dzOE9cIixcblx0XCJtZW51YmFyXCI6IFwibGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19tZW51YmFyLS1XTWNYblwiLFxuXHRcInN0YXR1c2JhclwiOiBcImxheW91dC1jb21wb25lbnRzLXN0eWxlc19fc3RhdHVzYmFyLS1IYTRmX1wiLFxuXHRcInNlY29uZGFyeU1lbnVcIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3NlY29uZGFyeU1lbnUtLWJ5dTZ5XCIsXG5cdFwic2Vjb25kYXJ5TWVudUhpZGRlblwiOiBcImxheW91dC1jb21wb25lbnRzLXN0eWxlc19fc2Vjb25kYXJ5TWVudUhpZGRlbi0tZWs3UXpcIixcblx0XCJjb250ZW50V3JhcHBlclwiOiBcImxheW91dC1jb21wb25lbnRzLXN0eWxlc19fY29udGVudFdyYXBwZXItLVNhWUduXCIsXG5cdFwiY29udGVudFwiOiBcImxheW91dC1jb21wb25lbnRzLXN0eWxlc19fY29udGVudC0tSkdEdVdcIixcblx0XCJmb290ZXJcIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX2Zvb3Rlci0tQTdMU0hcIixcblx0XCJ2ZXJ0aWNhbERyb3Bkb3duSWNvblwiOiBcImxheW91dC1jb21wb25lbnRzLXN0eWxlc19fdmVydGljYWxEcm9wZG93bkljb24tLVY2OUN3XCIsXG5cdFwidmVydGljYWxEcm9wZG93bkljb25Sb3RhdGVkXCI6IFwibGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX192ZXJ0aWNhbERyb3Bkb3duSWNvblJvdGF0ZWQtLWJaeU5PXCIsXG5cdFwidmVydGljYWxEcm9wZG93blRpdGxlXCI6IFwibGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX192ZXJ0aWNhbERyb3Bkb3duVGl0bGUtLXM2QXNxXCIsXG5cdFwidmVydGljYWxEcm9wZG93bkNvbnRlbnRcIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3ZlcnRpY2FsRHJvcGRvd25Db250ZW50LS14R0h4YVwiLFxuXHRcImljb25cIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX2ljb24tLUd0bDR0XCIsXG5cdFwiaWNvblJvdGF0ZWRcIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX2ljb25Sb3RhdGVkLS1YQjY3WVwiXG59O1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB0aGlzLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW19pXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG1vZHVsZXMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaTJdKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsImltcG9ydCB0eXBlIHtEYXRhLCBTdGF0ZVNlbGVjdG9ySG9vaywgVmlzaWJpbGl0eVF1ZXJ5Rm59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhbiBpdGVtIHRoYXQgY2FuIGhpZGUgaXRzZWxmIGJhc2VkIG9uIHJlZHV4IHN0YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlzaWJpbGl0eUl0ZW0ge1xuXHRzdGF0ZVNlbGVjdG9ySG9vaz86IFN0YXRlU2VsZWN0b3JIb29rIHwgU3RhdGVTZWxlY3Rvckhvb2tbXTsgLy8gSG9vayBvciBhcnJheSBvZiBob29rcyB0aGF0IHNlbGVjdCBzdGF0ZVxuXHR2aXNpYmxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBWaXNpYmlsaXR5UXVlcnlGbjtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYW4gaXRlbSB3aXRoIG9wdGlvbmFsIHdlaWdodFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlaWdodGVkSXRlbSB7XG5cdHdlaWdodD86IG51bWJlcjsgLy8gTGFyZ2VyIG51bWJlcnMgbW92ZSByaWdodC9kb3duXG59XG5cbi8qKlxuICogRGVzY3JpYmVzIGFuIGl0ZW0gdGhhdCBsaW5rcyB0byBhIHJvdXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVJdGVtIHtcblx0dG8/OiBzdHJpbmcgfCAoKGRhdGE6IERhdGEpID0+IHN0cmluZyk7XG5cdGV4YWN0PzogYm9vbGVhbjtcblx0c3RyaWN0PzogYm9vbGVhbjtcblx0c2Vuc2l0aXZlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYW4gaXRlbSB0aGF0IGNhbiBiZSBwb3NpdGlvbmVkIGhvcml6b250YWxseSBsZWZ0IG9yIHJpZ2h0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbFBvc2l0aW9uZWRJdGVtIHtcblx0cG9zaXRpb24/OiAnbGVmdCcgfCAncmlnaHQnOyAvLyBEZWZhdWx0IGlzIGxlZnRcblx0c3RpY2tPbk1vYmlsZT86IGJvb2xlYW47IC8vIElmIHRydWUsIHdpbGwgbm90IGJlIGhpZGRlbiB3aGVuIGluIG1vYmlsZSBtb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hvcml6b250YWxQb3NpdGlvbmVkSXRlbSh2YWx1ZTogYW55KTogdmFsdWUgaXMgSG9yaXpvbnRhbFBvc2l0aW9uZWRJdGVtIHtcblx0cmV0dXJuICEhKCh2YWx1ZSBhcyBIb3Jpem9udGFsUG9zaXRpb25lZEl0ZW0pLnBvc2l0aW9uIHx8ICh2YWx1ZSBhcyBIb3Jpem9udGFsUG9zaXRpb25lZEl0ZW0pLnN0aWNrT25Nb2JpbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSb3V0ZUl0ZW0odmFsdWU6IGFueSk6IHZhbHVlIGlzIFJvdXRlSXRlbSB7XG5cdHJldHVybiAhISgodmFsdWUgYXMgUm91dGVJdGVtKS50byB8fCAodmFsdWUgYXMgUm91dGVJdGVtKS5leGFjdCB8fCAodmFsdWUgYXMgUm91dGVJdGVtKS5zdHJpY3QgfHwgKHZhbHVlIGFzIFJvdXRlSXRlbSkuc2Vuc2l0aXZlKTtcbn1cbiIsImltcG9ydCB0eXBlIHtEZWZpbmVSb3V0ZU9wdGlvbnN9IGZyb20gJ0BpbXBlcml1bS9yb3V0ZXInO1xuaW1wb3J0IHt1c2VURm9ybX0gZnJvbSAnQHRoeC9jb250cm9scyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QnV0dG9uLCBGb3JtLCBJY29uLCBNZXNzYWdlLCBQb3B1cH0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge0FjdGlvbkZvcm1TaWRlYmFySXRlbSwgQ29udGVudERhdGF9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgZCA9IGRlYnVnKCdpbXBlcml1bS5sYXlvdXQuY29udGVudC5jb21wb25lbnRzLkFjdGlvbkZvcm0nKTtcblxuaW50ZXJmYWNlIEFjdGlvbkZvcm1Qcm9wczxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4ge1xuXHRpdGVtOiBBY3Rpb25Gb3JtU2lkZWJhckl0ZW08VCwgSz47XG5cdGRhdGE6IENvbnRlbnREYXRhPFQsIEs+O1xuXHRvbkhpZGVGb3JtOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uRm9ybTxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oe2l0ZW0sIGRhdGEsIG9uSGlkZUZvcm19OiBBY3Rpb25Gb3JtUHJvcHM8VCwgSz4pIHtcblx0Ly8gR2V0IGluaXRpYWwgdmFsdWVzXG5cdGxldCBpbml0aWFsVmFsdWVzID0ge307XG5cdGlmIChpdGVtLmluaXRpYWxWYWx1ZXMpIHtcblx0XHRpZiAodHlwZW9mIGl0ZW0uaW5pdGlhbFZhbHVlcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0aW5pdGlhbFZhbHVlcyA9IGl0ZW0uaW5pdGlhbFZhbHVlcyhkYXRhKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5pdGlhbFZhbHVlcyA9IGl0ZW0uaW5pdGlhbFZhbHVlcztcblx0XHR9XG5cdH1cblxuXHQvLyBURm9ybVxuXHRjb25zdCB7aGFzRXJyb3JzLCBoYXNXYXJuaW5ncywgaGFuZGxlU3VibWl0LCBoYW5kbGVDaGFuZ2UsIHZhbHVlcywgcmVzZXRGb3JtLCBlcnJvcnMsIGZpZWxkRXJyb3J9ID0gdXNlVEZvcm0oe1xuXHRcdGluaXRpYWxWYWx1ZXMsXG5cdFx0b25TdWJtaXQ6IHN1Ym1pdFZhbHVlcyA9PiB7XG5cdFx0XHRpZiAoaXRlbS5vblN1Ym1pdCkge1xuXHRcdFx0XHRpdGVtLm9uU3VibWl0KHN1Ym1pdFZhbHVlcywgZGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRvbkhpZGVGb3JtKCk7XG5cdFx0fSxcblx0XHRlbmFibGVSZWluaXRpYWxpemU6IHRydWUsXG5cdFx0dmFsaWRhdGlvblNjaGVtYTogaXRlbS52YWxpZGF0aW9uU2NoZW1hLFxuXHR9KTtcblxuXHRjb25zdCBzYXZlQnV0dG9uID0gaGFzV2FybmluZ3MgPyAoXG5cdFx0PFBvcHVwXG5cdFx0XHR0cmlnZ2VyPXtcblx0XHRcdFx0PEJ1dHRvbiBwb3NpdGl2ZSB0eXBlPVwic3VibWl0XCIgZmxvYXRlZD1cInJpZ2h0XCIgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiPlxuXHRcdFx0XHRcdDxJY29uIG5hbWU9XCJleGNsYW1hdGlvbiBjaXJjbGVcIiBjb2xvcj1cInJlZFwiIC8+XG5cdFx0XHRcdFx0U2F2ZVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdH1cblx0XHRcdGNvbnRlbnQ9ezxNZXNzYWdlIGVycm9yIGxpc3Q9e09iamVjdC52YWx1ZXMoZXJyb3JzKX0gLz59XG5cdFx0XHRvbj1cImhvdmVyXCJcblx0XHQvPlxuXHQpIDogKFxuXHRcdDxCdXR0b24gcG9zaXRpdmUgdHlwZT1cInN1Ym1pdFwiIGZsb2F0ZWQ9XCJyaWdodFwiPlxuXHRcdFx0U2F2ZVxuXHRcdDwvQnV0dG9uPlxuXHQpO1xuXG5cdC8vIFJlbmRlciBmb3JtXG5cdHJldHVybiAoXG5cdFx0PEZvcm0gZXJyb3I9e2hhc0Vycm9yc30gd2FybmluZz17aGFzV2FybmluZ3N9IG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuXHRcdFx0e2l0ZW0uZm9ybSh7aGFuZGxlQ2hhbmdlLCB2YWx1ZXMsIGRhdGEsIGZpZWxkRXJyb3J9KX1cblx0XHRcdHtzYXZlQnV0dG9ufVxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdHJlc2V0Rm9ybSgpO1xuXHRcdFx0XHRcdG9uSGlkZUZvcm0oKTtcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0Q2FuY2VsXG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L0Zvcm0+XG5cdCk7XG59XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtCdXR0b259IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtBY3Rpb25Gb3JtU2lkZWJhckl0ZW0sIENvbnRlbnREYXRhfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2dldENvbG9yLCBnZXRJY29uLCBnZXRUZXh0fSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge0FjdGlvbkZvcm19IGZyb20gJy4vQWN0aW9uRm9ybSc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmNvbnRlbnQuY29tcG9uZW50cy5BY3Rpb25Gb3JtU2lkZWJhckl0ZW1Db21wb25lbnQnKTtcblxuaW50ZXJmYWNlIEFjdGlvbkZvcm1TaWRlYmFySXRlbUNvbXBvbmVudFByb3BzPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiB7XG5cdGl0ZW06IEFjdGlvbkZvcm1TaWRlYmFySXRlbTxULCBLPjtcblx0ZGF0YTogQ29udGVudERhdGE8VCwgSz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25Gb3JtU2lkZWJhckl0ZW1Db21wb25lbnQ8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHtcblx0aXRlbSxcblx0ZGF0YSxcbn06IEFjdGlvbkZvcm1TaWRlYmFySXRlbUNvbXBvbmVudFByb3BzPFQsIEs+KSB7XG5cdGNvbnN0IFtpc0VkaXQsIHNldElzRWRpdF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cblx0aWYgKGlzRWRpdCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uRm9ybVxuXHRcdFx0XHRpdGVtPXtpdGVtfVxuXHRcdFx0XHRkYXRhPXtkYXRhfVxuXHRcdFx0XHRvbkhpZGVGb3JtPXsoKSA9PiB7XG5cdFx0XHRcdFx0c2V0SXNFZGl0KGZhbHNlKTtcblx0XHRcdFx0fX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGljb24gPSBnZXRJY29uKGl0ZW0sIGRhdGEpO1xuXG5cdC8vIFJlbmRlciBhY3Rpb24gYnV0dG9uXG5cdHJldHVybiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Zmx1aWRcblx0XHRcdGNvbXBhY3Rcblx0XHRcdGNvbG9yPXtnZXRDb2xvcihpdGVtLCBkYXRhKX1cblx0XHRcdGljb249eyEhaWNvbn1cblx0XHRcdGxhYmVsUG9zaXRpb249e2ljb24gPyAnbGVmdCcgOiB1bmRlZmluZWR9XG5cdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdHNldElzRWRpdCh0cnVlKTtcblx0XHRcdH19XG5cdFx0PlxuXHRcdFx0e2ljb259XG5cdFx0XHR7Z2V0VGV4dChpdGVtLCBkYXRhKX1cblx0XHQ8L0J1dHRvbj5cblx0KTtcbn1cbiIsImltcG9ydCB0eXBlIHtEZWZpbmVSb3V0ZU9wdGlvbnN9IGZyb20gJ0BpbXBlcml1bS9yb3V0ZXInO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QnV0dG9ufSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uU2lkZWJhckl0ZW0sIENvbnRlbnREYXRhfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2dldENvbG9yLCBnZXRJY29uLCBnZXRUZXh0fSBmcm9tICcuLi91dGlscyc7XG5cbmludGVyZmFjZSBBY3Rpb25TaWRlYmFySXRlbUNvbXBvbmVudFByb3BzPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiB7XG5cdGl0ZW06IEFjdGlvblNpZGViYXJJdGVtPFQsIEs+O1xuXHRkYXRhOiBDb250ZW50RGF0YTxULCBLPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFjdGlvblNpZGViYXJJdGVtQ29tcG9uZW50PFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPih7aXRlbSwgZGF0YX06IEFjdGlvblNpZGViYXJJdGVtQ29tcG9uZW50UHJvcHM8VCwgSz4pIHtcblx0Y29uc3QgaWNvbiA9IGdldEljb24oaXRlbSwgZGF0YSk7XG5cblx0cmV0dXJuIChcblx0XHQ8QnV0dG9uXG5cdFx0XHRmbHVpZFxuXHRcdFx0Y29tcGFjdFxuXHRcdFx0Y29sb3I9e2dldENvbG9yKGl0ZW0sIGRhdGEpfVxuXHRcdFx0aWNvbj17ISFpY29ufVxuXHRcdFx0bGFiZWxQb3NpdGlvbj17aWNvbiA/ICdsZWZ0JyA6IHVuZGVmaW5lZH1cblx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0aXRlbS5vbkNsaWNrKGRhdGEpO1xuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHR7aWNvbn1cblx0XHRcdHtnZXRUZXh0KGl0ZW0sIGRhdGEpfVxuXHRcdDwvQnV0dG9uPlxuXHQpO1xufVxuIiwiaW1wb3J0IHR5cGUge0RlZmluZVJvdXRlT3B0aW9uc30gZnJvbSAnQGltcGVyaXVtL3JvdXRlcic7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7RGF0YUhvb2tzfSBmcm9tICcuLi8uLi9kYXRhaG9va3MvRGF0YUhvb2tzJztcbmltcG9ydCB7c29ydFdlaWdodGVkSXRlbXN9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7dXNlQnVpbGRDb250ZW50RGF0YX0gZnJvbSAnLi4vaG9va3MvdXNlQnVpbGRDb250ZW50RGF0YSc7XG5pbXBvcnQgdHlwZSB7UGFnZSwgUm91dGVQYXJhbWV0ZXJzfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0hlYWRlcn0gZnJvbSAnLi9IZWFkZXInO1xuaW1wb3J0IHtTaWRlYmFySXRlbVdyYXBwZXJ9IGZyb20gJy4vU2lkZWJhckl0ZW1XcmFwcGVyJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuY3NzJztcblxuY29uc3QgZCA9IGRlYnVnKCdpbXBlcml1bS5sYXlvdXQuY29udGVudC5jb21wb25lbnRzLkNvbnRlbnRDb21wb25lbnQnKTtcblxuaW50ZXJmYWNlIENvbnRlbnRDb21wb25lbnRQcm9wczxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4ge1xuXHRwYWdlOiBQYWdlPFQsIEs+O1xuXHRwYXJhbXM6IFJvdXRlUGFyYW1ldGVyczxUW0tdWydwYXJhbXMnXT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb250ZW50Q29tcG9uZW50PFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPih7cGFnZSwgcGFyYW1zfTogQ29udGVudENvbXBvbmVudFByb3BzPFQsIEs+KSB7XG5cdGNvbnN0IGRhdGEgPSB1c2VCdWlsZENvbnRlbnREYXRhKHtzdGF0ZVNlbGVjdG9ySG9vazogcGFnZS5zdGF0ZVNlbGVjdG9ySG9vaywgcGFyYW1zfSk7XG5cblx0Y29uc3QgY29udGVudCA9IHBhZ2UuY29udGVudChkYXRhKTtcblx0Y29uc3Qgc2lkZWJhckl0ZW1zID0gc29ydFdlaWdodGVkSXRlbXMocGFnZS5zaWRlYmFyIHx8IFtdKTtcblxuXHRjb25zdCBzaWRlYmFyID1cblx0XHRzaWRlYmFySXRlbXMubGVuZ3RoID4gMCA/IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPXtgJHtzdHlsZXMuc2lkZWJhcn0gaW1wZXJpdW1Db250ZW50U2lkZWJhcmB9PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YCR7c3R5bGVzLmFjdGlvbnNIZWFkZXJ9IGltcGVyaXVtQ29udGVudFNpZGViYXJIZWFkZXJgfT5cblx0XHRcdFx0XHQ8aDM+QWN0aW9uczwvaDM+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7c2lkZWJhckl0ZW1zLm1hcCgoc2IsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2lkZWJhckl0ZW19IGtleT17aW5kZXh9PlxuXHRcdFx0XHRcdFx0XHQ8U2lkZWJhckl0ZW1XcmFwcGVyIGl0ZW09e3NifSBwYXJhbXM9e3BhcmFtc30gZGF0YT17ZGF0YX0gLz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSA6IG51bGw7XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17YCR7c3R5bGVzLnBhcmVudH0gaW1wZXJpdW1Db250ZW50V3JhcHBlclBhcmVudGB9PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9e2Ake3N0eWxlcy53cmFwcGVyfSBpbXBlcml1bUNvbnRlbnRXcmFwcGVyYH0+XG5cdFx0XHRcdDxIZWFkZXIgaGVhZGVyPXtwYWdlLmhlYWRlcn0gZGF0YT17ZGF0YX0gLz5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9e2Ake3N0eWxlcy5jb250ZW50fSBpbXBlcml1bUNvbnRlbnRgfT57Y29udGVudH08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0e3NpZGViYXJ9XG5cdFx0XHQ8RGF0YUhvb2tzIGRhdGFIb29rcz17cGFnZS5kYXRhSG9va3MgfHwgW119IC8+XG5cdFx0PC9kaXY+XG5cdCk7XG59XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCB0eXBlIHtDb250ZW50RGF0YSwgQ3VzdG9tU2lkZWJhckl0ZW19IGZyb20gJy4uL3R5cGVzJztcblxuaW50ZXJmYWNlIEN1c3RvbVNpZGViYXJJdGVtQ29tcG9uZW50UHJvcHM8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IHtcblx0aXRlbTogQ3VzdG9tU2lkZWJhckl0ZW08VCwgSz47XG5cdGRhdGE6IENvbnRlbnREYXRhPFQsIEs+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3VzdG9tU2lkZWJhckl0ZW1Db21wb25lbnQ8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHtpdGVtLCBkYXRhfTogQ3VzdG9tU2lkZWJhckl0ZW1Db21wb25lbnRQcm9wczxULCBLPikge1xuXHRyZXR1cm4gaXRlbS5yZW5kZXIoZGF0YSk7XG59XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge0NvbnRlbnREYXRhLCBDb250ZW50SGVhZGVyfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLmNzcyc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmNvbnRlbnQuY29tcG9uZW50cy5IZWFkZXInKTtcblxuaW50ZXJmYWNlIEhlYWRlclByb3BzPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiB7XG5cdGhlYWRlcjogQ29udGVudEhlYWRlcjxULCBLPjtcblx0ZGF0YTogQ29udGVudERhdGE8VCwgSz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXI8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHtkYXRhLCBoZWFkZXJ9OiBIZWFkZXJQcm9wczxULCBLPikge1xuXHRpZiAoaGVhZGVyKSB7XG5cdFx0bGV0IGhlYWRlckluZm8gPSB7XG5cdFx0XHR0aXRsZTogJycsXG5cdFx0fTtcblx0XHRpZiAodHlwZW9mIGhlYWRlciA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGhlYWRlckluZm8udGl0bGUgPSBoZWFkZXI7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgaGVhZGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRoZWFkZXJJbmZvID0gaGVhZGVyKGRhdGEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWFkZXJJbmZvID0gaGVhZGVyO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9e2Ake3N0eWxlcy5oZWFkZXJ9IGltcGVyaXVtQ29udGVudEhlYWRlcmB9PlxuXHRcdFx0XHQ8aDI+e2hlYWRlckluZm8udGl0bGV9PC9oMj5cblx0XHRcdDwvZGl2PlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0xpbmt9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHtCdXR0b259IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtBY3Rpb25Gb3JtU2lkZWJhckl0ZW0sIEFjdGlvblNpZGViYXJJdGVtLCBDb250ZW50RGF0YSwgQ3VzdG9tU2lkZWJhckl0ZW0sIERpdmlkZXJTaWRlYmFySXRlbSwgU2lkZWJhckl0ZW19IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7Z2V0Q29sb3IsIGdldEljb24sIGdldFJvdXRlVG8sIGdldFRleHR9IGZyb20gJy4uL3V0aWxzJztcblxuaW50ZXJmYWNlIFBsYWluU2lkZWJhckl0ZW1Qcm9wczxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4ge1xuXHRpdGVtOiBFeGNsdWRlPFNpZGViYXJJdGVtPFQsIEs+LCBDdXN0b21TaWRlYmFySXRlbTxULCBLPiB8IEFjdGlvblNpZGViYXJJdGVtPFQsIEs+IHwgQWN0aW9uRm9ybVNpZGViYXJJdGVtPFQsIEs+IHwgRGl2aWRlclNpZGViYXJJdGVtPFQsIEs+Pjtcblx0ZGF0YTogQ29udGVudERhdGE8VCwgSz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQbGFpblNpZGViYXJJdGVtPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPih7aXRlbSwgZGF0YX06IFBsYWluU2lkZWJhckl0ZW1Qcm9wczxULCBLPikge1xuXHRjb25zdCBpY29uID0gZ2V0SWNvbihpdGVtLCBkYXRhKTtcblxuXHRyZXR1cm4gKFxuXHRcdDxCdXR0b24gZmx1aWQgY29tcGFjdCBjb2xvcj17Z2V0Q29sb3IoaXRlbSwgZGF0YSl9IGljb249eyEhaWNvbn0gbGFiZWxQb3NpdGlvbj17aWNvbiA/ICdsZWZ0JyA6IHVuZGVmaW5lZH0gYXM9e0xpbmt9IHRvPXtnZXRSb3V0ZVRvKGl0ZW0sIGRhdGEpfT5cblx0XHRcdHtpY29ufVxuXHRcdFx0e2dldFRleHQoaXRlbSwgZGF0YSl9XG5cdFx0PC9CdXR0b24+XG5cdCk7XG59XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQge1F1ZXJ5fSBmcm9tICdtaW5nbyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtEaXZpZGVyfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge3VzZUJ1aWxkQ29udGVudERhdGF9IGZyb20gJy4uL2hvb2tzL3VzZUJ1aWxkQ29udGVudERhdGEnO1xuaW1wb3J0IHR5cGUge0NvbnRlbnREYXRhLCBSb3V0ZVBhcmFtZXRlcnMsIFNpZGViYXJJdGVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2lzQWN0aW9uRm9ybVNpZGViYXJJdGVtLCBpc0FjdGlvblNpZGViYXJJdGVtLCBpc0N1c3RvbVNpZGViYXJJdGVtLCBpc0RpdmlkZXJTaWRlYmFySXRlbX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtBY3Rpb25Gb3JtU2lkZWJhckl0ZW1Db21wb25lbnR9IGZyb20gJy4vQWN0aW9uRm9ybVNpZGViYXJJdGVtQ29tcG9uZW50JztcbmltcG9ydCB7QWN0aW9uU2lkZWJhckl0ZW1Db21wb25lbnR9IGZyb20gJy4vQWN0aW9uU2lkZWJhckl0ZW1Db21wb25lbnQnO1xuaW1wb3J0IHtDdXN0b21TaWRlYmFySXRlbUNvbXBvbmVudH0gZnJvbSAnLi9DdXN0b21TaWRlYmFySXRlbUNvbXBvbmVudCc7XG5pbXBvcnQge1BsYWluU2lkZWJhckl0ZW19IGZyb20gJy4vUGxhaW5TaWRlYmFySXRlbSc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmNvbnRlbnQuY29tcG9uZW50cy5TaWRlYmFySXRlbVdyYXBwZXInKTtcblxuaW50ZXJmYWNlIFNpZGViYXJJdGVtV3JhcHBlclByb3BzPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiB7XG5cdGl0ZW06IFNpZGViYXJJdGVtPFQsIEs+O1xuXHRkYXRhPzogQ29udGVudERhdGE8VCwgSz47XG5cdHBhcmFtczogUm91dGVQYXJhbWV0ZXJzPFRbS11bJ3BhcmFtcyddPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNpZGViYXJJdGVtV3JhcHBlcjxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oe2l0ZW0sIGRhdGE6IHBhcmVudERhdGEsIHBhcmFtc306IFNpZGViYXJJdGVtV3JhcHBlclByb3BzPFQsIEs+KSB7XG5cdGNvbnN0IGRhdGEgPSB1c2VCdWlsZENvbnRlbnREYXRhKHtkYXRhOiBwYXJlbnREYXRhLCBzdGF0ZVNlbGVjdG9ySG9vazogaXRlbS5zdGF0ZVNlbGVjdG9ySG9vaywgcGFyYW1zfSk7XG5cblx0Ly8gQ2hlY2sgaWYgdmlzaWJsZVxuXHRpZiAoaXRlbS52aXNpYmxlKSB7XG5cdFx0aWYgKHR5cGVvZiBpdGVtLnZpc2libGUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGlmICghaXRlbS52aXNpYmxlKGRhdGEpKSByZXR1cm4gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcSA9IG5ldyBRdWVyeShpdGVtLnZpc2libGUgfHwge30pO1xuXHRcdFx0aWYgKCFxLnRlc3QoZGF0YSkpIHJldHVybiBudWxsO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpc0N1c3RvbVNpZGViYXJJdGVtKGl0ZW0pKSB7XG5cdFx0cmV0dXJuIDxDdXN0b21TaWRlYmFySXRlbUNvbXBvbmVudCBpdGVtPXtpdGVtfSBkYXRhPXtkYXRhfSAvPjtcblx0fVxuXG5cdGlmIChpc0FjdGlvblNpZGViYXJJdGVtKGl0ZW0pKSB7XG5cdFx0cmV0dXJuIDxBY3Rpb25TaWRlYmFySXRlbUNvbXBvbmVudCBpdGVtPXtpdGVtfSBkYXRhPXtkYXRhfSAvPjtcblx0fVxuXG5cdGlmIChpc0FjdGlvbkZvcm1TaWRlYmFySXRlbShpdGVtKSkge1xuXHRcdHJldHVybiA8QWN0aW9uRm9ybVNpZGViYXJJdGVtQ29tcG9uZW50IGl0ZW09e2l0ZW19IGRhdGE9e2RhdGF9IC8+O1xuXHR9XG5cblx0aWYgKGlzRGl2aWRlclNpZGViYXJJdGVtKGl0ZW0pKSB7XG5cdFx0cmV0dXJuIDxEaXZpZGVyIC8+O1xuXHR9XG5cblx0Ly8gQHRzLWlnbm9yZSBUaGVzZSB0eXBlcyBzaG91bGQgd29yaywgbm90IHN1cmUgd2h5IGl0J3Mgbm90LiBSdW50aW1lIGNvZGUgaXMgZmluZS5cblx0cmV0dXJuIDxQbGFpblNpZGViYXJJdGVtIGl0ZW09e2l0ZW19IGRhdGE9e2RhdGF9IC8+O1xufVxuIiwiaW1wb3J0IHR5cGUge1JvdXRlcywgRGVmaW5lUm91dGVPcHRpb25zLCBLZXllZFJvdXRlUmVuZGVyRm5zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtDb250ZW50Q29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvQ29udGVudENvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7UGFnZXMsIFJvdXRlUGFyYW1ldGVyc30gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmNvbnRlbnQuY3JlYXRlUGFnZXMnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhZ2VzPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnM+KHJvdXRlczogUm91dGVzPFQ+LCBwYWdlczogUGFnZXM8VD4pIHtcblx0Y29uc3QgcmVuZGVyUm91dGVQcm9wc09iaiA9IE9iamVjdC5rZXlzKHJvdXRlcy50eXBlcykucmVkdWNlKChtZW1vLCBrZXkpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4ubWVtbyxcblx0XHRcdFtrZXldOiAocGFyYW1zOiBSb3V0ZVBhcmFtZXRlcnM8VFt0eXBlb2Yga2V5XVsncGFyYW1zJ10+KSA9PiB7XG5cdFx0XHRcdHJldHVybiA8Q29udGVudENvbXBvbmVudCBwYWdlPXtwYWdlc1trZXldfSBwYXJhbXM9e3BhcmFtc30gLz47XG5cdFx0XHR9LFxuXHRcdH07XG5cdH0sIHt9IGFzIEtleWVkUm91dGVSZW5kZXJGbnM8VD4pO1xuXG5cdHJldHVybiByb3V0ZXMucmVuZGVyUm91dGVQcm9wcyhyZW5kZXJSb3V0ZVByb3BzT2JqKTtcbn1cbiIsImltcG9ydCB0eXBlIHtEaXZpZGVyU2lkZWJhckl0ZW19IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZGl2aWRlclNpZGViYXJJdGVtOiBEaXZpZGVyU2lkZWJhckl0ZW08YW55LCBhbnk+ID0ge1xuXHR0ZXh0OiAnJyxcblx0ZGl2aWRlcjogdHJ1ZSxcbn07XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCB0eXBlIHtVc2VCdWlsZERhdGFQYXJhbXN9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUJ1aWxkRGF0YSc7XG5pbXBvcnQge3VzZUJ1aWxkRGF0YX0gZnJvbSAnLi4vLi4vaG9va3MvdXNlQnVpbGREYXRhJztcbmltcG9ydCB0eXBlIHtDb250ZW50RGF0YSwgUm91dGVQYXJhbWV0ZXJzfSBmcm9tICcuLi90eXBlcyc7XG5cbmludGVyZmFjZSBVc2VCdWlsZENvbnRlbnREYXRhUGFyYW1zPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiBleHRlbmRzIFVzZUJ1aWxkRGF0YVBhcmFtcyB7XG5cdGRhdGE/OiBDb250ZW50RGF0YTxULCBLPjtcblx0cGFyYW1zOiBSb3V0ZVBhcmFtZXRlcnM8VFtLXVsncGFyYW1zJ10+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQnVpbGRDb250ZW50RGF0YTxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oe1xuXHRkYXRhLFxuXHRzdGF0ZVNlbGVjdG9ySG9vayxcblx0cm91dGVJdGVtLFxuXHRwYXJhbXMsXG59OiBVc2VCdWlsZENvbnRlbnREYXRhUGFyYW1zPFQsIEs+KSB7XG5cdGNvbnN0IGJ1aWxkRGF0YSA9IHVzZUJ1aWxkRGF0YSh7ZGF0YSwgc3RhdGVTZWxlY3Rvckhvb2ssIHJvdXRlSXRlbX0pO1xuXHRyZXR1cm4ge1xuXHRcdC4uLmJ1aWxkRGF0YSxcblx0XHRwYXJhbXMsXG5cdH07XG59XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zLCBQYXJhbWV0ZXJzRnJvbUFzc2VydGlvbn0gZnJvbSAnQGltcGVyaXVtL3JvdXRlcic7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7U2VtYW50aWNDT0xPUlMsIFNlbWFudGljSUNPTlN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtSb3V0ZUl0ZW0sIFZpc2liaWxpdHlJdGVtLCBXZWlnaHRlZEl0ZW19IGZyb20gJy4uL2NvbW1vbkl0ZW1zJztcbmltcG9ydCB0eXBlIHtEYXRhSG9va0l0ZW19IGZyb20gJy4uL2RhdGFob29rcy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RGF0YSwgU3RhdGVTZWxlY3Rvckhvb2t9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgUm91dGVQYXJhbWV0ZXJzPFQgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZD4gPSBUIGV4dGVuZHMgcmVhZG9ubHkgc3RyaW5nW10gPyBQYXJhbWV0ZXJzRnJvbUFzc2VydGlvbjxUPiA6IG5ldmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnREYXRhPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiBleHRlbmRzIERhdGEge1xuXHRwYXJhbXM6IFJvdXRlUGFyYW1ldGVyczxUW0tdWydwYXJhbXMnXT47XG59XG5cbmV4cG9ydCB0eXBlIENvbnRlbnQ8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+ID0gKGRhdGE6IENvbnRlbnREYXRhPFQsIEs+KSA9PiBKU1guRWxlbWVudDtcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IGV4dGVuZHMgV2VpZ2h0ZWRJdGVtLCBWaXNpYmlsaXR5SXRlbSB7XG5cdHRleHQ6IHN0cmluZyB8ICgoZGF0YTogQ29udGVudERhdGE8VCwgSz4pID0+IHN0cmluZyk7XG5cdGljb24/OiBTZW1hbnRpY0lDT05TIHwgKChkYXRhOiBDb250ZW50RGF0YTxULCBLPikgPT4gU2VtYW50aWNJQ09OUyk7XG5cdGNvbG9yPzogU2VtYW50aWNDT0xPUlMgfCAoKGRhdGE6IENvbnRlbnREYXRhPFQsIEs+KSA9PiBTZW1hbnRpY0NPTE9SUyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGl2aWRlclNpZGViYXJJdGVtPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiBleHRlbmRzIEJhc2VTaWRlYmFySXRlbTxULCBLPiB7XG5cdGRpdmlkZXI6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IGV4dGVuZHMgQmFzZVNpZGViYXJJdGVtPFQsIEs+IHtcblx0b25DbGljazogKGRhdGE6IENvbnRlbnREYXRhPFQsIEs+KSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQWN0aW9uRm9ybVNpZGViYXJJdGVtRm9ybVBhcmFtczxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4ge1xuXHR2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cdGhhbmRsZUNoYW5nZTogKGU6IFJlYWN0LkNoYW5nZUV2ZW50PGFueT4pID0+IHZvaWQ7XG5cdGZpZWxkRXJyb3I6IChmaWVsZE5hbWU6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbjtcblx0ZGF0YTogQ29udGVudERhdGE8VCwgSz47XG59XG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkZvcm1TaWRlYmFySXRlbTxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4gZXh0ZW5kcyBCYXNlU2lkZWJhckl0ZW08VCwgSz4ge1xuXHRmb3JtOiAocGFyYW1zOiBBY3Rpb25Gb3JtU2lkZWJhckl0ZW1Gb3JtUGFyYW1zPFQsIEs+KSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG5cdGluaXRpYWxWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgKChkYXRhOiBDb250ZW50RGF0YTxULCBLPikgPT4gUmVjb3JkPHN0cmluZywgYW55Pik7XG5cdG9uU3VibWl0PzogKHZhbHVlczogUmVjb3JkPHN0cmluZywgYW55PiwgZGF0YTogQ29udGVudERhdGE8VCwgSz4pID0+IHZvaWQ7XG5cdHZhbGlkYXRpb25TY2hlbWE/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IGV4dGVuZHMgV2VpZ2h0ZWRJdGVtLCBWaXNpYmlsaXR5SXRlbSB7XG5cdHJlbmRlcjogKGRhdGE6IENvbnRlbnREYXRhPFQsIEs+KSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFNpZGViYXJJdGVtPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9XG5cdHwgKEJhc2VTaWRlYmFySXRlbTxULCBLPiAmIFJvdXRlSXRlbSlcblx0fCBBY3Rpb25TaWRlYmFySXRlbTxULCBLPlxuXHR8IEN1c3RvbVNpZGViYXJJdGVtPFQsIEs+XG5cdHwgQWN0aW9uRm9ybVNpZGViYXJJdGVtPFQsIEs+XG5cdHwgRGl2aWRlclNpZGViYXJJdGVtPFQsIEs+O1xuXG5leHBvcnQgdHlwZSBDb250ZW50SGVhZGVyPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9XG5cdHwgc3RyaW5nXG5cdHwge3RpdGxlOiBzdHJpbmc7IGljb24/OiBzdHJpbmd9IC8vIFRPRE8gaWNvbiBzaG91bGQgcHJvYmFibHkgYmUgU2VtYW50aWNJQ09OU1xuXHR8ICgoZGF0YTogQ29udGVudERhdGE8VCwgSz4pID0+IHt0aXRsZTogc3RyaW5nOyBpY29uPzogc3RyaW5nfSlcblx0fCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZTxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4ge1xuXHRkYXRhSG9va3M/OiBEYXRhSG9va0l0ZW1bXTtcblx0c3RhdGVTZWxlY3Rvckhvb2s/OiBTdGF0ZVNlbGVjdG9ySG9vayB8IFN0YXRlU2VsZWN0b3JIb29rW107XG5cdGNvbnRlbnQ6IENvbnRlbnQ8VCwgSz47XG5cdGhlYWRlcj86IENvbnRlbnRIZWFkZXI8VCwgSz47XG5cdHNpZGViYXI/OiBTaWRlYmFySXRlbTxULCBLPltdO1xufVxuXG5leHBvcnQgdHlwZSBQYWdlczxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zPiA9IHtcblx0W2tleSBpbiBrZXlvZiBUXTogUGFnZTxULCBrZXk+O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBY3Rpb25TaWRlYmFySXRlbTxULCBLPiB7XG5cdHJldHVybiAhISh2YWx1ZSBhcyBBY3Rpb25TaWRlYmFySXRlbTxULCBLPikub25DbGljaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uRm9ybVNpZGViYXJJdGVtPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPih2YWx1ZTogYW55KTogdmFsdWUgaXMgQWN0aW9uRm9ybVNpZGViYXJJdGVtPFQsIEs+IHtcblx0cmV0dXJuICEhKHZhbHVlIGFzIEFjdGlvbkZvcm1TaWRlYmFySXRlbTxULCBLPikuZm9ybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VzdG9tU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBDdXN0b21TaWRlYmFySXRlbTxULCBLPiB7XG5cdHJldHVybiAhISh2YWx1ZSBhcyBDdXN0b21TaWRlYmFySXRlbTxULCBLPikucmVuZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaXZpZGVyU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBEaXZpZGVyU2lkZWJhckl0ZW08VCwgSz4ge1xuXHRyZXR1cm4gKHZhbHVlIGFzIERpdmlkZXJTaWRlYmFySXRlbTxULCBLPikuZGl2aWRlcjtcbn1cbiIsImltcG9ydCB0eXBlIHtEZWZpbmVSb3V0ZU9wdGlvbnN9IGZyb20gJ0BpbXBlcml1bS9yb3V0ZXInO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SWNvbiwgU2VtYW50aWNDT0xPUlN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtSb3V0ZUl0ZW19IGZyb20gJy4uL2NvbW1vbkl0ZW1zJztcbmltcG9ydCB0eXBlIHtCYXNlU2lkZWJhckl0ZW0sIENvbnRlbnREYXRhfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEljb248VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KGl0ZW06IEJhc2VTaWRlYmFySXRlbTxULCBLPiwgZGF0YTogQ29udGVudERhdGE8VCwgSz4pIHtcblx0aWYgKGl0ZW0uaWNvbikge1xuXHRcdGNvbnN0IGljb25OYW1lID0gdHlwZW9mIGl0ZW0uaWNvbiA9PT0gJ2Z1bmN0aW9uJyA/IGl0ZW0uaWNvbihkYXRhKSA6IGl0ZW0uaWNvbjtcblx0XHRyZXR1cm4gPEljb24gbmFtZT17aWNvbk5hbWV9IC8+O1xuXHR9XG5cdHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVUbzxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oaXRlbTogUm91dGVJdGVtLCBkYXRhOiBDb250ZW50RGF0YTxULCBLPikge1xuXHRpZiAoaXRlbS50bykge1xuXHRcdHJldHVybiB0eXBlb2YgaXRlbS50byA9PT0gJ2Z1bmN0aW9uJyA/IGl0ZW0udG8oZGF0YSkgOiBpdGVtLnRvO1xuXHR9XG5cdHJldHVybiAnJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHQ8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KGl0ZW06IEJhc2VTaWRlYmFySXRlbTxULCBLPiwgZGF0YTogQ29udGVudERhdGE8VCwgSz4pIHtcblx0cmV0dXJuIHR5cGVvZiBpdGVtLnRleHQgPT09ICdmdW5jdGlvbicgPyBpdGVtLnRleHQoZGF0YSkgOiBpdGVtLnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvcjxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oaXRlbTogQmFzZVNpZGViYXJJdGVtPFQsIEs+LCBkYXRhOiBDb250ZW50RGF0YTxULCBLPik6IFNlbWFudGljQ09MT1JTIHtcblx0aWYgKCFpdGVtLmNvbG9yKSByZXR1cm4gJ2JsdWUnO1xuXHRyZXR1cm4gdHlwZW9mIGl0ZW0uY29sb3IgPT09ICdmdW5jdGlvbicgPyBpdGVtLmNvbG9yKGRhdGEpIDogaXRlbS5jb2xvcjtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQge2NvbXBvc2V9IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VMb2NhdGlvbn0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQge0V4ZWN1dGVEYXRhSG9va30gZnJvbSAnLi9FeGVjdXRlRGF0YUhvb2snO1xuaW1wb3J0IHR5cGUge0RhdGFIb29rSXRlbX0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmRhdGFob29rcy5EYXRhSG9va3MnKTtcblxuaW50ZXJmYWNlIERhdGFIb29rc1Byb3BzIHtcblx0ZGF0YUhvb2tzOiBEYXRhSG9va0l0ZW1bXTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGxheW91dCBkYXRhIGhvb2tzLiBUaGVzZSBob29rcyBzaG91bGQgcmV0dXJuIG5vdGhpbmcuIEFsbCBpbnRlcmFjdGlvbiBzaG91bGQgYmUgaW4gc2lkZS1lZmZlY3RzLCB1c3VhbGx5IHJldHJpZXZpbmcgZGF0YSBhbmQgc2V0dGluZyBSZWR1eCBzdGF0ZS5cbiAqIEBwYXJhbSBkYXRhSG9va3NcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gRGF0YUhvb2tzKHtkYXRhSG9va3N9OiBEYXRhSG9va3NQcm9wcykge1xuXHRjb25zdCB7cGF0aG5hbWV9ID0gdXNlTG9jYXRpb24oKTtcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHR7ZGF0YUhvb2tzLm1hcCgoaG9vaywgaW5kZXgpID0+IHtcblx0XHRcdFx0aWYgKHR5cGVvZiBob29rID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuXHRcdFx0XHRcdHJldHVybiA8RXhlY3V0ZURhdGFIb29rIGtleT17aW5kZXh9IGRhdGFIb29rPXtob29rfSAvPjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmbiA9IEFycmF5LmlzQXJyYXkoaG9vay5yb3V0ZU1hdGNoKSA/IGNvbXBvc2UoaG9vay5yb3V0ZU1hdGNoKSA6IGhvb2sucm91dGVNYXRjaDtcblx0XHRcdFx0Y29uc3Qgcm91dGVQYXJhbXMgPSBmbihwYXRobmFtZSk7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGhvb2suZGF0YUhvb2spKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcblx0XHRcdFx0XHRcdDxSZWFjdC5GcmFnbWVudCBrZXk9e2luZGV4fT5cblx0XHRcdFx0XHRcdFx0e2hvb2suZGF0YUhvb2subWFwKChkaCwgaW5kZXgyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiA8RXhlY3V0ZURhdGFIb29rIGtleT17aW5kZXgyfSBkYXRhSG9vaz17ZGh9IHJvdXRlUGFyYW1zPXtyb3V0ZVBhcmFtc30gLz47XG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PC9SZWFjdC5GcmFnbWVudD5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcblx0XHRcdFx0cmV0dXJuIDxFeGVjdXRlRGF0YUhvb2sgZGF0YUhvb2s9e2hvb2suZGF0YUhvb2t9IGtleT17aW5kZXh9IHJvdXRlUGFyYW1zPXtyb3V0ZVBhcmFtc30gLz47XG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KTtcbn1cbiIsImltcG9ydCB0eXBlIHtEYXRhSG9va30gZnJvbSAnLi90eXBlcyc7XG5cbmludGVyZmFjZSBFeGVjdXRlRGF0YUhvb2tQcm9wcyB7XG5cdGRhdGFIb29rOiBEYXRhSG9vaztcblx0cm91dGVQYXJhbXM/OiBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFeGVjdXRlRGF0YUhvb2soe2RhdGFIb29rLCByb3V0ZVBhcmFtc306IEV4ZWN1dGVEYXRhSG9va1Byb3BzKSB7XG5cdGRhdGFIb29rKHJvdXRlUGFyYW1zKTtcblx0cmV0dXJuIG51bGw7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHR5cGUge0xvY2F0aW9ufSBmcm9tICdoaXN0b3J5JztcbmltcG9ydCBjb21wYWN0IGZyb20gJ2xvZGFzaC9jb21wYWN0JztcbmltcG9ydCBtZXJnZSBmcm9tICdsb2Rhc2gvbWVyZ2UnO1xuaW1wb3J0IHF1ZXJ5U3RyaW5nIGZyb20gJ3F1ZXJ5c3RyaW5nJztcbmltcG9ydCB7dXNlTG9jYXRpb259IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHR5cGUge0RhdGEsIFN0YXRlU2VsZWN0b3JIb29rfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge3VzZUlzQWN0aXZlUm91dGV9IGZyb20gJy4vdXNlSXNBY3RpdmVSb3V0ZSc7XG5pbXBvcnQge3VzZVNlbGVjdFN0YXRlfSBmcm9tICcuL3VzZVNlbGVjdFN0YXRlJztcblxuY29uc3QgZCA9IGRlYnVnKCdpbXBlcml1bS5sYXlvdXQuaG9va3MudXNlQnVpbGREYXRhJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlQnVpbGREYXRhUGFyYW1zIHtcblx0ZGF0YT86IERhdGE7XG5cdHJvdXRlSXRlbT86IGFueTtcblx0c3RhdGVTZWxlY3Rvckhvb2s/OiBTdGF0ZVNlbGVjdG9ySG9vayB8IFN0YXRlU2VsZWN0b3JIb29rW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VCdWlsZERhdGEoe3N0YXRlU2VsZWN0b3JIb29rLCBkYXRhLCByb3V0ZUl0ZW19OiBVc2VCdWlsZERhdGFQYXJhbXMpIHtcblx0Y29uc3Qgc3RhdGUgPSB1c2VTZWxlY3RTdGF0ZShzdGF0ZVNlbGVjdG9ySG9vayk7XG5cdGNvbnN0IGxvYyA9IHVzZUxvY2F0aW9uKCkgYXMgTG9jYXRpb247XG5cdGNvbnN0IHJvdXRlID0ge1xuXHRcdHBhdGg6IGNvbXBhY3QobG9jLnBhdGhuYW1lLnNwbGl0KCcvJykpLFxuXHRcdGhhc2g6IGxvYy5oYXNoLFxuXHRcdHNlYXJjaDogcXVlcnlTdHJpbmcucGFyc2UobG9jLnNlYXJjaCksXG5cdH07XG5cdGNvbnN0IGFjdGl2ZSA9IHVzZUlzQWN0aXZlUm91dGUoe2xvYywgcm91dGUsIHN0YXRlLCBhY3RpdmU6IGZhbHNlfSwgcm91dGVJdGVtKTtcblx0Y29uc3QgbmV3RGF0YTogRGF0YSA9IHtzdGF0ZSwgbG9jLCBhY3RpdmUsIHJvdXRlfTtcblxuXHRyZXR1cm4gZGF0YSA/IG1lcmdlKGRhdGEsIG5ld0RhdGEpIDogbmV3RGF0YTtcbn1cbiIsImltcG9ydCB7dXNlUm91dGVNYXRjaH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCB0eXBlIHtSb3V0ZVByb3BzfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7aXNSb3V0ZUl0ZW19IGZyb20gJy4uL2NvbW1vbkl0ZW1zJztcbmltcG9ydCB0eXBlIHtEYXRhfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VJc0FjdGl2ZVJvdXRlKGRhdGE6IERhdGEsIGl0ZW0/OiBhbnkpIHtcblx0Ly8gRGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50IHJvdXRlIG1hdGNoZXMgdGhlIHRvIHJvdXRlIHRvIHNlZSBpZiB0aGUgbGluayBpcyBhY3RpdmVcblx0Y29uc3Qgcm91dGVNYXRjaE9iamVjdDogUm91dGVQcm9wcyA9IHt9O1xuXHRpZiAoaXRlbSAmJiBpc1JvdXRlSXRlbShpdGVtKSkge1xuXHRcdGlmICh0eXBlb2YgaXRlbS50byA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJvdXRlTWF0Y2hPYmplY3QucGF0aCA9IGl0ZW0udG87XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgaXRlbS50byA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cm91dGVNYXRjaE9iamVjdC5wYXRoID0gaXRlbS50byhkYXRhKTtcblx0XHR9XG5cdFx0cm91dGVNYXRjaE9iamVjdC5leGFjdCA9IGl0ZW0uZXhhY3QgIT09IGZhbHNlO1xuXHRcdHJvdXRlTWF0Y2hPYmplY3Quc2Vuc2l0aXZlID0gaXRlbS5zZW5zaXRpdmU7XG5cdFx0cm91dGVNYXRjaE9iamVjdC5zdHJpY3QgPSBpdGVtLnN0cmljdDtcblx0fVxuXHRjb25zdCByb3V0ZU1hdGNoID0gdXNlUm91dGVNYXRjaChyb3V0ZU1hdGNoT2JqZWN0KTtcblx0cmV0dXJuIHJvdXRlTWF0Y2ggIT09IG51bGw7XG59XG4iLCJpbXBvcnQgZmxvd1JpZ2h0IGZyb20gJ2xvZGFzaC9mbG93UmlnaHQnO1xuaW1wb3J0IHR5cGUge1N0YXRlU2VsZWN0b3JIb29rfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTZWxlY3RTdGF0ZShzdGF0ZVNlbGVjdG9ySG9vaz86IFN0YXRlU2VsZWN0b3JIb29rIHwgU3RhdGVTZWxlY3Rvckhvb2tbXSkge1xuXHRsZXQgZmluYWxTZWxlY3Rvckhvb2s6ICgpID0+IGFueSA9ICgpID0+ICh7fSk7XG5cdGlmIChzdGF0ZVNlbGVjdG9ySG9vaykge1xuXHRcdGZpbmFsU2VsZWN0b3JIb29rID0gQXJyYXkuaXNBcnJheShzdGF0ZVNlbGVjdG9ySG9vaykgPyBmbG93UmlnaHQoc3RhdGVTZWxlY3Rvckhvb2spIDogc3RhdGVTZWxlY3Rvckhvb2s7XG5cdH1cblx0cmV0dXJuIGZpbmFsU2VsZWN0b3JIb29rKCk7XG59XG4iLCJpbXBvcnQgdHlwZSB7RGF0YX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0N1c3RvbUxheW91dEl0ZW19IGZyb20gJy4uL3R5cGVzJztcblxuaW50ZXJmYWNlIEN1c3RvbUxheW91dEl0ZW1Db21wb25lbnRQcm9wcyB7XG5cdGl0ZW06IEN1c3RvbUxheW91dEl0ZW07XG5cdGRhdGE6IERhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDdXN0b21MYXlvdXRJdGVtQ29tcG9uZW50KHtpdGVtLCBkYXRhfTogQ3VzdG9tTGF5b3V0SXRlbUNvbXBvbmVudFByb3BzKSB7XG5cdHJldHVybiBpdGVtLnJlbmRlcihkYXRhKTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtBY2NvcmRpb24sIERyb3Bkb3duLCBJY29uLCBNZW51fSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7RGF0YX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0Ryb3Bkb3duTGF5b3V0SXRlbX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtnZXRUZXh0fSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLmNzcyc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmNvbXBvbmVudHMuRHJvcGRvd25JdGVtJyk7XG5cbmludGVyZmFjZSBEcm9wZG93bkl0ZW1Qcm9wcyB7XG5cdGl0ZW06IERyb3Bkb3duTGF5b3V0SXRlbTtcblx0Y2hpbGRyZW46IEpTWC5FbGVtZW50W107XG5cdGRhdGE6IERhdGE7XG5cdHZlcnRpY2FsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duSXRlbSh7aXRlbSwgdmVydGljYWwsIGNoaWxkcmVuLCBkYXRhfTogRHJvcGRvd25JdGVtUHJvcHMpIHtcblx0Y29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG5cdGlmICh2ZXJ0aWNhbCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudS5JdGVtIGNsYXNzTmFtZT1cImltcGVyaXVtVmVydGljYWxEcm9wZG93blwiPlxuXHRcdFx0XHQ8QWNjb3JkaW9uIGZsdWlkPlxuXHRcdFx0XHRcdDxBY2NvcmRpb24uVGl0bGVcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17c3R5bGVzLnZlcnRpY2FsRHJvcGRvd25UaXRsZX1cblx0XHRcdFx0XHRcdG9uQ2xpY2s9e2V2ID0+IHtcblx0XHRcdFx0XHRcdFx0ZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdHNldE9wZW4oIW9wZW4pO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8SWNvbiBjbGFzc05hbWU9e29wZW4gPyBzdHlsZXMudmVydGljYWxEcm9wZG93bkljb25Sb3RhdGVkIDogc3R5bGVzLnZlcnRpY2FsRHJvcGRvd25JY29ufSBuYW1lPVwiYXJyb3cgcmlnaHRcIiAvPlxuXHRcdFx0XHRcdFx0e2l0ZW0udGV4dH1cblx0XHRcdFx0XHQ8L0FjY29yZGlvbi5UaXRsZT5cblx0XHRcdFx0XHQ8QWNjb3JkaW9uLkNvbnRlbnQgYWN0aXZlPXtvcGVufSBjbGFzc05hbWU9e2Ake3N0eWxlcy52ZXJ0aWNhbERyb3Bkb3duQ29udGVudH0gaW1wZXJpdW1WZXJ0aWNhbERyb3Bkb3duQ29udGVudGB9IGNoaWxkcmVuPXtjaGlsZHJlbn0gLz5cblx0XHRcdFx0PC9BY2NvcmRpb24+XG5cdFx0XHQ8L01lbnUuSXRlbT5cblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RHJvcGRvd24gaXRlbSB0ZXh0PXtnZXRUZXh0KGl0ZW0sIGRhdGEpfSBjbGFzc05hbWU9XCJpbXBlcml1bURyb3Bkb3duXCI+XG5cdFx0XHQ8RHJvcGRvd24uTWVudSBjbGFzc05hbWU9XCJpbXBlcml1bURyb3Bkb3duQ29udGVudFwiPntjaGlsZHJlbn08L0Ryb3Bkb3duLk1lbnU+XG5cdFx0PC9Ecm9wZG93bj5cblx0KTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHtSZWFjdE5vZGUsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1NlZ21lbnR9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7dXNlTGF5b3V0U3RhdGV9IGZyb20gJy4uLy4uL3N0YXRlJztcbmltcG9ydCB7bW92ZUl0ZW1zfSBmcm9tICcuLi9tb3ZlSXRlbXMnO1xuaW1wb3J0IHR5cGUge0xheW91dERhdGF9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7TGF5b3V0SXRlbUJhcn0gZnJvbSAnLi9MYXlvdXRJdGVtQmFyJztcbmltcG9ydCB7U2Vjb25kYXJ5TWVudVRvZ2dsZUl0ZW19IGZyb20gJy4vU2Vjb25kYXJ5TWVudVRvZ2dsZUl0ZW0nO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuXG5jb25zdCBkID0gZGVidWcoJ2ltcGVyaXVtLmxheW91dC5jb21wb25lbnRzLkxheW91dCcpO1xuXG5pbnRlcmZhY2UgTGF5b3V0UHJvcHMgZXh0ZW5kcyBSZXF1aXJlZDxMYXlvdXREYXRhPiB7XG5cdGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIG1haW4gbGF5b3V0LlxuICogSGlkZXMvc2hvd3MvY29sbGFwc2VzIHRoaW5ncyBhcyBuZWVkIGZvciBtb2JpbGUgbGF5b3V0LlxuICogVHJhY2tzIHN0YXRlIHRvIHdoZXRoZXIgdGhlIHNpZGUgbWVudSBpcyBvcGVuIG9yIG5vdC5cbiAqIEBwYXJhbSBmb290ZXJcbiAqIEBwYXJhbSBtZW51YmFyXG4gKiBAcGFyYW0gc3RhdHVzYmFyXG4gKiBAcGFyYW0gY2hpbGRyZW5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0KHtmb290ZXIsIHByaW1hcnlNZW51LCBzdGF0dXNiYXIsIHNlY29uZGFyeU1lbnUsIGNoaWxkcmVufTogTGF5b3V0UHJvcHMpIHtcblx0Y29uc3Qge2lzTW9iaWxlfSA9IHVzZUxheW91dFN0YXRlKCk7XG5cdGNvbnN0IFttZW51T3Blbiwgc2V0TWVudU9wZW5dID0gdXNlU3RhdGUodHJ1ZSk7XG5cblx0Y29uc3QgcHJpbWFyeU1lbnVUb2dnbGUgPSB7XG5cdFx0c3RpY2tPbk1vYmlsZTogdHJ1ZSxcblx0XHR3ZWlnaHQ6IC0xOTk5OSxcblx0XHRyZW5kZXI6ICgpID0+IHtcblx0XHRcdGlmICghaXNNb2JpbGUpIHJldHVybiBudWxsO1xuXHRcdFx0cmV0dXJuIDxTZWNvbmRhcnlNZW51VG9nZ2xlSXRlbSBtZW51T3Blbj17bWVudU9wZW59IHNldE1lbnVPcGVuPXtzZXRNZW51T3Blbn0gLz47XG5cdFx0fSxcblx0fTtcblxuXHQvLyBEZXRlcm1pbmUgbWVudWJhciBpdGVtc1xuXHRjb25zdCBwcmltYXJ5TWVudUl0ZW1zID0gbW92ZUl0ZW1zKFxuXHRcdGlzTW9iaWxlID8gW3ByaW1hcnlNZW51VG9nZ2xlLCAuLi5wcmltYXJ5TWVudV0uZmlsdGVyKHYgPT4gdi5zdGlja09uTW9iaWxlID09PSB0cnVlKSA6IFtwcmltYXJ5TWVudVRvZ2dsZSwgLi4ucHJpbWFyeU1lbnVdLFxuXHQpO1xuXG5cdC8vIGNvbnN0IHBtaSA9IG1lcmdlSXRlbXMocHJpbWFyeU1lbnVJdGVtcyk7XG5cblx0Ly8gRGV0ZXJtaW5lIHNpZGViYXIgaXRlbXNcblx0Y29uc3Qgc2Vjb25kYXJ5TWVudUl0ZW1zID0gbW92ZUl0ZW1zKFxuXHRcdGlzTW9iaWxlXG5cdFx0XHQ/IFtcblx0XHRcdFx0XHQuLi5zZWNvbmRhcnlNZW51LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHRleHQ6ICcnLFxuXHRcdFx0XHRcdFx0bWVudTogW3ByaW1hcnlNZW51VG9nZ2xlLCAuLi5wcmltYXJ5TWVudV0uZmlsdGVyKHYgPT4gdi5zdGlja09uTW9iaWxlICE9PSB0cnVlKSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0ICBdXG5cdFx0XHQ6IHNlY29uZGFyeU1lbnUsXG5cdCk7XG5cblx0Y29uc3Qgc2Vjb25kYXJ5TWVudUNvbXAgPVxuXHRcdHNlY29uZGFyeU1lbnVJdGVtcy5sZW5ndGggPiAwID8gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJpbXBlcml1bVNlY29uZGFyeU1lbnVXcmFwcGVyXCI+XG5cdFx0XHRcdDxMYXlvdXRJdGVtQmFyXG5cdFx0XHRcdFx0aXRlbXM9e3NlY29uZGFyeU1lbnVJdGVtc31cblx0XHRcdFx0XHRpbnZlcnRlZFxuXHRcdFx0XHRcdHZlcnRpY2FsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtcblx0XHRcdFx0XHRcdGlzTW9iaWxlICYmICFtZW51T3BlblxuXHRcdFx0XHRcdFx0XHQ/IGAke3N0eWxlcy5zZWNvbmRhcnlNZW51fSAke3N0eWxlcy5zZWNvbmRhcnlNZW51SGlkZGVufSBpbXBlcml1bVNlY29uZGFyeU1lbnVgXG5cdFx0XHRcdFx0XHRcdDogYCR7c3R5bGVzLnNlY29uZGFyeU1lbnV9IGltcGVyaXVtU2Vjb25kYXJ5TWVudWBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpIDogbnVsbDtcblxuXHQvLyBEZXRlcm1pbmUgZm9vdGVyIGl0ZW1zXG5cdGNvbnN0IGZvb3Rlckl0ZW1zID0gbW92ZUl0ZW1zKGZvb3Rlcik7XG5cdGNvbnN0IGZvb3RlckNvbXAgPVxuXHRcdGZvb3Rlckl0ZW1zLmxlbmd0aCA+IDAgPyAoXG5cdFx0XHQ8TGF5b3V0SXRlbUJhciBuYW1lPVwiZm9vdGVyXCIgaXRlbXM9e2Zvb3Rlckl0ZW1zfSBjbGFzc05hbWU9e2Ake3N0eWxlcy5mb290ZXJ9IGltcGVyaXVtRm9vdGVyYH0gaW52ZXJ0ZWQgYm9yZGVybGVzcyAvPlxuXHRcdCkgOiBudWxsO1xuXG5cdC8vIERldGVybWluZSBzdGF0dXMgYmFyIGl0ZW1zXG5cdGNvbnN0IHN0YXR1c2Jhckl0ZW1zID0gbW92ZUl0ZW1zKHN0YXR1c2Jhcik7XG5cdGNvbnN0IHN0YXR1c2JhckNvbXAgPVxuXHRcdHN0YXR1c2Jhckl0ZW1zLmxlbmd0aCA+IDAgPyA8TGF5b3V0SXRlbUJhciBpdGVtcz17c3RhdHVzYmFySXRlbXN9IGludmVydGVkIGNsYXNzTmFtZT17YCR7c3R5bGVzLnN0YXR1c2Jhcn0gaW1wZXJpdW1TdGF0dXNiYXJgfSAvPiA6IG51bGw7XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17YCR7c3R5bGVzLnBhcmVudH0gaW1wZXJpdW1MYXlvdXQgJHtpc01vYmlsZSA/ICdpbXBlcml1bU1vYmlsZScgOiAnaW1wZXJpdW1Ob3RNb2JpbGUnfWB9PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJpbXBlcml1bVByaW1hcnlNZW51V3JhcHBlclwiPlxuXHRcdFx0XHQ8TGF5b3V0SXRlbUJhciBpdGVtcz17cHJpbWFyeU1lbnVJdGVtc30gaW52ZXJ0ZWQgYm9yZGVybGVzcyBjbGFzc05hbWU9e2Ake3N0eWxlcy5tZW51YmFyfSBpbXBlcml1bVByaW1hcnlNZW51YH0gLz5cblx0XHRcdFx0e3N0YXR1c2JhckNvbXB9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxTZWdtZW50IGF0dGFjaGVkIGNsYXNzTmFtZT17YCR7c3R5bGVzLmNvbnRlbnRXcmFwcGVyfSBpbXBlcml1bUxheW91dENvbnRlbnRXcmFwcGVyYH0+XG5cdFx0XHRcdHtzZWNvbmRhcnlNZW51Q29tcH1cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9e2Ake3N0eWxlcy5jb250ZW50fSBpbXBlcml1bUxheW91dENvbnRlbnRgfT57Y2hpbGRyZW59PC9kaXY+XG5cdFx0XHQ8L1NlZ21lbnQ+XG5cdFx0XHR7Zm9vdGVyQ29tcH1cblx0XHQ8L2Rpdj5cblx0KTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge01lbnVQcm9wc30gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtNZW51fSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge3NvcnRXZWlnaHRlZEl0ZW1zfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0SXRlbX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzcGxpdFBvc2l0aW9uZWRJdGVtc30gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtMYXlvdXRJdGVtV3JhcHBlcn0gZnJvbSAnLi9MYXlvdXRJdGVtV3JhcHBlcic7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmNvbXBvbmVudHMuTGF5b3V0SXRlbUJhcicpO1xuXG5pbnRlcmZhY2UgSXRlbUJhclByb3BzIGV4dGVuZHMgTWVudVByb3BzIHtcblx0aXRlbXM6IExheW91dEl0ZW1bXTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBiYXIgb2YgbWVudSBpdGVtcy5cbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gaXRlbXNcbiAqIEBwYXJhbSByZXN0XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExheW91dEl0ZW1CYXIoe2l0ZW1zLCAuLi5yZXN0fTogSXRlbUJhclByb3BzKSB7XG5cdGNvbnN0IGltcyA9IHNwbGl0UG9zaXRpb25lZEl0ZW1zKGl0ZW1zKTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG5cdGNvbnN0IGxlZnRJdGVtcyA9IHNvcnRXZWlnaHRlZEl0ZW1zKGltcy5sZWZ0SXRlbXMpLm1hcCgoaXRlbSwgaW5kZXgpID0+IDxMYXlvdXRJdGVtV3JhcHBlciBpdGVtPXtpdGVtfSBrZXk9e2luZGV4fSB2ZXJ0aWNhbD17cmVzdC52ZXJ0aWNhbH0gLz4pO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG5cdGNvbnN0IHJpZ2h0SXRlbXMgPSBzb3J0V2VpZ2h0ZWRJdGVtcyhpbXMucmlnaHRJdGVtcykubWFwKChpdGVtLCBpbmRleCkgPT4gPExheW91dEl0ZW1XcmFwcGVyIGl0ZW09e2l0ZW19IGtleT17aW5kZXh9IHZlcnRpY2FsPXtyZXN0LnZlcnRpY2FsfSAvPik7XG5cblx0cmV0dXJuIChcblx0XHQ8TWVudSB7Li4ucmVzdH0+XG5cdFx0XHR7bGVmdEl0ZW1zfVxuXHRcdFx0e3Jlc3QudmVydGljYWwgPyByaWdodEl0ZW1zIDogPE1lbnUuTWVudSBwb3NpdGlvbj1cInJpZ2h0XCI+e3JpZ2h0SXRlbXN9PC9NZW51Lk1lbnU+fVxuXHRcdDwvTWVudT5cblx0KTtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQge1F1ZXJ5fSBmcm9tICdtaW5nbyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtEcm9wZG93bn0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHt1c2VCdWlsZERhdGF9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUJ1aWxkRGF0YSc7XG5pbXBvcnQgdHlwZSB7RGF0YX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtzb3J0V2VpZ2h0ZWRJdGVtc30gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUge0xheW91dEl0ZW19IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7aXNDdXN0b21MYXlvdXRJdGVtLCBpc0Ryb3Bkb3duTGF5b3V0SXRlbSwgaXNNZW51TGF5b3V0SXRlbX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtDdXN0b21MYXlvdXRJdGVtQ29tcG9uZW50fSBmcm9tICcuL0N1c3RvbUxheW91dEl0ZW1Db21wb25lbnQnO1xuaW1wb3J0IHtEcm9wZG93bkl0ZW19IGZyb20gJy4vRHJvcGRvd25JdGVtJztcbmltcG9ydCB7TWVudUl0ZW19IGZyb20gJy4vTWVudUl0ZW0nO1xuaW1wb3J0IHtQbGFpbkl0ZW19IGZyb20gJy4vUGxhaW5JdGVtJztcblxuY29uc3QgZCA9IGRlYnVnKCdpbXBlcml1bS5sYXlvdXQuY29tcG9uZW50cy5MYXlvdXRJdGVtV3JhcHBlcicpO1xuXG5pbnRlcmZhY2UgSXRlbVdyYXBwZXJQcm9wcyB7XG5cdGl0ZW06IExheW91dEl0ZW07XG5cdGFzPzogUmVhY3QuQ29tcG9uZW50Q2xhc3M7XG5cdHZlcnRpY2FsPzogYm9vbGVhbjtcblx0ZGF0YT86IERhdGE7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbnkgdHlwZSBvZiBJdGVtLiBHYXRoZXJzIHN0YXRlLCByb3V0ZSBhbmQgb3RoZXIgZGF0YSBhbmQgY2hlY2tzIGZvciB2aXNpYmlsaXR5LlxuICogQHBhcmFtIGl0ZW1cbiAqIEBwYXJhbSBhc1xuICogQHBhcmFtIHZlcnRpY2FsXG4gKiBAcGFyYW0gcGFyZW50RGF0YVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMYXlvdXRJdGVtV3JhcHBlcih7aXRlbSwgYXMsIHZlcnRpY2FsLCBkYXRhOiBwYXJlbnREYXRhfTogSXRlbVdyYXBwZXJQcm9wcykge1xuXHRjb25zdCBkYXRhID0gdXNlQnVpbGREYXRhKHtzdGF0ZVNlbGVjdG9ySG9vazogaXRlbS5zdGF0ZVNlbGVjdG9ySG9vaywgcm91dGVJdGVtOiBpdGVtLCBkYXRhOiBwYXJlbnREYXRhfSk7XG5cblx0Ly8gQ2hlY2sgaWYgdmlzaWJsZVxuXHRpZiAoaXRlbS52aXNpYmxlKSB7XG5cdFx0aWYgKHR5cGVvZiBpdGVtLnZpc2libGUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGlmICghaXRlbS52aXNpYmxlKGRhdGEpKSByZXR1cm4gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcSA9IG5ldyBRdWVyeShpdGVtLnZpc2libGUgfHwge30pO1xuXHRcdFx0aWYgKCFxLnRlc3QoZGF0YSkpIHJldHVybiBudWxsO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpc0N1c3RvbUxheW91dEl0ZW0oaXRlbSkpIHtcblx0XHRyZXR1cm4gPEN1c3RvbUxheW91dEl0ZW1Db21wb25lbnQgaXRlbT17aXRlbX0gZGF0YT17ZGF0YX0gLz47XG5cdH1cblx0aWYgKGlzRHJvcGRvd25MYXlvdXRJdGVtKGl0ZW0pKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuXHRcdGNvbnN0IGNoaWxkcmVuID0gc29ydFdlaWdodGVkSXRlbXMoaXRlbS5kcm9wZG93bikubWFwKCh2LCBpbmRleCkgPT4gPExheW91dEl0ZW1XcmFwcGVyIGtleT17aW5kZXh9IGl0ZW09e3Z9IGFzPXtEcm9wZG93bi5JdGVtfSBkYXRhPXtkYXRhfSAvPik7XG5cdFx0cmV0dXJuIDxEcm9wZG93bkl0ZW0gaXRlbT17aXRlbX0gY2hpbGRyZW49e2NoaWxkcmVufSB2ZXJ0aWNhbD17dmVydGljYWx9IGRhdGE9e2RhdGF9IC8+O1xuXHR9XG5cdGlmIChpc01lbnVMYXlvdXRJdGVtKGl0ZW0pKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuXHRcdGNvbnN0IGNoaWxkcmVuID0gc29ydFdlaWdodGVkSXRlbXMoaXRlbS5tZW51KS5tYXAoKHYsIGluZGV4KSA9PiAoXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG5cdFx0XHQ8TGF5b3V0SXRlbVdyYXBwZXIga2V5PXtpbmRleH0gaXRlbT17dn0gYXM9e0Ryb3Bkb3duLkl0ZW19IHZlcnRpY2FsPXt2ZXJ0aWNhbH0gZGF0YT17ZGF0YX0gLz5cblx0XHQpKTtcblx0XHRyZXR1cm4gPE1lbnVJdGVtIGl0ZW09e2l0ZW19IGNoaWxkcmVuPXtjaGlsZHJlbn0gLz47XG5cdH1cblx0cmV0dXJuIDxQbGFpbkl0ZW0gaXRlbT17aXRlbX0gZGF0YT17ZGF0YX0gYXM9e2FzfSAvPjtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01lbnV9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtNZW51TGF5b3V0SXRlbX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgTWVudUl0ZW1Qcm9wcyB7XG5cdGl0ZW06IE1lbnVMYXlvdXRJdGVtO1xuXHRjaGlsZHJlbjogSlNYLkVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1lbnVJdGVtKHtpdGVtLCBjaGlsZHJlbn06IE1lbnVJdGVtUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8TWVudS5JdGVtPlxuXHRcdFx0PE1lbnUuSGVhZGVyPntpdGVtLnRleHR9PC9NZW51LkhlYWRlcj5cblx0XHRcdDxNZW51Lk1lbnUgY29tcGFjdD1cIlwiPntjaGlsZHJlbn08L01lbnUuTWVudT5cblx0XHQ8L01lbnUuSXRlbT5cblx0KTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01lbnV9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtEYXRhfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5b3V0SXRlbSwgRHJvcGRvd25MYXlvdXRJdGVtLCBMYXlvdXRJdGVtLCBNZW51TGF5b3V0SXRlbX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtnZXRJY29uLCBnZXRUZXh0LCBsaW5rUGFyYW1ldGVyc30gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbnRlcmZhY2UgUGxhaW5JdGVtUHJvcHMge1xuXHRpdGVtOiBFeGNsdWRlPExheW91dEl0ZW0sIE1lbnVMYXlvdXRJdGVtIHwgRHJvcGRvd25MYXlvdXRJdGVtIHwgQ3VzdG9tTGF5b3V0SXRlbT47XG5cdGRhdGE6IERhdGE7XG5cdGFzPzogUmVhY3QuQ29tcG9uZW50Q2xhc3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQbGFpbkl0ZW0oe2l0ZW0sIGRhdGEsIGFzfTogUGxhaW5JdGVtUHJvcHMpIHtcblx0Y29uc3QgbGlua1BhcmFtcyA9IGxpbmtQYXJhbWV0ZXJzKGl0ZW0sIGRhdGEpO1xuXG5cdGNvbnN0IEl0ZW1YID0gYXMgfHwgTWVudS5JdGVtO1xuXG5cdHJldHVybiAoXG5cdFx0PEl0ZW1YIHsuLi5saW5rUGFyYW1zfT5cblx0XHRcdHtnZXRJY29uKGl0ZW0sIGRhdGEpfVxuXHRcdFx0e2dldFRleHQoaXRlbSwgZGF0YSl9XG5cdFx0PC9JdGVtWD5cblx0KTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0ljb24sIE1lbnV9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuY3NzJztcblxuaW50ZXJmYWNlIFNlY29uZGFyeU1lbnVUb2dnbGVJdGVtUHJvcHMge1xuXHRtZW51T3BlbjogYm9vbGVhbjtcblx0c2V0TWVudU9wZW46IChvcGVuOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2Vjb25kYXJ5TWVudVRvZ2dsZUl0ZW0oe21lbnVPcGVuLCBzZXRNZW51T3Blbn06IFNlY29uZGFyeU1lbnVUb2dnbGVJdGVtUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8TWVudS5JdGVtPlxuXHRcdFx0PEljb25cblx0XHRcdFx0Y2xhc3NOYW1lPXttZW51T3BlbiA/IHN0eWxlcy5pY29uUm90YXRlZCA6IHN0eWxlcy5pY29ufVxuXHRcdFx0XHRuYW1lPXttZW51T3BlbiA/ICdjbG9zZScgOiAnc2lkZWJhcid9XG5cdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRzZXRNZW51T3BlbighbWVudU9wZW4pO1xuXHRcdFx0XHR9fVxuXHRcdFx0Lz5cblx0XHQ8L01lbnUuSXRlbT5cblx0KTtcbn1cbiIsImltcG9ydCB7dXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZURpc3BhdGNofSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge3VzZU1lZGlhUXVlcnl9IGZyb20gJ3JlYWN0LXJlc3BvbnNpdmUnO1xuaW1wb3J0IHthY3Rpb25zfSBmcm9tICcuLi8uLi9zdGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb2JpbGVMYXlvdXQoKSB7XG5cdGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblx0Y29uc3QgaXNNb2JpbGUgPSB1c2VNZWRpYVF1ZXJ5KHtxdWVyeTogJyhtYXgtd2lkdGg6IDkwMHB4KSd9KTtcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRkaXNwYXRjaChhY3Rpb25zLnNldE1vYmlsZShpc01vYmlsZSkpO1xuXHR9LCBbZGlzcGF0Y2gsIGlzTW9iaWxlXSk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IGdyb3VwQnkgZnJvbSAnbG9kYXNoL2dyb3VwQnknO1xuaW1wb3J0IHR5cGUge0xheW91dEl0ZW19IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtpc0Ryb3Bkb3duTGF5b3V0SXRlbSwgaXNNZW51TGF5b3V0SXRlbX0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0Lm1vdmVJdGVtcycpO1xuXG5mdW5jdGlvbiBwdWxsSXRlbXMoaXRlbXM6IExheW91dEl0ZW1bXSwgcHVsbGVkOiBMYXlvdXRJdGVtW10gPSBbXSk6IExheW91dEl0ZW1bXSB7XG5cdHJldHVybiBpdGVtcy5yZWR1Y2UoKG1lbW8sIGl0ZW0pID0+IHtcblx0XHRpZiAoaXNEcm9wZG93bkxheW91dEl0ZW0oaXRlbSkpIHtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdC4uLm1lbW8sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQuLi5pdGVtLFxuXHRcdFx0XHRcdGRyb3Bkb3duOiBwdWxsSXRlbXMoaXRlbS5kcm9wZG93biwgcHVsbGVkKSxcblx0XHRcdFx0fSxcblx0XHRcdF07XG5cdFx0fVxuXG5cdFx0aWYgKGlzTWVudUxheW91dEl0ZW0oaXRlbSkpIHtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdC4uLm1lbW8sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQuLi5pdGVtLFxuXHRcdFx0XHRcdG1lbnU6IHB1bGxJdGVtcyhpdGVtLm1lbnUsIHB1bGxlZCksXG5cdFx0XHRcdH0sXG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdGlmICghaXRlbS5tb3ZlVG9LZXkpIHtcblx0XHRcdHJldHVybiBbLi4ubWVtbywgaXRlbV07XG5cdFx0fVxuXG5cdFx0cHVsbGVkLnB1c2goaXRlbSk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH0sIFtdIGFzIExheW91dEl0ZW1bXSk7XG59XG5cbmZ1bmN0aW9uIGFkZEl0ZW1zKGl0ZW1zOiBMYXlvdXRJdGVtW10sIHB1bGxlZDogUmVjb3JkPHN0cmluZywgTGF5b3V0SXRlbVtdPik6IExheW91dEl0ZW1bXSB7XG5cdHJldHVybiBpdGVtcy5yZWR1Y2UoKG1lbW8sIGl0ZW0pID0+IHtcblx0XHRpZiAoaXNEcm9wZG93bkxheW91dEl0ZW0oaXRlbSkpIHtcblx0XHRcdGNvbnN0IG5ld0l0ZW1zID0gaXRlbS5rZXkgJiYgcHVsbGVkW2l0ZW0ua2V5XSA/IHB1bGxlZFtpdGVtLmtleV0gOiBbXTtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdC4uLm1lbW8sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQuLi5pdGVtLFxuXHRcdFx0XHRcdGRyb3Bkb3duOiBbLi4uYWRkSXRlbXMoaXRlbS5kcm9wZG93biwgcHVsbGVkKSwgLi4ubmV3SXRlbXNdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XTtcblx0XHR9XG5cblx0XHRpZiAoaXNNZW51TGF5b3V0SXRlbShpdGVtKSAmJiBpdGVtLmtleSkge1xuXHRcdFx0Y29uc3QgbmV3SXRlbXMgPSBpdGVtLmtleSAmJiBwdWxsZWRbaXRlbS5rZXldID8gcHVsbGVkW2l0ZW0ua2V5XSA6IFtdO1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0Li4ubWVtbyxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC4uLml0ZW0sXG5cdFx0XHRcdFx0bWVudTogWy4uLmFkZEl0ZW1zKGl0ZW0ubWVudSwgcHVsbGVkKSwgLi4ubmV3SXRlbXNdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XTtcblx0XHR9XG5cdFx0cmV0dXJuIFsuLi5tZW1vLCBpdGVtXTtcblx0fSwgW10gYXMgTGF5b3V0SXRlbVtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdmVJdGVtcyhpdGVtczogTGF5b3V0SXRlbVtdKSB7XG5cdGNvbnN0IHB1bGxlZDogTGF5b3V0SXRlbVtdID0gW107XG5cdGNvbnN0IGl0ZW1zTWludXNQdWxsZWQgPSBwdWxsSXRlbXMoaXRlbXMsIHB1bGxlZCk7XG5cdHJldHVybiBhZGRJdGVtcyhpdGVtc01pbnVzUHVsbGVkLCBncm91cEJ5KHB1bGxlZCwgJ21vdmVUb0tleScpKTtcbn1cbiIsImltcG9ydCB0eXBlIHtTZW1hbnRpY0lDT05TfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7SG9yaXpvbnRhbFBvc2l0aW9uZWRJdGVtLCBSb3V0ZUl0ZW0sIFZpc2liaWxpdHlJdGVtLCBXZWlnaHRlZEl0ZW19IGZyb20gJy4uL2NvbW1vbkl0ZW1zJztcbmltcG9ydCB0eXBlIHtEYXRhSG9va0l0ZW19IGZyb20gJy4uL2RhdGFob29rcy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RGF0YX0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGJhc2ljIHdlaWdodGVkLCBwb3NzaWJseSB2aXNpYmxlIGl0ZW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlTGF5b3V0SXRlbSBleHRlbmRzIFdlaWdodGVkSXRlbSwgVmlzaWJpbGl0eUl0ZW0ge1xuXHR0ZXh0OiBzdHJpbmcgfCAoKGRhdGE6IERhdGEpID0+IHN0cmluZyk7XG5cdGljb24/OiBTZW1hbnRpY0lDT05TIHwgKChkYXRhOiBEYXRhKSA9PiBTZW1hbnRpY0lDT05TKTtcblx0bW92ZVRvS2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUxheW91dEl0ZW0gZXh0ZW5kcyBXZWlnaHRlZEl0ZW0sIFZpc2liaWxpdHlJdGVtIHtcblx0cmVuZGVyOiAoZGF0YTogRGF0YSkgPT4gSlNYLkVsZW1lbnQgfCBudWxsO1xuXHRtb3ZlVG9LZXk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIGEgbWVudSB0aGF0IGRpc3BsYXlzIGEgZHJvcGRvd24gbGlzdCBvZiBpdGVtc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duTGF5b3V0SXRlbSBleHRlbmRzIEJhc2VMYXlvdXRJdGVtIHtcblx0ZHJvcGRvd246ICgoQmFzZUxheW91dEl0ZW0gJiBSb3V0ZUl0ZW0pIHwgQ3VzdG9tTGF5b3V0SXRlbSlbXTtcblx0a2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhIG1lbnUgdGhhdCBkaXNwbGF5cyBhIHN1YiBtZW51IChub3QgYSBkcm9wZG93biBsaXN0KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVMYXlvdXRJdGVtIGV4dGVuZHMgQmFzZUxheW91dEl0ZW0ge1xuXHRtZW51OiAoKEJhc2VMYXlvdXRJdGVtICYgUm91dGVJdGVtKSB8IEN1c3RvbUxheW91dEl0ZW0pW107XG5cdGtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSBob3Jpem9udGFsIG1lbnUgaXRlbSB3aGljaCBpcyBlaXRoZXIgYSByb3V0ZSBpdGVtIG9yIGRyb3Bkb3duIG1lbnVcbiAqL1xuZXhwb3J0IHR5cGUgTGF5b3V0SXRlbSA9IChCYXNlTGF5b3V0SXRlbSAmIFJvdXRlSXRlbSkgfCBEcm9wZG93bkxheW91dEl0ZW0gfCBNZW51TGF5b3V0SXRlbSB8IEN1c3RvbUxheW91dEl0ZW07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0RGF0YSB7XG5cdGRhdGFIb29rcz86IERhdGFIb29rSXRlbVtdO1xuXHRwcmltYXJ5TWVudT86IChMYXlvdXRJdGVtICYgSG9yaXpvbnRhbFBvc2l0aW9uZWRJdGVtKVtdOyAvLyBwcmltYXJ5IG1lbnVcblx0c3RhdHVzYmFyPzogKExheW91dEl0ZW0gJiBIb3Jpem9udGFsUG9zaXRpb25lZEl0ZW0pW107XG5cdHNlY29uZGFyeU1lbnU/OiBMYXlvdXRJdGVtW107IC8vIHNlY29uZGFyeSBtZW51XG5cdGZvb3Rlcj86IChMYXlvdXRJdGVtICYgSG9yaXpvbnRhbFBvc2l0aW9uZWRJdGVtKVtdOyAvLyBmb290ZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VzdG9tTGF5b3V0SXRlbSh2YWx1ZTogYW55KTogdmFsdWUgaXMgQ3VzdG9tTGF5b3V0SXRlbSB7XG5cdHJldHVybiAhISh2YWx1ZSBhcyBDdXN0b21MYXlvdXRJdGVtKS5yZW5kZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Ryb3Bkb3duTGF5b3V0SXRlbSh2YWx1ZTogYW55KTogdmFsdWUgaXMgRHJvcGRvd25MYXlvdXRJdGVtIHtcblx0cmV0dXJuICEhKHZhbHVlIGFzIERyb3Bkb3duTGF5b3V0SXRlbSkuZHJvcGRvd247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01lbnVMYXlvdXRJdGVtKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBNZW51TGF5b3V0SXRlbSB7XG5cdHJldHVybiAhISh2YWx1ZSBhcyBNZW51TGF5b3V0SXRlbSkubWVudTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0xpbmt9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHtJY29uLCBTZW1hbnRpY0lDT05TfSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7Um91dGVJdGVtfSBmcm9tICcuLi9jb21tb25JdGVtcyc7XG5pbXBvcnQge2lzSG9yaXpvbnRhbFBvc2l0aW9uZWRJdGVtfSBmcm9tICcuLi9jb21tb25JdGVtcyc7XG5pbXBvcnQgdHlwZSB7RGF0YX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0Jhc2VMYXlvdXRJdGVtLCBMYXlvdXRJdGVtfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBTcGxpdHMgcG9zaXRpb25lZCBpdGVtcyBpbnRvIGxlZnQgYW5kIHJpZ2h0IGFycmF5cyAoaWYgaG9yaXpvbnRhbClcbiAqIEBwYXJhbSBpdGVtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQb3NpdGlvbmVkSXRlbXM8VCBleHRlbmRzIExheW91dEl0ZW0+KGl0ZW1zOiBUW10pIHtcblx0cmV0dXJuIGl0ZW1zLnJlZHVjZShcblx0XHQobWVtbywgdikgPT4ge1xuXHRcdFx0aWYgKGlzSG9yaXpvbnRhbFBvc2l0aW9uZWRJdGVtKHYpICYmIHYucG9zaXRpb24gPT09ICdyaWdodCcpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRsZWZ0SXRlbXM6IG1lbW8ubGVmdEl0ZW1zLFxuXHRcdFx0XHRcdHJpZ2h0SXRlbXM6IFsuLi5tZW1vLnJpZ2h0SXRlbXMsIHZdLFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bGVmdEl0ZW1zOiBbLi4ubWVtby5sZWZ0SXRlbXMsIHZdLFxuXHRcdFx0XHRyaWdodEl0ZW1zOiBtZW1vLnJpZ2h0SXRlbXMsXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0e2xlZnRJdGVtczogW10sIHJpZ2h0SXRlbXM6IFtdfSBhcyB7bGVmdEl0ZW1zOiBUW107IHJpZ2h0SXRlbXM6IFRbXX0sXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rUGFyYW1ldGVycyhpdGVtOiBCYXNlTGF5b3V0SXRlbSAmIFJvdXRlSXRlbSwgZGF0YTogRGF0YSkge1xuXHRyZXR1cm4gaXRlbS50b1xuXHRcdD8ge1xuXHRcdFx0XHRhczogTGluayxcblx0XHRcdFx0YWN0aXZlOiBkYXRhLmFjdGl2ZSxcblx0XHRcdFx0dG86IHR5cGVvZiBpdGVtLnRvID09PSAnZnVuY3Rpb24nID8gaXRlbS50byhkYXRhKSA6IGl0ZW0udG8sXG5cdFx0ICB9XG5cdFx0OiB7fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHQoaXRlbTogQmFzZUxheW91dEl0ZW0sIGRhdGE6IERhdGEpIHtcblx0cmV0dXJuIHR5cGVvZiBpdGVtLnRleHQgPT09ICdmdW5jdGlvbicgPyBpdGVtLnRleHQoZGF0YSkgOiBpdGVtLnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uKGl0ZW06IEJhc2VMYXlvdXRJdGVtLCBkYXRhOiBEYXRhKSB7XG5cdC8vIEdlbmVyYXRlIHRoZSBpY29uIGNvbXBvbmVudCwgaWYgaXQgZXhpc3RzXG5cdGxldCBpY29uTmFtZTogU2VtYW50aWNJQ09OUyB8IHVuZGVmaW5lZDtcblx0aWYgKGl0ZW0uaWNvbikge1xuXHRcdGljb25OYW1lID0gdHlwZW9mIGl0ZW0uaWNvbiA9PT0gJ2Z1bmN0aW9uJyA/IGl0ZW0uaWNvbihkYXRhKSA6IGl0ZW0uaWNvbjtcblx0fVxuXHRyZXR1cm4gaXRlbS5pY29uID8gPEljb24gbmFtZT17aWNvbk5hbWV9IC8+IDogbnVsbDtcbn1cbiIsImltcG9ydCB0eXBlIHtIb2MsIEltcGVyaXVtQ2xpZW50fSBmcm9tICdAaW1wZXJpdW0vY2xpZW50JztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnRUeXBlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0RhdGFIb29rc30gZnJvbSAnLi4vZGF0YWhvb2tzL0RhdGFIb29rcyc7XG5pbXBvcnQge2lzSW1wZXJpdW1MYXlvdXRDbGllbnRNb2R1bGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7TGF5b3V0fSBmcm9tICcuL2NvbXBvbmVudHMvTGF5b3V0JztcbmltcG9ydCB0eXBlIHtMYXlvdXREYXRhfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgZCA9IGRlYnVnKCdpbXBlcml1bS5sYXlvdXQud2l0aExheW91dCcpO1xuXG5jb25zdCBpbml0aWFsTGF5b3V0TW9kdWxlRGF0YTogUmVxdWlyZWQ8TGF5b3V0RGF0YT4gPSB7XG5cdGRhdGFIb29rczogW10sXG5cdHByaW1hcnlNZW51OiBbXSxcblx0c3RhdHVzYmFyOiBbXSxcblx0c2Vjb25kYXJ5TWVudTogW10sXG5cdGZvb3RlcjogW10sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aExheW91dChjbGllbnQ6IEltcGVyaXVtQ2xpZW50KTogSG9jIHtcblx0Y29uc3QgbGF5b3V0TW9kdWxlRGF0YSA9IGNsaWVudC5tb2R1bGVzLnJlZHVjZSgobWVtbywgbW9kdWxlKSA9PiB7XG5cdFx0aWYgKGlzSW1wZXJpdW1MYXlvdXRDbGllbnRNb2R1bGUobW9kdWxlKSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0YUhvb2tzOiBbLi4uKG1lbW8uZGF0YUhvb2tzIHx8IFtdKSwgLi4uKG1vZHVsZS5sYXlvdXQuZGF0YUhvb2tzIHx8IFtdKV0sXG5cdFx0XHRcdHByaW1hcnlNZW51OiBbLi4uKG1lbW8ucHJpbWFyeU1lbnUgfHwgW10pLCAuLi4obW9kdWxlLmxheW91dC5wcmltYXJ5TWVudSB8fCBbXSldLFxuXHRcdFx0XHRzdGF0dXNiYXI6IFsuLi4obWVtby5zdGF0dXNiYXIgfHwgW10pLCAuLi4obW9kdWxlLmxheW91dC5zdGF0dXNiYXIgfHwgW10pXSxcblx0XHRcdFx0c2Vjb25kYXJ5TWVudTogWy4uLihtZW1vLnNlY29uZGFyeU1lbnUgfHwgW10pLCAuLi4obW9kdWxlLmxheW91dC5zZWNvbmRhcnlNZW51IHx8IFtdKV0sXG5cdFx0XHRcdGZvb3RlcjogWy4uLihtZW1vLmZvb3RlciB8fCBbXSksIC4uLihtb2R1bGUubGF5b3V0LmZvb3RlciB8fCBbXSldLFxuXHRcdFx0fSBhcyBSZXF1aXJlZDxMYXlvdXREYXRhPjtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbW87XG5cdH0sIGluaXRpYWxMYXlvdXRNb2R1bGVEYXRhKTtcblx0ZCgnTGF5b3V0IGl0ZW1zIHByb2Nlc3NlZCcsIGxheW91dE1vZHVsZURhdGEpO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdHJldHVybiBmdW5jdGlvbiBsYXlvdXRIb2MoV3JhcHBlZDogQ29tcG9uZW50VHlwZTxhbnk+KSB7XG5cdFx0Y29uc3QgZGlzcGxheU5hbWUgPSBXcmFwcGVkLmRpc3BsYXlOYW1lIHx8IFdyYXBwZWQubmFtZSB8fCAnJztcblxuXHRcdGZ1bmN0aW9uIFdpdGhMYXlvdXQocHJvcHM6IHVua25vd24pIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDw+XG5cdFx0XHRcdFx0PExheW91dCB7Li4ubGF5b3V0TW9kdWxlRGF0YX0+XG5cdFx0XHRcdFx0XHQ8V3JhcHBlZCB7Li4ucHJvcHN9IGxheW91dD17bGF5b3V0TW9kdWxlRGF0YX0gLz5cblx0XHRcdFx0XHQ8L0xheW91dD5cblx0XHRcdFx0XHQ8RGF0YUhvb2tzIGRhdGFIb29rcz17bGF5b3V0TW9kdWxlRGF0YS5kYXRhSG9va3N9IC8+XG5cdFx0XHRcdDwvPlxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRXaXRoTGF5b3V0LmRpc3BsYXlOYW1lID0gYHdpdGhMYXlvdXQoJHtkaXNwbGF5TmFtZX0pYDtcblxuXHRcdHJldHVybiBXaXRoTGF5b3V0O1xuXHR9O1xufVxuIiwiaW1wb3J0IHtjcmVhdGVTbGljZUhvb2t9IGZyb20gJ0BpbXBlcml1bS9zdGF0ZSc7XG5pbXBvcnQge2NyZWF0ZVNsaWNlLCBQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuZXhwb3J0IGNvbnN0IHN0YXRlID0gY3JlYXRlU2xpY2Uoe1xuXHRuYW1lOiAnaW1wZXJpdW1MYXlvdXQnLFxuXHRpbml0aWFsU3RhdGU6IHtcblx0XHRpc01vYmlsZTogZmFsc2UsXG5cdH0sXG5cdHJlZHVjZXJzOiB7XG5cdFx0c2V0TW9iaWxlOiAoc3QsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxib29sZWFuPikgPT4gKHsuLi5zdCwgaXNNb2JpbGU6IGFjdGlvbi5wYXlsb2FkfSksXG5cdH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IHVzZUxheW91dFN0YXRlID0gY3JlYXRlU2xpY2VIb29rKHN0YXRlKTtcblxuZXhwb3J0IGNvbnN0IHthY3Rpb25zfSA9IHN0YXRlO1xuIiwiaW1wb3J0IHR5cGUge0ltcGVyaXVtQ2xpZW50TW9kdWxlfSBmcm9tICdAaW1wZXJpdW0vY2xpZW50JztcbmltcG9ydCB0eXBlIHtMb2NhdGlvbn0gZnJvbSAnaGlzdG9yeSc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0RGF0YX0gZnJvbSAnLi9sYXlvdXQvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIGFueT47XG4vKipcbiAqIEEgaG9vayB0aGF0IHNlbGVjdHMgZnJvbSByZWR1eCBzdGF0ZS5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhdGVTZWxlY3Rvckhvb2sgPSAoKSA9PiBTdGF0ZTtcbi8qKlxuICogVGhlIHZpc2liaWxpdHkgcXVlcnkgY2FuIGVpdGhlciBiZSBhIG1pbmdvIHF1ZXJ5IG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgYm9vbGVhbi4gVGhlIGRhdGEgaXMgYW4gb2JqZWN0IHdpdGggdGhlIHJvdXRlciBwYXRoIG1lcmdlZCB3aXRoIGFueSBzdGF0ZSBzZWxlY3RvciBob29rIGRhdGEuXG4gKi9cbmV4cG9ydCB0eXBlIFZpc2liaWxpdHlRdWVyeUZuID0gKGRhdGE6IERhdGEpID0+IGJvb2xlYW47XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0bG9jOiBMb2NhdGlvbjtcblx0cm91dGU6IHtcblx0XHRwYXRoOiBzdHJpbmdbXTtcblx0XHRoYXNoOiBzdHJpbmc7XG5cdFx0c2VhcmNoOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXHR9O1xuXHRzdGF0ZTogU3RhdGU7XG5cdGFjdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbXBlcml1bUxheW91dENsaWVudE1vZHVsZSBleHRlbmRzIEltcGVyaXVtQ2xpZW50TW9kdWxlIHtcblx0bGF5b3V0OiBMYXlvdXREYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbXBlcml1bUxheW91dENsaWVudE1vZHVsZShtb2R1bGU6IEltcGVyaXVtQ2xpZW50TW9kdWxlKTogbW9kdWxlIGlzIEltcGVyaXVtTGF5b3V0Q2xpZW50TW9kdWxlIHtcblx0Y29uc3QgbGF5b3V0TW9kdWxlID0gbW9kdWxlIGFzIEltcGVyaXVtTGF5b3V0Q2xpZW50TW9kdWxlO1xuXHRyZXR1cm4gbGF5b3V0TW9kdWxlLmxheW91dCAhPT0gdW5kZWZpbmVkO1xufVxuIiwiaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuaW1wb3J0IHNvcnRCeSBmcm9tICdsb2Rhc2gvc29ydEJ5JztcbmltcG9ydCB0eXBlIHtXZWlnaHRlZEl0ZW19IGZyb20gJy4vY29tbW9uSXRlbXMnO1xuXG4vKipcbiAqIFNvcnRzIHdlaWdodGVkIGl0ZW1zXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0V2VpZ2h0ZWRJdGVtcyA9IG1lbW9pemUoZnVuY3Rpb24gc29ydFdlaWdodGVkSXRlbXNJbXBsPFQgZXh0ZW5kcyBXZWlnaHRlZEl0ZW0+KGl0ZW1zOiBUW10pIHtcblx0cmV0dXJuIHNvcnRCeShpdGVtcywgdiA9PiB2LndlaWdodCB8fCAwKTtcbn0pO1xuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1syXS51c2VbMl0hLi9zdHlsZXMuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5cbiAgICAgIG9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG4gICAgXG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzJdIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzJdIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdLnVzZVsyXSEuL3N0eWxlcy5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuXG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cblxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcblxuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdXBkYXRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cblxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcblxuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cblxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG5cbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuXG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cblxuICBjc3MgKz0gb2JqLmNzcztcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBpbXBlcml1bS9zdGF0ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAcmVkdXhqcy90b29sa2l0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkB0aHgvY29udHJvbHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZGVidWdcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL2NvbXBhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL2Zsb3dSaWdodFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2gvZnBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL2dyb3VwQnlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL21lbW9pemVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL21lcmdlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaC9zb3J0QnlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibWluZ29cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicXVlcnlzdHJpbmdcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtcmVkdXhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtcmVzcG9uc2l2ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1yb3V0ZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtcm91dGVyLWRvbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic2VtYW50aWMtdWktcmVhY3RcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB0eXBlIHtJbXBlcml1bVN0YXRlQ2xpZW50TW9kdWxlfSBmcm9tICdAaW1wZXJpdW0vc3RhdGUnO1xuaW1wb3J0IHt1c2VNb2JpbGVMYXlvdXR9IGZyb20gJy4vbGF5b3V0L2hvb2tzL3VzZU1vYmlsZUxheW91dCc7XG5pbXBvcnQge3dpdGhMYXlvdXR9IGZyb20gJy4vbGF5b3V0L3dpdGhMYXlvdXQnO1xuaW1wb3J0IHtzdGF0ZX0gZnJvbSAnLi9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1wZXJpdW1MYXlvdXRDbGllbnRNb2R1bGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbGF5b3V0Q2xpZW50TW9kdWxlKCk6IEltcGVyaXVtU3RhdGVDbGllbnRNb2R1bGUgJiBJbXBlcml1bUxheW91dENsaWVudE1vZHVsZSB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogJ0BpbXBlcml1bS9sYXlvdXQnLFxuXHRcdG9yZGVyOiAzMCxcblx0XHRob2NzOiBbd2l0aExheW91dF0sXG5cdFx0c3RhdGUsXG5cdFx0bGF5b3V0OiB7XG5cdFx0XHRkYXRhSG9va3M6IFt1c2VNb2JpbGVMYXlvdXRdLFxuXHRcdH0sXG5cdH07XG59XG5cbmV4cG9ydCB0eXBlIHtMYXlvdXREYXRhfSBmcm9tICcuL2xheW91dC90eXBlcyc7XG5leHBvcnQge3VzZUxheW91dFN0YXRlLCBhY3Rpb25zIGFzIGxheW91dEFjdGlvbnN9IGZyb20gJy4vc3RhdGUnO1xuZXhwb3J0IHtjcmVhdGVQYWdlc30gZnJvbSAnLi9jb250ZW50L2NyZWF0ZVBhZ2VzJztcbmV4cG9ydCB0eXBlIHtJbXBlcml1bUxheW91dENsaWVudE1vZHVsZX0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQge2RpdmlkZXJTaWRlYmFySXRlbX0gZnJvbSAnLi9jb250ZW50L2RpdmlkZXJTaWRlYmFySXRlbSc7XG4iXSwibmFtZXMiOlsiaXNIb3Jpem9udGFsUG9zaXRpb25lZEl0ZW0iLCJ2YWx1ZSIsInBvc2l0aW9uIiwic3RpY2tPbk1vYmlsZSIsImlzUm91dGVJdGVtIiwidG8iLCJleGFjdCIsInN0cmljdCIsInNlbnNpdGl2ZSIsInVzZVRGb3JtIiwiZGVidWciLCJSZWFjdCIsIkJ1dHRvbiIsIkZvcm0iLCJJY29uIiwiTWVzc2FnZSIsIlBvcHVwIiwiZCIsIkFjdGlvbkZvcm0iLCJpdGVtIiwiZGF0YSIsIm9uSGlkZUZvcm0iLCJpbml0aWFsVmFsdWVzIiwib25TdWJtaXQiLCJzdWJtaXRWYWx1ZXMiLCJlbmFibGVSZWluaXRpYWxpemUiLCJ2YWxpZGF0aW9uU2NoZW1hIiwiaGFzRXJyb3JzIiwiaGFzV2FybmluZ3MiLCJoYW5kbGVTdWJtaXQiLCJoYW5kbGVDaGFuZ2UiLCJ2YWx1ZXMiLCJyZXNldEZvcm0iLCJlcnJvcnMiLCJmaWVsZEVycm9yIiwic2F2ZUJ1dHRvbiIsIk9iamVjdCIsImZvcm0iLCJ1c2VTdGF0ZSIsImdldENvbG9yIiwiZ2V0SWNvbiIsImdldFRleHQiLCJBY3Rpb25Gb3JtU2lkZWJhckl0ZW1Db21wb25lbnQiLCJpc0VkaXQiLCJzZXRJc0VkaXQiLCJpY29uIiwidW5kZWZpbmVkIiwiQWN0aW9uU2lkZWJhckl0ZW1Db21wb25lbnQiLCJvbkNsaWNrIiwiRGF0YUhvb2tzIiwic29ydFdlaWdodGVkSXRlbXMiLCJ1c2VCdWlsZENvbnRlbnREYXRhIiwiSGVhZGVyIiwiU2lkZWJhckl0ZW1XcmFwcGVyIiwic3R5bGVzIiwiQ29udGVudENvbXBvbmVudCIsInBhZ2UiLCJwYXJhbXMiLCJzdGF0ZVNlbGVjdG9ySG9vayIsImNvbnRlbnQiLCJzaWRlYmFySXRlbXMiLCJzaWRlYmFyIiwibGVuZ3RoIiwiYWN0aW9uc0hlYWRlciIsIm1hcCIsInNiIiwiaW5kZXgiLCJzaWRlYmFySXRlbSIsInBhcmVudCIsIndyYXBwZXIiLCJoZWFkZXIiLCJkYXRhSG9va3MiLCJDdXN0b21TaWRlYmFySXRlbUNvbXBvbmVudCIsInJlbmRlciIsImhlYWRlckluZm8iLCJ0aXRsZSIsIkxpbmsiLCJnZXRSb3V0ZVRvIiwiUGxhaW5TaWRlYmFySXRlbSIsIlF1ZXJ5IiwiRGl2aWRlciIsImlzQWN0aW9uRm9ybVNpZGViYXJJdGVtIiwiaXNBY3Rpb25TaWRlYmFySXRlbSIsImlzQ3VzdG9tU2lkZWJhckl0ZW0iLCJpc0RpdmlkZXJTaWRlYmFySXRlbSIsInBhcmVudERhdGEiLCJ2aXNpYmxlIiwicSIsInRlc3QiLCJjcmVhdGVQYWdlcyIsInJvdXRlcyIsInBhZ2VzIiwicmVuZGVyUm91dGVQcm9wc09iaiIsImtleXMiLCJ0eXBlcyIsInJlZHVjZSIsIm1lbW8iLCJrZXkiLCJyZW5kZXJSb3V0ZVByb3BzIiwiZGl2aWRlclNpZGViYXJJdGVtIiwidGV4dCIsImRpdmlkZXIiLCJ1c2VCdWlsZERhdGEiLCJyb3V0ZUl0ZW0iLCJidWlsZERhdGEiLCJpY29uTmFtZSIsImNvbG9yIiwiY29tcG9zZSIsInVzZUxvY2F0aW9uIiwiRXhlY3V0ZURhdGFIb29rIiwicGF0aG5hbWUiLCJob29rIiwiZm4iLCJBcnJheSIsImlzQXJyYXkiLCJyb3V0ZU1hdGNoIiwicm91dGVQYXJhbXMiLCJkYXRhSG9vayIsImRoIiwiaW5kZXgyIiwiY29tcGFjdCIsIm1lcmdlIiwicXVlcnlTdHJpbmciLCJ1c2VJc0FjdGl2ZVJvdXRlIiwidXNlU2VsZWN0U3RhdGUiLCJzdGF0ZSIsImxvYyIsInJvdXRlIiwicGF0aCIsInNwbGl0IiwiaGFzaCIsInNlYXJjaCIsInBhcnNlIiwiYWN0aXZlIiwibmV3RGF0YSIsInVzZVJvdXRlTWF0Y2giLCJyb3V0ZU1hdGNoT2JqZWN0IiwiZmxvd1JpZ2h0IiwiZmluYWxTZWxlY3Rvckhvb2siLCJDdXN0b21MYXlvdXRJdGVtQ29tcG9uZW50IiwiQWNjb3JkaW9uIiwiRHJvcGRvd24iLCJNZW51IiwiRHJvcGRvd25JdGVtIiwidmVydGljYWwiLCJjaGlsZHJlbiIsIm9wZW4iLCJzZXRPcGVuIiwidmVydGljYWxEcm9wZG93blRpdGxlIiwiZXYiLCJzdG9wUHJvcGFnYXRpb24iLCJ2ZXJ0aWNhbERyb3Bkb3duSWNvblJvdGF0ZWQiLCJ2ZXJ0aWNhbERyb3Bkb3duSWNvbiIsInZlcnRpY2FsRHJvcGRvd25Db250ZW50IiwiU2VnbWVudCIsInVzZUxheW91dFN0YXRlIiwibW92ZUl0ZW1zIiwiTGF5b3V0SXRlbUJhciIsIlNlY29uZGFyeU1lbnVUb2dnbGVJdGVtIiwiTGF5b3V0IiwiZm9vdGVyIiwicHJpbWFyeU1lbnUiLCJzdGF0dXNiYXIiLCJzZWNvbmRhcnlNZW51IiwiaXNNb2JpbGUiLCJtZW51T3BlbiIsInNldE1lbnVPcGVuIiwicHJpbWFyeU1lbnVUb2dnbGUiLCJ3ZWlnaHQiLCJwcmltYXJ5TWVudUl0ZW1zIiwiZmlsdGVyIiwidiIsInNlY29uZGFyeU1lbnVJdGVtcyIsIm1lbnUiLCJzZWNvbmRhcnlNZW51Q29tcCIsInNlY29uZGFyeU1lbnVIaWRkZW4iLCJmb290ZXJJdGVtcyIsImZvb3RlckNvbXAiLCJzdGF0dXNiYXJJdGVtcyIsInN0YXR1c2JhckNvbXAiLCJtZW51YmFyIiwiY29udGVudFdyYXBwZXIiLCJzcGxpdFBvc2l0aW9uZWRJdGVtcyIsIkxheW91dEl0ZW1XcmFwcGVyIiwiaXRlbXMiLCJyZXN0IiwiaW1zIiwibGVmdEl0ZW1zIiwicmlnaHRJdGVtcyIsImlzQ3VzdG9tTGF5b3V0SXRlbSIsImlzRHJvcGRvd25MYXlvdXRJdGVtIiwiaXNNZW51TGF5b3V0SXRlbSIsIk1lbnVJdGVtIiwiUGxhaW5JdGVtIiwiYXMiLCJkcm9wZG93biIsIkl0ZW0iLCJsaW5rUGFyYW1ldGVycyIsImxpbmtQYXJhbXMiLCJJdGVtWCIsImljb25Sb3RhdGVkIiwidXNlRWZmZWN0IiwidXNlRGlzcGF0Y2giLCJ1c2VNZWRpYVF1ZXJ5IiwiYWN0aW9ucyIsInVzZU1vYmlsZUxheW91dCIsImRpc3BhdGNoIiwicXVlcnkiLCJzZXRNb2JpbGUiLCJncm91cEJ5IiwicHVsbEl0ZW1zIiwicHVsbGVkIiwibW92ZVRvS2V5IiwicHVzaCIsImFkZEl0ZW1zIiwibmV3SXRlbXMiLCJpdGVtc01pbnVzUHVsbGVkIiwiaXNJbXBlcml1bUxheW91dENsaWVudE1vZHVsZSIsImluaXRpYWxMYXlvdXRNb2R1bGVEYXRhIiwid2l0aExheW91dCIsImNsaWVudCIsImxheW91dE1vZHVsZURhdGEiLCJtb2R1bGVzIiwibW9kdWxlIiwibGF5b3V0IiwibGF5b3V0SG9jIiwiV3JhcHBlZCIsImRpc3BsYXlOYW1lIiwibmFtZSIsIldpdGhMYXlvdXQiLCJwcm9wcyIsImNyZWF0ZVNsaWNlSG9vayIsImNyZWF0ZVNsaWNlIiwiaW5pdGlhbFN0YXRlIiwicmVkdWNlcnMiLCJzdCIsImFjdGlvbiIsInBheWxvYWQiLCJsYXlvdXRNb2R1bGUiLCJtZW1vaXplIiwic29ydEJ5Iiwic29ydFdlaWdodGVkSXRlbXNJbXBsIiwibGF5b3V0Q2xpZW50TW9kdWxlIiwib3JkZXIiLCJob2NzIiwibGF5b3V0QWN0aW9ucyJdLCJzb3VyY2VSb290IjoiIn0=
|
|
3665
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LGlCQUFpQjtXQUN4RTtXQUNBLGdEQUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0xBO0FBQ0E7QUFDQTtBQUdPLFNBQVN3RSxrQkFBVCxHQUFzRjtBQUM1RixTQUFPO0FBQ05kLElBQUFBLElBQUksRUFBRSxrQkFEQTtBQUVOZSxJQUFBQSxLQUFLLEVBQUUsRUFGRDtBQUdOQyxJQUFBQSxJQUFJLEVBQUUsQ0FBQ3pCLDBEQUFELENBSEE7QUFJTjVGLElBQUFBLEtBQUssRUFBTEEseUNBSk07QUFLTmlHLElBQUFBLE1BQU0sRUFBRTtBQUNQdkssTUFBQUEsU0FBUyxFQUFFLENBQUNtSiwwRUFBRDtBQURKO0FBTEYsR0FBUDtBQVNBO0FBR0Q7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2NvbnRlbnQvY29tcG9uZW50cy9zdHlsZXMuY3NzIiwid2VicGFjazovLy8uL2xheW91dC9jb21wb25lbnRzL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzIiwid2VicGFjazovLy8uL2NvbW1vbkl0ZW1zLnRzIiwid2VicGFjazovLy8uL2NvbnRlbnQvY29tcG9uZW50cy9BY3Rpb25Gb3JtLnRzeCIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2NvbXBvbmVudHMvQWN0aW9uRm9ybVNpZGViYXJJdGVtQ29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2NvbXBvbmVudHMvQWN0aW9uU2lkZWJhckl0ZW1Db21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL2NvbnRlbnQvY29tcG9uZW50cy9Db250ZW50Q29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2NvbXBvbmVudHMvQ3VzdG9tU2lkZWJhckl0ZW1Db21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL2NvbnRlbnQvY29tcG9uZW50cy9IZWFkZXIudHN4Iiwid2VicGFjazovLy8uL2NvbnRlbnQvY29tcG9uZW50cy9QbGFpblNpZGViYXJJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2NvbXBvbmVudHMvU2lkZWJhckl0ZW1XcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2NyZWF0ZVBhZ2VzLnRzeCIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2RpdmlkZXJTaWRlYmFySXRlbS50cyIsIndlYnBhY2s6Ly8vLi9jb250ZW50L2hvb2tzL3VzZUJ1aWxkQ29udGVudERhdGEudHMiLCJ3ZWJwYWNrOi8vLy4vY29udGVudC90eXBlcy50cyIsIndlYnBhY2s6Ly8vLi9jb250ZW50L3V0aWxzLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRhaG9va3MvRGF0YUhvb2tzLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRhaG9va3MvRXhlY3V0ZURhdGFIb29rLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRhaG9va3MvRXhlY3V0ZVBlcm1pc3Npb25Ib29rLnRzeCIsIndlYnBhY2s6Ly8vLi9kYXRhaG9va3MvUGVybWlzc2lvbkhvb2tzLnRzeCIsIndlYnBhY2s6Ly8vLi9ob29rcy91c2VCdWlsZERhdGEudHMiLCJ3ZWJwYWNrOi8vLy4vaG9va3MvdXNlSXNBY3RpdmVSb3V0ZS50cyIsIndlYnBhY2s6Ly8vLi9ob29rcy91c2VTZWxlY3RQZXJtaXNzaW9uLnRzIiwid2VicGFjazovLy8uL2hvb2tzL3VzZVNlbGVjdFN0YXRlLnRzIiwid2VicGFjazovLy8uL2xheW91dC9jb21wb25lbnRzL0N1c3RvbUxheW91dEl0ZW1Db21wb25lbnQudHN4Iiwid2VicGFjazovLy8uL2xheW91dC9jb21wb25lbnRzL0Ryb3Bkb3duSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0L2NvbXBvbmVudHMvTGF5b3V0LnRzeCIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvY29tcG9uZW50cy9MYXlvdXRJdGVtQmFyLnRzeCIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvY29tcG9uZW50cy9MYXlvdXRJdGVtV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0L2NvbXBvbmVudHMvTWVudUl0ZW0udHN4Iiwid2VicGFjazovLy8uL2xheW91dC9jb21wb25lbnRzL1BsYWluSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0L2NvbXBvbmVudHMvU2Vjb25kYXJ5TWVudVRvZ2dsZUl0ZW0udHN4Iiwid2VicGFjazovLy8uL2xheW91dC9ob29rcy91c2VNb2JpbGVMYXlvdXQudHMiLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0L21vdmVJdGVtcy50cyIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvdHlwZXMudHMiLCJ3ZWJwYWNrOi8vLy4vbGF5b3V0L3V0aWxzLnRzeCIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvd2l0aExheW91dC50c3giLCJ3ZWJwYWNrOi8vLy4vc3RhdGUudHMiLCJ3ZWJwYWNrOi8vLy4vdHlwZXMudHMiLCJ3ZWJwYWNrOi8vLy4vdXRpbHMudHMiLCJ3ZWJwYWNrOi8vLy4vY29udGVudC9jb21wb25lbnRzL3N0eWxlcy5jc3M/ZDFmNSIsIndlYnBhY2s6Ly8vLi9sYXlvdXQvY29tcG9uZW50cy9zdHlsZXMuY3NzPzE2ZjAiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAaW1wZXJpdW0vYXV0aC1jbGllbnRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAaW1wZXJpdW0vc3RhdGVcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJAcmVkdXhqcy90b29sa2l0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwiQHRoeC9jb250cm9sc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImRlYnVnXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoL2NvbXBhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJsb2Rhc2gvZmxvd1JpZ2h0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoL2ZwXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoL2dyb3VwQnlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJsb2Rhc2gvbWVtb2l6ZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImxvZGFzaC9tZXJnZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcImxvZGFzaC9zb3J0QnlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJtaW5nb1wiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcInF1ZXJ5c3RyaW5nXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1yZWR1eFwiIiwid2VicGFjazovLy9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LXJlc3BvbnNpdmVcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1yb3V0ZXJcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1yb3V0ZXItZG9tXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QvanN4LWRldi1ydW50aW1lXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIGNvbW1vbmpzIFwic2VtYW50aWMtdWktcmVhY3RcIiIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vLy4vaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuY29udGVudC1jb21wb25lbnRzLXN0eWxlc19fcGFyZW50LS1xY1pxdyB7XFxuXFx0ZmxleDogMTtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4uY29udGVudC1jb21wb25lbnRzLXN0eWxlc19fd3JhcHBlci0tbWJ6U2kge1xcblxcdGZsZXg6IDE7XFxuXFx0ZmxleC1iYXNpczogY2FsYyg2NSUpO1xcbn1cXG5cXG4uY29udGVudC1jb21wb25lbnRzLXN0eWxlc19fY29udGVudC0tZmhTWEcge1xcblxcdG1hcmdpbjogMCAwLjhyZW0gMC44cmVtIDAuOHJlbTtcXG59XFxuXFxuLmNvbnRlbnQtY29tcG9uZW50cy1zdHlsZXNfX2NvbnRlbnRGdWxsLS1rVVczXyB7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdG1hcmdpbjogMCAwO1xcbn1cXG5cXG4uY29udGVudC1jb21wb25lbnRzLXN0eWxlc19faGVhZGVyLS1OT0d5YyB7XFxuXFx0cGFkZGluZzogMC44cmVtIDAuOHJlbSAwIDAuOHJlbTtcXG5cXHRtYXJnaW4tYm90dG9tOiAwLjhyZW07XFxufVxcblxcbi5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19zaWRlYmFyLS1yTFU1UiB7XFxuXFx0bWluLXdpZHRoOiAyNTBweDtcXG5cXHRwYWRkaW5nOiAxMHB4O1xcblxcdG92ZXJmbG93LXk6IGF1dG87XFxuXFx0b3ZlcmZsb3cteDogaGlkZGVuO1xcbn1cXG5cXG4uY29udGVudC1jb21wb25lbnRzLXN0eWxlc19fc2lkZWJhckl0ZW0tLUV5bGdmIHtcXG5cXHRtYXJnaW4tYm90dG9tOiA1cHg7XFxufVxcblxcbi5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19hY3Rpb25zSGVhZGVyLS1ONnp6TSB7XFxuXFx0ZGlzcGxheTogbm9uZTtcXG59XFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xcblxcdC5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19wYXJlbnQtLXFjWnF3IHtcXG5cXHRcXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcblxcdFxcdGhlaWdodDogYXV0bztcXG5cXHR9XFxuXFx0LmNvbnRlbnQtY29tcG9uZW50cy1zdHlsZXNfX3dyYXBwZXItLW1ielNpIHtcXG5cXHRcXHRib3JkZXItcmlnaHQ6IG5vbmU7XFxuXFx0XFx0cGFkZGluZy1ib3R0b206IDIwcHg7XFxuXFx0fVxcblxcdC5jb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19zaWRlYmFyLS1yTFU1UiB7XFxuXFx0XFx0bWluLXdpZHRoOiBhdXRvO1xcblxcdH1cXG5cXHQuY29udGVudC1jb21wb25lbnRzLXN0eWxlc19fYWN0aW9uc0hlYWRlci0tTjZ6ek0ge1xcblxcdFxcdGRpc3BsYXk6IGJsb2NrO1xcblxcdFxcdG1hcmdpbi1ib3R0b206IDVweDtcXG5cXHR9XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NvbnRlbnQvY29tcG9uZW50cy9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0NBQ0MsT0FBTztDQUNQLGFBQWE7Q0FDYixtQkFBbUI7Q0FDbkIsWUFBWTtBQUNiOztBQUVBO0NBQ0MsT0FBTztDQUNQLHFCQUFxQjtBQUN0Qjs7QUFFQTtDQUNDLDhCQUE4QjtBQUMvQjs7QUFFQTtDQUNDLFlBQVk7Q0FDWixXQUFXO0FBQ1o7O0FBRUE7Q0FDQywrQkFBK0I7Q0FDL0IscUJBQXFCO0FBQ3RCOztBQUVBO0NBQ0MsZ0JBQWdCO0NBQ2hCLGFBQWE7Q0FDYixnQkFBZ0I7Q0FDaEIsa0JBQWtCO0FBQ25COztBQUVBO0NBQ0Msa0JBQWtCO0FBQ25COztBQUVBO0NBQ0MsYUFBYTtBQUNkOztBQUVBO0NBQ0M7RUFDQyxzQkFBc0I7RUFDdEIsWUFBWTtDQUNiO0NBQ0E7RUFDQyxrQkFBa0I7RUFDbEIsb0JBQW9CO0NBQ3JCO0NBQ0E7RUFDQyxlQUFlO0NBQ2hCO0NBQ0E7RUFDQyxjQUFjO0VBQ2Qsa0JBQWtCO0NBQ25CO0FBQ0RcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLnBhcmVudCB7XFxuXFx0ZmxleDogMTtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4ud3JhcHBlciB7XFxuXFx0ZmxleDogMTtcXG5cXHRmbGV4LWJhc2lzOiBjYWxjKDY1JSk7XFxufVxcblxcbi5jb250ZW50IHtcXG5cXHRtYXJnaW46IDAgMC44cmVtIDAuOHJlbSAwLjhyZW07XFxufVxcblxcbi5jb250ZW50RnVsbCB7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdG1hcmdpbjogMCAwO1xcbn1cXG5cXG4uaGVhZGVyIHtcXG5cXHRwYWRkaW5nOiAwLjhyZW0gMC44cmVtIDAgMC44cmVtO1xcblxcdG1hcmdpbi1ib3R0b206IDAuOHJlbTtcXG59XFxuXFxuLnNpZGViYXIge1xcblxcdG1pbi13aWR0aDogMjUwcHg7XFxuXFx0cGFkZGluZzogMTBweDtcXG5cXHRvdmVyZmxvdy15OiBhdXRvO1xcblxcdG92ZXJmbG93LXg6IGhpZGRlbjtcXG59XFxuXFxuLnNpZGViYXJJdGVtIHtcXG5cXHRtYXJnaW4tYm90dG9tOiA1cHg7XFxufVxcblxcbi5hY3Rpb25zSGVhZGVyIHtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG5cXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XFxuXFx0LnBhcmVudCB7XFxuXFx0XFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG5cXHRcXHRoZWlnaHQ6IGF1dG87XFxuXFx0fVxcblxcdC53cmFwcGVyIHtcXG5cXHRcXHRib3JkZXItcmlnaHQ6IG5vbmU7XFxuXFx0XFx0cGFkZGluZy1ib3R0b206IDIwcHg7XFxuXFx0fVxcblxcdC5zaWRlYmFyIHtcXG5cXHRcXHRtaW4td2lkdGg6IGF1dG87XFxuXFx0fVxcblxcdC5hY3Rpb25zSGVhZGVyIHtcXG5cXHRcXHRkaXNwbGF5OiBibG9jaztcXG5cXHRcXHRtYXJnaW4tYm90dG9tOiA1cHg7XFxuXFx0fVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmxvY2FscyA9IHtcblx0XCJwYXJlbnRcIjogXCJjb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19wYXJlbnQtLXFjWnF3XCIsXG5cdFwid3JhcHBlclwiOiBcImNvbnRlbnQtY29tcG9uZW50cy1zdHlsZXNfX3dyYXBwZXItLW1ielNpXCIsXG5cdFwiY29udGVudFwiOiBcImNvbnRlbnQtY29tcG9uZW50cy1zdHlsZXNfX2NvbnRlbnQtLWZoU1hHXCIsXG5cdFwiY29udGVudEZ1bGxcIjogXCJjb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19jb250ZW50RnVsbC0ta1VXM19cIixcblx0XCJoZWFkZXJcIjogXCJjb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19oZWFkZXItLU5PR3ljXCIsXG5cdFwic2lkZWJhclwiOiBcImNvbnRlbnQtY29tcG9uZW50cy1zdHlsZXNfX3NpZGViYXItLXJMVTVSXCIsXG5cdFwic2lkZWJhckl0ZW1cIjogXCJjb250ZW50LWNvbXBvbmVudHMtc3R5bGVzX19zaWRlYmFySXRlbS0tRXlsZ2ZcIixcblx0XCJhY3Rpb25zSGVhZGVyXCI6IFwiY29udGVudC1jb21wb25lbnRzLXN0eWxlc19fYWN0aW9uc0hlYWRlci0tTjZ6ek1cIlxufTtcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIvKiBOZWVkIHRvIHBhc3MgMTAwJSBoZWlnaHQgYWxsIHRoZSB3YXkgZG93biAqL1xcbiNyb290IHtcXG5cXHRoZWlnaHQ6IDEwMCU7XFxufVxcbiNyb290ID4gZGl2IHtcXG5cXHRoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5sYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3BhcmVudC0tc3dzOE8ge1xcblxcdG1pbi1oZWlnaHQ6IDEwMCU7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4ubGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19tZW51YmFyLS1XTWNYbiB7XFxuXFx0Ym9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xcblxcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19zdGF0dXNiYXItLUhhNGZfIHtcXG5cXHRtYXJnaW46IDAgIWltcG9ydGFudDtcXG5cXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5sYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3NlY29uZGFyeU1lbnUtLWJ5dTZ5IHtcXG5cXHRtaW4td2lkdGg6IDIyMHB4ICFpbXBvcnRhbnQ7XFxuXFx0d2lkdGg6IDEwMCUgIWltcG9ydGFudDtcXG5cXHRoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcXG5cXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxuXFx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxuXFx0b3ZlcmZsb3cteDogYXV0bzsgLyogYWRkZWQgdG8gbWFrZSB0aGUgY29udGVudCBzY3JvbGwgYW5kIG5vdCB0aGUgd2hvbGUgbGF5b3V0ICovXFxuXFx0dHJhbnNpdGlvbjogbWFyZ2luLWxlZnQgMC4zcyBlYXNlLWluLW91dDtcXG59XFxuXFxuLmxheW91dC1jb21wb25lbnRzLXN0eWxlc19fc2Vjb25kYXJ5TWVudUhpZGRlbi0tZWs3UXoge1xcblxcdG1hcmdpbi1sZWZ0OiAtMjIwcHggIWltcG9ydGFudDtcXG59XFxuXFxuLmxheW91dC1jb21wb25lbnRzLXN0eWxlc19fY29udGVudFdyYXBwZXItLVNhWUduIHtcXG5cXHRmbGV4OiAxO1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0ZmxleC1kaXJlY3Rpb246IHJvdztcXG5cXHRmbGV4LXdyYXA6IG5vd3JhcDtcXG5cXHRwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxuXFx0Ym9yZGVyOiAwIHNvbGlkIHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7IC8qIHRoaXMgaXMgYSBzZWdtZW50LCBhbmQgdGhleSBzZWVtIHRvIGhhdmUgYSAxcHggd2hpdGUgYm9yZGVyIGJ5IGRlZmF1bHQgKi9cXG5cXHRvdmVyZmxvdy15OiBhdXRvOyAvKiBhZGRlZCB0byBtYWtlIHRoZSBjb250ZW50IHNjcm9sbCBhbmQgbm90IHRoZSB3aG9sZSBsYXlvdXQgKi9cXG59XFxuXFxuLmxheW91dC1jb21wb25lbnRzLXN0eWxlc19fY29udGVudC0tSkdEdVcge1xcblxcdGZsZXg6IDE7IC8qIGNoYW5nZWQgdGhpcyB0byBoYXZlIGEgZmxleCBvZiBvbmUgaW5zdGVhZCBvZiBhdXRvIHNvIHRoZSBzaWRlIG1lbnUgZG9lc24ndCBnZXQgc3F1aXNoZWQgKi9cXG5cXHRhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xcblxcdGhlaWdodDogMTAwJTtcXG5cXHRtYXgtaGVpZ2h0OiAxMDAlOyAvKiBhZGRlZCB0byBtYWtlIHRoZSBjb250ZW50IHNjcm9sbCBhbmQgbm90IHRoZSB3aG9sZSBsYXlvdXQgKi9cXG5cXHRvdmVyZmxvdy14OiBoaWRkZW47IC8qIGFkZGVkIHRvIG1ha2UgdGhlIGNvbnRlbnQgc2Nyb2xsIGFuZCBub3QgdGhlIHdob2xlIGxheW91dCAqL1xcbn1cXG5cXG4ubGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19mb290ZXItLUE3TFNIIHtcXG5cXHRtYXJnaW46IDAgIWltcG9ydGFudDtcXG5cXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5sYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3ZlcnRpY2FsRHJvcGRvd25JY29uLS1WNjlDdyB7XFxuXFx0dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgO1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmxheW91dC1jb21wb25lbnRzLXN0eWxlc19fdmVydGljYWxEcm9wZG93bkljb25Sb3RhdGVkLS1iWnlOTyB7XFxuXFx0dHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xcblxcdHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIDtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5sYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3ZlcnRpY2FsRHJvcGRvd25UaXRsZS0tczZBc3Ege1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0Y29sb3I6ICNmZmYgIWltcG9ydGFudDtcXG59XFxuXFxuLmxheW91dC1jb21wb25lbnRzLXN0eWxlc19fdmVydGljYWxEcm9wZG93bkNvbnRlbnQtLXhHSHhhIHtcXG5cXHRwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xcblxcdG1hcmdpbjogMCAtMS4xNDI4NTcxNGVtIDAgMDtcXG5cXHRib3JkZXItcmFkaXVzOiAwO1xcbn1cXG5cXG4ubGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19pY29uLS1HdGw0dCB7XFxuXFx0dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNHMgbGluZWFyO1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmxheW91dC1jb21wb25lbnRzLXN0eWxlc19faWNvblJvdGF0ZWQtLVhCNjdZIHtcXG5cXHR0cmFuc2Zvcm06IHJvdGF0ZSgtMTgwZGVnKTtcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cztcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2xheW91dC9jb21wb25lbnRzL3N0eWxlcy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUEsOENBQThDO0FBQzlDO0NBQ0MsWUFBWTtBQUNiO0FBQ0E7Q0FDQyxZQUFZO0FBQ2I7O0FBRUE7Q0FDQyxnQkFBZ0I7Q0FDaEIsYUFBYTtDQUNiLHNCQUFzQjtBQUN2Qjs7QUFFQTtDQUNDLDJCQUEyQjtDQUMzQixvQkFBb0I7QUFDckI7O0FBRUE7Q0FDQyxvQkFBb0I7Q0FDcEIsMkJBQTJCO0FBQzVCOztBQUVBO0NBQ0MsMkJBQTJCO0NBQzNCLHNCQUFzQjtDQUN0Qix1QkFBdUI7Q0FDdkIsMkJBQTJCO0NBQzNCLG9CQUFvQjtDQUNwQixnQkFBZ0IsRUFBRSw4REFBOEQ7Q0FDaEYsd0NBQXdDO0FBQ3pDOztBQUVBO0NBQ0MsOEJBQThCO0FBQy9COztBQUVBO0NBQ0MsT0FBTztDQUNQLGFBQWE7Q0FDYixtQkFBbUI7Q0FDbkIsaUJBQWlCO0NBQ2pCLHFCQUFxQjtDQUNyQixzQ0FBc0MsRUFBRSwyRUFBMkU7Q0FDbkgsZ0JBQWdCLEVBQUUsOERBQThEO0FBQ2pGOztBQUVBO0NBQ0MsT0FBTyxFQUFFLDZGQUE2RjtDQUN0Ryx5QkFBeUI7Q0FDekIsWUFBWTtDQUNaLGdCQUFnQixFQUFFLDhEQUE4RDtDQUNoRixrQkFBa0IsRUFBRSw4REFBOEQ7QUFDbkY7O0FBRUE7Q0FDQyxvQkFBb0I7Q0FDcEIsMkJBQTJCO0FBQzVCOztBQUVBO0NBQ0MsdUJBQXVCO0NBQ3ZCLDJCQUEyQjtDQUMzQixlQUFlO0FBQ2hCOztBQUVBO0NBQ0Msd0JBQXdCO0NBQ3hCLDJCQUEyQjtDQUMzQixlQUFlO0FBQ2hCOztBQUVBO0NBQ0MsVUFBVTtDQUNWLHNCQUFzQjtBQUN2Qjs7QUFFQTtDQUNDLHlCQUF5QjtDQUN6QiwyQkFBMkI7Q0FDM0IsZ0JBQWdCO0FBQ2pCOztBQUVBO0NBQ0MsdUJBQXVCO0NBQ3ZCLGlDQUFpQztDQUNqQyxlQUFlO0FBQ2hCOztBQUVBO0NBQ0MsMEJBQTBCO0NBQzFCLDBCQUEwQjtDQUMxQixlQUFlO0FBQ2hCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8qIE5lZWQgdG8gcGFzcyAxMDAlIGhlaWdodCBhbGwgdGhlIHdheSBkb3duICovXFxuOmdsb2JhbCgjcm9vdCkge1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuOmdsb2JhbCgjcm9vdCkgPiBkaXYge1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuXFxuLnBhcmVudCB7XFxuXFx0bWluLWhlaWdodDogMTAwJTtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcblxcbi5tZW51YmFyIHtcXG5cXHRib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxuXFx0bWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5zdGF0dXNiYXIge1xcblxcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xcblxcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnNlY29uZGFyeU1lbnUge1xcblxcdG1pbi13aWR0aDogMjIwcHggIWltcG9ydGFudDtcXG5cXHR3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcblxcdGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcblxcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG5cXHRtYXJnaW46IDAgIWltcG9ydGFudDtcXG5cXHRvdmVyZmxvdy14OiBhdXRvOyAvKiBhZGRlZCB0byBtYWtlIHRoZSBjb250ZW50IHNjcm9sbCBhbmQgbm90IHRoZSB3aG9sZSBsYXlvdXQgKi9cXG5cXHR0cmFuc2l0aW9uOiBtYXJnaW4tbGVmdCAwLjNzIGVhc2UtaW4tb3V0O1xcbn1cXG5cXG4uc2Vjb25kYXJ5TWVudUhpZGRlbiB7XFxuXFx0bWFyZ2luLWxlZnQ6IC0yMjBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uY29udGVudFdyYXBwZXIge1xcblxcdGZsZXg6IDE7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRmbGV4LWRpcmVjdGlvbjogcm93O1xcblxcdGZsZXgtd3JhcDogbm93cmFwO1xcblxcdHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG5cXHRib3JkZXI6IDAgc29saWQgdHJhbnNwYXJlbnQgIWltcG9ydGFudDsgLyogdGhpcyBpcyBhIHNlZ21lbnQsIGFuZCB0aGV5IHNlZW0gdG8gaGF2ZSBhIDFweCB3aGl0ZSBib3JkZXIgYnkgZGVmYXVsdCAqL1xcblxcdG92ZXJmbG93LXk6IGF1dG87IC8qIGFkZGVkIHRvIG1ha2UgdGhlIGNvbnRlbnQgc2Nyb2xsIGFuZCBub3QgdGhlIHdob2xlIGxheW91dCAqL1xcbn1cXG5cXG4uY29udGVudCB7XFxuXFx0ZmxleDogMTsgLyogY2hhbmdlZCB0aGlzIHRvIGhhdmUgYSBmbGV4IG9mIG9uZSBpbnN0ZWFkIG9mIGF1dG8gc28gdGhlIHNpZGUgbWVudSBkb2Vzbid0IGdldCBzcXVpc2hlZCAqL1xcblxcdGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdG1heC1oZWlnaHQ6IDEwMCU7IC8qIGFkZGVkIHRvIG1ha2UgdGhlIGNvbnRlbnQgc2Nyb2xsIGFuZCBub3QgdGhlIHdob2xlIGxheW91dCAqL1xcblxcdG92ZXJmbG93LXg6IGhpZGRlbjsgLyogYWRkZWQgdG8gbWFrZSB0aGUgY29udGVudCBzY3JvbGwgYW5kIG5vdCB0aGUgd2hvbGUgbGF5b3V0ICovXFxufVxcblxcbi5mb290ZXIge1xcblxcdG1hcmdpbjogMCAhaW1wb3J0YW50O1xcblxcdGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLnZlcnRpY2FsRHJvcGRvd25JY29uIHtcXG5cXHR0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyA7XFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udmVydGljYWxEcm9wZG93bkljb25Sb3RhdGVkIHtcXG5cXHR0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxuXFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgO1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnZlcnRpY2FsRHJvcGRvd25UaXRsZSB7XFxuXFx0cGFkZGluZzogMDtcXG5cXHRjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG5cXG4udmVydGljYWxEcm9wZG93bkNvbnRlbnQge1xcblxcdHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XFxuXFx0bWFyZ2luOiAwIC0xLjE0Mjg1NzE0ZW0gMCAwO1xcblxcdGJvcmRlci1yYWRpdXM6IDA7XFxufVxcblxcbi5pY29uIHtcXG5cXHR0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG5cXHR0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40cyBsaW5lYXI7XFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uaWNvblJvdGF0ZWQge1xcblxcdHRyYW5zZm9ybTogcm90YXRlKC0xODBkZWcpO1xcblxcdHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzO1xcblxcdGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5sb2NhbHMgPSB7XG5cdFwicGFyZW50XCI6IFwibGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19wYXJlbnQtLXN3czhPXCIsXG5cdFwibWVudWJhclwiOiBcImxheW91dC1jb21wb25lbnRzLXN0eWxlc19fbWVudWJhci0tV01jWG5cIixcblx0XCJzdGF0dXNiYXJcIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3N0YXR1c2Jhci0tSGE0Zl9cIixcblx0XCJzZWNvbmRhcnlNZW51XCI6IFwibGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19zZWNvbmRhcnlNZW51LS1ieXU2eVwiLFxuXHRcInNlY29uZGFyeU1lbnVIaWRkZW5cIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3NlY29uZGFyeU1lbnVIaWRkZW4tLWVrN1F6XCIsXG5cdFwiY29udGVudFdyYXBwZXJcIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX2NvbnRlbnRXcmFwcGVyLS1TYVlHblwiLFxuXHRcImNvbnRlbnRcIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX2NvbnRlbnQtLUpHRHVXXCIsXG5cdFwiZm9vdGVyXCI6IFwibGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19mb290ZXItLUE3TFNIXCIsXG5cdFwidmVydGljYWxEcm9wZG93bkljb25cIjogXCJsYXlvdXQtY29tcG9uZW50cy1zdHlsZXNfX3ZlcnRpY2FsRHJvcGRvd25JY29uLS1WNjlDd1wiLFxuXHRcInZlcnRpY2FsRHJvcGRvd25JY29uUm90YXRlZFwiOiBcImxheW91dC1jb21wb25lbnRzLXN0eWxlc19fdmVydGljYWxEcm9wZG93bkljb25Sb3RhdGVkLS1iWnlOT1wiLFxuXHRcInZlcnRpY2FsRHJvcGRvd25UaXRsZVwiOiBcImxheW91dC1jb21wb25lbnRzLXN0eWxlc19fdmVydGljYWxEcm9wZG93blRpdGxlLS1zNkFzcVwiLFxuXHRcInZlcnRpY2FsRHJvcGRvd25Db250ZW50XCI6IFwibGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX192ZXJ0aWNhbERyb3Bkb3duQ29udGVudC0teEdIeGFcIixcblx0XCJpY29uXCI6IFwibGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19pY29uLS1HdGw0dFwiLFxuXHRcImljb25Sb3RhdGVkXCI6IFwibGF5b3V0LWNvbXBvbmVudHMtc3R5bGVzX19pY29uUm90YXRlZC0tWEI2N1lcIlxufTtcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdGhpcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1tfaV1bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBtb2R1bGVzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2kyXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJpbXBvcnQgdHlwZSB7UGVybWlzc2lvblNlbGVjdG9ySG9vaywgU3RhdGVTZWxlY3Rvckhvb2ssIFZpc2liaWxpdHlRdWVyeUZufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBEZXNjcmliZXMgYW4gaXRlbSB0aGF0IGNhbiBoaWRlIGl0c2VsZiBiYXNlZCBvbiByZWR1eCBzdGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpc2liaWxpdHlJdGVtIHtcblx0c3RhdGVTZWxlY3Rvckhvb2s/OiBTdGF0ZVNlbGVjdG9ySG9vayB8IFN0YXRlU2VsZWN0b3JIb29rW107IC8vIEhvb2sgb3IgYXJyYXkgb2YgaG9va3MgdGhhdCBzZWxlY3Qgc3RhdGVcblx0cGVybWlzc2lvblNlbGVjdG9ySG9vaz86IFBlcm1pc3Npb25TZWxlY3Rvckhvb2sgfCBQZXJtaXNzaW9uU2VsZWN0b3JIb29rW107IC8vIEhvb2sgb3IgYXJyYXkgb2YgaG9va3MgdGhhdCBzZWxlY3QgcGVybWlzc2lvbnNcblx0dmlzaWJsZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgVmlzaWJpbGl0eVF1ZXJ5Rm47XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIGFuIGl0ZW0gd2l0aCBvcHRpb25hbCB3ZWlnaHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWlnaHRlZEl0ZW0ge1xuXHR3ZWlnaHQ/OiBudW1iZXI7IC8vIExhcmdlciBudW1iZXJzIG1vdmUgcmlnaHQvZG93blxufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhbiBpdGVtIHRoYXQgbGlua3MgdG8gYSByb3V0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlSXRlbTxUPiB7XG5cdHRvPzogc3RyaW5nIHwgKChkYXRhOiBUKSA9PiBzdHJpbmcpO1xuXHRleGFjdD86IGJvb2xlYW47XG5cdHN0cmljdD86IGJvb2xlYW47XG5cdHNlbnNpdGl2ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIGFuIGl0ZW0gdGhhdCBjYW4gYmUgcG9zaXRpb25lZCBob3Jpem9udGFsbHkgbGVmdCBvciByaWdodFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxQb3NpdGlvbmVkSXRlbSB7XG5cdHBvc2l0aW9uPzogJ2xlZnQnIHwgJ3JpZ2h0JzsgLy8gRGVmYXVsdCBpcyBsZWZ0XG5cdHN0aWNrT25Nb2JpbGU/OiBib29sZWFuOyAvLyBJZiB0cnVlLCB3aWxsIG5vdCBiZSBoaWRkZW4gd2hlbiBpbiBtb2JpbGUgbW9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIb3Jpem9udGFsUG9zaXRpb25lZEl0ZW0odmFsdWU6IGFueSk6IHZhbHVlIGlzIEhvcml6b250YWxQb3NpdGlvbmVkSXRlbSB7XG5cdHJldHVybiAhISgodmFsdWUgYXMgSG9yaXpvbnRhbFBvc2l0aW9uZWRJdGVtKS5wb3NpdGlvbiB8fCAodmFsdWUgYXMgSG9yaXpvbnRhbFBvc2l0aW9uZWRJdGVtKS5zdGlja09uTW9iaWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUm91dGVJdGVtPFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBSb3V0ZUl0ZW08VD4ge1xuXHRyZXR1cm4gISEoKHZhbHVlIGFzIFJvdXRlSXRlbTxUPikudG8gfHwgKHZhbHVlIGFzIFJvdXRlSXRlbTxUPikuZXhhY3QgfHwgKHZhbHVlIGFzIFJvdXRlSXRlbTxUPikuc3RyaWN0IHx8ICh2YWx1ZSBhcyBSb3V0ZUl0ZW08VD4pLnNlbnNpdGl2ZSk7XG59XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCB7dXNlVEZvcm19IGZyb20gJ0B0aHgvY29udHJvbHMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0J1dHRvbiwgRm9ybSwgSWNvbiwgTWVzc2FnZSwgUG9wdXB9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtBY3Rpb25Gb3JtU2lkZWJhckl0ZW0sIENvbnRlbnREYXRhfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmNvbnRlbnQuY29tcG9uZW50cy5BY3Rpb25Gb3JtJyk7XG5cbmludGVyZmFjZSBBY3Rpb25Gb3JtUHJvcHM8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IHtcblx0aXRlbTogQWN0aW9uRm9ybVNpZGViYXJJdGVtPFQsIEs+O1xuXHRkYXRhOiBDb250ZW50RGF0YTxULCBLPjtcblx0b25IaWRlRm9ybTogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFjdGlvbkZvcm08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHtpdGVtLCBkYXRhLCBvbkhpZGVGb3JtfTogQWN0aW9uRm9ybVByb3BzPFQsIEs+KSB7XG5cdC8vIEdldCBpbml0aWFsIHZhbHVlc1xuXHRsZXQgaW5pdGlhbFZhbHVlcyA9IHt9O1xuXHRpZiAoaXRlbS5pbml0aWFsVmFsdWVzKSB7XG5cdFx0aWYgKHR5cGVvZiBpdGVtLmluaXRpYWxWYWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGluaXRpYWxWYWx1ZXMgPSBpdGVtLmluaXRpYWxWYWx1ZXMoZGF0YSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGluaXRpYWxWYWx1ZXMgPSBpdGVtLmluaXRpYWxWYWx1ZXM7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVEZvcm1cblx0Y29uc3Qge2hhc0Vycm9ycywgaGFzV2FybmluZ3MsIGhhbmRsZVN1Ym1pdCwgaGFuZGxlQ2hhbmdlLCB2YWx1ZXMsIHJlc2V0Rm9ybSwgZXJyb3JzLCBmaWVsZEVycm9yfSA9IHVzZVRGb3JtKHtcblx0XHRpbml0aWFsVmFsdWVzLFxuXHRcdG9uU3VibWl0OiBzdWJtaXRWYWx1ZXMgPT4ge1xuXHRcdFx0aWYgKGl0ZW0ub25TdWJtaXQpIHtcblx0XHRcdFx0aXRlbS5vblN1Ym1pdChzdWJtaXRWYWx1ZXMsIGRhdGEpO1xuXHRcdFx0fVxuXHRcdFx0b25IaWRlRm9ybSgpO1xuXHRcdH0sXG5cdFx0ZW5hYmxlUmVpbml0aWFsaXplOiB0cnVlLFxuXHRcdHZhbGlkYXRpb25TY2hlbWE6IGl0ZW0udmFsaWRhdGlvblNjaGVtYSxcblx0fSk7XG5cblx0Y29uc3Qgc2F2ZUJ1dHRvbiA9IGhhc1dhcm5pbmdzID8gKFxuXHRcdDxQb3B1cFxuXHRcdFx0dHJpZ2dlcj17XG5cdFx0XHRcdDxCdXR0b24gcG9zaXRpdmUgdHlwZT1cInN1Ym1pdFwiIGZsb2F0ZWQ9XCJyaWdodFwiIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIj5cblx0XHRcdFx0XHQ8SWNvbiBuYW1lPVwiZXhjbGFtYXRpb24gY2lyY2xlXCIgY29sb3I9XCJyZWRcIiAvPlxuXHRcdFx0XHRcdFNhdmVcblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHR9XG5cdFx0XHRjb250ZW50PXs8TWVzc2FnZSBlcnJvciBsaXN0PXtPYmplY3QudmFsdWVzKGVycm9ycyl9IC8+fVxuXHRcdFx0b249XCJob3ZlclwiXG5cdFx0Lz5cblx0KSA6IChcblx0XHQ8QnV0dG9uIHBvc2l0aXZlIHR5cGU9XCJzdWJtaXRcIiBmbG9hdGVkPVwicmlnaHRcIj5cblx0XHRcdFNhdmVcblx0XHQ8L0J1dHRvbj5cblx0KTtcblxuXHQvLyBSZW5kZXIgZm9ybVxuXHRyZXR1cm4gKFxuXHRcdDxGb3JtIGVycm9yPXtoYXNFcnJvcnN9IHdhcm5pbmc9e2hhc1dhcm5pbmdzfSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cblx0XHRcdHtpdGVtLmZvcm0oe2hhbmRsZUNoYW5nZSwgdmFsdWVzLCBkYXRhLCBmaWVsZEVycm9yfSl9XG5cdFx0XHR7c2F2ZUJ1dHRvbn1cblx0XHRcdDxCdXR0b25cblx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRyZXNldEZvcm0oKTtcblx0XHRcdFx0XHRvbkhpZGVGb3JtKCk7XG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdENhbmNlbFxuXHRcdFx0PC9CdXR0b24+XG5cdFx0PC9Gb3JtPlxuXHQpO1xufVxuIiwiaW1wb3J0IHR5cGUge0RlZmluZVJvdXRlT3B0aW9uc30gZnJvbSAnQGltcGVyaXVtL3JvdXRlcic7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QnV0dG9ufSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uRm9ybVNpZGViYXJJdGVtLCBDb250ZW50RGF0YX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtnZXRDb2xvciwgZ2V0SWNvbiwgZ2V0VGV4dH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtBY3Rpb25Gb3JtfSBmcm9tICcuL0FjdGlvbkZvcm0nO1xuXG5jb25zdCBkID0gZGVidWcoJ2ltcGVyaXVtLmxheW91dC5jb250ZW50LmNvbXBvbmVudHMuQWN0aW9uRm9ybVNpZGViYXJJdGVtQ29tcG9uZW50Jyk7XG5cbmludGVyZmFjZSBBY3Rpb25Gb3JtU2lkZWJhckl0ZW1Db21wb25lbnRQcm9wczxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4ge1xuXHRpdGVtOiBBY3Rpb25Gb3JtU2lkZWJhckl0ZW08VCwgSz47XG5cdGRhdGE6IENvbnRlbnREYXRhPFQsIEs+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uRm9ybVNpZGViYXJJdGVtQ29tcG9uZW50PFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPih7XG5cdGl0ZW0sXG5cdGRhdGEsXG59OiBBY3Rpb25Gb3JtU2lkZWJhckl0ZW1Db21wb25lbnRQcm9wczxULCBLPikge1xuXHRjb25zdCBbaXNFZGl0LCBzZXRJc0VkaXRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG5cdGlmIChpc0VkaXQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvbkZvcm1cblx0XHRcdFx0aXRlbT17aXRlbX1cblx0XHRcdFx0ZGF0YT17ZGF0YX1cblx0XHRcdFx0b25IaWRlRm9ybT17KCkgPT4ge1xuXHRcdFx0XHRcdHNldElzRWRpdChmYWxzZSk7XG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBpY29uID0gZ2V0SWNvbihpdGVtLCBkYXRhKTtcblxuXHQvLyBSZW5kZXIgYWN0aW9uIGJ1dHRvblxuXHRyZXR1cm4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGZsdWlkXG5cdFx0XHRjb21wYWN0XG5cdFx0XHRjb2xvcj17Z2V0Q29sb3IoaXRlbSwgZGF0YSl9XG5cdFx0XHRpY29uPXshIWljb259XG5cdFx0XHRsYWJlbFBvc2l0aW9uPXtpY29uID8gJ2xlZnQnIDogdW5kZWZpbmVkfVxuXHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRzZXRJc0VkaXQodHJ1ZSk7XG5cdFx0XHR9fVxuXHRcdD5cblx0XHRcdHtpY29ufVxuXHRcdFx0e2dldFRleHQoaXRlbSwgZGF0YSl9XG5cdFx0PC9CdXR0b24+XG5cdCk7XG59XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0J1dHRvbn0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge0FjdGlvblNpZGViYXJJdGVtLCBDb250ZW50RGF0YX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtnZXRDb2xvciwgZ2V0SWNvbiwgZ2V0VGV4dH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbnRlcmZhY2UgQWN0aW9uU2lkZWJhckl0ZW1Db21wb25lbnRQcm9wczxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4ge1xuXHRpdGVtOiBBY3Rpb25TaWRlYmFySXRlbTxULCBLPjtcblx0ZGF0YTogQ29udGVudERhdGE8VCwgSz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25TaWRlYmFySXRlbUNvbXBvbmVudDxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oe2l0ZW0sIGRhdGF9OiBBY3Rpb25TaWRlYmFySXRlbUNvbXBvbmVudFByb3BzPFQsIEs+KSB7XG5cdGNvbnN0IGljb24gPSBnZXRJY29uKGl0ZW0sIGRhdGEpO1xuXG5cdHJldHVybiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Zmx1aWRcblx0XHRcdGNvbXBhY3Rcblx0XHRcdGNvbG9yPXtnZXRDb2xvcihpdGVtLCBkYXRhKX1cblx0XHRcdGljb249eyEhaWNvbn1cblx0XHRcdGxhYmVsUG9zaXRpb249e2ljb24gPyAnbGVmdCcgOiB1bmRlZmluZWR9XG5cdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdGl0ZW0ub25DbGljayhkYXRhKTtcblx0XHRcdH19XG5cdFx0PlxuXHRcdFx0e2ljb259XG5cdFx0XHR7Z2V0VGV4dChpdGVtLCBkYXRhKX1cblx0XHQ8L0J1dHRvbj5cblx0KTtcbn1cbiIsImltcG9ydCB0eXBlIHtEZWZpbmVSb3V0ZU9wdGlvbnN9IGZyb20gJ0BpbXBlcml1bS9yb3V0ZXInO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7aXNFcXVhbH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBSZWFjdCwge0RlcGVuZGVuY3lMaXN0LCBFZmZlY3RDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlRGlzcGF0Y2h9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7RGF0YUhvb2tzfSBmcm9tICcuLi8uLi9kYXRhaG9va3MvRGF0YUhvb2tzJztcbmltcG9ydCB7YWN0aW9uc30gZnJvbSAnLi4vLi4vc3RhdGUnO1xuaW1wb3J0IHtzb3J0V2VpZ2h0ZWRJdGVtc30gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHt1c2VCdWlsZENvbnRlbnREYXRhfSBmcm9tICcuLi9ob29rcy91c2VCdWlsZENvbnRlbnREYXRhJztcbmltcG9ydCB0eXBlIHtQYWdlLCBSb3V0ZVBhcmFtZXRlcnN9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7SGVhZGVyfSBmcm9tICcuL0hlYWRlcic7XG5pbXBvcnQge1NpZGViYXJJdGVtV3JhcHBlcn0gZnJvbSAnLi9TaWRlYmFySXRlbVdyYXBwZXInO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuXG5jb25zdCBkID0gZGVidWcoJ2ltcGVyaXVtLmxheW91dC5jb250ZW50LmNvbXBvbmVudHMuQ29udGVudENvbXBvbmVudCcpO1xuXG5pbnRlcmZhY2UgQ29udGVudENvbXBvbmVudFByb3BzPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiB7XG5cdHBhZ2U6IFBhZ2U8VCwgSz47XG5cdHBhcmFtczogUm91dGVQYXJhbWV0ZXJzPFRbS11bJ3BhcmFtcyddPjtcbn1cblxuZnVuY3Rpb24gdXNlRGVlcENvbXBhcmVNZW1vaXplKHZhbHVlOiBhbnkpIHtcblx0Y29uc3QgcmVmID0gdXNlUmVmKCk7XG5cdGlmICghdmFsdWUgJiYgIXJlZi5jdXJyZW50KSByZXR1cm4gcmVmLmN1cnJlbnQ7XG5cdGlmICghaXNFcXVhbCh2YWx1ZSwgcmVmLmN1cnJlbnQpKSB7XG5cdFx0cmVmLmN1cnJlbnQgPSB2YWx1ZTtcblx0fVxuXHRyZXR1cm4gcmVmLmN1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIHVzZURlZXBDb21wYXJlRWZmZWN0KGNhbGxiYWNrOiBFZmZlY3RDYWxsYmFjaywgZGVwczogRGVwZW5kZW5jeUxpc3QpIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuXHR1c2VFZmZlY3QoY2FsbGJhY2ssIGRlcHMubWFwKHVzZURlZXBDb21wYXJlTWVtb2l6ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29udGVudENvbXBvbmVudDxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oe3BhZ2UsIHBhcmFtc306IENvbnRlbnRDb21wb25lbnRQcm9wczxULCBLPikge1xuXHRjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG5cdGNvbnN0IGRhdGEgPSB1c2VCdWlsZENvbnRlbnREYXRhKHtzdGF0ZVNlbGVjdG9ySG9vazogcGFnZS5zdGF0ZVNlbGVjdG9ySG9vaywgcGVybWlzc2lvblNlbGVjdG9ySG9vazogcGFnZS5wZXJtaXNzaW9uU2VsZWN0b3JIb29rLCBwYXJhbXN9KTtcblxuXHR1c2VEZWVwQ29tcGFyZUVmZmVjdCgoKSA9PiB7XG5cdFx0ZGlzcGF0Y2goYWN0aW9ucy5zZXRQYXJhbXMocGFyYW1zKSk7XG5cdH0sIFtkaXNwYXRjaCwgcGFyYW1zXSk7XG5cblx0Y29uc3QgY29udGVudCA9IHBhZ2UuY29udGVudChkYXRhKTtcblx0Y29uc3Qgc2lkZWJhckl0ZW1zID0gc29ydFdlaWdodGVkSXRlbXMocGFnZS5zaWRlYmFyIHx8IFtdKTtcblxuXHRjb25zdCBzaWRlYmFyID1cblx0XHRzaWRlYmFySXRlbXMubGVuZ3RoID4gMCA/IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPXtgJHtzdHlsZXMuc2lkZWJhcn0gaW1wZXJpdW1Db250ZW50U2lkZWJhcmB9PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YCR7c3R5bGVzLmFjdGlvbnNIZWFkZXJ9IGltcGVyaXVtQ29udGVudFNpZGViYXJIZWFkZXJgfT5cblx0XHRcdFx0XHQ8aDM+QWN0aW9uczwvaDM+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7c2lkZWJhckl0ZW1zLm1hcCgoc2IsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2lkZWJhckl0ZW19IGtleT17aW5kZXh9PlxuXHRcdFx0XHRcdFx0XHQ8U2lkZWJhckl0ZW1XcmFwcGVyIGl0ZW09e3NifSBwYXJhbXM9e3BhcmFtc30gZGF0YT17ZGF0YX0gLz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSA6IG51bGw7XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17YCR7c3R5bGVzLnBhcmVudH0gaW1wZXJpdW1Db250ZW50V3JhcHBlclBhcmVudGB9PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9e2Ake3N0eWxlcy53cmFwcGVyfSBpbXBlcml1bUNvbnRlbnRXcmFwcGVyYH0+XG5cdFx0XHRcdDxIZWFkZXIgaGVhZGVyPXtwYWdlLmhlYWRlcn0gZGF0YT17ZGF0YX0gLz5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9e2Ake3N0eWxlcy5jb250ZW50fSBpbXBlcml1bUNvbnRlbnQgJHtwYWdlLmZ1bGwgJiYgc3R5bGVzLmNvbnRlbnRGdWxsfWB9Pntjb250ZW50fTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHR7c2lkZWJhcn1cblx0XHRcdDxEYXRhSG9va3MgZGF0YUhvb2tzPXtwYWdlLmRhdGFIb29rcyB8fCBbXX0gLz5cblx0XHQ8L2Rpdj5cblx0KTtcbn1cbiIsImltcG9ydCB0eXBlIHtEZWZpbmVSb3V0ZU9wdGlvbnN9IGZyb20gJ0BpbXBlcml1bS9yb3V0ZXInO1xuaW1wb3J0IHR5cGUge0NvbnRlbnREYXRhLCBDdXN0b21TaWRlYmFySXRlbX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgQ3VzdG9tU2lkZWJhckl0ZW1Db21wb25lbnRQcm9wczxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4ge1xuXHRpdGVtOiBDdXN0b21TaWRlYmFySXRlbTxULCBLPjtcblx0ZGF0YTogQ29udGVudERhdGE8VCwgSz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDdXN0b21TaWRlYmFySXRlbUNvbXBvbmVudDxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oe2l0ZW0sIGRhdGF9OiBDdXN0b21TaWRlYmFySXRlbUNvbXBvbmVudFByb3BzPFQsIEs+KSB7XG5cdHJldHVybiBpdGVtLnJlbmRlcihkYXRhKTtcbn1cbiIsImltcG9ydCB0eXBlIHtEZWZpbmVSb3V0ZU9wdGlvbnN9IGZyb20gJ0BpbXBlcml1bS9yb3V0ZXInO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7Q29udGVudERhdGEsIENvbnRlbnRIZWFkZXJ9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuY3NzJztcblxuY29uc3QgZCA9IGRlYnVnKCdpbXBlcml1bS5sYXlvdXQuY29udGVudC5jb21wb25lbnRzLkhlYWRlcicpO1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHM8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IHtcblx0aGVhZGVyOiBDb250ZW50SGVhZGVyPFQsIEs+O1xuXHRkYXRhOiBDb250ZW50RGF0YTxULCBLPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcjxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oe2RhdGEsIGhlYWRlcn06IEhlYWRlclByb3BzPFQsIEs+KSB7XG5cdGlmIChoZWFkZXIpIHtcblx0XHRsZXQgaGVhZGVySW5mbyA9IHtcblx0XHRcdHRpdGxlOiAnJyxcblx0XHR9O1xuXHRcdGlmICh0eXBlb2YgaGVhZGVyID09PSAnc3RyaW5nJykge1xuXHRcdFx0aGVhZGVySW5mby50aXRsZSA9IGhlYWRlcjtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBoZWFkZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGhlYWRlckluZm8gPSBoZWFkZXIoZGF0YSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhlYWRlckluZm8gPSBoZWFkZXI7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17YCR7c3R5bGVzLmhlYWRlcn0gaW1wZXJpdW1Db250ZW50SGVhZGVyYH0+XG5cdFx0XHRcdDxoMj57aGVhZGVySW5mby50aXRsZX08L2gyPlxuXHRcdFx0PC9kaXY+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cbiIsImltcG9ydCB0eXBlIHtEZWZpbmVSb3V0ZU9wdGlvbnN9IGZyb20gJ0BpbXBlcml1bS9yb3V0ZXInO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TGlua30gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQge0J1dHRvbn0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge0FjdGlvbkZvcm1TaWRlYmFySXRlbSwgQWN0aW9uU2lkZWJhckl0ZW0sIENvbnRlbnREYXRhLCBDdXN0b21TaWRlYmFySXRlbSwgRGl2aWRlclNpZGViYXJJdGVtLCBTaWRlYmFySXRlbX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtnZXRDb2xvciwgZ2V0SWNvbiwgZ2V0Um91dGVUbywgZ2V0VGV4dH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbnRlcmZhY2UgUGxhaW5TaWRlYmFySXRlbVByb3BzPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiB7XG5cdGl0ZW06IEV4Y2x1ZGU8U2lkZWJhckl0ZW08VCwgSz4sIEN1c3RvbVNpZGViYXJJdGVtPFQsIEs+IHwgQWN0aW9uU2lkZWJhckl0ZW08VCwgSz4gfCBBY3Rpb25Gb3JtU2lkZWJhckl0ZW08VCwgSz4gfCBEaXZpZGVyU2lkZWJhckl0ZW08VCwgSz4+O1xuXHRkYXRhOiBDb250ZW50RGF0YTxULCBLPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBsYWluU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHtpdGVtLCBkYXRhfTogUGxhaW5TaWRlYmFySXRlbVByb3BzPFQsIEs+KSB7XG5cdGNvbnN0IGljb24gPSBnZXRJY29uKGl0ZW0sIGRhdGEpO1xuXG5cdHJldHVybiAoXG5cdFx0PEJ1dHRvbiBmbHVpZCBjb21wYWN0IGNvbG9yPXtnZXRDb2xvcihpdGVtLCBkYXRhKX0gaWNvbj17ISFpY29ufSBsYWJlbFBvc2l0aW9uPXtpY29uID8gJ2xlZnQnIDogdW5kZWZpbmVkfSBhcz17TGlua30gdG89e2dldFJvdXRlVG8oaXRlbSwgZGF0YSl9PlxuXHRcdFx0e2ljb259XG5cdFx0XHR7Z2V0VGV4dChpdGVtLCBkYXRhKX1cblx0XHQ8L0J1dHRvbj5cblx0KTtcbn1cbiIsImltcG9ydCB0eXBlIHtEZWZpbmVSb3V0ZU9wdGlvbnN9IGZyb20gJ0BpbXBlcml1bS9yb3V0ZXInO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7UXVlcnl9IGZyb20gJ21pbmdvJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0RpdmlkZXJ9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7dXNlQnVpbGRDb250ZW50RGF0YX0gZnJvbSAnLi4vaG9va3MvdXNlQnVpbGRDb250ZW50RGF0YSc7XG5pbXBvcnQgdHlwZSB7Q29udGVudERhdGEsIFJvdXRlUGFyYW1ldGVycywgU2lkZWJhckl0ZW19IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7aXNBY3Rpb25Gb3JtU2lkZWJhckl0ZW0sIGlzQWN0aW9uU2lkZWJhckl0ZW0sIGlzQ3VzdG9tU2lkZWJhckl0ZW0sIGlzRGl2aWRlclNpZGViYXJJdGVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0FjdGlvbkZvcm1TaWRlYmFySXRlbUNvbXBvbmVudH0gZnJvbSAnLi9BY3Rpb25Gb3JtU2lkZWJhckl0ZW1Db21wb25lbnQnO1xuaW1wb3J0IHtBY3Rpb25TaWRlYmFySXRlbUNvbXBvbmVudH0gZnJvbSAnLi9BY3Rpb25TaWRlYmFySXRlbUNvbXBvbmVudCc7XG5pbXBvcnQge0N1c3RvbVNpZGViYXJJdGVtQ29tcG9uZW50fSBmcm9tICcuL0N1c3RvbVNpZGViYXJJdGVtQ29tcG9uZW50JztcbmltcG9ydCB7UGxhaW5TaWRlYmFySXRlbX0gZnJvbSAnLi9QbGFpblNpZGViYXJJdGVtJztcblxuY29uc3QgZCA9IGRlYnVnKCdpbXBlcml1bS5sYXlvdXQuY29udGVudC5jb21wb25lbnRzLlNpZGViYXJJdGVtV3JhcHBlcicpO1xuXG5pbnRlcmZhY2UgU2lkZWJhckl0ZW1XcmFwcGVyUHJvcHM8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IHtcblx0aXRlbTogU2lkZWJhckl0ZW08VCwgSz47XG5cdGRhdGE/OiBDb250ZW50RGF0YTxULCBLPjtcblx0cGFyYW1zOiBSb3V0ZVBhcmFtZXRlcnM8VFtLXVsncGFyYW1zJ10+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2lkZWJhckl0ZW1XcmFwcGVyPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPih7aXRlbSwgZGF0YTogcGFyZW50RGF0YSwgcGFyYW1zfTogU2lkZWJhckl0ZW1XcmFwcGVyUHJvcHM8VCwgSz4pIHtcblx0Y29uc3QgZGF0YSA9IHVzZUJ1aWxkQ29udGVudERhdGEoe1xuXHRcdGRhdGE6IHBhcmVudERhdGEsXG5cdFx0c3RhdGVTZWxlY3Rvckhvb2s6IGl0ZW0uc3RhdGVTZWxlY3Rvckhvb2ssXG5cdFx0cGVybWlzc2lvblNlbGVjdG9ySG9vazogaXRlbS5wZXJtaXNzaW9uU2VsZWN0b3JIb29rLFxuXHRcdHBhcmFtcyxcblx0fSk7XG5cblx0Ly8gQ2hlY2sgaWYgdmlzaWJsZVxuXHRpZiAoaXRlbS52aXNpYmxlKSB7XG5cdFx0aWYgKHR5cGVvZiBpdGVtLnZpc2libGUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGlmICghaXRlbS52aXNpYmxlKGRhdGEpKSByZXR1cm4gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcSA9IG5ldyBRdWVyeShpdGVtLnZpc2libGUgfHwge30pO1xuXHRcdFx0aWYgKCFxLnRlc3QoZGF0YSkpIHJldHVybiBudWxsO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpc0N1c3RvbVNpZGViYXJJdGVtKGl0ZW0pKSB7XG5cdFx0cmV0dXJuIDxDdXN0b21TaWRlYmFySXRlbUNvbXBvbmVudCBpdGVtPXtpdGVtfSBkYXRhPXtkYXRhfSAvPjtcblx0fVxuXG5cdGlmIChpc0FjdGlvblNpZGViYXJJdGVtKGl0ZW0pKSB7XG5cdFx0cmV0dXJuIDxBY3Rpb25TaWRlYmFySXRlbUNvbXBvbmVudCBpdGVtPXtpdGVtfSBkYXRhPXtkYXRhfSAvPjtcblx0fVxuXG5cdGlmIChpc0FjdGlvbkZvcm1TaWRlYmFySXRlbShpdGVtKSkge1xuXHRcdHJldHVybiA8QWN0aW9uRm9ybVNpZGViYXJJdGVtQ29tcG9uZW50IGl0ZW09e2l0ZW19IGRhdGE9e2RhdGF9IC8+O1xuXHR9XG5cblx0aWYgKGlzRGl2aWRlclNpZGViYXJJdGVtKGl0ZW0pKSB7XG5cdFx0cmV0dXJuIDxEaXZpZGVyIC8+O1xuXHR9XG5cblx0Ly8gQHRzLWlnbm9yZSBUaGVzZSB0eXBlcyBzaG91bGQgd29yaywgbm90IHN1cmUgd2h5IGl0J3Mgbm90LiBSdW50aW1lIGNvZGUgaXMgZmluZS5cblx0cmV0dXJuIDxQbGFpblNpZGViYXJJdGVtIGl0ZW09e2l0ZW19IGRhdGE9e2RhdGF9IC8+O1xufVxuIiwiaW1wb3J0IHR5cGUge1JvdXRlcywgRGVmaW5lUm91dGVPcHRpb25zLCBLZXllZFJvdXRlUmVuZGVyRm5zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtDb250ZW50Q29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvQ29udGVudENvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7UGFnZXMsIFJvdXRlUGFyYW1ldGVyc30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2lzUGFnZX0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmNvbnRlbnQuY3JlYXRlUGFnZXMnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhZ2VzPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnM+KHJvdXRlczogUm91dGVzPFQ+LCBwYWdlczogUGFnZXM8VD4pIHtcblx0Y29uc3QgcmVuZGVyUm91dGVQcm9wc09iaiA9IE9iamVjdC5rZXlzKHJvdXRlcy50eXBlcykucmVkdWNlKChtZW1vLCBrZXkpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4ubWVtbyxcblx0XHRcdFtrZXldOiAocGFyYW1zOiBSb3V0ZVBhcmFtZXRlcnM8VFt0eXBlb2Yga2V5XVsncGFyYW1zJ10+KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBnID0gcGFnZXNba2V5XTtcblx0XHRcdFx0aWYgKGlzUGFnZShwZykpIHtcblx0XHRcdFx0XHRyZXR1cm4gPENvbnRlbnRDb21wb25lbnQgcGFnZT17cGd9IHBhcmFtcz17cGFyYW1zfSAvPjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxDb250ZW50Q29tcG9uZW50XG5cdFx0XHRcdFx0XHRwYWdlPXt7XG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHBnLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdHBhcmFtcz17cGFyYW1zfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdH07XG5cdH0sIHt9IGFzIEtleWVkUm91dGVSZW5kZXJGbnM8VD4pO1xuXG5cdHJldHVybiByb3V0ZXMucmVuZGVyUm91dGVQcm9wcyhyZW5kZXJSb3V0ZVByb3BzT2JqKTtcbn1cbiIsImltcG9ydCB0eXBlIHtEaXZpZGVyU2lkZWJhckl0ZW19IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZGl2aWRlclNpZGViYXJJdGVtOiBEaXZpZGVyU2lkZWJhckl0ZW08YW55LCBhbnk+ID0ge1xuXHR0ZXh0OiAnJyxcblx0ZGl2aWRlcjogdHJ1ZSxcbn07XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zfSBmcm9tICdAaW1wZXJpdW0vcm91dGVyJztcbmltcG9ydCB0eXBlIHtVc2VCdWlsZERhdGFQYXJhbXN9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUJ1aWxkRGF0YSc7XG5pbXBvcnQge3VzZUJ1aWxkRGF0YX0gZnJvbSAnLi4vLi4vaG9va3MvdXNlQnVpbGREYXRhJztcbmltcG9ydCB0eXBlIHtDb250ZW50RGF0YSwgUm91dGVQYXJhbWV0ZXJzfSBmcm9tICcuLi90eXBlcyc7XG5cbmludGVyZmFjZSBVc2VCdWlsZENvbnRlbnREYXRhUGFyYW1zPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiBleHRlbmRzIFVzZUJ1aWxkRGF0YVBhcmFtcyB7XG5cdGRhdGE/OiBDb250ZW50RGF0YTxULCBLPjtcblx0cGFyYW1zOiBSb3V0ZVBhcmFtZXRlcnM8VFtLXVsncGFyYW1zJ10+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQnVpbGRDb250ZW50RGF0YTxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oe1xuXHRkYXRhLFxuXHRzdGF0ZVNlbGVjdG9ySG9vayxcblx0cGVybWlzc2lvblNlbGVjdG9ySG9vayxcblx0cm91dGVJdGVtLFxuXHRwYXJhbXMsXG59OiBVc2VCdWlsZENvbnRlbnREYXRhUGFyYW1zPFQsIEs+KSB7XG5cdGNvbnN0IGJ1aWxkRGF0YSA9IHVzZUJ1aWxkRGF0YSh7ZGF0YSwgc3RhdGVTZWxlY3Rvckhvb2ssIHBlcm1pc3Npb25TZWxlY3Rvckhvb2ssIHJvdXRlSXRlbX0pO1xuXHRyZXR1cm4ge1xuXHRcdC4uLmJ1aWxkRGF0YSxcblx0XHRwYXJhbXMsXG5cdH07XG59XG4iLCJpbXBvcnQgdHlwZSB7RGVmaW5lUm91dGVPcHRpb25zLCBQYXJhbWV0ZXJzRnJvbUFzc2VydGlvbn0gZnJvbSAnQGltcGVyaXVtL3JvdXRlcic7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7U2VtYW50aWNDT0xPUlMsIFNlbWFudGljSUNPTlN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtSb3V0ZUl0ZW0sIFZpc2liaWxpdHlJdGVtLCBXZWlnaHRlZEl0ZW19IGZyb20gJy4uL2NvbW1vbkl0ZW1zJztcbmltcG9ydCB0eXBlIHtEYXRhSG9va0l0ZW19IGZyb20gJy4uL2RhdGFob29rcy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RGF0YSwgUGVybWlzc2lvblNlbGVjdG9ySG9vaywgU3RhdGVTZWxlY3Rvckhvb2t9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgUm91dGVQYXJhbWV0ZXJzPFQgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZD4gPSBUIGV4dGVuZHMgcmVhZG9ubHkgc3RyaW5nW10gPyBQYXJhbWV0ZXJzRnJvbUFzc2VydGlvbjxUPiA6IG5ldmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnREYXRhPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiBleHRlbmRzIERhdGEge1xuXHRwYXJhbXM6IFJvdXRlUGFyYW1ldGVyczxUW0tdWydwYXJhbXMnXT47XG59XG5cbmV4cG9ydCB0eXBlIENvbnRlbnQ8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+ID0gKGRhdGE6IENvbnRlbnREYXRhPFQsIEs+KSA9PiBKU1guRWxlbWVudDtcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IGV4dGVuZHMgV2VpZ2h0ZWRJdGVtLCBWaXNpYmlsaXR5SXRlbSB7XG5cdHRleHQ6IHN0cmluZyB8ICgoZGF0YTogQ29udGVudERhdGE8VCwgSz4pID0+IHN0cmluZyk7XG5cdGljb24/OiBTZW1hbnRpY0lDT05TIHwgKChkYXRhOiBDb250ZW50RGF0YTxULCBLPikgPT4gU2VtYW50aWNJQ09OUyk7XG5cdGNvbG9yPzogU2VtYW50aWNDT0xPUlMgfCAoKGRhdGE6IENvbnRlbnREYXRhPFQsIEs+KSA9PiBTZW1hbnRpY0NPTE9SUyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGl2aWRlclNpZGViYXJJdGVtPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiBleHRlbmRzIEJhc2VTaWRlYmFySXRlbTxULCBLPiB7XG5cdGRpdmlkZXI6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IGV4dGVuZHMgQmFzZVNpZGViYXJJdGVtPFQsIEs+IHtcblx0b25DbGljazogKGRhdGE6IENvbnRlbnREYXRhPFQsIEs+KSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQWN0aW9uRm9ybVNpZGViYXJJdGVtRm9ybVBhcmFtczxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4ge1xuXHR2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cdGhhbmRsZUNoYW5nZTogKGU6IFJlYWN0LkNoYW5nZUV2ZW50PGFueT4pID0+IHZvaWQ7XG5cdGZpZWxkRXJyb3I6IChmaWVsZE5hbWU6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbjtcblx0ZGF0YTogQ29udGVudERhdGE8VCwgSz47XG59XG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkZvcm1TaWRlYmFySXRlbTxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4gZXh0ZW5kcyBCYXNlU2lkZWJhckl0ZW08VCwgSz4ge1xuXHRmb3JtOiAocGFyYW1zOiBBY3Rpb25Gb3JtU2lkZWJhckl0ZW1Gb3JtUGFyYW1zPFQsIEs+KSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG5cdGluaXRpYWxWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgKChkYXRhOiBDb250ZW50RGF0YTxULCBLPikgPT4gUmVjb3JkPHN0cmluZywgYW55Pik7XG5cdG9uU3VibWl0PzogKHZhbHVlczogUmVjb3JkPHN0cmluZywgYW55PiwgZGF0YTogQ29udGVudERhdGE8VCwgSz4pID0+IHZvaWQ7XG5cdHZhbGlkYXRpb25TY2hlbWE/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IGV4dGVuZHMgV2VpZ2h0ZWRJdGVtLCBWaXNpYmlsaXR5SXRlbSB7XG5cdHJlbmRlcjogKGRhdGE6IENvbnRlbnREYXRhPFQsIEs+KSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFNpZGViYXJJdGVtPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9XG5cdHwgKEJhc2VTaWRlYmFySXRlbTxULCBLPiAmIFJvdXRlSXRlbTxDb250ZW50RGF0YTxULCBLPj4pXG5cdHwgQWN0aW9uU2lkZWJhckl0ZW08VCwgSz5cblx0fCBDdXN0b21TaWRlYmFySXRlbTxULCBLPlxuXHR8IEFjdGlvbkZvcm1TaWRlYmFySXRlbTxULCBLPlxuXHR8IERpdmlkZXJTaWRlYmFySXRlbTxULCBLPjtcblxuZXhwb3J0IHR5cGUgQ29udGVudEhlYWRlcjxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4gPVxuXHR8IHN0cmluZ1xuXHR8IHt0aXRsZTogc3RyaW5nOyBpY29uPzogc3RyaW5nfSAvLyBUT0RPIGljb24gc2hvdWxkIHByb2JhYmx5IGJlIFNlbWFudGljSUNPTlNcblx0fCAoKGRhdGE6IENvbnRlbnREYXRhPFQsIEs+KSA9PiB7dGl0bGU6IHN0cmluZzsgaWNvbj86IHN0cmluZ30pXG5cdHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2U8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+IHtcblx0ZGF0YUhvb2tzPzogRGF0YUhvb2tJdGVtW107XG5cdHN0YXRlU2VsZWN0b3JIb29rPzogU3RhdGVTZWxlY3Rvckhvb2sgfCBTdGF0ZVNlbGVjdG9ySG9va1tdO1xuXHRwZXJtaXNzaW9uU2VsZWN0b3JIb29rPzogUGVybWlzc2lvblNlbGVjdG9ySG9vayB8IFBlcm1pc3Npb25TZWxlY3Rvckhvb2tbXTtcblx0Y29udGVudDogQ29udGVudDxULCBLPjtcblx0aGVhZGVyPzogQ29udGVudEhlYWRlcjxULCBLPjtcblx0c2lkZWJhcj86IFNpZGViYXJJdGVtPFQsIEs+W107XG5cdGZ1bGw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBQYWdlczxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zPiA9IHtcblx0W2tleSBpbiBrZXlvZiBUXTogUGFnZTxULCBrZXk+IHwgQ29udGVudDxULCBrZXk+O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFnZTxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4odmFsdWU6IGFueSk6IHZhbHVlIGlzIFBhZ2U8VCwgSz4ge1xuXHRyZXR1cm4gISEodmFsdWUgYXMgUGFnZTxULCBLPikuY29udGVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBY3Rpb25TaWRlYmFySXRlbTxULCBLPiB7XG5cdHJldHVybiAhISh2YWx1ZSBhcyBBY3Rpb25TaWRlYmFySXRlbTxULCBLPikub25DbGljaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uRm9ybVNpZGViYXJJdGVtPFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPih2YWx1ZTogYW55KTogdmFsdWUgaXMgQWN0aW9uRm9ybVNpZGViYXJJdGVtPFQsIEs+IHtcblx0cmV0dXJuICEhKHZhbHVlIGFzIEFjdGlvbkZvcm1TaWRlYmFySXRlbTxULCBLPikuZm9ybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VzdG9tU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBDdXN0b21TaWRlYmFySXRlbTxULCBLPiB7XG5cdHJldHVybiAhISh2YWx1ZSBhcyBDdXN0b21TaWRlYmFySXRlbTxULCBLPikucmVuZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaXZpZGVyU2lkZWJhckl0ZW08VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBEaXZpZGVyU2lkZWJhckl0ZW08VCwgSz4ge1xuXHRyZXR1cm4gKHZhbHVlIGFzIERpdmlkZXJTaWRlYmFySXRlbTxULCBLPikuZGl2aWRlcjtcbn1cbiIsImltcG9ydCB0eXBlIHtEZWZpbmVSb3V0ZU9wdGlvbnN9IGZyb20gJ0BpbXBlcml1bS9yb3V0ZXInO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SWNvbiwgU2VtYW50aWNDT0xPUlN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtSb3V0ZUl0ZW19IGZyb20gJy4uL2NvbW1vbkl0ZW1zJztcbmltcG9ydCB0eXBlIHtCYXNlU2lkZWJhckl0ZW0sIENvbnRlbnREYXRhfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEljb248VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KGl0ZW06IEJhc2VTaWRlYmFySXRlbTxULCBLPiwgZGF0YTogQ29udGVudERhdGE8VCwgSz4pIHtcblx0aWYgKGl0ZW0uaWNvbikge1xuXHRcdGNvbnN0IGljb25OYW1lID0gdHlwZW9mIGl0ZW0uaWNvbiA9PT0gJ2Z1bmN0aW9uJyA/IGl0ZW0uaWNvbihkYXRhKSA6IGl0ZW0uaWNvbjtcblx0XHRyZXR1cm4gPEljb24gbmFtZT17aWNvbk5hbWV9IC8+O1xuXHR9XG5cdHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVUbzxUIGV4dGVuZHMgRGVmaW5lUm91dGVPcHRpb25zLCBLIGV4dGVuZHMga2V5b2YgVD4oaXRlbTogUm91dGVJdGVtPENvbnRlbnREYXRhPFQsIEs+PiwgZGF0YTogQ29udGVudERhdGE8VCwgSz4pIHtcblx0aWYgKGl0ZW0udG8pIHtcblx0XHRyZXR1cm4gdHlwZW9mIGl0ZW0udG8gPT09ICdmdW5jdGlvbicgPyBpdGVtLnRvKGRhdGEpIDogaXRlbS50bztcblx0fVxuXHRyZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0PFQgZXh0ZW5kcyBEZWZpbmVSb3V0ZU9wdGlvbnMsIEsgZXh0ZW5kcyBrZXlvZiBUPihpdGVtOiBCYXNlU2lkZWJhckl0ZW08VCwgSz4sIGRhdGE6IENvbnRlbnREYXRhPFQsIEs+KSB7XG5cdHJldHVybiB0eXBlb2YgaXRlbS50ZXh0ID09PSAnZnVuY3Rpb24nID8gaXRlbS50ZXh0KGRhdGEpIDogaXRlbS50ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3I8VCBleHRlbmRzIERlZmluZVJvdXRlT3B0aW9ucywgSyBleHRlbmRzIGtleW9mIFQ+KGl0ZW06IEJhc2VTaWRlYmFySXRlbTxULCBLPiwgZGF0YTogQ29udGVudERhdGE8VCwgSz4pOiBTZW1hbnRpY0NPTE9SUyB7XG5cdGlmICghaXRlbS5jb2xvcikgcmV0dXJuICdibHVlJztcblx0cmV0dXJuIHR5cGVvZiBpdGVtLmNvbG9yID09PSAnZnVuY3Rpb24nID8gaXRlbS5jb2xvcihkYXRhKSA6IGl0ZW0uY29sb3I7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHtjb21wb3NlfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlTG9jYXRpb259IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHtFeGVjdXRlRGF0YUhvb2t9IGZyb20gJy4vRXhlY3V0ZURhdGFIb29rJztcbmltcG9ydCB0eXBlIHtEYXRhSG9va0l0ZW19IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBkID0gZGVidWcoJ2ltcGVyaXVtLmxheW91dC5kYXRhaG9va3MuRGF0YUhvb2tzJyk7XG5cbmludGVyZmFjZSBEYXRhSG9va3NQcm9wcyB7XG5cdGRhdGFIb29rczogRGF0YUhvb2tJdGVtW107XG59XG5cbi8qKlxuICogUmVuZGVycyBsYXlvdXQgZGF0YSBob29rcy4gVGhlc2UgaG9va3Mgc2hvdWxkIHJldHVybiBub3RoaW5nLiBBbGwgaW50ZXJhY3Rpb24gc2hvdWxkIGJlIGluIHNpZGUgZWZmZWN0cywgdXN1YWxseSByZXRyaWV2aW5nIGRhdGEgYW5kIHNldHRpbmcgUmVkdXggc3RhdGUuXG4gKiBAcGFyYW0gZGF0YUhvb2tzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERhdGFIb29rcyh7ZGF0YUhvb2tzfTogRGF0YUhvb2tzUHJvcHMpIHtcblx0Y29uc3Qge3BhdGhuYW1lfSA9IHVzZUxvY2F0aW9uKCk7XG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0e2RhdGFIb29rcy5tYXAoKGhvb2ssIGluZGV4KSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgaG9vayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcblx0XHRcdFx0XHRyZXR1cm4gPEV4ZWN1dGVEYXRhSG9vayBrZXk9e2luZGV4fSBkYXRhSG9vaz17aG9va30gLz47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZm4gPSBBcnJheS5pc0FycmF5KGhvb2sucm91dGVNYXRjaCkgPyBjb21wb3NlKGhvb2sucm91dGVNYXRjaCkgOiBob29rLnJvdXRlTWF0Y2g7XG5cdFx0XHRcdGNvbnN0IHJvdXRlUGFyYW1zID0gZm4ocGF0aG5hbWUpO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShob29rLmRhdGFIb29rKSkge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG5cdFx0XHRcdFx0XHQ8UmVhY3QuRnJhZ21lbnQga2V5PXtpbmRleH0+XG5cdFx0XHRcdFx0XHRcdHtob29rLmRhdGFIb29rLm1hcCgoZGgsIGluZGV4MikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gPEV4ZWN1dGVEYXRhSG9vayBrZXk9e2luZGV4Mn0gZGF0YUhvb2s9e2RofSByb3V0ZVBhcmFtcz17cm91dGVQYXJhbXN9IC8+O1xuXHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdDwvUmVhY3QuRnJhZ21lbnQ+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG5cdFx0XHRcdHJldHVybiA8RXhlY3V0ZURhdGFIb29rIGRhdGFIb29rPXtob29rLmRhdGFIb29rfSBrZXk9e2luZGV4fSByb3V0ZVBhcmFtcz17cm91dGVQYXJhbXN9IC8+O1xuXHRcdFx0fSl9XG5cdFx0PC8+XG5cdCk7XG59XG4iLCJpbXBvcnQgdHlwZSB7RGF0YUhvb2t9IGZyb20gJy4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgRXhlY3V0ZURhdGFIb29rUHJvcHMge1xuXHRkYXRhSG9vazogRGF0YUhvb2s7XG5cdHJvdXRlUGFyYW1zPzogYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZURhdGFIb29rKHtkYXRhSG9vaywgcm91dGVQYXJhbXN9OiBFeGVjdXRlRGF0YUhvb2tQcm9wcykge1xuXHRkYXRhSG9vayhyb3V0ZVBhcmFtcyk7XG5cdHJldHVybiBudWxsO1xufVxuIiwiaW1wb3J0IHt1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlRGlzcGF0Y2h9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7YWN0aW9uc30gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHR5cGUge1Blcm1pc3Npb25TZWxlY3Rvckhvb2t9IGZyb20gJy4uL3R5cGVzJztcblxuaW50ZXJmYWNlIEV4ZWN1dGVQZXJtaXNzaW9uSG9va1Byb3BzIHtcblx0cGVybWlzc2lvbkhvb2s6IFBlcm1pc3Npb25TZWxlY3Rvckhvb2s7XG5cdHJvdXRlUGFyYW1zPzogYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZVBlcm1pc3Npb25Ib29rKHtwZXJtaXNzaW9uSG9vaywgcm91dGVQYXJhbXN9OiBFeGVjdXRlUGVybWlzc2lvbkhvb2tQcm9wcykge1xuXHRjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG5cdGNvbnN0IHBlcm1zID0gcGVybWlzc2lvbkhvb2socm91dGVQYXJhbXMpO1xuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0T2JqZWN0LmtleXMocGVybXMpLmZvckVhY2gocGVybWlzc2lvbiA9PiB7XG5cdFx0XHRkaXNwYXRjaChhY3Rpb25zLnNldFBlcm1pc3Npb24oe3Blcm1pc3Npb24sIHJlc3VsdDogcGVybXNbcGVybWlzc2lvbl19KSk7XG5cdFx0fSk7XG5cdH0sIFtkaXNwYXRjaCwgcGVybXNdKTtcblxuXHRyZXR1cm4gbnVsbDtcbn1cbiIsImltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUge1Blcm1pc3Npb25TZWxlY3Rvckhvb2t9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0ZVBlcm1pc3Npb25Ib29rfSBmcm9tICcuL0V4ZWN1dGVQZXJtaXNzaW9uSG9vayc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmRhdGFob29rcy5QZXJtaXNzaW9uSG9va3MnKTtcblxuaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rc1Byb3BzIHtcblx0cGVybWlzc2lvbkhvb2tzOiBQZXJtaXNzaW9uU2VsZWN0b3JIb29rW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQZXJtaXNzaW9uSG9va3Moe3Blcm1pc3Npb25Ib29rc306IFBlcm1pc3Npb25Ib29rc1Byb3BzKSB7XG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdHtwZXJtaXNzaW9uSG9va3MubWFwKChob29rLCBpbmRleCkgPT4ge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG5cdFx0XHRcdHJldHVybiA8RXhlY3V0ZVBlcm1pc3Npb25Ib29rIGtleT17aW5kZXh9IHBlcm1pc3Npb25Ib29rPXtob29rfSAvPjtcblx0XHRcdH0pfVxuXHRcdDwvPlxuXHQpO1xufVxuIiwiaW1wb3J0IHt1c2VBdXRofSBmcm9tICdAaW1wZXJpdW0vYXV0aC1jbGllbnQnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB0eXBlIHtMb2NhdGlvbn0gZnJvbSAnaGlzdG9yeSc7XG5pbXBvcnQgY29tcGFjdCBmcm9tICdsb2Rhc2gvY29tcGFjdCc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnbG9kYXNoL21lcmdlJztcbmltcG9ydCBxdWVyeVN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5pbXBvcnQge3VzZUxvY2F0aW9ufSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7dXNlTGF5b3V0U3RhdGV9IGZyb20gJy4uL3N0YXRlJztcbmltcG9ydCB0eXBlIHtEYXRhLCBQZXJtaXNzaW9uU2VsZWN0b3JIb29rLCBTdGF0ZVNlbGVjdG9ySG9va30gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHt1c2VJc0FjdGl2ZVJvdXRlfSBmcm9tICcuL3VzZUlzQWN0aXZlUm91dGUnO1xuaW1wb3J0IHt1c2VTZWxlY3RQZXJtaXNzaW9ufSBmcm9tICcuL3VzZVNlbGVjdFBlcm1pc3Npb24nO1xuaW1wb3J0IHt1c2VTZWxlY3RTdGF0ZX0gZnJvbSAnLi91c2VTZWxlY3RTdGF0ZSc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0Lmhvb2tzLnVzZUJ1aWxkRGF0YScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUJ1aWxkRGF0YVBhcmFtcyB7XG5cdGRhdGE/OiBEYXRhO1xuXHRyb3V0ZUl0ZW0/OiBhbnk7XG5cdHN0YXRlU2VsZWN0b3JIb29rPzogU3RhdGVTZWxlY3Rvckhvb2sgfCBTdGF0ZVNlbGVjdG9ySG9va1tdO1xuXHRwZXJtaXNzaW9uU2VsZWN0b3JIb29rPzogUGVybWlzc2lvblNlbGVjdG9ySG9vayB8IFBlcm1pc3Npb25TZWxlY3Rvckhvb2tbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUJ1aWxkRGF0YSh7c3RhdGVTZWxlY3Rvckhvb2ssIHBlcm1pc3Npb25TZWxlY3Rvckhvb2ssIGRhdGEsIHJvdXRlSXRlbX06IFVzZUJ1aWxkRGF0YVBhcmFtcykge1xuXHRjb25zdCB7aWR9ID0gdXNlQXV0aCgpO1xuXHRjb25zdCB7cGVybWlzc2lvbnN9ID0gdXNlTGF5b3V0U3RhdGUoKTtcblx0Y29uc3Qgc3RhdGUgPSB1c2VTZWxlY3RTdGF0ZShzdGF0ZVNlbGVjdG9ySG9vayk7XG5cdGNvbnN0IGxvYyA9IHVzZUxvY2F0aW9uKCkgYXMgTG9jYXRpb247XG5cdGNvbnN0IHJvdXRlID0ge1xuXHRcdHBhdGg6IGNvbXBhY3QobG9jLnBhdGhuYW1lLnNwbGl0KCcvJykpLFxuXHRcdGhhc2g6IGxvYy5oYXNoLFxuXHRcdHNlYXJjaDogcXVlcnlTdHJpbmcucGFyc2UobG9jLnNlYXJjaCksXG5cdH07XG5cdGNvbnN0IGFjdGl2ZSA9IHVzZUlzQWN0aXZlUm91dGUoe2xvYywgcm91dGUsIHN0YXRlLCBhY3RpdmU6IGZhbHNlLCBpZCwgcGVybWlzc2lvbnN9LCByb3V0ZUl0ZW0pO1xuXHRjb25zdCBwZXJtaXNzaW9uc1ggPSB1c2VTZWxlY3RQZXJtaXNzaW9uKHtzdGF0ZSwgbG9jLCBhY3RpdmUsIHJvdXRlLCBpZCwgcGVybWlzc2lvbnN9LCBwZXJtaXNzaW9uU2VsZWN0b3JIb29rKTtcblx0Y29uc3QgbmV3RGF0YTogRGF0YSA9IHtzdGF0ZSwgbG9jLCBhY3RpdmUsIHJvdXRlLCBwZXJtaXNzaW9uczogey4uLnBlcm1pc3Npb25zLCAuLi5wZXJtaXNzaW9uc1h9LCBpZH07XG5cdHJldHVybiBkYXRhID8gbWVyZ2UoZGF0YSwgbmV3RGF0YSkgOiBuZXdEYXRhO1xufVxuIiwiaW1wb3J0IHt1c2VSb3V0ZU1hdGNofSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHR5cGUge1JvdXRlUHJvcHN9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHtpc1JvdXRlSXRlbX0gZnJvbSAnLi4vY29tbW9uSXRlbXMnO1xuaW1wb3J0IHR5cGUge0RhdGF9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUlzQWN0aXZlUm91dGUoZGF0YTogRGF0YSwgaXRlbT86IGFueSkge1xuXHQvLyBEZXRlcm1pbmUgaWYgdGhlIGN1cnJlbnQgcm91dGUgbWF0Y2hlcyB0aGUgdG8gcm91dGUgdG8gc2VlIGlmIHRoZSBsaW5rIGlzIGFjdGl2ZVxuXHRjb25zdCByb3V0ZU1hdGNoT2JqZWN0OiBSb3V0ZVByb3BzID0ge307XG5cdGlmIChpdGVtICYmIGlzUm91dGVJdGVtKGl0ZW0pKSB7XG5cdFx0aWYgKHR5cGVvZiBpdGVtLnRvID09PSAnc3RyaW5nJykge1xuXHRcdFx0cm91dGVNYXRjaE9iamVjdC5wYXRoID0gaXRlbS50bztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBpdGVtLnRvID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyb3V0ZU1hdGNoT2JqZWN0LnBhdGggPSBpdGVtLnRvKGRhdGEpO1xuXHRcdH1cblx0XHRyb3V0ZU1hdGNoT2JqZWN0LmV4YWN0ID0gaXRlbS5leGFjdCAhPT0gZmFsc2U7XG5cdFx0cm91dGVNYXRjaE9iamVjdC5zZW5zaXRpdmUgPSBpdGVtLnNlbnNpdGl2ZTtcblx0XHRyb3V0ZU1hdGNoT2JqZWN0LnN0cmljdCA9IGl0ZW0uc3RyaWN0O1xuXHR9XG5cdGNvbnN0IHJvdXRlTWF0Y2ggPSB1c2VSb3V0ZU1hdGNoKHJvdXRlTWF0Y2hPYmplY3QpO1xuXHRyZXR1cm4gcm91dGVNYXRjaCAhPT0gbnVsbDtcbn1cbiIsImltcG9ydCBmbG93UmlnaHQgZnJvbSAnbG9kYXNoL2Zsb3dSaWdodCc7XG5pbXBvcnQgdHlwZSB7RGF0YSwgUGVybWlzc2lvblNlbGVjdG9ySG9va30gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VsZWN0UGVybWlzc2lvbihkYXRhOiBEYXRhLCBwZXJtaXNzaW9uU2VsZWN0b3JIb29rPzogUGVybWlzc2lvblNlbGVjdG9ySG9vayB8IFBlcm1pc3Npb25TZWxlY3Rvckhvb2tbXSkge1xuXHRsZXQgZmluYWxTZWxlY3Rvckhvb2s6IFBlcm1pc3Npb25TZWxlY3Rvckhvb2sgPSAoKSA9PiAoe30pO1xuXHRpZiAocGVybWlzc2lvblNlbGVjdG9ySG9vaykge1xuXHRcdGZpbmFsU2VsZWN0b3JIb29rID0gQXJyYXkuaXNBcnJheShwZXJtaXNzaW9uU2VsZWN0b3JIb29rKSA/IGZsb3dSaWdodChwZXJtaXNzaW9uU2VsZWN0b3JIb29rKSA6IHBlcm1pc3Npb25TZWxlY3Rvckhvb2s7XG5cdH1cblx0cmV0dXJuIGZpbmFsU2VsZWN0b3JIb29rKGRhdGEpO1xufVxuIiwiaW1wb3J0IGZsb3dSaWdodCBmcm9tICdsb2Rhc2gvZmxvd1JpZ2h0JztcbmltcG9ydCB0eXBlIHtTdGF0ZVNlbGVjdG9ySG9va30gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VsZWN0U3RhdGUoc3RhdGVTZWxlY3Rvckhvb2s/OiBTdGF0ZVNlbGVjdG9ySG9vayB8IFN0YXRlU2VsZWN0b3JIb29rW10pIHtcblx0bGV0IGZpbmFsU2VsZWN0b3JIb29rOiAoKSA9PiBhbnkgPSAoKSA9PiAoe30pO1xuXHRpZiAoc3RhdGVTZWxlY3Rvckhvb2spIHtcblx0XHRmaW5hbFNlbGVjdG9ySG9vayA9IEFycmF5LmlzQXJyYXkoc3RhdGVTZWxlY3Rvckhvb2spID8gZmxvd1JpZ2h0KHN0YXRlU2VsZWN0b3JIb29rKSA6IHN0YXRlU2VsZWN0b3JIb29rO1xuXHR9XG5cdHJldHVybiBmaW5hbFNlbGVjdG9ySG9vaygpO1xufVxuIiwiaW1wb3J0IHR5cGUge0RhdGF9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtDdXN0b21MYXlvdXRJdGVtfSBmcm9tICcuLi90eXBlcyc7XG5cbmludGVyZmFjZSBDdXN0b21MYXlvdXRJdGVtQ29tcG9uZW50UHJvcHMge1xuXHRpdGVtOiBDdXN0b21MYXlvdXRJdGVtO1xuXHRkYXRhOiBEYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3VzdG9tTGF5b3V0SXRlbUNvbXBvbmVudCh7aXRlbSwgZGF0YX06IEN1c3RvbUxheW91dEl0ZW1Db21wb25lbnRQcm9wcykge1xuXHRyZXR1cm4gaXRlbS5yZW5kZXIoZGF0YSk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QWNjb3JkaW9uLCBEcm9wZG93biwgSWNvbiwgTWVudX0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge0RhdGF9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtEcm9wZG93bkxheW91dEl0ZW19IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7Z2V0VGV4dH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuXG5jb25zdCBkID0gZGVidWcoJ2ltcGVyaXVtLmxheW91dC5jb21wb25lbnRzLkRyb3Bkb3duSXRlbScpO1xuXG5pbnRlcmZhY2UgRHJvcGRvd25JdGVtUHJvcHMge1xuXHRpdGVtOiBEcm9wZG93bkxheW91dEl0ZW07XG5cdGNoaWxkcmVuOiBKU1guRWxlbWVudFtdO1xuXHRkYXRhOiBEYXRhO1xuXHR2ZXJ0aWNhbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wZG93bkl0ZW0oe2l0ZW0sIHZlcnRpY2FsLCBjaGlsZHJlbiwgZGF0YX06IERyb3Bkb3duSXRlbVByb3BzKSB7XG5cdGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuXHRpZiAodmVydGljYWwpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnUuSXRlbSBjbGFzc05hbWU9XCJpbXBlcml1bVZlcnRpY2FsRHJvcGRvd25cIj5cblx0XHRcdFx0PEFjY29yZGlvbiBmbHVpZD5cblx0XHRcdFx0XHQ8QWNjb3JkaW9uLlRpdGxlXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e3N0eWxlcy52ZXJ0aWNhbERyb3Bkb3duVGl0bGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXtldiA9PiB7XG5cdFx0XHRcdFx0XHRcdGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0XHRzZXRPcGVuKCFvcGVuKTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEljb24gY2xhc3NOYW1lPXtvcGVuID8gc3R5bGVzLnZlcnRpY2FsRHJvcGRvd25JY29uUm90YXRlZCA6IHN0eWxlcy52ZXJ0aWNhbERyb3Bkb3duSWNvbn0gbmFtZT1cImFycm93IHJpZ2h0XCIgLz5cblx0XHRcdFx0XHRcdHtpdGVtLnRleHR9XG5cdFx0XHRcdFx0PC9BY2NvcmRpb24uVGl0bGU+XG5cdFx0XHRcdFx0PEFjY29yZGlvbi5Db250ZW50IGFjdGl2ZT17b3Blbn0gY2xhc3NOYW1lPXtgJHtzdHlsZXMudmVydGljYWxEcm9wZG93bkNvbnRlbnR9IGltcGVyaXVtVmVydGljYWxEcm9wZG93bkNvbnRlbnRgfSBjaGlsZHJlbj17Y2hpbGRyZW59IC8+XG5cdFx0XHRcdDwvQWNjb3JkaW9uPlxuXHRcdFx0PC9NZW51Lkl0ZW0+XG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PERyb3Bkb3duIGl0ZW0gdGV4dD17Z2V0VGV4dChpdGVtLCBkYXRhKX0gY2xhc3NOYW1lPVwiaW1wZXJpdW1Ecm9wZG93blwiPlxuXHRcdFx0PERyb3Bkb3duLk1lbnUgY2xhc3NOYW1lPVwiaW1wZXJpdW1Ecm9wZG93bkNvbnRlbnRcIj57Y2hpbGRyZW59PC9Ecm9wZG93bi5NZW51PlxuXHRcdDwvRHJvcGRvd24+XG5cdCk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0LCB7UmVhY3ROb2RlLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtTZWdtZW50fSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQge3VzZUxheW91dFN0YXRlfSBmcm9tICcuLi8uLi9zdGF0ZSc7XG5pbXBvcnQge21vdmVJdGVtc30gZnJvbSAnLi4vbW92ZUl0ZW1zJztcbmltcG9ydCB0eXBlIHtMYXlvdXREYXRhfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0xheW91dEl0ZW1CYXJ9IGZyb20gJy4vTGF5b3V0SXRlbUJhcic7XG5pbXBvcnQge1NlY29uZGFyeU1lbnVUb2dnbGVJdGVtfSBmcm9tICcuL1NlY29uZGFyeU1lbnVUb2dnbGVJdGVtJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuY3NzJztcblxuY29uc3QgZCA9IGRlYnVnKCdpbXBlcml1bS5sYXlvdXQuY29tcG9uZW50cy5MYXlvdXQnKTtcblxuaW50ZXJmYWNlIExheW91dFByb3BzIGV4dGVuZHMgUmVxdWlyZWQ8TGF5b3V0RGF0YT4ge1xuXHRjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBtYWluIGxheW91dC5cbiAqIEhpZGVzL3Nob3dzL2NvbGxhcHNlcyB0aGluZ3MgYXMgbmVlZCBmb3IgbW9iaWxlIGxheW91dC5cbiAqIFRyYWNrcyBzdGF0ZSB0byB3aGV0aGVyIHRoZSBzaWRlIG1lbnUgaXMgb3BlbiBvciBub3QuXG4gKiBAcGFyYW0gZm9vdGVyXG4gKiBAcGFyYW0gbWVudWJhclxuICogQHBhcmFtIHN0YXR1c2JhclxuICogQHBhcmFtIGNoaWxkcmVuXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExheW91dCh7Zm9vdGVyLCBwcmltYXJ5TWVudSwgc3RhdHVzYmFyLCBzZWNvbmRhcnlNZW51LCBjaGlsZHJlbn06IExheW91dFByb3BzKSB7XG5cdGNvbnN0IHtpc01vYmlsZX0gPSB1c2VMYXlvdXRTdGF0ZSgpO1xuXHRjb25zdCBbbWVudU9wZW4sIHNldE1lbnVPcGVuXSA9IHVzZVN0YXRlKHRydWUpO1xuXG5cdGNvbnN0IHByaW1hcnlNZW51VG9nZ2xlID0ge1xuXHRcdHN0aWNrT25Nb2JpbGU6IHRydWUsXG5cdFx0d2VpZ2h0OiAtMTk5OTksXG5cdFx0cmVuZGVyOiAoKSA9PiB7XG5cdFx0XHRpZiAoIWlzTW9iaWxlKSByZXR1cm4gbnVsbDtcblx0XHRcdHJldHVybiA8U2Vjb25kYXJ5TWVudVRvZ2dsZUl0ZW0gbWVudU9wZW49e21lbnVPcGVufSBzZXRNZW51T3Blbj17c2V0TWVudU9wZW59IC8+O1xuXHRcdH0sXG5cdH07XG5cblx0Ly8gRGV0ZXJtaW5lIG1lbnViYXIgaXRlbXNcblx0Y29uc3QgcHJpbWFyeU1lbnVJdGVtcyA9IG1vdmVJdGVtcyhcblx0XHRpc01vYmlsZSA/IFtwcmltYXJ5TWVudVRvZ2dsZSwgLi4ucHJpbWFyeU1lbnVdLmZpbHRlcih2ID0+IHYuc3RpY2tPbk1vYmlsZSA9PT0gdHJ1ZSkgOiBbcHJpbWFyeU1lbnVUb2dnbGUsIC4uLnByaW1hcnlNZW51XSxcblx0KTtcblxuXHQvLyBjb25zdCBwbWkgPSBtZXJnZUl0ZW1zKHByaW1hcnlNZW51SXRlbXMpO1xuXG5cdC8vIERldGVybWluZSBzaWRlYmFyIGl0ZW1zXG5cdGNvbnN0IHNlY29uZGFyeU1lbnVJdGVtcyA9IG1vdmVJdGVtcyhcblx0XHRpc01vYmlsZVxuXHRcdFx0PyBbXG5cdFx0XHRcdFx0Li4uc2Vjb25kYXJ5TWVudSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0ZXh0OiAnJyxcblx0XHRcdFx0XHRcdG1lbnU6IFtwcmltYXJ5TWVudVRvZ2dsZSwgLi4ucHJpbWFyeU1lbnVdLmZpbHRlcih2ID0+IHYuc3RpY2tPbk1vYmlsZSAhPT0gdHJ1ZSksXG5cdFx0XHRcdFx0fSxcblx0XHRcdCAgXVxuXHRcdFx0OiBzZWNvbmRhcnlNZW51LFxuXHQpO1xuXG5cdGNvbnN0IHNlY29uZGFyeU1lbnVDb21wID1cblx0XHRzZWNvbmRhcnlNZW51SXRlbXMubGVuZ3RoID4gMCA/IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiaW1wZXJpdW1TZWNvbmRhcnlNZW51V3JhcHBlclwiPlxuXHRcdFx0XHQ8TGF5b3V0SXRlbUJhclxuXHRcdFx0XHRcdGl0ZW1zPXtzZWNvbmRhcnlNZW51SXRlbXN9XG5cdFx0XHRcdFx0aW52ZXJ0ZWRcblx0XHRcdFx0XHR2ZXJ0aWNhbFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17XG5cdFx0XHRcdFx0XHRpc01vYmlsZSAmJiAhbWVudU9wZW5cblx0XHRcdFx0XHRcdFx0PyBgJHtzdHlsZXMuc2Vjb25kYXJ5TWVudX0gJHtzdHlsZXMuc2Vjb25kYXJ5TWVudUhpZGRlbn0gaW1wZXJpdW1TZWNvbmRhcnlNZW51YFxuXHRcdFx0XHRcdFx0XHQ6IGAke3N0eWxlcy5zZWNvbmRhcnlNZW51fSBpbXBlcml1bVNlY29uZGFyeU1lbnVgXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9kaXY+XG5cdFx0KSA6IG51bGw7XG5cblx0Ly8gRGV0ZXJtaW5lIGZvb3RlciBpdGVtc1xuXHRjb25zdCBmb290ZXJJdGVtcyA9IG1vdmVJdGVtcyhmb290ZXIpO1xuXHRjb25zdCBmb290ZXJDb21wID1cblx0XHRmb290ZXJJdGVtcy5sZW5ndGggPiAwID8gKFxuXHRcdFx0PExheW91dEl0ZW1CYXIgbmFtZT1cImZvb3RlclwiIGl0ZW1zPXtmb290ZXJJdGVtc30gY2xhc3NOYW1lPXtgJHtzdHlsZXMuZm9vdGVyfSBpbXBlcml1bUZvb3RlcmB9IGludmVydGVkIGJvcmRlcmxlc3MgLz5cblx0XHQpIDogbnVsbDtcblxuXHQvLyBEZXRlcm1pbmUgc3RhdHVzIGJhciBpdGVtc1xuXHRjb25zdCBzdGF0dXNiYXJJdGVtcyA9IG1vdmVJdGVtcyhzdGF0dXNiYXIpO1xuXHRjb25zdCBzdGF0dXNiYXJDb21wID1cblx0XHRzdGF0dXNiYXJJdGVtcy5sZW5ndGggPiAwID8gPExheW91dEl0ZW1CYXIgaXRlbXM9e3N0YXR1c2Jhckl0ZW1zfSBpbnZlcnRlZCBjbGFzc05hbWU9e2Ake3N0eWxlcy5zdGF0dXNiYXJ9IGltcGVyaXVtU3RhdHVzYmFyYH0gLz4gOiBudWxsO1xuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2Ake3N0eWxlcy5wYXJlbnR9IGltcGVyaXVtTGF5b3V0ICR7aXNNb2JpbGUgPyAnaW1wZXJpdW1Nb2JpbGUnIDogJ2ltcGVyaXVtTm90TW9iaWxlJ31gfT5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiaW1wZXJpdW1QcmltYXJ5TWVudVdyYXBwZXJcIj5cblx0XHRcdFx0PExheW91dEl0ZW1CYXIgaXRlbXM9e3ByaW1hcnlNZW51SXRlbXN9IGludmVydGVkIGJvcmRlcmxlc3MgY2xhc3NOYW1lPXtgJHtzdHlsZXMubWVudWJhcn0gaW1wZXJpdW1QcmltYXJ5TWVudWB9IC8+XG5cdFx0XHRcdHtzdGF0dXNiYXJDb21wfVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8U2VnbWVudCBhdHRhY2hlZCBjbGFzc05hbWU9e2Ake3N0eWxlcy5jb250ZW50V3JhcHBlcn0gaW1wZXJpdW1MYXlvdXRDb250ZW50V3JhcHBlcmB9PlxuXHRcdFx0XHR7c2Vjb25kYXJ5TWVudUNvbXB9XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPXtgJHtzdHlsZXMuY29udGVudH0gaW1wZXJpdW1MYXlvdXRDb250ZW50YH0+e2NoaWxkcmVufTwvZGl2PlxuXHRcdFx0PC9TZWdtZW50PlxuXHRcdFx0e2Zvb3RlckNvbXB9XG5cdFx0PC9kaXY+XG5cdCk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHtNZW51UHJvcHN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7TWVudX0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHtzb3J0V2VpZ2h0ZWRJdGVtc30gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUge0xheW91dEl0ZW19IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7c3BsaXRQb3NpdGlvbmVkSXRlbXN9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7TGF5b3V0SXRlbVdyYXBwZXJ9IGZyb20gJy4vTGF5b3V0SXRlbVdyYXBwZXInO1xuXG5jb25zdCBkID0gZGVidWcoJ2ltcGVyaXVtLmxheW91dC5jb21wb25lbnRzLkxheW91dEl0ZW1CYXInKTtcblxuaW50ZXJmYWNlIEl0ZW1CYXJQcm9wcyBleHRlbmRzIE1lbnVQcm9wcyB7XG5cdGl0ZW1zOiBMYXlvdXRJdGVtW107XG59XG5cbi8qKlxuICogUmVuZGVycyBhIGhvcml6b250YWwgb3IgdmVydGljYWwgYmFyIG9mIG1lbnUgaXRlbXMuXG4gKiBAcGFyYW0gbmFtZVxuICogQHBhcmFtIGl0ZW1zXG4gKiBAcGFyYW0gcmVzdFxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMYXlvdXRJdGVtQmFyKHtpdGVtcywgLi4ucmVzdH06IEl0ZW1CYXJQcm9wcykge1xuXHRjb25zdCBpbXMgPSBzcGxpdFBvc2l0aW9uZWRJdGVtcyhpdGVtcyk7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuXHRjb25zdCBsZWZ0SXRlbXMgPSBzb3J0V2VpZ2h0ZWRJdGVtcyhpbXMubGVmdEl0ZW1zKS5tYXAoKGl0ZW0sIGluZGV4KSA9PiA8TGF5b3V0SXRlbVdyYXBwZXIgaXRlbT17aXRlbX0ga2V5PXtpbmRleH0gdmVydGljYWw9e3Jlc3QudmVydGljYWx9IC8+KTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuXHRjb25zdCByaWdodEl0ZW1zID0gc29ydFdlaWdodGVkSXRlbXMoaW1zLnJpZ2h0SXRlbXMpLm1hcCgoaXRlbSwgaW5kZXgpID0+IDxMYXlvdXRJdGVtV3JhcHBlciBpdGVtPXtpdGVtfSBrZXk9e2luZGV4fSB2ZXJ0aWNhbD17cmVzdC52ZXJ0aWNhbH0gLz4pO1xuXG5cdHJldHVybiAoXG5cdFx0PE1lbnUgey4uLnJlc3R9PlxuXHRcdFx0e2xlZnRJdGVtc31cblx0XHRcdHtyZXN0LnZlcnRpY2FsID8gcmlnaHRJdGVtcyA6IDxNZW51Lk1lbnUgcG9zaXRpb249XCJyaWdodFwiPntyaWdodEl0ZW1zfTwvTWVudS5NZW51Pn1cblx0XHQ8L01lbnU+XG5cdCk7XG59XG4iLCJpbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHtRdWVyeX0gZnJvbSAnbWluZ28nO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7RHJvcGRvd259IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7dXNlQnVpbGREYXRhfSBmcm9tICcuLi8uLi9ob29rcy91c2VCdWlsZERhdGEnO1xuaW1wb3J0IHR5cGUge0RhdGF9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7c29ydFdlaWdodGVkSXRlbXN9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHtMYXlvdXRJdGVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2lzQ3VzdG9tTGF5b3V0SXRlbSwgaXNEcm9wZG93bkxheW91dEl0ZW0sIGlzTWVudUxheW91dEl0ZW19IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7Q3VzdG9tTGF5b3V0SXRlbUNvbXBvbmVudH0gZnJvbSAnLi9DdXN0b21MYXlvdXRJdGVtQ29tcG9uZW50JztcbmltcG9ydCB7RHJvcGRvd25JdGVtfSBmcm9tICcuL0Ryb3Bkb3duSXRlbSc7XG5pbXBvcnQge01lbnVJdGVtfSBmcm9tICcuL01lbnVJdGVtJztcbmltcG9ydCB7UGxhaW5JdGVtfSBmcm9tICcuL1BsYWluSXRlbSc7XG5cbmNvbnN0IGQgPSBkZWJ1ZygnaW1wZXJpdW0ubGF5b3V0LmNvbXBvbmVudHMuTGF5b3V0SXRlbVdyYXBwZXInKTtcblxuaW50ZXJmYWNlIEl0ZW1XcmFwcGVyUHJvcHMge1xuXHRpdGVtOiBMYXlvdXRJdGVtO1xuXHRhcz86IFJlYWN0LkNvbXBvbmVudENsYXNzO1xuXHR2ZXJ0aWNhbD86IGJvb2xlYW47XG5cdGRhdGE/OiBEYXRhO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYW55IHR5cGUgb2YgSXRlbS4gR2F0aGVycyBzdGF0ZSwgcm91dGUgYW5kIG90aGVyIGRhdGEgYW5kIGNoZWNrcyBmb3IgdmlzaWJpbGl0eS5cbiAqIEBwYXJhbSBpdGVtXG4gKiBAcGFyYW0gYXNcbiAqIEBwYXJhbSB2ZXJ0aWNhbFxuICogQHBhcmFtIHBhcmVudERhdGFcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0SXRlbVdyYXBwZXIoe2l0ZW0sIGFzLCB2ZXJ0aWNhbCwgZGF0YTogcGFyZW50RGF0YX06IEl0ZW1XcmFwcGVyUHJvcHMpIHtcblx0Y29uc3QgZGF0YSA9IHVzZUJ1aWxkRGF0YSh7XG5cdFx0c3RhdGVTZWxlY3Rvckhvb2s6IGl0ZW0uc3RhdGVTZWxlY3Rvckhvb2ssXG5cdFx0cGVybWlzc2lvblNlbGVjdG9ySG9vazogaXRlbS5wZXJtaXNzaW9uU2VsZWN0b3JIb29rLFxuXHRcdHJvdXRlSXRlbTogaXRlbSxcblx0XHRkYXRhOiBwYXJlbnREYXRhLFxuXHR9KTtcblxuXHQvLyBDaGVjayBpZiB2aXNpYmxlXG5cdGlmIChpdGVtLnZpc2libGUpIHtcblx0XHRpZiAodHlwZW9mIGl0ZW0udmlzaWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0aWYgKCFpdGVtLnZpc2libGUoZGF0YSkpIHJldHVybiBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBxID0gbmV3IFF1ZXJ5KGl0ZW0udmlzaWJsZSB8fCB7fSk7XG5cdFx0XHRpZiAoIXEudGVzdChkYXRhKSkgcmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGlzQ3VzdG9tTGF5b3V0SXRlbShpdGVtKSkge1xuXHRcdHJldHVybiA8Q3VzdG9tTGF5b3V0SXRlbUNvbXBvbmVudCBpdGVtPXtpdGVtfSBkYXRhPXtkYXRhfSAvPjtcblx0fVxuXHRpZiAoaXNEcm9wZG93bkxheW91dEl0ZW0oaXRlbSkpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBzb3J0V2VpZ2h0ZWRJdGVtcyhpdGVtLmRyb3Bkb3duKS5tYXAoKHYsIGluZGV4KSA9PiA8TGF5b3V0SXRlbVdyYXBwZXIga2V5PXtpbmRleH0gaXRlbT17dn0gYXM9e0Ryb3Bkb3duLkl0ZW19IGRhdGE9e2RhdGF9IC8+KTtcblx0XHRyZXR1cm4gPERyb3Bkb3duSXRlbSBpdGVtPXtpdGVtfSBjaGlsZHJlbj17Y2hpbGRyZW59IHZlcnRpY2FsPXt2ZXJ0aWNhbH0gZGF0YT17ZGF0YX0gLz47XG5cdH1cblx0aWYgKGlzTWVudUxheW91dEl0ZW0oaXRlbSkpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBzb3J0V2VpZ2h0ZWRJdGVtcyhpdGVtLm1lbnUpLm1hcCgodiwgaW5kZXgpID0+IChcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcblx0XHRcdDxMYXlvdXRJdGVtV3JhcHBlciBrZXk9e2luZGV4fSBpdGVtPXt2fSBhcz17RHJvcGRvd24uSXRlbX0gdmVydGljYWw9e3ZlcnRpY2FsfSBkYXRhPXtkYXRhfSAvPlxuXHRcdCkpO1xuXHRcdHJldHVybiA8TWVudUl0ZW0gaXRlbT17aXRlbX0gY2hpbGRyZW49e2NoaWxkcmVufSAvPjtcblx0fVxuXHRyZXR1cm4gPFBsYWluSXRlbSBpdGVtPXtpdGVtfSBkYXRhPXtkYXRhfSBhcz17YXN9IC8+O1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TWVudX0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge01lbnVMYXlvdXRJdGVtfSBmcm9tICcuLi90eXBlcyc7XG5cbmludGVyZmFjZSBNZW51SXRlbVByb3BzIHtcblx0aXRlbTogTWVudUxheW91dEl0ZW07XG5cdGNoaWxkcmVuOiBKU1guRWxlbWVudFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTWVudUl0ZW0oe2l0ZW0sIGNoaWxkcmVufTogTWVudUl0ZW1Qcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51Lkl0ZW0+XG5cdFx0XHQ8TWVudS5IZWFkZXI+e2l0ZW0udGV4dH08L01lbnUuSGVhZGVyPlxuXHRcdFx0PE1lbnUuTWVudSBjb21wYWN0PVwiXCI+e2NoaWxkcmVufTwvTWVudS5NZW51PlxuXHRcdDwvTWVudS5JdGVtPlxuXHQpO1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TWVudX0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge0RhdGF9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtDdXN0b21MYXlvdXRJdGVtLCBEcm9wZG93bkxheW91dEl0ZW0sIExheW91dEl0ZW0sIE1lbnVMYXlvdXRJdGVtfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2dldEljb24sIGdldFRleHQsIGxpbmtQYXJhbWV0ZXJzfSBmcm9tICcuLi91dGlscyc7XG5cbmludGVyZmFjZSBQbGFpbkl0ZW1Qcm9wcyB7XG5cdGl0ZW06IEV4Y2x1ZGU8TGF5b3V0SXRlbSwgTWVudUxheW91dEl0ZW0gfCBEcm9wZG93bkxheW91dEl0ZW0gfCBDdXN0b21MYXlvdXRJdGVtPjtcblx0ZGF0YTogRGF0YTtcblx0YXM/OiBSZWFjdC5Db21wb25lbnRDbGFzcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBsYWluSXRlbSh7aXRlbSwgZGF0YSwgYXN9OiBQbGFpbkl0ZW1Qcm9wcykge1xuXHRjb25zdCBsaW5rUGFyYW1zID0gbGlua1BhcmFtZXRlcnMoaXRlbSwgZGF0YSk7XG5cblx0Y29uc3QgSXRlbVggPSBhcyB8fCBNZW51Lkl0ZW07XG5cblx0cmV0dXJuIChcblx0XHQ8SXRlbVggey4uLmxpbmtQYXJhbXN9PlxuXHRcdFx0e2dldEljb24oaXRlbSwgZGF0YSl9XG5cdFx0XHR7Z2V0VGV4dChpdGVtLCBkYXRhKX1cblx0XHQ8L0l0ZW1YPlxuXHQpO1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SWNvbiwgTWVudX0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuXG5pbnRlcmZhY2UgU2Vjb25kYXJ5TWVudVRvZ2dsZUl0ZW1Qcm9wcyB7XG5cdG1lbnVPcGVuOiBib29sZWFuO1xuXHRzZXRNZW51T3BlbjogKG9wZW46IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWNvbmRhcnlNZW51VG9nZ2xlSXRlbSh7bWVudU9wZW4sIHNldE1lbnVPcGVufTogU2Vjb25kYXJ5TWVudVRvZ2dsZUl0ZW1Qcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51Lkl0ZW0+XG5cdFx0XHQ8SWNvblxuXHRcdFx0XHRjbGFzc05hbWU9e21lbnVPcGVuID8gc3R5bGVzLmljb25Sb3RhdGVkIDogc3R5bGVzLmljb259XG5cdFx0XHRcdG5hbWU9e21lbnVPcGVuID8gJ2Nsb3NlJyA6ICdzaWRlYmFyJ31cblx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdHNldE1lbnVPcGVuKCFtZW51T3Blbik7XG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdDwvTWVudS5JdGVtPlxuXHQpO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7dXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZURpc3BhdGNofSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge3VzZU1lZGlhUXVlcnl9IGZyb20gJ3JlYWN0LXJlc3BvbnNpdmUnO1xuaW1wb3J0IHthY3Rpb25zLCB1c2VMYXlvdXRTdGF0ZX0gZnJvbSAnLi4vLi4vc3RhdGUnO1xuXG5jb25zdCBkID0gZGVidWcoJ2ltcGVyaXVtLmxheW91dC5ob29rcy51c2VNb2JpbGVMYXlvdXQnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU1vYmlsZUxheW91dCgpIHtcblx0Y29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuXHRjb25zdCB7aXNNb2JpbGV9ID0gdXNlTGF5b3V0U3RhdGUoKTtcblx0Y29uc3QgaXNNb2JpbGVYID0gdXNlTWVkaWFRdWVyeSh7cXVlcnk6ICcobWF4LXdpZHRoOiA5MDBweCknfSk7XG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGlzTW9iaWxlICE9PSBpc01vYmlsZVgpIHtcblx0XHRcdGQoYE1lZGlhIHF1ZXJ5IGNoYW5nZSBkZXRlY3RlZDogJHtpc01vYmlsZX0gLT4gJHtpc01vYmlsZVh9YCk7XG5cdFx0XHRkaXNwYXRjaChhY3Rpb25zLnNldE1vYmlsZShpc01vYmlsZVgpKTtcblx0XHR9XG5cdH0sIFtkaXNwYXRjaCwgaXNNb2JpbGUsIGlzTW9iaWxlWF0pO1xufVxuIiwiaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBncm91cEJ5IGZyb20gJ2xvZGFzaC9ncm91cEJ5JztcbmltcG9ydCB0eXBlIHtMYXlvdXRJdGVtfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7aXNEcm9wZG93bkxheW91dEl0ZW0sIGlzTWVudUxheW91dEl0ZW19IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBkID0gZGVidWcoJ2ltcGVyaXVtLmxheW91dC5tb3ZlSXRlbXMnKTtcblxuZnVuY3Rpb24gcHVsbEl0ZW1zKGl0ZW1zOiBMYXlvdXRJdGVtW10sIHB1bGxlZDogTGF5b3V0SXRlbVtdID0gW10pOiBMYXlvdXRJdGVtW10ge1xuXHRyZXR1cm4gaXRlbXMucmVkdWNlKChtZW1vLCBpdGVtKSA9PiB7XG5cdFx0aWYgKGlzRHJvcGRvd25MYXlvdXRJdGVtKGl0ZW0pKSB7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHQuLi5tZW1vLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Li4uaXRlbSxcblx0XHRcdFx0XHRkcm9wZG93bjogcHVsbEl0ZW1zKGl0ZW0uZHJvcGRvd24sIHB1bGxlZCksXG5cdFx0XHRcdH0sXG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdGlmIChpc01lbnVMYXlvdXRJdGVtKGl0ZW0pKSB7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHQuLi5tZW1vLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Li4uaXRlbSxcblx0XHRcdFx0XHRtZW51OiBwdWxsSXRlbXMoaXRlbS5tZW51LCBwdWxsZWQpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XTtcblx0XHR9XG5cblx0XHRpZiAoIWl0ZW0ubW92ZVRvS2V5KSB7XG5cdFx0XHRyZXR1cm4gWy4uLm1lbW8sIGl0ZW1dO1xuXHRcdH1cblxuXHRcdHB1bGxlZC5wdXNoKGl0ZW0pO1xuXHRcdHJldHVybiBtZW1vO1xuXHR9LCBbXSBhcyBMYXlvdXRJdGVtW10pO1xufVxuXG5mdW5jdGlvbiBhZGRJdGVtcyhpdGVtczogTGF5b3V0SXRlbVtdLCBwdWxsZWQ6IFJlY29yZDxzdHJpbmcsIExheW91dEl0ZW1bXT4pOiBMYXlvdXRJdGVtW10ge1xuXHRyZXR1cm4gaXRlbXMucmVkdWNlKChtZW1vLCBpdGVtKSA9PiB7XG5cdFx0aWYgKGlzRHJvcGRvd25MYXlvdXRJdGVtKGl0ZW0pKSB7XG5cdFx0XHRjb25zdCBuZXdJdGVtcyA9IGl0ZW0ua2V5ICYmIHB1bGxlZFtpdGVtLmtleV0gPyBwdWxsZWRbaXRlbS5rZXldIDogW107XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHQuLi5tZW1vLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Li4uaXRlbSxcblx0XHRcdFx0XHRkcm9wZG93bjogWy4uLmFkZEl0ZW1zKGl0ZW0uZHJvcGRvd24sIHB1bGxlZCksIC4uLm5ld0l0ZW1zXSxcblx0XHRcdFx0fSxcblx0XHRcdF07XG5cdFx0fVxuXG5cdFx0aWYgKGlzTWVudUxheW91dEl0ZW0oaXRlbSkgJiYgaXRlbS5rZXkpIHtcblx0XHRcdGNvbnN0IG5ld0l0ZW1zID0gaXRlbS5rZXkgJiYgcHVsbGVkW2l0ZW0ua2V5XSA/IHB1bGxlZFtpdGVtLmtleV0gOiBbXTtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdC4uLm1lbW8sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQuLi5pdGVtLFxuXHRcdFx0XHRcdG1lbnU6IFsuLi5hZGRJdGVtcyhpdGVtLm1lbnUsIHB1bGxlZCksIC4uLm5ld0l0ZW1zXSxcblx0XHRcdFx0fSxcblx0XHRcdF07XG5cdFx0fVxuXHRcdHJldHVybiBbLi4ubWVtbywgaXRlbV07XG5cdH0sIFtdIGFzIExheW91dEl0ZW1bXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSXRlbXMoaXRlbXM6IExheW91dEl0ZW1bXSkge1xuXHRjb25zdCBwdWxsZWQ6IExheW91dEl0ZW1bXSA9IFtdO1xuXHRjb25zdCBpdGVtc01pbnVzUHVsbGVkID0gcHVsbEl0ZW1zKGl0ZW1zLCBwdWxsZWQpO1xuXHRyZXR1cm4gYWRkSXRlbXMoaXRlbXNNaW51c1B1bGxlZCwgZ3JvdXBCeShwdWxsZWQsICdtb3ZlVG9LZXknKSk7XG59XG4iLCJpbXBvcnQgdHlwZSB7U2VtYW50aWNJQ09OU30gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IHR5cGUge0hvcml6b250YWxQb3NpdGlvbmVkSXRlbSwgUm91dGVJdGVtLCBWaXNpYmlsaXR5SXRlbSwgV2VpZ2h0ZWRJdGVtfSBmcm9tICcuLi9jb21tb25JdGVtcyc7XG5pbXBvcnQgdHlwZSB7RGF0YUhvb2tJdGVtfSBmcm9tICcuLi9kYXRhaG9va3MvdHlwZXMnO1xuaW1wb3J0IHR5cGUge0RhdGEsIFBlcm1pc3Npb25TZWxlY3Rvckhvb2t9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBEZXNjcmliZXMgYSBiYXNpYyB3ZWlnaHRlZCwgcG9zc2libHkgdmlzaWJsZSBpdGVtXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUxheW91dEl0ZW0gZXh0ZW5kcyBXZWlnaHRlZEl0ZW0sIFZpc2liaWxpdHlJdGVtIHtcblx0dGV4dDogc3RyaW5nIHwgKChkYXRhOiBEYXRhKSA9PiBzdHJpbmcpO1xuXHRpY29uPzogU2VtYW50aWNJQ09OUyB8ICgoZGF0YTogRGF0YSkgPT4gU2VtYW50aWNJQ09OUyk7XG5cdG1vdmVUb0tleT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21MYXlvdXRJdGVtIGV4dGVuZHMgV2VpZ2h0ZWRJdGVtLCBWaXNpYmlsaXR5SXRlbSB7XG5cdHJlbmRlcjogKGRhdGE6IERhdGEpID0+IEpTWC5FbGVtZW50IHwgbnVsbDtcblx0bW92ZVRvS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhIG1lbnUgdGhhdCBkaXNwbGF5cyBhIGRyb3Bkb3duIGxpc3Qgb2YgaXRlbXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bkxheW91dEl0ZW0gZXh0ZW5kcyBCYXNlTGF5b3V0SXRlbSB7XG5cdGRyb3Bkb3duOiAoKEJhc2VMYXlvdXRJdGVtICYgUm91dGVJdGVtPERhdGE+KSB8IEN1c3RvbUxheW91dEl0ZW0pW107XG5cdGtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSBtZW51IHRoYXQgZGlzcGxheXMgYSBzdWIgbWVudSAobm90IGEgZHJvcGRvd24gbGlzdClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW51TGF5b3V0SXRlbSBleHRlbmRzIEJhc2VMYXlvdXRJdGVtIHtcblx0bWVudTogKChCYXNlTGF5b3V0SXRlbSAmIFJvdXRlSXRlbTxEYXRhPikgfCBDdXN0b21MYXlvdXRJdGVtKVtdO1xuXHRrZXk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIGEgaG9yaXpvbnRhbCBtZW51IGl0ZW0gd2hpY2ggaXMgZWl0aGVyIGEgcm91dGUgaXRlbSBvciBkcm9wZG93biBtZW51XG4gKi9cbmV4cG9ydCB0eXBlIExheW91dEl0ZW0gPSAoQmFzZUxheW91dEl0ZW0gJiBSb3V0ZUl0ZW08RGF0YT4pIHwgRHJvcGRvd25MYXlvdXRJdGVtIHwgTWVudUxheW91dEl0ZW0gfCBDdXN0b21MYXlvdXRJdGVtO1xuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dERhdGEge1xuXHRwZXJtaXNzaW9uU2VsZWN0b3JIb29rcz86IFBlcm1pc3Npb25TZWxlY3Rvckhvb2tbXTtcblx0ZGF0YUhvb2tzPzogRGF0YUhvb2tJdGVtW107XG5cdHByaW1hcnlNZW51PzogKExheW91dEl0ZW0gJiBIb3Jpem9udGFsUG9zaXRpb25lZEl0ZW0pW107IC8vIHByaW1hcnkgbWVudVxuXHRzdGF0dXNiYXI/OiAoTGF5b3V0SXRlbSAmIEhvcml6b250YWxQb3NpdGlvbmVkSXRlbSlbXTtcblx0c2Vjb25kYXJ5TWVudT86IExheW91dEl0ZW1bXTsgLy8gc2Vjb25kYXJ5IG1lbnVcblx0Zm9vdGVyPzogKExheW91dEl0ZW0gJiBIb3Jpem9udGFsUG9zaXRpb25lZEl0ZW0pW107IC8vIGZvb3RlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21MYXlvdXRJdGVtKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBDdXN0b21MYXlvdXRJdGVtIHtcblx0cmV0dXJuICEhKHZhbHVlIGFzIEN1c3RvbUxheW91dEl0ZW0pLnJlbmRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRHJvcGRvd25MYXlvdXRJdGVtKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBEcm9wZG93bkxheW91dEl0ZW0ge1xuXHRyZXR1cm4gISEodmFsdWUgYXMgRHJvcGRvd25MYXlvdXRJdGVtKS5kcm9wZG93bjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVudUxheW91dEl0ZW0odmFsdWU6IGFueSk6IHZhbHVlIGlzIE1lbnVMYXlvdXRJdGVtIHtcblx0cmV0dXJuICEhKHZhbHVlIGFzIE1lbnVMYXlvdXRJdGVtKS5tZW51O1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TGlua30gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQge0ljb24sIFNlbWFudGljSUNPTlN9IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB0eXBlIHtSb3V0ZUl0ZW19IGZyb20gJy4uL2NvbW1vbkl0ZW1zJztcbmltcG9ydCB7aXNIb3Jpem9udGFsUG9zaXRpb25lZEl0ZW19IGZyb20gJy4uL2NvbW1vbkl0ZW1zJztcbmltcG9ydCB0eXBlIHtEYXRhfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7QmFzZUxheW91dEl0ZW0sIExheW91dEl0ZW19IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNwbGl0cyBwb3NpdGlvbmVkIGl0ZW1zIGludG8gbGVmdCBhbmQgcmlnaHQgYXJyYXlzIChpZiBob3Jpem9udGFsKVxuICogQHBhcmFtIGl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFBvc2l0aW9uZWRJdGVtczxUIGV4dGVuZHMgTGF5b3V0SXRlbT4oaXRlbXM6IFRbXSkge1xuXHRyZXR1cm4gaXRlbXMucmVkdWNlKFxuXHRcdChtZW1vLCB2KSA9PiB7XG5cdFx0XHRpZiAoaXNIb3Jpem9udGFsUG9zaXRpb25lZEl0ZW0odikgJiYgdi5wb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGxlZnRJdGVtczogbWVtby5sZWZ0SXRlbXMsXG5cdFx0XHRcdFx0cmlnaHRJdGVtczogWy4uLm1lbW8ucmlnaHRJdGVtcywgdl0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRsZWZ0SXRlbXM6IFsuLi5tZW1vLmxlZnRJdGVtcywgdl0sXG5cdFx0XHRcdHJpZ2h0SXRlbXM6IG1lbW8ucmlnaHRJdGVtcyxcblx0XHRcdH07XG5cdFx0fSxcblx0XHR7bGVmdEl0ZW1zOiBbXSwgcmlnaHRJdGVtczogW119IGFzIHtsZWZ0SXRlbXM6IFRbXTsgcmlnaHRJdGVtczogVFtdfSxcblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmtQYXJhbWV0ZXJzKGl0ZW06IEJhc2VMYXlvdXRJdGVtICYgUm91dGVJdGVtPERhdGE+LCBkYXRhOiBEYXRhKSB7XG5cdHJldHVybiBpdGVtLnRvXG5cdFx0PyB7XG5cdFx0XHRcdGFzOiBMaW5rLFxuXHRcdFx0XHRhY3RpdmU6IGRhdGEuYWN0aXZlLFxuXHRcdFx0XHR0bzogdHlwZW9mIGl0ZW0udG8gPT09ICdmdW5jdGlvbicgPyBpdGVtLnRvKGRhdGEpIDogaXRlbS50byxcblx0XHQgIH1cblx0XHQ6IHt9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dChpdGVtOiBCYXNlTGF5b3V0SXRlbSwgZGF0YTogRGF0YSkge1xuXHRyZXR1cm4gdHlwZW9mIGl0ZW0udGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IGl0ZW0udGV4dChkYXRhKSA6IGl0ZW0udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEljb24oaXRlbTogQmFzZUxheW91dEl0ZW0sIGRhdGE6IERhdGEpIHtcblx0Ly8gR2VuZXJhdGUgdGhlIGljb24gY29tcG9uZW50LCBpZiBpdCBleGlzdHNcblx0bGV0IGljb25OYW1lOiBTZW1hbnRpY0lDT05TIHwgdW5kZWZpbmVkO1xuXHRpZiAoaXRlbS5pY29uKSB7XG5cdFx0aWNvbk5hbWUgPSB0eXBlb2YgaXRlbS5pY29uID09PSAnZnVuY3Rpb24nID8gaXRlbS5pY29uKGRhdGEpIDogaXRlbS5pY29uO1xuXHR9XG5cdHJldHVybiBpdGVtLmljb24gPyA8SWNvbiBuYW1lPXtpY29uTmFtZX0gLz4gOiBudWxsO1xufVxuIiwiaW1wb3J0IHR5cGUge0hvYywgSW1wZXJpdW1DbGllbnR9IGZyb20gJ0BpbXBlcml1bS9jbGllbnQnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudFR5cGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7RGF0YUhvb2tzfSBmcm9tICcuLi9kYXRhaG9va3MvRGF0YUhvb2tzJztcbmltcG9ydCB7UGVybWlzc2lvbkhvb2tzfSBmcm9tICcuLi9kYXRhaG9va3MvUGVybWlzc2lvbkhvb2tzJztcbmltcG9ydCB7aXNJbXBlcml1bUxheW91dENsaWVudE1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtMYXlvdXR9IGZyb20gJy4vY29tcG9uZW50cy9MYXlvdXQnO1xuaW1wb3J0IHR5cGUge0xheW91dERhdGF9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBkID0gZGVidWcoJ2ltcGVyaXVtLmxheW91dC53aXRoTGF5b3V0Jyk7XG5cbmNvbnN0IGluaXRpYWxMYXlvdXRNb2R1bGVEYXRhOiBSZXF1aXJlZDxMYXlvdXREYXRhPiA9IHtcblx0ZGF0YUhvb2tzOiBbXSxcblx0cGVybWlzc2lvblNlbGVjdG9ySG9va3M6IFtdLFxuXHRwcmltYXJ5TWVudTogW10sXG5cdHN0YXR1c2JhcjogW10sXG5cdHNlY29uZGFyeU1lbnU6IFtdLFxuXHRmb290ZXI6IFtdLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhMYXlvdXQoY2xpZW50OiBJbXBlcml1bUNsaWVudCk6IEhvYyB7XG5cdGNvbnN0IGxheW91dE1vZHVsZURhdGEgPSBjbGllbnQubW9kdWxlcy5yZWR1Y2UoKG1lbW8sIG1vZHVsZSkgPT4ge1xuXHRcdGlmIChpc0ltcGVyaXVtTGF5b3V0Q2xpZW50TW9kdWxlKG1vZHVsZSkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGFIb29rczogWy4uLihtZW1vLmRhdGFIb29rcyB8fCBbXSksIC4uLihtb2R1bGUubGF5b3V0LmRhdGFIb29rcyB8fCBbXSldLFxuXHRcdFx0XHRwZXJtaXNzaW9uU2VsZWN0b3JIb29rczogWy4uLihtZW1vLnBlcm1pc3Npb25TZWxlY3Rvckhvb2tzIHx8IFtdKSwgLi4uKG1vZHVsZS5sYXlvdXQucGVybWlzc2lvblNlbGVjdG9ySG9va3MgfHwgW10pXSxcblx0XHRcdFx0cHJpbWFyeU1lbnU6IFsuLi4obWVtby5wcmltYXJ5TWVudSB8fCBbXSksIC4uLihtb2R1bGUubGF5b3V0LnByaW1hcnlNZW51IHx8IFtdKV0sXG5cdFx0XHRcdHN0YXR1c2JhcjogWy4uLihtZW1vLnN0YXR1c2JhciB8fCBbXSksIC4uLihtb2R1bGUubGF5b3V0LnN0YXR1c2JhciB8fCBbXSldLFxuXHRcdFx0XHRzZWNvbmRhcnlNZW51OiBbLi4uKG1lbW8uc2Vjb25kYXJ5TWVudSB8fCBbXSksIC4uLihtb2R1bGUubGF5b3V0LnNlY29uZGFyeU1lbnUgfHwgW10pXSxcblx0XHRcdFx0Zm9vdGVyOiBbLi4uKG1lbW8uZm9vdGVyIHx8IFtdKSwgLi4uKG1vZHVsZS5sYXlvdXQuZm9vdGVyIHx8IFtdKV0sXG5cdFx0XHR9IGFzIFJlcXVpcmVkPExheW91dERhdGE+O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtbztcblx0fSwgaW5pdGlhbExheW91dE1vZHVsZURhdGEpO1xuXHRkKCdMYXlvdXQgaXRlbXMgcHJvY2Vzc2VkJywgbGF5b3V0TW9kdWxlRGF0YSk7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0cmV0dXJuIGZ1bmN0aW9uIGxheW91dEhvYyhXcmFwcGVkOiBDb21wb25lbnRUeXBlPGFueT4pIHtcblx0XHRjb25zdCBkaXNwbGF5TmFtZSA9IFdyYXBwZWQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZC5uYW1lIHx8ICcnO1xuXG5cdFx0ZnVuY3Rpb24gV2l0aExheW91dChwcm9wczogdW5rbm93bikge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PD5cblx0XHRcdFx0XHQ8TGF5b3V0IHsuLi5sYXlvdXRNb2R1bGVEYXRhfT5cblx0XHRcdFx0XHRcdDxXcmFwcGVkIHsuLi5wcm9wc30gbGF5b3V0PXtsYXlvdXRNb2R1bGVEYXRhfSAvPlxuXHRcdFx0XHRcdDwvTGF5b3V0PlxuXHRcdFx0XHRcdDxEYXRhSG9va3MgZGF0YUhvb2tzPXtsYXlvdXRNb2R1bGVEYXRhLmRhdGFIb29rc30gLz5cblx0XHRcdFx0XHQ8UGVybWlzc2lvbkhvb2tzIHBlcm1pc3Npb25Ib29rcz17bGF5b3V0TW9kdWxlRGF0YS5wZXJtaXNzaW9uU2VsZWN0b3JIb29rc30gLz5cblx0XHRcdFx0PC8+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdFdpdGhMYXlvdXQuZGlzcGxheU5hbWUgPSBgd2l0aExheW91dCgke2Rpc3BsYXlOYW1lfSlgO1xuXG5cdFx0cmV0dXJuIFdpdGhMYXlvdXQ7XG5cdH07XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuaW1wb3J0IHtjcmVhdGVTbGljZUhvb2t9IGZyb20gJ0BpbXBlcml1bS9zdGF0ZSc7XG5pbXBvcnQge2NyZWF0ZVNsaWNlLCBQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuZXhwb3J0IGNvbnN0IHN0YXRlID0gY3JlYXRlU2xpY2Uoe1xuXHRuYW1lOiAnaW1wZXJpdW1MYXlvdXQnLFxuXHRpbml0aWFsU3RhdGU6IHtcblx0XHRpc01vYmlsZTogZmFsc2UsXG5cdFx0cGFyYW1zOiB7fSxcblx0XHRwZXJtaXNzaW9uczoge30gYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG5cdH0sXG5cdHJlZHVjZXJzOiB7XG5cdFx0c2V0TW9iaWxlOiAoc3QsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxib29sZWFuPikgPT4gKHsuLi5zdCwgaXNNb2JpbGU6IGFjdGlvbi5wYXlsb2FkfSksXG5cdFx0c2V0UGFyYW1zOiAoc3QsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PikgPT4ge1xuXHRcdFx0c3QucGFyYW1zID0gYWN0aW9uLnBheWxvYWQ7XG5cdFx0fSxcblx0XHRzZXRQZXJtaXNzaW9uOiAoc3QsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjx7cGVybWlzc2lvbjogc3RyaW5nOyByZXN1bHQ6IGJvb2xlYW59PikgPT4ge1xuXHRcdFx0c3QucGVybWlzc2lvbnNbYWN0aW9uLnBheWxvYWQucGVybWlzc2lvbl0gPSBhY3Rpb24ucGF5bG9hZC5yZXN1bHQ7XG5cdFx0fSxcblx0fSxcbn0pO1xuXG5leHBvcnQgY29uc3QgdXNlTGF5b3V0U3RhdGUgPSBjcmVhdGVTbGljZUhvb2soc3RhdGUpO1xuXG5leHBvcnQgY29uc3Qge2FjdGlvbnN9ID0gc3RhdGU7XG4iLCJpbXBvcnQgdHlwZSB7SW1wZXJpdW1DbGllbnRNb2R1bGV9IGZyb20gJ0BpbXBlcml1bS9jbGllbnQnO1xuaW1wb3J0IHR5cGUge0xvY2F0aW9ufSBmcm9tICdoaXN0b3J5JztcbmltcG9ydCB0eXBlIHtMYXlvdXREYXRhfSBmcm9tICcuL2xheW91dC90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFN0YXRlID0gUmVjb3JkPHN0cmluZywgYW55Pjtcbi8qKlxuICogQSBob29rIHRoYXQgc2VsZWN0cyBmcm9tIHJlZHV4IHN0YXRlLlxuICovXG5leHBvcnQgdHlwZSBTdGF0ZVNlbGVjdG9ySG9vayA9ICgpID0+IFN0YXRlO1xuXG5leHBvcnQgdHlwZSBQZXJtaXNzaW9uUmVzdWx0cyA9IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuXG5leHBvcnQgdHlwZSBQZXJtaXNzaW9uU2VsZWN0b3JIb29rID0gKGRhdGE6IERhdGEpID0+IFBlcm1pc3Npb25SZXN1bHRzO1xuXG4vKipcbiAqIFRoZSB2aXNpYmlsaXR5IHF1ZXJ5IGNhbiBlaXRoZXIgYmUgYSBtaW5nbyBxdWVyeSBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4uIFRoZSBkYXRhIGlzIGFuIG9iamVjdCB3aXRoIHRoZSByb3V0ZXIgcGF0aCBtZXJnZWQgd2l0aCBhbnkgc3RhdGUgc2VsZWN0b3IgaG9vayBkYXRhLlxuICovXG5leHBvcnQgdHlwZSBWaXNpYmlsaXR5UXVlcnlGbiA9IChkYXRhOiBEYXRhKSA9PiBib29sZWFuO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdGxvYzogTG9jYXRpb247XG5cdHJvdXRlOiB7XG5cdFx0cGF0aDogc3RyaW5nW107XG5cdFx0aGFzaDogc3RyaW5nO1xuXHRcdHNlYXJjaDogUmVjb3JkPHN0cmluZywgYW55Pjtcblx0fTtcblx0c3RhdGU6IFN0YXRlO1xuXHRhY3RpdmU6IGJvb2xlYW47XG5cdHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uUmVzdWx0cztcblx0aWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1wZXJpdW1MYXlvdXRDbGllbnRNb2R1bGUgZXh0ZW5kcyBJbXBlcml1bUNsaWVudE1vZHVsZSB7XG5cdGxheW91dDogTGF5b3V0RGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1wZXJpdW1MYXlvdXRDbGllbnRNb2R1bGUobW9kdWxlOiBJbXBlcml1bUNsaWVudE1vZHVsZSk6IG1vZHVsZSBpcyBJbXBlcml1bUxheW91dENsaWVudE1vZHVsZSB7XG5cdGNvbnN0IGxheW91dE1vZHVsZSA9IG1vZHVsZSBhcyBJbXBlcml1bUxheW91dENsaWVudE1vZHVsZTtcblx0cmV0dXJuIGxheW91dE1vZHVsZS5sYXlvdXQgIT09IHVuZGVmaW5lZDtcbn1cbiIsImltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBzb3J0QnkgZnJvbSAnbG9kYXNoL3NvcnRCeSc7XG5pbXBvcnQgdHlwZSB7V2VpZ2h0ZWRJdGVtfSBmcm9tICcuL2NvbW1vbkl0ZW1zJztcblxuLyoqXG4gKiBTb3J0cyB3ZWlnaHRlZCBpdGVtc1xuICovXG5leHBvcnQgY29uc3Qgc29ydFdlaWdodGVkSXRlbXMgPSBtZW1vaXplKGZ1bmN0aW9uIHNvcnRXZWlnaHRlZEl0ZW1zSW1wbDxUIGV4dGVuZHMgV2VpZ2h0ZWRJdGVtPihpdGVtczogVFtdKSB7XG5cdHJldHVybiBzb3J0QnkoaXRlbXMsIHYgPT4gdi53ZWlnaHQgfHwgMCk7XG59KTtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/P3J1bGVTZXRbMV0ucnVsZXNbMl0udXNlWzJdIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdLnVzZVsyXSEuL3N0eWxlcy5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9ydWxlU2V0WzFdLnJ1bGVzWzJdLnVzZVsyXSEuL3N0eWxlcy5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cnVsZVNldFsxXS5ydWxlc1syXS51c2VbMl0hLi9zdHlsZXMuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuXG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcblxuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG5cbiAgdmFyIHVwZGF0ZXIgPSBmdW5jdGlvbiB1cGRhdGVyKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXAgJiYgbmV3T2JqLnN1cHBvcnRzID09PSBvYmouc3VwcG9ydHMgJiYgbmV3T2JqLmxheWVyID09PSBvYmoubGF5ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGxpc3QsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG5cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tfaV07XG5cbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG5cbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG5cbiAgICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKF9pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpOyAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXG4gICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGluc2VydEJ5U2VsZWN0b3IoaW5zZXJ0LCBzdHlsZSkge1xuICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGluc2VydCk7XG5cbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG5cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRCeVNlbGVjdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0U3R5bGVFbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IFwiXCI7XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cblxuICB2YXIgbmVlZExheWVyID0gdHlwZW9mIG9iai5sYXllciAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG5cbiAgY3NzICs9IG9iai5jc3M7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cblxuICBvcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxuZnVuY3Rpb24gZG9tQVBJKG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG9iaikge1xuICAgICAgYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAaW1wZXJpdW0vYXV0aC1jbGllbnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGltcGVyaXVtL3N0YXRlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkByZWR1eGpzL3Rvb2xraXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHRoeC9jb250cm9sc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJkZWJ1Z1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL2NvbXBhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL2Zsb3dSaWdodFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2gvZnBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL2dyb3VwQnlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL21lbW9pemVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoL21lcmdlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaC9zb3J0QnlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibWluZ29cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicXVlcnlzdHJpbmdcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtcmVkdXhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtcmVzcG9uc2l2ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1yb3V0ZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtcm91dGVyLWRvbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic2VtYW50aWMtdWktcmVhY3RcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB0eXBlIHtJbXBlcml1bVN0YXRlQ2xpZW50TW9kdWxlfSBmcm9tICdAaW1wZXJpdW0vc3RhdGUnO1xuaW1wb3J0IHt1c2VNb2JpbGVMYXlvdXR9IGZyb20gJy4vbGF5b3V0L2hvb2tzL3VzZU1vYmlsZUxheW91dCc7XG5pbXBvcnQge3dpdGhMYXlvdXR9IGZyb20gJy4vbGF5b3V0L3dpdGhMYXlvdXQnO1xuaW1wb3J0IHtzdGF0ZX0gZnJvbSAnLi9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1wZXJpdW1MYXlvdXRDbGllbnRNb2R1bGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbGF5b3V0Q2xpZW50TW9kdWxlKCk6IEltcGVyaXVtU3RhdGVDbGllbnRNb2R1bGUgJiBJbXBlcml1bUxheW91dENsaWVudE1vZHVsZSB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogJ0BpbXBlcml1bS9sYXlvdXQnLFxuXHRcdG9yZGVyOiAzMCxcblx0XHRob2NzOiBbd2l0aExheW91dF0sXG5cdFx0c3RhdGUsXG5cdFx0bGF5b3V0OiB7XG5cdFx0XHRkYXRhSG9va3M6IFt1c2VNb2JpbGVMYXlvdXRdLFxuXHRcdH0sXG5cdH07XG59XG5cbmV4cG9ydCB0eXBlIHtMYXlvdXREYXRhfSBmcm9tICcuL2xheW91dC90eXBlcyc7XG5leHBvcnQge3VzZUxheW91dFN0YXRlLCBhY3Rpb25zIGFzIGxheW91dEFjdGlvbnN9IGZyb20gJy4vc3RhdGUnO1xuZXhwb3J0IHtjcmVhdGVQYWdlc30gZnJvbSAnLi9jb250ZW50L2NyZWF0ZVBhZ2VzJztcbmV4cG9ydCB0eXBlIHtJbXBlcml1bUxheW91dENsaWVudE1vZHVsZX0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQge2RpdmlkZXJTaWRlYmFySXRlbX0gZnJvbSAnLi9jb250ZW50L2RpdmlkZXJTaWRlYmFySXRlbSc7XG4iXSwibmFtZXMiOlsiaXNIb3Jpem9udGFsUG9zaXRpb25lZEl0ZW0iLCJ2YWx1ZSIsInBvc2l0aW9uIiwic3RpY2tPbk1vYmlsZSIsImlzUm91dGVJdGVtIiwidG8iLCJleGFjdCIsInN0cmljdCIsInNlbnNpdGl2ZSIsInVzZVRGb3JtIiwiZGVidWciLCJSZWFjdCIsIkJ1dHRvbiIsIkZvcm0iLCJJY29uIiwiTWVzc2FnZSIsIlBvcHVwIiwiZCIsIkFjdGlvbkZvcm0iLCJpdGVtIiwiZGF0YSIsIm9uSGlkZUZvcm0iLCJpbml0aWFsVmFsdWVzIiwib25TdWJtaXQiLCJzdWJtaXRWYWx1ZXMiLCJlbmFibGVSZWluaXRpYWxpemUiLCJ2YWxpZGF0aW9uU2NoZW1hIiwiaGFzRXJyb3JzIiwiaGFzV2FybmluZ3MiLCJoYW5kbGVTdWJtaXQiLCJoYW5kbGVDaGFuZ2UiLCJ2YWx1ZXMiLCJyZXNldEZvcm0iLCJlcnJvcnMiLCJmaWVsZEVycm9yIiwic2F2ZUJ1dHRvbiIsIk9iamVjdCIsImZvcm0iLCJ1c2VTdGF0ZSIsImdldENvbG9yIiwiZ2V0SWNvbiIsImdldFRleHQiLCJBY3Rpb25Gb3JtU2lkZWJhckl0ZW1Db21wb25lbnQiLCJpc0VkaXQiLCJzZXRJc0VkaXQiLCJpY29uIiwidW5kZWZpbmVkIiwiQWN0aW9uU2lkZWJhckl0ZW1Db21wb25lbnQiLCJvbkNsaWNrIiwiaXNFcXVhbCIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZURpc3BhdGNoIiwiRGF0YUhvb2tzIiwiYWN0aW9ucyIsInNvcnRXZWlnaHRlZEl0ZW1zIiwidXNlQnVpbGRDb250ZW50RGF0YSIsIkhlYWRlciIsIlNpZGViYXJJdGVtV3JhcHBlciIsInN0eWxlcyIsInVzZURlZXBDb21wYXJlTWVtb2l6ZSIsInJlZiIsImN1cnJlbnQiLCJ1c2VEZWVwQ29tcGFyZUVmZmVjdCIsImNhbGxiYWNrIiwiZGVwcyIsIm1hcCIsIkNvbnRlbnRDb21wb25lbnQiLCJwYWdlIiwicGFyYW1zIiwiZGlzcGF0Y2giLCJzdGF0ZVNlbGVjdG9ySG9vayIsInBlcm1pc3Npb25TZWxlY3Rvckhvb2siLCJzZXRQYXJhbXMiLCJjb250ZW50Iiwic2lkZWJhckl0ZW1zIiwic2lkZWJhciIsImxlbmd0aCIsImFjdGlvbnNIZWFkZXIiLCJzYiIsImluZGV4Iiwic2lkZWJhckl0ZW0iLCJwYXJlbnQiLCJ3cmFwcGVyIiwiaGVhZGVyIiwiZnVsbCIsImNvbnRlbnRGdWxsIiwiZGF0YUhvb2tzIiwiQ3VzdG9tU2lkZWJhckl0ZW1Db21wb25lbnQiLCJyZW5kZXIiLCJoZWFkZXJJbmZvIiwidGl0bGUiLCJMaW5rIiwiZ2V0Um91dGVUbyIsIlBsYWluU2lkZWJhckl0ZW0iLCJRdWVyeSIsIkRpdmlkZXIiLCJpc0FjdGlvbkZvcm1TaWRlYmFySXRlbSIsImlzQWN0aW9uU2lkZWJhckl0ZW0iLCJpc0N1c3RvbVNpZGViYXJJdGVtIiwiaXNEaXZpZGVyU2lkZWJhckl0ZW0iLCJwYXJlbnREYXRhIiwidmlzaWJsZSIsInEiLCJ0ZXN0IiwiaXNQYWdlIiwiY3JlYXRlUGFnZXMiLCJyb3V0ZXMiLCJwYWdlcyIsInJlbmRlclJvdXRlUHJvcHNPYmoiLCJrZXlzIiwidHlwZXMiLCJyZWR1Y2UiLCJtZW1vIiwia2V5IiwicGciLCJyZW5kZXJSb3V0ZVByb3BzIiwiZGl2aWRlclNpZGViYXJJdGVtIiwidGV4dCIsImRpdmlkZXIiLCJ1c2VCdWlsZERhdGEiLCJyb3V0ZUl0ZW0iLCJidWlsZERhdGEiLCJpY29uTmFtZSIsImNvbG9yIiwiY29tcG9zZSIsInVzZUxvY2F0aW9uIiwiRXhlY3V0ZURhdGFIb29rIiwicGF0aG5hbWUiLCJob29rIiwiZm4iLCJBcnJheSIsImlzQXJyYXkiLCJyb3V0ZU1hdGNoIiwicm91dGVQYXJhbXMiLCJkYXRhSG9vayIsImRoIiwiaW5kZXgyIiwiRXhlY3V0ZVBlcm1pc3Npb25Ib29rIiwicGVybWlzc2lvbkhvb2siLCJwZXJtcyIsImZvckVhY2giLCJwZXJtaXNzaW9uIiwic2V0UGVybWlzc2lvbiIsInJlc3VsdCIsIlBlcm1pc3Npb25Ib29rcyIsInBlcm1pc3Npb25Ib29rcyIsInVzZUF1dGgiLCJjb21wYWN0IiwibWVyZ2UiLCJxdWVyeVN0cmluZyIsInVzZUxheW91dFN0YXRlIiwidXNlSXNBY3RpdmVSb3V0ZSIsInVzZVNlbGVjdFBlcm1pc3Npb24iLCJ1c2VTZWxlY3RTdGF0ZSIsImlkIiwicGVybWlzc2lvbnMiLCJzdGF0ZSIsImxvYyIsInJvdXRlIiwicGF0aCIsInNwbGl0IiwiaGFzaCIsInNlYXJjaCIsInBhcnNlIiwiYWN0aXZlIiwicGVybWlzc2lvbnNYIiwibmV3RGF0YSIsInVzZVJvdXRlTWF0Y2giLCJyb3V0ZU1hdGNoT2JqZWN0IiwiZmxvd1JpZ2h0IiwiZmluYWxTZWxlY3Rvckhvb2siLCJDdXN0b21MYXlvdXRJdGVtQ29tcG9uZW50IiwiQWNjb3JkaW9uIiwiRHJvcGRvd24iLCJNZW51IiwiRHJvcGRvd25JdGVtIiwidmVydGljYWwiLCJjaGlsZHJlbiIsIm9wZW4iLCJzZXRPcGVuIiwidmVydGljYWxEcm9wZG93blRpdGxlIiwiZXYiLCJzdG9wUHJvcGFnYXRpb24iLCJ2ZXJ0aWNhbERyb3Bkb3duSWNvblJvdGF0ZWQiLCJ2ZXJ0aWNhbERyb3Bkb3duSWNvbiIsInZlcnRpY2FsRHJvcGRvd25Db250ZW50IiwiU2VnbWVudCIsIm1vdmVJdGVtcyIsIkxheW91dEl0ZW1CYXIiLCJTZWNvbmRhcnlNZW51VG9nZ2xlSXRlbSIsIkxheW91dCIsImZvb3RlciIsInByaW1hcnlNZW51Iiwic3RhdHVzYmFyIiwic2Vjb25kYXJ5TWVudSIsImlzTW9iaWxlIiwibWVudU9wZW4iLCJzZXRNZW51T3BlbiIsInByaW1hcnlNZW51VG9nZ2xlIiwid2VpZ2h0IiwicHJpbWFyeU1lbnVJdGVtcyIsImZpbHRlciIsInYiLCJzZWNvbmRhcnlNZW51SXRlbXMiLCJtZW51Iiwic2Vjb25kYXJ5TWVudUNvbXAiLCJzZWNvbmRhcnlNZW51SGlkZGVuIiwiZm9vdGVySXRlbXMiLCJmb290ZXJDb21wIiwic3RhdHVzYmFySXRlbXMiLCJzdGF0dXNiYXJDb21wIiwibWVudWJhciIsImNvbnRlbnRXcmFwcGVyIiwic3BsaXRQb3NpdGlvbmVkSXRlbXMiLCJMYXlvdXRJdGVtV3JhcHBlciIsIml0ZW1zIiwicmVzdCIsImltcyIsImxlZnRJdGVtcyIsInJpZ2h0SXRlbXMiLCJpc0N1c3RvbUxheW91dEl0ZW0iLCJpc0Ryb3Bkb3duTGF5b3V0SXRlbSIsImlzTWVudUxheW91dEl0ZW0iLCJNZW51SXRlbSIsIlBsYWluSXRlbSIsImFzIiwiZHJvcGRvd24iLCJJdGVtIiwibGlua1BhcmFtZXRlcnMiLCJsaW5rUGFyYW1zIiwiSXRlbVgiLCJpY29uUm90YXRlZCIsInVzZU1lZGlhUXVlcnkiLCJ1c2VNb2JpbGVMYXlvdXQiLCJpc01vYmlsZVgiLCJxdWVyeSIsInNldE1vYmlsZSIsImdyb3VwQnkiLCJwdWxsSXRlbXMiLCJwdWxsZWQiLCJtb3ZlVG9LZXkiLCJwdXNoIiwiYWRkSXRlbXMiLCJuZXdJdGVtcyIsIml0ZW1zTWludXNQdWxsZWQiLCJpc0ltcGVyaXVtTGF5b3V0Q2xpZW50TW9kdWxlIiwiaW5pdGlhbExheW91dE1vZHVsZURhdGEiLCJwZXJtaXNzaW9uU2VsZWN0b3JIb29rcyIsIndpdGhMYXlvdXQiLCJjbGllbnQiLCJsYXlvdXRNb2R1bGVEYXRhIiwibW9kdWxlcyIsIm1vZHVsZSIsImxheW91dCIsImxheW91dEhvYyIsIldyYXBwZWQiLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJXaXRoTGF5b3V0IiwicHJvcHMiLCJjcmVhdGVTbGljZUhvb2siLCJjcmVhdGVTbGljZSIsImluaXRpYWxTdGF0ZSIsInJlZHVjZXJzIiwic3QiLCJhY3Rpb24iLCJwYXlsb2FkIiwibGF5b3V0TW9kdWxlIiwibWVtb2l6ZSIsInNvcnRCeSIsInNvcnRXZWlnaHRlZEl0ZW1zSW1wbCIsImxheW91dENsaWVudE1vZHVsZSIsIm9yZGVyIiwiaG9jcyIsImxheW91dEFjdGlvbnMiXSwic291cmNlUm9vdCI6IiJ9
|