@coralogix/rum-cli 1.1.19 → 1.1.21
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 +14 -7
- package/api/rum-api.ts +2 -1
- package/cli/commands/update-source-maps-command.ts +3 -2
- package/dist/api/rum-api.js +3 -2
- package/dist/cli/commands/update-source-maps-command.js +4 -3
- package/dist/models/commands.model.d.ts +1 -0
- package/dist/models/commands.model.js +1 -1
- package/dist/proto-models/com/coralogix/rum/v2/analytics.d.ts +131 -0
- package/dist/proto-models/com/coralogix/rum/v2/analytics.js +771 -0
- package/dist/proto-models/com/coralogix/rum/v2/audit_log.d.ts +1 -1
- package/dist/proto-models/com/coralogix/rum/v2/audit_log.js +3 -5
- package/dist/proto-models/com/coralogix/rum/v2/chunk.d.ts +1 -1
- package/dist/proto-models/com/coralogix/rum/v2/chunk.js +49 -54
- package/dist/proto-models/com/coralogix/rum/v2/file.d.ts +1 -1
- package/dist/proto-models/com/coralogix/rum/v2/file.js +34 -24
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.d.ts +64 -1
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +387 -92
- package/dist/proto-models/com/coralogix/rum/v2/rum_session_recording_service.d.ts +1 -1
- package/dist/proto-models/com/coralogix/rum/v2/rum_session_recording_service.js +32 -24
- package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.d.ts +4 -1
- package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +72 -59
- package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.d.ts +1 -1
- package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +24 -47
- package/dist/proto-models/com/coralogix/rum/v2/source_map_release.d.ts +1 -1
- package/dist/proto-models/com/coralogix/rum/v2/source_map_release.js +38 -43
- package/dist/proto-models/com/coralogix/rum/v2/template.d.ts +1 -1
- package/dist/proto-models/com/coralogix/rum/v2/template.js +53 -66
- package/dist/proto-models/google/protobuf/descriptor.d.ts +1 -1
- package/dist/proto-models/google/protobuf/descriptor.js +427 -537
- package/dist/services/source-maps.service.d.ts +1 -1
- package/dist/services/source-maps.service.js +3 -2
- package/models/commands.model.ts +1 -0
- package/package.json +1 -1
- package/proto-models/com/coralogix/rum/v2/analytics.ts +910 -0
- package/proto-models/com/coralogix/rum/v2/audit_log.ts +4 -6
- package/proto-models/com/coralogix/rum/v2/chunk.ts +56 -55
- package/proto-models/com/coralogix/rum/v2/file.ts +39 -25
- package/proto-models/com/coralogix/rum/v2/rum_service.ts +439 -90
- package/proto-models/com/coralogix/rum/v2/rum_session_recording_service.ts +40 -25
- package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +81 -58
- package/proto-models/com/coralogix/rum/v2/source_code_file_mapping.ts +27 -48
- package/proto-models/com/coralogix/rum/v2/source_map_release.ts +44 -44
- package/proto-models/com/coralogix/rum/v2/template.ts +60 -67
- package/proto-models/google/protobuf/descriptor.ts +464 -551
- package/protofetch.lock +2 -2
- package/protofetch.toml +1 -1
- package/protos/com/coralogix/rum/v2/analytics.proto +57 -0
- package/protos/com/coralogix/rum/v2/rum_service.proto +21 -0
- package/protos/com/coralogix/rum/v2/rum_source_map_service.proto +2 -0
- package/protoset.bin +0 -0
- package/services/source-maps.service.ts +2 -0
|
@@ -0,0 +1,771 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Error = exports.UserAffectedResponse = exports.TopTenResponse = exports.ClientDetailsResponse = exports.UserAffected = exports.EnvironmentInfo = exports.Url = exports.ErrorMessage = exports.NetworkRequest = exports.protobufPackage = void 0;
|
|
7
|
+
/* eslint-disable */
|
|
8
|
+
const long_1 = __importDefault(require("long"));
|
|
9
|
+
const minimal_1 = __importDefault(require("protobufjs/minimal"));
|
|
10
|
+
exports.protobufPackage = "com.coralogix.rum.v2";
|
|
11
|
+
function createBaseNetworkRequest() {
|
|
12
|
+
return { networkRequest: undefined, method: undefined, statusCode: undefined, numberOfUsers: 0, numberOfErrors: 0 };
|
|
13
|
+
}
|
|
14
|
+
exports.NetworkRequest = {
|
|
15
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
16
|
+
if (message.networkRequest !== undefined) {
|
|
17
|
+
writer.uint32(10).string(message.networkRequest);
|
|
18
|
+
}
|
|
19
|
+
if (message.method !== undefined) {
|
|
20
|
+
writer.uint32(18).string(message.method);
|
|
21
|
+
}
|
|
22
|
+
if (message.statusCode !== undefined) {
|
|
23
|
+
writer.uint32(24).int64(message.statusCode);
|
|
24
|
+
}
|
|
25
|
+
if (message.numberOfUsers !== 0) {
|
|
26
|
+
writer.uint32(32).int64(message.numberOfUsers);
|
|
27
|
+
}
|
|
28
|
+
if (message.numberOfErrors !== 0) {
|
|
29
|
+
writer.uint32(40).int64(message.numberOfErrors);
|
|
30
|
+
}
|
|
31
|
+
return writer;
|
|
32
|
+
},
|
|
33
|
+
decode(input, length) {
|
|
34
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
35
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
36
|
+
const message = createBaseNetworkRequest();
|
|
37
|
+
while (reader.pos < end) {
|
|
38
|
+
const tag = reader.uint32();
|
|
39
|
+
switch (tag >>> 3) {
|
|
40
|
+
case 1:
|
|
41
|
+
if (tag !== 10) {
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
message.networkRequest = reader.string();
|
|
45
|
+
continue;
|
|
46
|
+
case 2:
|
|
47
|
+
if (tag !== 18) {
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
message.method = reader.string();
|
|
51
|
+
continue;
|
|
52
|
+
case 3:
|
|
53
|
+
if (tag !== 24) {
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
message.statusCode = longToNumber(reader.int64());
|
|
57
|
+
continue;
|
|
58
|
+
case 4:
|
|
59
|
+
if (tag !== 32) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
message.numberOfUsers = longToNumber(reader.int64());
|
|
63
|
+
continue;
|
|
64
|
+
case 5:
|
|
65
|
+
if (tag !== 40) {
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
message.numberOfErrors = longToNumber(reader.int64());
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
reader.skipType(tag & 7);
|
|
75
|
+
}
|
|
76
|
+
return message;
|
|
77
|
+
},
|
|
78
|
+
fromJSON(object) {
|
|
79
|
+
return {
|
|
80
|
+
networkRequest: isSet(object.networkRequest) ? String(object.networkRequest) : undefined,
|
|
81
|
+
method: isSet(object.method) ? String(object.method) : undefined,
|
|
82
|
+
statusCode: isSet(object.statusCode) ? Number(object.statusCode) : undefined,
|
|
83
|
+
numberOfUsers: isSet(object.numberOfUsers) ? Number(object.numberOfUsers) : 0,
|
|
84
|
+
numberOfErrors: isSet(object.numberOfErrors) ? Number(object.numberOfErrors) : 0,
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
toJSON(message) {
|
|
88
|
+
const obj = {};
|
|
89
|
+
message.networkRequest !== undefined && (obj.networkRequest = message.networkRequest);
|
|
90
|
+
message.method !== undefined && (obj.method = message.method);
|
|
91
|
+
message.statusCode !== undefined && (obj.statusCode = Math.round(message.statusCode));
|
|
92
|
+
message.numberOfUsers !== undefined && (obj.numberOfUsers = Math.round(message.numberOfUsers));
|
|
93
|
+
message.numberOfErrors !== undefined && (obj.numberOfErrors = Math.round(message.numberOfErrors));
|
|
94
|
+
return obj;
|
|
95
|
+
},
|
|
96
|
+
create(base) {
|
|
97
|
+
return exports.NetworkRequest.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
98
|
+
},
|
|
99
|
+
fromPartial(object) {
|
|
100
|
+
var _a, _b, _c, _d, _e;
|
|
101
|
+
const message = createBaseNetworkRequest();
|
|
102
|
+
message.networkRequest = (_a = object.networkRequest) !== null && _a !== void 0 ? _a : undefined;
|
|
103
|
+
message.method = (_b = object.method) !== null && _b !== void 0 ? _b : undefined;
|
|
104
|
+
message.statusCode = (_c = object.statusCode) !== null && _c !== void 0 ? _c : undefined;
|
|
105
|
+
message.numberOfUsers = (_d = object.numberOfUsers) !== null && _d !== void 0 ? _d : 0;
|
|
106
|
+
message.numberOfErrors = (_e = object.numberOfErrors) !== null && _e !== void 0 ? _e : 0;
|
|
107
|
+
return message;
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
function createBaseErrorMessage() {
|
|
111
|
+
return { message: "", numberOfUsers: 0, numberOfErrors: 0 };
|
|
112
|
+
}
|
|
113
|
+
exports.ErrorMessage = {
|
|
114
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
115
|
+
if (message.message !== "") {
|
|
116
|
+
writer.uint32(10).string(message.message);
|
|
117
|
+
}
|
|
118
|
+
if (message.numberOfUsers !== 0) {
|
|
119
|
+
writer.uint32(16).int64(message.numberOfUsers);
|
|
120
|
+
}
|
|
121
|
+
if (message.numberOfErrors !== 0) {
|
|
122
|
+
writer.uint32(24).int64(message.numberOfErrors);
|
|
123
|
+
}
|
|
124
|
+
return writer;
|
|
125
|
+
},
|
|
126
|
+
decode(input, length) {
|
|
127
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
128
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
129
|
+
const message = createBaseErrorMessage();
|
|
130
|
+
while (reader.pos < end) {
|
|
131
|
+
const tag = reader.uint32();
|
|
132
|
+
switch (tag >>> 3) {
|
|
133
|
+
case 1:
|
|
134
|
+
if (tag !== 10) {
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
message.message = reader.string();
|
|
138
|
+
continue;
|
|
139
|
+
case 2:
|
|
140
|
+
if (tag !== 16) {
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
message.numberOfUsers = longToNumber(reader.int64());
|
|
144
|
+
continue;
|
|
145
|
+
case 3:
|
|
146
|
+
if (tag !== 24) {
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
message.numberOfErrors = longToNumber(reader.int64());
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
reader.skipType(tag & 7);
|
|
156
|
+
}
|
|
157
|
+
return message;
|
|
158
|
+
},
|
|
159
|
+
fromJSON(object) {
|
|
160
|
+
return {
|
|
161
|
+
message: isSet(object.message) ? String(object.message) : "",
|
|
162
|
+
numberOfUsers: isSet(object.numberOfUsers) ? Number(object.numberOfUsers) : 0,
|
|
163
|
+
numberOfErrors: isSet(object.numberOfErrors) ? Number(object.numberOfErrors) : 0,
|
|
164
|
+
};
|
|
165
|
+
},
|
|
166
|
+
toJSON(message) {
|
|
167
|
+
const obj = {};
|
|
168
|
+
message.message !== undefined && (obj.message = message.message);
|
|
169
|
+
message.numberOfUsers !== undefined && (obj.numberOfUsers = Math.round(message.numberOfUsers));
|
|
170
|
+
message.numberOfErrors !== undefined && (obj.numberOfErrors = Math.round(message.numberOfErrors));
|
|
171
|
+
return obj;
|
|
172
|
+
},
|
|
173
|
+
create(base) {
|
|
174
|
+
return exports.ErrorMessage.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
175
|
+
},
|
|
176
|
+
fromPartial(object) {
|
|
177
|
+
var _a, _b, _c;
|
|
178
|
+
const message = createBaseErrorMessage();
|
|
179
|
+
message.message = (_a = object.message) !== null && _a !== void 0 ? _a : "";
|
|
180
|
+
message.numberOfUsers = (_b = object.numberOfUsers) !== null && _b !== void 0 ? _b : 0;
|
|
181
|
+
message.numberOfErrors = (_c = object.numberOfErrors) !== null && _c !== void 0 ? _c : 0;
|
|
182
|
+
return message;
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
function createBaseUrl() {
|
|
186
|
+
return { urlName: "", errorType: undefined, numberOfUsers: 0, numberOfErrors: 0 };
|
|
187
|
+
}
|
|
188
|
+
exports.Url = {
|
|
189
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
190
|
+
if (message.urlName !== "") {
|
|
191
|
+
writer.uint32(10).string(message.urlName);
|
|
192
|
+
}
|
|
193
|
+
if (message.errorType !== undefined) {
|
|
194
|
+
writer.uint32(18).string(message.errorType);
|
|
195
|
+
}
|
|
196
|
+
if (message.numberOfUsers !== 0) {
|
|
197
|
+
writer.uint32(24).int64(message.numberOfUsers);
|
|
198
|
+
}
|
|
199
|
+
if (message.numberOfErrors !== 0) {
|
|
200
|
+
writer.uint32(32).int64(message.numberOfErrors);
|
|
201
|
+
}
|
|
202
|
+
return writer;
|
|
203
|
+
},
|
|
204
|
+
decode(input, length) {
|
|
205
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
206
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
207
|
+
const message = createBaseUrl();
|
|
208
|
+
while (reader.pos < end) {
|
|
209
|
+
const tag = reader.uint32();
|
|
210
|
+
switch (tag >>> 3) {
|
|
211
|
+
case 1:
|
|
212
|
+
if (tag !== 10) {
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
message.urlName = reader.string();
|
|
216
|
+
continue;
|
|
217
|
+
case 2:
|
|
218
|
+
if (tag !== 18) {
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
message.errorType = reader.string();
|
|
222
|
+
continue;
|
|
223
|
+
case 3:
|
|
224
|
+
if (tag !== 24) {
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
message.numberOfUsers = longToNumber(reader.int64());
|
|
228
|
+
continue;
|
|
229
|
+
case 4:
|
|
230
|
+
if (tag !== 32) {
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
message.numberOfErrors = longToNumber(reader.int64());
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
reader.skipType(tag & 7);
|
|
240
|
+
}
|
|
241
|
+
return message;
|
|
242
|
+
},
|
|
243
|
+
fromJSON(object) {
|
|
244
|
+
return {
|
|
245
|
+
urlName: isSet(object.urlName) ? String(object.urlName) : "",
|
|
246
|
+
errorType: isSet(object.errorType) ? String(object.errorType) : undefined,
|
|
247
|
+
numberOfUsers: isSet(object.numberOfUsers) ? Number(object.numberOfUsers) : 0,
|
|
248
|
+
numberOfErrors: isSet(object.numberOfErrors) ? Number(object.numberOfErrors) : 0,
|
|
249
|
+
};
|
|
250
|
+
},
|
|
251
|
+
toJSON(message) {
|
|
252
|
+
const obj = {};
|
|
253
|
+
message.urlName !== undefined && (obj.urlName = message.urlName);
|
|
254
|
+
message.errorType !== undefined && (obj.errorType = message.errorType);
|
|
255
|
+
message.numberOfUsers !== undefined && (obj.numberOfUsers = Math.round(message.numberOfUsers));
|
|
256
|
+
message.numberOfErrors !== undefined && (obj.numberOfErrors = Math.round(message.numberOfErrors));
|
|
257
|
+
return obj;
|
|
258
|
+
},
|
|
259
|
+
create(base) {
|
|
260
|
+
return exports.Url.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
261
|
+
},
|
|
262
|
+
fromPartial(object) {
|
|
263
|
+
var _a, _b, _c, _d;
|
|
264
|
+
const message = createBaseUrl();
|
|
265
|
+
message.urlName = (_a = object.urlName) !== null && _a !== void 0 ? _a : "";
|
|
266
|
+
message.errorType = (_b = object.errorType) !== null && _b !== void 0 ? _b : undefined;
|
|
267
|
+
message.numberOfUsers = (_c = object.numberOfUsers) !== null && _c !== void 0 ? _c : 0;
|
|
268
|
+
message.numberOfErrors = (_d = object.numberOfErrors) !== null && _d !== void 0 ? _d : 0;
|
|
269
|
+
return message;
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
function createBaseEnvironmentInfo() {
|
|
273
|
+
return { name: "", numberOfErrors: 0, version: undefined };
|
|
274
|
+
}
|
|
275
|
+
exports.EnvironmentInfo = {
|
|
276
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
277
|
+
if (message.name !== "") {
|
|
278
|
+
writer.uint32(10).string(message.name);
|
|
279
|
+
}
|
|
280
|
+
if (message.numberOfErrors !== 0) {
|
|
281
|
+
writer.uint32(16).int64(message.numberOfErrors);
|
|
282
|
+
}
|
|
283
|
+
if (message.version !== undefined) {
|
|
284
|
+
writer.uint32(26).string(message.version);
|
|
285
|
+
}
|
|
286
|
+
return writer;
|
|
287
|
+
},
|
|
288
|
+
decode(input, length) {
|
|
289
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
290
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
291
|
+
const message = createBaseEnvironmentInfo();
|
|
292
|
+
while (reader.pos < end) {
|
|
293
|
+
const tag = reader.uint32();
|
|
294
|
+
switch (tag >>> 3) {
|
|
295
|
+
case 1:
|
|
296
|
+
if (tag !== 10) {
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
message.name = reader.string();
|
|
300
|
+
continue;
|
|
301
|
+
case 2:
|
|
302
|
+
if (tag !== 16) {
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
message.numberOfErrors = longToNumber(reader.int64());
|
|
306
|
+
continue;
|
|
307
|
+
case 3:
|
|
308
|
+
if (tag !== 26) {
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
message.version = reader.string();
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
reader.skipType(tag & 7);
|
|
318
|
+
}
|
|
319
|
+
return message;
|
|
320
|
+
},
|
|
321
|
+
fromJSON(object) {
|
|
322
|
+
return {
|
|
323
|
+
name: isSet(object.name) ? String(object.name) : "",
|
|
324
|
+
numberOfErrors: isSet(object.numberOfErrors) ? Number(object.numberOfErrors) : 0,
|
|
325
|
+
version: isSet(object.version) ? String(object.version) : undefined,
|
|
326
|
+
};
|
|
327
|
+
},
|
|
328
|
+
toJSON(message) {
|
|
329
|
+
const obj = {};
|
|
330
|
+
message.name !== undefined && (obj.name = message.name);
|
|
331
|
+
message.numberOfErrors !== undefined && (obj.numberOfErrors = Math.round(message.numberOfErrors));
|
|
332
|
+
message.version !== undefined && (obj.version = message.version);
|
|
333
|
+
return obj;
|
|
334
|
+
},
|
|
335
|
+
create(base) {
|
|
336
|
+
return exports.EnvironmentInfo.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
337
|
+
},
|
|
338
|
+
fromPartial(object) {
|
|
339
|
+
var _a, _b, _c;
|
|
340
|
+
const message = createBaseEnvironmentInfo();
|
|
341
|
+
message.name = (_a = object.name) !== null && _a !== void 0 ? _a : "";
|
|
342
|
+
message.numberOfErrors = (_b = object.numberOfErrors) !== null && _b !== void 0 ? _b : 0;
|
|
343
|
+
message.version = (_c = object.version) !== null && _c !== void 0 ? _c : undefined;
|
|
344
|
+
return message;
|
|
345
|
+
},
|
|
346
|
+
};
|
|
347
|
+
function createBaseUserAffected() {
|
|
348
|
+
return {
|
|
349
|
+
userId: undefined,
|
|
350
|
+
userEmail: undefined,
|
|
351
|
+
userName: undefined,
|
|
352
|
+
lastError: undefined,
|
|
353
|
+
numberOfErrors: undefined,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
exports.UserAffected = {
|
|
357
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
358
|
+
if (message.userId !== undefined) {
|
|
359
|
+
writer.uint32(10).string(message.userId);
|
|
360
|
+
}
|
|
361
|
+
if (message.userEmail !== undefined) {
|
|
362
|
+
writer.uint32(18).string(message.userEmail);
|
|
363
|
+
}
|
|
364
|
+
if (message.userName !== undefined) {
|
|
365
|
+
writer.uint32(26).string(message.userName);
|
|
366
|
+
}
|
|
367
|
+
if (message.lastError !== undefined) {
|
|
368
|
+
writer.uint32(32).int64(message.lastError);
|
|
369
|
+
}
|
|
370
|
+
if (message.numberOfErrors !== undefined) {
|
|
371
|
+
writer.uint32(40).int64(message.numberOfErrors);
|
|
372
|
+
}
|
|
373
|
+
return writer;
|
|
374
|
+
},
|
|
375
|
+
decode(input, length) {
|
|
376
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
377
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
378
|
+
const message = createBaseUserAffected();
|
|
379
|
+
while (reader.pos < end) {
|
|
380
|
+
const tag = reader.uint32();
|
|
381
|
+
switch (tag >>> 3) {
|
|
382
|
+
case 1:
|
|
383
|
+
if (tag !== 10) {
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
message.userId = reader.string();
|
|
387
|
+
continue;
|
|
388
|
+
case 2:
|
|
389
|
+
if (tag !== 18) {
|
|
390
|
+
break;
|
|
391
|
+
}
|
|
392
|
+
message.userEmail = reader.string();
|
|
393
|
+
continue;
|
|
394
|
+
case 3:
|
|
395
|
+
if (tag !== 26) {
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
message.userName = reader.string();
|
|
399
|
+
continue;
|
|
400
|
+
case 4:
|
|
401
|
+
if (tag !== 32) {
|
|
402
|
+
break;
|
|
403
|
+
}
|
|
404
|
+
message.lastError = longToNumber(reader.int64());
|
|
405
|
+
continue;
|
|
406
|
+
case 5:
|
|
407
|
+
if (tag !== 40) {
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
message.numberOfErrors = longToNumber(reader.int64());
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
414
|
+
break;
|
|
415
|
+
}
|
|
416
|
+
reader.skipType(tag & 7);
|
|
417
|
+
}
|
|
418
|
+
return message;
|
|
419
|
+
},
|
|
420
|
+
fromJSON(object) {
|
|
421
|
+
return {
|
|
422
|
+
userId: isSet(object.userId) ? String(object.userId) : undefined,
|
|
423
|
+
userEmail: isSet(object.userEmail) ? String(object.userEmail) : undefined,
|
|
424
|
+
userName: isSet(object.userName) ? String(object.userName) : undefined,
|
|
425
|
+
lastError: isSet(object.lastError) ? Number(object.lastError) : undefined,
|
|
426
|
+
numberOfErrors: isSet(object.numberOfErrors) ? Number(object.numberOfErrors) : undefined,
|
|
427
|
+
};
|
|
428
|
+
},
|
|
429
|
+
toJSON(message) {
|
|
430
|
+
const obj = {};
|
|
431
|
+
message.userId !== undefined && (obj.userId = message.userId);
|
|
432
|
+
message.userEmail !== undefined && (obj.userEmail = message.userEmail);
|
|
433
|
+
message.userName !== undefined && (obj.userName = message.userName);
|
|
434
|
+
message.lastError !== undefined && (obj.lastError = Math.round(message.lastError));
|
|
435
|
+
message.numberOfErrors !== undefined && (obj.numberOfErrors = Math.round(message.numberOfErrors));
|
|
436
|
+
return obj;
|
|
437
|
+
},
|
|
438
|
+
create(base) {
|
|
439
|
+
return exports.UserAffected.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
440
|
+
},
|
|
441
|
+
fromPartial(object) {
|
|
442
|
+
var _a, _b, _c, _d, _e;
|
|
443
|
+
const message = createBaseUserAffected();
|
|
444
|
+
message.userId = (_a = object.userId) !== null && _a !== void 0 ? _a : undefined;
|
|
445
|
+
message.userEmail = (_b = object.userEmail) !== null && _b !== void 0 ? _b : undefined;
|
|
446
|
+
message.userName = (_c = object.userName) !== null && _c !== void 0 ? _c : undefined;
|
|
447
|
+
message.lastError = (_d = object.lastError) !== null && _d !== void 0 ? _d : undefined;
|
|
448
|
+
message.numberOfErrors = (_e = object.numberOfErrors) !== null && _e !== void 0 ? _e : undefined;
|
|
449
|
+
return message;
|
|
450
|
+
},
|
|
451
|
+
};
|
|
452
|
+
function createBaseClientDetailsResponse() {
|
|
453
|
+
return { device: [], os: [], browser: [] };
|
|
454
|
+
}
|
|
455
|
+
exports.ClientDetailsResponse = {
|
|
456
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
457
|
+
for (const v of message.device) {
|
|
458
|
+
exports.EnvironmentInfo.encode(v, writer.uint32(10).fork()).ldelim();
|
|
459
|
+
}
|
|
460
|
+
for (const v of message.os) {
|
|
461
|
+
exports.EnvironmentInfo.encode(v, writer.uint32(18).fork()).ldelim();
|
|
462
|
+
}
|
|
463
|
+
for (const v of message.browser) {
|
|
464
|
+
exports.EnvironmentInfo.encode(v, writer.uint32(26).fork()).ldelim();
|
|
465
|
+
}
|
|
466
|
+
return writer;
|
|
467
|
+
},
|
|
468
|
+
decode(input, length) {
|
|
469
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
470
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
471
|
+
const message = createBaseClientDetailsResponse();
|
|
472
|
+
while (reader.pos < end) {
|
|
473
|
+
const tag = reader.uint32();
|
|
474
|
+
switch (tag >>> 3) {
|
|
475
|
+
case 1:
|
|
476
|
+
if (tag !== 10) {
|
|
477
|
+
break;
|
|
478
|
+
}
|
|
479
|
+
message.device.push(exports.EnvironmentInfo.decode(reader, reader.uint32()));
|
|
480
|
+
continue;
|
|
481
|
+
case 2:
|
|
482
|
+
if (tag !== 18) {
|
|
483
|
+
break;
|
|
484
|
+
}
|
|
485
|
+
message.os.push(exports.EnvironmentInfo.decode(reader, reader.uint32()));
|
|
486
|
+
continue;
|
|
487
|
+
case 3:
|
|
488
|
+
if (tag !== 26) {
|
|
489
|
+
break;
|
|
490
|
+
}
|
|
491
|
+
message.browser.push(exports.EnvironmentInfo.decode(reader, reader.uint32()));
|
|
492
|
+
continue;
|
|
493
|
+
}
|
|
494
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
495
|
+
break;
|
|
496
|
+
}
|
|
497
|
+
reader.skipType(tag & 7);
|
|
498
|
+
}
|
|
499
|
+
return message;
|
|
500
|
+
},
|
|
501
|
+
fromJSON(object) {
|
|
502
|
+
return {
|
|
503
|
+
device: Array.isArray(object === null || object === void 0 ? void 0 : object.device) ? object.device.map((e) => exports.EnvironmentInfo.fromJSON(e)) : [],
|
|
504
|
+
os: Array.isArray(object === null || object === void 0 ? void 0 : object.os) ? object.os.map((e) => exports.EnvironmentInfo.fromJSON(e)) : [],
|
|
505
|
+
browser: Array.isArray(object === null || object === void 0 ? void 0 : object.browser) ? object.browser.map((e) => exports.EnvironmentInfo.fromJSON(e)) : [],
|
|
506
|
+
};
|
|
507
|
+
},
|
|
508
|
+
toJSON(message) {
|
|
509
|
+
const obj = {};
|
|
510
|
+
if (message.device) {
|
|
511
|
+
obj.device = message.device.map((e) => e ? exports.EnvironmentInfo.toJSON(e) : undefined);
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
obj.device = [];
|
|
515
|
+
}
|
|
516
|
+
if (message.os) {
|
|
517
|
+
obj.os = message.os.map((e) => e ? exports.EnvironmentInfo.toJSON(e) : undefined);
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
obj.os = [];
|
|
521
|
+
}
|
|
522
|
+
if (message.browser) {
|
|
523
|
+
obj.browser = message.browser.map((e) => e ? exports.EnvironmentInfo.toJSON(e) : undefined);
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
obj.browser = [];
|
|
527
|
+
}
|
|
528
|
+
return obj;
|
|
529
|
+
},
|
|
530
|
+
create(base) {
|
|
531
|
+
return exports.ClientDetailsResponse.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
532
|
+
},
|
|
533
|
+
fromPartial(object) {
|
|
534
|
+
var _a, _b, _c;
|
|
535
|
+
const message = createBaseClientDetailsResponse();
|
|
536
|
+
message.device = ((_a = object.device) === null || _a === void 0 ? void 0 : _a.map((e) => exports.EnvironmentInfo.fromPartial(e))) || [];
|
|
537
|
+
message.os = ((_b = object.os) === null || _b === void 0 ? void 0 : _b.map((e) => exports.EnvironmentInfo.fromPartial(e))) || [];
|
|
538
|
+
message.browser = ((_c = object.browser) === null || _c === void 0 ? void 0 : _c.map((e) => exports.EnvironmentInfo.fromPartial(e))) || [];
|
|
539
|
+
return message;
|
|
540
|
+
},
|
|
541
|
+
};
|
|
542
|
+
function createBaseTopTenResponse() {
|
|
543
|
+
return { networkRequest: [], errorMessage: [], url: [] };
|
|
544
|
+
}
|
|
545
|
+
exports.TopTenResponse = {
|
|
546
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
547
|
+
for (const v of message.networkRequest) {
|
|
548
|
+
exports.NetworkRequest.encode(v, writer.uint32(10).fork()).ldelim();
|
|
549
|
+
}
|
|
550
|
+
for (const v of message.errorMessage) {
|
|
551
|
+
exports.ErrorMessage.encode(v, writer.uint32(18).fork()).ldelim();
|
|
552
|
+
}
|
|
553
|
+
for (const v of message.url) {
|
|
554
|
+
exports.Url.encode(v, writer.uint32(26).fork()).ldelim();
|
|
555
|
+
}
|
|
556
|
+
return writer;
|
|
557
|
+
},
|
|
558
|
+
decode(input, length) {
|
|
559
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
560
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
561
|
+
const message = createBaseTopTenResponse();
|
|
562
|
+
while (reader.pos < end) {
|
|
563
|
+
const tag = reader.uint32();
|
|
564
|
+
switch (tag >>> 3) {
|
|
565
|
+
case 1:
|
|
566
|
+
if (tag !== 10) {
|
|
567
|
+
break;
|
|
568
|
+
}
|
|
569
|
+
message.networkRequest.push(exports.NetworkRequest.decode(reader, reader.uint32()));
|
|
570
|
+
continue;
|
|
571
|
+
case 2:
|
|
572
|
+
if (tag !== 18) {
|
|
573
|
+
break;
|
|
574
|
+
}
|
|
575
|
+
message.errorMessage.push(exports.ErrorMessage.decode(reader, reader.uint32()));
|
|
576
|
+
continue;
|
|
577
|
+
case 3:
|
|
578
|
+
if (tag !== 26) {
|
|
579
|
+
break;
|
|
580
|
+
}
|
|
581
|
+
message.url.push(exports.Url.decode(reader, reader.uint32()));
|
|
582
|
+
continue;
|
|
583
|
+
}
|
|
584
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
585
|
+
break;
|
|
586
|
+
}
|
|
587
|
+
reader.skipType(tag & 7);
|
|
588
|
+
}
|
|
589
|
+
return message;
|
|
590
|
+
},
|
|
591
|
+
fromJSON(object) {
|
|
592
|
+
return {
|
|
593
|
+
networkRequest: Array.isArray(object === null || object === void 0 ? void 0 : object.networkRequest)
|
|
594
|
+
? object.networkRequest.map((e) => exports.NetworkRequest.fromJSON(e))
|
|
595
|
+
: [],
|
|
596
|
+
errorMessage: Array.isArray(object === null || object === void 0 ? void 0 : object.errorMessage)
|
|
597
|
+
? object.errorMessage.map((e) => exports.ErrorMessage.fromJSON(e))
|
|
598
|
+
: [],
|
|
599
|
+
url: Array.isArray(object === null || object === void 0 ? void 0 : object.url) ? object.url.map((e) => exports.Url.fromJSON(e)) : [],
|
|
600
|
+
};
|
|
601
|
+
},
|
|
602
|
+
toJSON(message) {
|
|
603
|
+
const obj = {};
|
|
604
|
+
if (message.networkRequest) {
|
|
605
|
+
obj.networkRequest = message.networkRequest.map((e) => e ? exports.NetworkRequest.toJSON(e) : undefined);
|
|
606
|
+
}
|
|
607
|
+
else {
|
|
608
|
+
obj.networkRequest = [];
|
|
609
|
+
}
|
|
610
|
+
if (message.errorMessage) {
|
|
611
|
+
obj.errorMessage = message.errorMessage.map((e) => e ? exports.ErrorMessage.toJSON(e) : undefined);
|
|
612
|
+
}
|
|
613
|
+
else {
|
|
614
|
+
obj.errorMessage = [];
|
|
615
|
+
}
|
|
616
|
+
if (message.url) {
|
|
617
|
+
obj.url = message.url.map((e) => e ? exports.Url.toJSON(e) : undefined);
|
|
618
|
+
}
|
|
619
|
+
else {
|
|
620
|
+
obj.url = [];
|
|
621
|
+
}
|
|
622
|
+
return obj;
|
|
623
|
+
},
|
|
624
|
+
create(base) {
|
|
625
|
+
return exports.TopTenResponse.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
626
|
+
},
|
|
627
|
+
fromPartial(object) {
|
|
628
|
+
var _a, _b, _c;
|
|
629
|
+
const message = createBaseTopTenResponse();
|
|
630
|
+
message.networkRequest = ((_a = object.networkRequest) === null || _a === void 0 ? void 0 : _a.map((e) => exports.NetworkRequest.fromPartial(e))) || [];
|
|
631
|
+
message.errorMessage = ((_b = object.errorMessage) === null || _b === void 0 ? void 0 : _b.map((e) => exports.ErrorMessage.fromPartial(e))) || [];
|
|
632
|
+
message.url = ((_c = object.url) === null || _c === void 0 ? void 0 : _c.map((e) => exports.Url.fromPartial(e))) || [];
|
|
633
|
+
return message;
|
|
634
|
+
},
|
|
635
|
+
};
|
|
636
|
+
function createBaseUserAffectedResponse() {
|
|
637
|
+
return { userAffected: [] };
|
|
638
|
+
}
|
|
639
|
+
exports.UserAffectedResponse = {
|
|
640
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
641
|
+
for (const v of message.userAffected) {
|
|
642
|
+
exports.UserAffected.encode(v, writer.uint32(10).fork()).ldelim();
|
|
643
|
+
}
|
|
644
|
+
return writer;
|
|
645
|
+
},
|
|
646
|
+
decode(input, length) {
|
|
647
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
648
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
649
|
+
const message = createBaseUserAffectedResponse();
|
|
650
|
+
while (reader.pos < end) {
|
|
651
|
+
const tag = reader.uint32();
|
|
652
|
+
switch (tag >>> 3) {
|
|
653
|
+
case 1:
|
|
654
|
+
if (tag !== 10) {
|
|
655
|
+
break;
|
|
656
|
+
}
|
|
657
|
+
message.userAffected.push(exports.UserAffected.decode(reader, reader.uint32()));
|
|
658
|
+
continue;
|
|
659
|
+
}
|
|
660
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
661
|
+
break;
|
|
662
|
+
}
|
|
663
|
+
reader.skipType(tag & 7);
|
|
664
|
+
}
|
|
665
|
+
return message;
|
|
666
|
+
},
|
|
667
|
+
fromJSON(object) {
|
|
668
|
+
return {
|
|
669
|
+
userAffected: Array.isArray(object === null || object === void 0 ? void 0 : object.userAffected)
|
|
670
|
+
? object.userAffected.map((e) => exports.UserAffected.fromJSON(e))
|
|
671
|
+
: [],
|
|
672
|
+
};
|
|
673
|
+
},
|
|
674
|
+
toJSON(message) {
|
|
675
|
+
const obj = {};
|
|
676
|
+
if (message.userAffected) {
|
|
677
|
+
obj.userAffected = message.userAffected.map((e) => e ? exports.UserAffected.toJSON(e) : undefined);
|
|
678
|
+
}
|
|
679
|
+
else {
|
|
680
|
+
obj.userAffected = [];
|
|
681
|
+
}
|
|
682
|
+
return obj;
|
|
683
|
+
},
|
|
684
|
+
create(base) {
|
|
685
|
+
return exports.UserAffectedResponse.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
686
|
+
},
|
|
687
|
+
fromPartial(object) {
|
|
688
|
+
var _a;
|
|
689
|
+
const message = createBaseUserAffectedResponse();
|
|
690
|
+
message.userAffected = ((_a = object.userAffected) === null || _a === void 0 ? void 0 : _a.map((e) => exports.UserAffected.fromPartial(e))) || [];
|
|
691
|
+
return message;
|
|
692
|
+
},
|
|
693
|
+
};
|
|
694
|
+
function createBaseError() {
|
|
695
|
+
return { error: "" };
|
|
696
|
+
}
|
|
697
|
+
exports.Error = {
|
|
698
|
+
encode(message, writer = minimal_1.default.Writer.create()) {
|
|
699
|
+
if (message.error !== "") {
|
|
700
|
+
writer.uint32(10).string(message.error);
|
|
701
|
+
}
|
|
702
|
+
return writer;
|
|
703
|
+
},
|
|
704
|
+
decode(input, length) {
|
|
705
|
+
const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
|
|
706
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
707
|
+
const message = createBaseError();
|
|
708
|
+
while (reader.pos < end) {
|
|
709
|
+
const tag = reader.uint32();
|
|
710
|
+
switch (tag >>> 3) {
|
|
711
|
+
case 1:
|
|
712
|
+
if (tag !== 10) {
|
|
713
|
+
break;
|
|
714
|
+
}
|
|
715
|
+
message.error = reader.string();
|
|
716
|
+
continue;
|
|
717
|
+
}
|
|
718
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
719
|
+
break;
|
|
720
|
+
}
|
|
721
|
+
reader.skipType(tag & 7);
|
|
722
|
+
}
|
|
723
|
+
return message;
|
|
724
|
+
},
|
|
725
|
+
fromJSON(object) {
|
|
726
|
+
return { error: isSet(object.error) ? String(object.error) : "" };
|
|
727
|
+
},
|
|
728
|
+
toJSON(message) {
|
|
729
|
+
const obj = {};
|
|
730
|
+
message.error !== undefined && (obj.error = message.error);
|
|
731
|
+
return obj;
|
|
732
|
+
},
|
|
733
|
+
create(base) {
|
|
734
|
+
return exports.Error.fromPartial(base !== null && base !== void 0 ? base : {});
|
|
735
|
+
},
|
|
736
|
+
fromPartial(object) {
|
|
737
|
+
var _a;
|
|
738
|
+
const message = createBaseError();
|
|
739
|
+
message.error = (_a = object.error) !== null && _a !== void 0 ? _a : "";
|
|
740
|
+
return message;
|
|
741
|
+
},
|
|
742
|
+
};
|
|
743
|
+
var tsProtoGlobalThis = (() => {
|
|
744
|
+
if (typeof globalThis !== "undefined") {
|
|
745
|
+
return globalThis;
|
|
746
|
+
}
|
|
747
|
+
if (typeof self !== "undefined") {
|
|
748
|
+
return self;
|
|
749
|
+
}
|
|
750
|
+
if (typeof window !== "undefined") {
|
|
751
|
+
return window;
|
|
752
|
+
}
|
|
753
|
+
if (typeof global !== "undefined") {
|
|
754
|
+
return global;
|
|
755
|
+
}
|
|
756
|
+
throw "Unable to locate global object";
|
|
757
|
+
})();
|
|
758
|
+
function longToNumber(long) {
|
|
759
|
+
if (long.gt(Number.MAX_SAFE_INTEGER)) {
|
|
760
|
+
throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
|
761
|
+
}
|
|
762
|
+
return long.toNumber();
|
|
763
|
+
}
|
|
764
|
+
if (minimal_1.default.util.Long !== long_1.default) {
|
|
765
|
+
minimal_1.default.util.Long = long_1.default;
|
|
766
|
+
minimal_1.default.configure();
|
|
767
|
+
}
|
|
768
|
+
function isSet(value) {
|
|
769
|
+
return value !== null && value !== undefined;
|
|
770
|
+
}
|
|
771
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvcnVtL3YyL2FuYWx5dGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvQkFBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLGlFQUFxQztBQUV4QixRQUFBLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQztBQXlEdEQsU0FBUyx3QkFBd0I7SUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3RILENBQUM7QUFFWSxRQUFBLGNBQWMsR0FBRztJQUM1QixNQUFNLENBQUMsT0FBdUIsRUFBRSxTQUFxQixpQkFBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDdEUsSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUN4QyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQztRQUNELElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRTtZQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLEVB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QU0sSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztLQUNuRjtJQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3pCLENBQUM7QUFFRCxJQUFJLGlCQUFHLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxjQUFJLEVBQUU7SUFDMUIsaUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLGNBQVcsQ0FBQztJQUM1QixpQkFBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ2pCO0FBRUQsU0FBUyxLQUFLLENBQUMsS0FBVTtJQUN2QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBMb25nIGZyb20gXCJsb25nXCI7XG5pbXBvcnQgX20wIGZyb20gXCJwcm90b2J1ZmpzL21pbmltYWxcIjtcblxuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9IFwiY29tLmNvcmFsb2dpeC5ydW0udjJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrUmVxdWVzdCB7XG4gIG5ldHdvcmtSZXF1ZXN0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZXRob2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHN0YXR1c0NvZGU/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIG51bWJlck9mVXNlcnM6IG51bWJlcjtcbiAgbnVtYmVyT2ZFcnJvcnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1lc3NhZ2Uge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIG51bWJlck9mVXNlcnM6IG51bWJlcjtcbiAgbnVtYmVyT2ZFcnJvcnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcmwge1xuICB1cmxOYW1lOiBzdHJpbmc7XG4gIGVycm9yVHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbnVtYmVyT2ZVc2VyczogbnVtYmVyO1xuICBudW1iZXJPZkVycm9yczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudmlyb25tZW50SW5mbyB7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyT2ZFcnJvcnM6IG51bWJlcjtcbiAgdmVyc2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyQWZmZWN0ZWQge1xuICB1c2VySWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHVzZXJFbWFpbD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXNlck5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxhc3RFcnJvcj86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbnVtYmVyT2ZFcnJvcnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50RGV0YWlsc1Jlc3BvbnNlIHtcbiAgZGV2aWNlOiBFbnZpcm9ubWVudEluZm9bXTtcbiAgb3M6IEVudmlyb25tZW50SW5mb1tdO1xuICBicm93c2VyOiBFbnZpcm9ubWVudEluZm9bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3BUZW5SZXNwb25zZSB7XG4gIG5ldHdvcmtSZXF1ZXN0OiBOZXR3b3JrUmVxdWVzdFtdO1xuICBlcnJvck1lc3NhZ2U6IEVycm9yTWVzc2FnZVtdO1xuICB1cmw6IFVybFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBZmZlY3RlZFJlc3BvbnNlIHtcbiAgdXNlckFmZmVjdGVkOiBVc2VyQWZmZWN0ZWRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvciB7XG4gIGVycm9yOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VOZXR3b3JrUmVxdWVzdCgpOiBOZXR3b3JrUmVxdWVzdCB7XG4gIHJldHVybiB7IG5ldHdvcmtSZXF1ZXN0OiB1bmRlZmluZWQsIG1ldGhvZDogdW5kZWZpbmVkLCBzdGF0dXNDb2RlOiB1bmRlZmluZWQsIG51bWJlck9mVXNlcnM6IDAsIG51bWJlck9mRXJyb3JzOiAwIH07XG59XG5cbmV4cG9ydCBjb25zdCBOZXR3b3JrUmVxdWVzdCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IE5ldHdvcmtSZXF1ZXN0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmV0d29ya1JlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmV0d29ya1JlcXVlc3QpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UubWV0aG9kKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3RhdHVzQ29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5pbnQ2NChtZXNzYWdlLnN0YXR1c0NvZGUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5udW1iZXJPZlVzZXJzICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyKS5pbnQ2NChtZXNzYWdlLm51bWJlck9mVXNlcnMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5udW1iZXJPZkVycm9ycyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MCkuaW50NjQobWVzc2FnZS5udW1iZXJPZkVycm9ycyk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogTmV0d29ya1JlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTmV0d29ya1JlcXVlc3QoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5ldHdvcmtSZXF1ZXN0ID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubWV0aG9kID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc3RhdHVzQ29kZSA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDMyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm51bWJlck9mVXNlcnMgPSBsb25nVG9OdW1iZXIocmVhZGVyLmludDY0KCkgYXMgTG9uZyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBpZiAodGFnICE9PSA0MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5udW1iZXJPZkVycm9ycyA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IE5ldHdvcmtSZXF1ZXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmV0d29ya1JlcXVlc3Q6IGlzU2V0KG9iamVjdC5uZXR3b3JrUmVxdWVzdCkgPyBTdHJpbmcob2JqZWN0Lm5ldHdvcmtSZXF1ZXN0KSA6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGhvZDogaXNTZXQob2JqZWN0Lm1ldGhvZCkgPyBTdHJpbmcob2JqZWN0Lm1ldGhvZCkgOiB1bmRlZmluZWQsXG4gICAgICBzdGF0dXNDb2RlOiBpc1NldChvYmplY3Quc3RhdHVzQ29kZSkgPyBOdW1iZXIob2JqZWN0LnN0YXR1c0NvZGUpIDogdW5kZWZpbmVkLFxuICAgICAgbnVtYmVyT2ZVc2VyczogaXNTZXQob2JqZWN0Lm51bWJlck9mVXNlcnMpID8gTnVtYmVyKG9iamVjdC5udW1iZXJPZlVzZXJzKSA6IDAsXG4gICAgICBudW1iZXJPZkVycm9yczogaXNTZXQob2JqZWN0Lm51bWJlck9mRXJyb3JzKSA/IE51bWJlcihvYmplY3QubnVtYmVyT2ZFcnJvcnMpIDogMCxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBOZXR3b3JrUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5uZXR3b3JrUmVxdWVzdCAhPT0gdW5kZWZpbmVkICYmIChvYmoubmV0d29ya1JlcXVlc3QgPSBtZXNzYWdlLm5ldHdvcmtSZXF1ZXN0KTtcbiAgICBtZXNzYWdlLm1ldGhvZCAhPT0gdW5kZWZpbmVkICYmIChvYmoubWV0aG9kID0gbWVzc2FnZS5tZXRob2QpO1xuICAgIG1lc3NhZ2Uuc3RhdHVzQ29kZSAhPT0gdW5kZWZpbmVkICYmIChvYmouc3RhdHVzQ29kZSA9IE1hdGgucm91bmQobWVzc2FnZS5zdGF0dXNDb2RlKSk7XG4gICAgbWVzc2FnZS5udW1iZXJPZlVzZXJzICE9PSB1bmRlZmluZWQgJiYgKG9iai5udW1iZXJPZlVzZXJzID0gTWF0aC5yb3VuZChtZXNzYWdlLm51bWJlck9mVXNlcnMpKTtcbiAgICBtZXNzYWdlLm51bWJlck9mRXJyb3JzICE9PSB1bmRlZmluZWQgJiYgKG9iai5udW1iZXJPZkVycm9ycyA9IE1hdGgucm91bmQobWVzc2FnZS5udW1iZXJPZkVycm9ycykpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxOZXR3b3JrUmVxdWVzdD4pOiBOZXR3b3JrUmVxdWVzdCB7XG4gICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8TmV0d29ya1JlcXVlc3Q+KTogTmV0d29ya1JlcXVlc3Qge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTmV0d29ya1JlcXVlc3QoKTtcbiAgICBtZXNzYWdlLm5ldHdvcmtSZXF1ZXN0ID0gb2JqZWN0Lm5ldHdvcmtSZXF1ZXN0ID8/IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLm1ldGhvZCA9IG9iamVjdC5tZXRob2QgPz8gdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2Uuc3RhdHVzQ29kZSA9IG9iamVjdC5zdGF0dXNDb2RlID8/IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLm51bWJlck9mVXNlcnMgPSBvYmplY3QubnVtYmVyT2ZVc2VycyA/PyAwO1xuICAgIG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMgPSBvYmplY3QubnVtYmVyT2ZFcnJvcnMgPz8gMDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFcnJvck1lc3NhZ2UoKTogRXJyb3JNZXNzYWdlIHtcbiAgcmV0dXJuIHsgbWVzc2FnZTogXCJcIiwgbnVtYmVyT2ZVc2VyczogMCwgbnVtYmVyT2ZFcnJvcnM6IDAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVycm9yTWVzc2FnZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEVycm9yTWVzc2FnZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm1lc3NhZ2UgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5udW1iZXJPZlVzZXJzICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQ2NChtZXNzYWdlLm51bWJlck9mVXNlcnMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5udW1iZXJPZkVycm9ycyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuaW50NjQobWVzc2FnZS5udW1iZXJPZkVycm9ycyk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRXJyb3JNZXNzYWdlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUVycm9yTWVzc2FnZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubWVzc2FnZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm51bWJlck9mVXNlcnMgPSBsb25nVG9OdW1iZXIocmVhZGVyLmludDY0KCkgYXMgTG9uZyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5udW1iZXJPZkVycm9ycyA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEVycm9yTWVzc2FnZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IGlzU2V0KG9iamVjdC5tZXNzYWdlKSA/IFN0cmluZyhvYmplY3QubWVzc2FnZSkgOiBcIlwiLFxuICAgICAgbnVtYmVyT2ZVc2VyczogaXNTZXQob2JqZWN0Lm51bWJlck9mVXNlcnMpID8gTnVtYmVyKG9iamVjdC5udW1iZXJPZlVzZXJzKSA6IDAsXG4gICAgICBudW1iZXJPZkVycm9yczogaXNTZXQob2JqZWN0Lm51bWJlck9mRXJyb3JzKSA/IE51bWJlcihvYmplY3QubnVtYmVyT2ZFcnJvcnMpIDogMCxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBFcnJvck1lc3NhZ2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UubWVzc2FnZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubWVzc2FnZSA9IG1lc3NhZ2UubWVzc2FnZSk7XG4gICAgbWVzc2FnZS5udW1iZXJPZlVzZXJzICE9PSB1bmRlZmluZWQgJiYgKG9iai5udW1iZXJPZlVzZXJzID0gTWF0aC5yb3VuZChtZXNzYWdlLm51bWJlck9mVXNlcnMpKTtcbiAgICBtZXNzYWdlLm51bWJlck9mRXJyb3JzICE9PSB1bmRlZmluZWQgJiYgKG9iai5udW1iZXJPZkVycm9ycyA9IE1hdGgucm91bmQobWVzc2FnZS5udW1iZXJPZkVycm9ycykpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxFcnJvck1lc3NhZ2U+KTogRXJyb3JNZXNzYWdlIHtcbiAgICByZXR1cm4gRXJyb3JNZXNzYWdlLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RXJyb3JNZXNzYWdlPik6IEVycm9yTWVzc2FnZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFcnJvck1lc3NhZ2UoKTtcbiAgICBtZXNzYWdlLm1lc3NhZ2UgPSBvYmplY3QubWVzc2FnZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UubnVtYmVyT2ZVc2VycyA9IG9iamVjdC5udW1iZXJPZlVzZXJzID8/IDA7XG4gICAgbWVzc2FnZS5udW1iZXJPZkVycm9ycyA9IG9iamVjdC5udW1iZXJPZkVycm9ycyA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVVybCgpOiBVcmwge1xuICByZXR1cm4geyB1cmxOYW1lOiBcIlwiLCBlcnJvclR5cGU6IHVuZGVmaW5lZCwgbnVtYmVyT2ZVc2VyczogMCwgbnVtYmVyT2ZFcnJvcnM6IDAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFVybCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFVybCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnVybE5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLnVybE5hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lcnJvclR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuZXJyb3JUeXBlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubnVtYmVyT2ZVc2VycyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuaW50NjQobWVzc2FnZS5udW1iZXJPZlVzZXJzKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmludDY0KG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFVybCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVcmwoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVybE5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5lcnJvclR5cGUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5udW1iZXJPZlVzZXJzID0gbG9uZ1RvTnVtYmVyKHJlYWRlci5pbnQ2NCgpIGFzIExvbmcpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMgPSBsb25nVG9OdW1iZXIocmVhZGVyLmludDY0KCkgYXMgTG9uZyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBVcmwge1xuICAgIHJldHVybiB7XG4gICAgICB1cmxOYW1lOiBpc1NldChvYmplY3QudXJsTmFtZSkgPyBTdHJpbmcob2JqZWN0LnVybE5hbWUpIDogXCJcIixcbiAgICAgIGVycm9yVHlwZTogaXNTZXQob2JqZWN0LmVycm9yVHlwZSkgPyBTdHJpbmcob2JqZWN0LmVycm9yVHlwZSkgOiB1bmRlZmluZWQsXG4gICAgICBudW1iZXJPZlVzZXJzOiBpc1NldChvYmplY3QubnVtYmVyT2ZVc2VycykgPyBOdW1iZXIob2JqZWN0Lm51bWJlck9mVXNlcnMpIDogMCxcbiAgICAgIG51bWJlck9mRXJyb3JzOiBpc1NldChvYmplY3QubnVtYmVyT2ZFcnJvcnMpID8gTnVtYmVyKG9iamVjdC5udW1iZXJPZkVycm9ycykgOiAwLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFVybCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS51cmxOYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai51cmxOYW1lID0gbWVzc2FnZS51cmxOYW1lKTtcbiAgICBtZXNzYWdlLmVycm9yVHlwZSAhPT0gdW5kZWZpbmVkICYmIChvYmouZXJyb3JUeXBlID0gbWVzc2FnZS5lcnJvclR5cGUpO1xuICAgIG1lc3NhZ2UubnVtYmVyT2ZVc2VycyAhPT0gdW5kZWZpbmVkICYmIChvYmoubnVtYmVyT2ZVc2VycyA9IE1hdGgucm91bmQobWVzc2FnZS5udW1iZXJPZlVzZXJzKSk7XG4gICAgbWVzc2FnZS5udW1iZXJPZkVycm9ycyAhPT0gdW5kZWZpbmVkICYmIChvYmoubnVtYmVyT2ZFcnJvcnMgPSBNYXRoLnJvdW5kKG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMpKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8VXJsPik6IFVybCB7XG4gICAgcmV0dXJuIFVybC5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFVybD4pOiBVcmwge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVXJsKCk7XG4gICAgbWVzc2FnZS51cmxOYW1lID0gb2JqZWN0LnVybE5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmVycm9yVHlwZSA9IG9iamVjdC5lcnJvclR5cGUgPz8gdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2UubnVtYmVyT2ZVc2VycyA9IG9iamVjdC5udW1iZXJPZlVzZXJzID8/IDA7XG4gICAgbWVzc2FnZS5udW1iZXJPZkVycm9ycyA9IG9iamVjdC5udW1iZXJPZkVycm9ycyA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUVudmlyb25tZW50SW5mbygpOiBFbnZpcm9ubWVudEluZm8ge1xuICByZXR1cm4geyBuYW1lOiBcIlwiLCBudW1iZXJPZkVycm9yczogMCwgdmVyc2lvbjogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBjb25zdCBFbnZpcm9ubWVudEluZm8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBFbnZpcm9ubWVudEluZm8sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDY0KG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLnZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEVudmlyb25tZW50SW5mbyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnZpcm9ubWVudEluZm8oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5udW1iZXJPZkVycm9ycyA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnZlcnNpb24gPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBFbnZpcm9ubWVudEluZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIG51bWJlck9mRXJyb3JzOiBpc1NldChvYmplY3QubnVtYmVyT2ZFcnJvcnMpID8gTnVtYmVyKG9iamVjdC5udW1iZXJPZkVycm9ycykgOiAwLFxuICAgICAgdmVyc2lvbjogaXNTZXQob2JqZWN0LnZlcnNpb24pID8gU3RyaW5nKG9iamVjdC52ZXJzaW9uKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBFbnZpcm9ubWVudEluZm8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UubmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubmFtZSA9IG1lc3NhZ2UubmFtZSk7XG4gICAgbWVzc2FnZS5udW1iZXJPZkVycm9ycyAhPT0gdW5kZWZpbmVkICYmIChvYmoubnVtYmVyT2ZFcnJvcnMgPSBNYXRoLnJvdW5kKG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMpKTtcbiAgICBtZXNzYWdlLnZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiAob2JqLnZlcnNpb24gPSBtZXNzYWdlLnZlcnNpb24pO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxFbnZpcm9ubWVudEluZm8+KTogRW52aXJvbm1lbnRJbmZvIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnRJbmZvLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RW52aXJvbm1lbnRJbmZvPik6IEVudmlyb25tZW50SW5mbyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnZpcm9ubWVudEluZm8oKTtcbiAgICBtZXNzYWdlLm5hbWUgPSBvYmplY3QubmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMgPSBvYmplY3QubnVtYmVyT2ZFcnJvcnMgPz8gMDtcbiAgICBtZXNzYWdlLnZlcnNpb24gPSBvYmplY3QudmVyc2lvbiA/PyB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVXNlckFmZmVjdGVkKCk6IFVzZXJBZmZlY3RlZCB7XG4gIHJldHVybiB7XG4gICAgdXNlcklkOiB1bmRlZmluZWQsXG4gICAgdXNlckVtYWlsOiB1bmRlZmluZWQsXG4gICAgdXNlck5hbWU6IHVuZGVmaW5lZCxcbiAgICBsYXN0RXJyb3I6IHVuZGVmaW5lZCxcbiAgICBudW1iZXJPZkVycm9yczogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgVXNlckFmZmVjdGVkID0ge1xuICBlbmNvZGUobWVzc2FnZTogVXNlckFmZmVjdGVkLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudXNlcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLnVzZXJJZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnVzZXJFbWFpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS51c2VyRW1haWwpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS51c2VyTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS51c2VyTmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmxhc3RFcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyKS5pbnQ2NChtZXNzYWdlLmxhc3RFcnJvcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm51bWJlck9mRXJyb3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDApLmludDY0KG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFVzZXJBZmZlY3RlZCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVc2VyQWZmZWN0ZWQoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVzZXJJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVzZXJFbWFpbCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVzZXJOYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubGFzdEVycm9yID0gbG9uZ1RvTnVtYmVyKHJlYWRlci5pbnQ2NCgpIGFzIExvbmcpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMgPSBsb25nVG9OdW1iZXIocmVhZGVyLmludDY0KCkgYXMgTG9uZyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBVc2VyQWZmZWN0ZWQge1xuICAgIHJldHVybiB7XG4gICAgICB1c2VySWQ6IGlzU2V0KG9iamVjdC51c2VySWQpID8gU3RyaW5nKG9iamVjdC51c2VySWQpIDogdW5kZWZpbmVkLFxuICAgICAgdXNlckVtYWlsOiBpc1NldChvYmplY3QudXNlckVtYWlsKSA/IFN0cmluZyhvYmplY3QudXNlckVtYWlsKSA6IHVuZGVmaW5lZCxcbiAgICAgIHVzZXJOYW1lOiBpc1NldChvYmplY3QudXNlck5hbWUpID8gU3RyaW5nKG9iamVjdC51c2VyTmFtZSkgOiB1bmRlZmluZWQsXG4gICAgICBsYXN0RXJyb3I6IGlzU2V0KG9iamVjdC5sYXN0RXJyb3IpID8gTnVtYmVyKG9iamVjdC5sYXN0RXJyb3IpIDogdW5kZWZpbmVkLFxuICAgICAgbnVtYmVyT2ZFcnJvcnM6IGlzU2V0KG9iamVjdC5udW1iZXJPZkVycm9ycykgPyBOdW1iZXIob2JqZWN0Lm51bWJlck9mRXJyb3JzKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBVc2VyQWZmZWN0ZWQpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UudXNlcklkICE9PSB1bmRlZmluZWQgJiYgKG9iai51c2VySWQgPSBtZXNzYWdlLnVzZXJJZCk7XG4gICAgbWVzc2FnZS51c2VyRW1haWwgIT09IHVuZGVmaW5lZCAmJiAob2JqLnVzZXJFbWFpbCA9IG1lc3NhZ2UudXNlckVtYWlsKTtcbiAgICBtZXNzYWdlLnVzZXJOYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai51c2VyTmFtZSA9IG1lc3NhZ2UudXNlck5hbWUpO1xuICAgIG1lc3NhZ2UubGFzdEVycm9yICE9PSB1bmRlZmluZWQgJiYgKG9iai5sYXN0RXJyb3IgPSBNYXRoLnJvdW5kKG1lc3NhZ2UubGFzdEVycm9yKSk7XG4gICAgbWVzc2FnZS5udW1iZXJPZkVycm9ycyAhPT0gdW5kZWZpbmVkICYmIChvYmoubnVtYmVyT2ZFcnJvcnMgPSBNYXRoLnJvdW5kKG1lc3NhZ2UubnVtYmVyT2ZFcnJvcnMpKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8VXNlckFmZmVjdGVkPik6IFVzZXJBZmZlY3RlZCB7XG4gICAgcmV0dXJuIFVzZXJBZmZlY3RlZC5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFVzZXJBZmZlY3RlZD4pOiBVc2VyQWZmZWN0ZWQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVXNlckFmZmVjdGVkKCk7XG4gICAgbWVzc2FnZS51c2VySWQgPSBvYmplY3QudXNlcklkID8/IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnVzZXJFbWFpbCA9IG9iamVjdC51c2VyRW1haWwgPz8gdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2UudXNlck5hbWUgPSBvYmplY3QudXNlck5hbWUgPz8gdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2UubGFzdEVycm9yID0gb2JqZWN0Lmxhc3RFcnJvciA/PyB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZS5udW1iZXJPZkVycm9ycyA9IG9iamVjdC5udW1iZXJPZkVycm9ycyA/PyB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlQ2xpZW50RGV0YWlsc1Jlc3BvbnNlKCk6IENsaWVudERldGFpbHNSZXNwb25zZSB7XG4gIHJldHVybiB7IGRldmljZTogW10sIG9zOiBbXSwgYnJvd3NlcjogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IENsaWVudERldGFpbHNSZXNwb25zZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IENsaWVudERldGFpbHNSZXNwb25zZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmRldmljZSkge1xuICAgICAgRW52aXJvbm1lbnRJbmZvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uub3MpIHtcbiAgICAgIEVudmlyb25tZW50SW5mby5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmJyb3dzZXIpIHtcbiAgICAgIEVudmlyb25tZW50SW5mby5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogQ2xpZW50RGV0YWlsc1Jlc3BvbnNlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNsaWVudERldGFpbHNSZXNwb25zZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGV2aWNlLnB1c2goRW52aXJvbm1lbnRJbmZvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3MucHVzaChFbnZpcm9ubWVudEluZm8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5icm93c2VyLnB1c2goRW52aXJvbm1lbnRJbmZvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogQ2xpZW50RGV0YWlsc1Jlc3BvbnNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGV2aWNlOiBBcnJheS5pc0FycmF5KG9iamVjdD8uZGV2aWNlKSA/IG9iamVjdC5kZXZpY2UubWFwKChlOiBhbnkpID0+IEVudmlyb25tZW50SW5mby5mcm9tSlNPTihlKSkgOiBbXSxcbiAgICAgIG9zOiBBcnJheS5pc0FycmF5KG9iamVjdD8ub3MpID8gb2JqZWN0Lm9zLm1hcCgoZTogYW55KSA9PiBFbnZpcm9ubWVudEluZm8uZnJvbUpTT04oZSkpIDogW10sXG4gICAgICBicm93c2VyOiBBcnJheS5pc0FycmF5KG9iamVjdD8uYnJvd3NlcikgPyBvYmplY3QuYnJvd3Nlci5tYXAoKGU6IGFueSkgPT4gRW52aXJvbm1lbnRJbmZvLmZyb21KU09OKGUpKSA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IENsaWVudERldGFpbHNSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuZGV2aWNlKSB7XG4gICAgICBvYmouZGV2aWNlID0gbWVzc2FnZS5kZXZpY2UubWFwKChlKSA9PiBlID8gRW52aXJvbm1lbnRJbmZvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5kZXZpY2UgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3MpIHtcbiAgICAgIG9iai5vcyA9IG1lc3NhZ2Uub3MubWFwKChlKSA9PiBlID8gRW52aXJvbm1lbnRJbmZvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5vcyA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5icm93c2VyKSB7XG4gICAgICBvYmouYnJvd3NlciA9IG1lc3NhZ2UuYnJvd3Nlci5tYXAoKGUpID0+IGUgPyBFbnZpcm9ubWVudEluZm8udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLmJyb3dzZXIgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPENsaWVudERldGFpbHNSZXNwb25zZT4pOiBDbGllbnREZXRhaWxzUmVzcG9uc2Uge1xuICAgIHJldHVybiBDbGllbnREZXRhaWxzUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxDbGllbnREZXRhaWxzUmVzcG9uc2U+KTogQ2xpZW50RGV0YWlsc1Jlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNsaWVudERldGFpbHNSZXNwb25zZSgpO1xuICAgIG1lc3NhZ2UuZGV2aWNlID0gb2JqZWN0LmRldmljZT8ubWFwKChlKSA9PiBFbnZpcm9ubWVudEluZm8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2Uub3MgPSBvYmplY3Qub3M/Lm1hcCgoZSkgPT4gRW52aXJvbm1lbnRJbmZvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLmJyb3dzZXIgPSBvYmplY3QuYnJvd3Nlcj8ubWFwKChlKSA9PiBFbnZpcm9ubWVudEluZm8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVRvcFRlblJlc3BvbnNlKCk6IFRvcFRlblJlc3BvbnNlIHtcbiAgcmV0dXJuIHsgbmV0d29ya1JlcXVlc3Q6IFtdLCBlcnJvck1lc3NhZ2U6IFtdLCB1cmw6IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBUb3BUZW5SZXNwb25zZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFRvcFRlblJlc3BvbnNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubmV0d29ya1JlcXVlc3QpIHtcbiAgICAgIE5ldHdvcmtSZXF1ZXN0LmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZXJyb3JNZXNzYWdlKSB7XG4gICAgICBFcnJvck1lc3NhZ2UuZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51cmwpIHtcbiAgICAgIFVybC5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogVG9wVGVuUmVzcG9uc2Uge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVG9wVGVuUmVzcG9uc2UoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5ldHdvcmtSZXF1ZXN0LnB1c2goTmV0d29ya1JlcXVlc3QuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5lcnJvck1lc3NhZ2UucHVzaChFcnJvck1lc3NhZ2UuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51cmwucHVzaChVcmwuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBUb3BUZW5SZXNwb25zZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ldHdvcmtSZXF1ZXN0OiBBcnJheS5pc0FycmF5KG9iamVjdD8ubmV0d29ya1JlcXVlc3QpXG4gICAgICAgID8gb2JqZWN0Lm5ldHdvcmtSZXF1ZXN0Lm1hcCgoZTogYW55KSA9PiBOZXR3b3JrUmVxdWVzdC5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIGVycm9yTWVzc2FnZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LmVycm9yTWVzc2FnZSlcbiAgICAgICAgPyBvYmplY3QuZXJyb3JNZXNzYWdlLm1hcCgoZTogYW55KSA9PiBFcnJvck1lc3NhZ2UuZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgICB1cmw6IEFycmF5LmlzQXJyYXkob2JqZWN0Py51cmwpID8gb2JqZWN0LnVybC5tYXAoKGU6IGFueSkgPT4gVXJsLmZyb21KU09OKGUpKSA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFRvcFRlblJlc3BvbnNlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5uZXR3b3JrUmVxdWVzdCkge1xuICAgICAgb2JqLm5ldHdvcmtSZXF1ZXN0ID0gbWVzc2FnZS5uZXR3b3JrUmVxdWVzdC5tYXAoKGUpID0+IGUgPyBOZXR3b3JrUmVxdWVzdC50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoubmV0d29ya1JlcXVlc3QgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXJyb3JNZXNzYWdlKSB7XG4gICAgICBvYmouZXJyb3JNZXNzYWdlID0gbWVzc2FnZS5lcnJvck1lc3NhZ2UubWFwKChlKSA9PiBlID8gRXJyb3JNZXNzYWdlLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5lcnJvck1lc3NhZ2UgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudXJsKSB7XG4gICAgICBvYmoudXJsID0gbWVzc2FnZS51cmwubWFwKChlKSA9PiBlID8gVXJsLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai51cmwgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFRvcFRlblJlc3BvbnNlPik6IFRvcFRlblJlc3BvbnNlIHtcbiAgICByZXR1cm4gVG9wVGVuUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxUb3BUZW5SZXNwb25zZT4pOiBUb3BUZW5SZXNwb25zZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VUb3BUZW5SZXNwb25zZSgpO1xuICAgIG1lc3NhZ2UubmV0d29ya1JlcXVlc3QgPSBvYmplY3QubmV0d29ya1JlcXVlc3Q/Lm1hcCgoZSkgPT4gTmV0d29ya1JlcXVlc3QuZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UuZXJyb3JNZXNzYWdlID0gb2JqZWN0LmVycm9yTWVzc2FnZT8ubWFwKChlKSA9PiBFcnJvck1lc3NhZ2UuZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UudXJsID0gb2JqZWN0LnVybD8ubWFwKChlKSA9PiBVcmwuZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVVzZXJBZmZlY3RlZFJlc3BvbnNlKCk6IFVzZXJBZmZlY3RlZFJlc3BvbnNlIHtcbiAgcmV0dXJuIHsgdXNlckFmZmVjdGVkOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgVXNlckFmZmVjdGVkUmVzcG9uc2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBVc2VyQWZmZWN0ZWRSZXNwb25zZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnVzZXJBZmZlY3RlZCkge1xuICAgICAgVXNlckFmZmVjdGVkLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBVc2VyQWZmZWN0ZWRSZXNwb25zZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVc2VyQWZmZWN0ZWRSZXNwb25zZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudXNlckFmZmVjdGVkLnB1c2goVXNlckFmZmVjdGVkLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogVXNlckFmZmVjdGVkUmVzcG9uc2Uge1xuICAgIHJldHVybiB7XG4gICAgICB1c2VyQWZmZWN0ZWQ6IEFycmF5LmlzQXJyYXkob2JqZWN0Py51c2VyQWZmZWN0ZWQpXG4gICAgICAgID8gb2JqZWN0LnVzZXJBZmZlY3RlZC5tYXAoKGU6IGFueSkgPT4gVXNlckFmZmVjdGVkLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFVzZXJBZmZlY3RlZFJlc3BvbnNlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS51c2VyQWZmZWN0ZWQpIHtcbiAgICAgIG9iai51c2VyQWZmZWN0ZWQgPSBtZXNzYWdlLnVzZXJBZmZlY3RlZC5tYXAoKGUpID0+IGUgPyBVc2VyQWZmZWN0ZWQudG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnVzZXJBZmZlY3RlZCA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8VXNlckFmZmVjdGVkUmVzcG9uc2U+KTogVXNlckFmZmVjdGVkUmVzcG9uc2Uge1xuICAgIHJldHVybiBVc2VyQWZmZWN0ZWRSZXNwb25zZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFVzZXJBZmZlY3RlZFJlc3BvbnNlPik6IFVzZXJBZmZlY3RlZFJlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVzZXJBZmZlY3RlZFJlc3BvbnNlKCk7XG4gICAgbWVzc2FnZS51c2VyQWZmZWN0ZWQgPSBvYmplY3QudXNlckFmZmVjdGVkPy5tYXAoKGUpID0+IFVzZXJBZmZlY3RlZC5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRXJyb3IoKTogRXJyb3Ige1xuICByZXR1cm4geyBlcnJvcjogXCJcIiB9O1xufVxuXG5leHBvcnQgY29uc3QgRXJyb3IgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBFcnJvciwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmVycm9yICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5lcnJvcik7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRXJyb3Ige1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRXJyb3IoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmVycm9yID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRXJyb3Ige1xuICAgIHJldHVybiB7IGVycm9yOiBpc1NldChvYmplY3QuZXJyb3IpID8gU3RyaW5nKG9iamVjdC5lcnJvcikgOiBcIlwiIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEVycm9yKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmVycm9yICE9PSB1bmRlZmluZWQgJiYgKG9iai5lcnJvciA9IG1lc3NhZ2UuZXJyb3IpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxFcnJvcj4pOiBFcnJvciB7XG4gICAgcmV0dXJuIEVycm9yLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RXJyb3I+KTogRXJyb3Ige1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRXJyb3IoKTtcbiAgICBtZXNzYWdlLmVycm9yID0gb2JqZWN0LmVycm9yID8/IFwiXCI7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5kZWNsYXJlIHZhciBzZWxmOiBhbnkgfCB1bmRlZmluZWQ7XG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueSB8IHVuZGVmaW5lZDtcbmRlY2xhcmUgdmFyIGdsb2JhbDogYW55IHwgdW5kZWZpbmVkO1xudmFyIHRzUHJvdG9HbG9iYWxUaGlzOiBhbnkgPSAoKCkgPT4ge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcztcbiAgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gZ2xvYmFsO1xuICB9XG4gIHRocm93IFwiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCI7XG59KSgpO1xuXG50eXBlIEJ1aWx0aW4gPSBEYXRlIHwgRnVuY3Rpb24gfCBVaW50OEFycmF5IHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgRGVlcFBhcnRpYWw8VD4gPSBUIGV4dGVuZHMgQnVpbHRpbiA/IFRcbiAgOiBUIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gPyBBcnJheTxEZWVwUGFydGlhbDxVPj4gOiBUIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxpbmZlciBVPiA/IFJlYWRvbmx5QXJyYXk8RGVlcFBhcnRpYWw8VT4+XG4gIDogVCBleHRlbmRzIHsgJGNhc2U6IHN0cmluZyB9ID8geyBbSyBpbiBrZXlvZiBPbWl0PFQsIFwiJGNhc2VcIj5dPzogRGVlcFBhcnRpYWw8VFtLXT4gfSAmIHsgJGNhc2U6IFRbXCIkY2FzZVwiXSB9XG4gIDogVCBleHRlbmRzIHt9ID8geyBbSyBpbiBrZXlvZiBUXT86IERlZXBQYXJ0aWFsPFRbS10+IH1cbiAgOiBQYXJ0aWFsPFQ+O1xuXG5mdW5jdGlvbiBsb25nVG9OdW1iZXIobG9uZzogTG9uZyk6IG51bWJlciB7XG4gIGlmIChsb25nLmd0KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkge1xuICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlZhbHVlIGlzIGxhcmdlciB0aGFuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXCIpO1xuICB9XG4gIHJldHVybiBsb25nLnRvTnVtYmVyKCk7XG59XG5cbmlmIChfbTAudXRpbC5Mb25nICE9PSBMb25nKSB7XG4gIF9tMC51dGlsLkxvbmcgPSBMb25nIGFzIGFueTtcbiAgX20wLmNvbmZpZ3VyZSgpO1xufVxuXG5mdW5jdGlvbiBpc1NldCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xufVxuIl19
|