@cichol/logger 4.5.0 → 4.6.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.
Files changed (39) hide show
  1. package/dists/index.cjs +74 -78
  2. package/dists/index.d.cts +210 -1
  3. package/dists/index.d.ts +210 -1
  4. package/dists/index.js +60 -64
  5. package/package.json +5 -9
  6. package/dists/classes/logger.d.cts +0 -32
  7. package/dists/classes/logger.d.ts +0 -32
  8. package/dists/formatters/command-line.d.cts +0 -2
  9. package/dists/formatters/command-line.d.ts +0 -2
  10. package/dists/formatters/morgan.d.cts +0 -7
  11. package/dists/formatters/morgan.d.ts +0 -7
  12. package/dists/handlers/debug.d.cts +0 -5
  13. package/dists/handlers/debug.d.ts +0 -5
  14. package/dists/handlers/error.d.cts +0 -13
  15. package/dists/handlers/error.d.ts +0 -13
  16. package/dists/handlers/fatal.d.cts +0 -4
  17. package/dists/handlers/fatal.d.ts +0 -4
  18. package/dists/handlers/http.d.cts +0 -5
  19. package/dists/handlers/http.d.ts +0 -5
  20. package/dists/handlers/index.d.cts +0 -12
  21. package/dists/handlers/index.d.ts +0 -12
  22. package/dists/handlers/info.d.cts +0 -5
  23. package/dists/handlers/info.d.ts +0 -5
  24. package/dists/handlers/notice.d.cts +0 -5
  25. package/dists/handlers/notice.d.ts +0 -5
  26. package/dists/handlers/query.d.cts +0 -13
  27. package/dists/handlers/query.d.ts +0 -13
  28. package/dists/handlers/verbose.d.cts +0 -5
  29. package/dists/handlers/verbose.d.ts +0 -5
  30. package/dists/handlers/warning.d.cts +0 -5
  31. package/dists/handlers/warning.d.ts +0 -5
  32. package/dists/helpers/color-scheme.d.cts +0 -12
  33. package/dists/helpers/color-scheme.d.ts +0 -12
  34. package/dists/helpers/constants.d.cts +0 -18
  35. package/dists/helpers/constants.d.ts +0 -18
  36. package/dists/helpers/label-decorator.d.cts +0 -2
  37. package/dists/helpers/label-decorator.d.ts +0 -2
  38. package/dists/helpers/logging-level.d.cts +0 -13
  39. package/dists/helpers/logging-level.d.ts +0 -13
package/dists/index.js CHANGED
@@ -98,8 +98,6 @@ function getChalkOf(colorSet) {
98
98
  return colorizerMap.get(colorSet) ?? chalk;
99
99
  }
100
100
 
101
- /* eslint-enable no-use-before-define */
102
-
103
101
  // Node.js built-in APIs.
104
102
 
105
103
  // Constants.
@@ -108,9 +106,7 @@ const {
108
106
  } = process.stdout;
109
107
  const isNotOnCLI = !isTTY;
110
108
  function decorateLabel(label, scheme) {
111
- if (isNotOnCLI) {
112
- return label;
113
- }
109
+ if (isNotOnCLI) return label;
114
110
  const chalk = getChalkOf(scheme);
115
111
  const decoratedLabel = chalk.bold(` ${label} `);
116
112
  return decoratedLabel;
@@ -130,8 +126,7 @@ const label$8 = decorateLabel('ERROR', ColorScheme.Critical);
130
126
  function mapLocationOfErrorThrown(filename) {
131
127
  let target = path.relative(rootPath, filename);
132
128
  if (_startsWithInstanceProperty(target).call(target, 'node_modules')) {
133
- target = chalk.gray(target).replace(/node_modules[\\/]([^\\/]+)(.*)/, (matches, moduleName, trailing) => `node_modules${path.sep}${chalk.bold.underline(moduleName)}${chalk.gray(trailing)}` // eslint-disable-line max-len
134
- );
129
+ target = chalk.gray(target).replace(/node_modules[\\/]([^\\/]+)(.*)/, (matches, moduleName, trailing) => `node_modules${path.sep}${chalk.bold.underline(moduleName)}${chalk.gray(trailing)}`);
135
130
  } else {
136
131
  target = `${chalk.gray(path.dirname(target) + path.sep)}${chalk.bold.underline(path.basename(target))}`;
137
132
  }
@@ -146,40 +141,40 @@ function handle$1(data) {
146
141
  return undefined;
147
142
  }
148
143
  const {
149
- name,
144
+ name: errorName,
150
145
  message,
151
146
  stack: rawStack = ''
152
147
  } = error;
153
- const stack = _mapInstanceProperty(_context = _mapInstanceProperty(_context2 = _mapInstanceProperty(_context3 = _sliceInstanceProperty(rawStack).call(rawStack, name.length + message.length + 3).split('\n')).call(_context3, line => line.replace(/^\s+at /g, ''))).call(_context2, line => path.isAbsolute(line) ? `<anonymous>${conjunction}${mapLocationOfErrorThrown(line)}` : line)).call(_context, line => line.replace(/^(.+) \((.+)\)$/, (matches, contextName, rawLocation) => {
154
- let location;
148
+ const stack = _mapInstanceProperty(_context = _mapInstanceProperty(_context2 = _mapInstanceProperty(_context3 = _sliceInstanceProperty(rawStack).call(rawStack, errorName.length + message.length + 3).split('\n')).call(_context3, line => line.replace(/^\s+at /g, ''))).call(_context2, line => path.isAbsolute(line) ? `<anonymous>${conjunction}${mapLocationOfErrorThrown(line)}` : line)).call(_context, line => line.replace(/^(.+) \((.+)\)$/, (matches, contextName, rawLocation) => {
149
+ let location = '';
155
150
  if (rawLocation === '<anonymous>') {
156
151
  location = chalk.gray(rawLocation);
157
152
  } else {
158
- const [filename, line, column] = rawLocation.split(':');
153
+ const [filename, occurredLine, occurredColumn] = rawLocation.split(':');
159
154
  if (path.isAbsolute(filename)) {
160
155
  const target = mapLocationOfErrorThrown(path.relative(rootPath, filename));
161
- const trailing = chalk.gray(`:${line}:${column}`);
156
+ const trailing = chalk.gray(`:${occurredLine}:${occurredColumn}`);
162
157
  location = target + trailing;
163
- } else {
164
- location = chalk.gray(`https://github.com/${chalk.bold.underline('nodejs')}/node/blob/${version}/lib/${filename}#L${line}`); // eslint-disable-line max-len
158
+ } else if (!_startsWithInstanceProperty(filename).call(filename, 'data:')) {
159
+ location = chalk.gray(`https://github.com/${chalk.bold.underline('nodejs')}/node/blob/${version}/lib/${filename}#L${occurredLine}`);
165
160
  }
166
161
  }
167
162
  return `${contextName}${conjunction}${location}`;
168
163
  })).join('\n');
169
- const label = decorateLabel(name, ColorScheme.Critical);
164
+ const decoratedLabel = decorateLabel(errorName, ColorScheme.Critical);
170
165
  const payload = `${message}\n\n${stack}\n`;
171
166
  return {
172
- label,
167
+ label: decoratedLabel,
173
168
  payload
174
169
  };
175
170
  }
176
171
 
177
172
  var ErrorHandler = /*#__PURE__*/Object.freeze({
178
- __proto__: null,
179
- default: handle$1,
180
- label: label$8,
181
- level: level$8,
182
- name: name$8
173
+ __proto__: null,
174
+ default: handle$1,
175
+ label: label$8,
176
+ level: level$8,
177
+ name: name$8
183
178
  });
184
179
 
185
180
  // Local helpers.
@@ -188,13 +183,14 @@ var ErrorHandler = /*#__PURE__*/Object.freeze({
188
183
  const name$7 = 'fatal';
189
184
  const level$7 = LoggingLevel.Fatal;
190
185
  const label$7 = decorateLabel('FATAL', ColorScheme.Critical);
186
+ // eslint-disable-line no-restricted-exports
191
187
 
192
188
  var FatalHandler = /*#__PURE__*/Object.freeze({
193
- __proto__: null,
194
- default: handle$1,
195
- label: label$7,
196
- level: level$7,
197
- name: name$7
189
+ __proto__: null,
190
+ default: handle$1,
191
+ label: label$7,
192
+ level: level$7,
193
+ name: name$7
198
194
  });
199
195
 
200
196
  // Local helpers.
@@ -206,11 +202,11 @@ const label$6 = decorateLabel('WARNING', ColorScheme.Warning);
206
202
  var warning = null;
207
203
 
208
204
  var WarningHandler = /*#__PURE__*/Object.freeze({
209
- __proto__: null,
210
- default: warning,
211
- label: label$6,
212
- level: level$6,
213
- name: name$6
205
+ __proto__: null,
206
+ default: warning,
207
+ label: label$6,
208
+ level: level$6,
209
+ name: name$6
214
210
  });
215
211
 
216
212
  // Local helpers.
@@ -222,11 +218,11 @@ const label$5 = decorateLabel('NOTICE', ColorScheme.Regular);
222
218
  var notice = null;
223
219
 
224
220
  var NoticeHandler = /*#__PURE__*/Object.freeze({
225
- __proto__: null,
226
- default: notice,
227
- label: label$5,
228
- level: level$5,
229
- name: name$5
221
+ __proto__: null,
222
+ default: notice,
223
+ label: label$5,
224
+ level: level$5,
225
+ name: name$5
230
226
  });
231
227
 
232
228
  // Local helpers.
@@ -238,11 +234,11 @@ const label$4 = decorateLabel('INFO', ColorScheme.Regular);
238
234
  var info = null;
239
235
 
240
236
  var InfoHandler = /*#__PURE__*/Object.freeze({
241
- __proto__: null,
242
- default: info,
243
- label: label$4,
244
- level: level$4,
245
- name: name$4
237
+ __proto__: null,
238
+ default: info,
239
+ label: label$4,
240
+ level: level$4,
241
+ name: name$4
246
242
  });
247
243
 
248
244
  // Local helpers.
@@ -254,11 +250,11 @@ const label$3 = decorateLabel('HTTP', ColorScheme.Http);
254
250
  var http = null;
255
251
 
256
252
  var HttpHandler = /*#__PURE__*/Object.freeze({
257
- __proto__: null,
258
- default: http,
259
- label: label$3,
260
- level: level$3,
261
- name: name$3
253
+ __proto__: null,
254
+ default: http,
255
+ label: label$3,
256
+ level: level$3,
257
+ name: name$3
262
258
  });
263
259
 
264
260
  // Highlight.js
@@ -280,11 +276,11 @@ function handle(data) {
280
276
  }
281
277
 
282
278
  var QueryHandler = /*#__PURE__*/Object.freeze({
283
- __proto__: null,
284
- default: handle,
285
- label: label$2,
286
- level: level$2,
287
- name: name$2
279
+ __proto__: null,
280
+ default: handle,
281
+ label: label$2,
282
+ level: level$2,
283
+ name: name$2
288
284
  });
289
285
 
290
286
  // Local helpers.
@@ -296,11 +292,11 @@ const label$1 = decorateLabel('VERBOSE', ColorScheme.Loud);
296
292
  var verbose = null;
297
293
 
298
294
  var VerboseHandler = /*#__PURE__*/Object.freeze({
299
- __proto__: null,
300
- default: verbose,
301
- label: label$1,
302
- level: level$1,
303
- name: name$1
295
+ __proto__: null,
296
+ default: verbose,
297
+ label: label$1,
298
+ level: level$1,
299
+ name: name$1
304
300
  });
305
301
 
306
302
  // Local helpers.
@@ -312,11 +308,11 @@ const label = decorateLabel('DEBUG', ColorScheme.Loud);
312
308
  var debug = null;
313
309
 
314
310
  var DebugHandler = /*#__PURE__*/Object.freeze({
315
- __proto__: null,
316
- default: debug,
317
- label: label,
318
- level: level,
319
- name: name
311
+ __proto__: null,
312
+ default: debug,
313
+ label: label,
314
+ level: level,
315
+ name: name
320
316
  });
321
317
 
322
318
  // Handler implementations.
@@ -491,12 +487,12 @@ class Logger {
491
487
 
492
488
  log(...args) {
493
489
  const logger = this.#logger;
494
- const morgan = this.#morgan;
490
+ const format = this.#morgan;
495
491
  switch (true) {
496
492
  case args.length >= 2 && args[0] instanceof IncomingMessage && args[1] instanceof ServerResponse:
497
493
  {
498
494
  const [request, response] = args;
499
- return Promise$1.fromCallback(callback => morgan(request, response, callback));
495
+ return Promise$1.fromCallback(callback => format(request, response, callback));
500
496
  }
501
497
  case args.length >= 1 && args[0] instanceof Error:
502
498
  {
@@ -520,4 +516,4 @@ class Logger {
520
516
  var logger = Logger.instance;
521
517
 
522
518
  export { logger as default };
523
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZXMvaGVscGVycy9sb2dnaW5nLWxldmVsLnRzIiwiLi4vc291cmNlcy9oZWxwZXJzL2NvbG9yLXNjaGVtZS50cyIsIi4uL3NvdXJjZXMvaGVscGVycy9sYWJlbC1kZWNvcmF0b3IudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL2Vycm9yLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9mYXRhbC50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvd2FybmluZy50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvbm90aWNlLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9pbmZvLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9odHRwLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9xdWVyeS50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvdmVyYm9zZS50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvZGVidWcudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL2luZGV4LnRzIiwiLi4vc291cmNlcy9mb3JtYXR0ZXJzL2NvbW1hbmQtbGluZS50cyIsIi4uL3NvdXJjZXMvaGVscGVycy9jb25zdGFudHMudHMiLCIuLi9zb3VyY2VzL2Zvcm1hdHRlcnMvbW9yZ2FuLnRzIiwiLi4vc291cmNlcy9jbGFzc2VzL2xvZ2dlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBMb2dnaW5nTGV2ZWwgPSB7XG4gICAgLy8gQ3JpdGljYWwgbGV2ZWxzLiAoSXQgd2lsbCBjcmFzaCB0aGUgcHJvY2VzcylcbiAgICBGYXRhbDogMCxcbiAgICBFcnJvcjogMSxcblxuICAgIC8vIFdhcm5pbmcgbGV2ZWxzLiAoSXQganVzdCByZXBvcnQgd2FybmluZyBpbmZvcm1hdGlvbiwgbm90IGNyYXNoIHRoZSBwcm9jZXNzKVxuICAgIFdhcm5pbmc6IDIsXG5cbiAgICAvLyBSZWd1bGFyIGxldmVsIGFuZCBhbGlhc2VzLlxuICAgIE5vdGljZTogMyxcbiAgICBJbmZvOiAzLFxuXG4gICAgLy8gTWF5YmUgc2Vuc2l0aXZlIGxldmVscy4gKEluIGdlbmVyYWwsIGRvZXMgbm90IHVzZWZ1bClcbiAgICBIdHRwOiA0LFxuICAgIFF1ZXJ5OiA0LFxuXG4gICAgLy8gTG91ZCBsZXZlbHMuXG4gICAgVmVyYm9zZTogNSxcbiAgICBEZWJ1ZzogNVxufSBhcyBjb25zdDtcblxudHlwZSBMb2dnaW5nTGV2ZWwgPSB0eXBlb2YgTG9nZ2luZ0xldmVsW2tleW9mIHR5cGVvZiBMb2dnaW5nTGV2ZWxdO1xuXG5leHBvcnQgZGVmYXVsdCBMb2dnaW5nTGV2ZWw7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrLCB7IHR5cGUgQ2hhbGtJbnN0YW5jZSB9IGZyb20gJ2NoYWxrJztcblxuLy8gQ29uc3RhbnRzLlxuY29uc3QgY29sb3JpemVyTWFwID0gbmV3IE1hcDxudW1iZXIsIENoYWxrSW5zdGFuY2U+KCk7XG5cbi8vIEhlbHBlcnMuXG5mdW5jdGlvbiBjcmVhdGVTY2hlbWUob3B0aW9uczogeyBiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLCBmb3JlZ3JvdW5kOiBDb2xvclZhbHVlIH0pOiBudW1iZXIge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGNvbG9yaXplck1hcC5zaXplO1xuICAgIGNvbnN0IGNvbG9yaXplciA9IGNoYWxrLmJnSGV4KG9wdGlvbnMuYmFja2dyb3VuZCkuaGV4KG9wdGlvbnMuZm9yZWdyb3VuZCk7XG5cbiAgICBjb2xvcml6ZXJNYXAuc2V0KG5leHRJbmRleCwgY29sb3JpemVyKTtcblxuICAgIHJldHVybiBuZXh0SW5kZXg7XG59XG5cbi8vIENvbG9yIGRlZmluaXRpb25zLlxuY29uc3QgQ29sb3JWYWx1ZSA9IHtcbiAgICAvLyBCYXNpYyBjb2xvcnMuXG4gICAgV2hpdGU6ICcjRkZGRkZGJyxcbiAgICBHcmF5OiAnIzgwODA4MCcsXG4gICAgQmxhY2s6ICcjMDAwMDAwJyxcblxuICAgIC8vIFNwZWNpYWxpemVkIGNvbG9ycy5cbiAgICBDcml0aWNhbDogJyNENjMwMzEnLFxuICAgIFdhcm5pbmc6ICcjRkRDQjZFJyxcbiAgICBSZWd1bGFyOiAnIzA5ODRFMycsXG4gICAgSHR0cDogJyM2QUIwNEMnLFxuICAgIFF1ZXJ5OiAnIzM5OUFGMydcbn0gYXMgY29uc3Q7XG5cbnR5cGUgQ29sb3JWYWx1ZSA9IHR5cGVvZiBDb2xvclZhbHVlW2tleW9mIHR5cGVvZiBDb2xvclZhbHVlXTtcblxuY29uc3QgQ29sb3JTY2hlbWUgPSB7XG4gICAgQ3JpdGljYWw6IGNyZWF0ZVNjaGVtZSh7XG4gICAgICAgIGJhY2tncm91bmQ6IENvbG9yVmFsdWUuQ3JpdGljYWwsXG4gICAgICAgIGZvcmVncm91bmQ6IENvbG9yVmFsdWUuQmxhY2tcbiAgICB9KSxcblxuICAgIFdhcm5pbmc6IGNyZWF0ZVNjaGVtZSh7XG4gICAgICAgIGJhY2tncm91bmQ6IENvbG9yVmFsdWUuV2FybmluZyxcbiAgICAgICAgZm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5CbGFja1xuICAgIH0pLFxuXG4gICAgUmVndWxhcjogY3JlYXRlU2NoZW1lKHtcbiAgICAgICAgYmFja2dyb3VuZDogQ29sb3JWYWx1ZS5SZWd1bGFyLFxuICAgICAgICBmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLldoaXRlXG4gICAgfSksXG5cbiAgICBIdHRwOiBjcmVhdGVTY2hlbWUoe1xuICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLkh0dHAsXG4gICAgICAgIGZvcmVncm91bmQ6IENvbG9yVmFsdWUuQmxhY2tcbiAgICB9KSxcblxuICAgIFF1ZXJ5OiBjcmVhdGVTY2hlbWUoe1xuICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLlF1ZXJ5LFxuICAgICAgICBmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLkJsYWNrXG4gICAgfSksXG5cbiAgICBMb3VkOiBjcmVhdGVTY2hlbWUoe1xuICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLkJsYWNrLFxuICAgICAgICBmb3JlZ3JvdW5kOiBDb2xvclZhbHVlLkdyYXlcbiAgICB9KVxufSBhcyBjb25zdDtcblxudHlwZSBDb2xvclNjaGVtZSA9IHR5cGVvZiBDb2xvclNjaGVtZVtrZXlvZiB0eXBlb2YgQ29sb3JTY2hlbWVdO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbGtPZihjb2xvclNldDogQ29sb3JTY2hlbWUpOiBDaGFsa0luc3RhbmNlIHtcbiAgICByZXR1cm4gY29sb3JpemVyTWFwLmdldChjb2xvclNldCkgPz8gY2hhbGs7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU2NoZW1lO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdwcm9jZXNzJztcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBDb2xvclNjaGVtZSwgeyBnZXRDaGFsa09mIH0gZnJvbSAnLi9jb2xvci1zY2hlbWUnO1xuXG4vLyBDb25zdGFudHMuXG5jb25zdCB7IGlzVFRZIH0gPSBwcm9jZXNzLnN0ZG91dDtcbmNvbnN0IGlzTm90T25DTEkgPSAhaXNUVFk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlY29yYXRlTGFiZWw8VCBleHRlbmRzIHN0cmluZz4obGFiZWw6IFQsIHNjaGVtZTogQ29sb3JTY2hlbWUpOiBUIHtcbiAgICBpZiAoaXNOb3RPbkNMSSkge1xuICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbGsgPSBnZXRDaGFsa09mKHNjaGVtZSk7XG4gICAgY29uc3QgZGVjb3JhdGVkTGFiZWwgPSBjaGFsay5ib2xkKGAgJHtsYWJlbH0gYCk7XG5cbiAgICByZXR1cm4gZGVjb3JhdGVkTGFiZWwgYXMgVDtcbn1cbiIsIi8vIE5vZGUuanMgYnVpbHQtaW4gQVBJcy5cbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHByb2Nlc3MsIHsgdmVyc2lvbiB9IGZyb20gJ3Byb2Nlc3MnO1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJztcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSc7XG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcic7XG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMuXG50eXBlIExvZ2dpbmdEYXRhID0geyBsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSAmIFJlY29yZDxQcm9wZXJ0eUtleSwgYW55PjtcbnR5cGUgSGFuZGxlZERhdGEgPSB7IGxhYmVsOiBzdHJpbmcsIHBheWxvYWQ6IHN0cmluZyB9O1xuXG4vLyBDb25zdGFudHMuXG5jb25zdCByb290UGF0aCA9IHByb2Nlc3MuY3dkKCk7XG5jb25zdCBjb25qdW5jdGlvbiA9IGAgJHtjaGFsay5ibHVlKCfilIDilIAnKX0gYDtcbmNvbnN0IHNwbGF0OiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sLmZvcignc3BsYXQnKTtcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2Vycm9yJztcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5FcnJvcjtcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ0VSUk9SJywgQ29sb3JTY2hlbWUuQ3JpdGljYWwpO1xuXG5mdW5jdGlvbiBtYXBMb2NhdGlvbk9mRXJyb3JUaHJvd24oZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHRhcmdldCA9IHBhdGgucmVsYXRpdmUocm9vdFBhdGgsIGZpbGVuYW1lKTtcblxuICAgIGlmICh0YXJnZXQuc3RhcnRzV2l0aCgnbm9kZV9tb2R1bGVzJykpIHtcbiAgICAgICAgdGFyZ2V0ID0gY2hhbGsuZ3JheSh0YXJnZXQpLnJlcGxhY2UoXG4gICAgICAgICAgICAvbm9kZV9tb2R1bGVzW1xcXFwvXShbXlxcXFwvXSspKC4qKS8sXG4gICAgICAgICAgICAobWF0Y2hlcywgbW9kdWxlTmFtZTogc3RyaW5nLCB0cmFpbGluZzogc3RyaW5nKSA9PiBgbm9kZV9tb2R1bGVzJHtwYXRoLnNlcH0ke2NoYWxrLmJvbGQudW5kZXJsaW5lKG1vZHVsZU5hbWUpfSR7Y2hhbGsuZ3JheSh0cmFpbGluZyl9YCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG1heC1sZW5cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQgPSBgJHtjaGFsay5ncmF5KHBhdGguZGlybmFtZSh0YXJnZXQpICsgcGF0aC5zZXApfSR7Y2hhbGsuYm9sZC51bmRlcmxpbmUocGF0aC5iYXNlbmFtZSh0YXJnZXQpKX1gO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhbmRsZShkYXRhOiBMb2dnaW5nRGF0YSk6IEhhbmRsZWREYXRhIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB7IFtzcGxhdF06IFsgZXJyb3IgXSA9IFtdIH0gPSBkYXRhIGFzIGFueTtcblxuICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgeyBuYW1lLCBtZXNzYWdlLCBzdGFjazogcmF3U3RhY2sgPSAnJyB9ID0gZXJyb3I7XG5cbiAgICBjb25zdCBzdGFjayA9IHJhd1N0YWNrXG4gICAgICAgIC5zbGljZShuYW1lLmxlbmd0aCArIG1lc3NhZ2UubGVuZ3RoICsgMylcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKGxpbmUgPT4gbGluZS5yZXBsYWNlKC9eXFxzK2F0IC9nLCAnJykpXG4gICAgICAgIC5tYXAobGluZSA9PiAocGF0aC5pc0Fic29sdXRlKGxpbmUpID8gYDxhbm9ueW1vdXM+JHtjb25qdW5jdGlvbn0ke21hcExvY2F0aW9uT2ZFcnJvclRocm93bihsaW5lKX1gIDogbGluZSkpXG4gICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoL14oLispIFxcKCguKylcXCkkLywgKG1hdGNoZXMsIGNvbnRleHROYW1lOiBzdHJpbmcsIHJhd0xvY2F0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbjtcblxuICAgICAgICAgICAgaWYgKHJhd0xvY2F0aW9uID09PSAnPGFub255bW91cz4nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBjaGFsay5ncmF5KHJhd0xvY2F0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgWyBmaWxlbmFtZSwgbGluZSwgY29sdW1uIF0gPSByYXdMb2NhdGlvbi5zcGxpdCgnOicpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gbWFwTG9jYXRpb25PZkVycm9yVGhyb3duKHBhdGgucmVsYXRpdmUocm9vdFBhdGgsIGZpbGVuYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYWlsaW5nID0gY2hhbGsuZ3JheShgOiR7bGluZX06JHtjb2x1bW59YCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSB0YXJnZXQgKyB0cmFpbGluZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IGNoYWxrLmdyYXkoYGh0dHBzOi8vZ2l0aHViLmNvbS8ke2NoYWxrLmJvbGQudW5kZXJsaW5lKCdub2RlanMnKX0vbm9kZS9ibG9iLyR7dmVyc2lvbn0vbGliLyR7ZmlsZW5hbWV9I0wke2xpbmV9YCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGAke2NvbnRleHROYW1lfSR7Y29uanVuY3Rpb259JHtsb2NhdGlvbn1gO1xuICAgICAgICB9KSlcbiAgICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKG5hbWUsIENvbG9yU2NoZW1lLkNyaXRpY2FsKTtcbiAgICBjb25zdCBwYXlsb2FkID0gYCR7bWVzc2FnZX1cXG5cXG4ke3N0YWNrfVxcbmA7XG5cbiAgICByZXR1cm4geyBsYWJlbCwgcGF5bG9hZCB9O1xufVxuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJztcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSc7XG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcic7XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdmYXRhbCc7XG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuRmF0YWw7XG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdGQVRBTCcsIENvbG9yU2NoZW1lLkNyaXRpY2FsKTtcblxuZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gJy4vZXJyb3InO1xuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJztcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSc7XG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcic7XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICd3YXJuaW5nJztcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5XYXJuaW5nO1xuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnV0FSTklORycsIENvbG9yU2NoZW1lLldhcm5pbmcpO1xuXG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJztcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSc7XG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcic7XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdub3RpY2UnO1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLk5vdGljZTtcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ05PVElDRScsIENvbG9yU2NoZW1lLlJlZ3VsYXIpO1xuXG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJztcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSc7XG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcic7XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdpbmZvJztcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5JbmZvO1xuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnSU5GTycsIENvbG9yU2NoZW1lLlJlZ3VsYXIpO1xuXG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJztcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSc7XG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcic7XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdodHRwJztcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5IdHRwO1xuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnSFRUUCcsIENvbG9yU2NoZW1lLkh0dHApO1xuXG5leHBvcnQgZGVmYXVsdCBudWxsO1xuIiwiLy8gSGlnaGxpZ2h0LmpzXG5pbXBvcnQgaGlnaGxpZ2h0IGZyb20gJ2NsaS1oaWdobGlnaHQnO1xuXG4vLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnO1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJy4uL2hlbHBlcnMvY29sb3Itc2NoZW1lJztcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJztcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbnR5cGUgTG9nZ2luZ0RhdGEgPSB7IGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9ICYgUmVjb3JkPFByb3BlcnR5S2V5LCBhbnk+O1xudHlwZSBIYW5kbGVkRGF0YSA9IHsgbGFiZWw6IHN0cmluZywgcGF5bG9hZDogc3RyaW5nIH07XG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdxdWVyeSc7XG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuUXVlcnk7XG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdRVUVSWScsIENvbG9yU2NoZW1lLlF1ZXJ5KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFuZGxlKGRhdGE6IExvZ2dpbmdEYXRhKTogSGFuZGxlZERhdGEgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBheWxvYWQgPSBoaWdobGlnaHQoZGF0YS5tZXNzYWdlLCB7IGxhbmd1YWdlOiAnc3FsJyB9KTtcblxuICAgIHJldHVybiB7IGxhYmVsLCBwYXlsb2FkIH07XG59XG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnO1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJy4uL2hlbHBlcnMvY29sb3Itc2NoZW1lJztcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJztcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ3ZlcmJvc2UnO1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLlZlcmJvc2U7XG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdWRVJCT1NFJywgQ29sb3JTY2hlbWUuTG91ZCk7XG5cbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnO1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJy4uL2hlbHBlcnMvY29sb3Itc2NoZW1lJztcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJztcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2RlYnVnJztcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5EZWJ1ZztcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ0RFQlVHJywgQ29sb3JTY2hlbWUuTG91ZCk7XG5cbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCIvLyBIYW5kbGVyIGltcGxlbWVudGF0aW9ucy5cbmltcG9ydCAqIGFzIEZhdGFsSGFuZGxlciBmcm9tICcuL2ZhdGFsJztcbmltcG9ydCAqIGFzIEVycm9ySGFuZGxlciBmcm9tICcuL2Vycm9yJztcbmltcG9ydCAqIGFzIFdhcm5pbmdIYW5kbGVyIGZyb20gJy4vd2FybmluZyc7XG5pbXBvcnQgKiBhcyBOb3RpY2VIYW5kbGVyIGZyb20gJy4vbm90aWNlJztcbmltcG9ydCAqIGFzIEluZm9IYW5kbGVyIGZyb20gJy4vaW5mbyc7XG5pbXBvcnQgKiBhcyBIdHRwSGFuZGxlciBmcm9tICcuL2h0dHAnO1xuaW1wb3J0ICogYXMgUXVlcnlIYW5kbGVyIGZyb20gJy4vcXVlcnknO1xuaW1wb3J0ICogYXMgVmVyYm9zZUhhbmRsZXIgZnJvbSAnLi92ZXJib3NlJztcbmltcG9ydCAqIGFzIERlYnVnSGFuZGxlciBmcm9tICcuL2RlYnVnJztcblxuY29uc3QgaGFuZGxlcnMgPSBbXG4gICAgRmF0YWxIYW5kbGVyLFxuICAgIEVycm9ySGFuZGxlcixcbiAgICBXYXJuaW5nSGFuZGxlcixcbiAgICBOb3RpY2VIYW5kbGVyLFxuICAgIEluZm9IYW5kbGVyLFxuICAgIEh0dHBIYW5kbGVyLFxuICAgIFF1ZXJ5SGFuZGxlcixcbiAgICBWZXJib3NlSGFuZGxlcixcbiAgICBEZWJ1Z0hhbmRsZXJcbl07XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbE5hbWUgPSAodHlwZW9mIGhhbmRsZXJzIGV4dGVuZHMgKGluZmVyIFQpW10gPyBUIDogbmV2ZXIpWyduYW1lJ107XG5leHBvcnQgZGVmYXVsdCBoYW5kbGVycztcbiIsIi8vIFRoaXJkLXBhcnR5IG1vZHVsZXMuXG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHJUcmFjZXIgZnJvbSAnY2xzLXJ0cmFjZXInO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd3aW5zdG9uJztcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJztcblxuLy8gSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMuXG5pbXBvcnQgaGFuZGxlcnMgZnJvbSAnLi4vaGFuZGxlcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXQucHJpbnRmKGRhdGEgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGNoYWxrLmdyYXkoRGF0ZVRpbWUubm93KCkudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiB0cnVlIH0pKTtcbiAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlcnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGRhdGEubGV2ZWwpO1xuICAgIGNvbnN0IGZhbGxiYWNrID0geyBsYWJlbDogaGFuZGxlcj8ubGFiZWwsIHBheWxvYWQ6IGRhdGEubWVzc2FnZSB9O1xuICAgIGNvbnN0IHBlcmZvcm1IYW5kbGUgPSBoYW5kbGVyPy5kZWZhdWx0ID8/ICgoKTogdHlwZW9mIGZhbGxiYWNrID0+IGZhbGxiYWNrKTtcblxuICAgIC8vIEV4ZWN1dGUgaGFuZGxlciBhbmQgdGhlbiwgZ2V0IGRlY29yYXRlZCBwYXlsb2FkLlxuICAgIGNvbnN0IHsgbGFiZWwsIHBheWxvYWQgfSA9IFJlZmxlY3QuYXBwbHkocGVyZm9ybUhhbmRsZSwgdW5kZWZpbmVkLCBbIGRhdGEgXSkgPz8gZmFsbGJhY2s7XG5cbiAgICBsZXQgZXh0cmFGaW5nZXJwcmludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKGhhbmRsZXI/LmxldmVsID09PSBMb2dnaW5nTGV2ZWwuSHR0cCkge1xuICAgICAgICBleHRyYUZpbmdlcnByaW50ID0gZGF0YS50cmFuc2FjdGlvbklkXG4gICAgICAgICAgICA/IGAoVHJhbnNhY3Rpb24tSUQgPSAke2RhdGEudHJhbnNhY3Rpb25JZCBhcyBzdHJpbmd9KWBcbiAgICAgICAgICAgIDogYChSZXF1ZXN0LUlEID0gJHtyVHJhY2VyLmlkKCkgYXMgc3RyaW5nfSlgO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtsYWJlbCBhcyBzdHJpbmd9ICR7dGltZXN0YW1wfSR7ZXh0cmFGaW5nZXJwcmludCA/IGAgJHtleHRyYUZpbmdlcnByaW50fWAgOiAnJ31cXG4ke3BheWxvYWQgYXMgc3RyaW5nfWA7XG59KTtcbiIsIi8vIE5vZGUuanMgYnVpbHQtaW4gQVBJcy5cbmltcG9ydCBjbHVzdGVyIGZyb20gJ2NsdXN0ZXInO1xuaW1wb3J0IHsgZW52IGFzIGVudmlyb25tZW50cyB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgaXNNYWluVGhyZWFkIH0gZnJvbSAnd29ya2VyX3RocmVhZHMnO1xuXG4vLyBUeXBlIGRlZmluaXRpb25zLlxuZXhwb3J0IGNvbnN0IEV4ZWN1dGlvbk1vZGUgPSB7XG4gICAgRGV2ZWxvcG1lbnRNb2RlOiAnZGV2ZWxvcG1lbnQnLFxuICAgIFByb2R1Y3Rpb25Nb2RlOiAncHJvZHVjdGlvbidcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBDbHVzdGVyaW5nTW9kZSA9IHtcbiAgICBNYXN0ZXJQcm9jZXNzOiAwLFxuICAgIFdvcmtlclByb2Nlc3M6IDFcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBUaHJlYWRpbmdNb2RlID0ge1xuICAgIE1haW5UaHJlYWQ6IDAsXG4gICAgV29ya2VyVGhyZWFkOiAxXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBFeGVjdXRpb25Nb2RlID0gdHlwZW9mIEV4ZWN1dGlvbk1vZGVba2V5b2YgdHlwZW9mIEV4ZWN1dGlvbk1vZGVdO1xuZXhwb3J0IHR5cGUgQ2x1c3RlcmluZ01vZGUgPSB0eXBlb2YgQ2x1c3RlcmluZ01vZGVba2V5b2YgdHlwZW9mIENsdXN0ZXJpbmdNb2RlXTtcbmV4cG9ydCB0eXBlIFRocmVhZGluZ01vZGUgPSB0eXBlb2YgVGhyZWFkaW5nTW9kZVtrZXlvZiB0eXBlb2YgVGhyZWFkaW5nTW9kZV07XG5cbi8vIEV4cG9ydGluZ3MuXG5leHBvcnQgY29uc3QgZXhlY3V0aW9uTW9kZSA9IGVudmlyb25tZW50cy5OT0RFX0VOViBhcyBFeGVjdXRpb25Nb2RlID8/IEV4ZWN1dGlvbk1vZGUuRGV2ZWxvcG1lbnRNb2RlO1xuXG5leHBvcnQgY29uc3QgY2x1c3RlcmluZ01vZGU6IENsdXN0ZXJpbmdNb2RlID0gY2x1c3Rlci5pc1ByaW1hcnkgPz8gY2x1c3Rlci5pc01hc3RlclxuICAgID8gQ2x1c3RlcmluZ01vZGUuTWFzdGVyUHJvY2Vzc1xuICAgIDogQ2x1c3RlcmluZ01vZGUuV29ya2VyUHJvY2VzcztcblxuZXhwb3J0IGNvbnN0IHRocmVhZGluZ01vZGU6IFRocmVhZGluZ01vZGUgPSBpc01haW5UaHJlYWRcbiAgICA/IFRocmVhZGluZ01vZGUuTWFpblRocmVhZFxuICAgIDogVGhyZWFkaW5nTW9kZS5Xb3JrZXJUaHJlYWQ7XG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQge1xuICAgIFNUQVRVU19DT0RFUyxcbiAgICBJbmNvbWluZ01lc3NhZ2UgYXMgSHR0cFJlcXVlc3QsXG4gICAgU2VydmVyUmVzcG9uc2UgYXMgSHR0cFJlc3BvbnNlXG59IGZyb20gJ2h0dHAnO1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBtb3JnYW4gZnJvbSAnbW9yZ2FuJztcbmltcG9ydCBwcmV0dHlCeXRlcyBmcm9tICdwcmV0dHktYnl0ZXMnO1xuaW1wb3J0IHByZXR0eU1zIGZyb20gJ3ByZXR0eS1tcyc7XG5cbi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgeyBFeGVjdXRpb25Nb2RlLCBleGVjdXRpb25Nb2RlIH0gZnJvbSAnLi4vaGVscGVycy9jb25zdGFudHMnO1xuXG4vLyBUeXBlIGRlZmluaXRpb25zLlxuZGVjbGFyZSBtb2R1bGUgJ21vcmdhbicge1xuICAgIGNvbnN0IGNvbWJpbmVkOiBtb3JnYW4uRm9ybWF0Rm47XG59XG5cbmludGVyZmFjZSBUb2tlbkluZGV4ZXIge1xuICAgIFt0b2tlbk5hbWU6IHN0cmluZ106IChcbiAgICAgICAgcmVxdWVzdDogSHR0cFJlcXVlc3QsXG4gICAgICAgIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2UsXG4gICAgICAgIC4uLmFyZ3M6IGFueVtdXG4gICAgKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8vIEhlbHBlcnMuXG5mdW5jdGlvbiBkZWNvcmF0ZVN0YXR1c0NvZGUoc3RhdHVzQ29kZToga2V5b2YgdHlwZW9mIFNUQVRVU19DT0RFUyk6IHN0cmluZyB7XG4gICAgY29uc3QgZ3JvdXBPZkNvZGUgPSBNYXRoLmZsb29yKE51bWJlcihzdGF0dXNDb2RlKSAvIDEwMCkgKiAxMDA7XG4gICAgY29uc3QgYmFzZU1lc3NhZ2UgPSBgJHtzdGF0dXNDb2RlfSAke1NUQVRVU19DT0RFU1tzdGF0dXNDb2RlXSBhcyBzdHJpbmd9YDtcblxuICAgIHN3aXRjaCAoZ3JvdXBPZkNvZGUpIHtcbiAgICBjYXNlIDIwMDoge1xuICAgICAgICByZXR1cm4gY2hhbGsuZ3JlZW4oYmFzZU1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGNhc2UgMzAwOiB7XG4gICAgICAgIHJldHVybiBjaGFsay5tYWdlbnRhKGJhc2VNZXNzYWdlKTtcbiAgICB9XG4gICAgY2FzZSA0MDA6XG4gICAgY2FzZSA1MDA6IHtcbiAgICAgICAgcmV0dXJuIGNoYWxrLnJlZChiYXNlTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gY2hhbGsuZ3JheShiYXNlTWVzc2FnZSk7XG4gICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0Rm9yTW9yZ2FuKHRva2VuczogYW55LCByZXF1ZXN0OiBIdHRwUmVxdWVzdCwgcmVzcG9uc2U6IEh0dHBSZXNwb25zZSk6IHN0cmluZyB7XG4gICAgZnVuY3Rpb24gXyh0b2tlbjogc3RyaW5nLCAuLi5zdWJBcmdzOiBhbnlbXSk6IHN0cmluZyB8IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICByZXR1cm4gKHRva2VucyBhcyBUb2tlbkluZGV4ZXIpW3Rva2VuXShyZXF1ZXN0LCByZXNwb25zZSwgLi4uc3ViQXJncyk7XG4gICAgfVxuXG4gICAgLy8gUmF3IHZhbHVlcy5cbiAgICBjb25zdCBtZXRob2QgPSBfKCdtZXRob2QnKTtcbiAgICBjb25zdCBVUkwgPSBfKCd1cmwnKTtcbiAgICBjb25zdCBodHRwVmVyc2lvbiA9IGBIVFRQLyR7XygnaHR0cC12ZXJzaW9uJykgYXMgc3RyaW5nfWA7XG4gICAgY29uc3Qgc3RhdHVzQ29kZSA9IE51bWJlcihfKCdzdGF0dXMnKSk7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IE51bWJlcihfKCdyZXMnLCAnY29udGVudC1sZW5ndGgnKSA/PyAtMSk7XG4gICAgY29uc3QgcmVzcG9uc2VUaW1lID0gTnVtYmVyKF8oJ3Jlc3BvbnNlLXRpbWUnKSA/PyAtMSk7XG5cbiAgICAvLyBEZWNvcmF0ZWQgdmFsdWVzLlxuICAgIGNvbnN0ICRtZXRob2QgPSBjaGFsay5ib2xkKG1ldGhvZCk7XG4gICAgY29uc3QgJHZlcnNpb24gPSBjaGFsay5yZ2IoOTgsIDE3NywgMjU1KShodHRwVmVyc2lvbik7XG4gICAgY29uc3QgJHN0YXR1c0NvZGUgPSBkZWNvcmF0ZVN0YXR1c0NvZGUoc3RhdHVzQ29kZSk7XG4gICAgY29uc3QgJGNvbnRlbnRMZW5ndGggPSBjb250ZW50TGVuZ3RoID49IDAgPyBwcmV0dHlCeXRlcyhjb250ZW50TGVuZ3RoKSA6ICc/IEInO1xuICAgIGNvbnN0ICRyZXNwb25zZVRpbWUgPSByZXNwb25zZVRpbWUgPj0gMCA/IHByZXR0eU1zKHJlc3BvbnNlVGltZSkgOiAnJztcblxuICAgIC8vIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gICAgY29uc3QgbWV0YWRhdGEgPSBgKCR7JGNvbnRlbnRMZW5ndGh9LCAkeyRyZXNwb25zZVRpbWV9KWA7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICBg4oaSICR7JG1ldGhvZH0gJHtVUkwgYXMgc3RyaW5nfSAkeyR2ZXJzaW9ufWAsXG4gICAgICAgIGDihpAgJHskdmVyc2lvbn0gJHskc3RhdHVzQ29kZX0gJHttZXRhZGF0YX1gXG4gICAgXS5qb2luKCdcXG4nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXhlY3V0aW9uTW9kZSA9PT0gRXhlY3V0aW9uTW9kZS5EZXZlbG9wbWVudE1vZGUgPyBmb3JtYXRGb3JNb3JnYW4gOiBtb3JnYW4uY29tYmluZWQ7XG4iLCJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuXG4vLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UgYXMgSHR0cFJlcXVlc3QsIFNlcnZlclJlc3BvbnNlIGFzIEh0dHBSZXNwb25zZSB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IHsgUGFzc1Rocm91Z2ggfSBmcm9tICdzdHJlYW0nO1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IFByb21pc2UgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGxvZGFzaCBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vcmdhbiBmcm9tICdtb3JnYW4nO1xuaW1wb3J0IHR5cGUgeyBsZXZlbCBhcyBMb2dnaW5nTGV2ZWwgfSBmcm9tICd3aW5zdG9uJztcbmltcG9ydCAqIGFzIHdpbnN0b24gZnJvbSAnd2luc3Rvbic7XG5pbXBvcnQgeyBMb2dnZXIgYXMgQmFzZUxvZ2dlciB9IGZyb20gJ3dpbnN0b24nO1xuXG4vLyBGb3JtYXR0ZXJzLlxuaW1wb3J0IGZvcm1hdEZvckNMSSBmcm9tICcuLi9mb3JtYXR0ZXJzL2NvbW1hbmQtbGluZSc7XG5pbXBvcnQgZm9ybWF0Rm9yTW9yZ2FuIGZyb20gJy4uL2Zvcm1hdHRlcnMvbW9yZ2FuJztcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCB7IEV4ZWN1dGlvbk1vZGUsIGV4ZWN1dGlvbk1vZGUgfSBmcm9tICcuLi9oZWxwZXJzL2NvbnN0YW50cyc7XG5cbi8vIEhhbmRsZXIgaW1wbGVtZW50YXRpb25zLlxuaW1wb3J0IHR5cGUgeyBMb2dnaW5nTGV2ZWxOYW1lIH0gZnJvbSAnLi4vaGFuZGxlcnMnO1xuaW1wb3J0IGhhbmRsZXJzIGZyb20gJy4uL2hhbmRsZXJzJztcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbnR5cGUgTW9yZ2FuID0gKHJlcTogSHR0cFJlcXVlc3QsIHJlczogSHR0cFJlc3BvbnNlLCBuZXh0OiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuLy8gVHJhbnNwb3J0cy5cbmNvbnN0IHsgQ29uc29sZTogQ29uc29sZVRyYW5zcG9ydCB9ID0gd2luc3Rvbi50cmFuc3BvcnRzO1xuXG4vLyBLZXlzIGluIG9yZGVyIHRvIGFjY2VzcyBwcml2YXRlIHByb3BlcnRpZXMuXG5jb25zdCBLZXlPZkluc3RhbmNlOiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sKCdAY2ljaG9sL2xvZ2dlcjo6Y2xhc3Nlcy9sb2dnZXI6Okluc3RhbmNlJyk7XG5jb25zdCBLZXlPZlBhc3Nwb3J0OiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sKCdAY2ljaG9sL2xvZ2dlcjo6Y2xhc3Nlcy9sb2dnZXI6OlBhc3Nwb3J0Jyk7XG5cbmNsYXNzIExvZ2dlciB7XG4gICAgI2xvZ2dlcjogQmFzZUxvZ2dlciA9IHdpbnN0b24uY3JlYXRlTG9nZ2VyKHtcbiAgICAgICAgbGV2ZWxzOiBsb2Rhc2goaGFuZGxlcnMpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIGxldmVsIH0pID0+IFsgbmFtZSwgbGV2ZWwgXSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFsgLCBsZXZlbCBdKSA9PiB0eXBlb2YgbGV2ZWwgPT09ICdudW1iZXInKVxuICAgICAgICAgICAgLmZyb21QYWlycygpXG4gICAgICAgICAgICAudmFsdWUoKSxcblxuICAgICAgICBsZXZlbDogKGV4ZWN1dGlvbk1vZGUgPT09IEV4ZWN1dGlvbk1vZGUuUHJvZHVjdGlvbk1vZGUgPyAnaHR0cCcgOiAndmVyYm9zZScpIGFzIHR5cGVvZiBMb2dnaW5nTGV2ZWwsXG5cbiAgICAgICAgdHJhbnNwb3J0czogW1xuICAgICAgICAgICAgbmV3IENvbnNvbGVUcmFuc3BvcnQoeyBmb3JtYXQ6IGZvcm1hdEZvckNMSSB9KVxuICAgICAgICBdLFxuXG4gICAgICAgIGV4aXRPbkVycm9yOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgI21vcmdhbjogTW9yZ2FuID0gbW9yZ2FuKGZvcm1hdEZvck1vcmdhbiwge1xuICAgICAgICBzdHJlYW06IG5ldyBQYXNzVGhyb3VnaCh7IG9iamVjdE1vZGU6IHRydWUgfSkub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZygnaHR0cCcsIGRhdGEudHJpbSgpKTtcbiAgICAgICAgfSlcbiAgICB9KSBhcyBNb3JnYW47XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKHBhc3Nwb3J0OiB0eXBlb2YgS2V5T2ZQYXNzcG9ydCkge1xuICAgICAgICBpZiAocGFzc3BvcnQgIT09IEtleU9mUGFzc3BvcnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignTG9nZ2VyIGNsYXNzIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBpbiBkaXJlY3RseScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgaW5zdGFuY2UoKTogTG9nZ2VyIHtcbiAgICAgICAgaWYgKHRoaXMgIT09IExvZ2dlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdMb2dnZXIgY2xhc3MgaXMgbm90IGluaGVyaXRhYmxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoUmVmbGVjdC5oYXNPd25NZXRhZGF0YShLZXlPZkluc3RhbmNlLCBMb2dnZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25NZXRhZGF0YShLZXlPZkluc3RhbmNlLCBMb2dnZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTG9nZ2VyKEtleU9mUGFzc3BvcnQpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKEtleU9mSW5zdGFuY2UsIGluc3RhbmNlLCBMb2dnZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9nZ2luZyBtZXNzYWdlIHdpdGggc3BlY2lmaWMgbGV2ZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGV2ZWxcbiAgICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgICAqIEBwYXJhbSBhcmdzIEFkZGl0aW9uYWwgbWV0YWRhdGEuXG4gICAgICovXG4gICAgcHVibGljIGxvZyhsZXZlbDogTG9nZ2luZ0xldmVsTmFtZSwgbWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2dnaW5nIEhUVFAgSS9PLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3QgTm9kZS5qcyBidWlsdC1pbiBgSW5jb21pbmdNZXNzYWdlYCBpbnN0YW5jZSBmcm9tIGBodHRwYCBtb2R1bGUuXG4gICAgICogQHBhcmFtIHJlc3BvbnNlIE5vZGUuanMgYnVpbHQtaW4gYFNlcnZlclJlc3BvbnNlYCBpbnN0YW5jZSBmcm9tIGBodHRwYCBtb2R1bGUuXG4gICAgICovXG4gICAgcHVibGljIGxvZyhyZXF1ZXN0OiBIdHRwUmVxdWVzdCwgcmVzcG9uc2U6IEh0dHBSZXNwb25zZSk6IFByb21pc2U8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBMb2dnaW5nIGVycm9ycyBpbiBkZXRhaWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXJyb3JcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9nKGVycm9yOiBFcnJvcik6IHZvaWQ7XG5cbiAgICBwdWJsaWMgbG9nKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSB0aGlzLiNsb2dnZXI7XG4gICAgICAgIGNvbnN0IG1vcmdhbiA9IHRoaXMuI21vcmdhbjtcblxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgY2FzZSAoYXJncy5sZW5ndGggPj0gMiAmJiBhcmdzWzBdIGluc3RhbmNlb2YgSHR0cFJlcXVlc3QgJiYgYXJnc1sxXSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSk6IHtcbiAgICAgICAgICAgIGNvbnN0IFsgcmVxdWVzdCwgcmVzcG9uc2UgXSA9IGFyZ3MgYXMgWyBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIF07XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmZyb21DYWxsYmFjazx2b2lkPihjYWxsYmFjayA9PiBtb3JnYW4ocmVxdWVzdCwgcmVzcG9uc2UsIGNhbGxiYWNrKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIChhcmdzLmxlbmd0aCA+PSAxICYmIGFyZ3NbMF0gaW5zdGFuY2VvZiBFcnJvcik6IHtcbiAgICAgICAgICAgIGNvbnN0IFsgZXJyb3IsIC4uLmRhdGEgXSA9IGFyZ3MgYXMgWyBFcnJvciwgLi4uYW55W10gXTtcblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgIGxvZ2dlci5sb2coJ2Vycm9yJywgZXJyb3IubWVzc2FnZSwgZXJyb3IsIC4uLmRhdGEpO1xuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgY29uc3QgWyBsZXZlbCwgbWVzc2FnZSwgLi4uZGF0YSBdID0gYXJncyBhcyBbIHR5cGVvZiBMb2dnaW5nTGV2ZWwsIHN0cmluZywgLi4uYW55W10gXTtcblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgIGxvZ2dlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIC4uLmRhdGEpO1xuXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ2dlci5pbnN0YW5jZTtcbiJdLCJuYW1lcyI6WyJMb2dnaW5nTGV2ZWwiLCJGYXRhbCIsIkVycm9yIiwiV2FybmluZyIsIk5vdGljZSIsIkluZm8iLCJIdHRwIiwiUXVlcnkiLCJWZXJib3NlIiwiRGVidWciLCJjb2xvcml6ZXJNYXAiLCJfTWFwIiwiY3JlYXRlU2NoZW1lIiwib3B0aW9ucyIsIm5leHRJbmRleCIsInNpemUiLCJjb2xvcml6ZXIiLCJjaGFsayIsImJnSGV4IiwiYmFja2dyb3VuZCIsImhleCIsImZvcmVncm91bmQiLCJzZXQiLCJDb2xvclZhbHVlIiwiV2hpdGUiLCJHcmF5IiwiQmxhY2siLCJDcml0aWNhbCIsIlJlZ3VsYXIiLCJDb2xvclNjaGVtZSIsIkxvdWQiLCJnZXRDaGFsa09mIiwiY29sb3JTZXQiLCJnZXQiLCJpc1RUWSIsInByb2Nlc3MiLCJzdGRvdXQiLCJpc05vdE9uQ0xJIiwiZGVjb3JhdGVMYWJlbCIsImxhYmVsIiwic2NoZW1lIiwiZGVjb3JhdGVkTGFiZWwiLCJib2xkIiwicm9vdFBhdGgiLCJjd2QiLCJjb25qdW5jdGlvbiIsImJsdWUiLCJzcGxhdCIsIl9TeW1ib2wkZm9yIiwibmFtZSIsImxldmVsIiwibWFwTG9jYXRpb25PZkVycm9yVGhyb3duIiwiZmlsZW5hbWUiLCJ0YXJnZXQiLCJwYXRoIiwicmVsYXRpdmUiLCJfc3RhcnRzV2l0aEluc3RhbmNlUHJvcGVydHkiLCJjYWxsIiwiZ3JheSIsInJlcGxhY2UiLCJtYXRjaGVzIiwibW9kdWxlTmFtZSIsInRyYWlsaW5nIiwic2VwIiwidW5kZXJsaW5lIiwiZGlybmFtZSIsImJhc2VuYW1lIiwiaGFuZGxlIiwiZGF0YSIsIl9jb250ZXh0IiwiX2NvbnRleHQyIiwiX2NvbnRleHQzIiwiZXJyb3IiLCJ1bmRlZmluZWQiLCJtZXNzYWdlIiwic3RhY2siLCJyYXdTdGFjayIsIl9tYXBJbnN0YW5jZVByb3BlcnR5IiwiX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsImxlbmd0aCIsInNwbGl0IiwibGluZSIsImlzQWJzb2x1dGUiLCJjb250ZXh0TmFtZSIsInJhd0xvY2F0aW9uIiwibG9jYXRpb24iLCJjb2x1bW4iLCJ2ZXJzaW9uIiwiam9pbiIsInBheWxvYWQiLCJoaWdobGlnaHQiLCJsYW5ndWFnZSIsImhhbmRsZXJzIiwiRmF0YWxIYW5kbGVyIiwiRXJyb3JIYW5kbGVyIiwiV2FybmluZ0hhbmRsZXIiLCJOb3RpY2VIYW5kbGVyIiwiSW5mb0hhbmRsZXIiLCJIdHRwSGFuZGxlciIsIlF1ZXJ5SGFuZGxlciIsIlZlcmJvc2VIYW5kbGVyIiwiRGVidWdIYW5kbGVyIiwiZm9ybWF0IiwicHJpbnRmIiwidGltZXN0YW1wIiwiRGF0ZVRpbWUiLCJub3ciLCJ0b0lTTyIsImluY2x1ZGVPZmZzZXQiLCJoYW5kbGVyIiwiX2ZpbmRJbnN0YW5jZVByb3BlcnR5IiwiZmFsbGJhY2siLCJwZXJmb3JtSGFuZGxlIiwiZGVmYXVsdCIsIl9SZWZsZWN0JGFwcGx5IiwiZXh0cmFGaW5nZXJwcmludCIsInRyYW5zYWN0aW9uSWQiLCJyVHJhY2VyIiwiaWQiLCJFeGVjdXRpb25Nb2RlIiwiRGV2ZWxvcG1lbnRNb2RlIiwiUHJvZHVjdGlvbk1vZGUiLCJDbHVzdGVyaW5nTW9kZSIsIk1hc3RlclByb2Nlc3MiLCJXb3JrZXJQcm9jZXNzIiwiZXhlY3V0aW9uTW9kZSIsImVudmlyb25tZW50cyIsIk5PREVfRU5WIiwiY2x1c3RlciIsImlzUHJpbWFyeSIsImlzTWFzdGVyIiwiZGVjb3JhdGVTdGF0dXNDb2RlIiwic3RhdHVzQ29kZSIsImdyb3VwT2ZDb2RlIiwiTWF0aCIsImZsb29yIiwiTnVtYmVyIiwiYmFzZU1lc3NhZ2UiLCJTVEFUVVNfQ09ERVMiLCJncmVlbiIsIm1hZ2VudGEiLCJyZWQiLCJmb3JtYXRGb3JNb3JnYW4iLCJ0b2tlbnMiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJfIiwidG9rZW4iLCJzdWJBcmdzIiwibWV0aG9kIiwiVVJMIiwiaHR0cFZlcnNpb24iLCJjb250ZW50TGVuZ3RoIiwicmVzcG9uc2VUaW1lIiwiJG1ldGhvZCIsIiR2ZXJzaW9uIiwicmdiIiwiJHN0YXR1c0NvZGUiLCIkY29udGVudExlbmd0aCIsInByZXR0eUJ5dGVzIiwiJHJlc3BvbnNlVGltZSIsInByZXR0eU1zIiwibWV0YWRhdGEiLCJtb3JnYW4iLCJjb21iaW5lZCIsIkNvbnNvbGUiLCJDb25zb2xlVHJhbnNwb3J0Iiwid2luc3RvbiIsInRyYW5zcG9ydHMiLCJLZXlPZkluc3RhbmNlIiwiX1N5bWJvbCIsIktleU9mUGFzc3BvcnQiLCJMb2dnZXIiLCJjcmVhdGVMb2dnZXIiLCJsZXZlbHMiLCJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsImxvZGFzaCIsImZyb21QYWlycyIsInZhbHVlIiwiZm9ybWF0Rm9yQ0xJIiwiZXhpdE9uRXJyb3IiLCJzdHJlYW0iLCJQYXNzVGhyb3VnaCIsIm9iamVjdE1vZGUiLCJvbiIsImxvZyIsIl90cmltSW5zdGFuY2VQcm9wZXJ0eSIsImNvbnN0cnVjdG9yIiwicGFzc3BvcnQiLCJSZWZlcmVuY2VFcnJvciIsImluc3RhbmNlIiwiUmVmbGVjdCIsImhhc093bk1ldGFkYXRhIiwiZ2V0T3duTWV0YWRhdGEiLCJkZWZpbmVNZXRhZGF0YSIsImFyZ3MiLCJsb2dnZXIiLCJIdHRwUmVxdWVzdCIsIkh0dHBSZXNwb25zZSIsIlByb21pc2UiLCJmcm9tQ2FsbGJhY2siLCJjYWxsYmFj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
519
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZXMvaGVscGVycy9sb2dnaW5nLWxldmVsLnRzIiwiLi4vc291cmNlcy9oZWxwZXJzL2NvbG9yLXNjaGVtZS50cyIsIi4uL3NvdXJjZXMvaGVscGVycy9sYWJlbC1kZWNvcmF0b3IudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL2Vycm9yLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9mYXRhbC50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvd2FybmluZy50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvbm90aWNlLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9pbmZvLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9odHRwLnRzIiwiLi4vc291cmNlcy9oYW5kbGVycy9xdWVyeS50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvdmVyYm9zZS50cyIsIi4uL3NvdXJjZXMvaGFuZGxlcnMvZGVidWcudHMiLCIuLi9zb3VyY2VzL2hhbmRsZXJzL2luZGV4LnRzIiwiLi4vc291cmNlcy9mb3JtYXR0ZXJzL2NvbW1hbmQtbGluZS50cyIsIi4uL3NvdXJjZXMvaGVscGVycy9jb25zdGFudHMudHMiLCIuLi9zb3VyY2VzL2Zvcm1hdHRlcnMvbW9yZ2FuLnRzIiwiLi4vc291cmNlcy9jbGFzc2VzL2xvZ2dlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBMb2dnaW5nTGV2ZWwgPSB7XG5cdC8vIENyaXRpY2FsIGxldmVscy4gKEl0IHdpbGwgY3Jhc2ggdGhlIHByb2Nlc3MpXG5cdEZhdGFsOiAwLFxuXHRFcnJvcjogMSxcblxuXHQvLyBXYXJuaW5nIGxldmVscy4gKEl0IGp1c3QgcmVwb3J0IHdhcm5pbmcgaW5mb3JtYXRpb24sIG5vdCBjcmFzaCB0aGUgcHJvY2Vzcylcblx0V2FybmluZzogMixcblxuXHQvLyBSZWd1bGFyIGxldmVsIGFuZCBhbGlhc2VzLlxuXHROb3RpY2U6IDMsXG5cdEluZm86IDMsXG5cblx0Ly8gTWF5YmUgc2Vuc2l0aXZlIGxldmVscy4gKEluIGdlbmVyYWwsIGRvZXMgbm90IHVzZWZ1bClcblx0SHR0cDogNCxcblx0UXVlcnk6IDQsXG5cblx0Ly8gTG91ZCBsZXZlbHMuXG5cdFZlcmJvc2U6IDUsXG5cdERlYnVnOiA1LFxufSBhcyBjb25zdFxuXG50eXBlIExvZ2dpbmdMZXZlbCA9IHR5cGVvZiBMb2dnaW5nTGV2ZWxba2V5b2YgdHlwZW9mIExvZ2dpbmdMZXZlbF1cblxuZXhwb3J0IGRlZmF1bHQgTG9nZ2luZ0xldmVsXG4iLCIvLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrLCB7IHR5cGUgQ2hhbGtJbnN0YW5jZSB9IGZyb20gJ2NoYWxrJ1xuXG4vLyBDb25zdGFudHMuXG5jb25zdCBjb2xvcml6ZXJNYXAgPSBuZXcgTWFwPG51bWJlciwgQ2hhbGtJbnN0YW5jZT4oKVxuXG4vLyBIZWxwZXJzLlxuZnVuY3Rpb24gY3JlYXRlU2NoZW1lKG9wdGlvbnM6IHsgYmFja2dyb3VuZDogQ29sb3JWYWx1ZSwgZm9yZWdyb3VuZDogQ29sb3JWYWx1ZSB9KTogbnVtYmVyIHtcblx0Y29uc3QgbmV4dEluZGV4ID0gY29sb3JpemVyTWFwLnNpemVcblx0Y29uc3QgY29sb3JpemVyID0gY2hhbGsuYmdIZXgob3B0aW9ucy5iYWNrZ3JvdW5kKS5oZXgob3B0aW9ucy5mb3JlZ3JvdW5kKVxuXG5cdGNvbG9yaXplck1hcC5zZXQobmV4dEluZGV4LCBjb2xvcml6ZXIpXG5cblx0cmV0dXJuIG5leHRJbmRleFxufVxuXG4vLyBDb2xvciBkZWZpbml0aW9ucy5cbmNvbnN0IENvbG9yVmFsdWUgPSB7XG5cdC8vIEJhc2ljIGNvbG9ycy5cblx0V2hpdGU6ICcjRkZGRkZGJyxcblx0R3JheTogJyM4MDgwODAnLFxuXHRCbGFjazogJyMwMDAwMDAnLFxuXG5cdC8vIFNwZWNpYWxpemVkIGNvbG9ycy5cblx0Q3JpdGljYWw6ICcjRDYzMDMxJyxcblx0V2FybmluZzogJyNGRENCNkUnLFxuXHRSZWd1bGFyOiAnIzA5ODRFMycsXG5cdEh0dHA6ICcjNkFCMDRDJyxcblx0UXVlcnk6ICcjMzk5QUYzJyxcbn0gYXMgY29uc3RcblxudHlwZSBDb2xvclZhbHVlID0gdHlwZW9mIENvbG9yVmFsdWVba2V5b2YgdHlwZW9mIENvbG9yVmFsdWVdXG5cbmNvbnN0IENvbG9yU2NoZW1lID0ge1xuXHRDcml0aWNhbDogY3JlYXRlU2NoZW1lKHtcblx0XHRiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLkNyaXRpY2FsLFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuQmxhY2ssXG5cdH0pLFxuXG5cdFdhcm5pbmc6IGNyZWF0ZVNjaGVtZSh7XG5cdFx0YmFja2dyb3VuZDogQ29sb3JWYWx1ZS5XYXJuaW5nLFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuQmxhY2ssXG5cdH0pLFxuXG5cdFJlZ3VsYXI6IGNyZWF0ZVNjaGVtZSh7XG5cdFx0YmFja2dyb3VuZDogQ29sb3JWYWx1ZS5SZWd1bGFyLFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuV2hpdGUsXG5cdH0pLFxuXG5cdEh0dHA6IGNyZWF0ZVNjaGVtZSh7XG5cdFx0YmFja2dyb3VuZDogQ29sb3JWYWx1ZS5IdHRwLFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuQmxhY2ssXG5cdH0pLFxuXG5cdFF1ZXJ5OiBjcmVhdGVTY2hlbWUoe1xuXHRcdGJhY2tncm91bmQ6IENvbG9yVmFsdWUuUXVlcnksXG5cdFx0Zm9yZWdyb3VuZDogQ29sb3JWYWx1ZS5CbGFjayxcblx0fSksXG5cblx0TG91ZDogY3JlYXRlU2NoZW1lKHtcblx0XHRiYWNrZ3JvdW5kOiBDb2xvclZhbHVlLkJsYWNrLFxuXHRcdGZvcmVncm91bmQ6IENvbG9yVmFsdWUuR3JheSxcblx0fSksXG59IGFzIGNvbnN0XG5cbnR5cGUgQ29sb3JTY2hlbWUgPSB0eXBlb2YgQ29sb3JTY2hlbWVba2V5b2YgdHlwZW9mIENvbG9yU2NoZW1lXVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbGtPZihjb2xvclNldDogQ29sb3JTY2hlbWUpOiBDaGFsa0luc3RhbmNlIHtcblx0cmV0dXJuIGNvbG9yaXplck1hcC5nZXQoY29sb3JTZXQpID8/IGNoYWxrXG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU2NoZW1lXG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdwcm9jZXNzJ1xuXG4vLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IENvbG9yU2NoZW1lLCB7IGdldENoYWxrT2YgfSBmcm9tICcuL2NvbG9yLXNjaGVtZSdcblxuLy8gQ29uc3RhbnRzLlxuY29uc3QgeyBpc1RUWSB9ID0gcHJvY2Vzcy5zdGRvdXRcbmNvbnN0IGlzTm90T25DTEkgPSAhaXNUVFlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVjb3JhdGVMYWJlbDxUIGV4dGVuZHMgc3RyaW5nPihsYWJlbDogVCwgc2NoZW1lOiBDb2xvclNjaGVtZSk6IFQge1xuXHRpZiAoaXNOb3RPbkNMSSkgcmV0dXJuIGxhYmVsXG5cblx0Y29uc3QgY2hhbGsgPSBnZXRDaGFsa09mKHNjaGVtZSlcblx0Y29uc3QgZGVjb3JhdGVkTGFiZWwgPSBjaGFsay5ib2xkKGAgJHtsYWJlbH0gYClcblxuXHRyZXR1cm4gZGVjb3JhdGVkTGFiZWwgYXMgVFxufVxuIiwiLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBwcm9jZXNzLCB7IHZlcnNpb24gfSBmcm9tICdwcm9jZXNzJ1xuXG4vLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuXG4vLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbnR5cGUgTG9nZ2luZ0RhdGEgPSB7IGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB9ICYgUmVjb3JkPFByb3BlcnR5S2V5LCBhbnk+XG50eXBlIEhhbmRsZWREYXRhID0geyBsYWJlbDogc3RyaW5nLCBwYXlsb2FkOiBzdHJpbmcgfVxuXG4vLyBDb25zdGFudHMuXG5jb25zdCByb290UGF0aCA9IHByb2Nlc3MuY3dkKClcbmNvbnN0IGNvbmp1bmN0aW9uID0gYCAke2NoYWxrLmJsdWUoJ+KUgOKUgCcpfSBgXG5jb25zdCBzcGxhdDogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbC5mb3IoJ3NwbGF0JylcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ2Vycm9yJ1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLkVycm9yXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdFUlJPUicsIENvbG9yU2NoZW1lLkNyaXRpY2FsKVxuXG5mdW5jdGlvbiBtYXBMb2NhdGlvbk9mRXJyb3JUaHJvd24oZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCB0YXJnZXQgPSBwYXRoLnJlbGF0aXZlKHJvb3RQYXRoLCBmaWxlbmFtZSlcblxuXHRpZiAodGFyZ2V0LnN0YXJ0c1dpdGgoJ25vZGVfbW9kdWxlcycpKSB7XG5cdFx0dGFyZ2V0ID0gY2hhbGsuZ3JheSh0YXJnZXQpLnJlcGxhY2UoXG5cdFx0XHQvbm9kZV9tb2R1bGVzW1xcXFwvXShbXlxcXFwvXSspKC4qKS8sXG5cdFx0XHQobWF0Y2hlcywgbW9kdWxlTmFtZTogc3RyaW5nLCB0cmFpbGluZzogc3RyaW5nKSA9PiBgbm9kZV9tb2R1bGVzJHtwYXRoLnNlcH0ke2NoYWxrLmJvbGQudW5kZXJsaW5lKG1vZHVsZU5hbWUpfSR7Y2hhbGsuZ3JheSh0cmFpbGluZyl9YCxcblx0XHQpXG5cdH0gZWxzZSB7XG5cdFx0dGFyZ2V0ID0gYCR7Y2hhbGsuZ3JheShwYXRoLmRpcm5hbWUodGFyZ2V0KSArIHBhdGguc2VwKX0ke2NoYWxrLmJvbGQudW5kZXJsaW5lKHBhdGguYmFzZW5hbWUodGFyZ2V0KSl9YFxuXHR9XG5cblx0cmV0dXJuIHRhcmdldFxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYW5kbGUoZGF0YTogTG9nZ2luZ0RhdGEpOiBIYW5kbGVkRGF0YSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHsgW3NwbGF0XTogWyBlcnJvciBdID0gW10gfSA9IGRhdGEgYXMgYW55XG5cblx0aWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblxuXHRjb25zdCB7IG5hbWU6IGVycm9yTmFtZSwgbWVzc2FnZSwgc3RhY2s6IHJhd1N0YWNrID0gJycgfSA9IGVycm9yXG5cblx0Y29uc3Qgc3RhY2sgPSByYXdTdGFja1xuXHRcdC5zbGljZShlcnJvck5hbWUubGVuZ3RoICsgbWVzc2FnZS5sZW5ndGggKyAzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKGxpbmUgPT4gbGluZS5yZXBsYWNlKC9eXFxzK2F0IC9nLCAnJykpXG5cdFx0Lm1hcChsaW5lID0+IChwYXRoLmlzQWJzb2x1dGUobGluZSkgPyBgPGFub255bW91cz4ke2Nvbmp1bmN0aW9ufSR7bWFwTG9jYXRpb25PZkVycm9yVGhyb3duKGxpbmUpfWAgOiBsaW5lKSlcblx0XHQubWFwKGxpbmUgPT4gbGluZS5yZXBsYWNlKC9eKC4rKSBcXCgoLispXFwpJC8sIChtYXRjaGVzLCBjb250ZXh0TmFtZTogc3RyaW5nLCByYXdMb2NhdGlvbjogc3RyaW5nKSA9PiB7XG5cdFx0XHRsZXQgbG9jYXRpb24gPSAnJ1xuXG5cdFx0XHRpZiAocmF3TG9jYXRpb24gPT09ICc8YW5vbnltb3VzPicpIHtcblx0XHRcdFx0bG9jYXRpb24gPSBjaGFsay5ncmF5KHJhd0xvY2F0aW9uKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgWyBmaWxlbmFtZSwgb2NjdXJyZWRMaW5lLCBvY2N1cnJlZENvbHVtbiBdID0gcmF3TG9jYXRpb24uc3BsaXQoJzonKVxuXG5cdFx0XHRcdGlmIChwYXRoLmlzQWJzb2x1dGUoZmlsZW5hbWUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gbWFwTG9jYXRpb25PZkVycm9yVGhyb3duKHBhdGgucmVsYXRpdmUocm9vdFBhdGgsIGZpbGVuYW1lKSlcblx0XHRcdFx0XHRjb25zdCB0cmFpbGluZyA9IGNoYWxrLmdyYXkoYDoke29jY3VycmVkTGluZX06JHtvY2N1cnJlZENvbHVtbn1gKVxuXG5cdFx0XHRcdFx0bG9jYXRpb24gPSB0YXJnZXQgKyB0cmFpbGluZ1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFmaWxlbmFtZS5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG5cdFx0XHRcdFx0bG9jYXRpb24gPSBjaGFsay5ncmF5KGBodHRwczovL2dpdGh1Yi5jb20vJHtjaGFsay5ib2xkLnVuZGVybGluZSgnbm9kZWpzJyl9L25vZGUvYmxvYi8ke3ZlcnNpb259L2xpYi8ke2ZpbGVuYW1lfSNMJHtvY2N1cnJlZExpbmV9YClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYCR7Y29udGV4dE5hbWV9JHtjb25qdW5jdGlvbn0ke2xvY2F0aW9ufWBcblx0XHR9KSlcblx0XHQuam9pbignXFxuJylcblxuXHRjb25zdCBkZWNvcmF0ZWRMYWJlbCA9IGRlY29yYXRlTGFiZWwoZXJyb3JOYW1lLCBDb2xvclNjaGVtZS5Dcml0aWNhbClcblx0Y29uc3QgcGF5bG9hZCA9IGAke21lc3NhZ2V9XFxuXFxuJHtzdGFja31cXG5gXG5cblx0cmV0dXJuIHsgbGFiZWw6IGRlY29yYXRlZExhYmVsLCBwYXlsb2FkIH1cbn1cbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnZmF0YWwnXG5leHBvcnQgY29uc3QgbGV2ZWwgPSBMb2dnaW5nTGV2ZWwuRmF0YWxcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ0ZBVEFMJywgQ29sb3JTY2hlbWUuQ3JpdGljYWwpXG5cbmV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tICcuL2Vycm9yJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtZXhwb3J0c1xuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJy4uL2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InXG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICd3YXJuaW5nJ1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLldhcm5pbmdcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ1dBUk5JTkcnLCBDb2xvclNjaGVtZS5XYXJuaW5nKVxuXG5leHBvcnQgZGVmYXVsdCBudWxsXG4iLCIvLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IExvZ2dpbmdMZXZlbCBmcm9tICcuLi9oZWxwZXJzL2xvZ2dpbmctbGV2ZWwnXG5pbXBvcnQgQ29sb3JTY2hlbWUgZnJvbSAnLi4vaGVscGVycy9jb2xvci1zY2hlbWUnXG5pbXBvcnQgZGVjb3JhdGVMYWJlbCBmcm9tICcuLi9oZWxwZXJzL2xhYmVsLWRlY29yYXRvcidcblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ25vdGljZSdcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5Ob3RpY2VcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ05PVElDRScsIENvbG9yU2NoZW1lLlJlZ3VsYXIpXG5cbmV4cG9ydCBkZWZhdWx0IG51bGxcbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAnaW5mbydcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5JbmZvXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdJTkZPJywgQ29sb3JTY2hlbWUuUmVndWxhcilcblxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJy4uL2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InXG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdodHRwJ1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLkh0dHBcbmV4cG9ydCBjb25zdCBsYWJlbCA9IGRlY29yYXRlTGFiZWwoJ0hUVFAnLCBDb2xvclNjaGVtZS5IdHRwKVxuXG5leHBvcnQgZGVmYXVsdCBudWxsXG4iLCIvLyBIaWdobGlnaHQuanNcbmltcG9ydCBoaWdobGlnaHQgZnJvbSAnY2xpLWhpZ2hsaWdodCdcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJy4uL2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InXG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMuXG50eXBlIExvZ2dpbmdEYXRhID0geyBsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfSAmIFJlY29yZDxQcm9wZXJ0eUtleSwgYW55PlxudHlwZSBIYW5kbGVkRGF0YSA9IHsgbGFiZWw6IHN0cmluZywgcGF5bG9hZDogc3RyaW5nIH1cblxuLy8gSGFuZGxlciBtZXRhZGF0YS5cbmV4cG9ydCBjb25zdCBuYW1lID0gJ3F1ZXJ5J1xuZXhwb3J0IGNvbnN0IGxldmVsID0gTG9nZ2luZ0xldmVsLlF1ZXJ5XG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdRVUVSWScsIENvbG9yU2NoZW1lLlF1ZXJ5KVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYW5kbGUoZGF0YTogTG9nZ2luZ0RhdGEpOiBIYW5kbGVkRGF0YSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHBheWxvYWQgPSBoaWdobGlnaHQoZGF0YS5tZXNzYWdlLCB7IGxhbmd1YWdlOiAnc3FsJyB9KVxuXG5cdHJldHVybiB7IGxhYmVsLCBwYXlsb2FkIH1cbn1cbiIsIi8vIExvY2FsIGhlbHBlcnMuXG5pbXBvcnQgTG9nZ2luZ0xldmVsIGZyb20gJy4uL2hlbHBlcnMvbG9nZ2luZy1sZXZlbCdcbmltcG9ydCBDb2xvclNjaGVtZSBmcm9tICcuLi9oZWxwZXJzL2NvbG9yLXNjaGVtZSdcbmltcG9ydCBkZWNvcmF0ZUxhYmVsIGZyb20gJy4uL2hlbHBlcnMvbGFiZWwtZGVjb3JhdG9yJ1xuXG4vLyBIYW5kbGVyIG1ldGFkYXRhLlxuZXhwb3J0IGNvbnN0IG5hbWUgPSAndmVyYm9zZSdcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5WZXJib3NlXG5leHBvcnQgY29uc3QgbGFiZWwgPSBkZWNvcmF0ZUxhYmVsKCdWRVJCT1NFJywgQ29sb3JTY2hlbWUuTG91ZClcblxuZXhwb3J0IGRlZmF1bHQgbnVsbFxuIiwiLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuaW1wb3J0IENvbG9yU2NoZW1lIGZyb20gJy4uL2hlbHBlcnMvY29sb3Itc2NoZW1lJ1xuaW1wb3J0IGRlY29yYXRlTGFiZWwgZnJvbSAnLi4vaGVscGVycy9sYWJlbC1kZWNvcmF0b3InXG5cbi8vIEhhbmRsZXIgbWV0YWRhdGEuXG5leHBvcnQgY29uc3QgbmFtZSA9ICdkZWJ1ZydcbmV4cG9ydCBjb25zdCBsZXZlbCA9IExvZ2dpbmdMZXZlbC5EZWJ1Z1xuZXhwb3J0IGNvbnN0IGxhYmVsID0gZGVjb3JhdGVMYWJlbCgnREVCVUcnLCBDb2xvclNjaGVtZS5Mb3VkKVxuXG5leHBvcnQgZGVmYXVsdCBudWxsXG4iLCIvLyBIYW5kbGVyIGltcGxlbWVudGF0aW9ucy5cbmltcG9ydCAqIGFzIEZhdGFsSGFuZGxlciBmcm9tICcuL2ZhdGFsJ1xuaW1wb3J0ICogYXMgRXJyb3JIYW5kbGVyIGZyb20gJy4vZXJyb3InXG5pbXBvcnQgKiBhcyBXYXJuaW5nSGFuZGxlciBmcm9tICcuL3dhcm5pbmcnXG5pbXBvcnQgKiBhcyBOb3RpY2VIYW5kbGVyIGZyb20gJy4vbm90aWNlJ1xuaW1wb3J0ICogYXMgSW5mb0hhbmRsZXIgZnJvbSAnLi9pbmZvJ1xuaW1wb3J0ICogYXMgSHR0cEhhbmRsZXIgZnJvbSAnLi9odHRwJ1xuaW1wb3J0ICogYXMgUXVlcnlIYW5kbGVyIGZyb20gJy4vcXVlcnknXG5pbXBvcnQgKiBhcyBWZXJib3NlSGFuZGxlciBmcm9tICcuL3ZlcmJvc2UnXG5pbXBvcnQgKiBhcyBEZWJ1Z0hhbmRsZXIgZnJvbSAnLi9kZWJ1ZydcblxuY29uc3QgaGFuZGxlcnMgPSBbXG5cdEZhdGFsSGFuZGxlcixcblx0RXJyb3JIYW5kbGVyLFxuXHRXYXJuaW5nSGFuZGxlcixcblx0Tm90aWNlSGFuZGxlcixcblx0SW5mb0hhbmRsZXIsXG5cdEh0dHBIYW5kbGVyLFxuXHRRdWVyeUhhbmRsZXIsXG5cdFZlcmJvc2VIYW5kbGVyLFxuXHREZWJ1Z0hhbmRsZXIsXG5dXG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbE5hbWUgPSAodHlwZW9mIGhhbmRsZXJzIGV4dGVuZHMgKGluZmVyIFQpW10gPyBUIDogbmV2ZXIpWyduYW1lJ11cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZXJzXG4iLCIvLyBUaGlyZC1wYXJ0eSBtb2R1bGVzLlxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IHJUcmFjZXIgZnJvbSAnY2xzLXJ0cmFjZXInXG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJ1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnd2luc3RvbidcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCBMb2dnaW5nTGV2ZWwgZnJvbSAnLi4vaGVscGVycy9sb2dnaW5nLWxldmVsJ1xuXG4vLyBIYW5kbGVyIGltcGxlbWVudGF0aW9ucy5cbmltcG9ydCBoYW5kbGVycyBmcm9tICcuLi9oYW5kbGVycydcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0LnByaW50ZihkYXRhID0+IHtcblx0Y29uc3QgdGltZXN0YW1wID0gY2hhbGsuZ3JheShEYXRlVGltZS5ub3coKS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IHRydWUgfSkpXG5cdGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVycy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gZGF0YS5sZXZlbClcblx0Y29uc3QgZmFsbGJhY2sgPSB7IGxhYmVsOiBoYW5kbGVyPy5sYWJlbCwgcGF5bG9hZDogZGF0YS5tZXNzYWdlIH1cblx0Y29uc3QgcGVyZm9ybUhhbmRsZSA9IGhhbmRsZXI/LmRlZmF1bHQgPz8gKCgpOiB0eXBlb2YgZmFsbGJhY2sgPT4gZmFsbGJhY2spXG5cblx0Ly8gRXhlY3V0ZSBoYW5kbGVyIGFuZCB0aGVuLCBnZXQgZGVjb3JhdGVkIHBheWxvYWQuXG5cdGNvbnN0IHsgbGFiZWwsIHBheWxvYWQgfSA9IFJlZmxlY3QuYXBwbHkocGVyZm9ybUhhbmRsZSwgdW5kZWZpbmVkLCBbIGRhdGEgXSkgPz8gZmFsbGJhY2tcblxuXHRsZXQgZXh0cmFGaW5nZXJwcmludDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cblx0aWYgKGhhbmRsZXI/LmxldmVsID09PSBMb2dnaW5nTGV2ZWwuSHR0cCkge1xuXHRcdGV4dHJhRmluZ2VycHJpbnQgPSBkYXRhLnRyYW5zYWN0aW9uSWRcblx0XHRcdD8gYChUcmFuc2FjdGlvbi1JRCA9ICR7ZGF0YS50cmFuc2FjdGlvbklkIGFzIHN0cmluZ30pYFxuXHRcdFx0OiBgKFJlcXVlc3QtSUQgPSAke3JUcmFjZXIuaWQoKSBhcyBzdHJpbmd9KWBcblx0fVxuXG5cdHJldHVybiBgJHtsYWJlbCBhcyBzdHJpbmd9ICR7dGltZXN0YW1wfSR7ZXh0cmFGaW5nZXJwcmludCA/IGAgJHtleHRyYUZpbmdlcnByaW50fWAgOiAnJ31cXG4ke3BheWxvYWQgYXMgc3RyaW5nfWBcbn0pXG4iLCIvLyBOb2RlLmpzIGJ1aWx0LWluIEFQSXMuXG5pbXBvcnQgY2x1c3RlciBmcm9tICdjbHVzdGVyJ1xuaW1wb3J0IHsgZW52IGFzIGVudmlyb25tZW50cyB9IGZyb20gJ3Byb2Nlc3MnXG5pbXBvcnQgeyBpc01haW5UaHJlYWQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcydcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbmV4cG9ydCBjb25zdCBFeGVjdXRpb25Nb2RlID0ge1xuXHREZXZlbG9wbWVudE1vZGU6ICdkZXZlbG9wbWVudCcsXG5cdFByb2R1Y3Rpb25Nb2RlOiAncHJvZHVjdGlvbicsXG59IGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBDbHVzdGVyaW5nTW9kZSA9IHtcblx0TWFzdGVyUHJvY2VzczogMCxcblx0V29ya2VyUHJvY2VzczogMSxcbn0gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IFRocmVhZGluZ01vZGUgPSB7XG5cdE1haW5UaHJlYWQ6IDAsXG5cdFdvcmtlclRocmVhZDogMSxcbn0gYXMgY29uc3RcblxuZXhwb3J0IHR5cGUgRXhlY3V0aW9uTW9kZSA9IHR5cGVvZiBFeGVjdXRpb25Nb2RlW2tleW9mIHR5cGVvZiBFeGVjdXRpb25Nb2RlXVxuZXhwb3J0IHR5cGUgQ2x1c3RlcmluZ01vZGUgPSB0eXBlb2YgQ2x1c3RlcmluZ01vZGVba2V5b2YgdHlwZW9mIENsdXN0ZXJpbmdNb2RlXVxuZXhwb3J0IHR5cGUgVGhyZWFkaW5nTW9kZSA9IHR5cGVvZiBUaHJlYWRpbmdNb2RlW2tleW9mIHR5cGVvZiBUaHJlYWRpbmdNb2RlXVxuXG4vLyBFeHBvcnRpbmdzLlxuZXhwb3J0IGNvbnN0IGV4ZWN1dGlvbk1vZGUgPSBlbnZpcm9ubWVudHMuTk9ERV9FTlYgYXMgRXhlY3V0aW9uTW9kZSA/PyBFeGVjdXRpb25Nb2RlLkRldmVsb3BtZW50TW9kZVxuXG5leHBvcnQgY29uc3QgY2x1c3RlcmluZ01vZGU6IENsdXN0ZXJpbmdNb2RlID0gY2x1c3Rlci5pc1ByaW1hcnkgPz8gY2x1c3Rlci5pc01hc3RlclxuXHQ/IENsdXN0ZXJpbmdNb2RlLk1hc3RlclByb2Nlc3Ncblx0OiBDbHVzdGVyaW5nTW9kZS5Xb3JrZXJQcm9jZXNzXG5cbmV4cG9ydCBjb25zdCB0aHJlYWRpbmdNb2RlOiBUaHJlYWRpbmdNb2RlID0gaXNNYWluVGhyZWFkXG5cdD8gVGhyZWFkaW5nTW9kZS5NYWluVGhyZWFkXG5cdDogVGhyZWFkaW5nTW9kZS5Xb3JrZXJUaHJlYWRcbiIsIi8vIE5vZGUuanMgYnVpbHQtaW4gQVBJcy5cbmltcG9ydCB7XG5cdFNUQVRVU19DT0RFUyxcblx0SW5jb21pbmdNZXNzYWdlIGFzIEh0dHBSZXF1ZXN0LFxuXHRTZXJ2ZXJSZXNwb25zZSBhcyBIdHRwUmVzcG9uc2UsXG59IGZyb20gJ2h0dHAnXG5cbi8vIFRoaXJkLXBhcnR5IG1vZHVsZXMuXG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgbW9yZ2FuIGZyb20gJ21vcmdhbidcbmltcG9ydCBwcmV0dHlCeXRlcyBmcm9tICdwcmV0dHktYnl0ZXMnXG5pbXBvcnQgcHJldHR5TXMgZnJvbSAncHJldHR5LW1zJ1xuXG4vLyBMb2NhbCBoZWxwZXJzLlxuaW1wb3J0IHsgRXhlY3V0aW9uTW9kZSwgZXhlY3V0aW9uTW9kZSB9IGZyb20gJy4uL2hlbHBlcnMvY29uc3RhbnRzJ1xuXG4vLyBUeXBlIGRlZmluaXRpb25zLlxuZGVjbGFyZSBtb2R1bGUgJ21vcmdhbicge1xuXHRjb25zdCBjb21iaW5lZDogbW9yZ2FuLkZvcm1hdEZuXG59XG5cbmludGVyZmFjZSBUb2tlbkluZGV4ZXIge1xuXHRbdG9rZW5OYW1lOiBzdHJpbmddOiAoXG5cdFx0cmVxdWVzdDogSHR0cFJlcXVlc3QsXG5cdFx0cmVzcG9uc2U6IEh0dHBSZXNwb25zZSxcblx0XHQuLi5hcmdzOiBhbnlbXVxuXHQpID0+IHN0cmluZyB8IHVuZGVmaW5lZFxufVxuXG4vLyBIZWxwZXJzLlxuZnVuY3Rpb24gZGVjb3JhdGVTdGF0dXNDb2RlKHN0YXR1c0NvZGU6IGtleW9mIHR5cGVvZiBTVEFUVVNfQ09ERVMpOiBzdHJpbmcge1xuXHRjb25zdCBncm91cE9mQ29kZSA9IE1hdGguZmxvb3IoTnVtYmVyKHN0YXR1c0NvZGUpIC8gMTAwKSAqIDEwMFxuXHRjb25zdCBiYXNlTWVzc2FnZSA9IGAke3N0YXR1c0NvZGV9ICR7U1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIGFzIHN0cmluZ31gXG5cblx0c3dpdGNoIChncm91cE9mQ29kZSkge1xuXHRjYXNlIDIwMDoge1xuXHRcdHJldHVybiBjaGFsay5ncmVlbihiYXNlTWVzc2FnZSlcblx0fVxuXG5cdGNhc2UgMzAwOiB7XG5cdFx0cmV0dXJuIGNoYWxrLm1hZ2VudGEoYmFzZU1lc3NhZ2UpXG5cdH1cblx0Y2FzZSA0MDA6XG5cdGNhc2UgNTAwOiB7XG5cdFx0cmV0dXJuIGNoYWxrLnJlZChiYXNlTWVzc2FnZSlcblx0fVxuXG5cdGRlZmF1bHQ6IHtcblx0XHRyZXR1cm4gY2hhbGsuZ3JheShiYXNlTWVzc2FnZSlcblx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZvck1vcmdhbih0b2tlbnM6IGFueSwgcmVxdWVzdDogSHR0cFJlcXVlc3QsIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpOiBzdHJpbmcge1xuXHRmdW5jdGlvbiBfKHRva2VuOiBzdHJpbmcsIC4uLnN1YkFyZ3M6IGFueVtdKTogc3RyaW5nIHwgdm9pZCB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcblx0XHRyZXR1cm4gKHRva2VucyBhcyBUb2tlbkluZGV4ZXIpW3Rva2VuXShyZXF1ZXN0LCByZXNwb25zZSwgLi4uc3ViQXJncylcblx0fVxuXG5cdC8vIFJhdyB2YWx1ZXMuXG5cdGNvbnN0IG1ldGhvZCA9IF8oJ21ldGhvZCcpXG5cdGNvbnN0IFVSTCA9IF8oJ3VybCcpXG5cdGNvbnN0IGh0dHBWZXJzaW9uID0gYEhUVFAvJHtfKCdodHRwLXZlcnNpb24nKSBhcyBzdHJpbmd9YFxuXHRjb25zdCBzdGF0dXNDb2RlID0gTnVtYmVyKF8oJ3N0YXR1cycpKVxuXHRjb25zdCBjb250ZW50TGVuZ3RoID0gTnVtYmVyKF8oJ3JlcycsICdjb250ZW50LWxlbmd0aCcpID8/IC0xKVxuXHRjb25zdCByZXNwb25zZVRpbWUgPSBOdW1iZXIoXygncmVzcG9uc2UtdGltZScpID8/IC0xKVxuXG5cdC8vIERlY29yYXRlZCB2YWx1ZXMuXG5cdGNvbnN0ICRtZXRob2QgPSBjaGFsay5ib2xkKG1ldGhvZClcblx0Y29uc3QgJHZlcnNpb24gPSBjaGFsay5yZ2IoOTgsIDE3NywgMjU1KShodHRwVmVyc2lvbilcblx0Y29uc3QgJHN0YXR1c0NvZGUgPSBkZWNvcmF0ZVN0YXR1c0NvZGUoc3RhdHVzQ29kZSlcblx0Y29uc3QgJGNvbnRlbnRMZW5ndGggPSBjb250ZW50TGVuZ3RoID49IDAgPyBwcmV0dHlCeXRlcyhjb250ZW50TGVuZ3RoKSA6ICc/IEInXG5cdGNvbnN0ICRyZXNwb25zZVRpbWUgPSByZXNwb25zZVRpbWUgPj0gMCA/IHByZXR0eU1zKHJlc3BvbnNlVGltZSkgOiAnJ1xuXG5cdC8vIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG5cdGNvbnN0IG1ldGFkYXRhID0gYCgkeyRjb250ZW50TGVuZ3RofSwgJHskcmVzcG9uc2VUaW1lfSlgXG5cblx0cmV0dXJuIFtcblx0XHRg4oaSICR7JG1ldGhvZH0gJHtVUkwgYXMgc3RyaW5nfSAkeyR2ZXJzaW9ufWAsXG5cdFx0YOKGkCAkeyR2ZXJzaW9ufSAkeyRzdGF0dXNDb2RlfSAke21ldGFkYXRhfWAsXG5cdF0uam9pbignXFxuJylcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXhlY3V0aW9uTW9kZSA9PT0gRXhlY3V0aW9uTW9kZS5EZXZlbG9wbWVudE1vZGUgPyBmb3JtYXRGb3JNb3JnYW4gOiBtb3JnYW4uY29tYmluZWRcbiIsImltcG9ydCAncmVmbGVjdC1tZXRhZGF0YSdcblxuLy8gTm9kZS5qcyBidWlsdC1pbiBBUElzLlxuaW1wb3J0IHsgSW5jb21pbmdNZXNzYWdlIGFzIEh0dHBSZXF1ZXN0LCBTZXJ2ZXJSZXNwb25zZSBhcyBIdHRwUmVzcG9uc2UgfSBmcm9tICdodHRwJ1xuaW1wb3J0IHsgUGFzc1Rocm91Z2ggfSBmcm9tICdzdHJlYW0nXG5cbi8vIFRoaXJkLXBhcnR5IG1vZHVsZXMuXG5pbXBvcnQgUHJvbWlzZSBmcm9tICdibHVlYmlyZCdcbmltcG9ydCBsb2Rhc2ggZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IG1vcmdhbiBmcm9tICdtb3JnYW4nXG5pbXBvcnQgdHlwZSB7IGxldmVsIGFzIExvZ2dpbmdMZXZlbCB9IGZyb20gJ3dpbnN0b24nXG5pbXBvcnQgKiBhcyB3aW5zdG9uIGZyb20gJ3dpbnN0b24nXG5pbXBvcnQgeyBMb2dnZXIgYXMgQmFzZUxvZ2dlciB9IGZyb20gJ3dpbnN0b24nXG5cbi8vIEZvcm1hdHRlcnMuXG5pbXBvcnQgZm9ybWF0Rm9yQ0xJIGZyb20gJy4uL2Zvcm1hdHRlcnMvY29tbWFuZC1saW5lJ1xuaW1wb3J0IGZvcm1hdEZvck1vcmdhbiBmcm9tICcuLi9mb3JtYXR0ZXJzL21vcmdhbidcblxuLy8gTG9jYWwgaGVscGVycy5cbmltcG9ydCB7IEV4ZWN1dGlvbk1vZGUsIGV4ZWN1dGlvbk1vZGUgfSBmcm9tICcuLi9oZWxwZXJzL2NvbnN0YW50cydcblxuLy8gSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMuXG5pbXBvcnQgdHlwZSB7IExvZ2dpbmdMZXZlbE5hbWUgfSBmcm9tICcuLi9oYW5kbGVycydcbmltcG9ydCBoYW5kbGVycyBmcm9tICcuLi9oYW5kbGVycydcblxuLy8gVHlwZSBkZWZpbml0aW9ucy5cbnR5cGUgTW9yZ2FuID0gKHJlcTogSHR0cFJlcXVlc3QsIHJlczogSHR0cFJlc3BvbnNlLCBuZXh0OiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZFxuXG4vLyBUcmFuc3BvcnRzLlxuY29uc3QgeyBDb25zb2xlOiBDb25zb2xlVHJhbnNwb3J0IH0gPSB3aW5zdG9uLnRyYW5zcG9ydHNcblxuLy8gS2V5cyBpbiBvcmRlciB0byBhY2Nlc3MgcHJpdmF0ZSBwcm9wZXJ0aWVzLlxuY29uc3QgS2V5T2ZJbnN0YW5jZTogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbCgnQGNpY2hvbC9sb2dnZXI6OmNsYXNzZXMvbG9nZ2VyOjpJbnN0YW5jZScpXG5jb25zdCBLZXlPZlBhc3Nwb3J0OiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sKCdAY2ljaG9sL2xvZ2dlcjo6Y2xhc3Nlcy9sb2dnZXI6OlBhc3Nwb3J0JylcblxuY2xhc3MgTG9nZ2VyIHtcblx0I2xvZ2dlcjogQmFzZUxvZ2dlciA9IHdpbnN0b24uY3JlYXRlTG9nZ2VyKHtcblx0XHRsZXZlbHM6IGxvZGFzaChoYW5kbGVycylcblx0XHRcdC5tYXAoKHsgbmFtZSwgbGV2ZWwgfSkgPT4gWyBuYW1lLCBsZXZlbCBdKVxuXHRcdFx0LmZpbHRlcigoWyAsIGxldmVsIF0pID0+IHR5cGVvZiBsZXZlbCA9PT0gJ251bWJlcicpXG5cdFx0XHQuZnJvbVBhaXJzKClcblx0XHRcdC52YWx1ZSgpLFxuXG5cdFx0bGV2ZWw6IChleGVjdXRpb25Nb2RlID09PSBFeGVjdXRpb25Nb2RlLlByb2R1Y3Rpb25Nb2RlID8gJ2h0dHAnIDogJ3ZlcmJvc2UnKSBhcyB0eXBlb2YgTG9nZ2luZ0xldmVsLFxuXG5cdFx0dHJhbnNwb3J0czogW1xuXHRcdFx0bmV3IENvbnNvbGVUcmFuc3BvcnQoeyBmb3JtYXQ6IGZvcm1hdEZvckNMSSB9KSxcblx0XHRdLFxuXG5cdFx0ZXhpdE9uRXJyb3I6IGZhbHNlLFxuXHR9KVxuXG5cdCNtb3JnYW46IE1vcmdhbiA9IG1vcmdhbihmb3JtYXRGb3JNb3JnYW4sIHtcblx0XHRzdHJlYW06IG5ldyBQYXNzVGhyb3VnaCh7IG9iamVjdE1vZGU6IHRydWUgfSkub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XG5cdFx0XHR0aGlzLmxvZygnaHR0cCcsIGRhdGEudHJpbSgpKVxuXHRcdH0pLFxuXHR9KSBhcyBNb3JnYW5cblxuXHRwcml2YXRlIGNvbnN0cnVjdG9yKHBhc3Nwb3J0OiB0eXBlb2YgS2V5T2ZQYXNzcG9ydCkge1xuXHRcdGlmIChwYXNzcG9ydCAhPT0gS2V5T2ZQYXNzcG9ydCkge1xuXHRcdFx0dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdMb2dnZXIgY2xhc3MgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGluIGRpcmVjdGx5Jylcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSgpOiBMb2dnZXIge1xuXHRcdGlmICh0aGlzICE9PSBMb2dnZXIpIHtcblx0XHRcdHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignTG9nZ2VyIGNsYXNzIGlzIG5vdCBpbmhlcml0YWJsZScpXG5cdFx0fVxuXG5cdFx0aWYgKFJlZmxlY3QuaGFzT3duTWV0YWRhdGEoS2V5T2ZJbnN0YW5jZSwgTG9nZ2VyKSkge1xuXHRcdFx0cmV0dXJuIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEoS2V5T2ZJbnN0YW5jZSwgTG9nZ2VyKVxuXHRcdH1cblxuXHRcdGNvbnN0IGluc3RhbmNlID0gbmV3IExvZ2dlcihLZXlPZlBhc3Nwb3J0KVxuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpbnN0YW5jZVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRSZWZsZWN0LmRlZmluZU1ldGFkYXRhKEtleU9mSW5zdGFuY2UsIGluc3RhbmNlLCBMb2dnZXIpXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIExvZ2dpbmcgbWVzc2FnZSB3aXRoIHNwZWNpZmljIGxldmVsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbGV2ZWxcblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIGFyZ3MgQWRkaXRpb25hbCBtZXRhZGF0YS5cblx0ICovXG5cdHB1YmxpYyBsb2cobGV2ZWw6IExvZ2dpbmdMZXZlbE5hbWUsIG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkXG5cblx0LyoqXG5cdCAqIExvZ2dpbmcgSFRUUCBJL08uXG5cdCAqXG5cdCAqIEBwYXJhbSByZXF1ZXN0IE5vZGUuanMgYnVpbHQtaW4gYEluY29taW5nTWVzc2FnZWAgaW5zdGFuY2UgZnJvbSBgaHR0cGAgbW9kdWxlLlxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgTm9kZS5qcyBidWlsdC1pbiBgU2VydmVyUmVzcG9uc2VgIGluc3RhbmNlIGZyb20gYGh0dHBgIG1vZHVsZS5cblx0ICovXG5cdHB1YmxpYyBsb2cocmVxdWVzdDogSHR0cFJlcXVlc3QsIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+XG5cblx0LyoqXG5cdCAqIExvZ2dpbmcgZXJyb3JzIGluIGRldGFpbC5cblx0ICpcblx0ICogQHBhcmFtIGVycm9yXG5cdCAqL1xuXHRwdWJsaWMgbG9nKGVycm9yOiBFcnJvcik6IHZvaWRcblxuXHRwdWJsaWMgbG9nKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGxvZ2dlciA9IHRoaXMuI2xvZ2dlclxuXHRcdGNvbnN0IGZvcm1hdCA9IHRoaXMuI21vcmdhblxuXG5cdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0Y2FzZSAoYXJncy5sZW5ndGggPj0gMiAmJiBhcmdzWzBdIGluc3RhbmNlb2YgSHR0cFJlcXVlc3QgJiYgYXJnc1sxXSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSk6IHtcblx0XHRcdGNvbnN0IFsgcmVxdWVzdCwgcmVzcG9uc2UgXSA9IGFyZ3MgYXMgWyBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIF1cblxuXHRcdFx0cmV0dXJuIFByb21pc2UuZnJvbUNhbGxiYWNrPHZvaWQ+KGNhbGxiYWNrID0+IGZvcm1hdChyZXF1ZXN0LCByZXNwb25zZSwgY2FsbGJhY2spKVxuXHRcdH1cblxuXHRcdGNhc2UgKGFyZ3MubGVuZ3RoID49IDEgJiYgYXJnc1swXSBpbnN0YW5jZW9mIEVycm9yKToge1xuXHRcdFx0Y29uc3QgWyBlcnJvciwgLi4uZGF0YSBdID0gYXJncyBhcyBbIEVycm9yLCAuLi5hbnlbXSBdXG5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG5cdFx0XHRsb2dnZXIubG9nKCdlcnJvcicsIGVycm9yLm1lc3NhZ2UsIGVycm9yLCAuLi5kYXRhKVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdFx0fVxuXG5cdFx0ZGVmYXVsdDoge1xuXHRcdFx0Y29uc3QgWyBsZXZlbCwgbWVzc2FnZSwgLi4uZGF0YSBdID0gYXJncyBhcyBbIHR5cGVvZiBMb2dnaW5nTGV2ZWwsIHN0cmluZywgLi4uYW55W10gXVxuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuXHRcdFx0bG9nZ2VyLmxvZyhsZXZlbCwgbWVzc2FnZSwgLi4uZGF0YSlcblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nZ2VyLmluc3RhbmNlXG4iXSwibmFtZXMiOlsiTG9nZ2luZ0xldmVsIiwiRmF0YWwiLCJFcnJvciIsIldhcm5pbmciLCJOb3RpY2UiLCJJbmZvIiwiSHR0cCIsIlF1ZXJ5IiwiVmVyYm9zZSIsIkRlYnVnIiwiY29sb3JpemVyTWFwIiwiX01hcCIsImNyZWF0ZVNjaGVtZSIsIm9wdGlvbnMiLCJuZXh0SW5kZXgiLCJzaXplIiwiY29sb3JpemVyIiwiY2hhbGsiLCJiZ0hleCIsImJhY2tncm91bmQiLCJoZXgiLCJmb3JlZ3JvdW5kIiwic2V0IiwiQ29sb3JWYWx1ZSIsIldoaXRlIiwiR3JheSIsIkJsYWNrIiwiQ3JpdGljYWwiLCJSZWd1bGFyIiwiQ29sb3JTY2hlbWUiLCJMb3VkIiwiZ2V0Q2hhbGtPZiIsImNvbG9yU2V0IiwiZ2V0IiwiaXNUVFkiLCJwcm9jZXNzIiwic3Rkb3V0IiwiaXNOb3RPbkNMSSIsImRlY29yYXRlTGFiZWwiLCJsYWJlbCIsInNjaGVtZSIsImRlY29yYXRlZExhYmVsIiwiYm9sZCIsInJvb3RQYXRoIiwiY3dkIiwiY29uanVuY3Rpb24iLCJibHVlIiwic3BsYXQiLCJfU3ltYm9sJGZvciIsIm5hbWUiLCJsZXZlbCIsIm1hcExvY2F0aW9uT2ZFcnJvclRocm93biIsImZpbGVuYW1lIiwidGFyZ2V0IiwicGF0aCIsInJlbGF0aXZlIiwiX3N0YXJ0c1dpdGhJbnN0YW5jZVByb3BlcnR5IiwiY2FsbCIsImdyYXkiLCJyZXBsYWNlIiwibWF0Y2hlcyIsIm1vZHVsZU5hbWUiLCJ0cmFpbGluZyIsInNlcCIsInVuZGVybGluZSIsImRpcm5hbWUiLCJiYXNlbmFtZSIsImhhbmRsZSIsImRhdGEiLCJfY29udGV4dCIsIl9jb250ZXh0MiIsIl9jb250ZXh0MyIsImVycm9yIiwidW5kZWZpbmVkIiwiZXJyb3JOYW1lIiwibWVzc2FnZSIsInN0YWNrIiwicmF3U3RhY2siLCJfbWFwSW5zdGFuY2VQcm9wZXJ0eSIsIl9zbGljZUluc3RhbmNlUHJvcGVydHkiLCJsZW5ndGgiLCJzcGxpdCIsImxpbmUiLCJpc0Fic29sdXRlIiwiY29udGV4dE5hbWUiLCJyYXdMb2NhdGlvbiIsImxvY2F0aW9uIiwib2NjdXJyZWRMaW5lIiwib2NjdXJyZWRDb2x1bW4iLCJ2ZXJzaW9uIiwiam9pbiIsInBheWxvYWQiLCJoaWdobGlnaHQiLCJsYW5ndWFnZSIsImhhbmRsZXJzIiwiRmF0YWxIYW5kbGVyIiwiRXJyb3JIYW5kbGVyIiwiV2FybmluZ0hhbmRsZXIiLCJOb3RpY2VIYW5kbGVyIiwiSW5mb0hhbmRsZXIiLCJIdHRwSGFuZGxlciIsIlF1ZXJ5SGFuZGxlciIsIlZlcmJvc2VIYW5kbGVyIiwiRGVidWdIYW5kbGVyIiwiZm9ybWF0IiwicHJpbnRmIiwidGltZXN0YW1wIiwiRGF0ZVRpbWUiLCJub3ciLCJ0b0lTTyIsImluY2x1ZGVPZmZzZXQiLCJoYW5kbGVyIiwiX2ZpbmRJbnN0YW5jZVByb3BlcnR5IiwiZmFsbGJhY2siLCJwZXJmb3JtSGFuZGxlIiwiZGVmYXVsdCIsIl9SZWZsZWN0JGFwcGx5IiwiZXh0cmFGaW5nZXJwcmludCIsInRyYW5zYWN0aW9uSWQiLCJyVHJhY2VyIiwiaWQiLCJFeGVjdXRpb25Nb2RlIiwiRGV2ZWxvcG1lbnRNb2RlIiwiUHJvZHVjdGlvbk1vZGUiLCJDbHVzdGVyaW5nTW9kZSIsIk1hc3RlclByb2Nlc3MiLCJXb3JrZXJQcm9jZXNzIiwiZXhlY3V0aW9uTW9kZSIsImVudmlyb25tZW50cyIsIk5PREVfRU5WIiwiY2x1c3RlciIsImlzUHJpbWFyeSIsImlzTWFzdGVyIiwiZGVjb3JhdGVTdGF0dXNDb2RlIiwic3RhdHVzQ29kZSIsImdyb3VwT2ZDb2RlIiwiTWF0aCIsImZsb29yIiwiTnVtYmVyIiwiYmFzZU1lc3NhZ2UiLCJTVEFUVVNfQ09ERVMiLCJncmVlbiIsIm1hZ2VudGEiLCJyZWQiLCJmb3JtYXRGb3JNb3JnYW4iLCJ0b2tlbnMiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJfIiwidG9rZW4iLCJzdWJBcmdzIiwibWV0aG9kIiwiVVJMIiwiaHR0cFZlcnNpb24iLCJjb250ZW50TGVuZ3RoIiwicmVzcG9uc2VUaW1lIiwiJG1ldGhvZCIsIiR2ZXJzaW9uIiwicmdiIiwiJHN0YXR1c0NvZGUiLCIkY29udGVudExlbmd0aCIsInByZXR0eUJ5dGVzIiwiJHJlc3BvbnNlVGltZSIsInByZXR0eU1zIiwibWV0YWRhdGEiLCJtb3JnYW4iLCJjb21iaW5lZCIsIkNvbnNvbGUiLCJDb25zb2xlVHJhbnNwb3J0Iiwid2luc3RvbiIsInRyYW5zcG9ydHMiLCJLZXlPZkluc3RhbmNlIiwiX1N5bWJvbCIsIktleU9mUGFzc3BvcnQiLCJMb2dnZXIiLCJjcmVhdGVMb2dnZXIiLCJsZXZlbHMiLCJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsImxvZGFzaCIsImZyb21QYWlycyIsInZhbHVlIiwiZm9ybWF0Rm9yQ0xJIiwiZXhpdE9uRXJyb3IiLCJzdHJlYW0iLCJQYXNzVGhyb3VnaCIsIm9iamVjdE1vZGUiLCJvbiIsImxvZyIsIl90cmltSW5zdGFuY2VQcm9wZXJ0eSIsImNvbnN0cnVjdG9yIiwicGFzc3BvcnQiLCJSZWZlcmVuY2VFcnJvciIsImluc3RhbmNlIiwiUmVmbGVjdCIsImhhc093bk1ldGFkYXRhIiwiZ2V0T3duTWV0YWRhdGEiLCJkZWZpbmVNZXRhZGF0YSIsImFyZ3MiLCJsb2dnZXIiLCJIdHRwUmVxdWVzdCIsIkh0dHBSZXNwb25zZSIsIlByb21pc2UiLCJmcm9tQ2FsbGJhY2siLCJjYWxsYmFjayJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQUFNQSxZQUFZLEdBQUc7QUFDcEI7QUFDQUMsRUFBQUEsS0FBSyxFQUFF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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cichol/logger",
3
- "version": "4.5.0",
3
+ "version": "4.6.1",
4
4
  "description": "A logger based on `winston` for personal projects.",
5
5
  "homepage": "https://github.com/morrighan/packages",
6
6
  "bugs": {
@@ -34,16 +34,12 @@
34
34
  "url": "git+https://github.com/morrighan/packages.git",
35
35
  "directory": "packages/logger"
36
36
  },
37
- "scripts": {
38
- "build": "npm run build:tsc",
39
- "build:tsc": "npx tsc --project sources --outDir dists"
40
- },
41
37
  "dependencies": {
42
38
  "bluebird": "^3.7.2",
43
- "chalk": "^5.3.0",
39
+ "chalk": "^5.4.1",
44
40
  "cli-highlight": "^2.1.11",
45
41
  "cls-rtracer": "^2.6.3",
46
- "core-js-pure": "^3.39.0",
42
+ "core-js-pure": "^3.40.0",
47
43
  "lodash": "^4.17.21",
48
44
  "luxon": "^3.5.0",
49
45
  "morgan": "^1.10.0",
@@ -53,8 +49,8 @@
53
49
  "winston": "^3.17.0"
54
50
  },
55
51
  "engines": {
56
- "node": "^20.18.0",
57
- "npm": "^10.9.0"
52
+ "node": "^20.18.1",
53
+ "npm": "^11.0.0"
58
54
  },
59
55
  "publishConfig": {
60
56
  "registry": "https://registry.npmjs.org/",
@@ -1,32 +0,0 @@
1
- import 'reflect-metadata';
2
- import { IncomingMessage as HttpRequest, ServerResponse as HttpResponse } from 'http';
3
- import Promise from 'bluebird';
4
- import type { LoggingLevelName } from '../handlers';
5
- declare class Logger {
6
- #private;
7
- private constructor();
8
- static get instance(): Logger;
9
- /**
10
- * Logging message with specific level.
11
- *
12
- * @param level
13
- * @param message
14
- * @param args Additional metadata.
15
- */
16
- log(level: LoggingLevelName, message: string, ...args: any[]): void;
17
- /**
18
- * Logging HTTP I/O.
19
- *
20
- * @param request Node.js built-in `IncomingMessage` instance from `http` module.
21
- * @param response Node.js built-in `ServerResponse` instance from `http` module.
22
- */
23
- log(request: HttpRequest, response: HttpResponse): Promise<void>;
24
- /**
25
- * Logging errors in detail.
26
- *
27
- * @param error
28
- */
29
- log(error: Error): void;
30
- }
31
- declare const _default: Logger;
32
- export default _default;
@@ -1,32 +0,0 @@
1
- import 'reflect-metadata';
2
- import { IncomingMessage as HttpRequest, ServerResponse as HttpResponse } from 'http';
3
- import Promise from 'bluebird';
4
- import type { LoggingLevelName } from '../handlers';
5
- declare class Logger {
6
- #private;
7
- private constructor();
8
- static get instance(): Logger;
9
- /**
10
- * Logging message with specific level.
11
- *
12
- * @param level
13
- * @param message
14
- * @param args Additional metadata.
15
- */
16
- log(level: LoggingLevelName, message: string, ...args: any[]): void;
17
- /**
18
- * Logging HTTP I/O.
19
- *
20
- * @param request Node.js built-in `IncomingMessage` instance from `http` module.
21
- * @param response Node.js built-in `ServerResponse` instance from `http` module.
22
- */
23
- log(request: HttpRequest, response: HttpResponse): Promise<void>;
24
- /**
25
- * Logging errors in detail.
26
- *
27
- * @param error
28
- */
29
- log(error: Error): void;
30
- }
31
- declare const _default: Logger;
32
- export default _default;
@@ -1,2 +0,0 @@
1
- declare const _default: import("logform").Format;
2
- export default _default;
@@ -1,2 +0,0 @@
1
- declare const _default: import("logform").Format;
2
- export default _default;
@@ -1,7 +0,0 @@
1
- import { IncomingMessage as HttpRequest, ServerResponse as HttpResponse } from 'http';
2
- import morgan from 'morgan';
3
- declare module 'morgan' {
4
- const combined: morgan.FormatFn;
5
- }
6
- declare const _default: morgan.FormatFn<HttpRequest, HttpResponse<HttpRequest>>;
7
- export default _default;
@@ -1,7 +0,0 @@
1
- import { IncomingMessage as HttpRequest, ServerResponse as HttpResponse } from 'http';
2
- import morgan from 'morgan';
3
- declare module 'morgan' {
4
- const combined: morgan.FormatFn;
5
- }
6
- declare const _default: morgan.FormatFn<HttpRequest, HttpResponse<HttpRequest>>;
7
- export default _default;
@@ -1,5 +0,0 @@
1
- export declare const name = "debug";
2
- export declare const level: 5;
3
- export declare const label: "DEBUG";
4
- declare const _default: null;
5
- export default _default;
@@ -1,5 +0,0 @@
1
- export declare const name = "debug";
2
- export declare const level: 5;
3
- export declare const label: "DEBUG";
4
- declare const _default: null;
5
- export default _default;
@@ -1,13 +0,0 @@
1
- type LoggingData = {
2
- level: string;
3
- message: string;
4
- } & Record<PropertyKey, any>;
5
- type HandledData = {
6
- label: string;
7
- payload: string;
8
- };
9
- export declare const name = "error";
10
- export declare const level: 1;
11
- export declare const label: "ERROR";
12
- export default function handle(data: LoggingData): HandledData | undefined;
13
- export {};
@@ -1,13 +0,0 @@
1
- type LoggingData = {
2
- level: string;
3
- message: string;
4
- } & Record<PropertyKey, any>;
5
- type HandledData = {
6
- label: string;
7
- payload: string;
8
- };
9
- export declare const name = "error";
10
- export declare const level: 1;
11
- export declare const label: "ERROR";
12
- export default function handle(data: LoggingData): HandledData | undefined;
13
- export {};
@@ -1,4 +0,0 @@
1
- export declare const name = "fatal";
2
- export declare const level: 0;
3
- export declare const label: "FATAL";
4
- export { default } from './error';
@@ -1,4 +0,0 @@
1
- export declare const name = "fatal";
2
- export declare const level: 0;
3
- export declare const label: "FATAL";
4
- export { default } from './error';
@@ -1,5 +0,0 @@
1
- export declare const name = "http";
2
- export declare const level: 4;
3
- export declare const label: "HTTP";
4
- declare const _default: null;
5
- export default _default;