@coralogix/rum-cli 1.1.21 → 1.1.22

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.
Files changed (89) hide show
  1. package/README.md +8 -4
  2. package/api/rum-api.ts +1 -1
  3. package/cli/commands/delete-source-maps-command.ts +1 -1
  4. package/cli/commands/index.ts +5 -4
  5. package/cli/commands/update-source-maps-command.ts +1 -1
  6. package/cli/commands/upload-react-native-source-maps-command.ts +39 -0
  7. package/cli/commands/upload-source-maps-command.ts +1 -1
  8. package/cli/rum-cli.ts +8 -7
  9. package/dist/api/rum-api.js +2 -2
  10. package/dist/cli/commands/delete-source-maps-command.d.ts +1 -1
  11. package/dist/cli/commands/delete-source-maps-command.js +4 -4
  12. package/dist/cli/commands/index.d.ts +4 -3
  13. package/dist/cli/commands/index.js +3 -2
  14. package/dist/cli/commands/update-source-maps-command.d.ts +1 -1
  15. package/dist/cli/commands/update-source-maps-command.js +4 -4
  16. package/dist/cli/commands/upload-react-native-source-maps-command.d.ts +2 -0
  17. package/dist/cli/commands/upload-react-native-source-maps-command.js +47 -0
  18. package/dist/cli/commands/upload-source-maps-command.d.ts +1 -1
  19. package/dist/cli/commands/upload-source-maps-command.js +4 -4
  20. package/dist/cli/rum-cli.js +9 -7
  21. package/dist/proto-models/com/coralogix/rum/v2/analytics.d.ts +1 -1
  22. package/dist/proto-models/com/coralogix/rum/v2/analytics.js +115 -102
  23. package/dist/proto-models/com/coralogix/rum/v2/audit_log.d.ts +1 -1
  24. package/dist/proto-models/com/coralogix/rum/v2/audit_log.js +5 -3
  25. package/dist/proto-models/com/coralogix/rum/v2/chunk.d.ts +1 -1
  26. package/dist/proto-models/com/coralogix/rum/v2/chunk.js +54 -49
  27. package/dist/proto-models/com/coralogix/rum/v2/file.d.ts +1 -1
  28. package/dist/proto-models/com/coralogix/rum/v2/file.js +24 -34
  29. package/dist/proto-models/com/coralogix/rum/v2/rum_react_native_source_map_service.d.ts +69 -0
  30. package/dist/proto-models/com/coralogix/rum/v2/rum_react_native_source_map_service.js +189 -0
  31. package/dist/proto-models/com/coralogix/rum/v2/rum_saved_filters_service.d.ts +526 -0
  32. package/dist/proto-models/com/coralogix/rum/v2/rum_saved_filters_service.js +1560 -0
  33. package/dist/proto-models/com/coralogix/rum/v2/rum_service.d.ts +98 -3
  34. package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +475 -127
  35. package/dist/proto-models/com/coralogix/rum/v2/rum_session_recording_service.d.ts +1 -59
  36. package/dist/proto-models/com/coralogix/rum/v2/rum_session_recording_service.js +4 -175
  37. package/dist/proto-models/com/coralogix/rum/v2/rum_snooze_errors_service.d.ts +261 -0
  38. package/dist/proto-models/com/coralogix/rum/v2/rum_snooze_errors_service.js +698 -0
  39. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.d.ts +1 -1
  40. package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +65 -41
  41. package/dist/proto-models/com/coralogix/rum/v2/saved_filter.d.ts +55 -0
  42. package/dist/proto-models/com/coralogix/rum/v2/saved_filter.js +267 -0
  43. package/dist/proto-models/com/coralogix/rum/v2/snooze_errors.d.ts +109 -0
  44. package/dist/proto-models/com/coralogix/rum/v2/snooze_errors.js +580 -0
  45. package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.d.ts +1 -1
  46. package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +47 -24
  47. package/dist/proto-models/com/coralogix/rum/v2/source_map_release.d.ts +1 -1
  48. package/dist/proto-models/com/coralogix/rum/v2/source_map_release.js +43 -38
  49. package/dist/proto-models/com/coralogix/rum/v2/template.d.ts +14 -1
  50. package/dist/proto-models/com/coralogix/rum/v2/template.js +148 -54
  51. package/dist/proto-models/google/protobuf/descriptor.d.ts +1 -1
  52. package/dist/proto-models/google/protobuf/descriptor.js +537 -427
  53. package/dist/services/react-native-source-maps.service.d.ts +3 -0
  54. package/dist/services/react-native-source-maps.service.js +42 -0
  55. package/dist/services/source-maps.service.js +3 -3
  56. package/dist/utils/index.d.ts +1 -1
  57. package/dist/utils/index.js +4 -4
  58. package/package.json +1 -1
  59. package/proto-models/com/coralogix/rum/v2/analytics.ts +113 -108
  60. package/proto-models/com/coralogix/rum/v2/audit_log.ts +6 -4
  61. package/proto-models/com/coralogix/rum/v2/chunk.ts +55 -56
  62. package/proto-models/com/coralogix/rum/v2/file.ts +25 -39
  63. package/proto-models/com/coralogix/rum/v2/rum_react_native_source_map_service.ts +223 -0
  64. package/proto-models/com/coralogix/rum/v2/rum_saved_filters_service.ts +1837 -0
  65. package/proto-models/com/coralogix/rum/v2/rum_service.ts +533 -146
  66. package/proto-models/com/coralogix/rum/v2/rum_session_recording_service.ts +1 -208
  67. package/proto-models/com/coralogix/rum/v2/rum_snooze_errors_service.ts +818 -0
  68. package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +65 -46
  69. package/proto-models/com/coralogix/rum/v2/saved_filter.ts +301 -0
  70. package/proto-models/com/coralogix/rum/v2/snooze_errors.ts +656 -0
  71. package/proto-models/com/coralogix/rum/v2/source_code_file_mapping.ts +48 -27
  72. package/proto-models/com/coralogix/rum/v2/source_map_release.ts +44 -44
  73. package/proto-models/com/coralogix/rum/v2/template.ts +161 -59
  74. package/proto-models/google/protobuf/descriptor.ts +551 -464
  75. package/protofetch.lock +2 -2
  76. package/protofetch.toml +1 -1
  77. package/protos/com/coralogix/rum/v2/rum_react_native_source_map_service.proto +19 -0
  78. package/protos/com/coralogix/rum/v2/rum_saved_filters_service.proto +128 -0
  79. package/protos/com/coralogix/rum/v2/rum_service.proto +26 -0
  80. package/protos/com/coralogix/rum/v2/rum_session_recording_service.proto +1 -12
  81. package/protos/com/coralogix/rum/v2/rum_snooze_errors_service.proto +64 -0
  82. package/protos/com/coralogix/rum/v2/rum_source_map_service.proto +1 -1
  83. package/protos/com/coralogix/rum/v2/saved_filter.proto +28 -0
  84. package/protos/com/coralogix/rum/v2/snooze_errors.proto +55 -0
  85. package/protos/com/coralogix/rum/v2/template.proto +6 -0
  86. package/protoset.bin +0 -0
  87. package/services/react-native-source-maps.service.ts +40 -0
  88. package/services/source-maps.service.ts +2 -2
  89. package/utils/index.ts +3 -3
@@ -0,0 +1,1560 @@
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.RumSavedFiltersServiceDefinition = exports.ReplaceDefaultSavedFilterResponse = exports.ReplaceDefaultSavedFilterRequest = exports.RemoveDefaultSavedFilterResponse = exports.RemoveDefaultSavedFilterRequest = exports.GetDefaultSavedFilterResponse = exports.GetDefaultSavedFilterRequest = exports.SetDefaultSavedFilterResponse = exports.SetDefaultSavedFilterRequest = exports.GetSavedFilterQueryDefResponse = exports.GetSavedFilterQueryDefRequest = exports.RemoveFavoriteFilterResponse = exports.RemoveFavoriteFilterRequest = exports.SaveFavoriteFilterResponse = exports.SaveFavoriteFilterRequest = exports.DeleteSavedFilterResponse = exports.DeleteSavedFilterRequest = exports.UpdateSavedFilterResponse = exports.UpdateSavedFilterRequest = exports.CreateSavedFilterResponse = exports.CreateSavedFilterRequest = exports.GetSavedFiltersResponse = exports.GetSavedFiltersRequest = exports.protobufPackage = void 0;
7
+ /* eslint-disable */
8
+ const minimal_1 = __importDefault(require("protobufjs/minimal"));
9
+ const saved_filter_1 = require("./saved_filter");
10
+ exports.protobufPackage = "com.coralogix.rum.v2";
11
+ function createBaseGetSavedFiltersRequest() {
12
+ return { page: 0 };
13
+ }
14
+ exports.GetSavedFiltersRequest = {
15
+ encode(message, writer = minimal_1.default.Writer.create()) {
16
+ if (message.page !== 0) {
17
+ writer.uint32(8).int32(message.page);
18
+ }
19
+ return writer;
20
+ },
21
+ decode(input, length) {
22
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
23
+ let end = length === undefined ? reader.len : reader.pos + length;
24
+ const message = createBaseGetSavedFiltersRequest();
25
+ while (reader.pos < end) {
26
+ const tag = reader.uint32();
27
+ switch (tag >>> 3) {
28
+ case 1:
29
+ if (tag !== 8) {
30
+ break;
31
+ }
32
+ message.page = reader.int32();
33
+ continue;
34
+ }
35
+ if ((tag & 7) === 4 || tag === 0) {
36
+ break;
37
+ }
38
+ reader.skipType(tag & 7);
39
+ }
40
+ return message;
41
+ },
42
+ fromJSON(object) {
43
+ return { page: isSet(object.page) ? (0, saved_filter_1.pageFromJSON)(object.page) : 0 };
44
+ },
45
+ toJSON(message) {
46
+ const obj = {};
47
+ if (message.page !== 0) {
48
+ obj.page = (0, saved_filter_1.pageToJSON)(message.page);
49
+ }
50
+ return obj;
51
+ },
52
+ create(base) {
53
+ return exports.GetSavedFiltersRequest.fromPartial(base !== null && base !== void 0 ? base : {});
54
+ },
55
+ fromPartial(object) {
56
+ var _a;
57
+ const message = createBaseGetSavedFiltersRequest();
58
+ message.page = (_a = object.page) !== null && _a !== void 0 ? _a : 0;
59
+ return message;
60
+ },
61
+ };
62
+ function createBaseGetSavedFiltersResponse() {
63
+ return { savedFilters: [] };
64
+ }
65
+ exports.GetSavedFiltersResponse = {
66
+ encode(message, writer = minimal_1.default.Writer.create()) {
67
+ for (const v of message.savedFilters) {
68
+ saved_filter_1.SavedFilter.encode(v, writer.uint32(10).fork()).ldelim();
69
+ }
70
+ return writer;
71
+ },
72
+ decode(input, length) {
73
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
74
+ let end = length === undefined ? reader.len : reader.pos + length;
75
+ const message = createBaseGetSavedFiltersResponse();
76
+ while (reader.pos < end) {
77
+ const tag = reader.uint32();
78
+ switch (tag >>> 3) {
79
+ case 1:
80
+ if (tag !== 10) {
81
+ break;
82
+ }
83
+ message.savedFilters.push(saved_filter_1.SavedFilter.decode(reader, reader.uint32()));
84
+ continue;
85
+ }
86
+ if ((tag & 7) === 4 || tag === 0) {
87
+ break;
88
+ }
89
+ reader.skipType(tag & 7);
90
+ }
91
+ return message;
92
+ },
93
+ fromJSON(object) {
94
+ return {
95
+ savedFilters: globalThis.Array.isArray(object === null || object === void 0 ? void 0 : object.savedFilters)
96
+ ? object.savedFilters.map((e) => saved_filter_1.SavedFilter.fromJSON(e))
97
+ : [],
98
+ };
99
+ },
100
+ toJSON(message) {
101
+ var _a;
102
+ const obj = {};
103
+ if ((_a = message.savedFilters) === null || _a === void 0 ? void 0 : _a.length) {
104
+ obj.savedFilters = message.savedFilters.map((e) => saved_filter_1.SavedFilter.toJSON(e));
105
+ }
106
+ return obj;
107
+ },
108
+ create(base) {
109
+ return exports.GetSavedFiltersResponse.fromPartial(base !== null && base !== void 0 ? base : {});
110
+ },
111
+ fromPartial(object) {
112
+ var _a;
113
+ const message = createBaseGetSavedFiltersResponse();
114
+ message.savedFilters = ((_a = object.savedFilters) === null || _a === void 0 ? void 0 : _a.map((e) => saved_filter_1.SavedFilter.fromPartial(e))) || [];
115
+ return message;
116
+ },
117
+ };
118
+ function createBaseCreateSavedFilterRequest() {
119
+ return { name: "", queryDef: "", page: 0, permission: 0 };
120
+ }
121
+ exports.CreateSavedFilterRequest = {
122
+ encode(message, writer = minimal_1.default.Writer.create()) {
123
+ if (message.name !== "") {
124
+ writer.uint32(10).string(message.name);
125
+ }
126
+ if (message.queryDef !== "") {
127
+ writer.uint32(18).string(message.queryDef);
128
+ }
129
+ if (message.page !== 0) {
130
+ writer.uint32(24).int32(message.page);
131
+ }
132
+ if (message.permission !== 0) {
133
+ writer.uint32(32).int32(message.permission);
134
+ }
135
+ return writer;
136
+ },
137
+ decode(input, length) {
138
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
139
+ let end = length === undefined ? reader.len : reader.pos + length;
140
+ const message = createBaseCreateSavedFilterRequest();
141
+ while (reader.pos < end) {
142
+ const tag = reader.uint32();
143
+ switch (tag >>> 3) {
144
+ case 1:
145
+ if (tag !== 10) {
146
+ break;
147
+ }
148
+ message.name = reader.string();
149
+ continue;
150
+ case 2:
151
+ if (tag !== 18) {
152
+ break;
153
+ }
154
+ message.queryDef = reader.string();
155
+ continue;
156
+ case 3:
157
+ if (tag !== 24) {
158
+ break;
159
+ }
160
+ message.page = reader.int32();
161
+ continue;
162
+ case 4:
163
+ if (tag !== 32) {
164
+ break;
165
+ }
166
+ message.permission = reader.int32();
167
+ continue;
168
+ }
169
+ if ((tag & 7) === 4 || tag === 0) {
170
+ break;
171
+ }
172
+ reader.skipType(tag & 7);
173
+ }
174
+ return message;
175
+ },
176
+ fromJSON(object) {
177
+ return {
178
+ name: isSet(object.name) ? globalThis.String(object.name) : "",
179
+ queryDef: isSet(object.queryDef) ? globalThis.String(object.queryDef) : "",
180
+ page: isSet(object.page) ? (0, saved_filter_1.pageFromJSON)(object.page) : 0,
181
+ permission: isSet(object.permission) ? (0, saved_filter_1.savedFilterPermissionFromJSON)(object.permission) : 0,
182
+ };
183
+ },
184
+ toJSON(message) {
185
+ const obj = {};
186
+ if (message.name !== "") {
187
+ obj.name = message.name;
188
+ }
189
+ if (message.queryDef !== "") {
190
+ obj.queryDef = message.queryDef;
191
+ }
192
+ if (message.page !== 0) {
193
+ obj.page = (0, saved_filter_1.pageToJSON)(message.page);
194
+ }
195
+ if (message.permission !== 0) {
196
+ obj.permission = (0, saved_filter_1.savedFilterPermissionToJSON)(message.permission);
197
+ }
198
+ return obj;
199
+ },
200
+ create(base) {
201
+ return exports.CreateSavedFilterRequest.fromPartial(base !== null && base !== void 0 ? base : {});
202
+ },
203
+ fromPartial(object) {
204
+ var _a, _b, _c, _d;
205
+ const message = createBaseCreateSavedFilterRequest();
206
+ message.name = (_a = object.name) !== null && _a !== void 0 ? _a : "";
207
+ message.queryDef = (_b = object.queryDef) !== null && _b !== void 0 ? _b : "";
208
+ message.page = (_c = object.page) !== null && _c !== void 0 ? _c : 0;
209
+ message.permission = (_d = object.permission) !== null && _d !== void 0 ? _d : 0;
210
+ return message;
211
+ },
212
+ };
213
+ function createBaseCreateSavedFilterResponse() {
214
+ return { savedFilters: undefined, permission: 0 };
215
+ }
216
+ exports.CreateSavedFilterResponse = {
217
+ encode(message, writer = minimal_1.default.Writer.create()) {
218
+ if (message.savedFilters !== undefined) {
219
+ saved_filter_1.SavedFilterBasicProperties.encode(message.savedFilters, writer.uint32(10).fork()).ldelim();
220
+ }
221
+ if (message.permission !== 0) {
222
+ writer.uint32(16).int32(message.permission);
223
+ }
224
+ return writer;
225
+ },
226
+ decode(input, length) {
227
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
228
+ let end = length === undefined ? reader.len : reader.pos + length;
229
+ const message = createBaseCreateSavedFilterResponse();
230
+ while (reader.pos < end) {
231
+ const tag = reader.uint32();
232
+ switch (tag >>> 3) {
233
+ case 1:
234
+ if (tag !== 10) {
235
+ break;
236
+ }
237
+ message.savedFilters = saved_filter_1.SavedFilterBasicProperties.decode(reader, reader.uint32());
238
+ continue;
239
+ case 2:
240
+ if (tag !== 16) {
241
+ break;
242
+ }
243
+ message.permission = reader.int32();
244
+ continue;
245
+ }
246
+ if ((tag & 7) === 4 || tag === 0) {
247
+ break;
248
+ }
249
+ reader.skipType(tag & 7);
250
+ }
251
+ return message;
252
+ },
253
+ fromJSON(object) {
254
+ return {
255
+ savedFilters: isSet(object.savedFilters) ? saved_filter_1.SavedFilterBasicProperties.fromJSON(object.savedFilters) : undefined,
256
+ permission: isSet(object.permission) ? (0, saved_filter_1.savedFilterPermissionFromJSON)(object.permission) : 0,
257
+ };
258
+ },
259
+ toJSON(message) {
260
+ const obj = {};
261
+ if (message.savedFilters !== undefined) {
262
+ obj.savedFilters = saved_filter_1.SavedFilterBasicProperties.toJSON(message.savedFilters);
263
+ }
264
+ if (message.permission !== 0) {
265
+ obj.permission = (0, saved_filter_1.savedFilterPermissionToJSON)(message.permission);
266
+ }
267
+ return obj;
268
+ },
269
+ create(base) {
270
+ return exports.CreateSavedFilterResponse.fromPartial(base !== null && base !== void 0 ? base : {});
271
+ },
272
+ fromPartial(object) {
273
+ var _a;
274
+ const message = createBaseCreateSavedFilterResponse();
275
+ message.savedFilters = (object.savedFilters !== undefined && object.savedFilters !== null)
276
+ ? saved_filter_1.SavedFilterBasicProperties.fromPartial(object.savedFilters)
277
+ : undefined;
278
+ message.permission = (_a = object.permission) !== null && _a !== void 0 ? _a : 0;
279
+ return message;
280
+ },
281
+ };
282
+ function createBaseUpdateSavedFilterRequest() {
283
+ return { savedFilter: undefined, permission: 0, queryDef: "" };
284
+ }
285
+ exports.UpdateSavedFilterRequest = {
286
+ encode(message, writer = minimal_1.default.Writer.create()) {
287
+ if (message.savedFilter !== undefined) {
288
+ saved_filter_1.SavedFilterBasicProperties.encode(message.savedFilter, writer.uint32(10).fork()).ldelim();
289
+ }
290
+ if (message.permission !== 0) {
291
+ writer.uint32(16).int32(message.permission);
292
+ }
293
+ if (message.queryDef !== "") {
294
+ writer.uint32(26).string(message.queryDef);
295
+ }
296
+ return writer;
297
+ },
298
+ decode(input, length) {
299
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
300
+ let end = length === undefined ? reader.len : reader.pos + length;
301
+ const message = createBaseUpdateSavedFilterRequest();
302
+ while (reader.pos < end) {
303
+ const tag = reader.uint32();
304
+ switch (tag >>> 3) {
305
+ case 1:
306
+ if (tag !== 10) {
307
+ break;
308
+ }
309
+ message.savedFilter = saved_filter_1.SavedFilterBasicProperties.decode(reader, reader.uint32());
310
+ continue;
311
+ case 2:
312
+ if (tag !== 16) {
313
+ break;
314
+ }
315
+ message.permission = reader.int32();
316
+ continue;
317
+ case 3:
318
+ if (tag !== 26) {
319
+ break;
320
+ }
321
+ message.queryDef = reader.string();
322
+ continue;
323
+ }
324
+ if ((tag & 7) === 4 || tag === 0) {
325
+ break;
326
+ }
327
+ reader.skipType(tag & 7);
328
+ }
329
+ return message;
330
+ },
331
+ fromJSON(object) {
332
+ return {
333
+ savedFilter: isSet(object.savedFilter) ? saved_filter_1.SavedFilterBasicProperties.fromJSON(object.savedFilter) : undefined,
334
+ permission: isSet(object.permission) ? (0, saved_filter_1.savedFilterPermissionFromJSON)(object.permission) : 0,
335
+ queryDef: isSet(object.queryDef) ? globalThis.String(object.queryDef) : "",
336
+ };
337
+ },
338
+ toJSON(message) {
339
+ const obj = {};
340
+ if (message.savedFilter !== undefined) {
341
+ obj.savedFilter = saved_filter_1.SavedFilterBasicProperties.toJSON(message.savedFilter);
342
+ }
343
+ if (message.permission !== 0) {
344
+ obj.permission = (0, saved_filter_1.savedFilterPermissionToJSON)(message.permission);
345
+ }
346
+ if (message.queryDef !== "") {
347
+ obj.queryDef = message.queryDef;
348
+ }
349
+ return obj;
350
+ },
351
+ create(base) {
352
+ return exports.UpdateSavedFilterRequest.fromPartial(base !== null && base !== void 0 ? base : {});
353
+ },
354
+ fromPartial(object) {
355
+ var _a, _b;
356
+ const message = createBaseUpdateSavedFilterRequest();
357
+ message.savedFilter = (object.savedFilter !== undefined && object.savedFilter !== null)
358
+ ? saved_filter_1.SavedFilterBasicProperties.fromPartial(object.savedFilter)
359
+ : undefined;
360
+ message.permission = (_a = object.permission) !== null && _a !== void 0 ? _a : 0;
361
+ message.queryDef = (_b = object.queryDef) !== null && _b !== void 0 ? _b : "";
362
+ return message;
363
+ },
364
+ };
365
+ function createBaseUpdateSavedFilterResponse() {
366
+ return { savedFilter: undefined, permission: 0 };
367
+ }
368
+ exports.UpdateSavedFilterResponse = {
369
+ encode(message, writer = minimal_1.default.Writer.create()) {
370
+ if (message.savedFilter !== undefined) {
371
+ saved_filter_1.SavedFilterBasicProperties.encode(message.savedFilter, writer.uint32(10).fork()).ldelim();
372
+ }
373
+ if (message.permission !== 0) {
374
+ writer.uint32(16).int32(message.permission);
375
+ }
376
+ return writer;
377
+ },
378
+ decode(input, length) {
379
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
380
+ let end = length === undefined ? reader.len : reader.pos + length;
381
+ const message = createBaseUpdateSavedFilterResponse();
382
+ while (reader.pos < end) {
383
+ const tag = reader.uint32();
384
+ switch (tag >>> 3) {
385
+ case 1:
386
+ if (tag !== 10) {
387
+ break;
388
+ }
389
+ message.savedFilter = saved_filter_1.SavedFilterBasicProperties.decode(reader, reader.uint32());
390
+ continue;
391
+ case 2:
392
+ if (tag !== 16) {
393
+ break;
394
+ }
395
+ message.permission = reader.int32();
396
+ continue;
397
+ }
398
+ if ((tag & 7) === 4 || tag === 0) {
399
+ break;
400
+ }
401
+ reader.skipType(tag & 7);
402
+ }
403
+ return message;
404
+ },
405
+ fromJSON(object) {
406
+ return {
407
+ savedFilter: isSet(object.savedFilter) ? saved_filter_1.SavedFilterBasicProperties.fromJSON(object.savedFilter) : undefined,
408
+ permission: isSet(object.permission) ? (0, saved_filter_1.savedFilterPermissionFromJSON)(object.permission) : 0,
409
+ };
410
+ },
411
+ toJSON(message) {
412
+ const obj = {};
413
+ if (message.savedFilter !== undefined) {
414
+ obj.savedFilter = saved_filter_1.SavedFilterBasicProperties.toJSON(message.savedFilter);
415
+ }
416
+ if (message.permission !== 0) {
417
+ obj.permission = (0, saved_filter_1.savedFilterPermissionToJSON)(message.permission);
418
+ }
419
+ return obj;
420
+ },
421
+ create(base) {
422
+ return exports.UpdateSavedFilterResponse.fromPartial(base !== null && base !== void 0 ? base : {});
423
+ },
424
+ fromPartial(object) {
425
+ var _a;
426
+ const message = createBaseUpdateSavedFilterResponse();
427
+ message.savedFilter = (object.savedFilter !== undefined && object.savedFilter !== null)
428
+ ? saved_filter_1.SavedFilterBasicProperties.fromPartial(object.savedFilter)
429
+ : undefined;
430
+ message.permission = (_a = object.permission) !== null && _a !== void 0 ? _a : 0;
431
+ return message;
432
+ },
433
+ };
434
+ function createBaseDeleteSavedFilterRequest() {
435
+ return { id: "" };
436
+ }
437
+ exports.DeleteSavedFilterRequest = {
438
+ encode(message, writer = minimal_1.default.Writer.create()) {
439
+ if (message.id !== "") {
440
+ writer.uint32(10).string(message.id);
441
+ }
442
+ return writer;
443
+ },
444
+ decode(input, length) {
445
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
446
+ let end = length === undefined ? reader.len : reader.pos + length;
447
+ const message = createBaseDeleteSavedFilterRequest();
448
+ while (reader.pos < end) {
449
+ const tag = reader.uint32();
450
+ switch (tag >>> 3) {
451
+ case 1:
452
+ if (tag !== 10) {
453
+ break;
454
+ }
455
+ message.id = reader.string();
456
+ continue;
457
+ }
458
+ if ((tag & 7) === 4 || tag === 0) {
459
+ break;
460
+ }
461
+ reader.skipType(tag & 7);
462
+ }
463
+ return message;
464
+ },
465
+ fromJSON(object) {
466
+ return { id: isSet(object.id) ? globalThis.String(object.id) : "" };
467
+ },
468
+ toJSON(message) {
469
+ const obj = {};
470
+ if (message.id !== "") {
471
+ obj.id = message.id;
472
+ }
473
+ return obj;
474
+ },
475
+ create(base) {
476
+ return exports.DeleteSavedFilterRequest.fromPartial(base !== null && base !== void 0 ? base : {});
477
+ },
478
+ fromPartial(object) {
479
+ var _a;
480
+ const message = createBaseDeleteSavedFilterRequest();
481
+ message.id = (_a = object.id) !== null && _a !== void 0 ? _a : "";
482
+ return message;
483
+ },
484
+ };
485
+ function createBaseDeleteSavedFilterResponse() {
486
+ return { savedFilter: undefined };
487
+ }
488
+ exports.DeleteSavedFilterResponse = {
489
+ encode(message, writer = minimal_1.default.Writer.create()) {
490
+ if (message.savedFilter !== undefined) {
491
+ saved_filter_1.SavedFilterBasicProperties.encode(message.savedFilter, writer.uint32(10).fork()).ldelim();
492
+ }
493
+ return writer;
494
+ },
495
+ decode(input, length) {
496
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
497
+ let end = length === undefined ? reader.len : reader.pos + length;
498
+ const message = createBaseDeleteSavedFilterResponse();
499
+ while (reader.pos < end) {
500
+ const tag = reader.uint32();
501
+ switch (tag >>> 3) {
502
+ case 1:
503
+ if (tag !== 10) {
504
+ break;
505
+ }
506
+ message.savedFilter = saved_filter_1.SavedFilterBasicProperties.decode(reader, reader.uint32());
507
+ continue;
508
+ }
509
+ if ((tag & 7) === 4 || tag === 0) {
510
+ break;
511
+ }
512
+ reader.skipType(tag & 7);
513
+ }
514
+ return message;
515
+ },
516
+ fromJSON(object) {
517
+ return {
518
+ savedFilter: isSet(object.savedFilter) ? saved_filter_1.SavedFilterBasicProperties.fromJSON(object.savedFilter) : undefined,
519
+ };
520
+ },
521
+ toJSON(message) {
522
+ const obj = {};
523
+ if (message.savedFilter !== undefined) {
524
+ obj.savedFilter = saved_filter_1.SavedFilterBasicProperties.toJSON(message.savedFilter);
525
+ }
526
+ return obj;
527
+ },
528
+ create(base) {
529
+ return exports.DeleteSavedFilterResponse.fromPartial(base !== null && base !== void 0 ? base : {});
530
+ },
531
+ fromPartial(object) {
532
+ const message = createBaseDeleteSavedFilterResponse();
533
+ message.savedFilter = (object.savedFilter !== undefined && object.savedFilter !== null)
534
+ ? saved_filter_1.SavedFilterBasicProperties.fromPartial(object.savedFilter)
535
+ : undefined;
536
+ return message;
537
+ },
538
+ };
539
+ function createBaseSaveFavoriteFilterRequest() {
540
+ return { savedFilterId: "" };
541
+ }
542
+ exports.SaveFavoriteFilterRequest = {
543
+ encode(message, writer = minimal_1.default.Writer.create()) {
544
+ if (message.savedFilterId !== "") {
545
+ writer.uint32(10).string(message.savedFilterId);
546
+ }
547
+ return writer;
548
+ },
549
+ decode(input, length) {
550
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
551
+ let end = length === undefined ? reader.len : reader.pos + length;
552
+ const message = createBaseSaveFavoriteFilterRequest();
553
+ while (reader.pos < end) {
554
+ const tag = reader.uint32();
555
+ switch (tag >>> 3) {
556
+ case 1:
557
+ if (tag !== 10) {
558
+ break;
559
+ }
560
+ message.savedFilterId = reader.string();
561
+ continue;
562
+ }
563
+ if ((tag & 7) === 4 || tag === 0) {
564
+ break;
565
+ }
566
+ reader.skipType(tag & 7);
567
+ }
568
+ return message;
569
+ },
570
+ fromJSON(object) {
571
+ return { savedFilterId: isSet(object.savedFilterId) ? globalThis.String(object.savedFilterId) : "" };
572
+ },
573
+ toJSON(message) {
574
+ const obj = {};
575
+ if (message.savedFilterId !== "") {
576
+ obj.savedFilterId = message.savedFilterId;
577
+ }
578
+ return obj;
579
+ },
580
+ create(base) {
581
+ return exports.SaveFavoriteFilterRequest.fromPartial(base !== null && base !== void 0 ? base : {});
582
+ },
583
+ fromPartial(object) {
584
+ var _a;
585
+ const message = createBaseSaveFavoriteFilterRequest();
586
+ message.savedFilterId = (_a = object.savedFilterId) !== null && _a !== void 0 ? _a : "";
587
+ return message;
588
+ },
589
+ };
590
+ function createBaseSaveFavoriteFilterResponse() {
591
+ return { favoriteId: "", savedFilterId: "", userId: "" };
592
+ }
593
+ exports.SaveFavoriteFilterResponse = {
594
+ encode(message, writer = minimal_1.default.Writer.create()) {
595
+ if (message.favoriteId !== "") {
596
+ writer.uint32(10).string(message.favoriteId);
597
+ }
598
+ if (message.savedFilterId !== "") {
599
+ writer.uint32(18).string(message.savedFilterId);
600
+ }
601
+ if (message.userId !== "") {
602
+ writer.uint32(26).string(message.userId);
603
+ }
604
+ return writer;
605
+ },
606
+ decode(input, length) {
607
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
608
+ let end = length === undefined ? reader.len : reader.pos + length;
609
+ const message = createBaseSaveFavoriteFilterResponse();
610
+ while (reader.pos < end) {
611
+ const tag = reader.uint32();
612
+ switch (tag >>> 3) {
613
+ case 1:
614
+ if (tag !== 10) {
615
+ break;
616
+ }
617
+ message.favoriteId = reader.string();
618
+ continue;
619
+ case 2:
620
+ if (tag !== 18) {
621
+ break;
622
+ }
623
+ message.savedFilterId = reader.string();
624
+ continue;
625
+ case 3:
626
+ if (tag !== 26) {
627
+ break;
628
+ }
629
+ message.userId = reader.string();
630
+ continue;
631
+ }
632
+ if ((tag & 7) === 4 || tag === 0) {
633
+ break;
634
+ }
635
+ reader.skipType(tag & 7);
636
+ }
637
+ return message;
638
+ },
639
+ fromJSON(object) {
640
+ return {
641
+ favoriteId: isSet(object.favoriteId) ? globalThis.String(object.favoriteId) : "",
642
+ savedFilterId: isSet(object.savedFilterId) ? globalThis.String(object.savedFilterId) : "",
643
+ userId: isSet(object.userId) ? globalThis.String(object.userId) : "",
644
+ };
645
+ },
646
+ toJSON(message) {
647
+ const obj = {};
648
+ if (message.favoriteId !== "") {
649
+ obj.favoriteId = message.favoriteId;
650
+ }
651
+ if (message.savedFilterId !== "") {
652
+ obj.savedFilterId = message.savedFilterId;
653
+ }
654
+ if (message.userId !== "") {
655
+ obj.userId = message.userId;
656
+ }
657
+ return obj;
658
+ },
659
+ create(base) {
660
+ return exports.SaveFavoriteFilterResponse.fromPartial(base !== null && base !== void 0 ? base : {});
661
+ },
662
+ fromPartial(object) {
663
+ var _a, _b, _c;
664
+ const message = createBaseSaveFavoriteFilterResponse();
665
+ message.favoriteId = (_a = object.favoriteId) !== null && _a !== void 0 ? _a : "";
666
+ message.savedFilterId = (_b = object.savedFilterId) !== null && _b !== void 0 ? _b : "";
667
+ message.userId = (_c = object.userId) !== null && _c !== void 0 ? _c : "";
668
+ return message;
669
+ },
670
+ };
671
+ function createBaseRemoveFavoriteFilterRequest() {
672
+ return { favoriteId: "" };
673
+ }
674
+ exports.RemoveFavoriteFilterRequest = {
675
+ encode(message, writer = minimal_1.default.Writer.create()) {
676
+ if (message.favoriteId !== "") {
677
+ writer.uint32(10).string(message.favoriteId);
678
+ }
679
+ return writer;
680
+ },
681
+ decode(input, length) {
682
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
683
+ let end = length === undefined ? reader.len : reader.pos + length;
684
+ const message = createBaseRemoveFavoriteFilterRequest();
685
+ while (reader.pos < end) {
686
+ const tag = reader.uint32();
687
+ switch (tag >>> 3) {
688
+ case 1:
689
+ if (tag !== 10) {
690
+ break;
691
+ }
692
+ message.favoriteId = reader.string();
693
+ continue;
694
+ }
695
+ if ((tag & 7) === 4 || tag === 0) {
696
+ break;
697
+ }
698
+ reader.skipType(tag & 7);
699
+ }
700
+ return message;
701
+ },
702
+ fromJSON(object) {
703
+ return { favoriteId: isSet(object.favoriteId) ? globalThis.String(object.favoriteId) : "" };
704
+ },
705
+ toJSON(message) {
706
+ const obj = {};
707
+ if (message.favoriteId !== "") {
708
+ obj.favoriteId = message.favoriteId;
709
+ }
710
+ return obj;
711
+ },
712
+ create(base) {
713
+ return exports.RemoveFavoriteFilterRequest.fromPartial(base !== null && base !== void 0 ? base : {});
714
+ },
715
+ fromPartial(object) {
716
+ var _a;
717
+ const message = createBaseRemoveFavoriteFilterRequest();
718
+ message.favoriteId = (_a = object.favoriteId) !== null && _a !== void 0 ? _a : "";
719
+ return message;
720
+ },
721
+ };
722
+ function createBaseRemoveFavoriteFilterResponse() {
723
+ return { favoriteId: "", savedFilterId: "", userId: "" };
724
+ }
725
+ exports.RemoveFavoriteFilterResponse = {
726
+ encode(message, writer = minimal_1.default.Writer.create()) {
727
+ if (message.favoriteId !== "") {
728
+ writer.uint32(10).string(message.favoriteId);
729
+ }
730
+ if (message.savedFilterId !== "") {
731
+ writer.uint32(18).string(message.savedFilterId);
732
+ }
733
+ if (message.userId !== "") {
734
+ writer.uint32(26).string(message.userId);
735
+ }
736
+ return writer;
737
+ },
738
+ decode(input, length) {
739
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
740
+ let end = length === undefined ? reader.len : reader.pos + length;
741
+ const message = createBaseRemoveFavoriteFilterResponse();
742
+ while (reader.pos < end) {
743
+ const tag = reader.uint32();
744
+ switch (tag >>> 3) {
745
+ case 1:
746
+ if (tag !== 10) {
747
+ break;
748
+ }
749
+ message.favoriteId = reader.string();
750
+ continue;
751
+ case 2:
752
+ if (tag !== 18) {
753
+ break;
754
+ }
755
+ message.savedFilterId = reader.string();
756
+ continue;
757
+ case 3:
758
+ if (tag !== 26) {
759
+ break;
760
+ }
761
+ message.userId = reader.string();
762
+ continue;
763
+ }
764
+ if ((tag & 7) === 4 || tag === 0) {
765
+ break;
766
+ }
767
+ reader.skipType(tag & 7);
768
+ }
769
+ return message;
770
+ },
771
+ fromJSON(object) {
772
+ return {
773
+ favoriteId: isSet(object.favoriteId) ? globalThis.String(object.favoriteId) : "",
774
+ savedFilterId: isSet(object.savedFilterId) ? globalThis.String(object.savedFilterId) : "",
775
+ userId: isSet(object.userId) ? globalThis.String(object.userId) : "",
776
+ };
777
+ },
778
+ toJSON(message) {
779
+ const obj = {};
780
+ if (message.favoriteId !== "") {
781
+ obj.favoriteId = message.favoriteId;
782
+ }
783
+ if (message.savedFilterId !== "") {
784
+ obj.savedFilterId = message.savedFilterId;
785
+ }
786
+ if (message.userId !== "") {
787
+ obj.userId = message.userId;
788
+ }
789
+ return obj;
790
+ },
791
+ create(base) {
792
+ return exports.RemoveFavoriteFilterResponse.fromPartial(base !== null && base !== void 0 ? base : {});
793
+ },
794
+ fromPartial(object) {
795
+ var _a, _b, _c;
796
+ const message = createBaseRemoveFavoriteFilterResponse();
797
+ message.favoriteId = (_a = object.favoriteId) !== null && _a !== void 0 ? _a : "";
798
+ message.savedFilterId = (_b = object.savedFilterId) !== null && _b !== void 0 ? _b : "";
799
+ message.userId = (_c = object.userId) !== null && _c !== void 0 ? _c : "";
800
+ return message;
801
+ },
802
+ };
803
+ function createBaseGetSavedFilterQueryDefRequest() {
804
+ return { id: "" };
805
+ }
806
+ exports.GetSavedFilterQueryDefRequest = {
807
+ encode(message, writer = minimal_1.default.Writer.create()) {
808
+ if (message.id !== "") {
809
+ writer.uint32(10).string(message.id);
810
+ }
811
+ return writer;
812
+ },
813
+ decode(input, length) {
814
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
815
+ let end = length === undefined ? reader.len : reader.pos + length;
816
+ const message = createBaseGetSavedFilterQueryDefRequest();
817
+ while (reader.pos < end) {
818
+ const tag = reader.uint32();
819
+ switch (tag >>> 3) {
820
+ case 1:
821
+ if (tag !== 10) {
822
+ break;
823
+ }
824
+ message.id = reader.string();
825
+ continue;
826
+ }
827
+ if ((tag & 7) === 4 || tag === 0) {
828
+ break;
829
+ }
830
+ reader.skipType(tag & 7);
831
+ }
832
+ return message;
833
+ },
834
+ fromJSON(object) {
835
+ return { id: isSet(object.id) ? globalThis.String(object.id) : "" };
836
+ },
837
+ toJSON(message) {
838
+ const obj = {};
839
+ if (message.id !== "") {
840
+ obj.id = message.id;
841
+ }
842
+ return obj;
843
+ },
844
+ create(base) {
845
+ return exports.GetSavedFilterQueryDefRequest.fromPartial(base !== null && base !== void 0 ? base : {});
846
+ },
847
+ fromPartial(object) {
848
+ var _a;
849
+ const message = createBaseGetSavedFilterQueryDefRequest();
850
+ message.id = (_a = object.id) !== null && _a !== void 0 ? _a : "";
851
+ return message;
852
+ },
853
+ };
854
+ function createBaseGetSavedFilterQueryDefResponse() {
855
+ return { queryDef: "" };
856
+ }
857
+ exports.GetSavedFilterQueryDefResponse = {
858
+ encode(message, writer = minimal_1.default.Writer.create()) {
859
+ if (message.queryDef !== "") {
860
+ writer.uint32(10).string(message.queryDef);
861
+ }
862
+ return writer;
863
+ },
864
+ decode(input, length) {
865
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
866
+ let end = length === undefined ? reader.len : reader.pos + length;
867
+ const message = createBaseGetSavedFilterQueryDefResponse();
868
+ while (reader.pos < end) {
869
+ const tag = reader.uint32();
870
+ switch (tag >>> 3) {
871
+ case 1:
872
+ if (tag !== 10) {
873
+ break;
874
+ }
875
+ message.queryDef = reader.string();
876
+ continue;
877
+ }
878
+ if ((tag & 7) === 4 || tag === 0) {
879
+ break;
880
+ }
881
+ reader.skipType(tag & 7);
882
+ }
883
+ return message;
884
+ },
885
+ fromJSON(object) {
886
+ return { queryDef: isSet(object.queryDef) ? globalThis.String(object.queryDef) : "" };
887
+ },
888
+ toJSON(message) {
889
+ const obj = {};
890
+ if (message.queryDef !== "") {
891
+ obj.queryDef = message.queryDef;
892
+ }
893
+ return obj;
894
+ },
895
+ create(base) {
896
+ return exports.GetSavedFilterQueryDefResponse.fromPartial(base !== null && base !== void 0 ? base : {});
897
+ },
898
+ fromPartial(object) {
899
+ var _a;
900
+ const message = createBaseGetSavedFilterQueryDefResponse();
901
+ message.queryDef = (_a = object.queryDef) !== null && _a !== void 0 ? _a : "";
902
+ return message;
903
+ },
904
+ };
905
+ function createBaseSetDefaultSavedFilterRequest() {
906
+ return { id: "", page: 0 };
907
+ }
908
+ exports.SetDefaultSavedFilterRequest = {
909
+ encode(message, writer = minimal_1.default.Writer.create()) {
910
+ if (message.id !== "") {
911
+ writer.uint32(10).string(message.id);
912
+ }
913
+ if (message.page !== 0) {
914
+ writer.uint32(16).int32(message.page);
915
+ }
916
+ return writer;
917
+ },
918
+ decode(input, length) {
919
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
920
+ let end = length === undefined ? reader.len : reader.pos + length;
921
+ const message = createBaseSetDefaultSavedFilterRequest();
922
+ while (reader.pos < end) {
923
+ const tag = reader.uint32();
924
+ switch (tag >>> 3) {
925
+ case 1:
926
+ if (tag !== 10) {
927
+ break;
928
+ }
929
+ message.id = reader.string();
930
+ continue;
931
+ case 2:
932
+ if (tag !== 16) {
933
+ break;
934
+ }
935
+ message.page = reader.int32();
936
+ continue;
937
+ }
938
+ if ((tag & 7) === 4 || tag === 0) {
939
+ break;
940
+ }
941
+ reader.skipType(tag & 7);
942
+ }
943
+ return message;
944
+ },
945
+ fromJSON(object) {
946
+ return {
947
+ id: isSet(object.id) ? globalThis.String(object.id) : "",
948
+ page: isSet(object.page) ? (0, saved_filter_1.pageFromJSON)(object.page) : 0,
949
+ };
950
+ },
951
+ toJSON(message) {
952
+ const obj = {};
953
+ if (message.id !== "") {
954
+ obj.id = message.id;
955
+ }
956
+ if (message.page !== 0) {
957
+ obj.page = (0, saved_filter_1.pageToJSON)(message.page);
958
+ }
959
+ return obj;
960
+ },
961
+ create(base) {
962
+ return exports.SetDefaultSavedFilterRequest.fromPartial(base !== null && base !== void 0 ? base : {});
963
+ },
964
+ fromPartial(object) {
965
+ var _a, _b;
966
+ const message = createBaseSetDefaultSavedFilterRequest();
967
+ message.id = (_a = object.id) !== null && _a !== void 0 ? _a : "";
968
+ message.page = (_b = object.page) !== null && _b !== void 0 ? _b : 0;
969
+ return message;
970
+ },
971
+ };
972
+ function createBaseSetDefaultSavedFilterResponse() {
973
+ return { defaultId: "", page: 0 };
974
+ }
975
+ exports.SetDefaultSavedFilterResponse = {
976
+ encode(message, writer = minimal_1.default.Writer.create()) {
977
+ if (message.defaultId !== "") {
978
+ writer.uint32(10).string(message.defaultId);
979
+ }
980
+ if (message.page !== 0) {
981
+ writer.uint32(16).int32(message.page);
982
+ }
983
+ return writer;
984
+ },
985
+ decode(input, length) {
986
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
987
+ let end = length === undefined ? reader.len : reader.pos + length;
988
+ const message = createBaseSetDefaultSavedFilterResponse();
989
+ while (reader.pos < end) {
990
+ const tag = reader.uint32();
991
+ switch (tag >>> 3) {
992
+ case 1:
993
+ if (tag !== 10) {
994
+ break;
995
+ }
996
+ message.defaultId = reader.string();
997
+ continue;
998
+ case 2:
999
+ if (tag !== 16) {
1000
+ break;
1001
+ }
1002
+ message.page = reader.int32();
1003
+ continue;
1004
+ }
1005
+ if ((tag & 7) === 4 || tag === 0) {
1006
+ break;
1007
+ }
1008
+ reader.skipType(tag & 7);
1009
+ }
1010
+ return message;
1011
+ },
1012
+ fromJSON(object) {
1013
+ return {
1014
+ defaultId: isSet(object.defaultId) ? globalThis.String(object.defaultId) : "",
1015
+ page: isSet(object.page) ? (0, saved_filter_1.pageFromJSON)(object.page) : 0,
1016
+ };
1017
+ },
1018
+ toJSON(message) {
1019
+ const obj = {};
1020
+ if (message.defaultId !== "") {
1021
+ obj.defaultId = message.defaultId;
1022
+ }
1023
+ if (message.page !== 0) {
1024
+ obj.page = (0, saved_filter_1.pageToJSON)(message.page);
1025
+ }
1026
+ return obj;
1027
+ },
1028
+ create(base) {
1029
+ return exports.SetDefaultSavedFilterResponse.fromPartial(base !== null && base !== void 0 ? base : {});
1030
+ },
1031
+ fromPartial(object) {
1032
+ var _a, _b;
1033
+ const message = createBaseSetDefaultSavedFilterResponse();
1034
+ message.defaultId = (_a = object.defaultId) !== null && _a !== void 0 ? _a : "";
1035
+ message.page = (_b = object.page) !== null && _b !== void 0 ? _b : 0;
1036
+ return message;
1037
+ },
1038
+ };
1039
+ function createBaseGetDefaultSavedFilterRequest() {
1040
+ return { page: 0 };
1041
+ }
1042
+ exports.GetDefaultSavedFilterRequest = {
1043
+ encode(message, writer = minimal_1.default.Writer.create()) {
1044
+ if (message.page !== 0) {
1045
+ writer.uint32(8).int32(message.page);
1046
+ }
1047
+ return writer;
1048
+ },
1049
+ decode(input, length) {
1050
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
1051
+ let end = length === undefined ? reader.len : reader.pos + length;
1052
+ const message = createBaseGetDefaultSavedFilterRequest();
1053
+ while (reader.pos < end) {
1054
+ const tag = reader.uint32();
1055
+ switch (tag >>> 3) {
1056
+ case 1:
1057
+ if (tag !== 8) {
1058
+ break;
1059
+ }
1060
+ message.page = reader.int32();
1061
+ continue;
1062
+ }
1063
+ if ((tag & 7) === 4 || tag === 0) {
1064
+ break;
1065
+ }
1066
+ reader.skipType(tag & 7);
1067
+ }
1068
+ return message;
1069
+ },
1070
+ fromJSON(object) {
1071
+ return { page: isSet(object.page) ? (0, saved_filter_1.pageFromJSON)(object.page) : 0 };
1072
+ },
1073
+ toJSON(message) {
1074
+ const obj = {};
1075
+ if (message.page !== 0) {
1076
+ obj.page = (0, saved_filter_1.pageToJSON)(message.page);
1077
+ }
1078
+ return obj;
1079
+ },
1080
+ create(base) {
1081
+ return exports.GetDefaultSavedFilterRequest.fromPartial(base !== null && base !== void 0 ? base : {});
1082
+ },
1083
+ fromPartial(object) {
1084
+ var _a;
1085
+ const message = createBaseGetDefaultSavedFilterRequest();
1086
+ message.page = (_a = object.page) !== null && _a !== void 0 ? _a : 0;
1087
+ return message;
1088
+ },
1089
+ };
1090
+ function createBaseGetDefaultSavedFilterResponse() {
1091
+ return { queryDef: "", id: "", defaultId: "", isExist: false };
1092
+ }
1093
+ exports.GetDefaultSavedFilterResponse = {
1094
+ encode(message, writer = minimal_1.default.Writer.create()) {
1095
+ if (message.queryDef !== "") {
1096
+ writer.uint32(10).string(message.queryDef);
1097
+ }
1098
+ if (message.id !== "") {
1099
+ writer.uint32(18).string(message.id);
1100
+ }
1101
+ if (message.defaultId !== "") {
1102
+ writer.uint32(26).string(message.defaultId);
1103
+ }
1104
+ if (message.isExist === true) {
1105
+ writer.uint32(32).bool(message.isExist);
1106
+ }
1107
+ return writer;
1108
+ },
1109
+ decode(input, length) {
1110
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
1111
+ let end = length === undefined ? reader.len : reader.pos + length;
1112
+ const message = createBaseGetDefaultSavedFilterResponse();
1113
+ while (reader.pos < end) {
1114
+ const tag = reader.uint32();
1115
+ switch (tag >>> 3) {
1116
+ case 1:
1117
+ if (tag !== 10) {
1118
+ break;
1119
+ }
1120
+ message.queryDef = reader.string();
1121
+ continue;
1122
+ case 2:
1123
+ if (tag !== 18) {
1124
+ break;
1125
+ }
1126
+ message.id = reader.string();
1127
+ continue;
1128
+ case 3:
1129
+ if (tag !== 26) {
1130
+ break;
1131
+ }
1132
+ message.defaultId = reader.string();
1133
+ continue;
1134
+ case 4:
1135
+ if (tag !== 32) {
1136
+ break;
1137
+ }
1138
+ message.isExist = reader.bool();
1139
+ continue;
1140
+ }
1141
+ if ((tag & 7) === 4 || tag === 0) {
1142
+ break;
1143
+ }
1144
+ reader.skipType(tag & 7);
1145
+ }
1146
+ return message;
1147
+ },
1148
+ fromJSON(object) {
1149
+ return {
1150
+ queryDef: isSet(object.queryDef) ? globalThis.String(object.queryDef) : "",
1151
+ id: isSet(object.id) ? globalThis.String(object.id) : "",
1152
+ defaultId: isSet(object.defaultId) ? globalThis.String(object.defaultId) : "",
1153
+ isExist: isSet(object.isExist) ? globalThis.Boolean(object.isExist) : false,
1154
+ };
1155
+ },
1156
+ toJSON(message) {
1157
+ const obj = {};
1158
+ if (message.queryDef !== "") {
1159
+ obj.queryDef = message.queryDef;
1160
+ }
1161
+ if (message.id !== "") {
1162
+ obj.id = message.id;
1163
+ }
1164
+ if (message.defaultId !== "") {
1165
+ obj.defaultId = message.defaultId;
1166
+ }
1167
+ if (message.isExist === true) {
1168
+ obj.isExist = message.isExist;
1169
+ }
1170
+ return obj;
1171
+ },
1172
+ create(base) {
1173
+ return exports.GetDefaultSavedFilterResponse.fromPartial(base !== null && base !== void 0 ? base : {});
1174
+ },
1175
+ fromPartial(object) {
1176
+ var _a, _b, _c, _d;
1177
+ const message = createBaseGetDefaultSavedFilterResponse();
1178
+ message.queryDef = (_a = object.queryDef) !== null && _a !== void 0 ? _a : "";
1179
+ message.id = (_b = object.id) !== null && _b !== void 0 ? _b : "";
1180
+ message.defaultId = (_c = object.defaultId) !== null && _c !== void 0 ? _c : "";
1181
+ message.isExist = (_d = object.isExist) !== null && _d !== void 0 ? _d : false;
1182
+ return message;
1183
+ },
1184
+ };
1185
+ function createBaseRemoveDefaultSavedFilterRequest() {
1186
+ return { defaultId: "" };
1187
+ }
1188
+ exports.RemoveDefaultSavedFilterRequest = {
1189
+ encode(message, writer = minimal_1.default.Writer.create()) {
1190
+ if (message.defaultId !== "") {
1191
+ writer.uint32(10).string(message.defaultId);
1192
+ }
1193
+ return writer;
1194
+ },
1195
+ decode(input, length) {
1196
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
1197
+ let end = length === undefined ? reader.len : reader.pos + length;
1198
+ const message = createBaseRemoveDefaultSavedFilterRequest();
1199
+ while (reader.pos < end) {
1200
+ const tag = reader.uint32();
1201
+ switch (tag >>> 3) {
1202
+ case 1:
1203
+ if (tag !== 10) {
1204
+ break;
1205
+ }
1206
+ message.defaultId = reader.string();
1207
+ continue;
1208
+ }
1209
+ if ((tag & 7) === 4 || tag === 0) {
1210
+ break;
1211
+ }
1212
+ reader.skipType(tag & 7);
1213
+ }
1214
+ return message;
1215
+ },
1216
+ fromJSON(object) {
1217
+ return { defaultId: isSet(object.defaultId) ? globalThis.String(object.defaultId) : "" };
1218
+ },
1219
+ toJSON(message) {
1220
+ const obj = {};
1221
+ if (message.defaultId !== "") {
1222
+ obj.defaultId = message.defaultId;
1223
+ }
1224
+ return obj;
1225
+ },
1226
+ create(base) {
1227
+ return exports.RemoveDefaultSavedFilterRequest.fromPartial(base !== null && base !== void 0 ? base : {});
1228
+ },
1229
+ fromPartial(object) {
1230
+ var _a;
1231
+ const message = createBaseRemoveDefaultSavedFilterRequest();
1232
+ message.defaultId = (_a = object.defaultId) !== null && _a !== void 0 ? _a : "";
1233
+ return message;
1234
+ },
1235
+ };
1236
+ function createBaseRemoveDefaultSavedFilterResponse() {
1237
+ return { savedFilterId: "", defaultId: "", userId: "", page: 0 };
1238
+ }
1239
+ exports.RemoveDefaultSavedFilterResponse = {
1240
+ encode(message, writer = minimal_1.default.Writer.create()) {
1241
+ if (message.savedFilterId !== "") {
1242
+ writer.uint32(10).string(message.savedFilterId);
1243
+ }
1244
+ if (message.defaultId !== "") {
1245
+ writer.uint32(18).string(message.defaultId);
1246
+ }
1247
+ if (message.userId !== "") {
1248
+ writer.uint32(26).string(message.userId);
1249
+ }
1250
+ if (message.page !== 0) {
1251
+ writer.uint32(32).int32(message.page);
1252
+ }
1253
+ return writer;
1254
+ },
1255
+ decode(input, length) {
1256
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
1257
+ let end = length === undefined ? reader.len : reader.pos + length;
1258
+ const message = createBaseRemoveDefaultSavedFilterResponse();
1259
+ while (reader.pos < end) {
1260
+ const tag = reader.uint32();
1261
+ switch (tag >>> 3) {
1262
+ case 1:
1263
+ if (tag !== 10) {
1264
+ break;
1265
+ }
1266
+ message.savedFilterId = reader.string();
1267
+ continue;
1268
+ case 2:
1269
+ if (tag !== 18) {
1270
+ break;
1271
+ }
1272
+ message.defaultId = reader.string();
1273
+ continue;
1274
+ case 3:
1275
+ if (tag !== 26) {
1276
+ break;
1277
+ }
1278
+ message.userId = reader.string();
1279
+ continue;
1280
+ case 4:
1281
+ if (tag !== 32) {
1282
+ break;
1283
+ }
1284
+ message.page = reader.int32();
1285
+ continue;
1286
+ }
1287
+ if ((tag & 7) === 4 || tag === 0) {
1288
+ break;
1289
+ }
1290
+ reader.skipType(tag & 7);
1291
+ }
1292
+ return message;
1293
+ },
1294
+ fromJSON(object) {
1295
+ return {
1296
+ savedFilterId: isSet(object.savedFilterId) ? globalThis.String(object.savedFilterId) : "",
1297
+ defaultId: isSet(object.defaultId) ? globalThis.String(object.defaultId) : "",
1298
+ userId: isSet(object.userId) ? globalThis.String(object.userId) : "",
1299
+ page: isSet(object.page) ? (0, saved_filter_1.pageFromJSON)(object.page) : 0,
1300
+ };
1301
+ },
1302
+ toJSON(message) {
1303
+ const obj = {};
1304
+ if (message.savedFilterId !== "") {
1305
+ obj.savedFilterId = message.savedFilterId;
1306
+ }
1307
+ if (message.defaultId !== "") {
1308
+ obj.defaultId = message.defaultId;
1309
+ }
1310
+ if (message.userId !== "") {
1311
+ obj.userId = message.userId;
1312
+ }
1313
+ if (message.page !== 0) {
1314
+ obj.page = (0, saved_filter_1.pageToJSON)(message.page);
1315
+ }
1316
+ return obj;
1317
+ },
1318
+ create(base) {
1319
+ return exports.RemoveDefaultSavedFilterResponse.fromPartial(base !== null && base !== void 0 ? base : {});
1320
+ },
1321
+ fromPartial(object) {
1322
+ var _a, _b, _c, _d;
1323
+ const message = createBaseRemoveDefaultSavedFilterResponse();
1324
+ message.savedFilterId = (_a = object.savedFilterId) !== null && _a !== void 0 ? _a : "";
1325
+ message.defaultId = (_b = object.defaultId) !== null && _b !== void 0 ? _b : "";
1326
+ message.userId = (_c = object.userId) !== null && _c !== void 0 ? _c : "";
1327
+ message.page = (_d = object.page) !== null && _d !== void 0 ? _d : 0;
1328
+ return message;
1329
+ },
1330
+ };
1331
+ function createBaseReplaceDefaultSavedFilterRequest() {
1332
+ return { savedFilterId: "", page: 0, oldSavedFilterId: "" };
1333
+ }
1334
+ exports.ReplaceDefaultSavedFilterRequest = {
1335
+ encode(message, writer = minimal_1.default.Writer.create()) {
1336
+ if (message.savedFilterId !== "") {
1337
+ writer.uint32(10).string(message.savedFilterId);
1338
+ }
1339
+ if (message.page !== 0) {
1340
+ writer.uint32(16).int32(message.page);
1341
+ }
1342
+ if (message.oldSavedFilterId !== "") {
1343
+ writer.uint32(26).string(message.oldSavedFilterId);
1344
+ }
1345
+ return writer;
1346
+ },
1347
+ decode(input, length) {
1348
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
1349
+ let end = length === undefined ? reader.len : reader.pos + length;
1350
+ const message = createBaseReplaceDefaultSavedFilterRequest();
1351
+ while (reader.pos < end) {
1352
+ const tag = reader.uint32();
1353
+ switch (tag >>> 3) {
1354
+ case 1:
1355
+ if (tag !== 10) {
1356
+ break;
1357
+ }
1358
+ message.savedFilterId = reader.string();
1359
+ continue;
1360
+ case 2:
1361
+ if (tag !== 16) {
1362
+ break;
1363
+ }
1364
+ message.page = reader.int32();
1365
+ continue;
1366
+ case 3:
1367
+ if (tag !== 26) {
1368
+ break;
1369
+ }
1370
+ message.oldSavedFilterId = reader.string();
1371
+ continue;
1372
+ }
1373
+ if ((tag & 7) === 4 || tag === 0) {
1374
+ break;
1375
+ }
1376
+ reader.skipType(tag & 7);
1377
+ }
1378
+ return message;
1379
+ },
1380
+ fromJSON(object) {
1381
+ return {
1382
+ savedFilterId: isSet(object.savedFilterId) ? globalThis.String(object.savedFilterId) : "",
1383
+ page: isSet(object.page) ? (0, saved_filter_1.pageFromJSON)(object.page) : 0,
1384
+ oldSavedFilterId: isSet(object.oldSavedFilterId) ? globalThis.String(object.oldSavedFilterId) : "",
1385
+ };
1386
+ },
1387
+ toJSON(message) {
1388
+ const obj = {};
1389
+ if (message.savedFilterId !== "") {
1390
+ obj.savedFilterId = message.savedFilterId;
1391
+ }
1392
+ if (message.page !== 0) {
1393
+ obj.page = (0, saved_filter_1.pageToJSON)(message.page);
1394
+ }
1395
+ if (message.oldSavedFilterId !== "") {
1396
+ obj.oldSavedFilterId = message.oldSavedFilterId;
1397
+ }
1398
+ return obj;
1399
+ },
1400
+ create(base) {
1401
+ return exports.ReplaceDefaultSavedFilterRequest.fromPartial(base !== null && base !== void 0 ? base : {});
1402
+ },
1403
+ fromPartial(object) {
1404
+ var _a, _b, _c;
1405
+ const message = createBaseReplaceDefaultSavedFilterRequest();
1406
+ message.savedFilterId = (_a = object.savedFilterId) !== null && _a !== void 0 ? _a : "";
1407
+ message.page = (_b = object.page) !== null && _b !== void 0 ? _b : 0;
1408
+ message.oldSavedFilterId = (_c = object.oldSavedFilterId) !== null && _c !== void 0 ? _c : "";
1409
+ return message;
1410
+ },
1411
+ };
1412
+ function createBaseReplaceDefaultSavedFilterResponse() {
1413
+ return { defaultId: "" };
1414
+ }
1415
+ exports.ReplaceDefaultSavedFilterResponse = {
1416
+ encode(message, writer = minimal_1.default.Writer.create()) {
1417
+ if (message.defaultId !== "") {
1418
+ writer.uint32(10).string(message.defaultId);
1419
+ }
1420
+ return writer;
1421
+ },
1422
+ decode(input, length) {
1423
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
1424
+ let end = length === undefined ? reader.len : reader.pos + length;
1425
+ const message = createBaseReplaceDefaultSavedFilterResponse();
1426
+ while (reader.pos < end) {
1427
+ const tag = reader.uint32();
1428
+ switch (tag >>> 3) {
1429
+ case 1:
1430
+ if (tag !== 10) {
1431
+ break;
1432
+ }
1433
+ message.defaultId = reader.string();
1434
+ continue;
1435
+ }
1436
+ if ((tag & 7) === 4 || tag === 0) {
1437
+ break;
1438
+ }
1439
+ reader.skipType(tag & 7);
1440
+ }
1441
+ return message;
1442
+ },
1443
+ fromJSON(object) {
1444
+ return { defaultId: isSet(object.defaultId) ? globalThis.String(object.defaultId) : "" };
1445
+ },
1446
+ toJSON(message) {
1447
+ const obj = {};
1448
+ if (message.defaultId !== "") {
1449
+ obj.defaultId = message.defaultId;
1450
+ }
1451
+ return obj;
1452
+ },
1453
+ create(base) {
1454
+ return exports.ReplaceDefaultSavedFilterResponse.fromPartial(base !== null && base !== void 0 ? base : {});
1455
+ },
1456
+ fromPartial(object) {
1457
+ var _a;
1458
+ const message = createBaseReplaceDefaultSavedFilterResponse();
1459
+ message.defaultId = (_a = object.defaultId) !== null && _a !== void 0 ? _a : "";
1460
+ return message;
1461
+ },
1462
+ };
1463
+ exports.RumSavedFiltersServiceDefinition = {
1464
+ name: "RumSavedFiltersService",
1465
+ fullName: "com.coralogix.rum.v2.RumSavedFiltersService",
1466
+ methods: {
1467
+ getSavedFilters: {
1468
+ name: "GetSavedFilters",
1469
+ requestType: exports.GetSavedFiltersRequest,
1470
+ requestStream: false,
1471
+ responseType: exports.GetSavedFiltersResponse,
1472
+ responseStream: false,
1473
+ options: {},
1474
+ },
1475
+ createSavedFilter: {
1476
+ name: "CreateSavedFilter",
1477
+ requestType: exports.CreateSavedFilterRequest,
1478
+ requestStream: false,
1479
+ responseType: exports.CreateSavedFilterResponse,
1480
+ responseStream: false,
1481
+ options: {},
1482
+ },
1483
+ updateSavedFilter: {
1484
+ name: "UpdateSavedFilter",
1485
+ requestType: exports.UpdateSavedFilterRequest,
1486
+ requestStream: false,
1487
+ responseType: exports.UpdateSavedFilterResponse,
1488
+ responseStream: false,
1489
+ options: {},
1490
+ },
1491
+ deleteSavedFilter: {
1492
+ name: "DeleteSavedFilter",
1493
+ requestType: exports.DeleteSavedFilterRequest,
1494
+ requestStream: false,
1495
+ responseType: exports.DeleteSavedFilterResponse,
1496
+ responseStream: false,
1497
+ options: {},
1498
+ },
1499
+ saveFavoriteFilter: {
1500
+ name: "SaveFavoriteFilter",
1501
+ requestType: exports.SaveFavoriteFilterRequest,
1502
+ requestStream: false,
1503
+ responseType: exports.SaveFavoriteFilterResponse,
1504
+ responseStream: false,
1505
+ options: {},
1506
+ },
1507
+ removeFavoriteFilter: {
1508
+ name: "RemoveFavoriteFilter",
1509
+ requestType: exports.RemoveFavoriteFilterRequest,
1510
+ requestStream: false,
1511
+ responseType: exports.RemoveFavoriteFilterResponse,
1512
+ responseStream: false,
1513
+ options: {},
1514
+ },
1515
+ getSavedFilterQueryDef: {
1516
+ name: "GetSavedFilterQueryDef",
1517
+ requestType: exports.GetSavedFilterQueryDefRequest,
1518
+ requestStream: false,
1519
+ responseType: exports.GetSavedFilterQueryDefResponse,
1520
+ responseStream: false,
1521
+ options: {},
1522
+ },
1523
+ setDefaultSavedFilter: {
1524
+ name: "SetDefaultSavedFilter",
1525
+ requestType: exports.SetDefaultSavedFilterRequest,
1526
+ requestStream: false,
1527
+ responseType: exports.SetDefaultSavedFilterResponse,
1528
+ responseStream: false,
1529
+ options: {},
1530
+ },
1531
+ getDefaultSavedFilter: {
1532
+ name: "GetDefaultSavedFilter",
1533
+ requestType: exports.GetDefaultSavedFilterRequest,
1534
+ requestStream: false,
1535
+ responseType: exports.GetDefaultSavedFilterResponse,
1536
+ responseStream: false,
1537
+ options: {},
1538
+ },
1539
+ removeDefaultSavedFilter: {
1540
+ name: "RemoveDefaultSavedFilter",
1541
+ requestType: exports.RemoveDefaultSavedFilterRequest,
1542
+ requestStream: false,
1543
+ responseType: exports.RemoveDefaultSavedFilterResponse,
1544
+ responseStream: false,
1545
+ options: {},
1546
+ },
1547
+ replaceDefaultSavedFilter: {
1548
+ name: "ReplaceDefaultSavedFilter",
1549
+ requestType: exports.ReplaceDefaultSavedFilterRequest,
1550
+ requestStream: false,
1551
+ responseType: exports.ReplaceDefaultSavedFilterResponse,
1552
+ responseStream: false,
1553
+ options: {},
1554
+ },
1555
+ },
1556
+ };
1557
+ function isSet(value) {
1558
+ return value !== null && value !== undefined;
1559
+ }
1560
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVtX3NhdmVkX2ZpbHRlcnNfc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb3RvLW1vZGVscy9jb20vY29yYWxvZ2l4L3J1bS92Mi9ydW1fc2F2ZWRfZmlsdGVyc19zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9CQUFvQjtBQUNwQixpRUFBcUM7QUFDckMsaURBU3dCO0FBRVgsUUFBQSxlQUFlLEdBQUcsc0JBQXNCLENBQUM7QUErR3RELFNBQVMsZ0NBQWdDO0lBQ3ZDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckIsQ0FBQztBQUVZLFFBQUEsc0JBQXNCLEdBQUc7SUFDcEMsTUFBTSxDQUFDLE9BQStCLEVBQUUsU0FBcUIsaUJBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQzlFLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDdEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUE4QixFQUFFLE1BQWU7UUFDcEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLGlCQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RSxJQUFJLEdBQUcsR0FBRyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUNsRSxNQUFNLE9BQU8sR0FBRyxnQ0FBZ0MsRUFBRSxDQUFDO1FBQ25ELE9BQU8sTUFBTSxDQUFD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YyxFQUFFLEtBQUs7WUFDckIsT0FBTyxFQUFFLEVBQUU7U0FDWjtRQUNELHlCQUF5QixFQUFFO1lBQ3pCLElBQUksRUFBRSwyQkFBMkI7WUFDakMsV0FBVyxFQUFFLHdDQUFnQztZQUM3QyxhQUFhLEVBQUUsS0FBSztZQUNwQixZQUFZLEVBQUUseUNBQWlDO1lBQy9DLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLE9BQU8sRUFBRSxFQUFFO1NBQ1o7S0FDRjtDQUNPLENBQUM7QUFXWCxTQUFTLEtBQUssQ0FBQyxLQUFVO0lBQ3ZCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tIFwicHJvdG9idWZqcy9taW5pbWFsXCI7XG5pbXBvcnQge1xuICBQYWdlLFxuICBwYWdlRnJvbUpTT04sXG4gIHBhZ2VUb0pTT04sXG4gIFNhdmVkRmlsdGVyLFxuICBTYXZlZEZpbHRlckJhc2ljUHJvcGVydGllcyxcbiAgU2F2ZWRGaWx0ZXJQZXJtaXNzaW9uLFxuICBzYXZlZEZpbHRlclBlcm1pc3Npb25Gcm9tSlNPTixcbiAgc2F2ZWRGaWx0ZXJQZXJtaXNzaW9uVG9KU09OLFxufSBmcm9tIFwiLi9zYXZlZF9maWx0ZXJcIjtcblxuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9IFwiY29tLmNvcmFsb2dpeC5ydW0udjJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHZXRTYXZlZEZpbHRlcnNSZXF1ZXN0IHtcbiAgcGFnZTogUGFnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRTYXZlZEZpbHRlcnNSZXNwb25zZSB7XG4gIHNhdmVkRmlsdGVyczogU2F2ZWRGaWx0ZXJbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTYXZlZEZpbHRlclJlcXVlc3Qge1xuICBuYW1lOiBzdHJpbmc7XG4gIHF1ZXJ5RGVmOiBzdHJpbmc7XG4gIHBhZ2U6IFBhZ2U7XG4gIHBlcm1pc3Npb246IFNhdmVkRmlsdGVyUGVybWlzc2lvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgc2F2ZWRGaWx0ZXJzOiBTYXZlZEZpbHRlckJhc2ljUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgcGVybWlzc2lvbjogU2F2ZWRGaWx0ZXJQZXJtaXNzaW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gIHNhdmVkRmlsdGVyOiBTYXZlZEZpbHRlckJhc2ljUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgcGVybWlzc2lvbjogU2F2ZWRGaWx0ZXJQZXJtaXNzaW9uO1xuICBxdWVyeURlZjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICBzYXZlZEZpbHRlcjogU2F2ZWRGaWx0ZXJCYXNpY1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG4gIHBlcm1pc3Npb246IFNhdmVkRmlsdGVyUGVybWlzc2lvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVTYXZlZEZpbHRlclJlcXVlc3Qge1xuICBpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZVNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICBzYXZlZEZpbHRlcjogU2F2ZWRGaWx0ZXJCYXNpY1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2F2ZUZhdm9yaXRlRmlsdGVyUmVxdWVzdCB7XG4gIHNhdmVkRmlsdGVySWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTYXZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZSB7XG4gIGZhdm9yaXRlSWQ6IHN0cmluZztcbiAgc2F2ZWRGaWx0ZXJJZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVGYXZvcml0ZUZpbHRlclJlcXVlc3Qge1xuICBmYXZvcml0ZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZSB7XG4gIGZhdm9yaXRlSWQ6IHN0cmluZztcbiAgc2F2ZWRGaWx0ZXJJZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVxdWVzdCB7XG4gIGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlc3BvbnNlIHtcbiAgcXVlcnlEZWY6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgaWQ6IHN0cmluZztcbiAgcGFnZTogUGFnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gIGRlZmF1bHRJZDogc3RyaW5nO1xuICBwYWdlOiBQYWdlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Qge1xuICBwYWdlOiBQYWdlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgcXVlcnlEZWY6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgZGVmYXVsdElkOiBzdHJpbmc7XG4gIGlzRXhpc3Q6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3ZlRGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gIGRlZmF1bHRJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgc2F2ZWRGaWx0ZXJJZDogc3RyaW5nO1xuICBkZWZhdWx0SWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIHBhZ2U6IFBhZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Qge1xuICBzYXZlZEZpbHRlcklkOiBzdHJpbmc7XG4gIHBhZ2U6IFBhZ2U7XG4gIG9sZFNhdmVkRmlsdGVySWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICBkZWZhdWx0SWQ6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZUdldFNhdmVkRmlsdGVyc1JlcXVlc3QoKTogR2V0U2F2ZWRGaWx0ZXJzUmVxdWVzdCB7XG4gIHJldHVybiB7IHBhZ2U6IDAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEdldFNhdmVkRmlsdGVyc1JlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBHZXRTYXZlZEZpbHRlcnNSZXF1ZXN0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucGFnZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLnBhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEdldFNhdmVkRmlsdGVyc1JlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlR2V0U2F2ZWRGaWx0ZXJzUmVxdWVzdCgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wYWdlID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogR2V0U2F2ZWRGaWx0ZXJzUmVxdWVzdCB7XG4gICAgcmV0dXJuIHsgcGFnZTogaXNTZXQob2JqZWN0LnBhZ2UpID8gcGFnZUZyb21KU09OKG9iamVjdC5wYWdlKSA6IDAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogR2V0U2F2ZWRGaWx0ZXJzUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UucGFnZSAhPT0gMCkge1xuICAgICAgb2JqLnBhZ2UgPSBwYWdlVG9KU09OKG1lc3NhZ2UucGFnZSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxHZXRTYXZlZEZpbHRlcnNSZXF1ZXN0Pik6IEdldFNhdmVkRmlsdGVyc1JlcXVlc3Qge1xuICAgIHJldHVybiBHZXRTYXZlZEZpbHRlcnNSZXF1ZXN0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEdldFNhdmVkRmlsdGVyc1JlcXVlc3Q+KTogR2V0U2F2ZWRGaWx0ZXJzUmVxdWVzdCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXRTYXZlZEZpbHRlcnNSZXF1ZXN0KCk7XG4gICAgbWVzc2FnZS5wYWdlID0gb2JqZWN0LnBhZ2UgPz8gMDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VHZXRTYXZlZEZpbHRlcnNSZXNwb25zZSgpOiBHZXRTYXZlZEZpbHRlcnNSZXNwb25zZSB7XG4gIHJldHVybiB7IHNhdmVkRmlsdGVyczogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IEdldFNhdmVkRmlsdGVyc1Jlc3BvbnNlID0ge1xuICBlbmNvZGUobWVzc2FnZTogR2V0U2F2ZWRGaWx0ZXJzUmVzcG9uc2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5zYXZlZEZpbHRlcnMpIHtcbiAgICAgIFNhdmVkRmlsdGVyLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBHZXRTYXZlZEZpbHRlcnNSZXNwb25zZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXRTYXZlZEZpbHRlcnNSZXNwb25zZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJzLnB1c2goU2F2ZWRGaWx0ZXIuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZXRTYXZlZEZpbHRlcnNSZXNwb25zZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNhdmVkRmlsdGVyczogZ2xvYmFsVGhpcy5BcnJheS5pc0FycmF5KG9iamVjdD8uc2F2ZWRGaWx0ZXJzKVxuICAgICAgICA/IG9iamVjdC5zYXZlZEZpbHRlcnMubWFwKChlOiBhbnkpID0+IFNhdmVkRmlsdGVyLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEdldFNhdmVkRmlsdGVyc1Jlc3BvbnNlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5zYXZlZEZpbHRlcnM/Lmxlbmd0aCkge1xuICAgICAgb2JqLnNhdmVkRmlsdGVycyA9IG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJzLm1hcCgoZSkgPT4gU2F2ZWRGaWx0ZXIudG9KU09OKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEdldFNhdmVkRmlsdGVyc1Jlc3BvbnNlPik6IEdldFNhdmVkRmlsdGVyc1Jlc3BvbnNlIHtcbiAgICByZXR1cm4gR2V0U2F2ZWRGaWx0ZXJzUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8R2V0U2F2ZWRGaWx0ZXJzUmVzcG9uc2U+KTogR2V0U2F2ZWRGaWx0ZXJzUmVzcG9uc2Uge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlR2V0U2F2ZWRGaWx0ZXJzUmVzcG9uc2UoKTtcbiAgICBtZXNzYWdlLnNhdmVkRmlsdGVycyA9IG9iamVjdC5zYXZlZEZpbHRlcnM/Lm1hcCgoZSkgPT4gU2F2ZWRGaWx0ZXIuZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUNyZWF0ZVNhdmVkRmlsdGVyUmVxdWVzdCgpOiBDcmVhdGVTYXZlZEZpbHRlclJlcXVlc3Qge1xuICByZXR1cm4geyBuYW1lOiBcIlwiLCBxdWVyeURlZjogXCJcIiwgcGFnZTogMCwgcGVybWlzc2lvbjogMCB9O1xufVxuXG5leHBvcnQgY29uc3QgQ3JlYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogQ3JlYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnF1ZXJ5RGVmICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5xdWVyeURlZik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZ2UgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmludDMyKG1lc3NhZ2UucGFnZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBlcm1pc3Npb24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmludDMyKG1lc3NhZ2UucGVybWlzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogQ3JlYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNyZWF0ZVNhdmVkRmlsdGVyUmVxdWVzdCgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnF1ZXJ5RGVmID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucGFnZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDMyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnBlcm1pc3Npb24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBDcmVhdGVTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QubmFtZSkgOiBcIlwiLFxuICAgICAgcXVlcnlEZWY6IGlzU2V0KG9iamVjdC5xdWVyeURlZikgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QucXVlcnlEZWYpIDogXCJcIixcbiAgICAgIHBhZ2U6IGlzU2V0KG9iamVjdC5wYWdlKSA/IHBhZ2VGcm9tSlNPTihvYmplY3QucGFnZSkgOiAwLFxuICAgICAgcGVybWlzc2lvbjogaXNTZXQob2JqZWN0LnBlcm1pc3Npb24pID8gc2F2ZWRGaWx0ZXJQZXJtaXNzaW9uRnJvbUpTT04ob2JqZWN0LnBlcm1pc3Npb24pIDogMCxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBDcmVhdGVTYXZlZEZpbHRlclJlcXVlc3QpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIG9iai5uYW1lID0gbWVzc2FnZS5uYW1lO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5xdWVyeURlZiAhPT0gXCJcIikge1xuICAgICAgb2JqLnF1ZXJ5RGVmID0gbWVzc2FnZS5xdWVyeURlZjtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFnZSAhPT0gMCkge1xuICAgICAgb2JqLnBhZ2UgPSBwYWdlVG9KU09OKG1lc3NhZ2UucGFnZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBlcm1pc3Npb24gIT09IDApIHtcbiAgICAgIG9iai5wZXJtaXNzaW9uID0gc2F2ZWRGaWx0ZXJQZXJtaXNzaW9uVG9KU09OKG1lc3NhZ2UucGVybWlzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxDcmVhdGVTYXZlZEZpbHRlclJlcXVlc3Q+KTogQ3JlYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgICByZXR1cm4gQ3JlYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPENyZWF0ZVNhdmVkRmlsdGVyUmVxdWVzdD4pOiBDcmVhdGVTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlQ3JlYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0KCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnF1ZXJ5RGVmID0gb2JqZWN0LnF1ZXJ5RGVmID8/IFwiXCI7XG4gICAgbWVzc2FnZS5wYWdlID0gb2JqZWN0LnBhZ2UgPz8gMDtcbiAgICBtZXNzYWdlLnBlcm1pc3Npb24gPSBvYmplY3QucGVybWlzc2lvbiA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUNyZWF0ZVNhdmVkRmlsdGVyUmVzcG9uc2UoKTogQ3JlYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gIHJldHVybiB7IHNhdmVkRmlsdGVyczogdW5kZWZpbmVkLCBwZXJtaXNzaW9uOiAwIH07XG59XG5cbmV4cG9ydCBjb25zdCBDcmVhdGVTYXZlZEZpbHRlclJlc3BvbnNlID0ge1xuICBlbmNvZGUobWVzc2FnZTogQ3JlYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnNhdmVkRmlsdGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBTYXZlZEZpbHRlckJhc2ljUHJvcGVydGllcy5lbmNvZGUobWVzc2FnZS5zYXZlZEZpbHRlcnMsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBlcm1pc3Npb24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UucGVybWlzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogQ3JlYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VDcmVhdGVTYXZlZEZpbHRlclJlc3BvbnNlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zYXZlZEZpbHRlcnMgPSBTYXZlZEZpbHRlckJhc2ljUHJvcGVydGllcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucGVybWlzc2lvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IENyZWF0ZVNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBzYXZlZEZpbHRlcnM6IGlzU2V0KG9iamVjdC5zYXZlZEZpbHRlcnMpID8gU2F2ZWRGaWx0ZXJCYXNpY1Byb3BlcnRpZXMuZnJvbUpTT04ob2JqZWN0LnNhdmVkRmlsdGVycykgOiB1bmRlZmluZWQsXG4gICAgICBwZXJtaXNzaW9uOiBpc1NldChvYmplY3QucGVybWlzc2lvbikgPyBzYXZlZEZpbHRlclBlcm1pc3Npb25Gcm9tSlNPTihvYmplY3QucGVybWlzc2lvbikgOiAwLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IENyZWF0ZVNhdmVkRmlsdGVyUmVzcG9uc2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLnNhdmVkRmlsdGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmouc2F2ZWRGaWx0ZXJzID0gU2F2ZWRGaWx0ZXJCYXNpY1Byb3BlcnRpZXMudG9KU09OKG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJzKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGVybWlzc2lvbiAhPT0gMCkge1xuICAgICAgb2JqLnBlcm1pc3Npb24gPSBzYXZlZEZpbHRlclBlcm1pc3Npb25Ub0pTT04obWVzc2FnZS5wZXJtaXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPENyZWF0ZVNhdmVkRmlsdGVyUmVzcG9uc2U+KTogQ3JlYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gICAgcmV0dXJuIENyZWF0ZVNhdmVkRmlsdGVyUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8Q3JlYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZT4pOiBDcmVhdGVTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNyZWF0ZVNhdmVkRmlsdGVyUmVzcG9uc2UoKTtcbiAgICBtZXNzYWdlLnNhdmVkRmlsdGVycyA9IChvYmplY3Quc2F2ZWRGaWx0ZXJzICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0LnNhdmVkRmlsdGVycyAhPT0gbnVsbClcbiAgICAgID8gU2F2ZWRGaWx0ZXJCYXNpY1Byb3BlcnRpZXMuZnJvbVBhcnRpYWwob2JqZWN0LnNhdmVkRmlsdGVycylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2UucGVybWlzc2lvbiA9IG9iamVjdC5wZXJtaXNzaW9uID8/IDA7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVXBkYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0KCk6IFVwZGF0ZVNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gIHJldHVybiB7IHNhdmVkRmlsdGVyOiB1bmRlZmluZWQsIHBlcm1pc3Npb246IDAsIHF1ZXJ5RGVmOiBcIlwiIH07XG59XG5cbmV4cG9ydCBjb25zdCBVcGRhdGVTYXZlZEZpbHRlclJlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBVcGRhdGVTYXZlZEZpbHRlclJlcXVlc3QsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5zYXZlZEZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBTYXZlZEZpbHRlckJhc2ljUHJvcGVydGllcy5lbmNvZGUobWVzc2FnZS5zYXZlZEZpbHRlciwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGVybWlzc2lvbiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5wZXJtaXNzaW9uKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucXVlcnlEZWYgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLnF1ZXJ5RGVmKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBVcGRhdGVTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVXBkYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0KCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zYXZlZEZpbHRlciA9IFNhdmVkRmlsdGVyQmFzaWNQcm9wZXJ0aWVzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wZXJtaXNzaW9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucXVlcnlEZWYgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBVcGRhdGVTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBzYXZlZEZpbHRlcjogaXNTZXQob2JqZWN0LnNhdmVkRmlsdGVyKSA/IFNhdmVkRmlsdGVyQmFzaWNQcm9wZXJ0aWVzLmZyb21KU09OKG9iamVjdC5zYXZlZEZpbHRlcikgOiB1bmRlZmluZWQsXG4gICAgICBwZXJtaXNzaW9uOiBpc1NldChvYmplY3QucGVybWlzc2lvbikgPyBzYXZlZEZpbHRlclBlcm1pc3Npb25Gcm9tSlNPTihvYmplY3QucGVybWlzc2lvbikgOiAwLFxuICAgICAgcXVlcnlEZWY6IGlzU2V0KG9iamVjdC5xdWVyeURlZikgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QucXVlcnlEZWYpIDogXCJcIixcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBVcGRhdGVTYXZlZEZpbHRlclJlcXVlc3QpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLnNhdmVkRmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iai5zYXZlZEZpbHRlciA9IFNhdmVkRmlsdGVyQmFzaWNQcm9wZXJ0aWVzLnRvSlNPTihtZXNzYWdlLnNhdmVkRmlsdGVyKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGVybWlzc2lvbiAhPT0gMCkge1xuICAgICAgb2JqLnBlcm1pc3Npb24gPSBzYXZlZEZpbHRlclBlcm1pc3Npb25Ub0pTT04obWVzc2FnZS5wZXJtaXNzaW9uKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucXVlcnlEZWYgIT09IFwiXCIpIHtcbiAgICAgIG9iai5xdWVyeURlZiA9IG1lc3NhZ2UucXVlcnlEZWY7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxVcGRhdGVTYXZlZEZpbHRlclJlcXVlc3Q+KTogVXBkYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgICByZXR1cm4gVXBkYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFVwZGF0ZVNhdmVkRmlsdGVyUmVxdWVzdD4pOiBVcGRhdGVTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVXBkYXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0KCk7XG4gICAgbWVzc2FnZS5zYXZlZEZpbHRlciA9IChvYmplY3Quc2F2ZWRGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Quc2F2ZWRGaWx0ZXIgIT09IG51bGwpXG4gICAgICA/IFNhdmVkRmlsdGVyQmFzaWNQcm9wZXJ0aWVzLmZyb21QYXJ0aWFsKG9iamVjdC5zYXZlZEZpbHRlcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2UucGVybWlzc2lvbiA9IG9iamVjdC5wZXJtaXNzaW9uID8/IDA7XG4gICAgbWVzc2FnZS5xdWVyeURlZiA9IG9iamVjdC5xdWVyeURlZiA/PyBcIlwiO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVVwZGF0ZVNhdmVkRmlsdGVyUmVzcG9uc2UoKTogVXBkYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gIHJldHVybiB7IHNhdmVkRmlsdGVyOiB1bmRlZmluZWQsIHBlcm1pc3Npb246IDAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFVwZGF0ZVNhdmVkRmlsdGVyUmVzcG9uc2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBVcGRhdGVTYXZlZEZpbHRlclJlc3BvbnNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uuc2F2ZWRGaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgU2F2ZWRGaWx0ZXJCYXNpY1Byb3BlcnRpZXMuZW5jb2RlKG1lc3NhZ2Uuc2F2ZWRGaWx0ZXIsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBlcm1pc3Npb24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UucGVybWlzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogVXBkYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVcGRhdGVTYXZlZEZpbHRlclJlc3BvbnNlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zYXZlZEZpbHRlciA9IFNhdmVkRmlsdGVyQmFzaWNQcm9wZXJ0aWVzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wZXJtaXNzaW9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogVXBkYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNhdmVkRmlsdGVyOiBpc1NldChvYmplY3Quc2F2ZWRGaWx0ZXIpID8gU2F2ZWRGaWx0ZXJCYXNpY1Byb3BlcnRpZXMuZnJvbUpTT04ob2JqZWN0LnNhdmVkRmlsdGVyKSA6IHVuZGVmaW5lZCxcbiAgICAgIHBlcm1pc3Npb246IGlzU2V0KG9iamVjdC5wZXJtaXNzaW9uKSA/IHNhdmVkRmlsdGVyUGVybWlzc2lvbkZyb21KU09OKG9iamVjdC5wZXJtaXNzaW9uKSA6IDAsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogVXBkYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2Uuc2F2ZWRGaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLnNhdmVkRmlsdGVyID0gU2F2ZWRGaWx0ZXJCYXNpY1Byb3BlcnRpZXMudG9KU09OKG1lc3NhZ2Uuc2F2ZWRGaWx0ZXIpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wZXJtaXNzaW9uICE9PSAwKSB7XG4gICAgICBvYmoucGVybWlzc2lvbiA9IHNhdmVkRmlsdGVyUGVybWlzc2lvblRvSlNPTihtZXNzYWdlLnBlcm1pc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8VXBkYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZT4pOiBVcGRhdGVTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICByZXR1cm4gVXBkYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxVcGRhdGVTYXZlZEZpbHRlclJlc3BvbnNlPik6IFVwZGF0ZVNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVXBkYXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSgpO1xuICAgIG1lc3NhZ2Uuc2F2ZWRGaWx0ZXIgPSAob2JqZWN0LnNhdmVkRmlsdGVyICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0LnNhdmVkRmlsdGVyICE9PSBudWxsKVxuICAgICAgPyBTYXZlZEZpbHRlckJhc2ljUHJvcGVydGllcy5mcm9tUGFydGlhbChvYmplY3Quc2F2ZWRGaWx0ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnBlcm1pc3Npb24gPSBvYmplY3QucGVybWlzc2lvbiA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZURlbGV0ZVNhdmVkRmlsdGVyUmVxdWVzdCgpOiBEZWxldGVTYXZlZEZpbHRlclJlcXVlc3Qge1xuICByZXR1cm4geyBpZDogXCJcIiB9O1xufVxuXG5leHBvcnQgY29uc3QgRGVsZXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogRGVsZXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuaWQgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBEZWxldGVTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRGVsZXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0KCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5pZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IERlbGV0ZVNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gICAgcmV0dXJuIHsgaWQ6IGlzU2V0KG9iamVjdC5pZCkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QuaWQpIDogXCJcIiB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBEZWxldGVTYXZlZEZpbHRlclJlcXVlc3QpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLmlkICE9PSBcIlwiKSB7XG4gICAgICBvYmouaWQgPSBtZXNzYWdlLmlkO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RGVsZXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0Pik6IERlbGV0ZVNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gICAgcmV0dXJuIERlbGV0ZVNhdmVkRmlsdGVyUmVxdWVzdC5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxEZWxldGVTYXZlZEZpbHRlclJlcXVlc3Q+KTogRGVsZXRlU2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZURlbGV0ZVNhdmVkRmlsdGVyUmVxdWVzdCgpO1xuICAgIG1lc3NhZ2UuaWQgPSBvYmplY3QuaWQgPz8gXCJcIjtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VEZWxldGVTYXZlZEZpbHRlclJlc3BvbnNlKCk6IERlbGV0ZVNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICByZXR1cm4geyBzYXZlZEZpbHRlcjogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBjb25zdCBEZWxldGVTYXZlZEZpbHRlclJlc3BvbnNlID0ge1xuICBlbmNvZGUobWVzc2FnZTogRGVsZXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnNhdmVkRmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFNhdmVkRmlsdGVyQmFzaWNQcm9wZXJ0aWVzLmVuY29kZShtZXNzYWdlLnNhdmVkRmlsdGVyLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IERlbGV0ZVNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRGVsZXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc2F2ZWRGaWx0ZXIgPSBTYXZlZEZpbHRlckJhc2ljUHJvcGVydGllcy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRGVsZXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNhdmVkRmlsdGVyOiBpc1NldChvYmplY3Quc2F2ZWRGaWx0ZXIpID8gU2F2ZWRGaWx0ZXJCYXNpY1Byb3BlcnRpZXMuZnJvbUpTT04ob2JqZWN0LnNhdmVkRmlsdGVyKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBEZWxldGVTYXZlZEZpbHRlclJlc3BvbnNlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5zYXZlZEZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmouc2F2ZWRGaWx0ZXIgPSBTYXZlZEZpbHRlckJhc2ljUHJvcGVydGllcy50b0pTT04obWVzc2FnZS5zYXZlZEZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxEZWxldGVTYXZlZEZpbHRlclJlc3BvbnNlPik6IERlbGV0ZVNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICAgIHJldHVybiBEZWxldGVTYXZlZEZpbHRlclJlc3BvbnNlLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPERlbGV0ZVNhdmVkRmlsdGVyUmVzcG9uc2U+KTogRGVsZXRlU2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZWxldGVTYXZlZEZpbHRlclJlc3BvbnNlKCk7XG4gICAgbWVzc2FnZS5zYXZlZEZpbHRlciA9IChvYmplY3Quc2F2ZWRGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Quc2F2ZWRGaWx0ZXIgIT09IG51bGwpXG4gICAgICA/IFNhdmVkRmlsdGVyQmFzaWNQcm9wZXJ0aWVzLmZyb21QYXJ0aWFsKG9iamVjdC5zYXZlZEZpbHRlcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVNhdmVGYXZvcml0ZUZpbHRlclJlcXVlc3QoKTogU2F2ZUZhdm9yaXRlRmlsdGVyUmVxdWVzdCB7XG4gIHJldHVybiB7IHNhdmVkRmlsdGVySWQ6IFwiXCIgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFNhdmVGYXZvcml0ZUZpbHRlclJlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBTYXZlRmF2b3JpdGVGaWx0ZXJSZXF1ZXN0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJJZCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJJZCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogU2F2ZUZhdm9yaXRlRmlsdGVyUmVxdWVzdCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VTYXZlRmF2b3JpdGVGaWx0ZXJSZXF1ZXN0KCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zYXZlZEZpbHRlcklkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogU2F2ZUZhdm9yaXRlRmlsdGVyUmVxdWVzdCB7XG4gICAgcmV0dXJuIHsgc2F2ZWRGaWx0ZXJJZDogaXNTZXQob2JqZWN0LnNhdmVkRmlsdGVySWQpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LnNhdmVkRmlsdGVySWQpIDogXCJcIiB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBTYXZlRmF2b3JpdGVGaWx0ZXJSZXF1ZXN0KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5zYXZlZEZpbHRlcklkICE9PSBcIlwiKSB7XG4gICAgICBvYmouc2F2ZWRGaWx0ZXJJZCA9IG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJJZDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFNhdmVGYXZvcml0ZUZpbHRlclJlcXVlc3Q+KTogU2F2ZUZhdm9yaXRlRmlsdGVyUmVxdWVzdCB7XG4gICAgcmV0dXJuIFNhdmVGYXZvcml0ZUZpbHRlclJlcXVlc3QuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8U2F2ZUZhdm9yaXRlRmlsdGVyUmVxdWVzdD4pOiBTYXZlRmF2b3JpdGVGaWx0ZXJSZXF1ZXN0IHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNhdmVGYXZvcml0ZUZpbHRlclJlcXVlc3QoKTtcbiAgICBtZXNzYWdlLnNhdmVkRmlsdGVySWQgPSBvYmplY3Quc2F2ZWRGaWx0ZXJJZCA/PyBcIlwiO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVNhdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlKCk6IFNhdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlIHtcbiAgcmV0dXJuIHsgZmF2b3JpdGVJZDogXCJcIiwgc2F2ZWRGaWx0ZXJJZDogXCJcIiwgdXNlcklkOiBcIlwiIH07XG59XG5cbmV4cG9ydCBjb25zdCBTYXZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFNhdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuZmF2b3JpdGVJZCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuZmF2b3JpdGVJZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNhdmVkRmlsdGVySWQgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLnNhdmVkRmlsdGVySWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS51c2VySWQgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLnVzZXJJZCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogU2F2ZUZhdm9yaXRlRmlsdGVyUmVzcG9uc2Uge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU2F2ZUZhdm9yaXRlRmlsdGVyUmVzcG9uc2UoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmZhdm9yaXRlSWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zYXZlZEZpbHRlcklkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudXNlcklkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogU2F2ZUZhdm9yaXRlRmlsdGVyUmVzcG9uc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmYXZvcml0ZUlkOiBpc1NldChvYmplY3QuZmF2b3JpdGVJZCkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QuZmF2b3JpdGVJZCkgOiBcIlwiLFxuICAgICAgc2F2ZWRGaWx0ZXJJZDogaXNTZXQob2JqZWN0LnNhdmVkRmlsdGVySWQpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LnNhdmVkRmlsdGVySWQpIDogXCJcIixcbiAgICAgIHVzZXJJZDogaXNTZXQob2JqZWN0LnVzZXJJZCkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QudXNlcklkKSA6IFwiXCIsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogU2F2ZUZhdm9yaXRlRmlsdGVyUmVzcG9uc2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLmZhdm9yaXRlSWQgIT09IFwiXCIpIHtcbiAgICAgIG9iai5mYXZvcml0ZUlkID0gbWVzc2FnZS5mYXZvcml0ZUlkO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zYXZlZEZpbHRlcklkICE9PSBcIlwiKSB7XG4gICAgICBvYmouc2F2ZWRGaWx0ZXJJZCA9IG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJJZDtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudXNlcklkICE9PSBcIlwiKSB7XG4gICAgICBvYmoudXNlcklkID0gbWVzc2FnZS51c2VySWQ7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxTYXZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZT4pOiBTYXZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZSB7XG4gICAgcmV0dXJuIFNhdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFNhdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlPik6IFNhdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNhdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlKCk7XG4gICAgbWVzc2FnZS5mYXZvcml0ZUlkID0gb2JqZWN0LmZhdm9yaXRlSWQgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnNhdmVkRmlsdGVySWQgPSBvYmplY3Quc2F2ZWRGaWx0ZXJJZCA/PyBcIlwiO1xuICAgIG1lc3NhZ2UudXNlcklkID0gb2JqZWN0LnVzZXJJZCA/PyBcIlwiO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVJlbW92ZUZhdm9yaXRlRmlsdGVyUmVxdWVzdCgpOiBSZW1vdmVGYXZvcml0ZUZpbHRlclJlcXVlc3Qge1xuICByZXR1cm4geyBmYXZvcml0ZUlkOiBcIlwiIH07XG59XG5cbmV4cG9ydCBjb25zdCBSZW1vdmVGYXZvcml0ZUZpbHRlclJlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBSZW1vdmVGYXZvcml0ZUZpbHRlclJlcXVlc3QsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5mYXZvcml0ZUlkICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5mYXZvcml0ZUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBSZW1vdmVGYXZvcml0ZUZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXF1ZXN0KCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5mYXZvcml0ZUlkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogUmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXF1ZXN0IHtcbiAgICByZXR1cm4geyBmYXZvcml0ZUlkOiBpc1NldChvYmplY3QuZmF2b3JpdGVJZCkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QuZmF2b3JpdGVJZCkgOiBcIlwiIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFJlbW92ZUZhdm9yaXRlRmlsdGVyUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuZmF2b3JpdGVJZCAhPT0gXCJcIikge1xuICAgICAgb2JqLmZhdm9yaXRlSWQgPSBtZXNzYWdlLmZhdm9yaXRlSWQ7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxSZW1vdmVGYXZvcml0ZUZpbHRlclJlcXVlc3Q+KTogUmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXF1ZXN0IHtcbiAgICByZXR1cm4gUmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXF1ZXN0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFJlbW92ZUZhdm9yaXRlRmlsdGVyUmVxdWVzdD4pOiBSZW1vdmVGYXZvcml0ZUZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXF1ZXN0KCk7XG4gICAgbWVzc2FnZS5mYXZvcml0ZUlkID0gb2JqZWN0LmZhdm9yaXRlSWQgPz8gXCJcIjtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VSZW1vdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlKCk6IFJlbW92ZUZhdm9yaXRlRmlsdGVyUmVzcG9uc2Uge1xuICByZXR1cm4geyBmYXZvcml0ZUlkOiBcIlwiLCBzYXZlZEZpbHRlcklkOiBcIlwiLCB1c2VySWQ6IFwiXCIgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFJlbW92ZUZhdm9yaXRlRmlsdGVyUmVzcG9uc2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBSZW1vdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuZmF2b3JpdGVJZCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuZmF2b3JpdGVJZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNhdmVkRmlsdGVySWQgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLnNhdmVkRmlsdGVySWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS51c2VySWQgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLnVzZXJJZCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VSZW1vdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5mYXZvcml0ZUlkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVzZXJJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFJlbW92ZUZhdm9yaXRlRmlsdGVyUmVzcG9uc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmYXZvcml0ZUlkOiBpc1NldChvYmplY3QuZmF2b3JpdGVJZCkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QuZmF2b3JpdGVJZCkgOiBcIlwiLFxuICAgICAgc2F2ZWRGaWx0ZXJJZDogaXNTZXQob2JqZWN0LnNhdmVkRmlsdGVySWQpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LnNhdmVkRmlsdGVySWQpIDogXCJcIixcbiAgICAgIHVzZXJJZDogaXNTZXQob2JqZWN0LnVzZXJJZCkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QudXNlcklkKSA6IFwiXCIsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogUmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuZmF2b3JpdGVJZCAhPT0gXCJcIikge1xuICAgICAgb2JqLmZhdm9yaXRlSWQgPSBtZXNzYWdlLmZhdm9yaXRlSWQ7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNhdmVkRmlsdGVySWQgIT09IFwiXCIpIHtcbiAgICAgIG9iai5zYXZlZEZpbHRlcklkID0gbWVzc2FnZS5zYXZlZEZpbHRlcklkO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS51c2VySWQgIT09IFwiXCIpIHtcbiAgICAgIG9iai51c2VySWQgPSBtZXNzYWdlLnVzZXJJZDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFJlbW92ZUZhdm9yaXRlRmlsdGVyUmVzcG9uc2U+KTogUmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZSB7XG4gICAgcmV0dXJuIFJlbW92ZUZhdm9yaXRlRmlsdGVyUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8UmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZT4pOiBSZW1vdmVGYXZvcml0ZUZpbHRlclJlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVJlbW92ZUZhdm9yaXRlRmlsdGVyUmVzcG9uc2UoKTtcbiAgICBtZXNzYWdlLmZhdm9yaXRlSWQgPSBvYmplY3QuZmF2b3JpdGVJZCA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJJZCA9IG9iamVjdC5zYXZlZEZpbHRlcklkID8/IFwiXCI7XG4gICAgbWVzc2FnZS51c2VySWQgPSBvYmplY3QudXNlcklkID8/IFwiXCI7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlcXVlc3QoKTogR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlcXVlc3Qge1xuICByZXR1cm4geyBpZDogXCJcIiB9O1xufVxuXG5leHBvcnQgY29uc3QgR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVxdWVzdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmlkICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5pZCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlcXVlc3QoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmlkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlcXVlc3Qge1xuICAgIHJldHVybiB7IGlkOiBpc1NldChvYmplY3QuaWQpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LmlkKSA6IFwiXCIgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlcXVlc3QpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLmlkICE9PSBcIlwiKSB7XG4gICAgICBvYmouaWQgPSBtZXNzYWdlLmlkO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8R2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlcXVlc3Q+KTogR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlcXVlc3Qge1xuICAgIHJldHVybiBHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVxdWVzdC5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVxdWVzdD4pOiBHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVxdWVzdCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVxdWVzdCgpO1xuICAgIG1lc3NhZ2UuaWQgPSBvYmplY3QuaWQgPz8gXCJcIjtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVzcG9uc2UoKTogR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlc3BvbnNlIHtcbiAgcmV0dXJuIHsgcXVlcnlEZWY6IFwiXCIgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEdldFNhdmVkRmlsdGVyUXVlcnlEZWZSZXNwb25zZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEdldFNhdmVkRmlsdGVyUXVlcnlEZWZSZXNwb25zZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnF1ZXJ5RGVmICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5xdWVyeURlZik7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlc3BvbnNlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUdldFNhdmVkRmlsdGVyUXVlcnlEZWZSZXNwb25zZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucXVlcnlEZWYgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVzcG9uc2Uge1xuICAgIHJldHVybiB7IHF1ZXJ5RGVmOiBpc1NldChvYmplY3QucXVlcnlEZWYpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LnF1ZXJ5RGVmKSA6IFwiXCIgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlc3BvbnNlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5xdWVyeURlZiAhPT0gXCJcIikge1xuICAgICAgb2JqLnF1ZXJ5RGVmID0gbWVzc2FnZS5xdWVyeURlZjtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEdldFNhdmVkRmlsdGVyUXVlcnlEZWZSZXNwb25zZT4pOiBHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVzcG9uc2Uge1xuICAgIHJldHVybiBHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8R2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlc3BvbnNlPik6IEdldFNhdmVkRmlsdGVyUXVlcnlEZWZSZXNwb25zZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmUmVzcG9uc2UoKTtcbiAgICBtZXNzYWdlLnF1ZXJ5RGVmID0gb2JqZWN0LnF1ZXJ5RGVmID8/IFwiXCI7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlU2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCgpOiBTZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgcmV0dXJuIHsgaWQ6IFwiXCIsIHBhZ2U6IDAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFNldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBTZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuaWQgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmlkKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFnZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5wYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBTZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmlkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucGFnZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFNldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaXNTZXQob2JqZWN0LmlkKSA/IGdsb2JhbFRoaXMuU3RyaW5nKG9iamVjdC5pZCkgOiBcIlwiLFxuICAgICAgcGFnZTogaXNTZXQob2JqZWN0LnBhZ2UpID8gcGFnZUZyb21KU09OKG9iamVjdC5wYWdlKSA6IDAsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogU2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuaWQgIT09IFwiXCIpIHtcbiAgICAgIG9iai5pZCA9IG1lc3NhZ2UuaWQ7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZ2UgIT09IDApIHtcbiAgICAgIG9iai5wYWdlID0gcGFnZVRvSlNPTihtZXNzYWdlLnBhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8U2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdD4pOiBTZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgICByZXR1cm4gU2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdC5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxTZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0Pik6IFNldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCgpO1xuICAgIG1lc3NhZ2UuaWQgPSBvYmplY3QuaWQgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnBhZ2UgPSBvYmplY3QucGFnZSA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVNldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlKCk6IFNldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgcmV0dXJuIHsgZGVmYXVsdElkOiBcIlwiLCBwYWdlOiAwIH07XG59XG5cbmV4cG9ydCBjb25zdCBTZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFNldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuZGVmYXVsdElkICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5kZWZhdWx0SWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWdlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLnBhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFNldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZWZhdWx0SWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wYWdlID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogU2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBkZWZhdWx0SWQ6IGlzU2V0KG9iamVjdC5kZWZhdWx0SWQpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LmRlZmF1bHRJZCkgOiBcIlwiLFxuICAgICAgcGFnZTogaXNTZXQob2JqZWN0LnBhZ2UpID8gcGFnZUZyb21KU09OKG9iamVjdC5wYWdlKSA6IDAsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogU2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLmRlZmF1bHRJZCAhPT0gXCJcIikge1xuICAgICAgb2JqLmRlZmF1bHRJZCA9IG1lc3NhZ2UuZGVmYXVsdElkO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWdlICE9PSAwKSB7XG4gICAgICBvYmoucGFnZSA9IHBhZ2VUb0pTT04obWVzc2FnZS5wYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFNldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlPik6IFNldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICByZXR1cm4gU2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8U2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2U+KTogU2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2UoKTtcbiAgICBtZXNzYWdlLmRlZmF1bHRJZCA9IG9iamVjdC5kZWZhdWx0SWQgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnBhZ2UgPSBvYmplY3QucGFnZSA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUdldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QoKTogR2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gIHJldHVybiB7IHBhZ2U6IDAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEdldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucGFnZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLnBhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEdldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlR2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wYWdlID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogR2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gICAgcmV0dXJuIHsgcGFnZTogaXNTZXQob2JqZWN0LnBhZ2UpID8gcGFnZUZyb21KU09OKG9iamVjdC5wYWdlKSA6IDAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogR2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UucGFnZSAhPT0gMCkge1xuICAgICAgb2JqLnBhZ2UgPSBwYWdlVG9KU09OKG1lc3NhZ2UucGFnZSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0Pik6IEdldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIHJldHVybiBHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEdldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Q+KTogR2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0KCk7XG4gICAgbWVzc2FnZS5wYWdlID0gb2JqZWN0LnBhZ2UgPz8gMDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSgpOiBHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gIHJldHVybiB7IHF1ZXJ5RGVmOiBcIlwiLCBpZDogXCJcIiwgZGVmYXVsdElkOiBcIlwiLCBpc0V4aXN0OiBmYWxzZSB9O1xufVxuXG5leHBvcnQgY29uc3QgR2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnF1ZXJ5RGVmICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5xdWVyeURlZik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlkICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5pZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlZmF1bHRJZCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UuZGVmYXVsdElkKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNFeGlzdCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMikuYm9vbChtZXNzYWdlLmlzRXhpc3QpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEdldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUdldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5xdWVyeURlZiA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmlkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVmYXVsdElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuaXNFeGlzdCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHF1ZXJ5RGVmOiBpc1NldChvYmplY3QucXVlcnlEZWYpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LnF1ZXJ5RGVmKSA6IFwiXCIsXG4gICAgICBpZDogaXNTZXQob2JqZWN0LmlkKSA/IGdsb2JhbFRoaXMuU3RyaW5nKG9iamVjdC5pZCkgOiBcIlwiLFxuICAgICAgZGVmYXVsdElkOiBpc1NldChvYmplY3QuZGVmYXVsdElkKSA/IGdsb2JhbFRoaXMuU3RyaW5nKG9iamVjdC5kZWZhdWx0SWQpIDogXCJcIixcbiAgICAgIGlzRXhpc3Q6IGlzU2V0KG9iamVjdC5pc0V4aXN0KSA/IGdsb2JhbFRoaXMuQm9vbGVhbihvYmplY3QuaXNFeGlzdCkgOiBmYWxzZSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UucXVlcnlEZWYgIT09IFwiXCIpIHtcbiAgICAgIG9iai5xdWVyeURlZiA9IG1lc3NhZ2UucXVlcnlEZWY7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlkICE9PSBcIlwiKSB7XG4gICAgICBvYmouaWQgPSBtZXNzYWdlLmlkO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZWZhdWx0SWQgIT09IFwiXCIpIHtcbiAgICAgIG9iai5kZWZhdWx0SWQgPSBtZXNzYWdlLmRlZmF1bHRJZDtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNFeGlzdCA9PT0gdHJ1ZSkge1xuICAgICAgb2JqLmlzRXhpc3QgPSBtZXNzYWdlLmlzRXhpc3Q7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZT4pOiBHZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gICAgcmV0dXJuIEdldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEdldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlPik6IEdldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUdldERlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlKCk7XG4gICAgbWVzc2FnZS5xdWVyeURlZiA9IG9iamVjdC5xdWVyeURlZiA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuaWQgPSBvYmplY3QuaWQgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmRlZmF1bHRJZCA9IG9iamVjdC5kZWZhdWx0SWQgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmlzRXhpc3QgPSBvYmplY3QuaXNFeGlzdCA/PyBmYWxzZTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0KCk6IFJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Qge1xuICByZXR1cm4geyBkZWZhdWx0SWQ6IFwiXCIgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuZGVmYXVsdElkICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5kZWZhdWx0SWQpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUmVtb3ZlRGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVmYXVsdElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogUmVtb3ZlRGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gICAgcmV0dXJuIHsgZGVmYXVsdElkOiBpc1NldChvYmplY3QuZGVmYXVsdElkKSA/IGdsb2JhbFRoaXMuU3RyaW5nKG9iamVjdC5kZWZhdWx0SWQpIDogXCJcIiB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5kZWZhdWx0SWQgIT09IFwiXCIpIHtcbiAgICAgIG9iai5kZWZhdWx0SWQgPSBtZXNzYWdlLmRlZmF1bHRJZDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Q+KTogUmVtb3ZlRGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gICAgcmV0dXJuIFJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8UmVtb3ZlRGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdD4pOiBSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QoKTtcbiAgICBtZXNzYWdlLmRlZmF1bHRJZCA9IG9iamVjdC5kZWZhdWx0SWQgPz8gXCJcIjtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSgpOiBSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gIHJldHVybiB7IHNhdmVkRmlsdGVySWQ6IFwiXCIsIGRlZmF1bHRJZDogXCJcIiwgdXNlcklkOiBcIlwiLCBwYWdlOiAwIH07XG59XG5cbmV4cG9ydCBjb25zdCBSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJJZCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJJZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlZmF1bHRJZCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuZGVmYXVsdElkKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudXNlcklkICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS51c2VySWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWdlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyKS5pbnQzMihtZXNzYWdlLnBhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zYXZlZEZpbHRlcklkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVmYXVsdElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudXNlcklkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucGFnZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2F2ZWRGaWx0ZXJJZDogaXNTZXQob2JqZWN0LnNhdmVkRmlsdGVySWQpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LnNhdmVkRmlsdGVySWQpIDogXCJcIixcbiAgICAgIGRlZmF1bHRJZDogaXNTZXQob2JqZWN0LmRlZmF1bHRJZCkgPyBnbG9iYWxUaGlzLlN0cmluZyhvYmplY3QuZGVmYXVsdElkKSA6IFwiXCIsXG4gICAgICB1c2VySWQ6IGlzU2V0KG9iamVjdC51c2VySWQpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LnVzZXJJZCkgOiBcIlwiLFxuICAgICAgcGFnZTogaXNTZXQob2JqZWN0LnBhZ2UpID8gcGFnZUZyb21KU09OKG9iamVjdC5wYWdlKSA6IDAsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogUmVtb3ZlRGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLnNhdmVkRmlsdGVySWQgIT09IFwiXCIpIHtcbiAgICAgIG9iai5zYXZlZEZpbHRlcklkID0gbWVzc2FnZS5zYXZlZEZpbHRlcklkO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZWZhdWx0SWQgIT09IFwiXCIpIHtcbiAgICAgIG9iai5kZWZhdWx0SWQgPSBtZXNzYWdlLmRlZmF1bHRJZDtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudXNlcklkICE9PSBcIlwiKSB7XG4gICAgICBvYmoudXNlcklkID0gbWVzc2FnZS51c2VySWQ7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZ2UgIT09IDApIHtcbiAgICAgIG9iai5wYWdlID0gcGFnZVRvSlNPTihtZXNzYWdlLnBhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8UmVtb3ZlRGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2U+KTogUmVtb3ZlRGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICAgIHJldHVybiBSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZT4pOiBSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSgpO1xuICAgIG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJJZCA9IG9iamVjdC5zYXZlZEZpbHRlcklkID8/IFwiXCI7XG4gICAgbWVzc2FnZS5kZWZhdWx0SWQgPSBvYmplY3QuZGVmYXVsdElkID8/IFwiXCI7XG4gICAgbWVzc2FnZS51c2VySWQgPSBvYmplY3QudXNlcklkID8/IFwiXCI7XG4gICAgbWVzc2FnZS5wYWdlID0gb2JqZWN0LnBhZ2UgPz8gMDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCgpOiBSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCB7XG4gIHJldHVybiB7IHNhdmVkRmlsdGVySWQ6IFwiXCIsIHBhZ2U6IDAsIG9sZFNhdmVkRmlsdGVySWQ6IFwiXCIgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFJlcGxhY2VEZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5zYXZlZEZpbHRlcklkICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5zYXZlZEZpbHRlcklkKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFnZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5wYWdlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub2xkU2F2ZWRGaWx0ZXJJZCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2Uub2xkU2F2ZWRGaWx0ZXJJZCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnNhdmVkRmlsdGVySWQgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wYWdlID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub2xkU2F2ZWRGaWx0ZXJJZCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFJlcGxhY2VEZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2F2ZWRGaWx0ZXJJZDogaXNTZXQob2JqZWN0LnNhdmVkRmlsdGVySWQpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LnNhdmVkRmlsdGVySWQpIDogXCJcIixcbiAgICAgIHBhZ2U6IGlzU2V0KG9iamVjdC5wYWdlKSA/IHBhZ2VGcm9tSlNPTihvYmplY3QucGFnZSkgOiAwLFxuICAgICAgb2xkU2F2ZWRGaWx0ZXJJZDogaXNTZXQob2JqZWN0Lm9sZFNhdmVkRmlsdGVySWQpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0Lm9sZFNhdmVkRmlsdGVySWQpIDogXCJcIixcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2Uuc2F2ZWRGaWx0ZXJJZCAhPT0gXCJcIikge1xuICAgICAgb2JqLnNhdmVkRmlsdGVySWQgPSBtZXNzYWdlLnNhdmVkRmlsdGVySWQ7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZ2UgIT09IDApIHtcbiAgICAgIG9iai5wYWdlID0gcGFnZVRvSlNPTihtZXNzYWdlLnBhZ2UpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vbGRTYXZlZEZpbHRlcklkICE9PSBcIlwiKSB7XG4gICAgICBvYmoub2xkU2F2ZWRGaWx0ZXJJZCA9IG1lc3NhZ2Uub2xkU2F2ZWRGaWx0ZXJJZDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFJlcGxhY2VEZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0Pik6IFJlcGxhY2VEZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0IHtcbiAgICByZXR1cm4gUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8UmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Q+KTogUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3Qge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QoKTtcbiAgICBtZXNzYWdlLnNhdmVkRmlsdGVySWQgPSBvYmplY3Quc2F2ZWRGaWx0ZXJJZCA/PyBcIlwiO1xuICAgIG1lc3NhZ2UucGFnZSA9IG9iamVjdC5wYWdlID8/IDA7XG4gICAgbWVzc2FnZS5vbGRTYXZlZEZpbHRlcklkID0gb2JqZWN0Lm9sZFNhdmVkRmlsdGVySWQgPz8gXCJcIjtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2UoKTogUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgcmV0dXJuIHsgZGVmYXVsdElkOiBcIlwiIH07XG59XG5cbmV4cG9ydCBjb25zdCBSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5kZWZhdWx0SWQgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmRlZmF1bHRJZCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVJlcGxhY2VEZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVmYXVsdElkID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICByZXR1cm4geyBkZWZhdWx0SWQ6IGlzU2V0KG9iamVjdC5kZWZhdWx0SWQpID8gZ2xvYmFsVGhpcy5TdHJpbmcob2JqZWN0LmRlZmF1bHRJZCkgOiBcIlwiIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFJlcGxhY2VEZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuZGVmYXVsdElkICE9PSBcIlwiKSB7XG4gICAgICBvYmouZGVmYXVsdElkID0gbWVzc2FnZS5kZWZhdWx0SWQ7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2U+KTogUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlIHtcbiAgICByZXR1cm4gUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFJlcGxhY2VEZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZT4pOiBSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2Uge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUmVwbGFjZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlKCk7XG4gICAgbWVzc2FnZS5kZWZhdWx0SWQgPSBvYmplY3QuZGVmYXVsdElkID8/IFwiXCI7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5leHBvcnQgdHlwZSBSdW1TYXZlZEZpbHRlcnNTZXJ2aWNlRGVmaW5pdGlvbiA9IHR5cGVvZiBSdW1TYXZlZEZpbHRlcnNTZXJ2aWNlRGVmaW5pdGlvbjtcbmV4cG9ydCBjb25zdCBSdW1TYXZlZEZpbHRlcnNTZXJ2aWNlRGVmaW5pdGlvbiA9IHtcbiAgbmFtZTogXCJSdW1TYXZlZEZpbHRlcnNTZXJ2aWNlXCIsXG4gIGZ1bGxOYW1lOiBcImNvbS5jb3JhbG9naXgucnVtLnYyLlJ1bVNhdmVkRmlsdGVyc1NlcnZpY2VcIixcbiAgbWV0aG9kczoge1xuICAgIGdldFNhdmVkRmlsdGVyczoge1xuICAgICAgbmFtZTogXCJHZXRTYXZlZEZpbHRlcnNcIixcbiAgICAgIHJlcXVlc3RUeXBlOiBHZXRTYXZlZEZpbHRlcnNSZXF1ZXN0LFxuICAgICAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gICAgICByZXNwb25zZVR5cGU6IEdldFNhdmVkRmlsdGVyc1Jlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBjcmVhdGVTYXZlZEZpbHRlcjoge1xuICAgICAgbmFtZTogXCJDcmVhdGVTYXZlZEZpbHRlclwiLFxuICAgICAgcmVxdWVzdFR5cGU6IENyZWF0ZVNhdmVkRmlsdGVyUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBDcmVhdGVTYXZlZEZpbHRlclJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICB1cGRhdGVTYXZlZEZpbHRlcjoge1xuICAgICAgbmFtZTogXCJVcGRhdGVTYXZlZEZpbHRlclwiLFxuICAgICAgcmVxdWVzdFR5cGU6IFVwZGF0ZVNhdmVkRmlsdGVyUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBVcGRhdGVTYXZlZEZpbHRlclJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBkZWxldGVTYXZlZEZpbHRlcjoge1xuICAgICAgbmFtZTogXCJEZWxldGVTYXZlZEZpbHRlclwiLFxuICAgICAgcmVxdWVzdFR5cGU6IERlbGV0ZVNhdmVkRmlsdGVyUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBEZWxldGVTYXZlZEZpbHRlclJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBzYXZlRmF2b3JpdGVGaWx0ZXI6IHtcbiAgICAgIG5hbWU6IFwiU2F2ZUZhdm9yaXRlRmlsdGVyXCIsXG4gICAgICByZXF1ZXN0VHlwZTogU2F2ZUZhdm9yaXRlRmlsdGVyUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBTYXZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgIH0sXG4gICAgcmVtb3ZlRmF2b3JpdGVGaWx0ZXI6IHtcbiAgICAgIG5hbWU6IFwiUmVtb3ZlRmF2b3JpdGVGaWx0ZXJcIixcbiAgICAgIHJlcXVlc3RUeXBlOiBSZW1vdmVGYXZvcml0ZUZpbHRlclJlcXVlc3QsXG4gICAgICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgICAgIHJlc3BvbnNlVHlwZTogUmVtb3ZlRmF2b3JpdGVGaWx0ZXJSZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgIH0sXG4gICAgZ2V0U2F2ZWRGaWx0ZXJRdWVyeURlZjoge1xuICAgICAgbmFtZTogXCJHZXRTYXZlZEZpbHRlclF1ZXJ5RGVmXCIsXG4gICAgICByZXF1ZXN0VHlwZTogR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlcXVlc3QsXG4gICAgICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgICAgIHJlc3BvbnNlVHlwZTogR2V0U2F2ZWRGaWx0ZXJRdWVyeURlZlJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBzZXREZWZhdWx0U2F2ZWRGaWx0ZXI6IHtcbiAgICAgIG5hbWU6IFwiU2V0RGVmYXVsdFNhdmVkRmlsdGVyXCIsXG4gICAgICByZXF1ZXN0VHlwZTogU2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBTZXREZWZhdWx0U2F2ZWRGaWx0ZXJSZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlU3RyZWFtOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHt9LFxuICAgIH0sXG4gICAgZ2V0RGVmYXVsdFNhdmVkRmlsdGVyOiB7XG4gICAgICBuYW1lOiBcIkdldERlZmF1bHRTYXZlZEZpbHRlclwiLFxuICAgICAgcmVxdWVzdFR5cGU6IEdldERlZmF1bHRTYXZlZEZpbHRlclJlcXVlc3QsXG4gICAgICByZXF1ZXN0U3RyZWFtOiBmYWxzZSxcbiAgICAgIHJlc3BvbnNlVHlwZTogR2V0RGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gICAgICBvcHRpb25zOiB7fSxcbiAgICB9LFxuICAgIHJlbW92ZURlZmF1bHRTYXZlZEZpbHRlcjoge1xuICAgICAgbmFtZTogXCJSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJcIixcbiAgICAgIHJlcXVlc3RUeXBlOiBSZW1vdmVEZWZhdWx0U2F2ZWRGaWx0ZXJSZXF1ZXN0LFxuICAgICAgcmVxdWVzdFN0cmVhbTogZmFsc2UsXG4gICAgICByZXNwb25zZVR5cGU6IFJlbW92ZURlZmF1bHRTYXZlZEZpbHRlclJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VTdHJlYW06IGZhbHNlLFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICByZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyOiB7XG4gICAgICBuYW1lOiBcIlJlcGxhY2VEZWZhdWx0U2F2ZWRGaWx0ZXJcIixcbiAgICAgIHJlcXVlc3RUeXBlOiBSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RTdHJlYW06IGZhbHNlLFxuICAgICAgcmVzcG9uc2VUeXBlOiBSZXBsYWNlRGVmYXVsdFNhdmVkRmlsdGVyUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVN0cmVhbTogZmFsc2UsXG4gICAgICBvcHRpb25zOiB7fSxcbiAgICB9LFxuICB9LFxufSBhcyBjb25zdDtcblxudHlwZSBCdWlsdGluID0gRGF0ZSB8IEZ1bmN0aW9uIHwgVWludDhBcnJheSB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIEJ1aWx0aW4gPyBUXG4gIDogVCBleHRlbmRzIGdsb2JhbFRoaXMuQXJyYXk8aW5mZXIgVT4gPyBnbG9iYWxUaGlzLkFycmF5PERlZXBQYXJ0aWFsPFU+PlxuICA6IFQgZXh0ZW5kcyBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gUmVhZG9ubHlBcnJheTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgeyAkY2FzZTogc3RyaW5nIH0gPyB7IFtLIGluIGtleW9mIE9taXQ8VCwgXCIkY2FzZVwiPl0/OiBEZWVwUGFydGlhbDxUW0tdPiB9ICYgeyAkY2FzZTogVFtcIiRjYXNlXCJdIH1cbiAgOiBUIGV4dGVuZHMge30gPyB7IFtLIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtLXT4gfVxuICA6IFBhcnRpYWw8VD47XG5cbmZ1bmN0aW9uIGlzU2V0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=