asp-lib 1.0.14 → 1.0.15
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/esm2022/lib/asp-lib.module.mjs +14 -8
- package/esm2022/lib/assign-roles/assign-roles.component.mjs +5 -4
- package/esm2022/lib/basic-item/basic-item.component.mjs +2 -2
- package/esm2022/lib/checkbox/checkbox.component.mjs +2 -2
- package/esm2022/lib/checkbox-field/checkbox-field.component.mjs +2 -2
- package/esm2022/lib/company-dropdown/company-dropdown.component.mjs +3 -3
- package/esm2022/lib/entity-admin/entity-admin.component.mjs +378 -0
- package/esm2022/lib/form/form.component.mjs +24 -6
- package/esm2022/lib/form-2/form-2.component.mjs +3 -5
- package/esm2022/lib/header/header.component.mjs +2 -2
- package/esm2022/lib/input/input.component.mjs +9 -3
- package/esm2022/lib/interfaces/interfaces.mjs +34 -1
- package/esm2022/lib/items-selector/items-selector.component.mjs +42 -22
- package/esm2022/lib/items-viewer/items-viewer.component.mjs +61 -33
- package/esm2022/lib/list/list.component.mjs +2 -2
- package/esm2022/lib/loader/loader.component.mjs +2 -2
- package/esm2022/lib/menu/menu.component.mjs +3 -3
- package/esm2022/lib/menu-admin/menu-admin.component.mjs +4 -3
- package/esm2022/lib/modules-admin/modules-admin.component.mjs +5 -5
- package/esm2022/lib/move-menu-option/move-menu-option.component.mjs +2 -2
- package/esm2022/lib/multi-option-dialog/multi-option-dialog.component.mjs +2 -2
- package/esm2022/lib/nested-items-selector/nested-items-selector.component.mjs +189 -0
- package/esm2022/lib/notifications/notifications.component.mjs +3 -3
- package/esm2022/lib/pipes/translate.pipe.mjs +118 -0
- package/esm2022/lib/radio-button/radio-button.component.mjs +2 -2
- package/esm2022/lib/radio-group/radio-group.component.mjs +4 -3
- package/esm2022/lib/recents-dropdown/recents-dropdown.component.mjs +3 -3
- package/esm2022/lib/resource-actions/resource-actions.component.mjs +4 -3
- package/esm2022/lib/role-card/role-card.component.mjs +4 -3
- package/esm2022/lib/role-info/role-info.component.mjs +4 -3
- package/esm2022/lib/security-admin/security-admin.component.mjs +48 -63
- package/esm2022/lib/select/select.component.mjs +4 -3
- package/esm2022/lib/services/security-admin.service.mjs +39 -54
- package/esm2022/lib/snackbar/snackbar.component.mjs +2 -2
- package/esm2022/lib/translate.pipe.mjs +16 -0
- package/esm2022/lib/tree/tree.component.mjs +2 -2
- package/esm2022/lib/user-dropdown/user-dropdown.component.mjs +3 -3
- package/esm2022/lib/utils/utils.mjs +15 -0
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/asp-lib.mjs +737 -312
- package/fesm2022/asp-lib.mjs.map +1 -1
- package/lib/asp-lib.module.d.ts +20 -18
- package/lib/entity-admin/entity-admin.component.d.ts +92 -0
- package/lib/form/form.component.d.ts +2 -0
- package/lib/input/input.component.d.ts +3 -1
- package/lib/interfaces/interfaces.d.ts +46 -27
- package/lib/items-selector/items-selector.component.d.ts +13 -6
- package/lib/items-viewer/items-viewer.component.d.ts +9 -2
- package/lib/modules-admin/modules-admin.component.d.ts +1 -1
- package/lib/nested-items-selector/nested-items-selector.component.d.ts +57 -0
- package/lib/pipes/translate.pipe.d.ts +11 -0
- package/lib/security-admin/security-admin.component.d.ts +5 -6
- package/lib/services/security-admin.service.d.ts +8 -18
- package/lib/translate.pipe.d.ts +7 -0
- package/lib/utils/utils.d.ts +3 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/src/lib/assets/theme.scss +115 -104
- package/esm2022/lib/users-admin/users-admin.component.mjs +0 -292
- package/lib/users-admin/users-admin.component.d.ts +0 -72
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
2
|
+
import { from, map, mergeMap, of, reduce, Subject, switchMap } from 'rxjs';
|
|
3
|
+
import { defaultSwitchMapper } from '../utils/utils';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "@angular/common/http";
|
|
5
6
|
const paramNames = {
|
|
@@ -23,27 +24,11 @@ export class SecurityAdminService {
|
|
|
23
24
|
this.selectedCustomerSubject = new Subject();
|
|
24
25
|
this.selectedRoleSubject = new Subject();
|
|
25
26
|
this.reloadSubject = new Subject();
|
|
26
|
-
this.usersByCustomerEndpoint = '';
|
|
27
|
-
this.assignResourceEndpoint = '';
|
|
28
|
-
this.getActionsEndpoint = '';
|
|
29
|
-
this.savePermissionsEndpoint = '';
|
|
30
|
-
this.listRolesEndpoint = '';
|
|
31
|
-
this.resourcesByRoleEndpoint = '';
|
|
32
|
-
this.rolesByUserEndpoint = '';
|
|
33
|
-
this.getMenuTreeEndpoint = '';
|
|
34
|
-
this.saveMenuOptionEndpoint = '';
|
|
35
|
-
this.deleteMenuOptionEndpoint = '';
|
|
36
|
-
this.assignUserRoleEndpoint = '';
|
|
37
|
-
this.rolesByCustomerEndpoint = '';
|
|
38
|
-
this.assignCustomerRoleEndpoint = '';
|
|
39
|
-
this.usersByRoleEndpoint = '';
|
|
40
|
-
this.customersByRoleEndpoint = '';
|
|
41
|
-
this.listUsersEndpoint = '';
|
|
42
|
-
this.assignRoleUsersEndpoint = '';
|
|
43
|
-
this.assignRoleCustomersEndpoint = '';
|
|
44
27
|
this.endpoints = {};
|
|
28
|
+
this.language = 'en';
|
|
45
29
|
this.theme = 'default';
|
|
46
30
|
this.msgLabel = { "User": "Usuario", "Customer": "Empresa", "Role": "Rol" };
|
|
31
|
+
this.blockCreationFor = new Set(["Customer"]);
|
|
47
32
|
this.reloadByEntity = {
|
|
48
33
|
"User": new Subject(),
|
|
49
34
|
"Customer": new Subject(),
|
|
@@ -56,74 +41,74 @@ export class SecurityAdminService {
|
|
|
56
41
|
subject.subscribe({ next: (item) => this.selectedItem = item });
|
|
57
42
|
}
|
|
58
43
|
}
|
|
44
|
+
setLanguage(language) {
|
|
45
|
+
this.language = language;
|
|
46
|
+
}
|
|
59
47
|
setSecurityEndpoints(endpoints) {
|
|
60
48
|
this.endpoints = endpoints;
|
|
61
49
|
}
|
|
62
50
|
getRoles() {
|
|
63
|
-
return this.http.get(this.endpoints.
|
|
51
|
+
return this.http.get(this.endpoints.listRoles?.url ?? '');
|
|
64
52
|
}
|
|
65
53
|
deleteMenuOption(option) {
|
|
66
|
-
return this.http.get(`${this.endpoints.
|
|
54
|
+
return this.http.get(`${this.endpoints.deleteMenuOption?.url ?? ''}?optionId=${option.id}`);
|
|
67
55
|
}
|
|
68
56
|
setTheme(theme) {
|
|
69
57
|
this.theme = Boolean(theme) ? theme : 'default';
|
|
70
58
|
}
|
|
71
59
|
getActions(roleId, resourceId) {
|
|
72
|
-
return this.http.get(`${this.endpoints.
|
|
60
|
+
return this.http.get(`${this.endpoints.actionsByRoleAndResource?.url ?? ''}?roleId=${roleId}&resourceId=${resourceId}`);
|
|
73
61
|
}
|
|
74
|
-
// setDeleteMenuOptionEndpoint(endpoint: string){
|
|
75
|
-
// this.deleteMenuOptionEndpoint = endpoint;
|
|
76
|
-
// }
|
|
77
62
|
getResourcesByRole(roleId) {
|
|
78
|
-
return this.http.get(`${this.endpoints.
|
|
63
|
+
return this.http.get(`${this.endpoints.resourcesByRole?.url ?? ''}?roledId=${roleId}`);
|
|
79
64
|
}
|
|
80
|
-
// setListUsersEndpoint(endpoint: string) {
|
|
81
|
-
// this.listUsersEndpoint = endpoint;
|
|
82
|
-
// }
|
|
83
65
|
setMenuOptionFormComponent(component) {
|
|
84
66
|
this.menuOptionFormComponent = component;
|
|
85
67
|
}
|
|
86
|
-
// setUsersByRoleEndpoint(endpoint: string) {
|
|
87
|
-
// this.usersByRoleEndpoint = endpoint;
|
|
88
|
-
// }
|
|
89
|
-
// setCustomersByRoleEndpoint(endpoint: string) {
|
|
90
|
-
// this.customersByRoleEndpoint = endpoint;
|
|
91
|
-
// }
|
|
92
|
-
// setSaveMenuOptionEndpoint(endpoint: string) {
|
|
93
|
-
// this.saveMenuOptionEndpoint = endpoint;
|
|
94
|
-
// }
|
|
95
|
-
// setGetMenuTreeEndpoint(endpoint: string) { this.getMenuTreeEndpoint = endpoint }
|
|
96
|
-
// setAssignRoleUsersEndpoint(endpoint: string) { this.assignRoleUsersEndpoint = endpoint }
|
|
97
|
-
// setAssignRoleCustomersEndpoint(endpoint: string) {
|
|
98
|
-
// this.assignRoleCustomersEndpoint = endpoint;
|
|
99
|
-
// }
|
|
100
68
|
saveMenuOption(option) {
|
|
101
|
-
return this.http.post(this.endpoints.
|
|
69
|
+
return this.http.post(this.endpoints.saveMenuOption?.url ?? '', { ...option, id: option.id > -1 ? option.id : null });
|
|
102
70
|
}
|
|
103
71
|
// getUsers(page: number = 1, pageSize: number = 10) {
|
|
104
72
|
// return this.http.get(`this.listUsersEndpoint?page=${page}&pageSize=${pageSize}`);
|
|
105
73
|
// }
|
|
106
74
|
getAssignedRoles(id, type) {
|
|
107
|
-
return this.http.get(`${type === "User" ? (this.endpoints.
|
|
75
|
+
return this.http.get(`${type === "User" ? (this.endpoints.rolesByUser?.url ?? '') : (this.endpoints.rolesByCustomer ?? '')}?${paramNames[type]}=${id}`);
|
|
108
76
|
}
|
|
109
77
|
assignRoles(id, roles, type) {
|
|
110
|
-
return this.http.post(type === "User" ? (this.endpoints.
|
|
78
|
+
return this.http.post(type === "User" ? (this.endpoints.assignUserRole?.url ?? '') : (this.endpoints.assignCustomerRole?.url ?? ''), {
|
|
111
79
|
[paramNames[type]]: id,
|
|
112
80
|
roles
|
|
113
81
|
});
|
|
114
82
|
}
|
|
115
83
|
assignRoleUsers(roleId, users) {
|
|
116
|
-
return this.http.post(this.endpoints.
|
|
84
|
+
return this.http.post(this.endpoints.assignRoleUsers?.url ?? '', {
|
|
117
85
|
roleId,
|
|
118
86
|
users
|
|
119
87
|
});
|
|
120
88
|
}
|
|
121
89
|
assignRoleCustomers(roleId, customers) {
|
|
122
|
-
return this.http.post(this.endpoints.
|
|
90
|
+
return this.http.post(this.endpoints.assignRoleCustomers?.url ?? '', {
|
|
123
91
|
roleId,
|
|
124
92
|
customers
|
|
125
93
|
});
|
|
126
94
|
}
|
|
95
|
+
// assignUserCustomers(userId: number, customers: any[]) {
|
|
96
|
+
// return this.http.post(this.endpoints.assignUserCustomers?.url ?? '', {userId, customers})
|
|
97
|
+
// }
|
|
98
|
+
// assignUserAgencies(userId: number, agencies: any[]) {
|
|
99
|
+
// return this.http.post(this.endpoints.assignUserAgencies?.url ?? '', {userId, agencies})
|
|
100
|
+
// }
|
|
101
|
+
assignUserCustomerAndAgencies(userId, customers, agencies) {
|
|
102
|
+
return this.endpoints.assignUserCustomers?.onRequest({ userId, customers, agencies });
|
|
103
|
+
}
|
|
104
|
+
assignCustomerUsers(customerId, users) {
|
|
105
|
+
return this.endpoints.assignCustomerUsers?.onRequest({ customerId, users });
|
|
106
|
+
}
|
|
107
|
+
getUserRolesByCustomers(user) {
|
|
108
|
+
return this.http.get(`${this.endpoints.customersByUser?.url}${this.endpoints.customersByUser?.queryParams?.(user)}`).pipe(switchMap(this.endpoints.customersByUser?.responseMapping ?? defaultSwitchMapper), switchMap((response) => {
|
|
109
|
+
return from(Array.from(new Set(response.load))).pipe(mergeMap(customerId => this.http.get(`${this.endpoints.rolesByCustomer?.url}${this.endpoints.rolesByCustomer?.queryParams?.({ id: customerId })}`)), reduce((acc, curr) => acc.concat(curr), []), map(newLoad => ({ ...response, load: newLoad })));
|
|
110
|
+
}), switchMap((response2) => of({ ...response2, load: response2.load.map((response3) => response3.load).flat() })));
|
|
111
|
+
}
|
|
127
112
|
// setRolesByUserEndpoint(endpoint: string) {
|
|
128
113
|
// this.rolesByUserEndpoint = endpoint;
|
|
129
114
|
// }
|
|
@@ -167,19 +152,19 @@ export class SecurityAdminService {
|
|
|
167
152
|
return this.http.post(endpoint, updatedItem);
|
|
168
153
|
}
|
|
169
154
|
assignResource(roleId, resources) {
|
|
170
|
-
return this.http.post(this.endpoints.
|
|
155
|
+
return this.http.post(this.endpoints.assignResource?.url ?? '', { roleId, resources });
|
|
171
156
|
}
|
|
172
157
|
savePermissions(permissions) {
|
|
173
|
-
return this.http.post(this.endpoints.
|
|
158
|
+
return this.http.post(this.endpoints.savePermissions?.url ?? '', permissions);
|
|
174
159
|
}
|
|
175
160
|
getMenuTree() {
|
|
176
|
-
return this.http.get(this.endpoints.
|
|
161
|
+
return this.http.get(this.endpoints.getMenuTree?.url ?? '');
|
|
177
162
|
}
|
|
178
163
|
getAppModules() {
|
|
179
|
-
return this.http.get(this.endpoints.
|
|
164
|
+
return this.http.get(this.endpoints.listModules?.url ?? '');
|
|
180
165
|
}
|
|
181
166
|
saveModule(module) {
|
|
182
|
-
return this.http.post(this.endpoints.
|
|
167
|
+
return this.http.post(this.endpoints.createModule?.url ?? '', module);
|
|
183
168
|
}
|
|
184
169
|
reloadEntity(entityName) {
|
|
185
170
|
this.reloadSubject.next(entityName);
|
|
@@ -193,4 +178,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
193
178
|
providedIn: 'root'
|
|
194
179
|
}]
|
|
195
180
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktYWRtaW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzcC1saWIvc3JjL2xpYi9zZXJ2aWNlcy9zZWN1cml0eS1hZG1pbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBSTNDLE1BQU0sVUFBVSxHQUFHO0lBQ2xCLFFBQVEsRUFBRSxZQUFZO0lBQ3RCLElBQUksRUFBRSxRQUFRO0NBQ2QsQ0FBQTtBQUtELE1BQU0sT0FBTyxvQkFBb0I7SUF5Q2hDLElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDdkQsSUFBSSxjQUFjLEtBQUssT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUMvRCxJQUFJLFVBQVUsS0FBSyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRXZELElBQUksUUFBUTtRQUNYLE9BQU8sQ0FBQztZQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CO1lBQ2hDLFVBQVUsRUFBRSxJQUFJLENBQUMsdUJBQXVCO1lBQ3hDLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CO1NBQ2hDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFRCxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBbkRwQyx3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ3pDLDRCQUF1QixHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDN0Msd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUN6QyxrQkFBYSxHQUFHLElB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Q0FBQztJQUVELGFBQWE7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUF3QztRQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyQyxDQUFDOytHQW5PVyxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZwQixNQUFNOzs0RkFFTixvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNuYWNrYmFyU2VydmljZSB9IGZyb20gJy4vc25hY2tiYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlY3VyaXR5RW5kcG9pbnRzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcclxuXHJcbmNvbnN0IHBhcmFtTmFtZXMgPSB7XHJcblx0Q3VzdG9tZXI6IFwiY3VzdG9tZXJJZFwiLFxyXG5cdFVzZXI6IFwidXNlcklkXCJcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlBZG1pblNlcnZpY2Uge1xyXG5cclxuXHRzZWxlY3RlZFVzZXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cdHNlbGVjdGVkQ3VzdG9tZXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cdHNlbGVjdGVkUm9sZVN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblx0cmVsb2FkU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHR1c2Vyc0J5Q3VzdG9tZXJFbmRwb2ludDogc3RyaW5nID0gJyc7XHJcblx0YXNzaWduUmVzb3VyY2VFbmRwb2ludDogc3RyaW5nID0gJyc7XHJcblx0Z2V0QWN0aW9uc0VuZHBvaW50OiBzdHJpbmcgPSAnJztcclxuXHRzYXZlUGVybWlzc2lvbnNFbmRwb2ludDogc3RyaW5nID0gJyc7XHJcblx0bGlzdFJvbGVzRW5kcG9pbnQ6IHN0cmluZyA9ICcnO1xyXG5cdHJlc291cmNlc0J5Um9sZUVuZHBvaW50OiBzdHJpbmcgPSAnJztcclxuXHRyb2xlc0J5VXNlckVuZHBvaW50OiBzdHJpbmcgPSAnJztcclxuXHRnZXRNZW51VHJlZUVuZHBvaW50OiBzdHJpbmcgPSAnJztcclxuXHRzYXZlTWVudU9wdGlvbkVuZHBvaW50OiBzdHJpbmcgPSAnJztcclxuXHRkZWxldGVNZW51T3B0aW9uRW5kcG9pbnQ6IHN0cmluZyA9ICcnO1xyXG5cclxuXHRhc3NpZ25Vc2VyUm9sZUVuZHBvaW50OiBzdHJpbmcgPSAnJztcclxuXHRyb2xlc0J5Q3VzdG9tZXJFbmRwb2ludDogc3RyaW5nID0gJyc7XHJcblx0YXNzaWduQ3VzdG9tZXJSb2xlRW5kcG9pbnQ6IHN0cmluZyA9ICcnO1xyXG5cdHVzZXJzQnlSb2xlRW5kcG9pbnQ6IHN0cmluZyA9ICcnO1xyXG5cdGN1c3RvbWVyc0J5Um9sZUVuZHBvaW50OiBzdHJpbmcgPSAnJztcclxuXHRtZW51T3B0aW9uRm9ybUNvbXBvbmVudD86IFR5cGU8YW55PjtcclxuXHJcblx0bGlzdFVzZXJzRW5kcG9pbnQ6IHN0cmluZyA9ICcnO1xyXG5cdGFzc2lnblJvbGVVc2Vyc0VuZHBvaW50OiBzdHJpbmcgPSAnJztcclxuXHRhc3NpZ25Sb2xlQ3VzdG9tZXJzRW5kcG9pbnQ6IHN0cmluZyA9ICcnO1xyXG5cclxuXHRlbmRwb2ludHM6IFNlY3VyaXR5RW5kcG9pbnRzID0ge307XHJcblxyXG5cdHNlbGVjdGVkSXRlbTogYW55O1xyXG5cdHRoZW1lOiBzdHJpbmcgPSAnZGVmYXVsdCc7XHJcblxyXG5cdG1zZ0xhYmVsID0geyBcIlVzZXJcIjogXCJVc3VhcmlvXCIsIFwiQ3VzdG9tZXJcIjogXCJFbXByZXNhXCIsIFwiUm9sZVwiOiBcIlJvbFwiIH1cclxuXHJcblx0cmVsb2FkQnlFbnRpdHkgPSB7XHJcblx0XHRcIlVzZXJcIjogbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKSxcclxuXHRcdFwiQ3VzdG9tZXJcIjogbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKSxcclxuXHRcdFwiUm9sZVwiOiBuZXcgU3ViamVjdDxib29sZWFuPigpXHJcblx0fVxyXG5cclxuXHRnZXQgdXNlclJlbG9hZCgpIHsgcmV0dXJuIHRoaXMucmVsb2FkQnlFbnRpdHlbJ1VzZXInXSB9XHJcblx0Z2V0IGN1c3RvbWVyUmVsb2FkKCkgeyByZXR1cm4gdGhpcy5yZWxvYWRCeUVudGl0eVsnQ3VzdG9tZXInXSB9XHJcblx0Z2V0IHJvbGVSZWxvYWQoKSB7IHJldHVybiB0aGlzLnJlbG9hZEJ5RW50aXR5WydSb2xlJ10gfVxyXG5cclxuXHRnZXQgc3ViamVjdHMoKSB7XHJcblx0XHRyZXR1cm4gKHtcclxuXHRcdFx0XCJVc2VyXCI6IHRoaXMuc2VsZWN0ZWRVc2VyU3ViamVjdCxcclxuXHRcdFx0XCJDdXN0b21lclwiOiB0aGlzLnNlbGVjdGVkQ3VzdG9tZXJTdWJqZWN0LFxyXG5cdFx0XHRcIlJvbGVcIjogdGhpcy5zZWxlY3RlZFJvbGVTdWJqZWN0XHJcblx0XHR9KVxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcblx0XHR0aGlzLnJlbG9hZFN1YmplY3Quc3Vic2NyaWJlKHtcclxuXHRcdFx0bmV4dDogKGVudGl0eU5hbWU6IGFueSkgPT4geyB0aGlzLnJlbG9hZEJ5RW50aXR5W2VudGl0eU5hbWUgYXMgXCJVc2VyXCIgfCBcIkN1c3RvbWVyXCIgfCBcIlJvbGVcIl0/Lm5leHQodHJ1ZSkgfVxyXG5cdFx0fSlcclxuXHRcdGZvciAobGV0IHN1YmplY3Qgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnN1YmplY3RzKSkge1xyXG5cdFx0XHRzdWJqZWN0LnN1YnNjcmliZSh7IG5leHQ6IChpdGVtKSA9PiB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW0gfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzZXRTZWN1cml0eUVuZHBvaW50cyhlbmRwb2ludHM6IFNlY3VyaXR5RW5kcG9pbnRzKXtcclxuXHRcdHRoaXMuZW5kcG9pbnRzID0gZW5kcG9pbnRzO1xyXG5cdH1cclxuXHJcblx0Z2V0Um9sZXMoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmVuZHBvaW50cy5saXN0Um9sZXNFbmRwb2ludCA/PyAnJyk7XHJcblx0fVxyXG5cclxuXHRkZWxldGVNZW51T3B0aW9uKG9wdGlvbjogYW55KXtcclxuXHRcdHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW5kcG9pbnRzLmRlbGV0ZU1lbnVPcHRpb25FbmRwb2ludCA/PyAnJ30/b3B0aW9uSWQ9JHtvcHRpb24uaWR9YClcclxuXHR9XHJcblxyXG5cdHNldFRoZW1lKHRoZW1lOiBzdHJpbmcpe1xyXG5cdFx0dGhpcy50aGVtZSA9IEJvb2xlYW4odGhlbWUpID8gdGhlbWUgOiAnZGVmYXVsdCc7XHJcblx0fVxyXG5cclxuXHRnZXRBY3Rpb25zKHJvbGVJZDogbnVtYmVyLCByZXNvdXJjZUlkOiBudW1iZXIpIHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW5kcG9pbnRzLmFjdGlvbnNCeVJvbGVBbmRSZXNvdXJjZUVuZHBvaW50ID09ICcnfT9yb2xlSWQ9JHtyb2xlSWR9JnJlc291cmNlSWQ9JHtyZXNvdXJjZUlkfWApO1xyXG5cdH1cclxuXHJcblx0Ly8gc2V0RGVsZXRlTWVudU9wdGlvbkVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpe1xyXG5cdC8vIFx0dGhpcy5kZWxldGVNZW51T3B0aW9uRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdGdldFJlc291cmNlc0J5Um9sZShyb2xlSWQ6IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbmRwb2ludHMucmVzb3VyY2VzQnlSb2xlRW5kcG9pbnQgPz8gJyd9P3JvbGVkSWQ9JHtyb2xlSWR9YCk7XHJcblx0fVxyXG5cclxuXHQvLyBzZXRMaXN0VXNlcnNFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0Ly8gXHR0aGlzLmxpc3RVc2Vyc0VuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cclxuXHRzZXRNZW51T3B0aW9uRm9ybUNvbXBvbmVudChjb21wb25lbnQ/OiBUeXBlPGFueT4pe1xyXG5cdFx0dGhpcy5tZW51T3B0aW9uRm9ybUNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuXHR9XHJcblxyXG5cdC8vIHNldFVzZXJzQnlSb2xlRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG5cdC8vIFx0dGhpcy51c2Vyc0J5Um9sZUVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cdC8vIHNldEN1c3RvbWVyc0J5Um9sZUVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuXHQvLyBcdHRoaXMuY3VzdG9tZXJzQnlSb2xlRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdC8vIHNldFNhdmVNZW51T3B0aW9uRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG5cdC8vIFx0dGhpcy5zYXZlTWVudU9wdGlvbkVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cclxuXHQvLyBzZXRHZXRNZW51VHJlZUVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHsgdGhpcy5nZXRNZW51VHJlZUVuZHBvaW50ID0gZW5kcG9pbnQgfVxyXG5cdC8vIHNldEFzc2lnblJvbGVVc2Vyc0VuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHsgdGhpcy5hc3NpZ25Sb2xlVXNlcnNFbmRwb2ludCA9IGVuZHBvaW50IH1cclxuXHQvLyBzZXRBc3NpZ25Sb2xlQ3VzdG9tZXJzRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG5cdC8vIFx0dGhpcy5hc3NpZ25Sb2xlQ3VzdG9tZXJzRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdHNhdmVNZW51T3B0aW9uKG9wdGlvbjogYW55KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbmRwb2ludHMuc2F2ZU1lbnVPcHRpb25FbmRwb2ludCA/PyAnJywgey4uLm9wdGlvbiwgaWQ6IG9wdGlvbi5pZCA+IC0xID8gb3B0aW9uLmlkOiBudWxsfSk7XHJcblx0fVxyXG5cclxuXHQvLyBnZXRVc2VycyhwYWdlOiBudW1iZXIgPSAxLCBwYWdlU2l6ZTogbnVtYmVyID0gMTApIHtcclxuXHQvLyBcdHJldHVybiB0aGlzLmh0dHAuZ2V0KGB0aGlzLmxpc3RVc2Vyc0VuZHBvaW50P3BhZ2U9JHtwYWdlfSZwYWdlU2l6ZT0ke3BhZ2VTaXplfWApO1xyXG5cdC8vIH1cclxuXHJcblx0Z2V0QXNzaWduZWRSb2xlcyhpZDogbnVtYmVyLCB0eXBlOiBcIlVzZXJcIiB8IFwiQ3VzdG9tZXJcIikge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dHlwZSA9PT0gXCJVc2VyXCIgPyAodGhpcy5lbmRwb2ludHMucm9sZXNCeVVzZXJFbmRwb2ludCA/PyAnJykgOiAodGhpcy5lbmRwb2ludHMucm9sZXNCeUN1c3RvbWVyRW5kcG9pbnQgPz8gJycpfT8ke3BhcmFtTmFtZXNbdHlwZV19PSR7aWR9YCk7XHJcblx0fVxyXG5cclxuXHRhc3NpZ25Sb2xlcyhpZDogbnVtYmVyLCByb2xlczogYW55W10sIHR5cGU6IFwiVXNlclwiIHwgXCJDdXN0b21lclwiKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QodHlwZSA9PT0gXCJVc2VyXCIgPyAodGhpcy5lbmRwb2ludHMuYXNzaWduVXNlclJvbGVFbmRwb2ludCA/PyAnJykgOiAodGhpcy5lbmRwb2ludHMuYXNzaWduQ3VzdG9tZXJSb2xlRW5kcG9pbnQgPz8gJycpLCB7XHJcblx0XHRcdFtwYXJhbU5hbWVzW3R5cGVdXTogaWQsXHJcblx0XHRcdHJvbGVzXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGFzc2lnblJvbGVVc2Vycyhyb2xlSWQ6IG51bWJlciwgdXNlcnM6IGFueVtdKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbmRwb2ludHMuYXNzaWduUm9sZVVzZXJzRW5kcG9pbnQgPz8gJycsIHtcclxuXHRcdFx0cm9sZUlkLFxyXG5cdFx0XHR1c2Vyc1xyXG5cdFx0fSlcclxuXHR9XHJcblxyXG5cdGFzc2lnblJvbGVDdXN0b21lcnMocm9sZUlkOiBudW1iZXIsIGN1c3RvbWVyczogYW55W10pIHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmVuZHBvaW50cy5hc3NpZ25Sb2xlQ3VzdG9tZXJzRW5kcG9pbnQgPz8gJycsIHtcclxuXHRcdFx0cm9sZUlkLFxyXG5cdFx0XHRjdXN0b21lcnNcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHQvLyBzZXRSb2xlc0J5VXNlckVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuXHQvLyBcdHRoaXMucm9sZXNCeVVzZXJFbmRwb2ludCA9IGVuZHBvaW50O1xyXG5cdC8vIH1cclxuXHJcblx0Ly8gc2V0QXNzaWduVXNlclJvbGVFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0Ly8gXHR0aGlzLmFzc2lnblVzZXJSb2xlRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdC8vIHNldFJvbGVzQnlDdXN0b21lckVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuXHQvLyBcdHRoaXMucm9sZXNCeUN1c3RvbWVyRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdC8vIHNldEFzc2lnbkN1c3RvbWVyUm9sZUVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuXHQvLyBcdHRoaXMuYXNzaWduQ3VzdG9tZXJSb2xlRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdC8vIHNldFNhdmVQZXJtaXNzaW9uc0VuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuXHQvLyBcdHRoaXMuc2F2ZVBlcm1pc3Npb25zRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdC8vIHNldFVzZXJzQnlDdXN0b21lckVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuXHQvLyBcdHRoaXMudXNlcnNCeUN1c3RvbWVyRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdC8vIHNldExpc3RSb2xlc0VuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuXHQvLyBcdHRoaXMubGlzdFJvbGVzRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdC8vIHNldEFzc2lnblJlc291cmNlRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG5cdC8vIFx0dGhpcy5hc3NpZ25SZXNvdXJjZUVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cclxuXHQvLyBzZXRSZXNvdXJjZXNCeVJvbGVFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0Ly8gXHR0aGlzLnJlc291cmNlc0J5Um9sZUVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cclxuXHQvLyBzZXRBY3Rpb25zQnlSb2xlQW5kUmVzb3VyY2VFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0Ly8gXHR0aGlzLmdldEFjdGlvbnNFbmRwb2ludCA9IGVuZHBvaW50O1xyXG5cdC8vIH1cclxuXHJcblx0c2VsZWN0VXNlcih1c2VyOiBhbnkpIHtcclxuXHRcdHRoaXMuc2VsZWN0ZWRVc2VyU3ViamVjdC5uZXh0KHVzZXIpO1xyXG5cdH1cclxuXHJcblx0c2VsZWN0Q3VzdG9tZXIoY3VzdG9tZXI6IGFueSkge1xyXG5cdFx0dGhpcy5zZWxlY3RlZEN1c3RvbWVyU3ViamVjdC5uZXh0KGN1c3RvbWVyKTtcclxuXHR9XHJcblxyXG5cdHNlbGVjdFJvbGUocm9sZTogYW55KSB7XHJcblxyXG5cdFx0dGhpcy5zZWxlY3RlZFJvbGVTdWJqZWN0Lm5leHQocm9sZSk7XHJcblx0fVxyXG5cclxuXHRzYXZlSXRlbShlbmRwb2ludDogc3RyaW5nLCB1cGRhdGVkSXRlbTogYW55KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHVwZGF0ZWRJdGVtKTtcclxuXHR9XHJcblxyXG5cdGFzc2lnblJlc291cmNlKHJvbGVJZDogbnVtYmVyLCByZXNvdXJjZXM6IGFueVtdKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbmRwb2ludHMuYXNzaWduUmVzb3VyY2VFbmRwb2ludCA/PyAnJywgeyByb2xlSWQsIHJlc291cmNlcyB9KTtcclxuXHR9XHJcblxyXG5cdHNhdmVQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogYW55W10pIHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmVuZHBvaW50cy5zYXZlUGVybWlzc2lvbnNFbmRwb2ludCA/PyAnJywgcGVybWlzc2lvbnMpO1xyXG5cdH1cclxuXHJcblx0Z2V0TWVudVRyZWUoKXtcclxuXHRcdHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuZW5kcG9pbnRzLmdldE1lbnVUcmVlRW5kcG9pbnQgPz8gJycpO1xyXG5cdH1cclxuXHJcblx0Z2V0QXBwTW9kdWxlcygpe1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5lbmRwb2ludHMubGlzdE1vZHVsZXNFbmRwb2ludCA/PyAnJyk7XHJcblx0fVxyXG5cclxuXHRzYXZlTW9kdWxlKG1vZHVsZTogYW55KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbmRwb2ludHMuY3JlYXRlTW9kdWxlRW5kcG9pbnQgPz8gJycsIG1vZHVsZSk7XHJcblx0fVxyXG5cclxuXHRyZWxvYWRFbnRpdHkoZW50aXR5TmFtZTogXCJVc2VyXCIgfCBcIkN1c3RvbWVyXCIgfCBcIlJvbGVcIikge1xyXG5cdFx0dGhpcy5yZWxvYWRTdWJqZWN0Lm5leHQoZW50aXR5TmFtZSk7XHJcblx0fVxyXG59XHJcbiJdfQ==
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktYWRtaW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzcC1saWIvc3JjL2xpYi9zZXJ2aWNlcy9zZWN1cml0eS1hZG1pbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBVyxNQUFNLE1BQU0sQ0FBQztBQUdoRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXJELE1BQU0sVUFBVSxHQUFHO0lBQ2xCLFFBQVEsRUFBRSxZQUFZO0lBQ3RCLElBQUksRUFBRSxRQUFRO0NBQ2QsQ0FBQTtBQUtELE1BQU0sT0FBTyxvQkFBb0I7SUFvQmhDLElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDdkQsSUFBSSxjQUFjLEtBQUssT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUMvRCxJQUFJLFVBQVUsS0FBSyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRXZELElBQUksUUFBUTtRQUNYLE9BQU8sQ0FBQztZQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CO1lBQ2hDLFVBQVUsRUFBRSxJQUFJLENBQUMsdUJBQXVCO1lBQ3hDLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CO1NBQ2hDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFRCxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBOUJwQyx3QkFBbUIsR0FBRyxJQUFJLE9BQU8s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LElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxhQUFhO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsWUFBWSxDQUFDLFVBQXdDO1FBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7K0dBM05XLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRnBCLE1BQU07OzRGQUVOLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZyb20sIG1hcCwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIG9mLCByZWR1Y2UsIFN1YmplY3QsIHN3aXRjaE1hcCwgdG9BcnJheSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTbmFja2JhclNlcnZpY2UgfSBmcm9tICcuL3NuYWNrYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWN1cml0eUVuZHBvaW50cyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IGRlZmF1bHRTd2l0Y2hNYXBwZXIgfSBmcm9tICcuLi91dGlscy91dGlscyc7XHJcblxyXG5jb25zdCBwYXJhbU5hbWVzID0ge1xyXG5cdEN1c3RvbWVyOiBcImN1c3RvbWVySWRcIixcclxuXHRVc2VyOiBcInVzZXJJZFwiXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlY3VyaXR5QWRtaW5TZXJ2aWNlIHtcclxuXHJcblx0c2VsZWN0ZWRVc2VyU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHRzZWxlY3RlZEN1c3RvbWVyU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHRzZWxlY3RlZFJvbGVTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cdHJlbG9hZFN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcblx0bWVudU9wdGlvbkZvcm1Db21wb25lbnQ/OiBUeXBlPGFueT47XHJcblx0ZW5kcG9pbnRzOiBTZWN1cml0eUVuZHBvaW50cyA9IHt9O1xyXG5cdGxhbmd1YWdlOiBzdHJpbmcgPSAnZW4nO1xyXG5cdHNlbGVjdGVkSXRlbTogYW55O1xyXG5cdHRoZW1lOiBzdHJpbmcgPSAnZGVmYXVsdCc7XHJcblx0bXNnTGFiZWwgPSB7IFwiVXNlclwiOiBcIlVzdWFyaW9cIiwgXCJDdXN0b21lclwiOiBcIkVtcHJlc2FcIiwgXCJSb2xlXCI6IFwiUm9sXCIgfTtcclxuXHRibG9ja0NyZWF0aW9uRm9yOiBTZXQ8XCJVc2VyXCJ8XCJDdXN0b21lclwifFwiUm9sZVwiPiA9IG5ldyBTZXQoW1wiQ3VzdG9tZXJcIl0pO1xyXG5cclxuXHRyZWxvYWRCeUVudGl0eSA9IHtcclxuXHRcdFwiVXNlclwiOiBuZXcgU3ViamVjdDxib29sZWFuPigpLFxyXG5cdFx0XCJDdXN0b21lclwiOiBuZXcgU3ViamVjdDxib29sZWFuPigpLFxyXG5cdFx0XCJSb2xlXCI6IG5ldyBTdWJqZWN0PGJvb2xlYW4+KClcclxuXHR9XHJcblxyXG5cdGdldCB1c2VyUmVsb2FkKCkgeyByZXR1cm4gdGhpcy5yZWxvYWRCeUVudGl0eVsnVXNlciddIH1cclxuXHRnZXQgY3VzdG9tZXJSZWxvYWQoKSB7IHJldHVybiB0aGlzLnJlbG9hZEJ5RW50aXR5WydDdXN0b21lciddIH1cclxuXHRnZXQgcm9sZVJlbG9hZCgpIHsgcmV0dXJuIHRoaXMucmVsb2FkQnlFbnRpdHlbJ1JvbGUnXSB9XHJcblxyXG5cdGdldCBzdWJqZWN0cygpIHtcclxuXHRcdHJldHVybiAoe1xyXG5cdFx0XHRcIlVzZXJcIjogdGhpcy5zZWxlY3RlZFVzZXJTdWJqZWN0LFxyXG5cdFx0XHRcIkN1c3RvbWVyXCI6IHRoaXMuc2VsZWN0ZWRDdXN0b21lclN1YmplY3QsXHJcblx0XHRcdFwiUm9sZVwiOiB0aGlzLnNlbGVjdGVkUm9sZVN1YmplY3RcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuXHRcdHRoaXMucmVsb2FkU3ViamVjdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAoZW50aXR5TmFtZTogYW55KSA9PiB7IHRoaXMucmVsb2FkQnlFbnRpdHlbZW50aXR5TmFtZSBhcyBcIlVzZXJcIiB8IFwiQ3VzdG9tZXJcIiB8IFwiUm9sZVwiXT8ubmV4dCh0cnVlKSB9XHJcblx0XHR9KVxyXG5cdFx0Zm9yIChsZXQgc3ViamVjdCBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3ViamVjdHMpKSB7XHJcblx0XHRcdHN1YmplY3Quc3Vic2NyaWJlKHsgbmV4dDogKGl0ZW0pID0+IHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbSB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHNldExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcclxuXHR9XHJcblxyXG5cdHNldFNlY3VyaXR5RW5kcG9pbnRzKGVuZHBvaW50czogU2VjdXJpdHlFbmRwb2ludHMpIHtcclxuXHRcdHRoaXMuZW5kcG9pbnRzID0gZW5kcG9pbnRzO1xyXG5cdH1cclxuXHJcblx0Z2V0Um9sZXMoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmVuZHBvaW50cy5saXN0Um9sZXM/LnVybCA/PyAnJyk7XHJcblx0fVxyXG5cclxuXHRkZWxldGVNZW51T3B0aW9uKG9wdGlvbjogYW55KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmVuZHBvaW50cy5kZWxldGVNZW51T3B0aW9uPy51cmwgPz8gJyd9P29wdGlvbklkPSR7b3B0aW9uLmlkfWApXHJcblx0fVxyXG5cclxuXHRzZXRUaGVtZSh0aGVtZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnRoZW1lID0gQm9vbGVhbih0aGVtZSkgPyB0aGVtZSA6ICdkZWZhdWx0JztcclxuXHR9XHJcblxyXG5cdGdldEFjdGlvbnMocm9sZUlkOiBudW1iZXIsIHJlc291cmNlSWQ6IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbmRwb2ludHMuYWN0aW9uc0J5Um9sZUFuZFJlc291cmNlPy51cmwgPz8gJyd9P3JvbGVJZD0ke3JvbGVJZH0mcmVzb3VyY2VJZD0ke3Jlc291cmNlSWR9YCk7XHJcblx0fVxyXG5cclxuXHRnZXRSZXNvdXJjZXNCeVJvbGUocm9sZUlkOiBudW1iZXIpIHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW5kcG9pbnRzLnJlc291cmNlc0J5Um9sZT8udXJsID8/ICcnfT9yb2xlZElkPSR7cm9sZUlkfWApO1xyXG5cdH1cclxuXHJcblx0c2V0TWVudU9wdGlvbkZvcm1Db21wb25lbnQoY29tcG9uZW50PzogVHlwZTxhbnk+KSB7XHJcblx0XHR0aGlzLm1lbnVPcHRpb25Gb3JtQ29tcG9uZW50ID0gY29tcG9uZW50O1xyXG5cdH1cclxuXHJcblxyXG5cdHNhdmVNZW51T3B0aW9uKG9wdGlvbjogYW55KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbmRwb2ludHMuc2F2ZU1lbnVPcHRpb24/LnVybCA/PyAnJywgeyAuLi5vcHRpb24sIGlkOiBvcHRpb24uaWQgPiAtMSA/IG9wdGlvbi5pZCA6IG51bGwgfSk7XHJcblx0fVxyXG5cclxuXHQvLyBnZXRVc2VycyhwYWdlOiBudW1iZXIgPSAxLCBwYWdlU2l6ZTogbnVtYmVyID0gMTApIHtcclxuXHQvLyBcdHJldHVybiB0aGlzLmh0dHAuZ2V0KGB0aGlzLmxpc3RVc2Vyc0VuZHBvaW50P3BhZ2U9JHtwYWdlfSZwYWdlU2l6ZT0ke3BhZ2VTaXplfWApO1xyXG5cdC8vIH1cclxuXHJcblx0Z2V0QXNzaWduZWRSb2xlcyhpZDogbnVtYmVyLCB0eXBlOiBcIlVzZXJcIiB8IFwiQ3VzdG9tZXJcIikge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dHlwZSA9PT0gXCJVc2VyXCIgPyAodGhpcy5lbmRwb2ludHMucm9sZXNCeVVzZXI/LnVybCA/PyAnJykgOiAodGhpcy5lbmRwb2ludHMucm9sZXNCeUN1c3RvbWVyID8/ICcnKX0/JHtwYXJhbU5hbWVzW3R5cGVdfT0ke2lkfWApO1xyXG5cdH1cclxuXHJcblx0YXNzaWduUm9sZXMoaWQ6IG51bWJlciwgcm9sZXM6IGFueVtdLCB0eXBlOiBcIlVzZXJcIiB8IFwiQ3VzdG9tZXJcIikge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5wb3N0KHR5cGUgPT09IFwiVXNlclwiID8gKHRoaXMuZW5kcG9pbnRzLmFzc2lnblVzZXJSb2xlPy51cmwgPz8gJycpIDogKHRoaXMuZW5kcG9pbnRzLmFzc2lnbkN1c3RvbWVyUm9sZT8udXJsID8/ICcnKSwge1xyXG5cdFx0XHRbcGFyYW1OYW1lc1t0eXBlXV06IGlkLFxyXG5cdFx0XHRyb2xlc1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3NpZ25Sb2xlVXNlcnMocm9sZUlkOiBudW1iZXIsIHVzZXJzOiBhbnlbXSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZW5kcG9pbnRzLmFzc2lnblJvbGVVc2Vycz8udXJsID8/ICcnLCB7XHJcblx0XHRcdHJvbGVJZCxcclxuXHRcdFx0dXNlcnNcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRhc3NpZ25Sb2xlQ3VzdG9tZXJzKHJvbGVJZDogbnVtYmVyLCBjdXN0b21lcnM6IGFueVtdKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbmRwb2ludHMuYXNzaWduUm9sZUN1c3RvbWVycz8udXJsID8/ICcnLCB7XHJcblx0XHRcdHJvbGVJZCxcclxuXHRcdFx0Y3VzdG9tZXJzXHJcblx0XHR9KVxyXG5cdH1cclxuXHJcblx0Ly8gYXNzaWduVXNlckN1c3RvbWVycyh1c2VySWQ6IG51bWJlciwgY3VzdG9tZXJzOiBhbnlbXSkge1xyXG5cdC8vIFx0cmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZW5kcG9pbnRzLmFzc2lnblVzZXJDdXN0b21lcnM/LnVybCA/PyAnJywge3VzZXJJZCwgY3VzdG9tZXJzfSlcclxuXHQvLyB9XHJcblxyXG5cdC8vIGFzc2lnblVzZXJBZ2VuY2llcyh1c2VySWQ6IG51bWJlciwgYWdlbmNpZXM6IGFueVtdKSB7XHJcblx0Ly8gXHRyZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbmRwb2ludHMuYXNzaWduVXNlckFnZW5jaWVzPy51cmwgPz8gJycsIHt1c2VySWQsIGFnZW5jaWVzfSlcclxuXHQvLyB9XHJcblxyXG5cclxuXHRhc3NpZ25Vc2VyQ3VzdG9tZXJBbmRBZ2VuY2llcyh1c2VySWQ6IG51bWJlciwgY3VzdG9tZXJzOiBhbnlbXSwgYWdlbmNpZXM6IHsgW2N1c3RvbWVySWQ6IG51bWJlcl06IGFueVtdIH0pIHtcclxuXHRcdHJldHVybiB0aGlzLmVuZHBvaW50cy5hc3NpZ25Vc2VyQ3VzdG9tZXJzPy5vblJlcXVlc3Qoe3VzZXJJZCwgY3VzdG9tZXJzLCBhZ2VuY2llc30pO1xyXG5cdH1cclxuXHJcblx0YXNzaWduQ3VzdG9tZXJVc2VycyhjdXN0b21lcklkOiBudW1iZXIsIHVzZXJzOiBhbnlbXSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW5kcG9pbnRzLmFzc2lnbkN1c3RvbWVyVXNlcnM/Lm9uUmVxdWVzdCh7Y3VzdG9tZXJJZCwgdXNlcnN9KTtcclxuXHR9XHJcblxyXG5cdGdldFVzZXJSb2xlc0J5Q3VzdG9tZXJzKHVzZXI6IGFueSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbmRwb2ludHMuY3VzdG9tZXJzQnlVc2VyPy51cmx9JHt0aGlzLmVuZHBvaW50cy5jdXN0b21lcnNCeVVzZXI/LnF1ZXJ5UGFyYW1zPy4odXNlcil9YCkucGlwZShcclxuXHRcdFx0c3dpdGNoTWFwKHRoaXMuZW5kcG9pbnRzLmN1c3RvbWVyc0J5VXNlcj8ucmVzcG9uc2VNYXBwaW5nID8/IGRlZmF1bHRTd2l0Y2hNYXBwZXIpLFxyXG5cdFx0XHRzd2l0Y2hNYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gZnJvbShBcnJheS5mcm9tKG5ldyBTZXQocmVzcG9uc2UubG9hZCkpKS5waXBlKFxyXG5cdFx0XHRcdFx0bWVyZ2VNYXAoXHJcblx0XHRcdFx0XHRcdGN1c3RvbWVySWQgPT4gdGhpcy5odHRwLmdldChgJHt0aGlzLmVuZHBvaW50cy5yb2xlc0J5Q3VzdG9tZXI/LnVybH0ke3RoaXMuZW5kcG9pbnRzLnJvbGVzQnlDdXN0b21lcj8ucXVlcnlQYXJhbXM/Lih7IGlkOiBjdXN0b21lcklkIH0pfWApXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0cmVkdWNlKChhY2M6IGFueSwgY3VycjogYW55KSA9PiBhY2MuY29uY2F0KGN1cnIpLCBbXSksXHJcblx0XHRcdFx0XHRtYXAobmV3TG9hZCA9PiAoeyAuLi5yZXNwb25zZSwgbG9hZDogbmV3TG9hZCB9KSlcclxuXHRcdFx0XHQpXHJcblx0XHRcdH0pLFxyXG5cdFx0XHRzd2l0Y2hNYXAoKHJlc3BvbnNlMikgPT4gb2Yoey4uLnJlc3BvbnNlMiwgbG9hZDogcmVzcG9uc2UyLmxvYWQubWFwKChyZXNwb25zZTM6IGFueSkgPT4gcmVzcG9uc2UzLmxvYWQpLmZsYXQoKX0pKVxyXG5cdFx0KVxyXG5cdH1cclxuXHJcblx0Ly8gc2V0Um9sZXNCeVVzZXJFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0Ly8gXHR0aGlzLnJvbGVzQnlVc2VyRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdC8vIHNldEFzc2lnblVzZXJSb2xlRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG5cdC8vIFx0dGhpcy5hc3NpZ25Vc2VyUm9sZUVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cclxuXHQvLyBzZXRSb2xlc0J5Q3VzdG9tZXJFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0Ly8gXHR0aGlzLnJvbGVzQnlDdXN0b21lckVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cclxuXHQvLyBzZXRBc3NpZ25DdXN0b21lclJvbGVFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0Ly8gXHR0aGlzLmFzc2lnbkN1c3RvbWVyUm9sZUVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cclxuXHQvLyBzZXRTYXZlUGVybWlzc2lvbnNFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0Ly8gXHR0aGlzLnNhdmVQZXJtaXNzaW9uc0VuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cclxuXHQvLyBzZXRVc2Vyc0J5Q3VzdG9tZXJFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0Ly8gXHR0aGlzLnVzZXJzQnlDdXN0b21lckVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cclxuXHQvLyBzZXRMaXN0Um9sZXNFbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcblx0Ly8gXHR0aGlzLmxpc3RSb2xlc0VuZHBvaW50ID0gZW5kcG9pbnQ7XHJcblx0Ly8gfVxyXG5cclxuXHQvLyBzZXRBc3NpZ25SZXNvdXJjZUVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpIHtcclxuXHQvLyBcdHRoaXMuYXNzaWduUmVzb3VyY2VFbmRwb2ludCA9IGVuZHBvaW50O1xyXG5cdC8vIH1cclxuXHJcblx0Ly8gc2V0UmVzb3VyY2VzQnlSb2xlRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG5cdC8vIFx0dGhpcy5yZXNvdXJjZXNCeVJvbGVFbmRwb2ludCA9IGVuZHBvaW50O1xyXG5cdC8vIH1cclxuXHJcblx0Ly8gc2V0QWN0aW9uc0J5Um9sZUFuZFJlc291cmNlRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG5cdC8vIFx0dGhpcy5nZXRBY3Rpb25zRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuXHQvLyB9XHJcblxyXG5cdHNlbGVjdFVzZXIodXNlcjogYW55KSB7XHJcblx0XHR0aGlzLnNlbGVjdGVkVXNlclN1YmplY3QubmV4dCh1c2VyKTtcclxuXHR9XHJcblxyXG5cdHNlbGVjdEN1c3RvbWVyKGN1c3RvbWVyOiBhbnkpIHtcclxuXHRcdHRoaXMuc2VsZWN0ZWRDdXN0b21lclN1YmplY3QubmV4dChjdXN0b21lcik7XHJcblx0fVxyXG5cclxuXHRzZWxlY3RSb2xlKHJvbGU6IGFueSkge1xyXG5cclxuXHRcdHRoaXMuc2VsZWN0ZWRSb2xlU3ViamVjdC5uZXh0KHJvbGUpO1xyXG5cdH1cclxuXHJcblx0c2F2ZUl0ZW0oZW5kcG9pbnQ6IHN0cmluZywgdXBkYXRlZEl0ZW06IGFueSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5wb3N0KGVuZHBvaW50LCB1cGRhdGVkSXRlbSk7XHJcblx0fVxyXG5cclxuXHRhc3NpZ25SZXNvdXJjZShyb2xlSWQ6IG51bWJlciwgcmVzb3VyY2VzOiBhbnlbXSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZW5kcG9pbnRzLmFzc2lnblJlc291cmNlPy51cmwgPz8gJycsIHsgcm9sZUlkLCByZXNvdXJjZXMgfSk7XHJcblx0fVxyXG5cclxuXHRzYXZlUGVybWlzc2lvbnMocGVybWlzc2lvbnM6IGFueVtdKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbmRwb2ludHMuc2F2ZVBlcm1pc3Npb25zPy51cmwgPz8gJycsIHBlcm1pc3Npb25zKTtcclxuXHR9XHJcblxyXG5cdGdldE1lbnVUcmVlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5lbmRwb2ludHMuZ2V0TWVudVRyZWU/LnVybCA/PyAnJyk7XHJcblx0fVxyXG5cclxuXHRnZXRBcHBNb2R1bGVzKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5lbmRwb2ludHMubGlzdE1vZHVsZXM/LnVybCA/PyAnJyk7XHJcblx0fVxyXG5cclxuXHRzYXZlTW9kdWxlKG1vZHVsZTogYW55KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5lbmRwb2ludHMuY3JlYXRlTW9kdWxlPy51cmwgPz8gJycsIG1vZHVsZSk7XHJcblx0fVxyXG5cclxuXHRyZWxvYWRFbnRpdHkoZW50aXR5TmFtZTogXCJVc2VyXCIgfCBcIkN1c3RvbWVyXCIgfCBcIlJvbGVcIikge1xyXG5cdFx0dGhpcy5yZWxvYWRTdWJqZWN0Lm5leHQoZW50aXR5TmFtZSk7XHJcblx0fVxyXG59XHJcbiJdfQ==
|