nsc-react-component 2.12.2 → 2.13.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/lib/Interface.js +1 -1
- package/lib/Interface.js.map +1 -0
- package/lib/base/affix/index.js +5 -46
- package/lib/base/affix/index.js.map +1 -0
- package/lib/base/alert/index.js +5 -46
- package/lib/base/alert/index.js.map +1 -0
- package/lib/base/anchor/index.js +8 -49
- package/lib/base/anchor/index.js.map +1 -0
- package/lib/base/avatar/index.js +8 -49
- package/lib/base/avatar/index.js.map +1 -0
- package/lib/base/backTop/index.js +5 -46
- package/lib/base/backTop/index.js.map +1 -0
- package/lib/base/badge/index.js +8 -49
- package/lib/base/badge/index.js.map +1 -0
- package/lib/base/breadcrumb/index.js +5 -46
- package/lib/base/breadcrumb/index.js.map +1 -0
- package/lib/base/button/index.d.ts +1 -1
- package/lib/base/button/index.js +93 -134
- package/lib/base/button/index.js.map +1 -0
- package/lib/base/calendar/index.js +5 -46
- package/lib/base/calendar/index.js.map +1 -0
- package/lib/base/card/index.js +8 -50
- package/lib/base/card/index.js.map +1 -0
- package/lib/base/carousel/index.js +5 -46
- package/lib/base/carousel/index.js.map +1 -0
- package/lib/base/cascader/index.d.ts +3 -3
- package/lib/base/cascader/index.js +150 -221
- package/lib/base/cascader/index.js.map +1 -0
- package/lib/base/chart/index.d.ts +2 -2
- package/lib/base/chart/index.js +178 -287
- package/lib/base/chart/index.js.map +1 -0
- package/lib/base/checkbox/CheckboxGroup.d.ts +3 -3
- package/lib/base/checkbox/CheckboxGroup.js +165 -258
- package/lib/base/checkbox/CheckboxGroup.js.map +1 -0
- package/lib/base/checkbox/index.d.ts +2 -2
- package/lib/base/checkbox/index.js +8 -48
- package/lib/base/checkbox/index.js.map +1 -0
- package/lib/base/collapse/index.js +8 -49
- package/lib/base/collapse/index.js.map +1 -0
- package/lib/base/comment/index.js +5 -46
- package/lib/base/comment/index.js.map +1 -0
- package/lib/base/common/BodyRow/index.js +48 -102
- package/lib/base/common/BodyRow/index.js.map +1 -0
- package/lib/base/common/EllipseCell/index.d.ts +1 -1
- package/lib/base/common/EllipseCell/index.js +16 -57
- package/lib/base/common/EllipseCell/index.js.map +1 -0
- package/lib/base/common/FileIcon.d.ts +2 -2
- package/lib/base/common/FileIcon.js +86 -132
- package/lib/base/common/FileIcon.js.map +1 -0
- package/lib/base/common/Icon.d.ts +2 -2
- package/lib/base/common/Icon.js +42 -96
- package/lib/base/common/Icon.js.map +1 -0
- package/lib/base/common/IconData.js +2 -2
- package/lib/base/common/IconData.js.map +1 -0
- package/lib/base/common/IconFont.d.ts +2 -2
- package/lib/base/common/IconFont.js +6 -8
- package/lib/base/common/IconFont.js.map +1 -0
- package/lib/base/common/NoAuthority.d.ts +2 -2
- package/lib/base/common/NoAuthority.js +13 -53
- package/lib/base/common/NoAuthority.js.map +1 -0
- package/lib/base/common/NoData.d.ts +2 -2
- package/lib/base/common/NoData.js +34 -74
- package/lib/base/common/NoData.js.map +1 -0
- package/lib/base/common/NoMessage.d.ts +2 -2
- package/lib/base/common/NoMessage.js +30 -70
- package/lib/base/common/NoMessage.js.map +1 -0
- package/lib/base/common/NoNetWork.d.ts +2 -2
- package/lib/base/common/NoNetWork.js +30 -70
- package/lib/base/common/NoNetWork.js.map +1 -0
- package/lib/base/common/Page404.d.ts +2 -2
- package/lib/base/common/Page404.js +30 -70
- package/lib/base/common/Page404.js.map +1 -0
- package/lib/base/common/PageRequest.js +91 -154
- package/lib/base/common/PageRequest.js.map +1 -0
- package/lib/base/common/TreePanel.d.ts +1 -1
- package/lib/base/common/TreePanel.js +133 -212
- package/lib/base/common/TreePanel.js.map +1 -0
- package/lib/base/common/iconfontalibaba.js +15 -22
- package/lib/base/common/iconfontalibaba.js.map +1 -0
- package/lib/base/common/withZhLocale.d.ts +1 -1
- package/lib/base/common/withZhLocale.js +3 -7
- package/lib/base/common/withZhLocale.js.map +1 -0
- package/lib/base/configProvider/index.js +8 -49
- package/lib/base/configProvider/index.js.map +1 -0
- package/lib/base/datepick/Rangepicker.d.ts +3 -3
- package/lib/base/datepick/Rangepicker.js +229 -325
- package/lib/base/datepick/Rangepicker.js.map +1 -0
- package/lib/base/datepick/index.d.ts +2 -2
- package/lib/base/datepick/index.js +56 -113
- package/lib/base/datepick/index.js.map +1 -0
- package/lib/base/descriptions/index.js +8 -49
- package/lib/base/descriptions/index.js.map +1 -0
- package/lib/base/divider/index.js +5 -46
- package/lib/base/divider/index.js.map +1 -0
- package/lib/base/download/index.js +42 -84
- package/lib/base/download/index.js.map +1 -0
- package/lib/base/drawer/index.js +14 -57
- package/lib/base/drawer/index.js.map +1 -0
- package/lib/base/dropdown/index.js +19 -65
- package/lib/base/dropdown/index.js.map +1 -0
- package/lib/base/editor/index.d.ts +1 -1
- package/lib/base/editor/index.js +83 -128
- package/lib/base/editor/index.js.map +1 -0
- package/lib/base/errorboundary/index.js +19 -63
- package/lib/base/errorboundary/index.js.map +1 -0
- package/lib/base/form/Form.d.ts +2 -2
- package/lib/base/form/Form.js +314 -427
- package/lib/base/form/Form.js.map +1 -0
- package/lib/base/form/filed/Cascader.d.ts +2 -2
- package/lib/base/form/filed/Cascader.js +6 -45
- package/lib/base/form/filed/Cascader.js.map +1 -0
- package/lib/base/form/filed/Checkbox.d.ts +2 -2
- package/lib/base/form/filed/Checkbox.js +6 -45
- package/lib/base/form/filed/Checkbox.js.map +1 -0
- package/lib/base/form/filed/DatePicker.d.ts +2 -2
- package/lib/base/form/filed/DatePicker.js +6 -45
- package/lib/base/form/filed/DatePicker.js.map +1 -0
- package/lib/base/form/filed/FormItem.d.ts +2 -2
- package/lib/base/form/filed/FormItem.js +65 -127
- package/lib/base/form/filed/FormItem.js.map +1 -0
- package/lib/base/form/filed/Input.d.ts +2 -2
- package/lib/base/form/filed/Input.js +14 -51
- package/lib/base/form/filed/Input.js.map +1 -0
- package/lib/base/form/filed/InputEamil.d.ts +2 -2
- package/lib/base/form/filed/InputEamil.js +5 -44
- package/lib/base/form/filed/InputEamil.js.map +1 -0
- package/lib/base/form/filed/InputNumber.d.ts +2 -2
- package/lib/base/form/filed/InputNumber.js +5 -44
- package/lib/base/form/filed/InputNumber.js.map +1 -0
- package/lib/base/form/filed/InputPassword.d.ts +2 -2
- package/lib/base/form/filed/InputPassword.js +5 -44
- package/lib/base/form/filed/InputPassword.js.map +1 -0
- package/lib/base/form/filed/Item.d.ts +3 -3
- package/lib/base/form/filed/Item.js +91 -163
- package/lib/base/form/filed/Item.js.map +1 -0
- package/lib/base/form/filed/Radio.d.ts +2 -2
- package/lib/base/form/filed/Radio.js +7 -45
- package/lib/base/form/filed/Radio.js.map +1 -0
- package/lib/base/form/filed/RangerPicker.d.ts +2 -2
- package/lib/base/form/filed/RangerPicker.js +6 -45
- package/lib/base/form/filed/RangerPicker.js.map +1 -0
- package/lib/base/form/filed/Rate.d.ts +2 -2
- package/lib/base/form/filed/Rate.js +6 -46
- package/lib/base/form/filed/Rate.js.map +1 -0
- package/lib/base/form/filed/Select.d.ts +2 -2
- package/lib/base/form/filed/Select.js +9 -49
- package/lib/base/form/filed/Select.js.map +1 -0
- package/lib/base/form/filed/Slider.d.ts +2 -2
- package/lib/base/form/filed/Slider.js +6 -46
- package/lib/base/form/filed/Slider.js.map +1 -0
- package/lib/base/form/filed/Switch.d.ts +2 -2
- package/lib/base/form/filed/Switch.js +6 -46
- package/lib/base/form/filed/Switch.js.map +1 -0
- package/lib/base/form/filed/TagSelect.d.ts +2 -2
- package/lib/base/form/filed/TagSelect.js +6 -45
- package/lib/base/form/filed/TagSelect.js.map +1 -0
- package/lib/base/form/filed/TextArea.d.ts +2 -2
- package/lib/base/form/filed/TextArea.js +5 -44
- package/lib/base/form/filed/TextArea.js.map +1 -0
- package/lib/base/form/filed/Upload.d.ts +2 -2
- package/lib/base/form/filed/Upload.js +9 -45
- package/lib/base/form/filed/Upload.js.map +1 -0
- package/lib/base/form/index.js +17 -58
- package/lib/base/form/index.js.map +1 -0
- package/lib/base/grid/Col.js +5 -46
- package/lib/base/grid/Col.js.map +1 -0
- package/lib/base/grid/Row.js +5 -46
- package/lib/base/grid/Row.js.map +1 -0
- package/lib/base/grid/index.js +1 -1
- package/lib/base/grid/index.js.map +1 -0
- package/lib/base/iframe/index.d.ts +1 -1
- package/lib/base/iframe/index.js +44 -93
- package/lib/base/iframe/index.js.map +1 -0
- package/lib/base/image/index.js +163 -261
- package/lib/base/image/index.js.map +1 -0
- package/lib/base/input/Email.d.ts +2 -2
- package/lib/base/input/Email.js +55 -103
- package/lib/base/input/Email.js.map +1 -0
- package/lib/base/input/Number.d.ts +1 -1
- package/lib/base/input/Number.js +48 -104
- package/lib/base/input/Number.js.map +1 -0
- package/lib/base/input/Password.d.ts +1 -1
- package/lib/base/input/Password.js +48 -104
- package/lib/base/input/Password.js.map +1 -0
- package/lib/base/input/Search.d.ts +1 -1
- package/lib/base/input/Search.js +46 -102
- package/lib/base/input/Search.js.map +1 -0
- package/lib/base/input/TextArea.d.ts +1 -1
- package/lib/base/input/TextArea.js +64 -123
- package/lib/base/input/TextArea.js.map +1 -0
- package/lib/base/input/index.d.ts +2 -2
- package/lib/base/input/index.js +121 -195
- package/lib/base/input/index.js.map +1 -0
- package/lib/base/layout/index.js +14 -56
- package/lib/base/layout/index.js.map +1 -0
- package/lib/base/list/index.js +8 -49
- package/lib/base/list/index.js.map +1 -0
- package/lib/base/menu/index.d.ts +5 -5
- package/lib/base/menu/index.js +100 -164
- package/lib/base/menu/index.js.map +1 -0
- package/lib/base/message/index.js +5 -47
- package/lib/base/message/index.js.map +1 -0
- package/lib/base/modal/Confirm.js +14 -18
- package/lib/base/modal/Confirm.js.map +1 -0
- package/lib/base/modal/index.d.ts +1 -1
- package/lib/base/modal/index.js +274 -359
- package/lib/base/modal/index.js.map +1 -0
- package/lib/base/notification/index.js +5 -47
- package/lib/base/notification/index.js.map +1 -0
- package/lib/base/pageHeader/index.js +5 -46
- package/lib/base/pageHeader/index.js.map +1 -0
- package/lib/base/pagination/index.js +5 -46
- package/lib/base/pagination/index.js.map +1 -0
- package/lib/base/pdfviwer/index.d.ts +1 -1
- package/lib/base/pdfviwer/index.js +67 -92
- package/lib/base/pdfviwer/index.js.map +1 -0
- package/lib/base/popconfirm/index.js +5 -46
- package/lib/base/popconfirm/index.js.map +1 -0
- package/lib/base/popover/index.js +19 -65
- package/lib/base/popover/index.js.map +1 -0
- package/lib/base/progress/index.js +5 -46
- package/lib/base/progress/index.js.map +1 -0
- package/lib/base/radio/RadioGroup.d.ts +1 -1
- package/lib/base/radio/RadioGroup.js +198 -295
- package/lib/base/radio/RadioGroup.js.map +1 -0
- package/lib/base/radio/index.d.ts +1 -1
- package/lib/base/radio/index.js +8 -50
- package/lib/base/radio/index.js.map +1 -0
- package/lib/base/result/index.js +5 -46
- package/lib/base/result/index.js.map +1 -0
- package/lib/base/select/index.d.ts +4 -4
- package/lib/base/select/index.js +358 -475
- package/lib/base/select/index.js.map +1 -0
- package/lib/base/skeleton/index.js +5 -46
- package/lib/base/skeleton/index.js.map +1 -0
- package/lib/base/space/index.js +5 -46
- package/lib/base/space/index.js.map +1 -0
- package/lib/base/spin/index.js +5 -46
- package/lib/base/spin/index.js.map +1 -0
- package/lib/base/statistic/index.js +8 -49
- package/lib/base/statistic/index.js.map +1 -0
- package/lib/base/steps/index.js +8 -49
- package/lib/base/steps/index.js.map +1 -0
- package/lib/base/switch/index.js +5 -46
- package/lib/base/switch/index.js.map +1 -0
- package/lib/base/table/index.d.ts +8 -8
- package/lib/base/table/index.js +743 -927
- package/lib/base/table/index.js.map +1 -0
- package/lib/base/tabs/Tabpane.d.ts +1 -1
- package/lib/base/tabs/Tabpane.js +22 -58
- package/lib/base/tabs/Tabpane.js.map +1 -0
- package/lib/base/tabs/index.d.ts +1 -1
- package/lib/base/tabs/index.js +110 -156
- package/lib/base/tabs/index.js.map +1 -0
- package/lib/base/tagSelect/TagSelect.d.ts +3 -3
- package/lib/base/tagSelect/TagSelect.js +124 -213
- package/lib/base/tagSelect/TagSelect.js.map +1 -0
- package/lib/base/tagSelect/index.d.ts +3 -3
- package/lib/base/tagSelect/index.js +90 -145
- package/lib/base/tagSelect/index.js.map +1 -0
- package/lib/base/timeline/index.js +8 -49
- package/lib/base/timeline/index.js.map +1 -0
- package/lib/base/tooltip/index.js +19 -65
- package/lib/base/tooltip/index.js.map +1 -0
- package/lib/base/transfer/index.js +5 -46
- package/lib/base/transfer/index.js.map +1 -0
- package/lib/base/tree/TreeSearch.d.ts +3 -3
- package/lib/base/tree/TreeSearch.js +119 -186
- package/lib/base/tree/TreeSearch.js.map +1 -0
- package/lib/base/tree/index.d.ts +2 -2
- package/lib/base/tree/index.js +169 -241
- package/lib/base/tree/index.js.map +1 -0
- package/lib/base/treeselect/index.js +5 -46
- package/lib/base/treeselect/index.js.map +1 -0
- package/lib/base/typography/index.js +5 -46
- package/lib/base/typography/index.js.map +1 -0
- package/lib/base/upload/Dragger.js +370 -605
- package/lib/base/upload/Dragger.js.map +1 -0
- package/lib/base/upload/Upload.js +352 -529
- package/lib/base/upload/Upload.js.map +1 -0
- package/lib/base/upload/index copy.d.ts +1 -1
- package/lib/base/upload/index copy.js +315 -431
- package/lib/base/upload/index copy.js.map +1 -0
- package/lib/base/upload/index.js +367 -640
- package/lib/base/upload/index.js.map +1 -0
- package/lib/config.d.ts +2 -0
- package/lib/config.js +7 -9
- package/lib/config.js.map +1 -0
- package/lib/constants.js +2 -2
- package/lib/constants.js.map +1 -0
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -0
- package/lib/page/BasePage/Form.d.ts +1 -1
- package/lib/page/BasePage/Form.js +253 -360
- package/lib/page/BasePage/Form.js.map +1 -0
- package/lib/page/BasePage/index.d.ts +9 -4
- package/lib/page/BasePage/index.js +864 -962
- package/lib/page/BasePage/index.js.map +1 -0
- package/lib/page/BasePage/index.module copy.less +144 -0
- package/lib/page/BasePage/index.module.less +92 -58
- package/lib/page/HeaderSearch/index.d.ts +1 -1
- package/lib/page/HeaderSearch/index.js +196 -272
- package/lib/page/HeaderSearch/index.js.map +1 -0
- package/lib/page/PasswordCheck/index.d.ts +1 -1
- package/lib/page/PasswordCheck/index.js +53 -109
- package/lib/page/PasswordCheck/index.js.map +1 -0
- package/lib/treeUtils.js +45 -58
- package/lib/treeUtils.js.map +1 -0
- package/lib/utils.d.ts +2 -2
- package/lib/utils.js +48 -61
- package/lib/utils.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,56 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
_excluded6 = ["store", "showSearch", "titleAlias"];
|
|
9
|
-
|
|
10
|
-
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
11
|
-
|
|
1
|
+
const _excluded = ["children", "pageType", "onClick", "icon", "show"],
|
|
2
|
+
_excluded2 = ["children", "pageType", "onClick", "icon", "recordShow"],
|
|
3
|
+
_excluded3 = ["children", "pageType", "onClick", "recordShow", "icon", "show"],
|
|
4
|
+
_excluded4 = ["children", "pageType", "onClick", "recordShow", "icon"],
|
|
5
|
+
_excluded5 = ["store", "filterColumn", "actionColumn", "showRowSelection", "columnOrder", "expandable", "parantSelect", "title"],
|
|
6
|
+
_excluded6 = ["store", "showSearch", "titleAlias", "title"];
|
|
7
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
12
8
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
13
|
-
|
|
14
9
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
15
|
-
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
21
|
-
|
|
22
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
23
|
-
|
|
24
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
25
|
-
|
|
26
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
27
|
-
|
|
28
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
29
|
-
|
|
30
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
31
|
-
|
|
32
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
33
|
-
|
|
34
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
35
|
-
|
|
36
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
37
|
-
|
|
38
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
39
|
-
|
|
40
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
41
|
-
|
|
42
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
43
|
-
|
|
44
|
-
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
45
|
-
|
|
46
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
47
|
-
|
|
48
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
49
|
-
|
|
50
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
51
|
-
|
|
52
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
53
|
-
|
|
10
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
11
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
13
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
14
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
54
15
|
import React, { PureComponent } from "react";
|
|
55
16
|
import Table from "../../base/table";
|
|
56
17
|
import Tree from "../../base/tree";
|
|
@@ -60,7 +21,7 @@ import Popover from "../../base/popover";
|
|
|
60
21
|
import message from "../../base/message";
|
|
61
22
|
import EditorForm from "./Form";
|
|
62
23
|
import cls from "classnames";
|
|
63
|
-
import
|
|
24
|
+
import "./index.module.less";
|
|
64
25
|
import { utils } from "@bj-nsc/msn/lib/utils";
|
|
65
26
|
import { DownOutlined, EyeOutlined, EditOutlined, RightOutlined, PlusOutlined, EllipsisOutlined, DeleteOutlined } from "@ant-design/icons";
|
|
66
27
|
import { getLess } from "../../utils";
|
|
@@ -68,71 +29,52 @@ import request from "nsc-request";
|
|
|
68
29
|
import config from "../../config";
|
|
69
30
|
import { getStorage } from "@bj-nsc/functions";
|
|
70
31
|
import HeaderSearch from "../HeaderSearch";
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
var _super = _createSuper(BasePage);
|
|
76
|
-
|
|
77
|
-
function BasePage(props) {
|
|
32
|
+
const styles = null;
|
|
33
|
+
class BasePage extends PureComponent {
|
|
34
|
+
constructor(props) {
|
|
78
35
|
var _type, _size;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
_defineProperty(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
_defineProperty(_assertThisInitialized(_this2), "onSelect", function (checkedTreeKeys) {
|
|
97
|
-
var _this2$state = _this2.state,
|
|
98
|
-
name = _this2$state.name,
|
|
99
|
-
userType = _this2$state.userType,
|
|
100
|
-
account = _this2$state.account;
|
|
101
|
-
var value = {
|
|
102
|
-
name: name,
|
|
103
|
-
userType: userType,
|
|
104
|
-
account: account,
|
|
36
|
+
super(props);
|
|
37
|
+
_defineProperty(this, "tableRef", /*#__PURE__*/React.createRef());
|
|
38
|
+
_defineProperty(this, "treeRef", /*#__PURE__*/React.createRef());
|
|
39
|
+
_defineProperty(this, "searchRef", /*#__PURE__*/React.createRef());
|
|
40
|
+
_defineProperty(this, "editorRef", /*#__PURE__*/React.createRef());
|
|
41
|
+
_defineProperty(this, "pageRef", /*#__PURE__*/React.createRef());
|
|
42
|
+
_defineProperty(this, "dateFormat", {});
|
|
43
|
+
_defineProperty(this, "onSelect", checkedTreeKeys => {
|
|
44
|
+
const {
|
|
45
|
+
name,
|
|
46
|
+
userType,
|
|
47
|
+
account
|
|
48
|
+
} = this.state;
|
|
49
|
+
const value = {
|
|
50
|
+
name,
|
|
51
|
+
userType,
|
|
52
|
+
account,
|
|
105
53
|
deptId: checkedTreeKeys[0]
|
|
106
54
|
};
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
55
|
+
if (this.props.onSearch) {
|
|
56
|
+
this.props.onSearch(value);
|
|
57
|
+
}
|
|
58
|
+
// this.tableLoad(value);
|
|
112
59
|
});
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
for (var key in selected) {
|
|
118
|
-
var keys = selected[key];
|
|
119
|
-
|
|
60
|
+
_defineProperty(this, "getSelectedKey", selected => {
|
|
61
|
+
let res = [];
|
|
62
|
+
for (let key in selected) {
|
|
63
|
+
const keys = selected[key];
|
|
120
64
|
if (keys.length > 0) {
|
|
121
|
-
res = [
|
|
65
|
+
res = [...res, ...keys];
|
|
122
66
|
}
|
|
123
67
|
}
|
|
124
|
-
|
|
125
68
|
return res;
|
|
126
69
|
});
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
var type = getStorage(storePrefix ? storePrefix + "-" + "formType" : "formType");
|
|
70
|
+
let {
|
|
71
|
+
storePrefix
|
|
72
|
+
} = config();
|
|
73
|
+
let type = getStorage(storePrefix ? storePrefix + "-" + "formType" : "formType");
|
|
132
74
|
type = (_type = type) === null || _type === void 0 ? void 0 : _type.content;
|
|
133
|
-
|
|
75
|
+
let size = getStorage(storePrefix ? storePrefix + "-" + "tableSize" : "tableSize");
|
|
134
76
|
size = (_size = size) === null || _size === void 0 ? void 0 : _size.content;
|
|
135
|
-
|
|
77
|
+
this.state = {
|
|
136
78
|
type: "add",
|
|
137
79
|
selectedRowKeys: [],
|
|
138
80
|
selectedRowDatas: [],
|
|
@@ -141,923 +83,883 @@ var BasePage = /*#__PURE__*/function (_PureComponent) {
|
|
|
141
83
|
formType: type || "modal",
|
|
142
84
|
tableSize: size || "default",
|
|
143
85
|
treeSearchPrams: {},
|
|
144
|
-
popopens: {}
|
|
86
|
+
popopens: {},
|
|
87
|
+
moreOpen: false,
|
|
88
|
+
elementHeight: 0
|
|
145
89
|
};
|
|
146
|
-
return _this2;
|
|
147
90
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
function showForm(value) {
|
|
167
|
-
var _this$editorRef$curre;
|
|
168
|
-
|
|
169
|
-
var editorflag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "add";
|
|
170
|
-
(_this$editorRef$curre = this.editorRef.current) === null || _this$editorRef$curre === void 0 ? void 0 : _this$editorRef$curre.show(value, editorflag);
|
|
171
|
-
} //关闭表单
|
|
172
|
-
|
|
173
|
-
}, {
|
|
174
|
-
key: "hideForm",
|
|
175
|
-
value: function hideForm() {
|
|
176
|
-
var _this$editorRef$curre2;
|
|
177
|
-
|
|
178
|
-
(_this$editorRef$curre2 = this.editorRef.current) === null || _this$editorRef$curre2 === void 0 ? void 0 : _this$editorRef$curre2.hideForm();
|
|
91
|
+
componentDidMount() {
|
|
92
|
+
var _this$pageRef$current;
|
|
93
|
+
const {
|
|
94
|
+
initData
|
|
95
|
+
} = this.props;
|
|
96
|
+
const elementHeight = (_this$pageRef$current = this.pageRef.current) === null || _this$pageRef$current === void 0 ? void 0 : _this$pageRef$current.clientHeight;
|
|
97
|
+
this.setState({
|
|
98
|
+
elementHeight
|
|
99
|
+
});
|
|
100
|
+
initData && initData();
|
|
101
|
+
}
|
|
102
|
+
componentDidUpdate() {
|
|
103
|
+
var _this$pageRef$current2;
|
|
104
|
+
const elementHeight = (_this$pageRef$current2 = this.pageRef.current) === null || _this$pageRef$current2 === void 0 ? void 0 : _this$pageRef$current2.clientHeight;
|
|
105
|
+
if (elementHeight > this.state.elementHeight) {
|
|
106
|
+
this.setState({
|
|
107
|
+
elementHeight
|
|
108
|
+
});
|
|
179
109
|
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
110
|
+
}
|
|
111
|
+
setSearchParams(params, callBack) {
|
|
112
|
+
var _this$searchRef$curre;
|
|
113
|
+
(_this$searchRef$curre = this.searchRef.current) === null || _this$searchRef$curre === void 0 || _this$searchRef$curre.setSearchParams(params);
|
|
114
|
+
callBack && callBack(params);
|
|
115
|
+
}
|
|
116
|
+
//显示表单
|
|
117
|
+
showForm(value) {
|
|
118
|
+
var _this$editorRef;
|
|
119
|
+
let editorflag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "add";
|
|
120
|
+
(_this$editorRef = this.editorRef) === null || _this$editorRef === void 0 || (_this$editorRef = _this$editorRef.current) === null || _this$editorRef === void 0 || _this$editorRef.show(_objectSpread({}, value), editorflag);
|
|
121
|
+
}
|
|
184
122
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
123
|
+
//关闭表单
|
|
124
|
+
hideForm() {
|
|
125
|
+
var _this$editorRef$curre;
|
|
126
|
+
(_this$editorRef$curre = this.editorRef.current) === null || _this$editorRef$curre === void 0 || _this$editorRef$curre.hideForm();
|
|
127
|
+
}
|
|
128
|
+
setLoading(loading) {
|
|
129
|
+
var _this$editorRef$curre2;
|
|
130
|
+
(_this$editorRef$curre2 = this.editorRef.current) === null || _this$editorRef$curre2 === void 0 || _this$editorRef$curre2.setLoading(loading);
|
|
131
|
+
}
|
|
132
|
+
setEditFormValues(value) {
|
|
133
|
+
var _this$editorRef$curre3;
|
|
134
|
+
(_this$editorRef$curre3 = this.editorRef.current) === null || _this$editorRef$curre3 === void 0 || _this$editorRef$curre3.setFieldsValue(value);
|
|
135
|
+
}
|
|
136
|
+
getEditFormValues() {
|
|
137
|
+
var _this$editorRef$curre4;
|
|
138
|
+
return (_this$editorRef$curre4 = this.editorRef.current) === null || _this$editorRef$curre4 === void 0 ? void 0 : _this$editorRef$curre4.getFieldsValue();
|
|
139
|
+
}
|
|
191
140
|
|
|
192
|
-
|
|
141
|
+
//批量删除
|
|
142
|
+
onDelete(data) {
|
|
143
|
+
var _this$tableRef$curren;
|
|
144
|
+
const {
|
|
145
|
+
deleteUrl,
|
|
146
|
+
onDelete,
|
|
147
|
+
deleteParams,
|
|
148
|
+
deletePosition = "toolbar"
|
|
149
|
+
} = this.props;
|
|
150
|
+
let _this = this;
|
|
151
|
+
const selectedRowKeys = (_this$tableRef$curren = this.tableRef.current) === null || _this$tableRef$curren === void 0 ? void 0 : _this$tableRef$curren.getSelectedRowKeys();
|
|
152
|
+
if (deletePosition == "toolbar") {
|
|
153
|
+
if (selectedRowKeys.length == 0) {
|
|
154
|
+
message.warning("请选择要删除的数据!");
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
193
157
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
} //批量删除
|
|
201
|
-
|
|
202
|
-
}, {
|
|
203
|
-
key: "onDelete",
|
|
204
|
-
value: function onDelete(data) {
|
|
205
|
-
var _this$tableRef$curren;
|
|
206
|
-
|
|
207
|
-
var _this$props = this.props,
|
|
208
|
-
deleteUrl = _this$props.deleteUrl,
|
|
209
|
-
onDelete = _this$props.onDelete,
|
|
210
|
-
deleteParams = _this$props.deleteParams,
|
|
211
|
-
_this$props$deletePos = _this$props.deletePosition,
|
|
212
|
-
deletePosition = _this$props$deletePos === void 0 ? "toolbar" : _this$props$deletePos;
|
|
213
|
-
|
|
214
|
-
var _this = this;
|
|
215
|
-
|
|
216
|
-
var selectedRowKeys = (_this$tableRef$curren = this.tableRef.current) === null || _this$tableRef$curren === void 0 ? void 0 : _this$tableRef$curren.getSelectedRowKeys();
|
|
217
|
-
|
|
218
|
-
if (deletePosition == "toolbar") {
|
|
219
|
-
if (selectedRowKeys.length == 0) {
|
|
220
|
-
message.warning("请选择要删除的数据!");
|
|
158
|
+
Modal.confirm({
|
|
159
|
+
content: "是否确认删除所选项?",
|
|
160
|
+
// centered:true,
|
|
161
|
+
onOk: () => {
|
|
162
|
+
if (onDelete) {
|
|
163
|
+
onDelete && onDelete(deletePosition == "toolbar" ? selectedRowKeys : data);
|
|
221
164
|
return;
|
|
222
165
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
Modal.confirm({
|
|
226
|
-
content: "是否确认删除所选项?",
|
|
227
|
-
// centered:true,
|
|
228
|
-
onOk: function onOk() {
|
|
229
|
-
if (onDelete) {
|
|
230
|
-
onDelete && onDelete(deletePosition == "toolbar" ? selectedRowKeys : data);
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (!deleteUrl) {
|
|
235
|
-
throw new Error("url不能为空!");
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
var defaultParams = {
|
|
239
|
-
method: "post",
|
|
240
|
-
autoPrefix: true,
|
|
241
|
-
params: {
|
|
242
|
-
ids: deletePosition == "toolbar" ? selectedRowKeys.join() : data.id
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
var requestParams = {};
|
|
246
|
-
|
|
247
|
-
if (defaultParams) {
|
|
248
|
-
requestParams = _objectSpread({}, deleteParams);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
requestParams = _objectSpread({}, defaultParams);
|
|
252
|
-
request(deleteUrl, _objectSpread({}, requestParams)).then(function (res) {
|
|
253
|
-
var code = res.code;
|
|
254
|
-
|
|
255
|
-
if (code === 200) {
|
|
256
|
-
var _this$searchRef, _this$searchRef$curre2, _this$props$onCallBac, _this$props$onCallBac2;
|
|
257
|
-
|
|
258
|
-
message.success("删除成功!");
|
|
259
|
-
|
|
260
|
-
var _value = (_this$searchRef = _this.searchRef) === null || _this$searchRef === void 0 ? void 0 : (_this$searchRef$curre2 = _this$searchRef.current) === null || _this$searchRef$curre2 === void 0 ? void 0 : _this$searchRef$curre2.getSearchValues();
|
|
261
|
-
|
|
262
|
-
((_this$props$onCallBac = _this.props.onCallBacks) === null || _this$props$onCallBac === void 0 ? void 0 : _this$props$onCallBac.onDeleteCallBack) && ((_this$props$onCallBac2 = _this.props.onCallBacks) === null || _this$props$onCallBac2 === void 0 ? void 0 : _this$props$onCallBac2.onDeleteCallBack());
|
|
263
|
-
|
|
264
|
-
_this.tableLoad(_value);
|
|
265
|
-
} else {
|
|
266
|
-
message.error("删除失败!");
|
|
267
|
-
}
|
|
268
|
-
}).catch(function (error) {
|
|
269
|
-
console.log("error", error);
|
|
270
|
-
});
|
|
166
|
+
if (!deleteUrl) {
|
|
167
|
+
throw new Error("url不能为空!");
|
|
271
168
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
var _this$tableRef$curren2;
|
|
278
|
-
|
|
279
|
-
var requestConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
280
|
-
(_this$tableRef$curren2 = this.tableRef.current) === null || _this$tableRef$curren2 === void 0 ? void 0 : _this$tableRef$curren2.store.load(_objectSpread(_objectSpread({}, requestConfig), {}, {
|
|
281
|
-
params: params
|
|
282
|
-
}));
|
|
283
|
-
} //查询
|
|
284
|
-
|
|
285
|
-
}, {
|
|
286
|
-
key: "onSearch",
|
|
287
|
-
value: function onSearch(params) {
|
|
288
|
-
var _this$props2 = this.props,
|
|
289
|
-
onSearch = _this$props2.onSearch,
|
|
290
|
-
onCallBacks = _this$props2.onCallBacks;
|
|
291
|
-
|
|
292
|
-
if (onSearch) {
|
|
293
|
-
onSearch(_objectSpread(_objectSpread({}, params), this.state.treeSearchPrams));
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
this.tableLoad(_objectSpread(_objectSpread({}, params), this.state.treeSearchPrams));
|
|
298
|
-
(onCallBacks === null || onCallBacks === void 0 ? void 0 : onCallBacks.onSearchCallBack) && utils.callback(onCallBacks === null || onCallBacks === void 0 ? void 0 : onCallBacks.onSearchCallBack, this, [params]);
|
|
299
|
-
} //表格重新加载
|
|
300
|
-
|
|
301
|
-
}, {
|
|
302
|
-
key: "tableReload",
|
|
303
|
-
value: function tableReload() {
|
|
304
|
-
var _this$tableRef$curren3,
|
|
305
|
-
_this$tableRef$curren4,
|
|
306
|
-
_this3 = this;
|
|
307
|
-
|
|
308
|
-
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
309
|
-
var autoLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
310
|
-
(_this$tableRef$curren3 = this.tableRef.current) === null || _this$tableRef$curren3 === void 0 ? void 0 : (_this$tableRef$curren4 = _this$tableRef$curren3.store) === null || _this$tableRef$curren4 === void 0 ? void 0 : _this$tableRef$curren4.reload({
|
|
311
|
-
callback: function callback(res) {
|
|
312
|
-
var _res$data, _res$data$records;
|
|
313
|
-
|
|
314
|
-
if (autoLoad && (res === null || res === void 0 ? void 0 : (_res$data = res.data) === null || _res$data === void 0 ? void 0 : (_res$data$records = _res$data.records) === null || _res$data$records === void 0 ? void 0 : _res$data$records.length) == 0 && _this3.state.currentPage !== 1) {
|
|
315
|
-
var _this3$tableRef$curre, _this3$tableRef$curre2;
|
|
316
|
-
|
|
317
|
-
(_this3$tableRef$curre = _this3.tableRef.current) === null || _this3$tableRef$curre === void 0 ? void 0 : (_this3$tableRef$curre2 = _this3$tableRef$curre.store) === null || _this3$tableRef$curre2 === void 0 ? void 0 : _this3$tableRef$curre2.reload({
|
|
318
|
-
params: _objectSpread({
|
|
319
|
-
current: 1
|
|
320
|
-
}, params)
|
|
321
|
-
});
|
|
169
|
+
const defaultParams = {
|
|
170
|
+
method: "post",
|
|
171
|
+
autoPrefix: true,
|
|
172
|
+
params: {
|
|
173
|
+
ids: deletePosition == "toolbar" ? selectedRowKeys.join() : data.id
|
|
322
174
|
}
|
|
175
|
+
};
|
|
176
|
+
let requestParams = {};
|
|
177
|
+
if (defaultParams) {
|
|
178
|
+
requestParams = _objectSpread({}, deleteParams);
|
|
323
179
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
value: function getSelectedRowDatas() {
|
|
336
|
-
var _this$tableRef$curren6;
|
|
337
|
-
|
|
338
|
-
return (_this$tableRef$curren6 = this.tableRef.current) === null || _this$tableRef$curren6 === void 0 ? void 0 : _this$tableRef$curren6.getSelectedRowDatas();
|
|
339
|
-
}
|
|
340
|
-
}, {
|
|
341
|
-
key: "resetSelectedRowKeys",
|
|
342
|
-
value: function resetSelectedRowKeys() {
|
|
343
|
-
var _this$tableRef$curren7;
|
|
344
|
-
|
|
345
|
-
return (_this$tableRef$curren7 = this.tableRef.current) === null || _this$tableRef$curren7 === void 0 ? void 0 : _this$tableRef$curren7.resetSelectedRowKeys();
|
|
346
|
-
}
|
|
347
|
-
}, {
|
|
348
|
-
key: "getSearchValues",
|
|
349
|
-
value: function getSearchValues() {
|
|
350
|
-
var _this$searchRef2, _this$searchRef2$curr;
|
|
351
|
-
|
|
352
|
-
var fromValue = (_this$searchRef2 = this.searchRef) === null || _this$searchRef2 === void 0 ? void 0 : (_this$searchRef2$curr = _this$searchRef2.current) === null || _this$searchRef2$curr === void 0 ? void 0 : _this$searchRef2$curr.getSearchValues();
|
|
353
|
-
return _objectSpread(_objectSpread({}, fromValue), this.state.treeSearchPrams);
|
|
354
|
-
}
|
|
355
|
-
}, {
|
|
356
|
-
key: "getChildrenData",
|
|
357
|
-
value: function getChildrenData(data) {
|
|
358
|
-
var _this4 = this;
|
|
359
|
-
|
|
360
|
-
var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
361
|
-
var tableProps = this.props.tableProps;
|
|
362
|
-
var _tableProps$rowKey = tableProps.rowKey,
|
|
363
|
-
rowKey = _tableProps$rowKey === void 0 ? "id" : _tableProps$rowKey;
|
|
364
|
-
var resKey = [];
|
|
365
|
-
|
|
366
|
-
if (data.childNodes) {
|
|
367
|
-
var children = data.childNodes;
|
|
368
|
-
children.map(function (item, index) {
|
|
369
|
-
if (item.childNodes) {
|
|
370
|
-
_this4.getChildrenData(item.childNodes, keys);
|
|
180
|
+
requestParams = _objectSpread({}, defaultParams);
|
|
181
|
+
request(deleteUrl, _objectSpread({}, requestParams)).then(function (res) {
|
|
182
|
+
const {
|
|
183
|
+
code
|
|
184
|
+
} = res;
|
|
185
|
+
if (code === 200) {
|
|
186
|
+
var _this$searchRef, _this$props$onCallBac, _this$props$onCallBac2;
|
|
187
|
+
message.success("删除成功!");
|
|
188
|
+
let value = (_this$searchRef = _this.searchRef) === null || _this$searchRef === void 0 || (_this$searchRef = _this$searchRef.current) === null || _this$searchRef === void 0 ? void 0 : _this$searchRef.getSearchValues();
|
|
189
|
+
((_this$props$onCallBac = _this.props.onCallBacks) === null || _this$props$onCallBac === void 0 ? void 0 : _this$props$onCallBac.onDeleteCallBack) && ((_this$props$onCallBac2 = _this.props.onCallBacks) === null || _this$props$onCallBac2 === void 0 ? void 0 : _this$props$onCallBac2.onDeleteCallBack());
|
|
190
|
+
_this.tableLoad(value);
|
|
371
191
|
} else {
|
|
372
|
-
|
|
192
|
+
message.error("删除失败!");
|
|
373
193
|
}
|
|
194
|
+
}).catch(function (error) {
|
|
195
|
+
console.log("error", error);
|
|
374
196
|
});
|
|
375
|
-
} else {
|
|
376
|
-
resKey = [].concat(_toConsumableArray(keys), [data[rowKey]]);
|
|
377
197
|
}
|
|
378
|
-
|
|
379
|
-
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
tableLoad(params) {
|
|
201
|
+
var _this$tableRef$curren2;
|
|
202
|
+
let requestConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
203
|
+
(_this$tableRef$curren2 = this.tableRef.current) === null || _this$tableRef$curren2 === void 0 || _this$tableRef$curren2.store.load(_objectSpread(_objectSpread({}, requestConfig), {}, {
|
|
204
|
+
params: params
|
|
205
|
+
}));
|
|
206
|
+
}
|
|
207
|
+
//查询
|
|
208
|
+
onSearch(params) {
|
|
209
|
+
const {
|
|
210
|
+
onSearch,
|
|
211
|
+
onCallBacks
|
|
212
|
+
} = this.props;
|
|
213
|
+
if (onSearch) {
|
|
214
|
+
onSearch(_objectSpread(_objectSpread({}, params), this.state.treeSearchPrams));
|
|
215
|
+
return;
|
|
380
216
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
params
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
className: cls(getLess(styles, "editor"), getLess(styles, "content-item")),
|
|
400
|
-
key: index,
|
|
401
|
-
onClick: function onClick() {
|
|
402
|
-
_onClick && _onClick();
|
|
403
|
-
}
|
|
404
|
-
}, params), /*#__PURE__*/React.createElement("span", {
|
|
405
|
-
className: getLess(styles, "icon")
|
|
406
|
-
}, icon), /*#__PURE__*/React.createElement("span", {
|
|
407
|
-
className: getLess(styles, "text")
|
|
408
|
-
}, children));
|
|
217
|
+
this.tableLoad(_objectSpread(_objectSpread({}, params), this.state.treeSearchPrams));
|
|
218
|
+
(onCallBacks === null || onCallBacks === void 0 ? void 0 : onCallBacks.onSearchCallBack) && utils.callback(onCallBacks === null || onCallBacks === void 0 ? void 0 : onCallBacks.onSearchCallBack, this, [params]);
|
|
219
|
+
}
|
|
220
|
+
//表格重新加载
|
|
221
|
+
tableReload() {
|
|
222
|
+
var _this$tableRef$curren3;
|
|
223
|
+
let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
224
|
+
let autoLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
225
|
+
(_this$tableRef$curren3 = this.tableRef.current) === null || _this$tableRef$curren3 === void 0 || (_this$tableRef$curren3 = _this$tableRef$curren3.store) === null || _this$tableRef$curren3 === void 0 || _this$tableRef$curren3.reload({
|
|
226
|
+
callback: res => {
|
|
227
|
+
var _res$data;
|
|
228
|
+
if (autoLoad && (res === null || res === void 0 || (_res$data = res.data) === null || _res$data === void 0 || (_res$data = _res$data.records) === null || _res$data === void 0 ? void 0 : _res$data.length) == 0 && this.state.currentPage !== 1) {
|
|
229
|
+
var _this$tableRef$curren4;
|
|
230
|
+
(_this$tableRef$curren4 = this.tableRef.current) === null || _this$tableRef$curren4 === void 0 || (_this$tableRef$curren4 = _this$tableRef$curren4.store) === null || _this$tableRef$curren4 === void 0 || _this$tableRef$curren4.reload({
|
|
231
|
+
params: _objectSpread({
|
|
232
|
+
current: 1
|
|
233
|
+
}, params)
|
|
234
|
+
});
|
|
409
235
|
}
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
getSelectedRowKeys() {
|
|
240
|
+
var _this$tableRef$curren5;
|
|
241
|
+
return (_this$tableRef$curren5 = this.tableRef.current) === null || _this$tableRef$curren5 === void 0 ? void 0 : _this$tableRef$curren5.getSelectedRowKeys();
|
|
242
|
+
}
|
|
243
|
+
getSelectedRowDatas() {
|
|
244
|
+
var _this$tableRef$curren6;
|
|
245
|
+
return (_this$tableRef$curren6 = this.tableRef.current) === null || _this$tableRef$curren6 === void 0 ? void 0 : _this$tableRef$curren6.getSelectedRowDatas();
|
|
246
|
+
}
|
|
247
|
+
resetSelectedRowKeys() {
|
|
248
|
+
var _this$tableRef$curren7;
|
|
249
|
+
return (_this$tableRef$curren7 = this.tableRef.current) === null || _this$tableRef$curren7 === void 0 ? void 0 : _this$tableRef$curren7.resetSelectedRowKeys();
|
|
250
|
+
}
|
|
251
|
+
getSearchValues() {
|
|
252
|
+
var _this$searchRef2;
|
|
253
|
+
const fromValue = (_this$searchRef2 = this.searchRef) === null || _this$searchRef2 === void 0 || (_this$searchRef2 = _this$searchRef2.current) === null || _this$searchRef2 === void 0 ? void 0 : _this$searchRef2.getSearchValues();
|
|
254
|
+
return _objectSpread(_objectSpread({}, fromValue), this.state.treeSearchPrams);
|
|
255
|
+
}
|
|
256
|
+
getChildrenData(data) {
|
|
257
|
+
let keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
258
|
+
const {
|
|
259
|
+
tableProps
|
|
260
|
+
} = this.props;
|
|
261
|
+
const {
|
|
262
|
+
rowKey = "id"
|
|
263
|
+
} = tableProps;
|
|
264
|
+
let resKey = [];
|
|
265
|
+
if (data.childNodes) {
|
|
266
|
+
const children = data.childNodes;
|
|
267
|
+
children.map((item, index) => {
|
|
268
|
+
if (item.childNodes) {
|
|
269
|
+
this.getChildrenData(item.childNodes, keys);
|
|
270
|
+
} else {
|
|
271
|
+
resKey = [...keys, item[rowKey]];
|
|
415
272
|
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
273
|
+
});
|
|
274
|
+
} else {
|
|
275
|
+
resKey = [...keys, data[rowKey]];
|
|
276
|
+
}
|
|
277
|
+
return resKey;
|
|
278
|
+
}
|
|
279
|
+
renderToolButtons(toolbuttons, toolbarFlag) {
|
|
280
|
+
const flag = toolbuttons.length > 5;
|
|
281
|
+
// toolbuttons = [...toolbuttons].reverse();
|
|
282
|
+
const {
|
|
283
|
+
showSearch = true
|
|
284
|
+
} = this.props;
|
|
285
|
+
const content = toolbuttons.map((item, index) => {
|
|
286
|
+
const _item$props = item.props,
|
|
287
|
+
{
|
|
288
|
+
children,
|
|
289
|
+
pageType,
|
|
290
|
+
onClick,
|
|
291
|
+
icon,
|
|
292
|
+
show
|
|
293
|
+
} = _item$props,
|
|
294
|
+
params = _objectWithoutProperties(_item$props, _excluded);
|
|
295
|
+
if (index > 3) {
|
|
296
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
297
|
+
className: cls(getLess(styles, "nsc-basepage-editor"), getLess(styles, "nsc-basepage-content-item"))
|
|
298
|
+
}, /*#__PURE__*/React.createElement(Button, _extends({
|
|
299
|
+
key: index,
|
|
300
|
+
onClick: () => {
|
|
301
|
+
this.setState({
|
|
302
|
+
moreOpen: false
|
|
303
|
+
});
|
|
304
|
+
onClick && onClick();
|
|
435
305
|
}
|
|
436
|
-
}
|
|
306
|
+
}, params, {
|
|
307
|
+
type: "link"
|
|
308
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
309
|
+
className: getLess(styles, "nsc-basepage-icon")
|
|
310
|
+
}, icon), /*#__PURE__*/React.createElement("span", {
|
|
311
|
+
className: getLess(styles, "nsc-basepage-text")
|
|
312
|
+
}, children)));
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
316
|
+
className: cls(getLess(styles, "nsc-basepage-tool-buttons")),
|
|
317
|
+
style: {
|
|
318
|
+
marginLeft: 0
|
|
319
|
+
}
|
|
320
|
+
}, toolbuttons.map((item, index) => {
|
|
321
|
+
if (flag) {
|
|
322
|
+
if (index < 4) {
|
|
437
323
|
return /*#__PURE__*/React.createElement("div", {
|
|
438
|
-
key: index
|
|
324
|
+
key: index,
|
|
325
|
+
style: {
|
|
326
|
+
marginRight: 12
|
|
327
|
+
}
|
|
439
328
|
}, item);
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
var _item$props2 = item.props,
|
|
458
|
-
children = _item$props2.children,
|
|
459
|
-
pageType = _item$props2.pageType,
|
|
460
|
-
onClick = _item$props2.onClick,
|
|
461
|
-
icon = _item$props2.icon,
|
|
462
|
-
recordShow = _item$props2.recordShow,
|
|
463
|
-
params = _objectWithoutProperties(_item$props2, _excluded2);
|
|
464
|
-
|
|
465
|
-
if (recordShow) {
|
|
466
|
-
if (typeof recordShow == "string") {
|
|
467
|
-
if (eval(recordShow)) {
|
|
468
|
-
newButtons.push(item);
|
|
329
|
+
} else if (index == 4) {
|
|
330
|
+
return /*#__PURE__*/React.createElement(Popover, {
|
|
331
|
+
content: content,
|
|
332
|
+
title: null,
|
|
333
|
+
placement: "bottom",
|
|
334
|
+
key: index,
|
|
335
|
+
visible: this.state.moreOpen,
|
|
336
|
+
onVisibleChange: open => {
|
|
337
|
+
if (open) {
|
|
338
|
+
this.setState({
|
|
339
|
+
moreOpen: true
|
|
340
|
+
});
|
|
341
|
+
} else {
|
|
342
|
+
this.setState({
|
|
343
|
+
moreOpen: false
|
|
344
|
+
});
|
|
345
|
+
}
|
|
469
346
|
}
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
347
|
+
// open={true}
|
|
348
|
+
// overlayClassName={styles['pop-box']}
|
|
349
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
350
|
+
type: "primary"
|
|
351
|
+
}, "\u66F4\u591A ", /*#__PURE__*/React.createElement(DownOutlined, null)));
|
|
474
352
|
} else {
|
|
475
|
-
|
|
353
|
+
return null;
|
|
476
354
|
}
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
355
|
+
} else {
|
|
356
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
357
|
+
key: index,
|
|
358
|
+
style: {
|
|
359
|
+
marginRight: index == toolbuttons.length - 1 ? 0 : 12
|
|
360
|
+
}
|
|
361
|
+
}, item);
|
|
362
|
+
}
|
|
363
|
+
}));
|
|
364
|
+
}
|
|
365
|
+
renderCloumnButton(columnButtons, record) {
|
|
366
|
+
const {
|
|
367
|
+
actionProps
|
|
368
|
+
} = this.props;
|
|
369
|
+
const {
|
|
370
|
+
baseActionColumn
|
|
371
|
+
} = config();
|
|
372
|
+
const newButtons = [];
|
|
373
|
+
let showIcon = true;
|
|
374
|
+
if ((actionProps === null || actionProps === void 0 ? void 0 : actionProps.showIcon) === false) showIcon = false;else if (baseActionColumn.showIcon === false) showIcon = false;
|
|
375
|
+
columnButtons.map((item, index) => {
|
|
376
|
+
const _item$props2 = item.props,
|
|
377
|
+
{
|
|
378
|
+
children,
|
|
379
|
+
pageType,
|
|
380
|
+
onClick,
|
|
381
|
+
icon,
|
|
382
|
+
recordShow
|
|
383
|
+
} = _item$props2,
|
|
384
|
+
params = _objectWithoutProperties(_item$props2, _excluded2);
|
|
385
|
+
if (recordShow) {
|
|
386
|
+
if (typeof recordShow == "string") {
|
|
387
|
+
if (eval(recordShow)) {
|
|
388
|
+
newButtons.push(item);
|
|
389
|
+
}
|
|
390
|
+
} else if (typeof recordShow == "function") {
|
|
391
|
+
const show = recordShow(record);
|
|
392
|
+
show && newButtons.push(item);
|
|
509
393
|
}
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
onVisibleChange: function onVisibleChange(visibale) {
|
|
544
|
-
if (visibale) {
|
|
545
|
-
var data = {};
|
|
546
|
-
data[record.id] = true;
|
|
547
|
-
|
|
548
|
-
_this5.setState({
|
|
549
|
-
popopens: data
|
|
550
|
-
});
|
|
551
|
-
} else {
|
|
552
|
-
_this5.setState({
|
|
553
|
-
popopens: {}
|
|
554
|
-
});
|
|
555
|
-
}
|
|
556
|
-
} // overlayClassName={styles['pop']}
|
|
557
|
-
|
|
558
|
-
}, /*#__PURE__*/React.createElement("a", {
|
|
559
|
-
className: getLess(styles, "editor")
|
|
560
|
-
}, /*#__PURE__*/React.createElement(EllipsisOutlined, null)));
|
|
561
|
-
} else {
|
|
562
|
-
return null;
|
|
394
|
+
} else {
|
|
395
|
+
newButtons.push(item);
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
let number = actionProps !== null && actionProps !== void 0 && actionProps.buttonNumber ? actionProps === null || actionProps === void 0 ? void 0 : actionProps.buttonNumber : baseActionColumn !== null && baseActionColumn !== void 0 && baseActionColumn.buttonNumber ? baseActionColumn === null || baseActionColumn === void 0 ? void 0 : baseActionColumn.buttonNumber : 3;
|
|
399
|
+
let flag = false;
|
|
400
|
+
if (number == "all") {
|
|
401
|
+
flag = false;
|
|
402
|
+
} else {
|
|
403
|
+
flag = newButtons.length > number;
|
|
404
|
+
}
|
|
405
|
+
const content = newButtons.map((item, index) => {
|
|
406
|
+
const _item$props3 = item.props,
|
|
407
|
+
{
|
|
408
|
+
children,
|
|
409
|
+
pageType,
|
|
410
|
+
onClick,
|
|
411
|
+
recordShow,
|
|
412
|
+
icon,
|
|
413
|
+
show
|
|
414
|
+
} = _item$props3,
|
|
415
|
+
params = _objectWithoutProperties(_item$props3, _excluded3);
|
|
416
|
+
if (index > Number(number) - 1) {
|
|
417
|
+
return /*#__PURE__*/React.createElement(Button, _extends({
|
|
418
|
+
className: cls(getLess(styles, "nsc-basepage-editor"), getLess(styles, "nsc-basepage-content-item")),
|
|
419
|
+
key: index,
|
|
420
|
+
onClick: () => {
|
|
421
|
+
let data = _objectSpread({}, this.state.popopens);
|
|
422
|
+
data[record.id] = false;
|
|
423
|
+
this.setState({
|
|
424
|
+
popopens: data
|
|
425
|
+
});
|
|
426
|
+
onClick && onClick(record);
|
|
563
427
|
}
|
|
564
|
-
}
|
|
428
|
+
}, params, {
|
|
429
|
+
type: "link"
|
|
430
|
+
}), showIcon !== false && /*#__PURE__*/React.createElement("span", {
|
|
431
|
+
className: getLess(styles, "nsc-basepage-icon")
|
|
432
|
+
}, icon), /*#__PURE__*/React.createElement("span", {
|
|
433
|
+
className: getLess(styles, "nsc-basepage-text")
|
|
434
|
+
}, children));
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
return newButtons.map((item, index) => {
|
|
438
|
+
const _item$props4 = item.props,
|
|
439
|
+
{
|
|
440
|
+
children,
|
|
441
|
+
pageType,
|
|
442
|
+
onClick,
|
|
443
|
+
recordShow,
|
|
444
|
+
icon
|
|
445
|
+
} = _item$props4,
|
|
446
|
+
params = _objectWithoutProperties(_item$props4, _excluded4);
|
|
447
|
+
if (flag) {
|
|
448
|
+
if (index < number) {
|
|
565
449
|
return /*#__PURE__*/React.createElement(Button, _extends({
|
|
566
|
-
className: cls(getLess(styles, "editor"),
|
|
450
|
+
className: cls(getLess(styles, "nsc-basepage-editor"), {
|
|
451
|
+
[getLess(styles, "nsc-basepage-editor-first")]: index === 0
|
|
452
|
+
}),
|
|
567
453
|
key: index,
|
|
568
|
-
onClick:
|
|
569
|
-
|
|
454
|
+
onClick: () => {
|
|
455
|
+
onClick && onClick(record);
|
|
570
456
|
},
|
|
457
|
+
icon: icon
|
|
458
|
+
}, params, {
|
|
571
459
|
type: "link"
|
|
572
|
-
}
|
|
573
|
-
className: getLess(styles, "icon")
|
|
460
|
+
}), showIcon !== false && /*#__PURE__*/React.createElement("span", {
|
|
461
|
+
className: getLess(styles, "nsc-basepage-icon")
|
|
574
462
|
}, icon), /*#__PURE__*/React.createElement("span", {
|
|
575
|
-
className: getLess(styles, "text")
|
|
463
|
+
className: getLess(styles, "nsc-basepage-text")
|
|
576
464
|
}, children));
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
if (selected) {
|
|
599
|
-
keyword = selectedNodes[0].dataref.attribute[searchKey];
|
|
600
|
-
|
|
601
|
-
if (parantSelect) {
|
|
602
|
-
this.setState({
|
|
603
|
-
treeSelectedKey: selectedKeys[0],
|
|
604
|
-
treeSearchPrams: _defineProperty({}, searchField, keyword)
|
|
605
|
-
});
|
|
606
|
-
} else {
|
|
607
|
-
if (selectedNodes[0].isLeaf || !selectedNodes[0].children) {
|
|
608
|
-
if (selectedKeys[0] !== treeSelectedKey) {
|
|
609
|
-
this.setState({
|
|
610
|
-
treeSelectedKey: selectedKeys[0],
|
|
611
|
-
treeSearchPrams: _defineProperty({}, searchField, keyword)
|
|
612
|
-
});
|
|
465
|
+
} else if (index == number) {
|
|
466
|
+
return /*#__PURE__*/React.createElement(Popover, {
|
|
467
|
+
placement: "bottom",
|
|
468
|
+
title: null,
|
|
469
|
+
content: content,
|
|
470
|
+
trigger: ["click"],
|
|
471
|
+
key: index,
|
|
472
|
+
visible: this.state.popopens[record.id] || false,
|
|
473
|
+
onVisibleChange: open => {
|
|
474
|
+
if (open) {
|
|
475
|
+
let data = _objectSpread({}, this.state.popopens);
|
|
476
|
+
data[record.id] = true;
|
|
477
|
+
this.setState({
|
|
478
|
+
popopens: data
|
|
479
|
+
});
|
|
480
|
+
} else {
|
|
481
|
+
this.setState({
|
|
482
|
+
popopens: {}
|
|
483
|
+
});
|
|
484
|
+
}
|
|
613
485
|
}
|
|
614
|
-
|
|
486
|
+
// overlayClassName={styles['pop']}
|
|
487
|
+
}, /*#__PURE__*/React.createElement("a", {
|
|
488
|
+
className: getLess(styles, "nsc-basepage-editor")
|
|
489
|
+
}, /*#__PURE__*/React.createElement(EllipsisOutlined, null)));
|
|
490
|
+
} else {
|
|
491
|
+
return null;
|
|
615
492
|
}
|
|
616
493
|
} else {
|
|
494
|
+
return /*#__PURE__*/React.createElement(Button, _extends({
|
|
495
|
+
className: cls(getLess(styles, "nsc-basepage-editor"), {
|
|
496
|
+
[getLess(styles, "nsc-basepage-editor-first")]: index === 0
|
|
497
|
+
}),
|
|
498
|
+
key: index,
|
|
499
|
+
onClick: () => {
|
|
500
|
+
onClick && onClick(record);
|
|
501
|
+
}
|
|
502
|
+
}, params, {
|
|
503
|
+
type: "link"
|
|
504
|
+
}), showIcon !== false && /*#__PURE__*/React.createElement("span", {
|
|
505
|
+
className: getLess(styles, "nsc-basepage-icon")
|
|
506
|
+
}, icon), /*#__PURE__*/React.createElement("span", {
|
|
507
|
+
className: getLess(styles, "nsc-basepage-text")
|
|
508
|
+
}, children));
|
|
509
|
+
}
|
|
510
|
+
});
|
|
511
|
+
// }
|
|
512
|
+
}
|
|
513
|
+
//树点击事件
|
|
514
|
+
treeSelect(selectedKeys, obj) {
|
|
515
|
+
var _this$searchRef3, _this$props$onCallBac3, _this$props$onCallBac4;
|
|
516
|
+
let keyword = "";
|
|
517
|
+
const {
|
|
518
|
+
searchKey = "key",
|
|
519
|
+
searchField = "",
|
|
520
|
+
parantSelect = true
|
|
521
|
+
} = this.props.treeProps;
|
|
522
|
+
const {
|
|
523
|
+
treeSelectedKey
|
|
524
|
+
} = this.state;
|
|
525
|
+
const {
|
|
526
|
+
selected,
|
|
527
|
+
selectedNodes
|
|
528
|
+
} = obj;
|
|
529
|
+
if (selected) {
|
|
530
|
+
keyword = selectedNodes[0].dataref.attribute[searchKey];
|
|
531
|
+
if (parantSelect) {
|
|
617
532
|
this.setState({
|
|
618
|
-
treeSelectedKey:
|
|
619
|
-
treeSearchPrams: {
|
|
533
|
+
treeSelectedKey: selectedKeys[0],
|
|
534
|
+
treeSearchPrams: {
|
|
535
|
+
[searchField]: keyword
|
|
536
|
+
}
|
|
620
537
|
});
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
((_this$props$onCallBac3 = this.props.onCallBacks) === null || _this$props$onCallBac3 === void 0 ? void 0 : _this$props$onCallBac3.treeSelectCallBack) && utils.callback((_this$props$onCallBac4 = this.props.onCallBacks) === null || _this$props$onCallBac4 === void 0 ? void 0 : _this$props$onCallBac4.treeSelectCallBack, this, [selectedKeys, obj]);
|
|
631
|
-
}
|
|
632
|
-
}, {
|
|
633
|
-
key: "resetSearch",
|
|
634
|
-
value: function resetSearch() {
|
|
635
|
-
var _this$searchRef$curre3;
|
|
636
|
-
|
|
637
|
-
(_this$searchRef$curre3 = this.searchRef.current) === null || _this$searchRef$curre3 === void 0 ? void 0 : _this$searchRef$curre3.resetFields();
|
|
638
|
-
}
|
|
639
|
-
}, {
|
|
640
|
-
key: "getText",
|
|
641
|
-
value: function getText(props, text) {
|
|
642
|
-
var _props$data;
|
|
643
|
-
|
|
644
|
-
var newText = text;
|
|
645
|
-
|
|
646
|
-
if (props !== null && props !== void 0 && props.data && (props === null || props === void 0 ? void 0 : (_props$data = props.data) === null || _props$data === void 0 ? void 0 : _props$data.length) > 0) {
|
|
647
|
-
var data = props.data;
|
|
648
|
-
|
|
649
|
-
for (var i = 0; i < (data === null || data === void 0 ? void 0 : data.length); i++) {
|
|
650
|
-
if (data[i].value == text) {
|
|
651
|
-
newText = data[i].label;
|
|
538
|
+
} else {
|
|
539
|
+
if (selectedNodes[0].isLeaf || !selectedNodes[0].children) {
|
|
540
|
+
if (selectedKeys[0] !== treeSelectedKey) {
|
|
541
|
+
this.setState({
|
|
542
|
+
treeSelectedKey: selectedKeys[0],
|
|
543
|
+
treeSearchPrams: {
|
|
544
|
+
[searchField]: keyword
|
|
545
|
+
}
|
|
546
|
+
});
|
|
652
547
|
}
|
|
653
548
|
}
|
|
654
549
|
}
|
|
655
|
-
|
|
656
|
-
|
|
550
|
+
} else {
|
|
551
|
+
this.setState({
|
|
552
|
+
treeSelectedKey: keyword,
|
|
553
|
+
treeSearchPrams: {}
|
|
554
|
+
});
|
|
657
555
|
}
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
var _this$tableRef$curren8, _this$tableRef$curren9;
|
|
662
|
-
|
|
663
|
-
(_this$tableRef$curren8 = this.tableRef.current) === null || _this$tableRef$curren8 === void 0 ? void 0 : (_this$tableRef$curren9 = _this$tableRef$curren8.store) === null || _this$tableRef$curren9 === void 0 ? void 0 : _this$tableRef$curren9.setData(data);
|
|
556
|
+
if (this.props.onTreeSelect) {
|
|
557
|
+
this.props.onTreeSelect(selectedKeys, obj);
|
|
558
|
+
return;
|
|
664
559
|
}
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
_this$props3$showSear = _this$props3.showSearch,
|
|
684
|
-
showSearch = _this$props3$showSear === void 0 ? true : _this$props3$showSear,
|
|
685
|
-
children = _this$props3.children,
|
|
686
|
-
_this$props3$submitUr = _this$props3.submitUrl,
|
|
687
|
-
submitUrl = _this$props3$submitUr === void 0 ? "" : _this$props3$submitUr,
|
|
688
|
-
_this$props3$tablePro = _this$props3.tableProps,
|
|
689
|
-
tableProps = _this$props3$tablePro === void 0 ? {} : _this$props3$tablePro,
|
|
690
|
-
_this$props3$treeProp = _this$props3.treeProps,
|
|
691
|
-
treeProps = _this$props3$treeProp === void 0 ? {} : _this$props3$treeProp,
|
|
692
|
-
_this$props3$formProp = _this$props3.formProps,
|
|
693
|
-
formProps = _this$props3$formProp === void 0 ? {} : _this$props3$formProp,
|
|
694
|
-
_this$props3$showLeft = _this$props3.showLeft,
|
|
695
|
-
showLeft = _this$props3$showLeft === void 0 ? false : _this$props3$showLeft,
|
|
696
|
-
_this$props3$submitPa = _this$props3.submitParams,
|
|
697
|
-
submitParams = _this$props3$submitPa === void 0 ? {} : _this$props3$submitPa,
|
|
698
|
-
_this$props3$showTool = _this$props3.showToolButton,
|
|
699
|
-
showToolButton = _this$props3$showTool === void 0 ? true : _this$props3$showTool,
|
|
700
|
-
_this$props3$buttons = _this$props3.buttons,
|
|
701
|
-
buttons = _this$props3$buttons === void 0 ? [] : _this$props3$buttons,
|
|
702
|
-
_this$props3$editorFo = _this$props3.editorForm,
|
|
703
|
-
editorForm = _this$props3$editorFo === void 0 ? true : _this$props3$editorFo,
|
|
704
|
-
onShowForm = _this$props3.onShowForm,
|
|
705
|
-
_this$props3$formChan = _this$props3.formChangeValid,
|
|
706
|
-
formChangeValid = _this$props3$formChan === void 0 ? true : _this$props3$formChan,
|
|
707
|
-
className = _this$props3.className,
|
|
708
|
-
_this$props3$toolButt = _this$props3.toolButtonPosition,
|
|
709
|
-
toolButtonPosition = _this$props3$toolButt === void 0 ? "buttom" : _this$props3$toolButt,
|
|
710
|
-
actionPorps = _this$props3.actionPorps,
|
|
711
|
-
_this$props3$deletePo = _this$props3.deletePosition,
|
|
712
|
-
deletePosition = _this$props3$deletePo === void 0 ? "toolbar" : _this$props3$deletePo;
|
|
713
|
-
|
|
714
|
-
var store = tableProps.store,
|
|
715
|
-
_tableProps$filterCol = tableProps.filterColumn,
|
|
716
|
-
filterColumn = _tableProps$filterCol === void 0 ? true : _tableProps$filterCol,
|
|
717
|
-
_tableProps$actionCol = tableProps.actionColumn,
|
|
718
|
-
actionColumn = _tableProps$actionCol === void 0 ? true : _tableProps$actionCol,
|
|
719
|
-
_tableProps$showRowSe = tableProps.showRowSelection,
|
|
720
|
-
showRowSelection = _tableProps$showRowSe === void 0 ? true : _tableProps$showRowSe,
|
|
721
|
-
_tableProps$columnOrd = tableProps.columnOrder,
|
|
722
|
-
columnOrder = _tableProps$columnOrd === void 0 ? true : _tableProps$columnOrd,
|
|
723
|
-
_tableProps$expandabl = tableProps.expandable,
|
|
724
|
-
expandable = _tableProps$expandabl === void 0 ? {} : _tableProps$expandabl,
|
|
725
|
-
_tableProps$parantSel = tableProps.parantSelect,
|
|
726
|
-
parantSelect = _tableProps$parantSel === void 0 ? true : _tableProps$parantSel,
|
|
727
|
-
othertableParams = _objectWithoutProperties(tableProps, _excluded5);
|
|
728
|
-
|
|
729
|
-
var _treeProps$store = treeProps.store,
|
|
730
|
-
treeStore = _treeProps$store === void 0 ? {} : _treeProps$store,
|
|
731
|
-
_treeProps$showSearch = treeProps.showSearch,
|
|
732
|
-
treeSearch = _treeProps$showSearch === void 0 ? true : _treeProps$showSearch,
|
|
733
|
-
_treeProps$titleAlias = treeProps.titleAlias,
|
|
734
|
-
titleAlias = _treeProps$titleAlias === void 0 ? "title" : _treeProps$titleAlias,
|
|
735
|
-
othertreeParams = _objectWithoutProperties(treeProps, _excluded6);
|
|
736
|
-
|
|
737
|
-
var tableParams = _objectSpread({
|
|
738
|
-
filterColumn: filterColumn,
|
|
739
|
-
store: store
|
|
740
|
-
}, othertableParams);
|
|
741
|
-
|
|
742
|
-
var tableColumn = [];
|
|
743
|
-
var searchForms = [];
|
|
744
|
-
var editorForms = [];
|
|
745
|
-
var defaultValue = {};
|
|
746
|
-
var columnButtons = [];
|
|
747
|
-
columns.map(function (item) {
|
|
748
|
-
var _temp$search, _temp$props, _temp$props2, _temp;
|
|
749
|
-
|
|
750
|
-
var temp = _objectSpread({}, item);
|
|
751
|
-
|
|
752
|
-
if (temp.search === true || ((_temp$search = temp.search) === null || _temp$search === void 0 ? void 0 : _temp$search.show) === true) {
|
|
753
|
-
var _temp$search2, _temp$search3, _temp$search4;
|
|
754
|
-
|
|
755
|
-
searchForms.push({
|
|
756
|
-
name: temp.field || temp.dataIndex,
|
|
757
|
-
label: ((_temp$search2 = temp.search) === null || _temp$search2 === void 0 ? void 0 : _temp$search2.label) || temp.title,
|
|
758
|
-
type: temp.type,
|
|
759
|
-
props: temp.props,
|
|
760
|
-
labelCol: (_temp$search3 = temp.search) === null || _temp$search3 === void 0 ? void 0 : _temp$search3.labelCol,
|
|
761
|
-
wrapperCol: (_temp$search4 = temp.search) === null || _temp$search4 === void 0 ? void 0 : _temp$search4.wrapperCol,
|
|
762
|
-
rules: temp.searchRules ? temp.searchRules : []
|
|
763
|
-
});
|
|
560
|
+
const fromValue = ((_this$searchRef3 = this.searchRef) === null || _this$searchRef3 === void 0 || (_this$searchRef3 = _this$searchRef3.current) === null || _this$searchRef3 === void 0 ? void 0 : _this$searchRef3.getSearchValues()) || {};
|
|
561
|
+
searchField && this.tableLoad(_objectSpread(_objectSpread({}, fromValue), {}, {
|
|
562
|
+
[searchField]: keyword
|
|
563
|
+
}));
|
|
564
|
+
((_this$props$onCallBac3 = this.props.onCallBacks) === null || _this$props$onCallBac3 === void 0 ? void 0 : _this$props$onCallBac3.treeSelectCallBack) && utils.callback((_this$props$onCallBac4 = this.props.onCallBacks) === null || _this$props$onCallBac4 === void 0 ? void 0 : _this$props$onCallBac4.treeSelectCallBack, this, [selectedKeys, obj]);
|
|
565
|
+
}
|
|
566
|
+
resetSearch() {
|
|
567
|
+
var _this$searchRef$curre2;
|
|
568
|
+
(_this$searchRef$curre2 = this.searchRef.current) === null || _this$searchRef$curre2 === void 0 || _this$searchRef$curre2.resetFields();
|
|
569
|
+
}
|
|
570
|
+
getText(props, text) {
|
|
571
|
+
var _props$data;
|
|
572
|
+
let newText = text;
|
|
573
|
+
if (props !== null && props !== void 0 && props.data && (props === null || props === void 0 || (_props$data = props.data) === null || _props$data === void 0 ? void 0 : _props$data.length) > 0) {
|
|
574
|
+
let data = props.data;
|
|
575
|
+
for (let i = 0; i < (data === null || data === void 0 ? void 0 : data.length); i++) {
|
|
576
|
+
if (data[i].value == text) {
|
|
577
|
+
newText = data[i].label;
|
|
764
578
|
}
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
return newText;
|
|
582
|
+
}
|
|
583
|
+
setTableData(data) {
|
|
584
|
+
var _this$tableRef$curren8;
|
|
585
|
+
(_this$tableRef$curren8 = this.tableRef.current) === null || _this$tableRef$curren8 === void 0 || (_this$tableRef$curren8 = _this$tableRef$curren8.store) === null || _this$tableRef$curren8 === void 0 || _this$tableRef$curren8.setData(data);
|
|
586
|
+
}
|
|
587
|
+
setTreeData(data) {
|
|
588
|
+
var _this$treeRef$current;
|
|
589
|
+
(_this$treeRef$current = this.treeRef.current) === null || _this$treeRef$current === void 0 || (_this$treeRef$current = _this$treeRef$current.store) === null || _this$treeRef$current === void 0 || _this$treeRef$current.setData(data);
|
|
590
|
+
}
|
|
591
|
+
render() {
|
|
592
|
+
var _tableProps$toolbar, _tableProps$toolbar2;
|
|
593
|
+
const {
|
|
594
|
+
columns = [],
|
|
595
|
+
showSearch = true,
|
|
596
|
+
children,
|
|
597
|
+
submitUrl = "",
|
|
598
|
+
tableProps = {},
|
|
599
|
+
treeProps = {},
|
|
600
|
+
formProps = {},
|
|
601
|
+
showLeft = false,
|
|
602
|
+
submitParams = {},
|
|
603
|
+
showToolButton = true,
|
|
604
|
+
buttons = [],
|
|
605
|
+
editorForm = true,
|
|
606
|
+
onShowForm,
|
|
607
|
+
formChangeValid = true,
|
|
608
|
+
className,
|
|
609
|
+
toolButtonPosition = "buttom",
|
|
610
|
+
actionProps,
|
|
611
|
+
deletePosition = "toolbar"
|
|
612
|
+
} = this.props;
|
|
613
|
+
const {
|
|
614
|
+
store,
|
|
615
|
+
filterColumn = true,
|
|
616
|
+
actionColumn = true,
|
|
617
|
+
showRowSelection = true,
|
|
618
|
+
columnOrder = true,
|
|
619
|
+
expandable = {},
|
|
620
|
+
parantSelect = true,
|
|
621
|
+
title: tableTitle
|
|
622
|
+
} = tableProps,
|
|
623
|
+
othertableParams = _objectWithoutProperties(tableProps, _excluded5);
|
|
624
|
+
const {
|
|
625
|
+
store: treeStore = {},
|
|
626
|
+
showSearch: treeSearch = true,
|
|
627
|
+
titleAlias = "title",
|
|
628
|
+
title: treeTitle
|
|
629
|
+
} = treeProps,
|
|
630
|
+
othertreeParams = _objectWithoutProperties(treeProps, _excluded6);
|
|
631
|
+
let tableParams = _objectSpread({
|
|
632
|
+
filterColumn,
|
|
633
|
+
store
|
|
634
|
+
}, othertableParams);
|
|
635
|
+
let tableColumn = [];
|
|
636
|
+
const searchForms = [];
|
|
637
|
+
const editorForms = [];
|
|
638
|
+
const defaultValue = {};
|
|
639
|
+
const columnButtons = [];
|
|
640
|
+
const {
|
|
641
|
+
elementHeight
|
|
642
|
+
} = this.state;
|
|
643
|
+
columns.map(item => {
|
|
644
|
+
var _temp$search, _temp$props, _temp$props2, _temp;
|
|
645
|
+
let temp = _objectSpread({
|
|
646
|
+
width: 100
|
|
647
|
+
}, item);
|
|
648
|
+
if (temp.search === true || ((_temp$search = temp.search) === null || _temp$search === void 0 ? void 0 : _temp$search.show) === true) {
|
|
649
|
+
var _temp$search2, _temp$search3, _temp$search4;
|
|
650
|
+
searchForms.push({
|
|
768
651
|
name: temp.field || temp.dataIndex,
|
|
769
|
-
label: temp.title,
|
|
770
|
-
rules: temp.rules ? temp.rules : [],
|
|
652
|
+
label: ((_temp$search2 = temp.search) === null || _temp$search2 === void 0 ? void 0 : _temp$search2.label) || temp.title,
|
|
771
653
|
type: temp.type,
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
654
|
+
props: temp.props,
|
|
655
|
+
labelCol: (_temp$search3 = temp.search) === null || _temp$search3 === void 0 ? void 0 : _temp$search3.labelCol,
|
|
656
|
+
wrapperCol: (_temp$search4 = temp.search) === null || _temp$search4 === void 0 ? void 0 : _temp$search4.wrapperCol,
|
|
657
|
+
rules: temp.searchRules ? temp.searchRules : []
|
|
775
658
|
});
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
if (temp.columnSearch) {
|
|
788
|
-
temp.filterProps = {
|
|
789
|
-
type: temp.type,
|
|
790
|
-
props: temp.props
|
|
791
|
-
};
|
|
792
|
-
}
|
|
793
|
-
|
|
794
|
-
delete temp.type;
|
|
795
|
-
|
|
796
|
-
var tempProp = _objectSpread({}, temp.props);
|
|
797
|
-
|
|
798
|
-
if (temp.style) {
|
|
799
|
-
temp = _objectSpread({
|
|
800
|
-
render: function render(text) {
|
|
801
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, text !== "" && text !== null && text !== undefined && /*#__PURE__*/React.createElement("div", {
|
|
802
|
-
className: getLess(styles, "col-back")
|
|
803
|
-
}, /*#__PURE__*/React.createElement("span", {
|
|
804
|
-
className: getLess(styles, "col-text")
|
|
805
|
-
}, _this6.getText(tempProp, text))));
|
|
806
|
-
}
|
|
807
|
-
}, temp);
|
|
808
|
-
} else if (!temp.ellipsis) {
|
|
809
|
-
temp = _objectSpread({
|
|
810
|
-
render: function render(text) {
|
|
811
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, _this6.getText(tempProp, text));
|
|
812
|
-
}
|
|
813
|
-
}, temp);
|
|
814
|
-
} else {
|
|
815
|
-
temp = _objectSpread({}, temp);
|
|
816
|
-
}
|
|
817
|
-
|
|
818
|
-
delete temp.props;
|
|
819
|
-
if (((_temp = temp) === null || _temp === void 0 ? void 0 : _temp.columnShow) !== false) tableColumn.push(temp);
|
|
659
|
+
}
|
|
660
|
+
delete temp.search;
|
|
661
|
+
temp.editor !== false && editorForms.push({
|
|
662
|
+
name: temp.field || temp.dataIndex,
|
|
663
|
+
label: temp.title,
|
|
664
|
+
rules: temp.rules ? temp.rules : [],
|
|
665
|
+
type: temp.type,
|
|
666
|
+
span: temp.span,
|
|
667
|
+
dictName: temp.dictName,
|
|
668
|
+
props: _objectSpread({}, temp.props)
|
|
820
669
|
});
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
var showIcon = true;
|
|
827
|
-
if ((actionPorps === null || actionPorps === void 0 ? void 0 : actionPorps.showIcon) === false) showIcon = false;else if (baseActionColumn.showIcon === false) showIcon = false;
|
|
828
|
-
|
|
829
|
-
if (editorForm == true) {
|
|
830
|
-
if (buttons.indexOf("search") > -1) {
|
|
831
|
-
columnButtons.push( /*#__PURE__*/React.createElement(Button, {
|
|
832
|
-
onClick: function onClick(record) {
|
|
833
|
-
if (onShowForm) {
|
|
834
|
-
onShowForm(record.attribute || record, "detail");
|
|
835
|
-
return;
|
|
836
|
-
}
|
|
837
|
-
|
|
838
|
-
_this6.showForm(record.attribute || record, "detail");
|
|
839
|
-
},
|
|
840
|
-
icon: /*#__PURE__*/React.createElement(EyeOutlined, null)
|
|
841
|
-
}, "\u67E5\u770B"));
|
|
842
|
-
}
|
|
843
|
-
|
|
844
|
-
if (buttons.indexOf("editor") > -1) {
|
|
845
|
-
columnButtons.push( /*#__PURE__*/React.createElement(Button, {
|
|
846
|
-
onClick: function onClick(record) {
|
|
847
|
-
if (onShowForm) {
|
|
848
|
-
onShowForm(record.attribute || record, "editor");
|
|
849
|
-
return;
|
|
850
|
-
}
|
|
851
|
-
|
|
852
|
-
_this6.showForm(record.attribute || record, "editor");
|
|
853
|
-
},
|
|
854
|
-
icon: /*#__PURE__*/React.createElement(EditOutlined, null)
|
|
855
|
-
}, "\u7F16\u8F91"));
|
|
856
|
-
}
|
|
670
|
+
if (((_temp$props = temp.props) === null || _temp$props === void 0 ? void 0 : _temp$props.defaultValue) !== undefined && ((_temp$props2 = temp.props) === null || _temp$props2 === void 0 ? void 0 : _temp$props2.defaultValue) !== null) {
|
|
671
|
+
var _temp$props3;
|
|
672
|
+
const name = temp.field || temp.dataIndex;
|
|
673
|
+
defaultValue[name] = (_temp$props3 = temp.props) === null || _temp$props3 === void 0 ? void 0 : _temp$props3.defaultValue;
|
|
857
674
|
}
|
|
675
|
+
delete temp.rules;
|
|
676
|
+
delete temp.span;
|
|
677
|
+
if (temp.columnSearch) {
|
|
678
|
+
temp.filterProps = {
|
|
679
|
+
type: temp.type,
|
|
680
|
+
props: temp.props
|
|
681
|
+
};
|
|
682
|
+
}
|
|
683
|
+
delete temp.type;
|
|
684
|
+
let tempProp = _objectSpread({}, temp.props);
|
|
685
|
+
if (!temp.ellipsis) {
|
|
686
|
+
temp = _objectSpread({
|
|
687
|
+
ellipsis: {
|
|
688
|
+
showTitle: false
|
|
689
|
+
},
|
|
690
|
+
render: text => {
|
|
691
|
+
return this.getText(tempProp, text);
|
|
692
|
+
}
|
|
693
|
+
}, temp);
|
|
694
|
+
} else {
|
|
695
|
+
temp = _objectSpread({
|
|
696
|
+
ellipsis: true
|
|
697
|
+
}, temp);
|
|
698
|
+
}
|
|
699
|
+
delete temp.props;
|
|
858
700
|
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
701
|
+
// temp.ellipsis = true;
|
|
702
|
+
if (((_temp = temp) === null || _temp === void 0 ? void 0 : _temp.columnShow) !== false) tableColumn.push(temp);
|
|
703
|
+
});
|
|
704
|
+
const selfButtons = [];
|
|
705
|
+
const {
|
|
706
|
+
baseActionColumn
|
|
707
|
+
} = config();
|
|
708
|
+
let showIcon = true;
|
|
709
|
+
if ((actionProps === null || actionProps === void 0 ? void 0 : actionProps.showIcon) === false) showIcon = false;else if (baseActionColumn.showIcon === false) showIcon = false;
|
|
710
|
+
if (buttons.indexOf("search") > -1) {
|
|
711
|
+
columnButtons.push( /*#__PURE__*/React.createElement(Button, {
|
|
712
|
+
onClick: record => {
|
|
713
|
+
if (onShowForm) {
|
|
714
|
+
onShowForm(record.attribute || record, "detail");
|
|
715
|
+
return;
|
|
716
|
+
}
|
|
717
|
+
this.showForm(record.attribute || record, "detail");
|
|
718
|
+
},
|
|
719
|
+
icon: /*#__PURE__*/React.createElement(EyeOutlined, null),
|
|
720
|
+
type: "link"
|
|
721
|
+
}, "\u67E5\u770B"));
|
|
722
|
+
if (buttons.indexOf("editor") > -1) {
|
|
723
|
+
columnButtons.push( /*#__PURE__*/React.createElement(Button, {
|
|
724
|
+
onClick: record => {
|
|
865
725
|
if (onShowForm) {
|
|
866
|
-
onShowForm();
|
|
726
|
+
onShowForm(record.attribute || record, "editor");
|
|
867
727
|
return;
|
|
868
728
|
}
|
|
869
|
-
|
|
870
|
-
_this6.showForm();
|
|
729
|
+
this.showForm(record.attribute || record, "editor");
|
|
871
730
|
},
|
|
872
|
-
icon: /*#__PURE__*/React.createElement(
|
|
873
|
-
}, "\
|
|
731
|
+
icon: /*#__PURE__*/React.createElement(EditOutlined, null)
|
|
732
|
+
}, "\u7F16\u8F91"));
|
|
874
733
|
}
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
734
|
+
}
|
|
735
|
+
if (buttons.indexOf("add") > -1) {
|
|
736
|
+
selfButtons.push( /*#__PURE__*/React.createElement(Button, {
|
|
737
|
+
type: "primary",
|
|
738
|
+
onClick: () => {
|
|
739
|
+
const {
|
|
740
|
+
onShowForm
|
|
741
|
+
} = this.props;
|
|
742
|
+
if (onShowForm) {
|
|
743
|
+
onShowForm(null, "add");
|
|
744
|
+
return;
|
|
745
|
+
}
|
|
746
|
+
this.showForm();
|
|
747
|
+
},
|
|
748
|
+
icon: /*#__PURE__*/React.createElement(PlusOutlined, null)
|
|
749
|
+
}, "\u6DFB\u52A0"));
|
|
750
|
+
}
|
|
751
|
+
if (buttons.indexOf("delete") > -1) {
|
|
752
|
+
if (deletePosition == "toolbar") {
|
|
753
|
+
selfButtons.push( /*#__PURE__*/React.createElement(Button
|
|
754
|
+
// type={"primary"}
|
|
755
|
+
, {
|
|
756
|
+
onClick: this.onDelete.bind(this),
|
|
757
|
+
icon: /*#__PURE__*/React.createElement(DeleteOutlined, null),
|
|
758
|
+
danger: true
|
|
759
|
+
}, "\u5220\u9664"));
|
|
760
|
+
} else if (deletePosition == "row") {
|
|
761
|
+
columnButtons.push( /*#__PURE__*/React.createElement(Button
|
|
762
|
+
// type={"primary"}
|
|
763
|
+
, {
|
|
764
|
+
onClick: record => {
|
|
765
|
+
this.onDelete(record);
|
|
766
|
+
},
|
|
767
|
+
icon: /*#__PURE__*/React.createElement(DeleteOutlined, null),
|
|
768
|
+
danger: true,
|
|
769
|
+
type: "link"
|
|
770
|
+
}, "\u5220\u9664"));
|
|
894
771
|
}
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
columnButtons.push(child);
|
|
906
|
-
}
|
|
907
|
-
});
|
|
908
|
-
} else {
|
|
909
|
-
var _item$props5, _item$props6;
|
|
910
|
-
|
|
911
|
-
if ((item === null || item === void 0 ? void 0 : (_item$props5 = item.props) === null || _item$props5 === void 0 ? void 0 : _item$props5.pageType) == "toolButton") {
|
|
912
|
-
selfButtons.push(item);
|
|
913
|
-
} else if ((item === null || item === void 0 ? void 0 : (_item$props6 = item.props) === null || _item$props6 === void 0 ? void 0 : _item$props6.pageType) == "cloumnButton") {
|
|
914
|
-
columnButtons.push(item);
|
|
772
|
+
}
|
|
773
|
+
if (Array.isArray(children)) {
|
|
774
|
+
children.map(item => {
|
|
775
|
+
if (Array.isArray(item)) {
|
|
776
|
+
item.map(child => {
|
|
777
|
+
var _child$props, _child$props2, _child$props3;
|
|
778
|
+
if ((child === null || child === void 0 || (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.pageType) == "toolButton") {
|
|
779
|
+
selfButtons.push(child);
|
|
780
|
+
} else if ((child === null || child === void 0 || (_child$props2 = child.props) === null || _child$props2 === void 0 ? void 0 : _child$props2.pageType) == "cloumnButton" || (child === null || child === void 0 || (_child$props3 = child.props) === null || _child$props3 === void 0 ? void 0 : _child$props3.pageType) == "columnButton") {
|
|
781
|
+
columnButtons.push(child);
|
|
915
782
|
}
|
|
783
|
+
});
|
|
784
|
+
} else {
|
|
785
|
+
var _item$props5, _item$props6, _item$props7;
|
|
786
|
+
if ((item === null || item === void 0 || (_item$props5 = item.props) === null || _item$props5 === void 0 ? void 0 : _item$props5.pageType) == "toolButton") {
|
|
787
|
+
selfButtons.push(item);
|
|
788
|
+
} else if ((item === null || item === void 0 || (_item$props6 = item.props) === null || _item$props6 === void 0 ? void 0 : _item$props6.pageType) == "cloumnButton" || (item === null || item === void 0 || (_item$props7 = item.props) === null || _item$props7 === void 0 ? void 0 : _item$props7.pageType) == "columnButton") {
|
|
789
|
+
columnButtons.push(item);
|
|
916
790
|
}
|
|
917
|
-
});
|
|
918
|
-
} else if (children) {
|
|
919
|
-
var props = children.props;
|
|
920
|
-
|
|
921
|
-
if ((props === null || props === void 0 ? void 0 : props.pageType) == "toolButton") {
|
|
922
|
-
selfButtons.push(children);
|
|
923
|
-
} else if ((props === null || props === void 0 ? void 0 : props.pageType) == "cloumnButton") {
|
|
924
|
-
columnButtons.push(children);
|
|
925
791
|
}
|
|
792
|
+
});
|
|
793
|
+
} else if (children) {
|
|
794
|
+
const {
|
|
795
|
+
props
|
|
796
|
+
} = children;
|
|
797
|
+
if ((props === null || props === void 0 ? void 0 : props.pageType) == "toolButton") {
|
|
798
|
+
selfButtons.push(children);
|
|
799
|
+
} else if ((props === null || props === void 0 ? void 0 : props.pageType) == "cloumnButton") {
|
|
800
|
+
columnButtons.push(children);
|
|
926
801
|
}
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
802
|
+
}
|
|
803
|
+
actionColumn && tableColumn.push({
|
|
804
|
+
title: "操作",
|
|
805
|
+
dataIndex: "action",
|
|
806
|
+
align: actionProps !== null && actionProps !== void 0 && actionProps.textAlign ? actionProps === null || actionProps === void 0 ? void 0 : actionProps.textAlign : baseActionColumn.textAlign ? baseActionColumn.textAlign : "left",
|
|
807
|
+
width: actionProps !== null && actionProps !== void 0 && actionProps.width ? actionProps === null || actionProps === void 0 ? void 0 : actionProps.width : baseActionColumn.width ? baseActionColumn.width : 200,
|
|
808
|
+
fixed: "right",
|
|
809
|
+
render: (text, record) => {
|
|
810
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
811
|
+
className: getLess(styles, "nsc-basepage-action")
|
|
812
|
+
}, this.renderCloumnButton(columnButtons, record));
|
|
813
|
+
}
|
|
814
|
+
});
|
|
815
|
+
if (columnOrder) tableColumn = [{
|
|
816
|
+
title: "序号",
|
|
817
|
+
width: 80,
|
|
818
|
+
align: "center",
|
|
819
|
+
render: (text, reacord, index) => {
|
|
820
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, index + 1);
|
|
821
|
+
}
|
|
822
|
+
}, ...tableColumn];
|
|
823
|
+
let searchFlag = showSearch && searchForms.length > 0;
|
|
824
|
+
let {
|
|
825
|
+
tableTool
|
|
826
|
+
} = config();
|
|
827
|
+
let toolFlag = showToolButton && selfButtons.length > 0 && toolButtonPosition == "buttom";
|
|
828
|
+
let toolbarFlag = !(tableProps.toolbar == false || ((_tableProps$toolbar = tableProps.toolbar) === null || _tableProps$toolbar === void 0 ? void 0 : _tableProps$toolbar.show) == false || ((_tableProps$toolbar2 = tableProps.toolbar) === null || _tableProps$toolbar2 === void 0 || (_tableProps$toolbar2 = _tableProps$toolbar2.tools) === null || _tableProps$toolbar2 === void 0 ? void 0 : _tableProps$toolbar2.length) == 0 || (tableTool === null || tableTool === void 0 ? void 0 : tableTool.show) == false);
|
|
829
|
+
let pageHeight = this.props.pageType == "tabspage" ? 63 : 0;
|
|
830
|
+
let tableHeaderHeight = 55;
|
|
831
|
+
let headerHeight = showSearch && searchForms.length > 0 ? 104 : 0;
|
|
832
|
+
let toolHeight = tableTitle || toolFlag ? 48 : 0;
|
|
833
|
+
let paddingHeight = 25;
|
|
834
|
+
let tableContentHeight = elementHeight - headerHeight - toolHeight - paddingHeight - pageHeight;
|
|
835
|
+
let tableHeight = tableContentHeight - 32 - 32;
|
|
836
|
+
let tableSrollHeight = tableContentHeight - tableHeaderHeight - 32 - 32;
|
|
837
|
+
if (tableProps.pagination !== false) {
|
|
838
|
+
const scroll = tableParams.scroll;
|
|
839
|
+
tableParams = _objectSpread(_objectSpread({}, tableParams), {}, {
|
|
840
|
+
scroll: _objectSpread({
|
|
841
|
+
x: "max-content",
|
|
842
|
+
y: tableSrollHeight
|
|
843
|
+
}, scroll)
|
|
939
844
|
});
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
var _config4 = config(),
|
|
951
|
-
tableTool = _config4.tableTool;
|
|
952
|
-
|
|
953
|
-
var toolFlag = showToolButton && selfButtons.length > 0;
|
|
954
|
-
var toolbarFlag = !(tableProps.toolbar == false || ((_tableProps$toolbar = tableProps.toolbar) === null || _tableProps$toolbar === void 0 ? void 0 : _tableProps$toolbar.show) == false || ((_tableProps$toolbar2 = tableProps.toolbar) === null || _tableProps$toolbar2 === void 0 ? void 0 : (_tableProps$toolbar2$ = _tableProps$toolbar2.tools) === null || _tableProps$toolbar2$ === void 0 ? void 0 : _tableProps$toolbar2$.length) == 0 || (tableTool === null || tableTool === void 0 ? void 0 : tableTool.show) == false);
|
|
955
|
-
|
|
956
|
-
if (tableProps.pagination !== false) {
|
|
957
|
-
var scroll = tableParams.scroll;
|
|
958
|
-
tableParams = _objectSpread(_objectSpread({}, tableParams), {}, {
|
|
959
|
-
scroll: _objectSpread({
|
|
960
|
-
x: "max-content"
|
|
961
|
-
}, scroll)
|
|
962
|
-
});
|
|
845
|
+
}
|
|
846
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
847
|
+
className: cls(getLess(styles, "nsc-basepage"), className),
|
|
848
|
+
ref: this.pageRef
|
|
849
|
+
}, this.props.pageTitle && /*#__PURE__*/React.createElement("div", {
|
|
850
|
+
className: cls(getLess(styles, "nsc-basepage-title"))
|
|
851
|
+
}, this.props.pageTitle), /*#__PURE__*/React.createElement("div", {
|
|
852
|
+
className: cls(getLess(styles, "nsc-basepage-pane")),
|
|
853
|
+
style: {
|
|
854
|
+
display: "flex"
|
|
963
855
|
}
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
856
|
+
}, showLeft && /*#__PURE__*/React.createElement("div", {
|
|
857
|
+
className: getLess(styles, "nsc-basepage-left")
|
|
858
|
+
}, treeTitle && /*#__PURE__*/React.createElement("div", {
|
|
859
|
+
className: getLess(styles, "tree-title")
|
|
860
|
+
}, treeTitle), /*#__PURE__*/React.createElement("div", {
|
|
861
|
+
className: cls(getLess(styles, "tree-content"), {
|
|
862
|
+
[getLess(styles, "tree-content-notitle")]: !treeTitle
|
|
863
|
+
})
|
|
864
|
+
}, /*#__PURE__*/React.createElement(Tree, _extends({
|
|
865
|
+
store: _objectSpread({}, treeStore),
|
|
866
|
+
showIcon: false,
|
|
867
|
+
checkable: false,
|
|
868
|
+
searchable: treeSearch,
|
|
869
|
+
onSelect: this.treeSelect.bind(this),
|
|
870
|
+
selectedKeys: [this.state.treeSelectedKey],
|
|
871
|
+
titleAlias: titleAlias
|
|
872
|
+
}, othertreeParams)))), /*#__PURE__*/React.createElement("div", {
|
|
873
|
+
className: cls(getLess(styles, "nsc-basepage-right"), {
|
|
874
|
+
[getLess(styles, "nsc-basepage-no-left-right")]: !showLeft
|
|
875
|
+
})
|
|
876
|
+
}, showSearch && searchForms.length > 0 && /*#__PURE__*/React.createElement("div", {
|
|
877
|
+
className: getLess(styles, "nsc-basepage-headersearch")
|
|
878
|
+
}, /*#__PURE__*/React.createElement(HeaderSearch, {
|
|
879
|
+
searchForms: searchForms,
|
|
880
|
+
toolButtonPosition: toolButtonPosition,
|
|
881
|
+
onSearch: this.onSearch.bind(this),
|
|
882
|
+
onReset: this.props.onReset,
|
|
883
|
+
ref: this.searchRef,
|
|
884
|
+
searchFormProps: this.props.searchFormProps
|
|
885
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
886
|
+
className: cls(getLess(styles, "nsc-basepage-content"), {
|
|
887
|
+
[getLess(styles, "nsc-basepage-content-gap")]: !searchFlag
|
|
888
|
+
})
|
|
889
|
+
}, (tableTitle || toolFlag) && /*#__PURE__*/React.createElement("div", {
|
|
890
|
+
className: cls(getLess(styles, "nsc-basepage-table-title"), {
|
|
891
|
+
[getLess(styles, "nsc-basepage-title-width")]: !toolbarFlag
|
|
892
|
+
})
|
|
893
|
+
}, /*#__PURE__*/React.createElement("div", null, tableTitle), toolFlag && this.renderToolButtons(selfButtons, toolbarFlag)), /*#__PURE__*/React.createElement("div", {
|
|
894
|
+
className: cls(getLess(styles, "nsc-basepage-table"), {
|
|
895
|
+
[getLess(styles, "nsc-basepage-table-top")]: !toolbarFlag
|
|
896
|
+
}, {
|
|
897
|
+
[getLess(styles, "nsc-basepage-table-top2")]: toolbarFlag && !toolFlag
|
|
898
|
+
}),
|
|
899
|
+
style: {
|
|
900
|
+
height: tableContentHeight
|
|
901
|
+
}
|
|
902
|
+
}, /*#__PURE__*/React.createElement(Table, _extends({
|
|
903
|
+
ref: this.tableRef,
|
|
904
|
+
columns: tableColumn,
|
|
905
|
+
expandable: _objectSpread({
|
|
906
|
+
expandIcon: _ref => {
|
|
907
|
+
let {
|
|
908
|
+
expanded,
|
|
909
|
+
onExpand,
|
|
910
|
+
record
|
|
911
|
+
} = _ref;
|
|
912
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, expanded ? /*#__PURE__*/React.createElement(DownOutlined, {
|
|
913
|
+
onClick: e => onExpand(record, e),
|
|
914
|
+
className: getLess(styles, "nsc-basepage-expand-icon")
|
|
915
|
+
}) : record.childNodes && /*#__PURE__*/React.createElement(RightOutlined, {
|
|
916
|
+
onClick: e => onExpand(record, e),
|
|
917
|
+
className: getLess(styles, "nsc-basepage-expand-icon")
|
|
918
|
+
}));
|
|
973
919
|
}
|
|
974
|
-
},
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
ref: this.searchRef,
|
|
992
|
-
searchFormProps: this.props.searchFormProps
|
|
993
|
-
}), showToolButton && selfButtons.length > 0 && toolButtonPosition == "buttom" && this.renderToolButtons(selfButtons, searchForms.length == 0), /*#__PURE__*/React.createElement("div", {
|
|
994
|
-
className: cls(getLess(styles, "table"), _defineProperty({}, getLess(styles, "table-top"), searchFlag && !toolFlag || !toolbarFlag), _defineProperty({}, getLess(styles, "table-top2"), !searchFlag && !toolFlag))
|
|
995
|
-
}, /*#__PURE__*/React.createElement(Table, _extends({
|
|
996
|
-
ref: this.tableRef,
|
|
997
|
-
columns: tableColumn,
|
|
998
|
-
expandable: _objectSpread({
|
|
999
|
-
expandIcon: function expandIcon(_ref) {
|
|
1000
|
-
var expanded = _ref.expanded,
|
|
1001
|
-
onExpand = _ref.onExpand,
|
|
1002
|
-
record = _ref.record;
|
|
1003
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, expanded ? /*#__PURE__*/React.createElement(DownOutlined, {
|
|
1004
|
-
onClick: function onClick(e) {
|
|
1005
|
-
return onExpand(record, e);
|
|
1006
|
-
},
|
|
1007
|
-
className: getLess(styles, "expand-icon")
|
|
1008
|
-
}) : record.childNodes && /*#__PURE__*/React.createElement(RightOutlined, {
|
|
1009
|
-
onClick: function onClick(e) {
|
|
1010
|
-
return onExpand(record, e);
|
|
1011
|
-
},
|
|
1012
|
-
className: getLess(styles, "expand-icon")
|
|
1013
|
-
}));
|
|
1014
|
-
}
|
|
1015
|
-
}, expandable),
|
|
1016
|
-
columnOrder: true,
|
|
1017
|
-
onChange: function onChange(pagination) {
|
|
1018
|
-
var currentPage = _this6.state.currentPage;
|
|
1019
|
-
|
|
1020
|
-
if (currentPage !== pagination.current) {
|
|
1021
|
-
_this6.setState({
|
|
1022
|
-
currentPage: pagination.current
|
|
1023
|
-
});
|
|
1024
|
-
}
|
|
1025
|
-
},
|
|
1026
|
-
toolbar: _objectSpread({
|
|
1027
|
-
onToolClick: {
|
|
1028
|
-
onRefresh: function onRefresh() {
|
|
1029
|
-
var params = _this6.getSearchValues();
|
|
1030
|
-
|
|
1031
|
-
_this6.tableLoad(params);
|
|
1032
|
-
}
|
|
920
|
+
}, expandable),
|
|
921
|
+
columnOrder: true,
|
|
922
|
+
onChange: pagination => {
|
|
923
|
+
const {
|
|
924
|
+
currentPage
|
|
925
|
+
} = this.state;
|
|
926
|
+
if (currentPage !== pagination.current) {
|
|
927
|
+
this.setState({
|
|
928
|
+
currentPage: pagination.current
|
|
929
|
+
});
|
|
930
|
+
}
|
|
931
|
+
},
|
|
932
|
+
toolbar: _objectSpread({
|
|
933
|
+
onToolClick: {
|
|
934
|
+
onRefresh: () => {
|
|
935
|
+
const params = this.getSearchValues();
|
|
936
|
+
this.tableLoad(params);
|
|
1033
937
|
}
|
|
1034
|
-
}
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
}(PureComponent);
|
|
1061
|
-
|
|
938
|
+
}
|
|
939
|
+
}, tableProps.toolbar),
|
|
940
|
+
showRowSelection: showRowSelection,
|
|
941
|
+
style: {
|
|
942
|
+
height: tableHeight
|
|
943
|
+
}
|
|
944
|
+
}, tableParams))))), editorForm && /*#__PURE__*/React.createElement(EditorForm, {
|
|
945
|
+
ref: this.editorRef,
|
|
946
|
+
callBack: () => {
|
|
947
|
+
var _this$props$onCallBac5, _this$props$onCallBac6;
|
|
948
|
+
((_this$props$onCallBac5 = this.props.onCallBacks) === null || _this$props$onCallBac5 === void 0 ? void 0 : _this$props$onCallBac5.onSumbitCallBack) && ((_this$props$onCallBac6 = this.props.onCallBacks) === null || _this$props$onCallBac6 === void 0 ? void 0 : _this$props$onCallBac6.onSumbitCallBack());
|
|
949
|
+
this.tableReload();
|
|
950
|
+
},
|
|
951
|
+
formProps: editorForms,
|
|
952
|
+
submitUrl: submitUrl,
|
|
953
|
+
submitParams: submitParams,
|
|
954
|
+
onSubmit: this.props.onSubmit,
|
|
955
|
+
defaultValue: defaultValue,
|
|
956
|
+
onHideForm: this.props.onHideForm,
|
|
957
|
+
onFormChange: this.props.onFormChange,
|
|
958
|
+
formType: this.props.formType || "auto",
|
|
959
|
+
changeValid: formChangeValid,
|
|
960
|
+
otherProps: _objectSpread({}, formProps)
|
|
961
|
+
})));
|
|
962
|
+
}
|
|
963
|
+
}
|
|
1062
964
|
export default BasePage;
|
|
1063
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2UvQmFzZVBhZ2UvaW5kZXgudHN4Il0sIm5hbWVzIjpbIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsIlRhYmxlIiwiVHJlZSIsIkJ1dHRvbiIsIk1vZGFsIiwiUG9wb3ZlciIsIm1lc3NhZ2UiLCJFZGl0b3JGb3JtIiwiY2xzIiwic3R5bGVzIiwidXRpbHMiLCJEb3duT3V0bGluZWQiLCJFeWVPdXRsaW5lZCIsIkVkaXRPdXRsaW5lZCIsIlJpZ2h0T3V0bGluZWQiLCJQbHVzT3V0bGluZWQiLCJFbGxpcHNpc091dGxpbmVkIiwiRGVsZXRlT3V0bGluZWQiLCJnZXRMZXNzIiwicmVxdWVzdCIsImNvbmZpZyIsImdldFN0b3JhZ2UiLCJIZWFkZXJTZWFyY2giLCJCYXNlUGFnZSIsInByb3BzIiwiY3JlYXRlUmVmIiwiY2hlY2tlZFRyZWVLZXlzIiwic3RhdGUiLCJuYW1lIiwidXNlclR5cGUiLCJhY2NvdW50IiwidmFsdWUiLCJkZXB0SWQiLCJvblNlYXJjaCIsInNlbGVjdGVkIiwicmVzIiwia2V5Iiwia2V5cyIsImxlbmd0aCIsInN0b3JlUHJlZml4IiwidHlwZSIsImNvbnRlbnQiLCJzaXplIiwic2VsZWN0ZWRSb3dLZXlzIiwic2VsZWN0ZWRSb3dEYXRhcyIsInRyZWVTZWxlY3RlZEtleSIsImV4cGFuZCIsImZvcm1UeXBlIiwidGFibGVTaXplIiwidHJlZVNlYXJjaFByYW1zIiwicG9wb3BlbnMiLCJpbml0RGF0YSIsInBhcmFtcyIsImNhbGxCYWNrIiwic2VhcmNoUmVmIiwiY3VycmVudCIsInNldFNlYXJjaFBhcmFtcyIsImVkaXRvcmZsYWciLCJlZGl0b3JSZWYiLCJzaG93IiwiaGlkZUZvcm0iLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsInNldEZpZWxkc1ZhbHVlIiwiZ2V0RmllbGRzVmFsdWUiLCJkYXRhIiwiZGVsZXRlVXJsIiwib25EZWxldGUiLCJkZWxldGVQYXJhbXMiLCJkZWxldGVQb3NpdGlvbiIsIl90aGlzIiwidGFibGVSZWYiLCJnZXRTZWxlY3RlZFJvd0tleXMiLCJ3YXJuaW5nIiwiY29uZmlybSIsIm9uT2siLCJFcnJvciIsImRlZmF1bHRQYXJhbXMiLCJtZXRob2QiLCJhdXRvUHJlZml4IiwiaWRzIiwiam9pbiIsImlkIiwicmVxdWVzdFBhcmFtcyIsInRoZW4iLCJjb2RlIiwic3VjY2VzcyIsImdldFNlYXJjaFZhbHVlcyIsIm9uQ2FsbEJhY2tzIiwib25EZWxldGVDYWxsQmFjayIsInRhYmxlTG9hZCIsImVycm9yIiwiY2F0Y2giLCJjb25zb2xlIiwibG9nIiwicmVxdWVzdENvbmZpZyIsInN0b3JlIiwibG9hZCIsIm9uU2VhcmNoQ2FsbEJhY2siLCJjYWxsYmFjayIsImF1dG9Mb2FkIiwicmVsb2FkIiwicmVjb3JkcyIsImN1cnJlbnRQYWdlIiwiZ2V0U2VsZWN0ZWRSb3dEYXRhcyIsInJlc2V0U2VsZWN0ZWRSb3dLZXlzIiwiZnJvbVZhbHVlIiwidGFibGVQcm9wcyIsInJvd0tleSIsInJlc0tleSIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsIm1hcCIsIml0ZW0iLCJpbmRleCIsImdldENoaWxkcmVuRGF0YSIsInRvb2xidXR0b25zIiwibWFyZ2luZmxhZyIsImZsYWciLCJzaG93U2VhcmNoIiwicGFnZVR5cGUiLCJvbkNsaWNrIiwiaWNvbiIsIm1hcmdpbkxlZnQiLCJjb2x1bW5CdXR0b25zIiwicmVjb3JkIiwiYWN0aW9uUG9ycHMiLCJiYXNlQWN0aW9uQ29sdW1uIiwibmV3QnV0dG9ucyIsInNob3dJY29uIiwicmVjb3JkU2hvdyIsImV2YWwiLCJwdXNoIiwic2V0U3RhdGUiLCJ2aXNpYmFsZSIsInNlbGVjdGVkS2V5cyIsIm9iaiIsImtleXdvcmQiLCJ0cmVlUHJvcHMiLCJzZWFyY2hLZXkiLCJzZWFyY2hGaWVsZCIsInBhcmFudFNlbGVjdCIsInNlbGVjdGVkTm9kZXMiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwiaXNMZWFmIiwib25UcmVlU2VsZWN0IiwidHJlZVNlbGVjdENhbGxCYWNrIiwicmVzZXRGaWVsZHMiLCJ0ZXh0IiwibmV3VGV4dCIsImkiLCJsYWJlbCIsInNldERhdGEiLCJ0cmVlUmVmIiwiY29sdW1ucyIsInN1Ym1pdFVybCIsImZvcm1Qcm9wcyIsInNob3dMZWZ0Iiwic3VibWl0UGFyYW1zIiwic2hvd1Rvb2xCdXR0b24iLCJidXR0b25zIiwiZWRpdG9yRm9ybSIsIm9uU2hvd0Zvcm0iLCJmb3JtQ2hhbmdlVmFsaWQiLCJjbGFzc05hbWUiLCJ0b29sQnV0dG9uUG9zaXRpb24iLCJmaWx0ZXJDb2x1bW4iLCJhY3Rpb25Db2x1bW4iLCJzaG93Um93U2VsZWN0aW9uIiwiY29sdW1uT3JkZXIiLCJleHBhbmRhYmxlIiwib3RoZXJ0YWJsZVBhcmFtcyIsInRyZWVTdG9yZSIsInRyZWVTZWFyY2giLCJ0aXRsZUFsaWFzIiwib3RoZXJ0cmVlUGFyYW1zIiwidGFibGVQYXJhbXMiLCJ0YWJsZUNvbHVtbiIsInNlYXJjaEZvcm1zIiwiZWRpdG9yRm9ybXMiLCJkZWZhdWx0VmFsdWUiLCJ0ZW1wIiwic2VhcmNoIiwiZmllbGQiLCJkYXRhSW5kZXgiLCJ0aXRsZSIsImxhYmVsQ29sIiwid3JhcHBlckNvbCIsInJ1bGVzIiwic2VhcmNoUnVsZXMiLCJlZGl0b3IiLCJzcGFuIiwiZGljdE5hbWUiLCJ1bmRlZmluZWQiLCJjb2x1bW5TZWFyY2giLCJmaWx0ZXJQcm9wcyIsInRlbXBQcm9wIiwic3R5bGUiLCJyZW5kZXIiLCJnZXRUZXh0IiwiZWxsaXBzaXMiLCJjb2x1bW5TaG93Iiwic2VsZkJ1dHRvbnMiLCJpbmRleE9mIiwic2hvd0Zvcm0iLCJiaW5kIiwiQXJyYXkiLCJpc0FycmF5IiwiY2hpbGQiLCJhbGlnbiIsInRleHRBbGlnbiIsIndpZHRoIiwiZml4ZWQiLCJyZW5kZXJDbG91bW5CdXR0b24iLCJyZWFjb3JkIiwic2VhcmNoRmxhZyIsInRhYmxlVG9vbCIsInRvb2xGbGFnIiwidG9vbGJhckZsYWciLCJ0b29sYmFyIiwidG9vbHMiLCJwYWdpbmF0aW9uIiwic2Nyb2xsIiwieCIsInBhZ2VUaXRsZSIsImRpc3BsYXkiLCJ0cmVlU2VsZWN0Iiwib25SZXNldCIsInNlYXJjaEZvcm1Qcm9wcyIsInJlbmRlclRvb2xCdXR0b25zIiwiZXhwYW5kSWNvbiIsImV4cGFuZGVkIiwib25FeHBhbmQiLCJlIiwib25Ub29sQ2xpY2siLCJvblJlZnJlc2giLCJvblN1bWJpdENhbGxCYWNrIiwidGFibGVSZWxvYWQiLCJvblN1Ym1pdCIsIm9uSGlkZUZvcm0iLCJvbkZvcm1DaGFuZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBUCxJQUFnQkMsYUFBaEIsUUFBZ0QsT0FBaEQ7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLGtCQUFsQjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsaUJBQWpCO0FBRUEsT0FBT0MsTUFBUCxNQUFtQixtQkFBbkI7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLGtCQUFsQjtBQUNBLE9BQU9DLE9BQVAsTUFBb0Isb0JBQXBCO0FBQ0EsT0FBT0MsT0FBUCxNQUFvQixvQkFBcEI7QUFHQSxPQUFPQyxVQUFQLE1BQXVCLFFBQXZCO0FBQ0EsT0FBT0MsR0FBUCxNQUFnQixZQUFoQjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIscUJBQW5CO0FBR0EsU0FBU0MsS0FBVCxRQUFzQix1QkFBdEI7QUFDQSxTQUNFQyxZQURGLEVBRUVDLFdBRkYsRUFHRUMsWUFIRixFQUlFQyxhQUpGLEVBS0VDLFlBTEYsRUFNRUMsZ0JBTkYsRUFPRUMsY0FQRixRQVFPLG1CQVJQO0FBU0EsU0FBU0MsT0FBVCxRQUFpQyxhQUFqQztBQUNBLE9BQU9DLE9BQVAsTUFBb0IsYUFBcEI7QUFFQSxPQUFPQyxNQUFQLE1BQW1CLGNBQW5CO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixtQkFBM0I7QUFFQSxPQUFPQyxZQUFQLE1BQXlCLGlCQUF6Qjs7SUE4RE1DLFE7Ozs7O0FBTUosb0JBQVlDLEtBQVosRUFBd0I7QUFB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QUFBLGdCQUFnQixFQUFFbkQ7QUEzQ3BCLFNBNENNUSxXQTVDTixFQVpGLENBcEJGLENBbEJGLEVBa0dHZixVQUFVLGlCQUNULG9CQUFDLFVBQUQ7QUFDRSxRQUFBLEdBQUcsRUFBRSxLQUFLeEcsU0FEWjtBQUVFLFFBQUEsUUFBUSxFQUFFLG9CQUFNO0FBQUE7O0FBQ2Qsb0NBQUEsTUFBSSxDQUFDbEMsS0FBTCxDQUFXZ0UsV0FBWCxnRkFBd0JxSixnQkFBeEIsZ0NBQ0UsTUFBSSxDQUFDck4sS0FBTCxDQUFXZ0UsV0FEYiwyREFDRSx1QkFBd0JxSixnQkFBeEIsRUFERjs7QUFFQSxVQUFBLE1BQUksQ0FBQ0MsV0FBTCxDQUFpQmhDLElBQWpCLENBQXNCLE1BQXRCO0FBQ0QsU0FOSDtBQU9FLFFBQUEsU0FBUyxFQUFFMUIsV0FQYjtBQVFFLFFBQUEsU0FBUyxFQUFFeEIsU0FSYjtBQVNFLFFBQUEsWUFBWSxFQUFFRyxZQVRoQjtBQVVFLFFBQUEsUUFBUSxFQUFFLEtBQUt2SSxLQUFMLENBQVd1TixRQVZ2QjtBQVdFLFFBQUEsWUFBWSxFQUFFMUQsWUFYaEI7QUFZRSxRQUFBLFVBQVUsRUFBRSxLQUFLN0osS0FBTCxDQUFXd04sVUFaekI7QUFhRSxRQUFBLFlBQVksRUFBRSxLQUFLeE4sS0FBTCxDQUFXeU4sWUFiM0I7QUFjRSxRQUFBLFFBQVEsRUFBRSxLQUFLek4sS0FBTCxDQUFXdUIsUUFBWCxJQUF1QixNQWRuQztBQWVFLFFBQUEsV0FBVyxFQUFFcUgsZUFmZjtBQWdCRSxRQUFBLFVBQVUsb0JBQU9QLFNBQVA7QUFoQlosUUFuR0osQ0FORixDQURGO0FBZ0lEOzs7O0VBaDNCb0I3SixhOztBQWszQnZCLGVBQWV1QixRQUFmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uLy4uL2Jhc2UvdGFibGVcIjtcclxuaW1wb3J0IFRyZWUgZnJvbSBcIi4uLy4uL2Jhc2UvdHJlZVwiO1xyXG5pbXBvcnQgRm9ybSBmcm9tIFwiLi4vLi4vYmFzZS9mb3JtXCI7XHJcbmltcG9ydCBCdXR0b24gZnJvbSBcIi4uLy4uL2Jhc2UvYnV0dG9uXCI7XHJcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vYmFzZS9tb2RhbFwiO1xyXG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwiLi4vLi4vYmFzZS9wb3BvdmVyXCI7XHJcbmltcG9ydCBtZXNzYWdlIGZyb20gXCIuLi8uLi9iYXNlL21lc3NhZ2VcIjtcclxuaW1wb3J0IEljb24gZnJvbSBcIi4uLy4uL2Jhc2UvY29tbW9uL0ljb25Gb250XCI7XHJcbmltcG9ydCB7IGljb25UeXBlIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgRWRpdG9yRm9ybSBmcm9tIFwiLi9Gb3JtXCI7XHJcbmltcG9ydCBjbHMgZnJvbSBcImNsYXNzbmFtZXNcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9pbmRleC5tb2R1bGUubGVzc1wiO1xyXG5pbXBvcnQgU3RvcmUsIHsgUGFnZVN0b3JlLCBTdG9yZVByb3BzIH0gZnJvbSBcIkBiai1uc2MvbXNuXCI7XHJcbmltcG9ydCBSb3cgZnJvbSBcIi4uLy4uL2Jhc2UvZ3JpZC9Sb3dcIjtcclxuaW1wb3J0IHsgdXRpbHMgfSBmcm9tIFwiQGJqLW5zYy9tc24vbGliL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgRG93bk91dGxpbmVkLFxyXG4gIEV5ZU91dGxpbmVkLFxyXG4gIEVkaXRPdXRsaW5lZCxcclxuICBSaWdodE91dGxpbmVkLFxyXG4gIFBsdXNPdXRsaW5lZCxcclxuICBFbGxpcHNpc091dGxpbmVkLFxyXG4gIERlbGV0ZU91dGxpbmVkLFxyXG59IGZyb20gXCJAYW50LWRlc2lnbi9pY29uc1wiO1xyXG5pbXBvcnQgeyBnZXRMZXNzLCBnZXROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XHJcbmltcG9ydCByZXF1ZXN0IGZyb20gXCJuc2MtcmVxdWVzdFwiO1xyXG5pbXBvcnQgb21pdCBmcm9tIFwib21pdC5qc1wiO1xyXG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi8uLi9jb25maWdcIjtcclxuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgeyBJRm9ybVByb3BzIH0gZnJvbSBcIi4uLy4uL2Jhc2UvZm9ybS9Gb3JtXCI7XHJcbmltcG9ydCBIZWFkZXJTZWFyY2ggZnJvbSBcIi4uL0hlYWRlclNlYXJjaFwiO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uUHJvcHMgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbnRlcmZhY2UgVGFibGVQcm9wcyB7XHJcbiAgYWN0aW9uQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmk43kvZzliJdcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgZmlsdGVyQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrov4fmu6TmjInpkq5cclxuICBzaG93Um93U2VsZWN0aW9uPzogYm9vbGVhbjsgLy/mmK/lkKbooajmoLzli77pgInliJdcclxuICBwYWdpbmF0aW9uPzogYm9vbGVhbiB8IFBhZ2luYXRpb25Qcm9wczsgLy/mmK/lkKbmmL7npLrliIbpobVcclxuICBjb2x1bW5PcmRlcj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66KGo5qC85bqP5YiXXHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmludGVyZmFjZSBUcmVlUHJvcHMge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmkJzntKLmoYZcclxuICBzZWFyY2hLZXk/OiBzdHJpbmc7IC8v5pCc57SidmFsdWXlr7nlupTnmoRrZXlcclxuICBzZWFyY2hGaWVsZD86IHN0cmluZzsgLy/mn6Xor6Llr7nlupTnmoRrZXlcclxuICB0aXRsZUFsaWFzPzogc3RyaW5nOyAvL+agkXRpdGxl5a+55bqU55qEa2V5LOm7mOiupHRpdGxlXHJcbiAgbm9kZVBvcnBzPzogb2JqZWN0O1xyXG4gIHBhcmFudFNlbGVjdD86IGJvb2xlYW47XHJcbiAgW3Byb3BzTmFtZTogc3RyaW5nXTogYW55O1xyXG59XHJcbmludGVyZmFjZSBGb3JtUHJvcHMgZXh0ZW5kcyBJRm9ybVByb3BzIHt9XHJcbmludGVyZmFjZSBOU0NCYXNlQmFnZVByb3BzIHtcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrlpLTpg6jmkJzntKLmoI9cclxuICB0YWJsZVByb3BzPzogVGFibGVQcm9wczsgLy/ooajmoLzlj4LmlbBcclxuICB0cmVlUHJvcHM/OiBUcmVlUHJvcHM7IC8v5bem5L6n5qCR5Y+C5pWwXHJcbiAgc3VibWl0UGFyYW1zPzogT2JqZWN0OyAvL+a3u+WKoOWPguaVsO+8jOm7mOiupG1vdGhvZDpwb3N077yMIOWPguaVsOmAmui/h2RhdGHkvKDpgJJcclxuICBzdWJtaXRVcmw/OiBzdHJpbmc7XHJcbiAgb25TdWJtaXQ/OiAodmFsdWU/OiBhbnksIGxhYmVsPzogYW55KSA9PiB2b2lkO1xyXG4gIGNvbHVtbnM6IEFycmF5PE9iamVjdD47XHJcbiAgc2hvd0xlZnQ/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuW3puS+p+ebruW9leagkVxyXG4gIHNob3dUb29sQnV0dG9uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmjInpkq7moI9cclxuICBlZGl0b3JGb3JtPzogYm9vbGVhbjsgLy/mmK/lkKbpnIDopoHooajljZXlip/og70gLCDkuLpmYWxzZSDnvJbovpHvvIzmn6XnnIvvvIzmlrDlop7lip/og73lnYfkuI3lj6/nlKhcclxuICBkZWxldGVVcmw/OiBzdHJpbmc7IC8v5Yig6ZmkdXJsXHJcbiAgb25EZWxldGU/OiAoc2VsZWN0ZWRLZXlzPzogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDsgLy/liKDpmaTlj4LmlbDvvIzpu5jorqRtb3Rob2Q6cG9zdO+8jCDlj4LmlbDpgJrov4dpZHPmi7zmjqXkvKDpgJLnu5nlkI7lj7BcclxuICBkZWxldGVQb3NpdGlvbj86IFwidG9vbGJhclwiIHwgXCJyb3dcIjtcclxuICBkZWxldGVQYXJhbXM/OiBPYmplY3Q7XHJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgb25TZWFyY2g/OiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XHJcbiAgb25SZXNldD86ICgpID0+IHZvaWQ7XHJcbiAgaW5pdERhdGE/OiBhbnk7IC8v5Yid5aeL5YyW5Zue6LCD5Ye95pWw77yM5ZyoY29tcG9uZW50RGlkTW91bnTkuK3osIPnlKhcclxuICBidXR0b25zPzogQXJyYXk8c3RyaW5nPjsgLy/mjInpkq7pm4blkIggIFsnYWRkJywnZGVsZXRlJywnc2VhcmNoJywnZWRpdG9yJ11cclxuICBvblNob3dGb3JtPzogKHZhbHVlPzogYW55LCBlZGl0b3JGbGFnPzogc3RyaW5nKSA9PiB2b2lkOyAvL+aJk+W8gOihqOWNleWbnuiwg1xyXG4gIG9uSGlkZUZvcm0/OiAoKSA9PiB2b2lkOyAvL+aJk+W8gOihqOWNleWbnuiwg1xyXG4gIG9uRm9ybUNoYW5nZT86IChjaGFuZ2VkVmFsdWVzPzogYW55LCBhbGxWYWx1ZXM/OiBhbnkpID0+IHZvaWQ7IC8v6KGo5Y2Vb25DaGFuZ2Xlm57osINcclxuICBmb3JtVHlwZT86IFwibW9kYWxcIiB8IFwiZHJhd2VyXCI7XHJcbiAgZm9ybUNoYW5nZVZhbGlkPzogYm9vbGVhbjsgLy/ooajljZXmoKHpqoxcclxuICBjbGFzc05hbWU/OiBhbnk7XHJcbiAgdG9vbEJ1dHRvblBvc2l0aW9uPzogXCJyaWdodFwiIHwgXCJidXR0b21cIjtcclxuICBwYWdlVGl0bGU/OiBzdHJpbmcgfCBSZWFjdE5vZGU7XHJcbiAgZm9ybVByb3BzPzogRm9ybVByb3BzO1xyXG4gIGFjdGlvblBvcnBzPzogeyB0ZXh0QWxpZ24/OiBzdHJpbmc7IHNob3dJY29uPzogYm9vbGVhbjsgd2lkdGg/OiBudW1iZXIgfTtcclxuICBzZWFyY2hGb3JtUHJvcHM/OiB7IHdyYXBwZXJDb2w/OiBhbnk7IGxhYmVsQ29sPzogYW55IH07XHJcbiAgb25UcmVlU2VsZWN0PzogKHZhbHVlPzogYW55LCBlZGl0b3JGbGFnPzogc3RyaW5nKSA9PiB2b2lkOyAvL+aJk+W8gOihqOWNleWbnuiwg1xyXG4gIG9uQ2FsbEJhY2tzPzoge1xyXG4gICAgdHJlZVNlbGVjdENhbGxCYWNrPzogYW55O1xyXG4gICAgb25TZWFyY2hDYWxsQmFjaz86IGFueTtcclxuICAgIG9uU3VtYml0Q2FsbEJhY2s/OiBhbnk7XHJcbiAgICBvbkRlbGV0ZUNhbGxCYWNrPzogYW55O1xyXG4gIH07XHJcbn1cclxuXHJcbmNsYXNzIEJhc2VQYWdlIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxOU0NCYXNlQmFnZVByb3BzLCBhbnk+IHtcclxuICB0YWJsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgdHJlZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIGRhdGVGb3JtYXQgPSB7fSBhcyBhbnk7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgbGV0IHsgc3RvcmVQcmVmaXggfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHR5cGUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcImZvcm1UeXBlXCIgOiBcImZvcm1UeXBlXCJcclxuICAgICk7XHJcbiAgICB0eXBlID0gdHlwZT8uY29udGVudDtcclxuICAgIGxldCBzaXplID0gZ2V0U3RvcmFnZShcclxuICAgICAgc3RvcmVQcmVmaXggPyBzdG9yZVByZWZpeCArIFwiLVwiICsgXCJ0YWJsZVNpemVcIiA6IFwidGFibGVTaXplXCJcclxuICAgICk7XHJcbiAgICBzaXplID0gc2l6ZT8uY29udGVudDtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHR5cGU6IFwiYWRkXCIsXHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgICB0cmVlU2VsZWN0ZWRLZXk6IFwiXCIsXHJcbiAgICAgIGV4cGFuZDogZmFsc2UsXHJcbiAgICAgIGZvcm1UeXBlOiB0eXBlIHx8IFwibW9kYWxcIixcclxuICAgICAgdGFibGVTaXplOiBzaXplIHx8IFwiZGVmYXVsdFwiLFxyXG4gICAgICB0cmVlU2VhcmNoUHJhbXM6IHt9LFxyXG4gICAgICBwb3BvcGVuczoge30sXHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgaW5pdERhdGEgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpbml0RGF0YSAmJiBpbml0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0U2VhcmNoUGFyYW1zKHBhcmFtcywgY2FsbEJhY2spIHtcclxuICAgIHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LnNldFNlYXJjaFBhcmFtcyhwYXJhbXMpO1xyXG4gICAgY2FsbEJhY2sgJiYgY2FsbEJhY2socGFyYW1zKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ID0gKGNoZWNrZWRUcmVlS2V5czogYW55KSA9PiB7XHJcbiAgICBjb25zdCB7IG5hbWUsIHVzZXJUeXBlLCBhY2NvdW50IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgdmFsdWUgPSB7IG5hbWUsIHVzZXJUeXBlLCBhY2NvdW50LCBkZXB0SWQ6IGNoZWNrZWRUcmVlS2V5c1swXSB9O1xyXG4gICAgaWYgKHRoaXMucHJvcHMub25TZWFyY2gpIHtcclxuICAgICAgdGhpcy5wcm9wcy5vblNlYXJjaCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnRhYmxlTG9hZCh2YWx1ZSk7XHJcbiAgfTtcclxuXHJcbiAgLy/mmL7npLrooajljZVcclxuICBzaG93Rm9ybSh2YWx1ZT86IGFueSwgZWRpdG9yZmxhZyA9IFwiYWRkXCIpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNob3codmFsdWUsIGVkaXRvcmZsYWcpO1xyXG4gIH1cclxuXHJcbiAgLy/lhbPpl63ooajljZVcclxuICBoaWRlRm9ybSgpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldExvYWRpbmcobG9hZGluZyk7XHJcbiAgfVxyXG5cclxuICBzZXRFZGl0Rm9ybVZhbHVlcyh2YWx1ZSkge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uc2V0RmllbGRzVmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdEZvcm1WYWx1ZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uZ2V0RmllbGRzVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8v5om56YeP5Yig6ZmkXHJcbiAgb25EZWxldGUoZGF0YT86IGFueSkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBkZWxldGVVcmwsXHJcbiAgICAgIG9uRGVsZXRlLFxyXG4gICAgICBkZWxldGVQYXJhbXMsXHJcbiAgICAgIGRlbGV0ZVBvc2l0aW9uID0gXCJ0b29sYmFyXCIsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJvd0tleXMgPSB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gICAgaWYgKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiKSB7XHJcbiAgICAgIGlmIChzZWxlY3RlZFJvd0tleXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICBtZXNzYWdlLndhcm5pbmcoXCLor7fpgInmi6nopoHliKDpmaTnmoTmlbDmja7vvIFcIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBNb2RhbC5jb25maXJtKHtcclxuICAgICAgY29udGVudDogXCLmmK/lkKbnoa7orqTliKDpmaTmiYDpgInpobnvvJ9cIixcclxuICAgICAgLy8gY2VudGVyZWQ6dHJ1ZSxcclxuICAgICAgb25PazogKCkgPT4ge1xyXG4gICAgICAgIGlmIChvbkRlbGV0ZSkge1xyXG4gICAgICAgICAgb25EZWxldGUgJiZcclxuICAgICAgICAgICAgb25EZWxldGUoZGVsZXRlUG9zaXRpb24gPT0gXCJ0b29sYmFyXCIgPyBzZWxlY3RlZFJvd0tleXMgOiBkYXRhKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkZWxldGVVcmwpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybOS4jeiDveS4uuepuu+8gVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFBhcmFtcyA9IHtcclxuICAgICAgICAgIG1ldGhvZDogXCJwb3N0XCIsXHJcbiAgICAgICAgICBhdXRvUHJlZml4OiB0cnVlLFxyXG4gICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgIGlkczogZGVsZXRlUG9zaXRpb24gPT0gXCJ0b29sYmFyXCIgPyBzZWxlY3RlZFJvd0tleXMuam9pbigpIDogZGF0YS5pZCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgcmVxdWVzdFBhcmFtcyA9IHt9IGFzIGFueTtcclxuICAgICAgICBpZiAoZGVmYXVsdFBhcmFtcykge1xyXG4gICAgICAgICAgcmVxdWVzdFBhcmFtcyA9IHsgLi4uZGVsZXRlUGFyYW1zIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcXVlc3RQYXJhbXMgPSB7IC4uLmRlZmF1bHRQYXJhbXMgfTtcclxuICAgICAgICByZXF1ZXN0KGRlbGV0ZVVybCwge1xyXG4gICAgICAgICAgLi4ucmVxdWVzdFBhcmFtcyxcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlczogYW55KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgY29kZSB9ID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5zdWNjZXNzKFwi5Yig6Zmk5oiQ5Yqf77yBXCIpO1xyXG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IF90aGlzLnNlYXJjaFJlZj8uY3VycmVudD8uZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uRGVsZXRlQ2FsbEJhY2sgJiZcclxuICAgICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vbkRlbGV0ZUNhbGxCYWNrKCk7XHJcbiAgICAgICAgICAgICAgX3RoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLmVycm9yKFwi5Yig6Zmk5aSx6LSl77yBXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3JcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgdGFibGVMb2FkKHBhcmFtczogYW55LCByZXF1ZXN0Q29uZmlnID0ge30pIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmUubG9hZCh7XHJcbiAgICAgIC4uLnJlcXVlc3RDb25maWcsXHJcbiAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8v5p+l6K+iXHJcbiAgb25TZWFyY2gocGFyYW1zKSB7XHJcbiAgICBjb25zdCB7IG9uU2VhcmNoLCBvbkNhbGxCYWNrcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmIChvblNlYXJjaCkge1xyXG4gICAgICBvblNlYXJjaCh7IC4uLnBhcmFtcywgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudGFibGVMb2FkKHsgLi4ucGFyYW1zLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9KTtcclxuICAgIG9uQ2FsbEJhY2tzPy5vblNlYXJjaENhbGxCYWNrICYmXHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2FsbEJhY2tzPy5vblNlYXJjaENhbGxCYWNrLCB0aGlzLCBbcGFyYW1zXSk7XHJcbiAgfVxyXG4gIC8v6KGo5qC86YeN5paw5Yqg6L29XHJcbiAgdGFibGVSZWxvYWQocGFyYW1zID0ge30sIGF1dG9Mb2FkID0gdHJ1ZSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8ucmVsb2FkKHtcclxuICAgICAgY2FsbGJhY2s6IChyZXMpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBhdXRvTG9hZCAmJlxyXG4gICAgICAgICAgcmVzPy5kYXRhPy5yZWNvcmRzPy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50UGFnZSAhPT0gMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8ucmVsb2FkKHtcclxuICAgICAgICAgICAgcGFyYW1zOiB7IGN1cnJlbnQ6IDEsIC4uLnBhcmFtcyB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0RhdGFzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dEYXRhcygpO1xyXG4gIH1cclxuICByZXNldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnJlc2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hWYWx1ZXMoKSB7XHJcbiAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlYXJjaFJlZj8uY3VycmVudD8uZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICByZXR1cm4geyAuLi5mcm9tVmFsdWUsIC4uLnRoaXMuc3RhdGUudHJlZVNlYXJjaFByYW1zIH07XHJcbiAgfVxyXG5cclxuICBnZXRDaGlsZHJlbkRhdGEoZGF0YSwga2V5cyA9IFtdKSB7XHJcbiAgICBjb25zdCB7IHRhYmxlUHJvcHMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCByZXNLZXkgPSBbXTtcclxuICAgIGlmIChkYXRhLmNoaWxkTm9kZXMpIHtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkTm9kZXM7XHJcbiAgICAgIGNoaWxkcmVuLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICB0aGlzLmdldENoaWxkcmVuRGF0YShpdGVtLmNoaWxkTm9kZXMsIGtleXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNLZXkgPSBbLi4ua2V5cywgaXRlbVtyb3dLZXldXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzS2V5ID0gWy4uLmtleXMsIGRhdGFbcm93S2V5XV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzS2V5O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyVG9vbEJ1dHRvbnModG9vbGJ1dHRvbnM6IGFueSwgbWFyZ2luZmxhZyA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBmbGFnID0gdG9vbGJ1dHRvbnMubGVuZ3RoID4gNTtcclxuICAgIGNvbnN0IHsgc2hvd1NlYXJjaCA9IHRydWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdG9vbGJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID0gaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGluZGV4ID4gMykge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKSxcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LWl0ZW1cIilcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljaygpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImljb25cIil9PntpY29ufTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT57Y2hpbGRyZW59PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwidG9vbC1idXR0b25zXCIpLCB7XHJcbiAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwidG9vbC1idXR0b25zLW1hcmdpblwiKV06ICFzaG93U2VhcmNoIHx8IG1hcmdpbmZsYWcsXHJcbiAgICAgICAgfSl9XHJcbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogMCB9fVxyXG4gICAgICA+XHJcbiAgICAgICAge3Rvb2xidXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtpbmRleH0+e2l0ZW19PC9kaXY+O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IDQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICAgICAgdGl0bGU9e251bGx9XHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXI9e1tcImNsaWNrXCJdfVxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydwb3AtYm94J119XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICDmm7TlpJogPERvd25PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBrZXk9e2luZGV4fT57aXRlbX08L2Rpdj47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnM6IGFueSwgcmVjb3JkOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgYWN0aW9uUG9ycHMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IGJhc2VBY3Rpb25Db2x1bW4gfSA9IGNvbmZpZygpO1xyXG4gICAgY29uc3QgbmV3QnV0dG9ucyA9IFtdO1xyXG4gICAgbGV0IHNob3dJY29uID0gdHJ1ZTtcclxuICAgIGlmIChhY3Rpb25Qb3Jwcz8uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgZWxzZSBpZiAoYmFzZUFjdGlvbkNvbHVtbi5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBjb2x1bW5CdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCBpY29uLCByZWNvcmRTaG93LCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKHJlY29yZFNob3cpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHJlY29yZFNob3cgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgaWYgKGV2YWwocmVjb3JkU2hvdykpIHtcclxuICAgICAgICAgICAgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlY29yZFNob3cgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICBjb25zdCBzaG93ID0gcmVjb3JkU2hvdyhyZWNvcmQpO1xyXG4gICAgICAgICAgc2hvdyAmJiBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBmbGFnID0gbmV3QnV0dG9ucy5sZW5ndGggPiAzO1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSBuZXdCdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCByZWNvcmRTaG93LCBpY29uLCBzaG93LCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGluZGV4ID4gMikge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcImVkaXRvclwiKSxcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LWl0ZW1cIilcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRhID0ge30gYXMgYW55O1xyXG4gICAgICAgICAgICAgIGRhdGFbcmVjb3JkLmlkXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgcG9wb3BlbnM6IGRhdGEsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHR5cGU9XCJsaW5rXCJcclxuICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJpY29uXCIpfT57aWNvbn08L3NwYW4+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwidGV4dFwiKX0+e2NoaWxkcmVufTwvc3Bhbj5cclxuICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXdCdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCByZWNvcmRTaG93LCBpY29uLCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICBpZiAoaW5kZXggPCAzKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImFhYVwiKTtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJlZGl0b3JcIiksIHtcclxuICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJlZGl0b3JfZmlyc3RcIildOiBpbmRleCA9PT0gMCxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgdHlwZT1cImxpbmtcIlxyXG4gICAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7c2hvd0ljb24gIT09IGZhbHNlICYmIChcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+e2ljb259PC9zcGFuPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0ZXh0XCIpfT57Y2hpbGRyZW59PC9zcGFuPlxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSAzKSB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9e251bGx9XHJcbiAgICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgICB0cmlnZ2VyPXtbXCJjbGlja1wiXX1cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIHZpc2libGU9e3RoaXMuc3RhdGUucG9wb3BlbnNbcmVjb3JkLmlkXSB8fCBmYWxzZX1cclxuICAgICAgICAgICAgICBvblZpc2libGVDaGFuZ2U9eyh2aXNpYmFsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZpc2liYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0ge30gYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgICBkYXRhW3JlY29yZC5pZF0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBwb3BvcGVuczogZGF0YSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBwb3BvcGVuczoge30sXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgLy8gb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydwb3AnXX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpfT5cclxuICAgICAgICAgICAgICAgIDxFbGxpcHNpc091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwiZWRpdG9yXCIpLCB7XHJcbiAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcImVkaXRvcl9maXJzdFwiKV06IGluZGV4ID09PSAwLFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB0eXBlPVwibGlua1wiXHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+e2ljb259PC9zcGFuPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRleHRcIil9PntjaGlsZHJlbn08L3NwYW4+XHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgLy/moJHngrnlh7vkuovku7ZcclxuICB0cmVlU2VsZWN0KHNlbGVjdGVkS2V5czogYW55LCBvYmo6IGFueSkge1xyXG4gICAgbGV0IGtleXdvcmQgPSBcIlwiO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzZWFyY2hLZXkgPSBcImtleVwiLFxyXG4gICAgICBzZWFyY2hGaWVsZCA9IFwiXCIsXHJcbiAgICAgIHBhcmFudFNlbGVjdCA9IHRydWUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcy50cmVlUHJvcHM7XHJcbiAgICBjb25zdCB7IHRyZWVTZWxlY3RlZEtleSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWQsIHNlbGVjdGVkTm9kZXMgfSA9IG9iajtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAga2V5d29yZCA9IHNlbGVjdGVkTm9kZXNbMF0uZGF0YXJlZi5hdHRyaWJ1dGVbc2VhcmNoS2V5XTtcclxuICAgICAgaWYgKHBhcmFudFNlbGVjdCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBzZWxlY3RlZEtleXNbMF0sXHJcbiAgICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHsgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGVzWzBdLmlzTGVhZiB8fCAhc2VsZWN0ZWROb2Rlc1swXS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkS2V5c1swXSAhPT0gdHJlZVNlbGVjdGVkS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgIHRyZWVTZWxlY3RlZEtleTogc2VsZWN0ZWRLZXlzWzBdLFxyXG4gICAgICAgICAgICAgIHRyZWVTZWFyY2hQcmFtczogeyBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBrZXl3b3JkLFxyXG4gICAgICAgIHRyZWVTZWFyY2hQcmFtczoge30sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMub25UcmVlU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMucHJvcHMub25UcmVlU2VsZWN0KHNlbGVjdGVkS2V5cywgb2JqKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpIHx8IHt9O1xyXG4gICAgc2VhcmNoRmllbGQgJiYgdGhpcy50YWJsZUxvYWQoeyAuLi5mcm9tVmFsdWUsIFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSk7XHJcbiAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50cmVlU2VsZWN0Q2FsbEJhY2sgJiZcclxuICAgICAgdXRpbHMuY2FsbGJhY2sodGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8udHJlZVNlbGVjdENhbGxCYWNrLCB0aGlzLCBbXHJcbiAgICAgICAgc2VsZWN0ZWRLZXlzLFxyXG4gICAgICAgIG9iaixcclxuICAgICAgXSk7XHJcbiAgfVxyXG4gIHJlc2V0U2VhcmNoKCkge1xyXG4gICAgdGhpcy5zZWFyY2hSZWYuY3VycmVudD8ucmVzZXRGaWVsZHMoKTtcclxuICB9XHJcbiAgZ2V0VGV4dChwcm9wcywgdGV4dCkge1xyXG4gICAgbGV0IG5ld1RleHQgPSB0ZXh0O1xyXG4gICAgaWYgKHByb3BzPy5kYXRhICYmIHByb3BzPy5kYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBkYXRhID0gcHJvcHMuZGF0YTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChkYXRhW2ldLnZhbHVlID09IHRleHQpIHtcclxuICAgICAgICAgIG5ld1RleHQgPSBkYXRhW2ldLmxhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld1RleHQ7XHJcbiAgfVxyXG4gIHNldFRhYmxlRGF0YShkYXRhKSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlPy5zZXREYXRhKGRhdGEpO1xyXG4gIH1cclxuICBzZXRUcmVlRGF0YShkYXRhKSB7XHJcbiAgICB0aGlzLnRyZWVSZWYuY3VycmVudD8uc3RvcmU/LnNldERhdGEoZGF0YSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkS2V5ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICBsZXQgcmVzID0gW107XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gc2VsZWN0ZWQpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IHNlbGVjdGVkW2tleV07XHJcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXMgPSBbLi4ucmVzLCAuLi5rZXlzXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9O1xyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGNvbHVtbnMgPSBbXSxcclxuICAgICAgc2hvd1NlYXJjaCA9IHRydWUsXHJcbiAgICAgIGNoaWxkcmVuLFxyXG4gICAgICBzdWJtaXRVcmwgPSBcIlwiLFxyXG4gICAgICB0YWJsZVByb3BzID0ge30sXHJcbiAgICAgIHRyZWVQcm9wcyA9IHt9LFxyXG4gICAgICBmb3JtUHJvcHMgPSB7fSxcclxuICAgICAgc2hvd0xlZnQgPSBmYWxzZSxcclxuICAgICAgc3VibWl0UGFyYW1zID0ge30sXHJcbiAgICAgIHNob3dUb29sQnV0dG9uID0gdHJ1ZSxcclxuICAgICAgYnV0dG9ucyA9IFtdLFxyXG4gICAgICBlZGl0b3JGb3JtID0gdHJ1ZSxcclxuICAgICAgb25TaG93Rm9ybSxcclxuICAgICAgZm9ybUNoYW5nZVZhbGlkID0gdHJ1ZSxcclxuICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICB0b29sQnV0dG9uUG9zaXRpb24gPSBcImJ1dHRvbVwiLFxyXG4gICAgICBhY3Rpb25Qb3JwcyxcclxuICAgICAgZGVsZXRlUG9zaXRpb24gPSBcInRvb2xiYXJcIixcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzdG9yZSxcclxuICAgICAgZmlsdGVyQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgYWN0aW9uQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgc2hvd1Jvd1NlbGVjdGlvbiA9IHRydWUsXHJcbiAgICAgIGNvbHVtbk9yZGVyID0gdHJ1ZSxcclxuICAgICAgZXhwYW5kYWJsZSA9IHt9LFxyXG4gICAgICBwYXJhbnRTZWxlY3QgPSB0cnVlLFxyXG4gICAgICAuLi5vdGhlcnRhYmxlUGFyYW1zXHJcbiAgICB9ID0gdGFibGVQcm9wcztcclxuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0cmVlU3RvcmUgPSB7fSxcclxuICAgICAgc2hvd1NlYXJjaDogdHJlZVNlYXJjaCA9IHRydWUsXHJcbiAgICAgIHRpdGxlQWxpYXMgPSBcInRpdGxlXCIsXHJcbiAgICAgIC4uLm90aGVydHJlZVBhcmFtc1xyXG4gICAgfSA9IHRyZWVQcm9wcztcclxuXHJcbiAgICBsZXQgdGFibGVQYXJhbXMgPSB7IGZpbHRlckNvbHVtbiwgc3RvcmUsIC4uLm90aGVydGFibGVQYXJhbXMgfSBhcyBhbnk7XHJcbiAgICBsZXQgdGFibGVDb2x1bW46IGFueVtdID0gW107XHJcbiAgICBjb25zdCBzZWFyY2hGb3JtczogYW55ID0gW107XHJcbiAgICBjb25zdCBlZGl0b3JGb3JtczogYW55ID0gW107XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsdWU6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgY29sdW1uQnV0dG9uczogYW55ID0gW107XHJcbiAgICBjb2x1bW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0ZW1wID0geyAuLi5pdGVtIH07XHJcbiAgICAgIGlmICh0ZW1wLnNlYXJjaCA9PT0gdHJ1ZSB8fCB0ZW1wLnNlYXJjaD8uc2hvdyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHNlYXJjaEZvcm1zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleCxcclxuICAgICAgICAgIGxhYmVsOiB0ZW1wLnNlYXJjaD8ubGFiZWwgfHwgdGVtcC50aXRsZSxcclxuICAgICAgICAgIHR5cGU6IHRlbXAudHlwZSxcclxuICAgICAgICAgIHByb3BzOiB0ZW1wLnByb3BzLFxyXG4gICAgICAgICAgbGFiZWxDb2w6IHRlbXAuc2VhcmNoPy5sYWJlbENvbCxcclxuICAgICAgICAgIHdyYXBwZXJDb2w6IHRlbXAuc2VhcmNoPy53cmFwcGVyQ29sLFxyXG4gICAgICAgICAgcnVsZXM6IHRlbXAuc2VhcmNoUnVsZXMgPyB0ZW1wLnNlYXJjaFJ1bGVzIDogW10sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnNlYXJjaDtcclxuICAgICAgdGVtcC5lZGl0b3IgIT09IGZhbHNlICYmXHJcbiAgICAgICAgZWRpdG9yRm9ybXMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiB0ZW1wLmZpZWxkIHx8IHRlbXAuZGF0YUluZGV4LFxyXG4gICAgICAgICAgbGFiZWw6IHRlbXAudGl0bGUsXHJcbiAgICAgICAgICBydWxlczogdGVtcC5ydWxlcyA/IHRlbXAucnVsZXMgOiBbXSxcclxuICAgICAgICAgIHR5cGU6IHRlbXAudHlwZSxcclxuICAgICAgICAgIHNwYW46IHRlbXAuc3BhbixcclxuICAgICAgICAgIGRpY3ROYW1lOiB0ZW1wLmRpY3ROYW1lLFxyXG4gICAgICAgICAgcHJvcHM6IHsgLi4udGVtcC5wcm9wcyB9LFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRlbXAucHJvcHM/LmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgdGVtcC5wcm9wcz8uZGVmYXVsdFZhbHVlICE9PSBudWxsXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0ZW1wLmZpZWxkIHx8IHRlbXAuZGF0YUluZGV4O1xyXG4gICAgICAgIGRlZmF1bHRWYWx1ZVtuYW1lXSA9IHRlbXAucHJvcHM/LmRlZmF1bHRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC5ydWxlcztcclxuICAgICAgZGVsZXRlIHRlbXAuc3BhbjtcclxuICAgICAgaWYgKHRlbXAuY29sdW1uU2VhcmNoKSB7XHJcbiAgICAgICAgdGVtcC5maWx0ZXJQcm9wcyA9IHtcclxuICAgICAgICAgIHR5cGU6IHRlbXAudHlwZSxcclxuICAgICAgICAgIHByb3BzOiB0ZW1wLnByb3BzLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAudHlwZTtcclxuICAgICAgbGV0IHRlbXBQcm9wID0geyAuLi50ZW1wLnByb3BzIH07XHJcbiAgICAgIGlmICh0ZW1wLnN0eWxlKSB7XHJcbiAgICAgICAgdGVtcCA9IHtcclxuICAgICAgICAgIHJlbmRlcjogKHRleHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICB7dGV4dCAhPT0gXCJcIiAmJiB0ZXh0ICE9PSBudWxsICYmIHRleHQgIT09IHVuZGVmaW5lZCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb2wtYmFja1wiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb2wtdGV4dFwiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5nZXRUZXh0KHRlbXBQcm9wLCB0ZXh0KX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi50ZW1wLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRlbXAuZWxsaXBzaXMpIHtcclxuICAgICAgICB0ZW1wID0ge1xyXG4gICAgICAgICAgcmVuZGVyOiAodGV4dDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8Pnt0aGlzLmdldFRleHQodGVtcFByb3AsIHRleHQpfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi50ZW1wLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGVtcCA9IHsgLi4udGVtcCB9O1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnByb3BzO1xyXG4gICAgICBpZiAodGVtcD8uY29sdW1uU2hvdyAhPT0gZmFsc2UpIHRhYmxlQ29sdW1uLnB1c2godGVtcCk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHNlbGZCdXR0b25zOiBhbnkgPSBbXTtcclxuICAgIGNvbnN0IHsgYmFzZUFjdGlvbkNvbHVtbiB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgc2hvd0ljb24gPSB0cnVlO1xyXG4gICAgaWYgKGFjdGlvblBvcnBzPy5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBlbHNlIGlmIChiYXNlQWN0aW9uQ29sdW1uLnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGlmIChlZGl0b3JGb3JtID09IHRydWUpIHtcclxuICAgICAgaWYgKGJ1dHRvbnMuaW5kZXhPZihcInNlYXJjaFwiKSA+IC0xKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBvbkNsaWNrPXsocmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAob25TaG93Rm9ybSkge1xyXG4gICAgICAgICAgICAgICAgb25TaG93Rm9ybShyZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCwgXCJkZXRhaWxcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIFwiZGV0YWlsXCIpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICBpY29uPXs8RXllT3V0bGluZWQgLz59XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOafpeeci1xyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiZWRpdG9yXCIpID4gLTEpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhyZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImVkaXRvclwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93Rm9ybShyZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCwgXCJlZGl0b3JcIik7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIGljb249ezxFZGl0T3V0bGluZWQgLz59XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOe8lui+kVxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGJ1dHRvbnMuaW5kZXhPZihcImFkZFwiKSA+IC0xKSB7XHJcbiAgICAgIHNlbGZCdXR0b25zLnB1c2goXHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgdHlwZT17XCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgb25TaG93Rm9ybSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICBvblNob3dGb3JtKCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm0oKTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBpY29uPXs8UGx1c091dGxpbmVkIC8+fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIOa3u+WKoFxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGJ1dHRvbnMuaW5kZXhPZihcImRlbGV0ZVwiKSA+IC0xKSB7XHJcbiAgICAgIGlmIChkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIikge1xyXG4gICAgICAgIHNlbGZCdXR0b25zLnB1c2goXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIC8vIHR5cGU9e1wicHJpbWFyeVwifVxyXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLm9uRGVsZXRlLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgIGljb249ezxEZWxldGVPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgZGFuZ2VyXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOWIoOmZpFxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChkZWxldGVQb3NpdGlvbiA9PSBcInJvd1wiKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAvLyB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZShyZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICBpY29uPXs8RGVsZXRlT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgIGRhbmdlclxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICDliKDpmaRcclxuICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xyXG4gICAgICBjaGlsZHJlbi5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XHJcbiAgICAgICAgICBpdGVtLm1hcCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJ0b29sQnV0dG9uXCIpIHtcclxuICAgICAgICAgICAgICBzZWxmQnV0dG9ucy5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZD8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGl0ZW0/LnByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIikge1xyXG4gICAgICAgICAgICBzZWxmQnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjbG91bW5CdXR0b25cIikge1xyXG4gICAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgY29uc3QgeyBwcm9wcyB9OiBhbnkgPSBjaGlsZHJlbjtcclxuICAgICAgaWYgKHByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIikge1xyXG4gICAgICAgIHNlbGZCdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9IGVsc2UgaWYgKHByb3BzPy5wYWdlVHlwZSA9PSBcImNsb3VtbkJ1dHRvblwiKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKGNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYWN0aW9uQ29sdW1uICYmXHJcbiAgICAgIHRhYmxlQ29sdW1uLnB1c2goe1xyXG4gICAgICAgIHRpdGxlOiBcIuaTjeS9nFwiLFxyXG4gICAgICAgIGRhdGFJbmRleDogXCJhY3Rpb25cIixcclxuICAgICAgICBhbGlnbjogYWN0aW9uUG9ycHM/LnRleHRBbGlnblxyXG4gICAgICAgICAgPyBhY3Rpb25Qb3Jwcz8udGV4dEFsaWduXHJcbiAgICAgICAgICA6IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICA/IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICA6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IGFjdGlvblBvcnBzPy53aWR0aFxyXG4gICAgICAgICAgPyBhY3Rpb25Qb3Jwcz8ud2lkdGhcclxuICAgICAgICAgIDogYmFzZUFjdGlvbkNvbHVtbi53aWR0aFxyXG4gICAgICAgICAgPyBiYXNlQWN0aW9uQ29sdW1uLndpZHRoXHJcbiAgICAgICAgICA6IDIwMCxcclxuICAgICAgICBmaXhlZDogXCJyaWdodFwiLFxyXG4gICAgICAgIHJlbmRlcjogKHRleHQ6IGFueSwgcmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJhY3Rpb25cIil9PlxyXG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckNsb3VtbkJ1dHRvbihjb2x1bW5CdXR0b25zLCByZWNvcmQpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoY29sdW1uT3JkZXIpXHJcbiAgICAgIHRhYmxlQ29sdW1uID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIuW6j+WPt1wiLFxyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0LCByZWFjb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPD57aW5kZXggKyAxfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50YWJsZUNvbHVtbixcclxuICAgICAgXTtcclxuICAgIGxldCBzZWFyY2hGbGFnID0gc2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9IHNob3dUb29sQnV0dG9uICYmIHNlbGZCdXR0b25zLmxlbmd0aCA+IDA7XHJcbiAgICBsZXQgdG9vbGJhckZsYWcgPSAhKFxyXG4gICAgICB0YWJsZVByb3BzLnRvb2xiYXIgPT0gZmFsc2UgfHxcclxuICAgICAgdGFibGVQcm9wcy50b29sYmFyPy5zaG93ID09IGZhbHNlIHx8XHJcbiAgICAgIHRhYmxlUHJvcHMudG9vbGJhcj8udG9vbHM/Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgIHRhYmxlVG9vbD8uc2hvdyA9PSBmYWxzZVxyXG4gICAgKTtcclxuICAgIGlmICh0YWJsZVByb3BzLnBhZ2luYXRpb24gIT09IGZhbHNlKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbCA9IHRhYmxlUGFyYW1zLnNjcm9sbDtcclxuICAgICAgdGFibGVQYXJhbXMgPSB7XHJcbiAgICAgICAgLi4udGFibGVQYXJhbXMsXHJcbiAgICAgICAgc2Nyb2xsOiB7IHg6IFwibWF4LWNvbnRlbnRcIiwgLi4uc2Nyb2xsIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJwYWdlXCIpLCBjbGFzc05hbWUpfT5cclxuICAgICAgICB7dGhpcy5wcm9wcy5wYWdlVGl0bGUgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJwYWdlLXRpdGxlXCIpKX0+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwicGFnZS1wYW5lXCIpKX1cclxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3Nob3dMZWZ0ICYmIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImxlZnRcIil9PlxyXG4gICAgICAgICAgICAgIDxUcmVlXHJcbiAgICAgICAgICAgICAgICBzdG9yZT17eyAuLi50cmVlU3RvcmUgfX1cclxuICAgICAgICAgICAgICAgIHNob3dJY29uPXtmYWxzZX1cclxuICAgICAgICAgICAgICAgIGNoZWNrYWJsZT17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlPXt0cmVlU2VhcmNofVxyXG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMudHJlZVNlbGVjdC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRLZXlzPXtbdGhpcy5zdGF0ZS50cmVlU2VsZWN0ZWRLZXldfVxyXG4gICAgICAgICAgICAgICAgdGl0bGVBbGlhcz17dGl0bGVBbGlhc31cclxuICAgICAgICAgICAgICAgIHsuLi5vdGhlcnRyZWVQYXJhbXN9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJyaWdodFwiKSwge1xyXG4gICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuby1sZWZ0LXJpZ2h0XCIpXTogIXNob3dMZWZ0LFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dTZWFyY2ggJiYgc2VhcmNoRm9ybXMubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICAgICAgPEhlYWRlclNlYXJjaFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoRm9ybXM9e3NlYXJjaEZvcm1zfVxyXG4gICAgICAgICAgICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uPXt0b29sQnV0dG9uUG9zaXRpb259XHJcbiAgICAgICAgICAgICAgICBvblNlYXJjaD17dGhpcy5vblNlYXJjaC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgb25SZXNldD17dGhpcy5wcm9wcy5vblJlc2V0fVxyXG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnNlYXJjaFJlZn1cclxuICAgICAgICAgICAgICAgIHNlYXJjaEZvcm1Qcm9wcz17dGhpcy5wcm9wcy5zZWFyY2hGb3JtUHJvcHN9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgIHtzaG93VG9vbEJ1dHRvbiAmJlxyXG4gICAgICAgICAgICAgIHNlbGZCdXR0b25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICB0b29sQnV0dG9uUG9zaXRpb24gPT0gXCJidXR0b21cIiAmJlxyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyVG9vbEJ1dHRvbnMoc2VsZkJ1dHRvbnMsIHNlYXJjaEZvcm1zLmxlbmd0aCA9PSAwKX1cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwidGFibGVcIiksXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJ0YWJsZS10b3BcIildOlxyXG4gICAgICAgICAgICAgICAgICAgIChzZWFyY2hGbGFnICYmICF0b29sRmxhZykgfHwgIXRvb2xiYXJGbGFnLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcInRhYmxlLXRvcDJcIildOiAhc2VhcmNoRmxhZyAmJiAhdG9vbEZsYWcsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRhYmxlUmVmfVxyXG4gICAgICAgICAgICAgICAgY29sdW1ucz17dGFibGVDb2x1bW59XHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZEljb246ICh7IGV4cGFuZGVkLCBvbkV4cGFuZCwgcmVjb3JkIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2V4cGFuZGVkID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxEb3duT3V0bGluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJleHBhbmQtaWNvblwiKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSaWdodE91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImV4cGFuZC1pY29uXCIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAuLi5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIGNvbHVtbk9yZGVyPXt0cnVlfVxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwYWdpbmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY3VycmVudFBhZ2UgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSAhPT0gcGFnaW5hdGlvbi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogcGFnaW5hdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgdG9vbGJhcj17e1xyXG4gICAgICAgICAgICAgICAgICBvblRvb2xDbGljazoge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uUmVmcmVzaDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRTZWFyY2hWYWx1ZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVMb2FkKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgLi4udGFibGVQcm9wcy50b29sYmFyLFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIHNob3dSb3dTZWxlY3Rpb249e3Nob3dSb3dTZWxlY3Rpb259XHJcbiAgICAgICAgICAgICAgICB7Li4udGFibGVQYXJhbXN9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIHtlZGl0b3JGb3JtICYmIChcclxuICAgICAgICAgICAgPEVkaXRvckZvcm1cclxuICAgICAgICAgICAgICByZWY9e3RoaXMuZWRpdG9yUmVmfVxyXG4gICAgICAgICAgICAgIGNhbGxCYWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vblN1bWJpdENhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uU3VtYml0Q2FsbEJhY2soKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVSZWxvYWQuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIGZvcm1Qcm9wcz17ZWRpdG9yRm9ybXN9XHJcbiAgICAgICAgICAgICAgc3VibWl0VXJsPXtzdWJtaXRVcmx9XHJcbiAgICAgICAgICAgICAgc3VibWl0UGFyYW1zPXtzdWJtaXRQYXJhbXN9XHJcbiAgICAgICAgICAgICAgb25TdWJtaXQ9e3RoaXMucHJvcHMub25TdWJtaXR9XHJcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XHJcbiAgICAgICAgICAgICAgb25IaWRlRm9ybT17dGhpcy5wcm9wcy5vbkhpZGVGb3JtfVxyXG4gICAgICAgICAgICAgIG9uRm9ybUNoYW5nZT17dGhpcy5wcm9wcy5vbkZvcm1DaGFuZ2V9XHJcbiAgICAgICAgICAgICAgZm9ybVR5cGU9e3RoaXMucHJvcHMuZm9ybVR5cGUgfHwgXCJhdXRvXCJ9XHJcbiAgICAgICAgICAgICAgY2hhbmdlVmFsaWQ9e2Zvcm1DaGFuZ2VWYWxpZH1cclxuICAgICAgICAgICAgICBvdGhlclByb3BzPXt7IC4uLmZvcm1Qcm9wcyB9fVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBCYXNlUGFnZTtcclxuIl19
|
|
965
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUYWJsZSIsIlRyZWUiLCJCdXR0b24iLCJNb2RhbCIsIlBvcG92ZXIiLCJtZXNzYWdlIiwiRWRpdG9yRm9ybSIsImNscyIsInV0aWxzIiwiRG93bk91dGxpbmVkIiwiRXllT3V0bGluZWQiLCJFZGl0T3V0bGluZWQiLCJSaWdodE91dGxpbmVkIiwiUGx1c091dGxpbmVkIiwiRWxsaXBzaXNPdXRsaW5lZCIsIkRlbGV0ZU91dGxpbmVkIiwiZ2V0TGVzcyIsInJlcXVlc3QiLCJjb25maWciLCJnZXRTdG9yYWdlIiwiSGVhZGVyU2VhcmNoIiwic3R5bGVzIiwiQmFzZVBhZ2UiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX3R5cGUiLCJfc2l6ZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsImNoZWNrZWRUcmVlS2V5cyIsIm5hbWUiLCJ1c2VyVHlwZSIsImFjY291bnQiLCJzdGF0ZSIsInZhbHVlIiwiZGVwdElkIiwib25TZWFyY2giLCJzZWxlY3RlZCIsInJlcyIsImtleSIsImtleXMiLCJsZW5ndGgiLCJzdG9yZVByZWZpeCIsInR5cGUiLCJjb250ZW50Iiwic2l6ZSIsInNlbGVjdGVkUm93S2V5cyIsInNlbGVjdGVkUm93RGF0YXMiLCJ0cmVlU2VsZWN0ZWRLZXkiLCJleHBhbmQiLCJmb3JtVHlwZSIsInRhYmxlU2l6ZSIsInRyZWVTZWFyY2hQcmFtcyIsInBvcG9wZW5zIiwibW9yZU9wZW4iLCJlbGVtZW50SGVpZ2h0IiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpcyRwYWdlUmVmJGN1cnJlbnQiLCJpbml0RGF0YSIsInBhZ2VSZWYiLCJjdXJyZW50IiwiY2xpZW50SGVpZ2h0Iiwic2V0U3RhdGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJfdGhpcyRwYWdlUmVmJGN1cnJlbnQyIiwic2V0U2VhcmNoUGFyYW1zIiwicGFyYW1zIiwiY2FsbEJhY2siLCJfdGhpcyRzZWFyY2hSZWYkY3VycmUiLCJzZWFyY2hSZWYiLCJzaG93Rm9ybSIsIl90aGlzJGVkaXRvclJlZiIsImVkaXRvcmZsYWciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJlZGl0b3JSZWYiLCJzaG93IiwiX29iamVjdFNwcmVhZCIsImhpZGVGb3JtIiwiX3RoaXMkZWRpdG9yUmVmJGN1cnJlIiwic2V0TG9hZGluZyIsImxvYWRpbmciLCJfdGhpcyRlZGl0b3JSZWYkY3VycmUyIiwic2V0RWRpdEZvcm1WYWx1ZXMiLCJfdGhpcyRlZGl0b3JSZWYkY3VycmUzIiwic2V0RmllbGRzVmFsdWUiLCJnZXRFZGl0Rm9ybVZhbHVlcyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTQiLCJnZXRGaWVsZHNWYWx1ZSIsIm9uRGVsZXRlIiwiZGF0YSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbiIsImRlbGV0ZVVybCIsImRlbGV0ZVBhcmFtcyIsImRlbGV0ZVBvc2l0aW9uIiwiX3RoaXMiLCJ0YWJsZVJlZiIsImdldFNlbGVjdGVkUm93S2V5cyIsIndhcm5pbmciLCJjb25maXJtIiwib25PayIsIkVycm9yIiwiZGVmYXVsdFBhcmFtcyIsIm1ldGhvZCIsImF1dG9QcmVmaXgiLCJpZHMiLCJqb2luIiwiaWQiLCJyZXF1ZXN0UGFyYW1zIiwidGhlbiIsImNvZGUiLCJfdGhpcyRzZWFyY2hSZWYiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWMiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWMyIiwic3VjY2VzcyIsImdldFNlYXJjaFZhbHVlcyIsIm9uQ2FsbEJhY2tzIiwib25EZWxldGVDYWxsQmFjayIsInRhYmxlTG9hZCIsImVycm9yIiwiY2F0Y2giLCJjb25zb2xlIiwibG9nIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuMiIsInJlcXVlc3RDb25maWciLCJzdG9yZSIsImxvYWQiLCJvblNlYXJjaENhbGxCYWNrIiwiY2FsbGJhY2siLCJ0YWJsZVJlbG9hZCIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjMiLCJhdXRvTG9hZCIsInJlbG9hZCIsIl9yZXMkZGF0YSIsInJlY29yZHMiLCJjdXJyZW50UGFnZSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjQiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW41IiwiZ2V0U2VsZWN0ZWRSb3dEYXRhcyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjYiLCJyZXNldFNlbGVjdGVkUm93S2V5cyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjciLCJfdGhpcyRzZWFyY2hSZWYyIiwiZnJvbVZhbHVlIiwiZ2V0Q2hpbGRyZW5EYXRhIiwidGFibGVQcm9wcyIsInJvd0tleSIsInJlc0tleSIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsIm1hcCIsIml0ZW0iLCJpbmRleCIsInJlbmRlclRvb2xCdXR0b25zIiwidG9vbGJ1dHRvbnMiLCJ0b29sYmFyRmxhZyIsImZsYWciLCJzaG93U2VhcmNoIiwiX2l0ZW0kcHJvcHMiLCJwYWdlVHlwZSIsIm9uQ2xpY2siLCJpY29uIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIl9leHRlbmRzIiwic3R5bGUiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJ0aXRsZSIsInBsYWNlbWVudCIsInZpc2libGUiLCJvblZpc2libGVDaGFuZ2UiLCJvcGVuIiwicmVuZGVyQ2xvdW1uQnV0dG9uIiwiY29sdW1uQnV0dG9ucyIsInJlY29yZCIsImFjdGlvblByb3BzIiwiYmFzZUFjdGlvbkNvbHVtbiIsIm5ld0J1dHRvbnMiLCJzaG93SWNvbiIsIl9pdGVtJHByb3BzMiIsInJlY29yZFNob3ciLCJfZXhjbHVkZWQyIiwiZXZhbCIsInB1c2giLCJudW1iZXIiLCJidXR0b25OdW1iZXIiLCJfaXRlbSRwcm9wczMiLCJfZXhjbHVkZWQzIiwiTnVtYmVyIiwiX2l0ZW0kcHJvcHM0IiwiX2V4Y2x1ZGVkNCIsInRyaWdnZXIiLCJ0cmVlU2VsZWN0Iiwic2VsZWN0ZWRLZXlzIiwib2JqIiwiX3RoaXMkc2VhcmNoUmVmMyIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzMiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM0Iiwia2V5d29yZCIsInNlYXJjaEtleSIsInNlYXJjaEZpZWxkIiwicGFyYW50U2VsZWN0IiwidHJlZVByb3BzIiwic2VsZWN0ZWROb2RlcyIsImRhdGFyZWYiLCJhdHRyaWJ1dGUiLCJpc0xlYWYiLCJvblRyZWVTZWxlY3QiLCJ0cmVlU2VsZWN0Q2FsbEJhY2siLCJyZXNldFNlYXJjaCIsIl90aGlzJHNlYXJjaFJlZiRjdXJyZTIiLCJyZXNldEZpZWxkcyIsImdldFRleHQiLCJ0ZXh0IiwiX3Byb3BzJGRhdGEiLCJuZXdUZXh0IiwiaSIsImxhYmVsIiwic2V0VGFibGVEYXRhIiwiX3RoaXMkdGFibGVSZWYkY3VycmVuOCIsInNldERhdGEiLCJzZXRUcmVlRGF0YSIsIl90aGlzJHRyZWVSZWYkY3VycmVudCIsInRyZWVSZWYiLCJyZW5kZXIiLCJfdGFibGVQcm9wcyR0b29sYmFyIiwiX3RhYmxlUHJvcHMkdG9vbGJhcjIiLCJjb2x1bW5zIiwic3VibWl0VXJsIiwiZm9ybVByb3BzIiwic2hvd0xlZnQiLCJzdWJtaXRQYXJhbXMiLCJzaG93VG9vbEJ1dHRvbiIsImJ1dHRvbnMiLCJlZGl0b3JGb3JtIiwib25TaG93Rm9ybSIsImZvcm1DaGFuZ2VWYWxpZCIsInRvb2xCdXR0b25Qb3NpdGlvbiIsImZpbHRlckNvbHVtbiIsImFjdGlvbkNvbHVtbiIsInNob3dSb3dTZWxlY3Rpb24iLCJjb2x1bW5PcmRlciIsImV4cGFuZGFibGUiLCJ0YWJsZVRpdGxlIiwib3RoZXJ0YWJsZVBhcmFtcyIsIl9leGNsdWRlZDUiLCJ0cmVlU3RvcmUiLCJ0cmVlU2VhcmNoIiwidGl0bGVBbGlhcyIsInRyZWVUaXRsZSIsIm90aGVydHJlZVBhcmFtcyIsIl9leGNsdWRlZDYiLCJ0YWJsZVBhcmFtcyIsInRhYmxlQ29sdW1uIiwic2VhcmNoRm9ybXMiLCJlZGl0b3JGb3JtcyIsImRlZmF1bHRWYWx1ZSIsIl90ZW1wJHNlYXJjaCIsIl90ZW1wJHByb3BzIiwiX3RlbXAkcHJvcHMyIiwiX3RlbXAiLCJ0ZW1wIiwid2lkdGgiLCJzZWFyY2giLCJfdGVtcCRzZWFyY2gyIiwiX3RlbXAkc2VhcmNoMyIsIl90ZW1wJHNlYXJjaDQiLCJmaWVsZCIsImRhdGFJbmRleCIsImxhYmVsQ29sIiwid3JhcHBlckNvbCIsInJ1bGVzIiwic2VhcmNoUnVsZXMiLCJlZGl0b3IiLCJzcGFuIiwiZGljdE5hbWUiLCJfdGVtcCRwcm9wczMiLCJjb2x1bW5TZWFyY2giLCJmaWx0ZXJQcm9wcyIsInRlbXBQcm9wIiwiZWxsaXBzaXMiLCJzaG93VGl0bGUiLCJjb2x1bW5TaG93Iiwic2VsZkJ1dHRvbnMiLCJpbmRleE9mIiwiYmluZCIsImRhbmdlciIsIkFycmF5IiwiaXNBcnJheSIsImNoaWxkIiwiX2NoaWxkJHByb3BzIiwiX2NoaWxkJHByb3BzMiIsIl9jaGlsZCRwcm9wczMiLCJfaXRlbSRwcm9wczUiLCJfaXRlbSRwcm9wczYiLCJfaXRlbSRwcm9wczciLCJhbGlnbiIsInRleHRBbGlnbiIsImZpeGVkIiwicmVhY29yZCIsIkZyYWdtZW50Iiwic2VhcmNoRmxhZyIsInRhYmxlVG9vbCIsInRvb2xGbGFnIiwidG9vbGJhciIsInRvb2xzIiwicGFnZUhlaWdodCIsInRhYmxlSGVhZGVySGVpZ2h0IiwiaGVhZGVySGVpZ2h0IiwidG9vbEhlaWdodCIsInBhZGRpbmdIZWlnaHQiLCJ0YWJsZUNvbnRlbnRIZWlnaHQiLCJ0YWJsZUhlaWdodCIsInRhYmxlU3JvbGxIZWlnaHQiLCJwYWdpbmF0aW9uIiwic2Nyb2xsIiwieCIsInkiLCJyZWYiLCJwYWdlVGl0bGUiLCJkaXNwbGF5IiwiY2hlY2thYmxlIiwic2VhcmNoYWJsZSIsIm9uU2VsZWN0Iiwib25SZXNldCIsInNlYXJjaEZvcm1Qcm9wcyIsImhlaWdodCIsImV4cGFuZEljb24iLCJfcmVmIiwiZXhwYW5kZWQiLCJvbkV4cGFuZCIsImUiLCJvbkNoYW5nZSIsIm9uVG9vbENsaWNrIiwib25SZWZyZXNoIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjNSIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzYiLCJvblN1bWJpdENhbGxCYWNrIiwib25TdWJtaXQiLCJvbkhpZGVGb3JtIiwib25Gb3JtQ2hhbmdlIiwiY2hhbmdlVmFsaWQiLCJvdGhlclByb3BzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGFnZS9CYXNlUGFnZS9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uLy4uL2Jhc2UvdGFibGVcIjtcclxuaW1wb3J0IFRyZWUgZnJvbSBcIi4uLy4uL2Jhc2UvdHJlZVwiO1xyXG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi8uLi9iYXNlL2J1dHRvblwiO1xyXG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4uLy4uL2Jhc2UvbW9kYWxcIjtcclxuaW1wb3J0IFBvcG92ZXIgZnJvbSBcIi4uLy4uL2Jhc2UvcG9wb3ZlclwiO1xyXG5pbXBvcnQgbWVzc2FnZSBmcm9tIFwiLi4vLi4vYmFzZS9tZXNzYWdlXCI7XHJcbmltcG9ydCBFZGl0b3JGb3JtIGZyb20gXCIuL0Zvcm1cIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgXCIuL2luZGV4Lm1vZHVsZS5sZXNzXCI7XHJcbmltcG9ydCBTdG9yZSwgeyBQYWdlU3RvcmUsIFN0b3JlUHJvcHMgfSBmcm9tIFwiQGJqLW5zYy9tc25cIjtcclxuaW1wb3J0IHsgdXRpbHMgfSBmcm9tIFwiQGJqLW5zYy9tc24vbGliL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgRG93bk91dGxpbmVkLFxyXG4gIEV5ZU91dGxpbmVkLFxyXG4gIEVkaXRPdXRsaW5lZCxcclxuICBSaWdodE91dGxpbmVkLFxyXG4gIFBsdXNPdXRsaW5lZCxcclxuICBFbGxpcHNpc091dGxpbmVkLFxyXG4gIERlbGV0ZU91dGxpbmVkLFxyXG59IGZyb20gXCJAYW50LWRlc2lnbi9pY29uc1wiO1xyXG5pbXBvcnQgeyBnZXRMZXNzLCBnZXROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XHJcbmltcG9ydCByZXF1ZXN0IGZyb20gXCJuc2MtcmVxdWVzdFwiO1xyXG5pbXBvcnQgb21pdCBmcm9tIFwib21pdC5qc1wiO1xyXG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi8uLi9jb25maWdcIjtcclxuaW1wb3J0IHsgZ2V0U3RvcmFnZSwgcHgydncgfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHsgSUZvcm1Qcm9wcyB9IGZyb20gXCIuLi8uLi9iYXNlL2Zvcm0vRm9ybVwiO1xyXG5pbXBvcnQgSGVhZGVyU2VhcmNoIGZyb20gXCIuLi9IZWFkZXJTZWFyY2hcIjtcclxuaW1wb3J0IHsgUGFnaW5hdGlvblByb3BzIH0gZnJvbSBcImFudGRcIjtcclxuaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xyXG4gIGFjdGlvbkNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pON5L2c5YiXXHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIGZpbHRlckNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66L+H5ruk5oyJ6ZKuXHJcbiAgc2hvd1Jvd1NlbGVjdGlvbj86IGJvb2xlYW47IC8v5piv5ZCm6KGo5qC85Yu+6YCJ5YiXXHJcbiAgcGFnaW5hdGlvbj86IGJvb2xlYW4gfCBQYWdpbmF0aW9uUHJvcHM7IC8v5piv5ZCm5pi+56S65YiG6aG1XHJcbiAgY29sdW1uT3JkZXI/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuihqOagvOW6j+WIl1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5jb25zdCBzdHlsZXMgPSBudWxsO1xyXG5pbnRlcmZhY2UgVHJlZVByb3BzIHtcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pCc57Si5qGGXHJcbiAgc2VhcmNoS2V5Pzogc3RyaW5nOyAvL+aQnOe0onZhbHVl5a+55bqU55qEa2V5XHJcbiAgc2VhcmNoRmllbGQ/OiBzdHJpbmc7IC8v5p+l6K+i5a+55bqU55qEa2V5XHJcbiAgdGl0bGVBbGlhcz86IHN0cmluZzsgLy/moJF0aXRsZeWvueW6lOeahGtleSzpu5jorqR0aXRsZVxyXG4gIG5vZGVQb3Jwcz86IG9iamVjdDtcclxuICBwYXJhbnRTZWxlY3Q/OiBib29sZWFuO1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5pbnRlcmZhY2UgRm9ybVByb3BzIGV4dGVuZHMgSUZvcm1Qcm9wcyB7fVxyXG5pbnRlcmZhY2UgTlNDQmFzZUJhZ2VQcm9wcyB7XHJcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65aS06YOo5pCc57Si5qCPXHJcbiAgdGFibGVQcm9wcz86IFRhYmxlUHJvcHM7IC8v6KGo5qC85Y+C5pWwXHJcbiAgdHJlZVByb3BzPzogVHJlZVByb3BzOyAvL+W3puS+p+agkeWPguaVsFxyXG4gIHN1Ym1pdFBhcmFtcz86IE9iamVjdDsgLy/mt7vliqDlj4LmlbDvvIzpu5jorqRtb3Rob2Q6cG9zdO+8jCDlj4LmlbDpgJrov4dkYXRh5Lyg6YCSXHJcbiAgc3VibWl0VXJsPzogc3RyaW5nO1xyXG4gIG9uU3VibWl0PzogKHZhbHVlPzogYW55LCBsYWJlbD86IGFueSkgPT4gdm9pZDtcclxuICBjb2x1bW5zOiBBcnJheTxPYmplY3Q+O1xyXG4gIHNob3dMZWZ0PzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrlt6bkvqfnm67lvZXmoJFcclxuICBzaG93VG9vbEJ1dHRvbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65oyJ6ZKu5qCPXHJcbiAgZWRpdG9yRm9ybT86IGJvb2xlYW47IC8v5piv5ZCm6ZyA6KaB6KGo5Y2V5Yqf6IO9ICwg5Li6ZmFsc2Ug57yW6L6R77yM5p+l55yL77yM5paw5aKe5Yqf6IO95Z2H5LiN5Y+v55SoXHJcbiAgZGVsZXRlVXJsPzogc3RyaW5nOyAvL+WIoOmZpHVybFxyXG4gIG9uRGVsZXRlPzogKHNlbGVjdGVkS2V5cz86IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7IC8v5Yig6Zmk5Y+C5pWw77yM6buY6K6kbW90aG9kOnBvc3TvvIwg5Y+C5pWw6YCa6L+HaWRz5ou85o6l5Lyg6YCS57uZ5ZCO5Y+wXHJcbiAgZGVsZXRlUG9zaXRpb24/OiBcInRvb2xiYXJcIiB8IFwicm93XCI7XHJcbiAgZGVsZXRlUGFyYW1zPzogT2JqZWN0O1xyXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xyXG4gIG9uU2VhcmNoPzogKHZhbHVlPzogYW55KSA9PiB2b2lkO1xyXG4gIG9uUmVzZXQ/OiAoKSA9PiB2b2lkO1xyXG4gIGluaXREYXRhPzogYW55OyAvL+WIneWni+WMluWbnuiwg+WHveaVsO+8jOWcqGNvbXBvbmVudERpZE1vdW505Lit6LCD55SoXHJcbiAgYnV0dG9ucz86IEFycmF5PHN0cmluZz47IC8v5oyJ6ZKu6ZuG5ZCIICBbJ2FkZCcsJ2RlbGV0ZScsJ3NlYXJjaCcsJ2VkaXRvciddXHJcbiAgb25TaG93Rm9ybT86ICh2YWx1ZT86IGFueSwgZWRpdG9yRmxhZz86IHN0cmluZykgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkhpZGVGb3JtPzogKCkgPT4gdm9pZDsgLy/miZPlvIDooajljZXlm57osINcclxuICBvbkZvcm1DaGFuZ2U/OiAoY2hhbmdlZFZhbHVlcz86IGFueSwgYWxsVmFsdWVzPzogYW55KSA9PiB2b2lkOyAvL+ihqOWNlW9uQ2hhbmdl5Zue6LCDXHJcbiAgZm9ybVR5cGU/OiBcIm1vZGFsXCIgfCBcImRyYXdlclwiO1xyXG4gIGZvcm1DaGFuZ2VWYWxpZD86IGJvb2xlYW47IC8v6KGo5Y2V5qCh6aqMXHJcbiAgY2xhc3NOYW1lPzogYW55O1xyXG4gIHRvb2xCdXR0b25Qb3NpdGlvbj86IFwicmlnaHRcIiB8IFwiYnV0dG9tXCI7XHJcbiAgcGFnZVRpdGxlPzogc3RyaW5nIHwgUmVhY3ROb2RlO1xyXG4gIGZvcm1Qcm9wcz86IEZvcm1Qcm9wcztcclxuICBhY3Rpb25Qcm9wcz86IHtcclxuICAgIHRleHRBbGlnbj86IHN0cmluZztcclxuICAgIHNob3dJY29uPzogYm9vbGVhbjtcclxuICAgIHdpZHRoPzogbnVtYmVyO1xyXG4gICAgYnV0dG9uTnVtYmVyPzogbnVtYmVyIHwgXCJhbGxcIjtcclxuICB9O1xyXG4gIHNlYXJjaEZvcm1Qcm9wcz86IHsgd3JhcHBlckNvbD86IGFueTsgbGFiZWxDb2w/OiBhbnkgfTtcclxuICBvblRyZWVTZWxlY3Q/OiAodmFsdWU/OiBhbnksIGVkaXRvckZsYWc/OiBzdHJpbmcpID0+IHZvaWQ7IC8v5omT5byA6KGo5Y2V5Zue6LCDXHJcbiAgb25DYWxsQmFja3M/OiB7XHJcbiAgICB0cmVlU2VsZWN0Q2FsbEJhY2s/OiBhbnk7XHJcbiAgICBvblNlYXJjaENhbGxCYWNrPzogYW55O1xyXG4gICAgb25TdW1iaXRDYWxsQmFjaz86IGFueTtcclxuICAgIG9uRGVsZXRlQ2FsbEJhY2s/OiBhbnk7XHJcbiAgfTtcclxuICBwYWdlVHlwZT86IFwibm9ybWFsXCIgfCBcInRhYnNwYWdlXCI7XHJcbn1cclxuXHJcbmNsYXNzIEJhc2VQYWdlIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxOU0NCYXNlQmFnZVByb3BzLCBhbnk+IHtcclxuICB0YWJsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgdHJlZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIHBhZ2VSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG4gIGRhdGVGb3JtYXQgPSB7fSBhcyBhbnk7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgbGV0IHsgc3RvcmVQcmVmaXggfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHR5cGUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcImZvcm1UeXBlXCIgOiBcImZvcm1UeXBlXCJcclxuICAgICk7XHJcbiAgICB0eXBlID0gdHlwZT8uY29udGVudDtcclxuICAgIGxldCBzaXplID0gZ2V0U3RvcmFnZShcclxuICAgICAgc3RvcmVQcmVmaXggPyBzdG9yZVByZWZpeCArIFwiLVwiICsgXCJ0YWJsZVNpemVcIiA6IFwidGFibGVTaXplXCJcclxuICAgICk7XHJcbiAgICBzaXplID0gc2l6ZT8uY29udGVudDtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHR5cGU6IFwiYWRkXCIsXHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgICB0cmVlU2VsZWN0ZWRLZXk6IFwiXCIsXHJcbiAgICAgIGV4cGFuZDogZmFsc2UsXHJcbiAgICAgIGZvcm1UeXBlOiB0eXBlIHx8IFwibW9kYWxcIixcclxuICAgICAgdGFibGVTaXplOiBzaXplIHx8IFwiZGVmYXVsdFwiLFxyXG4gICAgICB0cmVlU2VhcmNoUHJhbXM6IHt9LFxyXG4gICAgICBwb3BvcGVuczoge30sXHJcbiAgICAgIG1vcmVPcGVuOiBmYWxzZSxcclxuICAgICAgZWxlbWVudEhlaWdodDogMCxcclxuICAgIH07XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyBpbml0RGF0YSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSB0aGlzLnBhZ2VSZWYuY3VycmVudD8uY2xpZW50SGVpZ2h0O1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGVsZW1lbnRIZWlnaHQsXHJcbiAgICB9KTtcclxuICAgIGluaXREYXRhICYmIGluaXREYXRhKCk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSB0aGlzLnBhZ2VSZWYuY3VycmVudD8uY2xpZW50SGVpZ2h0O1xyXG4gICAgaWYgKGVsZW1lbnRIZWlnaHQgPiB0aGlzLnN0YXRlLmVsZW1lbnRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgZWxlbWVudEhlaWdodCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldFNlYXJjaFBhcmFtcyhwYXJhbXMsIGNhbGxCYWNrKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5zZXRTZWFyY2hQYXJhbXMocGFyYW1zKTtcclxuICAgIGNhbGxCYWNrICYmIGNhbGxCYWNrKHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdCA9IChjaGVja2VkVHJlZUtleXM6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgeyBuYW1lLCB1c2VyVHlwZSwgYWNjb3VudCB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHZhbHVlID0geyBuYW1lLCB1c2VyVHlwZSwgYWNjb3VudCwgZGVwdElkOiBjaGVja2VkVHJlZUtleXNbMF0gfTtcclxuICAgIGlmICh0aGlzLnByb3BzLm9uU2VhcmNoKSB7XHJcbiAgICAgIHRoaXMucHJvcHMub25TZWFyY2godmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy50YWJsZUxvYWQodmFsdWUpO1xyXG4gIH07XHJcblxyXG4gIC8v5pi+56S66KGo5Y2VXHJcbiAgc2hvd0Zvcm0odmFsdWU/OiBhbnksIGVkaXRvcmZsYWcgPSBcImFkZFwiKSB7XHJcbiAgICB0aGlzLmVkaXRvclJlZj8uY3VycmVudD8uc2hvdyh7IC4uLnZhbHVlIH0sIGVkaXRvcmZsYWcpO1xyXG4gIH1cclxuXHJcbiAgLy/lhbPpl63ooajljZVcclxuICBoaWRlRm9ybSgpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldExvYWRpbmcobG9hZGluZyk7XHJcbiAgfVxyXG5cclxuICBzZXRFZGl0Rm9ybVZhbHVlcyh2YWx1ZSkge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uc2V0RmllbGRzVmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdEZvcm1WYWx1ZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uZ2V0RmllbGRzVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8v5om56YeP5Yig6ZmkXHJcbiAgb25EZWxldGUoZGF0YT86IGFueSkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBkZWxldGVVcmwsXHJcbiAgICAgIG9uRGVsZXRlLFxyXG4gICAgICBkZWxldGVQYXJhbXMsXHJcbiAgICAgIGRlbGV0ZVBvc2l0aW9uID0gXCJ0b29sYmFyXCIsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJvd0tleXMgPSB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gICAgaWYgKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiKSB7XHJcbiAgICAgIGlmIChzZWxlY3RlZFJvd0tleXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICBtZXNzYWdlLndhcm5pbmcoXCLor7fpgInmi6nopoHliKDpmaTnmoTmlbDmja7vvIFcIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBNb2RhbC5jb25maXJtKHtcclxuICAgICAgY29udGVudDogXCLmmK/lkKbnoa7orqTliKDpmaTmiYDpgInpobnvvJ9cIixcclxuICAgICAgLy8gY2VudGVyZWQ6dHJ1ZSxcclxuICAgICAgb25PazogKCkgPT4ge1xyXG4gICAgICAgIGlmIChvbkRlbGV0ZSkge1xyXG4gICAgICAgICAgb25EZWxldGUgJiZcclxuICAgICAgICAgICAgb25EZWxldGUoZGVsZXRlUG9zaXRpb24gPT0gXCJ0b29sYmFyXCIgPyBzZWxlY3RlZFJvd0tleXMgOiBkYXRhKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkZWxldGVVcmwpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybOS4jeiDveS4uuepuu+8gVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFBhcmFtcyA9IHtcclxuICAgICAgICAgIG1ldGhvZDogXCJwb3N0XCIsXHJcbiAgICAgICAgICBhdXRvUHJlZml4OiB0cnVlLFxyXG4gICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgIGlkczogZGVsZXRlUG9zaXRpb24gPT0gXCJ0b29sYmFyXCIgPyBzZWxlY3RlZFJvd0tleXMuam9pbigpIDogZGF0YS5pZCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgcmVxdWVzdFBhcmFtcyA9IHt9IGFzIGFueTtcclxuICAgICAgICBpZiAoZGVmYXVsdFBhcmFtcykge1xyXG4gICAgICAgICAgcmVxdWVzdFBhcmFtcyA9IHsgLi4uZGVsZXRlUGFyYW1zIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcXVlc3RQYXJhbXMgPSB7IC4uLmRlZmF1bHRQYXJhbXMgfTtcclxuICAgICAgICByZXF1ZXN0KGRlbGV0ZVVybCwge1xyXG4gICAgICAgICAgLi4ucmVxdWVzdFBhcmFtcyxcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlczogYW55KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgY29kZSB9ID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5zdWNjZXNzKFwi5Yig6Zmk5oiQ5Yqf77yBXCIpO1xyXG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IF90aGlzLnNlYXJjaFJlZj8uY3VycmVudD8uZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uRGVsZXRlQ2FsbEJhY2sgJiZcclxuICAgICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vbkRlbGV0ZUNhbGxCYWNrKCk7XHJcbiAgICAgICAgICAgICAgX3RoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLmVycm9yKFwi5Yig6Zmk5aSx6LSl77yBXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3JcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgdGFibGVMb2FkKHBhcmFtczogYW55LCByZXF1ZXN0Q29uZmlnID0ge30pIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmUubG9hZCh7XHJcbiAgICAgIC4uLnJlcXVlc3RDb25maWcsXHJcbiAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8v5p+l6K+iXHJcbiAgb25TZWFyY2gocGFyYW1zKSB7XHJcbiAgICBjb25zdCB7IG9uU2VhcmNoLCBvbkNhbGxCYWNrcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmIChvblNlYXJjaCkge1xyXG4gICAgICBvblNlYXJjaCh7IC4uLnBhcmFtcywgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudGFibGVMb2FkKHsgLi4ucGFyYW1zLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9KTtcclxuICAgIG9uQ2FsbEJhY2tzPy5vblNlYXJjaENhbGxCYWNrICYmXHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2FsbEJhY2tzPy5vblNlYXJjaENhbGxCYWNrLCB0aGlzLCBbcGFyYW1zXSk7XHJcbiAgfVxyXG4gIC8v6KGo5qC86YeN5paw5Yqg6L29XHJcbiAgdGFibGVSZWxvYWQocGFyYW1zID0ge30sIGF1dG9Mb2FkID0gdHJ1ZSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8ucmVsb2FkKHtcclxuICAgICAgY2FsbGJhY2s6IChyZXMpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBhdXRvTG9hZCAmJlxyXG4gICAgICAgICAgcmVzPy5kYXRhPy5yZWNvcmRzPy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50UGFnZSAhPT0gMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8ucmVsb2FkKHtcclxuICAgICAgICAgICAgcGFyYW1zOiB7IGN1cnJlbnQ6IDEsIC4uLnBhcmFtcyB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0RhdGFzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVSZWYuY3VycmVudD8uZ2V0U2VsZWN0ZWRSb3dEYXRhcygpO1xyXG4gIH1cclxuICByZXNldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnJlc2V0U2VsZWN0ZWRSb3dLZXlzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hWYWx1ZXMoKSB7XHJcbiAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlYXJjaFJlZj8uY3VycmVudD8uZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICByZXR1cm4geyAuLi5mcm9tVmFsdWUsIC4uLnRoaXMuc3RhdGUudHJlZVNlYXJjaFByYW1zIH07XHJcbiAgfVxyXG5cclxuICBnZXRDaGlsZHJlbkRhdGEoZGF0YSwga2V5cyA9IFtdKSB7XHJcbiAgICBjb25zdCB7IHRhYmxlUHJvcHMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGFibGVQcm9wcztcclxuICAgIGxldCByZXNLZXkgPSBbXTtcclxuICAgIGlmIChkYXRhLmNoaWxkTm9kZXMpIHtcclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkTm9kZXM7XHJcbiAgICAgIGNoaWxkcmVuLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICB0aGlzLmdldENoaWxkcmVuRGF0YShpdGVtLmNoaWxkTm9kZXMsIGtleXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNLZXkgPSBbLi4ua2V5cywgaXRlbVtyb3dLZXldXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzS2V5ID0gWy4uLmtleXMsIGRhdGFbcm93S2V5XV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzS2V5O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyVG9vbEJ1dHRvbnModG9vbGJ1dHRvbnM6IGFueSwgdG9vbGJhckZsYWcpIHtcclxuICAgIGNvbnN0IGZsYWcgPSB0b29sYnV0dG9ucy5sZW5ndGggPiA1O1xyXG4gICAgLy8gdG9vbGJ1dHRvbnMgPSBbLi4udG9vbGJ1dHRvbnNdLnJldmVyc2UoKTtcclxuICAgIGNvbnN0IHsgc2hvd1NlYXJjaCA9IHRydWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdG9vbGJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID0gaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGluZGV4ID4gMykge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnQtaXRlbVwiKVxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgbW9yZU9wZW46IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2soKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgICAgdHlwZT17XCJsaW5rXCJ9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT5cclxuICAgICAgICAgICAgICAgIHtpY29ufVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10b29sLWJ1dHRvbnNcIikpfVxyXG4gICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IDAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIHt0b29sYnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgNCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IDEyLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gNCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICAgICAgICB0aXRsZT17bnVsbH1cclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAgICAgdmlzaWJsZT17dGhpcy5zdGF0ZS5tb3JlT3Blbn1cclxuICAgICAgICAgICAgICAgICAgb25WaXNpYmxlQ2hhbmdlPXsob3BlbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZU9wZW46IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVPcGVuOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgLy8gb3Blbj17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgLy8gb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydwb3AtYm94J119XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICDmm7TlpJogPERvd25PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogaW5kZXggPT0gdG9vbGJ1dHRvbnMubGVuZ3RoIC0gMSA/IDAgOiAxMixcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge2l0ZW19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnM6IGFueSwgcmVjb3JkOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgYWN0aW9uUHJvcHMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IGJhc2VBY3Rpb25Db2x1bW4gfSA9IGNvbmZpZygpO1xyXG4gICAgY29uc3QgbmV3QnV0dG9ucyA9IFtdO1xyXG4gICAgbGV0IHNob3dJY29uID0gdHJ1ZTtcclxuICAgIGlmIChhY3Rpb25Qcm9wcz8uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgZWxzZSBpZiAoYmFzZUFjdGlvbkNvbHVtbi5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBjb2x1bW5CdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCBpY29uLCByZWNvcmRTaG93LCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKHJlY29yZFNob3cpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHJlY29yZFNob3cgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgaWYgKGV2YWwocmVjb3JkU2hvdykpIHtcclxuICAgICAgICAgICAgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlY29yZFNob3cgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICBjb25zdCBzaG93ID0gcmVjb3JkU2hvdyhyZWNvcmQpO1xyXG4gICAgICAgICAgc2hvdyAmJiBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgbnVtYmVyID0gYWN0aW9uUHJvcHM/LmJ1dHRvbk51bWJlclxyXG4gICAgICA/IGFjdGlvblByb3BzPy5idXR0b25OdW1iZXJcclxuICAgICAgOiBiYXNlQWN0aW9uQ29sdW1uPy5idXR0b25OdW1iZXJcclxuICAgICAgPyBiYXNlQWN0aW9uQ29sdW1uPy5idXR0b25OdW1iZXJcclxuICAgICAgOiAzO1xyXG4gICAgbGV0IGZsYWcgPSBmYWxzZTtcclxuICAgIGlmIChudW1iZXIgPT0gXCJhbGxcIikge1xyXG4gICAgICBmbGFnID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmbGFnID0gbmV3QnV0dG9ucy5sZW5ndGggPiBudW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IG5ld0J1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIHJlY29yZFNob3csIGljb24sIHNob3csIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoaW5kZXggPiBOdW1iZXIobnVtYmVyKSAtIDEpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpLFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1jb250ZW50LWl0ZW1cIilcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRhID0geyAuLi50aGlzLnN0YXRlLnBvcG9wZW5zIH07XHJcbiAgICAgICAgICAgICAgZGF0YVtyZWNvcmQuaWRdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBwb3BvcGVuczogZGF0YSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socmVjb3JkKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgdHlwZT17XCJsaW5rXCJ9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWljb25cIil9PlxyXG4gICAgICAgICAgICAgICAge2ljb259XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5ld0J1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIHJlY29yZFNob3csIGljb24sIC4uLnBhcmFtcyB9ID1cclxuICAgICAgICBpdGVtLnByb3BzO1xyXG4gICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIGlmIChpbmRleCA8IG51bWJlcikge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksIHtcclxuICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yLWZpcnN0XCIpXTogaW5kZXggPT09IDAsXHJcbiAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socmVjb3JkKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgIGljb249e2ljb259XHJcbiAgICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgICB0eXBlPXtcImxpbmtcIn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIHtpY29ufVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGV4dFwiKX0+XHJcbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSBudW1iZXIpIHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICB0aXRsZT17bnVsbH1cclxuICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICAgIHRyaWdnZXI9e1tcImNsaWNrXCJdfVxyXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgdmlzaWJsZT17dGhpcy5zdGF0ZS5wb3BvcGVuc1tyZWNvcmQuaWRdIHx8IGZhbHNlfVxyXG4gICAgICAgICAgICAgIG9uVmlzaWJsZUNoYW5nZT17KG9wZW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvcGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0geyAuLi50aGlzLnN0YXRlLnBvcG9wZW5zIH07XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFbcmVjb3JkLmlkXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcG9wZW5zOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcG9wZW5zOiB7fSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAvLyBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ3BvcCddfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpfT5cclxuICAgICAgICAgICAgICAgIDxFbGxpcHNpc091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSwge1xyXG4gICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yLWZpcnN0XCIpXTogaW5kZXggPT09IDAsXHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgIHR5cGU9XCJsaW5rXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dJY29uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICB7aWNvbn1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIC8v5qCR54K55Ye75LqL5Lu2XHJcbiAgdHJlZVNlbGVjdChzZWxlY3RlZEtleXM6IGFueSwgb2JqOiBhbnkpIHtcclxuICAgIGxldCBrZXl3b3JkID0gXCJcIjtcclxuICAgIGNvbnN0IHtcclxuICAgICAgc2VhcmNoS2V5ID0gXCJrZXlcIixcclxuICAgICAgc2VhcmNoRmllbGQgPSBcIlwiLFxyXG4gICAgICBwYXJhbnRTZWxlY3QgPSB0cnVlLFxyXG4gICAgfSA9IHRoaXMucHJvcHMudHJlZVByb3BzO1xyXG4gICAgY29uc3QgeyB0cmVlU2VsZWN0ZWRLZXkgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkLCBzZWxlY3RlZE5vZGVzIH0gPSBvYmo7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIGtleXdvcmQgPSBzZWxlY3RlZE5vZGVzWzBdLmRhdGFyZWYuYXR0cmlidXRlW3NlYXJjaEtleV07XHJcbiAgICAgIGlmIChwYXJhbnRTZWxlY3QpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIHRyZWVTZWxlY3RlZEtleTogc2VsZWN0ZWRLZXlzWzBdLFxyXG4gICAgICAgICAgdHJlZVNlYXJjaFByYW1zOiB7IFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWROb2Rlc1swXS5pc0xlYWYgfHwgIXNlbGVjdGVkTm9kZXNbMF0uY2hpbGRyZW4pIHtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEtleXNbMF0gIT09IHRyZWVTZWxlY3RlZEtleSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IHNlbGVjdGVkS2V5c1swXSxcclxuICAgICAgICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHsgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIHRyZWVTZWxlY3RlZEtleToga2V5d29yZCxcclxuICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHt9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb3BzLm9uVHJlZVNlbGVjdCkge1xyXG4gICAgICB0aGlzLnByb3BzLm9uVHJlZVNlbGVjdChzZWxlY3RlZEtleXMsIG9iaik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmPy5jdXJyZW50Py5nZXRTZWFyY2hWYWx1ZXMoKSB8fCB7fTtcclxuICAgIHNlYXJjaEZpZWxkICYmIHRoaXMudGFibGVMb2FkKHsgLi4uZnJvbVZhbHVlLCBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0pO1xyXG4gICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8udHJlZVNlbGVjdENhbGxCYWNrICYmXHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKHRoaXMucHJvcHMub25DYWxsQmFja3M/LnRyZWVTZWxlY3RDYWxsQmFjaywgdGhpcywgW1xyXG4gICAgICAgIHNlbGVjdGVkS2V5cyxcclxuICAgICAgICBvYmosXHJcbiAgICAgIF0pO1xyXG4gIH1cclxuICByZXNldFNlYXJjaCgpIHtcclxuICAgIHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LnJlc2V0RmllbGRzKCk7XHJcbiAgfVxyXG4gIGdldFRleHQocHJvcHMsIHRleHQpIHtcclxuICAgIGxldCBuZXdUZXh0ID0gdGV4dDtcclxuICAgIGlmIChwcm9wcz8uZGF0YSAmJiBwcm9wcz8uZGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgZGF0YSA9IHByb3BzLmRhdGE7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZGF0YVtpXS52YWx1ZSA9PSB0ZXh0KSB7XHJcbiAgICAgICAgICBuZXdUZXh0ID0gZGF0YVtpXS5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuZXdUZXh0O1xyXG4gIH1cclxuICBzZXRUYWJsZURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZT8uc2V0RGF0YShkYXRhKTtcclxuICB9XHJcbiAgc2V0VHJlZURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy50cmVlUmVmLmN1cnJlbnQ/LnN0b3JlPy5zZXREYXRhKGRhdGEpO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZEtleSA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgbGV0IHJlcyA9IFtdO1xyXG4gICAgZm9yIChsZXQga2V5IGluIHNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IGtleXMgPSBzZWxlY3RlZFtrZXldO1xyXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVzID0gWy4uLnJlcywgLi4ua2V5c107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfTtcclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBjb2x1bW5zID0gW10sXHJcbiAgICAgIHNob3dTZWFyY2ggPSB0cnVlLFxyXG4gICAgICBjaGlsZHJlbixcclxuICAgICAgc3VibWl0VXJsID0gXCJcIixcclxuICAgICAgdGFibGVQcm9wcyA9IHt9LFxyXG4gICAgICB0cmVlUHJvcHMgPSB7fSxcclxuICAgICAgZm9ybVByb3BzID0ge30sXHJcbiAgICAgIHNob3dMZWZ0ID0gZmFsc2UsXHJcbiAgICAgIHN1Ym1pdFBhcmFtcyA9IHt9LFxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiA9IHRydWUsXHJcbiAgICAgIGJ1dHRvbnMgPSBbXSxcclxuICAgICAgZWRpdG9yRm9ybSA9IHRydWUsXHJcbiAgICAgIG9uU2hvd0Zvcm0sXHJcbiAgICAgIGZvcm1DaGFuZ2VWYWxpZCA9IHRydWUsXHJcbiAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID0gXCJidXR0b21cIixcclxuICAgICAgYWN0aW9uUHJvcHMsXHJcbiAgICAgIGRlbGV0ZVBvc2l0aW9uID0gXCJ0b29sYmFyXCIsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHtcclxuICAgICAgc3RvcmUsXHJcbiAgICAgIGZpbHRlckNvbHVtbiA9IHRydWUsXHJcbiAgICAgIGFjdGlvbkNvbHVtbiA9IHRydWUsXHJcbiAgICAgIHNob3dSb3dTZWxlY3Rpb24gPSB0cnVlLFxyXG4gICAgICBjb2x1bW5PcmRlciA9IHRydWUsXHJcbiAgICAgIGV4cGFuZGFibGUgPSB7fSxcclxuICAgICAgcGFyYW50U2VsZWN0ID0gdHJ1ZSxcclxuICAgICAgdGl0bGU6IHRhYmxlVGl0bGUsXHJcbiAgICAgIC4uLm90aGVydGFibGVQYXJhbXNcclxuICAgIH0gPSB0YWJsZVByb3BzO1xyXG5cclxuICAgIGNvbnN0IHtcclxuICAgICAgc3RvcmU6IHRyZWVTdG9yZSA9IHt9LFxyXG4gICAgICBzaG93U2VhcmNoOiB0cmVlU2VhcmNoID0gdHJ1ZSxcclxuICAgICAgdGl0bGVBbGlhcyA9IFwidGl0bGVcIixcclxuICAgICAgdGl0bGU6IHRyZWVUaXRsZSxcclxuICAgICAgLi4ub3RoZXJ0cmVlUGFyYW1zXHJcbiAgICB9ID0gdHJlZVByb3BzO1xyXG4gICAgbGV0IHRhYmxlUGFyYW1zID0geyBmaWx0ZXJDb2x1bW4sIHN0b3JlLCAuLi5vdGhlcnRhYmxlUGFyYW1zIH0gYXMgYW55O1xyXG4gICAgbGV0IHRhYmxlQ29sdW1uOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3Qgc2VhcmNoRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZWRpdG9yRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlOiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IGNvbHVtbkJ1dHRvbnM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgeyBlbGVtZW50SGVpZ2h0IH0gPSB0aGlzLnN0YXRlO1xyXG5cclxuICAgIGNvbHVtbnMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgbGV0IHRlbXAgPSB7IHdpZHRoOiAxMDAsIC4uLml0ZW0gfTtcclxuICAgICAgaWYgKHRlbXAuc2VhcmNoID09PSB0cnVlIHx8IHRlbXAuc2VhcmNoPy5zaG93ID09PSB0cnVlKSB7XHJcbiAgICAgICAgc2VhcmNoRm9ybXMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiB0ZW1wLmZpZWxkIHx8IHRlbXAuZGF0YUluZGV4LFxyXG4gICAgICAgICAgbGFiZWw6IHRlbXAuc2VhcmNoPy5sYWJlbCB8fCB0ZW1wLnRpdGxlLFxyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgcHJvcHM6IHRlbXAucHJvcHMsXHJcbiAgICAgICAgICBsYWJlbENvbDogdGVtcC5zZWFyY2g/LmxhYmVsQ29sLFxyXG4gICAgICAgICAgd3JhcHBlckNvbDogdGVtcC5zZWFyY2g/LndyYXBwZXJDb2wsXHJcbiAgICAgICAgICBydWxlczogdGVtcC5zZWFyY2hSdWxlcyA/IHRlbXAuc2VhcmNoUnVsZXMgOiBbXSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGVsZXRlIHRlbXAuc2VhcmNoO1xyXG4gICAgICB0ZW1wLmVkaXRvciAhPT0gZmFsc2UgJiZcclxuICAgICAgICBlZGl0b3JGb3Jtcy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IHRlbXAuZmllbGQgfHwgdGVtcC5kYXRhSW5kZXgsXHJcbiAgICAgICAgICBsYWJlbDogdGVtcC50aXRsZSxcclxuICAgICAgICAgIHJ1bGVzOiB0ZW1wLnJ1bGVzID8gdGVtcC5ydWxlcyA6IFtdLFxyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgc3BhbjogdGVtcC5zcGFuLFxyXG4gICAgICAgICAgZGljdE5hbWU6IHRlbXAuZGljdE5hbWUsXHJcbiAgICAgICAgICBwcm9wczogeyAuLi50ZW1wLnByb3BzIH0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGVtcC5wcm9wcz8uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICB0ZW1wLnByb3BzPy5kZWZhdWx0VmFsdWUgIT09IG51bGxcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IHRlbXAuZmllbGQgfHwgdGVtcC5kYXRhSW5kZXg7XHJcbiAgICAgICAgZGVmYXVsdFZhbHVlW25hbWVdID0gdGVtcC5wcm9wcz8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnJ1bGVzO1xyXG4gICAgICBkZWxldGUgdGVtcC5zcGFuO1xyXG4gICAgICBpZiAodGVtcC5jb2x1bW5TZWFyY2gpIHtcclxuICAgICAgICB0ZW1wLmZpbHRlclByb3BzID0ge1xyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgcHJvcHM6IHRlbXAucHJvcHMsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC50eXBlO1xyXG4gICAgICBsZXQgdGVtcFByb3AgPSB7IC4uLnRlbXAucHJvcHMgfTtcclxuICAgICAgaWYgKCF0ZW1wLmVsbGlwc2lzKSB7XHJcbiAgICAgICAgdGVtcCA9IHtcclxuICAgICAgICAgIGVsbGlwc2lzOiB7IHNob3dUaXRsZTogZmFsc2UgfSxcclxuICAgICAgICAgIHJlbmRlcjogKHRleHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0KHRlbXBQcm9wLCB0ZXh0KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi50ZW1wLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGVtcCA9IHtcclxuICAgICAgICAgIGVsbGlwc2lzOiB0cnVlLFxyXG4gICAgICAgICAgLi4udGVtcCxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnByb3BzO1xyXG5cclxuICAgICAgLy8gdGVtcC5lbGxpcHNpcyA9IHRydWU7XHJcbiAgICAgIGlmICh0ZW1wPy5jb2x1bW5TaG93ICE9PSBmYWxzZSkgdGFibGVDb2x1bW4ucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc2VsZkJ1dHRvbnM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgeyBiYXNlQWN0aW9uQ29sdW1uIH0gPSBjb25maWcoKTtcclxuICAgIGxldCBzaG93SWNvbiA9IHRydWU7XHJcbiAgICBpZiAoYWN0aW9uUHJvcHM/LnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGVsc2UgaWYgKGJhc2VBY3Rpb25Db2x1bW4uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChidXR0b25zLmluZGV4T2YoXCJzZWFyY2hcIikgPiAtMSkge1xyXG4gICAgICBjb2x1bW5CdXR0b25zLnB1c2goXHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgb25TaG93Rm9ybShyZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCwgXCJkZXRhaWxcIik7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIFwiZGV0YWlsXCIpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGljb249ezxFeWVPdXRsaW5lZCAvPn1cclxuICAgICAgICAgIHR5cGU9XCJsaW5rXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICDmn6XnnItcclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChidXR0b25zLmluZGV4T2YoXCJlZGl0b3JcIikgPiAtMSkge1xyXG4gICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9uU2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIFwiZWRpdG9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImVkaXRvclwiKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgaWNvbj17PEVkaXRPdXRsaW5lZCAvPn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg57yW6L6RXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiYWRkXCIpID4gLTEpIHtcclxuICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBvblNob3dGb3JtIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgICAgICBpZiAob25TaG93Rm9ybSkge1xyXG4gICAgICAgICAgICAgIG9uU2hvd0Zvcm0obnVsbCwgXCJhZGRcIik7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm0oKTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBpY29uPXs8UGx1c091dGxpbmVkIC8+fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIOa3u+WKoFxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGJ1dHRvbnMuaW5kZXhPZihcImRlbGV0ZVwiKSA+IC0xKSB7XHJcbiAgICAgIGlmIChkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIikge1xyXG4gICAgICAgIHNlbGZCdXR0b25zLnB1c2goXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIC8vIHR5cGU9e1wicHJpbWFyeVwifVxyXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLm9uRGVsZXRlLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgIGljb249ezxEZWxldGVPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgZGFuZ2VyXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOWIoOmZpFxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChkZWxldGVQb3NpdGlvbiA9PSBcInJvd1wiKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKFxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAvLyB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZShyZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICBpY29uPXs8RGVsZXRlT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgIGRhbmdlclxyXG4gICAgICAgICAgICB0eXBlPVwibGlua1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOWIoOmZpFxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XHJcbiAgICAgIGNoaWxkcmVuLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcclxuICAgICAgICAgIGl0ZW0ubWFwKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQ/LnByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIikge1xyXG4gICAgICAgICAgICAgIHNlbGZCdXR0b25zLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIGNoaWxkPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjbG91bW5CdXR0b25cIiB8fFxyXG4gICAgICAgICAgICAgIGNoaWxkPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjb2x1bW5CdXR0b25cIlxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGl0ZW0/LnByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIikge1xyXG4gICAgICAgICAgICBzZWxmQnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIgfHxcclxuICAgICAgICAgICAgaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwiY29sdW1uQnV0dG9uXCJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgY29uc3QgeyBwcm9wcyB9OiBhbnkgPSBjaGlsZHJlbjtcclxuICAgICAgaWYgKHByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIikge1xyXG4gICAgICAgIHNlbGZCdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9IGVsc2UgaWYgKHByb3BzPy5wYWdlVHlwZSA9PSBcImNsb3VtbkJ1dHRvblwiKSB7XHJcbiAgICAgICAgY29sdW1uQnV0dG9ucy5wdXNoKGNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYWN0aW9uQ29sdW1uICYmXHJcbiAgICAgIHRhYmxlQ29sdW1uLnB1c2goe1xyXG4gICAgICAgIHRpdGxlOiBcIuaTjeS9nFwiLFxyXG4gICAgICAgIGRhdGFJbmRleDogXCJhY3Rpb25cIixcclxuICAgICAgICBhbGlnbjogYWN0aW9uUHJvcHM/LnRleHRBbGlnblxyXG4gICAgICAgICAgPyBhY3Rpb25Qcm9wcz8udGV4dEFsaWduXHJcbiAgICAgICAgICA6IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICA/IGJhc2VBY3Rpb25Db2x1bW4udGV4dEFsaWduXHJcbiAgICAgICAgICA6IFwibGVmdFwiLFxyXG4gICAgICAgIHdpZHRoOiBhY3Rpb25Qcm9wcz8ud2lkdGhcclxuICAgICAgICAgID8gYWN0aW9uUHJvcHM/LndpZHRoXHJcbiAgICAgICAgICA6IGJhc2VBY3Rpb25Db2x1bW4ud2lkdGhcclxuICAgICAgICAgID8gYmFzZUFjdGlvbkNvbHVtbi53aWR0aFxyXG4gICAgICAgICAgOiAyMDAsXHJcbiAgICAgICAgZml4ZWQ6IFwicmlnaHRcIixcclxuICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnksIHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWFjdGlvblwiKX0+XHJcbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnMsIHJlY29yZCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAoY29sdW1uT3JkZXIpXHJcbiAgICAgIHRhYmxlQ29sdW1uID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIuW6j+WPt1wiLFxyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0LCByZWFjb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPD57aW5kZXggKyAxfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50YWJsZUNvbHVtbixcclxuICAgICAgXTtcclxuICAgIGxldCBzZWFyY2hGbGFnID0gc2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9XHJcbiAgICAgIHNob3dUb29sQnV0dG9uICYmXHJcbiAgICAgIHNlbGZCdXR0b25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uID09IFwiYnV0dG9tXCI7XHJcbiAgICBsZXQgdG9vbGJhckZsYWcgPSAhKFxyXG4gICAgICB0YWJsZVByb3BzLnRvb2xiYXIgPT0gZmFsc2UgfHxcclxuICAgICAgdGFibGVQcm9wcy50b29sYmFyPy5zaG93ID09IGZhbHNlIHx8XHJcbiAgICAgIHRhYmxlUHJvcHMudG9vbGJhcj8udG9vbHM/Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgIHRhYmxlVG9vbD8uc2hvdyA9PSBmYWxzZVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgcGFnZUhlaWdodCA9IHRoaXMucHJvcHMucGFnZVR5cGUgPT0gXCJ0YWJzcGFnZVwiID8gNjMgOiAwO1xyXG4gICAgbGV0IHRhYmxlSGVhZGVySGVpZ2h0ID0gNTU7XHJcblxyXG4gICAgbGV0IGhlYWRlckhlaWdodCA9IHNob3dTZWFyY2ggJiYgc2VhcmNoRm9ybXMubGVuZ3RoID4gMCA/IDEwNCA6IDA7XHJcbiAgICBsZXQgdG9vbEhlaWdodCA9IHRhYmxlVGl0bGUgfHwgdG9vbEZsYWcgPyA0OCA6IDA7XHJcbiAgICBsZXQgcGFkZGluZ0hlaWdodCA9IDI1O1xyXG4gICAgbGV0IHRhYmxlQ29udGVudEhlaWdodCA9XHJcbiAgICAgIGVsZW1lbnRIZWlnaHQgLSBoZWFkZXJIZWlnaHQgLSB0b29sSGVpZ2h0IC0gcGFkZGluZ0hlaWdodCAtIHBhZ2VIZWlnaHQ7XHJcbiAgICBsZXQgdGFibGVIZWlnaHQgPSB0YWJsZUNvbnRlbnRIZWlnaHQgLSAzMiAtIDMyO1xyXG4gICAgbGV0IHRhYmxlU3JvbGxIZWlnaHQgPSB0YWJsZUNvbnRlbnRIZWlnaHQgLSB0YWJsZUhlYWRlckhlaWdodCAtIDMyIC0gMzI7XHJcbiAgICBpZiAodGFibGVQcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSkge1xyXG4gICAgICBjb25zdCBzY3JvbGwgPSB0YWJsZVBhcmFtcy5zY3JvbGw7XHJcbiAgICAgIHRhYmxlUGFyYW1zID0ge1xyXG4gICAgICAgIC4uLnRhYmxlUGFyYW1zLFxyXG4gICAgICAgIHNjcm9sbDogeyB4OiBcIm1heC1jb250ZW50XCIsIHk6IHRhYmxlU3JvbGxIZWlnaHQsIC4uLnNjcm9sbCB9LFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZVwiKSwgY2xhc3NOYW1lKX1cclxuICAgICAgICByZWY9e3RoaXMucGFnZVJlZn1cclxuICAgICAgPlxyXG4gICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10aXRsZVwiKSl9PlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5wYWdlVGl0bGV9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1wYW5lXCIpKX1cclxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3Nob3dMZWZ0ICYmIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1sZWZ0XCIpfT5cclxuICAgICAgICAgICAgICB7dHJlZVRpdGxlICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJ0cmVlLXRpdGxlXCIpfT57dHJlZVRpdGxlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwidHJlZS1jb250ZW50XCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJ0cmVlLWNvbnRlbnQtbm90aXRsZVwiKV06ICF0cmVlVGl0bGUsXHJcbiAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8VHJlZVxyXG4gICAgICAgICAgICAgICAgICBzdG9yZT17eyAuLi50cmVlU3RvcmUgfX1cclxuICAgICAgICAgICAgICAgICAgc2hvd0ljb249e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICBjaGVja2FibGU9e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlPXt0cmVlU2VhcmNofVxyXG4gICAgICAgICAgICAgICAgICBvblNlbGVjdD17dGhpcy50cmVlU2VsZWN0LmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkS2V5cz17W3RoaXMuc3RhdGUudHJlZVNlbGVjdGVkS2V5XX1cclxuICAgICAgICAgICAgICAgICAgdGl0bGVBbGlhcz17dGl0bGVBbGlhc31cclxuICAgICAgICAgICAgICAgICAgey4uLm90aGVydHJlZVBhcmFtc31cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXJpZ2h0XCIpLCB7XHJcbiAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1uby1sZWZ0LXJpZ2h0XCIpXTogIXNob3dMZWZ0LFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dTZWFyY2ggJiYgc2VhcmNoRm9ybXMubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1oZWFkZXJzZWFyY2hcIil9PlxyXG4gICAgICAgICAgICAgICAgPEhlYWRlclNlYXJjaFxyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hGb3Jtcz17c2VhcmNoRm9ybXN9XHJcbiAgICAgICAgICAgICAgICAgIHRvb2xCdXR0b25Qb3NpdGlvbj17dG9vbEJ1dHRvblBvc2l0aW9ufVxyXG4gICAgICAgICAgICAgICAgICBvblNlYXJjaD17dGhpcy5vblNlYXJjaC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgICBvblJlc2V0PXt0aGlzLnByb3BzLm9uUmVzZXR9XHJcbiAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5zZWFyY2hSZWZ9XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEZvcm1Qcm9wcz17dGhpcy5wcm9wcy5zZWFyY2hGb3JtUHJvcHN9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnRcIiksIHtcclxuICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtY29udGVudC1nYXBcIildOiAhc2VhcmNoRmxhZyxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHsodGFibGVUaXRsZSB8fCB0b29sRmxhZykgJiYgKFxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGFibGUtdGl0bGVcIiksIHtcclxuICAgICAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRpdGxlLXdpZHRoXCIpXTogIXRvb2xiYXJGbGFnLFxyXG4gICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdj57dGFibGVUaXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAge3Rvb2xGbGFnICYmIHRoaXMucmVuZGVyVG9vbEJ1dHRvbnMoc2VsZkJ1dHRvbnMsIHRvb2xiYXJGbGFnKX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcblxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGFibGVcIiksXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRhYmxlLXRvcFwiKV06ICF0b29sYmFyRmxhZyxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGFibGUtdG9wMlwiKV06XHJcbiAgICAgICAgICAgICAgICAgICAgICB0b29sYmFyRmxhZyAmJiAhdG9vbEZsYWcsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlQ29udGVudEhlaWdodCB9fVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgICAgICAgICByZWY9e3RoaXMudGFibGVSZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e3RhYmxlQ29sdW1ufVxyXG4gICAgICAgICAgICAgICAgICBleHBhbmRhYmxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kSWNvbjogKHsgZXhwYW5kZWQsIG9uRXhwYW5kLCByZWNvcmQgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZXhwYW5kZWQgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RG93bk91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNjLWJhc2VwYWdlLWV4cGFuZC1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5jaGlsZE5vZGVzICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpZ2h0T3V0bGluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gb25FeHBhbmQocmVjb3JkLCBlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5zYy1iYXNlcGFnZS1leHBhbmQtaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAuLi5leHBhbmRhYmxlLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW5PcmRlcj17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwYWdpbmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjdXJyZW50UGFnZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2UgIT09IHBhZ2luYXRpb24uY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIHRvb2xiYXI9e3tcclxuICAgICAgICAgICAgICAgICAgICBvblRvb2xDbGljazoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZ2V0U2VhcmNoVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVMb2FkKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGFibGVQcm9wcy50b29sYmFyLFxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICBzaG93Um93U2VsZWN0aW9uPXtzaG93Um93U2VsZWN0aW9ufVxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XHJcbiAgICAgICAgICAgICAgICAgIHsuLi50YWJsZVBhcmFtc31cclxuICAgICAgICAgICAgICAgICAgLy8gcGFnaW5hdGlvbj17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgey8qIDxkaXY+PC9kaXY+ICovfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAge2VkaXRvckZvcm0gJiYgKFxyXG4gICAgICAgICAgICA8RWRpdG9yRm9ybVxyXG4gICAgICAgICAgICAgIHJlZj17dGhpcy5lZGl0b3JSZWZ9XHJcbiAgICAgICAgICAgICAgY2FsbEJhY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uU3VtYml0Q2FsbEJhY2sgJiZcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25TdW1iaXRDYWxsQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgZm9ybVByb3BzPXtlZGl0b3JGb3Jtc31cclxuICAgICAgICAgICAgICBzdWJtaXRVcmw9e3N1Ym1pdFVybH1cclxuICAgICAgICAgICAgICBzdWJtaXRQYXJhbXM9e3N1Ym1pdFBhcmFtc31cclxuICAgICAgICAgICAgICBvblN1Ym1pdD17dGhpcy5wcm9wcy5vblN1Ym1pdH1cclxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cclxuICAgICAgICAgICAgICBvbkhpZGVGb3JtPXt0aGlzLnByb3BzLm9uSGlkZUZvcm19XHJcbiAgICAgICAgICAgICAgb25Gb3JtQ2hhbmdlPXt0aGlzLnByb3BzLm9uRm9ybUNoYW5nZX1cclxuICAgICAgICAgICAgICBmb3JtVHlwZT17dGhpcy5wcm9wcy5mb3JtVHlwZSB8fCBcImF1dG9cIn1cclxuICAgICAgICAgICAgICBjaGFuZ2VWYWxpZD17Zm9ybUNoYW5nZVZhbGlkfVxyXG4gICAgICAgICAgICAgIG90aGVyUHJvcHM9e3sgLi4uZm9ybVByb3BzIH19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IEJhc2VQYWdlO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxhQUFhLFFBQW1CLE9BQU87QUFDdkQsT0FBT0MsS0FBSyxNQUFNLGtCQUFrQjtBQUNwQyxPQUFPQyxJQUFJLE1BQU0saUJBQWlCO0FBQ2xDLE9BQU9DLE1BQU0sTUFBTSxtQkFBbUI7QUFDdEMsT0FBT0MsS0FBSyxNQUFNLGtCQUFrQjtBQUNwQyxPQUFPQyxPQUFPLE1BQU0sb0JBQW9CO0FBQ3hDLE9BQU9DLE9BQU8sTUFBTSxvQkFBb0I7QUFDeEMsT0FBT0MsVUFBVSxNQUFNLFFBQVE7QUFDL0IsT0FBT0MsR0FBRyxNQUFNLFlB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
|