@ngrdt/router 0.0.7 → 0.0.9
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/README.md +229 -28
- package/esm2022/lib/rdt-route/rdt-angular-route.mjs +11 -6
- package/esm2022/lib/rdt-route/rdt-route.mjs +93 -14
- package/esm2022/lib/rdt-route/utils.mjs +15 -2
- package/esm2022/lib/services/rdt-cannot-be-entered.token.mjs +6 -2
- package/esm2022/lib/services/rdt-router.service.mjs +3 -2
- package/fesm2022/ngrdt-router.mjs +120 -19
- package/fesm2022/ngrdt-router.mjs.map +1 -1
- package/lib/rdt-route/rdt-route.d.ts +85 -3
- package/lib/rdt-route/utils.d.ts +11 -0
- package/lib/services/rdt-cannot-be-entered.token.d.ts +6 -1
- package/lib/services/rdt-router.service.d.ts +5 -4
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { runInInjectionContext } from '@angular/core';
|
|
1
2
|
import { RdtStringUtils } from '@ngrdt/utils';
|
|
2
3
|
import { RdtAngularRoute } from './rdt-angular-route';
|
|
3
|
-
import {
|
|
4
|
+
import { RdtReadonlyParameters } from './utils';
|
|
4
5
|
export function ALWAYS_TRUE() {
|
|
5
6
|
return true;
|
|
6
7
|
}
|
|
@@ -19,30 +20,60 @@ export class RdtRoute {
|
|
|
19
20
|
_entryDisabled = false;
|
|
20
21
|
_canBeEntered = ALWAYS_TRUE;
|
|
21
22
|
_absoluteRegex;
|
|
23
|
+
/**
|
|
24
|
+
* Map of parameters and their types.
|
|
25
|
+
*/
|
|
22
26
|
get paramMap() {
|
|
23
27
|
return this._paramMap;
|
|
24
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Human readable name for display in breadcrumbs, title, etc.
|
|
31
|
+
*/
|
|
25
32
|
get name() {
|
|
26
33
|
return this._name;
|
|
27
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Path of the route relative to parent route.
|
|
37
|
+
*/
|
|
28
38
|
get path() {
|
|
29
39
|
return this._path;
|
|
30
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Parent route.
|
|
43
|
+
*/
|
|
31
44
|
get parent() {
|
|
32
45
|
return this._parent;
|
|
33
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Child routes.
|
|
49
|
+
*/
|
|
34
50
|
get children() {
|
|
35
51
|
return this._children;
|
|
36
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Absolute path of parent route or '/' if there is no parent.
|
|
55
|
+
* Hostname excluded.
|
|
56
|
+
*/
|
|
37
57
|
get basePath() {
|
|
38
58
|
return this._parent ? this._parent.absolutePath : '/';
|
|
39
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Absolute path of the route. Hostname excluded.
|
|
62
|
+
*/
|
|
40
63
|
get absolutePath() {
|
|
41
64
|
return RdtStringUtils.joinPaths(this.basePath, this._path);
|
|
42
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Regular expression route path relative to parent route.
|
|
68
|
+
* Hostname excluded.
|
|
69
|
+
*/
|
|
43
70
|
get regex() {
|
|
44
71
|
return this._regex;
|
|
45
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Regular expression to match only this route (not children
|
|
75
|
+
* or parent routes). Hostname excluded.
|
|
76
|
+
*/
|
|
46
77
|
get absoluteRegex() {
|
|
47
78
|
if (this._absoluteRegex) {
|
|
48
79
|
return this._absoluteRegex;
|
|
@@ -57,30 +88,57 @@ export class RdtRoute {
|
|
|
57
88
|
}
|
|
58
89
|
return this._absoluteRegex;
|
|
59
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Denotes disabled route entry.
|
|
93
|
+
* If true, route should have no NgModule
|
|
94
|
+
* or component and only serves as virtual module
|
|
95
|
+
* for breadcrumb.
|
|
96
|
+
*/
|
|
60
97
|
get entryDisabled() {
|
|
61
98
|
return this._entryDisabled;
|
|
62
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Statically set state params used when navigating to this instance.
|
|
102
|
+
*/
|
|
63
103
|
get stateParams() {
|
|
64
104
|
return this._stateParams;
|
|
65
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Statically set query params used when navigating to this instance.
|
|
108
|
+
*/
|
|
66
109
|
get queryParams() {
|
|
67
110
|
return this._queryParams;
|
|
68
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* @param url Absolute path to test.
|
|
114
|
+
* @returns True if url matches this route.
|
|
115
|
+
*/
|
|
69
116
|
testUrl(url) {
|
|
70
117
|
return this.absoluteRegex.test(url);
|
|
71
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Statically set parameters used when navigating to this instance.
|
|
121
|
+
*/
|
|
72
122
|
get staticParams() {
|
|
73
123
|
return { ...this._staticParams };
|
|
74
124
|
}
|
|
75
125
|
get hasCanBeEnteredGuard() {
|
|
76
126
|
return this._canBeEntered !== ALWAYS_TRUE;
|
|
77
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Meta guard that is used by [rdtRouterLink] and RdtMenu
|
|
130
|
+
* to determine if route can be entered.
|
|
131
|
+
* @param injector Environment or custom injector.
|
|
132
|
+
* @returns True if route can be entered.
|
|
133
|
+
*/
|
|
78
134
|
canBeEntered(injector) {
|
|
79
135
|
return injector
|
|
80
136
|
? runInInjectionContext(injector, this._canBeEntered)
|
|
81
137
|
: this._canBeEntered();
|
|
82
138
|
}
|
|
83
|
-
|
|
139
|
+
/**
|
|
140
|
+
* Extracts url parameters from absolute path for this path and each parent.
|
|
141
|
+
*/
|
|
84
142
|
parseAbsoluteUrl(url) {
|
|
85
143
|
const reg = this.absoluteRegex;
|
|
86
144
|
if (!reg.test(url)) {
|
|
@@ -89,7 +147,13 @@ export class RdtRoute {
|
|
|
89
147
|
const matches = reg.exec(url);
|
|
90
148
|
if (matches) {
|
|
91
149
|
const values = matches.slice(1).reverse();
|
|
92
|
-
|
|
150
|
+
const obj = this.fill(values);
|
|
151
|
+
if (obj) {
|
|
152
|
+
return new RdtReadonlyParameters(obj);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
93
157
|
}
|
|
94
158
|
else {
|
|
95
159
|
return null;
|
|
@@ -113,6 +177,12 @@ export class RdtRoute {
|
|
|
113
177
|
}
|
|
114
178
|
return res;
|
|
115
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Fills parameters in path with values from paramMap.
|
|
182
|
+
* Use withStaticParams() beforehand in case parent paths contain parameters.
|
|
183
|
+
* @param paramMap Must contain all parameters for this route.
|
|
184
|
+
* @returns Absolute path.
|
|
185
|
+
*/
|
|
116
186
|
createAbsoluteUrl(paramMap = this._staticParams) {
|
|
117
187
|
if (!this._parent) {
|
|
118
188
|
return this.createUrl(this.absolutePath, paramMap);
|
|
@@ -144,17 +214,23 @@ export class RdtRoute {
|
|
|
144
214
|
}
|
|
145
215
|
return new RdtAngularRoute(this);
|
|
146
216
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
217
|
+
/**
|
|
218
|
+
* Provides static mapping for parameter names tableName -> urlName.
|
|
219
|
+
* Returns new instance of RdtRoute<T> that is clone of
|
|
220
|
+
* this route and its parents (NOT children).
|
|
221
|
+
* @returns Clone of this route with mapped parameter names.
|
|
222
|
+
*/
|
|
150
223
|
withParamMappings(mappings) {
|
|
151
224
|
const clone = this.clone();
|
|
152
225
|
clone.paramMappings = mappings;
|
|
153
226
|
return clone;
|
|
154
227
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
228
|
+
/**
|
|
229
|
+
* Sets parameters for itself or parents.
|
|
230
|
+
* Returns new instance of RdtRoute<T> that is clone of
|
|
231
|
+
* this route and its parents (NOT children).
|
|
232
|
+
* @returns Clone of this route with static parameters set.
|
|
233
|
+
*/
|
|
158
234
|
withStaticParams(param1, param2) {
|
|
159
235
|
const clone = this.clone();
|
|
160
236
|
if (param2) {
|
|
@@ -182,8 +258,9 @@ export class RdtRoute {
|
|
|
182
258
|
clone._stateParams = { ...stateParams };
|
|
183
259
|
return clone;
|
|
184
260
|
}
|
|
185
|
-
|
|
186
|
-
|
|
261
|
+
/**
|
|
262
|
+
* @returns Partial of object that only contains properties necessary to create this route.
|
|
263
|
+
*/
|
|
187
264
|
extractRouteParams(row) {
|
|
188
265
|
const res = {};
|
|
189
266
|
this.orderedParams.forEach((param) => {
|
|
@@ -195,8 +272,10 @@ export class RdtRoute {
|
|
|
195
272
|
});
|
|
196
273
|
return res;
|
|
197
274
|
}
|
|
198
|
-
|
|
199
|
-
|
|
275
|
+
/**
|
|
276
|
+
* @returns New instance of RdtRoute<T> that is clone of
|
|
277
|
+
* this route and its parents (NOT children).
|
|
278
|
+
*/
|
|
200
279
|
clone() {
|
|
201
280
|
const clone = new RdtRoute();
|
|
202
281
|
clone._name = this._name;
|
|
@@ -211,4 +290,4 @@ export class RdtRoute {
|
|
|
211
290
|
return clone;
|
|
212
291
|
}
|
|
213
292
|
}
|
|
214
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3JkdC1yb3V0ZS9yZHQtcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFZLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sT0FBTyxRQUFRO0lBQ1QsYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUM3QixTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxNQUFNLENBQVU7SUFDaEIsYUFBYSxHQUFtQixFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFlLEVBQUUsQ0FBQztJQUMvQixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFFMUIsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFVO0lBQ2YsT0FBTyxHQUFvQixJQUFJLENBQUM7SUFDaEMsU0FBUyxHQUFlLEVBQUUsQ0FBQztJQUMzQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLGFBQWEsR0FBa0IsV0FBVyxDQUFDO0lBRTdDLGNBQWMsQ0FBVTtJQUVoQyxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJ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R0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCw2Q0FBNkM7SUFDN0MsS0FBSztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUksUUFBUSxFQUFLLENBQUM7UUFDaEMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDOUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZHRTdHJpbmdVdGlscyB9IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IFN0YXRpY1JvdXRlUGFyYW1zLCBQYXJhbU1hcHBpbmcsIFBhcmFtVHlwZU1hcCB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgeyBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRBbmd1bGFyUm91dGUgfSBmcm9tICcuL3JkdC1hbmd1bGFyLXJvdXRlJztcclxuaW1wb3J0IHsgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFMV0FZU19UUlVFKCkge1xyXG4gIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmR0Um91dGU8VCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xyXG4gIHByb3RlY3RlZCBvcmRlcmVkUGFyYW1zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHByb3RlY3RlZCBfcGFyYW1NYXA6IFBhcmFtVHlwZU1hcDxUPiA9IHt9O1xyXG4gIHByb3RlY3RlZCBfcmVnZXghOiBSZWdFeHA7XHJcbiAgcHJvdGVjdGVkIHBhcmFtTWFwcGluZ3M6IFBhcmFtTWFwcGluZ1tdID0gW107XHJcbiAgcHJvdGVjdGVkIF9zdGF0aWNQYXJhbXM6IFBhcnRpYWw8VD4gPSB7fTtcclxuICBwcm90ZWN0ZWQgX3F1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcclxuICBwcm90ZWN0ZWQgX3N0YXRlUGFyYW1zOiBQYXJhbXMgPSB7fTtcclxuXHJcbiAgcHJvdGVjdGVkIF9uYW1lITogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfcGF0aCE6IHN0cmluZztcclxuICBwcm90ZWN0ZWQgX3BhcmVudDogUmR0Um91dGUgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgX2NoaWxkcmVuOiBSZHRSb3V0ZVtdID0gW107XHJcbiAgcHJvdGVjdGVkIF9lbnRyeURpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIF9jYW5CZUVudGVyZWQ6ICgpID0+IGJvb2xlYW4gPSBBTFdBWVNfVFJVRTtcclxuXHJcbiAgcHJpdmF0ZSBfYWJzb2x1dGVSZWdleD86IFJlZ0V4cDtcclxuXHJcbiAgZ2V0IHBhcmFtTWFwKCk6IFJlYWRvbmx5PFBhcmFtVHlwZU1hcDxUPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtTWFwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcclxuICB9XHJcblxyXG4gIGdldCBwYXRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdGg7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFyZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICB9XHJcblxyXG4gIGdldCBjaGlsZHJlbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIGdldCBiYXNlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5hYnNvbHV0ZVBhdGggOiAnLyc7XHJcbiAgfVxyXG5cclxuICBnZXQgYWJzb2x1dGVQYXRoKCkge1xyXG4gICAgcmV0dXJuIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocyh0aGlzLmJhc2VQYXRoLCB0aGlzLl9wYXRoKTtcclxuICB9XHJcblxyXG4gIGdldCByZWdleCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWdleDtcclxuICB9XHJcblxyXG4gIGdldCBhYnNvbHV0ZVJlZ2V4KCk6IFJlZ0V4cCB7XHJcbiAgICBpZiAodGhpcy5fYWJzb2x1dGVSZWdleCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVSZWdleDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgIC8vIFJlbW92ZSBpbml0aWFsIF4gYW5kIGVuZGluZyAkXHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3BhcmVudC5hYnNvbHV0ZVJlZ2V4LnNvdXJjZS5zbGljZSgxLCAtMSk7XHJcbiAgICAgIHRoaXMuX2Fic29sdXRlUmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICdeJyArIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocyhwYXJlbnQsIHRoaXMuX3JlZ2V4LnNvdXJjZSkgKyAnJCdcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2Fic29sdXRlUmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICdeJyArIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocygnLycsIHRoaXMuX3JlZ2V4LnNvdXJjZSkgKyAnJCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9hYnNvbHV0ZVJlZ2V4O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVudHJ5RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW50cnlEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGdldCBzdGF0ZVBhcmFtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0ZVBhcmFtcztcclxuICB9XHJcblxyXG4gIGdldCBxdWVyeVBhcmFtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9xdWVyeVBhcmFtcztcclxuICB9XHJcblxyXG4gIHRlc3RVcmwodXJsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFic29sdXRlUmVnZXgudGVzdCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXRpY1BhcmFtcygpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuX3N0YXRpY1BhcmFtcyB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0NhbkJlRW50ZXJlZEd1YXJkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbkJlRW50ZXJlZCAhPT0gQUxXQVlTX1RSVUU7XHJcbiAgfVxyXG5cclxuICBjYW5CZUVudGVyZWQoaW5qZWN0b3I/OiBJbmplY3Rvcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGluamVjdG9yXHJcbiAgICAgID8gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCB0aGlzLl9jYW5CZUVudGVyZWQpXHJcbiAgICAgIDogdGhpcy5fY2FuQmVFbnRlcmVkKCk7XHJcbiAgfVxyXG5cclxuICAvLyBFeHRyYWN0cyB1cmwgcGFyYW1ldGVycyBmcm9tIGFic29sdXRlIHVybC5cclxuICBwYXJzZUFic29sdXRlVXJsKHVybDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwge1xyXG4gICAgY29uc3QgcmVnID0gdGhpcy5hYnNvbHV0ZVJlZ2V4O1xyXG4gICAgaWYgKCFyZWcudGVzdCh1cmwpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlZy5leGVjKHVybCk7XHJcbiAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICBjb25zdCB2YWx1ZXMgPSBtYXRjaGVzLnNsaWNlKDEpLnJldmVyc2UoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZmlsbCh2YWx1ZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbGwodmFsdWVzOiBzdHJpbmdbXSwgcmVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcclxuICAgIGNvbnN0IHBhcmFtczogeyBba2V5IGluIGtleW9mIFRdPzogc3RyaW5nIHwgbnVtYmVyIH0gPSB7fTtcclxuICAgIGNvbnN0IHJldmVyc2VkUGFyYW1zID0gdGhpcy5vcmRlcmVkUGFyYW1zLnNsaWNlKCkucmV2ZXJzZSgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXZlcnNlZFBhcmFtcy5sZW5ndGggJiYgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBrZXkgPSByZXZlcnNlZFBhcmFtc1tpXSBhcyBrZXlvZiBUO1xyXG4gICAgICBjb25zdCBtYXBwZWRLZXkgPVxyXG4gICAgICAgIHRoaXMucGFyYW1NYXBwaW5ncy5maW5kKChtKSA9PiBtLnVybE5hbWUgPT09IGtleSk/LnRhYmxlTmFtZSA/PyBrZXk7XHJcbiAgICAgIGxldCB2YWw6IHN0cmluZyB8IG51bWJlciA9IHZhbHVlc1tpXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9wYXJhbU1hcFtrZXldID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHZhbCA9IHBhcnNlSW50KHZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgcGFyYW1zW21hcHBlZEtleSBhcyBrZXlvZiBUXSA9IHZhbDtcclxuICAgIH1cclxuICAgIHJlc1t0aGlzLmFic29sdXRlUGF0aF0gPSBwYXJhbXM7XHJcblxyXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPiByZXZlcnNlZFBhcmFtcy5sZW5ndGggJiYgdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgIHRoaXMuX3BhcmVudC5maWxsKHZhbHVlcy5zbGljZShyZXZlcnNlZFBhcmFtcy5sZW5ndGgpLCByZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFic29sdXRlVXJsKHBhcmFtTWFwOiBQYXJ0aWFsPFQ+ID0gdGhpcy5fc3RhdGljUGFyYW1zKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVVybCh0aGlzLmFic29sdXRlUGF0aCwgcGFyYW1NYXApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocyhcclxuICAgICAgICB0aGlzLl9wYXJlbnQuY3JlYXRlQWJzb2x1dGVVcmwoKSxcclxuICAgICAgICB0aGlzLmNyZWF0ZVJlbGF0aXZlVXJsKHBhcmFtTWFwKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlUmVsYXRpdmVVcmwocGFyYW1NYXA6IFBhcnRpYWw8VD4gPSB0aGlzLl9zdGF0aWNQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVVybCh0aGlzLnBhdGgsIHBhcmFtTWFwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVXJsKHBhdGg6IHN0cmluZywgcGFyYW1NYXA6IFBhcnRpYWw8VD4pIHtcclxuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9wYXJhbU1hcCk7XHJcbiAgICBwYXJhbU5hbWVzLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpO1xyXG4gICAgY29uc3QgZXh0ZW5kZWRQYXJhbU1hcDogYW55ID0geyAuLi5wYXJhbU1hcCB9O1xyXG5cclxuICAgIHRoaXMucGFyYW1NYXBwaW5ncy5mb3JFYWNoKChtYXBwaW5nKSA9PiB7XHJcbiAgICAgIGlmIChtYXBwaW5nLnRhYmxlTmFtZSBpbiBwYXJhbU1hcCkge1xyXG4gICAgICAgIGV4dGVuZGVkUGFyYW1NYXBbbWFwcGluZy51cmxOYW1lXSA9IChwYXJhbU1hcCBhcyBhbnkpW1xyXG4gICAgICAgICAgbWFwcGluZy50YWJsZU5hbWVcclxuICAgICAgICBdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBwYXJhbU5hbWVzLmZvckVhY2goKHBhcmFtKSA9PiB7XHJcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoYDoke3BhcmFtfWAsIGAke2V4dGVuZGVkUGFyYW1NYXBbcGFyYW0gYXMga2V5b2YgVF19YCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcblxyXG4gIHRvQW5ndWxhclJvdXRlKCkge1xyXG4gICAgaWYgKCF0aGlzLl9yZWdleCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGZpcnN0IGNhbGwgLmJ1aWxkKCkgb24gcm91dGUhJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IFJkdEFuZ3VsYXJSb3V0ZTxUPih0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vIFByb3ZpZGVzIHN0YXRpYyBtYXBwaW5nIGZvciBwYXJhbWV0ZXIgbmFtZXMgdGFibGVOYW1lIC0+IHVybE5hbWUuXHJcbiAgLy8gUmV0dXJucyBuZXcgaW5zdGFuY2Ugb2YgUmR0Um91dGU8VD4gdGhhdCBpcyBjbG9uZSBvZlxyXG4gIC8vIHRoaXMgcm91dGUgYW5kIGl0cyBwYXJlbnRzIChOT1QgY2hpbGRyZW4pLlxyXG4gIHdpdGhQYXJhbU1hcHBpbmdzKG1hcHBpbmdzOiBQYXJhbU1hcHBpbmdbXSkge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5wYXJhbU1hcHBpbmdzID0gbWFwcGluZ3M7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoU3RhdGljUGFyYW1zKHBhcmFtczogVCk6IFJkdFJvdXRlPFQ+O1xyXG4gIHdpdGhTdGF0aWNQYXJhbXM8VDIgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgcm91dGU6IFJkdFJvdXRlPFQ+LFxyXG4gICAgcGFyYW1zOiBUMlxyXG4gICk6IFJkdFJvdXRlPFQ+O1xyXG5cclxuICAvLyBTZXRzIHNlbGVjdGVkIHBhcmFtZXRlcnMgZm9yIGl0c2VsZiBhbmQgcGFyZW50cy5cclxuICAvLyBSZXR1cm5zIG5ldyBpbnN0YW5jZSBvZiBSZHRSb3V0ZTxUPiB0aGF0IGlzIGNsb25lIG9mXHJcbiAgLy8gdGhpcyByb3V0ZSBhbmQgaXRzIHBhcmVudHMgKE5PVCBjaGlsZHJlbikuXHJcbiAgd2l0aFN0YXRpY1BhcmFtczxUMiBleHRlbmRzIG9iamVjdD4ocGFyYW0xOiBSZHRSb3V0ZTxUMj4gfCBULCBwYXJhbTI/OiBUMikge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcblxyXG4gICAgaWYgKHBhcmFtMikge1xyXG4gICAgICBjb25zdCByb3V0ZUFic1BhdGggPSAocGFyYW0xIGFzIFJkdFJvdXRlPFQyPikuYWJzb2x1dGVQYXRoO1xyXG4gICAgICBsZXQgY3VycmVudDogUmR0Um91dGUgfCBudWxsID0gY2xvbmU7XHJcblxyXG4gICAgICB3aGlsZSAoY3VycmVudCkge1xyXG4gICAgICAgIGlmIChjdXJyZW50LmFic29sdXRlUGF0aCA9PT0gcm91dGVBYnNQYXRoKSB7XHJcbiAgICAgICAgICBjdXJyZW50Ll9zdGF0aWNQYXJhbXMgPSBwYXJhbTI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9wYXJlbnQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsb25lLl9zdGF0aWNQYXJhbXMgPSBwYXJhbTEgYXMgVDtcclxuICAgIH1cclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIHdpdGhRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogUGFyYW1zKSB7XHJcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcclxuICAgIGNsb25lLl9xdWVyeVBhcmFtcyA9IHsgLi4ucXVlcnlQYXJhbXMgfTtcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIHdpdGhTdGF0ZVBhcmFtcyhzdGF0ZVBhcmFtczogUGFyYW1zKSB7XHJcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcclxuICAgIGNsb25lLl9zdGF0ZVBhcmFtcyA9IHsgLi4uc3RhdGVQYXJhbXMgfTtcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIC8vIFJldHVybnMgUGFydGlhbCBvZiBvYmplY3QgdGhhdCBvbmx5IGNvbnRhaW5zIHByb3BlcnRpZXNcclxuICAvLyBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoaXMgcm91dGUuXHJcbiAgZXh0cmFjdFJvdXRlUGFyYW1zKHJvdzogVCk6IFBhcnRpYWw8VD4ge1xyXG4gICAgY29uc3QgcmVzOiBQYXJ0aWFsPFQ+ID0ge307XHJcblxyXG4gICAgdGhpcy5vcmRlcmVkUGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hcHBpbmcgPSB0aGlzLnBhcmFtTWFwcGluZ3MuZmluZCgobSkgPT4gbS51cmxOYW1lID09PSBwYXJhbSk7XHJcbiAgICAgIGNvbnN0IG1hcHBlZFBhcmFtID0gKG1hcHBpbmc/LnRhYmxlTmFtZSA/PyBwYXJhbSkgYXMga2V5b2YgVDtcclxuICAgICAgaWYgKG1hcHBlZFBhcmFtIGluIHJvdykge1xyXG4gICAgICAgIHJlc1ttYXBwZWRQYXJhbV0gPSByb3dbbWFwcGVkUGFyYW1dO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8gUmV0dXJucyBuZXcgaW5zdGFuY2Ugb2YgUmR0Um91dGU8VD4gdGhhdCBpcyBjbG9uZSBvZlxyXG4gIC8vIHRoaXMgcm91dGUgYW5kIGl0cyBwYXJlbnRzIChOT1QgY2hpbGRyZW4pLlxyXG4gIGNsb25lKCkge1xyXG4gICAgY29uc3QgY2xvbmUgPSBuZXcgUmR0Um91dGU8VD4oKTtcclxuICAgIGNsb25lLl9uYW1lID0gdGhpcy5fbmFtZTtcclxuICAgIGNsb25lLl9wYXJlbnQgPSB0aGlzLl9wYXJlbnQ/LmNsb25lKCkgPz8gbnVsbDtcclxuICAgIGNsb25lLl9wYXRoID0gdGhpcy5wYXRoO1xyXG4gICAgY2xvbmUuX2VudHJ5RGlzYWJsZWQgPSB0aGlzLl9lbnRyeURpc2FibGVkO1xyXG4gICAgY2xvbmUub3JkZXJlZFBhcmFtcyA9IFsuLi50aGlzLm9yZGVyZWRQYXJhbXNdO1xyXG4gICAgY2xvbmUuX3BhcmFtTWFwID0geyAuLi50aGlzLl9wYXJhbU1hcCB9O1xyXG4gICAgY2xvbmUuX3JlZ2V4ID0gbmV3IFJlZ0V4cCh0aGlzLl9yZWdleCk7XHJcbiAgICBjbG9uZS5wYXJhbU1hcHBpbmdzID0gdGhpcy5wYXJhbU1hcHBpbmdzO1xyXG4gICAgY2xvbmUuX3N0YXRpY1BhcmFtcyA9IHRoaXMuX3N0YXRpY1BhcmFtcztcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcbn1cclxuIl19
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3JkdC1yb3V0ZS9yZHQtcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBOEIscUJBQXFCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFNUUsTUFBTSxVQUFVLFdBQVc7SUFDekIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxPQUFPLFFBQVE7SUFDVCxhQUFhLEdBQWEsRUFBRSxDQUFDO0lBQzdCLFNBQVMsR0FBb0IsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sQ0FBVTtJQUNoQixhQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUNuQyxhQUFhLEdBQWUsRUFBRSxDQUFDO0lBQy9CLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUUxQixLQUFLLENBQVU7SUFDZixLQUFLLENBQVU7SUFDZixPQUFPLEdBQW9CLElBQUksQ0FBQztJQUNoQyxTQUFTLEdBQWUsRUFBRSxDQUFDO0lBQzNCLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsYUFBYSxHQUFrQixXQUFXLENBQUM7SUFFN0MsY0FBYyxDQUFVO0lBRWhDOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxL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QUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRTdHJpbmdVdGlscyB9IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IFJkdEFuZ3VsYXJSb3V0ZSB9IGZyb20gJy4vcmR0LWFuZ3VsYXItcm91dGUnO1xyXG5pbXBvcnQgeyBQYXJhbU1hcHBpbmcsIFBhcmFtVHlwZU1hcCwgUmR0UmVhZG9ubHlQYXJhbWV0ZXJzIH0gZnJvbSAnLi91dGlscyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQUxXQVlTX1RSVUUoKSB7XHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZHRSb3V0ZTxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XHJcbiAgcHJvdGVjdGVkIG9yZGVyZWRQYXJhbXM6IHN0cmluZ1tdID0gW107XHJcbiAgcHJvdGVjdGVkIF9wYXJhbU1hcDogUGFyYW1UeXBlTWFwPFQ+ID0ge307XHJcbiAgcHJvdGVjdGVkIF9yZWdleCE6IFJlZ0V4cDtcclxuICBwcm90ZWN0ZWQgcGFyYW1NYXBwaW5nczogUGFyYW1NYXBwaW5nW10gPSBbXTtcclxuICBwcm90ZWN0ZWQgX3N0YXRpY1BhcmFtczogUGFydGlhbDxUPiA9IHt9O1xyXG4gIHByb3RlY3RlZCBfcXVlcnlQYXJhbXM6IFBhcmFtcyA9IHt9O1xyXG4gIHByb3RlY3RlZCBfc3RhdGVQYXJhbXM6IFBhcmFtcyA9IHt9O1xyXG5cclxuICBwcm90ZWN0ZWQgX25hbWUhOiBzdHJpbmc7XHJcbiAgcHJvdGVjdGVkIF9wYXRoITogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfcGFyZW50OiBSZHRSb3V0ZSB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBfY2hpbGRyZW46IFJkdFJvdXRlW10gPSBbXTtcclxuICBwcm90ZWN0ZWQgX2VudHJ5RGlzYWJsZWQgPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgX2NhbkJlRW50ZXJlZDogKCkgPT4gYm9vbGVhbiA9IEFMV0FZU19UUlVFO1xyXG5cclxuICBwcml2YXRlIF9hYnNvbHV0ZVJlZ2V4PzogUmVnRXhwO1xyXG5cclxuICAvKipcclxuICAgKiBNYXAgb2YgcGFyYW1ldGVycyBhbmQgdGhlaXIgdHlwZXMuXHJcbiAgICovXHJcbiAgZ2V0IHBhcmFtTWFwKCk6IFJlYWRvbmx5PFBhcmFtVHlwZU1hcDxUPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtTWFwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgZGlzcGxheSBpbiBicmVhZGNydW1icywgdGl0bGUsIGV0Yy5cclxuICAgKi9cclxuICBnZXQgbmFtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9uYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF0aCBvZiB0aGUgcm91dGUgcmVsYXRpdmUgdG8gcGFyZW50IHJvdXRlLlxyXG4gICAqL1xyXG4gIGdldCBwYXRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJlbnQgcm91dGUuXHJcbiAgICovXHJcbiAgZ2V0IHBhcmVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGlsZCByb3V0ZXMuXHJcbiAgICovXHJcbiAgZ2V0IGNoaWxkcmVuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWJzb2x1dGUgcGF0aCBvZiBwYXJlbnQgcm91dGUgb3IgJy8nIGlmIHRoZXJlIGlzIG5vIHBhcmVudC5cclxuICAgKiBIb3N0bmFtZSBleGNsdWRlZC5cclxuICAgKi9cclxuICBnZXQgYmFzZVBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXJlbnQgPyB0aGlzLl9wYXJlbnQuYWJzb2x1dGVQYXRoIDogJy8nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWJzb2x1dGUgcGF0aCBvZiB0aGUgcm91dGUuIEhvc3RuYW1lIGV4Y2x1ZGVkLlxyXG4gICAqL1xyXG4gIGdldCBhYnNvbHV0ZVBhdGgoKSB7XHJcbiAgICByZXR1cm4gUmR0U3RyaW5nVXRpbHMuam9pblBhdGhzKHRoaXMuYmFzZVBhdGgsIHRoaXMuX3BhdGgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVndWxhciBleHByZXNzaW9uIHJvdXRlIHBhdGggcmVsYXRpdmUgdG8gcGFyZW50IHJvdXRlLlxyXG4gICAqIEhvc3RuYW1lIGV4Y2x1ZGVkLlxyXG4gICAqL1xyXG4gIGdldCByZWdleCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWdleDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBvbmx5IHRoaXMgcm91dGUgKG5vdCBjaGlsZHJlblxyXG4gICAqIG9yIHBhcmVudCByb3V0ZXMpLiBIb3N0bmFtZSBleGNsdWRlZC5cclxuICAgKi9cclxuICBnZXQgYWJzb2x1dGVSZWdleCgpOiBSZWdFeHAge1xyXG4gICAgaWYgKHRoaXMuX2Fic29sdXRlUmVnZXgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlUmVnZXg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAvLyBSZW1vdmUgaW5pdGlhbCBeIGFuZCBlbmRpbmcgJFxyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9wYXJlbnQuYWJzb2x1dGVSZWdleC5zb3VyY2Uuc2xpY2UoMSwgLTEpO1xyXG4gICAgICB0aGlzLl9hYnNvbHV0ZVJlZ2V4ID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAnXicgKyBSZHRTdHJpbmdVdGlscy5qb2luUGF0aHMocGFyZW50LCB0aGlzLl9yZWdleC5zb3VyY2UpICsgJyQnXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hYnNvbHV0ZVJlZ2V4ID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAnXicgKyBSZHRTdHJpbmdVdGlscy5qb2luUGF0aHMoJy8nLCB0aGlzLl9yZWdleC5zb3VyY2UpICsgJyQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVSZWdleDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbm90ZXMgZGlzYWJsZWQgcm91dGUgZW50cnkuXHJcbiAgICogSWYgdHJ1ZSwgcm91dGUgc2hvdWxkIGhhdmUgbm8gTmdNb2R1bGVcclxuICAgKiBvciBjb21wb25lbnQgYW5kIG9ubHkgc2VydmVzIGFzIHZpcnR1YWwgbW9kdWxlXHJcbiAgICogZm9yIGJyZWFkY3J1bWIuXHJcbiAgICovXHJcbiAgZ2V0IGVudHJ5RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW50cnlEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXRpY2FsbHkgc2V0IHN0YXRlIHBhcmFtcyB1c2VkIHdoZW4gbmF2aWdhdGluZyB0byB0aGlzIGluc3RhbmNlLlxyXG4gICAqL1xyXG4gIGdldCBzdGF0ZVBhcmFtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0ZVBhcmFtcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXRpY2FsbHkgc2V0IHF1ZXJ5IHBhcmFtcyB1c2VkIHdoZW4gbmF2aWdhdGluZyB0byB0aGlzIGluc3RhbmNlLlxyXG4gICAqL1xyXG4gIGdldCBxdWVyeVBhcmFtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9xdWVyeVBhcmFtcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB1cmwgQWJzb2x1dGUgcGF0aCB0byB0ZXN0LlxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdXJsIG1hdGNoZXMgdGhpcyByb3V0ZS5cclxuICAgKi9cclxuICB0ZXN0VXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hYnNvbHV0ZVJlZ2V4LnRlc3QodXJsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXRpY2FsbHkgc2V0IHBhcmFtZXRlcnMgdXNlZCB3aGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBpbnN0YW5jZS5cclxuICAgKi9cclxuICBnZXQgc3RhdGljUGFyYW1zKCkge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5fc3RhdGljUGFyYW1zIH07XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzQ2FuQmVFbnRlcmVkR3VhcmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FuQmVFbnRlcmVkICE9PSBBTFdBWVNfVFJVRTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGEgZ3VhcmQgdGhhdCBpcyB1c2VkIGJ5IFtyZHRSb3V0ZXJMaW5rXSBhbmQgUmR0TWVudVxyXG4gICAqIHRvIGRldGVybWluZSBpZiByb3V0ZSBjYW4gYmUgZW50ZXJlZC5cclxuICAgKiBAcGFyYW0gaW5qZWN0b3IgRW52aXJvbm1lbnQgb3IgY3VzdG9tIGluamVjdG9yLlxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgcm91dGUgY2FuIGJlIGVudGVyZWQuXHJcbiAgICovXHJcbiAgY2FuQmVFbnRlcmVkKGluamVjdG9yPzogSW5qZWN0b3IpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpbmplY3RvclxyXG4gICAgICA/IHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgdGhpcy5fY2FuQmVFbnRlcmVkKVxyXG4gICAgICA6IHRoaXMuX2NhbkJlRW50ZXJlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdHMgdXJsIHBhcmFtZXRlcnMgZnJvbSBhYnNvbHV0ZSBwYXRoIGZvciB0aGlzIHBhdGggYW5kIGVhY2ggcGFyZW50LlxyXG4gICAqL1xyXG4gIHBhcnNlQWJzb2x1dGVVcmwodXJsOiBzdHJpbmcpOiBSZHRSZWFkb25seVBhcmFtZXRlcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IHJlZyA9IHRoaXMuYWJzb2x1dGVSZWdleDtcclxuICAgIGlmICghcmVnLnRlc3QodXJsKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IG1hdGNoZXMgPSByZWcuZXhlYyh1cmwpO1xyXG4gICAgaWYgKG1hdGNoZXMpIHtcclxuICAgICAgY29uc3QgdmFsdWVzID0gbWF0Y2hlcy5zbGljZSgxKS5yZXZlcnNlKCk7XHJcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXMuZmlsbCh2YWx1ZXMpO1xyXG4gICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZHRSZWFkb25seVBhcmFtZXRlcnMob2JqKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbGwodmFsdWVzOiBzdHJpbmdbXSwgcmVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcclxuICAgIGNvbnN0IHBhcmFtczogeyBba2V5IGluIGtleW9mIFRdPzogc3RyaW5nIHwgbnVtYmVyIH0gPSB7fTtcclxuICAgIGNvbnN0IHJldmVyc2VkUGFyYW1zID0gdGhpcy5vcmRlcmVkUGFyYW1zLnNsaWNlKCkucmV2ZXJzZSgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXZlcnNlZFBhcmFtcy5sZW5ndGggJiYgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBrZXkgPSByZXZlcnNlZFBhcmFtc1tpXSBhcyBrZXlvZiBUO1xyXG4gICAgICBjb25zdCBtYXBwZWRLZXkgPVxyXG4gICAgICAgIHRoaXMucGFyYW1NYXBwaW5ncy5maW5kKChtKSA9PiBtLnVybE5hbWUgPT09IGtleSk/LnRhYmxlTmFtZSA/PyBrZXk7XHJcbiAgICAgIGxldCB2YWw6IHN0cmluZyB8IG51bWJlciA9IHZhbHVlc1tpXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9wYXJhbU1hcFtrZXldID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHZhbCA9IHBhcnNlSW50KHZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgcGFyYW1zW21hcHBlZEtleSBhcyBrZXlvZiBUXSA9IHZhbDtcclxuICAgIH1cclxuICAgIHJlc1t0aGlzLmFic29sdXRlUGF0aF0gPSBwYXJhbXM7XHJcblxyXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPiByZXZlcnNlZFBhcmFtcy5sZW5ndGggJiYgdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgIHRoaXMuX3BhcmVudC5maWxsKHZhbHVlcy5zbGljZShyZXZlcnNlZFBhcmFtcy5sZW5ndGgpLCByZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbGxzIHBhcmFtZXRlcnMgaW4gcGF0aCB3aXRoIHZhbHVlcyBmcm9tIHBhcmFtTWFwLlxyXG4gICAqIFVzZSB3aXRoU3RhdGljUGFyYW1zKCkgYmVmb3JlaGFuZCBpbiBjYXNlIHBhcmVudCBwYXRocyBjb250YWluIHBhcmFtZXRlcnMuXHJcbiAgICogQHBhcmFtIHBhcmFtTWFwIE11c3QgY29udGFpbiBhbGwgcGFyYW1ldGVycyBmb3IgdGhpcyByb3V0ZS5cclxuICAgKiBAcmV0dXJucyBBYnNvbHV0ZSBwYXRoLlxyXG4gICAqL1xyXG4gIGNyZWF0ZUFic29sdXRlVXJsKHBhcmFtTWFwOiBQYXJ0aWFsPFQ+ID0gdGhpcy5fc3RhdGljUGFyYW1zKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVVybCh0aGlzLmFic29sdXRlUGF0aCwgcGFyYW1NYXApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocyhcclxuICAgICAgICB0aGlzLl9wYXJlbnQuY3JlYXRlQWJzb2x1dGVVcmwoKSxcclxuICAgICAgICB0aGlzLmNyZWF0ZVJlbGF0aXZlVXJsKHBhcmFtTWFwKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlUmVsYXRpdmVVcmwocGFyYW1NYXA6IFBhcnRpYWw8VD4gPSB0aGlzLl9zdGF0aWNQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVVybCh0aGlzLnBhdGgsIHBhcmFtTWFwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVXJsKHBhdGg6IHN0cmluZywgcGFyYW1NYXA6IFBhcnRpYWw8VD4pIHtcclxuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9wYXJhbU1hcCk7XHJcbiAgICBwYXJhbU5hbWVzLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpO1xyXG4gICAgY29uc3QgZXh0ZW5kZWRQYXJhbU1hcDogYW55ID0geyAuLi5wYXJhbU1hcCB9O1xyXG5cclxuICAgIHRoaXMucGFyYW1NYXBwaW5ncy5mb3JFYWNoKChtYXBwaW5nKSA9PiB7XHJcbiAgICAgIGlmIChtYXBwaW5nLnRhYmxlTmFtZSBpbiBwYXJhbU1hcCkge1xyXG4gICAgICAgIGV4dGVuZGVkUGFyYW1NYXBbbWFwcGluZy51cmxOYW1lXSA9IChwYXJhbU1hcCBhcyBhbnkpW1xyXG4gICAgICAgICAgbWFwcGluZy50YWJsZU5hbWVcclxuICAgICAgICBdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBwYXJhbU5hbWVzLmZvckVhY2goKHBhcmFtKSA9PiB7XHJcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoYDoke3BhcmFtfWAsIGAke2V4dGVuZGVkUGFyYW1NYXBbcGFyYW0gYXMga2V5b2YgVF19YCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcblxyXG4gIHRvQW5ndWxhclJvdXRlKCkge1xyXG4gICAgaWYgKCF0aGlzLl9yZWdleCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGZpcnN0IGNhbGwgLmJ1aWxkKCkgb24gcm91dGUhJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IFJkdEFuZ3VsYXJSb3V0ZTxUPih0aGlzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb3ZpZGVzIHN0YXRpYyBtYXBwaW5nIGZvciBwYXJhbWV0ZXIgbmFtZXMgdGFibGVOYW1lIC0+IHVybE5hbWUuXHJcbiAgICogUmV0dXJucyBuZXcgaW5zdGFuY2Ugb2YgUmR0Um91dGU8VD4gdGhhdCBpcyBjbG9uZSBvZlxyXG4gICAqIHRoaXMgcm91dGUgYW5kIGl0cyBwYXJlbnRzIChOT1QgY2hpbGRyZW4pLlxyXG4gICAqIEByZXR1cm5zIENsb25lIG9mIHRoaXMgcm91dGUgd2l0aCBtYXBwZWQgcGFyYW1ldGVyIG5hbWVzLlxyXG4gICAqL1xyXG4gIHdpdGhQYXJhbU1hcHBpbmdzKG1hcHBpbmdzOiBQYXJhbU1hcHBpbmdbXSkge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5wYXJhbU1hcHBpbmdzID0gbWFwcGluZ3M7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHN0YXRpYyBwYXJhbWV0ZXJzIGZvciB0aGlzIHJvdXRlLlxyXG4gICAqIEBwYXJhbSBwYXJhbXMgU3RhdGljIHBhcmFtZXRlcnMgZm9yIHRoaXMgcm91dGUuXHJcbiAgICogQHJldHVybnMgQ2xvbmUgb2YgdGhpcyB3aXRoIHN0YXRpYyBwYXJhbWV0ZXJzIHNldC5cclxuICAgKi9cclxuICB3aXRoU3RhdGljUGFyYW1zKHBhcmFtczogVCk6IFJkdFJvdXRlPFQ+O1xyXG4gIHdpdGhTdGF0aWNQYXJhbXM8VDIgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgcm91dGU6IFJkdFJvdXRlPFQ+LFxyXG4gICAgcGFyYW1zOiBUMlxyXG4gICk6IFJkdFJvdXRlPFQ+O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHBhcmFtZXRlcnMgZm9yIGl0c2VsZiBvciBwYXJlbnRzLlxyXG4gICAqIFJldHVybnMgbmV3IGluc3RhbmNlIG9mIFJkdFJvdXRlPFQ+IHRoYXQgaXMgY2xvbmUgb2ZcclxuICAgKiB0aGlzIHJvdXRlIGFuZCBpdHMgcGFyZW50cyAoTk9UIGNoaWxkcmVuKS5cclxuICAgKiBAcmV0dXJucyBDbG9uZSBvZiB0aGlzIHJvdXRlIHdpdGggc3RhdGljIHBhcmFtZXRlcnMgc2V0LlxyXG4gICAqL1xyXG4gIHdpdGhTdGF0aWNQYXJhbXM8VDIgZXh0ZW5kcyBvYmplY3Q+KHBhcmFtMTogUmR0Um91dGU8VDI+IHwgVCwgcGFyYW0yPzogVDIpIHtcclxuICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZSgpO1xyXG5cclxuICAgIGlmIChwYXJhbTIpIHtcclxuICAgICAgY29uc3Qgcm91dGVBYnNQYXRoID0gKHBhcmFtMSBhcyBSZHRSb3V0ZTxUMj4pLmFic29sdXRlUGF0aDtcclxuICAgICAgbGV0IGN1cnJlbnQ6IFJkdFJvdXRlIHwgbnVsbCA9IGNsb25lO1xyXG5cclxuICAgICAgd2hpbGUgKGN1cnJlbnQpIHtcclxuICAgICAgICBpZiAoY3VycmVudC5hYnNvbHV0ZVBhdGggPT09IHJvdXRlQWJzUGF0aCkge1xyXG4gICAgICAgICAgY3VycmVudC5fc3RhdGljUGFyYW1zID0gcGFyYW0yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5fcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjbG9uZS5fc3RhdGljUGFyYW1zID0gcGFyYW0xIGFzIFQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFBhcmFtcykge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5fcXVlcnlQYXJhbXMgPSB7IC4uLnF1ZXJ5UGFyYW1zIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoU3RhdGVQYXJhbXMoc3RhdGVQYXJhbXM6IFBhcmFtcykge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5fc3RhdGVQYXJhbXMgPSB7IC4uLnN0YXRlUGFyYW1zIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcmV0dXJucyBQYXJ0aWFsIG9mIG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgcHJvcGVydGllcyBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoaXMgcm91dGUuXHJcbiAgICovXHJcbiAgZXh0cmFjdFJvdXRlUGFyYW1zKHJvdzogVCk6IFBhcnRpYWw8VD4ge1xyXG4gICAgY29uc3QgcmVzOiBQYXJ0aWFsPFQ+ID0ge307XHJcblxyXG4gICAgdGhpcy5vcmRlcmVkUGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hcHBpbmcgPSB0aGlzLnBhcmFtTWFwcGluZ3MuZmluZCgobSkgPT4gbS51cmxOYW1lID09PSBwYXJhbSk7XHJcbiAgICAgIGNvbnN0IG1hcHBlZFBhcmFtID0gKG1hcHBpbmc/LnRhYmxlTmFtZSA/PyBwYXJhbSkgYXMga2V5b2YgVDtcclxuICAgICAgaWYgKG1hcHBlZFBhcmFtIGluIHJvdykge1xyXG4gICAgICAgIHJlc1ttYXBwZWRQYXJhbV0gPSByb3dbbWFwcGVkUGFyYW1dO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHJldHVybnMgTmV3IGluc3RhbmNlIG9mIFJkdFJvdXRlPFQ+IHRoYXQgaXMgY2xvbmUgb2ZcclxuICAgKiB0aGlzIHJvdXRlIGFuZCBpdHMgcGFyZW50cyAoTk9UIGNoaWxkcmVuKS5cclxuICAgKi9cclxuICBjbG9uZSgpIHtcclxuICAgIGNvbnN0IGNsb25lID0gbmV3IFJkdFJvdXRlPFQ+KCk7XHJcbiAgICBjbG9uZS5fbmFtZSA9IHRoaXMuX25hbWU7XHJcbiAgICBjbG9uZS5fcGFyZW50ID0gdGhpcy5fcGFyZW50Py5jbG9uZSgpID8/IG51bGw7XHJcbiAgICBjbG9uZS5fcGF0aCA9IHRoaXMucGF0aDtcclxuICAgIGNsb25lLl9lbnRyeURpc2FibGVkID0gdGhpcy5fZW50cnlEaXNhYmxlZDtcclxuICAgIGNsb25lLm9yZGVyZWRQYXJhbXMgPSBbLi4udGhpcy5vcmRlcmVkUGFyYW1zXTtcclxuICAgIGNsb25lLl9wYXJhbU1hcCA9IHsgLi4udGhpcy5fcGFyYW1NYXAgfTtcclxuICAgIGNsb25lLl9yZWdleCA9IG5ldyBSZWdFeHAodGhpcy5fcmVnZXgpO1xyXG4gICAgY2xvbmUucGFyYW1NYXBwaW5ncyA9IHRoaXMucGFyYW1NYXBwaW5ncztcclxuICAgIGNsb25lLl9zdGF0aWNQYXJhbXMgPSB0aGlzLl9zdGF0aWNQYXJhbXM7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,2 +1,15 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
1
|
+
export class RdtReadonlyParameters {
|
|
2
|
+
params;
|
|
3
|
+
constructor(params = {}) {
|
|
4
|
+
this.params = params;
|
|
5
|
+
}
|
|
6
|
+
get(route) {
|
|
7
|
+
return this.params[route.absolutePath] ?? null;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class RdtParameters extends RdtReadonlyParameters {
|
|
11
|
+
set(route, params) {
|
|
12
|
+
this.params[route.absolutePath] = params;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvcmR0LXJvdXRlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVCQSxNQUFNLE9BQU8scUJBQXFCO0lBQ0Q7SUFBL0IsWUFBK0IsU0FBNEIsRUFBRTtRQUE5QixXQUFNLEdBQU4sTUFBTSxDQUF3QjtJQUFHLENBQUM7SUFFakUsR0FBRyxDQUFtQixLQUFrQjtRQUN0QyxPQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBZ0IsSUFBSSxJQUFJLENBQUM7SUFDakUsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGFBQWMsU0FBUSxxQkFBcUI7SUFDdEQsR0FBRyxDQUFtQixLQUFrQixFQUFFLE1BQWtCO1FBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZHRSb3V0ZSB9IGZyb20gJy4vcmR0LXJvdXRlJztcclxuXHJcbmV4cG9ydCB0eXBlIFBhcmFtVHlwZU1hcDxUPiA9IHtcclxuICBba2V5IGluIGtleW9mIFRdPzogJ3N0cmluZycgfCAnbnVtYmVyJztcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1NYXBwaW5nIHtcclxuICB1cmxOYW1lOiBzdHJpbmc7XHJcbiAgdGFibGVOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljUm91dGVQYXJhbXMge1xyXG4gIFthYnNvbHV0ZVBhdGg6IHN0cmluZ106IG9iamVjdDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUmR0UmVkaXJlY3RSZXR1cm5UeXBlID0gc3RyaW5nIHwgdm9pZCB8IHVuZGVmaW5lZDtcclxuXHJcbmV4cG9ydCB0eXBlIFJkdFJlZGlyZWN0Rm4gPSAoXHJcbiAgY3VycmVudFBhdGg6IHN0cmluZyxcclxuICB0YXJnZXRQYXRoOiBzdHJpbmcsXHJcbiAgdGFyZ2V0Um91dGU6IFJkdFJvdXRlXHJcbikgPT4gUmR0UmVkaXJlY3RSZXR1cm5UeXBlO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJkdFJlYWRvbmx5UGFyYW1ldGVycyB7XHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHBhcmFtczogU3RhdGljUm91dGVQYXJhbXMgPSB7fSkge31cclxuXHJcbiAgZ2V0PFQgZXh0ZW5kcyBvYmplY3Q+KHJvdXRlOiBSZHRSb3V0ZTxUPik6IFBhcnRpYWw8VD4gfCBudWxsIHtcclxuICAgIHJldHVybiAodGhpcy5wYXJhbXNbcm91dGUuYWJzb2x1dGVQYXRoXSBhcyBQYXJ0aWFsPFQ+KSA/PyBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJkdFBhcmFtZXRlcnMgZXh0ZW5kcyBSZHRSZWFkb25seVBhcmFtZXRlcnMge1xyXG4gIHNldDxUIGV4dGVuZHMgb2JqZWN0Pihyb3V0ZTogUmR0Um91dGU8VD4sIHBhcmFtczogUGFydGlhbDxUPikge1xyXG4gICAgdGhpcy5wYXJhbXNbcm91dGUuYWJzb2x1dGVQYXRoXSA9IHBhcmFtcztcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Injection token that defines behavior when route cannot be entered (canBeEntered returns false).
|
|
4
|
+
* If value is undefined, route will be redirected to ''.
|
|
5
|
+
*/
|
|
6
|
+
export const RDT_CANNOT_BE_ENTERED_PROVIDER = new InjectionToken('RDT_CANNOT_BE_ENTERED', { factory: () => undefined, providedIn: 'root' });
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWNhbm5vdC1iZS1lbnRlcmVkLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3NlcnZpY2VzL3JkdC1jYW5ub3QtYmUtZW50ZXJlZC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUU5RCx1QkFBdUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR0UmVkaXJlY3RGbiwgUmR0UmVkaXJlY3RSZXR1cm5UeXBlIH0gZnJvbSAnLi4vcmR0LXJvdXRlL3V0aWxzJztcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBkZWZpbmVzIGJlaGF2aW9yIHdoZW4gcm91dGUgY2Fubm90IGJlIGVudGVyZWQgKGNhbkJlRW50ZXJlZCByZXR1cm5zIGZhbHNlKS5cbiAqIElmIHZhbHVlIGlzIHVuZGVmaW5lZCwgcm91dGUgd2lsbCBiZSByZWRpcmVjdGVkIHRvICcnLlxuICovXG5leHBvcnQgY29uc3QgUkRUX0NBTk5PVF9CRV9FTlRFUkVEX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuPFxuICBSZHRSZWRpcmVjdEZuIHwgUmR0UmVkaXJlY3RSZXR1cm5UeXBlXG4+KCdSRFRfQ0FOTk9UX0JFX0VOVEVSRUQnLCB7IGZhY3Rvcnk6ICgpID0+IHVuZGVmaW5lZCwgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pO1xuIl19
|
|
@@ -3,6 +3,7 @@ import { inject, Injectable } from '@angular/core';
|
|
|
3
3
|
import { NavigationEnd, Router } from '@angular/router';
|
|
4
4
|
import { RdtStringUtils } from '@ngrdt/utils';
|
|
5
5
|
import { filter, take } from 'rxjs';
|
|
6
|
+
import { RdtReadonlyParameters } from '../rdt-route/utils';
|
|
6
7
|
import { RDT_ROUTES_PROVIDER } from './rdt-routes.token';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
export class RdtRouterService {
|
|
@@ -101,7 +102,7 @@ export class RdtRouterService {
|
|
|
101
102
|
const parsed = this.parseAbsoluteUrl();
|
|
102
103
|
if (!parsed) {
|
|
103
104
|
console.warn('No route matches current url.');
|
|
104
|
-
return
|
|
105
|
+
return new RdtReadonlyParameters();
|
|
105
106
|
}
|
|
106
107
|
currentRoute = parsed.route;
|
|
107
108
|
}
|
|
@@ -125,4 +126,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
125
126
|
providedIn: 'root',
|
|
126
127
|
}]
|
|
127
128
|
}], ctorParameters: () => [] });
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3NlcnZpY2VzL3JkdC1yb3V0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVV6RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLFNBQVMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVwRCxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFFbEUsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFMUMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdFLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0UsQ0FBQztJQUVRLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQy9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLGFBQWEsQ0FBQyxDQUNiLENBQUM7SUFFdEIsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEU7UUFDRSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FDVixvRkFBb0YsQ0FDckYsQ0FBQztZQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUNOLElBQWlCLEVBQ2pCLE1BQW1CLEVBQ25CLFNBQWtELE9BQU87UUFFekQsTUFBTSxHQUFHLEdBQUcsTUFBTTtZQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztZQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFN0IsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVzthQUN4QixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUUsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixDQUNyRCxZQUFZLEVBQ1osSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztRQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELElBQUksR0FBRyxFQUFFLENBQUM7WUFDUCxHQUFXLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDakQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQTBCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQzlCLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFDMUQ7WUFDRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUs7U0FDckIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtRQUN6QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNYLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQzNCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUEwQjtRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxLQUFLLEdBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFFLEdBQUcsQ0FBQztnQkFDRixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN2QixDQUFDLFFBQVEsS0FBSyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFFdkMsb0RBQW9EO1lBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2pCLEtBQUssR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztnQkFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDakIsS0FBSyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxJQUFJLENBQ1YsdUJBQXVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLHVDQUF1QyxDQUNuRixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQXVCO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFDRCxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUM5QixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBZTtRQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBRyxVQUFvQjtRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVyRSxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQ3pCLElBQUksRUFDSixFQUFFLEVBQ0YsUUFBUSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7dUdBdEpVLGdCQUFnQjsyR0FBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uLCBQbGF0Zm9ybUxvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFBhcmFtcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U3RyaW5nVXRpbHMgfSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuLi9yZHQtcm91dGUvcmR0LXJvdXRlJztcclxuaW1wb3J0IHsgUkRUX1JPVVRFU19QUk9WSURFUiB9IGZyb20gJy4vcmR0LXJvdXRlcy50b2tlbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE5hdmlnYXRlUGFyYW1zIHtcclxuICBzdGF0ZT86IFBhcmFtcztcclxuICBxdWVyeT86IFBhcmFtcztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdFJvdXRlclNlcnZpY2Uge1xyXG4gIHJlYWRvbmx5IGFsbFJvdXRlcyA9IGluamVjdChSRFRfUk9VVEVTX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUhyZWYgPSBpbmplY3QoUGxhdGZvcm1Mb2NhdGlvbikuZ2V0QmFzZUhyZWZGcm9tRE9NKCk7XHJcblxyXG4gIHByaXZhdGUgX3ByZXZpb3VzVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9jdXJyZW50VXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgZ2V0IHByZXZpb3VzVXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzVXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRVcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFVybDtcclxuICB9XHJcblxyXG4gIHBhcnNlUHJldmlvdXNVcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJldmlvdXNVcmwgPyB0aGlzLnBhcnNlQWJzb2x1dGVVcmwodGhpcy5fcHJldmlvdXNVcmwpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHBhcnNlQ3VycmVudFVybCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VXJsID8gdGhpcy5wYXJzZUFic29sdXRlVXJsKHRoaXMuX2N1cnJlbnRVcmwpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IG5hdmlnYXRpb25FbmQkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXHJcbiAgICBmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKVxyXG4gICkgYXMgT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uRW5kPjtcclxuXHJcbiAgcmVhZG9ubHkgbmV4dE5hdmlnYXRpb25FbmQkID0gdGhpcy5uYXZpZ2F0aW9uRW5kJC5waXBlKHRha2UoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGlmICh0aGlzLmFsbFJvdXRlcyA9PT0gbnVsbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgJ0FsbCByb3V0ZXMgbm90IHByb3ZpZGVkLiBNYWtlIHN1cmUgdG8gcHJvdmlkZSBSRFRfUk9VVEVTX1BST1ZJREVSIHdpdGggUmR0Um91dGVbXS4nXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuYWxsUm91dGVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5kJC5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5fcHJldmlvdXNVcmwgPSB0aGlzLl9jdXJyZW50VXJsO1xyXG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gZS51cmw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlPFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgbGluazogUmR0Um91dGU8VD4sXHJcbiAgICBwYXJhbXM/OiBQYXJ0aWFsPFQ+LFxyXG4gICAgdGFyZ2V0OiAnX2JsYW5rJyB8ICdfc2VsZicgfCAnX3BhcmVudCcgfCAnX3RvcCcgPSAnX3NlbGYnXHJcbiAgKSB7XHJcbiAgICBjb25zdCB1cmwgPSBwYXJhbXNcclxuICAgICAgPyBsaW5rLmNyZWF0ZUFic29sdXRlVXJsKHBhcmFtcylcclxuICAgICAgOiBsaW5rLmNyZWF0ZUFic29sdXRlVXJsKCk7XHJcblxyXG4gICAgaWYgKHRhcmdldCA9PT0gJ19zZWxmJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0sIHtcclxuICAgICAgICBxdWVyeVBhcmFtczogbGluay5xdWVyeVBhcmFtcyxcclxuICAgICAgICBzdGF0ZTogbGluay5zdGF0ZVBhcmFtcyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gUmR0U3RyaW5nVXRpbHMuY3JlYXRlQWJzb2x1dGVVcmwodXJsLCB0aGlzLmJhc2VIcmVmKTtcclxuICAgIGNvbnN0IHBhdGhXaXRoUGFyYW1zID0gUmR0U3RyaW5nVXRpbHMuYXBwZW5kUXVlcnlQYXJhbXMoXHJcbiAgICAgIGFic29sdXRlUGF0aCxcclxuICAgICAgbGluay5xdWVyeVBhcmFtc1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKHBhdGhXaXRoUGFyYW1zLCB0YXJnZXQpO1xyXG4gICAgaWYgKHdpbikge1xyXG4gICAgICAod2luIGFzIGFueSkuUmR0U3RhdGVQYXJhbXMgPSBsaW5rLnN0YXRlUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlSG9tZShwYXJhbXM/OiBSZHROYXZpZ2F0ZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmFwcGVuZFF1ZXJ5UGFyYW1zKCcvJywgcGFyYW1zPy5xdWVyeSA/PyB7fSksXHJcbiAgICAgIHtcclxuICAgICAgICBzdGF0ZTogcGFyYW1zPy5zdGF0ZSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHBhcnNlQWJzb2x1dGVVcmwodXJsID0gdGhpcy5sb2NhdGlvbi5wYXRoKCkpIHtcclxuICAgIGlmICh0aGlzLmFsbFJvdXRlcykge1xyXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMuYWxsUm91dGVzKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gcm91dGUucGFyc2VBYnNvbHV0ZVVybCh1cmwpO1xyXG4gICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgIHJldHVybiB7IHJvdXRlLCBwYXJhbXMgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVCYWNrKHBhcmFtcz86IFJkdE5hdmlnYXRlUGFyYW1zKSB7XHJcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlQWJzb2x1dGVVcmwoKTtcclxuICAgIGlmIChwYXJzZWQpIHtcclxuICAgICAgbGV0IHJvdXRlOiBSZHRSb3V0ZSB8IG51bGwgPSBwYXJzZWQucm91dGUud2l0aFN0YXRpY1BhcmFtcyhwYXJzZWQucGFyYW1zKTtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIHJvdXRlID0gcm91dGUucGFyZW50O1xyXG4gICAgICB9IHdoaWxlIChyb3V0ZSAmJiByb3V0ZS5lbnRyeURpc2FibGVkKTtcclxuXHJcbiAgICAgIC8vIEluIGNhc2Ugcm91dGUgaGFzIG5vIGFuY2VzdG9yIHdpdGggYWxsb3dlZCBlbnRyeSxcclxuICAgICAgaWYgKCFyb3V0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlSG9tZShwYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICBpZiAocGFyYW1zLnF1ZXJ5KSB7XHJcbiAgICAgICAgICByb3V0ZSA9IHJvdXRlLndpdGhRdWVyeVBhcmFtcyhwYXJhbXMucXVlcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1zLnN0YXRlKSB7XHJcbiAgICAgICAgICByb3V0ZSA9IHJvdXRlLndpdGhTdGF0ZVBhcmFtcyhwYXJhbXMuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZShyb3V0ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYENhbm5vdCBnbyBiYWNrIGZyb20gJHt0aGlzLmxvY2F0aW9uLnBhdGgoKX0gYmVjYXVzZSBubyByb3V0ZSBtYXRjaGVzIGN1cnJlbnQgdXJsYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dHJhY3RBbGxQYXJhbXMoY3VycmVudFJvdXRlPzogUmR0Um91dGUpIHtcclxuICAgIGlmICghY3VycmVudFJvdXRlKSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VBYnNvbHV0ZVVybCgpO1xyXG4gICAgICBpZiAoIXBhcnNlZCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignTm8gcm91dGUgbWF0Y2hlcyBjdXJyZW50IHVybC4nKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudFJvdXRlID0gcGFyc2VkLnJvdXRlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdXJsID0gdGhpcy5sb2NhdGlvbi5wYXRoKCk7XHJcbiAgICByZXR1cm4gY3VycmVudFJvdXRlLnBhcnNlQWJzb2x1dGVVcmwodXJsKTtcclxuICB9XHJcblxyXG4gIGlzUGFyZW50T2ZDdXJyZW50TG9jYXRpb24ocm91dGU6IFJkdFJvdXRlKSB7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnBhcnNlQWJzb2x1dGVVcmwoKSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVF1ZXJ5UGFyYW1zKC4uLnBhcmFtTmFtZXM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFs/Jl0oJHtwYXJhbU5hbWVzLmpvaW4oJ3wnKX0pPVteJl0qYCwgJ2cnKTtcclxuXHJcbiAgICByZXR1cm4gaGlzdG9yeS5yZXBsYWNlU3RhdGUoXHJcbiAgICAgIG51bGwsXHJcbiAgICAgICcnLFxyXG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaC5yZXBsYWNlKHJlZ2V4LCAnJykucmVwbGFjZSgvXiYvLCAnPycpXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3NlcnZpY2VzL3JkdC1yb3V0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVV6RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLFNBQVMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVwRCxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFFbEUsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFMUMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENB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R0FBRyxDQUFDLENBQzFFLENBQUM7SUFDSixDQUFDO3VHQXRKVSxnQkFBZ0I7MkdBQWhCLGdCQUFnQixjQUZmLE1BQU07OzJGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiwgUGxhdGZvcm1Mb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFJkdFN0cmluZ1V0aWxzIH0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHsgZmlsdGVyLCBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJkdFJvdXRlIH0gZnJvbSAnLi4vcmR0LXJvdXRlL3JkdC1yb3V0ZSc7XHJcbmltcG9ydCB7IFJkdFJlYWRvbmx5UGFyYW1ldGVycyB9IGZyb20gJy4uL3JkdC1yb3V0ZS91dGlscyc7XHJcbmltcG9ydCB7IFJEVF9ST1VURVNfUFJPVklERVIgfSBmcm9tICcuL3JkdC1yb3V0ZXMudG9rZW4nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZHROYXZpZ2F0ZVBhcmFtcyB7XHJcbiAgc3RhdGU/OiBQYXJhbXM7XHJcbiAgcXVlcnk/OiBQYXJhbXM7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRSb3V0ZXJTZXJ2aWNlIHtcclxuICByZWFkb25seSBhbGxSb3V0ZXMgPSBpbmplY3QoUkRUX1JPVVRFU19QUk9WSURFUiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VIcmVmID0gaW5qZWN0KFBsYXRmb3JtTG9jYXRpb24pLmdldEJhc2VIcmVmRnJvbURPTSgpO1xyXG5cclxuICBwcml2YXRlIF9wcmV2aW91c1VybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY3VycmVudFVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGdldCBwcmV2aW91c1VybCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcmV2aW91c1VybDtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50VXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRVcmw7XHJcbiAgfVxyXG5cclxuICBwYXJzZVByZXZpb3VzVXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzVXJsID8gdGhpcy5wYXJzZUFic29sdXRlVXJsKHRoaXMuX3ByZXZpb3VzVXJsKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwYXJzZUN1cnJlbnRVcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFVybCA/IHRoaXMucGFyc2VBYnNvbHV0ZVVybCh0aGlzLl9jdXJyZW50VXJsKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSBuYXZpZ2F0aW9uRW5kJCA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxyXG4gICAgZmlsdGVyKChlKSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZClcclxuICApIGFzIE9ic2VydmFibGU8TmF2aWdhdGlvbkVuZD47XHJcblxyXG4gIHJlYWRvbmx5IG5leHROYXZpZ2F0aW9uRW5kJCA9IHRoaXMubmF2aWdhdGlvbkVuZCQucGlwZSh0YWtlKDEpKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBpZiAodGhpcy5hbGxSb3V0ZXMgPT09IG51bGwpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICdBbGwgcm91dGVzIG5vdCBwcm92aWRlZC4gTWFrZSBzdXJlIHRvIHByb3ZpZGUgUkRUX1JPVVRFU19QUk9WSURFUiB3aXRoIFJkdFJvdXRlW10uJ1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmFsbFJvdXRlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubmF2aWdhdGlvbkVuZCQuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIHRoaXMuX3ByZXZpb3VzVXJsID0gdGhpcy5fY3VycmVudFVybDtcclxuICAgICAgdGhpcy5fY3VycmVudFVybCA9IGUudXJsO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZTxUIGV4dGVuZHMgb2JqZWN0PihcclxuICAgIGxpbms6IFJkdFJvdXRlPFQ+LFxyXG4gICAgcGFyYW1zPzogUGFydGlhbDxUPixcclxuICAgIHRhcmdldDogJ19ibGFuaycgfCAnX3NlbGYnIHwgJ19wYXJlbnQnIHwgJ190b3AnID0gJ19zZWxmJ1xyXG4gICkge1xyXG4gICAgY29uc3QgdXJsID0gcGFyYW1zXHJcbiAgICAgID8gbGluay5jcmVhdGVBYnNvbHV0ZVVybChwYXJhbXMpXHJcbiAgICAgIDogbGluay5jcmVhdGVBYnNvbHV0ZVVybCgpO1xyXG5cclxuICAgIGlmICh0YXJnZXQgPT09ICdfc2VsZicpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdLCB7XHJcbiAgICAgICAgcXVlcnlQYXJhbXM6IGxpbmsucXVlcnlQYXJhbXMsXHJcbiAgICAgICAgc3RhdGU6IGxpbmsuc3RhdGVQYXJhbXMsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IFJkdFN0cmluZ1V0aWxzLmNyZWF0ZUFic29sdXRlVXJsKHVybCwgdGhpcy5iYXNlSHJlZik7XHJcbiAgICBjb25zdCBwYXRoV2l0aFBhcmFtcyA9IFJkdFN0cmluZ1V0aWxzLmFwcGVuZFF1ZXJ5UGFyYW1zKFxyXG4gICAgICBhYnNvbHV0ZVBhdGgsXHJcbiAgICAgIGxpbmsucXVlcnlQYXJhbXNcclxuICAgICk7XHJcbiAgICBjb25zdCB3aW4gPSB3aW5kb3cub3BlbihwYXRoV2l0aFBhcmFtcywgdGFyZ2V0KTtcclxuICAgIGlmICh3aW4pIHtcclxuICAgICAgKHdpbiBhcyBhbnkpLlJkdFN0YXRlUGFyYW1zID0gbGluay5zdGF0ZVBhcmFtcztcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZUhvbWUocGFyYW1zPzogUmR0TmF2aWdhdGVQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5hcHBlbmRRdWVyeVBhcmFtcygnLycsIHBhcmFtcz8ucXVlcnkgPz8ge30pLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3RhdGU6IHBhcmFtcz8uc3RhdGUsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwYXJzZUFic29sdXRlVXJsKHVybCA9IHRoaXMubG9jYXRpb24ucGF0aCgpKSB7XHJcbiAgICBpZiAodGhpcy5hbGxSb3V0ZXMpIHtcclxuICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiB0aGlzLmFsbFJvdXRlcykge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHJvdXRlLnBhcnNlQWJzb2x1dGVVcmwodXJsKTtcclxuICAgICAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgICAgICByZXR1cm4geyByb3V0ZSwgcGFyYW1zIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlQmFjayhwYXJhbXM/OiBSZHROYXZpZ2F0ZVBhcmFtcykge1xyXG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZUFic29sdXRlVXJsKCk7XHJcbiAgICBpZiAocGFyc2VkKSB7XHJcbiAgICAgIGxldCByb3V0ZTogUmR0Um91dGUgfCBudWxsID0gcGFyc2VkLnJvdXRlLndpdGhTdGF0aWNQYXJhbXMocGFyc2VkLnBhcmFtcyk7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICByb3V0ZSA9IHJvdXRlLnBhcmVudDtcclxuICAgICAgfSB3aGlsZSAocm91dGUgJiYgcm91dGUuZW50cnlEaXNhYmxlZCk7XHJcblxyXG4gICAgICAvLyBJbiBjYXNlIHJvdXRlIGhhcyBubyBhbmNlc3RvciB3aXRoIGFsbG93ZWQgZW50cnksXHJcbiAgICAgIGlmICghcm91dGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZUhvbWUocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKHBhcmFtcy5xdWVyeSkge1xyXG4gICAgICAgICAgcm91dGUgPSByb3V0ZS53aXRoUXVlcnlQYXJhbXMocGFyYW1zLnF1ZXJ5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtcy5zdGF0ZSkge1xyXG4gICAgICAgICAgcm91dGUgPSByb3V0ZS53aXRoU3RhdGVQYXJhbXMocGFyYW1zLnN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUocm91dGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBDYW5ub3QgZ28gYmFjayBmcm9tICR7dGhpcy5sb2NhdGlvbi5wYXRoKCl9IGJlY2F1c2Ugbm8gcm91dGUgbWF0Y2hlcyBjdXJyZW50IHVybGBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHRyYWN0QWxsUGFyYW1zKGN1cnJlbnRSb3V0ZT86IFJkdFJvdXRlKTogUmR0UmVhZG9ubHlQYXJhbWV0ZXJzIHwgbnVsbCB7XHJcbiAgICBpZiAoIWN1cnJlbnRSb3V0ZSkge1xyXG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlQWJzb2x1dGVVcmwoKTtcclxuICAgICAgaWYgKCFwYXJzZWQpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ05vIHJvdXRlIG1hdGNoZXMgY3VycmVudCB1cmwuJyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZHRSZWFkb25seVBhcmFtZXRlcnMoKTtcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50Um91dGUgPSBwYXJzZWQucm91dGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmxvY2F0aW9uLnBhdGgoKTtcclxuICAgIHJldHVybiBjdXJyZW50Um91dGUucGFyc2VBYnNvbHV0ZVVybCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgaXNQYXJlbnRPZkN1cnJlbnRMb2NhdGlvbihyb3V0ZTogUmR0Um91dGUpIHtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMucGFyc2VBYnNvbHV0ZVVybCgpKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUXVlcnlQYXJhbXMoLi4ucGFyYW1OYW1lczogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgWz8mXSgke3BhcmFtTmFtZXMuam9pbignfCcpfSk9W14mXSpgLCAnZycpO1xyXG5cclxuICAgIHJldHVybiBoaXN0b3J5LnJlcGxhY2VTdGF0ZShcclxuICAgICAgbnVsbCxcclxuICAgICAgJycsXHJcbiAgICAgIGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uc2VhcmNoLnJlcGxhY2UocmVnZXgsICcnKS5yZXBsYWNlKC9eJi8sICc/JylcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|