kwikid-forms 0.2.10 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/kwikid-forms.umd.js +269 -93
- package/bundles/kwikid-forms.umd.js.map +1 -1
- package/esm2015/lib/renderer/config-converter.helper.js +22 -2
- package/esm2015/lib/renderer/form-view/definitions/form-view.actions.definition.js +3 -1
- package/esm2015/lib/renderer/form-view/definitions/form-view.apis.definition.js +6 -1
- package/esm2015/lib/renderer/form-view/form-view.component.js +104 -57
- package/esm2015/lib/renderer/form-view/helpers/form-view.apis.helper.js +107 -51
- package/fesm2015/kwikid-forms.js +232 -103
- package/fesm2015/kwikid-forms.js.map +1 -1
- package/lib/renderer/form-view/definitions/form-view.actions.definition.d.ts +17 -2
- package/lib/renderer/form-view/definitions/form-view.apis.definition.d.ts +20 -2
- package/lib/renderer/form-view/form-view.component.d.ts +5 -2
- package/lib/renderer/form-view/helpers/form-view.apis.helper.d.ts +3 -2
- package/package.json +1 -1
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { __awaiter, __decorate } from "tslib";
|
|
2
2
|
import { Action, checkObjectKeyExists, Condition, logMethod, Rule, setValueToObjectPath, Source } from "kwikid-toolkit";
|
|
3
|
+
import { EApiRequestUrlType } from "../definitions/form-view.apis.definition";
|
|
3
4
|
export class Apis {
|
|
4
5
|
constructor(object, takeAction) {
|
|
5
6
|
this._object = object;
|
|
6
7
|
this._takeAction = takeAction;
|
|
7
|
-
this.
|
|
8
|
-
this.
|
|
9
|
-
this._response = this._object.FIELD_CONFIG.api.response;
|
|
10
|
-
this._status = this._object.FIELD_CONFIG.api.status;
|
|
8
|
+
this._request = this._object.API_CONFIG.request;
|
|
9
|
+
this._response = this._object.API_CONFIG.response;
|
|
11
10
|
}
|
|
12
11
|
get object() {
|
|
13
12
|
return this._object;
|
|
@@ -15,55 +14,89 @@ export class Apis {
|
|
|
15
14
|
set object(value) {
|
|
16
15
|
this._object = value;
|
|
17
16
|
}
|
|
17
|
+
setUrl() {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
if (this._request.url.hasOwnProperty("type") &&
|
|
20
|
+
this._request.url.type === EApiRequestUrlType.CALCULATED) {
|
|
21
|
+
const source = new Source(this._object);
|
|
22
|
+
const url = yield source.getValueFromSource(this._request.url.props.value.source);
|
|
23
|
+
this._request.url = setValueToObjectPath(this._request.url, "value", url);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this._request.url = setValueToObjectPath({}, "value", this._request.url);
|
|
27
|
+
}
|
|
28
|
+
return this._object.API_CONFIG;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
18
31
|
setRequestBody() {
|
|
19
32
|
var _a, _b, _c, _d;
|
|
20
33
|
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
if (checkObjectKeyExists(this._request, "body")) {
|
|
35
|
+
if (checkObjectKeyExists(this._request.headers, "params")) {
|
|
36
|
+
let params = this._request.body.params;
|
|
37
|
+
let paramIndex = 0;
|
|
38
|
+
for (let param of params) {
|
|
39
|
+
let sources = param.sources;
|
|
40
|
+
let sourceIndex = 0;
|
|
41
|
+
for (let source of sources) {
|
|
42
|
+
const sources = new Source(this._object);
|
|
43
|
+
const value = sources.getValueFromSource(source);
|
|
44
|
+
// Set the Value of current source.
|
|
45
|
+
this._object.API_CONFIG = setValueToObjectPath(this._object.API_CONFIG, `request.body.params[${paramIndex}].sources[${sourceIndex}].value`, value);
|
|
46
|
+
const validation = source.validation;
|
|
47
|
+
const triggers = (_a = validation === null || validation === void 0 ? void 0 : validation.triggers) !== null && _a !== void 0 ? _a : [];
|
|
48
|
+
const rules = (_b = validation === null || validation === void 0 ? void 0 : validation.rules) !== null && _b !== void 0 ? _b : [];
|
|
49
|
+
const actions = (_d = (_c = validation) === null || _c === void 0 ? void 0 : _c.actions) !== null && _d !== void 0 ? _d : [];
|
|
50
|
+
const rulesMapping = new Rule(rules, this._object).mapping();
|
|
51
|
+
for (let action of actions) {
|
|
52
|
+
const conditionEvaluation = new Condition(action.condition, rulesMapping).evaluate();
|
|
53
|
+
if (conditionEvaluation) {
|
|
54
|
+
const actions = new Action(action, rulesMapping, this._object, this._takeAction);
|
|
55
|
+
yield actions.execute();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
sourceIndex++;
|
|
41
59
|
}
|
|
60
|
+
paramIndex++;
|
|
42
61
|
}
|
|
43
|
-
|
|
62
|
+
return this._object.API_CONFIG;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return this._object.API_CONFIG;
|
|
44
66
|
}
|
|
45
|
-
paramIndex++;
|
|
46
67
|
}
|
|
47
|
-
|
|
68
|
+
else {
|
|
69
|
+
return this._object.API_CONFIG;
|
|
70
|
+
}
|
|
48
71
|
});
|
|
49
72
|
}
|
|
50
73
|
validateRequestBody() {
|
|
51
74
|
var _a;
|
|
52
75
|
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
76
|
+
if (checkObjectKeyExists(this._request, "body")) {
|
|
77
|
+
if (checkObjectKeyExists(this._request.body, "validation")) {
|
|
78
|
+
const body = this._request.body;
|
|
79
|
+
const validation = body.validation;
|
|
80
|
+
const triggers = validation.triggers;
|
|
81
|
+
const rules = validation.rules;
|
|
82
|
+
const actions = (_a = validation) === null || _a === void 0 ? void 0 : _a.actions;
|
|
83
|
+
const rulesMapping = new Rule(rules, this._object).mapping();
|
|
84
|
+
for (let action of actions) {
|
|
85
|
+
const conditionSuccess = new Condition(action.condition, rulesMapping).evaluate();
|
|
86
|
+
if (conditionSuccess) {
|
|
87
|
+
const actions = new Action(action, rulesMapping, this._object, this._takeAction);
|
|
88
|
+
yield actions.execute();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return this._object.API_CONFIG;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
return this._object.API_CONFIG;
|
|
64
95
|
}
|
|
65
96
|
}
|
|
66
|
-
|
|
97
|
+
else {
|
|
98
|
+
return this._object.API_CONFIG;
|
|
99
|
+
}
|
|
67
100
|
});
|
|
68
101
|
}
|
|
69
102
|
setRequestHeaders() {
|
|
@@ -80,7 +113,7 @@ export class Apis {
|
|
|
80
113
|
const sources = new Source(this._object);
|
|
81
114
|
const value = sources.getValueFromSource(source);
|
|
82
115
|
// Set the Value of current source.
|
|
83
|
-
this._object.
|
|
116
|
+
this._object.API_CONFIG = setValueToObjectPath(this._object.API_CONFIG, `request.headers.params[${paramIndex}].sources[${sourceIndex}].value`, value);
|
|
84
117
|
const validation = source.validation;
|
|
85
118
|
const triggers = (_a = validation === null || validation === void 0 ? void 0 : validation.triggers) !== null && _a !== void 0 ? _a : [];
|
|
86
119
|
const rules = (_b = validation === null || validation === void 0 ? void 0 : validation.rules) !== null && _b !== void 0 ? _b : [];
|
|
@@ -97,14 +130,14 @@ export class Apis {
|
|
|
97
130
|
}
|
|
98
131
|
paramIndex++;
|
|
99
132
|
}
|
|
100
|
-
return this._object.
|
|
133
|
+
return this._object.API_CONFIG;
|
|
101
134
|
}
|
|
102
135
|
else {
|
|
103
|
-
return this._object.
|
|
136
|
+
return this._object.API_CONFIG;
|
|
104
137
|
}
|
|
105
138
|
}
|
|
106
139
|
else {
|
|
107
|
-
return this._object.
|
|
140
|
+
return this._object.API_CONFIG;
|
|
108
141
|
}
|
|
109
142
|
});
|
|
110
143
|
}
|
|
@@ -126,23 +159,41 @@ export class Apis {
|
|
|
126
159
|
yield actions.execute();
|
|
127
160
|
}
|
|
128
161
|
}
|
|
129
|
-
return this._object.
|
|
162
|
+
return this._object.API_CONFIG;
|
|
130
163
|
}
|
|
131
164
|
else {
|
|
132
|
-
return this._object.
|
|
165
|
+
return this._object.API_CONFIG;
|
|
133
166
|
}
|
|
134
167
|
}
|
|
135
168
|
else {
|
|
136
|
-
return this._object.
|
|
169
|
+
return this._object.API_CONFIG;
|
|
137
170
|
}
|
|
138
171
|
});
|
|
139
172
|
}
|
|
140
173
|
validateResponse() {
|
|
141
174
|
return __awaiter(this, void 0, void 0, function* () {
|
|
142
|
-
|
|
143
|
-
|
|
175
|
+
if (checkObjectKeyExists(this._response, "validation")) {
|
|
176
|
+
const validation = this._response.validation;
|
|
177
|
+
const triggers = validation.triggers;
|
|
178
|
+
const rules = validation.rules;
|
|
179
|
+
const actions = validation.actions;
|
|
180
|
+
const rulesMapping = new Rule(rules, this._object).mapping();
|
|
181
|
+
for (let action of actions) {
|
|
182
|
+
const conditionSuccess = new Condition(action.condition, rulesMapping).evaluate();
|
|
183
|
+
if (conditionSuccess) {
|
|
184
|
+
const actions = new Action(action, rulesMapping, this._object, this._takeAction);
|
|
185
|
+
yield actions.execute();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return this._object.API_CONFIG;
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
callNextApi(validation) {
|
|
193
|
+
var _a;
|
|
194
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
144
195
|
const rules = validation.rules;
|
|
145
|
-
const actions = validation.actions;
|
|
196
|
+
const actions = (_a = validation) === null || _a === void 0 ? void 0 : _a.actions;
|
|
146
197
|
const rulesMapping = new Rule(rules, this._object).mapping();
|
|
147
198
|
for (let action of actions) {
|
|
148
199
|
const conditionSuccess = new Condition(action.condition, rulesMapping).evaluate();
|
|
@@ -151,10 +202,12 @@ export class Apis {
|
|
|
151
202
|
yield actions.execute();
|
|
152
203
|
}
|
|
153
204
|
}
|
|
154
|
-
return this._object.FIELD_CONFIG;
|
|
155
205
|
});
|
|
156
206
|
}
|
|
157
207
|
}
|
|
208
|
+
__decorate([
|
|
209
|
+
logMethod
|
|
210
|
+
], Apis.prototype, "setUrl", null);
|
|
158
211
|
__decorate([
|
|
159
212
|
logMethod
|
|
160
213
|
], Apis.prototype, "setRequestBody", null);
|
|
@@ -170,4 +223,7 @@ __decorate([
|
|
|
170
223
|
__decorate([
|
|
171
224
|
logMethod
|
|
172
225
|
], Apis.prototype, "validateResponse", null);
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmFwaXMuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixvQkFBb0IsRUFDcEIsTUFBTSxFQUtQLE1BQU0sZ0JBQWdCLENBQUM7QUFjeEIsTUFBTSxPQUFPLElBQUk7SUFnQmYsWUFBWSxNQUFXLEVBQUUsVUFBZTtRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUU5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxDQUFDO0lBdEJELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBb0JZLGNBQWM7OztZQUN6QixJQUFJLE1BQU0sR0FBZ0Ms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aUIsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUM3QyxNQUFNLE9BQU8sR0FBb0IsVUFBa0IsQ0FBQyxPQUFPLENBQUM7WUFFNUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUU3RCxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFNBQVMsQ0FDcEMsTUFBTSxDQUFDLFNBQVMsRUFDaEIsWUFBWSxDQUNiLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBRWIsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQ3hCLE1BQU0sRUFDTixZQUFZLEVBQ1osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO29CQUVGLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN6QjthQUNGO1lBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNuQyxDQUFDO0tBQUE7Q0FDRjtBQTNOQztJQURDLFNBQVM7MENBcURUO0FBR0Q7SUFEQyxTQUFTOytDQStCVDtBQUdEO0lBREMsU0FBUzs2Q0E2RFQ7QUFHRDtJQURDLFNBQVM7a0RBcUNUO0FBR0Q7SUFEQyxTQUFTOzRDQTZCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbixcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIENvbmRpdGlvbixcbiAgbG9nTWV0aG9kLFxuICBSdWxlLFxuICBzZXRWYWx1ZVRvT2JqZWN0UGF0aCxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBUUnVsZSxcbiAgVFNvdXJjZSxcbiAgVFZhbGlkYXRpb25cbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQge1xuICBUQXBpLFxuICBUQXBpUmVxdWVzdCxcbiAgVEFwaVJlcXVlc3RCb2R5LFxuICBUQXBpUmVxdWVzdEJvZHlQYXJhbSxcbiAgVEFwaVJlcXVlc3RIZWFkZXJzLFxuICBUQXBpUmVxdWVzdEhlYWRlcnNQYXJhbSxcbiAgVEFwaVJlc3BvbnNlLFxuICBUQXBpU3RhdHVzXG59IGZyb20gXCIuLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcuYXBpcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBURmllbGRBcGlDYWxsIH0gZnJvbSBcIi4uL2RlZmluaXRpb25zL2Zvcm0tdmlldy5maWVsZHMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgVFRyaWdnZXIgfSBmcm9tIFwiLi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LnRyaWdnZXJzLmRlZmluaXRpb25cIjtcblxuZXhwb3J0IGNsYXNzIEFwaXMge1xuICBwcml2YXRlIF9vYmplY3Q6IGFueTtcbiAgZ2V0IG9iamVjdCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9vYmplY3Q7XG4gIH1cbiAgc2V0IG9iamVjdCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fb2JqZWN0ID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF90YWtlQWN0aW9uOiBGdW5jdGlvbjtcblxuICBwcml2YXRlIF9hcGk6IFRBcGk7XG4gIHByaXZhdGUgX3JlcXVlc3Q6IFRBcGlSZXF1ZXN0O1xuICBwcml2YXRlIF9yZXNwb25zZTogVEFwaVJlc3BvbnNlO1xuICBwcml2YXRlIF9zdGF0dXM6IFRBcGlTdGF0dXM7XG5cbiAgY29uc3RydWN0b3Iob2JqZWN0OiBhbnksIHRha2VBY3Rpb246IGFueSkge1xuICAgIHRoaXMuX29iamVjdCA9IG9iamVjdDtcbiAgICB0aGlzLl90YWtlQWN0aW9uID0gdGFrZUFjdGlvbjtcblxuICAgIHRoaXMuX2FwaSA9IHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUcuYXBpO1xuICAgIHRoaXMuX3JlcXVlc3QgPSB0aGlzLl9vYmplY3QuRklFTERfQ09ORklHLmFwaS5yZXF1ZXN0O1xuICAgIHRoaXMuX3Jlc3BvbnNlID0gdGhpcy5fb2JqZWN0LkZJRUxEX0NPTkZJRy5hcGkucmVzcG9uc2U7XG4gICAgdGhpcy5fc3RhdHVzID0gdGhpcy5fb2JqZWN0LkZJRUxEX0NPTkZJRy5hcGkuc3RhdHVzO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBwdWJsaWMgYXN5bmMgc2V0UmVxdWVzdEJvZHkoKTogUHJvbWlzZTxURmllbGRBcGlDYWxsPiB7XG4gICAgbGV0IHBhcmFtczogQXJyYXk8VEFwaVJlcXVlc3RCb2R5UGFyYW0+ID0gdGhpcy5fcmVxdWVzdC5ib2R5LnBhcmFtcztcblxuICAgIGxldCBwYXJhbUluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBwYXJhbSBvZiBwYXJhbXMpIHtcbiAgICAgIGxldCBzb3VyY2VzOiBBcnJheTxUU291cmNlPiA9IHBhcmFtLnNvdXJjZXM7XG5cbiAgICAgIGxldCBzb3VyY2VJbmRleCA9IDA7XG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICBjb25zdCBzb3VyY2VzID0gbmV3IFNvdXJjZSh0aGlzLl9vYmplY3QpO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2Uoc291cmNlKTtcbiAgICAgICAgLy8gU2V0IHRoZSBWYWx1ZSBvZiBjdXJyZW50IHNvdXJjZS5cbiAgICAgICAgdGhpcy5fb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUcsXG4gICAgICAgICAgYGFwaS5yZXF1ZXN0LmJvZHkucGFyYW1zWyR7cGFyYW1JbmRleH1dLnNvdXJjZXNbJHtzb3VyY2VJbmRleH1dLnZhbHVlYCxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb246IFRWYWxpZGF0aW9uID0gKHNvdXJjZSBhcyBhbnkpLnZhbGlkYXRpb247XG5cbiAgICAgICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IHZhbGlkYXRpb24/LnRyaWdnZXJzID8/IFtdO1xuICAgICAgICBjb25zdCBydWxlczogQXJyYXk8VFJ1bGU+ID0gdmFsaWRhdGlvbj8ucnVsZXMgPz8gW107XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFRBY3Rpb24+ID0gKHZhbGlkYXRpb24gYXMgYW55KT8uYWN0aW9ucyA/PyBbXTtcblxuICAgICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywgdGhpcy5fb2JqZWN0KS5tYXBwaW5nKCk7XG5cbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBjb25kaXRpb25FdmFsdWF0aW9uID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uRXZhbHVhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAgICB0aGlzLl9vYmplY3QsXG4gICAgICAgICAgICAgIHRoaXMuX3Rha2VBY3Rpb25cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUluZGV4Kys7XG4gICAgICB9XG5cbiAgICAgIHBhcmFtSW5kZXgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlUmVxdWVzdEJvZHkoKTogUHJvbWlzZTxURmllbGRBcGlDYWxsPiB7XG4gICAgY29uc3QgYm9keTogVEFwaVJlcXVlc3RCb2R5ID0gdGhpcy5fcmVxdWVzdC5ib2R5O1xuXG4gICAgY29uc3QgdmFsaWRhdGlvbjogVFZhbGlkYXRpb24gPSBib2R5LnZhbGlkYXRpb247XG5cbiAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8VFRyaWdnZXI+ID0gdmFsaWRhdGlvbi50cmlnZ2VycztcbiAgICBjb25zdCBydWxlczogQXJyYXk8VFJ1bGU+ID0gdmFsaWRhdGlvbi5ydWxlcztcbiAgICBjb25zdCBhY3Rpb25zOiBBcnJheTxUQWN0aW9uPiA9ICh2YWxpZGF0aW9uIGFzIGFueSk/LmFjdGlvbnM7XG5cbiAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywgdGhpcy5fb2JqZWN0KS5tYXBwaW5nKCk7XG5cbiAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgIHRoaXMuX29iamVjdCxcbiAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHB1YmxpYyBhc3luYyBzZXRSZXF1ZXN0SGVhZGVycygpOiBQcm9taXNlPFRGaWVsZEFwaUNhbGw+IHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5fcmVxdWVzdCwgXCJoZWFkZXJzXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5fcmVxdWVzdC5oZWFkZXJzLCBcInBhcmFtc1wiKSkge1xuICAgICAgICBsZXQgcGFyYW1zOiBBcnJheTxUQXBpUmVxdWVzdEhlYWRlcnNQYXJhbT4gPVxuICAgICAgICAgIHRoaXMuX3JlcXVlc3QuaGVhZGVycy5wYXJhbXM7XG4gICAgICAgIGxldCBwYXJhbUluZGV4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgICAgbGV0IHNvdXJjZXM6IEFycmF5PFRTb3VyY2U+ID0gcGFyYW0uc291cmNlcztcblxuICAgICAgICAgIGxldCBzb3VyY2VJbmRleCA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBuZXcgU291cmNlKHRoaXMuX29iamVjdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2Uoc291cmNlKTtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgVmFsdWUgb2YgY3VycmVudCBzb3VyY2UuXG4gICAgICAgICAgICB0aGlzLl9vYmplY3QuRklFTERfQ09ORklHID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICAgIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUcsXG4gICAgICAgICAgICAgIGBhcGkucmVxdWVzdC5oZWFkZXJzLnBhcmFtc1ske3BhcmFtSW5kZXh9XS5zb3VyY2VzWyR7c291cmNlSW5kZXh9XS52YWx1ZWAsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uOiBUVmFsaWRhdGlvbiA9IChzb3VyY2UgYXMgYW55KS52YWxpZGF0aW9uO1xuXG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8VFRyaWdnZXI+ID0gdmFsaWRhdGlvbj8udHJpZ2dlcnMgPz8gW107XG4gICAgICAgICAgICBjb25zdCBydWxlczogQXJyYXk8VFJ1bGU+ID0gdmFsaWRhdGlvbj8ucnVsZXMgPz8gW107XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zOiBBcnJheTxUQWN0aW9uPiA9ICh2YWxpZGF0aW9uIGFzIGFueSk/LmFjdGlvbnMgPz8gW107XG5cbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB0aGlzLl9vYmplY3QpLm1hcHBpbmcoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uRXZhbHVhdGlvbiA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgICAgICAgIGlmIChjb25kaXRpb25FdmFsdWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3QsXG4gICAgICAgICAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNvdXJjZUluZGV4Kys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyYW1JbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVSZXF1ZXN0SGVhZGVycygpOiBQcm9taXNlPFRGaWVsZEFwaUNhbGw+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBUQXBpUmVxdWVzdEhlYWRlcnMgPSB0aGlzLl9yZXF1ZXN0LmhlYWRlcnM7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuX3JlcXVlc3QsIFwiaGVhZGVyc1wiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuX3JlcXVlc3QuaGVhZGVycywgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb246IFRWYWxpZGF0aW9uID0gaGVhZGVycy52YWxpZGF0aW9uO1xuXG4gICAgICAgIGNvbnN0IHRyaWdnZXJzOiBBcnJheTxUVHJpZ2dlcj4gPSB2YWxpZGF0aW9uLnRyaWdnZXJzO1xuICAgICAgICBjb25zdCBydWxlczogQXJyYXk8VFJ1bGU+ID0gdmFsaWRhdGlvbi5ydWxlcztcbiAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSAodmFsaWRhdGlvbiBhcyBhbnkpPy5hY3Rpb25zO1xuXG4gICAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB0aGlzLl9vYmplY3QpLm1hcHBpbmcoKTtcblxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICAgIHRoaXMuX29iamVjdCxcbiAgICAgICAgICAgICAgdGhpcy5fdGFrZUFjdGlvblxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuRklFTERfQ09ORklHO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuRklFTERfQ09ORklHO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlUmVzcG9uc2UoKTogUHJvbWlzZTxURmllbGRBcGlDYWxsPiB7XG4gICAgY29uc3QgdmFsaWRhdGlvbjogVFZhbGlkYXRpb24gPSB0aGlzLl9yZXNwb25zZS52YWxpZGF0aW9uO1xuXG4gICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IHZhbGlkYXRpb24udHJpZ2dlcnM7XG4gICAgY29uc3QgcnVsZXM6IEFycmF5PFRSdWxlPiA9IHZhbGlkYXRpb24ucnVsZXM7XG4gICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSAodmFsaWRhdGlvbiBhcyBhbnkpLmFjdGlvbnM7XG5cbiAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywgdGhpcy5fb2JqZWN0KS5tYXBwaW5nKCk7XG5cbiAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgIHRoaXMuX29iamVjdCxcbiAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29iamVjdC5GSUVMRF9DT05GSUc7XG4gIH1cbn1cbiJdfQ==
|
|
226
|
+
__decorate([
|
|
227
|
+
logMethod
|
|
228
|
+
], Apis.prototype, "callNextApi", null);
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmFwaXMuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixvQkFBb0IsRUFDcEIsTUFBTSxFQUtQLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQU9uQixNQUFNLDBDQUEwQyxDQUFDO0FBSWxELE1BQU0sT0FBTyxJQUFJO0lBY2YsWUFBWSxNQUFXLEVBQUUsVUFBZTtRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUU5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUNwRCxDQUFDO0lBbEJELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBZ0JZLE1BQU07O1lBQ2pCLElBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLFVBQVUsRUFDeEQ7Z0JBQ0EsTUFB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RTtnQkFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFNBQVMsQ0FDcEMsTUFBTSxDQUFDLFNBQVMsRUFDaEIsWUFBWSxDQUNiLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBRWIsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQ3hCLE1BQU0sRUFDTixZQUFZLEVBQ1osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO29CQUVGLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN6QjthQUNGOztLQUNGO0NBQ0Y7QUF4UkM7SUFEQyxTQUFTO2tDQWdCVDtBQUdEO0lBREMsU0FBUzswQ0E2RFQ7QUFHRDtJQURDLFNBQVM7K0NBdUNUO0FBR0Q7SUFEQyxTQUFTOzZDQTZEVDtBQUdEO0lBREMsU0FBUztrREFxQ1Q7QUFHRDtJQURDLFNBQVM7NENBOEJUO0FBR0Q7SUFEQyxTQUFTO3VDQXdCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbixcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIENvbmRpdGlvbixcbiAgbG9nTWV0aG9kLFxuICBSdWxlLFxuICBzZXRWYWx1ZVRvT2JqZWN0UGF0aCxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBUUnVsZSxcbiAgVFNvdXJjZSxcbiAgVFZhbGlkYXRpb25cbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQge1xuICBFQXBpUmVxdWVzdFVybFR5cGUsXG4gIFRBcGlSZXF1ZXN0LFxuICBUQXBpUmVxdWVzdEJvZHksXG4gIFRBcGlSZXF1ZXN0Qm9keVBhcmFtLFxuICBUQXBpUmVxdWVzdEhlYWRlcnMsXG4gIFRBcGlSZXF1ZXN0SGVhZGVyc1BhcmFtLFxuICBUQXBpUmVzcG9uc2Vcbn0gZnJvbSBcIi4uL2RlZmluaXRpb25zL2Zvcm0tdmlldy5hcGlzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IFRGaWVsZEFwaUNhbGwgfSBmcm9tIFwiLi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmZpZWxkcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBUVHJpZ2dlciB9IGZyb20gXCIuLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcudHJpZ2dlcnMuZGVmaW5pdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgQXBpcyB7XG4gIHByaXZhdGUgX29iamVjdDogYW55O1xuICBnZXQgb2JqZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX29iamVjdDtcbiAgfVxuICBzZXQgb2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9vYmplY3QgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3Rha2VBY3Rpb246IEZ1bmN0aW9uO1xuXG4gIHByaXZhdGUgX3JlcXVlc3Q6IFRBcGlSZXF1ZXN0O1xuICBwcml2YXRlIF9yZXNwb25zZTogVEFwaVJlc3BvbnNlO1xuXG4gIGNvbnN0cnVjdG9yKG9iamVjdDogYW55LCB0YWtlQWN0aW9uOiBhbnkpIHtcbiAgICB0aGlzLl9vYmplY3QgPSBvYmplY3Q7XG4gICAgdGhpcy5fdGFrZUFjdGlvbiA9IHRha2VBY3Rpb247XG5cbiAgICB0aGlzLl9yZXF1ZXN0ID0gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUcucmVxdWVzdDtcbiAgICB0aGlzLl9yZXNwb25zZSA9IHRoaXMuX29iamVjdC5BUElfQ09ORklHLnJlc3BvbnNlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBwdWJsaWMgYXN5bmMgc2V0VXJsKCk6IFByb21pc2U8VEZpZWxkQXBpQ2FsbD4ge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX3JlcXVlc3QudXJsLmhhc093blByb3BlcnR5KFwidHlwZVwiKSAmJlxuICAgICAgdGhpcy5fcmVxdWVzdC51cmwudHlwZSA9PT0gRUFwaVJlcXVlc3RVcmxUeXBlLkNBTENVTEFURURcbiAgICApIHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2UodGhpcy5fb2JqZWN0KTtcbiAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgIHRoaXMuX3JlcXVlc3QudXJsLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICAgKTtcbiAgICAgIHRoaXMuX3JlcXVlc3QudXJsID0gc2V0VmFsdWVUb09iamVjdFBhdGgodGhpcy5fcmVxdWVzdC51cmwsIFwidmFsdWVcIiwgdXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVxdWVzdC51cmwgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aCh7fSwgXCJ2YWx1ZVwiLCB0aGlzLl9yZXF1ZXN0LnVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBwdWJsaWMgYXN5bmMgc2V0UmVxdWVzdEJvZHkoKTogUHJvbWlzZTxURmllbGRBcGlDYWxsPiB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuX3JlcXVlc3QsIFwiYm9keVwiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuX3JlcXVlc3QuaGVhZGVycywgXCJwYXJhbXNcIikpIHtcbiAgICAgICAgbGV0IHBhcmFtczogQXJyYXk8VEFwaVJlcXVlc3RCb2R5UGFyYW0+ID0gdGhpcy5fcmVxdWVzdC5ib2R5LnBhcmFtcztcblxuICAgICAgICBsZXQgcGFyYW1JbmRleCA9IDA7XG4gICAgICAgIGZvciAobGV0IHBhcmFtIG9mIHBhcmFtcykge1xuICAgICAgICAgIGxldCBzb3VyY2VzOiBBcnJheTxUU291cmNlPiA9IHBhcmFtLnNvdXJjZXM7XG5cbiAgICAgICAgICBsZXQgc291cmNlSW5kZXggPSAwO1xuICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VzID0gbmV3IFNvdXJjZSh0aGlzLl9vYmplY3QpO1xuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZXMuZ2V0VmFsdWVGcm9tU291cmNlKHNvdXJjZSk7XG4gICAgICAgICAgICAvLyBTZXQgdGhlIFZhbHVlIG9mIGN1cnJlbnQgc291cmNlLlxuICAgICAgICAgICAgdGhpcy5fb2JqZWN0LkFQSV9DT05GSUcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0LkFQSV9DT05GSUcsXG4gICAgICAgICAgICAgIGByZXF1ZXN0LmJvZHkucGFyYW1zWyR7cGFyYW1JbmRleH1dLnNvdXJjZXNbJHtzb3VyY2VJbmRleH1dLnZhbHVlYCxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb246IFRWYWxpZGF0aW9uID0gKHNvdXJjZSBhcyBhbnkpLnZhbGlkYXRpb247XG5cbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJzOiBBcnJheTxUVHJpZ2dlcj4gPSB2YWxpZGF0aW9uPy50cmlnZ2VycyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzOiBBcnJheTxUUnVsZT4gPSB2YWxpZGF0aW9uPy5ydWxlcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFRBY3Rpb24+ID0gKHZhbGlkYXRpb24gYXMgYW55KT8uYWN0aW9ucyA/PyBbXTtcblxuICAgICAgICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGUocnVsZXMsIHRoaXMuX29iamVjdCkubWFwcGluZygpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25FdmFsdWF0aW9uID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbkV2YWx1YXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX29iamVjdCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Rha2VBY3Rpb25cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc291cmNlSW5kZXgrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJhbUluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZVJlcXVlc3RCb2R5KCk6IFByb21pc2U8VEZpZWxkQXBpQ2FsbD4ge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLl9yZXF1ZXN0LCBcImJvZHlcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLl9yZXF1ZXN0LmJvZHksIFwidmFsaWRhdGlvblwiKSkge1xuICAgICAgICBjb25zdCBib2R5OiBUQXBpUmVxdWVzdEJvZHkgPSB0aGlzLl9yZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbjogVFZhbGlkYXRpb24gPSBib2R5LnZhbGlkYXRpb247XG5cbiAgICAgICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IHZhbGlkYXRpb24udHJpZ2dlcnM7XG4gICAgICAgIGNvbnN0IHJ1bGVzOiBBcnJheTxUUnVsZT4gPSB2YWxpZGF0aW9uLnJ1bGVzO1xuICAgICAgICBjb25zdCBhY3Rpb25zOiBBcnJheTxUQWN0aW9uPiA9ICh2YWxpZGF0aW9uIGFzIGFueSk/LmFjdGlvbnM7XG5cbiAgICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGUocnVsZXMsIHRoaXMuX29iamVjdCkubWFwcGluZygpO1xuXG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgICAgaWYgKGNvbmRpdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0LFxuICAgICAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHB1YmxpYyBhc3luYyBzZXRSZXF1ZXN0SGVhZGVycygpOiBQcm9taXNlPFRGaWVsZEFwaUNhbGw+IHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5fcmVxdWVzdCwgXCJoZWFkZXJzXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5fcmVxdWVzdC5oZWFkZXJzLCBcInBhcmFtc1wiKSkge1xuICAgICAgICBsZXQgcGFyYW1zOiBBcnJheTxUQXBpUmVxdWVzdEhlYWRlcnNQYXJhbT4gPVxuICAgICAgICAgIHRoaXMuX3JlcXVlc3QuaGVhZGVycy5wYXJhbXM7XG4gICAgICAgIGxldCBwYXJhbUluZGV4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgICAgbGV0IHNvdXJjZXM6IEFycmF5PFRTb3VyY2U+ID0gcGFyYW0uc291cmNlcztcblxuICAgICAgICAgIGxldCBzb3VyY2VJbmRleCA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBuZXcgU291cmNlKHRoaXMuX29iamVjdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2Uoc291cmNlKTtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgVmFsdWUgb2YgY3VycmVudCBzb3VyY2UuXG4gICAgICAgICAgICB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgICB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRyxcbiAgICAgICAgICAgICAgYHJlcXVlc3QuaGVhZGVycy5wYXJhbXNbJHtwYXJhbUluZGV4fV0uc291cmNlc1ske3NvdXJjZUluZGV4fV0udmFsdWVgLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbjogVFZhbGlkYXRpb24gPSAoc291cmNlIGFzIGFueSkudmFsaWRhdGlvbjtcblxuICAgICAgICAgICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IHZhbGlkYXRpb24/LnRyaWdnZXJzID8/IFtdO1xuICAgICAgICAgICAgY29uc3QgcnVsZXM6IEFycmF5PFRSdWxlPiA9IHZhbGlkYXRpb24/LnJ1bGVzID8/IFtdO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSAodmFsaWRhdGlvbiBhcyBhbnkpPy5hY3Rpb25zID8/IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywgdGhpcy5fb2JqZWN0KS5tYXBwaW5nKCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbkV2YWx1YXRpb24gPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uRXZhbHVhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0LFxuICAgICAgICAgICAgICAgICAgdGhpcy5fdGFrZUFjdGlvblxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzb3VyY2VJbmRleCsrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcmFtSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX29iamVjdC5BUElfQ09ORklHO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlUmVxdWVzdEhlYWRlcnMoKTogUHJvbWlzZTxURmllbGRBcGlDYWxsPiB7XG4gICAgY29uc3QgaGVhZGVyczogVEFwaVJlcXVlc3RIZWFkZXJzID0gdGhpcy5fcmVxdWVzdC5oZWFkZXJzO1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLl9yZXF1ZXN0LCBcImhlYWRlcnNcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLl9yZXF1ZXN0LmhlYWRlcnMsIFwidmFsaWRhdGlvblwiKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uOiBUVmFsaWRhdGlvbiA9IGhlYWRlcnMudmFsaWRhdGlvbjtcblxuICAgICAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8VFRyaWdnZXI+ID0gdmFsaWRhdGlvbi50cmlnZ2VycztcbiAgICAgICAgY29uc3QgcnVsZXM6IEFycmF5PFRSdWxlPiA9IHZhbGlkYXRpb24ucnVsZXM7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFRBY3Rpb24+ID0gKHZhbGlkYXRpb24gYXMgYW55KT8uYWN0aW9ucztcblxuICAgICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywgdGhpcy5fb2JqZWN0KS5tYXBwaW5nKCk7XG5cbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBjb25kaXRpb25TdWNjZXNzID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAgICB0aGlzLl9vYmplY3QsXG4gICAgICAgICAgICAgIHRoaXMuX3Rha2VBY3Rpb25cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0LkFQSV9DT05GSUc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9vYmplY3QuQVBJX0NPTkZJRztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZVJlc3BvbnNlKCk6IFByb21pc2U8VEZpZWxkQXBpQ2FsbD4ge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLl9yZXNwb25zZSwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uOiBUVmFsaWRhdGlvbiA9IHRoaXMuX3Jlc3BvbnNlLnZhbGlkYXRpb247XG4gICAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8VFRyaWdnZXI+ID0gdmFsaWRhdGlvbi50cmlnZ2VycztcbiAgICAgIGNvbnN0IHJ1bGVzOiBBcnJheTxUUnVsZT4gPSB2YWxpZGF0aW9uLnJ1bGVzO1xuICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSAodmFsaWRhdGlvbiBhcyBhbnkpLmFjdGlvbnM7XG5cbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB0aGlzLl9vYmplY3QpLm1hcHBpbmcoKTtcblxuICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICB0aGlzLl9vYmplY3QsXG4gICAgICAgICAgICB0aGlzLl90YWtlQWN0aW9uXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBwdWJsaWMgYXN5bmMgY2FsbE5leHRBcGkodmFsaWRhdGlvbjogVFZhbGlkYXRpb24pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJ1bGVzOiBBcnJheTxUUnVsZT4gPSB2YWxpZGF0aW9uLnJ1bGVzO1xuICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFRBY3Rpb24+ID0gKHZhbGlkYXRpb24gYXMgYW55KT8uYWN0aW9ucztcblxuICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB0aGlzLl9vYmplY3QpLm1hcHBpbmcoKTtcblxuICAgIGZvciAobGV0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICBjb25zdCBjb25kaXRpb25TdWNjZXNzID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgdGhpcy5fb2JqZWN0LFxuICAgICAgICAgIHRoaXMuX3Rha2VBY3Rpb25cbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|