@mediusinc/mng-commons 2.0.0-rc.0-08f92864 → 2.0.0-rc.1-e41a1d28
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/esm2020/lib/components/action/action.component.mjs +10 -8
- package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +18 -5
- package/esm2020/lib/components/layout/index.mjs +2 -1
- package/esm2020/lib/components/layout/main-layout.component.mjs +17 -13
- package/esm2020/lib/components/layout/topbar-user.component.mjs +41 -0
- package/esm2020/lib/components/layout/topbar.component.mjs +28 -31
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +2 -2
- package/esm2020/lib/components/tableview/table/table.component.mjs +2 -2
- package/esm2020/lib/directives/component.directive.mjs +27 -10
- package/esm2020/lib/mng-commons.module.mjs +6 -1
- package/esm2020/lib/models/config.model.mjs +1 -1
- package/esm2020/lib/router/models/router.model.mjs +1 -1
- package/esm2020/lib/router/route-builder.mjs +9 -29
- package/esm2020/lib/router/routes-builder.mjs +7 -7
- package/esm2020/lib/router/tableview-route-builder.mjs +70 -73
- package/esm2020/lib/types/i18n.type.mjs +2 -0
- package/esm2020/lib/types/index.mjs +2 -1
- package/esm2020/lib/utils/i18n.util.mjs +49 -6
- package/fesm2015/mediusinc-mng-commons.mjs +264 -168
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +257 -168
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/components/action/action.component.d.ts +2 -2
- package/lib/components/form/dropdown/dropdown.component.d.ts +7 -0
- package/lib/components/layout/index.d.ts +1 -0
- package/lib/components/layout/main-layout.component.d.ts +3 -1
- package/lib/components/layout/topbar-user.component.d.ts +21 -0
- package/lib/components/layout/topbar.component.d.ts +8 -10
- package/lib/directives/component.directive.d.ts +7 -3
- package/lib/mng-commons.module.d.ts +27 -26
- package/lib/models/config.model.d.ts +10 -0
- package/lib/router/models/router.model.d.ts +0 -5
- package/lib/router/route-builder.d.ts +6 -8
- package/lib/router/routes-builder.d.ts +4 -5
- package/lib/router/tableview-route-builder.d.ts +16 -10
- package/lib/types/i18n.type.d.ts +1 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/utils/i18n.util.d.ts +31 -2
- package/package.json +1 -1
- package/scss/common/theme/designer/_components.scss +1 -1
- package/scss/common/theme/extensions/_vendor_extensions.scss +1 -1
- package/scss/mng-overrides/_layout_menu.scss +1 -1
- package/scss/mng-overrides/_theme_menu.scss +5 -0
- package/scss/mng-overrides/_theme_styles.scss +1 -0
- package/scss/theme/default/_mng-variables-theme-light.scss +2 -0
- package/version-info.json +5 -5
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { MngActionRouteComponent } from '../components/action';
|
|
2
2
|
import { TableviewActionDefaultCategories } from '../components/action/models';
|
|
3
|
-
import { MngTableviewRouteComponent } from '../components/tableview';
|
|
4
3
|
import { ActionEditorAddDescriptor, ActionEditorDetailsDescriptor, ActionEditorEditDescriptor } from '../descriptors/action';
|
|
5
4
|
import { RouteBuilder } from './route-builder';
|
|
6
|
-
export class
|
|
7
|
-
constructor(path) {
|
|
5
|
+
export class TableviewRouteBuilderInternal extends RouteBuilder {
|
|
6
|
+
constructor(path, options) {
|
|
7
|
+
super({ path: path, component: options.component ?? TableviewRouteBuilder });
|
|
8
8
|
this.path = path;
|
|
9
|
+
this.isFromComponent = true;
|
|
9
10
|
this.hasDetails = true;
|
|
10
11
|
this.detailsPath = ':itemId';
|
|
11
12
|
this.hasEdit = true;
|
|
@@ -13,32 +14,28 @@ export class TableviewRouteBuilder {
|
|
|
13
14
|
this.hasAdd = true;
|
|
14
15
|
this.addPath = 'add';
|
|
15
16
|
this.hasDelete = true;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
else if (action instanceof ActionEditorEditDescriptor) {
|
|
38
|
-
inst.hasEdit = true;
|
|
17
|
+
if (!options.component) {
|
|
18
|
+
this.isFromComponent = false;
|
|
19
|
+
this.descriptor = options.descriptor;
|
|
20
|
+
this.dataProvider = options.dataProvider;
|
|
21
|
+
this.actions = options.actions;
|
|
22
|
+
this.hasDetails = false;
|
|
23
|
+
this.hasAdd = false;
|
|
24
|
+
this.hasEdit = false;
|
|
25
|
+
if (this.actions) {
|
|
26
|
+
for (const action of this.actions) {
|
|
27
|
+
if (action instanceof ActionEditorDetailsDescriptor) {
|
|
28
|
+
this.hasDetails = true;
|
|
29
|
+
}
|
|
30
|
+
else if (action instanceof ActionEditorAddDescriptor) {
|
|
31
|
+
this.hasAdd = true;
|
|
32
|
+
}
|
|
33
|
+
else if (action instanceof ActionEditorEditDescriptor) {
|
|
34
|
+
this.hasEdit = true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
|
-
return inst;
|
|
42
39
|
}
|
|
43
40
|
withReadOnly(permissions) {
|
|
44
41
|
if (permissions) {
|
|
@@ -87,101 +84,101 @@ export class TableviewRouteBuilder {
|
|
|
87
84
|
return this;
|
|
88
85
|
}
|
|
89
86
|
withPermissions(read, add, edit, delet, details) {
|
|
90
|
-
if (!this.
|
|
91
|
-
this.
|
|
87
|
+
if (!this.tableviewPermissions) {
|
|
88
|
+
this.tableviewPermissions = {};
|
|
92
89
|
}
|
|
93
90
|
if (read) {
|
|
94
|
-
this.
|
|
91
|
+
this.tableviewPermissions[TableviewActionDefaultCategories.READ] = read;
|
|
95
92
|
}
|
|
96
93
|
if (add) {
|
|
97
|
-
this.
|
|
94
|
+
this.tableviewPermissions[TableviewActionDefaultCategories.ADD] = add;
|
|
98
95
|
}
|
|
99
96
|
if (edit) {
|
|
100
|
-
this.
|
|
97
|
+
this.tableviewPermissions[TableviewActionDefaultCategories.EDIT] = edit;
|
|
101
98
|
}
|
|
102
99
|
if (delet) {
|
|
103
|
-
this.
|
|
100
|
+
this.tableviewPermissions[TableviewActionDefaultCategories.DELETE] = delet;
|
|
104
101
|
}
|
|
105
102
|
if (details) {
|
|
106
|
-
this.
|
|
103
|
+
this.tableviewPermissions[TableviewActionDefaultCategories.DETAILS] = details;
|
|
107
104
|
}
|
|
108
105
|
return this;
|
|
109
106
|
}
|
|
110
107
|
withPermissionByCategory(key, permissions) {
|
|
111
|
-
if (!this.
|
|
112
|
-
this.
|
|
108
|
+
if (!this.tableviewPermissions) {
|
|
109
|
+
this.tableviewPermissions = {};
|
|
113
110
|
}
|
|
114
|
-
this.
|
|
111
|
+
this.tableviewPermissions[key] = permissions;
|
|
115
112
|
return this;
|
|
116
113
|
}
|
|
117
114
|
withPermissionsObject(permissions) {
|
|
118
|
-
this.
|
|
115
|
+
this.tableviewPermissions = permissions;
|
|
119
116
|
return this;
|
|
120
117
|
}
|
|
121
118
|
build() {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
toRouteBuilder() {
|
|
125
|
-
const tableviewRouteBuilder = RouteBuilder.createFromRoute({
|
|
126
|
-
path: this.path,
|
|
127
|
-
component: this.component ? this.component : MngTableviewRouteComponent
|
|
128
|
-
});
|
|
129
|
-
const routeData = {};
|
|
130
|
-
if (!this.component) {
|
|
131
|
-
routeData.tableview = {
|
|
119
|
+
if (!this.isFromComponent) {
|
|
120
|
+
this.routeData.tableview = {
|
|
132
121
|
descriptor: this.descriptor,
|
|
133
122
|
dataProvider: this.dataProvider
|
|
134
123
|
};
|
|
135
124
|
if (this.actions) {
|
|
136
|
-
routeData.tableview.actions = this.actions;
|
|
125
|
+
this.routeData.tableview.actions = this.actions;
|
|
137
126
|
}
|
|
138
127
|
}
|
|
139
|
-
if (this.
|
|
140
|
-
routeData.tableviewPermissions = { ...this.
|
|
128
|
+
if (this.tableviewPermissions) {
|
|
129
|
+
this.routeData.tableviewPermissions = { ...this.tableviewPermissions };
|
|
141
130
|
}
|
|
142
|
-
routeData.tableviewActions = {
|
|
131
|
+
this.routeData.tableviewActions = {
|
|
143
132
|
hasAdd: this.hasAdd,
|
|
144
133
|
hasEdit: this.hasEdit,
|
|
145
134
|
hasDetails: this.hasDetails,
|
|
146
135
|
hasDelete: this.hasDelete
|
|
147
136
|
};
|
|
148
|
-
|
|
149
|
-
if (this.
|
|
150
|
-
|
|
137
|
+
this.withData(this.routeData);
|
|
138
|
+
if (this.tableviewPermissions?.[TableviewActionDefaultCategories.READ]) {
|
|
139
|
+
this.routeData.permissions = this.tableviewPermissions[TableviewActionDefaultCategories.READ];
|
|
151
140
|
}
|
|
152
141
|
// list route
|
|
153
142
|
const rootChildRouteBuilder = RouteBuilder.create('', MngActionRouteComponent);
|
|
154
|
-
rootChildRouteBuilder.withData({ ...routeData });
|
|
155
|
-
if (this.
|
|
156
|
-
rootChildRouteBuilder.withPermissions(this.
|
|
143
|
+
rootChildRouteBuilder.withData({ ...this.routeData });
|
|
144
|
+
if (this.tableviewPermissions?.[TableviewActionDefaultCategories.READ]) {
|
|
145
|
+
rootChildRouteBuilder.withPermissions(this.tableviewPermissions[TableviewActionDefaultCategories.READ]);
|
|
157
146
|
}
|
|
158
|
-
|
|
147
|
+
this.addChildBuilder(rootChildRouteBuilder);
|
|
159
148
|
// add route
|
|
160
149
|
if (this.hasAdd) {
|
|
161
150
|
const routeBuilder = RouteBuilder.create(this.addPath, MngActionRouteComponent);
|
|
162
|
-
routeBuilder.withData({ ...routeData });
|
|
163
|
-
if (this.
|
|
164
|
-
routeBuilder.withPermissions(this.
|
|
151
|
+
routeBuilder.withData({ ...this.routeData });
|
|
152
|
+
if (this.tableviewPermissions?.[TableviewActionDefaultCategories.ADD]) {
|
|
153
|
+
routeBuilder.withPermissions(this.tableviewPermissions[TableviewActionDefaultCategories.ADD]);
|
|
165
154
|
}
|
|
166
|
-
|
|
155
|
+
this.addChildBuilder(routeBuilder);
|
|
167
156
|
}
|
|
168
157
|
if (this.hasDetails) {
|
|
169
158
|
const routeBuilder = RouteBuilder.create(this.detailsPath, MngActionRouteComponent);
|
|
170
|
-
routeBuilder.withData({ ...routeData });
|
|
171
|
-
if (this.
|
|
172
|
-
routeBuilder.withPermissions(this.
|
|
159
|
+
routeBuilder.withData({ ...this.routeData });
|
|
160
|
+
if (this.tableviewPermissions?.[TableviewActionDefaultCategories.DETAILS]) {
|
|
161
|
+
routeBuilder.withPermissions(this.tableviewPermissions[TableviewActionDefaultCategories.DETAILS]);
|
|
173
162
|
}
|
|
174
|
-
|
|
163
|
+
this.addChildBuilder(routeBuilder);
|
|
175
164
|
}
|
|
176
165
|
if (this.hasEdit) {
|
|
177
166
|
const routeBuilder = RouteBuilder.create(this.editPath, MngActionRouteComponent);
|
|
178
|
-
routeBuilder.withData({ ...routeData });
|
|
179
|
-
if (this.
|
|
180
|
-
routeBuilder.withPermissions(this.
|
|
167
|
+
routeBuilder.withData({ ...this.routeData });
|
|
168
|
+
if (this.tableviewPermissions?.[TableviewActionDefaultCategories.EDIT]) {
|
|
169
|
+
routeBuilder.withPermissions(this.tableviewPermissions[TableviewActionDefaultCategories.EDIT]);
|
|
181
170
|
}
|
|
182
|
-
|
|
171
|
+
this.addChildBuilder(routeBuilder);
|
|
183
172
|
}
|
|
184
|
-
return
|
|
173
|
+
return super.build();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
export class TableviewRouteBuilder {
|
|
177
|
+
static fromComponent(path, component) {
|
|
178
|
+
return new TableviewRouteBuilderInternal(path, { component });
|
|
179
|
+
}
|
|
180
|
+
static from(path, descriptor, dataProvider, actions) {
|
|
181
|
+
return new TableviewRouteBuilderInternal(path, { descriptor, dataProvider, actions });
|
|
185
182
|
}
|
|
186
183
|
}
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LXJvdXRlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JvdXRlci90YWJsZXZpZXctcm91dGUtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsZ0NBQWdDLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEVBQThCLDBCQUEwQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFaEcsT0FBTyxFQUFtQix5QkFBeUIsRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSTdJLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxNQUFNLE9BQU8scUJBQXFCO0lBbUI5QixZQUE0QixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQVpoQyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsU0FBUyxDQUFDO1FBQ3hCLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixhQUFRLEdBQUcsY0FBYyxDQUFDO1FBQzFCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxJQUFJLENBQUM7SUFNa0IsQ0FBQztJQUVyQyxNQUFNLENBQUMsYUFBYSxDQUFrRCxJQUFZLEVBQUUsU0FBa0I7UUFDekcsTUFBTSxJQUFJLEdBQUcsSUFBSSxxQkFBcUIsQ0FBSSxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FDZCxJQUFZLEVBQ1osVUFBb0MsRUFDcEMsWUFBOEMsRUFDOUMsT0FBcUM7UUFFckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxxQkFBcUIsQ0FBUSxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV2QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDL0IsSUFBSSxNQUFNLFlBQVksNkJBQTZCLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQzFCO2lCQUFNLElBQUksTUFBTSxZQUFZLHlCQUF5QixFQUFFO2dCQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzthQUN0QjtpQkFBTSxJQUFJLE1BQU0sWUFBWSwwQkFBMEIsRUFBRTtnQkFDckQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7YUFDdkI7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZLENBQUMsV0FBMEI7UUFDMUMsSUFBSSxXQUFXLEVBQUU7WUFDYixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQTBCLEVBQUUsSUFBYTtRQUMzRSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2pGO1FBQ0QsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUMzQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxXQUEwQixFQUFFLElBQWE7UUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxXQUFXLEVBQUU7WUFDYixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDdkI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsV0FBMEIsRUFBRSxJQUFhO1FBQ3JFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksV0FBVyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksRUFBRSxXQUEwQjtRQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDdEU7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sZUFBZSxDQUFDLElBQW1CLEVBQUUsR0FBa0IsRUFBRSxJQUFtQixFQUFFLEtBQW9CLEVBQUUsT0FBc0I7UUFDN0gsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDekI7UUFDRCxJQUFJLElBQUksRUFBRTtZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxHQUFHLEVBQUU7WUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUNoRTtRQUNELElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDbEU7UUFDRCxJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ3JFO1FBQ0QsSUFBSSxPQUFPLEVBQUU7WUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUN4RTtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSx3QkFBd0IsQ0FBQyxHQUFXLEVBQUUsV0FBeUI7UUFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDekI7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0scUJBQXFCLENBQUMsV0FBMEM7UUFDbkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUs7UUFDUixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRU0sY0FBYztRQUNqQixNQUFNLHFCQUFxQixHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUM7WUFDdkQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtTQUMxRSxDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLFNBQVMsQ0FBQyxTQUFTLEdBQUc7Z0JBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVztnQkFDNUIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFhO2FBQ25DLENBQUM7WUFDRixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2QsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUM5QztTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDO1NBQzFEO1FBQ0QsU0FBUyxDQUFDLGdCQUFnQixHQUFHO1lBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUM1QixDQUFDO1FBQ0YscUJBQXFCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNELHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDbEc7UUFFRCxhQUFhO1FBQ2IsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQy9FLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFDLEdBQUcsU0FBUyxFQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzRCxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2xHO1FBQ0QscUJBQXFCLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFN0QsWUFBWTtRQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2hGLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBQyxHQUFHLFNBQVMsRUFBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzFELFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3hGO1lBQ0QscUJBQXFCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3BGLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBQyxHQUFHLFNBQVMsRUFBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzlELFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQzVGO1lBQ0QscUJBQXFCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDakYsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFDLEdBQUcsU0FBUyxFQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDM0QsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDekY7WUFDRCxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDdkQ7UUFFRCxPQUFPLHFCQUFxQixDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge01uZ0FjdGlvblJvdXRlQ29tcG9uZW50fSBmcm9tICcuLi9jb21wb25lbnRzL2FjdGlvbic7XG5pbXBvcnQge1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzfSBmcm9tICcuLi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtBTW5nVGFibGV2aWV3Um91dGVDb21wb25lbnQsIE1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50fSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxldmlldyc7XG5pbXBvcnQge0lUYWJsZXZpZXdEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGV0YWlsc0Rlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuaW1wb3J0IHtUYWJsZXZpZXdEZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycy90YWJsZXZpZXcnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnN9IGZyb20gJy4uL3NlY3VyaXR5L21vZGVsJztcbmltcG9ydCB7TW5nUm91dGVyRGF0YX0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHtSb3V0ZUJ1aWxkZXJ9IGZyb20gJy4vcm91dGUtYnVpbGRlcic7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZXZpZXdSb3V0ZUJ1aWxkZXI8QyBleHRlbmRzIEFNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudDxhbnksIGFueT4+IHtcbiAgICBwcml2YXRlIGRlc2NyaXB0b3I/OiBUYWJsZXZpZXdEZXNjcmlwdG9yPGFueT47XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXI/OiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPGFueSwgYW55PjtcbiAgICBwcml2YXRlIGFjdGlvbnM/OiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPGFueT4+O1xuXG4gICAgcHJpdmF0ZSBjb21wb25lbnQ/OiBUeXBlPEM+O1xuXG4gICAgcHJpdmF0ZSBoYXNEZXRhaWxzID0gdHJ1ZTtcbiAgICBwcml2YXRlIGRldGFpbHNQYXRoID0gJzppdGVtSWQnO1xuICAgIHByaXZhdGUgaGFzRWRpdCA9IHRydWU7XG4gICAgcHJpdmF0ZSBlZGl0UGF0aCA9ICc6aXRlbUlkL2VkaXQnO1xuICAgIHByaXZhdGUgaGFzQWRkID0gdHJ1ZTtcbiAgICBwcml2YXRlIGFkZFBhdGggPSAnYWRkJztcbiAgICBwcml2YXRlIGhhc0RlbGV0ZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIHBlcm1pc3Npb25zPzoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBBUGVybWlzc2lvbnM7XG4gICAgfTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSBwYXRoOiBzdHJpbmcpIHt9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Db21wb25lbnQ8QyBleHRlbmRzIEFNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudDxhbnksIGFueT4+KHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPEM+KTogVGFibGV2aWV3Um91dGVCdWlsZGVyPEM+IHtcbiAgICAgICAgY29uc3QgaW5zdCA9IG5ldyBUYWJsZXZpZXdSb3V0ZUJ1aWxkZXI8Qz4ocGF0aCk7XG4gICAgICAgIGluc3QuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICByZXR1cm4gaW5zdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb20oXG4gICAgICAgIHBhdGg6IHN0cmluZyxcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxhbnk+LFxuICAgICAgICBkYXRhUHJvdmlkZXI6IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI8YW55LCBhbnk+LFxuICAgICAgICBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPGFueT4+XG4gICAgKTogVGFibGV2aWV3Um91dGVCdWlsZGVyPG5ldmVyPiB7XG4gICAgICAgIGNvbnN0IGluc3QgPSBuZXcgVGFibGV2aWV3Um91dGVCdWlsZGVyPG5ldmVyPihwYXRoKTtcbiAgICAgICAgaW5zdC5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgaW5zdC5kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIGluc3QuYWN0aW9ucyA9IGFjdGlvbnM7XG5cbiAgICAgICAgaW5zdC5oYXNEZXRhaWxzID0gZmFsc2U7XG4gICAgICAgIGluc3QuaGFzQWRkID0gZmFsc2U7XG4gICAgICAgIGluc3QuaGFzRWRpdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBpbnN0LmFjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgIGluc3QuaGFzRGV0YWlscyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBpbnN0Lmhhc0FkZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgaW5zdC5oYXNFZGl0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0O1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVhZE9ubHkocGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnMpOiB0aGlzIHtcbiAgICAgICAgaWYgKHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhQZXJtaXNzaW9ucyhwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aXRoQWRkKGZhbHNlKTtcbiAgICAgICAgdGhpcy53aXRoRWRpdChmYWxzZSk7XG4gICAgICAgIHRoaXMud2l0aERlbGV0ZShmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGV0YWlscyhoYXNEZXRhaWxzID0gdHJ1ZSwgcGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnMsIHBhdGg/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oYXNEZXRhaWxzID0gaGFzRGV0YWlscztcbiAgICAgICAgaWYgKHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhQZXJtaXNzaW9ucyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHBlcm1pc3Npb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxzUGF0aCA9IHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBZGQoaGFzQWRkID0gdHJ1ZSwgcGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnMsIHBhdGg/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oYXNBZGQgPSBoYXNBZGQ7XG4gICAgICAgIGlmIChwZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy53aXRoUGVybWlzc2lvbnModW5kZWZpbmVkLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkUGF0aCA9IHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0KGhhc0VkaXQgPSB0cnVlLCBwZXJtaXNzaW9ucz86IEFQZXJtaXNzaW9ucywgcGF0aD86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhhc0VkaXQgPSBoYXNFZGl0O1xuICAgICAgICBpZiAocGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFBlcm1pc3Npb25zKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFBhdGggPSBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVsZXRlKGhhc0RlbGV0ZSA9IHRydWUsIHBlcm1pc3Npb25zPzogQVBlcm1pc3Npb25zKTogdGhpcyB7XG4gICAgICAgIHRoaXMuaGFzRGVsZXRlID0gaGFzRGVsZXRlO1xuICAgICAgICBpZiAocGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFBlcm1pc3Npb25zKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHBlcm1pc3Npb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBlcm1pc3Npb25zKHJlYWQ/OiBBUGVybWlzc2lvbnMsIGFkZD86IEFQZXJtaXNzaW9ucywgZWRpdD86IEFQZXJtaXNzaW9ucywgZGVsZXQ/OiBBUGVybWlzc2lvbnMsIGRldGFpbHM/OiBBUGVybWlzc2lvbnMpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlYWQpIHtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuUkVBRF0gPSByZWFkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuQUREXSA9IGFkZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWRpdCkge1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5FRElUXSA9IGVkaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlbGV0KSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkRFTEVURV0gPSBkZWxldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGV0YWlscykge1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTXSA9IGRldGFpbHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQZXJtaXNzaW9uQnlDYXRlZ29yeShrZXk6IHN0cmluZywgcGVybWlzc2lvbnM6IEFQZXJtaXNzaW9ucyk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zW2tleV0gPSBwZXJtaXNzaW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQZXJtaXNzaW9uc09iamVjdChwZXJtaXNzaW9uczoge1trZXk6IHN0cmluZ106IEFQZXJtaXNzaW9uc30pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGQoKTogUm91dGUge1xuICAgICAgICByZXR1cm4gdGhpcy50b1JvdXRlQnVpbGRlcigpLmJ1aWxkUm91dGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9Sb3V0ZUJ1aWxkZXIoKTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgY29uc3QgdGFibGV2aWV3Um91dGVCdWlsZGVyID0gUm91dGVCdWlsZGVyLmNyZWF0ZUZyb21Sb3V0ZSh7XG4gICAgICAgICAgICBwYXRoOiB0aGlzLnBhdGgsXG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuY29tcG9uZW50ID8gdGhpcy5jb21wb25lbnQgOiBNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByb3V0ZURhdGE6IE1uZ1JvdXRlckRhdGEgPSB7fTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgcm91dGVEYXRhLnRhYmxldmlldyA9IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOiB0aGlzLmRlc2NyaXB0b3IhLFxuICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlcjogdGhpcy5kYXRhUHJvdmlkZXIhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9ucykge1xuICAgICAgICAgICAgICAgIHJvdXRlRGF0YS50YWJsZXZpZXcuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgcm91dGVEYXRhLnRhYmxldmlld1Blcm1pc3Npb25zID0gey4uLnRoaXMucGVybWlzc2lvbnN9O1xuICAgICAgICB9XG4gICAgICAgIHJvdXRlRGF0YS50YWJsZXZpZXdBY3Rpb25zID0ge1xuICAgICAgICAgICAgaGFzQWRkOiB0aGlzLmhhc0FkZCxcbiAgICAgICAgICAgIGhhc0VkaXQ6IHRoaXMuaGFzRWRpdCxcbiAgICAgICAgICAgIGhhc0RldGFpbHM6IHRoaXMuaGFzRGV0YWlscyxcbiAgICAgICAgICAgIGhhc0RlbGV0ZTogdGhpcy5oYXNEZWxldGVcbiAgICAgICAgfTtcbiAgICAgICAgdGFibGV2aWV3Um91dGVCdWlsZGVyLndpdGhEYXRhKHJvdXRlRGF0YSk7XG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zPy5bVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuUkVBRF0pIHtcbiAgICAgICAgICAgIHRhYmxldmlld1JvdXRlQnVpbGRlci53aXRoUGVybWlzc2lvbnModGhpcy5wZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5SRUFEXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsaXN0IHJvdXRlXG4gICAgICAgIGNvbnN0IHJvb3RDaGlsZFJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGUoJycsIE1uZ0FjdGlvblJvdXRlQ29tcG9uZW50KTtcbiAgICAgICAgcm9vdENoaWxkUm91dGVCdWlsZGVyLndpdGhEYXRhKHsuLi5yb3V0ZURhdGF9KTtcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnM/LltUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5SRUFEXSkge1xuICAgICAgICAgICAgcm9vdENoaWxkUm91dGVCdWlsZGVyLndpdGhQZXJtaXNzaW9ucyh0aGlzLnBlcm1pc3Npb25zW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLlJFQURdKTtcbiAgICAgICAgfVxuICAgICAgICB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXIuYWRkQ2hpbGRCdWlsZGVyKHJvb3RDaGlsZFJvdXRlQnVpbGRlcik7XG5cbiAgICAgICAgLy8gYWRkIHJvdXRlXG4gICAgICAgIGlmICh0aGlzLmhhc0FkZCkge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVCdWlsZGVyID0gUm91dGVCdWlsZGVyLmNyZWF0ZSh0aGlzLmFkZFBhdGgsIE1uZ0FjdGlvblJvdXRlQ29tcG9uZW50KTtcbiAgICAgICAgICAgIHJvdXRlQnVpbGRlci53aXRoRGF0YSh7Li4ucm91dGVEYXRhfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucz8uW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkFERF0pIHtcbiAgICAgICAgICAgICAgICByb3V0ZUJ1aWxkZXIud2l0aFBlcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnNbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuQUREXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXIuYWRkQ2hpbGRCdWlsZGVyKHJvdXRlQnVpbGRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzRGV0YWlscykge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVCdWlsZGVyID0gUm91dGVCdWlsZGVyLmNyZWF0ZSh0aGlzLmRldGFpbHNQYXRoLCBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudCk7XG4gICAgICAgICAgICByb3V0ZUJ1aWxkZXIud2l0aERhdGEoey4uLnJvdXRlRGF0YX0pO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnM/LltUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTXSkge1xuICAgICAgICAgICAgICAgIHJvdXRlQnVpbGRlci53aXRoUGVybWlzc2lvbnModGhpcy5wZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXIuYWRkQ2hpbGRCdWlsZGVyKHJvdXRlQnVpbGRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzRWRpdCkge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVCdWlsZGVyID0gUm91dGVCdWlsZGVyLmNyZWF0ZSh0aGlzLmVkaXRQYXRoLCBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudCk7XG4gICAgICAgICAgICByb3V0ZUJ1aWxkZXIud2l0aERhdGEoey4uLnJvdXRlRGF0YX0pO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnM/LltUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5FRElUXSkge1xuICAgICAgICAgICAgICAgIHJvdXRlQnVpbGRlci53aXRoUGVybWlzc2lvbnModGhpcy5wZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5FRElUXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXIuYWRkQ2hpbGRCdWlsZGVyKHJvdXRlQnVpbGRlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFibGV2aWV3Um91dGVCdWlsZGVyO1xuICAgIH1cbn1cbiJdfQ==
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LXJvdXRlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JvdXRlci90YWJsZXZpZXctcm91dGUtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsZ0NBQWdDLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUc3RSxPQUFPLEVBQW1CLHlCQUF5QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHN0ksT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxZQUFZO0lBa0IzRCxZQUNZLElBQVksRUFDcEIsT0FLRTtRQUVGLEtBQUssQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUkscUJBQXFCLEVBQUMsQ0FBQyxDQUFDO1FBUm5FLFNBQUksR0FBSixJQUFJLENBQVE7UUFmUCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUV6QyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsU0FBUyxDQUFDO1FBQ3hCLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixhQUFRLEdBQUcsY0FBYyxDQUFDO1FBQzFCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFpQnJCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZ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QUMsWUFBWSxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUNqRixZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNwRSxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ2xHO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN0QztRQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxxQkFBcUI7SUFDdkIsTUFBTSxDQUFDLGFBQWEsQ0FBa0QsSUFBWSxFQUFFLFNBQWtCO1FBQ3pHLE9BQU8sSUFBSSw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBSSxDQUNkLElBQVksRUFDWixVQUFvQyxFQUNwQyxZQUE4QyxFQUM5QyxPQUFxQztRQUVyQyxPQUFPLElBQUksNkJBQTZCLENBQUMsSUFBSSxFQUFFLEVBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge01uZ0FjdGlvblJvdXRlQ29tcG9uZW50fSBmcm9tICcuLi9jb21wb25lbnRzL2FjdGlvbic7XG5pbXBvcnQge1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzfSBmcm9tICcuLi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtBTW5nVGFibGV2aWV3Um91dGVDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvdGFibGV2aWV3JztcbmltcG9ydCB7SVRhYmxldmlld0RhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JBZGREZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxldmlldyc7XG5pbXBvcnQge0FQZXJtaXNzaW9uc30gZnJvbSAnLi4vc2VjdXJpdHkvbW9kZWwnO1xuaW1wb3J0IHtSb3V0ZUJ1aWxkZXJ9IGZyb20gJy4vcm91dGUtYnVpbGRlcic7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZXZpZXdSb3V0ZUJ1aWxkZXJJbnRlcm5hbCBleHRlbmRzIFJvdXRlQnVpbGRlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXNjcmlwdG9yPzogVGFibGV2aWV3RGVzY3JpcHRvcjxhbnk+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YVByb3ZpZGVyPzogSVRhYmxldmlld0RhdGFQcm92aWRlcjxhbnksIGFueT47XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25zPzogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxhbnk+PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzRnJvbUNvbXBvbmVudDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBwcml2YXRlIGhhc0RldGFpbHMgPSB0cnVlO1xuICAgIHByaXZhdGUgZGV0YWlsc1BhdGggPSAnOml0ZW1JZCc7XG4gICAgcHJpdmF0ZSBoYXNFZGl0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIGVkaXRQYXRoID0gJzppdGVtSWQvZWRpdCc7XG4gICAgcHJpdmF0ZSBoYXNBZGQgPSB0cnVlO1xuICAgIHByaXZhdGUgYWRkUGF0aCA9ICdhZGQnO1xuICAgIHByaXZhdGUgaGFzRGVsZXRlID0gdHJ1ZTtcblxuICAgIHByaXZhdGUgdGFibGV2aWV3UGVybWlzc2lvbnM/OiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IEFQZXJtaXNzaW9ucztcbiAgICB9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHBhdGg6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczogUGFydGlhbDx7XG4gICAgICAgICAgICBjb21wb25lbnQ6IFR5cGU8YW55PjtcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8YW55PjtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlcjogSVRhYmxldmlld0RhdGFQcm92aWRlcjxhbnksIGFueT47XG4gICAgICAgICAgICBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPGFueT4+O1xuICAgICAgICB9PlxuICAgICkge1xuICAgICAgICBzdXBlcih7cGF0aDogcGF0aCwgY29tcG9uZW50OiBvcHRpb25zLmNvbXBvbmVudCA/PyBUYWJsZXZpZXdSb3V0ZUJ1aWxkZXJ9KTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMuY29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLmlzRnJvbUNvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yID0gb3B0aW9ucy5kZXNjcmlwdG9yO1xuICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXIgPSBvcHRpb25zLmRhdGFQcm92aWRlcjtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucyA9IG9wdGlvbnMuYWN0aW9ucztcblxuICAgICAgICAgICAgdGhpcy5oYXNEZXRhaWxzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmhhc0FkZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oYXNFZGl0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNEZXRhaWxzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JBZGREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0FkZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRWRpdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJlYWRPbmx5KHBlcm1pc3Npb25zPzogQVBlcm1pc3Npb25zKTogdGhpcyB7XG4gICAgICAgIGlmIChwZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy53aXRoUGVybWlzc2lvbnMocGVybWlzc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2l0aEFkZChmYWxzZSk7XG4gICAgICAgIHRoaXMud2l0aEVkaXQoZmFsc2UpO1xuICAgICAgICB0aGlzLndpdGhEZWxldGUoZmFsc2UpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERldGFpbHMoaGFzRGV0YWlscyA9IHRydWUsIHBlcm1pc3Npb25zPzogQVBlcm1pc3Npb25zLCBwYXRoPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuaGFzRGV0YWlscyA9IGhhc0RldGFpbHM7XG4gICAgICAgIGlmIChwZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy53aXRoUGVybWlzc2lvbnModW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsc1BhdGggPSBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWRkKGhhc0FkZCA9IHRydWUsIHBlcm1pc3Npb25zPzogQVBlcm1pc3Npb25zLCBwYXRoPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuaGFzQWRkID0gaGFzQWRkO1xuICAgICAgICBpZiAocGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFBlcm1pc3Npb25zKHVuZGVmaW5lZCwgcGVybWlzc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFBhdGggPSBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRWRpdChoYXNFZGl0ID0gdHJ1ZSwgcGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnMsIHBhdGg/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oYXNFZGl0ID0gaGFzRWRpdDtcbiAgICAgICAgaWYgKHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhQZXJtaXNzaW9ucyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgcGVybWlzc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRQYXRoID0gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlbGV0ZShoYXNEZWxldGUgPSB0cnVlLCBwZXJtaXNzaW9ucz86IEFQZXJtaXNzaW9ucyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhhc0RlbGV0ZSA9IGhhc0RlbGV0ZTtcbiAgICAgICAgaWYgKHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhQZXJtaXNzaW9ucyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhQZXJtaXNzaW9ucyhyZWFkPzogQVBlcm1pc3Npb25zLCBhZGQ/OiBBUGVybWlzc2lvbnMsIGVkaXQ/OiBBUGVybWlzc2lvbnMsIGRlbGV0PzogQVBlcm1pc3Npb25zLCBkZXRhaWxzPzogQVBlcm1pc3Npb25zKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy50YWJsZXZpZXdQZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy50YWJsZXZpZXdQZXJtaXNzaW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWFkKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxldmlld1Blcm1pc3Npb25zW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLlJFQURdID0gcmVhZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWRkKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxldmlld1Blcm1pc3Npb25zW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkFERF0gPSBhZGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVkaXQpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGV2aWV3UGVybWlzc2lvbnNbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuRURJVF0gPSBlZGl0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWxldCkge1xuICAgICAgICAgICAgdGhpcy50YWJsZXZpZXdQZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERUxFVEVdID0gZGVsZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRldGFpbHMpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGV2aWV3UGVybWlzc2lvbnNbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuREVUQUlMU10gPSBkZXRhaWxzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGVybWlzc2lvbkJ5Q2F0ZWdvcnkoa2V5OiBzdHJpbmcsIHBlcm1pc3Npb25zOiBBUGVybWlzc2lvbnMpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxldmlld1Blcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxldmlld1Blcm1pc3Npb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZXZpZXdQZXJtaXNzaW9uc1trZXldID0gcGVybWlzc2lvbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGVybWlzc2lvbnNPYmplY3QocGVybWlzc2lvbnM6IHtba2V5OiBzdHJpbmddOiBBUGVybWlzc2lvbnN9KTogdGhpcyB7XG4gICAgICAgIHRoaXMudGFibGV2aWV3UGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGJ1aWxkKCk6IFJvdXRlIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRnJvbUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZURhdGEudGFibGV2aWV3ID0ge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6IHRoaXMuZGVzY3JpcHRvciEsXG4gICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiB0aGlzLmRhdGFQcm92aWRlciFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZURhdGEudGFibGV2aWV3LmFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFibGV2aWV3UGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVEYXRhLnRhYmxldmlld1Blcm1pc3Npb25zID0gey4uLnRoaXMudGFibGV2aWV3UGVybWlzc2lvbnN9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGVEYXRhLnRhYmxldmlld0FjdGlvbnMgPSB7XG4gICAgICAgICAgICBoYXNBZGQ6IHRoaXMuaGFzQWRkLFxuICAgICAgICAgICAgaGFzRWRpdDogdGhpcy5oYXNFZGl0LFxuICAgICAgICAgICAgaGFzRGV0YWlsczogdGhpcy5oYXNEZXRhaWxzLFxuICAgICAgICAgICAgaGFzRGVsZXRlOiB0aGlzLmhhc0RlbGV0ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLndpdGhEYXRhKHRoaXMucm91dGVEYXRhKTtcbiAgICAgICAgaWYgKHRoaXMudGFibGV2aWV3UGVybWlzc2lvbnM/LltUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5SRUFEXSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZURhdGEucGVybWlzc2lvbnMgPSB0aGlzLnRhYmxldmlld1Blcm1pc3Npb25zW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLlJFQURdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGlzdCByb3V0ZVxuICAgICAgICBjb25zdCByb290Q2hpbGRSb3V0ZUJ1aWxkZXIgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlKCcnLCBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudCk7XG4gICAgICAgIHJvb3RDaGlsZFJvdXRlQnVpbGRlci53aXRoRGF0YSh7Li4udGhpcy5yb3V0ZURhdGF9KTtcbiAgICAgICAgaWYgKHRoaXMudGFibGV2aWV3UGVybWlzc2lvbnM/LltUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5SRUFEXSkge1xuICAgICAgICAgICAgcm9vdENoaWxkUm91dGVCdWlsZGVyLndpdGhQZXJtaXNzaW9ucyh0aGlzLnRhYmxldmlld1Blcm1pc3Npb25zW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLlJFQURdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZENoaWxkQnVpbGRlcihyb290Q2hpbGRSb3V0ZUJ1aWxkZXIpO1xuXG4gICAgICAgIC8vIGFkZCByb3V0ZVxuICAgICAgICBpZiAodGhpcy5oYXNBZGQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGUodGhpcy5hZGRQYXRoLCBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudCk7XG4gICAgICAgICAgICByb3V0ZUJ1aWxkZXIud2l0aERhdGEoey4uLnRoaXMucm91dGVEYXRhfSk7XG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZXZpZXdQZXJtaXNzaW9ucz8uW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkFERF0pIHtcbiAgICAgICAgICAgICAgICByb3V0ZUJ1aWxkZXIud2l0aFBlcm1pc3Npb25zKHRoaXMudGFibGV2aWV3UGVybWlzc2lvbnNbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuQUREXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkQnVpbGRlcihyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc0RldGFpbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGUodGhpcy5kZXRhaWxzUGF0aCwgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICAgICAgcm91dGVCdWlsZGVyLndpdGhEYXRhKHsuLi50aGlzLnJvdXRlRGF0YX0pO1xuICAgICAgICAgICAgaWYgKHRoaXMudGFibGV2aWV3UGVybWlzc2lvbnM/LltUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTXSkge1xuICAgICAgICAgICAgICAgIHJvdXRlQnVpbGRlci53aXRoUGVybWlzc2lvbnModGhpcy50YWJsZXZpZXdQZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkQnVpbGRlcihyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc0VkaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGUodGhpcy5lZGl0UGF0aCwgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICAgICAgcm91dGVCdWlsZGVyLndpdGhEYXRhKHsuLi50aGlzLnJvdXRlRGF0YX0pO1xuICAgICAgICAgICAgaWYgKHRoaXMudGFibGV2aWV3UGVybWlzc2lvbnM/LltUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5FRElUXSkge1xuICAgICAgICAgICAgICAgIHJvdXRlQnVpbGRlci53aXRoUGVybWlzc2lvbnModGhpcy50YWJsZXZpZXdQZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5FRElUXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkQnVpbGRlcihyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLmJ1aWxkKCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3Um91dGVCdWlsZGVyIHtcbiAgICBwdWJsaWMgc3RhdGljIGZyb21Db21wb25lbnQ8QyBleHRlbmRzIEFNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudDxhbnksIGFueT4+KHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPEM+KTogVGFibGV2aWV3Um91dGVCdWlsZGVySW50ZXJuYWwge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxldmlld1JvdXRlQnVpbGRlckludGVybmFsKHBhdGgsIHtjb21wb25lbnR9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb20oXG4gICAgICAgIHBhdGg6IHN0cmluZyxcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxhbnk+LFxuICAgICAgICBkYXRhUHJvdmlkZXI6IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI8YW55LCBhbnk+LFxuICAgICAgICBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPGFueT4+XG4gICAgKTogVGFibGV2aWV3Um91dGVCdWlsZGVySW50ZXJuYWwge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxldmlld1JvdXRlQnVpbGRlckludGVybmFsKHBhdGgsIHtkZXNjcmlwdG9yLCBkYXRhUHJvdmlkZXIsIGFjdGlvbnN9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90eXBlcy9pMThuLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEkxOG5UeXBlID0gJ3JldHVybk51bGwnIHwgJ3JldHVybkZhbGxiYWNrS2V5JyB8ICdyZXR1cm5GaXJzdEtleSc7XG4iXX0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './type.decorator';
|
|
2
2
|
export * from './type.model';
|
|
3
|
-
|
|
3
|
+
export * from './i18n.type';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3R5cGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3R5cGUuZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2kxOG4udHlwZSc7XG4iXX0=
|
|
@@ -151,17 +151,60 @@ export var I18nUtils;
|
|
|
151
151
|
}
|
|
152
152
|
I18nUtils.Model = Model;
|
|
153
153
|
class Action {
|
|
154
|
-
|
|
154
|
+
/**
|
|
155
|
+
* Returns translation for action with given keys and params
|
|
156
|
+
* @param translate TranslateService
|
|
157
|
+
* @param action action descriptor
|
|
158
|
+
* @param actionPathKeys action path keys
|
|
159
|
+
* @param customKey custom key
|
|
160
|
+
* @param item
|
|
161
|
+
* @param fallbackKey fallback key
|
|
162
|
+
* @param params additional params for translation
|
|
163
|
+
* @param missingTranslationStrategy strategy when no translation is found
|
|
164
|
+
*/
|
|
165
|
+
static get(translate, action, actionPathKeys, customKey, item, fallbackKey, params, missingTranslationStrategy = 'returnFirstKey') {
|
|
155
166
|
const keys = I18nUtils.Action.getKeysByPriority(action, actionPathKeys, customKey, fallbackKey);
|
|
156
167
|
const i18nParams = I18nUtils.Action.getParams(translate, action, item, params);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
168
|
+
const i18nValue = I18nUtils.Common.get(translate, i18nParams, ...keys);
|
|
169
|
+
return this.getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey });
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Returns async translation for given keys with given params.
|
|
173
|
+
* @param translate TranslateService
|
|
174
|
+
* @param action action descriptor
|
|
175
|
+
* @param actionPathKeys action path keys
|
|
176
|
+
* @param customKey custom key
|
|
177
|
+
* @param item item
|
|
178
|
+
* @param fallbackKey fallback key, used as fallback key
|
|
179
|
+
* @param params additional params for translation
|
|
180
|
+
* @param missingTranslationStrategy strategy when no translation is found
|
|
181
|
+
*/
|
|
182
|
+
static getAsync(translate, action, actionPathKeys, customKey, item, fallbackKey, params, missingTranslationStrategy = 'returnFirstKey') {
|
|
160
183
|
return I18nUtils.Action.getParamsAsync(translate, action, item, params).pipe(mergeMap(i18nParams => {
|
|
161
184
|
const keys = I18nUtils.Action.getKeysByPriority(action, actionPathKeys, customKey, fallbackKey);
|
|
162
|
-
return I18nUtils.Common.getAsync(translate, i18nParams, ...keys);
|
|
185
|
+
return I18nUtils.Common.getAsync(translate, i18nParams, ...keys).pipe(map(i18nValue => this.getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey })));
|
|
163
186
|
}));
|
|
164
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Returns translation depending on missingTranslationStrategy
|
|
190
|
+
* @param missingTranslationStrategy strategy when no translation is found
|
|
191
|
+
* @param values object with values, i18nValue is translation, firstKey is first key in array of keys, fallbackKey is fallback key
|
|
192
|
+
*/
|
|
193
|
+
static getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nValue, firstKey, fallbackKey }) {
|
|
194
|
+
if (i18nValue !== null) {
|
|
195
|
+
return i18nValue;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
switch (missingTranslationStrategy) {
|
|
199
|
+
case 'returnNull':
|
|
200
|
+
return null;
|
|
201
|
+
case 'returnFallbackKey':
|
|
202
|
+
return fallbackKey ?? null;
|
|
203
|
+
case 'returnFirstKey':
|
|
204
|
+
return firstKey ?? null;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
165
208
|
static getTitleAsync(translate, action, item) {
|
|
166
209
|
return I18nUtils.Action.getAsync(translate, action, 'title', undefined, item);
|
|
167
210
|
}
|
|
@@ -230,4 +273,4 @@ export var I18nUtils;
|
|
|
230
273
|
}
|
|
231
274
|
I18nUtils.Error = Error;
|
|
232
275
|
})(I18nUtils || (I18nUtils = {}));
|
|
233
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9pMThuLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBTTdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFckMsTUFBTSxLQUFXLFNBQVMsQ0FtU3pCO0FBblNELFdBQWlCLFNBQVM7SUFDdEIsTUFBYSxNQUFNO1FBQ1IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUEyQixFQUFFLE1BQVksRUFBRSxHQUFHLElBQW1CO1lBQ3BGLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckcsQ0FBQztRQUVNLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBMkIsRUFBRSxNQUFZLEVBQUUsR0FBRyxJQUFtQjtZQUMvRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3QyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFVLEVBQUUsU0FBYyxFQUFFO1lBQ3JELE1BQU0sU0FBUyxHQUFHLEVBQUMsR0FBRyxNQUFNLEVBQUMsQ0FBQztZQUM5QixJQUFJLElBQUksRUFBRTtnQkFDTixTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzth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QUM7Z0JBQ2xFLElBQUksSUFBSSxFQUFFO29CQUNOLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0o7WUFDRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQWUsRUFBRSxTQUFjLEVBQUU7WUFDckQsTUFBTSxTQUFTLEdBQUcsRUFBQyxHQUFHLE1BQU0sRUFBQyxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBRTVCLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDZCxTQUFTLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7YUFDeEM7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsU0FBUyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3pCLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7YUFDOUQ7WUFDRCxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUN4QixPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO0tBQ0o7SUE5QlksZUFBSyxRQThCakIsQ0FBQTtBQUNMLENBQUMsRUFuU2dCLFNBQVMsS0FBVCxTQUFTLFFBbVN6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge01vZGVsRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuaW1wb3J0IHtNbmdFcnJvcn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7Q2xhc3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1R5cGVVdGlsfSBmcm9tICcuL3R5cGUudXRpbCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgSTE4blV0aWxzIHtcbiAgICBleHBvcnQgY2xhc3MgQ29tbW9uIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHBhcmFtcz86IGFueSwgLi4ua2V5czogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZS5zdHJlYW0oa2V5cywgcGFyYW1zKS5waXBlKG1hcChpMThuID0+IEkxOG5VdGlscy5Db21tb24uc2VsZWN0STE4bihrZXlzLCBpMThuKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwYXJhbXM/OiBhbnksIC4uLmtleXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG4gPSB0cmFuc2xhdGUuaW5zdGFudChrZXlzLCBwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24uc2VsZWN0STE4bihrZXlzLCBpMThuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcG9wdWxhdGVQYXJhbXMoaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zUmVzID0gey4uLnBhcmFtc307XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHBhcmFtc1Jlcy5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJhbXNSZXM7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIHNlbGVjdEkxOG4oa2V5czogc3RyaW5nW10sIGkxOG46IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IGkxOG5ba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTE4bltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIFR5cGUge1xuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzTmFtZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldE5hbWVBc3luYyh0cmFuc2xhdGUsIHR5cGVOYW1lLCBzaW5ndWxhcik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzTmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGNsYXNzVHlwZTogQ2xhc3NUeXBlPGFueT4sIHNpbmd1bGFyPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUoY2xhc3NUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXROYW1lKHRyYW5zbGF0ZSwgdHlwZU5hbWUsIHNpbmd1bGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdHlwZU5hbWU6IHN0cmluZywgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZUtleXModHlwZU5hbWUsIHNpbmd1bGFyKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQ29tbW9uLmdldEFzeW5jKHRyYW5zbGF0ZSwgdW5kZWZpbmVkLCAuLi5rZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lOiBzdHJpbmcsIHNpbmd1bGFyPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IEkxOG5VdGlscy5UeXBlLmdldE5hbWVLZXlzKHR5cGVOYW1lLCBzaW5ndWxhcik7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkNvbW1vbi5nZXQodHJhbnNsYXRlLCB1bmRlZmluZWQsIC4uLmtleXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRDbGFzc1RhYktleShjbGFzc1R5cGU6IENsYXNzVHlwZTxhbnk+LCB0YWI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFRhYktleSh0eXBlTmFtZSwgdGFiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0VGFiS2V5KHR5cGVOYW1lOiBzdHJpbmcsIHRhYjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXRQYXRoKHR5cGVOYW1lLCAndGFicycsIHRhYik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzR3JvdXBLZXkoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgZ3JvdXA6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldEdyb3VwS2V5KHR5cGVOYW1lLCBncm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEdyb3VwS2V5KHR5cGVOYW1lOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsICdncm91cHMnLCBncm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzUHJvcGVydHlLZXkoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgcHJvcGVydHk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFByb3BlcnR5S2V5KHR5cGVOYW1lLCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFByb3BlcnR5S2V5KHR5cGVOYW1lOiBzdHJpbmcsIHByb3BlcnR5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsICdwcm9wZXJ0aWVzJywgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRDbGFzc1BhdGgoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgLi4ucGF0aDogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsIC4uLnBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXRoKHR5cGVOYW1lOiBzdHJpbmcsIC4uLnBhdGg6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIGAke3R5cGVOYW1lfS4ke3BhdGguam9pbignLicpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzUGFyYW1zKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgaXRlbTogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gVHlwZVV0aWwuZmluZFR5cGVOYW1lKGNsYXNzVHlwZSk7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgdHlwZU5hbWUsIGl0ZW0sIHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lPzogc3RyaW5nLCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5UeXBlTmFtZSA9IHR5cGVOYW1lID8gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZSh0cmFuc2xhdGUsIHR5cGVOYW1lLCB0cnVlKSA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUucG9wdWxhdGVQYXJhbXMoaTE4blR5cGVOYW1lID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q2xhc3NQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGNsYXNzVHlwZTogQ2xhc3NUeXBlPGFueT4sIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUoY2xhc3NUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXRQYXJhbXNBc3luYyh0cmFuc2xhdGUsIHR5cGVOYW1lLCBpdGVtLCBwYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lPzogc3RyaW5nLCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgICAgIHJldHVybiAodHlwZU5hbWUgPyBJMThuVXRpbHMuVHlwZS5nZXROYW1lQXN5bmModHJhbnNsYXRlLCB0eXBlTmFtZSwgdHJ1ZSkgOiBvZihudWxsKSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaTE4blR5cGVOYW1lID0+IEkxOG5VdGlscy5UeXBlLnBvcHVsYXRlUGFyYW1zKGkxOG5UeXBlTmFtZSA/PyB1bmRlZmluZWQsIGl0ZW0sIHBhcmFtcykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBwb3B1bGF0ZVBhcmFtcyhpMThuVHlwZU5hbWU/OiBzdHJpbmcsIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zUmVzID0gey4uLnBhcmFtc307XG4gICAgICAgICAgICBpZiAoaTE4blR5cGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLnR5cGVOYW1lID0gaTE4blR5cGVOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24ucG9wdWxhdGVQYXJhbXMoaXRlbSwgcGFyYW1zUmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaXZhdGUgc3RhdGljIGdldE5hbWVLZXlzKHR5cGVOYW1lOiBzdHJpbmcsIHNpbmd1bGFyPzogYm9vbGVhbik6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzaW5ndWxhciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goc2luZ3VsYXIgPyBgJHt0eXBlTmFtZX0ubmFtZVNpbmd1bGFyYCA6IGAke3R5cGVOYW1lfS5uYW1lUGx1cmFsYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXlzLnB1c2goYCR7dHlwZU5hbWV9Lm5hbWVgKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIE1vZGVsIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQoXG4gICAgICAgICAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBrZXlQYXRoOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXN0b21LZXk/OiBzdHJpbmcsXG4gICAgICAgICAgICBpdGVtPzogYW55LFxuICAgICAgICAgICAgZmFsbGJhY2tLZXk/OiBzdHJpbmcsXG4gICAgICAgICAgICBwYXJhbXM/OiBhbnlcbiAgICAgICAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLk1vZGVsLmdldEtleXNCeVByaW9yaXR5KG1vZGVsLCBrZXlQYXRoLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuTW9kZWwuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgbW9kZWwsIGl0ZW0sIHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkNvbW1vbi5nZXQodHJhbnNsYXRlLCBpMThuUGFyYW1zLCAuLi5rZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZSh0cmFuc2xhdGUsIG1vZGVsLmkxOG5CYXNlS2V5LCBzaW5ndWxhcik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldE5hbWVBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZUFzeW5jKHRyYW5zbGF0ZSwgbW9kZWwuaTE4bkJhc2VLZXksIHNpbmd1bGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0UGFyYW1zKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgbW9kZWw/OiBNb2RlbERlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCBpMThuUGFyYW1zID0gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgbW9kZWw/LmkxOG5CYXNlS2V5LCBpdGVtLCBwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Nb2RlbC5wb3B1bGF0ZVBhcmFtcyhtb2RlbD8uaWRQcm9wZXJ0eU5hbWUsIG1vZGVsPy50aXRsZVByb3BlcnR5TmFtZSwgaXRlbSwgaTE4blBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtc0FzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgbW9kZWw/OiBNb2RlbERlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zQXN5bmModHJhbnNsYXRlLCBtb2RlbD8uaTE4bkJhc2VLZXksIGl0ZW0sIHBhcmFtcykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaTE4blBhcmFtcyA9PiBJMThuVXRpbHMuTW9kZWwucG9wdWxhdGVQYXJhbXMobW9kZWw/LmlkUHJvcGVydHlOYW1lLCBtb2RlbD8udGl0bGVQcm9wZXJ0eU5hbWUsIGl0ZW0sIGkxOG5QYXJhbXMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcG9wdWxhdGVQYXJhbXMoaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZywgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXNSZXMgPSB7Li4ucGFyYW1zLCBpdGVtSWQ6ICcnLCBpdGVtVGl0bGU6ICcnfTtcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkUHJvcGVydHkgJiYgaXRlbVtpZFByb3BlcnR5XSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNSZXMuaXRlbUlkID0gaXRlbVtpZFByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlUHJvcGVydHkgJiYgaXRlbVt0aXRsZVByb3BlcnR5XSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNSZXMuaXRlbVRpdGxlID0gaXRlbVt0aXRsZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zUmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZ2V0S2V5c0J5UHJpb3JpdHkobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxhbnk+LCBrZXlQYXRoOiBzdHJpbmcsIGN1c3RvbUtleT86IHN0cmluZywgZmFsbGJhY2tLZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChjdXN0b21LZXkpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3VzdG9tS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsQWN0aW9uS2V5ID0gSTE4blV0aWxzLlR5cGUuZ2V0UGF0aChtb2RlbC5pMThuQmFzZUtleSwgLi4ua2V5UGF0aCk7XG4gICAgICAgICAgICBrZXlzLnB1c2gobW9kZWxBY3Rpb25LZXkpO1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrS2V5KSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbiB7XG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0KFxuICAgICAgICAgICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICAgICAgICAgIGl0ZW0/OiBhbnksXG4gICAgICAgICAgICBmYWxsYmFja0tleT86IHN0cmluZyxcbiAgICAgICAgICAgIHBhcmFtcz86IGFueVxuICAgICAgICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBJMThuVXRpbHMuQWN0aW9uLmdldEtleXNCeVByaW9yaXR5KGFjdGlvbiwgYWN0aW9uUGF0aEtleXMsIGN1c3RvbUtleSwgZmFsbGJhY2tLZXkpO1xuICAgICAgICAgICAgY29uc3QgaTE4blBhcmFtcyA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgYWN0aW9uLCBpdGVtLCBwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24uZ2V0KHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEFzeW5jKFxuICAgICAgICAgICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICAgICAgICAgIGl0ZW0/OiBhbnksXG4gICAgICAgICAgICBmYWxsYmFja0tleT86IHN0cmluZyxcbiAgICAgICAgICAgIHBhcmFtcz86IGFueVxuICAgICAgICApOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQWN0aW9uLmdldFBhcmFtc0FzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCBpdGVtLCBwYXJhbXMpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoaTE4blBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBJMThuVXRpbHMuQWN0aW9uLmdldEtleXNCeVByaW9yaXR5KGFjdGlvbiwgYWN0aW9uUGF0aEtleXMsIGN1c3RvbUtleSwgZmFsbGJhY2tLZXkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkNvbW1vbi5nZXRBc3luYyh0cmFuc2xhdGUsIGkxOG5QYXJhbXMsIC4uLmtleXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRUaXRsZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sIGl0ZW0/OiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQWN0aW9uLmdldEFzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCAndGl0bGUnLCB1bmRlZmluZWQsIGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRFZGl0b3JUaXRsZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPGFueT4sIGl0ZW0/OiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQWN0aW9uLmdldEFzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCBbJ2VkaXRvci50aXRsZScsICd0aXRsZSddLCBhY3Rpb24uZWRpdG9yVGl0bGUgPz8gdW5kZWZpbmVkLCBpdGVtLCB1bmRlZmluZWQsIGFjdGlvbi5lZGl0b3JUaXRsZVBhcmFtcyA/PyB1bmRlZmluZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCBpMThuUGFyYW1zID0gSTE4blV0aWxzLk1vZGVsLmdldFBhcmFtcyh0cmFuc2xhdGUsIGFjdGlvbi5tb2RlbCA/PyB1bmRlZmluZWQsIGl0ZW0sIHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkFjdGlvbi5wb3B1bGF0ZVBhcmFtcyhpMThuUGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0UGFyYW1zQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLk1vZGVsLmdldFBhcmFtc0FzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLm1vZGVsID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKS5waXBlKG1hcChpMThuUGFyYW1zID0+IEkxOG5VdGlscy5BY3Rpb24ucG9wdWxhdGVQYXJhbXMoaTE4blBhcmFtcykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcG9wdWxhdGVQYXJhbXMocGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBwYXJhbXMgPSB7Li4ucGFyYW1zfTtcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBwcml2YXRlIHN0YXRpYyBnZXRLZXlzQnlQcmlvcml0eShhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55PiwgYWN0aW9uUGF0aEtleXM6IHN0cmluZyB8IEFycmF5PHN0cmluZz4sIGN1c3RvbUtleT86IHN0cmluZywgZmFsbGJhY2tLZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChjdXN0b21LZXkpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3VzdG9tS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhY3Rpb25QYXRoS2V5cykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXRoS2V5cyA9IFthY3Rpb25QYXRoS2V5c107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5cy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsQWN0aW9uS2V5ID0gYCR7YWN0aW9uLmkxOG5Nb2RlbEFjdGlvbkJhc2VLZXl9LiR7a31gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbktleSA9IGAke2FjdGlvbi5hY3Rpb25OYW1lfS4ke2t9YDtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2gobW9kZWxBY3Rpb25LZXksIGFjdGlvbktleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmYWxsYmFja0tleSkge1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChmYWxsYmFja0tleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCBjbGFzcyBFcnJvciB7XG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0KHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgZXJyb3I6IE1uZ0Vycm9yLCBwYXJhbXM6IGFueSA9IHt9KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICBjb25zdCBpMThuUGFyYW1zID0gSTE4blV0aWxzLkVycm9yLmdldFBhcmFtcyhlcnJvciwgcGFyYW1zKTtcbiAgICAgICAgICAgIGlmIChlcnJvci5tZXNzYWdlQ29kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbYGVycm9ycy4ke2Vycm9yLm1lc3NhZ2VDb2RlfWAsIGBtZXNzYWdlcy4ke2Vycm9yLm1lc3NhZ2VDb2RlfWBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGkxOG4gPSBJMThuVXRpbHMuQ29tbW9uLmdldCh0cmFuc2xhdGUsIGkxOG5QYXJhbXMsIC4uLmtleXMpO1xuICAgICAgICAgICAgICAgIGlmIChpMThuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpMThuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQ29tbW9uLmdldCh0cmFuc2xhdGUsIGkxOG5QYXJhbXMsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXMoZXJyb3I6IE1uZ0Vycm9yLCBwYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXNSZXMgPSB7Li4ucGFyYW1zfTtcbiAgICAgICAgICAgIHBhcmFtc1Jlcy5lcnJvclN0YXR1cyA9ICcnO1xuICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yTWVzc2FnZSA9ICcnO1xuXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yU3RhdHVzID0gZXJyb3Iuc3RhdHVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNSZXMuZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXNEZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHBhcmFtc1Jlcy5lcnJvclN0YXR1c0Rlc2NyaXB0aW9uID0gZXJyb3Iuc3RhdHVzRGVzY3JpcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJhbXNSZXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXNSZXM7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9pMThuLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBTzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFckMsTUFBTSxLQUFXLFNBQVMsQ0FxVnpCO0FBclZELFdBQWlCLFNBQVM7SUFDdEIsTUFBYSxNQUFNO1FBQ1IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUEyQixFQUFFLE1BQVksRUFBRSxHQUFHLElBQW1CO1lBQ3BGLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckcsQ0FBQztRQUVNLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBMkIsRUFBRSxNQUFZLEVBQUUsR0FBRyxJQUFtQjtZQUMvRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3QyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFVLEVBQUUsU0FBYyxFQUFFO1lBQ3JELE1BQU0sU0FBUyxHQUFHLEVBQUMsR0FBRyxNQUFNLEVBQUMsQ0FBQztZQUM5QixJQUFJLElBQUksRUFBRTtnQkFDTixTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzth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RCxNQUFNLFNBQVMsR0FBRyxFQUFDLEdBQUcsTUFBTSxFQUFDLENBQUM7WUFDOUIsU0FBUyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDM0IsU0FBUyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFFNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNkLFNBQVMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzthQUN4QztZQUNELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDZixTQUFTLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7YUFDMUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDekIsU0FBUyxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQzthQUM5RDtZQUNELFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7S0FDSjtJQTlCWSxlQUFLLFFBOEJqQixDQUFBO0FBQ0wsQ0FBQyxFQXJWZ0IsU0FBUyxLQUFULFNBQVMsUUFxVnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckRlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge01uZ0Vycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtDbGFzc1R5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7STE4blR5cGV9IGZyb20gJy4uL3R5cGVzL2kxOG4udHlwZSc7XG5pbXBvcnQge1R5cGVVdGlsfSBmcm9tICcuL3R5cGUudXRpbCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgSTE4blV0aWxzIHtcbiAgICBleHBvcnQgY2xhc3MgQ29tbW9uIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHBhcmFtcz86IGFueSwgLi4ua2V5czogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZS5zdHJlYW0oa2V5cywgcGFyYW1zKS5waXBlKG1hcChpMThuID0+IEkxOG5VdGlscy5Db21tb24uc2VsZWN0STE4bihrZXlzLCBpMThuKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwYXJhbXM/OiBhbnksIC4uLmtleXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG4gPSB0cmFuc2xhdGUuaW5zdGFudChrZXlzLCBwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24uc2VsZWN0STE4bihrZXlzLCBpMThuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcG9wdWxhdGVQYXJhbXMoaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zUmVzID0gey4uLnBhcmFtc307XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHBhcmFtc1Jlcy5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJhbXNSZXM7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIHNlbGVjdEkxOG4oa2V5czogc3RyaW5nW10sIGkxOG46IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IGkxOG5ba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTE4bltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIFR5cGUge1xuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzTmFtZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldE5hbWVBc3luYyh0cmFuc2xhdGUsIHR5cGVOYW1lLCBzaW5ndWxhcik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzTmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGNsYXNzVHlwZTogQ2xhc3NUeXBlPGFueT4sIHNpbmd1bGFyPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUoY2xhc3NUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXROYW1lKHRyYW5zbGF0ZSwgdHlwZU5hbWUsIHNpbmd1bGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdHlwZU5hbWU6IHN0cmluZywgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZUtleXModHlwZU5hbWUsIHNpbmd1bGFyKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQ29tbW9uLmdldEFzeW5jKHRyYW5zbGF0ZSwgdW5kZWZpbmVkLCAuLi5rZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lOiBzdHJpbmcsIHNpbmd1bGFyPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IEkxOG5VdGlscy5UeXBlLmdldE5hbWVLZXlzKHR5cGVOYW1lLCBzaW5ndWxhcik7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkNvbW1vbi5nZXQodHJhbnNsYXRlLCB1bmRlZmluZWQsIC4uLmtleXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRDbGFzc1RhYktleShjbGFzc1R5cGU6IENsYXNzVHlwZTxhbnk+LCB0YWI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFRhYktleSh0eXBlTmFtZSwgdGFiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0VGFiS2V5KHR5cGVOYW1lOiBzdHJpbmcsIHRhYjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXRQYXRoKHR5cGVOYW1lLCAndGFicycsIHRhYik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzR3JvdXBLZXkoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgZ3JvdXA6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldEdyb3VwS2V5KHR5cGVOYW1lLCBncm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEdyb3VwS2V5KHR5cGVOYW1lOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsICdncm91cHMnLCBncm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzUHJvcGVydHlLZXkoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgcHJvcGVydHk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFByb3BlcnR5S2V5KHR5cGVOYW1lLCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFByb3BlcnR5S2V5KHR5cGVOYW1lOiBzdHJpbmcsIHByb3BlcnR5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsICdwcm9wZXJ0aWVzJywgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRDbGFzc1BhdGgoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgLi4ucGF0aDogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsIC4uLnBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXRoKHR5cGVOYW1lOiBzdHJpbmcsIC4uLnBhdGg6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIGAke3R5cGVOYW1lfS4ke3BhdGguam9pbignLicpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzUGFyYW1zKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgaXRlbTogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gVHlwZVV0aWwuZmluZFR5cGVOYW1lKGNsYXNzVHlwZSk7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgdHlwZU5hbWUsIGl0ZW0sIHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lPzogc3RyaW5nLCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5UeXBlTmFtZSA9IHR5cGVOYW1lID8gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZSh0cmFuc2xhdGUsIHR5cGVOYW1lLCB0cnVlKSA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUucG9wdWxhdGVQYXJhbXMoaTE4blR5cGVOYW1lID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q2xhc3NQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGNsYXNzVHlwZTogQ2xhc3NUeXBlPGFueT4sIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUoY2xhc3NUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXRQYXJhbXNBc3luYyh0cmFuc2xhdGUsIHR5cGVOYW1lLCBpdGVtLCBwYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lPzogc3RyaW5nLCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgICAgIHJldHVybiAodHlwZU5hbWUgPyBJMThuVXRpbHMuVHlwZS5nZXROYW1lQXN5bmModHJhbnNsYXRlLCB0eXBlTmFtZSwgdHJ1ZSkgOiBvZihudWxsKSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaTE4blR5cGVOYW1lID0+IEkxOG5VdGlscy5UeXBlLnBvcHVsYXRlUGFyYW1zKGkxOG5UeXBlTmFtZSA/PyB1bmRlZmluZWQsIGl0ZW0sIHBhcmFtcykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBwb3B1bGF0ZVBhcmFtcyhpMThuVHlwZU5hbWU/OiBzdHJpbmcsIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zUmVzID0gey4uLnBhcmFtc307XG4gICAgICAgICAgICBpZiAoaTE4blR5cGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLnR5cGVOYW1lID0gaTE4blR5cGVOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24ucG9wdWxhdGVQYXJhbXMoaXRlbSwgcGFyYW1zUmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaXZhdGUgc3RhdGljIGdldE5hbWVLZXlzKHR5cGVOYW1lOiBzdHJpbmcsIHNpbmd1bGFyPzogYm9vbGVhbik6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzaW5ndWxhciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goc2luZ3VsYXIgPyBgJHt0eXBlTmFtZX0ubmFtZVNpbmd1bGFyYCA6IGAke3R5cGVOYW1lfS5uYW1lUGx1cmFsYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXlzLnB1c2goYCR7dHlwZU5hbWV9Lm5hbWVgKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIE1vZGVsIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQoXG4gICAgICAgICAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBrZXlQYXRoOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXN0b21LZXk/OiBzdHJpbmcsXG4gICAgICAgICAgICBpdGVtPzogYW55LFxuICAgICAgICAgICAgZmFsbGJhY2tLZXk/OiBzdHJpbmcsXG4gICAgICAgICAgICBwYXJhbXM/OiBhbnlcbiAgICAgICAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLk1vZGVsLmdldEtleXNCeVByaW9yaXR5KG1vZGVsLCBrZXlQYXRoLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuTW9kZWwuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgbW9kZWwsIGl0ZW0sIHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkNvbW1vbi5nZXQodHJhbnNsYXRlLCBpMThuUGFyYW1zLCAuLi5rZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZSh0cmFuc2xhdGUsIG1vZGVsLmkxOG5CYXNlS2V5LCBzaW5ndWxhcik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldE5hbWVBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZUFzeW5jKHRyYW5zbGF0ZSwgbW9kZWwuaTE4bkJhc2VLZXksIHNpbmd1bGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0UGFyYW1zKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgbW9kZWw/OiBNb2RlbERlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCBpMThuUGFyYW1zID0gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgbW9kZWw/LmkxOG5CYXNlS2V5LCBpdGVtLCBwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Nb2RlbC5wb3B1bGF0ZVBhcmFtcyhtb2RlbD8uaWRQcm9wZXJ0eU5hbWUsIG1vZGVsPy50aXRsZVByb3BlcnR5TmFtZSwgaXRlbSwgaTE4blBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtc0FzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgbW9kZWw/OiBNb2RlbERlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zQXN5bmModHJhbnNsYXRlLCBtb2RlbD8uaTE4bkJhc2VLZXksIGl0ZW0sIHBhcmFtcykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaTE4blBhcmFtcyA9PiBJMThuVXRpbHMuTW9kZWwucG9wdWxhdGVQYXJhbXMobW9kZWw/LmlkUHJvcGVydHlOYW1lLCBtb2RlbD8udGl0bGVQcm9wZXJ0eU5hbWUsIGl0ZW0sIGkxOG5QYXJhbXMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcG9wdWxhdGVQYXJhbXMoaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZywgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXNSZXMgPSB7Li4ucGFyYW1zLCBpdGVtSWQ6ICcnLCBpdGVtVGl0bGU6ICcnfTtcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkUHJvcGVydHkgJiYgaXRlbVtpZFByb3BlcnR5XSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNSZXMuaXRlbUlkID0gaXRlbVtpZFByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlUHJvcGVydHkgJiYgaXRlbVt0aXRsZVByb3BlcnR5XSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNSZXMuaXRlbVRpdGxlID0gaXRlbVt0aXRsZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zUmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZ2V0S2V5c0J5UHJpb3JpdHkobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxhbnk+LCBrZXlQYXRoOiBzdHJpbmcsIGN1c3RvbUtleT86IHN0cmluZywgZmFsbGJhY2tLZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChjdXN0b21LZXkpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3VzdG9tS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsQWN0aW9uS2V5ID0gSTE4blV0aWxzLlR5cGUuZ2V0UGF0aChtb2RlbC5pMThuQmFzZUtleSwgLi4ua2V5UGF0aCk7XG4gICAgICAgICAgICBrZXlzLnB1c2gobW9kZWxBY3Rpb25LZXkpO1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrS2V5KSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRyYW5zbGF0aW9uIGZvciBhY3Rpb24gd2l0aCBnaXZlbiBrZXlzIGFuZCBwYXJhbXNcbiAgICAgICAgICogQHBhcmFtIHRyYW5zbGF0ZSBUcmFuc2xhdGVTZXJ2aWNlXG4gICAgICAgICAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uIGRlc2NyaXB0b3JcbiAgICAgICAgICogQHBhcmFtIGFjdGlvblBhdGhLZXlzIGFjdGlvbiBwYXRoIGtleXNcbiAgICAgICAgICogQHBhcmFtIGN1c3RvbUtleSBjdXN0b20ga2V5XG4gICAgICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICAgICAqIEBwYXJhbSBmYWxsYmFja0tleSBmYWxsYmFjayBrZXlcbiAgICAgICAgICogQHBhcmFtIHBhcmFtcyBhZGRpdGlvbmFsIHBhcmFtcyBmb3IgdHJhbnNsYXRpb25cbiAgICAgICAgICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAgICAgICAgICovXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0KFxuICAgICAgICAgICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICAgICAgICAgIGl0ZW0/OiBhbnksXG4gICAgICAgICAgICBmYWxsYmFja0tleT86IHN0cmluZyxcbiAgICAgICAgICAgIHBhcmFtcz86IGFueSxcbiAgICAgICAgICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuVHlwZSA9ICdyZXR1cm5GaXJzdEtleSdcbiAgICAgICAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLkFjdGlvbi5nZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGFjdGlvblBhdGhLZXlzLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuQWN0aW9uLmdldFBhcmFtcyh0cmFuc2xhdGUsIGFjdGlvbiwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5WYWx1ZSA9IEkxOG5VdGlscy5Db21tb24uZ2V0KHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbkRlcGVuZGluZ09uU3RyYXRlZ3kobWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3ksIHtpMThuVmFsdWUsIGZpcnN0S2V5OiBrZXlzWzBdLCBmYWxsYmFja0tleX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYXN5bmMgdHJhbnNsYXRpb24gZm9yIGdpdmVuIGtleXMgd2l0aCBnaXZlbiBwYXJhbXMuXG4gICAgICAgICAqIEBwYXJhbSB0cmFuc2xhdGUgVHJhbnNsYXRlU2VydmljZVxuICAgICAgICAgKiBAcGFyYW0gYWN0aW9uIGFjdGlvbiBkZXNjcmlwdG9yXG4gICAgICAgICAqIEBwYXJhbSBhY3Rpb25QYXRoS2V5cyBhY3Rpb24gcGF0aCBrZXlzXG4gICAgICAgICAqIEBwYXJhbSBjdXN0b21LZXkgY3VzdG9tIGtleVxuICAgICAgICAgKiBAcGFyYW0gaXRlbSBpdGVtXG4gICAgICAgICAqIEBwYXJhbSBmYWxsYmFja0tleSBmYWxsYmFjayBrZXksIHVzZWQgYXMgZmFsbGJhY2sga2V5XG4gICAgICAgICAqIEBwYXJhbSBwYXJhbXMgYWRkaXRpb25hbCBwYXJhbXMgZm9yIHRyYW5zbGF0aW9uXG4gICAgICAgICAqIEBwYXJhbSBtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSBzdHJhdGVneSB3aGVuIG5vIHRyYW5zbGF0aW9uIGlzIGZvdW5kXG4gICAgICAgICAqL1xuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEFzeW5jKFxuICAgICAgICAgICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICAgICAgICAgIGl0ZW0/OiBhbnksXG4gICAgICAgICAgICBmYWxsYmFja0tleT86IHN0cmluZyxcbiAgICAgICAgICAgIHBhcmFtcz86IGFueSxcbiAgICAgICAgICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuVHlwZSA9ICdyZXR1cm5GaXJzdEtleSdcbiAgICAgICAgKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkFjdGlvbi5nZXRQYXJhbXNBc3luYyh0cmFuc2xhdGUsIGFjdGlvbiwgaXRlbSwgcGFyYW1zKS5waXBlKFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKGkxOG5QYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLkFjdGlvbi5nZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGFjdGlvblBhdGhLZXlzLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24uZ2V0QXN5bmModHJhbnNsYXRlLCBpMThuUGFyYW1zLCAuLi5rZXlzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGkxOG5WYWx1ZSA9PiB0aGlzLmdldFRyYW5zbGF0aW9uRGVwZW5kaW5nT25TdHJhdGVneShtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSwge2kxOG5WYWx1ZSwgZmlyc3RLZXk6IGtleXNbMF0sIGZhbGxiYWNrS2V5fSkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0cmFuc2xhdGlvbiBkZXBlbmRpbmcgb24gbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3lcbiAgICAgICAgICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAgICAgICAgICogQHBhcmFtIHZhbHVlcyBvYmplY3Qgd2l0aCB2YWx1ZXMsIGkxOG5WYWx1ZSBpcyB0cmFuc2xhdGlvbiwgZmlyc3RLZXkgaXMgZmlyc3Qga2V5IGluIGFycmF5IG9mIGtleXMsIGZhbGxiYWNrS2V5IGlzIGZhbGxiYWNrIGtleVxuICAgICAgICAgKi9cbiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZ2V0VHJhbnNsYXRpb25EZXBlbmRpbmdPblN0cmF0ZWd5KFxuICAgICAgICAgICAgbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3k6IEkxOG5UeXBlLFxuICAgICAgICAgICAge2kxOG5WYWx1ZSwgZmlyc3RLZXksIGZhbGxiYWNrS2V5fToge2kxOG5WYWx1ZTogc3RyaW5nIHwgbnVsbDsgZmlyc3RLZXk/OiBzdHJpbmc7IGZhbGxiYWNrS2V5Pzogc3RyaW5nfVxuICAgICAgICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGlmIChpMThuVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTE4blZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JldHVybk51bGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JldHVybkZhbGxiYWNrS2V5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFja0tleSA/PyBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXR1cm5GaXJzdEtleSc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RLZXkgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModHJhbnNsYXRlLCBhY3Rpb24sICd0aXRsZScsIHVuZGVmaW5lZCwgaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEVkaXRvclRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModHJhbnNsYXRlLCBhY3Rpb24sIFsnZWRpdG9yLnRpdGxlJywgJ3RpdGxlJ10sIGFjdGlvbi5lZGl0b3JUaXRsZSA/PyB1bmRlZmluZWQsIGl0ZW0sIHVuZGVmaW5lZCwgYWN0aW9uLmVkaXRvclRpdGxlUGFyYW1zID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuTW9kZWwuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgYWN0aW9uLm1vZGVsID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQWN0aW9uLnBvcHVsYXRlUGFyYW1zKGkxOG5QYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuTW9kZWwuZ2V0UGFyYW1zQXN5bmModHJhbnNsYXRlLCBhY3Rpb24ubW9kZWwgPz8gdW5kZWZpbmVkLCBpdGVtLCBwYXJhbXMpLnBpcGUobWFwKGkxOG5QYXJhbXMgPT4gSTE4blV0aWxzLkFjdGlvbi5wb3B1bGF0ZVBhcmFtcyhpMThuUGFyYW1zKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBwb3B1bGF0ZVBhcmFtcyhwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHsuLi5wYXJhbXN9O1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIHByaXZhdGUgc3RhdGljIGdldEtleXNCeVByaW9yaXR5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LCBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPiwgY3VzdG9tS2V5Pzogc3RyaW5nLCBmYWxsYmFja0tleT86IHN0cmluZykge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgaWYgKGN1c3RvbUtleSkge1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChjdXN0b21LZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFjdGlvblBhdGhLZXlzKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhdGhLZXlzID0gW2FjdGlvblBhdGhLZXlzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGlvblBhdGhLZXlzLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxBY3Rpb25LZXkgPSBgJHthY3Rpb24uaTE4bk1vZGVsQWN0aW9uQmFzZUtleX0uJHtrfWA7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uS2V5ID0gYCR7YWN0aW9uLmFjdGlvbk5hbWV9LiR7a31gO1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChtb2RlbEFjdGlvbktleSwgYWN0aW9uS2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrS2V5KSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIEVycm9yIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBlcnJvcjogTW5nRXJyb3IsIHBhcmFtczogYW55ID0ge30pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuRXJyb3IuZ2V0UGFyYW1zKGVycm9yLCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2VDb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtgZXJyb3JzLiR7ZXJyb3IubWVzc2FnZUNvZGV9YCwgYG1lc3NhZ2VzLiR7ZXJyb3IubWVzc2FnZUNvZGV9YF07XG4gICAgICAgICAgICAgICAgY29uc3QgaTE4biA9IEkxOG5VdGlscy5Db21tb24uZ2V0KHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgICAgICAgICAgICAgaWYgKGkxOG4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkxOG47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24uZ2V0KHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyhlcnJvcjogTW5nRXJyb3IsIHBhcmFtczogYW55ID0ge30pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtc1JlcyA9IHsuLi5wYXJhbXN9O1xuICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yU3RhdHVzID0gJyc7XG4gICAgICAgICAgICBwYXJhbXNSZXMuZXJyb3JNZXNzYWdlID0gJyc7XG5cbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNSZXMuZXJyb3JTdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHBhcmFtc1Jlcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1c0Rlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yU3RhdHVzRGVzY3JpcHRpb24gPSBlcnJvci5zdGF0dXNEZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtc1Jlcy5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtc1JlcztcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|