nsc-react-component 3.2.21 → 3.3.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/base/form/Form.js +1 -1
- package/lib/base/form/Form.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/page/BasePage/index.d.ts +1 -1
- package/lib/page/BasePage/index.js +6 -5
- package/lib/page/BasePage/index.js.map +1 -1
- package/lib/page/FormPage/index.d.ts +48 -0
- package/lib/page/FormPage/index.js +478 -0
- package/lib/page/FormPage/index.js.map +1 -0
- package/lib/page/FormPage/index.module.less +42 -0
- package/package.json +1 -1
- package/lib/page/BasePage/Form.d.ts +0 -29
- package/lib/page/BasePage/Form.js +0 -333
- package/lib/page/BasePage/Form.js.map +0 -1
- package/lib/page/BasePage/index copy.d.ts +0 -107
- package/lib/page/BasePage/index copy.js +0 -857
- package/lib/page/BasePage/index copy.js.map +0 -1
|
@@ -1,857 +0,0 @@
|
|
|
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"],
|
|
6
|
-
_excluded6 = ["store", "showSearch", "titleAlias"];
|
|
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); }
|
|
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; }
|
|
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; }
|
|
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 : String(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); }
|
|
15
|
-
import React, { PureComponent } from "react";
|
|
16
|
-
import Table from "../../base/table";
|
|
17
|
-
import Tree from "../../base/tree";
|
|
18
|
-
import Button from "../../base/button";
|
|
19
|
-
import Modal from "../../base/modal";
|
|
20
|
-
import Popover from "../../base/popover";
|
|
21
|
-
import message from "../../base/message";
|
|
22
|
-
import EditorForm from "./Form";
|
|
23
|
-
import cls from "classnames";
|
|
24
|
-
import "./index.module.less";
|
|
25
|
-
import { utils } from "@bj-nsc/msn/lib/utils";
|
|
26
|
-
import { DownOutlined, EyeOutlined, EditOutlined, RightOutlined, PlusOutlined, EllipsisOutlined, DeleteOutlined } from "@ant-design/icons";
|
|
27
|
-
import { getLess } from "../../utils";
|
|
28
|
-
import request from "nsc-request";
|
|
29
|
-
import config from "../../config";
|
|
30
|
-
import { getStorage } from "@bj-nsc/functions";
|
|
31
|
-
import HeaderSearch from "../HeaderSearch";
|
|
32
|
-
const styles = null;
|
|
33
|
-
class BasePage extends PureComponent {
|
|
34
|
-
constructor(props) {
|
|
35
|
-
var _type, _size;
|
|
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, "dateFormat", {});
|
|
42
|
-
_defineProperty(this, "onSelect", checkedTreeKeys => {
|
|
43
|
-
const {
|
|
44
|
-
name,
|
|
45
|
-
userType,
|
|
46
|
-
account
|
|
47
|
-
} = this.state;
|
|
48
|
-
const value = {
|
|
49
|
-
name,
|
|
50
|
-
userType,
|
|
51
|
-
account,
|
|
52
|
-
deptId: checkedTreeKeys[0]
|
|
53
|
-
};
|
|
54
|
-
if (this.props.onSearch) {
|
|
55
|
-
this.props.onSearch(value);
|
|
56
|
-
}
|
|
57
|
-
// this.tableLoad(value);
|
|
58
|
-
});
|
|
59
|
-
_defineProperty(this, "getSelectedKey", selected => {
|
|
60
|
-
let res = [];
|
|
61
|
-
for (let key in selected) {
|
|
62
|
-
const keys = selected[key];
|
|
63
|
-
if (keys.length > 0) {
|
|
64
|
-
res = [...res, ...keys];
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return res;
|
|
68
|
-
});
|
|
69
|
-
let {
|
|
70
|
-
storePrefix
|
|
71
|
-
} = config();
|
|
72
|
-
let type = getStorage(storePrefix ? storePrefix + "-" + "formType" : "formType");
|
|
73
|
-
type = (_type = type) === null || _type === void 0 ? void 0 : _type.content;
|
|
74
|
-
let size = getStorage(storePrefix ? storePrefix + "-" + "tableSize" : "tableSize");
|
|
75
|
-
size = (_size = size) === null || _size === void 0 ? void 0 : _size.content;
|
|
76
|
-
this.state = {
|
|
77
|
-
type: "add",
|
|
78
|
-
selectedRowKeys: [],
|
|
79
|
-
selectedRowDatas: [],
|
|
80
|
-
treeSelectedKey: "",
|
|
81
|
-
expand: false,
|
|
82
|
-
formType: type || "modal",
|
|
83
|
-
tableSize: size || "default",
|
|
84
|
-
treeSearchPrams: {}
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
componentDidMount() {
|
|
88
|
-
const {
|
|
89
|
-
initData
|
|
90
|
-
} = this.props;
|
|
91
|
-
initData && initData();
|
|
92
|
-
}
|
|
93
|
-
setSearchParams(params, callBack) {
|
|
94
|
-
var _this$searchRef$curre;
|
|
95
|
-
(_this$searchRef$curre = this.searchRef.current) === null || _this$searchRef$curre === void 0 || _this$searchRef$curre.setSearchParams(params);
|
|
96
|
-
callBack && callBack(params);
|
|
97
|
-
}
|
|
98
|
-
//显示表单
|
|
99
|
-
showForm(value) {
|
|
100
|
-
var _this$editorRef$curre;
|
|
101
|
-
let editorflag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "add";
|
|
102
|
-
(_this$editorRef$curre = this.editorRef.current) === null || _this$editorRef$curre === void 0 || _this$editorRef$curre.show(value, editorflag);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
//关闭表单
|
|
106
|
-
hideForm() {
|
|
107
|
-
var _this$editorRef$curre2;
|
|
108
|
-
(_this$editorRef$curre2 = this.editorRef.current) === null || _this$editorRef$curre2 === void 0 || _this$editorRef$curre2.hideForm();
|
|
109
|
-
}
|
|
110
|
-
setLoading(loading) {
|
|
111
|
-
var _this$editorRef$curre3;
|
|
112
|
-
(_this$editorRef$curre3 = this.editorRef.current) === null || _this$editorRef$curre3 === void 0 || _this$editorRef$curre3.setLoading(loading);
|
|
113
|
-
}
|
|
114
|
-
setEditFormValues(value) {
|
|
115
|
-
var _this$editorRef$curre4;
|
|
116
|
-
(_this$editorRef$curre4 = this.editorRef.current) === null || _this$editorRef$curre4 === void 0 || _this$editorRef$curre4.setFieldsValue(value);
|
|
117
|
-
}
|
|
118
|
-
getEditFormValues() {
|
|
119
|
-
var _this$editorRef$curre5;
|
|
120
|
-
return (_this$editorRef$curre5 = this.editorRef.current) === null || _this$editorRef$curre5 === void 0 ? void 0 : _this$editorRef$curre5.getFieldsValue();
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
//批量删除
|
|
124
|
-
onDelete(data) {
|
|
125
|
-
var _this$tableRef$curren;
|
|
126
|
-
const {
|
|
127
|
-
deleteUrl,
|
|
128
|
-
onDelete,
|
|
129
|
-
deleteParams,
|
|
130
|
-
deletePosition = "toolbar"
|
|
131
|
-
} = this.props;
|
|
132
|
-
let _this = this;
|
|
133
|
-
const selectedRowKeys = (_this$tableRef$curren = this.tableRef.current) === null || _this$tableRef$curren === void 0 ? void 0 : _this$tableRef$curren.getSelectedRowKeys();
|
|
134
|
-
if (deletePosition == "toolbar") {
|
|
135
|
-
if (selectedRowKeys.length == 0) {
|
|
136
|
-
message.warning("请选择要删除的数据!");
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
Modal.confirm({
|
|
141
|
-
content: "是否确认删除所选项?",
|
|
142
|
-
// centered:true,
|
|
143
|
-
onOk: () => {
|
|
144
|
-
if (onDelete) {
|
|
145
|
-
onDelete && onDelete(deletePosition == "toolbar" ? selectedRowKeys : data);
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
if (!deleteUrl) {
|
|
149
|
-
throw new Error("url不能为空!");
|
|
150
|
-
}
|
|
151
|
-
const defaultParams = {
|
|
152
|
-
method: "post",
|
|
153
|
-
autoPrefix: true,
|
|
154
|
-
params: {
|
|
155
|
-
ids: deletePosition == "toolbar" ? selectedRowKeys.join() : data.id
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
let requestParams = {};
|
|
159
|
-
if (defaultParams) {
|
|
160
|
-
requestParams = _objectSpread({}, deleteParams);
|
|
161
|
-
}
|
|
162
|
-
requestParams = _objectSpread({}, defaultParams);
|
|
163
|
-
request(deleteUrl, _objectSpread({}, requestParams)).then(function (res) {
|
|
164
|
-
const {
|
|
165
|
-
code
|
|
166
|
-
} = res;
|
|
167
|
-
if (code === 200) {
|
|
168
|
-
var _this$searchRef, _this$props$onCallBac, _this$props$onCallBac2;
|
|
169
|
-
message.success("删除成功!");
|
|
170
|
-
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();
|
|
171
|
-
((_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());
|
|
172
|
-
_this.tableLoad(value);
|
|
173
|
-
} else {
|
|
174
|
-
message.error("删除失败!");
|
|
175
|
-
}
|
|
176
|
-
}).catch(function (error) {
|
|
177
|
-
console.log("error", error);
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
tableLoad(params) {
|
|
183
|
-
var _this$tableRef$curren2;
|
|
184
|
-
let requestConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
185
|
-
(_this$tableRef$curren2 = this.tableRef.current) === null || _this$tableRef$curren2 === void 0 || _this$tableRef$curren2.store.load(_objectSpread(_objectSpread({}, requestConfig), {}, {
|
|
186
|
-
params: params
|
|
187
|
-
}));
|
|
188
|
-
}
|
|
189
|
-
//查询
|
|
190
|
-
onSearch(params) {
|
|
191
|
-
const {
|
|
192
|
-
onSearch,
|
|
193
|
-
onCallBacks
|
|
194
|
-
} = this.props;
|
|
195
|
-
if (onSearch) {
|
|
196
|
-
onSearch(_objectSpread(_objectSpread({}, params), this.state.treeSearchPrams));
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
this.tableLoad(_objectSpread(_objectSpread({}, params), this.state.treeSearchPrams));
|
|
200
|
-
(onCallBacks === null || onCallBacks === void 0 ? void 0 : onCallBacks.onSearchCallBack) && utils.callback(onCallBacks === null || onCallBacks === void 0 ? void 0 : onCallBacks.onSearchCallBack, this, [params]);
|
|
201
|
-
}
|
|
202
|
-
//表格重新加载
|
|
203
|
-
tableReload() {
|
|
204
|
-
var _this$tableRef$curren3;
|
|
205
|
-
let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
206
|
-
let autoLoad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
207
|
-
(_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({
|
|
208
|
-
callback: res => {
|
|
209
|
-
var _res$data;
|
|
210
|
-
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) {
|
|
211
|
-
var _this$tableRef$curren4;
|
|
212
|
-
(_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({
|
|
213
|
-
params: _objectSpread({
|
|
214
|
-
current: 1
|
|
215
|
-
}, params)
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
getSelectedRowKeys() {
|
|
222
|
-
var _this$tableRef$curren5;
|
|
223
|
-
return (_this$tableRef$curren5 = this.tableRef.current) === null || _this$tableRef$curren5 === void 0 ? void 0 : _this$tableRef$curren5.getSelectedRowKeys();
|
|
224
|
-
}
|
|
225
|
-
getSelectedRowDatas() {
|
|
226
|
-
var _this$tableRef$curren6;
|
|
227
|
-
return (_this$tableRef$curren6 = this.tableRef.current) === null || _this$tableRef$curren6 === void 0 ? void 0 : _this$tableRef$curren6.getSelectedRowDatas();
|
|
228
|
-
}
|
|
229
|
-
resetSelectedRowKeys() {
|
|
230
|
-
var _this$tableRef$curren7;
|
|
231
|
-
return (_this$tableRef$curren7 = this.tableRef.current) === null || _this$tableRef$curren7 === void 0 ? void 0 : _this$tableRef$curren7.resetSelectedRowKeys();
|
|
232
|
-
}
|
|
233
|
-
getSearchValues() {
|
|
234
|
-
var _this$searchRef2;
|
|
235
|
-
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();
|
|
236
|
-
return _objectSpread(_objectSpread({}, fromValue), this.state.treeSearchPrams);
|
|
237
|
-
}
|
|
238
|
-
getChildrenData(data) {
|
|
239
|
-
let keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
240
|
-
const {
|
|
241
|
-
tableProps
|
|
242
|
-
} = this.props;
|
|
243
|
-
const {
|
|
244
|
-
rowKey = "id"
|
|
245
|
-
} = tableProps;
|
|
246
|
-
let resKey = [];
|
|
247
|
-
if (data.childNodes) {
|
|
248
|
-
const children = data.childNodes;
|
|
249
|
-
children.map((item, index) => {
|
|
250
|
-
if (item.childNodes) {
|
|
251
|
-
this.getChildrenData(item.childNodes, keys);
|
|
252
|
-
} else {
|
|
253
|
-
resKey = [...keys, item[rowKey]];
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
} else {
|
|
257
|
-
resKey = [...keys, data[rowKey]];
|
|
258
|
-
}
|
|
259
|
-
return resKey;
|
|
260
|
-
}
|
|
261
|
-
renderToolButtons(toolbuttons) {
|
|
262
|
-
let marginflag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
263
|
-
const flag = toolbuttons.length > 5;
|
|
264
|
-
const {
|
|
265
|
-
showSearch = true
|
|
266
|
-
} = this.props;
|
|
267
|
-
const content = toolbuttons.map((item, index) => {
|
|
268
|
-
const _item$props = item.props,
|
|
269
|
-
{
|
|
270
|
-
children,
|
|
271
|
-
pageType,
|
|
272
|
-
onClick,
|
|
273
|
-
icon,
|
|
274
|
-
show
|
|
275
|
-
} = _item$props,
|
|
276
|
-
params = _objectWithoutProperties(_item$props, _excluded);
|
|
277
|
-
if (index > 3) {
|
|
278
|
-
return /*#__PURE__*/React.createElement("div", _extends({
|
|
279
|
-
className: cls(getLess(styles, "nsc-basepage-editor"), getLess(styles, "nsc-basepage-content-item")),
|
|
280
|
-
key: index,
|
|
281
|
-
onClick: () => {
|
|
282
|
-
onClick && onClick();
|
|
283
|
-
}
|
|
284
|
-
}, params), /*#__PURE__*/React.createElement("span", {
|
|
285
|
-
className: getLess(styles, "nsc-basepage-icon")
|
|
286
|
-
}, icon), /*#__PURE__*/React.createElement("span", {
|
|
287
|
-
className: getLess(styles, "nsc-basepage-text")
|
|
288
|
-
}, children));
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
292
|
-
className: cls(getLess(styles, "nsc-basepage-tool-buttons"), {
|
|
293
|
-
[getLess(styles, "nsc-basepage-tool-buttons-margin")]: !showSearch || marginflag
|
|
294
|
-
}),
|
|
295
|
-
style: {
|
|
296
|
-
marginLeft: 0
|
|
297
|
-
}
|
|
298
|
-
}, toolbuttons.map((item, index) => {
|
|
299
|
-
if (flag) {
|
|
300
|
-
if (index < 4) {
|
|
301
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
302
|
-
key: index
|
|
303
|
-
}, item);
|
|
304
|
-
} else if (index == 4) {
|
|
305
|
-
return /*#__PURE__*/React.createElement(Popover, {
|
|
306
|
-
content: content,
|
|
307
|
-
title: null,
|
|
308
|
-
placement: "bottom",
|
|
309
|
-
trigger: ["click"],
|
|
310
|
-
key: index
|
|
311
|
-
// overlayClassName={styles['pop-box']}
|
|
312
|
-
}, /*#__PURE__*/React.createElement(Button, {
|
|
313
|
-
type: "primary"
|
|
314
|
-
}, "\u66F4\u591A ", /*#__PURE__*/React.createElement(DownOutlined, null)));
|
|
315
|
-
} else {
|
|
316
|
-
return null;
|
|
317
|
-
}
|
|
318
|
-
} else {
|
|
319
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
320
|
-
key: index
|
|
321
|
-
}, item);
|
|
322
|
-
}
|
|
323
|
-
}));
|
|
324
|
-
}
|
|
325
|
-
renderCloumnButton(columnButtons, record) {
|
|
326
|
-
const {
|
|
327
|
-
actionPorps
|
|
328
|
-
} = this.props;
|
|
329
|
-
const {
|
|
330
|
-
baseActionColumn
|
|
331
|
-
} = config();
|
|
332
|
-
const newButtons = [];
|
|
333
|
-
let showIcon = true;
|
|
334
|
-
if ((actionPorps === null || actionPorps === void 0 ? void 0 : actionPorps.showIcon) === false) showIcon = false;else if (baseActionColumn.showIcon === false) showIcon = false;
|
|
335
|
-
columnButtons.map((item, index) => {
|
|
336
|
-
const _item$props2 = item.props,
|
|
337
|
-
{
|
|
338
|
-
children,
|
|
339
|
-
pageType,
|
|
340
|
-
onClick,
|
|
341
|
-
icon,
|
|
342
|
-
recordShow
|
|
343
|
-
} = _item$props2,
|
|
344
|
-
params = _objectWithoutProperties(_item$props2, _excluded2);
|
|
345
|
-
if (recordShow) {
|
|
346
|
-
if (typeof recordShow == "string") {
|
|
347
|
-
if (eval(recordShow)) {
|
|
348
|
-
newButtons.push(item);
|
|
349
|
-
}
|
|
350
|
-
} else if (typeof recordShow == "function") {
|
|
351
|
-
const show = recordShow(record);
|
|
352
|
-
show && newButtons.push(item);
|
|
353
|
-
}
|
|
354
|
-
} else {
|
|
355
|
-
newButtons.push(item);
|
|
356
|
-
}
|
|
357
|
-
});
|
|
358
|
-
const flag = newButtons.length > 3;
|
|
359
|
-
const content = newButtons.map((item, index) => {
|
|
360
|
-
const _item$props3 = item.props,
|
|
361
|
-
{
|
|
362
|
-
children,
|
|
363
|
-
pageType,
|
|
364
|
-
onClick,
|
|
365
|
-
recordShow,
|
|
366
|
-
icon,
|
|
367
|
-
show
|
|
368
|
-
} = _item$props3,
|
|
369
|
-
params = _objectWithoutProperties(_item$props3, _excluded3);
|
|
370
|
-
if (index > 2) {
|
|
371
|
-
return /*#__PURE__*/React.createElement("div", _extends({
|
|
372
|
-
className: cls(getLess(styles, "nsc-basepage-editor"), getLess(styles, "nsc-basepage-content-item")),
|
|
373
|
-
key: index,
|
|
374
|
-
onClick: () => {
|
|
375
|
-
onClick && onClick(record);
|
|
376
|
-
}
|
|
377
|
-
}, params), showIcon !== false && /*#__PURE__*/React.createElement("span", {
|
|
378
|
-
className: getLess(styles, "nsc-basepage-icon")
|
|
379
|
-
}, icon), /*#__PURE__*/React.createElement("span", {
|
|
380
|
-
className: getLess(styles, "nsc-basepage-text")
|
|
381
|
-
}, children));
|
|
382
|
-
}
|
|
383
|
-
});
|
|
384
|
-
return newButtons.map((item, index) => {
|
|
385
|
-
const _item$props4 = item.props,
|
|
386
|
-
{
|
|
387
|
-
children,
|
|
388
|
-
pageType,
|
|
389
|
-
onClick,
|
|
390
|
-
recordShow,
|
|
391
|
-
icon
|
|
392
|
-
} = _item$props4,
|
|
393
|
-
params = _objectWithoutProperties(_item$props4, _excluded4);
|
|
394
|
-
if (flag) {
|
|
395
|
-
if (index < 3) {
|
|
396
|
-
return /*#__PURE__*/React.createElement("div", _extends({
|
|
397
|
-
className: cls(getLess(styles, "nsc-basepage-editor"), {
|
|
398
|
-
[getLess(styles, "nsc-basepage-editor-first")]: index === 0
|
|
399
|
-
}),
|
|
400
|
-
key: index,
|
|
401
|
-
onClick: () => {
|
|
402
|
-
onClick && onClick(record);
|
|
403
|
-
}
|
|
404
|
-
}, params), showIcon !== false && /*#__PURE__*/React.createElement("span", {
|
|
405
|
-
className: getLess(styles, "nsc-basepage-icon")
|
|
406
|
-
}, icon), /*#__PURE__*/React.createElement("span", {
|
|
407
|
-
className: getLess(styles, "nsc-basepage-text")
|
|
408
|
-
}, children));
|
|
409
|
-
} else if (index == 3) {
|
|
410
|
-
return /*#__PURE__*/React.createElement(Popover, {
|
|
411
|
-
placement: "bottom",
|
|
412
|
-
title: null,
|
|
413
|
-
content: content,
|
|
414
|
-
trigger: ["click"],
|
|
415
|
-
key: index
|
|
416
|
-
// overlayClassName={styles['pop']}
|
|
417
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
418
|
-
className: getLess(styles, "nsc-basepage-editor")
|
|
419
|
-
}, /*#__PURE__*/React.createElement(EllipsisOutlined, null)));
|
|
420
|
-
} else {
|
|
421
|
-
return null;
|
|
422
|
-
}
|
|
423
|
-
} else {
|
|
424
|
-
return /*#__PURE__*/React.createElement("div", _extends({
|
|
425
|
-
className: cls(getLess(styles, "nsc-basepage-editor"), {
|
|
426
|
-
[getLess(styles, "nsc-basepage-editor-first")]: index === 0
|
|
427
|
-
}),
|
|
428
|
-
key: index,
|
|
429
|
-
onClick: () => {
|
|
430
|
-
onClick && onClick(record);
|
|
431
|
-
}
|
|
432
|
-
}, params), showIcon !== false && /*#__PURE__*/React.createElement("span", {
|
|
433
|
-
className: getLess(styles, "nsc-basepage-icon")
|
|
434
|
-
}, icon), /*#__PURE__*/React.createElement("span", {
|
|
435
|
-
className: getLess(styles, "nsc-basepage-text")
|
|
436
|
-
}, children));
|
|
437
|
-
}
|
|
438
|
-
});
|
|
439
|
-
// }
|
|
440
|
-
}
|
|
441
|
-
//树点击事件
|
|
442
|
-
treeSelect(selectedKeys, obj) {
|
|
443
|
-
var _this$searchRef3, _this$props$onCallBac3, _this$props$onCallBac4;
|
|
444
|
-
let keyword = "";
|
|
445
|
-
const {
|
|
446
|
-
searchKey = "key",
|
|
447
|
-
searchField = "",
|
|
448
|
-
parantSelect = true
|
|
449
|
-
} = this.props.treeProps;
|
|
450
|
-
const {
|
|
451
|
-
treeSelectedKey
|
|
452
|
-
} = this.state;
|
|
453
|
-
const {
|
|
454
|
-
selected,
|
|
455
|
-
selectedNodes
|
|
456
|
-
} = obj;
|
|
457
|
-
if (selected) {
|
|
458
|
-
keyword = selectedNodes[0].dataref.attribute[searchKey];
|
|
459
|
-
if (parantSelect) {
|
|
460
|
-
this.setState({
|
|
461
|
-
treeSelectedKey: selectedKeys[0],
|
|
462
|
-
treeSearchPrams: {
|
|
463
|
-
[searchField]: keyword
|
|
464
|
-
}
|
|
465
|
-
});
|
|
466
|
-
} else {
|
|
467
|
-
if (selectedNodes[0].isLeaf || !selectedNodes[0].children) {
|
|
468
|
-
if (selectedKeys[0] !== treeSelectedKey) {
|
|
469
|
-
this.setState({
|
|
470
|
-
treeSelectedKey: selectedKeys[0],
|
|
471
|
-
treeSearchPrams: {
|
|
472
|
-
[searchField]: keyword
|
|
473
|
-
}
|
|
474
|
-
});
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
} else {
|
|
479
|
-
this.setState({
|
|
480
|
-
treeSelectedKey: keyword,
|
|
481
|
-
treeSearchPrams: {}
|
|
482
|
-
});
|
|
483
|
-
}
|
|
484
|
-
if (this.props.onTreeSelect) {
|
|
485
|
-
this.props.onTreeSelect(selectedKeys, obj);
|
|
486
|
-
return;
|
|
487
|
-
}
|
|
488
|
-
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()) || {};
|
|
489
|
-
searchField && this.tableLoad(_objectSpread(_objectSpread({}, fromValue), {}, {
|
|
490
|
-
[searchField]: keyword
|
|
491
|
-
}));
|
|
492
|
-
((_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]);
|
|
493
|
-
}
|
|
494
|
-
resetSearch() {
|
|
495
|
-
var _this$searchRef$curre2;
|
|
496
|
-
(_this$searchRef$curre2 = this.searchRef.current) === null || _this$searchRef$curre2 === void 0 || _this$searchRef$curre2.resetFields();
|
|
497
|
-
}
|
|
498
|
-
getText(props, text) {
|
|
499
|
-
var _props$data;
|
|
500
|
-
let newText = text;
|
|
501
|
-
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) {
|
|
502
|
-
let data = props.data;
|
|
503
|
-
for (let i = 0; i < (data === null || data === void 0 ? void 0 : data.length); i++) {
|
|
504
|
-
if (data[i].value == text) {
|
|
505
|
-
newText = data[i].label;
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
return newText;
|
|
510
|
-
}
|
|
511
|
-
setTableData(data) {
|
|
512
|
-
var _this$tableRef$curren8;
|
|
513
|
-
(_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);
|
|
514
|
-
}
|
|
515
|
-
setTreeData(data) {
|
|
516
|
-
var _this$treeRef$current;
|
|
517
|
-
(_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);
|
|
518
|
-
}
|
|
519
|
-
render() {
|
|
520
|
-
var _tableProps$toolbar, _tableProps$toolbar2;
|
|
521
|
-
const {
|
|
522
|
-
columns = [],
|
|
523
|
-
showSearch = true,
|
|
524
|
-
children,
|
|
525
|
-
submitUrl = "",
|
|
526
|
-
tableProps = {},
|
|
527
|
-
treeProps = {},
|
|
528
|
-
formProps = {},
|
|
529
|
-
showLeft = false,
|
|
530
|
-
submitParams = {},
|
|
531
|
-
showToolButton = true,
|
|
532
|
-
buttons = [],
|
|
533
|
-
editorForm = true,
|
|
534
|
-
onShowForm,
|
|
535
|
-
formChangeValid = true,
|
|
536
|
-
className,
|
|
537
|
-
toolButtonPosition = "buttom",
|
|
538
|
-
actionPorps,
|
|
539
|
-
deletePosition = "toolbar"
|
|
540
|
-
} = this.props;
|
|
541
|
-
const {
|
|
542
|
-
store,
|
|
543
|
-
filterColumn = true,
|
|
544
|
-
actionColumn = true,
|
|
545
|
-
showRowSelection = true,
|
|
546
|
-
columnOrder = true,
|
|
547
|
-
expandable = {},
|
|
548
|
-
parantSelect = true
|
|
549
|
-
} = tableProps,
|
|
550
|
-
othertableParams = _objectWithoutProperties(tableProps, _excluded5);
|
|
551
|
-
const {
|
|
552
|
-
store: treeStore = {},
|
|
553
|
-
showSearch: treeSearch = true,
|
|
554
|
-
titleAlias = "title"
|
|
555
|
-
} = treeProps,
|
|
556
|
-
othertreeParams = _objectWithoutProperties(treeProps, _excluded6);
|
|
557
|
-
let tableParams = _objectSpread({
|
|
558
|
-
filterColumn,
|
|
559
|
-
store
|
|
560
|
-
}, othertableParams);
|
|
561
|
-
let tableColumn = [];
|
|
562
|
-
const searchForms = [];
|
|
563
|
-
const editorForms = [];
|
|
564
|
-
const defaultValue = {};
|
|
565
|
-
const columnButtons = [];
|
|
566
|
-
columns.map(item => {
|
|
567
|
-
var _temp$search, _temp$props, _temp$props2, _temp;
|
|
568
|
-
let temp = _objectSpread({}, item);
|
|
569
|
-
if (temp.search === true || ((_temp$search = temp.search) === null || _temp$search === void 0 ? void 0 : _temp$search.show) === true) {
|
|
570
|
-
var _temp$search2, _temp$search3, _temp$search4;
|
|
571
|
-
searchForms.push({
|
|
572
|
-
name: temp.field || temp.dataIndex,
|
|
573
|
-
label: ((_temp$search2 = temp.search) === null || _temp$search2 === void 0 ? void 0 : _temp$search2.label) || temp.title,
|
|
574
|
-
type: temp.type,
|
|
575
|
-
props: temp.props,
|
|
576
|
-
labelCol: (_temp$search3 = temp.search) === null || _temp$search3 === void 0 ? void 0 : _temp$search3.labelCol,
|
|
577
|
-
wrapperCol: (_temp$search4 = temp.search) === null || _temp$search4 === void 0 ? void 0 : _temp$search4.wrapperCol,
|
|
578
|
-
rules: temp.searchRules ? temp.searchRules : []
|
|
579
|
-
});
|
|
580
|
-
}
|
|
581
|
-
delete temp.search;
|
|
582
|
-
temp.editor !== false && editorForms.push({
|
|
583
|
-
name: temp.field || temp.dataIndex,
|
|
584
|
-
label: temp.title,
|
|
585
|
-
rules: temp.rules ? temp.rules : [],
|
|
586
|
-
type: temp.type,
|
|
587
|
-
span: temp.span,
|
|
588
|
-
dictName: temp.dictName,
|
|
589
|
-
props: _objectSpread({}, temp.props)
|
|
590
|
-
});
|
|
591
|
-
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) {
|
|
592
|
-
var _temp$props3;
|
|
593
|
-
const name = temp.field || temp.dataIndex;
|
|
594
|
-
defaultValue[name] = (_temp$props3 = temp.props) === null || _temp$props3 === void 0 ? void 0 : _temp$props3.defaultValue;
|
|
595
|
-
}
|
|
596
|
-
delete temp.rules;
|
|
597
|
-
delete temp.span;
|
|
598
|
-
if (temp.columnSearch) {
|
|
599
|
-
temp.filterProps = {
|
|
600
|
-
type: temp.type,
|
|
601
|
-
props: temp.props
|
|
602
|
-
};
|
|
603
|
-
}
|
|
604
|
-
delete temp.type;
|
|
605
|
-
let tempProp = _objectSpread({}, temp.props);
|
|
606
|
-
if (temp.style) {
|
|
607
|
-
temp = _objectSpread({
|
|
608
|
-
render: text => {
|
|
609
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, text !== "" && text !== null && text !== undefined && /*#__PURE__*/React.createElement("div", {
|
|
610
|
-
className: getLess(styles, "nsc-basepage-col-back")
|
|
611
|
-
}, /*#__PURE__*/React.createElement("span", {
|
|
612
|
-
className: getLess(styles, "nsc-basepage-col-text")
|
|
613
|
-
}, this.getText(tempProp, text))));
|
|
614
|
-
}
|
|
615
|
-
}, temp);
|
|
616
|
-
} else if (!temp.ellipsis) {
|
|
617
|
-
temp = _objectSpread({
|
|
618
|
-
render: text => {
|
|
619
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, this.getText(tempProp, text));
|
|
620
|
-
}
|
|
621
|
-
}, temp);
|
|
622
|
-
} else {
|
|
623
|
-
temp = _objectSpread({}, temp);
|
|
624
|
-
}
|
|
625
|
-
delete temp.props;
|
|
626
|
-
if (((_temp = temp) === null || _temp === void 0 ? void 0 : _temp.columnShow) !== false) tableColumn.push(temp);
|
|
627
|
-
});
|
|
628
|
-
const selfButtons = [];
|
|
629
|
-
const {
|
|
630
|
-
baseActionColumn
|
|
631
|
-
} = config();
|
|
632
|
-
let showIcon = true;
|
|
633
|
-
if ((actionPorps === null || actionPorps === void 0 ? void 0 : actionPorps.showIcon) === false) showIcon = false;else if (baseActionColumn.showIcon === false) showIcon = false;
|
|
634
|
-
if (editorForm == true) {
|
|
635
|
-
if (buttons.indexOf("search") > -1) {
|
|
636
|
-
columnButtons.push( /*#__PURE__*/React.createElement(Button, {
|
|
637
|
-
onClick: record => {
|
|
638
|
-
if (onShowForm) {
|
|
639
|
-
onShowForm(record.attribute || record, "detail");
|
|
640
|
-
return;
|
|
641
|
-
}
|
|
642
|
-
this.showForm(record.attribute || record, "detail");
|
|
643
|
-
},
|
|
644
|
-
icon: /*#__PURE__*/React.createElement(EyeOutlined, null)
|
|
645
|
-
}, "\u67E5\u770B"));
|
|
646
|
-
}
|
|
647
|
-
if (buttons.indexOf("editor") > -1) {
|
|
648
|
-
columnButtons.push( /*#__PURE__*/React.createElement(Button, {
|
|
649
|
-
onClick: record => {
|
|
650
|
-
if (onShowForm) {
|
|
651
|
-
onShowForm(record.attribute || record, "editor");
|
|
652
|
-
return;
|
|
653
|
-
}
|
|
654
|
-
this.showForm(record.attribute || record, "editor");
|
|
655
|
-
},
|
|
656
|
-
icon: /*#__PURE__*/React.createElement(EditOutlined, null)
|
|
657
|
-
}, "\u7F16\u8F91"));
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
if (buttons.indexOf("add") > -1) {
|
|
661
|
-
selfButtons.push( /*#__PURE__*/React.createElement(Button, {
|
|
662
|
-
type: "primary",
|
|
663
|
-
onClick: () => {
|
|
664
|
-
const {
|
|
665
|
-
onShowForm
|
|
666
|
-
} = this.props;
|
|
667
|
-
if (onShowForm) {
|
|
668
|
-
onShowForm();
|
|
669
|
-
return;
|
|
670
|
-
}
|
|
671
|
-
this.showForm();
|
|
672
|
-
},
|
|
673
|
-
icon: /*#__PURE__*/React.createElement(PlusOutlined, null)
|
|
674
|
-
}, "\u6DFB\u52A0"));
|
|
675
|
-
}
|
|
676
|
-
if (buttons.indexOf("delete") > -1) {
|
|
677
|
-
if (deletePosition == "toolbar") {
|
|
678
|
-
selfButtons.push( /*#__PURE__*/React.createElement(Button
|
|
679
|
-
// type={"primary"}
|
|
680
|
-
, {
|
|
681
|
-
onClick: this.onDelete.bind(this),
|
|
682
|
-
icon: /*#__PURE__*/React.createElement(DeleteOutlined, null),
|
|
683
|
-
danger: true
|
|
684
|
-
}, "\u5220\u9664"));
|
|
685
|
-
} else if (deletePosition == "row") {
|
|
686
|
-
columnButtons.push( /*#__PURE__*/React.createElement(Button
|
|
687
|
-
// type={"primary"}
|
|
688
|
-
, {
|
|
689
|
-
onClick: record => {
|
|
690
|
-
this.onDelete(record);
|
|
691
|
-
},
|
|
692
|
-
icon: /*#__PURE__*/React.createElement(DeleteOutlined, null),
|
|
693
|
-
danger: true
|
|
694
|
-
}, "\u5220\u9664"));
|
|
695
|
-
}
|
|
696
|
-
}
|
|
697
|
-
if (Array.isArray(children)) {
|
|
698
|
-
children.map(item => {
|
|
699
|
-
if (Array.isArray(item)) {
|
|
700
|
-
item.map(child => {
|
|
701
|
-
var _child$props, _child$props2;
|
|
702
|
-
if ((child === null || child === void 0 || (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.pageType) == "toolButton") {
|
|
703
|
-
selfButtons.push(child);
|
|
704
|
-
} else if ((child === null || child === void 0 || (_child$props2 = child.props) === null || _child$props2 === void 0 ? void 0 : _child$props2.pageType) == "cloumnButton") {
|
|
705
|
-
columnButtons.push(child);
|
|
706
|
-
}
|
|
707
|
-
});
|
|
708
|
-
} else {
|
|
709
|
-
var _item$props5, _item$props6;
|
|
710
|
-
if ((item === null || item === void 0 || (_item$props5 = item.props) === null || _item$props5 === void 0 ? void 0 : _item$props5.pageType) == "toolButton") {
|
|
711
|
-
selfButtons.push(item);
|
|
712
|
-
} else if ((item === null || item === void 0 || (_item$props6 = item.props) === null || _item$props6 === void 0 ? void 0 : _item$props6.pageType) == "cloumnButton") {
|
|
713
|
-
columnButtons.push(item);
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
});
|
|
717
|
-
} else if (children) {
|
|
718
|
-
const {
|
|
719
|
-
props
|
|
720
|
-
} = children;
|
|
721
|
-
if ((props === null || props === void 0 ? void 0 : props.pageType) == "toolButton") {
|
|
722
|
-
selfButtons.push(children);
|
|
723
|
-
} else if ((props === null || props === void 0 ? void 0 : props.pageType) == "cloumnButton") {
|
|
724
|
-
columnButtons.push(children);
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
actionColumn && tableColumn.push({
|
|
728
|
-
title: "操作",
|
|
729
|
-
dataIndex: "action",
|
|
730
|
-
align: actionPorps !== null && actionPorps !== void 0 && actionPorps.textAlign ? actionPorps === null || actionPorps === void 0 ? void 0 : actionPorps.textAlign : baseActionColumn.textAlign ? baseActionColumn.textAlign : "center",
|
|
731
|
-
width: actionPorps !== null && actionPorps !== void 0 && actionPorps.width ? actionPorps === null || actionPorps === void 0 ? void 0 : actionPorps.width : baseActionColumn.width ? baseActionColumn.width : 200,
|
|
732
|
-
fixed: "right",
|
|
733
|
-
render: (text, record) => {
|
|
734
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
735
|
-
className: getLess(styles, "nsc-basepage-action")
|
|
736
|
-
}, this.renderCloumnButton(columnButtons, record));
|
|
737
|
-
}
|
|
738
|
-
});
|
|
739
|
-
if (columnOrder) tableColumn = [{
|
|
740
|
-
title: "序号",
|
|
741
|
-
width: 80,
|
|
742
|
-
align: "center",
|
|
743
|
-
render: (text, reacord, index) => {
|
|
744
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, index + 1);
|
|
745
|
-
}
|
|
746
|
-
}, ...tableColumn];
|
|
747
|
-
let searchFlag = showSearch && searchForms.length > 0;
|
|
748
|
-
let {
|
|
749
|
-
tableTool
|
|
750
|
-
} = config();
|
|
751
|
-
let toolFlag = showToolButton && selfButtons.length > 0;
|
|
752
|
-
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);
|
|
753
|
-
if (tableProps.pagination !== false) {
|
|
754
|
-
const scroll = tableParams.scroll;
|
|
755
|
-
tableParams = _objectSpread(_objectSpread({}, tableParams), {}, {
|
|
756
|
-
scroll: _objectSpread({
|
|
757
|
-
x: "max-content"
|
|
758
|
-
}, scroll)
|
|
759
|
-
});
|
|
760
|
-
}
|
|
761
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
762
|
-
className: cls(getLess(styles, "nsc-basepage"), className)
|
|
763
|
-
}, this.props.pageTitle && /*#__PURE__*/React.createElement("div", {
|
|
764
|
-
className: cls(getLess(styles, "nsc-basepage-title"))
|
|
765
|
-
}, this.props.pageTitle), /*#__PURE__*/React.createElement("div", {
|
|
766
|
-
className: cls(getLess(styles, "nsc-basepage-pane")),
|
|
767
|
-
style: {
|
|
768
|
-
display: "flex"
|
|
769
|
-
}
|
|
770
|
-
}, showLeft && /*#__PURE__*/React.createElement("div", {
|
|
771
|
-
className: getLess(styles, "nsc-basepage-left")
|
|
772
|
-
}, /*#__PURE__*/React.createElement(Tree, _extends({
|
|
773
|
-
store: _objectSpread({}, treeStore),
|
|
774
|
-
showIcon: false,
|
|
775
|
-
checkable: false,
|
|
776
|
-
searchable: treeSearch,
|
|
777
|
-
onSelect: this.treeSelect.bind(this),
|
|
778
|
-
selectedKeys: [this.state.treeSelectedKey],
|
|
779
|
-
titleAlias: titleAlias
|
|
780
|
-
}, othertreeParams))), /*#__PURE__*/React.createElement("div", {
|
|
781
|
-
className: cls(getLess(styles, "nsc-basepage-right"), {
|
|
782
|
-
[getLess(styles, "nsc-basepage-no-left-right")]: !showLeft
|
|
783
|
-
})
|
|
784
|
-
}, showSearch && searchForms.length > 0 && /*#__PURE__*/React.createElement(HeaderSearch, {
|
|
785
|
-
searchForms: searchForms,
|
|
786
|
-
toolButtonPosition: toolButtonPosition,
|
|
787
|
-
onSearch: this.onSearch.bind(this),
|
|
788
|
-
onReset: this.props.onReset,
|
|
789
|
-
ref: this.searchRef,
|
|
790
|
-
searchFormProps: this.props.searchFormProps
|
|
791
|
-
}), showToolButton && selfButtons.length > 0 && toolButtonPosition == "buttom" && this.renderToolButtons(selfButtons, searchForms.length == 0), /*#__PURE__*/React.createElement("div", {
|
|
792
|
-
className: cls(getLess(styles, "nsc-basepage-table"), {
|
|
793
|
-
[getLess(styles, "nsc-basepage-table-top")]: searchFlag && !toolFlag || !toolbarFlag
|
|
794
|
-
}, {
|
|
795
|
-
[getLess(styles, "nsc-basepage-table-top2")]: !searchFlag && !toolFlag
|
|
796
|
-
})
|
|
797
|
-
}, /*#__PURE__*/React.createElement(Table, _extends({
|
|
798
|
-
ref: this.tableRef,
|
|
799
|
-
columns: tableColumn,
|
|
800
|
-
expandable: _objectSpread({
|
|
801
|
-
expandIcon: _ref => {
|
|
802
|
-
let {
|
|
803
|
-
expanded,
|
|
804
|
-
onExpand,
|
|
805
|
-
record
|
|
806
|
-
} = _ref;
|
|
807
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, expanded ? /*#__PURE__*/React.createElement(DownOutlined, {
|
|
808
|
-
onClick: e => onExpand(record, e),
|
|
809
|
-
className: getLess(styles, "nsc-basepage-expand-icon")
|
|
810
|
-
}) : record.childNodes && /*#__PURE__*/React.createElement(RightOutlined, {
|
|
811
|
-
onClick: e => onExpand(record, e),
|
|
812
|
-
className: getLess(styles, "nsc-basepage-expand-icon")
|
|
813
|
-
}));
|
|
814
|
-
}
|
|
815
|
-
}, expandable),
|
|
816
|
-
columnOrder: true,
|
|
817
|
-
onChange: pagination => {
|
|
818
|
-
const {
|
|
819
|
-
currentPage
|
|
820
|
-
} = this.state;
|
|
821
|
-
if (currentPage !== pagination.current) {
|
|
822
|
-
this.setState({
|
|
823
|
-
currentPage: pagination.current
|
|
824
|
-
});
|
|
825
|
-
}
|
|
826
|
-
},
|
|
827
|
-
toolbar: _objectSpread({
|
|
828
|
-
onToolClick: {
|
|
829
|
-
onRefresh: () => {
|
|
830
|
-
const params = this.getSearchValues();
|
|
831
|
-
this.tableLoad(params);
|
|
832
|
-
}
|
|
833
|
-
}
|
|
834
|
-
}, tableProps.toolbar),
|
|
835
|
-
showRowSelection: showRowSelection
|
|
836
|
-
}, tableParams)))), editorForm && /*#__PURE__*/React.createElement(EditorForm, {
|
|
837
|
-
ref: this.editorRef,
|
|
838
|
-
callBack: () => {
|
|
839
|
-
var _this$props$onCallBac5, _this$props$onCallBac6;
|
|
840
|
-
((_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());
|
|
841
|
-
this.tableReload.bind(this);
|
|
842
|
-
},
|
|
843
|
-
formProps: editorForms,
|
|
844
|
-
submitUrl: submitUrl,
|
|
845
|
-
submitParams: submitParams,
|
|
846
|
-
onSubmit: this.props.onSubmit,
|
|
847
|
-
defaultValue: defaultValue,
|
|
848
|
-
onHideForm: this.props.onHideForm,
|
|
849
|
-
onFormChange: this.props.onFormChange,
|
|
850
|
-
formType: this.props.formType || "auto",
|
|
851
|
-
changeValid: formChangeValid,
|
|
852
|
-
otherProps: _objectSpread({}, formProps)
|
|
853
|
-
})));
|
|
854
|
-
}
|
|
855
|
-
}
|
|
856
|
-
export default BasePage;
|
|
857
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUYWJsZSIsIlRyZWUiLCJCdXR0b24iLCJNb2RhbCIsIlBvcG92ZXIiLCJtZXNzYWdlIiwiRWRpdG9yRm9ybSIsImNscyIsInV0aWxzIiwiRG93bk91dGxpbmVkIiwiRXllT3V0bGluZWQiLCJFZGl0T3V0bGluZWQiLCJSaWdodE91dGxpbmVkIiwiUGx1c091dGxpbmVkIiwiRWxsaXBzaXNPdXRsaW5lZCIsIkRlbGV0ZU91dGxpbmVkIiwiZ2V0TGVzcyIsInJlcXVlc3QiLCJjb25maWciLCJnZXRTdG9yYWdlIiwiSGVhZGVyU2VhcmNoIiwic3R5bGVzIiwiQmFzZVBhZ2UiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX3R5cGUiLCJfc2l6ZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsImNoZWNrZWRUcmVlS2V5cyIsIm5hbWUiLCJ1c2VyVHlwZSIsImFjY291bnQiLCJzdGF0ZSIsInZhbHVlIiwiZGVwdElkIiwib25TZWFyY2giLCJzZWxlY3RlZCIsInJlcyIsImtleSIsImtleXMiLCJsZW5ndGgiLCJzdG9yZVByZWZpeCIsInR5cGUiLCJjb250ZW50Iiwic2l6ZSIsInNlbGVjdGVkUm93S2V5cyIsInNlbGVjdGVkUm93RGF0YXMiLCJ0cmVlU2VsZWN0ZWRLZXkiLCJleHBhbmQiLCJmb3JtVHlwZSIsInRhYmxlU2l6ZSIsInRyZWVTZWFyY2hQcmFtcyIsImNvbXBvbmVudERpZE1vdW50IiwiaW5pdERhdGEiLCJzZXRTZWFyY2hQYXJhbXMiLCJwYXJhbXMiLCJjYWxsQmFjayIsIl90aGlzJHNlYXJjaFJlZiRjdXJyZSIsInNlYXJjaFJlZiIsImN1cnJlbnQiLCJzaG93Rm9ybSIsIl90aGlzJGVkaXRvclJlZiRjdXJyZSIsImVkaXRvcmZsYWciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJlZGl0b3JSZWYiLCJzaG93IiwiaGlkZUZvcm0iLCJfdGhpcyRlZGl0b3JSZWYkY3VycmUyIiwic2V0TG9hZGluZyIsImxvYWRpbmciLCJfdGhpcyRlZGl0b3JSZWYkY3VycmUzIiwic2V0RWRpdEZvcm1WYWx1ZXMiLCJfdGhpcyRlZGl0b3JSZWYkY3VycmU0Iiwic2V0RmllbGRzVmFsdWUiLCJnZXRFZGl0Rm9ybVZhbHVlcyIsIl90aGlzJGVkaXRvclJlZiRjdXJyZTUiLCJnZXRGaWVsZHNWYWx1ZSIsIm9uRGVsZXRlIiwiZGF0YSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbiIsImRlbGV0ZVVybCIsImRlbGV0ZVBhcmFtcyIsImRlbGV0ZVBvc2l0aW9uIiwiX3RoaXMiLCJ0YWJsZVJlZiIsImdldFNlbGVjdGVkUm93S2V5cyIsIndhcm5pbmciLCJjb25maXJtIiwib25PayIsIkVycm9yIiwiZGVmYXVsdFBhcmFtcyIsIm1ldGhvZCIsImF1dG9QcmVmaXgiLCJpZHMiLCJqb2luIiwiaWQiLCJyZXF1ZXN0UGFyYW1zIiwiX29iamVjdFNwcmVhZCIsInRoZW4iLCJjb2RlIiwiX3RoaXMkc2VhcmNoUmVmIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjMiIsInN1Y2Nlc3MiLCJnZXRTZWFyY2hWYWx1ZXMiLCJvbkNhbGxCYWNrcyIsIm9uRGVsZXRlQ2FsbEJhY2siLCJ0YWJsZUxvYWQiLCJlcnJvciIsImNhdGNoIiwiY29uc29sZSIsImxvZyIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjIiLCJyZXF1ZXN0Q29uZmlnIiwic3RvcmUiLCJsb2FkIiwib25TZWFyY2hDYWxsQmFjayIsImNhbGxiYWNrIiwidGFibGVSZWxvYWQiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW4zIiwiYXV0b0xvYWQiLCJyZWxvYWQiLCJfcmVzJGRhdGEiLCJyZWNvcmRzIiwiY3VycmVudFBhZ2UiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW40IiwiX3RoaXMkdGFibGVSZWYkY3VycmVuNSIsImdldFNlbGVjdGVkUm93RGF0YXMiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW42IiwicmVzZXRTZWxlY3RlZFJvd0tleXMiLCJfdGhpcyR0YWJsZVJlZiRjdXJyZW43IiwiX3RoaXMkc2VhcmNoUmVmMiIsImZyb21WYWx1ZSIsImdldENoaWxkcmVuRGF0YSIsInRhYmxlUHJvcHMiLCJyb3dLZXkiLCJyZXNLZXkiLCJjaGlsZE5vZGVzIiwiY2hpbGRyZW4iLCJtYXAiLCJpdGVtIiwiaW5kZXgiLCJyZW5kZXJUb29sQnV0dG9ucyIsInRvb2xidXR0b25zIiwibWFyZ2luZmxhZyIsImZsYWciLCJzaG93U2VhcmNoIiwiX2l0ZW0kcHJvcHMiLCJwYWdlVHlwZSIsIm9uQ2xpY2siLCJpY29uIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiY3JlYXRlRWxlbWVudCIsIl9leHRlbmRzIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtYXJnaW5MZWZ0IiwidGl0bGUiLCJwbGFjZW1lbnQiLCJ0cmlnZ2VyIiwicmVuZGVyQ2xvdW1uQnV0dG9uIiwiY29sdW1uQnV0dG9ucyIsInJlY29yZCIsImFjdGlvblBvcnBzIiwiYmFzZUFjdGlvbkNvbHVtbiIsIm5ld0J1dHRvbnMiLCJzaG93SWNvbiIsIl9pdGVtJHByb3BzMiIsInJlY29yZFNob3ciLCJfZXhjbHVkZWQyIiwiZXZhbCIsInB1c2giLCJfaXRlbSRwcm9wczMiLCJfZXhjbHVkZWQzIiwiX2l0ZW0kcHJvcHM0IiwiX2V4Y2x1ZGVkNCIsInRyZWVTZWxlY3QiLCJzZWxlY3RlZEtleXMiLCJvYmoiLCJfdGhpcyRzZWFyY2hSZWYzIiwiX3RoaXMkcHJvcHMkb25DYWxsQmFjMyIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzQiLCJrZXl3b3JkIiwic2VhcmNoS2V5Iiwic2VhcmNoRmllbGQiLCJwYXJhbnRTZWxlY3QiLCJ0cmVlUHJvcHMiLCJzZWxlY3RlZE5vZGVzIiwiZGF0YXJlZiIsImF0dHJpYnV0ZSIsInNldFN0YXRlIiwiaXNMZWFmIiwib25UcmVlU2VsZWN0IiwidHJlZVNlbGVjdENhbGxCYWNrIiwicmVzZXRTZWFyY2giLCJfdGhpcyRzZWFyY2hSZWYkY3VycmUyIiwicmVzZXRGaWVsZHMiLCJnZXRUZXh0IiwidGV4dCIsIl9wcm9wcyRkYXRhIiwibmV3VGV4dCIsImkiLCJsYWJlbCIsInNldFRhYmxlRGF0YSIsIl90aGlzJHRhYmxlUmVmJGN1cnJlbjgiLCJzZXREYXRhIiwic2V0VHJlZURhdGEiLCJfdGhpcyR0cmVlUmVmJGN1cnJlbnQiLCJ0cmVlUmVmIiwicmVuZGVyIiwiX3RhYmxlUHJvcHMkdG9vbGJhciIsIl90YWJsZVByb3BzJHRvb2xiYXIyIiwiY29sdW1ucyIsInN1Ym1pdFVybCIsImZvcm1Qcm9wcyIsInNob3dMZWZ0Iiwic3VibWl0UGFyYW1zIiwic2hvd1Rvb2xCdXR0b24iLCJidXR0b25zIiwiZWRpdG9yRm9ybSIsIm9uU2hvd0Zvcm0iLCJmb3JtQ2hhbmdlVmFsaWQiLCJ0b29sQnV0dG9uUG9zaXRpb24iLCJmaWx0ZXJDb2x1bW4iLCJhY3Rpb25Db2x1bW4iLCJzaG93Um93U2VsZWN0aW9uIiwiY29sdW1uT3JkZXIiLCJleHBhbmRhYmxlIiwib3RoZXJ0YWJsZVBhcmFtcyIsIl9leGNsdWRlZDUiLCJ0cmVlU3RvcmUiLCJ0cmVlU2VhcmNoIiwidGl0bGVBbGlhcyIsIm90aGVydHJlZVBhcmFtcyIsIl9leGNsdWRlZDYiLCJ0YWJsZVBhcmFtcyIsInRhYmxlQ29sdW1uIiwic2VhcmNoRm9ybXMiLCJlZGl0b3JGb3JtcyIsImRlZmF1bHRWYWx1ZSIsIl90ZW1wJHNlYXJjaCIsIl90ZW1wJHByb3BzIiwiX3RlbXAkcHJvcHMyIiwiX3RlbXAiLCJ0ZW1wIiwic2VhcmNoIiwiX3RlbXAkc2VhcmNoMiIsIl90ZW1wJHNlYXJjaDMiLCJfdGVtcCRzZWFyY2g0IiwiZmllbGQiLCJkYXRhSW5kZXgiLCJsYWJlbENvbCIsIndyYXBwZXJDb2wiLCJydWxlcyIsInNlYXJjaFJ1bGVzIiwiZWRpdG9yIiwic3BhbiIsImRpY3ROYW1lIiwiX3RlbXAkcHJvcHMzIiwiY29sdW1uU2VhcmNoIiwiZmlsdGVyUHJvcHMiLCJ0ZW1wUHJvcCIsIkZyYWdtZW50IiwiZWxsaXBzaXMiLCJjb2x1bW5TaG93Iiwic2VsZkJ1dHRvbnMiLCJpbmRleE9mIiwiYmluZCIsImRhbmdlciIsIkFycmF5IiwiaXNBcnJheSIsImNoaWxkIiwiX2NoaWxkJHByb3BzIiwiX2NoaWxkJHByb3BzMiIsIl9pdGVtJHByb3BzNSIsIl9pdGVtJHByb3BzNiIsImFsaWduIiwidGV4dEFsaWduIiwid2lkdGgiLCJmaXhlZCIsInJlYWNvcmQiLCJzZWFyY2hGbGFnIiwidGFibGVUb29sIiwidG9vbEZsYWciLCJ0b29sYmFyRmxhZyIsInRvb2xiYXIiLCJ0b29scyIsInBhZ2luYXRpb24iLCJzY3JvbGwiLCJ4IiwicGFnZVRpdGxlIiwiZGlzcGxheSIsImNoZWNrYWJsZSIsInNlYXJjaGFibGUiLCJvblNlbGVjdCIsIm9uUmVzZXQiLCJyZWYiLCJzZWFyY2hGb3JtUHJvcHMiLCJleHBhbmRJY29uIiwiX3JlZiIsImV4cGFuZGVkIiwib25FeHBhbmQiLCJlIiwib25DaGFuZ2UiLCJvblRvb2xDbGljayIsIm9uUmVmcmVzaCIsIl90aGlzJHByb3BzJG9uQ2FsbEJhYzUiLCJfdGhpcyRwcm9wcyRvbkNhbGxCYWM2Iiwib25TdW1iaXRDYWxsQmFjayIsIm9uU3VibWl0Iiwib25IaWRlRm9ybSIsIm9uRm9ybUNoYW5nZSIsImNoYW5nZVZhbGlkIiwib3RoZXJQcm9wcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2UvQmFzZVBhZ2UvaW5kZXggY29weS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uLy4uL2Jhc2UvdGFibGVcIjtcclxuaW1wb3J0IFRyZWUgZnJvbSBcIi4uLy4uL2Jhc2UvdHJlZVwiO1xyXG5pbXBvcnQgRm9ybSBmcm9tIFwiLi4vLi4vYmFzZS9mb3JtXCI7XHJcbmltcG9ydCBCdXR0b24gZnJvbSBcIi4uLy4uL2Jhc2UvYnV0dG9uXCI7XHJcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vYmFzZS9tb2RhbFwiO1xyXG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwiLi4vLi4vYmFzZS9wb3BvdmVyXCI7XHJcbmltcG9ydCBtZXNzYWdlIGZyb20gXCIuLi8uLi9iYXNlL21lc3NhZ2VcIjtcclxuaW1wb3J0IEljb24gZnJvbSBcIi4uLy4uL2Jhc2UvY29tbW9uL0ljb25Gb250XCI7XHJcbmltcG9ydCB7IGljb25UeXBlIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgRWRpdG9yRm9ybSBmcm9tIFwiLi9Gb3JtXCI7XHJcbmltcG9ydCBjbHMgZnJvbSBcImNsYXNzbmFtZXNcIjtcclxuaW1wb3J0ICBcIi4vaW5kZXgubW9kdWxlLmxlc3NcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgUm93IGZyb20gXCIuLi8uLi9iYXNlL2dyaWQvUm93XCI7XHJcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSBcIkBiai1uc2MvbXNuL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gIERvd25PdXRsaW5lZCxcclxuICBFeWVPdXRsaW5lZCxcclxuICBFZGl0T3V0bGluZWQsXHJcbiAgUmlnaHRPdXRsaW5lZCxcclxuICBQbHVzT3V0bGluZWQsXHJcbiAgRWxsaXBzaXNPdXRsaW5lZCxcclxuICBEZWxldGVPdXRsaW5lZCxcclxufSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgZ2V0TGVzcywgZ2V0Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tIFwibnNjLXJlcXVlc3RcIjtcclxuaW1wb3J0IG9taXQgZnJvbSBcIm9taXQuanNcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldFN0b3JhZ2UgfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHsgSUZvcm1Qcm9wcyB9IGZyb20gXCIuLi8uLi9iYXNlL2Zvcm0vRm9ybVwiO1xyXG5pbXBvcnQgSGVhZGVyU2VhcmNoIGZyb20gXCIuLi9IZWFkZXJTZWFyY2hcIjtcclxuaW1wb3J0IHsgUGFnaW5hdGlvblByb3BzIH0gZnJvbSBcImFudGRcIjtcclxuaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xyXG4gIGFjdGlvbkNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65pON5L2c5YiXXHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIGZpbHRlckNvbHVtbj86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S66L+H5ruk5oyJ6ZKuXHJcbiAgc2hvd1Jvd1NlbGVjdGlvbj86IGJvb2xlYW47IC8v5piv5ZCm6KGo5qC85Yu+6YCJ5YiXXHJcbiAgcGFnaW5hdGlvbj86IGJvb2xlYW4gfCBQYWdpbmF0aW9uUHJvcHM7IC8v5piv5ZCm5pi+56S65YiG6aG1XHJcbiAgY29sdW1uT3JkZXI/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuihqOagvOW6j+WIl1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5jb25zdCBzdHlsZXMgPSBudWxsXHJcbmludGVyZmFjZSBUcmVlUHJvcHMge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/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/IHN0b3JlUHJlZml4ICsgXCItXCIgKyBcImZvcm1UeXBlXCIgOiBcImZvcm1UeXBlXCJcclxuICAgICk7XHJcbiAgICB0eXBlID0gdHlwZT8uY29udGVudDtcclxuICAgIGxldCBzaXplID0gZ2V0U3RvcmFnZShcclxuICAgICAgc3RvcmVQcmVmaXggPyBzdG9yZVByZWZpeCArIFwiLVwiICsgXCJ0YWJsZVNpemVcIiA6IFwidGFibGVTaXplXCJcclxuICAgICk7XHJcbiAgICBzaXplID0gc2l6ZT8uY29udGVudDtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHR5cGU6IFwiYWRkXCIsXHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgICB0cmVlU2VsZWN0ZWRLZXk6IFwiXCIsXHJcbiAgICAgIGV4cGFuZDogZmFsc2UsXHJcbiAgICAgIGZvcm1UeXBlOiB0eXBlIHx8IFwibW9kYWxcIixcclxuICAgICAgdGFibGVTaXplOiBzaXplIHx8IFwiZGVmYXVsdFwiLFxyXG4gICAgICB0cmVlU2VhcmNoUHJhbXM6IHt9LFxyXG4gICAgfTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBjb25zdCB7IGluaXREYXRhIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaW5pdERhdGEgJiYgaW5pdERhdGEoKTtcclxuICB9XHJcblxyXG4gIHNldFNlYXJjaFBhcmFtcyhwYXJhbXMsIGNhbGxCYWNrKSB7XHJcbiAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5zZXRTZWFyY2hQYXJhbXMocGFyYW1zKTtcclxuICAgIGNhbGxCYWNrICYmIGNhbGxCYWNrKHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdCA9IChjaGVja2VkVHJlZUtleXM6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgeyBuYW1lLCB1c2VyVHlwZSwgYWNjb3VudCB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHZhbHVlID0geyBuYW1lLCB1c2VyVHlwZSwgYWNjb3VudCwgZGVwdElkOiBjaGVja2VkVHJlZUtleXNbMF0gfTtcclxuICAgIGlmICh0aGlzLnByb3BzLm9uU2VhcmNoKSB7XHJcbiAgICAgIHRoaXMucHJvcHMub25TZWFyY2godmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy50YWJsZUxvYWQodmFsdWUpO1xyXG4gIH07XHJcblxyXG4gIC8v5pi+56S66KGo5Y2VXHJcbiAgc2hvd0Zvcm0odmFsdWU/OiBhbnksIGVkaXRvcmZsYWcgPSBcImFkZFwiKSB7XHJcbiAgICB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5zaG93KHZhbHVlLCBlZGl0b3JmbGFnKTtcclxuICB9XHJcblxyXG4gIC8v5YWz6Zet6KGo5Y2VXHJcbiAgaGlkZUZvcm0oKSB7XHJcbiAgICB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5oaWRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmVkaXRvclJlZi5jdXJyZW50Py5zZXRMb2FkaW5nKGxvYWRpbmcpO1xyXG4gIH1cclxuXHJcbiAgc2V0RWRpdEZvcm1WYWx1ZXModmFsdWUpIHtcclxuICAgIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LnNldEZpZWxkc1ZhbHVlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRGb3JtVmFsdWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yUmVmLmN1cnJlbnQ/LmdldEZpZWxkc1ZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICAvL+aJuemHj+WIoOmZpFxyXG4gIG9uRGVsZXRlKGRhdGE/OiBhbnkpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgZGVsZXRlVXJsLFxyXG4gICAgICBvbkRlbGV0ZSxcclxuICAgICAgZGVsZXRlUGFyYW1zLFxyXG4gICAgICBkZWxldGVQb3NpdGlvbiA9IFwidG9vbGJhclwiLFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dLZXlzID0gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5nZXRTZWxlY3RlZFJvd0tleXMoKTtcclxuICAgIGlmIChkZWxldGVQb3NpdGlvbiA9PSBcInRvb2xiYXJcIikge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRSb3dLZXlzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgbWVzc2FnZS53YXJuaW5nKFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE5pWw5o2u77yBXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTW9kYWwuY29uZmlybSh7XHJcbiAgICAgIGNvbnRlbnQ6IFwi5piv5ZCm56Gu6K6k5Yig6Zmk5omA6YCJ6aG577yfXCIsXHJcbiAgICAgIC8vIGNlbnRlcmVkOnRydWUsXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICBpZiAob25EZWxldGUpIHtcclxuICAgICAgICAgIG9uRGVsZXRlICYmXHJcbiAgICAgICAgICAgIG9uRGVsZXRlKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dLZXlzIDogZGF0YSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVsZXRlVXJsKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmzkuI3og73kuLrnqbrvvIFcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRQYXJhbXMgPSB7XHJcbiAgICAgICAgICBtZXRob2Q6IFwicG9zdFwiLFxyXG4gICAgICAgICAgYXV0b1ByZWZpeDogdHJ1ZSxcclxuICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICBpZHM6IGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiID8gc2VsZWN0ZWRSb3dLZXlzLmpvaW4oKSA6IGRhdGEuaWQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IHJlcXVlc3RQYXJhbXMgPSB7fSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRQYXJhbXMpIHtcclxuICAgICAgICAgIHJlcXVlc3RQYXJhbXMgPSB7IC4uLmRlbGV0ZVBhcmFtcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXF1ZXN0UGFyYW1zID0geyAuLi5kZWZhdWx0UGFyYW1zIH07XHJcbiAgICAgICAgcmVxdWVzdChkZWxldGVVcmwsIHtcclxuICAgICAgICAgIC4uLnJlcXVlc3RQYXJhbXMsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXM6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvZGUgfSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2Uuc3VjY2VzcyhcIuWIoOmZpOaIkOWKn++8gVwiKTtcclxuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBfdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy5vbkRlbGV0ZUNhbGxCYWNrICYmXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25EZWxldGVDYWxsQmFjaygpO1xyXG4gICAgICAgICAgICAgIF90aGlzLnRhYmxlTG9hZCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5lcnJvcihcIuWIoOmZpOWksei0pe+8gVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRhYmxlTG9hZChwYXJhbXM6IGFueSwgcmVxdWVzdENvbmZpZyA9IHt9KSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlLmxvYWQoe1xyXG4gICAgICAuLi5yZXF1ZXN0Q29uZmlnLFxyXG4gICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL+afpeivolxyXG4gIG9uU2VhcmNoKHBhcmFtcykge1xyXG4gICAgY29uc3QgeyBvblNlYXJjaCwgb25DYWxsQmFja3MgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAob25TZWFyY2gpIHtcclxuICAgICAgb25TZWFyY2goeyAuLi5wYXJhbXMsIC4uLnRoaXMuc3RhdGUudHJlZVNlYXJjaFByYW1zIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRhYmxlTG9hZCh7IC4uLnBhcmFtcywgLi4udGhpcy5zdGF0ZS50cmVlU2VhcmNoUHJhbXMgfSk7XHJcbiAgICBvbkNhbGxCYWNrcz8ub25TZWFyY2hDYWxsQmFjayAmJlxyXG4gICAgICB1dGlscy5jYWxsYmFjayhvbkNhbGxCYWNrcz8ub25TZWFyY2hDYWxsQmFjaywgdGhpcywgW3BhcmFtc10pO1xyXG4gIH1cclxuICAvL+ihqOagvOmHjeaWsOWKoOi9vVxyXG4gIHRhYmxlUmVsb2FkKHBhcmFtcyA9IHt9LCBhdXRvTG9hZCA9IHRydWUpIHtcclxuICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmU/LnJlbG9hZCh7XHJcbiAgICAgIGNhbGxiYWNrOiAocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgYXV0b0xvYWQgJiZcclxuICAgICAgICAgIHJlcz8uZGF0YT8ucmVjb3Jkcz8ubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VycmVudFBhZ2UgIT09IDFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudGFibGVSZWYuY3VycmVudD8uc3RvcmU/LnJlbG9hZCh7XHJcbiAgICAgICAgICAgIHBhcmFtczogeyBjdXJyZW50OiAxLCAuLi5wYXJhbXMgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5nZXRTZWxlY3RlZFJvd0tleXMoKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dEYXRhcygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LmdldFNlbGVjdGVkUm93RGF0YXMoKTtcclxuICB9XHJcbiAgcmVzZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZVJlZi5jdXJyZW50Py5yZXNldFNlbGVjdGVkUm93S2V5cygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoVmFsdWVzKCkge1xyXG4gICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgcmV0dXJuIHsgLi4uZnJvbVZhbHVlLCAuLi50aGlzLnN0YXRlLnRyZWVTZWFyY2hQcmFtcyB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGRyZW5EYXRhKGRhdGEsIGtleXMgPSBbXSkge1xyXG4gICAgY29uc3QgeyB0YWJsZVByb3BzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRhYmxlUHJvcHM7XHJcbiAgICBsZXQgcmVzS2V5ID0gW107XHJcbiAgICBpZiAoZGF0YS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5jaGlsZE5vZGVzO1xyXG4gICAgICBjaGlsZHJlbi5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbkRhdGEoaXRlbS5jaGlsZE5vZGVzLCBrZXlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzS2V5ID0gWy4uLmtleXMsIGl0ZW1bcm93S2V5XV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc0tleSA9IFsuLi5rZXlzLCBkYXRhW3Jvd0tleV1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc0tleTtcclxuICB9XHJcblxyXG4gIHJlbmRlclRvb2xCdXR0b25zKHRvb2xidXR0b25zOiBhbnksIG1hcmdpbmZsYWcgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgZmxhZyA9IHRvb2xidXR0b25zLmxlbmd0aCA+IDU7XHJcbiAgICBjb25zdCB7IHNob3dTZWFyY2ggPSB0cnVlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgY29udGVudCA9IHRvb2xidXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCBpY29uLCBzaG93LCAuLi5wYXJhbXMgfSA9IGl0ZW0ucHJvcHM7XHJcbiAgICAgIGlmIChpbmRleCA+IDMpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NscyhcclxuICAgICAgICAgICAgICBnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZWRpdG9yXCIpLFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1jb250ZW50LWl0ZW1cIilcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljaygpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT57aWNvbn08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PntjaGlsZHJlbn08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdG9vbC1idXR0b25zXCIpLCB7XHJcbiAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRvb2wtYnV0dG9ucy1tYXJnaW5cIildOiAhc2hvd1NlYXJjaCB8fCBtYXJnaW5mbGFnLFxyXG4gICAgICAgIH0pfVxyXG4gICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6IDAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIHt0b29sYnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgNCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17aW5kZXh9PntpdGVtfTwvZGl2PjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSA0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgICAgICB0cmlnZ2VyPXtbXCJjbGlja1wiXX1cclxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAgICAgLy8gb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydwb3AtYm94J119XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICDmm7TlpJogPERvd25PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBrZXk9e2luZGV4fT57aXRlbX08L2Rpdj47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVuZGVyQ2xvdW1uQnV0dG9uKGNvbHVtbkJ1dHRvbnM6IGFueSwgcmVjb3JkOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgYWN0aW9uUG9ycHMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IGJhc2VBY3Rpb25Db2x1bW4gfSA9IGNvbmZpZygpO1xyXG4gICAgY29uc3QgbmV3QnV0dG9ucyA9IFtdO1xyXG4gICAgbGV0IHNob3dJY29uID0gdHJ1ZTtcclxuICAgIGlmIChhY3Rpb25Qb3Jwcz8uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgZWxzZSBpZiAoYmFzZUFjdGlvbkNvbHVtbi5zaG93SWNvbiA9PT0gZmFsc2UpIHNob3dJY29uID0gZmFsc2U7XHJcbiAgICBjb2x1bW5CdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCBpY29uLCByZWNvcmRTaG93LCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKHJlY29yZFNob3cpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHJlY29yZFNob3cgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgaWYgKGV2YWwocmVjb3JkU2hvdykpIHtcclxuICAgICAgICAgICAgbmV3QnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlY29yZFNob3cgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICBjb25zdCBzaG93ID0gcmVjb3JkU2hvdyhyZWNvcmQpO1xyXG4gICAgICAgICAgc2hvdyAmJiBuZXdCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0J1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBmbGFnID0gbmV3QnV0dG9ucy5sZW5ndGggPiAzO1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSBuZXdCdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCByZWNvcmRTaG93LCBpY29uLCBzaG93LCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGluZGV4ID4gMikge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKFxyXG4gICAgICAgICAgICAgIGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbnRlbnQtaXRlbVwiKVxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWljb25cIil9PntpY29ufTwvc3Bhbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGV4dFwiKX0+e2NoaWxkcmVufTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXdCdXR0b25zLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIHBhZ2VUeXBlLCBvbkNsaWNrLCByZWNvcmRTaG93LCBpY29uLCAuLi5wYXJhbXMgfSA9XHJcbiAgICAgICAgaXRlbS5wcm9wcztcclxuICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICBpZiAoaW5kZXggPCAzKSB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvclwiKSwge1xyXG4gICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3ItZmlyc3RcIildOiBpbmRleCA9PT0gMCxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgey4uLnBhcmFtc31cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtzaG93SWNvbiAhPT0gZmFsc2UgJiYgKFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtaWNvblwiKX0+e2ljb259PC9zcGFuPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGV4dFwiKX0+e2NoaWxkcmVufTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gMykge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgICAgIHRpdGxlPXtudWxsfVxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgdHJpZ2dlcj17W1wiY2xpY2tcIl19XHJcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgICAvLyBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ3BvcCddfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIil9PlxyXG4gICAgICAgICAgICAgICAgPEVsbGlwc2lzT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1lZGl0b3JcIiksIHtcclxuICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWVkaXRvci1maXJzdFwiKV06IGluZGV4ID09PSAwLFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIG9uQ2xpY2sgJiYgb25DbGljayhyZWNvcmQpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7c2hvd0ljb24gIT09IGZhbHNlICYmIChcclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1pY29uXCIpfT57aWNvbn08L3NwYW4+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXRleHRcIil9PntjaGlsZHJlbn08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgLy/moJHngrnlh7vkuovku7ZcclxuICB0cmVlU2VsZWN0KHNlbGVjdGVkS2V5czogYW55LCBvYmo6IGFueSkge1xyXG4gICAgbGV0IGtleXdvcmQgPSBcIlwiO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzZWFyY2hLZXkgPSBcImtleVwiLFxyXG4gICAgICBzZWFyY2hGaWVsZCA9IFwiXCIsXHJcbiAgICAgIHBhcmFudFNlbGVjdCA9IHRydWUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcy50cmVlUHJvcHM7XHJcbiAgICBjb25zdCB7IHRyZWVTZWxlY3RlZEtleSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWQsIHNlbGVjdGVkTm9kZXMgfSA9IG9iajtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAga2V5d29yZCA9IHNlbGVjdGVkTm9kZXNbMF0uZGF0YXJlZi5hdHRyaWJ1dGVbc2VhcmNoS2V5XTtcclxuICAgICAgaWYgKHBhcmFudFNlbGVjdCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBzZWxlY3RlZEtleXNbMF0sXHJcbiAgICAgICAgICB0cmVlU2VhcmNoUHJhbXM6IHsgW3NlYXJjaEZpZWxkXToga2V5d29yZCB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGVzWzBdLmlzTGVhZiB8fCAhc2VsZWN0ZWROb2Rlc1swXS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkS2V5c1swXSAhPT0gdHJlZVNlbGVjdGVkS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgIHRyZWVTZWxlY3RlZEtleTogc2VsZWN0ZWRLZXlzWzBdLFxyXG4gICAgICAgICAgICAgIHRyZWVTZWFyY2hQcmFtczogeyBbc2VhcmNoRmllbGRdOiBrZXl3b3JkIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBrZXl3b3JkLFxyXG4gICAgICAgIHRyZWVTZWFyY2hQcmFtczoge30sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMub25UcmVlU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMucHJvcHMub25UcmVlU2VsZWN0KHNlbGVjdGVkS2V5cywgb2JqKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWFyY2hSZWY/LmN1cnJlbnQ/LmdldFNlYXJjaFZhbHVlcygpIHx8IHt9O1xyXG4gICAgc2VhcmNoRmllbGQgJiYgdGhpcy50YWJsZUxvYWQoeyAuLi5mcm9tVmFsdWUsIFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSk7XHJcbiAgICB0aGlzLnByb3BzLm9uQ2FsbEJhY2tzPy50cmVlU2VsZWN0Q2FsbEJhY2sgJiZcclxuICAgICAgdXRpbHMuY2FsbGJhY2sodGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8udHJlZVNlbGVjdENhbGxCYWNrLCB0aGlzLCBbXHJcbiAgICAgICAgc2VsZWN0ZWRLZXlzLFxyXG4gICAgICAgIG9iaixcclxuICAgICAgXSk7XHJcbiAgfVxyXG4gIHJlc2V0U2VhcmNoKCkge1xyXG4gICAgdGhpcy5zZWFyY2hSZWYuY3VycmVudD8ucmVzZXRGaWVsZHMoKTtcclxuICB9XHJcbiAgZ2V0VGV4dChwcm9wcywgdGV4dCkge1xyXG4gICAgbGV0IG5ld1RleHQgPSB0ZXh0O1xyXG4gICAgaWYgKHByb3BzPy5kYXRhICYmIHByb3BzPy5kYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBkYXRhID0gcHJvcHMuZGF0YTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChkYXRhW2ldLnZhbHVlID09IHRleHQpIHtcclxuICAgICAgICAgIG5ld1RleHQgPSBkYXRhW2ldLmxhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld1RleHQ7XHJcbiAgfVxyXG4gIHNldFRhYmxlRGF0YShkYXRhKSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlPy5zZXREYXRhKGRhdGEpO1xyXG4gIH1cclxuICBzZXRUcmVlRGF0YShkYXRhKSB7XHJcbiAgICB0aGlzLnRyZWVSZWYuY3VycmVudD8uc3RvcmU/LnNldERhdGEoZGF0YSk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkS2V5ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICBsZXQgcmVzID0gW107XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gc2VsZWN0ZWQpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IHNlbGVjdGVkW2tleV07XHJcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXMgPSBbLi4ucmVzLCAuLi5rZXlzXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9O1xyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGNvbHVtbnMgPSBbXSxcclxuICAgICAgc2hvd1NlYXJjaCA9IHRydWUsXHJcbiAgICAgIGNoaWxkcmVuLFxyXG4gICAgICBzdWJtaXRVcmwgPSBcIlwiLFxyXG4gICAgICB0YWJsZVByb3BzID0ge30sXHJcbiAgICAgIHRyZWVQcm9wcyA9IHt9LFxyXG4gICAgICBmb3JtUHJvcHMgPSB7fSxcclxuICAgICAgc2hvd0xlZnQgPSBmYWxzZSxcclxuICAgICAgc3VibWl0UGFyYW1zID0ge30sXHJcbiAgICAgIHNob3dUb29sQnV0dG9uID0gdHJ1ZSxcclxuICAgICAgYnV0dG9ucyA9IFtdLFxyXG4gICAgICBlZGl0b3JGb3JtID0gdHJ1ZSxcclxuICAgICAgb25TaG93Rm9ybSxcclxuICAgICAgZm9ybUNoYW5nZVZhbGlkID0gdHJ1ZSxcclxuICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICB0b29sQnV0dG9uUG9zaXRpb24gPSBcImJ1dHRvbVwiLFxyXG4gICAgICBhY3Rpb25Qb3JwcyxcclxuICAgICAgZGVsZXRlUG9zaXRpb24gPSBcInRvb2xiYXJcIixcclxuICAgIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBzdG9yZSxcclxuICAgICAgZmlsdGVyQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgYWN0aW9uQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgc2hvd1Jvd1NlbGVjdGlvbiA9IHRydWUsXHJcbiAgICAgIGNvbHVtbk9yZGVyID0gdHJ1ZSxcclxuICAgICAgZXhwYW5kYWJsZSA9IHt9LFxyXG4gICAgICBwYXJhbnRTZWxlY3QgPSB0cnVlLFxyXG4gICAgICAuLi5vdGhlcnRhYmxlUGFyYW1zXHJcbiAgICB9ID0gdGFibGVQcm9wcztcclxuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0cmVlU3RvcmUgPSB7fSxcclxuICAgICAgc2hvd1NlYXJjaDogdHJlZVNlYXJjaCA9IHRydWUsXHJcbiAgICAgIHRpdGxlQWxpYXMgPSBcInRpdGxlXCIsXHJcbiAgICAgIC4uLm90aGVydHJlZVBhcmFtc1xyXG4gICAgfSA9IHRyZWVQcm9wcztcclxuXHJcbiAgICBsZXQgdGFibGVQYXJhbXMgPSB7IGZpbHRlckNvbHVtbiwgc3RvcmUsIC4uLm90aGVydGFibGVQYXJhbXMgfSBhcyBhbnk7XHJcbiAgICBsZXQgdGFibGVDb2x1bW46IGFueVtdID0gW107XHJcbiAgICBjb25zdCBzZWFyY2hGb3JtczogYW55ID0gW107XHJcbiAgICBjb25zdCBlZGl0b3JGb3JtczogYW55ID0gW107XHJcbiAgICBjb25zdCBkZWZhdWx0VmFsdWU6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgY29sdW1uQnV0dG9uczogYW55ID0gW107XHJcbiAgICBjb2x1bW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0ZW1wID0geyAuLi5pdGVtIH07XHJcbiAgICAgIGlmICh0ZW1wLnNlYXJjaCA9PT0gdHJ1ZSB8fCB0ZW1wLnNlYXJjaD8uc2hvdyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHNlYXJjaEZvcm1zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogdGVtcC5maWVsZCB8fCB0ZW1wLmRhdGFJbmRleCxcclxuICAgICAgICAgIGxhYmVsOiB0ZW1wLnNlYXJjaD8ubGFiZWwgfHwgdGVtcC50aXRsZSxcclxuICAgICAgICAgIHR5cGU6IHRlbXAudHlwZSxcclxuICAgICAgICAgIHByb3BzOiB0ZW1wLnByb3BzLFxyXG4gICAgICAgICAgbGFiZWxDb2w6IHRlbXAuc2VhcmNoPy5sYWJlbENvbCxcclxuICAgICAgICAgIHdyYXBwZXJDb2w6IHRlbXAuc2VhcmNoPy53cmFwcGVyQ29sLFxyXG4gICAgICAgICAgcnVsZXM6IHRlbXAuc2VhcmNoUnVsZXMgPyB0ZW1wLnNlYXJjaFJ1bGVzIDogW10sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnNlYXJjaDtcclxuICAgICAgdGVtcC5lZGl0b3IgIT09IGZhbHNlICYmXHJcbiAgICAgICAgZWRpdG9yRm9ybXMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiB0ZW1wLmZpZWxkIHx8IHRlbXAuZGF0YUluZGV4LFxyXG4gICAgICAgICAgbGFiZWw6IHRlbXAudGl0bGUsXHJcbiAgICAgICAgICBydWxlczogdGVtcC5ydWxlcyA/IHRlbXAucnVsZXMgOiBbXSxcclxuICAgICAgICAgIHR5cGU6IHRlbXAudHlwZSxcclxuICAgICAgICAgIHNwYW46IHRlbXAuc3BhbixcclxuICAgICAgICAgIGRpY3ROYW1lOiB0ZW1wLmRpY3ROYW1lLFxyXG4gICAgICAgICAgcHJvcHM6IHsgLi4udGVtcC5wcm9wcyB9LFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRlbXAucHJvcHM/LmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgdGVtcC5wcm9wcz8uZGVmYXVsdFZhbHVlICE9PSBudWxsXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB0ZW1wLmZpZWxkIHx8IHRlbXAuZGF0YUluZGV4O1xyXG4gICAgICAgIGRlZmF1bHRWYWx1ZVtuYW1lXSA9IHRlbXAucHJvcHM/LmRlZmF1bHRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC5ydWxlcztcclxuICAgICAgZGVsZXRlIHRlbXAuc3BhbjtcclxuICAgICAgaWYgKHRlbXAuY29sdW1uU2VhcmNoKSB7XHJcbiAgICAgICAgdGVtcC5maWx0ZXJQcm9wcyA9IHtcclxuICAgICAgICAgIHR5cGU6IHRlbXAudHlwZSxcclxuICAgICAgICAgIHByb3BzOiB0ZW1wLnByb3BzLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAudHlwZTtcclxuICAgICAgbGV0IHRlbXBQcm9wID0geyAuLi50ZW1wLnByb3BzIH07XHJcbiAgICAgIGlmICh0ZW1wLnN0eWxlKSB7XHJcbiAgICAgICAgdGVtcCA9IHtcclxuICAgICAgICAgIHJlbmRlcjogKHRleHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICB7dGV4dCAhPT0gXCJcIiAmJiB0ZXh0ICE9PSBudWxsICYmIHRleHQgIT09IHVuZGVmaW5lZCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtY29sLWJhY2tcIil9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLWNvbC10ZXh0XCIpfT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmdldFRleHQodGVtcFByb3AsIHRleHQpfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLnRlbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIGlmICghdGVtcC5lbGxpcHNpcykge1xyXG4gICAgICAgIHRlbXAgPSB7XHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIDw+e3RoaXMuZ2V0VGV4dCh0ZW1wUHJvcCwgdGV4dCl9PC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLnRlbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ZW1wID0geyAuLi50ZW1wIH07XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRlbXAucHJvcHM7XHJcbiAgICAgIGlmICh0ZW1wPy5jb2x1bW5TaG93ICE9PSBmYWxzZSkgdGFibGVDb2x1bW4ucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc2VsZkJ1dHRvbnM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgeyBiYXNlQWN0aW9uQ29sdW1uIH0gPSBjb25maWcoKTtcclxuICAgIGxldCBzaG93SWNvbiA9IHRydWU7XHJcbiAgICBpZiAoYWN0aW9uUG9ycHM/LnNob3dJY29uID09PSBmYWxzZSkgc2hvd0ljb24gPSBmYWxzZTtcclxuICAgIGVsc2UgaWYgKGJhc2VBY3Rpb25Db2x1bW4uc2hvd0ljb24gPT09IGZhbHNlKSBzaG93SWNvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGVkaXRvckZvcm0gPT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwic2VhcmNoXCIpID4gLTEpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhyZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChvblNob3dGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBvblNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImRldGFpbFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93Rm9ybShyZWNvcmQuYXR0cmlidXRlIHx8IHJlY29yZCwgXCJkZXRhaWxcIik7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIGljb249ezxFeWVPdXRsaW5lZCAvPn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5p+l55yLXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChidXR0b25zLmluZGV4T2YoXCJlZGl0b3JcIikgPiAtMSkge1xyXG4gICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgb25DbGljaz17KHJlY29yZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG9uU2hvd0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9uU2hvd0Zvcm0ocmVjb3JkLmF0dHJpYnV0ZSB8fCByZWNvcmQsIFwiZWRpdG9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKHJlY29yZC5hdHRyaWJ1dGUgfHwgcmVjb3JkLCBcImVkaXRvclwiKTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgaWNvbj17PEVkaXRPdXRsaW5lZCAvPn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg57yW6L6RXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiYWRkXCIpID4gLTEpIHtcclxuICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBvblNob3dGb3JtIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgICAgICBpZiAob25TaG93Rm9ybSkge1xyXG4gICAgICAgICAgICAgIG9uU2hvd0Zvcm0oKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybSgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGljb249ezxQbHVzT3V0bGluZWQgLz59XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg5re75YqgXHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoYnV0dG9ucy5pbmRleE9mKFwiZGVsZXRlXCIpID4gLTEpIHtcclxuICAgICAgaWYgKGRlbGV0ZVBvc2l0aW9uID09IFwidG9vbGJhclwiKSB7XHJcbiAgICAgICAgc2VsZkJ1dHRvbnMucHVzaChcclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgLy8gdHlwZT17XCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25EZWxldGUuYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgaWNvbj17PERlbGV0ZU91dGxpbmVkIC8+fVxyXG4gICAgICAgICAgICBkYW5nZXJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg5Yig6ZmkXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKGRlbGV0ZVBvc2l0aW9uID09IFwicm93XCIpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIC8vIHR5cGU9e1wicHJpbWFyeVwifVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsocmVjb3JkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIGljb249ezxEZWxldGVPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgZGFuZ2VyXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIOWIoOmZpFxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XHJcbiAgICAgIGNoaWxkcmVuLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcclxuICAgICAgICAgIGl0ZW0ubWFwKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQ/LnByb3BzPy5wYWdlVHlwZSA9PSBcInRvb2xCdXR0b25cIikge1xyXG4gICAgICAgICAgICAgIHNlbGZCdXR0b25zLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkPy5wcm9wcz8ucGFnZVR5cGUgPT0gXCJjbG91bW5CdXR0b25cIikge1xyXG4gICAgICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoaXRlbT8ucHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgICAgIHNlbGZCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0/LnByb3BzPy5wYWdlVHlwZSA9PSBcImNsb3VtbkJ1dHRvblwiKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCB7IHByb3BzIH06IGFueSA9IGNoaWxkcmVuO1xyXG4gICAgICBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgc2VsZkJ1dHRvbnMucHVzaChjaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJvcHM/LnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhY3Rpb25Db2x1bW4gJiZcclxuICAgICAgdGFibGVDb2x1bW4ucHVzaCh7XHJcbiAgICAgICAgdGl0bGU6IFwi5pON5L2cXCIsXHJcbiAgICAgICAgZGF0YUluZGV4OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGFsaWduOiBhY3Rpb25Qb3Jwcz8udGV4dEFsaWduXHJcbiAgICAgICAgICA/IGFjdGlvblBvcnBzPy50ZXh0QWxpZ25cclxuICAgICAgICAgIDogYmFzZUFjdGlvbkNvbHVtbi50ZXh0QWxpZ25cclxuICAgICAgICAgID8gYmFzZUFjdGlvbkNvbHVtbi50ZXh0QWxpZ25cclxuICAgICAgICAgIDogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogYWN0aW9uUG9ycHM/LndpZHRoXHJcbiAgICAgICAgICA/IGFjdGlvblBvcnBzPy53aWR0aFxyXG4gICAgICAgICAgOiBiYXNlQWN0aW9uQ29sdW1uLndpZHRoXHJcbiAgICAgICAgICA/IGJhc2VBY3Rpb25Db2x1bW4ud2lkdGhcclxuICAgICAgICAgIDogMjAwLFxyXG4gICAgICAgIGZpeGVkOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgcmVuZGVyOiAodGV4dDogYW55LCByZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1hY3Rpb25cIil9PlxyXG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckNsb3VtbkJ1dHRvbihjb2x1bW5CdXR0b25zLCByZWNvcmQpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICBpZiAoY29sdW1uT3JkZXIpXHJcbiAgICAgIHRhYmxlQ29sdW1uID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIuW6j+WPt1wiLFxyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICByZW5kZXI6ICh0ZXh0LCByZWFjb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPD57aW5kZXggKyAxfTwvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50YWJsZUNvbHVtbixcclxuICAgICAgXTtcclxuICAgIGxldCBzZWFyY2hGbGFnID0gc2hvd1NlYXJjaCAmJiBzZWFyY2hGb3Jtcy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHsgdGFibGVUb29sIH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29sRmxhZyA9IHNob3dUb29sQnV0dG9uICYmIHNlbGZCdXR0b25zLmxlbmd0aCA+IDA7XHJcbiAgICBsZXQgdG9vbGJhckZsYWcgPSAhKFxyXG4gICAgICB0YWJsZVByb3BzLnRvb2xiYXIgPT0gZmFsc2UgfHxcclxuICAgICAgdGFibGVQcm9wcy50b29sYmFyPy5zaG93ID09IGZhbHNlIHx8XHJcbiAgICAgIHRhYmxlUHJvcHMudG9vbGJhcj8udG9vbHM/Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgIHRhYmxlVG9vbD8uc2hvdyA9PSBmYWxzZVxyXG4gICAgKTtcclxuICAgIGlmICh0YWJsZVByb3BzLnBhZ2luYXRpb24gIT09IGZhbHNlKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbCA9IHRhYmxlUGFyYW1zLnNjcm9sbDtcclxuICAgICAgdGFibGVQYXJhbXMgPSB7XHJcbiAgICAgICAgLi4udGFibGVQYXJhbXMsXHJcbiAgICAgICAgc2Nyb2xsOiB7IHg6IFwibWF4LWNvbnRlbnRcIiwgLi4uc2Nyb2xsIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2VcIiksIGNsYXNzTmFtZSl9PlxyXG4gICAgICAgIHt0aGlzLnByb3BzLnBhZ2VUaXRsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10aXRsZVwiKSl9PlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5wYWdlVGl0bGV9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1wYW5lXCIpKX1cclxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3Nob3dMZWZ0ICYmIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1sZWZ0XCIpfT5cclxuICAgICAgICAgICAgICA8VHJlZVxyXG4gICAgICAgICAgICAgICAgc3RvcmU9e3sgLi4udHJlZVN0b3JlIH19XHJcbiAgICAgICAgICAgICAgICBzaG93SWNvbj17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgICBjaGVja2FibGU9e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgc2VhcmNoYWJsZT17dHJlZVNlYXJjaH1cclxuICAgICAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnRyZWVTZWxlY3QuYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkS2V5cz17W3RoaXMuc3RhdGUudHJlZVNlbGVjdGVkS2V5XX1cclxuICAgICAgICAgICAgICAgIHRpdGxlQWxpYXM9e3RpdGxlQWxpYXN9XHJcbiAgICAgICAgICAgICAgICB7Li4ub3RoZXJ0cmVlUGFyYW1zfVxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLWJhc2VwYWdlLXJpZ2h0XCIpLCB7XHJcbiAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS1uby1sZWZ0LXJpZ2h0XCIpXTogIXNob3dMZWZ0LFxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3Nob3dTZWFyY2ggJiYgc2VhcmNoRm9ybXMubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICAgICAgPEhlYWRlclNlYXJjaFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoRm9ybXM9e3NlYXJjaEZvcm1zfVxyXG4gICAgICAgICAgICAgICAgdG9vbEJ1dHRvblBvc2l0aW9uPXt0b29sQnV0dG9uUG9zaXRpb259XHJcbiAgICAgICAgICAgICAgICBvblNlYXJjaD17dGhpcy5vblNlYXJjaC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgb25SZXNldD17dGhpcy5wcm9wcy5vblJlc2V0fVxyXG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnNlYXJjaFJlZn1cclxuICAgICAgICAgICAgICAgIHNlYXJjaEZvcm1Qcm9wcz17dGhpcy5wcm9wcy5zZWFyY2hGb3JtUHJvcHN9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgIHtzaG93VG9vbEJ1dHRvbiAmJlxyXG4gICAgICAgICAgICAgIHNlbGZCdXR0b25zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICB0b29sQnV0dG9uUG9zaXRpb24gPT0gXCJidXR0b21cIiAmJlxyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyVG9vbEJ1dHRvbnMoc2VsZkJ1dHRvbnMsIHNlYXJjaEZvcm1zLmxlbmd0aCA9PSAwKX1cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzKGdldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZVwiKSwge1xyXG4gICAgICAgICAgICAgICAgW2dldExlc3Moc3R5bGVzLCBcIm5zYy1iYXNlcGFnZS10YWJsZS10b3BcIildOlxyXG4gICAgICAgICAgICAgICAgICAoc2VhcmNoRmxhZyAmJiAhdG9vbEZsYWcpIHx8ICF0b29sYmFyRmxhZyxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtdGFibGUtdG9wMlwiKV06ICFzZWFyY2hGbGFnICYmICF0b29sRmxhZyxcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnRhYmxlUmVmfVxyXG4gICAgICAgICAgICAgICAgY29sdW1ucz17dGFibGVDb2x1bW59XHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZEljb246ICh7IGV4cGFuZGVkLCBvbkV4cGFuZCwgcmVjb3JkIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2V4cGFuZGVkID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxEb3duT3V0bGluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvbkV4cGFuZChyZWNvcmQsIGUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZXhwYW5kLWljb25cIil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuY2hpbGROb2RlcyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmlnaHRPdXRsaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gb25FeHBhbmQocmVjb3JkLCBlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtYmFzZXBhZ2UtZXhwYW5kLWljb25cIil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIC4uLmV4cGFuZGFibGUsXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgY29sdW1uT3JkZXI9e3RydWV9XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHBhZ2luYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgeyBjdXJyZW50UGFnZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlICE9PSBwYWdpbmF0aW9uLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICB0b29sYmFyPXt7XHJcbiAgICAgICAgICAgICAgICAgIG9uVG9vbENsaWNrOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25SZWZyZXNoOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmdldFNlYXJjaFZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUxvYWQocGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAuLi50YWJsZVByb3BzLnRvb2xiYXIsXHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgc2hvd1Jvd1NlbGVjdGlvbj17c2hvd1Jvd1NlbGVjdGlvbn1cclxuICAgICAgICAgICAgICAgIHsuLi50YWJsZVBhcmFtc31cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAge2VkaXRvckZvcm0gJiYgKFxyXG4gICAgICAgICAgICA8RWRpdG9yRm9ybVxyXG4gICAgICAgICAgICAgIHJlZj17dGhpcy5lZGl0b3JSZWZ9XHJcbiAgICAgICAgICAgICAgY2FsbEJhY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DYWxsQmFja3M/Lm9uU3VtYml0Q2FsbEJhY2sgJiZcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNhbGxCYWNrcz8ub25TdW1iaXRDYWxsQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVJlbG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgZm9ybVByb3BzPXtlZGl0b3JGb3Jtc31cclxuICAgICAgICAgICAgICBzdWJtaXRVcmw9e3N1Ym1pdFVybH1cclxuICAgICAgICAgICAgICBzdWJtaXRQYXJhbXM9e3N1Ym1pdFBhcmFtc31cclxuICAgICAgICAgICAgICBvblN1Ym1pdD17dGhpcy5wcm9wcy5vblN1Ym1pdH1cclxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cclxuICAgICAgICAgICAgICBvbkhpZGVGb3JtPXt0aGlzLnByb3BzLm9uSGlkZUZvcm19XHJcbiAgICAgICAgICAgICAgb25Gb3JtQ2hhbmdlPXt0aGlzLnByb3BzLm9uRm9ybUNoYW5nZX1cclxuICAgICAgICAgICAgICBmb3JtVHlwZT17dGhpcy5wcm9wcy5mb3JtVHlwZSB8fCBcImF1dG9cIn1cclxuICAgICAgICAgICAgICBjaGFuZ2VWYWxpZD17Zm9ybUNoYW5nZVZhbGlkfVxyXG4gICAgICAgICAgICAgIG90aGVyUHJvcHM9e3sgLi4uZm9ybVByb3BzIH19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IEJhc2VQYWdlO1xyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxhQUFhLFFBQW1CLE9BQU87QUFDdkQsT0FBT0MsS0FBSyxNQUFNLGtCQUFrQjtBQUNwQyxPQUFPQyxJQUFJLE1BQU0saUJBQWlCO0FBRWxDLE9BQU9DLE1BQU0sTUFBTSxtQkFBbUI7QUFDdEMsT0FBT0MsS0FBSyxNQUFNLGtCQUFrQjtBQUNwQyxPQUFPQyxPQUFPLE1BQU0s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
|