@openziti/ziti-console-lib 0.12.6 → 0.12.8
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/assets/fonts/icomoon.eot +0 -0
- package/assets/fonts/icomoon.svg +8 -0
- package/assets/fonts/icomoon.ttf +0 -0
- package/assets/fonts/icomoon.woff +0 -0
- package/assets/fonts/icomoon.woff2 +0 -0
- package/assets/html/terminators.htm +1 -1
- package/esm2022/lib/features/config-editor/config-editor.component.mjs +6 -2
- package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +4 -1
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +10 -3
- package/esm2022/lib/features/progress-wizard/progress-wizard.component.mjs +3 -3
- package/esm2022/lib/pages/identities/identities-page.service.mjs +7 -2
- package/esm2022/lib/services/schema.service.mjs +3 -3
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/lib/ziti-console-lib.module.mjs +5 -3
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/openziti-ziti-console-lib.mjs +33 -12
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/config-editor/config-editor.component.d.ts.map +1 -1
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts.map +1 -1
- package/lib/features/preview-list/preview-list.component.d.ts +1 -0
- package/lib/features/preview-list/preview-list.component.d.ts.map +1 -1
- package/lib/pages/identities/identities-page.service.d.ts +1 -0
- package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
- package/lib/ziti-console-lib.module.d.ts +1 -1
- package/lib/ziti-console-lib.module.d.ts.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -1
|
@@ -602,7 +602,7 @@ class SchemaService {
|
|
|
602
602
|
if (item.type !== 'array') {
|
|
603
603
|
return;
|
|
604
604
|
}
|
|
605
|
-
this.subscriptions.add(item?.component?.instance?.itemAdded
|
|
605
|
+
this.subscriptions.add(item?.component?.instance?.itemAdded?.subscribe((event) => {
|
|
606
606
|
if (!this.itemDataValid(item)) {
|
|
607
607
|
const growlerData = new GrowlerModel('error', 'Error', `Error Validating Config`, 'The entered configuration is invalid. Please update missing/invalid fields and try again.');
|
|
608
608
|
this.growlerService.show(growlerData);
|
|
@@ -615,7 +615,7 @@ class SchemaService {
|
|
|
615
615
|
item.addedItems.push(itemData);
|
|
616
616
|
item.component.instance.addedItems = item.addedItems;
|
|
617
617
|
}));
|
|
618
|
-
this.subscriptions.add(item?.component?.instance?.itemRemoved
|
|
618
|
+
this.subscriptions.add(item?.component?.instance?.itemRemoved?.subscribe(() => {
|
|
619
619
|
item.addedItems = item.component?.instance?.addedItems;
|
|
620
620
|
}));
|
|
621
621
|
}
|
|
@@ -805,4 +805,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
805
805
|
providedIn: 'root'
|
|
806
806
|
}]
|
|
807
807
|
}], ctorParameters: function () { return [{ type: i1.GrowlerService }]; } });
|
|
808
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvc2VydmljZXMvc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQWUsVUFBVSxFQUFtQixNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDcEYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDL0YsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sb0VBQW9FLENBQUM7QUFDL0csT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDL0YsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDckcsT0FBTyxDQUFhLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBQ3ZHLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHlFQUF5RSxDQUFDO0FBQ25ILE9BQU8sRUFDSCxpQ0FBaUMsRUFDcEMsTUFBTSx5RkFBeUYsQ0FBQztBQUNqRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUNsRyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwyRUFBMkUsQ0FBQztBQUNwSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBVWpFLE1BR2EsYUFBYTtJQXVCdEIsWUFBb0IsY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBdEJsRCxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsV0FBTSxH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R0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ2xGLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzVCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzdGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7d0JBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ3BFO2FBQ0o7aUJBQU07Z0JBQ0gsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUNoSCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ3RCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ25DLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxD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TUFBTTs7U0FFVCxhQUFhOzRGQUFiLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtDb21wb25lbnRSZWYsIEluamVjdGFibGUsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYmplY3RDb21wb25lbnR9IGZyb20gXCIuLi9mZWF0dXJlcy9keW5hbWljLXdpZGdldHMvb2JqZWN0L29iamVjdC5jb21wb25lbnRcIjtcbmltcG9ydCB7TnVtYmVySW5wdXRDb21wb25lbnR9IGZyb20gXCIuLi9mZWF0dXJlcy9keW5hbWljLXdpZGdldHMvbnVtYmVyL251bWJlci1pbnB1dC5jb21wb25lbnRcIjtcbmltcG9ydCB7Qm9vbGVhblRvZ2dsZUlucHV0Q29tcG9uZW50fSBmcm9tIFwiLi4vZmVhdHVyZXMvZHluYW1pYy13aWRnZXRzL2Jvb2xlYW4vYm9vbGVhbi10b2dnbGUtaW5wdXQuY29tcG9uZW50XCI7XG5pbXBvcnQge1N0cmluZ0lucHV0Q29tcG9uZW50fSBmcm9tIFwiLi4vZmVhdHVyZXMvZHluYW1pYy13aWRnZXRzL3N0cmluZy9zdHJpbmctaW5wdXQuY29tcG9uZW50XCI7XG5pbXBvcnQge1NlbGVjdG9ySW5wdXRDb21wb25lbnR9IGZyb20gXCIuLi9mZWF0dXJlcy9keW5hbWljLXdpZGdldHMvc2VsZWN0b3Ivc2VsZWN0b3ItaW5wdXQuY29tcG9uZW50XCI7XG5pbXBvcnQgXywge2lzTnVtYmVyfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge1RleHRMaXN0SW5wdXRDb21wb25lbnR9IGZyb20gXCIuLi9mZWF0dXJlcy9keW5hbWljLXdpZGdldHMvdGV4dC1saXN0L3RleHQtbGlzdC1pbnB1dC5jb21wb25lbnRcIjtcbmltcG9ydCB7Q2hlY2tib3hMaXN0SW5wdXRDb21wb25lbnR9IGZyb20gXCIuLi9mZWF0dXJlcy9keW5hbWljLXdpZGdldHMvY2hlY2tib3gtbGlzdC9jaGVja2JveC1saXN0LWlucHV0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtcbiAgICBQcm90b2NvbEFkZHJlc3NQb3J0SW5wdXRDb21wb25lbnRcbn0gZnJvbSBcIi4uL2ZlYXR1cmVzL2R5bmFtaWMtd2lkZ2V0cy9wcm90b2NvbC1hZGRyZXNzLXBvcnQvcHJvdG9jb2wtYWRkcmVzcy1wb3J0LWlucHV0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtQb3J0UmFuZ2VzQ29tcG9uZW50fSBmcm9tIFwiLi4vZmVhdHVyZXMvZHluYW1pYy13aWRnZXRzL3BvcnQtcmFuZ2VzL3BvcnQtcmFuZ2VzLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtGb3J3YXJkaW5nQ29uZmlnQ29tcG9uZW50fSBmcm9tIFwiLi4vZmVhdHVyZXMvZHluYW1pYy13aWRnZXRzL2ZvcndhcmRpbmctY29uZmlnL2ZvcndhcmRpbmctY29uZmlnLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uL2ZlYXR1cmVzL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vZmVhdHVyZXMvbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuXG5leHBvcnQgdHlwZSBQcm90b2NvbEFkZHJlc3NQb3J0ID0ge1xuICAgIHByb3RvY29sOiBhbnk7XG4gICAgYWRkcmVzczogYW55O1xuICAgIGhvc3RuYW1lOiBhbnk7XG4gICAgcG9ydDogYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNjaGVtYVNlcnZpY2Uge1xuICAgIGRhdGEgPSB7fTtcbiAgICBmb3JtSWQgPSBudWxsO1xuICAgIHZhbHVlID0ge307XG4gICAgY29kZVZpZXcgPSBudWxsO1xuICAgIHRpbWVvdXRJZCA9IG51bGw7XG4gICAgc3VnZ2VzdGluZyA9IG51bGw7XG4gICAgc3VnZ2VzdElkOiBhbnkgPSBudWxsO1xuICAgIHN1Z2dlc3RpbmdGaWVsZCA9IFwiXCI7XG4gICAgcHJvcGVydHlFeGNsdWRlcyA9IFtdO1xuICAgIHJlc2VydmVkUHJvcGVydGllcyA9IFtdO1xuICAgIHJlc2VydmVkUHJvcGVydGllc01hcDogYW55ID0ge1xuICAgICAgICBwcm90b2NvbEFkZHJlc3NQb3J0OiB1bmRlZmluZWQsXG4gICAgICAgIGZvcndhcmRQcm90b2NhbEFkZHJlc3NQb3J0OiB1bmRlZmluZWQsXG4gICAgICAgIGFsbG93ZWRBZGRyZXNzZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9yd2FyZEFkZHJlc3M6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgcmVxdWlyZWRQcm9wZXJ0aWVzOiBhbnlbXSA9IFsnYWxsb3dlZEFkZHJlc3NlcycsICdhbGxvd2VkUHJvdG9jb2xzJywgJ2FsbG93ZWRQb3J0cyddO1xuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGl0ZW1zOiBhbnlbXSA9IFtdO1xuICAgIHByaXZhdGUgYkNvbG9yQXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBsQ29sb3JBcnJheTogc3RyaW5nW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgZ2V0VHlwZShwcm9wZXJ0eTogYW55KSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eS50eXBlID09IFwiYm9vbGVhblwiKSByZXR1cm4gcHJvcGVydHkudHlwZTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkuZW51bSAhPSBudWxsKSByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS50eXBlKSByZXR1cm4gcHJvcGVydHkudHlwZTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmFsbE9mICYmIHByb3BlcnR5LmFsbE9mLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS5hbGxPZlswXS50eXBlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJTY2hlbWEoc2NoZW1hLCBkeW5hbWljRm9ybSwgbENvbG9yQXJyYXksIGJDb2xvckFycmF5LCBmb3JtRGF0YSkge1xuICAgICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLnJlbmRlcihzY2hlbWEsIGR5bmFtaWNGb3JtLCBsQ29sb3JBcnJheSwgYkNvbG9yQXJyYXkpO1xuICAgICAgICAgICAgZm9yIChsZXQgb2JqIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjUmVmID0gb2JqLmNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBpZiAoY1JlZj8uaW5zdGFuY2UudmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcE5hbWU6IHN0cmluZ1tdICA9IGNSZWYuaW5zdGFuY2UucGFyZW50YWdlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50S2V5O1xuICAgICAgICAgICAgICAgICAgICBpZihwTmFtZSkgcGFyZW50S2V5ID0gcE5hbWUuam9pbignLicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50S2V5ICYmICFmb3JtRGF0YVtwYXJlbnRLZXldKSBmb3JtRGF0YVtwYXJlbnRLZXldID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zO1xuICAgIH1cblxuICAgIHJlbmRlcihzY2hlbWE6IGFueSwgdmlldzogVmlld0NvbnRhaW5lclJlZiwgbENvbG9yQXJyYXk6IHN0cmluZ1tdLCBiQ29sb3JBcnJheTogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmJDb2xvckFycmF5ID0gYkNvbG9yQXJyYXk7XG4gICAgICAgIHRoaXMubENvbG9yQXJyYXkgPSBsQ29sb3JBcnJheTtcbiAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBuZXN0TGV2ZWwgPSAwO1xuICAgICAgICAgICAgdGhpcy5hZGRGaWVsZHMoc2NoZW1hLCB2aWV3LCBuZXN0TGV2ZWwsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtc1RvQWRkID0gW107XG4gICAgICAgIGlmICh0aGlzLnJlc2VydmVkUHJvcGVydGllc01hcC5wcm90b2NvbEFkZHJlc3NQb3J0KSB7XG4gICAgICAgICAgICBpdGVtc1RvQWRkLnB1c2godGhpcy5yZXNlcnZlZFByb3BlcnRpZXNNYXAucHJvdG9jb2xBZGRyZXNzUG9ydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzZXJ2ZWRQcm9wZXJ0aWVzTWFwLmFsbG93ZWRBZGRyZXNzZXMgJiYgdGhpcy5yZXNlcnZlZFByb3BlcnRpZXNNYXAuZm9yd2FyZEFkZHJlc3MpIHtcbiAgICAgICAgICAgIGl0ZW1zVG9BZGQucHVzaCh0aGlzLnJlc2VydmVkUHJvcGVydGllc01hcC5mb3J3YXJkQWRkcmVzcyk7XG4gICAgICAgICAgICBpdGVtc1RvQWRkLnB1c2godGhpcy5yZXNlcnZlZFByb3BlcnRpZXNNYXAuYWxsb3dlZEFkZHJlc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtcyA9IFsuLi5pdGVtc1RvQWRkLCAuLi50aGlzLml0ZW1zXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXM7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoc2NoZW1hOiBhbnksIGZvcm1EYXRhOiBhbnkpOiBhbnkge1xuICAgICAgICBsZXQgZXJyb3JzID0ge307XG4gICAgICAgIGVycm9ycyA9IHsuLi5lcnJvcnMsIC4uLnRoaXMudmFsaWRhdGVGaWVsZHMoc2NoZW1hLCBmb3JtRGF0YSl9O1xuICAgICAgICByZXR1cm4gZXJyb3JzXG4gICAgfVxuXG4gICAgdmFsaWRhdGVGaWVsZHMoc2NoZW1hLCBmb3JtRGF0YTogYW55LCBwYXJlbnRhZ2U/OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBsZXQgZXJyb3JzID0ge307XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBzY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICAgICAgZXJyb3JzID0gey4uLmVycm9ycywgLi4udGhpcy52YWxpZGF0ZUZpZWxkKGtleSwgc2NoZW1hLCBmb3JtRGF0YSwgc2NoZW1hLnByb3BlcnRpZXNba2V5XSwgcGFyZW50YWdlKX07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUZpZWxkKGtleSwgc2NoZW1hLCBmb3JtRGF0YSwgcHJvcGVydHksIHBhcmVudGFnZSk6IGFueSB7XG4gICAgICAgIGxldCBlcnJvcnMgPSB7fVxuICAgICAgICB2YXIgdHlwZSA9IHRoaXMuZ2V0VHlwZShwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKHR5cGUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgbGV0IG5ld1BhcmVudGFnZSA9IGtleTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRhZ2UpIG5ld1BhcmVudGFnZSA9IGAke3BhcmVudGFnZX0uJHtrZXl9YDtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzID0gey4uLmVycm9ycywgLi4udGhpcy52YWxpZGF0ZUZpZWxkcyhwcm9wZXJ0eSwgZm9ybURhdGEsIG5ld1BhcmVudGFnZSl9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRoZVZhbHVlOiBzdHJpbmcgPSBfLmdldChmb3JtRGF0YSwga2V5KVxuICAgICAgICAgICAgaWYgKHNjaGVtYS5yZXF1aXJlZCAmJiBzY2hlbWEucmVxdWlyZWQuaW5jbHVkZXMoa2V5KSAmJiB0aGVWYWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3JzLCBrZXksIGAke2tleX0gcmVxdWlyZWRgKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5yZXF1aXJlZCAmJiBzY2hlbWEucmVxdWlyZWQuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWluID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5taW5pbXVtKSBtaW4gPSBOdW1iZXIocHJvcGVydHkubWluaW11bSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5tYXhpbXVtKSBtYXggPSBOdW1iZXIocHJvcGVydHkubWF4aW11bSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZUludCh0aGVWYWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9ycywga2V5LCBgaW52YWxpZCBudW1iZXJgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBOdW1iZXIodGhlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiAhPSBudWxsICYmIHZhbCA8IG1pbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3JzLCBrZXksIGBtaW5pbXVtIHZhbHVlICR7bWlufSBleHBlY3RlZGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heCAhPSBudWxsICYmIHZhbCA+IG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3JzLCBrZXksIGBtYXhpbXVtIHZhbHVlICR7bWF4fSBleHBlY3RlZGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUoc2NoZW1hOiBhbnksIGtleTogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnksIHBhcmVudGFnZTogc3RyaW5nW10pIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkpLmFkZENsYXNzKFwib25cIik7XG4gICAgICAgICAgICAgICAgJChcIi5cIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkgKyBcIl9hcmVhXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleS5zcGxpdChcImZvcndhcmRcIikuam9pbihcIlwiKS50b0xvd2VyQ2FzZSgpKS5wcm9wKFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5LnNwbGl0KFwiZm9yd2FyZFwiKS5qb2luKFwiXCIpLnRvTG93ZXJDYXNlKCkpLnByb3AoJ25vZGVOYW1lJykgPT0gXCJJTlBVVFwiKSAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleS5zcGxpdChcImZvcndhcmRcIikuam9pbihcIlwiKS50b0xvd2VyQ2FzZSgpKS52YWwoXCJcIik7XG4gICAgICAgICAgICB9IGVsc2UgJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkpLnJlbW92ZUNsYXNzKFwib25cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PSBcImFycmF5XCIpIHtcbiAgICAgICAgICAgICAgICAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSArIFwiX3NlbGVjdGVkXCIpLmh0bWwoXCJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KS5oYXNDbGFzcyhcImNoZWNrYm94TGlzdFwiKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG90YWwgPSAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSkuZGF0YShcInRvdGFsXCIpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5ICsgXCJfXCIgKyBpKS5yZW1vdmVDbGFzcyhcImNoZWNrZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlW2ldID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gdmFsdWVbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChwcm9wICsgXCI6IFwiICsgdmFsdWVbaV1bcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR5cGVzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyAnc2NoZW1hXycgKyBrZXkgKyAnX0J1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gb2JqLmRhdGEoXCJpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxzID0gb2JqLmRhdGEoXCJ2YWx1ZXNcIikuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFscy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKFwiI1wiICsgaWQgKyBcIl9cIiArIHZhbHNbal0pLmF0dHIoJ3R5cGUnKSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goXCJudW1iZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMucHVzaChcInN0cmluZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gJCgnPGRpdiBjbGFzcz1cInRhZyBvYmpcIiBkYXRhLXR5cGVzPVwiJyArIHR5cGVzLnRvU3RyaW5nKCkgKyAnXCI+JyArIHZhbHVlcy50b1N0cmluZygpICsgJzwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGljayhzY2hlbWEucmVtb3ZlTWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkgKyBcIl9zZWxlY3RlZFwiKS5hcHBlbmQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkpLmhhc0NsYXNzKFwiY2hlY2tib3hMaXN0XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvdGFsID0gJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkpLmRhdGEoXCJ0b3RhbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5ICsgXCJfXCIgKyBpKS5kYXRhKFwidmFsdWVcIikgPT0gdmFsdWVbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5ICsgXCJfXCIgKyBpKS5hZGRDbGFzcyhcImNoZWNrZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gJCgnPGRpdiBjbGFzcz1cInRhZ1wiPicgKyB2YWx1ZVtpXSArICc8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsaWNrKHNjaGVtYS5yZW1vdmVNZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkgKyBcIl9zZWxlY3RlZFwiKS5hcHBlbmQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KS52YWwodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZShrZXk6IHN0cmluZywgcHJvcGVydHk6IGFueSwganNvbjogYW55LCBwYXJlbnRhZ2U6IHN0cmluZ1tdKSB7XG4gICAgICAgIGlmICh0aGlzLmdldFR5cGUocHJvcGVydHkpID09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAganNvbltrZXldID0gW107XG4gICAgICAgICAgICBpZiAoJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkpLmhhc0NsYXNzKFwiY2hlY2tib3hMaXN0XCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KTtcbiAgICAgICAgICAgICAgICBsZXQgdG90YWwgPSBvYmouZGF0YShcInRvdGFsXCIpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5ICsgXCJfXCIgKyBpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaGFzQ2xhc3MoXCJjaGVja2VkXCIpKSBqc29uW2tleV0ucHVzaChpdGVtLmRhdGEoXCJ2YWx1ZVwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSArIFwiX3NlbGVjdGVkXCIpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbiAoaSwgZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJChlKS5oYXNDbGFzcyhcIm9ialwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1zID0gJChlKS5odG1sKCkuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0eXBlcyA9ICQoZSkuZGF0YShcInR5cGVzXCIpLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5mbyA9IGl0ZW1zW2ldLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3A6IGFueSA9IGluZm8uc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGluZm8uam9pbignOicpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IHR5cGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpbcHJvcF0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25ba2V5XS5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uW2tleV0ucHVzaCgkKGUpLmh0bWwoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldFR5cGUocHJvcGVydHkpID09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBqc29uW2tleV0gPSAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSkuaGFzQ2xhc3MoXCJvblwiKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldFR5cGUocHJvcGVydHkpID09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICBsZXQgbnVtVmFsdWU6IGFueSA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KS52YWwoKTtcbiAgICAgICAgICAgIGlmIChudW1WYWx1ZSAhPSBudWxsICYmIG51bVZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbnVtVmFsdWUgPSBudW1WYWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKG51bVZhbHVlID09IFwiXCIgfHwgaXNOYU4obnVtVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bVZhbHVlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ0aW1lb3V0XCIpID49IDApIG51bVZhbHVlID0gNTAwMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBudW1WYWx1ZSA9IE51bWJlcihudW1WYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAganNvbltrZXldID0gbnVtVmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBqc29uW2tleV0gPSAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSkudmFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuXG4gICAgZ2V0TGlzdFZhbHVlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGxpc3RJdGVtczogYW55W10gPSBbXTtcbiAgICAgICAgJChcIiNcIiArIGlkICsgXCJfc2VsZWN0ZWRcIikuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7XG4gICAgICAgICAgICBpZiAoJChlKS5oYXNDbGFzcyhcIm9ialwiKSkge1xuICAgICAgICAgICAgICAgIGxldCBpdGVtcyA9ICQoZSkuaHRtbCgpLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5mbyA9IGl0ZW1zW2ldLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wID0gaW5mby5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGluZm8uam9pbignOicpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtwcm9wIGFzIHN0cmluZ10gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW3Byb3AgYXMgc3RyaW5nXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5wdXNoKG9iaik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5wdXNoKCQoZSkuaHRtbCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBsaXN0SXRlbXM7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVQcm9wZXJ0eShzY2hlbWE6IGFueSwga2V5OiBzdHJpbmcsIHByb3BlcnR5OiBhbnksIHBhcmVudGFnZTogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IHR5cGUgPSB0aGlzLmdldFR5cGUocHJvcGVydHkpO1xuICAgICAgICBpZiAodHlwZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBzdWJLZXkgaW4gcHJvcGVydHkucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQcm9wZXJ0eShzdWJLZXksIHByb3BlcnR5LnByb3BlcnRpZXNbc3ViS2V5XSwga2V5LCBbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZWxlbSA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSkgPyBwYXJlbnRhZ2UgKyBcIl9cIiA6IFwiXCIpICsgXCJzY2hlbWFfXCIgKyBrZXkpO1xuICAgICAgICAgICAgbGV0IHRoZVZhbHVlOiBhbnkgPSAnJztcbiAgICAgICAgICAgIGlmIChlbGVtLnZhbCgpICE9IG51bGwpIHRoZVZhbHVlID0gZWxlbS52YWwoKTtcbiAgICAgICAgICAgIGlmICh0eXBlID09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5yZXF1aXJlZCAmJiBzY2hlbWEucmVxdWlyZWQuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5taW5pbXVtKSBtaW4gPSBOdW1iZXIocHJvcGVydHkubWluaW11bSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5tYXhpbXVtKSBtYXggPSBOdW1iZXIocHJvcGVydHkubWF4aW11bSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZUludCh0aGVWYWx1ZSkpKSBlbGVtLmFkZENsYXNzKFwiZXJyb3JzXCIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBOdW1iZXIodGhlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiAhPSBudWxsICYmIHZhbCA8IG1pbikgZWxlbS5hZGRDbGFzcyhcImVycm9yc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXggIT0gbnVsbCAmJiB2YWwgPiBtYXgpIGVsZW0uYWRkQ2xhc3MoXCJlcnJvcnNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5kYXRhLnJlcXVpcmVkICYmIHNjaGVtYS5kYXRhLnJlcXVpcmVkLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KS5oYXNDbGFzcyhcImNoZWNrYm94TGlzdFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IG9iai5kYXRhKFwidG90YWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5ICsgXCJfXCIgKyBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5oYXNDbGFzcyhcImNoZWNrZWRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNTZWxlY3Rpb24pICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KS5hZGRDbGFzcyhcImVycm9yc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSArIFwiX3NlbGVjdGVkXCIpLmNoaWxkcmVuKCkubGVuZ3RoID09IDApIGVsZW0uYWRkQ2xhc3MoXCJlcnJvcnNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZGF0YS5yZXF1aXJlZCAmJiBzY2hlbWEuZGF0YS5yZXF1aXJlZC5pbmNsdWRlcyhrZXkpICYmIHRoZVZhbHVlLmxlbmd0aCA9PSAwKSBlbGVtLmFkZENsYXNzKFwiZXJyb3JzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE5lc3RlZENvbnRhaW5lcih2aWV3OiBWaWV3Q29udGFpbmVyUmVmLCBuZXN0TGV2ZWw6IG51bWJlciwga2V5OiBzdHJpbmcsIHBhcmVudGFnZTogc3RyaW5nW10sIHByb3BlcnR5OiBhbnksIHBhcmVudD86IGFueSwgcGFyZW50VHlwZT86IGFueSkge1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gdmlldy5jcmVhdGVDb21wb25lbnQoT2JqZWN0Q29tcG9uZW50KTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZE5hbWUnLCB0aGlzLmdldExhYmVsKGtleSkpO1xuICAgICAgICBpZiAocGFyZW50YWdlICYmICFfLmlzRW1wdHkocGFyZW50YWdlKSkgY29tcG9uZW50UmVmLnNldElucHV0KCdwYXJlbnRhZ2UnLCBwYXJlbnRhZ2UpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2Jjb2xvcicsIHRoaXMuYkNvbG9yQXJyYXlbbmVzdExldmVsICUgdGhpcy5iQ29sb3JBcnJheS5sZW5ndGhdKTtcbiAgICAgICAgY29uc3QgZW1iZWRkZWRWaWV3ID0gY29tcG9uZW50UmVmLmluc3RhbmNlLndyYXBwZXJDb250ZW50cztcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdsYWJlbENvbG9yJywgdGhpcy5sQ29sb3JBcnJheVtuZXN0TGV2ZWwgJSB0aGlzLmxDb2xvckFycmF5Lmxlbmd0aF0pO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3Nob3dBZGQnLCBwYXJlbnRUeXBlID09PSAnYXJyYXknKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdvcGVuJywga2V5ID09PSAndGVybWluYXRvcnMnKTtcbiAgICAgICAgY29uc3QgbmV3UGFyZW50ID0gWy4uLnBhcmVudGFnZSwga2V5XTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZHMocHJvcGVydHksIGVtYmVkZGVkVmlldywgKytuZXN0TGV2ZWwsIG5ld1BhcmVudCwgcGFyZW50KTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkQm9vbGVhbkZpZWxkKHZpZXc6IFZpZXdDb250YWluZXJSZWYsIG5lc3RMZXZlbDogbnVtYmVyLCBrZXk6IHN0cmluZywgcGFyZW50YWdlOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gdmlldy5jcmVhdGVDb21wb25lbnQoQm9vbGVhblRvZ2dsZUlucHV0Q29tcG9uZW50KTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZE5hbWUnLCB0aGlzLmdldExhYmVsKGtleSkpO1xuICAgICAgICBpZiAocGFyZW50YWdlICYmICFfLmlzRW1wdHkocGFyZW50YWdlKSkgY29tcG9uZW50UmVmLnNldElucHV0KCdwYXJlbnRhZ2UnLCBwYXJlbnRhZ2UpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ZpZWxkVmFsdWUnLCBmYWxzZSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbGFiZWxDb2xvcicsIHRoaXMubENvbG9yQXJyYXlbbmVzdExldmVsXSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5maWVsZFZhbHVlQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCb3hDaGFuZ2VkKGV2ZW50LCBrZXksIGNvbXBvbmVudFJlZik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRUZXh0RmllbGQodmlldzogVmlld0NvbnRhaW5lclJlZiwgbmVzdExldmVsOiBudW1iZXIsIGtleTogc3RyaW5nLCBwYXJlbnRhZ2U6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBjb21wb25lbnRSZWYgPSB2aWV3LmNyZWF0ZUNvbXBvbmVudChTdHJpbmdJbnB1dENvbXBvbmVudCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZmllbGROYW1lJywgdGhpcy5nZXRMYWJlbChrZXkpKTtcbiAgICAgICAgaWYgKHBhcmVudGFnZSAmJiAhXy5pc0VtcHR5KHBhcmVudGFnZSkpIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgncGFyZW50YWdlJywgcGFyZW50YWdlKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZFZhbHVlJywgJycpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BsYWNlaG9sZGVyJywgYGVudGVyIGEgdmFsdWUgZm9yICR7a2V5fWApO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2xhYmVsQ29sb3InLCB0aGlzLmxDb2xvckFycmF5W25lc3RMZXZlbF0pO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGROdW1lcmljRmllbGQodmlldzogVmlld0NvbnRhaW5lclJlZiwgbmVzdExldmVsOiBudW1iZXIsIGtleTogc3RyaW5nLCBwcm9wZXJ0eTogYW55LCBwYXJlbnRhZ2U6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBwbGFjZWhvbGRlciA9IFwiZW50ZXIgYSBudW1lcmljIHZhbHVlXCI7XG4gICAgICAgIGlmIChwcm9wZXJ0eS5taW5pbXVtICE9IG51bGwgJiYgcHJvcGVydHkubWF4aW11bSAhPSBudWxsKSBwbGFjZWhvbGRlciA9IFwibnVtZXJpYyB2YWx1ZSBiZXR3ZWVuIFwiICsgcHJvcGVydHkubWluaW11bSArIFwiLVwiICsgcHJvcGVydHkubWF4aW11bTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkubWluaW11bSAhPSBudWxsKSBwbGFjZWhvbGRlciA9IFwibnVtYmVyIGdyZWF0IHRoYW4gXCIgKyBwcm9wZXJ0eS5taW5pbXVtO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5Lm1heGltdW0gIT0gbnVsbCkgcGxhY2Vob2xkZXIgPSBcIm51bWJlciBsZXNzIHRoYW4gXCIgKyBwcm9wZXJ0eS5tYXhpbXVtO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb21wb25lbnRSZWYgPSB2aWV3LmNyZWF0ZUNvbXBvbmVudChOdW1iZXJJbnB1dENvbXBvbmVudCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZmllbGROYW1lJywgdGhpcy5nZXRMYWJlbChrZXkpKTtcbiAgICAgICAgaWYgKHBhcmVudGFnZSAmJiAhXy5pc0VtcHR5KHBhcmVudGFnZSkpIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgncGFyZW50YWdlJywgcGFyZW50YWdlKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZFZhbHVlJywgdW5kZWZpbmVkKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdwbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdsYWJlbENvbG9yJywgdGhpcy5sQ29sb3JBcnJheVtuZXN0TGV2ZWxdKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkU2VsZWN0RmllbGQodmlldzogVmlld0NvbnRhaW5lclJlZiwgbmVzdExldmVsOiBudW1iZXIsIGtleTogc3RyaW5nLCBsaXN0OiBzdHJpbmdbXSwgcGFyZW50YWdlOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB2YWwgPSBsaXN0Py5sZW5ndGggPiAwID8gbGlzdFswXSA6ICcnO1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gdmlldy5jcmVhdGVDb21wb25lbnQoU2VsZWN0b3JJbnB1dENvbXBvbmVudCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZmllbGROYW1lJywgdGhpcy5nZXRMYWJlbChrZXkpKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdwbGFjZWhvbGRlcicsIGBzZWxlY3QgJHtrZXl9YCk7XG4gICAgICAgIGlmIChwYXJlbnRhZ2UgJiYgIV8uaXNFbXB0eShwYXJlbnRhZ2UpKSBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BhcmVudGFnZScsIHBhcmVudGFnZSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgndmFsdWVMaXN0JywgbGlzdCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbGFiZWxDb2xvcicsIHRoaXMubENvbG9yQXJyYXlbbmVzdExldmVsXSk7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZENoZWNrQm94TGlzdEZpZWxkKHZpZXc6IFZpZXdDb250YWluZXJSZWYsIG5lc3RMZXZlbDogbnVtYmVyLCBrZXk6IHN0cmluZywgbGlzdDogc3RyaW5nW10sIHBhcmVudGFnZTogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudFJlZiA9IHZpZXcuY3JlYXRlQ29tcG9uZW50KENoZWNrYm94TGlzdElucHV0Q29tcG9uZW50KTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZE5hbWUnLCB0aGlzLmdldExhYmVsKGtleSkpO1xuICAgICAgICBpZiAocGFyZW50YWdlICYmICFfLmlzRW1wdHkocGFyZW50YWdlKSkgY29tcG9uZW50UmVmLnNldElucHV0KCdwYXJlbnRhZ2UnLCBwYXJlbnRhZ2UpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ZpZWxkVmFsdWUnLCBbXSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgndmFsdWVMaXN0JywgbGlzdCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgncGxhY2Vob2xkZXInLCBgc2VsZWN0IGEgdmFsdWVgKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdsYWJlbENvbG9yJywgdGhpcy5sQ29sb3JBcnJheVtuZXN0TGV2ZWxdKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBjaGVja0JveENoYW5nZWQoZXZlbnQsIGtleSwgY29tcG9uZW50UmVmKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgocmVmOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdmb3J3YXJkQWRkcmVzcycgJiYgcmVmLmtleSA9PT0gJ2FsbG93ZWRBZGRyZXNzZXMnKSB7XG4gICAgICAgICAgICAgICAgcmVmLmNvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmhpZGRlbiA9ICFldmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdmb3J3YXJkUG9ydCcgJiYgcmVmLmtleSA9PT0gJ2FsbG93ZWRQb3J0UmFuZ2VzJykge1xuICAgICAgICAgICAgICAgIHJlZi5jb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudC5oaWRkZW4gPSAhZXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnZm9yd2FyZFByb3RvY29sJyAmJiByZWYua2V5ID09PSAnYWxsb3dlZFByb3RvY29scycpIHtcbiAgICAgICAgICAgICAgICByZWYuY29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gIWV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkVGV4dExpc3RGaWVsZCh2aWV3OiBWaWV3Q29udGFpbmVyUmVmLCBuZXN0TGV2ZWw6IG51bWJlciwga2V5OiBzdHJpbmcsIHBhcmVudGFnZTogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudFJlZiA9IHZpZXcuY3JlYXRlQ29tcG9uZW50KFRleHRMaXN0SW5wdXRDb21wb25lbnQpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ZpZWxkTmFtZScsIHRoaXMuZ2V0TGFiZWwoa2V5KSk7XG4gICAgICAgIGlmIChwYXJlbnRhZ2UgJiYgIV8uaXNFbXB0eShwYXJlbnRhZ2UpKSBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BhcmVudGFnZScsIHBhcmVudGFnZSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZmllbGRWYWx1ZScsIFtdKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdwbGFjZWhvbGRlcicsIGBlbnRlciB2YWx1ZXMgc2VwYXJhdGVkIHdpdGggYSBjb21tYWApO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2xhYmVsQ29sb3InLCB0aGlzLmxDb2xvckFycmF5W25lc3RMZXZlbF0pO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRQb3J0UmFuZ2VzKHZpZXc6IFZpZXdDb250YWluZXJSZWYsIG5lc3RMZXZlbDogbnVtYmVyLCBwYXJlbnRhZ2U6IHN0cmluZ1tdLCBwcm9wZXJ0aWVzOiBQcm90b2NvbEFkZHJlc3NQb3J0KSB7XG4gICAgICAgIGxldCBjb21wb25lbnRSZWYgPSB2aWV3LmNyZWF0ZUNvbXBvbmVudChQb3J0UmFuZ2VzQ29tcG9uZW50KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogJ3BvcnRSYW5nZXMnLFxuICAgICAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnRSZWZcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRm9yd2FyZGluZ0NvbmZpZyh2aWV3OiBWaWV3Q29udGFpbmVyUmVmLCBuZXN0TGV2ZWw6IG51bWJlciwgcGFyZW50YWdlOiBzdHJpbmdbXSwgcHJvcGVydGllczogUHJvdG9jb2xBZGRyZXNzUG9ydCkge1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gdmlldy5jcmVhdGVDb21wb25lbnQoRm9yd2FyZGluZ0NvbmZpZ0NvbXBvbmVudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6ICdmb3J3YXJkaW5nY29uZmlnJyxcbiAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50UmVmLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkUHJvdG9jb2xBZGRyZXNzUG9ydCh2aWV3OiBWaWV3Q29udGFpbmVyUmVmLCBuZXN0TGV2ZWw6IG51bWJlciwgcGFyZW50YWdlOiBzdHJpbmdbXSwgcHJvcGVydGllczogUHJvdG9jb2xBZGRyZXNzUG9ydCkge1xuICAgICAgICBsZXQgbGFiZWxQcmVmaXggPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBwcm90b2NvbExpc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBzaG93UHJvdG9jb2wgPSBmYWxzZTtcbiAgICAgICAgbGV0IHNob3dBZGRyZXNzID0gZmFsc2U7XG4gICAgICAgIGxldCBzaG93SG9zdE5hbWUgPSBmYWxzZTtcbiAgICAgICAgbGV0IHNob3dQb3J0ID0gZmFsc2U7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLnByb3RvY29sKSB7XG4gICAgICAgICAgICBzaG93UHJvdG9jb2wgPSB0cnVlO1xuICAgICAgICAgICAgcHJvdG9jb2xMaXN0ID0gcHJvcGVydGllcy5wcm90b2NvbD8uZW51bT8ubWFwKHAgPT4gcC50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnByb3RvY29sPy5rZXk/LnN0YXJ0c1dpdGgoJ2ZvcndhcmQnKSkgbGFiZWxQcmVmaXggPSAnRm9yd2FyZCAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmFkZHJlc3MpIHtcbiAgICAgICAgICAgIHNob3dBZGRyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmFkZHJlc3M/LmtleT8uc3RhcnRzV2l0aCgnZm9yd2FyZCcpKSBsYWJlbFByZWZpeCA9ICdGb3J3YXJkICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BlcnRpZXMuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgIHNob3dIb3N0TmFtZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvcGVydGllcy5ob3N0bmFtZT8ua2V5Py5zdGFydHNXaXRoKCdmb3J3YXJkJykpIGxhYmVsUHJlZml4ID0gJ0ZvcndhcmQgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydGllcy5wb3J0KSB7XG4gICAgICAgICAgICBzaG93UG9ydCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvcGVydGllcy5wb3J0Py5rZXk/LnN0YXJ0c1dpdGgoJ2ZvcndhcmQnKSkgbGFiZWxQcmVmaXggPSAnRm9yd2FyZCAnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb21wb25lbnRSZWYgPSB2aWV3LmNyZWF0ZUNvbXBvbmVudChQcm90b2NvbEFkZHJlc3NQb3J0SW5wdXRDb21wb25lbnQpO1xuICAgICAgICBpZiAocGFyZW50YWdlICYmICFfLmlzRW1wdHkocGFyZW50YWdlKSkgY29tcG9uZW50UmVmLnNldElucHV0KCdwYXJlbnRhZ2UnLCBwYXJlbnRhZ2UpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3Nob3dQcm90b2NvbCcsIHNob3dQcm90b2NvbCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnc2hvd0FkZHJlc3MnLCBzaG93QWRkcmVzcyk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnc2hvd0hvc3ROYW1lJywgc2hvd0hvc3ROYW1lKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdzaG93UG9ydCcsIHNob3dQb3J0KTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdwcm90b2NvbCcsICcnKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdhZGRyZXNzJywgJycpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2hvc3RuYW1lJywgJycpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BvcnQnLCAnJyk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgncHJvdG9jb2xMaXN0JywgcHJvdG9jb2xMaXN0KTtcbiAgICAgICAgaWYgKGxhYmVsUHJlZml4KSBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2xhYmVsUHJlZml4JywgbGFiZWxQcmVmaXgpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2xhYmVsQ29sb3InLCB0aGlzLmxDb2xvckFycmF5W25lc3RMZXZlbF0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiAncGFwJyxcbiAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50UmVmXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhYmVsKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBrZXkucmVwbGFjZSgvKFtBLVpdKS9nLCAobSwgcCkgPT4gJyAnICsgcCkudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEZpZWxkcyhzY2hlbWE6IGFueSwgdmlldzogVmlld0NvbnRhaW5lclJlZiwgbmVzdExldmVsOiBudW1iZXIsIHBhcmVudGFnZTogc3RyaW5nW10sIHBhcmVudD86IGFueSkge1xuICAgICAgICBjb25zdCB7c3BlY2lhbEZpZWxkcywgZXhjbHVkZWRQcm9wZXJ0aWVzfSA9IHRoaXMuYWRkU3BlY2lhbEZpZWxkcyhzY2hlbWEsIHZpZXcsIG5lc3RMZXZlbCwgcGFyZW50YWdlKTtcbiAgICAgICAgaWYgKHNwZWNpYWxGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHBhcmVudGFnZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudD8uaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Lml0ZW1zID0gWy4uLnBhcmVudC5pdGVtcywgLi4uc3BlY2lhbEZpZWxkc107XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Lml0ZW1zID0gWy4uLnNwZWNpYWxGaWVsZHNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IFsuLi50aGlzLml0ZW1zLCAuLi5zcGVjaWFsRmllbGRzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlZFByb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSB8fCB0aGlzLnByb3BlcnR5RXhjbHVkZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGl0ZW06IGFueSA9IHt9O1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5hZGRGaWVsZCh2aWV3LCBuZXN0TGV2ZWwsIGtleSwgc2NoZW1hLnByb3BlcnRpZXNba2V5XSwgcGFyZW50YWdlLCBpdGVtKTtcbiAgICAgICAgICAgIGl0ZW0ua2V5ID0ga2V5O1xuICAgICAgICAgICAgaXRlbS5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICBpdGVtLnR5cGUgPSBzY2hlbWEucHJvcGVydGllc1trZXldPy50eXBlO1xuICAgICAgICAgICAgdGhpcy5hZGRTdWJzY3JpYmVycyhpdGVtKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc2VydmVkUHJvcGVydGllcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNlcnZlZFByb3BlcnRpZXNNYXBba2V5XSA9IGl0ZW07XG4gICAgICAgICAgICB9IGlmIChwYXJlbnRhZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQ/Lml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pdGVtcyA9IFtpdGVtXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFN1YnNjcmliZXJzKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSAhPT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICBpdGVtPy5jb21wb25lbnQ/Lmluc3RhbmNlPy5pdGVtQWRkZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pdGVtRGF0YVZhbGlkKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgYEVycm9yIFZhbGlkYXRpbmcgQ29uZmlnYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgZW50ZXJlZCBjb25maWd1cmF0aW9uIGlzIGludmFsaWQuIFBsZWFzZSB1cGRhdGUgbWlzc2luZy9pbnZhbGlkIGZpZWxkcyBhbmQgdHJ5IGFnYWluLicsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YSA9IHRoaXMuYWRkSXRlbURhdGEoaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLmFkZGVkSXRlbXMgfHwgaXRlbS5hZGRlZEl0ZW1zLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYWRkZWRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLmFkZGVkSXRlbXMucHVzaChpdGVtRGF0YSk7XG4gICAgICAgICAgICAgICAgaXRlbS5jb21wb25lbnQuaW5zdGFuY2UuYWRkZWRJdGVtcyA9IGl0ZW0uYWRkZWRJdGVtcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICBpdGVtPy5jb21wb25lbnQ/Lmluc3RhbmNlPy5pdGVtUmVtb3ZlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW0uYWRkZWRJdGVtcyA9IGl0ZW0uY29tcG9uZW50Py5pbnN0YW5jZT8uYWRkZWRJdGVtcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaXRlbURhdGFWYWxpZChpdGVtOiBhbnkpIHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICBpdGVtLml0ZW1zLmZvckVhY2goKHN1Ykl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChzdWJJdGVtLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBzdWJJdGVtLmFkZGVkSXRlbXMuZm9yRWFjaCgoYWRkZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGRlZEl0ZW0/LmNvbXBvbmVudD8uaW5zdGFuY2U/LmlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWRkZWRJdGVtPy5jb21wb25lbnQ/Lmluc3RhbmNlPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Ykl0ZW0/LmNvbXBvbmVudD8uaW5zdGFuY2U/LmlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJJdGVtPy5jb21wb25lbnQ/Lmluc3RhbmNlPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgIH1cblxuICAgIGFkZEl0ZW1EYXRhKGl0ZW0pIHtcbiAgICAgICAgbGV0IGl0ZW1EYXRhID0ge307XG4gICAgICAgIGl0ZW0uaXRlbXMuZm9yRWFjaCgoc3ViSXRlbSkgPT4ge1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHN1Ykl0ZW0udHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIGlmIChzdWJJdGVtLmFkZGVkSXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbc3ViSXRlbS5rZXldID0gc3ViSXRlbS5hZGRlZEl0ZW1zO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhW3N1Ykl0ZW0ua2V5XSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Ykl0ZW0/LmNvbXBvbmVudD8uaW5zdGFuY2U/LmdldFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBzdWJJdGVtPy5jb21wb25lbnQ/Lmluc3RhbmNlPy5nZXRQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhW3Byb3Aua2V5XSA9IHByb3AudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdWJJdGVtPy5jb21wb25lbnQ/Lmluc3RhbmNlPy5zZXRQcm9wZXJ0aWVzKHt9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Ykl0ZW0/LmNvbXBvbmVudD8uaW5zdGFuY2U/LmZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbc3ViSXRlbS5rZXldID0gc3ViSXRlbS5jb21wb25lbnQuaW5zdGFuY2UuZmllbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3ViSXRlbS5jb21wb25lbnQuaW5zdGFuY2UuZmllbGRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Ykl0ZW0uaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbc3ViSXRlbS5rZXldID0gdGhpcy5hZGRJdGVtRGF0YShzdWJJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXRlbURhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGaWVsZFRvUGFyZW50SXRlbShpdGVtVG9BZGQsIHBhcmVudGFnZSkge1xuICAgICAgICBsZXQgcGFyZW50SXRlbTtcbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgICAgcGFyZW50YWdlLmZvckVhY2goKHBhcmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5rZXkgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJdGVtID0gaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gaXRlbS5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgICBwYXJlbnRJdGVtLml0ZW1zID0gaXRlbVRvQWRkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkU3BlY2lhbEZpZWxkcyhzY2hlbWE6IGFueSwgdmlldzogVmlld0NvbnRhaW5lclJlZiwgbmVzdExldmVsOiBudW1iZXIsIHBhcmVudGFnZTogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc3BlY2lhbEZpZWxkcyA9IFtdO1xuICAgICAgICBsZXQgYWRkcmVzcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGhvc3RuYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcG9ydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHByb3RvY29sID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgZm9yd2FyZFByb3RvY29sID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgZm9yd2FyZFBvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBmb3J3YXJkQWRkcmVzcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHBvcnRSYW5nZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBleGNsdWRlZFByb3BlcnRpZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBsZXQgZXhjbHVkZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBcInBvcnRcIikgcG9ydCA9IHNjaGVtYS5wcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiYWRkcmVzc1wiKSBhZGRyZXNzID0gc2NoZW1hLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJob3N0bmFtZVwiKSBob3N0bmFtZSA9IHNjaGVtYS5wcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwicHJvdG9jb2xcIikgcHJvdG9jb2wgPSBzY2hlbWEucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcImZvcndhcmRQcm90b2NvbFwiKSBmb3J3YXJkUHJvdG9jb2wgPSBzY2hlbWEucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcImZvcndhcmRQb3J0XCIpIGZvcndhcmRQb3J0ID0gc2NoZW1hLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJmb3J3YXJkQWRkcmVzc1wiKSBmb3J3YXJkQWRkcmVzcyA9IHNjaGVtYS5wcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwicG9ydFJhbmdlc1wiKSBwb3J0UmFuZ2VzID0gc2NoZW1hLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIGVsc2UgZXhjbHVkZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoZXhjbHVkZSkge1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGVkUHJvcGVydGllcy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChwcm90b2NvbCB8fCBhZGRyZXNzIHx8IGhvc3RuYW1lIHx8IHBvcnQpICYmICEoZm9yd2FyZFByb3RvY29sICYmIGZvcndhcmRBZGRyZXNzICYmIGZvcndhcmRQb3J0KSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllczogUHJvdG9jb2xBZGRyZXNzUG9ydCA9IHtwcm90b2NvbCwgYWRkcmVzcywgaG9zdG5hbWUsIHBvcnR9O1xuICAgICAgICAgICAgc3BlY2lhbEZpZWxkcy5wdXNoKHRoaXMuYnVpbGRQcm90b2NvbEFkZHJlc3NQb3J0KHZpZXcsIG5lc3RMZXZlbCwgcGFyZW50YWdlLCBwcm9wZXJ0aWVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcndhcmRQcm90b2NvbCAmJiBmb3J3YXJkQWRkcmVzcyAmJiBmb3J3YXJkUG9ydCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllczogUHJvdG9jb2xBZGRyZXNzUG9ydCA9IHtcbiAgICAgICAgICAgICAgICBwcm90b2NvbDogZm9yd2FyZFByb3RvY29sLFxuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGZvcndhcmRBZGRyZXNzLFxuICAgICAgICAgICAgICAgIGhvc3RuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcG9ydDogZm9yd2FyZFBvcnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzcGVjaWFsRmllbGRzLnB1c2godGhpcy5idWlsZEZvcndhcmRpbmdDb25maWcodmlldywgbmVzdExldmVsLCBwYXJlbnRhZ2UsIHByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgIGV4Y2x1ZGVkUHJvcGVydGllcyA9IFsuLi5leGNsdWRlZFByb3BlcnRpZXMsIC4uLlsnYWxsb3dlZEFkZHJlc3NlcycsICdhbGxvd2VkUG9ydFJhbmdlcycsICdhbGxvd2VkUHJvdG9jb2xzJ11dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3J0UmFuZ2VzKSB7XG4gICAgICAgICAgICBzcGVjaWFsRmllbGRzLnB1c2godGhpcy5idWlsZFBvcnRSYW5nZXModmlldywgbmVzdExldmVsLCBwYXJlbnRhZ2UsIHBvcnRSYW5nZXMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge3NwZWNpYWxGaWVsZHMsIGV4Y2x1ZGVkUHJvcGVydGllc307XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGaWVsZCh2aWV3OiBWaWV3Q29udGFpbmVyUmVmLCBuZXN0TGV2ZWw6IG51bWJlciwga2V5OiBzdHJpbmcsIHByb3BlcnR5OiBhbnksIHBhcmVudGFnZTogc3RyaW5nW10sIHBhcmVudD86IGFueSkge1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlKHByb3BlcnR5KTtcbiAgICAgICAgbGV0IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKHR5cGUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYgPSB0aGlzLmJ1aWxkTmVzdGVkQ29udGFpbmVyKHZpZXcsIG5lc3RMZXZlbCwga2V5LCBwYXJlbnRhZ2UsIHByb3BlcnR5LCBwYXJlbnQsIHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZiA9IHRoaXMuYnVpbGROdW1lcmljRmllbGQodmlldywgbmVzdExldmVsLCBrZXksIHByb3BlcnR5LCBwYXJlbnRhZ2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICBsZXQgaXRlbXM6IGFueSA9IHt9O1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmFsbE9mICYmIHByb3BlcnR5LmFsbE9mLmxlbmd0aCA+PSAyKSBpdGVtcyA9IHByb3BlcnR5LmFsbE9mWzFdO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5Lml0ZW1zKSBpdGVtcyA9IHByb3BlcnR5Lml0ZW1zO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLml0ZW1zKSBpdGVtcyA9IGl0ZW1zLml0ZW1zO1xuXG4gICAgICAgICAgICBpZiAoaXRlbXMudHlwZSAmJiBpdGVtcy50eXBlID09IFwib2JqZWN0XCIgJiYgaXRlbXMucHJvcGVydGllcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViSXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWJLZXkgaW4gaXRlbXMucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICBzdWJJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc3ViS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1zLnByb3BlcnRpZXNbc3ViS2V5XVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmID0gdGhpcy5idWlsZE5lc3RlZENvbnRhaW5lcih2aWV3LCBuZXN0TGV2ZWwsIGtleSwgcGFyZW50YWdlLCBpdGVtcywgcGFyZW50LCB0eXBlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpdGVtcy5lbnVtKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZiA9IHRoaXMuYnVpbGRDaGVja0JveExpc3RGaWVsZCh2aWV3LCBuZXN0TGV2ZWwsIGtleSwgaXRlbXMuZW51bSwgcGFyZW50YWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYgPSB0aGlzLmJ1aWxkVGV4dExpc3RGaWVsZCh2aWV3LCBuZXN0TGV2ZWwsIGtleSwgcGFyZW50YWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYgPSB0aGlzLmJ1aWxkQm9vbGVhbkZpZWxkKHZpZXcsIG5lc3RMZXZlbCwga2V5LCBwYXJlbnRhZ2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LmVudW0gJiYgcHJvcGVydHkuZW51bS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYgPSB0aGlzLmJ1aWxkU2VsZWN0RmllbGQodmlldywgbmVzdExldmVsLCBrZXksIHByb3BlcnR5LmVudW0sIHBhcmVudGFnZSk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZiA9IHRoaXMuYnVpbGRUZXh0RmllbGQodmlldywgbmVzdExldmVsLCBrZXksIHBhcmVudGFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEVycm9yKGVycm9yczogYW55LCBrZXk6IHN0cmluZywgbXNnOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGVycm9yc1trZXldKSBlcnJvcnNba2V5XSA9IGAke2Vycm9yc1trZXldfTsgJHttc2d9YDtcbiAgICAgICAgZWxzZSBlcnJvcnNba2V5XSA9IG1zZztcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG59XG4iXX0=
|
|
808
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvc2VydmljZXMvc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQWUsVUFBVSxFQUFtQixNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDcEYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDL0YsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sb0VBQW9FLENBQUM7QUFDL0csT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDL0YsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDckcsT0FBTyxDQUFhLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBQ3ZHLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHlFQUF5RSxDQUFDO0FBQ25ILE9BQU8sRUFDSCxpQ0FBaUMsRUFDcEMsTUFBTSx5RkFBeUYsQ0FBQztBQUNqRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUNsRyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwyRUFBMkUsQ0FBQztBQUNwSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBVWpFLE1BR2EsYUFBYTtJQXVCdEIsWUFBb0IsY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBdEJsRCxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsV0FBTSxH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R0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ2xGLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzVCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzdGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7d0JBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ3BFO2FBQ0o7aUJBQU07Z0JBQ0gsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUNoSCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ3RCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ25DLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxD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TUFBTTs7U0FFVCxhQUFhOzRGQUFiLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtDb21wb25lbnRSZWYsIEluamVjdGFibGUsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYmplY3RDb21wb25lbnR9IGZyb20gXCIuLi9mZWF0dXJlcy9keW5hbWljLXdpZGdldHMvb2JqZWN0L29iamVjdC5jb21wb25lbnRcIjtcbmltcG9ydCB7TnVtYmVySW5wdXRDb21wb25lbnR9IGZyb20gXCIuLi9mZWF0dXJlcy9keW5hbWljLXdpZGdldHMvbnVtYmVyL251bWJlci1pbnB1dC5jb21wb25lbnRcIjtcbmltcG9ydCB7Qm9vbGVhblRvZ2dsZUlucHV0Q29tcG9uZW50fSBmcm9tIFwiLi4vZmVhdHVyZXMvZHluYW1pYy13aWRnZXRzL2Jvb2xlYW4vYm9vbGVhbi10b2dnbGUtaW5wdXQuY29tcG9uZW50XCI7XG5pbXBvcnQge1N0cmluZ0lucHV0Q29tcG9uZW50fSBmcm9tIFwiLi4vZmVhdHVyZXMvZHluYW1pYy13aWRnZXRzL3N0cmluZy9zdHJpbmctaW5wdXQuY29tcG9uZW50XCI7XG5pbXBvcnQge1NlbGVjdG9ySW5wdXRDb21wb25lbnR9IGZyb20gXCIuLi9mZWF0dXJlcy9keW5hbWljLXdpZGdldHMvc2VsZWN0b3Ivc2VsZWN0b3ItaW5wdXQuY29tcG9uZW50XCI7XG5pbXBvcnQgXywge2lzTnVtYmVyfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge1RleHRMaXN0SW5wdXRDb21wb25lbnR9IGZyb20gXCIuLi9mZWF0dXJlcy9keW5hbWljLXdpZGdldHMvdGV4dC1saXN0L3RleHQtbGlzdC1pbnB1dC5jb21wb25lbnRcIjtcbmltcG9ydCB7Q2hlY2tib3hMaXN0SW5wdXRDb21wb25lbnR9IGZyb20gXCIuLi9mZWF0dXJlcy9keW5hbWljLXdpZGdldHMvY2hlY2tib3gtbGlzdC9jaGVja2JveC1saXN0LWlucHV0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtcbiAgICBQcm90b2NvbEFkZHJlc3NQb3J0SW5wdXRDb21wb25lbnRcbn0gZnJvbSBcIi4uL2ZlYXR1cmVzL2R5bmFtaWMtd2lkZ2V0cy9wcm90b2NvbC1hZGRyZXNzLXBvcnQvcHJvdG9jb2wtYWRkcmVzcy1wb3J0LWlucHV0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtQb3J0UmFuZ2VzQ29tcG9uZW50fSBmcm9tIFwiLi4vZmVhdHVyZXMvZHluYW1pYy13aWRnZXRzL3BvcnQtcmFuZ2VzL3BvcnQtcmFuZ2VzLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtGb3J3YXJkaW5nQ29uZmlnQ29tcG9uZW50fSBmcm9tIFwiLi4vZmVhdHVyZXMvZHluYW1pYy13aWRnZXRzL2ZvcndhcmRpbmctY29uZmlnL2ZvcndhcmRpbmctY29uZmlnLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uL2ZlYXR1cmVzL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vZmVhdHVyZXMvbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuXG5leHBvcnQgdHlwZSBQcm90b2NvbEFkZHJlc3NQb3J0ID0ge1xuICAgIHByb3RvY29sOiBhbnk7XG4gICAgYWRkcmVzczogYW55O1xuICAgIGhvc3RuYW1lOiBhbnk7XG4gICAgcG9ydDogYW55O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNjaGVtYVNlcnZpY2Uge1xuICAgIGRhdGEgPSB7fTtcbiAgICBmb3JtSWQgPSBudWxsO1xuICAgIHZhbHVlID0ge307XG4gICAgY29kZVZpZXcgPSBudWxsO1xuICAgIHRpbWVvdXRJZCA9IG51bGw7XG4gICAgc3VnZ2VzdGluZyA9IG51bGw7XG4gICAgc3VnZ2VzdElkOiBhbnkgPSBudWxsO1xuICAgIHN1Z2dlc3RpbmdGaWVsZCA9IFwiXCI7XG4gICAgcHJvcGVydHlFeGNsdWRlcyA9IFtdO1xuICAgIHJlc2VydmVkUHJvcGVydGllcyA9IFtdO1xuICAgIHJlc2VydmVkUHJvcGVydGllc01hcDogYW55ID0ge1xuICAgICAgICBwcm90b2NvbEFkZHJlc3NQb3J0OiB1bmRlZmluZWQsXG4gICAgICAgIGZvcndhcmRQcm90b2NhbEFkZHJlc3NQb3J0OiB1bmRlZmluZWQsXG4gICAgICAgIGFsbG93ZWRBZGRyZXNzZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9yd2FyZEFkZHJlc3M6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgcmVxdWlyZWRQcm9wZXJ0aWVzOiBhbnlbXSA9IFsnYWxsb3dlZEFkZHJlc3NlcycsICdhbGxvd2VkUHJvdG9jb2xzJywgJ2FsbG93ZWRQb3J0cyddO1xuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGl0ZW1zOiBhbnlbXSA9IFtdO1xuICAgIHByaXZhdGUgYkNvbG9yQXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBsQ29sb3JBcnJheTogc3RyaW5nW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgZ2V0VHlwZShwcm9wZXJ0eTogYW55KSB7XG4gICAgICAgIGlmIChwcm9wZXJ0eS50eXBlID09IFwiYm9vbGVhblwiKSByZXR1cm4gcHJvcGVydHkudHlwZTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkuZW51bSAhPSBudWxsKSByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS50eXBlKSByZXR1cm4gcHJvcGVydHkudHlwZTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmFsbE9mICYmIHByb3BlcnR5LmFsbE9mLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS5hbGxPZlswXS50eXBlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJTY2hlbWEoc2NoZW1hLCBkeW5hbWljRm9ybSwgbENvbG9yQXJyYXksIGJDb2xvckFycmF5LCBmb3JtRGF0YSkge1xuICAgICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLnJlbmRlcihzY2hlbWEsIGR5bmFtaWNGb3JtLCBsQ29sb3JBcnJheSwgYkNvbG9yQXJyYXkpO1xuICAgICAgICAgICAgZm9yIChsZXQgb2JqIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjUmVmID0gb2JqLmNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBpZiAoY1JlZj8uaW5zdGFuY2UudmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcE5hbWU6IHN0cmluZ1tdICA9IGNSZWYuaW5zdGFuY2UucGFyZW50YWdlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50S2V5O1xuICAgICAgICAgICAgICAgICAgICBpZihwTmFtZSkgcGFyZW50S2V5ID0gcE5hbWUuam9pbignLicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50S2V5ICYmICFmb3JtRGF0YVtwYXJlbnRLZXldKSBmb3JtRGF0YVtwYXJlbnRLZXldID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zO1xuICAgIH1cblxuICAgIHJlbmRlcihzY2hlbWE6IGFueSwgdmlldzogVmlld0NvbnRhaW5lclJlZiwgbENvbG9yQXJyYXk6IHN0cmluZ1tdLCBiQ29sb3JBcnJheTogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmJDb2xvckFycmF5ID0gYkNvbG9yQXJyYXk7XG4gICAgICAgIHRoaXMubENvbG9yQXJyYXkgPSBsQ29sb3JBcnJheTtcbiAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBuZXN0TGV2ZWwgPSAwO1xuICAgICAgICAgICAgdGhpcy5hZGRGaWVsZHMoc2NoZW1hLCB2aWV3LCBuZXN0TGV2ZWwsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtc1RvQWRkID0gW107XG4gICAgICAgIGlmICh0aGlzLnJlc2VydmVkUHJvcGVydGllc01hcC5wcm90b2NvbEFkZHJlc3NQb3J0KSB7XG4gICAgICAgICAgICBpdGVtc1RvQWRkLnB1c2godGhpcy5yZXNlcnZlZFByb3BlcnRpZXNNYXAucHJvdG9jb2xBZGRyZXNzUG9ydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzZXJ2ZWRQcm9wZXJ0aWVzTWFwLmFsbG93ZWRBZGRyZXNzZXMgJiYgdGhpcy5yZXNlcnZlZFByb3BlcnRpZXNNYXAuZm9yd2FyZEFkZHJlc3MpIHtcbiAgICAgICAgICAgIGl0ZW1zVG9BZGQucHVzaCh0aGlzLnJlc2VydmVkUHJvcGVydGllc01hcC5mb3J3YXJkQWRkcmVzcyk7XG4gICAgICAgICAgICBpdGVtc1RvQWRkLnB1c2godGhpcy5yZXNlcnZlZFByb3BlcnRpZXNNYXAuYWxsb3dlZEFkZHJlc3Nlcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtcyA9IFsuLi5pdGVtc1RvQWRkLCAuLi50aGlzLml0ZW1zXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXM7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoc2NoZW1hOiBhbnksIGZvcm1EYXRhOiBhbnkpOiBhbnkge1xuICAgICAgICBsZXQgZXJyb3JzID0ge307XG4gICAgICAgIGVycm9ycyA9IHsuLi5lcnJvcnMsIC4uLnRoaXMudmFsaWRhdGVGaWVsZHMoc2NoZW1hLCBmb3JtRGF0YSl9O1xuICAgICAgICByZXR1cm4gZXJyb3JzXG4gICAgfVxuXG4gICAgdmFsaWRhdGVGaWVsZHMoc2NoZW1hLCBmb3JtRGF0YTogYW55LCBwYXJlbnRhZ2U/OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBsZXQgZXJyb3JzID0ge307XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBzY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICAgICAgZXJyb3JzID0gey4uLmVycm9ycywgLi4udGhpcy52YWxpZGF0ZUZpZWxkKGtleSwgc2NoZW1hLCBmb3JtRGF0YSwgc2NoZW1hLnByb3BlcnRpZXNba2V5XSwgcGFyZW50YWdlKX07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUZpZWxkKGtleSwgc2NoZW1hLCBmb3JtRGF0YSwgcHJvcGVydHksIHBhcmVudGFnZSk6IGFueSB7XG4gICAgICAgIGxldCBlcnJvcnMgPSB7fVxuICAgICAgICB2YXIgdHlwZSA9IHRoaXMuZ2V0VHlwZShwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKHR5cGUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgbGV0IG5ld1BhcmVudGFnZSA9IGtleTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRhZ2UpIG5ld1BhcmVudGFnZSA9IGAke3BhcmVudGFnZX0uJHtrZXl9YDtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzID0gey4uLmVycm9ycywgLi4udGhpcy52YWxpZGF0ZUZpZWxkcyhwcm9wZXJ0eSwgZm9ybURhdGEsIG5ld1BhcmVudGFnZSl9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRoZVZhbHVlOiBzdHJpbmcgPSBfLmdldChmb3JtRGF0YSwga2V5KVxuICAgICAgICAgICAgaWYgKHNjaGVtYS5yZXF1aXJlZCAmJiBzY2hlbWEucmVxdWlyZWQuaW5jbHVkZXMoa2V5KSAmJiB0aGVWYWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3JzLCBrZXksIGAke2tleX0gcmVxdWlyZWRgKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5yZXF1aXJlZCAmJiBzY2hlbWEucmVxdWlyZWQuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWluID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5taW5pbXVtKSBtaW4gPSBOdW1iZXIocHJvcGVydHkubWluaW11bSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5tYXhpbXVtKSBtYXggPSBOdW1iZXIocHJvcGVydHkubWF4aW11bSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZUludCh0aGVWYWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9ycywga2V5LCBgaW52YWxpZCBudW1iZXJgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBOdW1iZXIodGhlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiAhPSBudWxsICYmIHZhbCA8IG1pbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3JzLCBrZXksIGBtaW5pbXVtIHZhbHVlICR7bWlufSBleHBlY3RlZGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heCAhPSBudWxsICYmIHZhbCA+IG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3JzLCBrZXksIGBtYXhpbXVtIHZhbHVlICR7bWF4fSBleHBlY3RlZGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUoc2NoZW1hOiBhbnksIGtleTogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnksIHBhcmVudGFnZTogc3RyaW5nW10pIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJpbnRlZ2VyXCIpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkpLmFkZENsYXNzKFwib25cIik7XG4gICAgICAgICAgICAgICAgJChcIi5cIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkgKyBcIl9hcmVhXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleS5zcGxpdChcImZvcndhcmRcIikuam9pbihcIlwiKS50b0xvd2VyQ2FzZSgpKS5wcm9wKFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5LnNwbGl0KFwiZm9yd2FyZFwiKS5qb2luKFwiXCIpLnRvTG93ZXJDYXNlKCkpLnByb3AoJ25vZGVOYW1lJykgPT0gXCJJTlBVVFwiKSAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleS5zcGxpdChcImZvcndhcmRcIikuam9pbihcIlwiKS50b0xvd2VyQ2FzZSgpKS52YWwoXCJcIik7XG4gICAgICAgICAgICB9IGVsc2UgJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkpLnJlbW92ZUNsYXNzKFwib25cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PSBcImFycmF5XCIpIHtcbiAgICAgICAgICAgICAgICAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSArIFwiX3NlbGVjdGVkXCIpLmh0bWwoXCJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KS5oYXNDbGFzcyhcImNoZWNrYm94TGlzdFwiKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG90YWwgPSAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSkuZGF0YShcInRvdGFsXCIpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5ICsgXCJfXCIgKyBpKS5yZW1vdmVDbGFzcyhcImNoZWNrZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlW2ldID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gdmFsdWVbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChwcm9wICsgXCI6IFwiICsgdmFsdWVbaV1bcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR5cGVzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyAnc2NoZW1hXycgKyBrZXkgKyAnX0J1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gb2JqLmRhdGEoXCJpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxzID0gb2JqLmRhdGEoXCJ2YWx1ZXNcIikuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFscy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKFwiI1wiICsgaWQgKyBcIl9cIiArIHZhbHNbal0pLmF0dHIoJ3R5cGUnKSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goXCJudW1iZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMucHVzaChcInN0cmluZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gJCgnPGRpdiBjbGFzcz1cInRhZyBvYmpcIiBkYXRhLXR5cGVzPVwiJyArIHR5cGVzLnRvU3RyaW5nKCkgKyAnXCI+JyArIHZhbHVlcy50b1N0cmluZygpICsgJzwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGljayhzY2hlbWEucmVtb3ZlTWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkgKyBcIl9zZWxlY3RlZFwiKS5hcHBlbmQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkpLmhhc0NsYXNzKFwiY2hlY2tib3hMaXN0XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvdGFsID0gJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkpLmRhdGEoXCJ0b3RhbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5ICsgXCJfXCIgKyBpKS5kYXRhKFwidmFsdWVcIikgPT0gdmFsdWVbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5ICsgXCJfXCIgKyBpKS5hZGRDbGFzcyhcImNoZWNrZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gJCgnPGRpdiBjbGFzcz1cInRhZ1wiPicgKyB2YWx1ZVtpXSArICc8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsaWNrKHNjaGVtYS5yZW1vdmVNZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkgKyBcIl9zZWxlY3RlZFwiKS5hcHBlbmQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KS52YWwodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZShrZXk6IHN0cmluZywgcHJvcGVydHk6IGFueSwganNvbjogYW55LCBwYXJlbnRhZ2U6IHN0cmluZ1tdKSB7XG4gICAgICAgIGlmICh0aGlzLmdldFR5cGUocHJvcGVydHkpID09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAganNvbltrZXldID0gW107XG4gICAgICAgICAgICBpZiAoJChcIiNcIiArICgocGFyZW50YWdlICE9IG51bGwpID8gcGFyZW50YWdlICsgJ18nIDogJycpICsgXCJzY2hlbWFfXCIgKyBrZXkpLmhhc0NsYXNzKFwiY2hlY2tib3hMaXN0XCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KTtcbiAgICAgICAgICAgICAgICBsZXQgdG90YWwgPSBvYmouZGF0YShcInRvdGFsXCIpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5ICsgXCJfXCIgKyBpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaGFzQ2xhc3MoXCJjaGVja2VkXCIpKSBqc29uW2tleV0ucHVzaChpdGVtLmRhdGEoXCJ2YWx1ZVwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSArIFwiX3NlbGVjdGVkXCIpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbiAoaSwgZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJChlKS5oYXNDbGFzcyhcIm9ialwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1zID0gJChlKS5odG1sKCkuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0eXBlcyA9ICQoZSkuZGF0YShcInR5cGVzXCIpLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5mbyA9IGl0ZW1zW2ldLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3A6IGFueSA9IGluZm8uc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGluZm8uam9pbignOicpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IHR5cGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpbcHJvcF0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25ba2V5XS5wdXNoKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uW2tleV0ucHVzaCgkKGUpLmh0bWwoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldFR5cGUocHJvcGVydHkpID09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBqc29uW2tleV0gPSAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSkuaGFzQ2xhc3MoXCJvblwiKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldFR5cGUocHJvcGVydHkpID09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICBsZXQgbnVtVmFsdWU6IGFueSA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KS52YWwoKTtcbiAgICAgICAgICAgIGlmIChudW1WYWx1ZSAhPSBudWxsICYmIG51bVZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbnVtVmFsdWUgPSBudW1WYWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKG51bVZhbHVlID09IFwiXCIgfHwgaXNOYU4obnVtVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bVZhbHVlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ0aW1lb3V0XCIpID49IDApIG51bVZhbHVlID0gNTAwMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBudW1WYWx1ZSA9IE51bWJlcihudW1WYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAganNvbltrZXldID0gbnVtVmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBqc29uW2tleV0gPSAkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSkudmFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuXG4gICAgZ2V0TGlzdFZhbHVlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGxpc3RJdGVtczogYW55W10gPSBbXTtcbiAgICAgICAgJChcIiNcIiArIGlkICsgXCJfc2VsZWN0ZWRcIikuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7XG4gICAgICAgICAgICBpZiAoJChlKS5oYXNDbGFzcyhcIm9ialwiKSkge1xuICAgICAgICAgICAgICAgIGxldCBpdGVtcyA9ICQoZSkuaHRtbCgpLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5mbyA9IGl0ZW1zW2ldLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wID0gaW5mby5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGluZm8uam9pbignOicpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtwcm9wIGFzIHN0cmluZ10gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW3Byb3AgYXMgc3RyaW5nXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5wdXNoKG9iaik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5wdXNoKCQoZSkuaHRtbCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBsaXN0SXRlbXM7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVQcm9wZXJ0eShzY2hlbWE6IGFueSwga2V5OiBzdHJpbmcsIHByb3BlcnR5OiBhbnksIHBhcmVudGFnZTogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IHR5cGUgPSB0aGlzLmdldFR5cGUocHJvcGVydHkpO1xuICAgICAgICBpZiAodHlwZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBzdWJLZXkgaW4gcHJvcGVydHkucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQcm9wZXJ0eShzdWJLZXksIHByb3BlcnR5LnByb3BlcnRpZXNbc3ViS2V5XSwga2V5LCBbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZWxlbSA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSkgPyBwYXJlbnRhZ2UgKyBcIl9cIiA6IFwiXCIpICsgXCJzY2hlbWFfXCIgKyBrZXkpO1xuICAgICAgICAgICAgbGV0IHRoZVZhbHVlOiBhbnkgPSAnJztcbiAgICAgICAgICAgIGlmIChlbGVtLnZhbCgpICE9IG51bGwpIHRoZVZhbHVlID0gZWxlbS52YWwoKTtcbiAgICAgICAgICAgIGlmICh0eXBlID09IFwiaW50ZWdlclwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5yZXF1aXJlZCAmJiBzY2hlbWEucmVxdWlyZWQuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5taW5pbXVtKSBtaW4gPSBOdW1iZXIocHJvcGVydHkubWluaW11bSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5tYXhpbXVtKSBtYXggPSBOdW1iZXIocHJvcGVydHkubWF4aW11bSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJzZUludCh0aGVWYWx1ZSkpKSBlbGVtLmFkZENsYXNzKFwiZXJyb3JzXCIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBOdW1iZXIodGhlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbiAhPSBudWxsICYmIHZhbCA8IG1pbikgZWxlbS5hZGRDbGFzcyhcImVycm9yc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXggIT0gbnVsbCAmJiB2YWwgPiBtYXgpIGVsZW0uYWRkQ2xhc3MoXCJlcnJvcnNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5kYXRhLnJlcXVpcmVkICYmIHNjaGVtYS5kYXRhLnJlcXVpcmVkLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KS5oYXNDbGFzcyhcImNoZWNrYm94TGlzdFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IG9iai5kYXRhKFwidG90YWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSA9ICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5ICsgXCJfXCIgKyBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5oYXNDbGFzcyhcImNoZWNrZWRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNTZWxlY3Rpb24pICQoXCIjXCIgKyAoKHBhcmVudGFnZSAhPSBudWxsKSA/IHBhcmVudGFnZSArICdfJyA6ICcnKSArIFwic2NoZW1hX1wiICsga2V5KS5hZGRDbGFzcyhcImVycm9yc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKFwiI1wiICsgKChwYXJlbnRhZ2UgIT0gbnVsbCkgPyBwYXJlbnRhZ2UgKyAnXycgOiAnJykgKyBcInNjaGVtYV9cIiArIGtleSArIFwiX3NlbGVjdGVkXCIpLmNoaWxkcmVuKCkubGVuZ3RoID09IDApIGVsZW0uYWRkQ2xhc3MoXCJlcnJvcnNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZGF0YS5yZXF1aXJlZCAmJiBzY2hlbWEuZGF0YS5yZXF1aXJlZC5pbmNsdWRlcyhrZXkpICYmIHRoZVZhbHVlLmxlbmd0aCA9PSAwKSBlbGVtLmFkZENsYXNzKFwiZXJyb3JzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE5lc3RlZENvbnRhaW5lcih2aWV3OiBWaWV3Q29udGFpbmVyUmVmLCBuZXN0TGV2ZWw6IG51bWJlciwga2V5OiBzdHJpbmcsIHBhcmVudGFnZTogc3RyaW5nW10sIHByb3BlcnR5OiBhbnksIHBhcmVudD86IGFueSwgcGFyZW50VHlwZT86IGFueSkge1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gdmlldy5jcmVhdGVDb21wb25lbnQoT2JqZWN0Q29tcG9uZW50KTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZE5hbWUnLCB0aGlzLmdldExhYmVsKGtleSkpO1xuICAgICAgICBpZiAocGFyZW50YWdlICYmICFfLmlzRW1wdHkocGFyZW50YWdlKSkgY29tcG9uZW50UmVmLnNldElucHV0KCdwYXJlbnRhZ2UnLCBwYXJlbnRhZ2UpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2Jjb2xvcicsIHRoaXMuYkNvbG9yQXJyYXlbbmVzdExldmVsICUgdGhpcy5iQ29sb3JBcnJheS5sZW5ndGhdKTtcbiAgICAgICAgY29uc3QgZW1iZWRkZWRWaWV3ID0gY29tcG9uZW50UmVmLmluc3RhbmNlLndyYXBwZXJDb250ZW50cztcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdsYWJlbENvbG9yJywgdGhpcy5sQ29sb3JBcnJheVtuZXN0TGV2ZWwgJSB0aGlzLmxDb2xvckFycmF5Lmxlbmd0aF0pO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3Nob3dBZGQnLCBwYXJlbnRUeXBlID09PSAnYXJyYXknKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdvcGVuJywga2V5ID09PSAndGVybWluYXRvcnMnKTtcbiAgICAgICAgY29uc3QgbmV3UGFyZW50ID0gWy4uLnBhcmVudGFnZSwga2V5XTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZHMocHJvcGVydHksIGVtYmVkZGVkVmlldywgKytuZXN0TGV2ZWwsIG5ld1BhcmVudCwgcGFyZW50KTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkQm9vbGVhbkZpZWxkKHZpZXc6IFZpZXdDb250YWluZXJSZWYsIG5lc3RMZXZlbDogbnVtYmVyLCBrZXk6IHN0cmluZywgcGFyZW50YWdlOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gdmlldy5jcmVhdGVDb21wb25lbnQoQm9vbGVhblRvZ2dsZUlucHV0Q29tcG9uZW50KTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZE5hbWUnLCB0aGlzLmdldExhYmVsKGtleSkpO1xuICAgICAgICBpZiAocGFyZW50YWdlICYmICFfLmlzRW1wdHkocGFyZW50YWdlKSkgY29tcG9uZW50UmVmLnNldElucHV0KCdwYXJlbnRhZ2UnLCBwYXJlbnRhZ2UpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ZpZWxkVmFsdWUnLCBmYWxzZSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbGFiZWxDb2xvcicsIHRoaXMubENvbG9yQXJyYXlbbmVzdExldmVsXSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5maWVsZFZhbHVlQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCb3hDaGFuZ2VkKGV2ZW50LCBrZXksIGNvbXBvbmVudFJlZik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRUZXh0RmllbGQodmlldzogVmlld0NvbnRhaW5lclJlZiwgbmVzdExldmVsOiBudW1iZXIsIGtleTogc3RyaW5nLCBwYXJlbnRhZ2U6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBjb21wb25lbnRSZWYgPSB2aWV3LmNyZWF0ZUNvbXBvbmVudChTdHJpbmdJbnB1dENvbXBvbmVudCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZmllbGROYW1lJywgdGhpcy5nZXRMYWJlbChrZXkpKTtcbiAgICAgICAgaWYgKHBhcmVudGFnZSAmJiAhXy5pc0VtcHR5KHBhcmVudGFnZSkpIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgncGFyZW50YWdlJywgcGFyZW50YWdlKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZFZhbHVlJywgJycpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BsYWNlaG9sZGVyJywgYGVudGVyIGEgdmFsdWUgZm9yICR7a2V5fWApO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2xhYmVsQ29sb3InLCB0aGlzLmxDb2xvckFycmF5W25lc3RMZXZlbF0pO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGROdW1lcmljRmllbGQodmlldzogVmlld0NvbnRhaW5lclJlZiwgbmVzdExldmVsOiBudW1iZXIsIGtleTogc3RyaW5nLCBwcm9wZXJ0eTogYW55LCBwYXJlbnRhZ2U6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBwbGFjZWhvbGRlciA9IFwiZW50ZXIgYSBudW1lcmljIHZhbHVlXCI7XG4gICAgICAgIGlmIChwcm9wZXJ0eS5taW5pbXVtICE9IG51bGwgJiYgcHJvcGVydHkubWF4aW11bSAhPSBudWxsKSBwbGFjZWhvbGRlciA9IFwibnVtZXJpYyB2YWx1ZSBiZXR3ZWVuIFwiICsgcHJvcGVydHkubWluaW11bSArIFwiLVwiICsgcHJvcGVydHkubWF4aW11bTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkubWluaW11bSAhPSBudWxsKSBwbGFjZWhvbGRlciA9IFwibnVtYmVyIGdyZWF0IHRoYW4gXCIgKyBwcm9wZXJ0eS5taW5pbXVtO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5Lm1heGltdW0gIT0gbnVsbCkgcGxhY2Vob2xkZXIgPSBcIm51bWJlciBsZXNzIHRoYW4gXCIgKyBwcm9wZXJ0eS5tYXhpbXVtO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb21wb25lbnRSZWYgPSB2aWV3LmNyZWF0ZUNvbXBvbmVudChOdW1iZXJJbnB1dENvbXBvbmVudCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZmllbGROYW1lJywgdGhpcy5nZXRMYWJlbChrZXkpKTtcbiAgICAgICAgaWYgKHBhcmVudGFnZSAmJiAhXy5pc0VtcHR5KHBhcmVudGFnZSkpIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgncGFyZW50YWdlJywgcGFyZW50YWdlKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZFZhbHVlJywgdW5kZWZpbmVkKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdwbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdsYWJlbENvbG9yJywgdGhpcy5sQ29sb3JBcnJheVtuZXN0TGV2ZWxdKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkU2VsZWN0RmllbGQodmlldzogVmlld0NvbnRhaW5lclJlZiwgbmVzdExldmVsOiBudW1iZXIsIGtleTogc3RyaW5nLCBsaXN0OiBzdHJpbmdbXSwgcGFyZW50YWdlOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB2YWwgPSBsaXN0Py5sZW5ndGggPiAwID8gbGlzdFswXSA6ICcnO1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gdmlldy5jcmVhdGVDb21wb25lbnQoU2VsZWN0b3JJbnB1dENvbXBvbmVudCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZmllbGROYW1lJywgdGhpcy5nZXRMYWJlbChrZXkpKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdwbGFjZWhvbGRlcicsIGBzZWxlY3QgJHtrZXl9YCk7XG4gICAgICAgIGlmIChwYXJlbnRhZ2UgJiYgIV8uaXNFbXB0eShwYXJlbnRhZ2UpKSBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BhcmVudGFnZScsIHBhcmVudGFnZSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgndmFsdWVMaXN0JywgbGlzdCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbGFiZWxDb2xvcicsIHRoaXMubENvbG9yQXJyYXlbbmVzdExldmVsXSk7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZENoZWNrQm94TGlzdEZpZWxkKHZpZXc6IFZpZXdDb250YWluZXJSZWYsIG5lc3RMZXZlbDogbnVtYmVyLCBrZXk6IHN0cmluZywgbGlzdDogc3RyaW5nW10sIHBhcmVudGFnZTogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudFJlZiA9IHZpZXcuY3JlYXRlQ29tcG9uZW50KENoZWNrYm94TGlzdElucHV0Q29tcG9uZW50KTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdmaWVsZE5hbWUnLCB0aGlzLmdldExhYmVsKGtleSkpO1xuICAgICAgICBpZiAocGFyZW50YWdlICYmICFfLmlzRW1wdHkocGFyZW50YWdlKSkgY29tcG9uZW50UmVmLnNldElucHV0KCdwYXJlbnRhZ2UnLCBwYXJlbnRhZ2UpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ZpZWxkVmFsdWUnLCBbXSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgndmFsdWVMaXN0JywgbGlzdCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgncGxhY2Vob2xkZXInLCBgc2VsZWN0IGEgdmFsdWVgKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdsYWJlbENvbG9yJywgdGhpcy5sQ29sb3JBcnJheVtuZXN0TGV2ZWxdKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBjaGVja0JveENoYW5nZWQoZXZlbnQsIGtleSwgY29tcG9uZW50UmVmKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgocmVmOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdmb3J3YXJkQWRkcmVzcycgJiYgcmVmLmtleSA9PT0gJ2FsbG93ZWRBZGRyZXNzZXMnKSB7XG4gICAgICAgICAgICAgICAgcmVmLmNvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmhpZGRlbiA9ICFldmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdmb3J3YXJkUG9ydCcgJiYgcmVmLmtleSA9PT0gJ2FsbG93ZWRQb3J0UmFuZ2VzJykge1xuICAgICAgICAgICAgICAgIHJlZi5jb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudC5oaWRkZW4gPSAhZXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnZm9yd2FyZFByb3RvY29sJyAmJiByZWYua2V5ID09PSAnYWxsb3dlZFByb3RvY29scycpIHtcbiAgICAgICAgICAgICAgICByZWYuY29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gIWV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkVGV4dExpc3RGaWVsZCh2aWV3OiBWaWV3Q29udGFpbmVyUmVmLCBuZXN0TGV2ZWw6IG51bWJlciwga2V5OiBzdHJpbmcsIHBhcmVudGFnZTogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudFJlZiA9IHZpZXcuY3JlYXRlQ29tcG9uZW50KFRleHRMaXN0SW5wdXRDb21wb25lbnQpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ZpZWxkTmFtZScsIHRoaXMuZ2V0TGFiZWwoa2V5KSk7XG4gICAgICAgIGlmIChwYXJlbnRhZ2UgJiYgIV8uaXNFbXB0eShwYXJlbnRhZ2UpKSBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BhcmVudGFnZScsIHBhcmVudGFnZSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnZmllbGRWYWx1ZScsIFtdKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdwbGFjZWhvbGRlcicsIGBlbnRlciB2YWx1ZXMgc2VwYXJhdGVkIHdpdGggYSBjb21tYWApO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2xhYmVsQ29sb3InLCB0aGlzLmxDb2xvckFycmF5W25lc3RMZXZlbF0pO1xuICAgICAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRQb3J0UmFuZ2VzKHZpZXc6IFZpZXdDb250YWluZXJSZWYsIG5lc3RMZXZlbDogbnVtYmVyLCBwYXJlbnRhZ2U6IHN0cmluZ1tdLCBwcm9wZXJ0aWVzOiBQcm90b2NvbEFkZHJlc3NQb3J0KSB7XG4gICAgICAgIGxldCBjb21wb25lbnRSZWYgPSB2aWV3LmNyZWF0ZUNvbXBvbmVudChQb3J0UmFuZ2VzQ29tcG9uZW50KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogJ3BvcnRSYW5nZXMnLFxuICAgICAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnRSZWZcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRm9yd2FyZGluZ0NvbmZpZyh2aWV3OiBWaWV3Q29udGFpbmVyUmVmLCBuZXN0TGV2ZWw6IG51bWJlciwgcGFyZW50YWdlOiBzdHJpbmdbXSwgcHJvcGVydGllczogUHJvdG9jb2xBZGRyZXNzUG9ydCkge1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gdmlldy5jcmVhdGVDb21wb25lbnQoRm9yd2FyZGluZ0NvbmZpZ0NvbXBvbmVudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6ICdmb3J3YXJkaW5nY29uZmlnJyxcbiAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50UmVmLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkUHJvdG9jb2xBZGRyZXNzUG9ydCh2aWV3OiBWaWV3Q29udGFpbmVyUmVmLCBuZXN0TGV2ZWw6IG51bWJlciwgcGFyZW50YWdlOiBzdHJpbmdbXSwgcHJvcGVydGllczogUHJvdG9jb2xBZGRyZXNzUG9ydCkge1xuICAgICAgICBsZXQgbGFiZWxQcmVmaXggPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBwcm90b2NvbExpc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBzaG93UHJvdG9jb2wgPSBmYWxzZTtcbiAgICAgICAgbGV0IHNob3dBZGRyZXNzID0gZmFsc2U7XG4gICAgICAgIGxldCBzaG93SG9zdE5hbWUgPSBmYWxzZTtcbiAgICAgICAgbGV0IHNob3dQb3J0ID0gZmFsc2U7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLnByb3RvY29sKSB7XG4gICAgICAgICAgICBzaG93UHJvdG9jb2wgPSB0cnVlO1xuICAgICAgICAgICAgcHJvdG9jb2xMaXN0ID0gcHJvcGVydGllcy5wcm90b2NvbD8uZW51bT8ubWFwKHAgPT4gcC50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnByb3RvY29sPy5rZXk/LnN0YXJ0c1dpdGgoJ2ZvcndhcmQnKSkgbGFiZWxQcmVmaXggPSAnRm9yd2FyZCAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmFkZHJlc3MpIHtcbiAgICAgICAgICAgIHNob3dBZGRyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmFkZHJlc3M/LmtleT8uc3RhcnRzV2l0aCgnZm9yd2FyZCcpKSBsYWJlbFByZWZpeCA9ICdGb3J3YXJkICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BlcnRpZXMuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgIHNob3dIb3N0TmFtZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvcGVydGllcy5ob3N0bmFtZT8ua2V5Py5zdGFydHNXaXRoKCdmb3J3YXJkJykpIGxhYmVsUHJlZml4ID0gJ0ZvcndhcmQgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydGllcy5wb3J0KSB7XG4gICAgICAgICAgICBzaG93UG9ydCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvcGVydGllcy5wb3J0Py5rZXk/LnN0YXJ0c1dpdGgoJ2ZvcndhcmQnKSkgbGFiZWxQcmVmaXggPSAnRm9yd2FyZCAnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb21wb25lbnRSZWYgPSB2aWV3LmNyZWF0ZUNvbXBvbmVudChQcm90b2NvbEFkZHJlc3NQb3J0SW5wdXRDb21wb25lbnQpO1xuICAgICAgICBpZiAocGFyZW50YWdlICYmICFfLmlzRW1wdHkocGFyZW50YWdlKSkgY29tcG9uZW50UmVmLnNldElucHV0KCdwYXJlbnRhZ2UnLCBwYXJlbnRhZ2UpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3Nob3dQcm90b2NvbCcsIHNob3dQcm90b2NvbCk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnc2hvd0FkZHJlc3MnLCBzaG93QWRkcmVzcyk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgnc2hvd0hvc3ROYW1lJywgc2hvd0hvc3ROYW1lKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdzaG93UG9ydCcsIHNob3dQb3J0KTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdwcm90b2NvbCcsICcnKTtcbiAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdhZGRyZXNzJywgJycpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2hvc3RuYW1lJywgJycpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BvcnQnLCAnJyk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgncHJvdG9jb2xMaXN0JywgcHJvdG9jb2xMaXN0KTtcbiAgICAgICAgaWYgKGxhYmVsUHJlZml4KSBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2xhYmVsUHJlZml4JywgbGFiZWxQcmVmaXgpO1xuICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2xhYmVsQ29sb3InLCB0aGlzLmxDb2xvckFycmF5W25lc3RMZXZlbF0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiAncGFwJyxcbiAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50UmVmXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhYmVsKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBrZXkucmVwbGFjZSgvKFtBLVpdKS9nLCAobSwgcCkgPT4gJyAnICsgcCkudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEZpZWxkcyhzY2hlbWE6IGFueSwgdmlldzogVmlld0NvbnRhaW5lclJlZiwgbmVzdExldmVsOiBudW1iZXIsIHBhcmVudGFnZTogc3RyaW5nW10sIHBhcmVudD86IGFueSkge1xuICAgICAgICBjb25zdCB7c3BlY2lhbEZpZWxkcywgZXhjbHVkZWRQcm9wZXJ0aWVzfSA9IHRoaXMuYWRkU3BlY2lhbEZpZWxkcyhzY2hlbWEsIHZpZXcsIG5lc3RMZXZlbCwgcGFyZW50YWdlKTtcbiAgICAgICAgaWYgKHNwZWNpYWxGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHBhcmVudGFnZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudD8uaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Lml0ZW1zID0gWy4uLnBhcmVudC5pdGVtcywgLi4uc3BlY2lhbEZpZWxkc107XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Lml0ZW1zID0gWy4uLnNwZWNpYWxGaWVsZHNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IFsuLi50aGlzLml0ZW1zLCAuLi5zcGVjaWFsRmllbGRzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlZFByb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSB8fCB0aGlzLnByb3BlcnR5RXhjbHVkZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGl0ZW06IGFueSA9IHt9O1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5hZGRGaWVsZCh2aWV3LCBuZXN0TGV2ZWwsIGtleSwgc2NoZW1hLnByb3BlcnRpZXNba2V5XSwgcGFyZW50YWdlLCBpdGVtKTtcbiAgICAgICAgICAgIGl0ZW0ua2V5ID0ga2V5O1xuICAgICAgICAgICAgaXRlbS5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICBpdGVtLnR5cGUgPSBzY2hlbWEucHJvcGVydGllc1trZXldPy50eXBlO1xuICAgICAgICAgICAgdGhpcy5hZGRTdWJzY3JpYmVycyhpdGVtKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc2VydmVkUHJvcGVydGllcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNlcnZlZFByb3BlcnRpZXNNYXBba2V5XSA9IGl0ZW07XG4gICAgICAgICAgICB9IGlmIChwYXJlbnRhZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQ/Lml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pdGVtcyA9IFtpdGVtXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFN1YnNjcmliZXJzKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSAhPT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICBpdGVtPy5jb21wb25lbnQ/Lmluc3RhbmNlPy5pdGVtQWRkZWQ/LnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXRlbURhdGFWYWxpZChpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBFcnJvciBWYWxpZGF0aW5nIENvbmZpZ2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAnVGhlIGVudGVyZWQgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiBQbGVhc2UgdXBkYXRlIG1pc3NpbmcvaW52YWxpZCBmaWVsZHMgYW5kIHRyeSBhZ2Fpbi4nLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGEgPSB0aGlzLmFkZEl0ZW1EYXRhKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS5hZGRlZEl0ZW1zIHx8IGl0ZW0uYWRkZWRJdGVtcy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmFkZGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXRlbS5hZGRlZEl0ZW1zLnB1c2goaXRlbURhdGEpO1xuICAgICAgICAgICAgICAgIGl0ZW0uY29tcG9uZW50Lmluc3RhbmNlLmFkZGVkSXRlbXMgPSBpdGVtLmFkZGVkSXRlbXM7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgaXRlbT8uY29tcG9uZW50Py5pbnN0YW5jZT8uaXRlbVJlbW92ZWQ/LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5hZGRlZEl0ZW1zID0gaXRlbS5jb21wb25lbnQ/Lmluc3RhbmNlPy5hZGRlZEl0ZW1zO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpdGVtRGF0YVZhbGlkKGl0ZW06IGFueSkge1xuICAgICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgIGl0ZW0uaXRlbXMuZm9yRWFjaCgoc3ViSXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN1Ykl0ZW0udHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIHN1Ykl0ZW0uYWRkZWRJdGVtcy5mb3JFYWNoKChhZGRlZEl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGVkSXRlbT8uY29tcG9uZW50Py5pbnN0YW5jZT8uaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRlZEl0ZW0/LmNvbXBvbmVudD8uaW5zdGFuY2U/LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3ViSXRlbT8uY29tcG9uZW50Py5pbnN0YW5jZT8uaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Ykl0ZW0/LmNvbXBvbmVudD8uaW5zdGFuY2U/LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgfVxuXG4gICAgYWRkSXRlbURhdGEoaXRlbSkge1xuICAgICAgICBsZXQgaXRlbURhdGEgPSB7fTtcbiAgICAgICAgaXRlbS5pdGVtcy5mb3JFYWNoKChzdWJJdGVtKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoc3ViSXRlbS50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Ykl0ZW0uYWRkZWRJdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVtzdWJJdGVtLmtleV0gPSBzdWJJdGVtLmFkZGVkSXRlbXM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbc3ViSXRlbS5rZXldID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3ViSXRlbT8uY29tcG9uZW50Py5pbnN0YW5jZT8uZ2V0UHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IHN1Ykl0ZW0/LmNvbXBvbmVudD8uaW5zdGFuY2U/LmdldFByb3BlcnRpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbcHJvcC5rZXldID0gcHJvcC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN1Ykl0ZW0/LmNvbXBvbmVudD8uaW5zdGFuY2U/LnNldFByb3BlcnRpZXMoe30pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViSXRlbT8uY29tcG9uZW50Py5pbnN0YW5jZT8uZmllbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVtzdWJJdGVtLmtleV0gPSBzdWJJdGVtLmNvbXBvbmVudC5pbnN0YW5jZS5maWVsZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJJdGVtLmNvbXBvbmVudC5pbnN0YW5jZS5maWVsZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViSXRlbS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVtzdWJJdGVtLmtleV0gPSB0aGlzLmFkZEl0ZW1EYXRhKHN1Ykl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpdGVtRGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEZpZWxkVG9QYXJlbnRJdGVtKGl0ZW1Ub0FkZCwgcGFyZW50YWdlKSB7XG4gICAgICAgIGxldCBwYXJlbnRJdGVtO1xuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgICBwYXJlbnRhZ2UuZm9yRWFjaCgocGFyZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmtleSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEl0ZW0gPSBpdGVtO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBpdGVtLml0ZW1zO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmVudEl0ZW0uaXRlbXMgPSBpdGVtVG9BZGQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRTcGVjaWFsRmllbGRzKHNjaGVtYTogYW55LCB2aWV3OiBWaWV3Q29udGFpbmVyUmVmLCBuZXN0TGV2ZWw6IG51bWJlciwgcGFyZW50YWdlOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBzcGVjaWFsRmllbGRzID0gW107XG4gICAgICAgIGxldCBhZGRyZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgaG9zdG5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBwb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcHJvdG9jb2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBmb3J3YXJkUHJvdG9jb2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBmb3J3YXJkUG9ydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGZvcndhcmRBZGRyZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcG9ydFJhbmdlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGV4Y2x1ZGVkUHJvcGVydGllcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGxldCBleGNsdWRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IFwicG9ydFwiKSBwb3J0ID0gc2NoZW1hLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJhZGRyZXNzXCIpIGFkZHJlc3MgPSBzY2hlbWEucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcImhvc3RuYW1lXCIpIGhvc3RuYW1lID0gc2NoZW1hLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJwcm90b2NvbFwiKSBwcm90b2NvbCA9IHNjaGVtYS5wcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiZm9yd2FyZFByb3RvY29sXCIpIGZvcndhcmRQcm90b2NvbCA9IHNjaGVtYS5wcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IFwiZm9yd2FyZFBvcnRcIikgZm9yd2FyZFBvcnQgPSBzY2hlbWEucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBcImZvcndhcmRBZGRyZXNzXCIpIGZvcndhcmRBZGRyZXNzID0gc2NoZW1hLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJwb3J0UmFuZ2VzXCIpIHBvcnRSYW5nZXMgPSBzY2hlbWEucHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgZWxzZSBleGNsdWRlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChleGNsdWRlKSB7XG4gICAgICAgICAgICAgICAgZXhjbHVkZWRQcm9wZXJ0aWVzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKHByb3RvY29sIHx8IGFkZHJlc3MgfHwgaG9zdG5hbWUgfHwgcG9ydCkgJiYgIShmb3J3YXJkUHJvdG9jb2wgJiYgZm9yd2FyZEFkZHJlc3MgJiYgZm9yd2FyZFBvcnQpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm90b2NvbEFkZHJlc3NQb3J0ID0ge3Byb3RvY29sLCBhZGRyZXNzLCBob3N0bmFtZSwgcG9ydH07XG4gICAgICAgICAgICBzcGVjaWFsRmllbGRzLnB1c2godGhpcy5idWlsZFByb3RvY29sQWRkcmVzc1BvcnQodmlldywgbmVzdExldmVsLCBwYXJlbnRhZ2UsIHByb3BlcnRpZXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yd2FyZFByb3RvY29sICYmIGZvcndhcmRBZGRyZXNzICYmIGZvcndhcmRQb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm90b2NvbEFkZHJlc3NQb3J0ID0ge1xuICAgICAgICAgICAgICAgIHByb3RvY29sOiBmb3J3YXJkUHJvdG9jb2wsXG4gICAgICAgICAgICAgICAgYWRkcmVzczogZm9yd2FyZEFkZHJlc3MsXG4gICAgICAgICAgICAgICAgaG9zdG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwb3J0OiBmb3J3YXJkUG9ydFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNwZWNpYWxGaWVsZHMucHVzaCh0aGlzLmJ1aWxkRm9yd2FyZGluZ0NvbmZpZyh2aWV3LCBuZXN0TGV2ZWwsIHBhcmVudGFnZSwgcHJvcGVydGllcykpO1xuICAgICAgICAgICAgZXhjbHVkZWRQcm9wZXJ0aWVzID0gWy4uLmV4Y2x1ZGVkUHJvcGVydGllcywgLi4uWydhbGxvd2VkQWRkcmVzc2VzJywgJ2FsbG93ZWRQb3J0UmFuZ2VzJywgJ2FsbG93ZWRQcm90b2NvbHMnXV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcnRSYW5nZXMpIHtcbiAgICAgICAgICAgIHNwZWNpYWxGaWVsZHMucHVzaCh0aGlzLmJ1aWxkUG9ydFJhbmdlcyh2aWV3LCBuZXN0TGV2ZWwsIHBhcmVudGFnZSwgcG9ydFJhbmdlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7c3BlY2lhbEZpZWxkcywgZXhjbHVkZWRQcm9wZXJ0aWVzfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEZpZWxkKHZpZXc6IFZpZXdDb250YWluZXJSZWYsIG5lc3RMZXZlbDogbnVtYmVyLCBrZXk6IHN0cmluZywgcHJvcGVydHk6IGFueSwgcGFyZW50YWdlOiBzdHJpbmdbXSwgcGFyZW50PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUocHJvcGVydHkpO1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAodHlwZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZiA9IHRoaXMuYnVpbGROZXN0ZWRDb250YWluZXIodmlldywgbmVzdExldmVsLCBrZXksIHBhcmVudGFnZSwgcHJvcGVydHksIHBhcmVudCwgdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImludGVnZXJcIikge1xuICAgICAgICAgICAgY29tcG9uZW50UmVmID0gdGhpcy5idWlsZE51bWVyaWNGaWVsZCh2aWV3LCBuZXN0TGV2ZWwsIGtleSwgcHJvcGVydHksIHBhcmVudGFnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFycmF5XCIpIHtcbiAgICAgICAgICAgIGxldCBpdGVtczogYW55ID0ge307XG4gICAgICAgICAgICBpZiAocHJvcGVydHkuYWxsT2YgJiYgcHJvcGVydHkuYWxsT2YubGVuZ3RoID49IDIpIGl0ZW1zID0gcHJvcGVydHkuYWxsT2ZbMV07XG4gICAgICAgICAgICBpZiAocHJvcGVydHkuaXRlbXMpIGl0ZW1zID0gcHJvcGVydHkuaXRlbXM7XG4gICAgICAgICAgICBpZiAoaXRlbXMuaXRlbXMpIGl0ZW1zID0gaXRlbXMuaXRlbXM7XG5cbiAgICAgICAgICAgIGlmIChpdGVtcy50eXBlICYmIGl0ZW1zLnR5cGUgPT0gXCJvYmplY3RcIiAmJiBpdGVtcy5wcm9wZXJ0aWVzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHN1YktleSBpbiBpdGVtcy5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Ykl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBzdWJLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbXMucHJvcGVydGllc1tzdWJLZXldXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYgPSB0aGlzLmJ1aWxkTmVzdGVkQ29udGFpbmVyKHZpZXcsIG5lc3RMZXZlbCwga2V5LCBwYXJlbnRhZ2UsIGl0ZW1zLCBwYXJlbnQsIHR5cGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zLmVudW0pKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmID0gdGhpcy5idWlsZENoZWNrQm94TGlzdEZpZWxkKHZpZXcsIG5lc3RMZXZlbCwga2V5LCBpdGVtcy5lbnVtLCBwYXJlbnRhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZiA9IHRoaXMuYnVpbGRUZXh0TGlzdEZpZWxkKHZpZXcsIG5lc3RMZXZlbCwga2V5LCBwYXJlbnRhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZiA9IHRoaXMuYnVpbGRCb29sZWFuRmllbGQodmlldywgbmVzdExldmVsLCBrZXksIHBhcmVudGFnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkuZW51bSAmJiBwcm9wZXJ0eS5lbnVtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZiA9IHRoaXMuYnVpbGRTZWxlY3RGaWVsZCh2aWV3LCBuZXN0TGV2ZWwsIGtleSwgcHJvcGVydHkuZW51bSwgcGFyZW50YWdlKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29tcG9uZW50UmVmID0gdGhpcy5idWlsZFRleHRGaWVsZCh2aWV3LCBuZXN0TGV2ZWwsIGtleSwgcGFyZW50YWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRXJyb3IoZXJyb3JzOiBhbnksIGtleTogc3RyaW5nLCBtc2c6IHN0cmluZykge1xuICAgICAgICBpZiAoZXJyb3JzW2tleV0pIGVycm9yc1trZXldID0gYCR7ZXJyb3JzW2tleV19OyAke21zZ31gO1xuICAgICAgICBlbHNlIGVycm9yc1trZXldID0gbXNnO1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cbn1cbiJdfQ==
|
package/esm2022/lib/version.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export const VERSION = {
|
|
2
|
-
"version": "3.12.
|
|
2
|
+
"version": "3.12.6"
|
|
3
3
|
};
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUNuQixTQUFTLEVBQUUsUUFBUTtDQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSB7XG4gICAgXCJ2ZXJzaW9uXCI6IFwiMy4xMi42XCJcbn07XG4iXX0=
|