@cichol/logger 5.4.4 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dists/index.js +39 -37
- package/package.json +9 -17
- package/dists/index.cjs +0 -558
- package/dists/index.d.cts +0 -208
package/dists/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import * as winston from 'winston';
|
|
|
11
11
|
import { format } from 'winston';
|
|
12
12
|
import _findInstanceProperty from 'core-js-pure/features/instance/find.js';
|
|
13
13
|
import _Reflect$apply from 'core-js-pure/features/reflect/apply.js';
|
|
14
|
-
import
|
|
14
|
+
import { bgRgb24, rgb24, bold, blue, gray, underline, red, magenta, green } from '@std/fmt/colors';
|
|
15
15
|
import rTracer from 'cls-rtracer';
|
|
16
16
|
import { DateTime } from 'luxon';
|
|
17
17
|
import _Map from 'core-js-pure/features/map/index.js';
|
|
@@ -23,9 +23,9 @@ import _startsWithInstanceProperty from 'core-js-pure/features/instance/starts-w
|
|
|
23
23
|
import _includesInstanceProperty from 'core-js-pure/features/instance/includes.js';
|
|
24
24
|
import _lastIndexOfInstanceProperty from 'core-js-pure/features/instance/last-index-of.js';
|
|
25
25
|
import path from 'path';
|
|
26
|
-
import highlight from 'cli-highlight';
|
|
27
|
-
import
|
|
28
|
-
import
|
|
26
|
+
import { highlight } from 'cli-highlight';
|
|
27
|
+
import { format as format$1 } from '@std/fmt/bytes';
|
|
28
|
+
import { format as format$2 } from '@std/fmt/duration';
|
|
29
29
|
import cluster from 'cluster';
|
|
30
30
|
import 'worker_threads';
|
|
31
31
|
|
|
@@ -46,13 +46,15 @@ const LoggingLevel = {
|
|
|
46
46
|
Debug: 5
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
+
// Type definitions.
|
|
50
|
+
|
|
49
51
|
// Constants.
|
|
50
52
|
const colorizerMap = new _Map();
|
|
51
53
|
|
|
52
54
|
// Helpers.
|
|
53
55
|
function createScheme(options) {
|
|
54
56
|
const nextIndex = colorizerMap.size;
|
|
55
|
-
const colorizer =
|
|
57
|
+
const colorizer = string => bgRgb24(rgb24(string, options.foreground), options.background);
|
|
56
58
|
colorizerMap.set(nextIndex, colorizer);
|
|
57
59
|
return nextIndex;
|
|
58
60
|
}
|
|
@@ -60,15 +62,15 @@ function createScheme(options) {
|
|
|
60
62
|
// Color definitions.
|
|
61
63
|
const ColorValue = {
|
|
62
64
|
// Basic colors.
|
|
63
|
-
White:
|
|
64
|
-
Gray:
|
|
65
|
-
Black:
|
|
65
|
+
White: 0xFFFFFF,
|
|
66
|
+
Gray: 0x808080,
|
|
67
|
+
Black: 0x000000,
|
|
66
68
|
// Specialized colors.
|
|
67
|
-
Critical:
|
|
68
|
-
Warning:
|
|
69
|
-
Regular:
|
|
70
|
-
Http:
|
|
71
|
-
Query:
|
|
69
|
+
Critical: 0xD63031,
|
|
70
|
+
Warning: 0xFDCB6E,
|
|
71
|
+
Regular: 0x0984E3,
|
|
72
|
+
Http: 0x6AB04C,
|
|
73
|
+
Query: 0x399AF3
|
|
72
74
|
};
|
|
73
75
|
const ColorScheme = {
|
|
74
76
|
Critical: createScheme({
|
|
@@ -97,7 +99,7 @@ const ColorScheme = {
|
|
|
97
99
|
})
|
|
98
100
|
};
|
|
99
101
|
function getChalkOf(colorSet) {
|
|
100
|
-
return colorizerMap.get(colorSet) ??
|
|
102
|
+
return colorizerMap.get(colorSet) ?? (string => string);
|
|
101
103
|
}
|
|
102
104
|
|
|
103
105
|
// Node.js built-in APIs.
|
|
@@ -109,8 +111,8 @@ const {
|
|
|
109
111
|
const isNotOnCLI = !isTTY;
|
|
110
112
|
function decorateLabel(label, scheme) {
|
|
111
113
|
if (isNotOnCLI) return label;
|
|
112
|
-
const
|
|
113
|
-
const decoratedLabel =
|
|
114
|
+
const colorize = getChalkOf(scheme);
|
|
115
|
+
const decoratedLabel = bold(colorize(` ${label} `));
|
|
114
116
|
return decoratedLabel;
|
|
115
117
|
}
|
|
116
118
|
|
|
@@ -118,7 +120,7 @@ function decorateLabel(label, scheme) {
|
|
|
118
120
|
|
|
119
121
|
// Constants.
|
|
120
122
|
const rootPath = process.cwd();
|
|
121
|
-
const conjunction = ` ${
|
|
123
|
+
const conjunction = ` ${blue('──')} `;
|
|
122
124
|
const splat = _Symbol$for('splat');
|
|
123
125
|
|
|
124
126
|
// Handler metadata.
|
|
@@ -142,11 +144,11 @@ function isAbsoluteOrDataURI(filename) {
|
|
|
142
144
|
function mapLocationOfErrorThrown(filename) {
|
|
143
145
|
let target = path.relative(rootPath, filename);
|
|
144
146
|
if (isDataURI(filename)) {
|
|
145
|
-
target =
|
|
147
|
+
target = gray(simplifyDataURI(filename));
|
|
146
148
|
} else if (_includesInstanceProperty(target).call(target, 'node_modules')) {
|
|
147
|
-
target =
|
|
149
|
+
target = gray(_sliceInstanceProperty(target).call(target, _lastIndexOfInstanceProperty(target).call(target, 'node_modules'))).replace(/node_modules[\\/]((?:@[^\\/]+[\\/])?[^\\/]+)(.*)/, (_, moduleName, trailing) => `node_modules${path.sep}${bold(underline(moduleName))}${gray(trailing)}`);
|
|
148
150
|
} else {
|
|
149
|
-
target = `${
|
|
151
|
+
target = `${gray(path.dirname(target) + path.sep)}${bold(underline(path.basename(target)))}`;
|
|
150
152
|
}
|
|
151
153
|
return target;
|
|
152
154
|
}
|
|
@@ -168,18 +170,18 @@ function handle$1(data) {
|
|
|
168
170
|
switch (true) {
|
|
169
171
|
case rawLocation === '<anonymous>':
|
|
170
172
|
{
|
|
171
|
-
location =
|
|
173
|
+
location = gray(rawLocation);
|
|
172
174
|
break;
|
|
173
175
|
}
|
|
174
176
|
case isDataURI(rawLocation):
|
|
175
177
|
{
|
|
176
|
-
location =
|
|
178
|
+
location = gray(simplifyDataURI(rawLocation));
|
|
177
179
|
break;
|
|
178
180
|
}
|
|
179
181
|
case _startsWithInstanceProperty(rawLocation).call(rawLocation, 'node:'):
|
|
180
182
|
{
|
|
181
183
|
const [filename, occurredLine] = _sliceInstanceProperty(rawLocation).call(rawLocation, 5).split(':');
|
|
182
|
-
location =
|
|
184
|
+
location = gray(`https://github.com/${bold(underline('nodejs'))}/node/blob/${version}/lib/${filename}.js#L${occurredLine}`);
|
|
183
185
|
break;
|
|
184
186
|
}
|
|
185
187
|
default:
|
|
@@ -187,7 +189,7 @@ function handle$1(data) {
|
|
|
187
189
|
const [filename, occurredLine, occurredColumn] = rawLocation.split(':');
|
|
188
190
|
if (!path.isAbsolute(filename)) break;
|
|
189
191
|
const target = mapLocationOfErrorThrown(path.relative(rootPath, filename));
|
|
190
|
-
const trailing =
|
|
192
|
+
const trailing = gray(`:${occurredLine}:${occurredColumn}`);
|
|
191
193
|
location = target + trailing;
|
|
192
194
|
}
|
|
193
195
|
}
|
|
@@ -351,7 +353,7 @@ var DebugHandler = /*#__PURE__*/Object.freeze({
|
|
|
351
353
|
const handlers = [FatalHandler, ErrorHandler, WarningHandler, NoticeHandler, InfoHandler, HttpHandler, QueryHandler, VerboseHandler, DebugHandler];
|
|
352
354
|
|
|
353
355
|
var formatForCLI = format.printf(data => {
|
|
354
|
-
const timestamp =
|
|
356
|
+
const timestamp = gray(DateTime.now().toISO({
|
|
355
357
|
includeOffset: true
|
|
356
358
|
}));
|
|
357
359
|
const handler = _findInstanceProperty(handlers).call(handlers, ({
|
|
@@ -401,24 +403,24 @@ function decorateStatusCode(statusCode) {
|
|
|
401
403
|
switch (groupOfCode) {
|
|
402
404
|
case 200:
|
|
403
405
|
{
|
|
404
|
-
return
|
|
406
|
+
return green(baseMessage);
|
|
405
407
|
}
|
|
406
408
|
case 300:
|
|
407
409
|
{
|
|
408
|
-
return
|
|
410
|
+
return magenta(baseMessage);
|
|
409
411
|
}
|
|
410
412
|
case 400:
|
|
411
413
|
case 500:
|
|
412
414
|
{
|
|
413
|
-
return
|
|
415
|
+
return red(baseMessage);
|
|
414
416
|
}
|
|
415
417
|
default:
|
|
416
418
|
{
|
|
417
|
-
return
|
|
419
|
+
return gray(baseMessage);
|
|
418
420
|
}
|
|
419
421
|
}
|
|
420
422
|
}
|
|
421
|
-
function formatForMorgan
|
|
423
|
+
function formatForMorgan(tokens, request, response) {
|
|
422
424
|
function _(token, ...subArgs) {
|
|
423
425
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
424
426
|
return tokens[token](request, response, ...subArgs);
|
|
@@ -433,17 +435,17 @@ function formatForMorgan$1(tokens, request, response) {
|
|
|
433
435
|
const responseTime = Number(_('response-time') ?? -1);
|
|
434
436
|
|
|
435
437
|
// Decorated values.
|
|
436
|
-
const $method =
|
|
437
|
-
const $version =
|
|
438
|
+
const $method = bold(method ?? '');
|
|
439
|
+
const $version = rgb24(httpVersion, 0x62B1FF);
|
|
438
440
|
const $statusCode = decorateStatusCode(statusCode);
|
|
439
|
-
const $contentLength = contentLength >= 0 ?
|
|
440
|
-
const $responseTime = responseTime >= 0 ?
|
|
441
|
+
const $contentLength = contentLength >= 0 ? format$1(contentLength) : '? B';
|
|
442
|
+
const $responseTime = responseTime >= 0 ? format$2(responseTime) : '';
|
|
441
443
|
|
|
442
444
|
// Additional information.
|
|
443
445
|
const metadata = `(${$contentLength}, ${$responseTime})`;
|
|
444
446
|
return [`→ ${$method} ${URL} ${$version}`, `← ${$version} ${$statusCode} ${metadata}`].join('\n');
|
|
445
447
|
}
|
|
446
|
-
var formatForMorgan = executionMode === ExecutionMode.DevelopmentMode ? formatForMorgan
|
|
448
|
+
var formatForMorgan$1 = executionMode === ExecutionMode.DevelopmentMode ? formatForMorgan : morgan.combined;
|
|
447
449
|
|
|
448
450
|
var _context;
|
|
449
451
|
|
|
@@ -466,7 +468,7 @@ class Logger {
|
|
|
466
468
|
})],
|
|
467
469
|
exitOnError: false
|
|
468
470
|
});
|
|
469
|
-
#morgan = morgan(formatForMorgan, {
|
|
471
|
+
#morgan = morgan(formatForMorgan$1, {
|
|
470
472
|
stream: new PassThrough({
|
|
471
473
|
objectMode: true
|
|
472
474
|
}).on('data', data => {
|
|
@@ -535,4 +537,4 @@ class Logger {
|
|
|
535
537
|
var logger = _Reflect$construct(Logger, [], Logger);
|
|
536
538
|
|
|
537
539
|
export { logger as default };
|
|
538
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZXMvaGVscGVycy9sb2dnaW5nLWxldmVsLnRzIiwiLi4vc291cmNlcy9oZWxwZXJzL2NvbG9yLXNjaGVtZS50cyIsIi4uL3NvdXJjZXMvaGVscGVycy9sYWJlbC1kZWNvcmF0b3IudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL2Vycm9yLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9mYXRhbC50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvd2FybmluZy50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvbm90aWNlLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9pbmZvLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9odHRwLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9xdWVyeS50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvdmVyYm9zZS50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvZGVidWcudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL2luZGV4LnRzIiwiLi4vc291cmNlcy9mb3JtYXR0ZXJzL2NvbW1hbmQtbGluZS50cyIsIi4uL3NvdXJjZXMvaGVscGVycy9jb25zdGFudHMudHMiLCIuLi9zb3VyY2VzL2Zvcm1hdHRlcnMvbW9yZ2FuLnRzIiwiLi4vc291cmNlcy9jbGFzc2VzL2xvZ2dlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBMb2dnaW5nTGV2ZWwgPSB7XG5cdC8vIENyaXRpY2FsIGxldmVscy4gKEl0IHdpbGwgY3Jhc2ggdGhlIHByb2Nlc3MpXG5cdEZhdGFsOiAwLFxuXHRFcnJvcjogMSxcblxuXHQvLyBXYXJuaW5nIGxldmVscy4gKEl0IGp1c3QgcmVwb3J0IHdhcm5pbmcgaW5mb3JtYXRpb24sIG5vdCBjcmFzaCB0aGUgcHJvY2Vzcylcblx0V2FybmluZzogMixcblxuXHQvLyBSZWd1bGFyIGxldmVsIGFuZCBhbGlhc2VzLlxuXHROb3RpY2U6IDMsXG5cdEluZm86IDMsXG5cblx0Ly8gTWF5YmUgc2Vuc2l0aXZlIGxldmVscy4gKEluIGdlbmVyYWwsIGRvZXMgbm90IHVzZWZ1bClcblx0SHR0cDogNCxcblx0UXVlcnk6IDQsXG5cblx0Ly8gTG91ZCBsZXZlbHMuXG5cdFZlcmJvc2U6IDUsXG5cdERlYnVnOiA1LFxufSBhcyBjb25zdFxuXG50eXBlIExvZ2dpbmdMZXZlbCA9IHR5cGVvZiBMb2dnaW5nTGV2ZWxba2V5b2YgdHlwZW9mIExvZ2dpbmdMZXZlbF1cblxuZXhwb3J0IGRlZmF1bHQgTG9nZ2luZ0xldmVsXG4iLCIvLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrLCB7IHR5cGUgQ2hhbGtJbnN0YW5jZSB9IGZyb20gJ2NoYWxrJ1xuXG4vLyBDb25zdGFudHMuXG5jb25zdCBjb2xvcml6ZXJNYXAgPSBuZXcgTWFwPG51bWJlciwgQ2hhbGtJbnN0YW5jZT4oKVxuXG4vLyBIZWxwZXJzLlxuZnVuY3Rpb24gY3JlYXRlU2NoZW1lKG9wdGlvbnM6IHsgYmFja2dyb3VuZDogQ29sb3JWYWx1ZSwgZm9yZWdyb3VuZDogQ29sb3JWYWx1ZSB9KTogbnVtYmVyIHtcblx0Y29uc3QgbmV4dEluZGV4ID0gY29sb3JpemVyTWFwLnNpemVcblx0Y29uc3QgY29sb3JpemVyID0gY2hhbGsuYmdIZXgob3B0aW9ucy5iYWNrZ3JvdW5kKS5oZXgob3B0aW9ucy5mb3JlZ3JvdW5kKVxuXG5cdGNvbG9yaXplck1hcC5zZXQobmV4dEluZGV4LCBjb2xvcml6ZXIpXG5cblx0cmV0dXJuIG5leHRJbmRleFxufVxuXG4vLyBDb2xvciBkZWZpbml0aW9ucy5cbmNvbnN0IENvbG9yVmFsdWUgPSB7XG5cdC8vIEJhc2ljIGNvbG9ycy5cblx0V2hpdGU6ICcjRkZGRkZGJyxcblx0R3JheTogJyM4MDgwODAnLFxuXHRCbGFjazogJyMwMDAwMDAnLFxuXG5cdC8vIFNwZWNpYWxpemVkIGNvbG9ycy5cblx0Q3JpdGljYWw6ICcjRDYzMDMxJyxcblx0V2FybmluZzogJyNGRENCNkUnLFxuXHRSZWd1bGFyOiAnIzA5ODRFMycsXG5cdEh0dHA6ICcjNkFCMDRDJyxcblx0UXVlcnk6ICcjMzk5QUYzJyxcbn0gYXMgY29uc3RcblxudHlwZSBDb2xvclZhbHVlID0gdHlwZW9mIENvbG9yVmFsdWVba2V5b2YgdHlwZW9mIENvbG9yVmFsdWVdXG5cbmNvbnN0IENvbG9yU2NoZW1lID0ge1xuXHRDcml0aWNhbDogY3JlYXRlU2NoZW1lKHtcblx0XHRiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLkNyaXRpY2FsLFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuQmxhY2ssXG5cdH0pLFxuXG5cdFdhcm5pbmc6IGNyZWF0ZVNjaGVtZSh7XG5cdFx0YmFja2dyb3VuZDogQ29sb3JWYWx1ZS5XYXJuaW5nLFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuQmxhY2ssXG5cdH0pLFxuXG5cdFJlZ3VsYXI6IGNyZWF0ZVNjaGVtZSh7XG5cdFx0YmFja2dyb3VuZDogQ29sb3JWYWx1ZS5SZWd1bGFyLFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuV2hpdGUsXG5cdH0pLFxuXG5cdEh0dHA6IGNyZWF0ZVNjaGVtZSh7XG5cdFx0YmFja2dyb3VuZDogQ29sb3JWYWx1ZS5IdHRwLFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuQmxhY2ssXG5cdH0pLFxuXG5cdFF1ZXJ5OiBjcmVhdGVTY2hlbWUoe1xuXHRcdGJhY2tncm91bmQ6IENvbG9yVmFsdWUuUXVlcnksXG5cdFx0Zm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5CbGFjayxcblx0fSksXG5cblx0TG91ZDogY3JlYXRlU2NoZW1lKHtcblx0XHRiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLkJsYWNrLFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuR3JheSxcblx0fSksXG59IGFzIGNvbnN0XG5cbnR5cGUgQ29sb3JTY2hlbWUgPSB0eXBlb2YgQ29sb3JTY2hlbWVba2V5b2YgdHlwZW9mIENvbG9yU2NoZW1lXVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbGtPZihjb2xvclNldDogQ29sb3JTY2hlbWUpOiBDaGFsa0luc3RhbmNlIHtcblx0cmV0dXJuIGNvbG9yaXplck1hcC5nZXQoY29sb3JTZXQpID8/IGNoYWxrXG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU2NoZW1lXG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdwcm9jZXNzJ1xuXG4vLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IENvbG9yU2NoZW1lLCB7IGdldENoYWxrT2YgfSBmcm9tICcuL2NvbG9yLXNjaGVtZSdcblxuLy8gQ29uc3RhbnRzLlxuY29uc3QgeyBpc1RUWSB9ID0gcHJvY2Vzcy5zdGRvdXRcbmNvbnN0IGlzTm90T25DTEkgPSAhaXNUVFlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVjb3JhdGVMYWJlbDxUIGV4dGVuZHMgc3RyaW5nPihsYWJlbDogVCwgc2NoZW1lOiBDb2xvclNjaGVtZSk6IFQge1xuXHRpZiAoaXNOb3RPbkNMSSkgcmV0dXJuIGxhYmVsXG5cblx0Y29uc3QgY2hhbGsgPSBnZXRDaGFsa09mKHNjaGVtZSlcblx0Y29uc3QgZGVjb3JhdGVkTGFiZWwgPSBjaGFsay5ib2xkKGAgJHtsYWJlbH0gYClcblxuXHRyZXR1cm4gZGVjb3JhdGVkTGFiZWwgYXMgVFxufVxuIiwiLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBwcm9jZXNzLCB7IHZlcnNpb24gfSBmcm9tICdwcm9jZXNzJ1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuXG4vLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbnR5cGUgTG9nZ2luZ0RhdGEgPSB7IGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9ICYgUmVjb3JkPFByb3BlcnR5S2V5LCBhbnk+XG50eXBlIEhhbmRsZWREYXRhID0geyBsYWJlbDogc3RyaW5nLCBwYXlsb2FkOiBzdHJpbmcgfVxuXG4vLyBDb25zdGFudHMuXG5jb25zdCByb290UGF0aCA9IHByb2Nlc3MuY3dkKClcbmNvbnN0IGNvbmp1bmN0aW9uID0gYCAke2NoYWxrLmJsdWUoJ+KUgOKUgCcpfSBgXG5jb25zdCBzcGxhdDogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbC5mb3IoJ3NwbGF0JylcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2Vycm9yJ1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLkVycm9yXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdFUlJPUicsIENvbG9yU2NoZW1lLkNyaXRpY2FsKVxuXG5mdW5jdGlvbiBzaW1wbGlmeURhdGFVUkkoZGF0YVVSSTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgWyAsIGFjdHVhbENvbnRlbnQgXSA9IGRhdGFVUkkuc3BsaXQoJzonKVxuXHRjb25zdCBwaXZvdCA9IGFjdHVhbENvbnRlbnQuaW5kZXhPZignLCcpICsgMVxuXHRjb25zdCBtaW1lSW5kaWNhdG9yID0gYWN0dWFsQ29udGVudC5zbGljZSgwLCBwaXZvdClcblx0Y29uc3QgY29udGVudFByZWZpeCA9IGFjdHVhbENvbnRlbnQuc2xpY2UocGl2b3QsIHBpdm90ICsgNClcblx0Y29uc3QgY29udGVudFN1ZmZpeCA9IGFjdHVhbENvbnRlbnQuc2xpY2UoLTQpXG5cblx0cmV0dXJuIGBkYXRhOiR7bWltZUluZGljYXRvciArIGNvbnRlbnRQcmVmaXh9Li4uJHtjb250ZW50U3VmZml4fWBcbn1cblxuZnVuY3Rpb24gaXNEYXRhVVJJKGZpbGVuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0cmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoJ2RhdGE6Jylcbn1cblxuZnVuY3Rpb24gaXNBYnNvbHV0ZU9yRGF0YVVSSShmaWxlbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdHJldHVybiBwYXRoLmlzQWJzb2x1dGUoZmlsZW5hbWUpIHx8IGlzRGF0YVVSSShmaWxlbmFtZSlcbn1cblxuZnVuY3Rpb24gbWFwTG9jYXRpb25PZkVycm9yVGhyb3duKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgdGFyZ2V0ID0gcGF0aC5yZWxhdGl2ZShyb290UGF0aCwgZmlsZW5hbWUpXG5cblx0aWYgKGlzRGF0YVVSSShmaWxlbmFtZSkpIHtcblx0XHR0YXJnZXQgPSBjaGFsay5ncmF5KHNpbXBsaWZ5RGF0YVVSSShmaWxlbmFtZSkpXG5cdH0gZWxzZSBpZiAodGFyZ2V0LmluY2x1ZGVzKCdub2RlX21vZHVsZXMnKSkge1xuXHRcdHRhcmdldCA9IGNoYWxrLmdyYXkoXG5cdFx0XHR0YXJnZXQuc2xpY2UodGFyZ2V0Lmxhc3RJbmRleE9mKCdub2RlX21vZHVsZXMnKSksXG5cdFx0KS5yZXBsYWNlKFxuXHRcdFx0L25vZGVfbW9kdWxlc1tcXFxcL10oKD86QFteXFxcXC9dK1tcXFxcL10pP1teXFxcXC9dKykoLiopLyxcblx0XHRcdChfLCBtb2R1bGVOYW1lOiBzdHJpbmcsIHRyYWlsaW5nOiBzdHJpbmcpID0+IChcblx0XHRcdFx0YG5vZGVfbW9kdWxlcyR7cGF0aC5zZXB9JHtjaGFsay5ib2xkLnVuZGVybGluZShtb2R1bGVOYW1lKX0ke2NoYWxrLmdyYXkodHJhaWxpbmcpfWBcblx0XHRcdCksXG5cdFx0KVxuXHR9IGVsc2Uge1xuXHRcdHRhcmdldCA9IGAke2NoYWxrLmdyYXkocGF0aC5kaXJuYW1lKHRhcmdldCkgKyBwYXRoLnNlcCl9JHtjaGFsay5ib2xkLnVuZGVybGluZShwYXRoLmJhc2VuYW1lKHRhcmdldCkpfWBcblx0fVxuXG5cdHJldHVybiB0YXJnZXRcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFuZGxlKGRhdGE6IExvZ2dpbmdEYXRhKTogSGFuZGxlZERhdGEgfCB1bmRlZmluZWQge1xuXHRjb25zdCB7IFtzcGxhdF06IFsgZXJyb3IgXSA9IFtdIH0gPSBkYXRhIGFzIGFueVxuXG5cdGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cblx0Y29uc3QgeyBuYW1lOiBlcnJvck5hbWUsIG1lc3NhZ2UsIHN0YWNrOiByYXdTdGFjayA9ICcnIH0gPSBlcnJvclxuXG5cdGNvbnN0IHN0YWNrID0gcmF3U3RhY2tcblx0XHQuc2xpY2UoZXJyb3JOYW1lLmxlbmd0aCArIG1lc3NhZ2UubGVuZ3RoICsgMylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChsaW5lID0+IGxpbmUucmVwbGFjZSgvXlxccythdCAvZywgJycpKVxuXHRcdC5tYXAobGluZSA9PiAoaXNBYnNvbHV0ZU9yRGF0YVVSSShsaW5lKSA/IGA8YW5vbnltb3VzPiR7Y29uanVuY3Rpb259JHttYXBMb2NhdGlvbk9mRXJyb3JUaHJvd24obGluZSl9YCA6IGxpbmUpKVxuXHRcdC5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoL14oLispIFxcKCguKylcXCkkLywgKF8sIGNvbnRleHROYW1lOiBzdHJpbmcsIHJhd0xvY2F0aW9uOiBzdHJpbmcpID0+IHtcblx0XHRcdGxldCBsb2NhdGlvbiA9ICcnXG5cblx0XHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0Y2FzZSAocmF3TG9jYXRpb24gPT09ICc8YW5vbnltb3VzPicpOiB7XG5cdFx0XHRcdGxvY2F0aW9uID0gY2hhbGsuZ3JheShyYXdMb2NhdGlvbilcblxuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXG5cdFx0XHRjYXNlIChpc0RhdGFVUkkocmF3TG9jYXRpb24pKToge1xuXHRcdFx0XHRsb2NhdGlvbiA9IGNoYWxrLmdyYXkoc2ltcGxpZnlEYXRhVVJJKHJhd0xvY2F0aW9uKSlcblxuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXG5cdFx0XHRjYXNlIChyYXdMb2NhdGlvbi5zdGFydHNXaXRoKCdub2RlOicpKToge1xuXHRcdFx0XHRjb25zdCBbIGZpbGVuYW1lLCBvY2N1cnJlZExpbmUgXSA9IHJhd0xvY2F0aW9uLnNsaWNlKDUpLnNwbGl0KCc6JylcblxuXHRcdFx0XHRsb2NhdGlvbiA9IGNoYWxrLmdyYXkoYGh0dHBzOi8vZ2l0aHViLmNvbS8ke2NoYWxrLmJvbGQudW5kZXJsaW5lKCdub2RlanMnKX0vbm9kZS9ibG9iLyR7dmVyc2lvbn0vbGliLyR7ZmlsZW5hbWV9LmpzI0wke29jY3VycmVkTGluZX1gKVxuXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0Y29uc3QgWyBmaWxlbmFtZSwgb2NjdXJyZWRMaW5lLCBvY2N1cnJlZENvbHVtbiBdID0gcmF3TG9jYXRpb24uc3BsaXQoJzonKVxuXG5cdFx0XHRcdGlmICghcGF0aC5pc0Fic29sdXRlKGZpbGVuYW1lKSkgYnJlYWtcblxuXHRcdFx0XHRjb25zdCB0YXJnZXQgPSBtYXBMb2NhdGlvbk9mRXJyb3JUaHJvd24ocGF0aC5yZWxhdGl2ZShyb290UGF0aCwgZmlsZW5hbWUpKVxuXHRcdFx0XHRjb25zdCB0cmFpbGluZyA9IGNoYWxrLmdyYXkoYDoke29jY3VycmVkTGluZX06JHtvY2N1cnJlZENvbHVtbn1gKVxuXG5cdFx0XHRcdGxvY2F0aW9uID0gdGFyZ2V0ICsgdHJhaWxpbmdcblx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGAke2NvbnRleHROYW1lfSR7Y29uanVuY3Rpb259JHtsb2NhdGlvbn1gXG5cdFx0fSkpXG5cdFx0LmpvaW4oJ1xcbicpXG5cblx0Y29uc3QgZGVjb3JhdGVkTGFiZWwgPSBkZWNvcmF0ZUxhYmVsKGVycm9yTmFtZSwgQ29sb3JTY2hlbWUuQ3JpdGljYWwpXG5cdGNvbnN0IHBheWxvYWQgPSBgJHttZXNzYWdlfVxcblxcbiR7c3RhY2t9XFxuYFxuXG5cdHJldHVybiB7IGxhYmVsOiBkZWNvcmF0ZWRMYWJlbCwgcGF5bG9hZCB9XG59XG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2ZhdGFsJ1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLkZhdGFsXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdGQVRBTCcsIENvbG9yU2NoZW1lLkNyaXRpY2FsKVxuXG5leHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9lcnJvcicgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLWV4cG9ydHNcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnd2FybmluZydcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5XYXJuaW5nXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdXQVJOSU5HJywgQ29sb3JTY2hlbWUuV2FybmluZylcblxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJy4uL2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InXG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdub3RpY2UnXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuTm90aWNlXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdOT1RJQ0UnLCBDb2xvclNjaGVtZS5SZWd1bGFyKVxuXG5leHBvcnQgZGVmYXVsdCBudWxsXG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2luZm8nXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuSW5mb1xuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnSU5GTycsIENvbG9yU2NoZW1lLlJlZ3VsYXIpXG5cbmV4cG9ydCBkZWZhdWx0IG51bGxcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnaHR0cCdcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5IdHRwXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdIVFRQJywgQ29sb3JTY2hlbWUuSHR0cClcblxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwiLy8gSGlnaGxpZ2h0LmpzXG5pbXBvcnQgaGlnaGxpZ2h0IGZyb20gJ2NsaS1oaWdobGlnaHQnXG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBUeXBlIGRlZmluaXRpb25zLlxudHlwZSBMb2dnaW5nRGF0YSA9IHsgbGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gJiBSZWNvcmQ8UHJvcGVydHlLZXksIGFueT5cbnR5cGUgSGFuZGxlZERhdGEgPSB7IGxhYmVsOiBzdHJpbmcsIHBheWxvYWQ6IHN0cmluZyB9XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdxdWVyeSdcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5RdWVyeVxuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnUVVFUlknLCBDb2xvclNjaGVtZS5RdWVyeSlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFuZGxlKGRhdGE6IExvZ2dpbmdEYXRhKTogSGFuZGxlZERhdGEgfCB1bmRlZmluZWQge1xuXHRjb25zdCBwYXlsb2FkID0gaGlnaGxpZ2h0KGRhdGEubWVzc2FnZSwgeyBsYW5ndWFnZTogJ3NxbCcgfSlcblxuXHRyZXR1cm4geyBsYWJlbCwgcGF5bG9hZCB9XG59XG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ3ZlcmJvc2UnXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuVmVyYm9zZVxuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnVkVSQk9TRScsIENvbG9yU2NoZW1lLkxvdWQpXG5cbmV4cG9ydCBkZWZhdWx0IG51bGxcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnZGVidWcnXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuRGVidWdcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ0RFQlVHJywgQ29sb3JTY2hlbWUuTG91ZClcblxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwiLy8gSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMuXG5pbXBvcnQgKiBhcyBGYXRhbEhhbmRsZXIgZnJvbSAnLi9mYXRhbCdcbmltcG9ydCAqIGFzIEVycm9ySGFuZGxlciBmcm9tICcuL2Vycm9yJ1xuaW1wb3J0ICogYXMgV2FybmluZ0hhbmRsZXIgZnJvbSAnLi93YXJuaW5nJ1xuaW1wb3J0ICogYXMgTm90aWNlSGFuZGxlciBmcm9tICcuL25vdGljZSdcbmltcG9ydCAqIGFzIEluZm9IYW5kbGVyIGZyb20gJy4vaW5mbydcbmltcG9ydCAqIGFzIEh0dHBIYW5kbGVyIGZyb20gJy4vaHR0cCdcbmltcG9ydCAqIGFzIFF1ZXJ5SGFuZGxlciBmcm9tICcuL3F1ZXJ5J1xuaW1wb3J0ICogYXMgVmVyYm9zZUhhbmRsZXIgZnJvbSAnLi92ZXJib3NlJ1xuaW1wb3J0ICogYXMgRGVidWdIYW5kbGVyIGZyb20gJy4vZGVidWcnXG5cbmNvbnN0IGhhbmRsZXJzID0gW1xuXHRGYXRhbEhhbmRsZXIsXG5cdEVycm9ySGFuZGxlcixcblx0V2FybmluZ0hhbmRsZXIsXG5cdE5vdGljZUhhbmRsZXIsXG5cdEluZm9IYW5kbGVyLFxuXHRIdHRwSGFuZGxlcixcblx0UXVlcnlIYW5kbGVyLFxuXHRWZXJib3NlSGFuZGxlcixcblx0RGVidWdIYW5kbGVyLFxuXVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxOYW1lID0gKHR5cGVvZiBoYW5kbGVycyBleHRlbmRzIChpbmZlciBUKVtdID8gVCA6IG5ldmVyKVsnbmFtZSddXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyc1xuIiwiLy8gVGhpcmQtcGFydHkgbW9kdWxlcy5cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCByVHJhY2VyIGZyb20gJ2Nscy1ydHJhY2VyJ1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbidcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3dpbnN0b24nXG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcblxuLy8gSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMuXG5pbXBvcnQgaGFuZGxlcnMgZnJvbSAnLi4vaGFuZGxlcnMnXG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdC5wcmludGYoZGF0YSA9PiB7XG5cdGNvbnN0IHRpbWVzdGFtcCA9IGNoYWxrLmdyYXkoRGF0ZVRpbWUubm93KCkudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiB0cnVlIH0pKVxuXHRjb25zdCBoYW5kbGVyID0gaGFuZGxlcnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGRhdGEubGV2ZWwpXG5cdGNvbnN0IGZhbGxiYWNrID0geyBsYWJlbDogaGFuZGxlcj8ubGFiZWwsIHBheWxvYWQ6IGRhdGEubWVzc2FnZSB9XG5cdGNvbnN0IHBlcmZvcm1IYW5kbGUgPSBoYW5kbGVyPy5kZWZhdWx0ID8/ICgoKTogdHlwZW9mIGZhbGxiYWNrID0+IGZhbGxiYWNrKVxuXG5cdC8vIEV4ZWN1dGUgaGFuZGxlciBhbmQgdGhlbiwgZ2V0IGRlY29yYXRlZCBwYXlsb2FkLlxuXHRjb25zdCB7IGxhYmVsLCBwYXlsb2FkIH0gPSBSZWZsZWN0LmFwcGx5KHBlcmZvcm1IYW5kbGUsIHVuZGVmaW5lZCwgWyBkYXRhIF0pID8/IGZhbGxiYWNrXG5cblx0bGV0IGV4dHJhRmluZ2VycHJpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG5cdGlmIChoYW5kbGVyPy5sZXZlbCA9PT0gTG9nZ2luZ0xldmVsLkh0dHApIHtcblx0XHRleHRyYUZpbmdlcnByaW50ID0gZGF0YS50cmFuc2FjdGlvbklkXG5cdFx0XHQ/IGAoVHJhbnNhY3Rpb24tSUQgPSAke2RhdGEudHJhbnNhY3Rpb25JZCBhcyBzdHJpbmd9KWBcblx0XHRcdDogYChSZXF1ZXN0LUlEID0gJHtyVHJhY2VyLmlkKCkgYXMgc3RyaW5nfSlgXG5cdH1cblxuXHRyZXR1cm4gYCR7bGFiZWwgYXMgc3RyaW5nfSAke3RpbWVzdGFtcH0ke2V4dHJhRmluZ2VycHJpbnQgPyBgICR7ZXh0cmFGaW5nZXJwcmludH1gIDogJyd9XFxuJHtwYXlsb2FkIGFzIHN0cmluZ31gXG59KVxuIiwiLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IGNsdXN0ZXIgZnJvbSAnY2x1c3RlcidcbmltcG9ydCB7IGVudiBhcyBlbnZpcm9ubWVudHMgfSBmcm9tICdwcm9jZXNzJ1xuaW1wb3J0IHsgaXNNYWluVGhyZWFkIH0gZnJvbSAnd29ya2VyX3RocmVhZHMnXG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMuXG5leHBvcnQgY29uc3QgRXhlY3V0aW9uTW9kZSA9IHtcblx0RGV2ZWxvcG1lbnRNb2RlOiAnZGV2ZWxvcG1lbnQnLFxuXHRQcm9kdWN0aW9uTW9kZTogJ3Byb2R1Y3Rpb24nLFxufSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgQ2x1c3RlcmluZ01vZGUgPSB7XG5cdE1hc3RlclByb2Nlc3M6IDAsXG5cdFdvcmtlclByb2Nlc3M6IDEsXG59IGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBUaHJlYWRpbmdNb2RlID0ge1xuXHRNYWluVGhyZWFkOiAwLFxuXHRXb3JrZXJUaHJlYWQ6IDEsXG59IGFzIGNvbnN0XG5cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbk1vZGUgPSB0eXBlb2YgRXhlY3V0aW9uTW9kZVtrZXlvZiB0eXBlb2YgRXhlY3V0aW9uTW9kZV1cbmV4cG9ydCB0eXBlIENsdXN0ZXJpbmdNb2RlID0gdHlwZW9mIENsdXN0ZXJpbmdNb2RlW2tleW9mIHR5cGVvZiBDbHVzdGVyaW5nTW9kZV1cbmV4cG9ydCB0eXBlIFRocmVhZGluZ01vZGUgPSB0eXBlb2YgVGhyZWFkaW5nTW9kZVtrZXlvZiB0eXBlb2YgVGhyZWFkaW5nTW9kZV1cblxuLy8gRXhwb3J0aW5ncy5cbmV4cG9ydCBjb25zdCBleGVjdXRpb25Nb2RlID0gZW52aXJvbm1lbnRzLk5PREVfRU5WIGFzIEV4ZWN1dGlvbk1vZGUgPz8gRXhlY3V0aW9uTW9kZS5EZXZlbG9wbWVudE1vZGVcblxuZXhwb3J0IGNvbnN0IGNsdXN0ZXJpbmdNb2RlOiBDbHVzdGVyaW5nTW9kZSA9IGNsdXN0ZXIuaXNQcmltYXJ5ID8/IGNsdXN0ZXIuaXNNYXN0ZXJcblx0PyBDbHVzdGVyaW5nTW9kZS5NYXN0ZXJQcm9jZXNzXG5cdDogQ2x1c3RlcmluZ01vZGUuV29ya2VyUHJvY2Vzc1xuXG5leHBvcnQgY29uc3QgdGhyZWFkaW5nTW9kZTogVGhyZWFkaW5nTW9kZSA9IGlzTWFpblRocmVhZFxuXHQ/IFRocmVhZGluZ01vZGUuTWFpblRocmVhZFxuXHQ6IFRocmVhZGluZ01vZGUuV29ya2VyVGhyZWFkXG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQge1xuXHRTVEFUVVNfQ09ERVMsXG5cdEluY29taW5nTWVzc2FnZSBhcyBIdHRwUmVxdWVzdCxcblx0U2VydmVyUmVzcG9uc2UgYXMgSHR0cFJlc3BvbnNlLFxufSBmcm9tICdodHRwJ1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IG1vcmdhbiBmcm9tICdtb3JnYW4nXG5pbXBvcnQgcHJldHR5Qnl0ZXMgZnJvbSAncHJldHR5LWJ5dGVzJ1xuaW1wb3J0IHByZXR0eU1zIGZyb20gJ3ByZXR0eS1tcydcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCB7IEV4ZWN1dGlvbk1vZGUsIGV4ZWN1dGlvbk1vZGUgfSBmcm9tICcuLi9oZWxwZXJzL2NvbnN0YW50cydcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbmRlY2xhcmUgbW9kdWxlICdtb3JnYW4nIHtcblx0Y29uc3QgY29tYmluZWQ6IG1vcmdhbi5Gb3JtYXRGblxufVxuXG5pbnRlcmZhY2UgVG9rZW5JbmRleGVyIHtcblx0W3Rva2VuTmFtZTogc3RyaW5nXTogKFxuXHRcdHJlcXVlc3Q6IEh0dHBSZXF1ZXN0LFxuXHRcdHJlc3BvbnNlOiBIdHRwUmVzcG9uc2UsXG5cdFx0Li4uYXJnczogYW55W11cblx0KSA9PiBzdHJpbmcgfCB1bmRlZmluZWRcbn1cblxuLy8gSGVscGVycy5cbmZ1bmN0aW9uIGRlY29yYXRlU3RhdHVzQ29kZShzdGF0dXNDb2RlOiBrZXlvZiB0eXBlb2YgU1RBVFVTX0NPREVTKTogc3RyaW5nIHtcblx0Y29uc3QgZ3JvdXBPZkNvZGUgPSBNYXRoLmZsb29yKE51bWJlcihzdGF0dXNDb2RlKSAvIDEwMCkgKiAxMDBcblx0Y29uc3QgYmFzZU1lc3NhZ2UgPSBgJHtzdGF0dXNDb2RlfSAke1NUQVRVU19DT0RFU1tzdGF0dXNDb2RlXSBhcyBzdHJpbmd9YFxuXG5cdHN3aXRjaCAoZ3JvdXBPZkNvZGUpIHtcblx0Y2FzZSAyMDA6IHtcblx0XHRyZXR1cm4gY2hhbGsuZ3JlZW4oYmFzZU1lc3NhZ2UpXG5cdH1cblxuXHRjYXNlIDMwMDoge1xuXHRcdHJldHVybiBjaGFsay5tYWdlbnRhKGJhc2VNZXNzYWdlKVxuXHR9XG5cdGNhc2UgNDAwOlxuXHRjYXNlIDUwMDoge1xuXHRcdHJldHVybiBjaGFsay5yZWQoYmFzZU1lc3NhZ2UpXG5cdH1cblxuXHRkZWZhdWx0OiB7XG5cdFx0cmV0dXJuIGNoYWxrLmdyYXkoYmFzZU1lc3NhZ2UpXG5cdH1cblx0fVxufVxuXG5mdW5jdGlvbiBmb3JtYXRGb3JNb3JnYW4odG9rZW5zOiBhbnksIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0LCByZXNwb25zZTogSHR0cFJlc3BvbnNlKTogc3RyaW5nIHtcblx0ZnVuY3Rpb24gXyh0b2tlbjogc3RyaW5nLCAuLi5zdWJBcmdzOiBhbnlbXSk6IHN0cmluZyB8IHZvaWQge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG5cdFx0cmV0dXJuICh0b2tlbnMgYXMgVG9rZW5JbmRleGVyKVt0b2tlbl0ocmVxdWVzdCwgcmVzcG9uc2UsIC4uLnN1YkFyZ3MpXG5cdH1cblxuXHQvLyBSYXcgdmFsdWVzLlxuXHRjb25zdCBtZXRob2QgPSBfKCdtZXRob2QnKVxuXHRjb25zdCBVUkwgPSBfKCd1cmwnKVxuXHRjb25zdCBodHRwVmVyc2lvbiA9IGBIVFRQLyR7XygnaHR0cC12ZXJzaW9uJykgYXMgc3RyaW5nfWBcblx0Y29uc3Qgc3RhdHVzQ29kZSA9IE51bWJlcihfKCdzdGF0dXMnKSlcblx0Y29uc3QgY29udGVudExlbmd0aCA9IE51bWJlcihfKCdyZXMnLCAnY29udGVudC1sZW5ndGgnKSA/PyAtMSlcblx0Y29uc3QgcmVzcG9uc2VUaW1lID0gTnVtYmVyKF8oJ3Jlc3BvbnNlLXRpbWUnKSA/PyAtMSlcblxuXHQvLyBEZWNvcmF0ZWQgdmFsdWVzLlxuXHRjb25zdCAkbWV0aG9kID0gY2hhbGsuYm9sZChtZXRob2QpXG5cdGNvbnN0ICR2ZXJzaW9uID0gY2hhbGsucmdiKDk4LCAxNzcsIDI1NSkoaHR0cFZlcnNpb24pXG5cdGNvbnN0ICRzdGF0dXNDb2RlID0gZGVjb3JhdGVTdGF0dXNDb2RlKHN0YXR1c0NvZGUpXG5cdGNvbnN0ICRjb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aCA+PSAwID8gcHJldHR5Qnl0ZXMoY29udGVudExlbmd0aCkgOiAnPyBCJ1xuXHRjb25zdCAkcmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lID49IDAgPyBwcmV0dHlNcyhyZXNwb25zZVRpbWUpIDogJydcblxuXHQvLyBBZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuXHRjb25zdCBtZXRhZGF0YSA9IGAoJHskY29udGVudExlbmd0aH0sICR7JHJlc3BvbnNlVGltZX0pYFxuXG5cdHJldHVybiBbXG5cdFx0YOKGkiAkeyRtZXRob2R9ICR7VVJMIGFzIHN0cmluZ30gJHskdmVyc2lvbn1gLFxuXHRcdGDihpAgJHskdmVyc2lvbn0gJHskc3RhdHVzQ29kZX0gJHttZXRhZGF0YX1gLFxuXHRdLmpvaW4oJ1xcbicpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGV4ZWN1dGlvbk1vZGUgPT09IEV4ZWN1dGlvbk1vZGUuRGV2ZWxvcG1lbnRNb2RlID8gZm9ybWF0Rm9yTW9yZ2FuIDogbW9yZ2FuLmNvbWJpbmVkXG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UgYXMgSHR0cFJlcXVlc3QsIFNlcnZlclJlc3BvbnNlIGFzIEh0dHBSZXNwb25zZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBQYXNzVGhyb3VnaCB9IGZyb20gJ3N0cmVhbSdcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnXG5cbi8vIFRoaXJkLXBhcnR5IG1vZHVsZXMuXG5pbXBvcnQgbW9yZ2FuIGZyb20gJ21vcmdhbidcbmltcG9ydCAqIGFzIHdpbnN0b24gZnJvbSAnd2luc3RvbidcbmltcG9ydCB0eXBlIHsgbGV2ZWwgYXMgTG9nZ2luZ0xldmVsLCBMb2dnZXIgYXMgQmFzZUxvZ2dlciB9IGZyb20gJ3dpbnN0b24nXG5cbi8vIEZvcm1hdHRlcnMuXG5pbXBvcnQgZm9ybWF0Rm9yQ0xJIGZyb20gJy4uL2Zvcm1hdHRlcnMvY29tbWFuZC1saW5lJ1xuaW1wb3J0IGZvcm1hdEZvck1vcmdhbiBmcm9tICcuLi9mb3JtYXR0ZXJzL21vcmdhbidcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCB7IEV4ZWN1dGlvbk1vZGUsIGV4ZWN1dGlvbk1vZGUgfSBmcm9tICcuLi9oZWxwZXJzL2NvbnN0YW50cydcblxuLy8gSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMuXG5pbXBvcnQgdHlwZSB7IExvZ2dpbmdMZXZlbE5hbWUgfSBmcm9tICcuLi9oYW5kbGVycydcbmltcG9ydCBoYW5kbGVycyBmcm9tICcuLi9oYW5kbGVycydcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbnR5cGUgTW9yZ2FuID0gKHJlcTogSHR0cFJlcXVlc3QsIHJlczogSHR0cFJlc3BvbnNlLCBuZXh0OiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZFxuXG4vLyBUcmFuc3BvcnRzLlxuY29uc3QgeyBDb25zb2xlOiBDb25zb2xlVHJhbnNwb3J0IH0gPSB3aW5zdG9uLnRyYW5zcG9ydHNcblxuY2xhc3MgTG9nZ2VyIHtcblx0c3RhdGljICNpbnN0YW5jZT86IExvZ2dlclxuXG5cdCNsb2dnZXI6IEJhc2VMb2dnZXIgPSB3aW5zdG9uLmNyZWF0ZUxvZ2dlcih7XG5cdFx0bGV2ZWxzOiBPYmplY3QuZnJvbUVudHJpZXMoXG5cdFx0XHRoYW5kbGVyc1xuXHRcdFx0XHQubWFwKCh7IG5hbWUsIGxldmVsIH0pID0+IFsgbmFtZSwgbGV2ZWwgXSBhcyBjb25zdClcblx0XHRcdFx0LmZpbHRlcigoWyAsIGxldmVsIF0pID0+IHR5cGVvZiBsZXZlbCA9PT0gJ251bWJlcicpLFxuXHRcdCksXG5cblx0XHRsZXZlbDogKGV4ZWN1dGlvbk1vZGUgPT09IEV4ZWN1dGlvbk1vZGUuUHJvZHVjdGlvbk1vZGUgPyAnaHR0cCcgOiAndmVyYm9zZScpIGFzIHR5cGVvZiBMb2dnaW5nTGV2ZWwsXG5cblx0XHR0cmFuc3BvcnRzOiBbXG5cdFx0XHRuZXcgQ29uc29sZVRyYW5zcG9ydCh7IGZvcm1hdDogZm9ybWF0Rm9yQ0xJIH0pLFxuXHRcdF0sXG5cblx0XHRleGl0T25FcnJvcjogZmFsc2UsXG5cdH0pXG5cblx0I21vcmdhbjogTW9yZ2FuID0gbW9yZ2FuKGZvcm1hdEZvck1vcmdhbiwge1xuXHRcdHN0cmVhbTogbmV3IFBhc3NUaHJvdWdoKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KS5vbignZGF0YScsIChkYXRhOiBzdHJpbmcpID0+IHtcblx0XHRcdHRoaXMubG9nKCdodHRwJywgZGF0YS50cmltKCkpXG5cdFx0fSksXG5cdH0pIGFzIE1vcmdhblxuXG5cdHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG5cdFx0aWYgKG5ldy50YXJnZXQgIT09IExvZ2dlcikge1xuXHRcdFx0dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdMb2dnZXIgY2xhc3MgaXMgbm90IGluaGVyaXRhYmxlJylcblx0XHR9XG5cblx0XHRpZiAoTG9nZ2VyLiNpbnN0YW5jZSkge1xuXHRcdFx0dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdMb2dnZXIgY2xhc3MgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGluIGRpcmVjdGx5Jylcblx0XHR9XG5cblx0XHRMb2dnZXIuI2luc3RhbmNlID0gdGhpc1xuXHR9XG5cblx0LyoqXG5cdCAqIExvZ2dpbmcgbWVzc2FnZSB3aXRoIHNwZWNpZmljIGxldmVsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbGV2ZWxcblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIGFyZ3MgQWRkaXRpb25hbCBtZXRhZGF0YS5cblx0ICovXG5cdHB1YmxpYyBsb2cobGV2ZWw6IExvZ2dpbmdMZXZlbE5hbWUsIG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkXG5cblx0LyoqXG5cdCAqIExvZ2dpbmcgSFRUUCBJL08uXG5cdCAqXG5cdCAqIEBwYXJhbSByZXF1ZXN0IE5vZGUuanMgYnVpbHQtaW4gYEluY29taW5nTWVzc2FnZWAgaW5zdGFuY2UgZnJvbSBgaHR0cGAgbW9kdWxlLlxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgTm9kZS5qcyBidWlsdC1pbiBgU2VydmVyUmVzcG9uc2VgIGluc3RhbmNlIGZyb20gYGh0dHBgIG1vZHVsZS5cblx0ICovXG5cdHB1YmxpYyBsb2cocmVxdWVzdDogSHR0cFJlcXVlc3QsIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+XG5cblx0LyoqXG5cdCAqIExvZ2dpbmcgZXJyb3JzIGluIGRldGFpbC5cblx0ICpcblx0ICogQHBhcmFtIGVycm9yXG5cdCAqL1xuXHRwdWJsaWMgbG9nKGVycm9yOiBFcnJvcik6IHZvaWRcblxuXHRwdWJsaWMgbG9nKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGxvZ2dlciA9IHRoaXMuI2xvZ2dlclxuXHRcdGNvbnN0IGZvcm1hdCA9IHRoaXMuI21vcmdhblxuXG5cdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0Y2FzZSAoYXJncy5sZW5ndGggPj0gMiAmJiBhcmdzWzBdIGluc3RhbmNlb2YgSHR0cFJlcXVlc3QgJiYgYXJnc1sxXSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSk6IHtcblx0XHRcdGNvbnN0IFsgcmVxdWVzdCwgcmVzcG9uc2UgXSA9IGFyZ3MgYXMgWyBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIF1cblxuXHRcdFx0cmV0dXJuIHByb21pc2lmeShmb3JtYXQpKHJlcXVlc3QsIHJlc3BvbnNlKVxuXHRcdH1cblxuXHRcdGNhc2UgKGFyZ3MubGVuZ3RoID49IDEgJiYgYXJnc1swXSBpbnN0YW5jZW9mIEVycm9yKToge1xuXHRcdFx0Y29uc3QgWyBlcnJvciwgLi4uZGF0YSBdID0gYXJncyBhcyBbIEVycm9yLCAuLi5hbnlbXSBdXG5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG5cdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGVycm9yLm1lc3NhZ2UsIGVycm9yLCAuLi5kYXRhKVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdFx0fVxuXG5cdFx0ZGVmYXVsdDoge1xuXHRcdFx0Y29uc3QgWyBsZXZlbCwgbWVzc2FnZSwgLi4uZGF0YSBdID0gYXJncyBhcyBbIHR5cGVvZiBMb2dnaW5nTGV2ZWwsIHN0cmluZywgLi4uYW55W10gXVxuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuXHRcdFx0bG9nZ2VyLmxvZyhsZXZlbCwgbWVzc2FnZSwgLi4uZGF0YSlcblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVmbGVjdC5jb25zdHJ1Y3QoTG9nZ2VyLCBbXSwgTG9nZ2VyKSBhcyBMb2dnZXJcbiJdLCJuYW1lcyI6WyJMb2dnaW5nTGV2ZWwiLCJGYXRhbCIsIkVycm9yIiwiV2FybmluZyIsIk5vdGljZSIsIkluZm8iLCJIdHRwIiwiUXVlcnkiLCJWZXJib3NlIiwiRGVidWciLCJjb2xvcml6ZXJNYXAiLCJfTWFwIiwiY3JlYXRlU2NoZW1lIiwib3B0aW9ucyIsIm5leHRJbmRleCIsInNpemUiLCJjb2xvcml6ZXIiLCJjaGFsayIsImJnSGV4IiwiYmFja2dyb3VuZCIsImhleCIsImZvcmVncm91bmQiLCJzZXQiLCJDb2xvclZhbHVlIiwiV2hpdGUiLCJHcmF5IiwiQmxhY2siLCJDcml0aWNhbCIsIlJlZ3VsYXIiLCJDb2xvclNjaGVtZSIsIkxvdWQiLCJnZXRDaGFsa09mIiwiY29sb3JTZXQiLCJnZXQiLCJpc1RUWSIsInByb2Nlc3MiLCJzdGRvdXQiLCJpc05vdE9uQ0xJIiwiZGVjb3JhdGVMYWJlbCIsImxhYmVsIiwic2NoZW1lIiwiZGVjb3JhdGVkTGFiZWwiLCJib2xkIiwicm9vdFBhdGgiLCJjd2QiLCJjb25qdW5jdGlvbiIsImJsdWUiLCJzcGxhdCIsIl9TeW1ib2wkZm9yIiwibmFtZSIsImxldmVsIiwic2ltcGxpZnlEYXRhVVJJIiwiZGF0YVVSSSIsImFjdHVhbENvbnRlbnQiLCJzcGxpdCIsInBpdm90IiwiX2luZGV4T2ZJbnN0YW5jZVByb3BlcnR5IiwiY2FsbCIsIm1pbWVJbmRpY2F0b3IiLCJfc2xpY2VJbnN0YW5jZVByb3BlcnR5IiwiY29udGVudFByZWZpeCIsImNvbnRlbnRTdWZmaXgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsIl9zdGFydHNXaXRoSW5zdGFuY2VQcm9wZXJ0eSIsImlzQWJzb2x1dGVPckRhdGFVUkkiLCJwYXRoIiwiaXNBYnNvbHV0ZSIsIm1hcExvY2F0aW9uT2ZFcnJvclRocm93biIsInRhcmdldCIsInJlbGF0aXZlIiwiZ3JheSIsIl9pbmNsdWRlc0luc3RhbmNlUHJvcGVydHkiLCJfbGFzdEluZGV4T2ZJbnN0YW5jZVByb3BlcnR5IiwicmVwbGFjZSIsIl8iLCJtb2R1bGVOYW1lIiwidHJhaWxpbmciLCJzZXAiLCJ1bmRlcmxpbmUiLCJkaXJuYW1lIiwiYmFzZW5hbWUiLCJoYW5kbGUiLCJkYXRhIiwiX2NvbnRleHQiLCJfY29udGV4dDIiLCJfY29udGV4dDMiLCJlcnJvciIsInVuZGVmaW5lZCIsImVycm9yTmFtZSIsIm1lc3NhZ2UiLCJzdGFjayIsInJhd1N0YWNrIiwiX21hcEluc3RhbmNlUHJvcGVydHkiLCJsZW5ndGgiLCJsaW5lIiwiY29udGV4dE5hbWUiLCJyYXdMb2NhdGlvbiIsImxvY2F0aW9uIiwib2NjdXJyZWRMaW5lIiwidmVyc2lvbiIsIm9jY3VycmVkQ29sdW1uIiwiam9pbiIsInBheWxvYWQiLCJoaWdobGlnaHQiLCJsYW5ndWFnZSIsImhhbmRsZXJzIiwiRmF0YWxIYW5kbGVyIiwiRXJyb3JIYW5kbGVyIiwiV2FybmluZ0hhbmRsZXIiLCJOb3RpY2VIYW5kbGVyIiwiSW5mb0hhbmRsZXIiLCJIdHRwSGFuZGxlciIsIlF1ZXJ5SGFuZGxlciIsIlZlcmJvc2VIYW5kbGVyIiwiRGVidWdIYW5kbGVyIiwiZm9ybWF0IiwicHJpbnRmIiwidGltZXN0YW1wIiwiRGF0ZVRpbWUiLCJub3ciLCJ0b0lTTyIsImluY2x1ZGVPZmZzZXQiLCJoYW5kbGVyIiwiX2ZpbmRJbnN0YW5jZVByb3BlcnR5IiwiZmFsbGJhY2siLCJwZXJmb3JtSGFuZGxlIiwiZGVmYXVsdCIsIl9SZWZsZWN0JGFwcGx5IiwiZXh0cmFGaW5nZXJwcmludCIsInRyYW5zYWN0aW9uSWQiLCJyVHJhY2VyIiwiaWQiLCJFeGVjdXRpb25Nb2RlIiwiRGV2ZWxvcG1lbnRNb2RlIiwiUHJvZHVjdGlvbk1vZGUiLCJDbHVzdGVyaW5nTW9kZSIsIk1hc3RlclByb2Nlc3MiLCJXb3JrZXJQcm9jZXNzIiwiZXhlY3V0aW9uTW9kZSIsImVudmlyb25tZW50cyIsIk5PREVfRU5WIiwiY2x1c3RlciIsImlzUHJpbWFyeSIsImlzTWFzdGVyIiwiZGVjb3JhdGVTdGF0dXNDb2RlIiwic3RhdHVzQ29kZSIsImdyb3VwT2ZDb2RlIiwiTWF0aCIsImZsb29yIiwiTnVtYmVyIiwiYmFzZU1lc3NhZ2UiLCJTVEFUVVNfQ09ERVMiLCJncmVlbiIsIm1hZ2VudGEiLCJyZWQiLCJmb3JtYXRGb3JNb3JnYW4iLCJ0b2tlbnMiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJ0b2tlbiIsInN1YkFyZ3MiLCJtZXRob2QiLCJVUkwiLCJodHRwVmVyc2lvbiIsImNvbnRlbnRMZW5ndGgiLCJyZXNwb25zZVRpbWUiLCIkbWV0aG9kIiwiJHZlcnNpb24iLCJyZ2IiLCIkc3RhdHVzQ29kZSIsIiRjb250ZW50TGVuZ3RoIiwicHJldHR5Qnl0ZXMiLCIkcmVzcG9uc2VUaW1lIiwicHJldHR5TXMiLCJtZXRhZGF0YSIsIm1vcmdhbiIsImNvbWJpbmVkIiwiQ29uc29sZSIsIkNvbnNvbGVUcmFuc3BvcnQiLCJ3aW5zdG9uIiwidHJhbnNwb3J0cyIsIkxvZ2dlciIsImNyZWF0ZUxvZ2dlciIsImxldmVscyIsIl9PYmplY3QkZnJvbUVudHJpZXMiLCJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsImZvcm1hdEZvckNMSSIsImV4aXRPbkVycm9yIiwic3RyZWFtIiwiUGFzc1Rocm91Z2giLCJvYmplY3RNb2RlIiwib24iLCJsb2ciLCJfdHJpbUluc3RhbmNlUHJvcGVydHkiLCJjb25zdHJ1Y3RvciIsIm5ldyIsIlJlZmVyZW5jZUVycm9yIiwiYXJncyIsImxvZ2dlciIsIkh0dHBSZXF1ZXN0IiwiSHR0cFJlc3BvbnNlIiwicHJvbWlzaWZ5IiwiX1JlZmxlY3QkY29uc3RydWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsTUFBTUEsWUFBWSxHQUFHO0FBQ3BCO0FBQ0FDLEVBQUFBLEtBQUssRUFBRSxDQUFDO0FBQ1JDLEVBQUFBLEtBQUssRUFBRSxDQUFDO0FBRVI7QUFDQUMsRUFBQUEsT0FBTyxFQUFFLENBQUM7QUFFVjtBQUNBQyxFQUFBQSxNQUFNLEVBQUUsQ0FBQztBQUNUQyxFQUFBQSxJQUFJLEVBQUUsQ0FBQztBQUVQO0FBQ0FDLEVBQUFBLElBQUksRUFBRSxDQUFDO0FBQ1BDLEVBQUFBLEtBQUssRUFBRSxDQUFDO0FBRVI7QUFDQUMsRUFBQUEsT0FBTyxFQUFFLENBQUM7QUFDVkMsRUFBQUEsS0FBSyxFQUFFO0FBQ1IsQ0FBVTs7QUNoQlY7QUFDQSxNQUFNQyxZQUFZLEdBQUcsSUFBQUMsSUFBQSxFQUFnQzs7QUFFckQ7QUFDQSxTQUFTQyxZQUFZQSxDQUFDQyxPQUEyRCxFQUFVO0FBQzFGLEVBQUEsTUFBTUMsU0FBUyxHQUFHSixZQUFZLENBQUNLLElB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
|
|
540
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZXMvaGVscGVycy9sb2dnaW5nLWxldmVsLnRzIiwiLi4vc291cmNlcy9oZWxwZXJzL2NvbG9yLXNjaGVtZS50cyIsIi4uL3NvdXJjZXMvaGVscGVycy9sYWJlbC1kZWNvcmF0b3IudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL2Vycm9yLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9mYXRhbC50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvd2FybmluZy50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvbm90aWNlLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9pbmZvLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9odHRwLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9xdWVyeS50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvdmVyYm9zZS50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvZGVidWcudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL2luZGV4LnRzIiwiLi4vc291cmNlcy9mb3JtYXR0ZXJzL2NvbW1hbmQtbGluZS50cyIsIi4uL3NvdXJjZXMvaGVscGVycy9jb25zdGFudHMudHMiLCIuLi9zb3VyY2VzL2Zvcm1hdHRlcnMvbW9yZ2FuLnRzIiwiLi4vc291cmNlcy9jbGFzc2VzL2xvZ2dlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBMb2dnaW5nTGV2ZWwgPSB7XG5cdC8vIENyaXRpY2FsIGxldmVscy4gKEl0IHdpbGwgY3Jhc2ggdGhlIHByb2Nlc3MpXG5cdEZhdGFsOiAwLFxuXHRFcnJvcjogMSxcblxuXHQvLyBXYXJuaW5nIGxldmVscy4gKEl0IGp1c3QgcmVwb3J0IHdhcm5pbmcgaW5mb3JtYXRpb24sIG5vdCBjcmFzaCB0aGUgcHJvY2Vzcylcblx0V2FybmluZzogMixcblxuXHQvLyBSZWd1bGFyIGxldmVsIGFuZCBhbGlhc2VzLlxuXHROb3RpY2U6IDMsXG5cdEluZm86IDMsXG5cblx0Ly8gTWF5YmUgc2Vuc2l0aXZlIGxldmVscy4gKEluIGdlbmVyYWwsIGRvZXMgbm90IHVzZWZ1bClcblx0SHR0cDogNCxcblx0UXVlcnk6IDQsXG5cblx0Ly8gTG91ZCBsZXZlbHMuXG5cdFZlcmJvc2U6IDUsXG5cdERlYnVnOiA1LFxufSBhcyBjb25zdFxuXG50eXBlIExvZ2dpbmdMZXZlbCA9IHR5cGVvZiBMb2dnaW5nTGV2ZWxba2V5b2YgdHlwZW9mIExvZ2dpbmdMZXZlbF1cblxuZXhwb3J0IGRlZmF1bHQgTG9nZ2luZ0xldmVsXG4iLCIvLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IHsgYmdSZ2IyNCwgcmdiMjQgfSBmcm9tICdAc3RkL2ZtdC9jb2xvcnMnXG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMuXG50eXBlIENvbG9yaXplciA9IChzdHJpbmc6IHN0cmluZykgPT4gc3RyaW5nXG5cbi8vIENvbnN0YW50cy5cbmNvbnN0IGNvbG9yaXplck1hcCA9IG5ldyBNYXA8bnVtYmVyLCBDb2xvcml6ZXI+KClcblxuLy8gSGVscGVycy5cbmZ1bmN0aW9uIGNyZWF0ZVNjaGVtZShvcHRpb25zOiB7IGJhY2tncm91bmQ6IENvbG9yVmFsdWUsIGZvcmVncm91bmQ6IENvbG9yVmFsdWUgfSk6IG51bWJlciB7XG5cdGNvbnN0IG5leHRJbmRleCA9IGNvbG9yaXplck1hcC5zaXplXG5cdGNvbnN0IGNvbG9yaXplciA9IChzdHJpbmc6IHN0cmluZykgPT4gYmdSZ2IyNChyZ2IyNChzdHJpbmcsIG9wdGlvbnMuZm9yZWdyb3VuZCksIG9wdGlvbnMuYmFja2dyb3VuZClcblxuXHRjb2xvcml6ZXJNYXAuc2V0KG5leHRJbmRleCwgY29sb3JpemVyKVxuXG5cdHJldHVybiBuZXh0SW5kZXhcbn1cblxuLy8gQ29sb3IgZGVmaW5pdGlvbnMuXG5jb25zdCBDb2xvclZhbHVlID0ge1xuXHQvLyBCYXNpYyBjb2xvcnMuXG5cdFdoaXRlOiAweEZGRkZGRixcblx0R3JheTogMHg4MDgwODAsXG5cdEJsYWNrOiAweDAwMDAwMCxcblxuXHQvLyBTcGVjaWFsaXplZCBjb2xvcnMuXG5cdENyaXRpY2FsOiAweEQ2MzAzMSxcblx0V2FybmluZzogMHhGRENCNkUsXG5cdFJlZ3VsYXI6IDB4MDk4NEUzLFxuXHRIdHRwOiAweDZBQjA0Qyxcblx0UXVlcnk6IDB4Mzk5QUYzLFxufSBhcyBjb25zdFxuXG50eXBlIENvbG9yVmFsdWUgPSB0eXBlb2YgQ29sb3JWYWx1ZVtrZXlvZiB0eXBlb2YgQ29sb3JWYWx1ZV1cblxuY29uc3QgQ29sb3JTY2hlbWUgPSB7XG5cdENyaXRpY2FsOiBjcmVhdGVTY2hlbWUoe1xuXHRcdGJhY2tncm91bmQ6IENvbG9yVmFsdWUuQ3JpdGljYWwsXG5cdFx0Zm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5CbGFjayxcblx0fSksXG5cblx0V2FybmluZzogY3JlYXRlU2NoZW1lKHtcblx0XHRiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLldhcm5pbmcsXG5cdFx0Zm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5CbGFjayxcblx0fSksXG5cblx0UmVndWxhcjogY3JlYXRlU2NoZW1lKHtcblx0XHRiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLlJlZ3VsYXIsXG5cdFx0Zm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5XaGl0ZSxcblx0fSksXG5cblx0SHR0cDogY3JlYXRlU2NoZW1lKHtcblx0XHRiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLkh0dHAsXG5cdFx0Zm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5CbGFjayxcblx0fSksXG5cblx0UXVlcnk6IGNyZWF0ZVNjaGVtZSh7XG5cdFx0YmFja2dyb3VuZDogQ29sb3JWYWx1ZS5RdWVyeSxcblx0XHRmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLkJsYWNrLFxuXHR9KSxcblxuXHRMb3VkOiBjcmVhdGVTY2hlbWUoe1xuXHRcdGJhY2tncm91bmQ6IENvbG9yVmFsdWUuQmxhY2ssXG5cdFx0Zm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5HcmF5LFxuXHR9KSxcbn0gYXMgY29uc3RcblxudHlwZSBDb2xvclNjaGVtZSA9IHR5cGVvZiBDb2xvclNjaGVtZVtrZXlvZiB0eXBlb2YgQ29sb3JTY2hlbWVdXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFsa09mKGNvbG9yU2V0OiBDb2xvclNjaGVtZSk6IENvbG9yaXplciB7XG5cdHJldHVybiBjb2xvcml6ZXJNYXAuZ2V0KGNvbG9yU2V0KSA/PyAoKHN0cmluZzogc3RyaW5nKSA9PiBzdHJpbmcpXG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU2NoZW1lXG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdwcm9jZXNzJ1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IHsgYm9sZCB9IGZyb20gJ0BzdGQvZm10L2NvbG9ycydcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBDb2xvclNjaGVtZSwgeyBnZXRDaGFsa09mIH0gZnJvbSAnI2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuXG4vLyBDb25zdGFudHMuXG5jb25zdCB7IGlzVFRZIH0gPSBwcm9jZXNzLnN0ZG91dFxuY29uc3QgaXNOb3RPbkNMSSA9ICFpc1RUWVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWNvcmF0ZUxhYmVsPFQgZXh0ZW5kcyBzdHJpbmc+KGxhYmVsOiBULCBzY2hlbWU6IENvbG9yU2NoZW1lKTogVCB7XG5cdGlmIChpc05vdE9uQ0xJKSByZXR1cm4gbGFiZWxcblxuXHRjb25zdCBjb2xvcml6ZSA9IGdldENoYWxrT2Yoc2NoZW1lKVxuXHRjb25zdCBkZWNvcmF0ZWRMYWJlbCA9IGJvbGQoY29sb3JpemUoYCAke2xhYmVsfSBgKSlcblxuXHRyZXR1cm4gZGVjb3JhdGVkTGFiZWwgYXMgVFxufVxuIiwiLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBwcm9jZXNzLCB7IHZlcnNpb24gfSBmcm9tICdwcm9jZXNzJ1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IHsgYmx1ZSwgZ3JheSwgYm9sZCwgdW5kZXJsaW5lIH0gZnJvbSAnQHN0ZC9mbXQvY29sb3JzJ1xuXG4vLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcjaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJyNoZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJyNoZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbnR5cGUgTG9nZ2luZ0RhdGEgPSB7IGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9ICYgUmVjb3JkPFByb3BlcnR5S2V5LCBhbnk+XG50eXBlIEhhbmRsZWREYXRhID0geyBsYWJlbDogc3RyaW5nLCBwYXlsb2FkOiBzdHJpbmcgfVxuXG4vLyBDb25zdGFudHMuXG5jb25zdCByb290UGF0aCA9IHByb2Nlc3MuY3dkKClcbmNvbnN0IGNvbmp1bmN0aW9uID0gYCAke2JsdWUoJ+KUgOKUgCcpfSBgXG5jb25zdCBzcGxhdDogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbC5mb3IoJ3NwbGF0JylcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2Vycm9yJ1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLkVycm9yXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdFUlJPUicsIENvbG9yU2NoZW1lLkNyaXRpY2FsKVxuXG5mdW5jdGlvbiBzaW1wbGlmeURhdGFVUkkoZGF0YVVSSTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgWyAsIGFjdHVhbENvbnRlbnQgXSA9IGRhdGFVUkkuc3BsaXQoJzonKVxuXHRjb25zdCBwaXZvdCA9IGFjdHVhbENvbnRlbnQuaW5kZXhPZignLCcpICsgMVxuXHRjb25zdCBtaW1lSW5kaWNhdG9yID0gYWN0dWFsQ29udGVudC5zbGljZSgwLCBwaXZvdClcblx0Y29uc3QgY29udGVudFByZWZpeCA9IGFjdHVhbENvbnRlbnQuc2xpY2UocGl2b3QsIHBpdm90ICsgNClcblx0Y29uc3QgY29udGVudFN1ZmZpeCA9IGFjdHVhbENvbnRlbnQuc2xpY2UoLTQpXG5cblx0cmV0dXJuIGBkYXRhOiR7bWltZUluZGljYXRvciArIGNvbnRlbnRQcmVmaXh9Li4uJHtjb250ZW50U3VmZml4fWBcbn1cblxuZnVuY3Rpb24gaXNEYXRhVVJJKGZpbGVuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0cmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoJ2RhdGE6Jylcbn1cblxuZnVuY3Rpb24gaXNBYnNvbHV0ZU9yRGF0YVVSSShmaWxlbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdHJldHVybiBwYXRoLmlzQWJzb2x1dGUoZmlsZW5hbWUpIHx8IGlzRGF0YVVSSShmaWxlbmFtZSlcbn1cblxuZnVuY3Rpb24gbWFwTG9jYXRpb25PZkVycm9yVGhyb3duKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgdGFyZ2V0ID0gcGF0aC5yZWxhdGl2ZShyb290UGF0aCwgZmlsZW5hbWUpXG5cblx0aWYgKGlzRGF0YVVSSShmaWxlbmFtZSkpIHtcblx0XHR0YXJnZXQgPSBncmF5KHNpbXBsaWZ5RGF0YVVSSShmaWxlbmFtZSkpXG5cdH0gZWxzZSBpZiAodGFyZ2V0LmluY2x1ZGVzKCdub2RlX21vZHVsZXMnKSkge1xuXHRcdHRhcmdldCA9IGdyYXkoXG5cdFx0XHR0YXJnZXQuc2xpY2UodGFyZ2V0Lmxhc3RJbmRleE9mKCdub2RlX21vZHVsZXMnKSksXG5cdFx0KS5yZXBsYWNlKFxuXHRcdFx0L25vZGVfbW9kdWxlc1tcXFxcL10oKD86QFteXFxcXC9dK1tcXFxcL10pP1teXFxcXC9dKykoLiopLyxcblx0XHRcdChfLCBtb2R1bGVOYW1lOiBzdHJpbmcsIHRyYWlsaW5nOiBzdHJpbmcpID0+IChcblx0XHRcdFx0YG5vZGVfbW9kdWxlcyR7cGF0aC5zZXB9JHtib2xkKHVuZGVybGluZShtb2R1bGVOYW1lKSl9JHtncmF5KHRyYWlsaW5nKX1gXG5cdFx0XHQpLFxuXHRcdClcblx0fSBlbHNlIHtcblx0XHR0YXJnZXQgPSBgJHtncmF5KHBhdGguZGlybmFtZSh0YXJnZXQpICsgcGF0aC5zZXApfSR7Ym9sZCh1bmRlcmxpbmUocGF0aC5iYXNlbmFtZSh0YXJnZXQpKSl9YFxuXHR9XG5cblx0cmV0dXJuIHRhcmdldFxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYW5kbGUoZGF0YTogTG9nZ2luZ0RhdGEpOiBIYW5kbGVkRGF0YSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHsgW3NwbGF0XTogWyBlcnJvciBdID0gW10gfSA9IGRhdGEgYXMgYW55XG5cblx0aWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblxuXHRjb25zdCB7IG5hbWU6IGVycm9yTmFtZSwgbWVzc2FnZSwgc3RhY2s6IHJhd1N0YWNrID0gJycgfSA9IGVycm9yXG5cblx0Y29uc3Qgc3RhY2sgPSByYXdTdGFja1xuXHRcdC5zbGljZShlcnJvck5hbWUubGVuZ3RoICsgbWVzc2FnZS5sZW5ndGggKyAzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKGxpbmUgPT4gbGluZS5yZXBsYWNlKC9eXFxzK2F0IC9nLCAnJykpXG5cdFx0Lm1hcChsaW5lID0+IChpc0Fic29sdXRlT3JEYXRhVVJJKGxpbmUpID8gYDxhbm9ueW1vdXM+JHtjb25qdW5jdGlvbn0ke21hcExvY2F0aW9uT2ZFcnJvclRocm93bihsaW5lKX1gIDogbGluZSkpXG5cdFx0Lm1hcChsaW5lID0+IGxpbmUucmVwbGFjZSgvXiguKykgXFwoKC4rKVxcKSQvLCAoXywgY29udGV4dE5hbWU6IHN0cmluZywgcmF3TG9jYXRpb246IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2F0aW9uID0gJydcblxuXHRcdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRjYXNlIChyYXdMb2NhdGlvbiA9PT0gJzxhbm9ueW1vdXM+Jyk6IHtcblx0XHRcdFx0bG9jYXRpb24gPSBncmF5KHJhd0xvY2F0aW9uKVxuXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cblx0XHRcdGNhc2UgKGlzRGF0YVVSSShyYXdMb2NhdGlvbikpOiB7XG5cdFx0XHRcdGxvY2F0aW9uID0gZ3JheShzaW1wbGlmeURhdGFVUkkocmF3TG9jYXRpb24pKVxuXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cblx0XHRcdGNhc2UgKHJhd0xvY2F0aW9uLnN0YXJ0c1dpdGgoJ25vZGU6JykpOiB7XG5cdFx0XHRcdGNvbnN0IFsgZmlsZW5hbWUsIG9jY3VycmVkTGluZSBdID0gcmF3TG9jYXRpb24uc2xpY2UoNSkuc3BsaXQoJzonKVxuXG5cdFx0XHRcdGxvY2F0aW9uID0gZ3JheShgaHR0cHM6Ly9naXRodWIuY29tLyR7Ym9sZCh1bmRlcmxpbmUoJ25vZGVqcycpKX0vbm9kZS9ibG9iLyR7dmVyc2lvbn0vbGliLyR7ZmlsZW5hbWV9LmpzI0wke29jY3VycmVkTGluZX1gKVxuXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0Y29uc3QgWyBmaWxlbmFtZSwgb2NjdXJyZWRMaW5lLCBvY2N1cnJlZENvbHVtbiBdID0gcmF3TG9jYXRpb24uc3BsaXQoJzonKVxuXG5cdFx0XHRcdGlmICghcGF0aC5pc0Fic29sdXRlKGZpbGVuYW1lKSkgYnJlYWtcblxuXHRcdFx0XHRjb25zdCB0YXJnZXQgPSBtYXBMb2NhdGlvbk9mRXJyb3JUaHJvd24ocGF0aC5yZWxhdGl2ZShyb290UGF0aCwgZmlsZW5hbWUpKVxuXHRcdFx0XHRjb25zdCB0cmFpbGluZyA9IGdyYXkoYDoke29jY3VycmVkTGluZX06JHtvY2N1cnJlZENvbHVtbn1gKVxuXG5cdFx0XHRcdGxvY2F0aW9uID0gdGFyZ2V0ICsgdHJhaWxpbmdcblx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGAke2NvbnRleHROYW1lfSR7Y29uanVuY3Rpb259JHtsb2NhdGlvbn1gXG5cdFx0fSkpXG5cdFx0LmpvaW4oJ1xcbicpXG5cblx0Y29uc3QgZGVjb3JhdGVkTGFiZWwgPSBkZWNvcmF0ZUxhYmVsKGVycm9yTmFtZSwgQ29sb3JTY2hlbWUuQ3JpdGljYWwpXG5cdGNvbnN0IHBheWxvYWQgPSBgJHttZXNzYWdlfVxcblxcbiR7c3RhY2t9XFxuYFxuXG5cdHJldHVybiB7IGxhYmVsOiBkZWNvcmF0ZWRMYWJlbCwgcGF5bG9hZCB9XG59XG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcjaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJyNoZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJyNoZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2ZhdGFsJ1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLkZhdGFsXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdGQVRBTCcsIENvbG9yU2NoZW1lLkNyaXRpY2FsKVxuXG5leHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnI2hhbmRsZXJzL2Vycm9yJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtZXhwb3J0c1xuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnI2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcjaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcjaGVscGVycy9sYWJlbC1kZWNvcmF0b3InXG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICd3YXJuaW5nJ1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLldhcm5pbmdcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ1dBUk5JTkcnLCBDb2xvclNjaGVtZS5XYXJuaW5nKVxuXG5leHBvcnQgZGVmYXVsdCBudWxsXG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcjaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJyNoZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJyNoZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ25vdGljZSdcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5Ob3RpY2VcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ05PVElDRScsIENvbG9yU2NoZW1lLlJlZ3VsYXIpXG5cbmV4cG9ydCBkZWZhdWx0IG51bGxcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJyNoZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnI2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnI2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnaW5mbydcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5JbmZvXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdJTkZPJywgQ29sb3JTY2hlbWUuUmVndWxhcilcblxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnI2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcjaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcjaGVscGVycy9sYWJlbC1kZWNvcmF0b3InXG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdodHRwJ1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLkh0dHBcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ0hUVFAnLCBDb2xvclNjaGVtZS5IdHRwKVxuXG5leHBvcnQgZGVmYXVsdCBudWxsXG4iLCIvLyBIaWdobGlnaHQuanNcbmltcG9ydCB7IGhpZ2hsaWdodCB9IGZyb20gJ2NsaS1oaWdobGlnaHQnXG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJyNoZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnI2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnI2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBUeXBlIGRlZmluaXRpb25zLlxudHlwZSBMb2dnaW5nRGF0YSA9IHsgbGV2ZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIH0gJiBSZWNvcmQ8UHJvcGVydHlLZXksIGFueT5cbnR5cGUgSGFuZGxlZERhdGEgPSB7IGxhYmVsOiBzdHJpbmcsIHBheWxvYWQ6IHN0cmluZyB9XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdxdWVyeSdcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5RdWVyeVxuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnUVVFUlknLCBDb2xvclNjaGVtZS5RdWVyeSlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFuZGxlKGRhdGE6IExvZ2dpbmdEYXRhKTogSGFuZGxlZERhdGEgfCB1bmRlZmluZWQge1xuXHRjb25zdCBwYXlsb2FkID0gaGlnaGxpZ2h0KGRhdGEubWVzc2FnZSwgeyBsYW5ndWFnZTogJ3NxbCcgfSlcblxuXHRyZXR1cm4geyBsYWJlbCwgcGF5bG9hZCB9XG59XG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcjaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJyNoZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJyNoZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ3ZlcmJvc2UnXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuVmVyYm9zZVxuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnVkVSQk9TRScsIENvbG9yU2NoZW1lLkxvdWQpXG5cbmV4cG9ydCBkZWZhdWx0IG51bGxcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJyNoZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnI2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnI2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnZGVidWcnXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuRGVidWdcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ0RFQlVHJywgQ29sb3JTY2hlbWUuTG91ZClcblxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwiLy8gSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMuXG5pbXBvcnQgKiBhcyBGYXRhbEhhbmRsZXIgZnJvbSAnI2hhbmRsZXJzL2ZhdGFsJ1xuaW1wb3J0ICogYXMgRXJyb3JIYW5kbGVyIGZyb20gJyNoYW5kbGVycy9lcnJvcidcbmltcG9ydCAqIGFzIFdhcm5pbmdIYW5kbGVyIGZyb20gJyNoYW5kbGVycy93YXJuaW5nJ1xuaW1wb3J0ICogYXMgTm90aWNlSGFuZGxlciBmcm9tICcjaGFuZGxlcnMvbm90aWNlJ1xuaW1wb3J0ICogYXMgSW5mb0hhbmRsZXIgZnJvbSAnI2hhbmRsZXJzL2luZm8nXG5pbXBvcnQgKiBhcyBIdHRwSGFuZGxlciBmcm9tICcjaGFuZGxlcnMvaHR0cCdcbmltcG9ydCAqIGFzIFF1ZXJ5SGFuZGxlciBmcm9tICcjaGFuZGxlcnMvcXVlcnknXG5pbXBvcnQgKiBhcyBWZXJib3NlSGFuZGxlciBmcm9tICcjaGFuZGxlcnMvdmVyYm9zZSdcbmltcG9ydCAqIGFzIERlYnVnSGFuZGxlciBmcm9tICcjaGFuZGxlcnMvZGVidWcnXG5cbmNvbnN0IGhhbmRsZXJzID0gW1xuXHRGYXRhbEhhbmRsZXIsXG5cdEVycm9ySGFuZGxlcixcblx0V2FybmluZ0hhbmRsZXIsXG5cdE5vdGljZUhhbmRsZXIsXG5cdEluZm9IYW5kbGVyLFxuXHRIdHRwSGFuZGxlcixcblx0UXVlcnlIYW5kbGVyLFxuXHRWZXJib3NlSGFuZGxlcixcblx0RGVidWdIYW5kbGVyLFxuXVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxOYW1lID0gKHR5cGVvZiBoYW5kbGVycyBleHRlbmRzIChpbmZlciBUKVtdID8gVCA6IG5ldmVyKVsnbmFtZSddXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyc1xuIiwiLy8gVGhpcmQtcGFydHkgbW9kdWxlcy5cbmltcG9ydCB7IGdyYXkgfSBmcm9tICdAc3RkL2ZtdC9jb2xvcnMnXG5pbXBvcnQgclRyYWNlciBmcm9tICdjbHMtcnRyYWNlcidcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nXG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd3aW5zdG9uJ1xuXG4vLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcjaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuXG4vLyBIYW5kbGVyIGltcGxlbWVudGF0aW9ucy5cbmltcG9ydCBoYW5kbGVycyBmcm9tICcjaGFuZGxlcnMvaW5kZXgnXG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdC5wcmludGYoZGF0YSA9PiB7XG5cdGNvbnN0IHRpbWVzdGFtcCA9IGdyYXkoRGF0ZVRpbWUubm93KCkudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiB0cnVlIH0pKVxuXHRjb25zdCBoYW5kbGVyID0gaGFuZGxlcnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGRhdGEubGV2ZWwpXG5cdGNvbnN0IGZhbGxiYWNrID0geyBsYWJlbDogaGFuZGxlcj8ubGFiZWwsIHBheWxvYWQ6IGRhdGEubWVzc2FnZSB9XG5cdGNvbnN0IHBlcmZvcm1IYW5kbGUgPSBoYW5kbGVyPy5kZWZhdWx0ID8/ICgoKTogdHlwZW9mIGZhbGxiYWNrID0+IGZhbGxiYWNrKVxuXG5cdC8vIEV4ZWN1dGUgaGFuZGxlciBhbmQgdGhlbiwgZ2V0IGRlY29yYXRlZCBwYXlsb2FkLlxuXHRjb25zdCB7IGxhYmVsLCBwYXlsb2FkIH0gPSBSZWZsZWN0LmFwcGx5KHBlcmZvcm1IYW5kbGUsIHVuZGVmaW5lZCwgWyBkYXRhIF0pID8/IGZhbGxiYWNrXG5cblx0bGV0IGV4dHJhRmluZ2VycHJpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG5cdGlmIChoYW5kbGVyPy5sZXZlbCA9PT0gTG9nZ2luZ0xldmVsLkh0dHApIHtcblx0XHRleHRyYUZpbmdlcnByaW50ID0gZGF0YS50cmFuc2FjdGlvbklkXG5cdFx0XHQ/IGAoVHJhbnNhY3Rpb24tSUQgPSAke2RhdGEudHJhbnNhY3Rpb25JZCBhcyBzdHJpbmd9KWBcblx0XHRcdDogYChSZXF1ZXN0LUlEID0gJHtyVHJhY2VyLmlkKCkgYXMgc3RyaW5nfSlgXG5cdH1cblxuXHRyZXR1cm4gYCR7bGFiZWwgYXMgc3RyaW5nfSAke3RpbWVzdGFtcH0ke2V4dHJhRmluZ2VycHJpbnQgPyBgICR7ZXh0cmFGaW5nZXJwcmludH1gIDogJyd9XFxuJHtwYXlsb2FkIGFzIHN0cmluZ31gXG59KVxuIiwiLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IGNsdXN0ZXIgZnJvbSAnY2x1c3RlcidcbmltcG9ydCB7IGVudiBhcyBlbnZpcm9ubWVudHMgfSBmcm9tICdwcm9jZXNzJ1xuaW1wb3J0IHsgaXNNYWluVGhyZWFkIH0gZnJvbSAnd29ya2VyX3RocmVhZHMnXG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMuXG5leHBvcnQgY29uc3QgRXhlY3V0aW9uTW9kZSA9IHtcblx0RGV2ZWxvcG1lbnRNb2RlOiAnZGV2ZWxvcG1lbnQnLFxuXHRQcm9kdWN0aW9uTW9kZTogJ3Byb2R1Y3Rpb24nLFxufSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgQ2x1c3RlcmluZ01vZGUgPSB7XG5cdE1hc3RlclByb2Nlc3M6IDAsXG5cdFdvcmtlclByb2Nlc3M6IDEsXG59IGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBUaHJlYWRpbmdNb2RlID0ge1xuXHRNYWluVGhyZWFkOiAwLFxuXHRXb3JrZXJUaHJlYWQ6IDEsXG59IGFzIGNvbnN0XG5cbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbk1vZGUgPSB0eXBlb2YgRXhlY3V0aW9uTW9kZVtrZXlvZiB0eXBlb2YgRXhlY3V0aW9uTW9kZV1cbmV4cG9ydCB0eXBlIENsdXN0ZXJpbmdNb2RlID0gdHlwZW9mIENsdXN0ZXJpbmdNb2RlW2tleW9mIHR5cGVvZiBDbHVzdGVyaW5nTW9kZV1cbmV4cG9ydCB0eXBlIFRocmVhZGluZ01vZGUgPSB0eXBlb2YgVGhyZWFkaW5nTW9kZVtrZXlvZiB0eXBlb2YgVGhyZWFkaW5nTW9kZV1cblxuLy8gRXhwb3J0aW5ncy5cbmV4cG9ydCBjb25zdCBleGVjdXRpb25Nb2RlID0gZW52aXJvbm1lbnRzLk5PREVfRU5WIGFzIEV4ZWN1dGlvbk1vZGUgPz8gRXhlY3V0aW9uTW9kZS5EZXZlbG9wbWVudE1vZGVcblxuZXhwb3J0IGNvbnN0IGNsdXN0ZXJpbmdNb2RlOiBDbHVzdGVyaW5nTW9kZSA9IGNsdXN0ZXIuaXNQcmltYXJ5ID8/IGNsdXN0ZXIuaXNNYXN0ZXJcblx0PyBDbHVzdGVyaW5nTW9kZS5NYXN0ZXJQcm9jZXNzXG5cdDogQ2x1c3RlcmluZ01vZGUuV29ya2VyUHJvY2Vzc1xuXG5leHBvcnQgY29uc3QgdGhyZWFkaW5nTW9kZTogVGhyZWFkaW5nTW9kZSA9IGlzTWFpblRocmVhZFxuXHQ/IFRocmVhZGluZ01vZGUuTWFpblRocmVhZFxuXHQ6IFRocmVhZGluZ01vZGUuV29ya2VyVGhyZWFkXG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQge1xuXHRTVEFUVVNfQ09ERVMsXG5cdEluY29taW5nTWVzc2FnZSBhcyBIdHRwUmVxdWVzdCxcblx0U2VydmVyUmVzcG9uc2UgYXMgSHR0cFJlc3BvbnNlLFxufSBmcm9tICdodHRwJ1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IG1vcmdhbiBmcm9tICdtb3JnYW4nXG5pbXBvcnQgeyBncmVlbiwgbWFnZW50YSwgcmVkLCBncmF5LCBib2xkLCByZ2IyNCB9IGZyb20gJ0BzdGQvZm10L2NvbG9ycydcbmltcG9ydCB7IGZvcm1hdCBhcyBwcmV0dHlCeXRlcyB9IGZyb20gJ0BzdGQvZm10L2J5dGVzJ1xuaW1wb3J0IHsgZm9ybWF0IGFzIHByZXR0eU1zIH0gZnJvbSAnQHN0ZC9mbXQvZHVyYXRpb24nXG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgeyBFeGVjdXRpb25Nb2RlLCBleGVjdXRpb25Nb2RlIH0gZnJvbSAnI2hlbHBlcnMvY29uc3RhbnRzJ1xuXG4vLyBUeXBlIGRlZmluaXRpb25zLlxuZGVjbGFyZSBtb2R1bGUgJ21vcmdhbicge1xuXHRjb25zdCBjb21iaW5lZDogbW9yZ2FuLkZvcm1hdEZuXG59XG5cbmludGVyZmFjZSBUb2tlbkluZGV4ZXIge1xuXHRbdG9rZW5OYW1lOiBzdHJpbmddOiAoXG5cdFx0cmVxdWVzdDogSHR0cFJlcXVlc3QsXG5cdFx0cmVzcG9uc2U6IEh0dHBSZXNwb25zZSxcblx0XHQuLi5hcmdzOiBhbnlbXVxuXHQpID0+IHN0cmluZyB8IHVuZGVmaW5lZFxufVxuXG4vLyBIZWxwZXJzLlxuZnVuY3Rpb24gZGVjb3JhdGVTdGF0dXNDb2RlKHN0YXR1c0NvZGU6IGtleW9mIHR5cGVvZiBTVEFUVVNfQ09ERVMpOiBzdHJpbmcge1xuXHRjb25zdCBncm91cE9mQ29kZSA9IE1hdGguZmxvb3IoTnVtYmVyKHN0YXR1c0NvZGUpIC8gMTAwKSAqIDEwMFxuXHRjb25zdCBiYXNlTWVzc2FnZSA9IGAke3N0YXR1c0NvZGV9ICR7U1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIGFzIHN0cmluZ31gXG5cblx0c3dpdGNoIChncm91cE9mQ29kZSkge1xuXHRjYXNlIDIwMDoge1xuXHRcdHJldHVybiBncmVlbihiYXNlTWVzc2FnZSlcblx0fVxuXG5cdGNhc2UgMzAwOiB7XG5cdFx0cmV0dXJuIG1hZ2VudGEoYmFzZU1lc3NhZ2UpXG5cdH1cblx0Y2FzZSA0MDA6XG5cdGNhc2UgNTAwOiB7XG5cdFx0cmV0dXJuIHJlZChiYXNlTWVzc2FnZSlcblx0fVxuXG5cdGRlZmF1bHQ6IHtcblx0XHRyZXR1cm4gZ3JheShiYXNlTWVzc2FnZSlcblx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZvck1vcmdhbih0b2tlbnM6IGFueSwgcmVxdWVzdDogSHR0cFJlcXVlc3QsIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpOiBzdHJpbmcge1xuXHRmdW5jdGlvbiBfKHRva2VuOiBzdHJpbmcsIC4uLnN1YkFyZ3M6IGFueVtdKTogc3RyaW5nIHwgdm9pZCB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcblx0XHRyZXR1cm4gKHRva2VucyBhcyBUb2tlbkluZGV4ZXIpW3Rva2VuXShyZXF1ZXN0LCByZXNwb25zZSwgLi4uc3ViQXJncylcblx0fVxuXG5cdC8vIFJhdyB2YWx1ZXMuXG5cdGNvbnN0IG1ldGhvZCA9IF8oJ21ldGhvZCcpXG5cdGNvbnN0IFVSTCA9IF8oJ3VybCcpXG5cdGNvbnN0IGh0dHBWZXJzaW9uID0gYEhUVFAvJHtfKCdodHRwLXZlcnNpb24nKSBhcyBzdHJpbmd9YFxuXHRjb25zdCBzdGF0dXNDb2RlID0gTnVtYmVyKF8oJ3N0YXR1cycpKVxuXHRjb25zdCBjb250ZW50TGVuZ3RoID0gTnVtYmVyKF8oJ3JlcycsICdjb250ZW50LWxlbmd0aCcpID8/IC0xKVxuXHRjb25zdCByZXNwb25zZVRpbWUgPSBOdW1iZXIoXygncmVzcG9uc2UtdGltZScpID8/IC0xKVxuXG5cdC8vIERlY29yYXRlZCB2YWx1ZXMuXG5cdGNvbnN0ICRtZXRob2QgPSBib2xkKG1ldGhvZCA/PyAnJylcblx0Y29uc3QgJHZlcnNpb24gPSByZ2IyNChodHRwVmVyc2lvbiwgMHg2MkIxRkYpXG5cdGNvbnN0ICRzdGF0dXNDb2RlID0gZGVjb3JhdGVTdGF0dXNDb2RlKHN0YXR1c0NvZGUpXG5cdGNvbnN0ICRjb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aCA+PSAwID8gcHJldHR5Qnl0ZXMoY29udGVudExlbmd0aCkgOiAnPyBCJ1xuXHRjb25zdCAkcmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lID49IDAgPyBwcmV0dHlNcyhyZXNwb25zZVRpbWUpIDogJydcblxuXHQvLyBBZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuXHRjb25zdCBtZXRhZGF0YSA9IGAoJHskY29udGVudExlbmd0aH0sICR7JHJlc3BvbnNlVGltZX0pYFxuXG5cdHJldHVybiBbXG5cdFx0YOKGkiAkeyRtZXRob2R9ICR7VVJMIGFzIHN0cmluZ30gJHskdmVyc2lvbn1gLFxuXHRcdGDihpAgJHskdmVyc2lvbn0gJHskc3RhdHVzQ29kZX0gJHttZXRhZGF0YX1gLFxuXHRdLmpvaW4oJ1xcbicpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGV4ZWN1dGlvbk1vZGUgPT09IEV4ZWN1dGlvbk1vZGUuRGV2ZWxvcG1lbnRNb2RlID8gZm9ybWF0Rm9yTW9yZ2FuIDogbW9yZ2FuLmNvbWJpbmVkXG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UgYXMgSHR0cFJlcXVlc3QsIFNlcnZlclJlc3BvbnNlIGFzIEh0dHBSZXNwb25zZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBQYXNzVGhyb3VnaCB9IGZyb20gJ3N0cmVhbSdcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnXG5cbi8vIFRoaXJkLXBhcnR5IG1vZHVsZXMuXG5pbXBvcnQgbW9yZ2FuIGZyb20gJ21vcmdhbidcbmltcG9ydCAqIGFzIHdpbnN0b24gZnJvbSAnd2luc3RvbidcbmltcG9ydCB0eXBlIHsgbGV2ZWwgYXMgTG9nZ2luZ0xldmVsLCBMb2dnZXIgYXMgQmFzZUxvZ2dlciB9IGZyb20gJ3dpbnN0b24nXG5cbi8vIEZvcm1hdHRlcnMuXG5pbXBvcnQgZm9ybWF0Rm9yQ0xJIGZyb20gJyNmb3JtYXR0ZXJzL2NvbW1hbmQtbGluZSdcbmltcG9ydCBmb3JtYXRGb3JNb3JnYW4gZnJvbSAnI2Zvcm1hdHRlcnMvbW9yZ2FuJ1xuXG4vLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IHsgRXhlY3V0aW9uTW9kZSwgZXhlY3V0aW9uTW9kZSB9IGZyb20gJyNoZWxwZXJzL2NvbnN0YW50cydcblxuLy8gSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMuXG5pbXBvcnQgdHlwZSB7IExvZ2dpbmdMZXZlbE5hbWUgfSBmcm9tICcjaGFuZGxlcnMvaW5kZXgnXG5pbXBvcnQgaGFuZGxlcnMgZnJvbSAnI2hhbmRsZXJzL2luZGV4J1xuXG4vLyBUeXBlIGRlZmluaXRpb25zLlxudHlwZSBNb3JnYW4gPSAocmVxOiBIdHRwUmVxdWVzdCwgcmVzOiBIdHRwUmVzcG9uc2UsIG5leHQ6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKSA9PiB2b2lkXG5cbi8vIFRyYW5zcG9ydHMuXG5jb25zdCB7IENvbnNvbGU6IENvbnNvbGVUcmFuc3BvcnQgfSA9IHdpbnN0b24udHJhbnNwb3J0c1xuXG5jbGFzcyBMb2dnZXIge1xuXHRzdGF0aWMgI2luc3RhbmNlPzogTG9nZ2VyXG5cblx0I2xvZ2dlcjogQmFzZUxvZ2dlciA9IHdpbnN0b24uY3JlYXRlTG9nZ2VyKHtcblx0XHRsZXZlbHM6IE9iamVjdC5mcm9tRW50cmllcyhcblx0XHRcdGhhbmRsZXJzXG5cdFx0XHRcdC5tYXAoKHsgbmFtZSwgbGV2ZWwgfSkgPT4gWyBuYW1lLCBsZXZlbCBdIGFzIGNvbnN0KVxuXHRcdFx0XHQuZmlsdGVyKChbICwgbGV2ZWwgXSkgPT4gdHlwZW9mIGxldmVsID09PSAnbnVtYmVyJyksXG5cdFx0KSxcblxuXHRcdGxldmVsOiAoZXhlY3V0aW9uTW9kZSA9PT0gRXhlY3V0aW9uTW9kZS5Qcm9kdWN0aW9uTW9kZSA/ICdodHRwJyA6ICd2ZXJib3NlJykgYXMgdHlwZW9mIExvZ2dpbmdMZXZlbCxcblxuXHRcdHRyYW5zcG9ydHM6IFtcblx0XHRcdG5ldyBDb25zb2xlVHJhbnNwb3J0KHsgZm9ybWF0OiBmb3JtYXRGb3JDTEkgfSksXG5cdFx0XSxcblxuXHRcdGV4aXRPbkVycm9yOiBmYWxzZSxcblx0fSlcblxuXHQjbW9yZ2FuOiBNb3JnYW4gPSBtb3JnYW4oZm9ybWF0Rm9yTW9yZ2FuLCB7XG5cdFx0c3RyZWFtOiBuZXcgUGFzc1Rocm91Z2goeyBvYmplY3RNb2RlOiB0cnVlIH0pLm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xuXHRcdFx0dGhpcy5sb2coJ2h0dHAnLCBkYXRhLnRyaW0oKSlcblx0XHR9KSxcblx0fSkgYXMgTW9yZ2FuXG5cblx0cHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcblx0XHRpZiAobmV3LnRhcmdldCAhPT0gTG9nZ2VyKSB7XG5cdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0xvZ2dlciBjbGFzcyBpcyBub3QgaW5oZXJpdGFibGUnKVxuXHRcdH1cblxuXHRcdGlmIChMb2dnZXIuI2luc3RhbmNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ0xvZ2dlciBjbGFzcyBjYW5ub3QgYmUgY29uc3RydWN0ZWQgaW4gZGlyZWN0bHknKVxuXHRcdH1cblxuXHRcdExvZ2dlci4jaW5zdGFuY2UgPSB0aGlzXG5cdH1cblxuXHQvKipcblx0ICogTG9nZ2luZyBtZXNzYWdlIHdpdGggc3BlY2lmaWMgbGV2ZWwuXG5cdCAqXG5cdCAqIEBwYXJhbSBsZXZlbFxuXHQgKiBAcGFyYW0gbWVzc2FnZVxuXHQgKiBAcGFyYW0gYXJncyBBZGRpdGlvbmFsIG1ldGFkYXRhLlxuXHQgKi9cblx0cHVibGljIGxvZyhsZXZlbDogTG9nZ2luZ0xldmVsTmFtZSwgbWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWRcblxuXHQvKipcblx0ICogTG9nZ2luZyBIVFRQIEkvTy5cblx0ICpcblx0ICogQHBhcmFtIHJlcXVlc3QgTm9kZS5qcyBidWlsdC1pbiBgSW5jb21pbmdNZXNzYWdlYCBpbnN0YW5jZSBmcm9tIGBodHRwYCBtb2R1bGUuXG5cdCAqIEBwYXJhbSByZXNwb25zZSBOb2RlLmpzIGJ1aWx0LWluIGBTZXJ2ZXJSZXNwb25zZWAgaW5zdGFuY2UgZnJvbSBgaHR0cGAgbW9kdWxlLlxuXHQgKi9cblx0cHVibGljIGxvZyhyZXF1ZXN0OiBIdHRwUmVxdWVzdCwgcmVzcG9uc2U6IEh0dHBSZXNwb25zZSk6IFByb21pc2U8dm9pZD5cblxuXHQvKipcblx0ICogTG9nZ2luZyBlcnJvcnMgaW4gZGV0YWlsLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXJyb3Jcblx0ICovXG5cdHB1YmxpYyBsb2coZXJyb3I6IEVycm9yKTogdm9pZFxuXG5cdHB1YmxpYyBsb2coLi4uYXJnczogYW55W10pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbG9nZ2VyID0gdGhpcy4jbG9nZ2VyXG5cdFx0Y29uc3QgZm9ybWF0ID0gdGhpcy4jbW9yZ2FuXG5cblx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRjYXNlIChhcmdzLmxlbmd0aCA+PSAyICYmIGFyZ3NbMF0gaW5zdGFuY2VvZiBIdHRwUmVxdWVzdCAmJiBhcmdzWzFdIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKToge1xuXHRcdFx0Y29uc3QgWyByZXF1ZXN0LCByZXNwb25zZSBdID0gYXJncyBhcyBbIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2UgXVxuXG5cdFx0XHRyZXR1cm4gcHJvbWlzaWZ5KGZvcm1hdCkocmVxdWVzdCwgcmVzcG9uc2UpXG5cdFx0fVxuXG5cdFx0Y2FzZSAoYXJncy5sZW5ndGggPj0gMSAmJiBhcmdzWzBdIGluc3RhbmNlb2YgRXJyb3IpOiB7XG5cdFx0XHRjb25zdCBbIGVycm9yLCAuLi5kYXRhIF0gPSBhcmdzIGFzIFsgRXJyb3IsIC4uLmFueVtdIF1cblxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcblx0XHRcdGxvZ2dlci5sb2coJ2Vycm9yJywgZXJyb3IubWVzc2FnZSwgZXJyb3IsIC4uLmRhdGEpXG5cblx0XHRcdHJldHVybiB1bmRlZmluZWRcblx0XHR9XG5cblx0XHRkZWZhdWx0OiB7XG5cdFx0XHRjb25zdCBbIGxldmVsLCBtZXNzYWdlLCAuLi5kYXRhIF0gPSBhcmdzIGFzIFsgdHlwZW9mIExvZ2dpbmdMZXZlbCwgc3RyaW5nLCAuLi5hbnlbXSBdXG5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG5cdFx0XHRsb2dnZXIubG9nKGxldmVsLCBtZXNzYWdlLCAuLi5kYXRhKVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZWZsZWN0LmNvbnN0cnVjdChMb2dnZXIsIFtdLCBMb2dnZXIpIGFzIExvZ2dlclxuIl0sIm5hbWVzIjpbIkxvZ2dpbmdMZXZlbCIsIkZhdGFsIiwiRXJyb3IiLCJXYXJuaW5nIiwiTm90aWNlIiwiSW5mbyIsIkh0dHAiLCJRdWVyeSIsIlZlcmJvc2UiLCJEZWJ1ZyIsImNvbG9yaXplck1hcCIsIl9NYXAiLCJjcmVhdGVTY2hlbWUiLCJvcHRpb25zIiwibmV4dEluZGV4Iiwic2l6ZSIsImNvbG9yaXplciIsInN0cmluZyIsImJnUmdiMjQiLCJyZ2IyNCIsImZvcmVncm91bmQiLCJiYWNrZ3JvdW5kIiwic2V0IiwiQ29sb3JWYWx1ZSIsIldoaXRlIiwiR3JheSIsIkJsYWNrIiwiQ3JpdGljYWwiLCJSZWd1bGFyIiwiQ29sb3JTY2hlbWUiLCJMb3VkIiwiZ2V0Q2hhbGtPZiIsImNvbG9yU2V0IiwiZ2V0IiwiaXNUVFkiLCJwcm9jZXNzIiwic3Rkb3V0IiwiaXNOb3RPbkNMSSIsImRlY29yYXRlTGFiZWwiLCJsYWJlbCIsInNjaGVtZSIsImNvbG9yaXplIiwiZGVjb3JhdGVkTGFiZWwiLCJib2xkIiwicm9vdFBhdGgiLCJjd2QiLCJjb25qdW5jdGlvbiIsImJsdWUiLCJzcGxhdCIsIl9TeW1ib2wkZm9yIiwibmFtZSIsImxldmVsIiwic2ltcGxpZnlEYXRhVVJJIiwiZGF0YVVSSSIsImFjdHVhbENvbnRlbnQiLCJzcGxpdCIsInBpdm90IiwiX2luZGV4T2ZJbnN0YW5jZVByb3BlcnR5IiwiY2FsbCIsIm1pbWVJbmRpY2F0b3IiLCJfc2xpY2VJbnN0YW5jZVByb3BlcnR5IiwiY29udGVudFByZWZpeCIsImNvbnRlbnRTdWZmaXgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsIl9zdGFydHNXaXRoSW5zdGFuY2VQcm9wZXJ0eSIsImlzQWJzb2x1dGVPckRhdGFVUkkiLCJwYXRoIiwiaXNBYnNvbHV0ZSIsIm1hcExvY2F0aW9uT2ZFcnJvclRocm93biIsInRhcmdldCIsInJlbGF0aXZlIiwiZ3JheSIsIl9pbmNsdWRlc0luc3RhbmNlUHJvcGVydHkiLCJfbGFzdEluZGV4T2ZJbnN0YW5jZVByb3BlcnR5IiwicmVwbGFjZSIsIl8iLCJtb2R1bGVOYW1lIiwidHJhaWxpbmciLCJzZXAiLCJ1bmRlcmxpbmUiLCJkaXJuYW1lIiwiYmFzZW5hbWUiLCJoYW5kbGUiLCJkYXRhIiwiX2NvbnRleHQiLCJfY29udGV4dDIiLCJfY29udGV4dDMiLCJlcnJvciIsInVuZGVmaW5lZCIsImVycm9yTmFtZSIsIm1lc3NhZ2UiLCJzdGFjayIsInJhd1N0YWNrIiwiX21hcEluc3RhbmNlUHJvcGVydHkiLCJsZW5ndGgiLCJsaW5lIiwiY29udGV4dE5hbWUiLCJyYXdMb2NhdGlvbiIsImxvY2F0aW9uIiwib2NjdXJyZWRMaW5lIiwidmVyc2lvbiIsIm9jY3VycmVkQ29sdW1uIiwiam9pbiIsInBheWxvYWQiLCJoaWdobGlnaHQiLCJsYW5ndWFnZSIsImhhbmRsZXJzIiwiRmF0YWxIYW5kbGVyIiwiRXJyb3JIYW5kbGVyIiwiV2FybmluZ0hhbmRsZXIiLCJOb3RpY2VIYW5kbGVyIiwiSW5mb0hhbmRsZXIiLCJIdHRwSGFuZGxlciIsIlF1ZXJ5SGFuZGxlciIsIlZlcmJvc2VIYW5kbGVyIiwiRGVidWdIYW5kbGVyIiwiZm9ybWF0IiwicHJpbnRmIiwidGltZXN0YW1wIiwiRGF0ZVRpbWUiLCJub3ciLCJ0b0lTTyIsImluY2x1ZGVPZmZzZXQiLCJoYW5kbGVyIiwiX2ZpbmRJbnN0YW5jZVByb3BlcnR5IiwiZmFsbGJhY2siLCJwZXJmb3JtSGFuZGxlIiwiZGVmYXVsdCIsIl9SZWZsZWN0JGFwcGx5IiwiZXh0cmFGaW5nZXJwcmludCIsInRyYW5zYWN0aW9uSWQiLCJyVHJhY2VyIiwiaWQiLCJFeGVjdXRpb25Nb2RlIiwiRGV2ZWxvcG1lbnRNb2RlIiwiUHJvZHVjdGlvbk1vZGUiLCJDbHVzdGVyaW5nTW9kZSIsIk1hc3RlclByb2Nlc3MiLCJXb3JrZXJQcm9jZXNzIiwiZXhlY3V0aW9uTW9kZSIsImVudmlyb25tZW50cyIsIk5PREVfRU5WIiwiY2x1c3RlciIsImlzUHJpbWFyeSIsImlzTWFzdGVyIiwiZGVjb3JhdGVTdGF0dXNDb2RlIiwic3RhdHVzQ29kZSIsImdyb3VwT2ZDb2RlIiwiTWF0aCIsImZsb29yIiwiTnVtYmVyIiwiYmFzZU1lc3NhZ2UiLCJTVEFUVVNfQ09ERVMiLCJncmVlbiIsIm1hZ2VudGEiLCJyZWQiLCJmb3JtYXRGb3JNb3JnYW4iLCJ0b2tlbnMiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJ0b2tlbiIsInN1YkFyZ3MiLCJtZXRob2QiLCJVUkwiLCJodHRwVmVyc2lvbiIsImNvbnRlbnRMZW5ndGgiLCJyZXNwb25zZVRpbWUiLCIkbWV0aG9kIiwiJHZlcnNpb24iLCIkc3RhdHVzQ29kZSIsIiRjb250ZW50TGVuZ3RoIiwicHJldHR5Qnl0ZXMiLCIkcmVzcG9uc2VUaW1lIiwicHJldHR5TXMiLCJtZXRhZGF0YSIsIm1vcmdhbiIsImNvbWJpbmVkIiwiQ29uc29sZSIsIkNvbnNvbGVUcmFuc3BvcnQiLCJ3aW5zdG9uIiwidHJhbnNwb3J0cyIsIkxvZ2dlciIsImNyZWF0ZUxvZ2dlciIsImxldmVscyIsIl9PYmplY3QkZnJvbUVudHJpZXMiLCJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsImZvcm1hdEZvckNMSSIsImV4aXRPbkVycm9yIiwic3RyZWFtIiwiUGFzc1Rocm91Z2giLCJvYmplY3RNb2RlIiwib24iLCJsb2ciLCJfdHJpbUluc3RhbmNlUHJvcGVydHkiLCJjb25zdHJ1Y3RvciIsIm5ldyIsIlJlZmVyZW5jZUVycm9yIiwiYXJncyIsImxvZ2dlciIsIkh0dHBSZXF1ZXN0IiwiSHR0cFJlc3BvbnNlIiwicHJvbWlzaWZ5IiwiX1JlZmxlY3QkY29uc3RydWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsTUFBTUEsWUFBWSxHQUFHO0FBQ3BCO0FBQ0FDLEVBQUFBLEtBQUssRUFBRSxDQUFDO0FBQ1JDLEVBQUFBLEtBQUssRUFBRSxDQUFDO0FBRVI7QUFDQUMsRUFBQUEsT0FBTyxFQUFFLENBQUM7QUFFVjtBQUNBQyxFQUFBQSxNQUFNLEVBQUUsQ0FBQztBQUNUQyxFQUFBQSxJQUFJLEVBQUUsQ0FB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cichol/logger",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"description": "A logger based on `winston` for personal projects.",
|
|
5
5
|
"homepage": "https://github.com/morrighan/packages",
|
|
6
6
|
"bugs": {
|
|
@@ -13,22 +13,16 @@
|
|
|
13
13
|
"url": "https://www.cichol.com/"
|
|
14
14
|
},
|
|
15
15
|
"type": "module",
|
|
16
|
-
"main": "./dists/index.cjs",
|
|
17
|
-
"module": "./dists/index.js",
|
|
18
|
-
"types": "./dists/index.d.ts",
|
|
19
16
|
"exports": {
|
|
20
17
|
".": {
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
"types": "./dists/index.d.ts"
|
|
24
|
-
},
|
|
25
|
-
"require": {
|
|
26
|
-
"default": "./dists/index.cjs",
|
|
27
|
-
"types": "./dists/index.d.cts"
|
|
28
|
-
}
|
|
18
|
+
"default": "./dists/index.js",
|
|
19
|
+
"types": "./dists/index.d.ts"
|
|
29
20
|
},
|
|
30
21
|
"./package.json": "./package.json"
|
|
31
22
|
},
|
|
23
|
+
"imports": {
|
|
24
|
+
"#*": "./sources/*.ts"
|
|
25
|
+
},
|
|
32
26
|
"repository": {
|
|
33
27
|
"type": "git",
|
|
34
28
|
"url": "git+https://github.com/morrighan/packages.git",
|
|
@@ -36,19 +30,17 @@
|
|
|
36
30
|
},
|
|
37
31
|
"dependencies": {
|
|
38
32
|
"@babel/runtime-corejs3": "^7.29.2",
|
|
39
|
-
"
|
|
33
|
+
"@std/fmt": "npm:@jsr/std__fmt@^1.0.9",
|
|
40
34
|
"cli-highlight": "^2.1.11",
|
|
41
35
|
"cls-rtracer": "^2.6.3",
|
|
42
36
|
"core-js-pure": "^3.49.0",
|
|
43
37
|
"luxon": "^3.7.2",
|
|
44
38
|
"morgan": "^1.10.1",
|
|
45
|
-
"pretty-bytes": "^7.1.0",
|
|
46
|
-
"pretty-ms": "^9.3.0",
|
|
47
39
|
"winston": "^3.19.0"
|
|
48
40
|
},
|
|
49
41
|
"engines": {
|
|
50
|
-
"node": "^
|
|
51
|
-
"npm": "^11.
|
|
42
|
+
"node": "^24.15.0",
|
|
43
|
+
"npm": "^11.12.1"
|
|
52
44
|
},
|
|
53
45
|
"publishConfig": {
|
|
54
46
|
"registry": "https://registry.npmjs.org/",
|