@qodalis/cli-string 0.0.2 → 2.0.0-beta.1

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.
@@ -1,544 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { CliForegroundColor, DefaultLibraryAuthor, } from '@qodalis/cli-core';
3
- import * as _ from 'lodash';
4
- import { LIBRARY_VERSION } from '../version';
5
- import * as i0 from "@angular/core";
6
- const lodash = _.default || _;
7
- /**
8
- * Helper to create a simple string transform subcommand
9
- */
10
- function stringTransform(command, description, transform, options) {
11
- return {
12
- command,
13
- aliases: options?.aliases,
14
- description,
15
- allowUnlistedCommands: true,
16
- valueRequired: true,
17
- processCommand: async (cmd, context) => {
18
- const text = (cmd.value || cmd.data || '');
19
- const result = transform(text);
20
- context.writer.writeln(`${context.writer.wrapInColor('Result: ', CliForegroundColor.Yellow)}${result}`);
21
- context.process.output(result);
22
- },
23
- writeDescription: (context) => {
24
- const { writer } = context;
25
- writer.writeln(description);
26
- writer.writeln();
27
- writer.writeln('📋 Usage:');
28
- writer.writeln(` ${writer.wrapInColor(`string ${command} <text>`, CliForegroundColor.Cyan)}`);
29
- if (options?.example) {
30
- writer.writeln();
31
- writer.writeln('📝 Examples:');
32
- writer.writeln(` string ${command} ${options.example.input.padEnd(20)} ${writer.wrapInColor(`# → ${options.example.output}`, CliForegroundColor.Green)}`);
33
- }
34
- },
35
- };
36
- }
37
- export class CliStringCommandProcessor {
38
- constructor() {
39
- this.command = 'string';
40
- this.aliases = ['str'];
41
- this.description = 'String manipulation commands';
42
- this.author = DefaultLibraryAuthor;
43
- this.version = LIBRARY_VERSION;
44
- this.processors = [];
45
- this.metadata = {
46
- icon: '🔤',
47
- };
48
- this.processors = [
49
- // -- Case conversions --
50
- stringTransform('upper', 'Convert to UPPERCASE', (t) => t.toUpperCase(), {
51
- aliases: ['uppercase', 'toUpper'],
52
- example: { input: 'hello world', output: 'HELLO WORLD' },
53
- }),
54
- stringTransform('lower', 'Convert to lowercase', (t) => t.toLowerCase(), {
55
- aliases: ['lowercase', 'toLower'],
56
- example: { input: 'HELLO WORLD', output: 'hello world' },
57
- }),
58
- stringTransform('capitalize', 'Capitalize the first letter', (t) => lodash.capitalize(t), {
59
- aliases: ['cap'],
60
- example: { input: 'hello world', output: 'Hello world' },
61
- }),
62
- stringTransform('camelCase', 'Convert to camelCase', (t) => lodash.camelCase(t), {
63
- aliases: ['camel'],
64
- example: { input: 'hello world', output: 'helloWorld' },
65
- }),
66
- stringTransform('kebabCase', 'Convert to kebab-case', (t) => lodash.kebabCase(t), {
67
- aliases: ['kebab'],
68
- example: { input: 'Hello World', output: 'hello-world' },
69
- }),
70
- stringTransform('snakeCase', 'Convert to snake_case', (t) => lodash.snakeCase(t), {
71
- aliases: ['snake'],
72
- example: { input: 'Hello World', output: 'hello_world' },
73
- }),
74
- stringTransform('startCase', 'Convert to Start Case', (t) => lodash.startCase(t), {
75
- aliases: ['title', 'titleCase'],
76
- example: { input: 'hello-world', output: 'Hello World' },
77
- }),
78
- // -- Trimming --
79
- stringTransform('trim', 'Remove whitespace from both ends', (t) => t.trim(), {
80
- example: { input: '" hello "', output: 'hello' },
81
- }),
82
- stringTransform('trimStart', 'Remove whitespace from the start', (t) => t.trimStart(), {
83
- aliases: ['ltrim'],
84
- example: { input: '" hello"', output: 'hello' },
85
- }),
86
- stringTransform('trimEnd', 'Remove whitespace from the end', (t) => t.trimEnd(), {
87
- aliases: ['rtrim'],
88
- example: { input: '"hello "', output: 'hello' },
89
- }),
90
- // -- Transform --
91
- stringTransform('reverse', 'Reverse a string', (t) => [...t].reverse().join(''), {
92
- aliases: ['rev'],
93
- example: { input: 'Hello', output: 'olleH' },
94
- }),
95
- stringTransform('slug', 'Convert to URL-friendly slug', (t) => t.toLowerCase()
96
- .normalize('NFD')
97
- .replace(/[\u0300-\u036f]/g, '')
98
- .replace(/[^a-z0-9]+/g, '-')
99
- .replace(/^-|-$/g, ''), {
100
- aliases: ['slugify'],
101
- example: { input: '"Hello World!"', output: 'hello-world' },
102
- }),
103
- stringTransform('escape', 'Escape HTML entities', (t) => lodash.escape(t), {
104
- aliases: ['escapeHtml'],
105
- example: { input: '"<b>hi</b>"', output: '&lt;b&gt;hi&lt;/b&gt;' },
106
- }),
107
- stringTransform('unescape', 'Unescape HTML entities', (t) => lodash.unescape(t), {
108
- aliases: ['unescapeHtml'],
109
- example: { input: '"&lt;b&gt;"', output: '<b>' },
110
- }),
111
- // -- Repeat --
112
- {
113
- command: 'repeat',
114
- description: 'Repeat a string N times',
115
- allowUnlistedCommands: true,
116
- valueRequired: true,
117
- parameters: [
118
- {
119
- name: 'count',
120
- aliases: ['n'],
121
- description: 'Number of repetitions (default: 2)',
122
- type: 'number',
123
- required: false,
124
- },
125
- {
126
- name: 'separator',
127
- aliases: ['sep'],
128
- description: 'Separator between repetitions (default: none)',
129
- type: 'string',
130
- required: false,
131
- },
132
- ],
133
- processCommand: async (command, context) => {
134
- const text = (command.value || command.data || '');
135
- const count = Math.min(parseInt(command.args['count'] || command.args['n']) || 2, 1000);
136
- const sep = command.args['separator'] || command.args['sep'] || '';
137
- const result = Array(count).fill(text).join(sep);
138
- context.writer.writeln(`${context.writer.wrapInColor('Result: ', CliForegroundColor.Yellow)}${result}`);
139
- context.process.output(result);
140
- },
141
- writeDescription: (context) => {
142
- const { writer } = context;
143
- writer.writeln('Repeat a string multiple times');
144
- writer.writeln();
145
- writer.writeln('📋 Usage:');
146
- writer.writeln(` ${writer.wrapInColor('string repeat <text> [--count=N] [--sep=S]', CliForegroundColor.Cyan)}`);
147
- writer.writeln();
148
- writer.writeln('📝 Examples:');
149
- writer.writeln(` string repeat ha --count=3 ${writer.wrapInColor('# → hahaha', CliForegroundColor.Green)}`);
150
- writer.writeln(` string repeat ab --n=3 --sep=- ${writer.wrapInColor('# → ab-ab-ab', CliForegroundColor.Green)}`);
151
- },
152
- },
153
- // -- Replace --
154
- {
155
- command: 'replace',
156
- description: 'Replace occurrences in a string',
157
- allowUnlistedCommands: true,
158
- valueRequired: true,
159
- parameters: [
160
- {
161
- name: 'find',
162
- aliases: ['f'],
163
- description: 'Text to find',
164
- type: 'string',
165
- required: true,
166
- },
167
- {
168
- name: 'with',
169
- aliases: ['w'],
170
- description: 'Replacement text',
171
- type: 'string',
172
- required: true,
173
- },
174
- ],
175
- processCommand: async (command, context) => {
176
- const text = (command.value || command.data || '');
177
- const find = command.args['find'] || command.args['f'] || '';
178
- const replacement = command.args['with'] || command.args['w'] || '';
179
- if (!find) {
180
- context.writer.writeError('--find is required');
181
- context.process.exit(-1);
182
- return;
183
- }
184
- const result = text.split(find).join(replacement);
185
- context.writer.writeln(`${context.writer.wrapInColor('Result: ', CliForegroundColor.Yellow)}${result}`);
186
- context.process.output(result);
187
- },
188
- writeDescription: (context) => {
189
- const { writer } = context;
190
- writer.writeln('Replace all occurrences of a substring');
191
- writer.writeln();
192
- writer.writeln('📋 Usage:');
193
- writer.writeln(` ${writer.wrapInColor('string replace <text> --find=<search> --with=<replacement>', CliForegroundColor.Cyan)}`);
194
- writer.writeln();
195
- writer.writeln('📝 Examples:');
196
- writer.writeln(` string replace "hello world" --find=world --with=there`);
197
- writer.writeln(` ${writer.wrapInColor('# → hello there', CliForegroundColor.Green)}`);
198
- },
199
- },
200
- // -- Truncate --
201
- {
202
- command: 'truncate',
203
- aliases: ['trunc'],
204
- description: 'Truncate a string to a max length',
205
- allowUnlistedCommands: true,
206
- valueRequired: true,
207
- parameters: [
208
- {
209
- name: 'length',
210
- aliases: ['l'],
211
- description: 'Maximum length (default: 30)',
212
- type: 'number',
213
- required: false,
214
- },
215
- {
216
- name: 'suffix',
217
- description: 'Omission suffix (default: ...)',
218
- type: 'string',
219
- required: false,
220
- },
221
- ],
222
- processCommand: async (command, context) => {
223
- const text = (command.value || command.data || '');
224
- const length = parseInt(command.args['length'] || command.args['l']) || 30;
225
- const suffix = command.args['suffix'] ?? '...';
226
- const result = text.length > length
227
- ? text.substring(0, length - suffix.length) + suffix
228
- : text;
229
- context.writer.writeln(`${context.writer.wrapInColor('Result: ', CliForegroundColor.Yellow)}${result}`);
230
- context.process.output(result);
231
- },
232
- writeDescription: (context) => {
233
- const { writer } = context;
234
- writer.writeln('Truncate a string to a maximum length with an ellipsis');
235
- writer.writeln();
236
- writer.writeln('📋 Usage:');
237
- writer.writeln(` ${writer.wrapInColor('string truncate <text> [--length=N] [--suffix=S]', CliForegroundColor.Cyan)}`);
238
- },
239
- },
240
- // -- Pad --
241
- {
242
- command: 'pad',
243
- description: 'Pad a string to a target length',
244
- allowUnlistedCommands: true,
245
- valueRequired: true,
246
- parameters: [
247
- {
248
- name: 'length',
249
- aliases: ['l'],
250
- description: 'Target length',
251
- type: 'number',
252
- required: true,
253
- },
254
- {
255
- name: 'char',
256
- aliases: ['c'],
257
- description: 'Padding character (default: space)',
258
- type: 'string',
259
- required: false,
260
- },
261
- {
262
- name: 'side',
263
- description: 'Pad side: left, right, both (default: both)',
264
- type: 'string',
265
- required: false,
266
- },
267
- ],
268
- processCommand: async (command, context) => {
269
- const text = (command.value || command.data || '');
270
- const length = parseInt(command.args['length'] || command.args['l']);
271
- const char = command.args['char'] || command.args['c'] || ' ';
272
- const side = command.args['side'] || 'both';
273
- if (isNaN(length)) {
274
- context.writer.writeError('--length is required');
275
- context.process.exit(-1);
276
- return;
277
- }
278
- let result;
279
- switch (side) {
280
- case 'left':
281
- case 'start':
282
- result = text.padStart(length, char);
283
- break;
284
- case 'right':
285
- case 'end':
286
- result = text.padEnd(length, char);
287
- break;
288
- default:
289
- result = lodash.pad(text, length, char);
290
- break;
291
- }
292
- context.writer.writeln(`${context.writer.wrapInColor('Result: ', CliForegroundColor.Yellow)}"${result}"`);
293
- context.process.output(result);
294
- },
295
- writeDescription: (context) => {
296
- const { writer } = context;
297
- writer.writeln('Pad a string to a target length');
298
- writer.writeln();
299
- writer.writeln('📋 Usage:');
300
- writer.writeln(` ${writer.wrapInColor('string pad <text> --length=N [--char=C] [--side=left|right|both]', CliForegroundColor.Cyan)}`);
301
- writer.writeln();
302
- writer.writeln('📝 Examples:');
303
- writer.writeln(` string pad hello --length=10 --char=. --side=right`);
304
- writer.writeln(` ${writer.wrapInColor('# → "hello....."', CliForegroundColor.Green)}`);
305
- },
306
- },
307
- // -- Split --
308
- {
309
- command: 'split',
310
- description: 'Split a string by a delimiter',
311
- allowUnlistedCommands: true,
312
- valueRequired: true,
313
- parameters: [
314
- {
315
- name: 'by',
316
- aliases: ['d', 'delimiter'],
317
- description: 'Delimiter to split by (default: space)',
318
- type: 'string',
319
- required: false,
320
- },
321
- ],
322
- processCommand: async (command, context) => {
323
- const text = (command.value || command.data || '');
324
- const delimiter = command.args['by'] || command.args['d'] || command.args['delimiter'] || ' ';
325
- const parts = text.split(delimiter);
326
- const { writer } = context;
327
- parts.forEach((part, i) => {
328
- writer.writeln(` ${writer.wrapInColor(String(i).padStart(3), CliForegroundColor.Yellow)} ${part}`);
329
- });
330
- context.process.output(parts);
331
- },
332
- writeDescription: (context) => {
333
- const { writer } = context;
334
- writer.writeln('Split a string into parts by a delimiter');
335
- writer.writeln();
336
- writer.writeln('📋 Usage:');
337
- writer.writeln(` ${writer.wrapInColor('string split <text> [--by=<delimiter>]', CliForegroundColor.Cyan)}`);
338
- writer.writeln();
339
- writer.writeln('📝 Examples:');
340
- writer.writeln(` string split "a,b,c" --by=, ${writer.wrapInColor('# → a b c', CliForegroundColor.Green)}`);
341
- },
342
- },
343
- // -- Words --
344
- {
345
- command: 'words',
346
- description: 'Split a string into words',
347
- allowUnlistedCommands: true,
348
- valueRequired: true,
349
- processCommand: async (command, context) => {
350
- const text = (command.value || command.data || '');
351
- const words = lodash.words(text);
352
- const { writer } = context;
353
- writer.writeln(`${writer.wrapInColor(`${words.length} words:`, CliForegroundColor.Yellow)} ${words.join(', ')}`);
354
- context.process.output(words);
355
- },
356
- writeDescription: (context) => {
357
- const { writer } = context;
358
- writer.writeln('Split a string into its component words');
359
- writer.writeln();
360
- writer.writeln('📋 Usage:');
361
- writer.writeln(` ${writer.wrapInColor('string words <text>', CliForegroundColor.Cyan)}`);
362
- writer.writeln();
363
- writer.writeln('📝 Examples:');
364
- writer.writeln(` string words "helloWorld" ${writer.wrapInColor('# → hello, World', CliForegroundColor.Green)}`);
365
- writer.writeln(` string words "foo-bar_baz" ${writer.wrapInColor('# → foo, bar, baz', CliForegroundColor.Green)}`);
366
- },
367
- },
368
- // -- Analysis --
369
- {
370
- command: 'length',
371
- aliases: ['len'],
372
- description: 'Get the length of a string',
373
- allowUnlistedCommands: true,
374
- valueRequired: true,
375
- processCommand: async (command, context) => {
376
- const text = (command.value || command.data || '');
377
- context.writer.writeln(`${context.writer.wrapInColor('Result: ', CliForegroundColor.Yellow)}${text.length}`);
378
- context.process.output(text.length);
379
- },
380
- writeDescription: (context) => {
381
- const { writer } = context;
382
- writer.writeln('Get the character count of a string');
383
- writer.writeln();
384
- writer.writeln('📋 Usage:');
385
- writer.writeln(` ${writer.wrapInColor('string length <text>', CliForegroundColor.Cyan)}`);
386
- },
387
- },
388
- {
389
- command: 'wc',
390
- aliases: ['wordcount', 'count'],
391
- description: 'Count lines, words, characters, and bytes',
392
- allowUnlistedCommands: true,
393
- valueRequired: true,
394
- processCommand: async (command, context) => {
395
- const text = (command.value || command.data || '');
396
- const { writer } = context;
397
- const lines = text.split(/\r?\n/).length;
398
- const wordCount = text.trim() ? text.trim().split(/\s+/).length : 0;
399
- const chars = text.length;
400
- const bytes = new TextEncoder().encode(text).length;
401
- writer.writeln(` ${writer.wrapInColor('Lines:', CliForegroundColor.Cyan)} ${lines}`);
402
- writer.writeln(` ${writer.wrapInColor('Words:', CliForegroundColor.Cyan)} ${wordCount}`);
403
- writer.writeln(` ${writer.wrapInColor('Characters:', CliForegroundColor.Cyan)} ${chars}`);
404
- writer.writeln(` ${writer.wrapInColor('Bytes:', CliForegroundColor.Cyan)} ${bytes}`);
405
- context.process.output({ lines, words: wordCount, chars, bytes });
406
- },
407
- writeDescription: (context) => {
408
- const { writer } = context;
409
- writer.writeln('Count lines, words, characters, and bytes in text');
410
- writer.writeln();
411
- writer.writeln('📋 Usage:');
412
- writer.writeln(` ${writer.wrapInColor('string wc <text>', CliForegroundColor.Cyan)}`);
413
- },
414
- },
415
- {
416
- command: 'includes',
417
- aliases: ['contains', 'has'],
418
- description: 'Check if a string contains a substring',
419
- allowUnlistedCommands: true,
420
- valueRequired: true,
421
- parameters: [
422
- {
423
- name: 'find',
424
- aliases: ['f'],
425
- description: 'Substring to search for',
426
- type: 'string',
427
- required: true,
428
- },
429
- ],
430
- processCommand: async (command, context) => {
431
- const text = (command.value || command.data || '');
432
- const find = command.args['find'] || command.args['f'] || '';
433
- const result = text.includes(find);
434
- const { writer } = context;
435
- if (result) {
436
- writer.writeSuccess(`"${find}" found in string`);
437
- }
438
- else {
439
- writer.writeError(`"${find}" not found in string`);
440
- }
441
- context.process.output(result);
442
- },
443
- writeDescription: (context) => {
444
- const { writer } = context;
445
- writer.writeln('Check if a string contains a given substring');
446
- writer.writeln();
447
- writer.writeln('📋 Usage:');
448
- writer.writeln(` ${writer.wrapInColor('string includes <text> --find=<substring>', CliForegroundColor.Cyan)}`);
449
- },
450
- },
451
- {
452
- command: 'startsWith',
453
- description: 'Check if a string starts with a prefix',
454
- allowUnlistedCommands: true,
455
- valueRequired: true,
456
- parameters: [
457
- {
458
- name: 'find',
459
- aliases: ['f'],
460
- description: 'Prefix to check',
461
- type: 'string',
462
- required: true,
463
- },
464
- ],
465
- processCommand: async (command, context) => {
466
- const text = (command.value || command.data || '');
467
- const find = command.args['find'] || command.args['f'] || '';
468
- const result = text.startsWith(find);
469
- const { writer } = context;
470
- writer.writeln(`${writer.wrapInColor('Result: ', CliForegroundColor.Yellow)}${result}`);
471
- context.process.output(result);
472
- },
473
- writeDescription: (context) => {
474
- const { writer } = context;
475
- writer.writeln('Check if a string starts with a given prefix');
476
- writer.writeln();
477
- writer.writeln('📋 Usage:');
478
- writer.writeln(` ${writer.wrapInColor('string startsWith <text> --find=<prefix>', CliForegroundColor.Cyan)}`);
479
- },
480
- },
481
- {
482
- command: 'endsWith',
483
- description: 'Check if a string ends with a suffix',
484
- allowUnlistedCommands: true,
485
- valueRequired: true,
486
- parameters: [
487
- {
488
- name: 'find',
489
- aliases: ['f'],
490
- description: 'Suffix to check',
491
- type: 'string',
492
- required: true,
493
- },
494
- ],
495
- processCommand: async (command, context) => {
496
- const text = (command.value || command.data || '');
497
- const find = command.args['find'] || command.args['f'] || '';
498
- const result = text.endsWith(find);
499
- const { writer } = context;
500
- writer.writeln(`${writer.wrapInColor('Result: ', CliForegroundColor.Yellow)}${result}`);
501
- context.process.output(result);
502
- },
503
- writeDescription: (context) => {
504
- const { writer } = context;
505
- writer.writeln('Check if a string ends with a given suffix');
506
- writer.writeln();
507
- writer.writeln('📋 Usage:');
508
- writer.writeln(` ${writer.wrapInColor('string endsWith <text> --find=<suffix>', CliForegroundColor.Cyan)}`);
509
- },
510
- },
511
- ];
512
- }
513
- async processCommand(command, context) {
514
- context.executor.showHelp(command, context);
515
- }
516
- writeDescription(context) {
517
- const { writer } = context;
518
- writer.writeln('String manipulation and analysis commands');
519
- writer.writeln();
520
- writer.writeln(writer.wrapInColor('🔠 Case Conversions:', CliForegroundColor.Yellow));
521
- writer.writeln(` ${writer.wrapInColor('string upper', CliForegroundColor.Cyan)} / ${writer.wrapInColor('lower', CliForegroundColor.Cyan)} / ${writer.wrapInColor('capitalize', CliForegroundColor.Cyan)}`);
522
- writer.writeln(` ${writer.wrapInColor('string camelCase', CliForegroundColor.Cyan)} / ${writer.wrapInColor('kebabCase', CliForegroundColor.Cyan)} / ${writer.wrapInColor('snakeCase', CliForegroundColor.Cyan)} / ${writer.wrapInColor('startCase', CliForegroundColor.Cyan)}`);
523
- writer.writeln();
524
- writer.writeln(writer.wrapInColor('🔧 Transform:', CliForegroundColor.Yellow));
525
- writer.writeln(` ${writer.wrapInColor('string reverse', CliForegroundColor.Cyan)} / ${writer.wrapInColor('trim', CliForegroundColor.Cyan)} / ${writer.wrapInColor('slug', CliForegroundColor.Cyan)} / ${writer.wrapInColor('repeat', CliForegroundColor.Cyan)} / ${writer.wrapInColor('replace', CliForegroundColor.Cyan)} / ${writer.wrapInColor('truncate', CliForegroundColor.Cyan)}`);
526
- writer.writeln(` ${writer.wrapInColor('string pad', CliForegroundColor.Cyan)} / ${writer.wrapInColor('escape', CliForegroundColor.Cyan)} / ${writer.wrapInColor('unescape', CliForegroundColor.Cyan)}`);
527
- writer.writeln();
528
- writer.writeln(writer.wrapInColor('🔍 Analysis:', CliForegroundColor.Yellow));
529
- writer.writeln(` ${writer.wrapInColor('string length', CliForegroundColor.Cyan)} / ${writer.wrapInColor('wc', CliForegroundColor.Cyan)} / ${writer.wrapInColor('includes', CliForegroundColor.Cyan)} / ${writer.wrapInColor('startsWith', CliForegroundColor.Cyan)} / ${writer.wrapInColor('endsWith', CliForegroundColor.Cyan)}`);
530
- writer.writeln(` ${writer.wrapInColor('string split', CliForegroundColor.Cyan)} / ${writer.wrapInColor('words', CliForegroundColor.Cyan)}`);
531
- writer.writeln();
532
- writer.writeln('📝 Examples:');
533
- writer.writeln(` string camelCase "hello world" ${writer.wrapInColor('# → helloWorld', CliForegroundColor.Green)}`);
534
- writer.writeln(` string reverse Hello ${writer.wrapInColor('# → olleH', CliForegroundColor.Green)}`);
535
- writer.writeln(` string slug "Hello World!" ${writer.wrapInColor('# → hello-world', CliForegroundColor.Green)}`);
536
- writer.writeln(` string wc "some text here" ${writer.wrapInColor('# word/char counts', CliForegroundColor.Green)}`);
537
- }
538
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliStringCommandProcessor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
539
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliStringCommandProcessor }); }
540
- }
541
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliStringCommandProcessor, decorators: [{
542
- type: Injectable
543
- }], ctorParameters: function () { return []; } });
544
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXN0cmluZy1jb21tYW5kLXByb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmluZy9zcmMvbGliL3Byb2Nlc3NvcnMvY2xpLXN0cmluZy1jb21tYW5kLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDSCxrQkFBa0IsRUFHbEIsb0JBQW9CLEdBR3ZCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFFN0MsTUFBTSxNQUFNLEdBQUksQ0FBUyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFFdkM7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FDcEIsT0FBZSxFQUNmLFdBQW1CLEVBQ25CLFNBQW1DLEVBQ25DLE9BR0M7SUFFRCxPQUFPO1FBQ0gsT0FBTztRQUNQLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTztRQUN6QixXQUFXO1FBQ1gscUJBQXFCLEVBQUUsSUFBSTtRQUMzQixhQUFhLEVBQUUsSUFBSTtRQUNuQixjQUFjLEVBQUUsS0FBSyxFQUNqQixHQUFzQixFQUN0QixPQUE2QixFQUMvQixFQUFFO1lBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFXLENBQUM7WUFDckQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNsQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FDbEYs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LEVBQUUsQ0FBQyxDQUFDO1FBQzVILE1BQU0sQ0FBQyxPQUFPLENBQUMsMENBQTBDLE1BQU0sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25JLENBQUM7K0dBam9CUSx5QkFBeUI7bUhBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2xpRm9yZWdyb3VuZENvbG9yLFxuICAgIENsaVByb2Nlc3NDb21tYW5kLFxuICAgIENsaVByb2Nlc3Nvck1ldGFkYXRhLFxuICAgIERlZmF1bHRMaWJyYXJ5QXV0aG9yLFxuICAgIElDbGlDb21tYW5kUHJvY2Vzc29yLFxuICAgIElDbGlFeGVjdXRpb25Db250ZXh0LFxufSBmcm9tICdAcW9kYWxpcy9jbGktY29yZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBMSUJSQVJZX1ZFUlNJT04gfSBmcm9tICcuLi92ZXJzaW9uJztcblxuY29uc3QgbG9kYXNoID0gKF8gYXMgYW55KS5kZWZhdWx0IHx8IF87XG5cbi8qKlxuICogSGVscGVyIHRvIGNyZWF0ZSBhIHNpbXBsZSBzdHJpbmcgdHJhbnNmb3JtIHN1YmNvbW1hbmRcbiAqL1xuZnVuY3Rpb24gc3RyaW5nVHJhbnNmb3JtKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIHRyYW5zZm9ybTogKHRleHQ6IHN0cmluZykgPT4gc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICAgIGFsaWFzZXM/OiBzdHJpbmdbXTtcbiAgICAgICAgZXhhbXBsZT86IHsgaW5wdXQ6IHN0cmluZzsgb3V0cHV0OiBzdHJpbmcgfTtcbiAgICB9LFxuKTogSUNsaUNvbW1hbmRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFsaWFzZXM6IG9wdGlvbnM/LmFsaWFzZXMsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgIHZhbHVlUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHByb2Nlc3NDb21tYW5kOiBhc3luYyAoXG4gICAgICAgICAgICBjbWQ6IENsaVByb2Nlc3NDb21tYW5kLFxuICAgICAgICAgICAgY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IChjbWQudmFsdWUgfHwgY21kLmRhdGEgfHwgJycpIGFzIHN0cmluZztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRyYW5zZm9ybSh0ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgYCR7Y29udGV4dC53cml0ZXIud3JhcEluQ29sb3IoJ1Jlc3VsdDogJywgQ2xpRm9yZWdyb3VuZENvbG9yLlllbGxvdyl9JHtyZXN1bHR9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb250ZXh0LnByb2Nlc3Mub3V0cHV0KHJlc3VsdCk7XG4gICAgICAgIH0sXG4gICAgICAgIHdyaXRlRGVzY3JpcHRpb246IChjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB3cml0ZXIgfSA9IGNvbnRleHQ7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGVsbihkZXNjcmlwdGlvbik7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oJ/Cfk4sgVXNhZ2U6Jyk7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICBgICAke3dyaXRlci53cmFwSW5Db2xvcihgc3RyaW5nICR7Y29tbWFuZH0gPHRleHQ+YCwgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmV4YW1wbGUpIHtcbiAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCfwn5OdIEV4YW1wbGVzOicpO1xuICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICBgICBzdHJpbmcgJHtjb21tYW5kfSAke29wdGlvbnMuZXhhbXBsZS5pbnB1dC5wYWRFbmQoMjApfSAke3dyaXRlci53cmFwSW5Db2xvcihgIyDihpIgJHtvcHRpb25zLmV4YW1wbGUub3V0cHV0fWAsIENsaUZvcmVncm91bmRDb2xvci5HcmVlbil9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDbGlTdHJpbmdDb21tYW5kUHJvY2Vzc29yIGltcGxlbWVudHMgSUNsaUNvbW1hbmRQcm9jZXNzb3Ige1xuICAgIGNvbW1hbmQgPSAnc3RyaW5nJztcblxuICAgIGFsaWFzZXMgPSBbJ3N0ciddO1xuXG4gICAgZGVzY3JpcHRpb24gPSAnU3RyaW5nIG1hbmlwdWxhdGlvbiBjb21tYW5kcyc7XG5cbiAgICBhdXRob3IgPSBEZWZhdWx0TGlicmFyeUF1dGhvcjtcblxuICAgIHZlcnNpb24gPSBMSUJSQVJZX1ZFUlNJT047XG5cbiAgICBwcm9jZXNzb3JzPzogSUNsaUNvbW1hbmRQcm9jZXNzb3JbXSA9IFtdO1xuXG4gICAgbWV0YWRhdGE/OiBDbGlQcm9jZXNzb3JNZXRhZGF0YSA9IHtcbiAgICAgICAgaWNvbjogJ/CflKQnLFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzb3JzID0gW1xuICAgICAgICAgICAgLy8gLS0gQ2FzZSBjb252ZXJzaW9ucyAtLVxuICAgICAgICAgICAgc3RyaW5nVHJhbnNmb3JtKCd1cHBlcicsICdDb252ZXJ0IHRvIFVQUEVSQ0FTRScsICh0KSA9PiB0LnRvVXBwZXJDYXNlKCksIHtcbiAgICAgICAgICAgICAgICBhbGlhc2VzOiBbJ3VwcGVyY2FzZScsICd0b1VwcGVyJ10sXG4gICAgICAgICAgICAgICAgZXhhbXBsZTogeyBpbnB1dDogJ2hlbGxvIHdvcmxkJywgb3V0cHV0OiAnSEVMTE8gV09STEQnIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHN0cmluZ1RyYW5zZm9ybSgnbG93ZXInLCAnQ29udmVydCB0byBsb3dlcmNhc2UnLCAodCkgPT4gdC50b0xvd2VyQ2FzZSgpLCB7XG4gICAgICAgICAgICAgICAgYWxpYXNlczogWydsb3dlcmNhc2UnLCAndG9Mb3dlciddLFxuICAgICAgICAgICAgICAgIGV4YW1wbGU6IHsgaW5wdXQ6ICdIRUxMTyBXT1JMRCcsIG91dHB1dDogJ2hlbGxvIHdvcmxkJyB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzdHJpbmdUcmFuc2Zvcm0oJ2NhcGl0YWxpemUnLCAnQ2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyJywgKHQpID0+IGxvZGFzaC5jYXBpdGFsaXplKHQpLCB7XG4gICAgICAgICAgICAgICAgYWxpYXNlczogWydjYXAnXSxcbiAgICAgICAgICAgICAgICBleGFtcGxlOiB7IGlucHV0OiAnaGVsbG8gd29ybGQnLCBvdXRwdXQ6ICdIZWxsbyB3b3JsZCcgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc3RyaW5nVHJhbnNmb3JtKCdjYW1lbENhc2UnLCAnQ29udmVydCB0byBjYW1lbENhc2UnLCAodCkgPT4gbG9kYXNoLmNhbWVsQ2FzZSh0KSwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnY2FtZWwnXSxcbiAgICAgICAgICAgICAgICBleGFtcGxlOiB7IGlucHV0OiAnaGVsbG8gd29ybGQnLCBvdXRwdXQ6ICdoZWxsb1dvcmxkJyB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzdHJpbmdUcmFuc2Zvcm0oJ2tlYmFiQ2FzZScsICdDb252ZXJ0IHRvIGtlYmFiLWNhc2UnLCAodCkgPT4gbG9kYXNoLmtlYmFiQ2FzZSh0KSwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsna2ViYWInXSxcbiAgICAgICAgICAgICAgICBleGFtcGxlOiB7IGlucHV0OiAnSGVsbG8gV29ybGQnLCBvdXRwdXQ6ICdoZWxsby13b3JsZCcgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc3RyaW5nVHJhbnNmb3JtKCdzbmFrZUNhc2UnLCAnQ29udmVydCB0byBzbmFrZV9jYXNlJywgKHQpID0+IGxvZGFzaC5zbmFrZUNhc2UodCksIHtcbiAgICAgICAgICAgICAgICBhbGlhc2VzOiBbJ3NuYWtlJ10sXG4gICAgICAgICAgICAgICAgZXhhbXBsZTogeyBpbnB1dDogJ0hlbGxvIFdvcmxkJywgb3V0cHV0OiAnaGVsbG9fd29ybGQnIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHN0cmluZ1RyYW5zZm9ybSgnc3RhcnRDYXNlJywgJ0NvbnZlcnQgdG8gU3RhcnQgQ2FzZScsICh0KSA9PiBsb2Rhc2guc3RhcnRDYXNlKHQpLCB7XG4gICAgICAgICAgICAgICAgYWxpYXNlczogWyd0aXRsZScsICd0aXRsZUNhc2UnXSxcbiAgICAgICAgICAgICAgICBleGFtcGxlOiB7IGlucHV0OiAnaGVsbG8td29ybGQnLCBvdXRwdXQ6ICdIZWxsbyBXb3JsZCcgfSxcbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyAtLSBUcmltbWluZyAtLVxuICAgICAgICAgICAgc3RyaW5nVHJhbnNmb3JtKCd0cmltJywgJ1JlbW92ZSB3aGl0ZXNwYWNlIGZyb20gYm90aCBlbmRzJywgKHQpID0+IHQudHJpbSgpLCB7XG4gICAgICAgICAgICAgICAgZXhhbXBsZTogeyBpbnB1dDogJ1wiICBoZWxsbyAgXCInLCBvdXRwdXQ6ICdoZWxsbycgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc3RyaW5nVHJhbnNmb3JtKCd0cmltU3RhcnQnLCAnUmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSB0aGUgc3RhcnQnLCAodCkgPT4gdC50cmltU3RhcnQoKSwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnbHRyaW0nXSxcbiAgICAgICAgICAgICAgICBleGFtcGxlOiB7IGlucHV0OiAnXCIgIGhlbGxvXCInLCBvdXRwdXQ6ICdoZWxsbycgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc3RyaW5nVHJhbnNmb3JtKCd0cmltRW5kJywgJ1JlbW92ZSB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCcsICh0KSA9PiB0LnRyaW1FbmQoKSwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsncnRyaW0nXSxcbiAgICAgICAgICAgICAgICBleGFtcGxlOiB7IGlucHV0OiAnXCJoZWxsbyAgXCInLCBvdXRwdXQ6ICdoZWxsbycgfSxcbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyAtLSBUcmFuc2Zvcm0gLS1cbiAgICAgICAgICAgIHN0cmluZ1RyYW5zZm9ybSgncmV2ZXJzZScsICdSZXZlcnNlIGEgc3RyaW5nJywgKHQpID0+IFsuLi50XS5yZXZlcnNlKCkuam9pbignJyksIHtcbiAgICAgICAgICAgICAgICBhbGlhc2VzOiBbJ3JldiddLFxuICAgICAgICAgICAgICAgIGV4YW1wbGU6IHsgaW5wdXQ6ICdIZWxsbycsIG91dHB1dDogJ29sbGVIJyB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzdHJpbmdUcmFuc2Zvcm0oJ3NsdWcnLCAnQ29udmVydCB0byBVUkwtZnJpZW5kbHkgc2x1ZycsICh0KSA9PlxuICAgICAgICAgICAgICAgIHQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL14tfC0kL2csICcnKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnc2x1Z2lmeSddLFxuICAgICAgICAgICAgICAgICAgICBleGFtcGxlOiB7IGlucHV0OiAnXCJIZWxsbyBXb3JsZCFcIicsIG91dHB1dDogJ2hlbGxvLXdvcmxkJyB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RyaW5nVHJhbnNmb3JtKCdlc2NhcGUnLCAnRXNjYXBlIEhUTUwgZW50aXRpZXMnLCAodCkgPT4gbG9kYXNoLmVzY2FwZSh0KSwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnZXNjYXBlSHRtbCddLFxuICAgICAgICAgICAgICAgIGV4YW1wbGU6IHsgaW5wdXQ6ICdcIjxiPmhpPC9iPlwiJywgb3V0cHV0OiAnJmx0O2ImZ3Q7aGkmbHQ7L2ImZ3Q7JyB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzdHJpbmdUcmFuc2Zvcm0oJ3VuZXNjYXBlJywgJ1VuZXNjYXBlIEhUTUwgZW50aXRpZXMnLCAodCkgPT4gbG9kYXNoLnVuZXNjYXBlKHQpLCB7XG4gICAgICAgICAgICAgICAgYWxpYXNlczogWyd1bmVzY2FwZUh0bWwnXSxcbiAgICAgICAgICAgICAgICBleGFtcGxlOiB7IGlucHV0OiAnXCImbHQ7YiZndDtcIicsIG91dHB1dDogJzxiPicgfSxcbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyAtLSBSZXBlYXQgLS1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAncmVwZWF0JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JlcGVhdCBhIHN0cmluZyBOIHRpbWVzJyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzOiBbJ24nXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTnVtYmVyIG9mIHJlcGV0aXRpb25zIChkZWZhdWx0OiAyKScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NlcGFyYXRvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzOiBbJ3NlcCddLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTZXBhcmF0b3IgYmV0d2VlbiByZXBldGl0aW9ucyAoZGVmYXVsdDogbm9uZSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQ29tbWFuZDogYXN5bmMgKFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBDbGlQcm9jZXNzQ29tbWFuZCxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSAoY29tbWFuZC52YWx1ZSB8fCBjb21tYW5kLmRhdGEgfHwgJycpIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBNYXRoLm1pbihwYXJzZUludChjb21tYW5kLmFyZ3NbJ2NvdW50J10gfHwgY29tbWFuZC5hcmdzWyduJ10pIHx8IDIsIDEwMDApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXAgPSBjb21tYW5kLmFyZ3NbJ3NlcGFyYXRvciddIHx8IGNvbW1hbmQuYXJnc1snc2VwJ10gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEFycmF5KGNvdW50KS5maWxsKHRleHQpLmpvaW4oc2VwKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRleHQud3JpdGVyLndyYXBJbkNvbG9yKCdSZXN1bHQ6ICcsIENsaUZvcmVncm91bmRDb2xvci5ZZWxsb3cpfSR7cmVzdWx0fWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5vdXRwdXQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdyaXRlRGVzY3JpcHRpb246IChjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHdyaXRlciB9ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oJ1JlcGVhdCBhIHN0cmluZyBtdWx0aXBsZSB0aW1lcycpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbign8J+TiyBVc2FnZTonKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgICAke3dyaXRlci53cmFwSW5Db2xvcignc3RyaW5nIHJlcGVhdCA8dGV4dD4gWy0tY291bnQ9Tl0gWy0tc2VwPVNdJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCfwn5OdIEV4YW1wbGVzOicpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGAgIHN0cmluZyByZXBlYXQgaGEgLS1jb3VudD0zICAgICAgICAke3dyaXRlci53cmFwSW5Db2xvcignIyDihpIgaGFoYWhhJywgQ2xpRm9yZWdyb3VuZENvbG9yLkdyZWVuKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGAgIHN0cmluZyByZXBlYXQgYWIgLS1uPTMgLS1zZXA9LSAgICAke3dyaXRlci53cmFwSW5Db2xvcignIyDihpIgYWItYWItYWInLCBDbGlGb3JlZ3JvdW5kQ29sb3IuR3JlZW4pfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIC0tIFJlcGxhY2UgLS1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAncmVwbGFjZScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXBsYWNlIG9jY3VycmVuY2VzIGluIGEgc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdmaW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnZiddLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUZXh0IHRvIGZpbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3dpdGgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNlczogWyd3J10sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JlcGxhY2VtZW50IHRleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NDb21tYW5kOiBhc3luYyAoXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IENsaVByb2Nlc3NDb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IChjb21tYW5kLnZhbHVlIHx8IGNvbW1hbmQuZGF0YSB8fCAnJykgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kID0gY29tbWFuZC5hcmdzWydmaW5kJ10gfHwgY29tbWFuZC5hcmdzWydmJ10gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gY29tbWFuZC5hcmdzWyd3aXRoJ10gfHwgY29tbWFuZC5hcmdzWyd3J10gfHwgJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUVycm9yKCctLWZpbmQgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5leGl0KC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHQuc3BsaXQoZmluZCkuam9pbihyZXBsYWNlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcignUmVzdWx0OiAnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuWWVsbG93KX0ke3Jlc3VsdH1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnByb2Nlc3Mub3V0cHV0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cml0ZURlc2NyaXB0aW9uOiAoY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB3cml0ZXIgfSA9IGNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCdSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiBhIHN1YnN0cmluZycpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbign8J+TiyBVc2FnZTonKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgICAke3dyaXRlci53cmFwSW5Db2xvcignc3RyaW5nIHJlcGxhY2UgPHRleHQ+IC0tZmluZD08c2VhcmNoPiAtLXdpdGg9PHJlcGxhY2VtZW50PicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbign8J+TnSBFeGFtcGxlczonKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgICBzdHJpbmcgcmVwbGFjZSBcImhlbGxvIHdvcmxkXCIgLS1maW5kPXdvcmxkIC0td2l0aD10aGVyZWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJyMg4oaSIGhlbGxvIHRoZXJlJywgQ2xpRm9yZWdyb3VuZENvbG9yLkdyZWVuKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyAtLSBUcnVuY2F0ZSAtLVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICd0cnVuY2F0ZScsXG4gICAgICAgICAgICAgICAgYWxpYXNlczogWyd0cnVuYyddLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVHJ1bmNhdGUgYSBzdHJpbmcgdG8gYSBtYXggbGVuZ3RoJyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdsZW5ndGgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNlczogWydsJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ01heGltdW0gbGVuZ3RoIChkZWZhdWx0OiAzMCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzdWZmaXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdPbWlzc2lvbiBzdWZmaXggKGRlZmF1bHQ6IC4uLiknLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQ29tbWFuZDogYXN5bmMgKFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBDbGlQcm9jZXNzQ29tbWFuZCxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSAoY29tbWFuZC52YWx1ZSB8fCBjb21tYW5kLmRhdGEgfHwgJycpIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQoY29tbWFuZC5hcmdzWydsZW5ndGgnXSB8fCBjb21tYW5kLmFyZ3NbJ2wnXSkgfHwgMzA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGNvbW1hbmQuYXJnc1snc3VmZml4J10gPz8gJy4uLic7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHQubGVuZ3RoID4gbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRleHQuc3Vic3RyaW5nKDAsIGxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpICsgc3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcignUmVzdWx0OiAnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuWWVsbG93KX0ke3Jlc3VsdH1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnByb2Nlc3Mub3V0cHV0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cml0ZURlc2NyaXB0aW9uOiAoY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB3cml0ZXIgfSA9IGNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCdUcnVuY2F0ZSBhIHN0cmluZyB0byBhIG1heGltdW0gbGVuZ3RoIHdpdGggYW4gZWxsaXBzaXMnKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oJ/Cfk4sgVXNhZ2U6Jyk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ3N0cmluZyB0cnVuY2F0ZSA8dGV4dD4gWy0tbGVuZ3RoPU5dIFstLXN1ZmZpeD1TXScsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyAtLSBQYWQgLS1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAncGFkJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1BhZCBhIHN0cmluZyB0byBhIHRhcmdldCBsZW5ndGgnLFxuICAgICAgICAgICAgICAgIGFsbG93VW5saXN0ZWRDb21tYW5kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZVJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2xlbmd0aCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzOiBbJ2wnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGFyZ2V0IGxlbmd0aCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY2hhcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzOiBbJ2MnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUGFkZGluZyBjaGFyYWN0ZXIgKGRlZmF1bHQ6IHNwYWNlKScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NpZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdQYWQgc2lkZTogbGVmdCwgcmlnaHQsIGJvdGggKGRlZmF1bHQ6IGJvdGgpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0LFxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gKGNvbW1hbmQudmFsdWUgfHwgY29tbWFuZC5kYXRhIHx8ICcnKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcnNlSW50KGNvbW1hbmQuYXJnc1snbGVuZ3RoJ10gfHwgY29tbWFuZC5hcmdzWydsJ10pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyID0gY29tbWFuZC5hcmdzWydjaGFyJ10gfHwgY29tbWFuZC5hcmdzWydjJ10gfHwgJyAnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWRlID0gY29tbWFuZC5hcmdzWydzaWRlJ10gfHwgJ2JvdGgnO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihsZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUVycm9yKCctLWxlbmd0aCBpcyByZXF1aXJlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5wcm9jZXNzLmV4aXQoLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRleHQucGFkU3RhcnQobGVuZ3RoLCBjaGFyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGV4dC5wYWRFbmQobGVuZ3RoLCBjaGFyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9kYXNoLnBhZCh0ZXh0LCBsZW5ndGgsIGNoYXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRleHQud3JpdGVyLndyYXBJbkNvbG9yKCdSZXN1bHQ6ICcsIENsaUZvcmVncm91bmRDb2xvci5ZZWxsb3cpfVwiJHtyZXN1bHR9XCJgLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnByb2Nlc3Mub3V0cHV0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB3cml0ZURlc2NyaXB0aW9uOiAoY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB3cml0ZXIgfSA9IGNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCdQYWQgYSBzdHJpbmcgdG8gYSB0YXJnZXQgbGVuZ3RoJyk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCfwn5OLIFVzYWdlOicpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCdzdHJpbmcgcGFkIDx0ZXh0PiAtLWxlbmd0aD1OIFstLWNoYXI9Q10gWy0tc2lkZT1sZWZ0fHJpZ2h0fGJvdGhdJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCfwn5OdIEV4YW1wbGVzOicpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGAgIHN0cmluZyBwYWQgaGVsbG8gLS1sZW5ndGg9MTAgLS1jaGFyPS4gLS1zaWRlPXJpZ2h0YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgICAke3dyaXRlci53cmFwSW5Db2xvcignIyDihpIgXCJoZWxsby4uLi4uXCInLCBDbGlGb3JlZ3JvdW5kQ29sb3IuR3JlZW4pfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIC0tIFNwbGl0IC0tXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogJ3NwbGl0JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1NwbGl0IGEgc3RyaW5nIGJ5IGEgZGVsaW1pdGVyJyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdieScsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzOiBbJ2QnLCAnZGVsaW1pdGVyJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0RlbGltaXRlciB0byBzcGxpdCBieSAoZGVmYXVsdDogc3BhY2UpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0LFxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gKGNvbW1hbmQudmFsdWUgfHwgY29tbWFuZC5kYXRhIHx8ICcnKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGltaXRlciA9IGNvbW1hbmQuYXJnc1snYnknXSB8fCBjb21tYW5kLmFyZ3NbJ2QnXSB8fCBjb21tYW5kLmFyZ3NbJ2RlbGltaXRlciddIHx8ICcgJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgd3JpdGVyIH0gPSBjb250ZXh0O1xuXG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgICR7d3JpdGVyLndyYXBJbkNvbG9yKFN0cmluZyhpKS5wYWRTdGFydCgzKSwgQ2xpRm9yZWdyb3VuZENvbG9yLlllbGxvdyl9ICAke3BhcnR9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnByb2Nlc3Mub3V0cHV0KHBhcnRzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdyaXRlRGVzY3JpcHRpb246IChjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHdyaXRlciB9ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oJ1NwbGl0IGEgc3RyaW5nIGludG8gcGFydHMgYnkgYSBkZWxpbWl0ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oJ/Cfk4sgVXNhZ2U6Jyk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ3N0cmluZyBzcGxpdCA8dGV4dD4gWy0tYnk9PGRlbGltaXRlcj5dJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCfwn5OdIEV4YW1wbGVzOicpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGAgIHN0cmluZyBzcGxpdCBcImEsYixjXCIgLS1ieT0sICAgICAgJHt3cml0ZXIud3JhcEluQ29sb3IoJyMg4oaSIGEgIGIgIGMnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuR3JlZW4pfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIC0tIFdvcmRzIC0tXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogJ3dvcmRzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1NwbGl0IGEgc3RyaW5nIGludG8gd29yZHMnLFxuICAgICAgICAgICAgICAgIGFsbG93VW5saXN0ZWRDb21tYW5kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZVJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NDb21tYW5kOiBhc3luYyAoXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IENsaVByb2Nlc3NDb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IChjb21tYW5kLnZhbHVlIHx8IGNvbW1hbmQuZGF0YSB8fCAnJykgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3Jkczogc3RyaW5nW10gPSBsb2Rhc2gud29yZHModGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgd3JpdGVyIH0gPSBjb250ZXh0O1xuXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7d3JpdGVyLndyYXBJbkNvbG9yKGAke3dvcmRzLmxlbmd0aH0gd29yZHM6YCwgQ2xpRm9yZWdyb3VuZENvbG9yLlllbGxvdyl9ICR7d29yZHMuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnByb2Nlc3Mub3V0cHV0KHdvcmRzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdyaXRlRGVzY3JpcHRpb246IChjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHdyaXRlciB9ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oJ1NwbGl0IGEgc3RyaW5nIGludG8gaXRzIGNvbXBvbmVudCB3b3JkcycpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbign8J+TiyBVc2FnZTonKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgICAke3dyaXRlci53cmFwSW5Db2xvcignc3RyaW5nIHdvcmRzIDx0ZXh0PicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbign8J+TnSBFeGFtcGxlczonKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgICBzdHJpbmcgd29yZHMgXCJoZWxsb1dvcmxkXCIgICAgICAgICAke3dyaXRlci53cmFwSW5Db2xvcignIyDihpIgaGVsbG8sIFdvcmxkJywgQ2xpRm9yZWdyb3VuZENvbG9yLkdyZWVuKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGAgIHN0cmluZyB3b3JkcyBcImZvby1iYXJfYmF6XCIgICAgICAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCcjIOKGkiBmb28sIGJhciwgYmF6JywgQ2xpRm9yZWdyb3VuZENvbG9yLkdyZWVuKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyAtLSBBbmFseXNpcyAtLVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdsZW5ndGgnLFxuICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnbGVuJ10sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGxlbmd0aCBvZiBhIHN0cmluZycsXG4gICAgICAgICAgICAgICAgYWxsb3dVbmxpc3RlZENvbW1hbmRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0LFxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gKGNvbW1hbmQudmFsdWUgfHwgY29tbWFuZC5kYXRhIHx8ICcnKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcignUmVzdWx0OiAnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuWWVsbG93KX0ke3RleHQubGVuZ3RofWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5vdXRwdXQodGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3JpdGVEZXNjcmlwdGlvbjogKGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgd3JpdGVyIH0gPSBjb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbignR2V0IHRoZSBjaGFyYWN0ZXIgY291bnQgb2YgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oJ/Cfk4sgVXNhZ2U6Jyk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ3N0cmluZyBsZW5ndGggPHRleHQ+JywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogJ3djJyxcbiAgICAgICAgICAgICAgICBhbGlhc2VzOiBbJ3dvcmRjb3VudCcsICdjb3VudCddLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ291bnQgbGluZXMsIHdvcmRzLCBjaGFyYWN0ZXJzLCBhbmQgYnl0ZXMnLFxuICAgICAgICAgICAgICAgIGFsbG93VW5saXN0ZWRDb21tYW5kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZVJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NDb21tYW5kOiBhc3luYyAoXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IENsaVByb2Nlc3NDb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IChjb21tYW5kLnZhbHVlIHx8IGNvbW1hbmQuZGF0YSB8fCAnJykgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHdyaXRlciB9ID0gY29udGV4dDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoL1xccj9cXG4vKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRDb3VudCA9IHRleHQudHJpbSgpID8gdGV4dC50cmltKCkuc3BsaXQoL1xccysvKS5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFycyA9IHRleHQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0ZXh0KS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgICAke3dyaXRlci53cmFwSW5Db2xvcignTGluZXM6JywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAgICAgICAke2xpbmVzfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ1dvcmRzOicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gICAgICAgJHt3b3JkQ291bnR9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgICAke3dyaXRlci53cmFwSW5Db2xvcignQ2hhcmFjdGVyczonLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9ICAke2NoYXJzfWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ0J5dGVzOicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gICAgICAgJHtieXRlc31gLFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5vdXRwdXQoeyBsaW5lcywgd29yZHM6IHdvcmRDb3VudCwgY2hhcnMsIGJ5dGVzIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3JpdGVEZXNjcmlwdGlvbjogKGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgd3JpdGVyIH0gPSBjb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbignQ291bnQgbGluZXMsIHdvcmRzLCBjaGFyYWN0ZXJzLCBhbmQgYnl0ZXMgaW4gdGV4dCcpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbign8J+TiyBVc2FnZTonKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgICAke3dyaXRlci53cmFwSW5Db2xvcignc3RyaW5nIHdjIDx0ZXh0PicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdpbmNsdWRlcycsXG4gICAgICAgICAgICAgICAgYWxpYXNlczogWydjb250YWlucycsICdoYXMnXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIGEgc3RyaW5nIGNvbnRhaW5zIGEgc3Vic3RyaW5nJyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdmaW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnZiddLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTdWJzdHJpbmcgdG8gc2VhcmNoIGZvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0LFxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gKGNvbW1hbmQudmFsdWUgfHwgY29tbWFuZC5kYXRhIHx8ICcnKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmQgPSBjb21tYW5kLmFyZ3NbJ2ZpbmQnXSB8fCBjb21tYW5kLmFyZ3NbJ2YnXSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dC5pbmNsdWRlcyhmaW5kKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB3cml0ZXIgfSA9IGNvbnRleHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlU3VjY2VzcyhgXCIke2ZpbmR9XCIgZm91bmQgaW4gc3RyaW5nYCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVFcnJvcihgXCIke2ZpbmR9XCIgbm90IGZvdW5kIGluIHN0cmluZ2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5vdXRwdXQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdyaXRlRGVzY3JpcHRpb246IChjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHdyaXRlciB9ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oJ0NoZWNrIGlmIGEgc3RyaW5nIGNvbnRhaW5zIGEgZ2l2ZW4gc3Vic3RyaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKCfwn5OLIFVzYWdlOicpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCdzdHJpbmcgaW5jbHVkZXMgPHRleHQ+IC0tZmluZD08c3Vic3RyaW5nPicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdzdGFydHNXaXRoJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgcHJlZml4JyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdmaW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnZiddLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdQcmVmaXggdG8gY2hlY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NDb21tYW5kOiBhc3luYyAoXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IENsaVByb2Nlc3NDb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IChjb21tYW5kLnZhbHVlIHx8IGNvbW1hbmQuZGF0YSB8fCAnJykgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kID0gY29tbWFuZC5hcmdzWydmaW5kJ10gfHwgY29tbWFuZC5hcmdzWydmJ10gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHQuc3RhcnRzV2l0aChmaW5kKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB3cml0ZXIgfSA9IGNvbnRleHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHt3cml0ZXIud3JhcEluQ29sb3IoJ1Jlc3VsdDogJywgQ2xpRm9yZWdyb3VuZENvbG9yLlllbGxvdyl9JHtyZXN1bHR9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5wcm9jZXNzLm91dHB1dChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3JpdGVEZXNjcmlwdGlvbjogKGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgd3JpdGVyIH0gPSBjb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbignQ2hlY2sgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggYSBnaXZlbiBwcmVmaXgnKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oJ/Cfk4sgVXNhZ2U6Jyk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ3N0cmluZyBzdGFydHNXaXRoIDx0ZXh0PiAtLWZpbmQ9PHByZWZpeD4nLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAnZW5kc1dpdGgnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgYSBzdHJpbmcgZW5kcyB3aXRoIGEgc3VmZml4JyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWVSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdmaW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnZiddLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTdWZmaXggdG8gY2hlY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NDb21tYW5kOiBhc3luYyAoXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IENsaVByb2Nlc3NDb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IChjb21tYW5kLnZhbHVlIHx8IGNvbW1hbmQuZGF0YSB8fCAnJykgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kID0gY29tbWFuZC5hcmdzWydmaW5kJ10gfHwgY29tbWFuZC5hcmdzWydmJ10gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHQuZW5kc1dpdGgoZmluZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgd3JpdGVyIH0gPSBjb250ZXh0O1xuXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7d3JpdGVyLndyYXBJbkNvbG9yKCdSZXN1bHQ6ICcsIENsaUZvcmVncm91bmRDb2xvci5ZZWxsb3cpfSR7cmVzdWx0fWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5vdXRwdXQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdyaXRlRGVzY3JpcHRpb246IChjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHdyaXRlciB9ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oJ0NoZWNrIGlmIGEgc3RyaW5nIGVuZHMgd2l0aCBhIGdpdmVuIHN1ZmZpeCcpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVsbign8J+TiyBVc2FnZTonKTtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgICAke3dyaXRlci53cmFwSW5Db2xvcignc3RyaW5nIGVuZHNXaXRoIDx0ZXh0PiAtLWZpbmQ9PHN1ZmZpeD4nLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBhc3luYyBwcm9jZXNzQ29tbWFuZChcbiAgICAgICAgY29tbWFuZDogQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgICAgIGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0LFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb250ZXh0LmV4ZWN1dG9yLnNob3dIZWxwKGNvbW1hbmQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHdyaXRlRGVzY3JpcHRpb24oY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB3cml0ZXIgfSA9IGNvbnRleHQ7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKCdTdHJpbmcgbWFuaXB1bGF0aW9uIGFuZCBhbmFseXNpcyBjb21tYW5kcycpO1xuICAgICAgICB3cml0ZXIud3JpdGVsbigpO1xuICAgICAgICB3cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgIHdyaXRlci53cmFwSW5Db2xvcign8J+UoCBDYXNlIENvbnZlcnNpb25zOicsIENsaUZvcmVncm91bmRDb2xvci5ZZWxsb3cpLFxuICAgICAgICApO1xuICAgICAgICB3cml0ZXIud3JpdGVsbihgICAke3dyaXRlci53cmFwSW5Db2xvcignc3RyaW5nIHVwcGVyJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAvICR7d3JpdGVyLndyYXBJbkNvbG9yKCdsb3dlcicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gLyAke3dyaXRlci53cmFwSW5Db2xvcignY2FwaXRhbGl6ZScsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX1gKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ3N0cmluZyBjYW1lbENhc2UnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9IC8gJHt3cml0ZXIud3JhcEluQ29sb3IoJ2tlYmFiQ2FzZScsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gLyAke3dyaXRlci53cmFwSW5Db2xvcignc25ha2VDYXNlJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAvICR7d3JpdGVyLndyYXBJbkNvbG9yKCdzdGFydENhc2UnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9YCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgd3JpdGVyLndyYXBJbkNvbG9yKCfwn5SnIFRyYW5zZm9ybTonLCBDbGlGb3JlZ3JvdW5kQ29sb3IuWWVsbG93KSxcbiAgICAgICAgKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ3N0cmluZyByZXZlcnNlJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAvICR7d3JpdGVyLndyYXBJbkNvbG9yKCd0cmltJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAvICR7d3JpdGVyLndyYXBJbkNvbG9yKCdzbHVnJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAvICR7d3JpdGVyLndyYXBJbkNvbG9yKCdyZXBlYXQnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9IC8gJHt3cml0ZXIud3JhcEluQ29sb3IoJ3JlcGxhY2UnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9IC8gJHt3cml0ZXIud3JhcEluQ29sb3IoJ3RydW5jYXRlJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfWApO1xuICAgICAgICB3cml0ZXIud3JpdGVsbihgICAke3dyaXRlci53cmFwSW5Db2xvcignc3RyaW5nIHBhZCcsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gLyAke3dyaXRlci53cmFwSW5Db2xvcignZXNjYXBlJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAvICR7d3JpdGVyLndyYXBJbkNvbG9yKCd1bmVzY2FwZScsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX1gKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICB3cml0ZXIud3JhcEluQ29sb3IoJ/CflI0gQW5hbHlzaXM6JywgQ2xpRm9yZWdyb3VuZENvbG9yLlllbGxvdyksXG4gICAgICAgICk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCdzdHJpbmcgbGVuZ3RoJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAvICR7d3JpdGVyLndyYXBJbkNvbG9yKCd3YycsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gLyAke3dyaXRlci53cmFwSW5Db2xvcignaW5jbHVkZXMnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9IC8gJHt3cml0ZXIud3JhcEluQ29sb3IoJ3N0YXJ0c1dpdGgnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9IC8gJHt3cml0ZXIud3JhcEluQ29sb3IoJ2VuZHNXaXRoJywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfWApO1xuICAgICAgICB3cml0ZXIud3JpdGVsbihgICAke3dyaXRlci53cmFwSW5Db2xvcignc3RyaW5nIHNwbGl0JywgQ2xpRm9yZWdyb3VuZENvbG9yLkN5YW4pfSAvICR7d3JpdGVyLndyYXBJbkNvbG9yKCd3b3JkcycsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX1gKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oJ/Cfk50gRXhhbXBsZXM6Jyk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGAgIHN0cmluZyBjYW1lbENhc2UgXCJoZWxsbyB3b3JsZFwiICAgICAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCcjIOKGkiBoZWxsb1dvcmxkJywgQ2xpRm9yZWdyb3VuZENvbG9yLkdyZWVuKX1gKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oYCAgc3RyaW5nIHJldmVyc2UgSGVsbG8gICAgICAgICAgICAgICAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCcjIOKGkiBvbGxlSCcsIENsaUZvcmVncm91bmRDb2xvci5HcmVlbil9YCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGAgIHN0cmluZyBzbHVnIFwiSGVsbG8gV29ybGQhXCIgICAgICAgICAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCcjIOKGkiBoZWxsby13b3JsZCcsIENsaUZvcmVncm91bmRDb2xvci5HcmVlbil9YCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGAgIHN0cmluZyB3YyBcInNvbWUgdGV4dCBoZXJlXCIgICAgICAgICAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCcjIHdvcmQvY2hhciBjb3VudHMnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuR3JlZW4pfWApO1xuICAgIH1cbn1cbiJdfQ==