tuain-ng-forms-lib 12.0.40 → 12.0.44
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/bundles/tuain-ng-forms-lib.umd.js +40 -91
- package/bundles/tuain-ng-forms-lib.umd.js.map +1 -1
- package/esm2015/lib/classes/forms/field.js +11 -3
- package/esm2015/lib/classes/forms/form.js +2 -1
- package/esm2015/lib/classes/forms/table/table.js +2 -2
- package/esm2015/lib/components/elements/field.component.js +3 -3
- package/esm2015/lib/components/forms/basic-form.js +25 -87
- package/fesm2015/tuain-ng-forms-lib.js +38 -91
- package/fesm2015/tuain-ng-forms-lib.js.map +1 -1
- package/lib/classes/forms/field.d.ts +10 -5
- package/lib/classes/forms/form.d.ts +1 -0
- package/lib/classes/forms/table/table.d.ts +4 -4
- package/lib/components/elements/field.component.d.ts +1 -1
- package/lib/components/forms/basic-form.d.ts +2 -1
- package/package.json +1 -1
- package/tuain-ng-forms-lib.metadata.json +1 -1
|
@@ -46,90 +46,28 @@ export class BasicFormComponent {
|
|
|
46
46
|
this.cleanStart();
|
|
47
47
|
this.customPreProcessing();
|
|
48
48
|
}
|
|
49
|
-
getTitle() {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.changeState(state);
|
|
72
|
-
}
|
|
73
|
-
getStates() {
|
|
74
|
-
var _a;
|
|
75
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.states;
|
|
76
|
-
}
|
|
77
|
-
getImmutableElement(name) {
|
|
78
|
-
var _a;
|
|
79
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getImmutableElement(name);
|
|
80
|
-
}
|
|
81
|
-
getExtraInfo(name) {
|
|
82
|
-
var _a;
|
|
83
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getExtraInfo(name);
|
|
84
|
-
}
|
|
85
|
-
getFields() {
|
|
86
|
-
var _a;
|
|
87
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFields();
|
|
88
|
-
}
|
|
89
|
-
getFieldNames() {
|
|
90
|
-
var _a;
|
|
91
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFieldNames();
|
|
92
|
-
}
|
|
93
|
-
getField(code) {
|
|
94
|
-
var _a;
|
|
95
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getField(code);
|
|
96
|
-
}
|
|
97
|
-
enableField(code) {
|
|
98
|
-
var _a;
|
|
99
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.enableField(code);
|
|
100
|
-
}
|
|
101
|
-
disableField(code) {
|
|
102
|
-
var _a;
|
|
103
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.disableField(code);
|
|
104
|
-
}
|
|
105
|
-
getFieldValue(code) {
|
|
106
|
-
var _a;
|
|
107
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFieldValue(code);
|
|
108
|
-
}
|
|
109
|
-
getFieldsValues(codes) {
|
|
110
|
-
var _a;
|
|
111
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFieldsValues(codes);
|
|
112
|
-
}
|
|
113
|
-
getFieldOptions(code) {
|
|
114
|
-
var _a;
|
|
115
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFieldOptions(code);
|
|
116
|
-
}
|
|
117
|
-
setFieldValue(code, value) {
|
|
118
|
-
var _a;
|
|
119
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.setFieldValue(code, value);
|
|
120
|
-
}
|
|
121
|
-
setFieldRequired(code, required) {
|
|
122
|
-
var _a;
|
|
123
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.setFieldRequired(code, required);
|
|
124
|
-
}
|
|
125
|
-
setFieldErrorMessage(code, errorMessage) {
|
|
126
|
-
var _a;
|
|
127
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.setFieldErrorMessage(code, errorMessage);
|
|
128
|
-
}
|
|
129
|
-
setFieldError(code, message, type) {
|
|
130
|
-
var _a;
|
|
131
|
-
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.setFieldError(code, message, type);
|
|
132
|
-
}
|
|
49
|
+
getTitle() { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getTitle(); }
|
|
50
|
+
setTitle(title) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.setTitle(title); }
|
|
51
|
+
cleanData() { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.cleanData(); }
|
|
52
|
+
getCurrentState() { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getCurrentState(); }
|
|
53
|
+
supportState(state) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.supportState(state); }
|
|
54
|
+
changeState(state) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.changeState(state); }
|
|
55
|
+
getStates() { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.states; }
|
|
56
|
+
getImmutableElement(name) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getImmutableElement(name); }
|
|
57
|
+
getExtraInfo(name) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getExtraInfo(name); }
|
|
58
|
+
getFields() { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFields(); }
|
|
59
|
+
getFieldNames() { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFieldNames(); }
|
|
60
|
+
getField(code) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getField(code); }
|
|
61
|
+
enableField(code) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.enableField(code); }
|
|
62
|
+
disableField(code) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.disableField(code); }
|
|
63
|
+
getFieldValue(code) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFieldValue(code); }
|
|
64
|
+
getFieldOptionText(code) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFieldOptionText(code); }
|
|
65
|
+
getFieldsValues(codes) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFieldsValues(codes); }
|
|
66
|
+
getFieldOptions(code) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.getFieldOptions(code); }
|
|
67
|
+
setFieldValue(code, value) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.setFieldValue(code, value); }
|
|
68
|
+
setFieldRequired(code, required) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.setFieldRequired(code, required); }
|
|
69
|
+
setFieldErrorMessage(code, errorMessage) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.setFieldErrorMessage(code, errorMessage); }
|
|
70
|
+
setFieldError(code, message, type) { var _a; return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.setFieldError(code, message, type); }
|
|
133
71
|
setFieldIntrinsicErrorMessage(code, message) {
|
|
134
72
|
var _a;
|
|
135
73
|
return (_a = this._formStructure) === null || _a === void 0 ? void 0 : _a.setFieldIntrinsicErrorMessage(code, message);
|
|
@@ -398,7 +336,7 @@ export class BasicFormComponent {
|
|
|
398
336
|
displayActionServerError() { }
|
|
399
337
|
displayValidationServerError() { }
|
|
400
338
|
displayTableServerError() { }
|
|
401
|
-
showFieldInfo(fieldCode) { }
|
|
339
|
+
showFieldInfo(fieldCode, detail) { }
|
|
402
340
|
showModalDialog(title, body, options, callback, params) { }
|
|
403
341
|
openUploadDialog(title, body, options, callback, params) { }
|
|
404
342
|
/**
|
|
@@ -510,7 +448,7 @@ export class BasicFormComponent {
|
|
|
510
448
|
const { code, intrinsicValidation } = event;
|
|
511
449
|
this.startFieldInputValidation(code, intrinsicValidation);
|
|
512
450
|
});
|
|
513
|
-
field.detailRequest.subscribe(
|
|
451
|
+
field.detailRequest.subscribe(event => this.showFieldInfo(event.code, event.detail));
|
|
514
452
|
});
|
|
515
453
|
}
|
|
516
454
|
}
|
|
@@ -1435,4 +1373,4 @@ BasicFormComponent.ctorParameters = () => [
|
|
|
1435
1373
|
{ type: LibEventManagerService },
|
|
1436
1374
|
{ type: LibFileManagementService }
|
|
1437
1375
|
];
|
|
1438
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvYmFzaWMtZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQU1uRixNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQUM1QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUVsQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBS3RCLE1BQU0sT0FBTyxrQkFBa0I7SUE4UTdCLFlBQ1ksa0JBQXlDLEVBQ3pDLGFBQXFDLEVBQ3JDLGdCQUEwQztRQUYxQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQUNyQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTBCO1FBaFI5QyxtQkFBYyxHQUF5QixJQUFJLENBQUM7UUFDNUMsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFHN0Isd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzdDLCtCQUEr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QUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdkQsS0FBSyxNQUFNLFNBQVMsSUFBSSxxQkFBcUIsRUFBRTtnQkFDN0MsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN0RCxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDN0IsTUFBTTthQUNQO1NBQ0Y7UUFDRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBYSxFQUFFLGVBQW9CLElBQUk7O1FBQzdELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFDNUMsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUU7WUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBQSxXQUFXLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxtQ0FBSSxFQUFFLENBQUM7WUFDaEUsTUFBTSxTQUFTLEdBQUcsTUFBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUcsVUFBVSxDQUFDLG1DQUFJLFVBQVUsQ0FBQztZQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7O1lBcnpDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDJCQUEyQjthQUN0Qzs7O1lBbkJRLHFCQUFxQjtZQUNyQixzQkFBc0I7WUFDdEIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU3RydWN0dXJlQW5kRGF0YSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvZm9ybSc7XG5pbXBvcnQgeyBMaWJGb3JtTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkZpbGVNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbGUtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IGZvcm1BY3Rpb25zLCBOT19FUlJPUiwgSEVBREVSIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9mb3JtLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBGb3JtQWN0aW9uIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9hY3Rpb24nO1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9maWVsZCc7XG5pbXBvcnQgeyBSZWNvcmRUYWJsZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvdGFibGUvdGFibGUnO1xuaW1wb3J0IHsgUmVjb3JkRm9ybVNlY3Rpb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL3NlY3Rpb24nO1xuXG5jb25zdCBQQVlMT0FEX1ZFUlNJT04gPSAnVFVBSU5FWENIQU5HRV8xLjAnO1xuY29uc3QgSU5MSU5FX0FDVElPTiA9ICdJTkxJTkUnO1xuY29uc3QgR0xPQkFMX0FDVElPTiA9ICdHTE9CQUwnO1xuY29uc3QgR0VUX0RBVEFfQUNUSU9OID0gJ0dFVERBVEEnO1xuXG5jb25zdCBTVUJKRUNUID0gJ3N1YmplY3QnO1xuY29uc3QgVE9LRU4gPSAndG9rZW4nO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YFxufSlcbmV4cG9ydCBjbGFzcyBCYXNpY0Zvcm1Db21wb25lbnQge1xuICBwcml2YXRlIF9mb3JtU3RydWN0dXJlOiBGb3JtU3RydWN0dXJlQW5kRGF0YSA9IG51bGw7XG4gIHByaXZhdGUgX2NvbnRyb2xUb2tlbjogc3RyaW5nID0gbnVsbDtcbiAgcHJpdmF0ZSBfb3JpZ2luVG9rZW46IHN0cmluZztcbiAgcHJpdmF0ZSBfZm9ybVJvdXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2RlZmluaXRpb25PYnRhaW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBFdmVudG9zIGRlIGFjY2lvbmVzIHkgY2FtcG9zXG4gIHByaXZhdGUgX2Zvcm1TZWN0aW9uc0FjdGl2YXRlOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZTogYW55ID0ge307XG4gIHByaXZhdGUgX2Zvcm1BY3Rpb25zU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF9mb3JtQWN0aW9uc0ZpbmlzaDogYW55ID0ge307XG4gIHByaXZhdGUgX2ZpZWxkSW5wdXRWYWxpZGF0aW9uOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZmllbGRWYWxpZGF0aW9uc1N0YXJ0OiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZmllbGRWYWxpZGF0aW9uc0ZpbmlzaDogYW55ID0ge307XG4gIC8vIENhbGxiYWNrIGRlIGFjY2lvbmVzIGRlIHRhYmxhc1xuICBwcml2YXRlIF90YWJsZVNlbGVjdGlvbnNTdGFydDogYW55ID0ge307XG4gIHByaXZhdGUgX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaDogYW55ID0ge307XG4gIHByaXZhdGUgX3RhYmxlQWN0aW9uc1N0YXJ0OiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVBY3Rpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVHZXREYXRhU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF90YWJsZUdldERhdGFGaW5pc2g6IGFueSA9IHt9O1xuXG4gIHByb3RlY3RlZCBpbnB1dERhdGFGaWVsZHM6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgZXh0cmFEYXRhOiBhbnkgPSB7fTtcbiAgcHJvdGVjdGVkIF9ldmVudEVtaXRlcjogTGliRXZlbnRNYW5hZ2VyU2VydmljZTtcblxuXG4gIGZvcm1Db25maWc6IGFueTtcbiAgbmFtZTogc3RyaW5nO1xuICBmb3JtU3ViamVjdDogc3RyaW5nO1xuICBfZXJyb3JUeXBlOiBzdHJpbmcgPSAnJztcbiAgZXJyb3JDb2RlOiBzdHJpbmcgPSAnJztcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgZXJyb3JEZXRhaWw6IHN0cmluZyA9ICcnO1xuICB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZmllbGRzOiBhbnk7XG4gIGFjdGlvbnM6IGFueTtcbiAgYnVzeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldFRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUaXRsZSgpO1xuICB9XG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0VGl0bGUodGl0bGUpO1xuICB9XG4gIGNsZWFuRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2xlYW5EYXRhKCk7XG4gIH1cbiAgZ2V0Q3VycmVudFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRDdXJyZW50U3RhdGUoKTtcbiAgfVxuICBzdXBwb3J0U3RhdGUoc3RhdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zdXBwb3J0U3RhdGUoc3RhdGUpO1xuICB9XG4gIGNoYW5nZVN0YXRlKHN0YXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmNoYW5nZVN0YXRlKHN0YXRlKTtcbiAgfVxuICBnZXRTdGF0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnN0YXRlcztcbiAgfVxuICBnZXRJbW11dGFibGVFbGVtZW50KG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRJbW11dGFibGVFbGVtZW50KG5hbWUpO1xuICB9XG4gIGdldEV4dHJhSW5mbyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RXh0cmFJbmZvKG5hbWUpO1xuICB9XG4gIGdldEZpZWxkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RmllbGRzKCk7XG4gIH1cbiAgZ2V0RmllbGROYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RmllbGROYW1lcygpO1xuICB9XG4gIGdldEZpZWxkKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZChjb2RlKTtcbiAgfVxuICBlbmFibGVGaWVsZChjb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZW5hYmxlRmllbGQoY29kZSk7XG4gIH1cbiAgZGlzYWJsZUZpZWxkKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5kaXNhYmxlRmllbGQoY29kZSk7XG4gIH1cbiAgZ2V0RmllbGRWYWx1ZShjb2RlOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZFZhbHVlKGNvZGUpO1xuICB9XG4gIGdldEZpZWxkc1ZhbHVlcyhjb2Rlczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RmllbGRzVmFsdWVzKGNvZGVzKTtcbiAgfVxuICBnZXRGaWVsZE9wdGlvbnMoY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkT3B0aW9ucyhjb2RlKTtcbiAgfVxuICBzZXRGaWVsZFZhbHVlKGNvZGU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zZXRGaWVsZFZhbHVlKGNvZGUsIHZhbHVlKTtcbiAgfVxuICBzZXRGaWVsZFJlcXVpcmVkKGNvZGU6IHN0cmluZywgcmVxdWlyZWQ6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0RmllbGRSZXF1aXJlZChjb2RlLCByZXF1aXJlZCk7XG4gIH1cbiAgc2V0RmllbGRFcnJvck1lc3NhZ2UoY29kZTogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zZXRGaWVsZEVycm9yTWVzc2FnZShjb2RlLCBlcnJvck1lc3NhZ2UpO1xuICB9XG4gIHNldEZpZWxkRXJyb3IoY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0RmllbGRFcnJvcihjb2RlLCBtZXNzYWdlLCB0eXBlKTtcbiAgfVxuICBzZXRGaWVsZEludHJpbnNpY0Vycm9yTWVzc2FnZShjb2RlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zZXRGaWVsZEludHJpbnNpY0Vycm9yTWVzc2FnZShjb2RlLCBtZXNzYWdlKTtcbiAgfVxuICBzZXRGaWVsZE9wdGlvbnMoY29kZSwgb3B0aW9uc0FycmF5LCBpZEF0dHJpYnV0ZSwgbmFtZUF0dHJpYnV0ZSkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zZXRGaWVsZE9wdGlvbnMoY29kZSwgb3B0aW9uc0FycmF5LCBpZEF0dHJpYnV0ZSwgbmFtZUF0dHJpYnV0ZSk7XG4gIH1cbiAgZ2V0RmllbGRTZXQoZmlsdGVyRnVuYz8sIGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RmllbGRTZXQoZmlsdGVyRnVuYywgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGFwcGx5T25GaWVsZHMocHJvY2Vzc0Z1bmMsIGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uYXBwbHlPbkZpZWxkcyhwcm9jZXNzRnVuYywgY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGFwcGx5UHJvY2Vzc1RvQWxsRmllbGRzKHByb2Nlc3NGdW5jKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmFwcGx5T25GaWVsZHMocHJvY2Vzc0Z1bmMpO1xuICB9XG4gIGNsZWFuRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2xlYW5GaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGdldFJlcXVpcmVkRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0UmVxdWlyZWRGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGdldFJlcXVpcmVkRW1wdHlGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBnZXRDaGFuZ2VkRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0Q2hhbmdlZEZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3Vlcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgdGFnRmllbGRzV2l0aEVycm9yKGVycm9yTWVzc2FnZSwgY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy50YWdGaWVsZHNXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgY2xlYW5FcnJvckZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmNsZWFuRXJyb3JGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIHNob3dMYWJlbEZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dMYWJlbEZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgaGlkZUxhYmVsRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZUxhYmVsRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBlbmFibGVGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5lbmFibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGRpc2FibGVGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5kaXNhYmxlRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGVuYWJsZUZpZWxkc1xuICAgKi9cbiAgZW5hYmxlRWRpdEZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGRpc2FibGVGaWVsZHNcbiAgICovXG4gIGRpc2FibGVFZGl0RmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBzaG93RmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2hvd0ZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgaGlkZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmhpZGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGdldEFjdGlvbnNCeUF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEFjdGlvbnNCeUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0SGVhZGVyQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0QWN0aW9uc0J5QXR0cmlidXRlKCdsb2NhdGlvbicsIEhFQURFUik7XG4gIH1cbiAgZ2V0QWN0aW9uKGFjdGlvbkNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gIH1cbiAgc2hvd0FjdGlvbnMoYWN0aW9uQXJyYXkpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2hvd0FjdGlvbnMoYWN0aW9uQXJyYXkpO1xuICB9XG4gIGhpZGVBY3Rpb25zKGFjdGlvbkFycmF5KSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmhpZGVBY3Rpb25zKGFjdGlvbkFycmF5KTtcbiAgfVxuICBlbmFibGVBY3Rpb25zKGFjdGlvbkFycmF5KSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmVuYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpO1xuICB9XG4gIGRpc2FibGVBY3Rpb25zKGFjdGlvbkFycmF5KSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmRpc2FibGVBY3Rpb25zKGFjdGlvbkFycmF5KTtcbiAgfVxuICBzaG93QWN0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93QWN0aW9ucyhjb2RlKTtcbiAgfVxuICBoaWRlQWN0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlQWN0aW9ucyhjb2RlKTtcbiAgfVxuICBlbmFibGVBY3Rpb24oY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmVuYWJsZUFjdGlvbnMoY29kZSk7XG4gIH1cbiAgZGlzYWJsZUFjdGlvbihjb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZGlzYWJsZUFjdGlvbnMoY29kZSk7XG4gIH1cbiAgZ2V0U2VjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldFNlY3Rpb25zKCk7XG4gIH1cbiAgYWN0aXZhdGVTZWN0aW9uKGNvZGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uYWN0aXZhdGVTZWN0aW9uKGNvZGUpO1xuICB9XG4gIGdldFNlY3Rpb25zVGl0bGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRTZWN0aW9ucygpLm1hcChzZWMgPT4gc2VjLnRpdGxlKTtcbiAgfVxuICBnZXRTZWN0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRTZWN0aW9uKGNvZGUpO1xuICB9XG4gIHNob3dTZWN0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93U2VjdGlvbnMoY29kZSk7XG4gIH1cbiAgaGlkZVNlY3Rpb24oY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmhpZGVTZWN0aW9ucyhjb2RlKTtcbiAgfVxuICBzaG93U2VjdGlvbnMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dTZWN0aW9ucyhjb2Rlcyk7XG4gIH1cbiAgaGlkZVNlY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlU2VjdGlvbnMoY29kZXMpO1xuICB9XG4gIGdldFN1YlNlY3Rpb24oY29kZTogc3RyaW5nLCBzdWJDb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0U3ViU2VjdGlvbihjb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBzaG93U3ViU2VjdGlvbihjb2RlOiBzdHJpbmcsIHN1YkNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93U3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgaGlkZVN1YlNlY3Rpb24oY29kZTogc3RyaW5nLCBzdWJDb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZVN1YlNlY3Rpb25zKGNvZGUsIHN1YkNvZGUpO1xuICB9XG4gIHNob3dTdWJTZWN0aW9ucyhjb2RlOiBzdHJpbmcsIHN1YkNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93U3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZXMpO1xuICB9XG4gIGhpZGVTdWJTZWN0aW9ucyhjb2RlOiBzdHJpbmcsIHN1YkNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlU3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZXMpO1xuICB9XG4gIGdldFRhYmxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0VGFibGVzKCk7XG4gIH1cbiAgc2hvd1RhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2hvd1RhYmxlcyhjb2Rlcyk7XG4gIH1cbiAgaGlkZVRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZVRhYmxlcyhjb2Rlcyk7XG4gIH1cbiAgY2xlYW5UYWJsZXMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmNsZWFuVGFibGVzKGNvZGVzKTtcbiAgfVxuICBnZXRUYWJsZShjb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0VGFibGUoY29kZSk7XG4gIH1cbiAgc2hvd1RhYmxlKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93VGFibGVzKGNvZGUpO1xuICB9XG4gIGhpZGVUYWJsZShjb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZVRhYmxlcyhjb2RlKTtcbiAgfVxuICBjbGVhblRhYmxlKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUYWJsZShjb2RlKT8uY2xlYW4oKTtcbiAgfVxuICBnZXRUYWJsZVJlY29yZChjb2RlOiBzdHJpbmcsIHJlY29yZElkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0VGFibGVSZWNvcmQoY29kZSwgcmVjb3JkSWQpO1xuICB9XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZm9ybU1hbmFnZXJTZXJ2aWNlOiBMaWJGb3JtTWFuYWdlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIF9ldmVudE1hbmFnZXI6IExpYkV2ZW50TWFuYWdlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGZpbGVNZ210U2VydmljZXM6IExpYkZpbGVNYW5hZ2VtZW50U2VydmljZSkge1xuICAgIHRoaXMuX2V2ZW50RW1pdGVyID0gdGhpcy5fZXZlbnRNYW5hZ2VyO1xuICAgIHRoaXMuY2xlYW5TdGFydCgpO1xuICAgIHRoaXMuY3VzdG9tUHJlUHJvY2Vzc2luZygpO1xuICB9XG5cbiAgc2V0Q29uZmlnKGZvcm1Db25maWcpIHtcbiAgICB0aGlzLmZvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xuICB9XG5cbiAgY2xlYW5TdGFydCgpIHtcbiAgICB0aGlzLl9lcnJvclR5cGUgPSAnJztcbiAgICB0aGlzLmVycm9yQ29kZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9ICcnO1xuICAgIHRoaXMuX2Zvcm1TdHJ1Y3R1cmUgPSBudWxsO1xuICAgIHRoaXMuZmllbGRzID0gbnVsbDtcbiAgICB0aGlzLmFjdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRyb2xUb2tlbiA9IG51bGw7XG4gICAgdGhpcy5pbnB1dERhdGFGaWVsZHMgPSB7fTtcbiAgICB0aGlzLl9kZWZpbml0aW9uT2J0YWluZWQgPSBmYWxzZTtcbiAgICAvLyBTZSBsaW1waWFuIGxvcyBtYW5lamFkb3JlcyBkZSBldmVudG9zXG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgdGhpcy5fZm9ybVNlY3Rpb25zQWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlID0ge307XG4gICAgdGhpcy5fZm9ybUFjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5fZmllbGRJbnB1dFZhbGlkYXRpb24gPSB7fTtcbiAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zU3RhcnQgPSB7fTtcbiAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5fdGFibGVTZWxlY3Rpb25zU3RhcnQgPSB7fTtcbiAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLl90YWJsZUFjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlR2V0RGF0YVN0YXJ0ID0ge307XG4gICAgdGhpcy5fdGFibGVHZXREYXRhRmluaXNoID0ge307XG4gIH1cblxuICBnZXQgZm9ybVZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnZpc2libGU7IH1cbiAgZ2V0IGZvcm1NYW5hZ2VyKCkgeyByZXR1cm4gdGhpczsgfVxuICBnZXQgZm9ybUNvZGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMubmFtZTsgfVxuICBzZXQgZm9ybUNvZGUobmFtZTogc3RyaW5nKSB7IHRoaXMubmFtZSA9IG5hbWU7IH1cbiAgZ2V0IGluU2VydmVyUHJvY2VzcygpIHsgcmV0dXJuIHRoaXMuYnVzeTsgfVxuICBnZXQgZm9ybSgpOiBGb3JtU3RydWN0dXJlQW5kRGF0YSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlOyB9XG5cbiAgZ2V0IHN0YXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zdGF0ZTsgfVxuICBnZXQgY3VycmVudFN0YXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zdGF0ZTsgfVxuICBzZXQgY3VycmVudFN0YXRlKHN0YXRlOiBzdHJpbmcpIHsgdGhpcy5fZm9ybVN0cnVjdHVyZS5jaGFuZ2VTdGF0ZShzdGF0ZSk7IH1cbiAgZ2V0IGltbXV0YWJsZURhdGEoKTogYW55IHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmltbXV0YWJsZURhdGEgfVxuICBnZXQgZXh0cmFJbmZvKCk6IGFueSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5leHRyYUluZm8gfVxuICBnZXQgdmlzaWJsZVNlY3Rpb25zKCk6IFJlY29yZEZvcm1TZWN0aW9uW10geyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8udmlzaWJsZVNlY3Rpb25zOyB9XG5cbiAgZ2V0IGZvcm1Sb3V0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fZm9ybVJvdXRlOyB9XG4gIHNldCBmb3JtUm91dGUocm91dGU6IHN0cmluZykgeyB0aGlzLl9mb3JtUm91dGUgPSByb3V0ZTsgfVxuXG4gIGdldCBzdWJqZWN0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmZvcm1TdWJqZWN0OyB9XG5cbiAgLy8gTcOpdG9kb3MgdmlydHVhbGVzXG4gIGN1c3RvbVByZVByb2Nlc3NpbmcoKSB7IH1cbiAgY3VzdG9tRm9ybVN0YXJ0KCkgeyB9XG4gIGRpc3BsYXlBY3Rpb25TZXJ2ZXJFcnJvcigpIHsgfVxuICBkaXNwbGF5VmFsaWRhdGlvblNlcnZlckVycm9yKCkgeyB9XG4gIGRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCkgeyB9XG4gIHNob3dGaWVsZEluZm8oZmllbGRDb2RlOiBzdHJpbmcpIHsgfVxuICBzaG93TW9kYWxEaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG4gIG9wZW5VcGxvYWREaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdXBwb3J0U3RhdGVcbiAgICovXG4gIHN1cHBvcnRNb2RlKHN0YXRlOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc3VwcG9ydFN0YXRlKHN0YXRlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0RmllbGRcbiAgICovXG4gIGdldEZpZWxkT2JqZWN0KGNvZGU6IHN0cmluZyk6IEZpZWxkRGVzY3JpcHRvciB7IHJldHVybiB0aGlzLmdldEZpZWxkKGNvZGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRBY3Rpb25cbiAgICovXG4gIGdldEFjdGlvbk9iamVjdChjb2RlOiBzdHJpbmcpOiBGb3JtQWN0aW9uIHsgcmV0dXJuIHRoaXMuZ2V0QWN0aW9uKGNvZGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRUYWJsZVxuICAgKi9cbiAgZ2V0VGFibGVPYmplY3QoY29kZTogc3RyaW5nKTogUmVjb3JkVGFibGUgeyByZXR1cm4gdGhpcy5nZXRUYWJsZShjb2RlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0U2VjdGlvblxuICAgKi9cbiAgZ2V0U2VjdGlvbk9iamVjdChjb2RlOiBzdHJpbmcpOiBSZWNvcmRGb3JtU2VjdGlvbiB7IHJldHVybiB0aGlzLmdldFNlY3Rpb24oY29kZSk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGNoYW5nZVN0YXRlXG4gICAqL1xuICBjaGFuZ2VGb3JtTW9kZShzdGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3ViamVjdFxuICAgKi9cbiAgZ2V0Rm9ybVN1YmplY3QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc3ViamVjdDsgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1YmplY3RcbiAgICovXG4gIGdldFN1YmplY3QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZm9ybVN1YmplY3Q7IH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdWJqZWN0XG4gICAqL1xuICBnZXRmb3JtU3ViamVjdCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCk7IH1cblxuXG4gIG51bVNlY3Rpb25zKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zZWN0aW9ucy5sZW5ndGg7IH1cblxuICBzdWJzY3JpYmVBcHBFdmVudChldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudEVtaXRlci5zdWJzY3JpYmUoZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gIH1cblxuICBvcGVuRm9ybShuYW1lOiBzdHJpbmcsIGRhdGEgPSBudWxsLCBiYWNrRGF0YSA9IG51bGwsIGNsZWFuU3RhY2sgPSBmYWxzZSk6IHZvaWQge1xuICAgIGxldCBvcmlnaW4gPSBudWxsO1xuICAgIGlmICghY2xlYW5TdGFjaykge1xuICAgICAgb3JpZ2luID0geyAuLi5iYWNrRGF0YSwgbmFtZTogdGhpcy5uYW1lLCB1cmw6IHRoaXMuX2Zvcm1Sb3V0ZSwgdG9rZW46IHRoaXMuX2NvbnRyb2xUb2tlbiB9O1xuICAgICAgb3JpZ2luLnN1YmplY3QgPSBvcmlnaW4/LnN1YmplY3QgPz8gdGhpcy5mb3JtU3ViamVjdDtcbiAgICAgIG9yaWdpbi5zdGF0ZSA9IG9yaWdpbj8uc3RhdGUgPz8gdGhpcy5zdGF0ZTtcbiAgICAgIG9yaWdpbi5maWVsZHMgPSBvcmlnaW4/LmZpZWxkcyA/PyB7fTtcbiAgICAgIG9yaWdpbi5leHRyYSA9IG9yaWdpbj8uZXh0cmEgPz8ge307XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IHsgLi4uZGF0YSwgbmFtZSB9O1xuICAgIHRhcmdldC5zdWJqZWN0ID0gdGFyZ2V0Py5zdWJqZWN0ID8/IG51bGw7XG4gICAgdGFyZ2V0LnN0YXRlID0gdGFyZ2V0Py5zdGF0ZSA/PyBudWxsO1xuICAgIHRhcmdldC5maWVsZHMgPSB0YXJnZXQ/LmZpZWxkcyA/PyB7fTtcbiAgICB0YXJnZXQuZXh0cmEgPSB0YXJnZXQ/LmV4dHJhID8/IHt9O1xuICAgIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLm9wZW5Gb3JtKG9yaWdpbiwgdGFyZ2V0KTtcbiAgfVxuXG4gIGNhbkdvQmFjaygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX29yaWdpblRva2VuICE9PSBudWxsIH1cbiAgZ29CYWNrKCk6IHZvaWQgeyByZXR1cm4gdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuYmFja1RvKCk7IH1cbiAgZ29CYWNrRm9ybSgpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZ29CYWNrKCk7IH1cbiAgZ2V0T3JpZ2luRGV0YWlsKCk6IGFueSB7IHJldHVybiB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRGb3JtSW5mbyh0aGlzLl9vcmlnaW5Ub2tlbik7IH1cblxuICBzZXRFcnJvcihlcnJvclR5cGU6IHN0cmluZywgZXJyb3JNZXNzYWdlOiBzdHJpbmcsIGVycm9yRGV0YWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9lcnJvclR5cGUgPSBlcnJvclR5cGUgfHwgJyc7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UgfHwgJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9IGVycm9yRGV0YWlsIHx8ICcnO1xuICB9XG5cbiAgcmVzZXRFcnJvcigpOiB2b2lkIHsgdGhpcy5zZXRFcnJvcihudWxsLCBudWxsLCBudWxsKTsgfVxuICBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2Vycm9yVHlwZTsgfVxuICBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlOyB9XG4gIGdldEVycm9yRGV0YWlsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmVycm9yRGV0YWlsOyB9XG4gIGdldEVycm9yQ29kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fZXJyb3JUeXBlOyB9XG5cbiAgZ2V0Rm9ybVBhcmFtZXRlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAobmFtZSkgPyAodGhpcy5leHRyYURhdGE/LltuYW1lXSA/PyBudWxsKSA6IG51bGw7XG4gIH1cblxuICBwcmVvY2Vzc0lucHV0UGFyYW1zKHBhcmFtczogYW55KTogc3RyaW5nIHtcbiAgICB0aGlzLl9jb250cm9sVG9rZW4gPSBwYXJhbXM/LltUT0tFTl0gPz8gbnVsbDtcbiAgICBjb25zdCB7IHRva2VuLCBzdWJqZWN0LCBzdGF0ZSwgZmllbGRzLCBleHRyYSwgb3JpZ2luVG9rZW4gfSA9IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldEZvcm1JbmZvKHRoaXMuX2NvbnRyb2xUb2tlbik7XG4gICAgaWYgKCF0aGlzLl9jb250cm9sVG9rZW4gfHwgdGhpcy5fY29udHJvbFRva2VuICE9PSB0b2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRoaXMuZm9ybVN1YmplY3QgPSBwYXJhbXM/LltTVUJKRUNUXSA/PyBzdWJqZWN0ID8/IG51bGw7XG4gICAgdGhpcy5pbnB1dERhdGFGaWVsZHMgPSBmaWVsZHM7XG4gICAgdGhpcy5leHRyYURhdGEgPSBleHRyYTtcbiAgICB0aGlzLl9vcmlnaW5Ub2tlbiA9IG9yaWdpblRva2VuO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHN1YnNjcmliZVNlY3Rpb25BY3RpdmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1TZWN0aW9ucyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuc2VjdGlvbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVNlY3Rpb25zKSkge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgICAgIHNlY3Rpb24uYWN0aXZhdGlvbi5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLmxhdW5jaFNlY3Rpb25BY3RpdmF0aW9uKGNvZGUpKTtcbiAgICAgICAgc2VjdGlvbi5pbmFjdGl2YXRpb24uc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5sYXVuY2hTZWN0aW9uSW5hY3RpdmF0aW9uKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUZpZWxkc1N1YmplY3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmdldEZpZWxkcygpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1GaWVsZHMpKSB7XG4gICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBmaWVsZC5lZGl0aW9uRmluaXNoLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgeyBjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uIH0gPSBldmVudDtcbiAgICAgICAgICB0aGlzLnN0YXJ0RmllbGRWYWxpZGF0aW9uKGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgZmllbGQuZWRpdGlvblBhcnRpYWwuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24gfSA9IGV2ZW50O1xuICAgICAgICAgIHRoaXMuc3RhcnRGaWVsZElucHV0VmFsaWRhdGlvbihjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkLmRldGFpbFJlcXVlc3Quc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5zaG93RmllbGRJbmZvKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUFjdGlvblN1YmplY3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1BY3Rpb25zID0gdGhpcy5fZm9ybVN0cnVjdHVyZS5nZXRBY3Rpb25zKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybUFjdGlvbnMpKSB7XG4gICAgICBmb3JtQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICAgIGFjdGlvbi5hY3Rpb25BY3RpdmF0ZWQuc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5zdGFydEFjdGlvbihjb2RlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVUYWJsZVN1YmplY3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1UYWJsZXMgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmdldFRhYmxlcygpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1UYWJsZXMpKSB7XG4gICAgICBmb3JtVGFibGVzLmZvckVhY2godGFibGUgPT4ge1xuICAgICAgICB0YWJsZS5pbmxpbmVBY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVBY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUuZ2xvYmFsQWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlR2xvYmFsQWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLnJlY29yZFNlbGVjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZVJlY29yZFNlbGVjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5zZWxlY3Rpb25BY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVTZWxlY3Rpb25BY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUuZ2V0RGF0YVRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZUdldERhdGEoZXZlbnQpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZvcm1Jbml0KHBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBpbml0aWFsU3RhdGU6IHN0cmluZyA9IHRoaXMucHJlb2Nlc3NJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgIGlmICghdGhpcy5uYW1lKSB7IHJldHVybjsgfVxuICAgIGlmICghdGhpcy5fZGVmaW5pdGlvbk9idGFpbmVkKSB7XG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgICAgY29uc3QgZm9ybURlZmluaXRpb24gPSBhd2FpdCB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRGb3JtRGVmaW5pdGlvbih0aGlzLm5hbWUpO1xuICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICB0aGlzLl9mb3JtU3RydWN0dXJlID0gbmV3IEZvcm1TdHJ1Y3R1cmVBbmREYXRhKGZvcm1EZWZpbml0aW9uLCB0aGlzLmZvcm1Db25maWcpO1xuICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmZpZWxkcztcbiAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuYWN0aW9ucztcbiAgICAgIHRoaXMuX2RlZmluaXRpb25PYnRhaW5lZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5EYXRhKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdXBwb3J0U3RhdGUoaW5pdGlhbFN0YXRlKSkge1xuICAgICAgaW5pdGlhbFN0YXRlID0gdGhpcy5fZm9ybVN0cnVjdHVyZS5kZWZhdWx0U3RhdGU7XG4gICAgfVxuICAgIHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuY2hhbmdlU3RhdGUoaW5pdGlhbFN0YXRlIHx8IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZGVmYXVsdFN0YXRlKTtcbiAgICBjb25zdCBpbnB1dEZpZWxkTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmlucHV0RGF0YUZpZWxkcyk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGlucHV0RmllbGROYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IGlucHV0RmllbGROYW1lc1tpbmRleF07XG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5pbnB1dERhdGFGaWVsZHNbZmllbGRDb2RlXTtcbiAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGZpZWxkVmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmRSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMuZ2V0RGF0YSk7XG4gICAgdGhpcy5jaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2UpO1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5zdWJzY3JpYmVTZWN0aW9uQWN0aXZhdGlvbigpO1xuICAgIHRoaXMuc3Vic2NyaWJlRmllbGRzU3ViamVjdHMoKTtcbiAgICB0aGlzLnN1YnNjcmliZUFjdGlvblN1YmplY3RzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUYWJsZVN1YmplY3RzKCk7XG4gICAgdGhpcy5jdXN0b21Gb3JtU3RhcnQoKTtcbiAgfVxuXG4gIGNoZWNrRXJyb3JSZWNvcmRSZWNlaXZlZChyZWNvcmRSZXNwb25zZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBlcnJvciB9ID0gcmVjb3JkUmVzcG9uc2U7XG4gICAgaWYgKCFlcnJvcikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICB0aGlzLmVycm9yQ29kZSA9IHJlY29yZFJlc3BvbnNlLmVycm9yQ29kZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHJlY29yZFJlc3BvbnNlLmVycm9yTWVzc2FnZTtcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JEZXRhaWw7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBlcnJvck9jY3VyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmVycm9yQ29kZSAhPT0gTk9fRVJST1IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcG9ydGUgbWFuZWpvIGRlIGV2ZW50b3MgZGUgZm9ybXVsYXJpb1xuICAgKi9cblxuICBhc3luYyByZXF1ZXN0Rm9ybUFjdGlvbihhY3Rpb25Db2RlOiBzdHJpbmcsIGFjdGlvblN1YmplY3Q6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBhY3Rpb25EZXRhaWwgPSB7XG4gICAgICBmb3JtQ29kZTogdGhpcy5uYW1lLFxuICAgICAgZm9ybVN1YmplY3Q6IHRoaXMuZm9ybVN1YmplY3QsXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5fZm9ybVN0cnVjdHVyZS5zdGF0ZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICBhY3Rpb25TdWJqZWN0LFxuICAgICAgdmVyc2lvbjogUEFZTE9BRF9WRVJTSU9OLFxuICAgICAgZm9ybURhdGE6IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZ2V0UGF5bG9hZCgpLFxuICAgICAgaW1tdXRhYmxlRGF0YTogdGhpcy5fZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhLFxuICAgIH07XG4gICAgdGhpcy5lcnJvckNvZGUgPSBOT19FUlJPUjtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSAnJztcbiAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgIGNvbnN0IGZvcm1BY3Rpb25SZXNwb25zZTogYW55ID0gYXdhaXQgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZXhlY1NlcnZlckFjdGlvbihhY3Rpb25EZXRhaWwpO1xuICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgIGlmIChmb3JtQWN0aW9uUmVzcG9uc2UgJiYgZm9ybUFjdGlvblJlc3BvbnNlLmVycm9yLmVycm9yVHlwZSkge1xuICAgICAgY29uc29sZS5sb2coJ0V4Y2VwY2nDs24gbm8gc29wb3J0YWRhJyk7XG4gICAgfVxuICAgIGlmIChmb3JtQWN0aW9uUmVzcG9uc2UuaGFzRXJyb3IoKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBmb3JtQWN0aW9uUmVzcG9uc2UuZXJyb3I7XG4gICAgICB0aGlzLmVycm9yQ29kZSA9IGVycm9yLmVycm9yQ29kZTtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3JNZXNzYWdlO1xuICAgICAgdGhpcy5lcnJvckRldGFpbCA9IGVycm9yLmVycm9yRGV0YWlsO1xuICAgIH1cbiAgICBjb25zdCBmb3JtUmVzcG9uc2VEYXRhID0gZm9ybUFjdGlvblJlc3BvbnNlLmdldERhdGEoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1XaXRoU2VydmVyRGF0YShmb3JtUmVzcG9uc2VEYXRhKTtcbiAgICByZXR1cm4gZm9ybVJlc3BvbnNlRGF0YTtcbiAgfVxuXG4gIHVwZGF0ZUZvcm1XaXRoU2VydmVyRGF0YShmb3JtQ29udGVudDogYW55KSB7XG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudE1vZGUsIGZvcm1TdWJqZWN0LCBhY3Rpb25zLCBmaWVsZHMsIHJlY29yZFRhYmxlcyxcbiAgICAgIHJldHVybmVkRmlsZSwgaW1tdXRhYmxlRGF0YSwgZXh0cmFJbmZvLFxuICAgIH0gPSBmb3JtQ29udGVudDtcbiAgICBjdXJyZW50TW9kZSAmJiB0aGlzLmNoYW5nZVN0YXRlKGN1cnJlbnRNb2RlKTtcbiAgICBpZiAoZm9ybVN1YmplY3QpIHsgdGhpcy5mb3JtU3ViamVjdCA9IGZvcm1TdWJqZWN0OyB9XG4gICAgaWYgKGFjdGlvbnMgJiYgYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRBY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICBjb25zdCBhY3Rpb25PYmplY3QgPSB0aGlzLmdldEFjdGlvbihjaGFuZ2VkQWN0aW9uLmFjdGlvbkNvZGUpO1xuICAgICAgICBpZiAoYWN0aW9uT2JqZWN0KSB7IGFjdGlvbk9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRBY3Rpb24pOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZEZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGQoY2hhbmdlZEZpZWxkLmZpZWxkQ29kZSk7XG4gICAgICAgIGlmIChmaWVsZE9iamVjdCkge1xuICAgICAgICAgIGZpZWxkT2JqZWN0LnVwZGF0ZUZyb21TZXJ2ZXIoY2hhbmdlZEZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVjb3JkVGFibGVzICYmIHJlY29yZFRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRUYWJsZSBvZiByZWNvcmRUYWJsZXMpIHtcbiAgICAgICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNoYW5nZWRUYWJsZS50YWJsZUNvZGUpO1xuICAgICAgICBpZiAodGFibGVPYmplY3QpIHtcbiAgICAgICAgICB0YWJsZU9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRUYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJldHVybmVkRmlsZSAmJiByZXR1cm5lZEZpbGUuZmlsZSkge1xuICAgICAgdGhpcy5maWxlTWdtdFNlcnZpY2VzLnNhdmVGaWxlKHJldHVybmVkRmlsZS5maWxlLCByZXR1cm5lZEZpbGUubmFtZSwgcmV0dXJuZWRGaWxlLnR5cGUpO1xuICAgIH1cbiAgICB0aGlzLl9mb3JtU3RydWN0dXJlLmltbXV0YWJsZURhdGEgPSBpbW11dGFibGVEYXRhO1xuICAgIHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZXh0cmFJbmZvID0gZXh0cmFJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqbyBkZSBldmVudCBoYW5kbGVycyBwYXJhIGFjY2lvbmVzIHNvYnJlIGVsIGZvcm11bGFyaW9cbiAgICovXG5cbiAgYWRkU2VjdGlvbkFjdGl2YXRpb24oY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHNlY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIHNlY3Rpb25TZXQuZm9yRWFjaCgoc2VjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybVNlY3Rpb25zQWN0aXZhdGVbc2VjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9ybVNlY3Rpb25zQWN0aXZhdGVbc2VjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkU2VjdGlvbkluYWN0aXZhdGlvbihjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3Qgc2VjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgc2VjdGlvblNldC5mb3JFYWNoKChzZWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uTmFtZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBY3Rpb25NZXRob2RTdGFydChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgYWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBhY3Rpb25TZXQuZm9yRWFjaCgoYWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1BY3Rpb25zU3RhcnRbYWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zvcm1BY3Rpb25zU3RhcnRbYWN0aW9uTmFtZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBY3Rpb25NZXRob2RGaW5pc2goY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGFjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgYWN0aW9uU2V0LmZvckVhY2goKGFjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uTmFtZV0pIHtcbiAgICAgICAgdGhpcy5fZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoU2VjdGlvbkFjdGl2YXRpb24oY29kZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbihjb2RlKTtcbiAgICBpZiAoIXNlY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZHMgPSB0aGlzLl9mb3JtU2VjdGlvbnNBY3RpdmF0ZVtjb2RlXTtcbiAgICBpZiAoY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZCBvZiBjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRTZWN0aW9uTWV0aG9kKHNlY3Rpb25PYmplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxhdW5jaFNlY3Rpb25JbmFjdGl2YXRpb24oY29kZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbihjb2RlKTtcbiAgICBpZiAoIXNlY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZHMgPSB0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW2NvZGVdO1xuICAgIGlmIChjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgZm9yIChjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kIG9mIGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudFNlY3Rpb25NZXRob2Qoc2VjdGlvbk9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRBY3Rpb24oY29kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRBY3Rpb24oY29kZSk7XG4gICAgaWYgKCFhY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgYWN0aW9uT2JqZWN0LnN0YXJ0KCk7XG4gICAgY29uc3QgY2xpZW50QWN0aW9uTWV0aG9kcyA9IHRoaXMuX2Zvcm1BY3Rpb25zU3RhcnRbY29kZV07XG4gICAgaWYgKGNsaWVudEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZCBvZiBjbGllbnRBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uUHJvbWlzZSA9IGNsaWVudEFjdGlvbk1ldGhvZChhY3Rpb25PYmplY3QpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNvbnRpbnVlQWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIGFjdGlvbk9iamVjdC5zdG9wKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFNlcnZlckFjdGlvbihhY3Rpb25PYmplY3QpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXJ2ZXJBY3Rpb24oYWN0aW9uSW5wdXQpIHtcbiAgICBjb25zdCBhY3Rpb24gPSAodHlwZW9mIGFjdGlvbklucHV0ID09PSAnc3RyaW5nJylcbiAgICAgID8gdGhpcy5nZXRBY3Rpb24oYWN0aW9uSW5wdXQpIDogYWN0aW9uSW5wdXQ7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3RGb3JtQWN0aW9uKGFjdGlvbi5hY3Rpb25Db2RlKTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaEFjdGlvbihhY3Rpb24sIGFjdGlvblJlc3VsdCk7XG4gICAgICBhY3Rpb24ubmV3U3RhdGUgJiYgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlBY3Rpb25TZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICBhY3Rpb24uc3RvcCgpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoQWN0aW9uKGFjdGlvbiwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgZmluaXNoQWN0aW9uTWV0aG9kcyA9IHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbi5hY3Rpb25Db2RlXTtcbiAgICBpZiAoZmluaXNoQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50QWN0aW9uTWV0aG9kIG9mIGZpbmlzaEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25NZXRob2QoYWN0aW9uLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZUdsb2JhbEFjdGlvbihhY3Rpb246IGFueSkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogTWFuZWphZG9yZXMgZGUgZXZlbnRvcyBwYXJhIHZhbGlkYWNpb25lcyBzb2JyZSBjYW1wb3NcbiAgICovXG5cbiAgYWRkRmllbGRJbnB1dFZhbGlkYXRpb24oY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChmaWVsZENvZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXSkge1xuICAgICAgICB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRmllbGRWYWxpZGF0aW9uU3RhcnQoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChmaWVsZENvZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2ZpZWxkQ29kZV0pIHtcbiAgICAgICAgdGhpcy5fZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2ZpZWxkQ29kZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRmllbGRWYWxpZGF0aW9uRmluaXNoKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoZmllbGRDb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRDb2RlXSkge1xuICAgICAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoW2ZpZWxkQ29kZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRDb2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0RmllbGRJbnB1dFZhbGlkYXRpb24oZmllbGRDb2RlOiBzdHJpbmcsIGludHJpbnNpY1ZhbGlkYXRpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgZmllbGRUb1ZhbGlkYXRlID0gdGhpcy5nZXRGaWVsZChmaWVsZENvZGUpO1xuICAgIGlmICghZmllbGRUb1ZhbGlkYXRlKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGZpZWxkVG9WYWxpZGF0ZS5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbkNhbGxiYWNrcyA9IHRoaXMuX2ZpZWxkSW5wdXRWYWxpZGF0aW9uW2ZpZWxkQ29kZV07XG4gICAgaWYgKHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY29uc3QgY29udGludWVWYWxpZGF0aW9uUHJvbWlzZSA9IHZhbGlkYXRpb25NZXRob2QoZmllbGRUb1ZhbGlkYXRlKTtcbiAgICAgICAgY2xpZW50VmFsaWRhdGlvblByb21pc2VzLnB1c2goY29udGludWVWYWxpZGF0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0RmllbGRWYWxpZGF0aW9uKGZpZWxkQ29kZTogc3RyaW5nLCBpbnRyaW5zaWNWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZpZWxkVG9WYWxpZGF0ZSA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICBpZiAoIWZpZWxkVG9WYWxpZGF0ZSB8fCAhaW50cmluc2ljVmFsaWRhdGlvbikgeyByZXR1cm47IH1cbiAgICBmaWVsZFRvVmFsaWRhdGUucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25DYWxsYmFja3MgPSB0aGlzLl9maWVsZFZhbGlkYXRpb25zU3RhcnRbZmllbGRDb2RlXTtcbiAgICBpZiAodmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb25NZXRob2Qgb2YgdmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZSA9IHZhbGlkYXRpb25NZXRob2QoZmllbGRUb1ZhbGlkYXRlKTtcbiAgICAgICAgY2xpZW50VmFsaWRhdGlvblByb21pc2VzLnB1c2goY2xpZW50VmFsaWRhdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVWYWxpZGF0aW9uID0gY2xpZW50VmFsaWRhdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVWYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFNlcnZlckZpZWxkVmFsaWRhdGlvbihmaWVsZFRvVmFsaWRhdGUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oaW5wdXRGaWVsZDogc3RyaW5nIHwgRmllbGREZXNjcmlwdG9yKSB7XG4gICAgY29uc3QgZmllbGRPYmogPSAodHlwZW9mIGlucHV0RmllbGQgPT09ICdzdHJpbmcnKVxuICAgICAgPyB0aGlzLmdldEZpZWxkKGlucHV0RmllbGQpIDogaW5wdXRGaWVsZDtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGZpZWxkT2JqLmJhY2tlbmQpIHtcbiAgICAgIGZpZWxkT2JqLnZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnZhbGlkYXRlLCBmaWVsZE9iai5maWVsZENvZGUpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmluaXNoRmllbGRWYWxpZGF0aW9uKGZpZWxkT2JqLCB2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGRPYmouc2V0RXJyb3JDb2RlKHRoaXMuZXJyb3JDb2RlKTtcbiAgICAgIGZpZWxkT2JqLnNldEVycm9yTWVzc2FnZSh0aGlzLmVycm9yTWVzc2FnZSk7XG4gICAgICB0aGlzLmRpc3BsYXlWYWxpZGF0aW9uU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgZmllbGRPYmoudmFsaWRhdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoRmllbGRWYWxpZGF0aW9uKGZpZWxkT2JqZWN0OiBhbnksIHZhbGlkYXRpb25SZXN1bHQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5fZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZE9iamVjdC5maWVsZENvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh2YWxpZGF0aW9uTWV0aG9kKGZpZWxkT2JqZWN0LCB2YWxpZGF0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29udGludWVGaWVsZFZhbGlkYXRpb24oZmllbGRDb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFNlcnZlckZpZWxkVmFsaWRhdGlvbihmaWVsZENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqYWRvcmVzIGRlIGV2ZW50b3MgcGFyYSBhY2Npb25lcyBzb2JyZSBUYWJsYXNcbiAgICovXG5cbiAgYWRkVGFibGVBY3Rpb25TdGFydChjb2RlOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmxpbmVBY3Rpb25PYmplY3QgPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFpbmxpbmVBY3Rpb25PYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3RhYmxlQWN0aW9uc1N0YXJ0W2NvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgaWYgKCF0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA9IFtdO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZUFjdGlvbkZpbmlzaChjb2RlOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmxpbmVBY3Rpb25PYmplY3QgPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFpbmxpbmVBY3Rpb25PYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICAgIHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgaWYgKCF0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA9IFtdO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZVNlbGVjdGlvblN0YXJ0KGNvZGU6IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy5fdGFibGVTZWxlY3Rpb25zU3RhcnRbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSBbXTtcbiAgICAgIHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W2NvZGVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZVNlbGVjdGlvbkZpbmlzaChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVTZWxlY3Rpb25zRmluaXNoW2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSBbXTtcbiAgICAgIHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVHZXREYXRhU3RhcnQoY29kZTogc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLl90YWJsZUdldERhdGFTdGFydFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVHZXREYXRhU3RhcnRbY29kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy5fdGFibGVHZXREYXRhU3RhcnRbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVycy5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgfVxuXG4gIGFkZFRhYmxlR2V0RGF0YUZpbmlzaChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3RhYmxlR2V0RGF0YUZpbmlzaFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVHZXREYXRhRmluaXNoW2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICAgIHRoaXMuX3RhYmxlR2V0RGF0YUZpbmlzaFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW0dFVF9EQVRBX0FDVElPTl0gPSBjYWxsYmFja01ldGhvZDtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uQ29kZSkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCBhY3Rpb24gPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIGFjdGlvbixcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlckdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgYWN0aW9uLCB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogR0xPQkFMX0FDVElPTixcbiAgICAgICAgYWN0aW9uQ29kZVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgYWN0aW9uRGV0YWlsIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgeyByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgYWN0aW9uLFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICAgIHJlY29yZElkLFxuICAgICAgcmVjb3JkRGF0YVxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJBY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLmZvcm1Db25maWcudGFibGVBY3Rpb25zLmlubGluZSxcbiAgICAgICAgYWN0aW9uQ29kZSxcbiAgICAgICAgdGFibGVSZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgIHRhYmxlUmVjb3JkRGF0YTogcmVjb3JkRGF0YVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICB0aGlzLmZpbmlzaFRhYmxlQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgY29tcGxldGVJbmxpbmVBY3Rpb24odGFibGVBY3Rpb246IGFueSkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJBY3Rpb24odGFibGVBY3Rpb24pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVBY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVJlY29yZFNlbGVjdGlvbih0YWJsZUFjdGlvbkV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uRGV0YWlsIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgeyByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlU2VsZWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICByZWNvcmRJZCxcbiAgICAgIHJlY29yZERhdGFcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgaWYgKHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVTZWxlY3Rpb25NZXRob2Qgb2YgdGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZVNlbGVjdGlvbk1ldGhvZCh0YWJsZVNlbGVjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIHRhYmxlQ29kZSwgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IHRhYmxlU2VsZWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKHRhYmxlT2JqZWN0LnNlbGVjdGlvbkJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3Q6IGFueSA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLmZvcm1Db25maWcudGFibGVBY3Rpb25zLnJvd1NlbGVjdGlvbixcbiAgICAgICAgYWN0aW9uQ29kZTogbnVsbCxcbiAgICAgICAgdGFibGVSZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgIHRhYmxlUmVjb3JkRGF0YTogcmVjb3JkRGF0YVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICB0aGlzLmZpbmlzaFRhYmxlUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZVJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbDogYW55LCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSB9ID0gdGFibGVTZWxlY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVTZWxlY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgaWYgKHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVTZWxlY3Rpb25NZXRob2Qgb2YgdGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVTZWxlY3Rpb25NZXRob2QodGFibGVTZWxlY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgc2VsZWN0ZWRSZWNvcmRzIH0gPSBhY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgc2VsZWN0ZWRSZWNvcmRzXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlclNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgYWN0aW9uLCB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIHNlbGVjdGVkUmVjb3JkcyB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLmZvcm1Db25maWcudGFibGVBY3Rpb25zLnNlbGVjdGlvbixcbiAgICAgICAgYWN0aW9uQ29kZSxcbiAgICAgICAgc2VsZWN0ZWRSZWNvcmRzXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMudGFibGVBY3Rpb24sIGFjdGlvblN1YmplY3QpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIHRoaXMuZmluaXNoVGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgICBhY3Rpb24ubmV3U3RhdGUgJiYgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZVNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbDogYW55LCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlR2V0RGF0YSh0YWJsZUFjdGlvbkV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgdGFibGVDb2RlXG4gICAgfTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUdldERhdGFTdGFydFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlckdldERhdGEodGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlckdldERhdGEodGFibGVBY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIHRhYmxlQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHsgdGFibGVDb2RlIH07XG4gICAgY29uc3QgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLmdldFRhYmxlRGF0YSwgYWN0aW9uU3ViamVjdCk7XG4gICAgaWYgKHRoaXMuZXJyb3JPY2N1cmVkKCkpIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZUdldERhdGEodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZUdldERhdGEodGFibGVBY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIHRhYmxlQWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbdGFibGVBY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrU2VjdGlvblJlcXVpcmVkRmllbGRzKHNlY3Rpb25Db2RlOiBzdHJpbmcsIHJlcUZpZWxkTWVzc2FnZT8pIHtcbiAgICB0aGlzLmNsZWFuRXJyb3JGaWVsZHMobnVsbCwgc2VjdGlvbkNvZGUpO1xuICAgIGNvbnN0IHJlcXVpcmVkRmllbGRNZXNzYWdlID0gcmVxRmllbGRNZXNzYWdlID8/IHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZFxuICAgIGNvbnN0IG51bUVycm9ycyA9IHRoaXMudGFnRmllbGRzV2l0aEVycm9yKHRoaXMuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhudWxsLFxuICAgICAgc2VjdGlvbkNvZGUpLCBudWxsLCByZXF1aXJlZEZpZWxkTWVzc2FnZSk7XG4gICAgcmV0dXJuIChudW1FcnJvcnMgPT09IDApO1xuICB9XG5cbiAgdmFsaWRhdGVTZWN0aW9uQ29uc2lzdGVuY3koc2VjdGlvbkNvZGU6IHN0cmluZywgcmVxRmllbGRNZXNzYWdlPykge1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IGNvbXBsZXRlRmllbGRzID0gdGhpcy5jaGVja1NlY3Rpb25SZXF1aXJlZEZpZWxkcyhzZWN0aW9uQ29kZSwgcmVxRmllbGRNZXNzYWdlKTtcbiAgICBpZiAoIWNvbXBsZXRlRmllbGRzKSB7XG4gICAgICB0aGlzLnNldEVycm9yKHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudHlwZVdhcm5pbmcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvblRpdGxlLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xuICAgIGNvbnN0IHJlcXVpcmVkRW1wdHlGaWVsZHMgPSB0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMobnVsbCwgc2VjdGlvbkNvZGUpO1xuICAgIGlmIChyZXF1aXJlZEVtcHR5RmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbGlkYXRpb25FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudHlwZVdhcm5pbmcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvblRpdGxlLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRzKTtcbiAgICAgIHRoaXMudGFnRmllbGRzV2l0aEVycm9yKHJlcXVpcmVkRW1wdHlGaWVsZHMsIG51bGwsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZCk7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkQ29kZSBvZiByZXF1aXJlZEVtcHR5RmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkRW1wdHlGaWVsZCA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICAgICAgcmVxdWlyZWRFbXB0eUZpZWxkPy5mb2N1cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdmFsaWRhdGlvbklzc3VlRmllbGRzID0gdGhpcy5nZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3VlcyhudWxsLFxuICAgICAgc2VjdGlvbkNvZGUpO1xuICAgIGlmICghdmFsaWRhdGlvbkVycm9yICYmIHZhbGlkYXRpb25Jc3N1ZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcih0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnR5cGVXYXJuaW5nLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25UaXRsZSxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uRmllbGRzKTtcbiAgICAgIGZvciAoY29uc3QgZmllbGRDb2RlIG9mIHZhbGlkYXRpb25Jc3N1ZUZpZWxkcykge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uSXNzdWVGaWVsZCA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICAgICAgdmFsaWRhdGlvbklzc3VlRmllbGQuZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3I7XG4gIH1cblxuICBjb3B5VGFibGVSZWNvcmRUb0ZpZWxkcyh0YWJsZU9iajogYW55LCBtYXBwaW5nVGFibGU6IGFueSA9IG51bGwpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVPYmoudGFibGVDb2RlKTtcbiAgICBjb25zdCB0YWJsZVJlY29yZCA9IHRhYmxlT2JqZWN0LmdldFRhYmxlUmVjb3JkKHRhYmxlT2JqLnJlY29yZElkKTtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IHRhYmxlT2JqZWN0LmNvbHVtbk5hbWVzO1xuICAgIGZvciAoY29uc3QgY29sdW1uTmFtZSBvZiBjb2x1bW5OYW1lcykge1xuICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSB0YWJsZVJlY29yZC5nZXRGaWVsZFZhbHVlKGNvbHVtbk5hbWUpID8/ICcnO1xuICAgICAgY29uc3QgZmllbGRDb2RlID0gbWFwcGluZ1RhYmxlPy5bY29sdW1uTmFtZV0gPz8gY29sdW1uTmFtZTtcbiAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGNvbHVtblZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
|
|
1376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvYmFzaWMtZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQU1uRixNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQUM1QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUVsQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBS3RCLE1BQU0sT0FBTyxrQkFBa0I7SUFxTzdCLFlBQ1ksa0JBQXlDLEVBQ3pDLGFBQXFDLEVBQ3JDLGdCQUEwQztRQUYxQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQUNyQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTBCO1FBdk85QyxtQkFBYyxHQUF5QixJQUFJLENBQUM7UUFDNUMsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFHN0Isd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzdDLCtCQUEr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dCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TdHJ1Y3R1cmVBbmREYXRhIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9mb3JtJztcbmltcG9ydCB7IExpYkZvcm1NYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkV2ZW50TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ldmVudC1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGliRmlsZU1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgZm9ybUFjdGlvbnMsIE5PX0VSUk9SLCBIRUFERVIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2Zvcm0uY29uc3RhbnRzJztcbmltcG9ydCB7IEZvcm1BY3Rpb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2FjdGlvbic7XG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2ZpZWxkJztcbmltcG9ydCB7IFJlY29yZFRhYmxlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy90YWJsZS90YWJsZSc7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvc2VjdGlvbic7XG5cbmNvbnN0IFBBWUxPQURfVkVSU0lPTiA9ICdUVUFJTkVYQ0hBTkdFXzEuMCc7XG5jb25zdCBJTkxJTkVfQUNUSU9OID0gJ0lOTElORSc7XG5jb25zdCBHTE9CQUxfQUNUSU9OID0gJ0dMT0JBTCc7XG5jb25zdCBHRVRfREFUQV9BQ1RJT04gPSAnR0VUREFUQSc7XG5cbmNvbnN0IFNVQkpFQ1QgPSAnc3ViamVjdCc7XG5jb25zdCBUT0tFTiA9ICd0b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljRm9ybUNvbXBvbmVudCB7XG4gIHByaXZhdGUgX2Zvcm1TdHJ1Y3R1cmU6IEZvcm1TdHJ1Y3R1cmVBbmREYXRhID0gbnVsbDtcbiAgcHJpdmF0ZSBfY29udHJvbFRva2VuOiBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIF9vcmlnaW5Ub2tlbjogc3RyaW5nO1xuICBwcml2YXRlIF9mb3JtUm91dGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVmaW5pdGlvbk9idGFpbmVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIEV2ZW50b3MgZGUgYWNjaW9uZXMgeSBjYW1wb3NcbiAgcHJpdmF0ZSBfZm9ybVNlY3Rpb25zQWN0aXZhdGU6IGFueSA9IHt9O1xuICBwcml2YXRlIF9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZm9ybUFjdGlvbnNTdGFydDogYW55ID0ge307XG4gIHByaXZhdGUgX2Zvcm1BY3Rpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZmllbGRJbnB1dFZhbGlkYXRpb246IGFueSA9IHt9O1xuICBwcml2YXRlIF9maWVsZFZhbGlkYXRpb25zU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF9maWVsZFZhbGlkYXRpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgLy8gQ2FsbGJhY2sgZGUgYWNjaW9uZXMgZGUgdGFibGFzXG4gIHByaXZhdGUgX3RhYmxlU2VsZWN0aW9uc1N0YXJ0OiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVTZWxlY3Rpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVBY3Rpb25zU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF90YWJsZUFjdGlvbnNGaW5pc2g6IGFueSA9IHt9O1xuICBwcml2YXRlIF90YWJsZUdldERhdGFTdGFydDogYW55ID0ge307XG4gIHByaXZhdGUgX3RhYmxlR2V0RGF0YUZpbmlzaDogYW55ID0ge307XG5cbiAgcHJvdGVjdGVkIGlucHV0RGF0YUZpZWxkczogYW55ID0ge307XG4gIHByb3RlY3RlZCBleHRyYURhdGE6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgX2V2ZW50RW1pdGVyOiBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlO1xuXG5cbiAgZm9ybUNvbmZpZzogYW55O1xuICBuYW1lOiBzdHJpbmc7XG4gIGZvcm1TdWJqZWN0OiBzdHJpbmc7XG4gIF9lcnJvclR5cGU6IHN0cmluZyA9ICcnO1xuICBlcnJvckNvZGU6IHN0cmluZyA9ICcnO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBlcnJvckRldGFpbDogc3RyaW5nID0gJyc7XG4gIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmaWVsZHM6IGFueTtcbiAgYWN0aW9uczogYW55O1xuICBidXN5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0VGl0bGUoKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUaXRsZSgpOyB9XG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldFRpdGxlKHRpdGxlKTsgfVxuICBjbGVhbkRhdGEoKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5jbGVhbkRhdGEoKTsgfVxuICBnZXRDdXJyZW50U3RhdGUoKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRDdXJyZW50U3RhdGUoKTsgfVxuICBzdXBwb3J0U3RhdGUoc3RhdGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc3VwcG9ydFN0YXRlKHN0YXRlKTsgfVxuICBjaGFuZ2VTdGF0ZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2hhbmdlU3RhdGUoc3RhdGUpOyB9XG4gIGdldFN0YXRlcygpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnN0YXRlczsgfVxuICBnZXRJbW11dGFibGVFbGVtZW50KG5hbWU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0SW1tdXRhYmxlRWxlbWVudChuYW1lKTsgfVxuICBnZXRFeHRyYUluZm8obmFtZTogc3RyaW5nKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRFeHRyYUluZm8obmFtZSk7IH1cbiAgZ2V0RmllbGRzKCkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RmllbGRzKCk7IH1cbiAgZ2V0RmllbGROYW1lcygpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkTmFtZXMoKTsgfVxuICBnZXRGaWVsZChjb2RlOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkKGNvZGUpOyB9XG4gIGVuYWJsZUZpZWxkKGNvZGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZW5hYmxlRmllbGQoY29kZSk7IH1cbiAgZGlzYWJsZUZpZWxkKGNvZGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZGlzYWJsZUZpZWxkKGNvZGUpOyB9XG4gIGdldEZpZWxkVmFsdWUoY29kZTogc3RyaW5nKTogYW55IHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkVmFsdWUoY29kZSk7IH1cbiAgZ2V0RmllbGRPcHRpb25UZXh0KGNvZGU6IHN0cmluZyk6IGFueSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZE9wdGlvblRleHQoY29kZSk7IH1cbiAgZ2V0RmllbGRzVmFsdWVzKGNvZGVzOiBzdHJpbmdbXSkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RmllbGRzVmFsdWVzKGNvZGVzKTsgfVxuICBnZXRGaWVsZE9wdGlvbnMoY29kZTogc3RyaW5nKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZE9wdGlvbnMoY29kZSk7IH1cbiAgc2V0RmllbGRWYWx1ZShjb2RlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldEZpZWxkVmFsdWUoY29kZSwgdmFsdWUpOyB9XG4gIHNldEZpZWxkUmVxdWlyZWQoY29kZTogc3RyaW5nLCByZXF1aXJlZDogYm9vbGVhbikgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0RmllbGRSZXF1aXJlZChjb2RlLCByZXF1aXJlZCk7IH1cbiAgc2V0RmllbGRFcnJvck1lc3NhZ2UoY29kZTogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0RmllbGRFcnJvck1lc3NhZ2UoY29kZSwgZXJyb3JNZXNzYWdlKTsgfVxuICBzZXRGaWVsZEVycm9yKGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCB0eXBlPzogc3RyaW5nKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zZXRGaWVsZEVycm9yKGNvZGUsIG1lc3NhZ2UsIHR5cGUpOyB9XG4gIHNldEZpZWxkSW50cmluc2ljRXJyb3JNZXNzYWdlKGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldEZpZWxkSW50cmluc2ljRXJyb3JNZXNzYWdlKGNvZGUsIG1lc3NhZ2UpO1xuICB9XG4gIHNldEZpZWxkT3B0aW9ucyhjb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldEZpZWxkT3B0aW9ucyhjb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKTtcbiAgfVxuICBnZXRGaWVsZFNldChmaWx0ZXJGdW5jPywgY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZFNldChmaWx0ZXJGdW5jLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgYXBwbHlPbkZpZWxkcyhwcm9jZXNzRnVuYywgY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5hcHBseU9uRmllbGRzKHByb2Nlc3NGdW5jLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgYXBwbHlQcm9jZXNzVG9BbGxGaWVsZHMocHJvY2Vzc0Z1bmMpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uYXBwbHlPbkZpZWxkcyhwcm9jZXNzRnVuYyk7XG4gIH1cbiAgY2xlYW5GaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5jbGVhbkZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZ2V0UmVxdWlyZWRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRSZXF1aXJlZEZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldFJlcXVpcmVkRW1wdHlGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGdldENoYW5nZWRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRDaGFuZ2VkRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBnZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3Vlcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkc1dpdGhWYWxpZGF0aW9uSXNzdWVzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICB0YWdGaWVsZHNXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCBjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnRhZ0ZpZWxkc1dpdGhFcnJvcihlcnJvck1lc3NhZ2UsIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBjbGVhbkVycm9yRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2xlYW5FcnJvckZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgc2hvd0xhYmVsRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2hvd0xhYmVsRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBoaWRlTGFiZWxGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlTGFiZWxGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGVuYWJsZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmVuYWJsZUZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZGlzYWJsZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmRpc2FibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZW5hYmxlRmllbGRzXG4gICAqL1xuICBlbmFibGVFZGl0RmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZGlzYWJsZUZpZWxkc1xuICAgKi9cbiAgZGlzYWJsZUVkaXRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIHNob3dGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93RmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBoaWRlRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZUZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZ2V0QWN0aW9uc0J5QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0QWN0aW9uc0J5QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxuICBnZXRIZWFkZXJBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRBY3Rpb25zQnlBdHRyaWJ1dGUoJ2xvY2F0aW9uJywgSEVBREVSKTtcbiAgfVxuICBnZXRBY3Rpb24oYWN0aW9uQ29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgfVxuICBzaG93QWN0aW9ucyhhY3Rpb25BcnJheSkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93QWN0aW9ucyhhY3Rpb25BcnJheSk7XG4gIH1cbiAgaGlkZUFjdGlvbnMoYWN0aW9uQXJyYXkpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZUFjdGlvbnMoYWN0aW9uQXJyYXkpO1xuICB9XG4gIGVuYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZW5hYmxlQWN0aW9ucyhhY3Rpb25BcnJheSk7XG4gIH1cbiAgZGlzYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZGlzYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpO1xuICB9XG4gIHNob3dBY3Rpb24oY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dBY3Rpb25zKGNvZGUpO1xuICB9XG4gIGhpZGVBY3Rpb24oY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmhpZGVBY3Rpb25zKGNvZGUpO1xuICB9XG4gIGVuYWJsZUFjdGlvbihjb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZW5hYmxlQWN0aW9ucyhjb2RlKTtcbiAgfVxuICBkaXNhYmxlQWN0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5kaXNhYmxlQWN0aW9ucyhjb2RlKTtcbiAgfVxuICBnZXRTZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0U2VjdGlvbnMoKTtcbiAgfVxuICBhY3RpdmF0ZVNlY3Rpb24oY29kZSkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5hY3RpdmF0ZVNlY3Rpb24oY29kZSk7XG4gIH1cbiAgZ2V0U2VjdGlvbnNUaXRsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldFNlY3Rpb25zKCkubWFwKHNlYyA9PiBzZWMudGl0bGUpO1xuICB9XG4gIGdldFNlY3Rpb24oY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldFNlY3Rpb24oY29kZSk7XG4gIH1cbiAgc2hvd1NlY3Rpb24oY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dTZWN0aW9ucyhjb2RlKTtcbiAgfVxuICBoaWRlU2VjdGlvbihjb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZVNlY3Rpb25zKGNvZGUpO1xuICB9XG4gIHNob3dTZWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2hvd1NlY3Rpb25zKGNvZGVzKTtcbiAgfVxuICBoaWRlU2VjdGlvbnMoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmhpZGVTZWN0aW9ucyhjb2Rlcyk7XG4gIH1cbiAgZ2V0U3ViU2VjdGlvbihjb2RlOiBzdHJpbmcsIHN1YkNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRTdWJTZWN0aW9uKGNvZGUsIHN1YkNvZGUpO1xuICB9XG4gIHNob3dTdWJTZWN0aW9uKGNvZGU6IHN0cmluZywgc3ViQ29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dTdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBoaWRlU3ViU2VjdGlvbihjb2RlOiBzdHJpbmcsIHN1YkNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlU3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgc2hvd1N1YlNlY3Rpb25zKGNvZGU6IHN0cmluZywgc3ViQ29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dTdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2Rlcyk7XG4gIH1cbiAgaGlkZVN1YlNlY3Rpb25zKGNvZGU6IHN0cmluZywgc3ViQ29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmhpZGVTdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2Rlcyk7XG4gIH1cbiAgZ2V0VGFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUYWJsZXMoKTtcbiAgfVxuICBzaG93VGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93VGFibGVzKGNvZGVzKTtcbiAgfVxuICBoaWRlVGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlVGFibGVzKGNvZGVzKTtcbiAgfVxuICBjbGVhblRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2xlYW5UYWJsZXMoY29kZXMpO1xuICB9XG4gIGdldFRhYmxlKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUYWJsZShjb2RlKTtcbiAgfVxuICBzaG93VGFibGUoY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dUYWJsZXMoY29kZSk7XG4gIH1cbiAgaGlkZVRhYmxlKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlVGFibGVzKGNvZGUpO1xuICB9XG4gIGNsZWFuVGFibGUoY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldFRhYmxlKGNvZGUpPy5jbGVhbigpO1xuICB9XG4gIGdldFRhYmxlUmVjb3JkKGNvZGU6IHN0cmluZywgcmVjb3JkSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUYWJsZVJlY29yZChjb2RlLCByZWNvcmRJZCk7XG4gIH1cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtTWFuYWdlclNlcnZpY2U6IExpYkZvcm1NYW5hZ2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgX2V2ZW50TWFuYWdlcjogTGliRXZlbnRNYW5hZ2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZmlsZU1nbXRTZXJ2aWNlczogTGliRmlsZU1hbmFnZW1lbnRTZXJ2aWNlKSB7XG4gICAgdGhpcy5fZXZlbnRFbWl0ZXIgPSB0aGlzLl9ldmVudE1hbmFnZXI7XG4gICAgdGhpcy5jbGVhblN0YXJ0KCk7XG4gICAgdGhpcy5jdXN0b21QcmVQcm9jZXNzaW5nKCk7XG4gIH1cblxuICBzZXRDb25maWcoZm9ybUNvbmZpZykge1xuICAgIHRoaXMuZm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG4gIH1cblxuICBjbGVhblN0YXJ0KCkge1xuICAgIHRoaXMuX2Vycm9yVHlwZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JDb2RlID0gJyc7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gJyc7XG4gICAgdGhpcy5fZm9ybVN0cnVjdHVyZSA9IG51bGw7XG4gICAgdGhpcy5maWVsZHMgPSBudWxsO1xuICAgIHRoaXMuYWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5fY29udHJvbFRva2VuID0gbnVsbDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IHt9O1xuICAgIHRoaXMuX2RlZmluaXRpb25PYnRhaW5lZCA9IGZhbHNlO1xuICAgIC8vIFNlIGxpbXBpYW4gbG9zIG1hbmVqYWRvcmVzIGRlIGV2ZW50b3NcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICB0aGlzLl9mb3JtU2VjdGlvbnNBY3RpdmF0ZSA9IHt9O1xuICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0luYWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5fZm9ybUFjdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbiA9IHt9O1xuICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlQWN0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5fdGFibGVHZXREYXRhU3RhcnQgPSB7fTtcbiAgICB0aGlzLl90YWJsZUdldERhdGFGaW5pc2ggPSB7fTtcbiAgfVxuXG4gIGdldCBmb3JtVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmlzaWJsZTsgfVxuICBnZXQgZm9ybU1hbmFnZXIoKSB7IHJldHVybiB0aGlzOyB9XG4gIGdldCBmb3JtQ29kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5uYW1lOyB9XG4gIHNldCBmb3JtQ29kZShuYW1lOiBzdHJpbmcpIHsgdGhpcy5uYW1lID0gbmFtZTsgfVxuICBnZXQgaW5TZXJ2ZXJQcm9jZXNzKCkgeyByZXR1cm4gdGhpcy5idXN5OyB9XG4gIGdldCBmb3JtKCk6IEZvcm1TdHJ1Y3R1cmVBbmREYXRhIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU7IH1cblxuICBnZXQgc3RhdGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnN0YXRlOyB9XG4gIGdldCBjdXJyZW50U3RhdGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnN0YXRlOyB9XG4gIHNldCBjdXJyZW50U3RhdGUoc3RhdGU6IHN0cmluZykgeyB0aGlzLl9mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuICBnZXQgaW1tdXRhYmxlRGF0YSgpOiBhbnkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaW1tdXRhYmxlRGF0YSB9XG4gIGdldCBleHRyYUluZm8oKTogYW55IHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmV4dHJhSW5mbyB9XG4gIGdldCB2aXNpYmxlU2VjdGlvbnMoKTogUmVjb3JkRm9ybVNlY3Rpb25bXSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy52aXNpYmxlU2VjdGlvbnM7IH1cblxuICBnZXQgZm9ybVJvdXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9mb3JtUm91dGU7IH1cbiAgc2V0IGZvcm1Sb3V0ZShyb3V0ZTogc3RyaW5nKSB7IHRoaXMuX2Zvcm1Sb3V0ZSA9IHJvdXRlOyB9XG5cbiAgZ2V0IHN1YmplY3QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZm9ybVN1YmplY3Q7IH1cblxuICAvLyBNw6l0b2RvcyB2aXJ0dWFsZXNcbiAgY3VzdG9tUHJlUHJvY2Vzc2luZygpIHsgfVxuICBjdXN0b21Gb3JtU3RhcnQoKSB7IH1cbiAgZGlzcGxheUFjdGlvblNlcnZlckVycm9yKCkgeyB9XG4gIGRpc3BsYXlWYWxpZGF0aW9uU2VydmVyRXJyb3IoKSB7IH1cbiAgZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKSB7IH1cbiAgc2hvd0ZpZWxkSW5mbyhmaWVsZENvZGU6IHN0cmluZywgZGV0YWlsOiBhbnkpIHsgfVxuICBzaG93TW9kYWxEaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG4gIG9wZW5VcGxvYWREaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdXBwb3J0U3RhdGVcbiAgICovXG4gIHN1cHBvcnRNb2RlKHN0YXRlOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc3VwcG9ydFN0YXRlKHN0YXRlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0RmllbGRcbiAgICovXG4gIGdldEZpZWxkT2JqZWN0KGNvZGU6IHN0cmluZyk6IEZpZWxkRGVzY3JpcHRvciB7IHJldHVybiB0aGlzLmdldEZpZWxkKGNvZGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRBY3Rpb25cbiAgICovXG4gIGdldEFjdGlvbk9iamVjdChjb2RlOiBzdHJpbmcpOiBGb3JtQWN0aW9uIHsgcmV0dXJuIHRoaXMuZ2V0QWN0aW9uKGNvZGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRUYWJsZVxuICAgKi9cbiAgZ2V0VGFibGVPYmplY3QoY29kZTogc3RyaW5nKTogUmVjb3JkVGFibGUgeyByZXR1cm4gdGhpcy5nZXRUYWJsZShjb2RlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0U2VjdGlvblxuICAgKi9cbiAgZ2V0U2VjdGlvbk9iamVjdChjb2RlOiBzdHJpbmcpOiBSZWNvcmRGb3JtU2VjdGlvbiB7IHJldHVybiB0aGlzLmdldFNlY3Rpb24oY29kZSk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGNoYW5nZVN0YXRlXG4gICAqL1xuICBjaGFuZ2VGb3JtTW9kZShzdGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3ViamVjdFxuICAgKi9cbiAgZ2V0Rm9ybVN1YmplY3QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc3ViamVjdDsgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1YmplY3RcbiAgICovXG4gIGdldFN1YmplY3QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZm9ybVN1YmplY3Q7IH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdWJqZWN0XG4gICAqL1xuICBnZXRmb3JtU3ViamVjdCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCk7IH1cblxuXG4gIG51bVNlY3Rpb25zKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zZWN0aW9ucy5sZW5ndGg7IH1cblxuICBzdWJzY3JpYmVBcHBFdmVudChldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudEVtaXRlci5zdWJzY3JpYmUoZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gIH1cblxuICBvcGVuRm9ybShuYW1lOiBzdHJpbmcsIGRhdGEgPSBudWxsLCBiYWNrRGF0YSA9IG51bGwsIGNsZWFuU3RhY2sgPSBmYWxzZSk6IHZvaWQge1xuICAgIGxldCBvcmlnaW4gPSBudWxsO1xuICAgIGlmICghY2xlYW5TdGFjaykge1xuICAgICAgb3JpZ2luID0geyAuLi5iYWNrRGF0YSwgbmFtZTogdGhpcy5uYW1lLCB1cmw6IHRoaXMuX2Zvcm1Sb3V0ZSwgdG9rZW46IHRoaXMuX2NvbnRyb2xUb2tlbiB9O1xuICAgICAgb3JpZ2luLnN1YmplY3QgPSBvcmlnaW4/LnN1YmplY3QgPz8gdGhpcy5mb3JtU3ViamVjdDtcbiAgICAgIG9yaWdpbi5zdGF0ZSA9IG9yaWdpbj8uc3RhdGUgPz8gdGhpcy5zdGF0ZTtcbiAgICAgIG9yaWdpbi5maWVsZHMgPSBvcmlnaW4/LmZpZWxkcyA/PyB7fTtcbiAgICAgIG9yaWdpbi5leHRyYSA9IG9yaWdpbj8uZXh0cmEgPz8ge307XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IHsgLi4uZGF0YSwgbmFtZSB9O1xuICAgIHRhcmdldC5zdWJqZWN0ID0gdGFyZ2V0Py5zdWJqZWN0ID8/IG51bGw7XG4gICAgdGFyZ2V0LnN0YXRlID0gdGFyZ2V0Py5zdGF0ZSA/PyBudWxsO1xuICAgIHRhcmdldC5maWVsZHMgPSB0YXJnZXQ/LmZpZWxkcyA/PyB7fTtcbiAgICB0YXJnZXQuZXh0cmEgPSB0YXJnZXQ/LmV4dHJhID8/IHt9O1xuICAgIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLm9wZW5Gb3JtKG9yaWdpbiwgdGFyZ2V0KTtcbiAgfVxuXG4gIGNhbkdvQmFjaygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX29yaWdpblRva2VuICE9PSBudWxsIH1cbiAgZ29CYWNrKCk6IHZvaWQgeyByZXR1cm4gdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuYmFja1RvKCk7IH1cbiAgZ29CYWNrRm9ybSgpOiB2b2lkIHsgcmV0dXJuIHRoaXMuZ29CYWNrKCk7IH1cbiAgZ2V0T3JpZ2luRGV0YWlsKCk6IGFueSB7IHJldHVybiB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRGb3JtSW5mbyh0aGlzLl9vcmlnaW5Ub2tlbik7IH1cblxuICBzZXRFcnJvcihlcnJvclR5cGU6IHN0cmluZywgZXJyb3JNZXNzYWdlOiBzdHJpbmcsIGVycm9yRGV0YWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9lcnJvclR5cGUgPSBlcnJvclR5cGUgfHwgJyc7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UgfHwgJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9IGVycm9yRGV0YWlsIHx8ICcnO1xuICB9XG5cbiAgcmVzZXRFcnJvcigpOiB2b2lkIHsgdGhpcy5zZXRFcnJvcihudWxsLCBudWxsLCBudWxsKTsgfVxuICBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2Vycm9yVHlwZTsgfVxuICBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlOyB9XG4gIGdldEVycm9yRGV0YWlsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmVycm9yRGV0YWlsOyB9XG4gIGdldEVycm9yQ29kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fZXJyb3JUeXBlOyB9XG5cbiAgZ2V0Rm9ybVBhcmFtZXRlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAobmFtZSkgPyAodGhpcy5leHRyYURhdGE/LltuYW1lXSA/PyBudWxsKSA6IG51bGw7XG4gIH1cblxuICBwcmVvY2Vzc0lucHV0UGFyYW1zKHBhcmFtczogYW55KTogc3RyaW5nIHtcbiAgICB0aGlzLl9jb250cm9sVG9rZW4gPSBwYXJhbXM/LltUT0tFTl0gPz8gbnVsbDtcbiAgICBjb25zdCB7IHRva2VuLCBzdWJqZWN0LCBzdGF0ZSwgZmllbGRzLCBleHRyYSwgb3JpZ2luVG9rZW4gfSA9IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldEZvcm1JbmZvKHRoaXMuX2NvbnRyb2xUb2tlbik7XG4gICAgaWYgKCF0aGlzLl9jb250cm9sVG9rZW4gfHwgdGhpcy5fY29udHJvbFRva2VuICE9PSB0b2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRoaXMuZm9ybVN1YmplY3QgPSBwYXJhbXM/LltTVUJKRUNUXSA/PyBzdWJqZWN0ID8/IG51bGw7XG4gICAgdGhpcy5pbnB1dERhdGFGaWVsZHMgPSBmaWVsZHM7XG4gICAgdGhpcy5leHRyYURhdGEgPSBleHRyYTtcbiAgICB0aGlzLl9vcmlnaW5Ub2tlbiA9IG9yaWdpblRva2VuO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHN1YnNjcmliZVNlY3Rpb25BY3RpdmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1TZWN0aW9ucyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuc2VjdGlvbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVNlY3Rpb25zKSkge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgICAgIHNlY3Rpb24uYWN0aXZhdGlvbi5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLmxhdW5jaFNlY3Rpb25BY3RpdmF0aW9uKGNvZGUpKTtcbiAgICAgICAgc2VjdGlvbi5pbmFjdGl2YXRpb24uc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5sYXVuY2hTZWN0aW9uSW5hY3RpdmF0aW9uKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUZpZWxkc1N1YmplY3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmdldEZpZWxkcygpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1GaWVsZHMpKSB7XG4gICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBmaWVsZC5lZGl0aW9uRmluaXNoLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgeyBjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uIH0gPSBldmVudDtcbiAgICAgICAgICB0aGlzLnN0YXJ0RmllbGRWYWxpZGF0aW9uKGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgZmllbGQuZWRpdGlvblBhcnRpYWwuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24gfSA9IGV2ZW50O1xuICAgICAgICAgIHRoaXMuc3RhcnRGaWVsZElucHV0VmFsaWRhdGlvbihjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkLmRldGFpbFJlcXVlc3Quc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc2hvd0ZpZWxkSW5mbyhldmVudC5jb2RlLCBldmVudC5kZXRhaWwpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUFjdGlvblN1YmplY3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1BY3Rpb25zID0gdGhpcy5fZm9ybVN0cnVjdHVyZS5nZXRBY3Rpb25zKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybUFjdGlvbnMpKSB7XG4gICAgICBmb3JtQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICAgIGFjdGlvbi5hY3Rpb25BY3RpdmF0ZWQuc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5zdGFydEFjdGlvbihjb2RlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVUYWJsZVN1YmplY3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1UYWJsZXMgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmdldFRhYmxlcygpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1UYWJsZXMpKSB7XG4gICAgICBmb3JtVGFibGVzLmZvckVhY2godGFibGUgPT4ge1xuICAgICAgICB0YWJsZS5pbmxpbmVBY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVBY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUuZ2xvYmFsQWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlR2xvYmFsQWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLnJlY29yZFNlbGVjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZVJlY29yZFNlbGVjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5zZWxlY3Rpb25BY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVTZWxlY3Rpb25BY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUuZ2V0RGF0YVRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZUdldERhdGEoZXZlbnQpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZvcm1Jbml0KHBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBpbml0aWFsU3RhdGU6IHN0cmluZyA9IHRoaXMucHJlb2Nlc3NJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgIGlmICghdGhpcy5uYW1lKSB7IHJldHVybjsgfVxuICAgIGlmICghdGhpcy5fZGVmaW5pdGlvbk9idGFpbmVkKSB7XG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgICAgY29uc3QgZm9ybURlZmluaXRpb24gPSBhd2FpdCB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRGb3JtRGVmaW5pdGlvbih0aGlzLm5hbWUpO1xuICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgICB0aGlzLl9mb3JtU3RydWN0dXJlID0gbmV3IEZvcm1TdHJ1Y3R1cmVBbmREYXRhKGZvcm1EZWZpbml0aW9uLCB0aGlzLmZvcm1Db25maWcpO1xuICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmZpZWxkcztcbiAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuYWN0aW9ucztcbiAgICAgIHRoaXMuX2RlZmluaXRpb25PYnRhaW5lZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5EYXRhKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdXBwb3J0U3RhdGUoaW5pdGlhbFN0YXRlKSkge1xuICAgICAgaW5pdGlhbFN0YXRlID0gdGhpcy5fZm9ybVN0cnVjdHVyZS5kZWZhdWx0U3RhdGU7XG4gICAgfVxuICAgIHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuY2hhbmdlU3RhdGUoaW5pdGlhbFN0YXRlIHx8IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZGVmYXVsdFN0YXRlKTtcbiAgICBjb25zdCBpbnB1dEZpZWxkTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmlucHV0RGF0YUZpZWxkcyk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGlucHV0RmllbGROYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IGlucHV0RmllbGROYW1lc1tpbmRleF07XG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5pbnB1dERhdGFGaWVsZHNbZmllbGRDb2RlXTtcbiAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGZpZWxkVmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmRSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMuZ2V0RGF0YSk7XG4gICAgdGhpcy5jaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2UpO1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5zdWJzY3JpYmVTZWN0aW9uQWN0aXZhdGlvbigpO1xuICAgIHRoaXMuc3Vic2NyaWJlRmllbGRzU3ViamVjdHMoKTtcbiAgICB0aGlzLnN1YnNjcmliZUFjdGlvblN1YmplY3RzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUYWJsZVN1YmplY3RzKCk7XG4gICAgdGhpcy5jdXN0b21Gb3JtU3RhcnQoKTtcbiAgfVxuXG4gIGNoZWNrRXJyb3JSZWNvcmRSZWNlaXZlZChyZWNvcmRSZXNwb25zZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBlcnJvciB9ID0gcmVjb3JkUmVzcG9uc2U7XG4gICAgaWYgKCFlcnJvcikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICB0aGlzLmVycm9yQ29kZSA9IHJlY29yZFJlc3BvbnNlLmVycm9yQ29kZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHJlY29yZFJlc3BvbnNlLmVycm9yTWVzc2FnZTtcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JEZXRhaWw7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBlcnJvck9jY3VyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmVycm9yQ29kZSAhPT0gTk9fRVJST1IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcG9ydGUgbWFuZWpvIGRlIGV2ZW50b3MgZGUgZm9ybXVsYXJpb1xuICAgKi9cblxuICBhc3luYyByZXF1ZXN0Rm9ybUFjdGlvbihhY3Rpb25Db2RlOiBzdHJpbmcsIGFjdGlvblN1YmplY3Q6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBhY3Rpb25EZXRhaWwgPSB7XG4gICAgICBmb3JtQ29kZTogdGhpcy5uYW1lLFxuICAgICAgZm9ybVN1YmplY3Q6IHRoaXMuZm9ybVN1YmplY3QsXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5fZm9ybVN0cnVjdHVyZS5zdGF0ZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICBhY3Rpb25TdWJqZWN0LFxuICAgICAgdmVyc2lvbjogUEFZTE9BRF9WRVJTSU9OLFxuICAgICAgZm9ybURhdGE6IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZ2V0UGF5bG9hZCgpLFxuICAgICAgaW1tdXRhYmxlRGF0YTogdGhpcy5fZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhLFxuICAgIH07XG4gICAgdGhpcy5lcnJvckNvZGUgPSBOT19FUlJPUjtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSAnJztcbiAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgIGNvbnN0IGZvcm1BY3Rpb25SZXNwb25zZTogYW55ID0gYXdhaXQgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZXhlY1NlcnZlckFjdGlvbihhY3Rpb25EZXRhaWwpO1xuICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xuICAgIGlmIChmb3JtQWN0aW9uUmVzcG9uc2UgJiYgZm9ybUFjdGlvblJlc3BvbnNlLmVycm9yLmVycm9yVHlwZSkge1xuICAgICAgY29uc29sZS5sb2coJ0V4Y2VwY2nDs24gbm8gc29wb3J0YWRhJyk7XG4gICAgfVxuICAgIGlmIChmb3JtQWN0aW9uUmVzcG9uc2UuaGFzRXJyb3IoKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBmb3JtQWN0aW9uUmVzcG9uc2UuZXJyb3I7XG4gICAgICB0aGlzLmVycm9yQ29kZSA9IGVycm9yLmVycm9yQ29kZTtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3JNZXNzYWdlO1xuICAgICAgdGhpcy5lcnJvckRldGFpbCA9IGVycm9yLmVycm9yRGV0YWlsO1xuICAgIH1cbiAgICBjb25zdCBmb3JtUmVzcG9uc2VEYXRhID0gZm9ybUFjdGlvblJlc3BvbnNlLmdldERhdGEoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1XaXRoU2VydmVyRGF0YShmb3JtUmVzcG9uc2VEYXRhKTtcbiAgICByZXR1cm4gZm9ybVJlc3BvbnNlRGF0YTtcbiAgfVxuXG4gIHVwZGF0ZUZvcm1XaXRoU2VydmVyRGF0YShmb3JtQ29udGVudDogYW55KSB7XG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudE1vZGUsIGZvcm1TdWJqZWN0LCBhY3Rpb25zLCBmaWVsZHMsIHJlY29yZFRhYmxlcyxcbiAgICAgIHJldHVybmVkRmlsZSwgaW1tdXRhYmxlRGF0YSwgZXh0cmFJbmZvLFxuICAgIH0gPSBmb3JtQ29udGVudDtcbiAgICBjdXJyZW50TW9kZSAmJiB0aGlzLmNoYW5nZVN0YXRlKGN1cnJlbnRNb2RlKTtcbiAgICBpZiAoZm9ybVN1YmplY3QpIHsgdGhpcy5mb3JtU3ViamVjdCA9IGZvcm1TdWJqZWN0OyB9XG4gICAgaWYgKGFjdGlvbnMgJiYgYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRBY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICBjb25zdCBhY3Rpb25PYmplY3QgPSB0aGlzLmdldEFjdGlvbihjaGFuZ2VkQWN0aW9uLmFjdGlvbkNvZGUpO1xuICAgICAgICBpZiAoYWN0aW9uT2JqZWN0KSB7IGFjdGlvbk9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRBY3Rpb24pOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZEZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGQoY2hhbmdlZEZpZWxkLmZpZWxkQ29kZSk7XG4gICAgICAgIGlmIChmaWVsZE9iamVjdCkge1xuICAgICAgICAgIGZpZWxkT2JqZWN0LnVwZGF0ZUZyb21TZXJ2ZXIoY2hhbmdlZEZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVjb3JkVGFibGVzICYmIHJlY29yZFRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRUYWJsZSBvZiByZWNvcmRUYWJsZXMpIHtcbiAgICAgICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNoYW5nZWRUYWJsZS50YWJsZUNvZGUpO1xuICAgICAgICBpZiAodGFibGVPYmplY3QpIHtcbiAgICAgICAgICB0YWJsZU9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRUYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJldHVybmVkRmlsZSAmJiByZXR1cm5lZEZpbGUuZmlsZSkge1xuICAgICAgdGhpcy5maWxlTWdtdFNlcnZpY2VzLnNhdmVGaWxlKHJldHVybmVkRmlsZS5maWxlLCByZXR1cm5lZEZpbGUubmFtZSwgcmV0dXJuZWRGaWxlLnR5cGUpO1xuICAgIH1cbiAgICB0aGlzLl9mb3JtU3RydWN0dXJlLmltbXV0YWJsZURhdGEgPSBpbW11dGFibGVEYXRhO1xuICAgIHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZXh0cmFJbmZvID0gZXh0cmFJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqbyBkZSBldmVudCBoYW5kbGVycyBwYXJhIGFjY2lvbmVzIHNvYnJlIGVsIGZvcm11bGFyaW9cbiAgICovXG5cbiAgYWRkU2VjdGlvbkFjdGl2YXRpb24oY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHNlY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIHNlY3Rpb25TZXQuZm9yRWFjaCgoc2VjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybVNlY3Rpb25zQWN0aXZhdGVbc2VjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9ybVNlY3Rpb25zQWN0aXZhdGVbc2VjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkU2VjdGlvbkluYWN0aXZhdGlvbihjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3Qgc2VjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgc2VjdGlvblNldC5mb3JFYWNoKChzZWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uTmFtZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBY3Rpb25NZXRob2RTdGFydChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgYWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBhY3Rpb25TZXQuZm9yRWFjaCgoYWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1BY3Rpb25zU3RhcnRbYWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zvcm1BY3Rpb25zU3RhcnRbYWN0aW9uTmFtZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBY3Rpb25NZXRob2RGaW5pc2goY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGFjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgYWN0aW9uU2V0LmZvckVhY2goKGFjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uTmFtZV0pIHtcbiAgICAgICAgdGhpcy5fZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoU2VjdGlvbkFjdGl2YXRpb24oY29kZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbihjb2RlKTtcbiAgICBpZiAoIXNlY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZHMgPSB0aGlzLl9mb3JtU2VjdGlvbnNBY3RpdmF0ZVtjb2RlXTtcbiAgICBpZiAoY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZCBvZiBjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRTZWN0aW9uTWV0aG9kKHNlY3Rpb25PYmplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxhdW5jaFNlY3Rpb25JbmFjdGl2YXRpb24oY29kZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbihjb2RlKTtcbiAgICBpZiAoIXNlY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZHMgPSB0aGlzLl9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW2NvZGVdO1xuICAgIGlmIChjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgZm9yIChjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kIG9mIGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudFNlY3Rpb25NZXRob2Qoc2VjdGlvbk9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRBY3Rpb24oY29kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRBY3Rpb24oY29kZSk7XG4gICAgaWYgKCFhY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgYWN0aW9uT2JqZWN0LnN0YXJ0KCk7XG4gICAgY29uc3QgY2xpZW50QWN0aW9uTWV0aG9kcyA9IHRoaXMuX2Zvcm1BY3Rpb25zU3RhcnRbY29kZV07XG4gICAgaWYgKGNsaWVudEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZCBvZiBjbGllbnRBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uUHJvbWlzZSA9IGNsaWVudEFjdGlvbk1ldGhvZChhY3Rpb25PYmplY3QpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNvbnRpbnVlQWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIGFjdGlvbk9iamVjdC5zdG9wKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFNlcnZlckFjdGlvbihhY3Rpb25PYmplY3QpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXJ2ZXJBY3Rpb24oYWN0aW9uSW5wdXQpIHtcbiAgICBjb25zdCBhY3Rpb24gPSAodHlwZW9mIGFjdGlvbklucHV0ID09PSAnc3RyaW5nJylcbiAgICAgID8gdGhpcy5nZXRBY3Rpb24oYWN0aW9uSW5wdXQpIDogYWN0aW9uSW5wdXQ7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3RGb3JtQWN0aW9uKGFjdGlvbi5hY3Rpb25Db2RlKTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaEFjdGlvbihhY3Rpb24sIGFjdGlvblJlc3VsdCk7XG4gICAgICBhY3Rpb24ubmV3U3RhdGUgJiYgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlBY3Rpb25TZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICBhY3Rpb24uc3RvcCgpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoQWN0aW9uKGFjdGlvbiwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgZmluaXNoQWN0aW9uTWV0aG9kcyA9IHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbi5hY3Rpb25Db2RlXTtcbiAgICBpZiAoZmluaXNoQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50QWN0aW9uTWV0aG9kIG9mIGZpbmlzaEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25NZXRob2QoYWN0aW9uLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZUdsb2JhbEFjdGlvbihhY3Rpb246IGFueSkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogTWFuZWphZG9yZXMgZGUgZXZlbnRvcyBwYXJhIHZhbGlkYWNpb25lcyBzb2JyZSBjYW1wb3NcbiAgICovXG5cbiAgYWRkRmllbGRJbnB1dFZhbGlkYXRpb24oY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChmaWVsZENvZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXSkge1xuICAgICAgICB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRmllbGRWYWxpZGF0aW9uU3RhcnQoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChmaWVsZENvZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2ZpZWxkQ29kZV0pIHtcbiAgICAgICAgdGhpcy5fZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2ZpZWxkQ29kZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRmllbGRWYWxpZGF0aW9uRmluaXNoKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoZmllbGRDb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRDb2RlXSkge1xuICAgICAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoW2ZpZWxkQ29kZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRDb2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0RmllbGRJbnB1dFZhbGlkYXRpb24oZmllbGRDb2RlOiBzdHJpbmcsIGludHJpbnNpY1ZhbGlkYXRpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgZmllbGRUb1ZhbGlkYXRlID0gdGhpcy5nZXRGaWVsZChmaWVsZENvZGUpO1xuICAgIGlmICghZmllbGRUb1ZhbGlkYXRlKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGZpZWxkVG9WYWxpZGF0ZS5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbkNhbGxiYWNrcyA9IHRoaXMuX2ZpZWxkSW5wdXRWYWxpZGF0aW9uW2ZpZWxkQ29kZV07XG4gICAgaWYgKHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY29uc3QgY29udGludWVWYWxpZGF0aW9uUHJvbWlzZSA9IHZhbGlkYXRpb25NZXRob2QoZmllbGRUb1ZhbGlkYXRlKTtcbiAgICAgICAgY2xpZW50VmFsaWRhdGlvblByb21pc2VzLnB1c2goY29udGludWVWYWxpZGF0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0RmllbGRWYWxpZGF0aW9uKGZpZWxkQ29kZTogc3RyaW5nLCBpbnRyaW5zaWNWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZpZWxkVG9WYWxpZGF0ZSA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICBpZiAoIWZpZWxkVG9WYWxpZGF0ZSB8fCAhaW50cmluc2ljVmFsaWRhdGlvbikgeyByZXR1cm47IH1cbiAgICBmaWVsZFRvVmFsaWRhdGUucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25DYWxsYmFja3MgPSB0aGlzLl9maWVsZFZhbGlkYXRpb25zU3RhcnRbZmllbGRDb2RlXTtcbiAgICBpZiAodmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb25NZXRob2Qgb2YgdmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZSA9IHZhbGlkYXRpb25NZXRob2QoZmllbGRUb1ZhbGlkYXRlKTtcbiAgICAgICAgY2xpZW50VmFsaWRhdGlvblByb21pc2VzLnB1c2goY2xpZW50VmFsaWRhdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVWYWxpZGF0aW9uID0gY2xpZW50VmFsaWRhdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVWYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFNlcnZlckZpZWxkVmFsaWRhdGlvbihmaWVsZFRvVmFsaWRhdGUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oaW5wdXRGaWVsZDogc3RyaW5nIHwgRmllbGREZXNjcmlwdG9yKSB7XG4gICAgY29uc3QgZmllbGRPYmogPSAodHlwZW9mIGlucHV0RmllbGQgPT09ICdzdHJpbmcnKVxuICAgICAgPyB0aGlzLmdldEZpZWxkKGlucHV0RmllbGQpIDogaW5wdXRGaWVsZDtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGZpZWxkT2JqLmJhY2tlbmQpIHtcbiAgICAgIGZpZWxkT2JqLnZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnZhbGlkYXRlLCBmaWVsZE9iai5maWVsZENvZGUpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmluaXNoRmllbGRWYWxpZGF0aW9uKGZpZWxkT2JqLCB2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGRPYmouc2V0RXJyb3JDb2RlKHRoaXMuZXJyb3JDb2RlKTtcbiAgICAgIGZpZWxkT2JqLnNldEVycm9yTWVzc2FnZSh0aGlzLmVycm9yTWVzc2FnZSk7XG4gICAgICB0aGlzLmRpc3BsYXlWYWxpZGF0aW9uU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgZmllbGRPYmoudmFsaWRhdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoRmllbGRWYWxpZGF0aW9uKGZpZWxkT2JqZWN0OiBhbnksIHZhbGlkYXRpb25SZXN1bHQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5fZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZE9iamVjdC5maWVsZENvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh2YWxpZGF0aW9uTWV0aG9kKGZpZWxkT2JqZWN0LCB2YWxpZGF0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29udGludWVGaWVsZFZhbGlkYXRpb24oZmllbGRDb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFNlcnZlckZpZWxkVmFsaWRhdGlvbihmaWVsZENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqYWRvcmVzIGRlIGV2ZW50b3MgcGFyYSBhY2Npb25lcyBzb2JyZSBUYWJsYXNcbiAgICovXG5cbiAgYWRkVGFibGVBY3Rpb25TdGFydChjb2RlOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmxpbmVBY3Rpb25PYmplY3QgPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFpbmxpbmVBY3Rpb25PYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3RhYmxlQWN0aW9uc1N0YXJ0W2NvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgaWYgKCF0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA9IFtdO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZUFjdGlvbkZpbmlzaChjb2RlOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmxpbmVBY3Rpb25PYmplY3QgPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFpbmxpbmVBY3Rpb25PYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICAgIHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgaWYgKCF0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA9IFtdO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZVNlbGVjdGlvblN0YXJ0KGNvZGU6IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy5fdGFibGVTZWxlY3Rpb25zU3RhcnRbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSBbXTtcbiAgICAgIHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W2NvZGVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZVNlbGVjdGlvbkZpbmlzaChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVTZWxlY3Rpb25zRmluaXNoW2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSBbXTtcbiAgICAgIHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVHZXREYXRhU3RhcnQoY29kZTogc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLl90YWJsZUdldERhdGFTdGFydFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVHZXREYXRhU3RhcnRbY29kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy5fdGFibGVHZXREYXRhU3RhcnRbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVycy5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgfVxuXG4gIGFkZFRhYmxlR2V0RGF0YUZpbmlzaChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3RhYmxlR2V0RGF0YUZpbmlzaFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVHZXREYXRhRmluaXNoW2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICAgIHRoaXMuX3RhYmxlR2V0RGF0YUZpbmlzaFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW0dFVF9EQVRBX0FDVElPTl0gPSBjYWxsYmFja01ldGhvZDtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uQ29kZSkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCBhY3Rpb24gPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIGFjdGlvbixcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlckdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgYWN0aW9uLCB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogR0xPQkFMX0FDVElPTixcbiAgICAgICAgYWN0aW9uQ29kZVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgYWN0aW9uRGV0YWlsIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgeyByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgYWN0aW9uLFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICAgIHJlY29yZElkLFxuICAgICAgcmVjb3JkRGF0YVxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJBY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLmZvcm1Db25maWcudGFibGVBY3Rpb25zLmlubGluZSxcbiAgICAgICAgYWN0aW9uQ29kZSxcbiAgICAgICAgdGFibGVSZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgIHRhYmxlUmVjb3JkRGF0YTogcmVjb3JkRGF0YVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICB0aGlzLmZpbmlzaFRhYmxlQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgY29tcGxldGVJbmxpbmVBY3Rpb24odGFibGVBY3Rpb246IGFueSkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJBY3Rpb24odGFibGVBY3Rpb24pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVBY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVJlY29yZFNlbGVjdGlvbih0YWJsZUFjdGlvbkV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uRGV0YWlsIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgeyByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlU2VsZWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICByZWNvcmRJZCxcbiAgICAgIHJlY29yZERhdGFcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgaWYgKHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVTZWxlY3Rpb25NZXRob2Qgb2YgdGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZVNlbGVjdGlvbk1ldGhvZCh0YWJsZVNlbGVjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIHRhYmxlQ29kZSwgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IHRhYmxlU2VsZWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKHRhYmxlT2JqZWN0LnNlbGVjdGlvbkJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3Q6IGFueSA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLmZvcm1Db25maWcudGFibGVBY3Rpb25zLnJvd1NlbGVjdGlvbixcbiAgICAgICAgYWN0aW9uQ29kZTogbnVsbCxcbiAgICAgICAgdGFibGVSZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgIHRhYmxlUmVjb3JkRGF0YTogcmVjb3JkRGF0YVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICB0aGlzLmZpbmlzaFRhYmxlUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZVJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbDogYW55LCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSB9ID0gdGFibGVTZWxlY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVTZWxlY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgaWYgKHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVTZWxlY3Rpb25NZXRob2Qgb2YgdGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVTZWxlY3Rpb25NZXRob2QodGFibGVTZWxlY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgc2VsZWN0ZWRSZWNvcmRzIH0gPSBhY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgc2VsZWN0ZWRSZWNvcmRzXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlclNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgYWN0aW9uLCB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIHNlbGVjdGVkUmVjb3JkcyB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLmZvcm1Db25maWcudGFibGVBY3Rpb25zLnNlbGVjdGlvbixcbiAgICAgICAgYWN0aW9uQ29kZSxcbiAgICAgICAgc2VsZWN0ZWRSZWNvcmRzXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMudGFibGVBY3Rpb24sIGFjdGlvblN1YmplY3QpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIHRoaXMuZmluaXNoVGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgICBhY3Rpb24ubmV3U3RhdGUgJiYgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZVNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbDogYW55LCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlR2V0RGF0YSh0YWJsZUFjdGlvbkV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgdGFibGVDb2RlXG4gICAgfTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUdldERhdGFTdGFydFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlckdldERhdGEodGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlckdldERhdGEodGFibGVBY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIHRhYmxlQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHsgdGFibGVDb2RlIH07XG4gICAgY29uc3QgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLmdldFRhYmxlRGF0YSwgYWN0aW9uU3ViamVjdCk7XG4gICAgaWYgKHRoaXMuZXJyb3JPY2N1cmVkKCkpIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZUdldERhdGEodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZUdldERhdGEodGFibGVBY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIHRhYmxlQWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbdGFibGVBY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrU2VjdGlvblJlcXVpcmVkRmllbGRzKHNlY3Rpb25Db2RlOiBzdHJpbmcsIHJlcUZpZWxkTWVzc2FnZT8pIHtcbiAgICB0aGlzLmNsZWFuRXJyb3JGaWVsZHMobnVsbCwgc2VjdGlvbkNvZGUpO1xuICAgIGNvbnN0IHJlcXVpcmVkRmllbGRNZXNzYWdlID0gcmVxRmllbGRNZXNzYWdlID8/IHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZFxuICAgIGNvbnN0IG51bUVycm9ycyA9IHRoaXMudGFnRmllbGRzV2l0aEVycm9yKHRoaXMuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhudWxsLFxuICAgICAgc2VjdGlvbkNvZGUpLCBudWxsLCByZXF1aXJlZEZpZWxkTWVzc2FnZSk7XG4gICAgcmV0dXJuIChudW1FcnJvcnMgPT09IDApO1xuICB9XG5cbiAgdmFsaWRhdGVTZWN0aW9uQ29uc2lzdGVuY3koc2VjdGlvbkNvZGU6IHN0cmluZywgcmVxRmllbGRNZXNzYWdlPykge1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IGNvbXBsZXRlRmllbGRzID0gdGhpcy5jaGVja1NlY3Rpb25SZXF1aXJlZEZpZWxkcyhzZWN0aW9uQ29kZSwgcmVxRmllbGRNZXNzYWdlKTtcbiAgICBpZiAoIWNvbXBsZXRlRmllbGRzKSB7XG4gICAgICB0aGlzLnNldEVycm9yKHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudHlwZVdhcm5pbmcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvblRpdGxlLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xuICAgIGNvbnN0IHJlcXVpcmVkRW1wdHlGaWVsZHMgPSB0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMobnVsbCwgc2VjdGlvbkNvZGUpO1xuICAgIGlmIChyZXF1aXJlZEVtcHR5RmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbGlkYXRpb25FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudHlwZVdhcm5pbmcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvblRpdGxlLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRzKTtcbiAgICAgIHRoaXMudGFnRmllbGRzV2l0aEVycm9yKHJlcXVpcmVkRW1wdHlGaWVsZHMsIG51bGwsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZCk7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkQ29kZSBvZiByZXF1aXJlZEVtcHR5RmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkRW1wdHlGaWVsZCA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICAgICAgcmVxdWlyZWRFbXB0eUZpZWxkPy5mb2N1cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdmFsaWRhdGlvbklzc3VlRmllbGRzID0gdGhpcy5nZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3VlcyhudWxsLFxuICAgICAgc2VjdGlvbkNvZGUpO1xuICAgIGlmICghdmFsaWRhdGlvbkVycm9yICYmIHZhbGlkYXRpb25Jc3N1ZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcih0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnR5cGVXYXJuaW5nLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25UaXRsZSxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uRmllbGRzKTtcbiAgICAgIGZvciAoY29uc3QgZmllbGRDb2RlIG9mIHZhbGlkYXRpb25Jc3N1ZUZpZWxkcykge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uSXNzdWVGaWVsZCA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICAgICAgdmFsaWRhdGlvbklzc3VlRmllbGQuZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3I7XG4gIH1cblxuICBjb3B5VGFibGVSZWNvcmRUb0ZpZWxkcyh0YWJsZU9iajogYW55LCBtYXBwaW5nVGFibGU6IGFueSA9IG51bGwpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVPYmoudGFibGVDb2RlKTtcbiAgICBjb25zdCB0YWJsZVJlY29yZCA9IHRhYmxlT2JqZWN0LmdldFRhYmxlUmVjb3JkKHRhYmxlT2JqLnJlY29yZElkKTtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IHRhYmxlT2JqZWN0LmNvbHVtbk5hbWVzO1xuICAgIGZvciAoY29uc3QgY29sdW1uTmFtZSBvZiBjb2x1bW5OYW1lcykge1xuICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSB0YWJsZVJlY29yZC5nZXRGaWVsZFZhbHVlKGNvbHVtbk5hbWUpID8/ICcnO1xuICAgICAgY29uc3QgZmllbGRDb2RlID0gbWFwcGluZ1RhYmxlPy5bY29sdW1uTmFtZV0gPz8gY29sdW1uTmFtZTtcbiAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGNvbHVtblZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
|