nsc-react-component 4.3.13 → 4.4.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/menu/index.d.ts +7 -9
- package/lib/base/menu/index.js +73 -67
- package/lib/base/menu/index.js.map +1 -1
- package/lib/base/table/index.d.ts +5 -2
- package/lib/base/table/index.js +191 -51
- package/lib/base/table/index.js.map +1 -1
- package/lib/page/BasePage/index.d.ts +1 -0
- package/lib/page/BasePage/index.js +47 -58
- package/lib/page/BasePage/index.js.map +1 -1
- package/package.json +1 -1
package/lib/base/table/index.js
CHANGED
|
@@ -44,6 +44,7 @@ import NoData from "../../base/common/NoData";
|
|
|
44
44
|
import { getStorage } from "@bj-nsc/functions";
|
|
45
45
|
import config from "../../config";
|
|
46
46
|
import cls from "classnames";
|
|
47
|
+
import { guid, getFlattenData } from "@bj-nsc/functions";
|
|
47
48
|
const styles = null;
|
|
48
49
|
|
|
49
50
|
// interface StoreProps {}
|
|
@@ -218,17 +219,48 @@ class NSCTable extends React.Component {
|
|
|
218
219
|
}));
|
|
219
220
|
}
|
|
220
221
|
}
|
|
222
|
+
getInitCheckedColumns(columns) {
|
|
223
|
+
let checkedKeys = [];
|
|
224
|
+
const traverse = cols => {
|
|
225
|
+
cols.forEach(col => {
|
|
226
|
+
// 如果列没有明确设置 initShow 为 false,则认为是默认选中的
|
|
227
|
+
if (col.initShow !== false) {
|
|
228
|
+
checkedKeys.push(col.uniqueKey);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// 递归处理子列
|
|
232
|
+
if (col.children && col.children.length > 0) {
|
|
233
|
+
traverse(col.children);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
traverse(columns);
|
|
238
|
+
return checkedKeys;
|
|
239
|
+
}
|
|
221
240
|
componentDidMount() {
|
|
222
241
|
const {
|
|
223
242
|
resizeColumn
|
|
224
243
|
} = this.props;
|
|
244
|
+
const newColumns = this.generateUniqueKeysAndPaths(this.props.columns);
|
|
245
|
+
const defaultCheckedColumns = this.getInitCheckedColumns(newColumns);
|
|
225
246
|
if (!resizeColumn) {
|
|
226
247
|
this.setState({
|
|
227
|
-
columns:
|
|
248
|
+
columns: newColumns,
|
|
249
|
+
storeColumns: [...this.props.columns],
|
|
250
|
+
checkColumn: defaultCheckedColumns,
|
|
251
|
+
keyColumns: newColumns
|
|
228
252
|
});
|
|
229
253
|
} else {
|
|
230
254
|
this.setState({
|
|
231
|
-
cols:
|
|
255
|
+
cols: newColumns,
|
|
256
|
+
//修改列宽
|
|
257
|
+
columns: newColumns,
|
|
258
|
+
//table组件使用
|
|
259
|
+
storeColumns: [...this.props.columns],
|
|
260
|
+
//原始列,用于判断是有列有更新
|
|
261
|
+
checkColumn: defaultCheckedColumns,
|
|
262
|
+
//默认选中的列
|
|
263
|
+
keyColumns: newColumns //提供带标识的完整列结构,用于构建列选择界面
|
|
232
264
|
});
|
|
233
265
|
}
|
|
234
266
|
const store = this.props.store;
|
|
@@ -245,9 +277,12 @@ class NSCTable extends React.Component {
|
|
|
245
277
|
resizeColumn
|
|
246
278
|
} = this.props;
|
|
247
279
|
if (!resizeColumn) {
|
|
248
|
-
if (this.props.
|
|
280
|
+
if (this.props.storeColumns !== prevProps.storeColumns) {
|
|
281
|
+
const newColumns = this.generateUniqueKeysAndPaths(this.props.columns);
|
|
249
282
|
this.setState({
|
|
250
|
-
columns:
|
|
283
|
+
columns: newColumns,
|
|
284
|
+
storeColumns: this.props.storeColumns,
|
|
285
|
+
keyColumns: newColumns
|
|
251
286
|
});
|
|
252
287
|
}
|
|
253
288
|
} else {
|
|
@@ -255,9 +290,11 @@ class NSCTable extends React.Component {
|
|
|
255
290
|
this.resetColumn();
|
|
256
291
|
}
|
|
257
292
|
if (this.props.columns !== prevProps.columns) {
|
|
293
|
+
const newColumns = this.generateUniqueKeysAndPaths(this.props.columns);
|
|
258
294
|
this.setState({
|
|
259
|
-
|
|
260
|
-
|
|
295
|
+
columns: newColumns,
|
|
296
|
+
storeColumns: this.props.columns,
|
|
297
|
+
keyColumns: newColumns
|
|
261
298
|
});
|
|
262
299
|
}
|
|
263
300
|
if (prevProps.size !== this.props.size) {
|
|
@@ -378,36 +415,112 @@ class NSCTable extends React.Component {
|
|
|
378
415
|
searchColor: searchColor
|
|
379
416
|
});
|
|
380
417
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
return;
|
|
418
|
+
// 在类中添加一个新的辅助方法
|
|
419
|
+
filterColumnsByCheckedKeys(columns, checkedKeys) {
|
|
420
|
+
if (!columns || !Array.isArray(columns) || columns.length === 0) {
|
|
421
|
+
return [];
|
|
385
422
|
}
|
|
386
|
-
const
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
423
|
+
const result = [];
|
|
424
|
+
columns.forEach(col => {
|
|
425
|
+
// 检查当前列是否在选中列表中
|
|
426
|
+
const isColumnChecked = checkedKeys.includes(col.uniqueKey);
|
|
427
|
+
if (isColumnChecked) {
|
|
428
|
+
// 如果当前列被选中,直接添加
|
|
429
|
+
const newCol = _objectSpread({}, col);
|
|
430
|
+
// 如果有子列,递归处理
|
|
431
|
+
if (newCol.children && newCol.children.length > 0) {
|
|
432
|
+
newCol.children = this.filterColumnsByCheckedKeys(newCol.children, checkedKeys);
|
|
433
|
+
}
|
|
434
|
+
result.push(newCol);
|
|
390
435
|
} else {
|
|
391
|
-
|
|
436
|
+
// 如果当前列未被选中,检查是否有子列被选中
|
|
437
|
+
if (col.children && col.children.length > 0) {
|
|
438
|
+
const filteredChildren = this.filterColumnsByCheckedKeys(col.children, checkedKeys);
|
|
439
|
+
if (filteredChildren.length > 0) {
|
|
440
|
+
// 如果有子列被选中,则添加该列(作为容器)
|
|
441
|
+
const newCol = _objectSpread({}, col);
|
|
442
|
+
newCol.children = filteredChildren;
|
|
443
|
+
result.push(newCol);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
392
446
|
}
|
|
393
|
-
return newCol;
|
|
394
447
|
});
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
448
|
+
return result;
|
|
449
|
+
}
|
|
450
|
+
filterColumn(checkedValue, isChecked, mapData) {
|
|
451
|
+
const col = mapData[checkedValue];
|
|
452
|
+
let currentCheckedKeys = [...this.state.checkColumn];
|
|
453
|
+
// 获取所有子节点的 keys(包括深层嵌套的节点)
|
|
454
|
+
const getAllChildrenKeys = column => {
|
|
455
|
+
let keys = [];
|
|
456
|
+
if (column.children && column.children.length > 0) {
|
|
457
|
+
column.children.forEach(child => {
|
|
458
|
+
keys.push(child.uniqueKey);
|
|
459
|
+
keys = keys.concat(getAllChildrenKeys(child));
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
return keys;
|
|
463
|
+
};
|
|
464
|
+
if (col.children) {
|
|
465
|
+
// 处理父节点
|
|
466
|
+
const allChildrenKeys = getAllChildrenKeys(col);
|
|
467
|
+
if (isChecked) {
|
|
468
|
+
// 选中父节点:添加父节点和所有子孙节点
|
|
469
|
+
if (!currentCheckedKeys.includes(col.uniqueKey)) {
|
|
470
|
+
currentCheckedKeys.push(col.uniqueKey);
|
|
471
|
+
}
|
|
472
|
+
allChildrenKeys.forEach(key => {
|
|
473
|
+
if (!currentCheckedKeys.includes(key)) {
|
|
474
|
+
currentCheckedKeys.push(key);
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
} else {
|
|
478
|
+
// 取消选中父节点:移除父节点和所有子孙节点
|
|
479
|
+
currentCheckedKeys = currentCheckedKeys.filter(key => key !== col.uniqueKey && !allChildrenKeys.includes(key));
|
|
480
|
+
}
|
|
404
481
|
} else {
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
482
|
+
// 处理叶子节点
|
|
483
|
+
if (isChecked) {
|
|
484
|
+
if (!currentCheckedKeys.includes(col.uniqueKey)) {
|
|
485
|
+
currentCheckedKeys.push(col.uniqueKey);
|
|
486
|
+
}
|
|
487
|
+
} else {
|
|
488
|
+
currentCheckedKeys = currentCheckedKeys.filter(key => key !== col.uniqueKey);
|
|
489
|
+
|
|
490
|
+
// 检查父节点是否需要取消选中
|
|
491
|
+
if (col.path) {
|
|
492
|
+
const pathParts = col.path.split("/");
|
|
493
|
+
// 从当前节点向上遍历所有父节点
|
|
494
|
+
for (let i = pathParts.length - 2; i >= 0; i--) {
|
|
495
|
+
const parentPath = pathParts.slice(0, i + 1).join("/");
|
|
496
|
+
const parentCol = Object.values(mapData).find(c => c.path === parentPath);
|
|
497
|
+
if (parentCol) {
|
|
498
|
+
// 检查父节点是否还有其他子节点被选中
|
|
499
|
+
const allSiblings = getAllChildrenKeys(parentCol);
|
|
500
|
+
const hasCheckedSibling = allSiblings.some(key => key !== col.uniqueKey && currentCheckedKeys.includes(key));
|
|
501
|
+
if (!hasCheckedSibling) {
|
|
502
|
+
currentCheckedKeys = currentCheckedKeys.filter(key => key !== parentCol.uniqueKey);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
if (currentCheckedKeys.length === 0) {
|
|
510
|
+
_message.warning("至少显示一列!");
|
|
511
|
+
return;
|
|
410
512
|
}
|
|
513
|
+
const {
|
|
514
|
+
keyColumns
|
|
515
|
+
} = this.state;
|
|
516
|
+
const filterColumns = this.filterColumnsByCheckedKeys(keyColumns, currentCheckedKeys);
|
|
517
|
+
|
|
518
|
+
// 更新状态
|
|
519
|
+
this.setState({
|
|
520
|
+
checkColumn: currentCheckedKeys,
|
|
521
|
+
columns: filterColumns,
|
|
522
|
+
cols: filterColumns
|
|
523
|
+
});
|
|
411
524
|
}
|
|
412
525
|
getSortParam(sorter) {
|
|
413
526
|
let sortState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
@@ -478,7 +591,7 @@ class NSCTable extends React.Component {
|
|
|
478
591
|
sortFields = [],
|
|
479
592
|
size = "large"
|
|
480
593
|
} = this.props;
|
|
481
|
-
const defaultShowCols = columns
|
|
594
|
+
const defaultShowCols = [...columns];
|
|
482
595
|
const cols = defaultShowCols.map((col, index) => {
|
|
483
596
|
// 替换 getColumns 方法中原来的 ellipsis 处理部分
|
|
484
597
|
if (col.ellipsis && !col.render) {
|
|
@@ -611,10 +724,43 @@ class NSCTable extends React.Component {
|
|
|
611
724
|
});
|
|
612
725
|
return cols;
|
|
613
726
|
}
|
|
727
|
+
generateUniqueKeysAndPaths(columns) {
|
|
728
|
+
let parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
|
|
729
|
+
let level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
730
|
+
return columns.map((col, index) => {
|
|
731
|
+
// 生成唯一key
|
|
732
|
+
const uniqueKey = col.uniqueKey || guid();
|
|
733
|
+
|
|
734
|
+
// 构建当前节点的path,格式为: parentPath/identifier_key
|
|
735
|
+
const currentPath = parentPath ? "".concat(parentPath, "/").concat(uniqueKey) : "".concat(uniqueKey);
|
|
736
|
+
|
|
737
|
+
// 创建新的列对象
|
|
738
|
+
const newCol = _objectSpread(_objectSpread({}, col), {}, {
|
|
739
|
+
uniqueKey: uniqueKey,
|
|
740
|
+
path: currentPath
|
|
741
|
+
});
|
|
742
|
+
|
|
743
|
+
// 判断是否为叶子节点
|
|
744
|
+
if (!newCol.children || newCol.children.length === 0) {
|
|
745
|
+
// 最后一层子项
|
|
746
|
+
newCol.leaf = true;
|
|
747
|
+
} else {
|
|
748
|
+
// 有子项的节点
|
|
749
|
+
newCol.leaf = false;
|
|
750
|
+
|
|
751
|
+
// 递归处理子项
|
|
752
|
+
newCol.children = this.generateUniqueKeysAndPaths(newCol.children, currentPath, level + 1);
|
|
753
|
+
|
|
754
|
+
// 为父节点添加所有子项的uniqueKey数组
|
|
755
|
+
newCol.childrenKeys = newCol.children.map(child => child.uniqueKey);
|
|
756
|
+
}
|
|
757
|
+
return newCol;
|
|
758
|
+
});
|
|
759
|
+
}
|
|
614
760
|
renderToolBar() {
|
|
615
761
|
let {
|
|
616
762
|
tableSize,
|
|
617
|
-
|
|
763
|
+
keyColumns,
|
|
618
764
|
sortType
|
|
619
765
|
} = this.state;
|
|
620
766
|
let {
|
|
@@ -738,22 +884,18 @@ class NSCTable extends React.Component {
|
|
|
738
884
|
}
|
|
739
885
|
}), /*#__PURE__*/React.createElement("div", null, " ", item.title)));
|
|
740
886
|
}));
|
|
741
|
-
const
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
})
|
|
754
|
-
// defaultValue={defaultShowCols.map((col) => col.dataIndex)}
|
|
755
|
-
,
|
|
756
|
-
value: this.state.defaultCheck ? defaultShowCols.map(col => col.dataIndex) : this.state.checkColumn
|
|
887
|
+
const newMapData = getFlattenData(keyColumns, {
|
|
888
|
+
keyField: "uniqueKey",
|
|
889
|
+
childField: "children"
|
|
890
|
+
});
|
|
891
|
+
const content = Object.keys(newMapData).map(key => {
|
|
892
|
+
return /*#__PURE__*/React.createElement(_Checkbox, {
|
|
893
|
+
key: key,
|
|
894
|
+
onChange: e => {
|
|
895
|
+
this.filterColumn(key, e.target.checked, newMapData);
|
|
896
|
+
},
|
|
897
|
+
checked: this.state.checkColumn.includes(newMapData[key].uniqueKey)
|
|
898
|
+
}, newMapData[key].title);
|
|
757
899
|
});
|
|
758
900
|
return /*#__PURE__*/React.createElement("div", {
|
|
759
901
|
className: getLess(styles, "nsc-table-tool-bar")
|
|
@@ -966,8 +1108,6 @@ class NSCTable extends React.Component {
|
|
|
966
1108
|
tableTool
|
|
967
1109
|
} = config();
|
|
968
1110
|
let toolFlag = false;
|
|
969
|
-
// console.log('tableTool',tableTool)
|
|
970
|
-
|
|
971
1111
|
if (tableTool.show === true) {
|
|
972
1112
|
toolFlag = true;
|
|
973
1113
|
}
|
|
@@ -1055,4 +1195,4 @@ _defineProperty(NSCTable, "defaultProps", {
|
|
|
1055
1195
|
}
|
|
1056
1196
|
});
|
|
1057
1197
|
export default withZhLocale(NSCTable);
|
|
1058
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBzdG9yZU91dGxpbmVkIiwiQ2hlY2tPdXRsaW5lZCIsIkNvbHVtbkhlaWdodE91dGxpbmVkIiwiU2VhcmNoT3V0bGluZWQiLCJTb3J0QXNjZW5kaW5nT3V0bGluZWQiLCJTb3J0RGVzY2VuZGluZ091dGxpbmVkIiwiUmVkb091dGxpbmVkIiwiaXNFbXB0eU9iaiIsIlN0b3JlIiwiUGFnZVN0b3JlIiwidXRpbHMiLCJSZWFjdCIsIkRuZFByb3ZpZGVyIiwiQm9keVJvdyIsIkRuZENvbnRleHRUeXBlIiwiSUJvZHlSb3dQcm9wcyIsInRyZWVVdGlscyIsIkJvZHlSb3dDb21wb25lbnQiLCJIVE1MNUJhY2tlbmQiLCJ3aXRoWmhMb2NhbGUiLCJSZXNpemFibGUiLCJnZXRMZXNzIiwiZ2V0Tm9kZSIsIk5vRGF0YSIsImdldFN0b3JhZ2UiLCJjb25maWciLCJjbHMiLCJzdHlsZXMiLCJSZXNpemVhYmxlVGl0bGUiLCJwcm9wcyIsIm9uUmVzaXplIiwid2lkdGgiLCJyZXN0UHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJjcmVhdGVFbGVtZW50IiwiaGVpZ2h0IiwiZHJhZ2dhYmxlT3B0cyIsImVuYWJsZVVzZXJTZWxlY3RIYWNrIiwiTlNDVGFibGUiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsIl9hdXRvVHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsIm9uQmVmb3JlTG9hZCIsImxvYWQiLCJoZWFkZXIiLCJjZWxsIiwiaW5kZXgiLCJlIiwiX3JlZiIsInNpemUiLCJjb2xzIiwic3RhdGUiLCJuZXh0Q29sdW1ucyIsIl9vYmplY3RTcHJlYWQiLCJzZXRTdGF0ZSIsImdldENvbHVtbnMiLCJldiIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJfdGhpcyIsImV2ZW50VHlwZSIsInBheWxvYWQiLCJ0YWJsZVNpemUiLCJkcmFnSW5kZXgiLCJob3ZlckluZGV4IiwiZHJhZyIsInRhcmdldCIsImRyYWdOb2RlIiwicmVjb3JkIiwidGFyZ2V0Tm9kZSIsIm1vdmVBcnJheSIsImlkcyIsInBhcmVudE5vZGUiLCJnZXRDaGlsZE5vZGVJZHMiLCJwYXJhbXMiLCJpZCIsInBhcmVudElkIiwiYXR0cmlidXRlIiwibW92ZVJvdyIsInN0b3JlIiwicmVsb2FkIiwibW9kYWwiLCJ0eXBlIiwic3RvcmVQcmVmaXgiLCJhdXRvVHlwZSIsImNvbnRlbnQiLCJkYXRhU291cmNlIiwiY29sdW1ucyIsImxvYWRpbmciLCJwYWdpbmF0aW9uIiwiYWN0aXZlSW5kZXgiLCJzZWFyY2hUZXh0IiwiZmllbGRPcHRpb24iLCJzZWFyY2hDb2xvciIsInNvcnRzIiwiZmlsdGVyUGFyYW1zIiwic29ydFR5cGUiLCJzb3J0ZXIiLCJzb3J0SW5mbyIsImRlZmF1bHRTb3J0IiwiY2hlY2tDb2x1bW4iLCJkZWZhdWx0Q2hlY2siLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwiZmlsdGVyIiwiZXh0cmEiLCJfcmVmMiIsImxpc3RlbmVycyIsImxpc3RlbmVyc1Byb3BzIiwicmVzdFN0b3JlIiwiX2V4Y2x1ZGVkMiIsInN0b3JlUHJvcHMiLCJtb2RlbCIsImNvbXBvbmVudCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsImRhdGFDaGFuZ2VkIiwibW9kZWxEYXRhIiwicGFnaW5nIiwiZ2V0UGFnaW5hdGlvbiIsIm9uRXJyb3JMb2FkIiwiZXJyIiwicmVzcG9uc2UiLCJhdXRvTG9hZCIsIk9iamVjdCIsImFzc2lnbiIsImN1cnJlbnQiLCJjb21wb25lbnREaWRNb3VudCIsInJlc2l6ZUNvbHVtbiIsInNldERhdGEiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwibGlzdGVuTWVzc2FnZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZVN0YXRlIiwicmVzZXRDb2x1bW4iLCJuZXdDb2xzIiwiY29sc3MiLCJtYXAiLCJjb2wiLCJ0ZW1wIiwib25IZWFkZXJDZWxsIiwiY29sdW1uIiwiaGFuZGxlUmVzaXplIiwicHVzaCIsImNsZWFyU2VsZWN0Q29sb3IiLCJnZXRQYWdpbmF0aW9uQnlTdG9yZSIsIm9uQ2hhbmdlIiwiZmlsdGVycyIsImF1dG9PbkNoYW5nZSIsImF1dG9Tb3J0IiwiYXV0b1BhZ2luYXRpb24iLCJpc011bHRpcGxlIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlUGFnaW5hdGlvbiIsInAiLCJjdXJyZW50S2V5IiwicGFnZVNpemVLZXkiLCJwYWdlU2l6ZSIsImFzY1BhcmFtcyIsImdldFNvcnRQYXJhbSIsIm9uQ2hhbmdlRm4iLCJnZXRTdG9yZSIsImdldE1vZGVsIiwiaGFuZGxlU2VhcmNoIiwidmFsIiwiZmlsdGVyQ29sdW1uIiwiY2hlY2tlZFZhbHVlIiwibGVuZ3RoIiwiX21lc3NhZ2UiLCJ3YXJuaW5nIiwiZmlsdGVyQ29sdW1ucyIsIm5ld0NvbCIsImluY2x1ZGVzIiwiZGF0YUluZGV4IiwiaW5pdFNob3ciLCJzb3J0U3RhdGUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzb3J0U2VhcmNoIiwib3JkZXJJdGVtcyIsImZpZWxkIiwiYXNjIiwib3JkZXIiLCJmb3JFYWNoIiwidiIsInN0cmluZ2lmeSIsImlzQmV5b25kIiwiZXZlbnQiLCJ0ZXh0UmFuZ2UiLCJlbCIsInRleHRDb250ZW50IiwidGFyZ2V0VyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInJhbmdlIiwiZG9jdW1lbnQiLCJjcmVhdGVSYW5nZSIsInNldFN0YXJ0Iiwic2V0RW5kIiwiY2hpbGROb2RlcyIsInJhbmdlV2lkdGgiLCJzZXRTZWxlY3RlZFJvd0tleXMiLCJzZXRTZWxlY3RlZFJvd0RhdGFzIiwic29ydEZpZWxkcyIsImRlZmF1bHRTaG93Q29scyIsImVsbGlwc2lzIiwicmVuZGVyIiwic2hvd1RpdGxlIiwidGV4dCIsIl90aGlzJHN0YXRlJGNvbHMiLCJjdXJyZW50Q29sIiwiZmluZCIsImMiLCJhY3R1YWxXaWR0aCIsImNvbFdpZHRoIiwiY29sV2lkdGhPYmoiLCJzbWFsbCIsIm1pZGRsZSIsImRlZmF1bHQiLCJsYXJnZSIsInBhZGRpbmdXaWR0aCIsInN0eWxlIiwiZGlzcGxheSIsInJlZiIsInJlbW92ZUF0dHJpYnV0ZSIsInNjcm9sbFdpZHRoIiwiY2xpZW50V2lkdGgiLCJzZXRBdHRyaWJ1dGUiLCJjbGFzc05hbWUiLCJvdmVyZmxvdyIsInRleHRPdmVyZmxvdyIsIndoaXRlU3BhY2UiLCJpbmRleE9mIiwic29ydE9yZGVyIiwibXVsdGlwbGUiLCJpdGVtIiwiZmlsdGVyUHJvcHMiLCJvYmoiLCJzZWFyY2hLZXkiLCJEaXYiLCJ0aXRsZSIsInBsYWNlaG9sZGVyIiwiY29uY2F0IiwidGFibGVTZWFyY2hSZWYiLCJmaWx0ZXJEcm9wZG93biIsIl9yZWYzIiwic2V0U2VsZWN0ZWRLZXlzIiwic2VsZWN0ZWRLZXlzIiwiY29uZmlybSIsImNsZWFyRmlsdGVycyIsIl9TcGFjZSIsIl9CdXR0b24iLCJvbkNsaWNrIiwiX3RoaXMkdGFibGVTZWFyY2hSZWYkIiwibmV3RmlsdGVyUGFyYW1zIiwia2V5IiwiZ2V0VmFsdWUiLCJzb3J0UGFyYW0iLCJmaWx0ZXJJY29uIiwicmVuZGVyVG9vbEJhciIsImNvbExpc3RzIiwidG9vbGJhciIsInRhYmxlVG9vbCIsInN0b3JlUmVxdWVzdENvbmZpZyIsInRvb2xzIiwidG9vbHNDbGljayIsIm9uVG9vbENsaWNrIiwic2l6ZUl0ZW0iLCJzb3J0SXRlbSIsInNvcnRDb250ZW50IiwiRnJhZ21lbnQiLCJjdXJzb3IiLCJjb2xvciIsInNpemVDb250ZW50IiwiX0NoZWNrYm94IiwiR3JvdXAiLCJiaW5kIiwibGFiZWwiLCJ2YWx1ZSIsImRpc2FibGVkIiwiZm9udFNpemUiLCJfUG9wb3ZlciIsInBsYWNlbWVudCIsInRyaWdnZXIiLCJvdmVybGF5U3R5bGUiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwibWFyZ2luUmlnaHQiLCJvblJlZnJlc2giLCJnZXRTZWxlY3RlZFJvd0tleXMiLCJnZXRTZWxlY3RlZFJvd0RhdGFzIiwicmVzZXRTZWxlY3RlZFJvd0tleXMiLCJyb3dTZWxlY3Rpb25PblNlbGVjdCIsInNlbGVjdGVkIiwicm93S2V5IiwibmV3U2VsZWN0ZWRSb3dLZXlzIiwibmV3U2VsZWN0ZWRSb3dEYXRhcyIsInNwbGljZSIsInJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsIiwic2VsZWN0ZWRSb3dzIiwiY2hhbmdlUm93cyIsIm5ld2lkcyIsIm5ld2RhdGFzIiwiY2hhbmdlSWRzIiwib21pdCIsImNsaWNrQ2hhbmdlQ29sb3IiLCJwb3NpdGlvbiIsInNob3dTaXplQ2hhbmdlciIsInNob3dRdWlja0p1bXBlciIsInNob3dUb3RhbCIsInRvdGFsIiwiX3JlZjQiLCJmcm9tIiwidG8iLCJvblJvd0ZuIiwib25Sb3ciLCJjdXN0b20iLCJvbkNsaWNrRm4iLCJyb3dDbGFzc05hbWUiLCJuZXdEYXRhU291cmNlIiwiZ2V0U2VhcmNoTWVudURhdGFzIiwidHJlZURhdGFzIiwiZXhwYW5kZWRSb3dLZXlzIiwib3BlbktleXMiLCJkcmFnYWJsZSIsImRyYWdhYmxlUHJvcHMiLCJjb21wb25lbnRzIiwicmVzaXplUHJvcHMiLCJ0b29sRmxhZyIsInNob3ciLCJzaG93Um93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uIiwib25TZWxlY3QiLCJvblNlbGVjdEFsbCIsImNvbHVtbldpZHRoIiwidGFibGVQcm9wcyIsImNvbmZpZ1RhYmxlUHJvcHMiLCJEZWZhdWx0VGFibGUiLCJfVGFibGUiLCJfZXh0ZW5kcyIsImNoaWxkcmVuQ29sdW1uTmFtZSIsInNoZWl0ZW0iLCJsb2NhbGUiLCJlbXB0eVRleHQiLCJzY3JvbGwiLCJ4IiwiX1BhZ2luYXRpb24iLCJwYWdlIiwiYWN0aW9uIiwiX3JlZjUiLCJiYWNrZW5kIiwiZHJhZ1VybCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Jhc2UvdGFibGUvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBEZXNjcmlwdHRpb246XHJcbiAqIEB2ZXJzaW9uOlxyXG4gKiBAQXV0aG9yOiByeHpodVxyXG4gKiBARGF0ZTogMjAyMS0wMy0yMyAwODo0NjoyMFxyXG4gKiBATGFzdEVkaXRvcnM6IHJ4emh1XHJcbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjEtMDMtMjMgMTA6MzA6NDJcclxuICovXHJcbmltcG9ydCB7XHJcbiAgQXBwc3RvcmVPdXRsaW5lZCxcclxuICBDaGVja091dGxpbmVkLFxyXG4gIENvbHVtbkhlaWdodE91dGxpbmVkLFxyXG4gIFNlYXJjaE91dGxpbmVkLFxyXG4gIFNvcnRBc2NlbmRpbmdPdXRsaW5lZCxcclxuICBTb3J0RGVzY2VuZGluZ091dGxpbmVkLFxyXG4gIFJlZG9PdXRsaW5lZCxcclxufSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgaXNFbXB0eU9iaiB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgU3RvcmUsIHsgUGFnZVN0b3JlLCBTdG9yZVByb3BzIH0gZnJvbSBcIkBiai1uc2MvbXNuXCI7XHJcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSBcIkBiai1uc2MvbXNuL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gIEJ1dHRvbixcclxuICBDaGVja2JveCxcclxuICBDaGVja2JveE9wdGlvblR5cGUsXHJcbiAgTWVudSxcclxuICBtZXNzYWdlLFxyXG4gIFBhZ2luYXRpb24sXHJcbiAgUG9wb3ZlcixcclxuICBTcGFjZSxcclxuICBUYWJsZSxcclxuICBUYWJsZVByb3BzLFxyXG4gIFRvb2x0aXAsXHJcbn0gZnJvbSBcImFudGRcIjtcclxuaW1wb3J0IHsgQ29sdW1uVHlwZSwgVGFibGVQYWdpbmF0aW9uQ29uZmlnIH0gZnJvbSBcImFudGQvbGliL3RhYmxlXCI7XHJcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBEbmRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1kbmRcIjtcclxuaW1wb3J0IEJvZHlSb3csIHsgRG5kQ29udGV4dFR5cGUsIElCb2R5Um93UHJvcHMgfSBmcm9tIFwiLi4vY29tbW9uL0JvZHlSb3dcIjtcclxuaW1wb3J0IHRyZWVVdGlscyBmcm9tIFwiLi4vLi4vdHJlZVV0aWxzXCI7XHJcbmltcG9ydCBcIi4vaW5kZXgubW9kdWxlLmxlc3NcIjtcclxuY29uc3QgeyBCb2R5Um93Q29tcG9uZW50LCBIVE1MNUJhY2tlbmQgfSA9IEJvZHlSb3c7XHJcbmltcG9ydCB3aXRoWmhMb2NhbGUgZnJvbSBcIi4uL2NvbW1vbi93aXRoWmhMb2NhbGVcIjtcclxuaW1wb3J0IHsgUmVzaXphYmxlIH0gZnJvbSBcInJlYWN0LXJlc2l6YWJsZVwiO1xyXG5pbXBvcnQgXCIuL3Jlc2l6ZS5tb2R1bGUubGVzc1wiO1xyXG5pbXBvcnQgeyBnZXRMZXNzLCBnZXROb2RlLCBzaW1wbGlmeUNvbHVtbnMgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcclxuaW1wb3J0IE5vRGF0YSBmcm9tIFwiLi4vLi4vYmFzZS9jb21tb24vTm9EYXRhXCI7XHJcbmltcG9ydCB7IGdldFN0b3JhZ2UgfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcbmltcG9ydCBFbGxpcHNlQ2VsbCBmcm9tIFwiLi4vY29tbW9uL0VsbGlwc2VDZWxsXCI7XHJcbmltcG9ydCBjbHMgZnJvbSBcImNsYXNzbmFtZXNcIjtcclxuaW1wb3J0IGlzRXF1YWwgZnJvbSBcImxvZGFzaC9pc0VxdWFsXCI7XHJcbmNvbnN0IHN0eWxlcyA9IG51bGw7XHJcbmludGVyZmFjZSBJRHJhZ1BhcmFtcyB7XHJcbiAgaWQ6IHN0cmluZyB8IG51bWJlcjtcclxuICBpZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj47XHJcbiAgcGFyZW50SWQ6IHN0cmluZyB8IG51bWJlcjtcclxufVxyXG4vLyBpbnRlcmZhY2UgU3RvcmVQcm9wcyB7fVxyXG5cclxuZXhwb3J0IHR5cGUgU3RvcmVUeXBlID0gXCJQYWdlU3RvcmVcIiB8IFwiVHJlZVN0b3JlXCIgfCBcIkJhc2VTdG9yZVwiO1xyXG5cclxuaW50ZXJmYWNlIE5TQ1RhYmxlUGFnaW5hdGlvbiBleHRlbmRzIFRhYmxlUGFnaW5hdGlvbkNvbmZpZyB7XHJcbiAgdG90YWxLZXk/OiBzdHJpbmc7XHJcbiAgcGFnZVNpemVLZXk/OiBzdHJpbmc7XHJcbiAgY3VycmVudEtleT86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFRvb2xCYXJQcm9wcyB7XHJcbiAgc2hvdzogYm9vbGVhbjtcclxuICB0b29scz86IEFycmF5PHN0cmluZz47XHJcbiAgb25Ub29sQ2xpY2s/OiB7IG9uUmVmcmVzaD86IGFueTsgb25Tb3J0PzogYW55IH07XHJcbn1cclxuaW50ZXJmYWNlIE5TQ1RhYmxlUHJvcHMgZXh0ZW5kcyBUYWJsZVByb3BzPGFueT4ge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93VG90YWw/OiBib29sZWFuOyAvLyDmmK/lkKbmmL7npLrmgLvmnaHmlbDkv6Hmga/vvIzpu5jorqR0cnVlXHJcbiAgZHJhZ2FibGU/OiBib29sZWFuOyAvLyDmmK/lkKblj6/mi5bliqgsIOm7mOiupGZhbHNlXHJcbiAgZmlsdGVyQ29sdW1uPzogYm9vbGVhbjsgLy8g5piv5ZCm5pSv5oyB6L+H5ruk5pi+56S66KGo5qC85YiXLCDpu5jorqR0cnVlXHJcbiAgbW92ZVJvdz86IChwYXJhbXM6IElEcmFnUGFyYW1zKSA9PiB2b2lkOyAvLyDmi5bmi73lrozmiJDlkI7nmoTlm57osINcclxuICBkcmFnVXJsPzogc3RyaW5nOyAvLyDkv53lrZjmi5bmi73mjpLluo/nmoTmjqXlj6NcclxuICBwYWdpbmF0aW9uPzogZmFsc2UgfCBOU0NUYWJsZVBhZ2luYXRpb247XHJcbiAgYXV0b1BhZ2luYXRpb24/OiBib29sZWFuOyAvLyDnu4Tku7bmmK/lkKboh6rliqjlpITnkIbliIbpobVcclxuICBhdXRvU29ydD86IGJvb2xlYW47IC8v57uE5Lu25piv5ZCm6Ieq5Yqo5aSE55CG5o6S5bqPXHJcbiAgYXV0b09uQ2hhbmdlPzogYm9vbGVhbjsgLy8g57uE5Lu25piv5ZCm6Ieq5Yqob25DaGFuZ2UsIGZhbHNl5YiZ5LiN5YGa5Lu75L2V5aSE55CG5YWo6YOo5Lqk57uZ6LCD55So5pa5XHJcbiAgcmVzaXplQ29sdW1uPzogYm9vbGVhbjtcclxuICBzb3J0RmllbGRzPzogQXJyYXk8c3RyaW5nPjsgLy/pnIDopoHmjpLluo/nmoTlrZfmrrVJbmRleFxyXG4gIHRvb2xiYXI/OiBUb29sQmFyUHJvcHMgfCBib29sZWFuO1xyXG4gIGF1dG9TaXplPzogYm9vbGVhbjtcclxuICBzb3J0U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmt7vliqDmjpLluo/mn6Xor6Is6buY6K6kdHJ1ZVxyXG4gIHNob3dSb3dTZWxlY3Rpb24/OiBib29sZWFuO1xyXG4gIHJvd0tleT86IHN0cmluZztcclxuICBbcHJvcHNOYW1lOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIElOU0NUYWJsZVByb3BzID0gdHlwZW9mIE5TQ1RhYmxlLmRlZmF1bHRQcm9wcyAmIE5TQ1RhYmxlUHJvcHM7XHJcbmV4cG9ydCB7IERuZENvbnRleHRUeXBlLCBJQm9keVJvd1Byb3BzIH07XHJcblxyXG5jb25zdCBSZXNpemVhYmxlVGl0bGUgPSAocHJvcHM6IGFueSkgPT4ge1xyXG4gIGNvbnN0IHsgb25SZXNpemUsIHdpZHRoLCAuLi5yZXN0UHJvcHMgfSA9IHByb3BzO1xyXG4gIHJldHVybiAoXHJcbiAgICA8UmVzaXphYmxlXHJcbiAgICAgIHdpZHRoPXt3aWR0aCB8fCAxNTB9XHJcbiAgICAgIGhlaWdodD17MH1cclxuICAgICAgb25SZXNpemU9e29uUmVzaXplfVxyXG4gICAgICBkcmFnZ2FibGVPcHRzPXt7IGVuYWJsZVVzZXJTZWxlY3RIYWNrOiBmYWxzZSB9fVxyXG4gICAgPlxyXG4gICAgICA8dGggey4uLnJlc3RQcm9wc30gLz5cclxuICAgIDwvUmVzaXphYmxlPlxyXG4gICk7XHJcbn07XHJcbmNsYXNzIE5TQ1RhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElOU0NUYWJsZVByb3BzLCBhbnk+IHtcclxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xyXG4gICAgZHJhZ2FibGU6IGZhbHNlLFxyXG4gICAgc2hvd1RvdGFsOiB0cnVlLFxyXG4gICAgZmlsdGVyQ29sdW1uOiB0cnVlLFxyXG4gICAgZHJhZ1VybDogXCJcIixcclxuICAgIGF1dG9QYWdpbmF0aW9uOiB0cnVlLFxyXG4gICAgYXV0b1NvcnQ6IHRydWUsXHJcbiAgICBhdXRvT25DaGFuZ2U6IHRydWUsXHJcbiAgICByZXNpemVDb2x1bW46IHRydWUsXHJcbiAgICB0b29sYmFyOiB7XHJcbiAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICBvblRvb2xDbGljazoge30gYXMgYW55LFxyXG4gICAgICB0b29sczogW10gYXMgYW55LFxyXG4gICAgfSBhcyBhbnksXHJcbiAgfTtcclxuXHJcbiAgc3RvcmUgPSB7fSBhcyBTdG9yZVByb3BzO1xyXG4gIHRoSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcclxuICB0YWJsZVNlYXJjaFJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcblxyXG4gIGxpc3RlbmVycyA9IHtcclxuICAgIG9uQmVmb3JlTG9hZDogbnVsbCxcclxuICAgIGxvYWQ6IG51bGwsXHJcbiAgfTtcclxuXHJcbiAgY29tcG9uZW50cyA9IHtcclxuICAgIGhlYWRlcjoge1xyXG4gICAgICBjZWxsOiBSZXNpemVhYmxlVGl0bGUsXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICBsZXQgbW9kYWwgPSBwcm9wcy50eXBlIHx8IFwiYXV0b1wiO1xyXG4gICAgbGV0IHN0b3JlUHJlZml4ID0gZ2V0U3RvcmFnZShcInN0b3JlLXByZS1rZXlcIik7XHJcbiAgICBsZXQgYXV0b1R5cGUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCJ0YWJsZVNpemVcIiA6IFwidGFibGVTaXplXCJcclxuICAgICk7XHJcbiAgICBhdXRvVHlwZSA9IGF1dG9UeXBlPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgZGF0YVNvdXJjZTogW10sXHJcbiAgICAgIGNvbHVtbnM6IFtdLFxyXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgcGFnaW5hdGlvbjoge30sXHJcbiAgICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgICAgLy/mkJzntKLmlofmnKxcclxuICAgICAgc2VhcmNoVGV4dDogbnVsbCxcclxuICAgICAgZmllbGRPcHRpb246IG51bGwsXHJcbiAgICAgIHNlYXJjaENvbG9yOiBudWxsLFxyXG4gICAgICBjb2xzOiBbXSxcclxuICAgICAgc29ydHM6IFtdLFxyXG4gICAgICBmaWx0ZXJQYXJhbXM6IHt9LFxyXG4gICAgICB0YWJsZVNpemU6IHRoaXMucHJvcHMuc2l6ZSB8fCBhdXRvVHlwZSB8fCBcImRlZmF1bHRcIixcclxuICAgICAgc29ydFR5cGU6IFwic2luZ2xlXCIsXHJcbiAgICAgIHNvcnRlcjogW10sIC8v6K6w5b2V5b2T5YmN5o6S5bqP5a2X5q61XHJcbiAgICAgIHNvcnRJbmZvOiB7fSxcclxuICAgICAgZGVmYXVsdFNvcnQ6IHRydWUsXHJcbiAgICAgIGNoZWNrQ29sdW1uOiBbXSxcclxuICAgICAgZGVmYXVsdENoZWNrOiB0cnVlLFxyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgICAgZmlsdGVyOiBbXSxcclxuICAgICAgZXh0cmE6IHt9LFxyXG4gICAgfTtcclxuICAgIGlmIChwcm9wcy5zdG9yZSBpbnN0YW5jZW9mIFN0b3JlKSB7XHJcbiAgICAgIHRoaXMuc3RvcmUgPSBwcm9wcy5zdG9yZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHsgbGlzdGVuZXJzOiBsaXN0ZW5lcnNQcm9wcyA9IHt9LCAuLi5yZXN0U3RvcmUgfSA9XHJcbiAgICAgICAgcHJvcHMuc3RvcmUgfHwge307XHJcbiAgICAgIGNvbnN0IHN0b3JlUHJvcHMgPSB7XHJcbiAgICAgICAgbW9kZWw6IFwibW9kZWxcIixcclxuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgbGlzdGVuZXJzOiB7XHJcbiAgICAgICAgICBvbkJlZm9yZUxvYWQ6IChzdG9yZSwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMub25CZWZvcmVMb2FkLCB0aGlzLCBbc3RvcmUsIG9wdGlvbnNdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBkYXRhQ2hhbmdlZDogKGRhdGEsIG1vZGVsRGF0YSwgc3RvcmUpID0+IHtcclxuICAgICAgICAgICAgbGV0IHBhZ2luZyA9ICEodGhpcy5wcm9wcy5wYWdpbmF0aW9uID09PSBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChwYWdpbmcgJiYgIXRoaXMucHJvcHMuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogbW9kZWxEYXRhLFxyXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogc3RvcmUuZ2V0UGFnaW5hdGlvbigpLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBhY3RpdmVJbmRleDogLTEsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGRhdGFTb3VyY2U6IG1vZGVsRGF0YSwgbG9hZGluZzogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLmRhdGFDaGFuZ2VkLCB0aGlzLCBbXHJcbiAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICBtb2RlbERhdGEsXHJcbiAgICAgICAgICAgICAgc3RvcmUsXHJcbiAgICAgICAgICAgICAgcGFnaW5nLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsb2FkOiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkgPT4ge1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5sb2FkLCB0aGlzLCBbZGF0YSwgbW9kZWxEYXRhLCBzdG9yZV0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9uRXJyb3JMb2FkOiAoZXJyLCByZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLm9uRXJyb3JMb2FkLCB0aGlzLCBbZXJyLCByZXNwb25zZV0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHJlc3RTdG9yZS5kYXRhXHJcbiAgICAgICAgICA/IHJlc3RTdG9yZS5kYXRhXHJcbiAgICAgICAgICA6IHByb3BzLmRhdGFTb3VyY2VcclxuICAgICAgICAgID8gcHJvcHMuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIC4uLnJlc3RTdG9yZSxcclxuICAgICAgICBhdXRvTG9hZDogcmVzdFN0b3JlLmF1dG9Mb2FkID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zdG9yZSA9IG5ldyBQYWdlU3RvcmUoXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RvcmVQcm9wcywge1xyXG4gICAgICAgICAgcGFnaW5hdGlvbjogeyBjdXJyZW50OiAxLCAuLi50aGlzLnByb3BzLnBhZ2luYXRpb24gfSxcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmVzaXplID1cclxuICAgIChpbmRleDogYW55KSA9PlxyXG4gICAgKGU6IGFueSwgeyBzaXplIH06IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNvbHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgIGNvbnN0IG5leHRDb2x1bW5zID0gWy4uLmNvbHNdO1xyXG4gICAgICBuZXh0Q29sdW1uc1tpbmRleF0gPSB7XHJcbiAgICAgICAgLi4ubmV4dENvbHVtbnNbaW5kZXhdLFxyXG4gICAgICAgIHdpZHRoOiBzaXplLndpZHRoLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNldFN0YXRlKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbHM6IG5leHRDb2x1bW5zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgLy8g5Zyo54q25oCB5pu05paw5ZCO6YeN5paw6I635Y+W5YiX6YWN572uXHJcbiAgICAgICAgICB0aGlzLmdldENvbHVtbnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbHVtbnM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbHM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLnByb3BzLnN0b3JlO1xyXG4gICAgaWYgKHN0b3JlICYmIHN0b3JlLmRhdGEpIHtcclxuICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKHN0b3JlLmRhdGEpO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMubGlzdGVuTWVzc2FnZSk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMubGlzdGVuTWVzc2FnZSk7XHJcbiAgfVxyXG4gIGxpc3Rlbk1lc3NhZ2UgPSAoZXYpID0+IHtcclxuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgZXYuZGF0YSA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UoZXYuZGF0YSkgOiBldi5kYXRhO1xyXG4gICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgIGlmIChkYXRhLmV2ZW50VHlwZSA9PSBcImNoYW5nZVRhYmxlU2l6ZVwiKSB7XHJcbiAgICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gZGF0YTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcImRlZmF1bHRcIiB8fFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcInNtYWxsXCIgfHxcclxuICAgICAgICBwYXlsb2FkLnNpemUgPT0gXCJtaWRkbGVcIlxyXG4gICAgICApIHtcclxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IHRhYmxlU2l6ZTogcGF5bG9hZC5zaXplIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJlU3RhdGUpIHtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1ucyAhPT0gcHJldlByb3BzLmNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogdGhpcy5wcm9wcy5jb2x1bW5zIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocHJlU3RhdGUuY29scyAhPT0gdGhpcy5zdGF0ZS5jb2xzKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldENvbHVtbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMgIT09IHByZXZQcm9wcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICBjb2xzOiB0aGlzLnByb3BzLmNvbHVtbnMsXHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLnByb3BzLmNvbHVtbnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByZXZQcm9wcy5zaXplICE9PSB0aGlzLnByb3BzLnNpemUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiB0aGlzLnByb3BzLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmVzZXRDb2x1bW4oKSB7XHJcbiAgICBjb25zdCB7IGNvbHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBuZXdDb2xzOiBhbnkgPSBbXTtcclxuICAgIGxldCBjb2xzcyA9IGNvbHMgfHwgW107XHJcbiAgICBjb2xzcy5tYXAoKGNvbDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0ZW1wID0ge1xyXG4gICAgICAgIC4uLmNvbCxcclxuICAgICAgICBvbkhlYWRlckNlbGw6IChjb2x1bW46IHsgd2lkdGg6IGFueSB9KSA9PiAoe1xyXG4gICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcclxuICAgICAgICAgIG9uUmVzaXplOiB0aGlzLmhhbmRsZVJlc2l6ZShpbmRleCksXHJcbiAgICAgICAgfSksXHJcbiAgICAgIH07XHJcbiAgICAgIG5ld0NvbHMucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGNvbHVtbnM6IG5ld0NvbHMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOa4hemZpOmAieS4reminOiJslxyXG4gICAqL1xyXG4gIGNsZWFyU2VsZWN0Q29sb3IoKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgYWN0aXZlSW5kZXg6IC0xIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdpbmF0aW9uQnlTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldFBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgYXV0b09uQ2hhbmdlID0gdHJ1ZSxcclxuICAgICAgYXV0b1NvcnQsXHJcbiAgICAgIGF1dG9QYWdpbmF0aW9uLFxyXG4gICAgICBvbkNoYW5nZSxcclxuICAgICAgc3RvcmUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IEFycmF5LmlzQXJyYXkoc29ydGVyKTtcclxuICAgIGlmIChhdXRvT25DaGFuZ2UgPT09IGZhbHNlIHx8ICFzdG9yZSkge1xyXG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGFuZGxlUGFnaW5hdGlvbiA9ICgpID0+IHtcclxuICAgICAgbGV0IHBhcmFtcyA9IHt9IGFzIHtcclxuICAgICAgICBzaXplPzogc3RyaW5nO1xyXG4gICAgICAgIHBhZ2VTaXplPzogc3RyaW5nO1xyXG4gICAgICAgIGFzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgZGVzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgW3Byb3BOYW1lOiBzdHJpbmddOiBzdHJpbmc7XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMuZ2V0UGFnaW5hdGlvbkJ5U3RvcmUoKSB8fCB7fTtcclxuICAgICAgaWYgKCFpc0VtcHR5T2JqKHBhZ2luYXRpb24pKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IHtcclxuICAgICAgICAgIFtwYWdpbmcuY3VycmVudEtleSB8fCBcImN1cnJlbnRcIl06IHBhZ2luYXRpb24uY3VycmVudCxcclxuICAgICAgICAgIFtwYWdpbmcucGFnZVNpemVLZXkgfHwgXCJzaXplXCJdOiBwYWdpbmF0aW9uLnBhZ2VTaXplLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHApO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhc2NQYXJhbXMgPSB0aGlzLmdldFNvcnRQYXJhbShzb3J0ZXIsIHRydWUpO1xyXG4gICAgICBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXIgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGlwbGUgJiYgIWlzRW1wdHlPYmooc29ydGVyKSkge1xyXG4gICAgICAgIHNvcnRlci5jb2x1bW4gJiZcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXI6IFtzb3J0ZXJdLCBkZWZhdWx0U29ydDogZmFsc2UgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10gfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgZmlsdGVycyxcclxuICAgICAgICBleHRyYSxcclxuICAgICAgfSk7XHJcbiAgICAgIHBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zLCAuLi5wYXJhbXMsIC4uLmFzY1BhcmFtcyB9O1xyXG4gICAgICBhdXRvU29ydCAmJiB0aGlzLnN0b3JlLnJlbG9hZCh7IHBhcmFtcyB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25DaGFuZ2VGbiA9IHRoaXMucHJvcHMub25DaGFuZ2U7XHJcblxyXG4gICAgYXV0b1BhZ2luYXRpb24gJiYgaGFuZGxlUGFnaW5hdGlvbigpO1xyXG4gICAgLy8g55So5oi35Lyg5LqGb25DaGFuZ2Xkv53nlZnnlKjmiLfoh6rkuLvlpITnkIbooajmoLzlj5jljJbnmoTmnYPliptcclxuICAgIGlmIChvbkNoYW5nZUZuKSB7XHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2hhbmdlRm4sIHRoaXMsIFtwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5pWw5o2u5qih5Z6L5a+56LGhXHJcbiAgICovXHJcbiAgZ2V0TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I+c5Y2V5pCc57Si6L+H5ruk5pi+56S6XHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIGhhbmRsZVNlYXJjaCh2YWwsIGZpZWxkT3B0aW9uLCBzZWFyY2hDb2xvcikge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlYXJjaFRleHQ6IHZhbCxcclxuICAgICAgZmllbGRPcHRpb246IGZpZWxkT3B0aW9uLFxyXG4gICAgICBzZWFyY2hDb2xvcjogc2VhcmNoQ29sb3IsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaooeWdl+WIl+ihqOenu+WKqOaOkuW6j1xyXG4gICAqL1xyXG4gIG1vdmVSb3cgPSAoZHJhZ0luZGV4LCBob3ZlckluZGV4LCBkcmFnLCB0YXJnZXQpID0+IHtcclxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgIGxldCBkcmFnTm9kZSA9IGRyYWcucmVjb3JkO1xyXG4gICAgbGV0IHRhcmdldE5vZGUgPSB0YXJnZXQucmVjb3JkO1xyXG4gICAgZHJhZ05vZGUubW92ZUFycmF5KGRyYWdOb2RlLCB0YXJnZXROb2RlKTtcclxuICAgIGxldCBpZHMgPSBkcmFnTm9kZS5wYXJlbnROb2RlLmdldENoaWxkTm9kZUlkcygpO1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgaWQ6IGRyYWdOb2RlLmlkLFxyXG4gICAgICBwYXJlbnRJZDogZHJhZ05vZGUuYXR0cmlidXRlLnBhcmVudElkLFxyXG4gICAgICBpZHM6IGlkcyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMucHJvcHMubW92ZVJvdykge1xyXG4gICAgICB0aGlzLnByb3BzLm1vdmVSb3cocGFyYW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmUucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZmlsdGVyQ29sdW1uKGNoZWNrZWRWYWx1ZSkge1xyXG4gICAgaWYgKGNoZWNrZWRWYWx1ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICBtZXNzYWdlLndhcm5pbmcoXCLoh7PlsJHmmL7npLrkuIDliJfvvIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbHRlckNvbHVtbnMgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKChjb2w6IENvbHVtblR5cGU8e30+KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld0NvbCA9IHsgLi4uY29sIH0gYXMgQ29sdW1uVHlwZTx7fT4gJiB7IGluaXRTaG93OiBib29sZWFuIH07XHJcbiAgICAgIGlmIChjaGVja2VkVmFsdWUuaW5jbHVkZXMoY29sLmRhdGFJbmRleCkpIHtcclxuICAgICAgICBuZXdDb2wuaW5pdFNob3cgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0NvbC5pbml0U2hvdyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXdDb2w7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sdW1uczogZmlsdGVyQ29sdW1ucyxcclxuICAgICAgICBjaGVja0NvbHVtbjogY2hlY2tlZFZhbHVlLFxyXG4gICAgICAgIGRlZmF1bHRDaGVjazogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sczogZmlsdGVyQ29sdW1ucyxcclxuICAgICAgICBjaGVja0NvbHVtbjogY2hlY2tlZFZhbHVlLFxyXG4gICAgICAgIGRlZmF1bHRDaGVjazogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRTb3J0UGFyYW0oc29ydGVyLCBzb3J0U3RhdGUgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IEFycmF5LmlzQXJyYXkoc29ydGVyKTtcclxuICAgIGNvbnN0IHsgc29ydFNlYXJjaCA9IHRydWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXNvcnRTZWFyY2gpIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgbGV0IHNvcnRJbmZvID0ge307XHJcbiAgICBsZXQgb3JkZXJJdGVtcyA9IFtdO1xyXG4gICAgaWYgKCFpc0VtcHR5T2JqKHNvcnRlcikgJiYgIWlzTXVsdGlwbGUgJiYgc29ydGVyLmNvbHVtbikge1xyXG4gICAgICBvcmRlckl0ZW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbHVtbjogc29ydGVyLmNvbHVtbi5maWVsZCB8fCBzb3J0ZXIuY29sdW1uLmRhdGFJbmRleCxcclxuICAgICAgICAgIGFzYzogc29ydGVyLm9yZGVyID09IFwiYXNjZW5kXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgaWYgKHNvcnRlci5jb2x1bW4pIHNvcnRJbmZvW3NvcnRlci5jb2x1bW4uZGF0YUluZGV4XSA9IHNvcnRlci5vcmRlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICBzb3J0ZXIuZm9yRWFjaCgodikgPT4ge1xyXG4gICAgICAgIHNvcnRJbmZvW3YuY29sdW1uLmRhdGFJbmRleF0gPSB2Lm9yZGVyO1xyXG4gICAgICAgIGxldCBmaWVsZCA9IHYuY29sdW1uLmZpZWxkIHx8IHYuY29sdW1uLmRhdGFJbmRleDtcclxuICAgICAgICBvcmRlckl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgY29sdW1uOiBmaWVsZCxcclxuICAgICAgICAgIGFzYzogdi5vcmRlciA9PSBcImFzY2VuZFwiLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChzb3J0U3RhdGUpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgc29ydEluZm86IHNvcnRJbmZvLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IG9yZGVySXRlbXM6IEpTT04uc3RyaW5naWZ5KG9yZGVySXRlbXMpIH07XHJcbiAgfVxyXG4gIGlzQmV5b25kKGUpIHtcclxuICAgIGNvbnN0IGV2ID0gd2luZG93LmV2ZW50IHx8IGU7IC8vIOa1j+iniOWZqOWFvOWuue+8jOacgOWlveWGmeS4gOS4i1xyXG4gICAgY29uc3QgdGV4dFJhbmdlID0gKGVsKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gZWw7XHJcbiAgICAgIGNvbnN0IHRhcmdldFcgPSB0ZXh0Q29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICByYW5nZS5zZXRTdGFydCh0ZXh0Q29udGVudCwgMCk7XHJcbiAgICAgIHJhbmdlLnNldEVuZCh0ZXh0Q29udGVudCwgdGV4dENvbnRlbnQuY2hpbGROb2Rlcy5sZW5ndGgpO1xyXG4gICAgICBjb25zdCByYW5nZVdpZHRoID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcbiAgICAgIHJldHVybiByYW5nZVdpZHRoID4gdGFyZ2V0VztcclxuICAgIH07XHJcbiAgICByZXR1cm4gIXRleHRSYW5nZShldi50YXJnZXQpOyAvLyB0YXJnZXTlj6/ku6Xkv53or4HlvZPliY3liJLov4fnmoRkb23oioLngrnkuIDnm7Tkv53mjIHmmK86ZWwtdG9vbHRpcF9fdHJpZ2dlclxyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0tleXMoZGF0YTogQXJyYXk8U3RyaW5nIHwgTnVtYmVyPikge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogZGF0YSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzZXRTZWxlY3RlZFJvd0RhdGFzKGRhdGE6IEFycmF5PE9iamVjdD4pIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBkYXRhLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldENvbHVtbnMoKSB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIHNvcnRUeXBlLCBzb3J0SW5mbyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgc29ydEZpZWxkcyA9IFtdLCBzaXplID0gXCJsYXJnZVwiIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZGVmYXVsdFNob3dDb2xzID0gY29sdW1ucy5maWx0ZXIoKGNvbHMpID0+IGNvbHMuaW5pdFNob3cgIT09IGZhbHNlKTtcclxuICAgIGNvbnN0IGNvbHMgPSBkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wsIGluZGV4KSA9PiB7XHJcbiAgICAgIC8vIOabv+aNoiBnZXRDb2x1bW5zIOaWueazleS4reWOn+adpeeahCBlbGxpcHNpcyDlpITnkIbpg6jliIZcclxuICAgICAgaWYgKGNvbC5lbGxpcHNpcyAmJiAhY29sLnJlbmRlcikge1xyXG4gICAgICAgIGNvbC5lbGxpcHNpcyA9IHtcclxuICAgICAgICAgIHNob3dUaXRsZTogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2wucmVuZGVyID0gKHRleHQsIHJlY29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIC8vIOiOt+WPluW9k+WJjeWIl+eahOWunuaXtuWuveW6plxyXG4gICAgICAgICAgY29uc3QgY3VycmVudENvbCA9IHRoaXMuc3RhdGUuY29scz8uZmluZCgoYykgPT4ge1xyXG4gICAgICAgICAgICAvLyDlpITnkIYgZGF0YUluZGV4IOWPr+iDveaYr+Wtl+espuS4suaIluaVsOe7hOeahOaDheWGtVxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjLmRhdGFJbmRleCkgJiYgQXJyYXkuaXNBcnJheShjb2wuZGF0YUluZGV4KSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShjLmRhdGFJbmRleCkgPT09IEpTT04uc3RyaW5naWZ5KGNvbC5kYXRhSW5kZXgpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYy5kYXRhSW5kZXggPT09IGNvbC5kYXRhSW5kZXg7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCBhY3R1YWxXaWR0aCA9IGN1cnJlbnRDb2w/LndpZHRoIHx8IGNvbC53aWR0aDtcclxuICAgICAgICAgIGxldCBjb2xXaWR0aDogYW55ID0gXCIxMDAlXCI7XHJcblxyXG4gICAgICAgICAgaWYgKGFjdHVhbFdpZHRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnN0YXRlLnRhYmxlU2l6ZSB8fCB0aGlzLnByb3BzLnNpemUgfHwgXCJkZWZhdWx0XCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFdpZHRoT2JqID0ge1xyXG4gICAgICAgICAgICAgIHNtYWxsOiAxNixcclxuICAgICAgICAgICAgICBtaWRkbGU6IDE2LFxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IDE2LFxyXG4gICAgICAgICAgICAgIGxhcmdlOiAzMixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgcGFkZGluZ1dpZHRoID0gY29sV2lkdGhPYmpbc2l6ZV0gfHwgMTY7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWN0dWFsV2lkdGggPiBwYWRkaW5nV2lkdGgpIHtcclxuICAgICAgICAgICAgICBjb2xXaWR0aCA9IGFjdHVhbFdpZHRoIC0gcGFkZGluZ1dpZHRoO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbFdpZHRoID0gYWN0dWFsV2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiaW5saW5lLXRhYmxlXCIsIHdpZHRoOiBcIjEwMCVcIiB9fT5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICByZWY9eyhlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmuIXpmaTkuYvliY3nmoR0aXRsZVxyXG4gICAgICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcInRpdGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmlofmnKzmmK/lkKbmuqLlh7pcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuc2Nyb2xsV2lkdGggPiBlbC5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwidGl0bGVcIiwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtdGV4dFwiKX1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb2xXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXHJcbiAgICAgICAgICAgICAgICAgIHRleHRPdmVyZmxvdzogXCJlbGxpcHNpc1wiLFxyXG4gICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7dGV4dH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNvcnRGaWVsZHMuaW5kZXhPZihjb2wuZGF0YUluZGV4KSA+IC0xKSB7XHJcbiAgICAgICAgaWYgKHNvcnRUeXBlID09IFwic2luZ2xlXCIpIHtcclxuICAgICAgICAgIGNvbC5zb3J0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgY29sLnNvcnRPcmRlciA9IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgID8gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc29ydFR5cGUgPT0gXCJtdWx0aXBsZVwiKSB7XHJcbiAgICAgICAgICBjb2wuc29ydGVyID0geyBtdWx0aXBsZTogaW5kZXggfTtcclxuICAgICAgICAgIGNvbC5zb3J0T3JkZXIgPSBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA/IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbDtcclxuICAgIH0pO1xyXG4gICAgY29scy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmICghaXNFbXB0eU9iaihpdGVtLmZpbHRlclByb3BzKSkge1xyXG4gICAgICAgIGxldCBvYmogPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCBzZWFyY2hLZXkgfSA9IGl0ZW0uZmlsdGVyUHJvcHM7XHJcbiAgICAgICAgbGV0IERpdiA9IG51bGw7XHJcbiAgICAgICAgbGV0IHRleHQgPSBpdGVtLnRpdGxlO1xyXG4gICAgICAgIERpdiA9IGdldE5vZGUodHlwZSwge1xyXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IGDmkJzntKIke3RleHR9YCxcclxuICAgICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgICAgcmVmOiB0aGlzLnRhYmxlU2VhcmNoUmVmLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgIGZpbHRlckRyb3Bkb3duOiAoe1xyXG4gICAgICAgICAgICBzZXRTZWxlY3RlZEtleXMsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkS2V5cyxcclxuICAgICAgICAgICAgY29uZmlybSxcclxuICAgICAgICAgICAgY2xlYXJGaWx0ZXJzLFxyXG4gICAgICAgICAgfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoXCIpfT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoLXNwYWNlXCIpfT5cclxuICAgICAgICAgICAgICAgICAge0Rpdn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPFNwYWNlPlxyXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0ZpbHRlclBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaXRlbS5maWVsZCB8fCBpdGVtLmRhdGFJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbHRlclBhcmFtc1trZXldID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVNlYXJjaFJlZi5jdXJyZW50Py5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtczogeyAuLi5uZXdGaWx0ZXJQYXJhbXMgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ydFBhcmFtID0gdGhpcy5nZXRTb3J0UGFyYW0odGhpcy5zdGF0ZS5zb3J0ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5sb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IC4uLm5ld0ZpbHRlclBhcmFtcywgLi4uc29ydFBhcmFtIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoLWJ1dHRvblwiKX1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIOafpeivolxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvU3BhY2U+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmlsdGVySWNvbjogKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPFNlYXJjaE91dGxpbmVkIC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLm9iaixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHNbaW5kZXhdID0gb2JqO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb2xzO1xyXG4gIH1cclxuICByZW5kZXJUb29sQmFyKCkge1xyXG4gICAgbGV0IHsgdGFibGVTaXplLCBjb2x1bW5zLCBzb3J0VHlwZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB7IGZpbHRlckNvbHVtbiwgY29sdW1uczogY29sTGlzdHMsIHRvb2xiYXIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHRhYmxlVG9vbCwgc3RvcmVSZXF1ZXN0Q29uZmlnID0ge30gfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHRvb2xzID0gW1wicmVmcmVzaFwiLCBcInNpemVcIiwgXCJzb3J0XCIsIFwiY29sdW1uXCJdO1xyXG4gICAgbGV0IHRvb2xzQ2xpY2sgPSB7fSBhcyBhbnk7XHJcbiAgICBpZiAodG9vbGJhciA9PSB0cnVlKSB7XHJcbiAgICAgIHRvb2xzID0gW1wicmVmcmVzaFwiLCBcInNpemVcIiwgXCJzb3J0XCIsIFwiY29sdW1uXCJdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdG9vbHMgPSB0b29sYmFyLnRvb2xzXHJcbiAgICAgICAgPyB0b29sYmFyLnRvb2xzXHJcbiAgICAgICAgOiB0YWJsZVRvb2wudG9vbHNcclxuICAgICAgICA/IHRhYmxlVG9vbC50b29sc1xyXG4gICAgICAgIDogdG9vbHM7XHJcbiAgICAgIHRvb2xzQ2xpY2sgPSB0b29sYmFyLm9uVG9vbENsaWNrID8gdG9vbGJhci5vblRvb2xDbGljayA6IHt9O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2l6ZUl0ZW0gPSBbXHJcbiAgICAgIHsgdGl0bGU6IFwi5a695p2+XCIsIGtleTogXCJkZWZhdWx0XCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLkuK3nrYlcIiwga2V5OiBcIm1pZGRsZVwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi57Sn5YeRXCIsIGtleTogXCJzbWFsbFwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc29ydEl0ZW0gPSBbXHJcbiAgICAgIHsgdGl0bGU6IFwi5Y2V5a2X5q615o6S5bqPXCIsIGtleTogXCJzaW5nbGVcIiB9LFxyXG4gICAgICB7IHRpdGxlOiBcIuWkmuWtl+auteaOkuW6j1wiLCBrZXk6IFwibXVsdGlwbGVcIiB9LFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHNvcnRDb250ZW50ID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvdGVudC10aXRsZVwiKX1cclxuICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGN1cnNvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCA/IFwibm90LWFsbG93ZWRcIiA6IFwicG9pbnRlclwiLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCAmJiBcInJnYmEoMCwwLDAsLjQ1KVwiLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuZGVmYXVsdFNvcnQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10sIHNvcnRJbmZvOiB7fSwgZGVmYXVsdFNvcnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIOaBouWkjem7mOiupOaOkuW6j1xyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtzb3J0SXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgc29ydGVyOiBbXSxcclxuICAgICAgICAgICAgICAgICAgc29ydEluZm86IHt9LFxyXG4gICAgICAgICAgICAgICAgICBzb3J0VHlwZTogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRTb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtzb3J0VHlwZSA9PSBpdGVtLmtleSA/IChcclxuICAgICAgICAgICAgICAgIDxhPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7c29ydFR5cGUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KX1cclxuICAgICAgICB7dGhpcy5zdGF0ZS5zb3J0ZXIubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICA8PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY290ZW50LXRpdGxlXCIpfVxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBcInJnYmEoMCwwLDAsLjQ1KVwiIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDlvZPliY3mjpLluo9cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHt0aGlzLnN0YXRlLnNvcnRlci5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfVxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICB7aXRlbS5vcmRlciA9PSBcImFzY2VuZFwiID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8U29ydERlc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS5jb2x1bW4udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgIDwvPlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNpemVDb250ZW50ID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY290ZW50LXRpdGxlXCIpfT5cclxuICAgICAgICAgIOihqOagvOWvhuW6plxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtzaXplSXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgdGFibGVTaXplOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7dGFibGVTaXplID09IGl0ZW0ua2V5ID8gKFxyXG4gICAgICAgICAgICAgICAgPGE+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt0YWJsZVNpemUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KX1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRTaG93Q29scyA9IGNvbHVtbnMuZmlsdGVyKChjb2xzKSA9PiBjb2xzLmluaXRTaG93ICE9PSBmYWxzZSk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IChcclxuICAgICAgPENoZWNrYm94Lkdyb3VwXHJcbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuZmlsdGVyQ29sdW1uLmJpbmQodGhpcyl9XHJcbiAgICAgICAgb3B0aW9ucz17Y29sTGlzdHMubWFwKFxyXG4gICAgICAgICAgKGNvbDogQ29sdW1uVHlwZTx7fT4gJiB7IGZpbHRlckNvbHVtbjogYm9vbGVhbjsgZGF0YUluZGV4OiBhbnkgfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWNvbC5kYXRhSW5kZXgpIHtcclxuICAgICAgICAgICAgICBjb2wuZGF0YUluZGV4ID0gY29sLnRpdGxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgbGFiZWw6IGNvbC50aXRsZSxcclxuICAgICAgICAgICAgICB2YWx1ZTogY29sLmRhdGFJbmRleCxcclxuICAgICAgICAgICAgICBkaXNhYmxlZDogY29sLmZpbHRlckNvbHVtbiA9PT0gZmFsc2UsXHJcbiAgICAgICAgICAgIH0gYXMgQ2hlY2tib3hPcHRpb25UeXBlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICl9XHJcbiAgICAgICAgLy8gZGVmYXVsdFZhbHVlPXtkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wpID0+IGNvbC5kYXRhSW5kZXgpfVxyXG4gICAgICAgIHZhbHVlPXtcclxuICAgICAgICAgIHRoaXMuc3RhdGUuZGVmYXVsdENoZWNrXHJcbiAgICAgICAgICAgID8gZGVmYXVsdFNob3dDb2xzLm1hcCgoY29sKSA9PiBjb2wuZGF0YUluZGV4KVxyXG4gICAgICAgICAgICA6IHRoaXMuc3RhdGUuY2hlY2tDb2x1bW5cclxuICAgICAgICB9XHJcbiAgICAgID48L0NoZWNrYm94Lkdyb3VwPlxyXG4gICAgKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtdG9vbC1iYXJcIil9PlxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwiY29sdW1uXCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTQgfX0+XHJcbiAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCLpgInmi6nmmL7npLrnmoTliJdcIlxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIlxyXG4gICAgICAgICAgICAgIHRyaWdnZXI9XCJjbGlja1wiXHJcbiAgICAgICAgICAgICAgb3ZlcmxheVN0eWxlPXt7IG1pbldpZHRoOiA0MTAsIG1heFdpZHRoOiA0NTAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxBcHBzdG9yZU91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS10aC1hcHAtc3RvcmUtaWNvblwiKX1cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwic29ydFwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGVudD17c29ydENvbnRlbnR9IHRyaWdnZXI9XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgIDxTb3J0QXNjZW5kaW5nT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcInNpemVcIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblJpZ2h0OiA4LCBmb250U2l6ZTogMTQgfX0+XHJcbiAgICAgICAgICAgIDxQb3BvdmVyIHBsYWNlbWVudD1cImJvdHRvbVwiIGNvbnRlbnQ9e3NpemVDb250ZW50fSB0cmlnZ2VyPVwiY2xpY2tcIj5cclxuICAgICAgICAgICAgICA8Q29sdW1uSGVpZ2h0T3V0bGluZWQgLz5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcInJlZnJlc2hcIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiA4LCBmb250U2l6ZTogMTQsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgICBpZiAodG9vbHNDbGljay5vblJlZnJlc2gpIHtcclxuICAgICAgICAgICAgICAgIHRvb2xzQ2xpY2sub25SZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUubG9hZCh7IHBhcmFtcyB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxSZWRvT3V0bGluZWQgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dLZXlzO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0RhdGFzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dEYXRhcztcclxuICB9XHJcbiAgcmVzZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcm93U2VsZWN0aW9uT25TZWxlY3QocmVjb3JkOiBhbnksIHNlbGVjdGVkOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzLCBzZWxlY3RlZFJvd0RhdGFzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IG5ld1NlbGVjdGVkUm93S2V5cyA9IFsuLi5zZWxlY3RlZFJvd0tleXNdO1xyXG4gICAgbGV0IG5ld1NlbGVjdGVkUm93RGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhc107XHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgbmV3U2VsZWN0ZWRSb3dLZXlzID0gWy4uLm5ld1NlbGVjdGVkUm93S2V5cywgcmVjb3JkW3Jvd0tleV1dO1xyXG4gICAgICBuZXdTZWxlY3RlZFJvd0RhdGFzID0gWy4uLm5ld1NlbGVjdGVkUm93RGF0YXMsIHJlY29yZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbSA9PT0gcmVjb3JkW3Jvd0tleV0pIHtcclxuICAgICAgICAgIG5ld1NlbGVjdGVkUm93S2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbVtyb3dLZXldID09PSByZWNvcmRbcm93S2V5XSkge1xyXG4gICAgICAgICAgbmV3U2VsZWN0ZWRSb3dEYXRhcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBuZXdTZWxlY3RlZFJvd0tleXMsXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IG5ld1NlbGVjdGVkUm93RGF0YXMsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcm93U2VsZWN0aW9uT25TZWxlY3RBbGwoc2VsZWN0ZWQ6IGFueSwgc2VsZWN0ZWRSb3dzOiBhbnksIGNoYW5nZVJvd3M6IGFueSkge1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXMsIHNlbGVjdGVkUm93RGF0YXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBuZXdpZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IG5ld2RhdGFzOiBhbnkgPSBbXTtcclxuICAgIGlmIChjaGFuZ2VSb3dzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGNoYW5nZUlkcyA9IGNoYW5nZVJvd3MubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bcm93S2V5XSk7XHJcbiAgICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgIG5ld2lkcyA9IFsuLi5zZWxlY3RlZFJvd0tleXMsIC4uLmNoYW5nZUlkc107XHJcbiAgICAgICAgbmV3ZGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhcywgLi4uY2hhbmdlUm93c107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hhbmdlSWRzLmluZGV4T2YoaXRlbSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgbmV3aWRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dEYXRhcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUlkcy5pbmRleE9mKGl0ZW1bcm93S2V5XSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgbmV3ZGF0YXMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5c107XHJcbiAgICAgIG5ld2RhdGFzID0gWy4uLnNlbGVjdGVkUm93RGF0YXNdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogWy4uLm5ld2lkc10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFsuLi5uZXdkYXRhc10sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVuZGVyKCkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpcyxcclxuICAgICAge1xyXG4gICAgICAgIGxvYWRpbmcsXHJcbiAgICAgICAgZGF0YVNvdXJjZSxcclxuICAgICAgICBwYWdpbmF0aW9uID0ge30sXHJcbiAgICAgICAgc2VhcmNoVGV4dCxcclxuICAgICAgICBmaWVsZE9wdGlvbixcclxuICAgICAgICBzZWFyY2hDb2xvcixcclxuICAgICAgICB0YWJsZVNpemUsXHJcbiAgICAgIH0gPSB0aGlzLnN0YXRlLFxyXG4gICAgICBwcm9wcyA9IHV0aWxzLm9taXQoXHJcbiAgICAgICAgdGhpcy5wcm9wcyxcclxuICAgICAgICBbXHJcbiAgICAgICAgICBcInN0b3JlXCIsXHJcbiAgICAgICAgICBcIm9uQ2hhbmdlXCIsXHJcbiAgICAgICAgICBcImNvbHVtbnNcIixcclxuICAgICAgICAgIFwicmVzZXRDb2x1bW5cIixcclxuICAgICAgICAgIFwidG9vbGJhclwiLFxyXG4gICAgICAgICAgXCJzb3J0RmllbGRzXCIsXHJcbiAgICAgICAgICBcImZpbHRlckNvbHVtblwiLFxyXG4gICAgICAgICAgXCJzb3J0U2VhcmNoXCIsXHJcbiAgICAgICAgICBcInNob3dSb3dTZWxlY3Rpb25cIixcclxuICAgICAgICAgIFwicGFnZVR5cGVcIixcclxuICAgICAgICBdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHJvd0tleTogXCJpZFwiLFxyXG4gICAgICAgICAgY2xpY2tDaGFuZ2VDb2xvcjogZmFsc2UsXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgaWYgKHByb3BzLnBhZ2luYXRpb24gIT09IGZhbHNlKSB7XHJcbiAgICAgIHByb3BzLnBhZ2luYXRpb24gPSB7XHJcbiAgICAgICAgcG9zaXRpb246IFtcImJvdHRvbVJpZ2h0XCJdLFxyXG4gICAgICAgIHNob3dTaXplQ2hhbmdlcjogdHJ1ZSxcclxuICAgICAgICBzaG93UXVpY2tKdW1wZXI6IHRydWUsXHJcbiAgICAgICAgLi4ucGFnaW5hdGlvbixcclxuICAgICAgICAuLi5wcm9wcy5wYWdpbmF0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAocHJvcHMuc2hvd1RvdGFsID09IHRydWUpIHtcclxuICAgICAgICBwcm9wcy5wYWdpbmF0aW9uLnNob3dUb3RhbCA9IGZ1bmN0aW9uICh0b3RhbCwgW2Zyb20sIHRvXSkge1xyXG4gICAgICAgICAgLy8gcmV0dXJuIFwi5pi+56S6IFwiICsgZnJvbSArIFwiIC0gXCIgKyB0byArIFwi5p2h77yM5YWxIFwiICsgdG90YWwgKyBcIiDmnaFcIjtcclxuICAgICAgICAgIHJldHVybiBcIuWFsSBcIiArIHRvdGFsICsgXCIg5p2hXCI7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvcHMub25DaGFuZ2UgPSBmdW5jdGlvbiAocGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSkge1xyXG4gICAgICBfdGhpcy5vbkNoYW5nZShfdGhpcy5zdGF0ZS5wYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKTtcclxuICAgIH07XHJcbiAgICBpZiAocHJvcHMuY2xpY2tDaGFuZ2VDb2xvcikge1xyXG4gICAgICBjb25zdCBvblJvd0ZuID0gcHJvcHMub25Sb3c7XHJcbiAgICAgIHByb3BzLm9uUm93ID0gZnVuY3Rpb24gKHJlY29yZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgY3VzdG9tID0gb25Sb3dGbiA/IG9uUm93Rm4ocmVjb3JkLCBpbmRleCkgOiB7fTtcclxuICAgICAgICBjb25zdCBvbkNsaWNrRm4gPSBjdXN0b20ub25DbGljaztcclxuICAgICAgICBjdXN0b20ub25DbGljayA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmVJbmRleDogaW5kZXgsIC8v6I635Y+W54K55Ye76KGM55qE57Si5byVXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2xpY2tGbiwgX3RoaXMsIFtldmVudF0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGN1c3RvbTtcclxuICAgICAgfTtcclxuICAgICAgcHJvcHMucm93Q2xhc3NOYW1lID0gZnVuY3Rpb24gKHJlY29yZCwgaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gaW5kZXggPT09IF90aGlzLnN0YXRlLmFjdGl2ZUluZGV4XHJcbiAgICAgICAgICA/IFwibnNjLXRhYmxlLWNsaWNrUm93U3R5bGVcIlxyXG4gICAgICAgICAgOiBcIlwiO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld0RhdGFTb3VyY2UgPSBbXTtcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0cmVlVXRpbHMuZ2V0U2VhcmNoTWVudURhdGFzKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgc2VhcmNoVGV4dCxcclxuICAgICAgICBmaWVsZE9wdGlvbixcclxuICAgICAgICBzZWFyY2hDb2xvclxyXG4gICAgICApO1xyXG4gICAgICBuZXdEYXRhU291cmNlID0gZGF0YS50cmVlRGF0YXM7XHJcbiAgICAgIHByb3BzLmV4cGFuZGVkUm93S2V5cyA9IGRhdGEub3BlbktleXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdEYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuICAgIH1cclxuICAgIHByb3BzLnN0b3JlID0gcHJvcHMuc3RvcmUgfHwge307XHJcbiAgICBwcm9wcy5zdG9yZS5hdXRvTG9hZCA9IHByb3BzLnN0b3JlLmF1dG9Mb2FkID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIGNvbnN0IHsgZHJhZ2FibGUgfSA9IF90aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZHJhZ2FibGVQcm9wcyA9XHJcbiAgICAgIGRyYWdhYmxlID09PSB0cnVlXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IEJvZHlSb3dDb21wb25lbnQsXHJcbiAgICAgICAgICAgIG9uUm93OiAocmVjb3JkLCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgICBpbmRleCxcclxuICAgICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgICAgbW92ZVJvdzogdGhpcy5tb3ZlUm93LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IHt9O1xyXG4gICAgbGV0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIGNvbnN0IHJlc2l6ZVByb3BzID1cclxuICAgICAgcmVzaXplQ29sdW1uID09PSB0cnVlID8geyBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHMgfSA6IG51bGw7XHJcbiAgICBjb25zdCB7IHRhYmxlVG9vbCB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdG9vbEZsYWcgPSBmYWxzZTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCd0YWJsZVRvb2wnLHRhYmxlVG9vbClcclxuXHJcbiAgICBpZiAodGFibGVUb29sLnNob3cgPT09IHRydWUpIHtcclxuICAgICAgdG9vbEZsYWc9dHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb3BzLnRvb2xiYXIgJiYgdGhpcy5wcm9wcy50b29sYmFyLnNob3cgPT09IHRydWUpIHtcclxuICAgICAgdG9vbEZsYWcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMuc2hvd1Jvd1NlbGVjdGlvbikge1xyXG4gICAgICBjb25zdCB7IHJvd1NlbGVjdGlvbiA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICBwcm9wcyA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICByb3dTZWxlY3Rpb246IHtcclxuICAgICAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXMsXHJcbiAgICAgICAgICBvblNlbGVjdDogdGhpcy5yb3dTZWxlY3Rpb25PblNlbGVjdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgb25TZWxlY3RBbGw6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3RBbGwuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGNvbHVtbldpZHRoOiA0MCxcclxuICAgICAgICAgIC4uLnJvd1NlbGVjdGlvbixcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyB0YWJsZVByb3BzOiBjb25maWdUYWJsZVByb3BzIH0gPSBjb25maWcoKTtcclxuICAgIGNvbnN0IERlZmF1bHRUYWJsZSA9IChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZVwiKX0+XHJcbiAgICAgICAge3Rvb2xGbGFnICYmIHRoaXMucmVuZGVyVG9vbEJhcigpfVxyXG4gICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgY2hpbGRyZW5Db2x1bW5OYW1lPVwiY2hpbGROb2Rlc1wiXHJcbiAgICAgICAgICBzaGVpdGVtXHJcbiAgICAgICAgICBkYXRhU291cmNlPXtuZXdEYXRhU291cmNlfVxyXG4gICAgICAgICAgY29sdW1ucz17dGhpcy5nZXRDb2x1bW5zKCl9XHJcbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnRcIiksIHByb3BzLmNsYXNzTmFtZSl9XHJcbiAgICAgICAgICBsb2NhbGU9e3tcclxuICAgICAgICAgICAgZW1wdHlUZXh0OiAoXHJcbiAgICAgICAgICAgICAgPE5vRGF0YSBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS1ub2RhdGFcIil9IC8+XHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgc2Nyb2xsPXt7IHg6IFwibWF4LWNvbnRlbnRcIiB9fVxyXG4gICAgICAgICAgey4uLmNvbmZpZ1RhYmxlUHJvcHN9XHJcbiAgICAgICAgICB7Li4ucmVzaXplUHJvcHN9XHJcbiAgICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgICAgICB7Li4uZHJhZ2FibGVQcm9wc31cclxuICAgICAgICAgIHNpemU9e3RhYmxlU2l6ZX1cclxuICAgICAgICAgIHBhZ2luYXRpb249e2ZhbHNlfVxyXG4gICAgICAgICAgLy8gc3R5bGU9e3sgaGVpZ2h0OiA2MDAgfX1cclxuICAgICAgICAvPlxyXG4gICAgICAgIHtwcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXBhZ2luYXRpb25cIil9PlxyXG4gICAgICAgICAgICA8UGFnaW5hdGlvblxyXG4gICAgICAgICAgICAgIHsuLi5wcm9wcy5wYWdpbmF0aW9ufVxyXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsocGFnZSwgcGFnZVNpemUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhID0gdGhpcy5zdGF0ZS5leHRyYTtcclxuICAgICAgICAgICAgICAgIGV4dHJhLmFjdGlvbiA9IFwicGFnaW5hdGVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoKHsgcGFnaW5hdGlvbiA9IHt9IH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7IC4uLnBhZ2luYXRpb24sIGN1cnJlbnQ6IHBhZ2UsIHBhZ2VTaXplIH0sXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoXHJcbiAgICAgICAgICAgICAgICAgIHsgY3VycmVudDogcGFnZSwgcGFnZVNpemUgfSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5maWx0ZXIsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuc29ydGVyLFxyXG4gICAgICAgICAgICAgICAgICBleHRyYVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBkcmFnYWJsZSA9PT0gdHJ1ZSA/IChcclxuICAgICAgPERuZFByb3ZpZGVyIGJhY2tlbmQ9e0hUTUw1QmFja2VuZH0+e0RlZmF1bHRUYWJsZX08L0RuZFByb3ZpZGVyPlxyXG4gICAgKSA6IChcclxuICAgICAgRGVmYXVsdFRhYmxlXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgd2l0aFpoTG9jYWxlKE5TQ1RhYmxlKTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUNFQSxnQkFBZ0IsRUFDaEJDLGFBQWEsRUFDYkMsb0JBQW9CLEVBQ3BCQyxjQUFjLEVBQ2RDLHFCQUFxQixFQUNyQkMsc0JBQXNCLEVBQ3RCQyxZQUFZLFFBQ1AsbUJBQW1CO0FBQzFCLFNBQVNDLFVBQVUsUUFBUSxtQkFBbUI7QUFDOUMsT0FBT0MsS0FBSyxJQUFJQyxTQUFTLFFBQW9CLGFBQWE7QUFDMUQsU0FBU0MsS0FBSyxRQUFRLHVCQUF1QjtBQWU3QyxPQUFPLEtBQUtDLEtBQUssTUFBTSxPQUFPO0FBQzlCLFNBQVNDLFdBQVcsUUFBUSxXQUFXO0FBQ3ZDLE9BQU9DLE9BQU8sSUFBSUMsY0FBYyxFQUFFQyxhQUFhLFFBQVEsbUJBQW1CO0FBQzFFLE9BQU9DLFNBQVMsTUFBTSxpQkFBaUI7QUFDdkMsT0FBTyxxQkFBcUI7QUFDNUIsTUFBTTtFQUFFQyxnQkFBZ0I7RUFBRUM7QUFBYSxDQUFDLEdBQUdMLE9BQU87QUFDbEQsT0FBT00sWUFBWSxNQUFNLHdCQUF3QjtBQUNqRCxTQUFTQyxTQUFTLFFBQVEsaUJBQWlCO0FBQzNDLE9BQU8sc0JBQXNCO0FBQzdCLFNBQVNDLE9BQU8sRUFBRUMsT0FBTyxRQUF5QixhQUFhO0FBQy9ELE9BQU9DLE1BQU0sTUFBTSwwQkFBMEI7QUFDN0MsU0FBU0MsVUFBVSxRQUFRLG1CQUFtQjtBQUM5QyxPQUFPQyxNQUFNLE1BQU0sY0FBYztBQUVqQyxPQUFPQyxHQUFHLE1BQU0sWUFBWTtBQUU1QixNQUFNQyxNQUFNLEdB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
|
|
1198
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBzdG9yZU91dGxpbmVkIiwiQ2hlY2tPdXRsaW5lZCIsIkNvbHVtbkhlaWdodE91dGxpbmVkIiwiU2VhcmNoT3V0bGluZWQiLCJTb3J0QXNjZW5kaW5nT3V0bGluZWQiLCJTb3J0RGVzY2VuZGluZ091dGxpbmVkIiwiUmVkb091dGxpbmVkIiwiaXNFbXB0eU9iaiIsIlN0b3JlIiwiUGFnZVN0b3JlIiwidXRpbHMiLCJSZWFjdCIsIkRuZFByb3ZpZGVyIiwiQm9keVJvdyIsIkRuZENvbnRleHRUeXBlIiwiSUJvZHlSb3dQcm9wcyIsInRyZWVVdGlscyIsIkJvZHlSb3dDb21wb25lbnQiLCJIVE1MNUJhY2tlbmQiLCJ3aXRoWmhMb2NhbGUiLCJSZXNpemFibGUiLCJnZXRMZXNzIiwiZ2V0Tm9kZSIsIk5vRGF0YSIsImdldFN0b3JhZ2UiLCJjb25maWciLCJjbHMiLCJndWlkIiwiZ2V0RmxhdHRlbkRhdGEiLCJzdHlsZXMiLCJSZXNpemVhYmxlVGl0bGUiLCJwcm9wcyIsIm9uUmVzaXplIiwid2lkdGgiLCJyZXN0UHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJjcmVhdGVFbGVtZW50IiwiaGVpZ2h0IiwiZHJhZ2dhYmxlT3B0cyIsImVuYWJsZVVzZXJTZWxlY3RIYWNrIiwiTlNDVGFibGUiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsIl9hdXRvVHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsIm9uQmVmb3JlTG9hZCIsImxvYWQiLCJoZWFkZXIiLCJjZWxsIiwiaW5kZXgiLCJlIiwiX3JlZiIsInNpemUiLCJjb2xzIiwic3RhdGUiLCJuZXh0Q29sdW1ucyIsIl9vYmplY3RTcHJlYWQiLCJzZXRTdGF0ZSIsImdldENvbHVtbnMiLCJldiIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJfdGhpcyIsImV2ZW50VHlwZSIsInBheWxvYWQiLCJ0YWJsZVNpemUiLCJkcmFnSW5kZXgiLCJob3ZlckluZGV4IiwiZHJhZyIsInRhcmdldCIsImRyYWdOb2RlIiwicmVjb3JkIiwidGFyZ2V0Tm9kZSIsIm1vdmVBcnJheSIsImlkcyIsInBhcmVudE5vZGUiLCJnZXRDaGlsZE5vZGVJZHMiLCJwYXJhbXMiLCJpZCIsInBhcmVudElkIiwiYXR0cmlidXRlIiwibW92ZVJvdyIsInN0b3JlIiwicmVsb2FkIiwibW9kYWwiLCJ0eXBlIiwic3RvcmVQcmVmaXgiLCJhdXRvVHlwZSIsImNvbnRlbnQiLCJkYXRhU291cmNlIiwiY29sdW1ucyIsImxvYWRpbmciLCJwYWdpbmF0aW9uIiwiYWN0aXZlSW5kZXgiLCJzZWFyY2hUZXh0IiwiZmllbGRPcHRpb24iLCJzZWFyY2hDb2xvciIsInNvcnRzIiwiZmlsdGVyUGFyYW1zIiwic29ydFR5cGUiLCJzb3J0ZXIiLCJzb3J0SW5mbyIsImRlZmF1bHRTb3J0IiwiY2hlY2tDb2x1bW4iLCJkZWZhdWx0Q2hlY2siLCJzZWxlY3RlZFJvd0tleXMiLCJzZWxlY3RlZFJvd0RhdGFzIiwiZmlsdGVyIiwiZXh0cmEiLCJfcmVmMiIsImxpc3RlbmVycyIsImxpc3RlbmVyc1Byb3BzIiwicmVzdFN0b3JlIiwiX2V4Y2x1ZGVkMiIsInN0b3JlUHJvcHMiLCJtb2RlbCIsImNvbXBvbmVudCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsImRhdGFDaGFuZ2VkIiwibW9kZWxEYXRhIiwicGFnaW5nIiwiZ2V0UGFnaW5hdGlvbiIsIm9uRXJyb3JMb2FkIiwiZXJyIiwicmVzcG9uc2UiLCJhdXRvTG9hZCIsIk9iamVjdCIsImFzc2lnbiIsImN1cnJlbnQiLCJnZXRJbml0Q2hlY2tlZENvbHVtbnMiLCJjaGVja2VkS2V5cyIsInRyYXZlcnNlIiwiZm9yRWFjaCIsImNvbCIsImluaXRTaG93IiwicHVzaCIsInVuaXF1ZUtleSIsImNoaWxkcmVuIiwibGVuZ3RoIiwiY29tcG9uZW50RGlkTW91bnQiLCJyZXNpemVDb2x1bW4iLCJuZXdDb2x1bW5zIiwiZ2VuZXJhdGVVbmlxdWVLZXlzQW5kUGF0aHMiLCJkZWZhdWx0Q2hlY2tlZENvbHVtbnMiLCJzdG9yZUNvbHVtbnMiLCJrZXlDb2x1bW5zIiwic2V0RGF0YSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5NZXNzYWdlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicHJlU3RhdGUiLCJyZXNldENvbHVtbiIsIm5ld0NvbHMiLCJjb2xzcyIsIm1hcCIsInRlbXAiLCJvbkhlYWRlckNlbGwiLCJjb2x1bW4iLCJoYW5kbGVSZXNpemUiLCJjbGVhclNlbGVjdENvbG9yIiwiZ2V0UGFnaW5hdGlvbkJ5U3RvcmUiLCJvbkNoYW5nZSIsImZpbHRlcnMiLCJhdXRvT25DaGFuZ2UiLCJhdXRvU29ydCIsImF1dG9QYWdpbmF0aW9uIiwiaXNNdWx0aXBsZSIsIkFycmF5IiwiaXNBcnJheSIsImhhbmRsZVBhZ2luYXRpb24iLCJwIiwiY3VycmVudEtleSIsInBhZ2VTaXplS2V5IiwicGFnZVNpemUiLCJhc2NQYXJhbXMiLCJnZXRTb3J0UGFyYW0iLCJvbkNoYW5nZUZuIiwiZ2V0U3RvcmUiLCJnZXRNb2RlbCIsImhhbmRsZVNlYXJjaCIsInZhbCIsImZpbHRlckNvbHVtbnNCeUNoZWNrZWRLZXlzIiwicmVzdWx0IiwiaXNDb2x1bW5DaGVja2VkIiwiaW5jbHVkZXMiLCJuZXdDb2wiLCJmaWx0ZXJlZENoaWxkcmVuIiwiZmlsdGVyQ29sdW1uIiwiY2hlY2tlZFZhbHVlIiwiaXNDaGVja2VkIiwibWFwRGF0YSIsImN1cnJlbnRDaGVja2VkS2V5cyIsImdldEFsbENoaWxkcmVuS2V5cyIsImtleXMiLCJjaGlsZCIsImNvbmNhdCIsImFsbENoaWxkcmVuS2V5cyIsImtleSIsInBhdGgiLCJwYXRoUGFydHMiLCJzcGxpdCIsImkiLCJwYXJlbnRQYXRoIiwic2xpY2UiLCJqb2luIiwicGFyZW50Q29sIiwidmFsdWVzIiwiZmluZCIsImMiLCJhbGxTaWJsaW5ncyIsImhhc0NoZWNrZWRTaWJsaW5nIiwic29tZSIsIl9tZXNzYWdlIiwid2FybmluZyIsImZpbHRlckNvbHVtbnMiLCJzb3J0U3RhdGUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzb3J0U2VhcmNoIiwib3JkZXJJdGVtcyIsImZpZWxkIiwiZGF0YUluZGV4IiwiYXNjIiwib3JkZXIiLCJ2Iiwic3RyaW5naWZ5IiwiaXNCZXlvbmQiLCJldmVudCIsInRleHRSYW5nZSIsImVsIiwidGV4dENvbnRlbnQiLCJ0YXJnZXRXIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicmFuZ2UiLCJkb2N1bWVudCIsImNyZWF0ZVJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJjaGlsZE5vZGVzIiwicmFuZ2VXaWR0aCIsInNldFNlbGVjdGVkUm93S2V5cyIsInNldFNlbGVjdGVkUm93RGF0YXMiLCJzb3J0RmllbGRzIiwiZGVmYXVsdFNob3dDb2xzIiwiZWxsaXBzaXMiLCJyZW5kZXIiLCJzaG93VGl0bGUiLCJ0ZXh0IiwiX3RoaXMkc3RhdGUkY29scyIsImN1cnJlbnRDb2wiLCJhY3R1YWxXaWR0aCIsImNvbFdpZHRoIiwiY29sV2lkdGhPYmoiLCJzbWFsbCIsIm1pZGRsZSIsImRlZmF1bHQiLCJsYXJnZSIsInBhZGRpbmdXaWR0aCIsInN0eWxlIiwiZGlzcGxheSIsInJlZiIsInJlbW92ZUF0dHJpYnV0ZSIsInNjcm9sbFdpZHRoIiwiY2xpZW50V2lkdGgiLCJzZXRBdHRyaWJ1dGUiLCJjbGFzc05hbWUiLCJvdmVyZmxvdyIsInRleHRPdmVyZmxvdyIsIndoaXRlU3BhY2UiLCJpbmRleE9mIiwic29ydE9yZGVyIiwibXVsdGlwbGUiLCJpdGVtIiwiZmlsdGVyUHJvcHMiLCJvYmoiLCJzZWFyY2hLZXkiLCJEaXYiLCJ0aXRsZSIsInBsYWNlaG9sZGVyIiwidGFibGVTZWFyY2hSZWYiLCJmaWx0ZXJEcm9wZG93biIsIl9yZWYzIiwic2V0U2VsZWN0ZWRLZXlzIiwic2VsZWN0ZWRLZXlzIiwiY29uZmlybSIsImNsZWFyRmlsdGVycyIsIl9TcGFjZSIsIl9CdXR0b24iLCJvbkNsaWNrIiwiX3RoaXMkdGFibGVTZWFyY2hSZWYkIiwibmV3RmlsdGVyUGFyYW1zIiwiZ2V0VmFsdWUiLCJzb3J0UGFyYW0iLCJmaWx0ZXJJY29uIiwibGV2ZWwiLCJjdXJyZW50UGF0aCIsImxlYWYiLCJjaGlsZHJlbktleXMiLCJyZW5kZXJUb29sQmFyIiwiY29sTGlzdHMiLCJ0b29sYmFyIiwidGFibGVUb29sIiwic3RvcmVSZXF1ZXN0Q29uZmlnIiwidG9vbHMiLCJ0b29sc0NsaWNrIiwib25Ub29sQ2xpY2siLCJzaXplSXRlbSIsInNvcnRJdGVtIiwic29ydENvbnRlbnQiLCJGcmFnbWVudCIsImN1cnNvciIsImNvbG9yIiwic2l6ZUNvbnRlbnQiLCJuZXdNYXBEYXRhIiwia2V5RmllbGQiLCJjaGlsZEZpZWxkIiwiX0NoZWNrYm94IiwiY2hlY2tlZCIsImZvbnRTaXplIiwiX1BvcG92ZXIiLCJwbGFjZW1lbnQiLCJ0cmlnZ2VyIiwib3ZlcmxheVN0eWxlIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsIm1hcmdpblJpZ2h0Iiwib25SZWZyZXNoIiwiZ2V0U2VsZWN0ZWRSb3dLZXlzIiwiZ2V0U2VsZWN0ZWRSb3dEYXRhcyIsInJlc2V0U2VsZWN0ZWRSb3dLZXlzIiwicm93U2VsZWN0aW9uT25TZWxlY3QiLCJzZWxlY3RlZCIsInJvd0tleSIsIm5ld1NlbGVjdGVkUm93S2V5cyIsIm5ld1NlbGVjdGVkUm93RGF0YXMiLCJzcGxpY2UiLCJyb3dTZWxlY3Rpb25PblNlbGVjdEFsbCIsInNlbGVjdGVkUm93cyIsImNoYW5nZVJvd3MiLCJuZXdpZHMiLCJuZXdkYXRhcyIsImNoYW5nZUlkcyIsIm9taXQiLCJjbGlja0NoYW5nZUNvbG9yIiwicG9zaXRpb24iLCJzaG93U2l6ZUNoYW5nZXIiLCJzaG93UXVpY2tKdW1wZXIiLCJzaG93VG90YWwiLCJ0b3RhbCIsIl9yZWY0IiwiZnJvbSIsInRvIiwib25Sb3dGbiIsIm9uUm93IiwiY3VzdG9tIiwib25DbGlja0ZuIiwicm93Q2xhc3NOYW1lIiwibmV3RGF0YVNvdXJjZSIsImdldFNlYXJjaE1lbnVEYXRhcyIsInRyZWVEYXRhcyIsImV4cGFuZGVkUm93S2V5cyIsIm9wZW5LZXlzIiwiZHJhZ2FibGUiLCJkcmFnYWJsZVByb3BzIiwiY29tcG9uZW50cyIsInJlc2l6ZVByb3BzIiwidG9vbEZsYWciLCJzaG93Iiwic2hvd1Jvd1NlbGVjdGlvbiIsInJvd1NlbGVjdGlvbiIsIm9uU2VsZWN0IiwiYmluZCIsIm9uU2VsZWN0QWxsIiwiY29sdW1uV2lkdGgiLCJ0YWJsZVByb3BzIiwiY29uZmlnVGFibGVQcm9wcyIsIkRlZmF1bHRUYWJsZSIsIl9UYWJsZSIsIl9leHRlbmRzIiwiY2hpbGRyZW5Db2x1bW5OYW1lIiwic2hlaXRlbSIsImxvY2FsZSIsImVtcHR5VGV4dCIsInNjcm9sbCIsIngiLCJfUGFnaW5hdGlvbiIsInBhZ2UiLCJhY3Rpb24iLCJfcmVmNSIsImJhY2tlbmQiLCJkcmFnVXJsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYmFzZS90YWJsZS9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQERlc2NyaXB0dGlvbjpcclxuICogQHZlcnNpb246XHJcbiAqIEBBdXRob3I6IHJ4emh1XHJcbiAqIEBEYXRlOiAyMDIxLTAzLTIzIDA4OjQ2OjIwXHJcbiAqIEBMYXN0RWRpdG9yczogcnh6aHVcclxuICogQExhc3RFZGl0VGltZTogMjAyMS0wMy0yMyAxMDozMDo0MlxyXG4gKi9cclxuaW1wb3J0IHtcclxuICBBcHBzdG9yZU91dGxpbmVkLFxyXG4gIENoZWNrT3V0bGluZWQsXHJcbiAgQ29sdW1uSGVpZ2h0T3V0bGluZWQsXHJcbiAgU2VhcmNoT3V0bGluZWQsXHJcbiAgU29ydEFzY2VuZGluZ091dGxpbmVkLFxyXG4gIFNvcnREZXNjZW5kaW5nT3V0bGluZWQsXHJcbiAgUmVkb091dGxpbmVkLFxyXG59IGZyb20gXCJAYW50LWRlc2lnbi9pY29uc1wiO1xyXG5pbXBvcnQgeyBpc0VtcHR5T2JqIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBTdG9yZSwgeyBQYWdlU3RvcmUsIFN0b3JlUHJvcHMgfSBmcm9tIFwiQGJqLW5zYy9tc25cIjtcclxuaW1wb3J0IHsgdXRpbHMgfSBmcm9tIFwiQGJqLW5zYy9tc24vbGliL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgQnV0dG9uLFxyXG4gIENoZWNrYm94LFxyXG4gIENoZWNrYm94T3B0aW9uVHlwZSxcclxuICBNZW51LFxyXG4gIG1lc3NhZ2UsXHJcbiAgUGFnaW5hdGlvbixcclxuICBQb3BvdmVyLFxyXG4gIFNwYWNlLFxyXG4gIFRhYmxlLFxyXG4gIFRhYmxlUHJvcHMsXHJcbiAgVG9vbHRpcCxcclxufSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBUYWJsZVBhZ2luYXRpb25Db25maWcgfSBmcm9tIFwiYW50ZC9saWIvdGFibGVcIjtcclxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IERuZFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LWRuZFwiO1xyXG5pbXBvcnQgQm9keVJvdywgeyBEbmRDb250ZXh0VHlwZSwgSUJvZHlSb3dQcm9wcyB9IGZyb20gXCIuLi9jb21tb24vQm9keVJvd1wiO1xyXG5pbXBvcnQgdHJlZVV0aWxzIGZyb20gXCIuLi8uLi90cmVlVXRpbHNcIjtcclxuaW1wb3J0IFwiLi9pbmRleC5tb2R1bGUubGVzc1wiO1xyXG5jb25zdCB7IEJvZHlSb3dDb21wb25lbnQsIEhUTUw1QmFja2VuZCB9ID0gQm9keVJvdztcclxuaW1wb3J0IHdpdGhaaExvY2FsZSBmcm9tIFwiLi4vY29tbW9uL3dpdGhaaExvY2FsZVwiO1xyXG5pbXBvcnQgeyBSZXNpemFibGUgfSBmcm9tIFwicmVhY3QtcmVzaXphYmxlXCI7XHJcbmltcG9ydCBcIi4vcmVzaXplLm1vZHVsZS5sZXNzXCI7XHJcbmltcG9ydCB7IGdldExlc3MsIGdldE5vZGUsIHNpbXBsaWZ5Q29sdW1ucyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgTm9EYXRhIGZyb20gXCIuLi8uLi9iYXNlL2NvbW1vbi9Ob0RhdGFcIjtcclxuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi8uLi9jb25maWdcIjtcclxuaW1wb3J0IEVsbGlwc2VDZWxsIGZyb20gXCIuLi9jb21tb24vRWxsaXBzZUNlbGxcIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwibG9kYXNoL2lzRXF1YWxcIjtcclxuaW1wb3J0IHsgZ3VpZCwgZ2V0RmxhdHRlbkRhdGEgfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuY29uc3Qgc3R5bGVzID0gbnVsbDtcclxuaW50ZXJmYWNlIElEcmFnUGFyYW1zIHtcclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGlkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuICBwYXJlbnRJZDogc3RyaW5nIHwgbnVtYmVyO1xyXG59XHJcbi8vIGludGVyZmFjZSBTdG9yZVByb3BzIHt9XHJcblxyXG5leHBvcnQgdHlwZSBTdG9yZVR5cGUgPSBcIlBhZ2VTdG9yZVwiIHwgXCJUcmVlU3RvcmVcIiB8IFwiQmFzZVN0b3JlXCI7XHJcblxyXG5pbnRlcmZhY2UgTlNDVGFibGVQYWdpbmF0aW9uIGV4dGVuZHMgVGFibGVQYWdpbmF0aW9uQ29uZmlnIHtcclxuICB0b3RhbEtleT86IHN0cmluZztcclxuICBwYWdlU2l6ZUtleT86IHN0cmluZztcclxuICBjdXJyZW50S2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVG9vbEJhclByb3BzIHtcclxuICBzaG93OiBib29sZWFuO1xyXG4gIHRvb2xzPzogQXJyYXk8c3RyaW5nPjtcclxuICBvblRvb2xDbGljaz86IHsgb25SZWZyZXNoPzogYW55OyBvblNvcnQ/OiBhbnkgfTtcclxufVxyXG5pbnRlcmZhY2UgTlNDVGFibGVQcm9wcyBleHRlbmRzIFRhYmxlUHJvcHM8YW55PiB7XHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIHNob3dUb3RhbD86IGJvb2xlYW47IC8vIOaYr+WQpuaYvuekuuaAu+adoeaVsOS/oeaBr++8jOm7mOiupHRydWVcclxuICBkcmFnYWJsZT86IGJvb2xlYW47IC8vIOaYr+WQpuWPr+aLluWKqCwg6buY6K6kZmFsc2VcclxuICBmaWx0ZXJDb2x1bW4/OiBib29sZWFuOyAvLyDmmK/lkKbmlK/mjIHov4fmu6TmmL7npLrooajmoLzliJcsIOm7mOiupHRydWVcclxuICBtb3ZlUm93PzogKHBhcmFtczogSURyYWdQYXJhbXMpID0+IHZvaWQ7IC8vIOaLluaLveWujOaIkOWQjueahOWbnuiwg1xyXG4gIGRyYWdVcmw/OiBzdHJpbmc7IC8vIOS/neWtmOaLluaLveaOkuW6j+eahOaOpeWPo1xyXG4gIHBhZ2luYXRpb24/OiBmYWxzZSB8IE5TQ1RhYmxlUGFnaW5hdGlvbjtcclxuICBhdXRvUGFnaW5hdGlvbj86IGJvb2xlYW47IC8vIOe7hOS7tuaYr+WQpuiHquWKqOWkhOeQhuWIhumhtVxyXG4gIGF1dG9Tb3J0PzogYm9vbGVhbjsgLy/nu4Tku7bmmK/lkKboh6rliqjlpITnkIbmjpLluo9cclxuICBhdXRvT25DaGFuZ2U/OiBib29sZWFuOyAvLyDnu4Tku7bmmK/lkKboh6rliqhvbkNoYW5nZSwgZmFsc2XliJnkuI3lgZrku7vkvZXlpITnkIblhajpg6jkuqTnu5nosIPnlKjmlrlcclxuICByZXNpemVDb2x1bW4/OiBib29sZWFuO1xyXG4gIHNvcnRGaWVsZHM/OiBBcnJheTxzdHJpbmc+OyAvL+mcgOimgeaOkuW6j+eahOWtl+autUluZGV4XHJcbiAgdG9vbGJhcj86IFRvb2xCYXJQcm9wcyB8IGJvb2xlYW47XHJcbiAgYXV0b1NpemU/OiBib29sZWFuO1xyXG4gIHNvcnRTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpua3u+WKoOaOkuW6j+afpeivoizpu5jorqR0cnVlXHJcbiAgc2hvd1Jvd1NlbGVjdGlvbj86IGJvb2xlYW47XHJcbiAgcm93S2V5Pzogc3RyaW5nO1xyXG4gIFtwcm9wc05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSU5TQ1RhYmxlUHJvcHMgPSB0eXBlb2YgTlNDVGFibGUuZGVmYXVsdFByb3BzICYgTlNDVGFibGVQcm9wcztcclxuZXhwb3J0IHsgRG5kQ29udGV4dFR5cGUsIElCb2R5Um93UHJvcHMgfTtcclxuXHJcbmNvbnN0IFJlc2l6ZWFibGVUaXRsZSA9IChwcm9wczogYW55KSA9PiB7XHJcbiAgY29uc3QgeyBvblJlc2l6ZSwgd2lkdGgsIC4uLnJlc3RQcm9wcyB9ID0gcHJvcHM7XHJcbiAgcmV0dXJuIChcclxuICAgIDxSZXNpemFibGVcclxuICAgICAgd2lkdGg9e3dpZHRoIHx8IDE1MH1cclxuICAgICAgaGVpZ2h0PXswfVxyXG4gICAgICBvblJlc2l6ZT17b25SZXNpemV9XHJcbiAgICAgIGRyYWdnYWJsZU9wdHM9e3sgZW5hYmxlVXNlclNlbGVjdEhhY2s6IGZhbHNlIH19XHJcbiAgICA+XHJcbiAgICAgIDx0aCB7Li4ucmVzdFByb3BzfSAvPlxyXG4gICAgPC9SZXNpemFibGU+XHJcbiAgKTtcclxufTtcclxuY2xhc3MgTlNDVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SU5TQ1RhYmxlUHJvcHMsIGFueT4ge1xyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XHJcbiAgICBkcmFnYWJsZTogZmFsc2UsXHJcbiAgICBzaG93VG90YWw6IHRydWUsXHJcbiAgICBmaWx0ZXJDb2x1bW46IHRydWUsXHJcbiAgICBkcmFnVXJsOiBcIlwiLFxyXG4gICAgYXV0b1BhZ2luYXRpb246IHRydWUsXHJcbiAgICBhdXRvU29ydDogdHJ1ZSxcclxuICAgIGF1dG9PbkNoYW5nZTogdHJ1ZSxcclxuICAgIHJlc2l6ZUNvbHVtbjogdHJ1ZSxcclxuICAgIHRvb2xiYXI6IHtcclxuICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgIG9uVG9vbENsaWNrOiB7fSBhcyBhbnksXHJcbiAgICAgIHRvb2xzOiBbXSBhcyBhbnksXHJcbiAgICB9IGFzIGFueSxcclxuICB9O1xyXG5cclxuICBzdG9yZSA9IHt9IGFzIFN0b3JlUHJvcHM7XHJcbiAgdGhJY29uUmVmID0gUmVhY3QuY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xyXG4gIHRhYmxlU2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuXHJcbiAgbGlzdGVuZXJzID0ge1xyXG4gICAgb25CZWZvcmVMb2FkOiBudWxsLFxyXG4gICAgbG9hZDogbnVsbCxcclxuICB9O1xyXG5cclxuICBjb21wb25lbnRzID0ge1xyXG4gICAgaGVhZGVyOiB7XHJcbiAgICAgIGNlbGw6IFJlc2l6ZWFibGVUaXRsZSxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIGxldCBtb2RhbCA9IHByb3BzLnR5cGUgfHwgXCJhdXRvXCI7XHJcbiAgICBsZXQgc3RvcmVQcmVmaXggPSBnZXRTdG9yYWdlKFwic3RvcmUtcHJlLWtleVwiKTtcclxuICAgIGxldCBhdXRvVHlwZSA9IGdldFN0b3JhZ2UoXHJcbiAgICAgIHN0b3JlUHJlZml4ID8gc3RvcmVQcmVmaXggKyBcInRhYmxlU2l6ZVwiIDogXCJ0YWJsZVNpemVcIlxyXG4gICAgKTtcclxuICAgIGF1dG9UeXBlID0gYXV0b1R5cGU/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBkYXRhU291cmNlOiBbXSxcclxuICAgICAgY29sdW1uczogW10sXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICBwYWdpbmF0aW9uOiB7fSxcclxuICAgICAgYWN0aXZlSW5kZXg6IC0xLFxyXG4gICAgICAvL+aQnOe0ouaWh+acrFxyXG4gICAgICBzZWFyY2hUZXh0OiBudWxsLFxyXG4gICAgICBmaWVsZE9wdGlvbjogbnVsbCxcclxuICAgICAgc2VhcmNoQ29sb3I6IG51bGwsXHJcbiAgICAgIGNvbHM6IFtdLFxyXG4gICAgICBzb3J0czogW10sXHJcbiAgICAgIGZpbHRlclBhcmFtczoge30sXHJcbiAgICAgIHRhYmxlU2l6ZTogdGhpcy5wcm9wcy5zaXplIHx8IGF1dG9UeXBlIHx8IFwiZGVmYXVsdFwiLFxyXG4gICAgICBzb3J0VHlwZTogXCJzaW5nbGVcIixcclxuICAgICAgc29ydGVyOiBbXSwgLy/orrDlvZXlvZPliY3mjpLluo/lrZfmrrVcclxuICAgICAgc29ydEluZm86IHt9LFxyXG4gICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcclxuICAgICAgY2hlY2tDb2x1bW46IFtdLFxyXG4gICAgICBkZWZhdWx0Q2hlY2s6IHRydWUsXHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgICBmaWx0ZXI6IFtdLFxyXG4gICAgICBleHRyYToge30sXHJcbiAgICB9O1xyXG4gICAgaWYgKHByb3BzLnN0b3JlIGluc3RhbmNlb2YgU3RvcmUpIHtcclxuICAgICAgdGhpcy5zdG9yZSA9IHByb3BzLnN0b3JlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgeyBsaXN0ZW5lcnM6IGxpc3RlbmVyc1Byb3BzID0ge30sIC4uLnJlc3RTdG9yZSB9ID1cclxuICAgICAgICBwcm9wcy5zdG9yZSB8fCB7fTtcclxuICAgICAgY29uc3Qgc3RvcmVQcm9wcyA9IHtcclxuICAgICAgICBtb2RlbDogXCJtb2RlbFwiLFxyXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICBsaXN0ZW5lcnM6IHtcclxuICAgICAgICAgIG9uQmVmb3JlTG9hZDogKHN0b3JlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5vbkJlZm9yZUxvYWQsIHRoaXMsIFtzdG9yZSwgb3B0aW9uc10pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGRhdGFDaGFuZ2VkOiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcGFnaW5nID0gISh0aGlzLnByb3BzLnBhZ2luYXRpb24gPT09IGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2luZyAmJiAhdGhpcy5wcm9wcy5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBtb2RlbERhdGEsXHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiBzdG9yZS5nZXRQYWdpbmF0aW9uKCksXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGF0YVNvdXJjZTogbW9kZWxEYXRhLCBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMuZGF0YUNoYW5nZWQsIHRoaXMsIFtcclxuICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgIG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICBzdG9yZSxcclxuICAgICAgICAgICAgICBwYWdpbmcsXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxvYWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLmxvYWQsIHRoaXMsIFtkYXRhLCBtb2RlbERhdGEsIHN0b3JlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb25FcnJvckxvYWQ6IChlcnIsIHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMub25FcnJvckxvYWQsIHRoaXMsIFtlcnIsIHJlc3BvbnNlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YTogcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgID8gcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgIDogcHJvcHMuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgPyBwcm9wcy5kYXRhU291cmNlXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgLi4ucmVzdFN0b3JlLFxyXG4gICAgICAgIGF1dG9Mb2FkOiByZXN0U3RvcmUuYXV0b0xvYWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFBhZ2VTdG9yZShcclxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdG9yZVByb3BzLCB7XHJcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7IGN1cnJlbnQ6IDEsIC4uLnRoaXMucHJvcHMucGFnaW5hdGlvbiB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNpemUgPVxyXG4gICAgKGluZGV4OiBhbnkpID0+XHJcbiAgICAoZTogYW55LCB7IHNpemUgfTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY29scyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgY29uc3QgbmV4dENvbHVtbnMgPSBbLi4uY29sc107XHJcbiAgICAgIG5leHRDb2x1bW5zW2luZGV4XSA9IHtcclxuICAgICAgICAuLi5uZXh0Q29sdW1uc1tpbmRleF0sXHJcbiAgICAgICAgd2lkdGg6IHNpemUud2lkdGgsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29sczogbmV4dENvbHVtbnMsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAvLyDlnKjnirbmgIHmm7TmlrDlkI7ph43mlrDojrflj5bliJfphY3nva5cclxuICAgICAgICAgIHRoaXMuZ2V0Q29sdW1ucygpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gIGdldEluaXRDaGVja2VkQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjaGVja2VkS2V5czogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChjb2xzOiBhbnlbXSkgPT4ge1xyXG4gICAgICBjb2xzLmZvckVhY2goKGNvbCkgPT4ge1xyXG4gICAgICAgIC8vIOWmguaenOWIl+ayoeacieaYjuehruiuvue9riBpbml0U2hvdyDkuLogZmFsc2XvvIzliJnorqTkuLrmmK/pu5jorqTpgInkuK3nmoRcclxuICAgICAgICBpZiAoY29sLmluaXRTaG93ICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgY2hlY2tlZEtleXMucHVzaChjb2wudW5pcXVlS2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOmAkuW9kuWkhOeQhuWtkOWIl1xyXG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRyYXZlcnNlKGNvbC5jaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgdHJhdmVyc2UoY29sdW1ucyk7XHJcbiAgICByZXR1cm4gY2hlY2tlZEtleXM7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBuZXdDb2x1bW5zID0gdGhpcy5nZW5lcmF0ZVVuaXF1ZUtleXNBbmRQYXRocyh0aGlzLnByb3BzLmNvbHVtbnMpO1xyXG4gICAgY29uc3QgZGVmYXVsdENoZWNrZWRDb2x1bW5zID0gdGhpcy5nZXRJbml0Q2hlY2tlZENvbHVtbnMobmV3Q29sdW1ucyk7XHJcblxyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sdW1uczogbmV3Q29sdW1ucyxcclxuICAgICAgICBzdG9yZUNvbHVtbnM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdLFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBkZWZhdWx0Q2hlY2tlZENvbHVtbnMsXHJcbiAgICAgICAga2V5Q29sdW1uczogbmV3Q29sdW1ucyxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBjb2xzOiBuZXdDb2x1bW5zLCAvL+S/ruaUueWIl+WuvVxyXG4gICAgICAgIGNvbHVtbnM6IG5ld0NvbHVtbnMsIC8vdGFibGXnu4Tku7bkvb/nlKhcclxuICAgICAgICBzdG9yZUNvbHVtbnM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdLCAvL+WOn+Wni+WIl++8jOeUqOS6juWIpOaWreaYr+acieWIl+acieabtOaWsFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBkZWZhdWx0Q2hlY2tlZENvbHVtbnMsIC8v6buY6K6k6YCJ5Lit55qE5YiXXHJcbiAgICAgICAga2V5Q29sdW1uczogbmV3Q29sdW1ucywgLy/mj5DkvpvluKbmoIfor4bnmoTlrozmlbTliJfnu5PmnoTvvIznlKjkuo7mnoTlu7rliJfpgInmi6nnlYzpnaJcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMucHJvcHMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuZGF0YSkge1xyXG4gICAgICB0aGlzLnN0b3JlLnNldERhdGEoc3RvcmUuZGF0YSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5saXN0ZW5NZXNzYWdlKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5saXN0ZW5NZXNzYWdlKTtcclxuICB9XHJcbiAgbGlzdGVuTWVzc2FnZSA9IChldikgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHR5cGVvZiBldi5kYXRhID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShldi5kYXRhKSA6IGV2LmRhdGE7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKGRhdGEuZXZlbnRUeXBlID09IFwiY2hhbmdlVGFibGVTaXplXCIpIHtcclxuICAgICAgY29uc3QgeyBwYXlsb2FkIH0gPSBkYXRhO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwiZGVmYXVsdFwiIHx8XHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwic21hbGxcIiB8fFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcIm1pZGRsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiBwYXlsb2FkLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmVTdGF0ZSkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICBpZiAodGhpcy5wcm9wcy5zdG9yZUNvbHVtbnMgIT09IHByZXZQcm9wcy5zdG9yZUNvbHVtbnMpIHtcclxuICAgICAgICBjb25zdCBuZXdDb2x1bW5zID0gdGhpcy5nZW5lcmF0ZVVuaXF1ZUtleXNBbmRQYXRocyh0aGlzLnByb3BzLmNvbHVtbnMpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgY29sdW1uczogbmV3Q29sdW1ucyxcclxuICAgICAgICAgIHN0b3JlQ29sdW1uczogdGhpcy5wcm9wcy5zdG9yZUNvbHVtbnMsXHJcbiAgICAgICAgICBrZXlDb2x1bW5zOiBuZXdDb2x1bW5zLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocHJlU3RhdGUuY29scyAhPT0gdGhpcy5zdGF0ZS5jb2xzKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldENvbHVtbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMgIT09IHByZXZQcm9wcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVVbmlxdWVLZXlzQW5kUGF0aHModGhpcy5wcm9wcy5jb2x1bW5zKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIGNvbHVtbnM6IG5ld0NvbHVtbnMsXHJcbiAgICAgICAgICBzdG9yZUNvbHVtbnM6IHRoaXMucHJvcHMuY29sdW1ucyxcclxuICAgICAgICAgIGtleUNvbHVtbnM6IG5ld0NvbHVtbnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByZXZQcm9wcy5zaXplICE9PSB0aGlzLnByb3BzLnNpemUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiB0aGlzLnByb3BzLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmVzZXRDb2x1bW4oKSB7XHJcbiAgICBjb25zdCB7IGNvbHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBuZXdDb2xzOiBhbnkgPSBbXTtcclxuICAgIGxldCBjb2xzcyA9IGNvbHMgfHwgW107XHJcbiAgICBjb2xzcy5tYXAoKGNvbDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0ZW1wID0ge1xyXG4gICAgICAgIC4uLmNvbCxcclxuICAgICAgICBvbkhlYWRlckNlbGw6IChjb2x1bW46IHsgd2lkdGg6IGFueSB9KSA9PiAoe1xyXG4gICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcclxuICAgICAgICAgIG9uUmVzaXplOiB0aGlzLmhhbmRsZVJlc2l6ZShpbmRleCksXHJcbiAgICAgICAgfSksXHJcbiAgICAgIH07XHJcbiAgICAgIG5ld0NvbHMucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGNvbHVtbnM6IG5ld0NvbHMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOa4hemZpOmAieS4reminOiJslxyXG4gICAqL1xyXG4gIGNsZWFyU2VsZWN0Q29sb3IoKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgYWN0aXZlSW5kZXg6IC0xIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdpbmF0aW9uQnlTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldFBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgYXV0b09uQ2hhbmdlID0gdHJ1ZSxcclxuICAgICAgYXV0b1NvcnQsXHJcbiAgICAgIGF1dG9QYWdpbmF0aW9uLFxyXG4gICAgICBvbkNoYW5nZSxcclxuICAgICAgc3RvcmUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IEFycmF5LmlzQXJyYXkoc29ydGVyKTtcclxuICAgIGlmIChhdXRvT25DaGFuZ2UgPT09IGZhbHNlIHx8ICFzdG9yZSkge1xyXG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGFuZGxlUGFnaW5hdGlvbiA9ICgpID0+IHtcclxuICAgICAgbGV0IHBhcmFtcyA9IHt9IGFzIHtcclxuICAgICAgICBzaXplPzogc3RyaW5nO1xyXG4gICAgICAgIHBhZ2VTaXplPzogc3RyaW5nO1xyXG4gICAgICAgIGFzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgZGVzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgW3Byb3BOYW1lOiBzdHJpbmddOiBzdHJpbmc7XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMuZ2V0UGFnaW5hdGlvbkJ5U3RvcmUoKSB8fCB7fTtcclxuICAgICAgaWYgKCFpc0VtcHR5T2JqKHBhZ2luYXRpb24pKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IHtcclxuICAgICAgICAgIFtwYWdpbmcuY3VycmVudEtleSB8fCBcImN1cnJlbnRcIl06IHBhZ2luYXRpb24uY3VycmVudCxcclxuICAgICAgICAgIFtwYWdpbmcucGFnZVNpemVLZXkgfHwgXCJzaXplXCJdOiBwYWdpbmF0aW9uLnBhZ2VTaXplLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHApO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhc2NQYXJhbXMgPSB0aGlzLmdldFNvcnRQYXJhbShzb3J0ZXIsIHRydWUpO1xyXG4gICAgICBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXIgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGlwbGUgJiYgIWlzRW1wdHlPYmooc29ydGVyKSkge1xyXG4gICAgICAgIHNvcnRlci5jb2x1bW4gJiZcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXI6IFtzb3J0ZXJdLCBkZWZhdWx0U29ydDogZmFsc2UgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10gfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgZmlsdGVycyxcclxuICAgICAgICBleHRyYSxcclxuICAgICAgfSk7XHJcbiAgICAgIHBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zLCAuLi5wYXJhbXMsIC4uLmFzY1BhcmFtcyB9O1xyXG4gICAgICBhdXRvU29ydCAmJiB0aGlzLnN0b3JlLnJlbG9hZCh7IHBhcmFtcyB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25DaGFuZ2VGbiA9IHRoaXMucHJvcHMub25DaGFuZ2U7XHJcblxyXG4gICAgYXV0b1BhZ2luYXRpb24gJiYgaGFuZGxlUGFnaW5hdGlvbigpO1xyXG4gICAgLy8g55So5oi35Lyg5LqGb25DaGFuZ2Xkv53nlZnnlKjmiLfoh6rkuLvlpITnkIbooajmoLzlj5jljJbnmoTmnYPliptcclxuICAgIGlmIChvbkNoYW5nZUZuKSB7XHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2hhbmdlRm4sIHRoaXMsIFtwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5pWw5o2u5qih5Z6L5a+56LGhXHJcbiAgICovXHJcbiAgZ2V0TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I+c5Y2V5pCc57Si6L+H5ruk5pi+56S6XHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIGhhbmRsZVNlYXJjaCh2YWwsIGZpZWxkT3B0aW9uLCBzZWFyY2hDb2xvcikge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlYXJjaFRleHQ6IHZhbCxcclxuICAgICAgZmllbGRPcHRpb246IGZpZWxkT3B0aW9uLFxyXG4gICAgICBzZWFyY2hDb2xvcjogc2VhcmNoQ29sb3IsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaooeWdl+WIl+ihqOenu+WKqOaOkuW6j1xyXG4gICAqL1xyXG4gIG1vdmVSb3cgPSAoZHJhZ0luZGV4LCBob3ZlckluZGV4LCBkcmFnLCB0YXJnZXQpID0+IHtcclxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgIGxldCBkcmFnTm9kZSA9IGRyYWcucmVjb3JkO1xyXG4gICAgbGV0IHRhcmdldE5vZGUgPSB0YXJnZXQucmVjb3JkO1xyXG4gICAgZHJhZ05vZGUubW92ZUFycmF5KGRyYWdOb2RlLCB0YXJnZXROb2RlKTtcclxuICAgIGxldCBpZHMgPSBkcmFnTm9kZS5wYXJlbnROb2RlLmdldENoaWxkTm9kZUlkcygpO1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgaWQ6IGRyYWdOb2RlLmlkLFxyXG4gICAgICBwYXJlbnRJZDogZHJhZ05vZGUuYXR0cmlidXRlLnBhcmVudElkLFxyXG4gICAgICBpZHM6IGlkcyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMucHJvcHMubW92ZVJvdykge1xyXG4gICAgICB0aGlzLnByb3BzLm1vdmVSb3cocGFyYW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmUucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuICAvLyDlnKjnsbvkuK3mt7vliqDkuIDkuKrmlrDnmoTovoXliqnmlrnms5VcclxuICBmaWx0ZXJDb2x1bW5zQnlDaGVja2VkS2V5cyhjb2x1bW5zOiBhbnlbXSwgY2hlY2tlZEtleXM6IHN0cmluZ1tdKTogYW55W10ge1xyXG4gICAgaWYgKCFjb2x1bW5zIHx8ICFBcnJheS5pc0FycmF5KGNvbHVtbnMpIHx8IGNvbHVtbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XHJcblxyXG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgLy8g5qOA5p+l5b2T5YmN5YiX5piv5ZCm5Zyo6YCJ5Lit5YiX6KGo5LitXHJcbiAgICAgIGNvbnN0IGlzQ29sdW1uQ2hlY2tlZCA9IGNoZWNrZWRLZXlzLmluY2x1ZGVzKGNvbC51bmlxdWVLZXkpO1xyXG4gICAgICBpZiAoaXNDb2x1bW5DaGVja2VkKSB7XHJcbiAgICAgICAgLy8g5aaC5p6c5b2T5YmN5YiX6KKr6YCJ5Lit77yM55u05o6l5re75YqgXHJcbiAgICAgICAgY29uc3QgbmV3Q29sID0geyAuLi5jb2wgfTtcclxuICAgICAgICAvLyDlpoLmnpzmnInlrZDliJfvvIzpgJLlvZLlpITnkIZcclxuICAgICAgICBpZiAobmV3Q29sLmNoaWxkcmVuICYmIG5ld0NvbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBuZXdDb2wuY2hpbGRyZW4gPSB0aGlzLmZpbHRlckNvbHVtbnNCeUNoZWNrZWRLZXlzKFxyXG4gICAgICAgICAgICBuZXdDb2wuY2hpbGRyZW4sXHJcbiAgICAgICAgICAgIGNoZWNrZWRLZXlzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQucHVzaChuZXdDb2wpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWmguaenOW9k+WJjeWIl+acquiiq+mAieS4re+8jOajgOafpeaYr+WQpuacieWtkOWIl+iiq+mAieS4rVxyXG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSB0aGlzLmZpbHRlckNvbHVtbnNCeUNoZWNrZWRLZXlzKFxyXG4gICAgICAgICAgICBjb2wuY2hpbGRyZW4sXHJcbiAgICAgICAgICAgIGNoZWNrZWRLZXlzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGZpbHRlcmVkQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyDlpoLmnpzmnInlrZDliJfooqvpgInkuK3vvIzliJnmt7vliqDor6XliJfvvIjkvZzkuLrlrrnlmajvvIlcclxuICAgICAgICAgICAgY29uc3QgbmV3Q29sID0geyAuLi5jb2wgfTtcclxuICAgICAgICAgICAgbmV3Q29sLmNoaWxkcmVuID0gZmlsdGVyZWRDaGlsZHJlbjtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3Q29sKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgZmlsdGVyQ29sdW1uKGNoZWNrZWRWYWx1ZSwgaXNDaGVja2VkLCBtYXBEYXRhKSB7XHJcbiAgICBjb25zdCBjb2wgPSBtYXBEYXRhW2NoZWNrZWRWYWx1ZV07XHJcbiAgICBsZXQgY3VycmVudENoZWNrZWRLZXlzID0gWy4uLnRoaXMuc3RhdGUuY2hlY2tDb2x1bW5dO1xyXG4gICAgLy8g6I635Y+W5omA5pyJ5a2Q6IqC54K555qEIGtleXPvvIjljIXmi6zmt7HlsYLltYzlpZfnmoToioLngrnvvIlcclxuICAgIGNvbnN0IGdldEFsbENoaWxkcmVuS2V5cyA9IChjb2x1bW4pID0+IHtcclxuICAgICAgbGV0IGtleXMgPSBbXTtcclxuICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbHVtbi5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAga2V5cy5wdXNoKGNoaWxkLnVuaXF1ZUtleSk7XHJcbiAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0QWxsQ2hpbGRyZW5LZXlzKGNoaWxkKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGtleXM7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChjb2wuY2hpbGRyZW4pIHtcclxuICAgICAgLy8g5aSE55CG54i26IqC54K5XHJcbiAgICAgIGNvbnN0IGFsbENoaWxkcmVuS2V5cyA9IGdldEFsbENoaWxkcmVuS2V5cyhjb2wpO1xyXG5cclxuICAgICAgaWYgKGlzQ2hlY2tlZCkge1xyXG4gICAgICAgIC8vIOmAieS4reeItuiKgueCue+8mua3u+WKoOeItuiKgueCueWSjOaJgOacieWtkOWtmeiKgueCuVxyXG4gICAgICAgIGlmICghY3VycmVudENoZWNrZWRLZXlzLmluY2x1ZGVzKGNvbC51bmlxdWVLZXkpKSB7XHJcbiAgICAgICAgICBjdXJyZW50Q2hlY2tlZEtleXMucHVzaChjb2wudW5pcXVlS2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWxsQ2hpbGRyZW5LZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjdXJyZW50Q2hlY2tlZEtleXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICBjdXJyZW50Q2hlY2tlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWPlua2iOmAieS4reeItuiKgueCue+8muenu+mZpOeItuiKgueCueWSjOaJgOacieWtkOWtmeiKgueCuVxyXG4gICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoXHJcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09IGNvbC51bmlxdWVLZXkgJiYgIWFsbENoaWxkcmVuS2V5cy5pbmNsdWRlcyhrZXkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5aSE55CG5Y+25a2Q6IqC54K5XHJcbiAgICAgIGlmIChpc0NoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRDaGVja2VkS2V5cy5pbmNsdWRlcyhjb2wudW5pcXVlS2V5KSkge1xyXG4gICAgICAgICAgY3VycmVudENoZWNrZWRLZXlzLnB1c2goY29sLnVuaXF1ZUtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoXHJcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09IGNvbC51bmlxdWVLZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyDmo4Dmn6XniLboioLngrnmmK/lkKbpnIDopoHlj5bmtojpgInkuK1cclxuICAgICAgICBpZiAoY29sLnBhdGgpIHtcclxuICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGNvbC5wYXRoLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgIC8vIOS7juW9k+WJjeiKgueCueWQkeS4iumBjeWOhuaJgOacieeItuiKgueCuVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IHBhdGhQYXJ0cy5sZW5ndGggLSAyOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aFBhcnRzLnNsaWNlKDAsIGkgKyAxKS5qb2luKFwiL1wiKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29sOiBhbnkgPSBPYmplY3QudmFsdWVzKG1hcERhdGEpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5wYXRoID09PSBwYXJlbnRQYXRoXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRDb2wpIHtcclxuICAgICAgICAgICAgICAvLyDmo4Dmn6XniLboioLngrnmmK/lkKbov5jmnInlhbbku5blrZDoioLngrnooqvpgInkuK1cclxuICAgICAgICAgICAgICBjb25zdCBhbGxTaWJsaW5ncyA9IGdldEFsbENoaWxkcmVuS2V5cyhwYXJlbnRDb2wpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGhhc0NoZWNrZWRTaWJsaW5nID0gYWxsU2libGluZ3Muc29tZShcclxuICAgICAgICAgICAgICAgIChrZXkpID0+XHJcbiAgICAgICAgICAgICAgICAgIGtleSAhPT0gY29sLnVuaXF1ZUtleSAmJiBjdXJyZW50Q2hlY2tlZEtleXMuaW5jbHVkZXMoa2V5KVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghaGFzQ2hlY2tlZFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gcGFyZW50Q29sLnVuaXF1ZUtleVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudENoZWNrZWRLZXlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBtZXNzYWdlLndhcm5pbmcoXCLoh7PlsJHmmL7npLrkuIDliJfvvIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IGtleUNvbHVtbnMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBmaWx0ZXJDb2x1bW5zID0gdGhpcy5maWx0ZXJDb2x1bW5zQnlDaGVja2VkS2V5cyhcclxuICAgICAga2V5Q29sdW1ucyxcclxuICAgICAgY3VycmVudENoZWNrZWRLZXlzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIOabtOaWsOeKtuaAgVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGNoZWNrQ29sdW1uOiBjdXJyZW50Q2hlY2tlZEtleXMsXHJcbiAgICAgIGNvbHVtbnM6IGZpbHRlckNvbHVtbnMsXHJcbiAgICAgIGNvbHM6IGZpbHRlckNvbHVtbnMsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZ2V0U29ydFBhcmFtKHNvcnRlciwgc29ydFN0YXRlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBBcnJheS5pc0FycmF5KHNvcnRlcik7XHJcbiAgICBjb25zdCB7IHNvcnRTZWFyY2ggPSB0cnVlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFzb3J0U2VhcmNoKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGxldCBzb3J0SW5mbyA9IHt9O1xyXG4gICAgbGV0IG9yZGVySXRlbXMgPSBbXTtcclxuICAgIGlmICghaXNFbXB0eU9iaihzb3J0ZXIpICYmICFpc011bHRpcGxlICYmIHNvcnRlci5jb2x1bW4pIHtcclxuICAgICAgb3JkZXJJdGVtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2x1bW46IHNvcnRlci5jb2x1bW4uZmllbGQgfHwgc29ydGVyLmNvbHVtbi5kYXRhSW5kZXgsXHJcbiAgICAgICAgICBhc2M6IHNvcnRlci5vcmRlciA9PSBcImFzY2VuZFwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIGlmIChzb3J0ZXIuY29sdW1uKSBzb3J0SW5mb1tzb3J0ZXIuY29sdW1uLmRhdGFJbmRleF0gPSBzb3J0ZXIub3JkZXI7XHJcbiAgICB9IGVsc2UgaWYgKGlzTXVsdGlwbGUpIHtcclxuICAgICAgc29ydGVyLmZvckVhY2goKHYpID0+IHtcclxuICAgICAgICBzb3J0SW5mb1t2LmNvbHVtbi5kYXRhSW5kZXhdID0gdi5vcmRlcjtcclxuICAgICAgICBsZXQgZmllbGQgPSB2LmNvbHVtbi5maWVsZCB8fCB2LmNvbHVtbi5kYXRhSW5kZXg7XHJcbiAgICAgICAgb3JkZXJJdGVtcy5wdXNoKHtcclxuICAgICAgICAgIGNvbHVtbjogZmllbGQsXHJcbiAgICAgICAgICBhc2M6IHYub3JkZXIgPT0gXCJhc2NlbmRcIixcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc29ydFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIHNvcnRJbmZvOiBzb3J0SW5mbyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBvcmRlckl0ZW1zOiBKU09OLnN0cmluZ2lmeShvcmRlckl0ZW1zKSB9O1xyXG4gIH1cclxuICBpc0JleW9uZChlKSB7XHJcbiAgICBjb25zdCBldiA9IHdpbmRvdy5ldmVudCB8fCBlOyAvLyDmtY/op4jlmajlhbzlrrnvvIzmnIDlpb3lhpnkuIDkuItcclxuICAgIGNvbnN0IHRleHRSYW5nZSA9IChlbCkgPT4ge1xyXG4gICAgICBjb25zdCB0ZXh0Q29udGVudCA9IGVsO1xyXG4gICAgICBjb25zdCB0YXJnZXRXID0gdGV4dENvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dENvbnRlbnQsIDApO1xyXG4gICAgICByYW5nZS5zZXRFbmQodGV4dENvbnRlbnQsIHRleHRDb250ZW50LmNoaWxkTm9kZXMubGVuZ3RoKTtcclxuICAgICAgY29uc3QgcmFuZ2VXaWR0aCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICByZXR1cm4gcmFuZ2VXaWR0aCA+IHRhcmdldFc7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuICF0ZXh0UmFuZ2UoZXYudGFyZ2V0KTsgLy8gdGFyZ2V05Y+v5Lul5L+d6K+B5b2T5YmN5YiS6L+H55qEZG9t6IqC54K55LiA55u05L+d5oyB5pivOmVsLXRvb2x0aXBfX3RyaWdnZXJcclxuICB9XHJcbiAgc2V0U2VsZWN0ZWRSb3dLZXlzKGRhdGE6IEFycmF5PFN0cmluZyB8IE51bWJlcj4pIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IGRhdGEsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgc2V0U2VsZWN0ZWRSb3dEYXRhcyhkYXRhOiBBcnJheTxPYmplY3Q+KSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogZGF0YSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRDb2x1bW5zKCkge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBzb3J0VHlwZSwgc29ydEluZm8gfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHNvcnRGaWVsZHMgPSBbXSwgc2l6ZSA9IFwibGFyZ2VcIiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGRlZmF1bHRTaG93Q29scyA9IFsuLi5jb2x1bW5zXTtcclxuICAgIGNvbnN0IGNvbHMgPSBkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wsIGluZGV4KSA9PiB7XHJcbiAgICAgIC8vIOabv+aNoiBnZXRDb2x1bW5zIOaWueazleS4reWOn+adpeeahCBlbGxpcHNpcyDlpITnkIbpg6jliIZcclxuICAgICAgaWYgKGNvbC5lbGxpcHNpcyAmJiAhY29sLnJlbmRlcikge1xyXG4gICAgICAgIGNvbC5lbGxpcHNpcyA9IHtcclxuICAgICAgICAgIHNob3dUaXRsZTogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2wucmVuZGVyID0gKHRleHQsIHJlY29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIC8vIOiOt+WPluW9k+WJjeWIl+eahOWunuaXtuWuveW6plxyXG4gICAgICAgICAgY29uc3QgY3VycmVudENvbCA9IHRoaXMuc3RhdGUuY29scz8uZmluZCgoYykgPT4ge1xyXG4gICAgICAgICAgICAvLyDlpITnkIYgZGF0YUluZGV4IOWPr+iDveaYr+Wtl+espuS4suaIluaVsOe7hOeahOaDheWGtVxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjLmRhdGFJbmRleCkgJiYgQXJyYXkuaXNBcnJheShjb2wuZGF0YUluZGV4KSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShjLmRhdGFJbmRleCkgPT09IEpTT04uc3RyaW5naWZ5KGNvbC5kYXRhSW5kZXgpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYy5kYXRhSW5kZXggPT09IGNvbC5kYXRhSW5kZXg7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCBhY3R1YWxXaWR0aCA9IGN1cnJlbnRDb2w/LndpZHRoIHx8IGNvbC53aWR0aDtcclxuICAgICAgICAgIGxldCBjb2xXaWR0aDogYW55ID0gXCIxMDAlXCI7XHJcblxyXG4gICAgICAgICAgaWYgKGFjdHVhbFdpZHRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnN0YXRlLnRhYmxlU2l6ZSB8fCB0aGlzLnByb3BzLnNpemUgfHwgXCJkZWZhdWx0XCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFdpZHRoT2JqID0ge1xyXG4gICAgICAgICAgICAgIHNtYWxsOiAxNixcclxuICAgICAgICAgICAgICBtaWRkbGU6IDE2LFxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IDE2LFxyXG4gICAgICAgICAgICAgIGxhcmdlOiAzMixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgcGFkZGluZ1dpZHRoID0gY29sV2lkdGhPYmpbc2l6ZV0gfHwgMTY7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWN0dWFsV2lkdGggPiBwYWRkaW5nV2lkdGgpIHtcclxuICAgICAgICAgICAgICBjb2xXaWR0aCA9IGFjdHVhbFdpZHRoIC0gcGFkZGluZ1dpZHRoO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbFdpZHRoID0gYWN0dWFsV2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiaW5saW5lLXRhYmxlXCIsIHdpZHRoOiBcIjEwMCVcIiB9fT5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICByZWY9eyhlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmuIXpmaTkuYvliY3nmoR0aXRsZVxyXG4gICAgICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcInRpdGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmlofmnKzmmK/lkKbmuqLlh7pcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuc2Nyb2xsV2lkdGggPiBlbC5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwidGl0bGVcIiwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtdGV4dFwiKX1cclxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb2xXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXHJcbiAgICAgICAgICAgICAgICAgIHRleHRPdmVyZmxvdzogXCJlbGxpcHNpc1wiLFxyXG4gICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7dGV4dH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNvcnRGaWVsZHMuaW5kZXhPZihjb2wuZGF0YUluZGV4KSA+IC0xKSB7XHJcbiAgICAgICAgaWYgKHNvcnRUeXBlID09IFwic2luZ2xlXCIpIHtcclxuICAgICAgICAgIGNvbC5zb3J0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgY29sLnNvcnRPcmRlciA9IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgID8gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc29ydFR5cGUgPT0gXCJtdWx0aXBsZVwiKSB7XHJcbiAgICAgICAgICBjb2wuc29ydGVyID0geyBtdWx0aXBsZTogaW5kZXggfTtcclxuICAgICAgICAgIGNvbC5zb3J0T3JkZXIgPSBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA/IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbDtcclxuICAgIH0pO1xyXG4gICAgY29scy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmICghaXNFbXB0eU9iaihpdGVtLmZpbHRlclByb3BzKSkge1xyXG4gICAgICAgIGxldCBvYmogPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCBzZWFyY2hLZXkgfSA9IGl0ZW0uZmlsdGVyUHJvcHM7XHJcbiAgICAgICAgbGV0IERpdiA9IG51bGw7XHJcbiAgICAgICAgbGV0IHRleHQgPSBpdGVtLnRpdGxlO1xyXG4gICAgICAgIERpdiA9IGdldE5vZGUodHlwZSwge1xyXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IGDmkJzntKIke3RleHR9YCxcclxuICAgICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgICAgcmVmOiB0aGlzLnRhYmxlU2VhcmNoUmVmLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgIGZpbHRlckRyb3Bkb3duOiAoe1xyXG4gICAgICAgICAgICBzZXRTZWxlY3RlZEtleXMsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkS2V5cyxcclxuICAgICAgICAgICAgY29uZmlybSxcclxuICAgICAgICAgICAgY2xlYXJGaWx0ZXJzLFxyXG4gICAgICAgICAgfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoXCIpfT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoLXNwYWNlXCIpfT5cclxuICAgICAgICAgICAgICAgICAge0Rpdn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPFNwYWNlPlxyXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0ZpbHRlclBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaXRlbS5maWVsZCB8fCBpdGVtLmRhdGFJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbHRlclBhcmFtc1trZXldID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVNlYXJjaFJlZi5jdXJyZW50Py5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtczogeyAuLi5uZXdGaWx0ZXJQYXJhbXMgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ydFBhcmFtID0gdGhpcy5nZXRTb3J0UGFyYW0odGhpcy5zdGF0ZS5zb3J0ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5sb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IC4uLm5ld0ZpbHRlclBhcmFtcywgLi4uc29ydFBhcmFtIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoLWJ1dHRvblwiKX1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIOafpeivolxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvU3BhY2U+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmlsdGVySWNvbjogKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPFNlYXJjaE91dGxpbmVkIC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLm9iaixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHNbaW5kZXhdID0gb2JqO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb2xzO1xyXG4gIH1cclxuICBnZW5lcmF0ZVVuaXF1ZUtleXNBbmRQYXRocyhcclxuICAgIGNvbHVtbnM6IGFueVtdLFxyXG4gICAgcGFyZW50UGF0aDogc3RyaW5nID0gXCJcIixcclxuICAgIGxldmVsOiBudW1iZXIgPSAwXHJcbiAgKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiB7XHJcbiAgICAgIC8vIOeUn+aIkOWUr+S4gGtleVxyXG4gICAgICBjb25zdCB1bmlxdWVLZXkgPSBjb2wudW5pcXVlS2V5IHx8IGd1aWQoKTtcclxuXHJcbiAgICAgIC8vIOaehOW7uuW9k+WJjeiKgueCueeahHBhdGjvvIzmoLzlvI/kuLo6IHBhcmVudFBhdGgvaWRlbnRpZmllcl9rZXlcclxuICAgICAgY29uc3QgY3VycmVudFBhdGggPSBwYXJlbnRQYXRoXHJcbiAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3VuaXF1ZUtleX1gXHJcbiAgICAgICAgOiBgJHt1bmlxdWVLZXl9YDtcclxuXHJcbiAgICAgIC8vIOWIm+W7uuaWsOeahOWIl+WvueixoVxyXG4gICAgICBjb25zdCBuZXdDb2wgPSB7XHJcbiAgICAgICAgLi4uY29sLFxyXG4gICAgICAgIHVuaXF1ZUtleTogdW5pcXVlS2V5LFxyXG4gICAgICAgIHBhdGg6IGN1cnJlbnRQYXRoLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8g5Yik5pat5piv5ZCm5Li65Y+25a2Q6IqC54K5XHJcbiAgICAgIGlmICghbmV3Q29sLmNoaWxkcmVuIHx8IG5ld0NvbC5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAvLyDmnIDlkI7kuIDlsYLlrZDpoblcclxuICAgICAgICBuZXdDb2wubGVhZiA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g5pyJ5a2Q6aG555qE6IqC54K5XHJcbiAgICAgICAgbmV3Q29sLmxlYWYgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8g6YCS5b2S5aSE55CG5a2Q6aG5XHJcbiAgICAgICAgbmV3Q29sLmNoaWxkcmVuID0gdGhpcy5nZW5lcmF0ZVVuaXF1ZUtleXNBbmRQYXRocyhcclxuICAgICAgICAgIG5ld0NvbC5jaGlsZHJlbixcclxuICAgICAgICAgIGN1cnJlbnRQYXRoLFxyXG4gICAgICAgICAgbGV2ZWwgKyAxXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8g5Li654i26IqC54K55re75Yqg5omA5pyJ5a2Q6aG555qEdW5pcXVlS2V55pWw57uEXHJcbiAgICAgICAgbmV3Q29sLmNoaWxkcmVuS2V5cyA9IG5ld0NvbC5jaGlsZHJlbi5tYXAoXHJcbiAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQudW5pcXVlS2V5XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG5ld0NvbDtcclxuICAgIH0pO1xyXG4gIH1cclxuICByZW5kZXJUb29sQmFyKCkge1xyXG4gICAgbGV0IHsgdGFibGVTaXplLCBrZXlDb2x1bW5zLCBzb3J0VHlwZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB7IGZpbHRlckNvbHVtbiwgY29sdW1uczogY29sTGlzdHMsIHRvb2xiYXIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHRhYmxlVG9vbCwgc3RvcmVSZXF1ZXN0Q29uZmlnID0ge30gfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHRvb2xzID0gW1wicmVmcmVzaFwiLCBcInNpemVcIiwgXCJzb3J0XCIsIFwiY29sdW1uXCJdO1xyXG4gICAgbGV0IHRvb2xzQ2xpY2sgPSB7fSBhcyBhbnk7XHJcbiAgICBpZiAodG9vbGJhciA9PSB0cnVlKSB7XHJcbiAgICAgIHRvb2xzID0gW1wicmVmcmVzaFwiLCBcInNpemVcIiwgXCJzb3J0XCIsIFwiY29sdW1uXCJdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdG9vbHMgPSB0b29sYmFyLnRvb2xzXHJcbiAgICAgICAgPyB0b29sYmFyLnRvb2xzXHJcbiAgICAgICAgOiB0YWJsZVRvb2wudG9vbHNcclxuICAgICAgICA/IHRhYmxlVG9vbC50b29sc1xyXG4gICAgICAgIDogdG9vbHM7XHJcbiAgICAgIHRvb2xzQ2xpY2sgPSB0b29sYmFyLm9uVG9vbENsaWNrID8gdG9vbGJhci5vblRvb2xDbGljayA6IHt9O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2l6ZUl0ZW0gPSBbXHJcbiAgICAgIHsgdGl0bGU6IFwi5a695p2+XCIsIGtleTogXCJkZWZhdWx0XCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLkuK3nrYlcIiwga2V5OiBcIm1pZGRsZVwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi57Sn5YeRXCIsIGtleTogXCJzbWFsbFwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc29ydEl0ZW0gPSBbXHJcbiAgICAgIHsgdGl0bGU6IFwi5Y2V5a2X5q615o6S5bqPXCIsIGtleTogXCJzaW5nbGVcIiB9LFxyXG4gICAgICB7IHRpdGxlOiBcIuWkmuWtl+auteaOkuW6j1wiLCBrZXk6IFwibXVsdGlwbGVcIiB9LFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHNvcnRDb250ZW50ID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvdGVudC10aXRsZVwiKX1cclxuICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGN1cnNvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCA/IFwibm90LWFsbG93ZWRcIiA6IFwicG9pbnRlclwiLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCAmJiBcInJnYmEoMCwwLDAsLjQ1KVwiLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuZGVmYXVsdFNvcnQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10sIHNvcnRJbmZvOiB7fSwgZGVmYXVsdFNvcnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIOaBouWkjem7mOiupOaOkuW6j1xyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtzb3J0SXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgc29ydGVyOiBbXSxcclxuICAgICAgICAgICAgICAgICAgc29ydEluZm86IHt9LFxyXG4gICAgICAgICAgICAgICAgICBzb3J0VHlwZTogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRTb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtzb3J0VHlwZSA9PSBpdGVtLmtleSA/IChcclxuICAgICAgICAgICAgICAgIDxhPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7c29ydFR5cGUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KX1cclxuICAgICAgICB7dGhpcy5zdGF0ZS5zb3J0ZXIubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICA8PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY290ZW50LXRpdGxlXCIpfVxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBcInJnYmEoMCwwLDAsLjQ1KVwiIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDlvZPliY3mjpLluo9cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHt0aGlzLnN0YXRlLnNvcnRlci5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfVxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICB7aXRlbS5vcmRlciA9PSBcImFzY2VuZFwiID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8U29ydERlc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS5jb2x1bW4udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgIDwvPlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNpemVDb250ZW50ID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY290ZW50LXRpdGxlXCIpfT5cclxuICAgICAgICAgIOihqOagvOWvhuW6plxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtzaXplSXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgdGFibGVTaXplOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7dGFibGVTaXplID09IGl0ZW0ua2V5ID8gKFxyXG4gICAgICAgICAgICAgICAgPGE+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt0YWJsZVNpemUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KX1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gICAgY29uc3QgbmV3TWFwRGF0YSA9IGdldEZsYXR0ZW5EYXRhKGtleUNvbHVtbnMsIHtcclxuICAgICAga2V5RmllbGQ6IFwidW5pcXVlS2V5XCIsXHJcbiAgICAgIGNoaWxkRmllbGQ6IFwiY2hpbGRyZW5cIixcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY29udGVudCA9IE9iamVjdC5rZXlzKG5ld01hcERhdGEpLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPENoZWNrYm94XHJcbiAgICAgICAgICBrZXk9e2tleX1cclxuICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckNvbHVtbihrZXksIGUudGFyZ2V0LmNoZWNrZWQsIG5ld01hcERhdGEpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGNoZWNrZWQ9e3RoaXMuc3RhdGUuY2hlY2tDb2x1bW4uaW5jbHVkZXMobmV3TWFwRGF0YVtrZXldLnVuaXF1ZUtleSl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge25ld01hcERhdGFba2V5XS50aXRsZX1cclxuICAgICAgICA8L0NoZWNrYm94PlxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXRvb2wtYmFyXCIpfT5cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcImNvbHVtblwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDE0IH19PlxyXG4gICAgICAgICAgICA8UG9wb3ZlclxyXG4gICAgICAgICAgICAgIHRpdGxlPVwi6YCJ5oup5pi+56S655qE5YiXXCJcclxuICAgICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVJpZ2h0XCJcclxuICAgICAgICAgICAgICB0cmlnZ2VyPVwiY2xpY2tcIlxyXG4gICAgICAgICAgICAgIG92ZXJsYXlTdHlsZT17eyBtaW5XaWR0aDogNDEwLCBtYXhXaWR0aDogNDUwIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8QXBwc3RvcmVPdXRsaW5lZFxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtdGgtYXBwLXN0b3JlLWljb25cIil9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcInNvcnRcIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblJpZ2h0OiA4LCBmb250U2l6ZTogMTQgfX0+XHJcbiAgICAgICAgICAgIDxQb3BvdmVyIHBsYWNlbWVudD1cImJvdHRvbVwiIGNvbnRlbnQ9e3NvcnRDb250ZW50fSB0cmlnZ2VyPVwiY2xpY2tcIj5cclxuICAgICAgICAgICAgICA8U29ydEFzY2VuZGluZ091dGxpbmVkIC8+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJzaXplXCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5SaWdodDogOCwgZm9udFNpemU6IDE0IH19PlxyXG4gICAgICAgICAgICA8UG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250ZW50PXtzaXplQ29udGVudH0gdHJpZ2dlcj1cImNsaWNrXCI+XHJcbiAgICAgICAgICAgICAgPENvbHVtbkhlaWdodE91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJyZWZyZXNoXCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5SaWdodDogOCwgZm9udFNpemU6IDE0LCBjdXJzb3I6IFwicG9pbnRlclwiIH19XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLnRoaXMuc3RhdGUuZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgICAgaWYgKHRvb2xzQ2xpY2sub25SZWZyZXNoKSB7XHJcbiAgICAgICAgICAgICAgICB0b29sc0NsaWNrLm9uUmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8UmVkb091dGxpbmVkIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93S2V5cztcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dEYXRhcygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93RGF0YXM7XHJcbiAgfVxyXG4gIHJlc2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogW10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFtdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJvd1NlbGVjdGlvbk9uU2VsZWN0KHJlY29yZDogYW55LCBzZWxlY3RlZDogYW55KSB7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cywgc2VsZWN0ZWRSb3dEYXRhcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBuZXdTZWxlY3RlZFJvd0tleXMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzXTtcclxuICAgIGxldCBuZXdTZWxlY3RlZFJvd0RhdGFzID0gWy4uLnNlbGVjdGVkUm93RGF0YXNdO1xyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIG5ld1NlbGVjdGVkUm93S2V5cyA9IFsuLi5uZXdTZWxlY3RlZFJvd0tleXMsIHJlY29yZFtyb3dLZXldXTtcclxuICAgICAgbmV3U2VsZWN0ZWRSb3dEYXRhcyA9IFsuLi5uZXdTZWxlY3RlZFJvd0RhdGFzLCByZWNvcmRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT09IHJlY29yZFtyb3dLZXldKSB7XHJcbiAgICAgICAgICBuZXdTZWxlY3RlZFJvd0tleXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW1bcm93S2V5XSA9PT0gcmVjb3JkW3Jvd0tleV0pIHtcclxuICAgICAgICAgIG5ld1NlbGVjdGVkUm93RGF0YXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogbmV3U2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBuZXdTZWxlY3RlZFJvd0RhdGFzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsKHNlbGVjdGVkOiBhbnksIHNlbGVjdGVkUm93czogYW55LCBjaGFuZ2VSb3dzOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzLCBzZWxlY3RlZFJvd0RhdGFzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbmV3aWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBuZXdkYXRhczogYW55ID0gW107XHJcbiAgICBpZiAoY2hhbmdlUm93cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBjaGFuZ2VJZHMgPSBjaGFuZ2VSb3dzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW3Jvd0tleV0pO1xyXG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICBuZXdpZHMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzLCAuLi5jaGFuZ2VJZHNdO1xyXG4gICAgICAgIG5ld2RhdGFzID0gWy4uLnNlbGVjdGVkUm93RGF0YXMsIC4uLmNoYW5nZVJvd3NdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlbGVjdGVkUm93S2V5cy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUlkcy5pbmRleE9mKGl0ZW0pID09IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld2lkcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNlbGVjdGVkUm93RGF0YXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VJZHMuaW5kZXhPZihpdGVtW3Jvd0tleV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld2RhdGFzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld2lkcyA9IFsuLi5zZWxlY3RlZFJvd0tleXNdO1xyXG4gICAgICBuZXdkYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzXTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFsuLi5uZXdpZHNdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbLi4ubmV3ZGF0YXNdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXMsXHJcbiAgICAgIHtcclxuICAgICAgICBsb2FkaW5nLFxyXG4gICAgICAgIGRhdGFTb3VyY2UsXHJcbiAgICAgICAgcGFnaW5hdGlvbiA9IHt9LFxyXG4gICAgICAgIHNlYXJjaFRleHQsXHJcbiAgICAgICAgZmllbGRPcHRpb24sXHJcbiAgICAgICAgc2VhcmNoQ29sb3IsXHJcbiAgICAgICAgdGFibGVTaXplLFxyXG4gICAgICB9ID0gdGhpcy5zdGF0ZSxcclxuICAgICAgcHJvcHMgPSB1dGlscy5vbWl0KFxyXG4gICAgICAgIHRoaXMucHJvcHMsXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgXCJzdG9yZVwiLFxyXG4gICAgICAgICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgICAgICAgXCJjb2x1bW5zXCIsXHJcbiAgICAgICAgICBcInJlc2V0Q29sdW1uXCIsXHJcbiAgICAgICAgICBcInRvb2xiYXJcIixcclxuICAgICAgICAgIFwic29ydEZpZWxkc1wiLFxyXG4gICAgICAgICAgXCJmaWx0ZXJDb2x1bW5cIixcclxuICAgICAgICAgIFwic29ydFNlYXJjaFwiLFxyXG4gICAgICAgICAgXCJzaG93Um93U2VsZWN0aW9uXCIsXHJcbiAgICAgICAgICBcInBhZ2VUeXBlXCIsXHJcbiAgICAgICAgXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICByb3dLZXk6IFwiaWRcIixcclxuICAgICAgICAgIGNsaWNrQ2hhbmdlQ29sb3I6IGZhbHNlLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIGlmIChwcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSkge1xyXG4gICAgICBwcm9wcy5wYWdpbmF0aW9uID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBbXCJib3R0b21SaWdodFwiXSxcclxuICAgICAgICBzaG93U2l6ZUNoYW5nZXI6IHRydWUsXHJcbiAgICAgICAgc2hvd1F1aWNrSnVtcGVyOiB0cnVlLFxyXG4gICAgICAgIC4uLnBhZ2luYXRpb24sXHJcbiAgICAgICAgLi4ucHJvcHMucGFnaW5hdGlvbixcclxuICAgICAgfTtcclxuICAgICAgaWYgKHByb3BzLnNob3dUb3RhbCA9PSB0cnVlKSB7XHJcbiAgICAgICAgcHJvcHMucGFnaW5hdGlvbi5zaG93VG90YWwgPSBmdW5jdGlvbiAodG90YWwsIFtmcm9tLCB0b10pIHtcclxuICAgICAgICAgIC8vIHJldHVybiBcIuaYvuekuiBcIiArIGZyb20gKyBcIiAtIFwiICsgdG8gKyBcIuadoe+8jOWFsSBcIiArIHRvdGFsICsgXCIg5p2hXCI7XHJcbiAgICAgICAgICByZXR1cm4gXCLlhbEgXCIgKyB0b3RhbCArIFwiIOadoVwiO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3BzLm9uQ2hhbmdlID0gZnVuY3Rpb24gKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpIHtcclxuICAgICAgX3RoaXMub25DaGFuZ2UoX3RoaXMuc3RhdGUucGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSk7XHJcbiAgICB9O1xyXG4gICAgaWYgKHByb3BzLmNsaWNrQ2hhbmdlQ29sb3IpIHtcclxuICAgICAgY29uc3Qgb25Sb3dGbiA9IHByb3BzLm9uUm93O1xyXG4gICAgICBwcm9wcy5vblJvdyA9IGZ1bmN0aW9uIChyZWNvcmQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIGN1c3RvbSA9IG9uUm93Rm4gPyBvblJvd0ZuKHJlY29yZCwgaW5kZXgpIDoge307XHJcbiAgICAgICAgY29uc3Qgb25DbGlja0ZuID0gY3VzdG9tLm9uQ2xpY2s7XHJcbiAgICAgICAgY3VzdG9tLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlSW5kZXg6IGluZGV4LCAvL+iOt+WPlueCueWHu+ihjOeahOe0ouW8lVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB1dGlscy5jYWxsYmFjayhvbkNsaWNrRm4sIF90aGlzLCBbZXZlbnRdKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjdXN0b207XHJcbiAgICAgIH07XHJcbiAgICAgIHByb3BzLnJvd0NsYXNzTmFtZSA9IGZ1bmN0aW9uIChyZWNvcmQsIGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID09PSBfdGhpcy5zdGF0ZS5hY3RpdmVJbmRleFxyXG4gICAgICAgICAgPyBcIm5zYy10YWJsZS1jbGlja1Jvd1N0eWxlXCJcclxuICAgICAgICAgIDogXCJcIjtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBuZXdEYXRhU291cmNlID0gW107XHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdHJlZVV0aWxzLmdldFNlYXJjaE1lbnVEYXRhcyhcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHNlYXJjaFRleHQsXHJcbiAgICAgICAgZmllbGRPcHRpb24sXHJcbiAgICAgICAgc2VhcmNoQ29sb3JcclxuICAgICAgKTtcclxuICAgICAgbmV3RGF0YVNvdXJjZSA9IGRhdGEudHJlZURhdGFzO1xyXG4gICAgICBwcm9wcy5leHBhbmRlZFJvd0tleXMgPSBkYXRhLm9wZW5LZXlzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICB9XHJcbiAgICBwcm9wcy5zdG9yZSA9IHByb3BzLnN0b3JlIHx8IHt9O1xyXG4gICAgcHJvcHMuc3RvcmUuYXV0b0xvYWQgPSBwcm9wcy5zdG9yZS5hdXRvTG9hZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XHJcbiAgICBjb25zdCB7IGRyYWdhYmxlIH0gPSBfdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGRyYWdhYmxlUHJvcHMgPVxyXG4gICAgICBkcmFnYWJsZSA9PT0gdHJ1ZVxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBjb21wb25lbnRzOiBCb2R5Um93Q29tcG9uZW50LFxyXG4gICAgICAgICAgICBvblJvdzogKHJlY29yZCwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgICAgIG1vdmVSb3c6IHRoaXMubW92ZVJvdyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB7fTtcclxuICAgIGxldCB7IHJlc2l6ZUNvbHVtbiB9ID0gdGhpcy5wcm9wcztcclxuXHJcbiAgICBjb25zdCByZXNpemVQcm9wcyA9XHJcbiAgICAgIHJlc2l6ZUNvbHVtbiA9PT0gdHJ1ZSA/IHsgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzIH0gOiBudWxsO1xyXG4gICAgY29uc3QgeyB0YWJsZVRvb2wgfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHRvb2xGbGFnID0gZmFsc2U7XHJcbiAgICBpZiAodGFibGVUb29sLnNob3cgPT09IHRydWUpIHtcclxuICAgICAgdG9vbEZsYWcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMudG9vbGJhciAmJiB0aGlzLnByb3BzLnRvb2xiYXIuc2hvdyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0b29sRmxhZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wcm9wcy5zaG93Um93U2VsZWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHsgcm93U2VsZWN0aW9uID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgIHByb3BzID0ge1xyXG4gICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgIHJvd1NlbGVjdGlvbjoge1xyXG4gICAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiB0aGlzLnN0YXRlLnNlbGVjdGVkUm93S2V5cyxcclxuICAgICAgICAgIG9uU2VsZWN0OiB0aGlzLnJvd1NlbGVjdGlvbk9uU2VsZWN0LmJpbmQodGhpcyksXHJcbiAgICAgICAgICBvblNlbGVjdEFsbDogdGhpcy5yb3dTZWxlY3Rpb25PblNlbGVjdEFsbC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgY29sdW1uV2lkdGg6IDQwLFxyXG4gICAgICAgICAgLi4ucm93U2VsZWN0aW9uLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHRhYmxlUHJvcHM6IGNvbmZpZ1RhYmxlUHJvcHMgfSA9IGNvbmZpZygpO1xyXG4gICAgY29uc3QgRGVmYXVsdFRhYmxlID0gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlXCIpfT5cclxuICAgICAgICB7dG9vbEZsYWcgJiYgdGhpcy5yZW5kZXJUb29sQmFyKCl9XHJcbiAgICAgICAgPFRhYmxlXHJcbiAgICAgICAgICBjaGlsZHJlbkNvbHVtbk5hbWU9XCJjaGlsZE5vZGVzXCJcclxuICAgICAgICAgIHNoZWl0ZW1cclxuICAgICAgICAgIGRhdGFTb3VyY2U9e25ld0RhdGFTb3VyY2V9XHJcbiAgICAgICAgICBjb2x1bW5zPXt0aGlzLmdldENvbHVtbnMoKX1cclxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NscyhnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudFwiKSwgcHJvcHMuY2xhc3NOYW1lKX1cclxuICAgICAgICAgIGxvY2FsZT17e1xyXG4gICAgICAgICAgICBlbXB0eVRleHQ6IChcclxuICAgICAgICAgICAgICA8Tm9EYXRhIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLW5vZGF0YVwiKX0gLz5cclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBzY3JvbGw9e3sgeDogXCJtYXgtY29udGVudFwiIH19XHJcbiAgICAgICAgICB7Li4uY29uZmlnVGFibGVQcm9wc31cclxuICAgICAgICAgIHsuLi5yZXNpemVQcm9wc31cclxuICAgICAgICAgIHsuLi5wcm9wc31cclxuICAgICAgICAgIHsuLi5kcmFnYWJsZVByb3BzfVxyXG4gICAgICAgICAgc2l6ZT17dGFibGVTaXplfVxyXG4gICAgICAgICAgcGFnaW5hdGlvbj17ZmFsc2V9XHJcbiAgICAgICAgICAvLyBzdHlsZT17eyBoZWlnaHQ6IDYwMCB9fVxyXG4gICAgICAgIC8+XHJcbiAgICAgICAge3Byb3BzLnBhZ2luYXRpb24gIT09IGZhbHNlICYmIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtcGFnaW5hdGlvblwiKX0+XHJcbiAgICAgICAgICAgIDxQYWdpbmF0aW9uXHJcbiAgICAgICAgICAgICAgey4uLnByb3BzLnBhZ2luYXRpb259XHJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhwYWdlLCBwYWdlU2l6ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmEgPSB0aGlzLnN0YXRlLmV4dHJhO1xyXG4gICAgICAgICAgICAgICAgZXh0cmEuYWN0aW9uID0gXCJwYWdpbmF0ZVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgoeyBwYWdpbmF0aW9uID0ge30gfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHsgLi4ucGFnaW5hdGlvbiwgY3VycmVudDogcGFnZSwgcGFnZVNpemUgfSxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShcclxuICAgICAgICAgICAgICAgICAgeyBjdXJyZW50OiBwYWdlLCBwYWdlU2l6ZSB9LFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmZpbHRlcixcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zb3J0ZXIsXHJcbiAgICAgICAgICAgICAgICAgIGV4dHJhXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIGRyYWdhYmxlID09PSB0cnVlID8gKFxyXG4gICAgICA8RG5kUHJvdmlkZXIgYmFja2VuZD17SFRNTDVCYWNrZW5kfT57RGVmYXVsdFRhYmxlfTwvRG5kUHJvdmlkZXI+XHJcbiAgICApIDogKFxyXG4gICAgICBEZWZhdWx0VGFibGVcclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB3aXRoWmhMb2NhbGUoTlNDVGFibGUpO1xyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQ0VBLGdCQUFnQixFQUNoQkMsYUFBYSxFQUNiQyxvQkFBb0IsRUFDcEJDLGNBQWMsRUFDZEMscUJBQXFCLEVBQ3JCQyxzQkFBc0IsRUFDdEJDLFlBQVksUUFDUCxtQkFB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
|