tedious 13.2.0 → 14.3.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.
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.BulkLoadPayload = void 0;
7
7
 
8
- var _errors = require("./errors");
9
-
10
8
  let _Symbol$asyncIterator;
11
9
 
12
10
  _Symbol$asyncIterator = Symbol.asyncIterator;
@@ -19,22 +17,6 @@ class BulkLoadPayload {
19
17
  // as early as possible (and are not potentially lost).
20
18
 
21
19
  this.iterator = this.bulkLoad.rowToPacketTransform[Symbol.asyncIterator]();
22
- this.bulkLoad.rowToPacketTransform.once('finish', () => {
23
- this.bulkLoad.removeListener('cancel', onCancel);
24
- });
25
- let onCancel;
26
-
27
- if (this.bulkLoad.streamingMode) {
28
- onCancel = () => {
29
- this.bulkLoad.rowToPacketTransform.destroy(new _errors.RequestError('Canceled.', 'ECANCEL'));
30
- };
31
- } else {
32
- onCancel = () => {
33
- this.bulkLoad.rowToPacketTransform.destroy();
34
- };
35
- }
36
-
37
- this.bulkLoad.once('cancel', onCancel);
38
20
  }
39
21
 
40
22
  [_Symbol$asyncIterator]() {
@@ -48,4 +30,4 @@ class BulkLoadPayload {
48
30
  }
49
31
 
50
32
  exports.BulkLoadPayload = BulkLoadPayload;
51
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9idWxrLWxvYWQtcGF5bG9hZC50cyJdLCJuYW1lcyI6WyJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwiQnVsa0xvYWRQYXlsb2FkIiwiY29uc3RydWN0b3IiLCJidWxrTG9hZCIsIml0ZXJhdG9yIiwicm93VG9QYWNrZXRUcmFuc2Zvcm0iLCJvbmNlIiwicmVtb3ZlTGlzdGVuZXIiLCJvbkNhbmNlbCIsInN0cmVhbWluZ01vZGUiLCJkZXN0cm95IiwiUmVxdWVzdEVycm9yIiwidG9TdHJpbmciLCJpbmRlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7Ozt3QkErQkdBLE1BQU0sQ0FBQ0MsYTs7QUE3QkgsTUFBTUMsZUFBTixDQUF1RDtBQUk1REMsRUFBQUEsV0FBVyxDQUFDQyxRQUFELEVBQXFCO0FBQUEsU0FIaENBLFFBR2dDO0FBQUEsU0FGaENDLFFBRWdDO0FBQzlCLFNBQUtELFFBQUwsR0FBZ0JBLFFBQWhCLENBRDhCLENBRzlCO0FBQ0E7O0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixLQUFLRCxRQUFMLENBQWNFLG9CQUFkLENBQW1DTixNQUFNLENBQUNDLGFBQTFDLEdBQWhCO0FBRUEsU0FBS0csUUFBTCxDQUFjRSxvQkFBZCxDQUFtQ0MsSUFBbkMsQ0FBd0MsUUFBeEMsRUFBa0QsTUFBTTtBQUN0RCxXQUFLSCxRQUFMLENBQWNJLGNBQWQsQ0FBNkIsUUFBN0IsRUFBdUNDLFFBQXZDO0FBQ0QsS0FGRDtBQUlBLFFBQUlBLFFBQUo7O0FBQ0EsUUFBSSxLQUFLTCxRQUFMLENBQWNNLGFBQWxCLEVBQWlDO0FBQy9CRCxNQUFBQSxRQUFRLEdBQUcsTUFBTTtBQUNmLGFBQUtMLFFBQUwsQ0FBY0Usb0JBQWQsQ0FBbUNLLE9BQW5DLENBQTJDLElBQUlDLG9CQUFKLENBQWlCLFdBQWpCLEVBQThCLFNBQTlCLENBQTNDO0FBQ0QsT0FGRDtBQUdELEtBSkQsTUFJTztBQUNMSCxNQUFBQSxRQUFRLEdBQUcsTUFBTTtBQUNmLGFBQUtMLFFBQUwsQ0FBY0Usb0JBQWQsQ0FBbUNLLE9BQW5DO0FBQ0QsT0FGRDtBQUdEOztBQUVELFNBQUtQLFFBQUwsQ0FBY0csSUFBZCxDQUFtQixRQUFuQixFQUE2QkUsUUFBN0I7QUFDRDs7QUFFRCw0QkFBeUI7QUFDdkIsV0FBTyxLQUFLSixRQUFaO0FBQ0Q7O0FBRURRLEVBQUFBLFFBQVEsQ0FBQ0MsTUFBTSxHQUFHLEVBQVYsRUFBYztBQUNwQixXQUFPQSxNQUFNLEdBQUksVUFBakI7QUFDRDs7QUFuQzJEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1bGtMb2FkIGZyb20gJy4vYnVsay1sb2FkJztcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuZXhwb3J0IGNsYXNzIEJ1bGtMb2FkUGF5bG9hZCBpbXBsZW1lbnRzIEFzeW5jSXRlcmFibGU8QnVmZmVyPiB7XG4gIGJ1bGtMb2FkOiBCdWxrTG9hZDtcbiAgaXRlcmF0b3I6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxCdWZmZXI+O1xuXG4gIGNvbnN0cnVjdG9yKGJ1bGtMb2FkOiBCdWxrTG9hZCkge1xuICAgIHRoaXMuYnVsa0xvYWQgPSBidWxrTG9hZDtcblxuICAgIC8vIFdlIG5lZWQgdG8gZ3JhYiB0aGUgaXRlcmF0b3IgaGVyZSBzbyB0aGF0IGBlcnJvcmAgZXZlbnQgaGFuZGxlcnMgYXJlIHNldCB1cFxuICAgIC8vIGFzIGVhcmx5IGFzIHBvc3NpYmxlIChhbmQgYXJlIG5vdCBwb3RlbnRpYWxseSBsb3N0KS5cbiAgICB0aGlzLml0ZXJhdG9yID0gdGhpcy5idWxrTG9hZC5yb3dUb1BhY2tldFRyYW5zZm9ybVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxuICAgIHRoaXMuYnVsa0xvYWQucm93VG9QYWNrZXRUcmFuc2Zvcm0ub25jZSgnZmluaXNoJywgKCkgPT4ge1xuICAgICAgdGhpcy5idWxrTG9hZC5yZW1vdmVMaXN0ZW5lcignY2FuY2VsJywgb25DYW5jZWwpO1xuICAgIH0pO1xuXG4gICAgbGV0IG9uQ2FuY2VsOiAoKSA9PiB2b2lkO1xuICAgIGlmICh0aGlzLmJ1bGtMb2FkLnN0cmVhbWluZ01vZGUpIHtcbiAgICAgIG9uQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmJ1bGtMb2FkLnJvd1RvUGFja2V0VHJhbnNmb3JtLmRlc3Ryb3kobmV3IFJlcXVlc3RFcnJvcignQ2FuY2VsZWQuJywgJ0VDQU5DRUwnKSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5idWxrTG9hZC5yb3dUb1BhY2tldFRyYW5zZm9ybS5kZXN0cm95KCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuYnVsa0xvYWQub25jZSgnY2FuY2VsJywgb25DYW5jZWwpO1xuICB9XG5cbiAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVyYXRvcjtcbiAgfVxuXG4gIHRvU3RyaW5nKGluZGVudCA9ICcnKSB7XG4gICAgcmV0dXJuIGluZGVudCArICgnQnVsa0xvYWQnKTtcbiAgfVxufVxuIl19
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9idWxrLWxvYWQtcGF5bG9hZC50cyJdLCJuYW1lcyI6WyJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwiQnVsa0xvYWRQYXlsb2FkIiwiY29uc3RydWN0b3IiLCJidWxrTG9hZCIsIml0ZXJhdG9yIiwicm93VG9QYWNrZXRUcmFuc2Zvcm0iLCJ0b1N0cmluZyIsImluZGVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3dCQWNHQSxNQUFNLENBQUNDLGE7O0FBWkgsTUFBTUMsZUFBTixDQUF1RDtBQUk1REMsRUFBQUEsV0FBVyxDQUFDQyxRQUFELEVBQXFCO0FBQUEsU0FIaENBLFFBR2dDO0FBQUEsU0FGaENDLFFBRWdDO0FBQzlCLFNBQUtELFFBQUwsR0FBZ0JBLFFBQWhCLENBRDhCLENBRzlCO0FBQ0E7O0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixLQUFLRCxRQUFMLENBQWNFLG9CQUFkLENBQW1DTixNQUFNLENBQUNDLGFBQTFDLEdBQWhCO0FBQ0Q7O0FBRUQsNEJBQXlCO0FBQ3ZCLFdBQU8sS0FBS0ksUUFBWjtBQUNEOztBQUVERSxFQUFBQSxRQUFRLENBQUNDLE1BQU0sR0FBRyxFQUFWLEVBQWM7QUFDcEIsV0FBT0EsTUFBTSxHQUFJLFVBQWpCO0FBQ0Q7O0FBbEIyRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWxrTG9hZCBmcm9tICcuL2J1bGstbG9hZCc7XG5cbmV4cG9ydCBjbGFzcyBCdWxrTG9hZFBheWxvYWQgaW1wbGVtZW50cyBBc3luY0l0ZXJhYmxlPEJ1ZmZlcj4ge1xuICBidWxrTG9hZDogQnVsa0xvYWQ7XG4gIGl0ZXJhdG9yOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8QnVmZmVyPjtcblxuICBjb25zdHJ1Y3RvcihidWxrTG9hZDogQnVsa0xvYWQpIHtcbiAgICB0aGlzLmJ1bGtMb2FkID0gYnVsa0xvYWQ7XG5cbiAgICAvLyBXZSBuZWVkIHRvIGdyYWIgdGhlIGl0ZXJhdG9yIGhlcmUgc28gdGhhdCBgZXJyb3JgIGV2ZW50IGhhbmRsZXJzIGFyZSBzZXQgdXBcbiAgICAvLyBhcyBlYXJseSBhcyBwb3NzaWJsZSAoYW5kIGFyZSBub3QgcG90ZW50aWFsbHkgbG9zdCkuXG4gICAgdGhpcy5pdGVyYXRvciA9IHRoaXMuYnVsa0xvYWQucm93VG9QYWNrZXRUcmFuc2Zvcm1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gIH1cblxuICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yO1xuICB9XG5cbiAgdG9TdHJpbmcoaW5kZW50ID0gJycpIHtcbiAgICByZXR1cm4gaW5kZW50ICsgKCdCdWxrTG9hZCcpO1xuICB9XG59XG4iXX0=
package/lib/bulk-load.js CHANGED
@@ -396,42 +396,6 @@ class BulkLoad extends _events.EventEmitter {
396
396
  this.columns.push(column);
397
397
  this.columnsByName[name] = column;
398
398
  }
399
- /**
400
- * Adds a row to the bulk insert.
401
- *
402
- * ```js
403
- * bulkLoad.addRow({ first_name: 'Bill', last_name: 'Gates' });
404
- * ```
405
- *
406
- * @param row An object of key/value pairs representing column name (or objName) and value.
407
- *
408
- * @deprecated This method is deprecated. Instead of adding rows individually, you should pass
409
- * all row objects when calling [[Connection.execBulkLoad]]. This method will be removed in the future.
410
- */
411
-
412
-
413
- addRow(...input) {
414
- emitAddRowDeprecationWarning();
415
- this.firstRowWritten = true;
416
- let row;
417
-
418
- if (input.length > 1 || !input[0] || typeof input[0] !== 'object') {
419
- row = input;
420
- } else {
421
- row = input[0];
422
- } // write each column
423
-
424
-
425
- if (Array.isArray(row)) {
426
- this.rowToPacketTransform.write(this.columns.map((column, i) => {
427
- return column.type.validate(row[i], column.collation);
428
- }));
429
- } else {
430
- this.rowToPacketTransform.write(this.columns.map(column => {
431
- return column.type.validate(row[column.objName], column.collation);
432
- }));
433
- }
434
- }
435
399
  /**
436
400
  * @private
437
401
  */
@@ -609,48 +573,6 @@ class BulkLoad extends _events.EventEmitter {
609
573
 
610
574
  return tBuf.data;
611
575
  }
612
- /**
613
- * Switches the `BulkLoad` object into streaming mode and returns a
614
- * [writable stream](https://nodejs.org/dist/latest-v10.x/docs/api/stream.html#stream_writable_streams)
615
- * that can be used to send a large amount of rows to the server.
616
- *
617
- * ```js
618
- * const bulkLoad = connection.newBulkLoad(...);
619
- * bulkLoad.addColumn(...);
620
- *
621
- * const rowStream = bulkLoad.getRowStream();
622
- *
623
- * connection.execBulkLoad(bulkLoad);
624
- * ```
625
- *
626
- * In streaming mode, [[addRow]] cannot be used. Instead all data rows must be written to the returned stream object.
627
- * The stream implementation uses data flow control to prevent memory overload. [`stream.write()`](https://nodejs.org/dist/latest-v10.x/docs/api/stream.html#stream_writable_write_chunk_encoding_callback)
628
- * returns `false` to indicate that data transfer should be paused.
629
- *
630
- * After that, the stream emits a ['drain' event](https://nodejs.org/dist/latest-v10.x/docs/api/stream.html#stream_event_drain)
631
- * when it is ready to resume data transfer.
632
- *
633
- * @deprecated
634
- * This method is deprecated. Instead of writing rows to the stream returned by this method,
635
- * you can pass any object that implements the `Iterable` or `AsyncIterable` interface (e.g. a `Readable`
636
- * stream or an `AsyncGenerator`) when calling [[Connection.execBulkLoad]]. This method will be removed in the future.
637
- */
638
-
639
-
640
- getRowStream() {
641
- emitGetRowStreamDeprecationWarning();
642
-
643
- if (this.firstRowWritten) {
644
- throw new Error('BulkLoad cannot be switched to streaming mode after first row has been written using addRow().');
645
- }
646
-
647
- if (this.executionStarted) {
648
- throw new Error('BulkLoad cannot be switched to streaming mode after execution has started.');
649
- }
650
-
651
- this.streamingMode = true;
652
- return this.rowToPacketTransform;
653
- }
654
576
  /**
655
577
  * @private
656
578
  */
@@ -667,29 +589,7 @@ class BulkLoad extends _events.EventEmitter {
667
589
 
668
590
  }
669
591
 
670
- let addRowDeprecationWarningEmitted = false;
671
-
672
- function emitAddRowDeprecationWarning() {
673
- if (addRowDeprecationWarningEmitted) {
674
- return;
675
- }
676
-
677
- addRowDeprecationWarningEmitted = true;
678
- process.emitWarning('The BulkLoad.addRow method is deprecated. Please provide the row data for ' + 'the bulk load as the second argument to Connection.execBulkLoad instead.', 'DeprecationWarning', BulkLoad.prototype.addRow);
679
- }
680
-
681
- let getRowStreamDeprecationWarningEmitted = false;
682
-
683
- function emitGetRowStreamDeprecationWarning() {
684
- if (getRowStreamDeprecationWarningEmitted) {
685
- return;
686
- }
687
-
688
- getRowStreamDeprecationWarningEmitted = true;
689
- process.emitWarning('The BulkLoad.getRowStream method is deprecated. You can pass an Iterable, AsyncIterable or ' + 'stream.Readable object containing the row data as a second argument to Connection.execBulkLoad instead.', 'DeprecationWarning', BulkLoad.prototype.getRowStream);
690
- }
691
-
692
592
  var _default = BulkLoad;
693
593
  exports.default = _default;
694
594
  module.exports = BulkLoad;
695
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9idWxrLWxvYWQudHMiXSwibmFtZXMiOlsiRkxBR1MiLCJudWxsYWJsZSIsImNhc2VTZW4iLCJ1cGRhdGVhYmxlUmVhZFdyaXRlIiwidXBkYXRlYWJsZVVua25vd24iLCJpZGVudGl0eSIsImNvbXB1dGVkIiwiZml4ZWRMZW5DTFJUeXBlIiwic3BhcnNlQ29sdW1uU2V0IiwiaGlkZGVuIiwia2V5IiwibnVsbGFibGVVbmtub3duIiwiRE9ORV9TVEFUVVMiLCJGSU5BTCIsIk1PUkUiLCJFUlJPUiIsIklOWEFDVCIsIkNPVU5UIiwiQVRUTiIsIlNSVkVSUk9SIiwicm93VG9rZW5CdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiVE9LRU5fVFlQRSIsIlJPVyIsInRleHRQb2ludGVyQW5kVGltZXN0YW1wQnVmZmVyIiwidGV4dFBvaW50ZXJOdWxsQnVmZmVyIiwiUm93VHJhbnNmb3JtIiwiVHJhbnNmb3JtIiwiY29uc3RydWN0b3IiLCJidWxrTG9hZCIsIndyaXRhYmxlT2JqZWN0TW9kZSIsImNvbHVtbk1ldGFkYXRhV3JpdHRlbiIsIm1haW5PcHRpb25zIiwiY29sdW1ucyIsIm9wdGlvbnMiLCJfdHJhbnNmb3JtIiwicm93IiwiX2VuY29kaW5nIiwiY2FsbGJhY2siLCJwdXNoIiwiZ2V0Q29sTWV0YURhdGEiLCJpIiwibGVuZ3RoIiwiYyIsInZhbHVlIiwiQXJyYXkiLCJpc0FycmF5Iiwib2JqTmFtZSIsImZpcnN0Um93V3JpdHRlbiIsInR5cGUiLCJ2YWxpZGF0ZSIsImNvbGxhdGlvbiIsImVycm9yIiwicGFyYW1ldGVyIiwic2NhbGUiLCJwcmVjaXNpb24iLCJuYW1lIiwiZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgiLCJjaHVuayIsImdlbmVyYXRlUGFyYW1ldGVyRGF0YSIsInByb2Nlc3MiLCJuZXh0VGljayIsIl9mbHVzaCIsImNyZWF0ZURvbmVUb2tlbiIsIkJ1bGtMb2FkIiwiRXZlbnRFbWl0dGVyIiwidGFibGUiLCJjb25uZWN0aW9uT3B0aW9ucyIsImNoZWNrQ29uc3RyYWludHMiLCJmaXJlVHJpZ2dlcnMiLCJrZWVwTnVsbHMiLCJsb2NrVGFibGUiLCJvcmRlciIsIlR5cGVFcnJvciIsImNvbHVtbiIsImRpcmVjdGlvbiIsIk9iamVjdCIsImVudHJpZXMiLCJjYW5jZWxlZCIsImV4ZWN1dGlvblN0YXJ0ZWQiLCJzdHJlYW1pbmdNb2RlIiwidGltZW91dCIsImNvbHVtbnNCeU5hbWUiLCJyb3dUb1BhY2tldFRyYW5zZm9ybSIsImJ1bGtPcHRpb25zIiwiY29ubmVjdGlvbiIsInJvd3MiLCJyc3QiLCJyb3dDb3VudCIsInVuZGVmaW5lZCIsImFkZENvbHVtbiIsIm91dHB1dCIsIkVycm9yIiwiaWQiLCJyZXNvbHZlTGVuZ3RoIiwicmVzb2x2ZVByZWNpc2lvbiIsInJlc29sdmVTY2FsZSIsImFkZFJvdyIsImlucHV0IiwiZW1pdEFkZFJvd0RlcHJlY2F0aW9uV2FybmluZyIsIndyaXRlIiwibWFwIiwiZ2V0T3B0aW9uc1NxbCIsImFkZE9wdGlvbnMiLCJvcmRlckNvbHVtbnMiLCJqb2luIiwiZ2V0QnVsa0luc2VydFNxbCIsInNxbCIsImxlbiIsImRlY2xhcmF0aW9uIiwiZ2V0VGFibGVDcmVhdGlvblNxbCIsInRCdWYiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwid3JpdGVVSW50OCIsIkNPTE1FVEFEQVRBIiwid3JpdGVVSW50MTZMRSIsImoiLCJ0ZHNWZXJzaW9uIiwid3JpdGVVSW50MzJMRSIsImZsYWdzIiwid3JpdGVCdWZmZXIiLCJnZW5lcmF0ZVR5cGVJbmZvIiwiaGFzVGFibGVOYW1lIiwid3JpdGVVc1ZhcmNoYXIiLCJ3cml0ZUJWYXJjaGFyIiwiZGF0YSIsInNldFRpbWVvdXQiLCJET05FIiwic3RhdHVzIiwiZ2V0Um93U3RyZWFtIiwiZW1pdEdldFJvd1N0cmVhbURlcHJlY2F0aW9uV2FybmluZyIsImNhbmNlbCIsImVtaXQiLCJhZGRSb3dEZXByZWNhdGlvbldhcm5pbmdFbWl0dGVkIiwiZW1pdFdhcm5pbmciLCJwcm90b3R5cGUiLCJnZXRSb3dTdHJlYW1EZXByZWNhdGlvbldhcm5pbmdFbWl0dGVkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUdBOztBQUNBOzs7O0FBS0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUEsS0FBSyxHQUFHO0FBQ1pDLEVBQUFBLFFBQVEsRUFBRSxLQUFLLENBREg7QUFFWkMsRUFBQUEsT0FBTyxFQUFFLEtBQUssQ0FGRjtBQUdaQyxFQUFBQSxtQkFBbUIsRUFBRSxLQUFLLENBSGQ7QUFJWkMsRUFBQUEsaUJBQWlCLEVBQUUsS0FBSyxDQUpaO0FBS1pDLEVBQUFBLFFBQVEsRUFBRSxLQUFLLENBTEg7QUFNWkMsRUFBQUEsUUFBUSxFQUFFLEtBQUssQ0FOSDtBQU1NO0FBQ2xCQyxFQUFBQSxlQUFlLEVBQUUsS0FBSyxDQVBWO0FBT2E7QUFDekJDLEVBQUFBLGVBQWUsRUFBRSxLQUFLLEVBUlY7QUFRYztBQUMxQkMsRUFBQUEsTUFBTSxFQUFFLEtBQUssRUFURDtBQVNLO0FBQ2pCQyxFQUFBQSxHQUFHLEVBQUUsS0FBSyxFQVZFO0FBVUU7QUFDZEMsRUFBQUEsZUFBZSxFQUFFLEtBQUssRUFYVixDQVdhOztBQVhiLENBQWQ7QUFjQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTUMsV0FBVyxHQUFHO0FBQ2xCQyxFQUFBQSxLQUFLLEVBQUUsSUFEVztBQUVsQkMsRUFBQUEsSUFBSSxFQUFFLEdBRlk7QUFHbEJDLEVBQUFBLEtBQUssRUFBRSxHQUhXO0FBSWxCQyxFQUFBQSxNQUFNLEVBQUUsR0FKVTtBQUtsQkMsRUFBQUEsS0FBSyxFQUFFLElBTFc7QUFNbEJDLEVBQUFBLElBQUksRUFBRSxJQU5ZO0FBT2xCQyxFQUFBQSxRQUFRLEVBQUU7QUFQUSxDQUFwQjtBQVVBO0FBQ0E7QUFDQTs7QUFpRkEsTUFBTUMsY0FBYyxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWSxDQUFFQyxZQUFXQyxHQUFiLENBQVosQ0FBdkI7QUFDQSxNQUFNQyw2QkFBNkIsR0FBR0osTUFB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QUNBLDBFQUZGLEVBR0Usb0JBSEYsRUFJRXRFLFFBQVEsQ0FBQ3VFLFNBQVQsQ0FBbUJ0QyxNQUpyQjtBQU1EOztBQUVELElBQUl1QyxxQ0FBcUMsR0FBRyxLQUE1Qzs7QUFDQSxTQUFTTixrQ0FBVCxHQUE4QztBQUM1QyxNQUFJTSxxQ0FBSixFQUEyQztBQUN6QztBQUNEOztBQUVEQSxFQUFBQSxxQ0FBcUMsR0FBRyxJQUF4QztBQUVBNUUsRUFBQUEsT0FBTyxDQUFDMEUsV0FBUixDQUNFLGdHQUNBLHlHQUZGLEVBR0Usb0JBSEYsRUFJRXRFLFFBQVEsQ0FBQ3VFLFNBQVQsQ0FBbUJOLFlBSnJCO0FBTUQ7O2VBRWNqRSxROztBQUNmeUUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCMUUsUUFBakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcbmltcG9ydCBDb25uZWN0aW9uLCB7IEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuXG5pbXBvcnQgeyBUcmFuc2Zvcm0gfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgVFlQRSBhcyBUT0tFTl9UWVBFIH0gZnJvbSAnLi90b2tlbi90b2tlbic7XG5cbmltcG9ydCB7IERhdGFUeXBlLCBQYXJhbWV0ZXIgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBDb2xsYXRpb24gfSBmcm9tICcuL2NvbGxhdGlvbic7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRkxBR1MgPSB7XG4gIG51bGxhYmxlOiAxIDw8IDAsXG4gIGNhc2VTZW46IDEgPDwgMSxcbiAgdXBkYXRlYWJsZVJlYWRXcml0ZTogMSA8PCAyLFxuICB1cGRhdGVhYmxlVW5rbm93bjogMSA8PCAzLFxuICBpZGVudGl0eTogMSA8PCA0LFxuICBjb21wdXRlZDogMSA8PCA1LCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAgZml4ZWRMZW5DTFJUeXBlOiAxIDw8IDgsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxuICBzcGFyc2VDb2x1bW5TZXQ6IDEgPDwgMTAsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMy5CXG4gIGhpZGRlbjogMSA8PCAxMywgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIGtleTogMSA8PCAxNCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIG51bGxhYmxlVW5rbm93bjogMSA8PCAxNSAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgRE9ORV9TVEFUVVMgPSB7XG4gIEZJTkFMOiAweDAwLFxuICBNT1JFOiAweDEsXG4gIEVSUk9SOiAweDIsXG4gIElOWEFDVDogMHg0LFxuICBDT1VOVDogMHgxMCxcbiAgQVRUTjogMHgyMCxcbiAgU1JWRVJST1I6IDB4MTAwXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmludGVyZmFjZSBJbnRlcm5hbE9wdGlvbnMge1xuICBjaGVja0NvbnN0cmFpbnRzOiBib29sZWFuO1xuICBmaXJlVHJpZ2dlcnM6IGJvb2xlYW47XG4gIGtlZXBOdWxsczogYm9vbGVhbjtcbiAgbG9ja1RhYmxlOiBib29sZWFuO1xuICBvcmRlcjogeyBbY29sdW1uTmFtZTogc3RyaW5nXTogJ0FTQycgfCAnREVTQycgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgLyoqXG4gICAqIEhvbm9ycyBjb25zdHJhaW50cyBkdXJpbmcgYnVsayBsb2FkLCB1c2luZyBULVNRTFxuICAgKiBbQ0hFQ0tfQ09OU1RSQUlOVFNdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODYyNDcodj1zcWwuMTA1KS5hc3B4KS5cbiAgICogKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBjaGVja0NvbnN0cmFpbnRzPzogSW50ZXJuYWxPcHRpb25zWydjaGVja0NvbnN0cmFpbnRzJ10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvbm9ycyBpbnNlcnQgdHJpZ2dlcnMgZHVyaW5nIGJ1bGsgbG9hZCwgdXNpbmcgdGhlIFQtU1FMIFtGSVJFX1RSSUdHRVJTXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg3NjQwKHY9c3FsLjEwNSkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgZmlyZVRyaWdnZXJzPzogSW50ZXJuYWxPcHRpb25zWydmaXJlVHJpZ2dlcnMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSG9ub3JzIG51bGwgdmFsdWUgcGFzc2VkLCBpZ25vcmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBzZXQgb24gdGFibGUsIHVzaW5nIFQtU1FMIFtLRUVQX05VTExTXShodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg3ODg3KHY9c3FsLjEyMCkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAga2VlcE51bGxzPzogSW50ZXJuYWxPcHRpb25zWydrZWVwTnVsbHMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGxhY2VzIGEgYnVsayB1cGRhdGUoQlUpIGxvY2sgb24gdGFibGUgd2hpbGUgcGVyZm9ybWluZyBidWxrIGxvYWQsIHVzaW5nIFQtU1FMIFtUQUJMT0NLXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTgwODc2KHY9c3FsLjEwNSkuYXNweCkuIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgbG9ja1RhYmxlPzogSW50ZXJuYWxPcHRpb25zWydsb2NrVGFibGUnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBvcmRlcmluZyBvZiB0aGUgZGF0YSB0byBwb3NzaWJseSBpbmNyZWFzZSBidWxrIGluc2VydCBwZXJmb3JtYW5jZSwgdXNpbmcgVC1TUUwgW09SREVSXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9wcmV2aW91cy12ZXJzaW9ucy9zcWwvc3FsLXNlcnZlci0yMDA4LXIyL21zMTc3NDY4KHY9c3FsLjEwNSkpLiAoZGVmYXVsdDogYHt9YClcbiAgICovXG4gIG9yZGVyPzogSW50ZXJuYWxPcHRpb25zWydvcmRlciddIHwgdW5kZWZpbmVkO1xufVxuXG5cbmV4cG9ydCB0eXBlIENhbGxiYWNrID1cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIFtbQnVsa0xvYWRdXSBmaW5pc2hlcyBleGVjdXRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSByb3dDb3VudCB0aGUgbnVtYmVyIG9mIHJvd3MgaW5zZXJ0ZWRcbiAgICovXG4gIChlcnI6IEVycm9yIHwgdW5kZWZpbmVkIHwgbnVsbCwgcm93Q291bnQ/OiBudW1iZXIpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBDb2x1bW4gZXh0ZW5kcyBQYXJhbWV0ZXIge1xuICBvYmpOYW1lOiBzdHJpbmc7XG4gIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgQ29sdW1uT3B0aW9ucyB7XG4gIG91dHB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvciBWYXJDaGFyLCBOVmFyQ2hhciwgVmFyQmluYXJ5LiBVc2UgbGVuZ3RoIGFzIGBJbmZpbml0eWAgZm9yIFZhckNoYXIobWF4KSwgTlZhckNoYXIobWF4KSBhbmQgVmFyQmluYXJ5KG1heCkuXG4gICAqL1xuICBsZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvciBOdW1lcmljLCBEZWNpbWFsLlxuICAgKi9cbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGb3IgTnVtZXJpYywgRGVjaW1hbCwgVGltZSwgRGF0ZVRpbWUyLCBEYXRlVGltZU9mZnNldC5cbiAgICovXG4gIHNjYWxlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3VuZCBvbiBgcm93T2JqYCBhcmd1bWVudHMgcGFzc2VkIHRvIFtbYWRkUm93XV0sIHRoZW4geW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcHJvcGVydHkgbmFtZS5cbiAgICovXG4gIG9iak5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gYWNjZXB0cyBOVUxMIHZhbHVlcy5cbiAgICovXG4gIG51bGxhYmxlPzogYm9vbGVhbjtcbn1cblxuY29uc3Qgcm93VG9rZW5CdWZmZXIgPSBCdWZmZXIuZnJvbShbIFRPS0VOX1RZUEUuUk9XIF0pO1xuY29uc3QgdGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIgPSBCdWZmZXIuZnJvbShbXG4gIC8vIFRleHRQb2ludGVyIGxlbmd0aFxuICAweDEwLFxuXG4gIC8vIFRleHRQb2ludGVyXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsXG5cbiAgLy8gVGltZXN0YW1wXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBcbl0pO1xuY29uc3QgdGV4dFBvaW50ZXJOdWxsQnVmZmVyID0gQnVmZmVyLmZyb20oWzB4MDBdKTtcblxuLy8gQSB0cmFuc2Zvcm0gdGhhdCBjb252ZXJ0cyByb3dzIHRvIHBhY2tldHMuXG5jbGFzcyBSb3dUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbHVtbk1ldGFkYXRhV3JpdHRlbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBidWxrTG9hZDogQnVsa0xvYWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWFpbk9wdGlvbnM6IEJ1bGtMb2FkWydvcHRpb25zJ107XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29sdW1uczogQnVsa0xvYWRbJ2NvbHVtbnMnXTtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJ1bGtMb2FkOiBCdWxrTG9hZCkge1xuICAgIHN1cGVyKHsgd3JpdGFibGVPYmplY3RNb2RlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5idWxrTG9hZCA9IGJ1bGtMb2FkO1xuICAgIHRoaXMubWFpbk9wdGlvbnMgPSBidWxrTG9hZC5vcHRpb25zO1xuICAgIHRoaXMuY29sdW1ucyA9IGJ1bGtMb2FkLmNvbHVtbnM7XG5cbiAgICB0aGlzLmNvbHVtbk1ldGFkYXRhV3JpdHRlbiA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdHJhbnNmb3JtKHJvdzogQXJyYXk8dW5rbm93bj4gfCB7IFtjb2xOYW1lOiBzdHJpbmddOiB1bmtub3duIH0sIF9lbmNvZGluZzogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uTWV0YWRhdGFXcml0dGVuKSB7XG4gICAgICB0aGlzLnB1c2godGhpcy5idWxrTG9hZC5nZXRDb2xNZXRhRGF0YSgpKTtcbiAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFXcml0dGVuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2gocm93VG9rZW5CdWZmZXIpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICBsZXQgdmFsdWUgPSBBcnJheS5pc0FycmF5KHJvdykgPyByb3dbaV0gOiByb3dbYy5vYmpOYW1lXTtcblxuICAgICAgaWYgKCF0aGlzLmJ1bGtMb2FkLmZpcnN0Um93V3JpdHRlbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gYy50eXBlLnZhbGlkYXRlKHZhbHVlLCBjLmNvbGxhdGlvbik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmFtZXRlciA9IHtcbiAgICAgICAgbGVuZ3RoOiBjLmxlbmd0aCxcbiAgICAgICAgc2NhbGU6IGMuc2NhbGUsXG4gICAgICAgIHByZWNpc2lvbjogYy5wcmVjaXNpb24sXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfTtcblxuICAgICAgaWYgKGMudHlwZS5uYW1lID09PSAnVGV4dCcgfHwgYy50eXBlLm5hbWUgPT09ICdJbWFnZScgfHwgYy50eXBlLm5hbWUgPT09ICdOVGV4dCcpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnB1c2godGV4dFBvaW50ZXJOdWxsQnVmZmVyKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHVzaCh0ZXh0UG9pbnRlckFuZFRpbWVzdGFtcEJ1ZmZlcik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHVzaChjLnR5cGUuZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgocGFyYW1ldGVyLCB0aGlzLm1haW5PcHRpb25zKSk7XG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGMudHlwZS5nZW5lcmF0ZVBhcmFtZXRlckRhdGEocGFyYW1ldGVyLCB0aGlzLm1haW5PcHRpb25zKSkge1xuICAgICAgICB0aGlzLnB1c2goY2h1bmspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmx1c2goY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnB1c2godGhpcy5idWxrTG9hZC5jcmVhdGVEb25lVG9rZW4oKSk7XG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgQnVsa0xvYWQgaW5zdGFuY2UgaXMgdXNlZCB0byBwZXJmb3JtIGEgYnVsayBpbnNlcnQuXG4gKlxuICogVXNlIFtbQ29ubmVjdGlvbi5uZXdCdWxrTG9hZF1dIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSwgYW5kIFtbQ29ubmVjdGlvbi5leGVjQnVsa0xvYWRdXSB0byBleGVjdXRlIGl0LlxuICpcbiAqIEV4YW1wbGUgb2YgQnVsa0xvYWQgVXNhZ2VzOlxuICpcbiAqIGBgYGpzXG4gKiAvLyBvcHRpb25hbCBCdWxrTG9hZCBvcHRpb25zXG4gKiBjb25zdCBvcHRpb25zID0geyBrZWVwTnVsbHM6IHRydWUgfTtcbiAqXG4gKiAvLyBpbnN0YW50aWF0ZSAtIHByb3ZpZGUgdGhlIHRhYmxlIHdoZXJlIHlvdSdsbCBiZSBpbnNlcnRpbmcgdG8sIG9wdGlvbnMgYW5kIGEgY2FsbGJhY2tcbiAqIGNvbnN0IGJ1bGtMb2FkID0gY29ubmVjdGlvbi5uZXdCdWxrTG9hZCgnTXlUYWJsZScsIG9wdGlvbnMsIChlcnJvciwgcm93Q291bnQpID0+IHtcbiAqICAgY29uc29sZS5sb2coJ2luc2VydGVkICVkIHJvd3MnLCByb3dDb3VudCk7XG4gKiB9KTtcbiAqXG4gKiAvLyBzZXR1cCB5b3VyIGNvbHVtbnMgLSBhbHdheXMgaW5kaWNhdGUgd2hldGhlciB0aGUgY29sdW1uIGlzIG51bGxhYmxlXG4gKiBidWxrTG9hZC5hZGRDb2x1bW4oJ215SW50JywgVFlQRVMuSW50LCB7IG51bGxhYmxlOiBmYWxzZSB9KTtcbiAqIGJ1bGtMb2FkLmFkZENvbHVtbignbXlTdHJpbmcnLCBUWVBFUy5OVmFyQ2hhciwgeyBsZW5ndGg6IDUwLCBudWxsYWJsZTogdHJ1ZSB9KTtcbiAqXG4gKiAvLyBleGVjdXRlXG4gKiBjb25uZWN0aW9uLmV4ZWNCdWxrTG9hZChidWxrTG9hZCwgW1xuICogICB7IG15SW50OiA3LCBteVN0cmluZzogJ2hlbGxvJyB9LFxuICogICB7IG15SW50OiAyMywgbXlTdHJpbmc6ICd3b3JsZCcgfVxuICogXSk7XG4gKiBgYGBcbiAqL1xuY2xhc3MgQnVsa0xvYWQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBleGVjdXRpb25TdGFydGVkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHN0cmVhbWluZ01vZGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdGFibGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0aW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhbGxiYWNrOiBDYWxsYmFjaztcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbHVtbnM6IEFycmF5PENvbHVtbj47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29sdW1uc0J5TmFtZTogeyBbbmFtZTogc3RyaW5nXTogQ29sdW1uIH07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmaXJzdFJvd1dyaXR0ZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcm93VG9QYWNrZXRUcmFuc2Zvcm06IFJvd1RyYW5zZm9ybTtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGJ1bGtPcHRpb25zOiBJbnRlcm5hbE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJvd3M6IEFycmF5PGFueT4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcnN0OiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0YWJsZTogc3RyaW5nLCBjb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZCwgY29ubmVjdGlvbk9wdGlvbnM6IEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMsIHtcbiAgICBjaGVja0NvbnN0cmFpbnRzID0gZmFsc2UsXG4gICAgZmlyZVRyaWdnZXJzID0gZmFsc2UsXG4gICAga2VlcE51bGxzID0gZmFsc2UsXG4gICAgbG9ja1RhYmxlID0gZmFsc2UsXG4gICAgb3JkZXIgPSB7fSxcbiAgfTogT3B0aW9ucywgY2FsbGJhY2s6IENhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjaGVja0NvbnN0cmFpbnRzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMuY2hlY2tDb25zdHJhaW50c1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmlyZVRyaWdnZXJzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMuZmlyZVRyaWdnZXJzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBrZWVwTnVsbHMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5rZWVwTnVsbHNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGxvY2tUYWJsZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmxvY2tUYWJsZVwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3JkZXIgIT09ICdvYmplY3QnIHx8IG9yZGVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLm9yZGVyXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIG9iamVjdC4nKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIGRpcmVjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMob3JkZXIpKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uICE9PSAnQVNDJyAmJiBkaXJlY3Rpb24gIT09ICdERVNDJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgb2YgdGhlIFwiJyArIGNvbHVtbiArICdcIiBrZXkgaW4gdGhlIFwib3B0aW9ucy5vcmRlclwiIG9iamVjdCBtdXN0IGJlIGVpdGhlciBcIkFTQ1wiIG9yIFwiREVTQ1wiLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2FuY2VsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmV4ZWN1dGlvblN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuY29sbGF0aW9uID0gY29sbGF0aW9uO1xuXG4gICAgdGhpcy50YWJsZSA9IHRhYmxlO1xuICAgIHRoaXMub3B0aW9ucyA9IGNvbm5lY3Rpb25PcHRpb25zO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICB0aGlzLmNvbHVtbnNCeU5hbWUgPSB7fTtcbiAgICB0aGlzLmZpcnN0Um93V3JpdHRlbiA9IGZhbHNlO1xuICAgIHRoaXMuc3RyZWFtaW5nTW9kZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5yb3dUb1BhY2tldFRyYW5zZm9ybSA9IG5ldyBSb3dUcmFuc2Zvcm0odGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcblxuICAgIHRoaXMuYnVsa09wdGlvbnMgPSB7IGNoZWNrQ29uc3RyYWludHMsIGZpcmVUcmlnZ2Vycywga2VlcE51bGxzLCBsb2NrVGFibGUsIG9yZGVyIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNvbHVtbiB0byB0aGUgYnVsayBsb2FkLlxuICAgKlxuICAgKiBUaGUgY29sdW1uIGRlZmluaXRpb25zIHNob3VsZCBtYXRjaCB0aGUgdGFibGUgeW91IGFyZSB0cnlpbmcgdG8gaW5zZXJ0IGludG8uXG4gICAqIEF0dGVtcHRpbmcgdG8gY2FsbCBhZGRDb2x1bW4gYWZ0ZXIgdGhlIGZpcnN0IHJvdyBoYXMgYmVlbiBhZGRlZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi5cbiAgICpcbiAgICogYGBganNcbiAgICogYnVsa0xvYWQuYWRkQ29sdW1uKCdNeUludENvbHVtbicsIFRZUEVTLkludCwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29sdW1uLlxuICAgKiBAcGFyYW0gdHlwZSBPbmUgb2YgdGhlIHN1cHBvcnRlZCBgZGF0YSB0eXBlc2AuXG4gICAqIEBwYXJhbSBfX25hbWVkUGFyYW1ldGVycyBBZGRpdGlvbmFsIGNvbHVtbiB0eXBlIGluZm9ybWF0aW9uLiBBdCBhIG1pbmltdW0sIGBudWxsYWJsZWAgbXVzdCBiZSBzZXQgdG8gdHJ1ZSBvciBmYWxzZS5cbiAgICogQHBhcmFtIGxlbmd0aCBGb3IgVmFyQ2hhciwgTlZhckNoYXIsIFZhckJpbmFyeS4gVXNlIGxlbmd0aCBhcyBgSW5maW5pdHlgIGZvciBWYXJDaGFyKG1heCksIE5WYXJDaGFyKG1heCkgYW5kIFZhckJpbmFyeShtYXgpLlxuICAgKiBAcGFyYW0gbnVsbGFibGUgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBhY2NlcHRzIE5VTEwgdmFsdWVzLlxuICAgKiBAcGFyYW0gb2JqTmFtZSBJZiB0aGUgbmFtZSBvZiB0aGUgY29sdW1uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3VuZCBvbiBgcm93T2JqYCBhcmd1bWVudHMgcGFzc2VkIHRvIFtbYWRkUm93XV0gb3IgW1tDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZF1dLCB0aGVuIHlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIHByb3BlcnR5IG5hbWUuXG4gICAqIEBwYXJhbSBwcmVjaXNpb24gRm9yIE51bWVyaWMsIERlY2ltYWwuXG4gICAqIEBwYXJhbSBzY2FsZSBGb3IgTnVtZXJpYywgRGVjaW1hbCwgVGltZSwgRGF0ZVRpbWUyLCBEYXRlVGltZU9mZnNldC5cbiAgKi9cbiAgYWRkQ29sdW1uKG5hbWU6IHN0cmluZywgdHlwZTogRGF0YVR5cGUsIHsgb3V0cHV0ID0gZmFsc2UsIGxlbmd0aCwgcHJlY2lzaW9uLCBzY2FsZSwgb2JqTmFtZSA9IG5hbWUsIG51bGxhYmxlID0gdHJ1ZSB9OiBDb2x1bW5PcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuZmlyc3RSb3dXcml0dGVuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbnMgY2Fubm90IGJlIGFkZGVkIHRvIGJ1bGsgaW5zZXJ0IGFmdGVyIHRoZSBmaXJzdCByb3cgaGFzIGJlZW4gd3JpdHRlbi4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXhlY3V0aW9uU3RhcnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW5zIGNhbm5vdCBiZSBhZGRlZCB0byBidWxrIGluc2VydCBhZnRlciBleGVjdXRpb24gaGFzIHN0YXJ0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uOiBDb2x1bW4gPSB7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgIHByZWNpc2lvbjogcHJlY2lzaW9uLFxuICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgb2JqTmFtZTogb2JqTmFtZSxcbiAgICAgIG51bGxhYmxlOiBudWxsYWJsZSxcbiAgICAgIGNvbGxhdGlvbjogdGhpcy5jb2xsYXRpb25cbiAgICB9O1xuXG4gICAgaWYgKCh0eXBlLmlkICYgMHgzMCkgPT09IDB4MjApIHtcbiAgICAgIGlmIChjb2x1bW4ubGVuZ3RoID09IG51bGwgJiYgdHlwZS5yZXNvbHZlTGVuZ3RoKSB7XG4gICAgICAgIGNvbHVtbi5sZW5ndGggPSB0eXBlLnJlc29sdmVMZW5ndGgoY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlUHJlY2lzaW9uICYmIGNvbHVtbi5wcmVjaXNpb24gPT0gbnVsbCkge1xuICAgICAgY29sdW1uLnByZWNpc2lvbiA9IHR5cGUucmVzb2x2ZVByZWNpc2lvbihjb2x1bW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlLnJlc29sdmVTY2FsZSAmJiBjb2x1bW4uc2NhbGUgPT0gbnVsbCkge1xuICAgICAgY29sdW1uLnNjYWxlID0gdHlwZS5yZXNvbHZlU2NhbGUoY29sdW1uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtbnMucHVzaChjb2x1bW4pO1xuXG4gICAgdGhpcy5jb2x1bW5zQnlOYW1lW25hbWVdID0gY29sdW1uO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByb3cgdG8gdGhlIGJ1bGsgaW5zZXJ0LlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBidWxrTG9hZC5hZGRSb3coeyBmaXJzdF9uYW1lOiAnQmlsbCcsIGxhc3RfbmFtZTogJ0dhdGVzJyB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSByb3cgQW4gb2JqZWN0IG9mIGtleS92YWx1ZSBwYWlycyByZXByZXNlbnRpbmcgY29sdW1uIG5hbWUgKG9yIG9iak5hbWUpIGFuZCB2YWx1ZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCBvZiBhZGRpbmcgcm93cyBpbmRpdmlkdWFsbHksIHlvdSBzaG91bGQgcGFzc1xuICAgKiAgIGFsbCByb3cgb2JqZWN0cyB3aGVuIGNhbGxpbmcgW1tDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZF1dLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICovXG4gIGFkZFJvdyhyb3c6IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IHVua25vd24gfSk6IHZvaWRcblxuICAvKipcbiAgICogQWRkcyBhIHJvdyB0byB0aGUgYnVsayBpbnNlcnQuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGJ1bGtMb2FkLmFkZFJvdygnQmlsbCcsICdHYXRlcycpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHJvdyBJZiB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIGNvbHVtbnMsIHZhbHVlcyBjYW4gYmUgcGFzc2VkIGFzIG11bHRpcGxlIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGFuIGFycmF5LiBUaGV5XG4gICAqICAgbXVzdCBiZSBpbiB0aGUgc2FtZSBvcmRlciB0aGUgY29sdW1ucyB3ZXJlIGFkZGVkIGluLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkIG9mIGFkZGluZyByb3dzIGluZGl2aWR1YWxseSwgeW91IHNob3VsZCBwYXNzXG4gICAqICAgYWxsIHJvdyBvYmplY3RzIHdoZW4gY2FsbGluZyBbW0Nvbm5lY3Rpb24uZXhlY0J1bGtMb2FkXV0uIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLlxuICAgKi9cbiAgYWRkUm93KC4uLnJvdzogdW5rbm93bltdKTogdm9pZFxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcm93IHRvIHRoZSBidWxrIGluc2VydC5cbiAgICpcbiAgICogYGBganNcbiAgICogYnVsa0xvYWQuYWRkUm93KFsnQmlsbCcsICdHYXRlcyddKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSByb3cgQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZXMgb2YgZWFjaCBjb2x1bW4gaW4gdGhlIHNhbWUgb3JkZXIgd2hpY2ggdGhleSB3ZXJlIGFkZGVkIHRvIHRoZSBidWxrTG9hZCBvYmplY3QuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQgb2YgYWRkaW5nIHJvd3MgaW5kaXZpZHVhbGx5LCB5b3Ugc2hvdWxkIHBhc3NcbiAgICogICBhbGwgcm93IG9iamVjdHMgd2hlbiBjYWxsaW5nIFtbQ29ubmVjdGlvbi5leGVjQnVsa0xvYWRdXS4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuXG4gICAqL1xuICBhZGRSb3cocm93OiB1bmtub3duW10pOiB2b2lkXG5cbiAgYWRkUm93KC4uLmlucHV0OiBbIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9IF0gfCB1bmtub3duW10pIHtcbiAgICBlbWl0QWRkUm93RGVwcmVjYXRpb25XYXJuaW5nKCk7XG5cbiAgICB0aGlzLmZpcnN0Um93V3JpdHRlbiA9IHRydWU7XG5cbiAgICBsZXQgcm93OiBhbnk7XG4gICAgaWYgKGlucHV0Lmxlbmd0aCA+IDEgfHwgIWlucHV0WzBdIHx8IHR5cGVvZiBpbnB1dFswXSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJvdyA9IGlucHV0O1xuICAgIH0gZWxzZSB7XG4gICAgICByb3cgPSBpbnB1dFswXTtcbiAgICB9XG5cbiAgICAvLyB3cml0ZSBlYWNoIGNvbHVtblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJvdykpIHtcbiAgICAgIHRoaXMucm93VG9QYWNrZXRUcmFuc2Zvcm0ud3JpdGUodGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBjb2x1bW4udHlwZS52YWxpZGF0ZShyb3dbaV0sIGNvbHVtbi5jb2xsYXRpb24pO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd1RvUGFja2V0VHJhbnNmb3JtLndyaXRlKHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICByZXR1cm4gY29sdW1uLnR5cGUudmFsaWRhdGUocm93W2NvbHVtbi5vYmpOYW1lXSwgY29sdW1uLmNvbGxhdGlvbik7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRPcHRpb25zU3FsKCkge1xuICAgIGNvbnN0IGFkZE9wdGlvbnMgPSBbXTtcblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmNoZWNrQ29uc3RyYWludHMpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnQ0hFQ0tfQ09OU1RSQUlOVFMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5maXJlVHJpZ2dlcnMpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnRklSRV9UUklHR0VSUycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmtlZXBOdWxscykge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdLRUVQX05VTExTJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMubG9ja1RhYmxlKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ1RBQkxPQ0snKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5vcmRlcikge1xuICAgICAgY29uc3Qgb3JkZXJDb2x1bW5zID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgW2NvbHVtbiwgZGlyZWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmJ1bGtPcHRpb25zLm9yZGVyKSkge1xuICAgICAgICBvcmRlckNvbHVtbnMucHVzaChgJHtjb2x1bW59ICR7ZGlyZWN0aW9ufWApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3JkZXJDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBhZGRPcHRpb25zLnB1c2goYE9SREVSICgke29yZGVyQ29sdW1ucy5qb2luKCcsICcpfSlgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWRkT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gYCBXSVRIICgke2FkZE9wdGlvbnMuam9pbignLCcpfSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRCdWxrSW5zZXJ0U3FsKCkge1xuICAgIGxldCBzcWwgPSAnaW5zZXJ0IGJ1bGsgJyArIHRoaXMudGFibGUgKyAnKCc7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgIHNxbCArPSAnLCAnO1xuICAgICAgfVxuICAgICAgc3FsICs9ICdbJyArIGMubmFtZSArICddICcgKyAoYy50eXBlLmRlY2xhcmF0aW9uKGMpKTtcbiAgICB9XG4gICAgc3FsICs9ICcpJztcblxuICAgIHNxbCArPSB0aGlzLmdldE9wdGlvbnNTcWwoKTtcbiAgICByZXR1cm4gc3FsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgc2ltcGx5IGEgaGVscGVyIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIGBDUkVBVEUgVEFCTEUgU1FMYCBzdGF0ZW1lbnQgYmFzZWQgb24gdGhlIGNvbHVtbnMgYWRkZWQgdG8gdGhlIGJ1bGtMb2FkIG9iamVjdC5cbiAgICogVGhpcyBtYXkgYmUgcGFydGljdWxhcmx5IGhhbmR5IHdoZW4geW91IHdhbnQgdG8gaW5zZXJ0IGludG8gYSB0ZW1wb3JhcnkgdGFibGUgKGEgdGFibGUgd2hpY2ggc3RhcnRzIHdpdGggYCNgKS5cbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIHNxbCA9IGJ1bGtMb2FkLmdldFRhYmxlQ3JlYXRpb25TcWwoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEEgc2lkZSBub3RlIG9uIGJ1bGsgaW5zZXJ0aW5nIGludG8gdGVtcG9yYXJ5IHRhYmxlczogaWYgeW91IHdhbnQgdG8gYWNjZXNzIGEgbG9jYWwgdGVtcG9yYXJ5IHRhYmxlIGFmdGVyIGV4ZWN1dGluZyB0aGUgYnVsayBsb2FkLFxuICAgKiB5b3UnbGwgbmVlZCB0byB1c2UgdGhlIHNhbWUgY29ubmVjdGlvbiBhbmQgZXhlY3V0ZSB5b3VyIHJlcXVlc3RzIHVzaW5nIFtbQ29ubmVjdGlvbi5leGVjU3FsQmF0Y2hdXSBpbnN0ZWFkIG9mIFtbQ29ubmVjdGlvbi5leGVjU3FsXV1cbiAgICovXG4gIGdldFRhYmxlQ3JlYXRpb25TcWwoKSB7XG4gICAgbGV0IHNxbCA9ICdDUkVBVEUgVEFCTEUgJyArIHRoaXMudGFibGUgKyAnKFxcbic7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tpXTtcbiAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgIHNxbCArPSAnLFxcbic7XG4gICAgICB9XG4gICAgICBzcWwgKz0gJ1snICsgYy5uYW1lICsgJ10gJyArIChjLnR5cGUuZGVjbGFyYXRpb24oYykpO1xuICAgICAgaWYgKGMubnVsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzcWwgKz0gJyAnICsgKGMubnVsbGFibGUgPyAnTlVMTCcgOiAnTk9UIE5VTEwnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3FsICs9ICdcXG4pJztcbiAgICByZXR1cm4gc3FsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRDb2xNZXRhRGF0YSgpIHtcbiAgICBjb25zdCB0QnVmID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIoMTAwLCBudWxsLCB0cnVlKTtcbiAgICAvLyBUb2tlblR5cGVcbiAgICB0QnVmLndyaXRlVUludDgoVE9LRU5fVFlQRS5DT0xNRVRBREFUQSk7XG4gICAgLy8gQ291bnRcbiAgICB0QnVmLndyaXRlVUludDE2TEUodGhpcy5jb2x1bW5zLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gdGhpcy5jb2x1bW5zLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2pdO1xuICAgICAgLy8gVXNlclR5cGVcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgICAgIHRCdWYud3JpdGVVSW50MTZMRSgwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRCdWYud3JpdGVVSW50MzJMRSgwKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmxhZ3NcbiAgICAgIGxldCBmbGFncyA9IEZMQUdTLnVwZGF0ZWFibGVSZWFkV3JpdGU7XG4gICAgICBpZiAoYy5udWxsYWJsZSkge1xuICAgICAgICBmbGFncyB8PSBGTEFHUy5udWxsYWJsZTtcbiAgICAgIH0gZWxzZSBpZiAoYy5udWxsYWJsZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9ucy50ZHNWZXJzaW9uID49ICc3XzInKSB7XG4gICAgICAgIGZsYWdzIHw9IEZMQUdTLm51bGxhYmxlVW5rbm93bjtcbiAgICAgIH1cbiAgICAgIHRCdWYud3JpdGVVSW50MTZMRShmbGFncyk7XG5cbiAgICAgIC8vIFRZUEVfSU5GT1xuICAgICAgdEJ1Zi53cml0ZUJ1ZmZlcihjLnR5cGUuZ2VuZXJhdGVUeXBlSW5mbyhjLCB0aGlzLm9wdGlvbnMpKTtcblxuICAgICAgLy8gVGFibGVOYW1lXG4gICAgICBpZiAoYy50eXBlLmhhc1RhYmxlTmFtZSkge1xuICAgICAgICB0QnVmLndyaXRlVXNWYXJjaGFyKHRoaXMudGFibGUsICd1Y3MyJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbE5hbWVcbiAgICAgIHRCdWYud3JpdGVCVmFyY2hhcihjLm5hbWUsICd1Y3MyJyk7XG4gICAgfVxuICAgIHJldHVybiB0QnVmLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIHRpbWVvdXQgZm9yIHRoaXMgYnVsayBsb2FkLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBidWxrTG9hZC5zZXRUaW1lb3V0KHRpbWVvdXQpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBidWxrIGxvYWQgaXMgY29uc2lkZXJlZCBmYWlsZWQsIG9yIDAgZm9yIG5vIHRpbWVvdXQuXG4gICAqICAgV2hlbiBubyB0aW1lb3V0IGlzIHNldCBmb3IgdGhlIGJ1bGsgbG9hZCwgdGhlIFtbQ29ubmVjdGlvbk9wdGlvbnMucmVxdWVzdFRpbWVvdXRdXSBvZiB0aGUgQ29ubmVjdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgc2V0VGltZW91dCh0aW1lb3V0PzogbnVtYmVyKSB7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlRG9uZVRva2VuKCkge1xuICAgIC8vIEl0IG1pZ2h0IGJlIG5pY2UgdG8gbWFrZSBEb25lVG9rZW4gYSBjbGFzcyBpZiBhbnl0aGluZyBuZWVkcyB0byBjcmVhdGUgdGhlbSwgYnV0IGZvciBub3csIGp1c3QgZG8gaXQgaGVyZVxuICAgIGNvbnN0IHRCdWYgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcih0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInID8gOSA6IDEzKTtcbiAgICB0QnVmLndyaXRlVUludDgoVE9LRU5fVFlQRS5ET05FKTtcbiAgICBjb25zdCBzdGF0dXMgPSBET05FX1NUQVRVUy5GSU5BTDtcbiAgICB0QnVmLndyaXRlVUludDE2TEUoc3RhdHVzKTtcbiAgICB0QnVmLndyaXRlVUludDE2TEUoMCk7IC8vIEN1ckNtZCAoVERTIGlnbm9yZXMgdGhpcylcbiAgICB0QnVmLndyaXRlVUludDMyTEUoMCk7IC8vIHJvdyBjb3VudCAtIGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgIGlmICh0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA+PSAnN18yJykge1xuICAgICAgdEJ1Zi53cml0ZVVJbnQzMkxFKDApOyAvLyByb3cgY291bnQgaXMgNjQgYml0cyBpbiA+PSBURFMgNy4yXG4gICAgfVxuICAgIHJldHVybiB0QnVmLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoZXMgdGhlIGBCdWxrTG9hZGAgb2JqZWN0IGludG8gc3RyZWFtaW5nIG1vZGUgYW5kIHJldHVybnMgYVxuICAgKiBbd3JpdGFibGUgc3RyZWFtXShodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjEwLngvZG9jcy9hcGkvc3RyZWFtLmh0bWwjc3RyZWFtX3dyaXRhYmxlX3N0cmVhbXMpXG4gICAqIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VuZCBhIGxhcmdlIGFtb3VudCBvZiByb3dzIHRvIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNvbnN0IGJ1bGtMb2FkID0gY29ubmVjdGlvbi5uZXdCdWxrTG9hZCguLi4pO1xuICAgKiBidWxrTG9hZC5hZGRDb2x1bW4oLi4uKTtcbiAgICpcbiAgICogY29uc3Qgcm93U3RyZWFtID0gYnVsa0xvYWQuZ2V0Um93U3RyZWFtKCk7XG4gICAqXG4gICAqIGNvbm5lY3Rpb24uZXhlY0J1bGtMb2FkKGJ1bGtMb2FkKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEluIHN0cmVhbWluZyBtb2RlLCBbW2FkZFJvd11dIGNhbm5vdCBiZSB1c2VkLiBJbnN0ZWFkIGFsbCBkYXRhIHJvd3MgbXVzdCBiZSB3cml0dGVuIHRvIHRoZSByZXR1cm5lZCBzdHJlYW0gb2JqZWN0LlxuICAgKiBUaGUgc3RyZWFtIGltcGxlbWVudGF0aW9uIHVzZXMgZGF0YSBmbG93IGNvbnRyb2wgdG8gcHJldmVudCBtZW1vcnkgb3ZlcmxvYWQuIFtgc3RyZWFtLndyaXRlKClgXShodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjEwLngvZG9jcy9hcGkvc3RyZWFtLmh0bWwjc3RyZWFtX3dyaXRhYmxlX3dyaXRlX2NodW5rX2VuY29kaW5nX2NhbGxiYWNrKVxuICAgKiByZXR1cm5zIGBmYWxzZWAgdG8gaW5kaWNhdGUgdGhhdCBkYXRhIHRyYW5zZmVyIHNob3VsZCBiZSBwYXVzZWQuXG4gICAqXG4gICAqIEFmdGVyIHRoYXQsIHRoZSBzdHJlYW0gZW1pdHMgYSBbJ2RyYWluJyBldmVudF0oaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0LXYxMC54L2RvY3MvYXBpL3N0cmVhbS5odG1sI3N0cmVhbV9ldmVudF9kcmFpbilcbiAgICogd2hlbiBpdCBpcyByZWFkeSB0byByZXN1bWUgZGF0YSB0cmFuc2Zlci5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkIG9mIHdyaXRpbmcgcm93cyB0byB0aGUgc3RyZWFtIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLFxuICAgKiAgIHlvdSBjYW4gcGFzcyBhbnkgb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgYEl0ZXJhYmxlYCBvciBgQXN5bmNJdGVyYWJsZWAgaW50ZXJmYWNlIChlLmcuIGEgYFJlYWRhYmxlYFxuICAgKiAgIHN0cmVhbSBvciBhbiBgQXN5bmNHZW5lcmF0b3JgKSB3aGVuIGNhbGxpbmcgW1tDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZF1dLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICovXG4gIGdldFJvd1N0cmVhbSgpIHtcbiAgICBlbWl0R2V0Um93U3RyZWFtRGVwcmVjYXRpb25XYXJuaW5nKCk7XG5cbiAgICBpZiAodGhpcy5maXJzdFJvd1dyaXR0ZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQnVsa0xvYWQgY2Fubm90IGJlIHN3aXRjaGVkIHRvIHN0cmVhbWluZyBtb2RlIGFmdGVyIGZpcnN0IHJvdyBoYXMgYmVlbiB3cml0dGVuIHVzaW5nIGFkZFJvdygpLicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5leGVjdXRpb25TdGFydGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0J1bGtMb2FkIGNhbm5vdCBiZSBzd2l0Y2hlZCB0byBzdHJlYW1pbmcgbW9kZSBhZnRlciBleGVjdXRpb24gaGFzIHN0YXJ0ZWQuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zdHJlYW1pbmdNb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnJvd1RvUGFja2V0VHJhbnNmb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMuY2FuY2VsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVtaXQoJ2NhbmNlbCcpO1xuICB9XG59XG5cbmxldCBhZGRSb3dEZXByZWNhdGlvbldhcm5pbmdFbWl0dGVkID0gZmFsc2U7XG5mdW5jdGlvbiBlbWl0QWRkUm93RGVwcmVjYXRpb25XYXJuaW5nKCkge1xuICBpZiAoYWRkUm93RGVwcmVjYXRpb25XYXJuaW5nRW1pdHRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFkZFJvd0RlcHJlY2F0aW9uV2FybmluZ0VtaXR0ZWQgPSB0cnVlO1xuXG4gIHByb2Nlc3MuZW1pdFdhcm5pbmcoXG4gICAgJ1RoZSBCdWxrTG9hZC5hZGRSb3cgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSBwcm92aWRlIHRoZSByb3cgZGF0YSBmb3IgJyArXG4gICAgJ3RoZSBidWxrIGxvYWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBDb25uZWN0aW9uLmV4ZWNCdWxrTG9hZCBpbnN0ZWFkLicsXG4gICAgJ0RlcHJlY2F0aW9uV2FybmluZycsXG4gICAgQnVsa0xvYWQucHJvdG90eXBlLmFkZFJvd1xuICApO1xufVxuXG5sZXQgZ2V0Um93U3RyZWFtRGVwcmVjYXRpb25XYXJuaW5nRW1pdHRlZCA9IGZhbHNlO1xuZnVuY3Rpb24gZW1pdEdldFJvd1N0cmVhbURlcHJlY2F0aW9uV2FybmluZygpIHtcbiAgaWYgKGdldFJvd1N0cmVhbURlcHJlY2F0aW9uV2FybmluZ0VtaXR0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBnZXRSb3dTdHJlYW1EZXByZWNhdGlvbldhcm5pbmdFbWl0dGVkID0gdHJ1ZTtcblxuICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICdUaGUgQnVsa0xvYWQuZ2V0Um93U3RyZWFtIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBZb3UgY2FuIHBhc3MgYW4gSXRlcmFibGUsIEFzeW5jSXRlcmFibGUgb3IgJyArXG4gICAgJ3N0cmVhbS5SZWFkYWJsZSBvYmplY3QgY29udGFpbmluZyB0aGUgcm93IGRhdGEgYXMgYSBzZWNvbmQgYXJndW1lbnQgdG8gQ29ubmVjdGlvbi5leGVjQnVsa0xvYWQgaW5zdGVhZC4nLFxuICAgICdEZXByZWNhdGlvbldhcm5pbmcnLFxuICAgIEJ1bGtMb2FkLnByb3RvdHlwZS5nZXRSb3dTdHJlYW1cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnVsa0xvYWQ7XG5tb2R1bGUuZXhwb3J0cyA9IEJ1bGtMb2FkO1xuIl19
595
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9idWxrLWxvYWQudHMiXSwibmFtZXMiOlsiRkxBR1MiLCJudWxsYWJsZSIsImNhc2VTZW4iLCJ1cGRhdGVhYmxlUmVhZFdyaXRlIiwidXBkYXRlYWJsZVVua25vd24iLCJpZGVudGl0eSIsImNvbXB1dGVkIiwiZml4ZWRMZW5DTFJUeXBlIiwic3BhcnNlQ29sdW1uU2V0IiwiaGlkZGVuIiwia2V5IiwibnVsbGFibGVVbmtub3duIiwiRE9ORV9TVEFUVVMiLCJGSU5BTCIsIk1PUkUiLCJFUlJPUiIsIklOWEFDVCIsIkNPVU5UIiwiQVRUTiIsIlNSVkVSUk9SIiwicm93VG9rZW5CdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiVE9LRU5fVFlQRSIsIlJPVyIsInRleHRQb2ludGVyQW5kVGltZXN0YW1wQnVmZmVyIiwidGV4dFBvaW50ZXJOdWxsQnVmZmVyIiwiUm93VHJhbnNmb3JtIiwiVHJhbnNmb3JtIiwiY29uc3RydWN0b3IiLCJidWxrTG9hZCIsIndyaXRhYmxlT2JqZWN0TW9kZSIsImNvbHVtbk1ldGFkYXRhV3JpdHRlbiIsIm1haW5PcHRpb25zIiwiY29sdW1ucyIsIm9wdGlvbnMiLCJfdHJhbnNmb3JtIiwicm93IiwiX2VuY29kaW5nIiwiY2FsbGJhY2siLCJwdXNoIiwiZ2V0Q29sTWV0YURhdGEiLCJpIiwibGVuZ3RoIiwiYyIsInZhbHVlIiwiQXJyYXkiLCJpc0FycmF5Iiwib2JqTmFtZSIsImZpcnN0Um93V3JpdHRlbiIsInR5cGUiLCJ2YWxpZGF0ZSIsImNvbGxhdGlvbiIsImVycm9yIiwicGFyYW1ldGVyIiwic2NhbGUiLCJwcmVjaXNpb24iLCJuYW1lIiwiZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgiLCJjaHVuayIsImdlbmVyYXRlUGFyYW1ldGVyRGF0YSIsInByb2Nlc3MiLCJuZXh0VGljayIsIl9mbHVzaCIsImNyZWF0ZURvbmVUb2tlbiIsIkJ1bGtMb2FkIiwiRXZlbnRFbWl0dGVyIiwidGFibGUiLCJjb25uZWN0aW9uT3B0aW9ucyIsImNoZWNrQ29uc3RyYWludHMiLCJmaXJlVHJpZ2dlcnMiLCJrZWVwTnVsbHMiLCJsb2NrVGFibGUiLCJvcmRlciIsIlR5cGVFcnJvciIsImNvbHVtbiIsImRpcmVjdGlvbiIsIk9iamVjdCIsImVudHJpZXMiLCJjYW5jZWxlZCIsImV4ZWN1dGlvblN0YXJ0ZWQiLCJzdHJlYW1pbmdNb2RlIiwidGltZW91dCIsImNvbHVtbnNCeU5hbWUiLCJyb3dUb1BhY2tldFRyYW5zZm9ybSIsImJ1bGtPcHRpb25zIiwiY29ubmVjdGlvbiIsInJvd3MiLCJyc3QiLCJyb3dDb3VudCIsInVuZGVmaW5lZCIsImFkZENvbHVtbiIsIm91dHB1dCIsIkVycm9yIiwiaWQiLCJyZXNvbHZlTGVuZ3RoIiwicmVzb2x2ZVByZWNpc2lvbiIsInJlc29sdmVTY2FsZSIsImdldE9wdGlvbnNTcWwiLCJhZGRPcHRpb25zIiwib3JkZXJDb2x1bW5zIiwiam9pbiIsImdldEJ1bGtJbnNlcnRTcWwiLCJzcWwiLCJsZW4iLCJkZWNsYXJhdGlvbiIsImdldFRhYmxlQ3JlYXRpb25TcWwiLCJ0QnVmIiwiV3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIndyaXRlVUludDgiLCJDT0xNRVRBREFUQSIsIndyaXRlVUludDE2TEUiLCJqIiwidGRzVmVyc2lvbiIsIndyaXRlVUludDMyTEUiLCJmbGFncyIsIndyaXRlQnVmZmVyIiwiZ2VuZXJhdGVUeXBlSW5mbyIsImhhc1RhYmxlTmFtZSIsIndyaXRlVXNWYXJjaGFyIiwid3JpdGVCVmFyY2hhciIsImRhdGEiLCJzZXRUaW1lb3V0IiwiRE9ORSIsInN0YXR1cyIsImNhbmNlbCIsImVtaXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0E7O0FBQ0E7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQSxLQUFLLEdBQUc7QUFDWkMsRUFBQUEsUUFBUSxFQUFFLEtBQUssQ0FESDtBQUVaQyxFQUFBQSxPQUFPLEVBQUUsS0FBSyxDQUZGO0FBR1pD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O0FBQ0Y7QUFDQTs7O0FBQ0VJLEVBQUFBLE1BQU0sR0FBRztBQUNQLFFBQUksS0FBSzlDLFFBQVQsRUFBbUI7QUFDakI7QUFDRDs7QUFFRCxTQUFLQSxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsU0FBSytDLElBQUwsQ0FBVSxRQUFWO0FBQ0Q7O0FBMVdpQzs7ZUE2V3JCN0QsUTs7QUFDZjhELE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQi9ELFFBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBXcml0YWJsZVRyYWNraW5nQnVmZmVyIGZyb20gJy4vdHJhY2tpbmctYnVmZmVyL3dyaXRhYmxlLXRyYWNraW5nLWJ1ZmZlcic7XG5pbXBvcnQgQ29ubmVjdGlvbiwgeyBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcblxuaW1wb3J0IHsgVHJhbnNmb3JtIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IFRZUEUgYXMgVE9LRU5fVFlQRSB9IGZyb20gJy4vdG9rZW4vdG9rZW4nO1xuXG5pbXBvcnQgeyBEYXRhVHlwZSwgUGFyYW1ldGVyIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xuaW1wb3J0IHsgQ29sbGF0aW9uIH0gZnJvbSAnLi9jb2xsYXRpb24nO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IEZMQUdTID0ge1xuICBudWxsYWJsZTogMSA8PCAwLFxuICBjYXNlU2VuOiAxIDw8IDEsXG4gIHVwZGF0ZWFibGVSZWFkV3JpdGU6IDEgPDwgMixcbiAgdXBkYXRlYWJsZVVua25vd246IDEgPDwgMyxcbiAgaWRlbnRpdHk6IDEgPDwgNCxcbiAgY29tcHV0ZWQ6IDEgPDwgNSwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIGZpeGVkTGVuQ0xSVHlwZTogMSA8PCA4LCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAgc3BhcnNlQ29sdW1uU2V0OiAxIDw8IDEwLCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjMuQlxuICBoaWRkZW46IDEgPDwgMTMsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxuICBrZXk6IDEgPDwgMTQsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxuICBudWxsYWJsZVVua25vd246IDEgPDwgMTUgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IERPTkVfU1RBVFVTID0ge1xuICBGSU5BTDogMHgwMCxcbiAgTU9SRTogMHgxLFxuICBFUlJPUjogMHgyLFxuICBJTlhBQ1Q6IDB4NCxcbiAgQ09VTlQ6IDB4MTAsXG4gIEFUVE46IDB4MjAsXG4gIFNSVkVSUk9SOiAweDEwMFxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5pbnRlcmZhY2UgSW50ZXJuYWxPcHRpb25zIHtcbiAgY2hlY2tDb25zdHJhaW50czogYm9vbGVhbjtcbiAgZmlyZVRyaWdnZXJzOiBib29sZWFuO1xuICBrZWVwTnVsbHM6IGJvb2xlYW47XG4gIGxvY2tUYWJsZTogYm9vbGVhbjtcbiAgb3JkZXI6IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106ICdBU0MnIHwgJ0RFU0MnIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIb25vcnMgY29uc3RyYWludHMgZHVyaW5nIGJ1bGsgbG9hZCwgdXNpbmcgVC1TUUxcbiAgICogW0NIRUNLX0NPTlNUUkFJTlRTXShodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMTg2MjQ3KHY9c3FsLjEwNSkuYXNweCkuXG4gICAqIChkZWZhdWx0OiBgZmFsc2VgKVxuICAgKi9cbiAgY2hlY2tDb25zdHJhaW50cz86IEludGVybmFsT3B0aW9uc1snY2hlY2tDb25zdHJhaW50cyddIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBIb25vcnMgaW5zZXJ0IHRyaWdnZXJzIGR1cmluZyBidWxrIGxvYWQsIHVzaW5nIHRoZSBULVNRTCBbRklSRV9UUklHR0VSU10oaHR0cHM6Ly90ZWNobmV0Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczE4NzY0MCh2PXNxbC4xMDUpLmFzcHgpLiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGZpcmVUcmlnZ2Vycz86IEludGVybmFsT3B0aW9uc1snZmlyZVRyaWdnZXJzJ10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvbm9ycyBudWxsIHZhbHVlIHBhc3NlZCwgaWdub3JlcyB0aGUgZGVmYXVsdCB2YWx1ZXMgc2V0IG9uIHRhYmxlLCB1c2luZyBULVNRTCBbS0VFUF9OVUxMU10oaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczE4Nzg4Nyh2PXNxbC4xMjApLmFzcHgpLiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGtlZXBOdWxscz86IEludGVybmFsT3B0aW9uc1sna2VlcE51bGxzJ10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFBsYWNlcyBhIGJ1bGsgdXBkYXRlKEJVKSBsb2NrIG9uIHRhYmxlIHdoaWxlIHBlcmZvcm1pbmcgYnVsayBsb2FkLCB1c2luZyBULVNRTCBbVEFCTE9DS10oaHR0cHM6Ly90ZWNobmV0Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczE4MDg3Nih2PXNxbC4xMDUpLmFzcHgpLiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGxvY2tUYWJsZT86IEludGVybmFsT3B0aW9uc1snbG9ja1RhYmxlJ10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgb3JkZXJpbmcgb2YgdGhlIGRhdGEgdG8gcG9zc2libHkgaW5jcmVhc2UgYnVsayBpbnNlcnQgcGVyZm9ybWFuY2UsIHVzaW5nIFQtU1FMIFtPUkRFUl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcHJldmlvdXMtdmVyc2lvbnMvc3FsL3NxbC1zZXJ2ZXItMjAwOC1yMi9tczE3NzQ2OCh2PXNxbC4xMDUpKS4gKGRlZmF1bHQ6IGB7fWApXG4gICAqL1xuICBvcmRlcj86IEludGVybmFsT3B0aW9uc1snb3JkZXInXSB8IHVuZGVmaW5lZDtcbn1cblxuXG5leHBvcnQgdHlwZSBDYWxsYmFjayA9XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBbW0J1bGtMb2FkXV0gZmluaXNoZXMgZXhlY3V0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gcm93Q291bnQgdGhlIG51bWJlciBvZiByb3dzIGluc2VydGVkXG4gICAqL1xuICAoZXJyOiBFcnJvciB8IHVuZGVmaW5lZCB8IG51bGwsIHJvd0NvdW50PzogbnVtYmVyKSA9PiB2b2lkO1xuXG5pbnRlcmZhY2UgQ29sdW1uIGV4dGVuZHMgUGFyYW1ldGVyIHtcbiAgb2JqTmFtZTogc3RyaW5nO1xuICBjb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIENvbHVtbk9wdGlvbnMge1xuICBvdXRwdXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGb3IgVmFyQ2hhciwgTlZhckNoYXIsIFZhckJpbmFyeS4gVXNlIGxlbmd0aCBhcyBgSW5maW5pdHlgIGZvciBWYXJDaGFyKG1heCksIE5WYXJDaGFyKG1heCkgYW5kIFZhckJpbmFyeShtYXgpLlxuICAgKi9cbiAgbGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGb3IgTnVtZXJpYywgRGVjaW1hbC5cbiAgICovXG4gIHByZWNpc2lvbj86IG51bWJlcjtcblxuICAvKipcbiAgICogRm9yIE51bWVyaWMsIERlY2ltYWwsIFRpbWUsIERhdGVUaW1lMiwgRGF0ZVRpbWVPZmZzZXQuXG4gICAqL1xuICBzY2FsZT86IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZm91bmQgb24gYHJvd09iamAgYXJndW1lbnRzIHBhc3NlZCB0byBbW2FkZFJvd11dLCB0aGVuIHlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIHByb3BlcnR5IG5hbWUuXG4gICAqL1xuICBvYmpOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29sdW1uIGFjY2VwdHMgTlVMTCB2YWx1ZXMuXG4gICAqL1xuICBudWxsYWJsZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IHJvd1Rva2VuQnVmZmVyID0gQnVmZmVyLmZyb20oWyBUT0tFTl9UWVBFLlJPVyBdKTtcbmNvbnN0IHRleHRQb2ludGVyQW5kVGltZXN0YW1wQnVmZmVyID0gQnVmZmVyLmZyb20oW1xuICAvLyBUZXh0UG9pbnRlciBsZW5ndGhcbiAgMHgxMCxcblxuICAvLyBUZXh0UG9pbnRlclxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLFxuXG4gIC8vIFRpbWVzdGFtcFxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXG5dKTtcbmNvbnN0IHRleHRQb2ludGVyTnVsbEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFsweDAwXSk7XG5cbi8vIEEgdHJhbnNmb3JtIHRoYXQgY29udmVydHMgcm93cyB0byBwYWNrZXRzLlxuY2xhc3MgUm93VHJhbnNmb3JtIGV4dGVuZHMgVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb2x1bW5NZXRhZGF0YVdyaXR0ZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYnVsa0xvYWQ6IEJ1bGtMb2FkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG1haW5PcHRpb25zOiBCdWxrTG9hZFsnb3B0aW9ucyddO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbHVtbnM6IEJ1bGtMb2FkWydjb2x1bW5zJ107XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihidWxrTG9hZDogQnVsa0xvYWQpIHtcbiAgICBzdXBlcih7IHdyaXRhYmxlT2JqZWN0TW9kZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuYnVsa0xvYWQgPSBidWxrTG9hZDtcbiAgICB0aGlzLm1haW5PcHRpb25zID0gYnVsa0xvYWQub3B0aW9ucztcbiAgICB0aGlzLmNvbHVtbnMgPSBidWxrTG9hZC5jb2x1bW5zO1xuXG4gICAgdGhpcy5jb2x1bW5NZXRhZGF0YVdyaXR0ZW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RyYW5zZm9ybShyb3c6IEFycmF5PHVua25vd24+IHwgeyBbY29sTmFtZTogc3RyaW5nXTogdW5rbm93biB9LCBfZW5jb2Rpbmc6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKSB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbk1ldGFkYXRhV3JpdHRlbikge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuYnVsa0xvYWQuZ2V0Q29sTWV0YURhdGEoKSk7XG4gICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhV3JpdHRlbiA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKHJvd1Rva2VuQnVmZmVyKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheShyb3cpID8gcm93W2ldIDogcm93W2Mub2JqTmFtZV07XG5cbiAgICAgIGlmICghdGhpcy5idWxrTG9hZC5maXJzdFJvd1dyaXR0ZW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IGMudHlwZS52YWxpZGF0ZSh2YWx1ZSwgYy5jb2xsYXRpb24pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSB7XG4gICAgICAgIGxlbmd0aDogYy5sZW5ndGgsXG4gICAgICAgIHNjYWxlOiBjLnNjYWxlLFxuICAgICAgICBwcmVjaXNpb246IGMucHJlY2lzaW9uLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH07XG5cbiAgICAgIGlmIChjLnR5cGUubmFtZSA9PT0gJ1RleHQnIHx8IGMudHlwZS5uYW1lID09PSAnSW1hZ2UnIHx8IGMudHlwZS5uYW1lID09PSAnTlRleHQnKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wdXNoKHRleHRQb2ludGVyTnVsbEJ1ZmZlcik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnB1c2godGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnB1c2goYy50eXBlLmdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoKHBhcmFtZXRlciwgdGhpcy5tYWluT3B0aW9ucykpO1xuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjLnR5cGUuZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtZXRlciwgdGhpcy5tYWluT3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5wdXNoKGNodW5rKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZsdXNoKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5wdXNoKHRoaXMuYnVsa0xvYWQuY3JlYXRlRG9uZVRva2VuKCkpO1xuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIEJ1bGtMb2FkIGluc3RhbmNlIGlzIHVzZWQgdG8gcGVyZm9ybSBhIGJ1bGsgaW5zZXJ0LlxuICpcbiAqIFVzZSBbW0Nvbm5lY3Rpb24ubmV3QnVsa0xvYWRdXSB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2UsIGFuZCBbW0Nvbm5lY3Rpb24uZXhlY0J1bGtMb2FkXV0gdG8gZXhlY3V0ZSBpdC5cbiAqXG4gKiBFeGFtcGxlIG9mIEJ1bGtMb2FkIFVzYWdlczpcbiAqXG4gKiBgYGBqc1xuICogLy8gb3B0aW9uYWwgQnVsa0xvYWQgb3B0aW9uc1xuICogY29uc3Qgb3B0aW9ucyA9IHsga2VlcE51bGxzOiB0cnVlIH07XG4gKlxuICogLy8gaW5zdGFudGlhdGUgLSBwcm92aWRlIHRoZSB0YWJsZSB3aGVyZSB5b3UnbGwgYmUgaW5zZXJ0aW5nIHRvLCBvcHRpb25zIGFuZCBhIGNhbGxiYWNrXG4gKiBjb25zdCBidWxrTG9hZCA9IGNvbm5lY3Rpb24ubmV3QnVsa0xvYWQoJ015VGFibGUnLCBvcHRpb25zLCAoZXJyb3IsIHJvd0NvdW50KSA9PiB7XG4gKiAgIGNvbnNvbGUubG9nKCdpbnNlcnRlZCAlZCByb3dzJywgcm93Q291bnQpO1xuICogfSk7XG4gKlxuICogLy8gc2V0dXAgeW91ciBjb2x1bW5zIC0gYWx3YXlzIGluZGljYXRlIHdoZXRoZXIgdGhlIGNvbHVtbiBpcyBudWxsYWJsZVxuICogYnVsa0xvYWQuYWRkQ29sdW1uKCdteUludCcsIFRZUEVTLkludCwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gKiBidWxrTG9hZC5hZGRDb2x1bW4oJ215U3RyaW5nJywgVFlQRVMuTlZhckNoYXIsIHsgbGVuZ3RoOiA1MCwgbnVsbGFibGU6IHRydWUgfSk7XG4gKlxuICogLy8gZXhlY3V0ZVxuICogY29ubmVjdGlvbi5leGVjQnVsa0xvYWQoYnVsa0xvYWQsIFtcbiAqICAgeyBteUludDogNywgbXlTdHJpbmc6ICdoZWxsbycgfSxcbiAqICAgeyBteUludDogMjMsIG15U3RyaW5nOiAnd29ybGQnIH1cbiAqIF0pO1xuICogYGBgXG4gKi9cbmNsYXNzIEJ1bGtMb2FkIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FuY2VsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZXhlY3V0aW9uU3RhcnRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdHJlYW1pbmdNb2RlOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRhYmxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucztcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYWxsYmFjazogQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb2x1bW5zOiBBcnJheTxDb2x1bW4+O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNvbHVtbnNCeU5hbWU6IHsgW25hbWU6IHN0cmluZ106IENvbHVtbiB9O1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZmlyc3RSb3dXcml0dGVuOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJvd1RvUGFja2V0VHJhbnNmb3JtOiBSb3dUcmFuc2Zvcm07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBidWxrT3B0aW9uczogSW50ZXJuYWxPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29ubmVjdGlvbjogQ29ubmVjdGlvbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByb3dzOiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJzdDogQXJyYXk8YW55PiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IodGFibGU6IHN0cmluZywgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQsIGNvbm5lY3Rpb25PcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zLCB7XG4gICAgY2hlY2tDb25zdHJhaW50cyA9IGZhbHNlLFxuICAgIGZpcmVUcmlnZ2VycyA9IGZhbHNlLFxuICAgIGtlZXBOdWxscyA9IGZhbHNlLFxuICAgIGxvY2tUYWJsZSA9IGZhbHNlLFxuICAgIG9yZGVyID0ge30sXG4gIH06IE9wdGlvbnMsIGNhbGxiYWNrOiBDYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2hlY2tDb25zdHJhaW50cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmNoZWNrQ29uc3RyYWludHNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpcmVUcmlnZ2VycyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmZpcmVUcmlnZ2Vyc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Yga2VlcE51bGxzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMua2VlcE51bGxzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBsb2NrVGFibGUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5sb2NrVGFibGVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9yZGVyICE9PSAnb2JqZWN0JyB8fCBvcmRlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5vcmRlclwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbY29sdW1uLCBkaXJlY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9yZGVyKSkge1xuICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gJ0FTQycgJiYgZGlyZWN0aW9uICE9PSAnREVTQycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIG9mIHRoZSBcIicgKyBjb2x1bW4gKyAnXCIga2V5IGluIHRoZSBcIm9wdGlvbnMub3JkZXJcIiBvYmplY3QgbXVzdCBiZSBlaXRoZXIgXCJBU0NcIiBvciBcIkRFU0NcIi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNhbmNlbGVkID0gZmFsc2U7XG4gICAgdGhpcy5leGVjdXRpb25TdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmNvbGxhdGlvbiA9IGNvbGxhdGlvbjtcblxuICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBjb25uZWN0aW9uT3B0aW9ucztcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgdGhpcy5jb2x1bW5zQnlOYW1lID0ge307XG4gICAgdGhpcy5maXJzdFJvd1dyaXR0ZW4gPSBmYWxzZTtcbiAgICB0aGlzLnN0cmVhbWluZ01vZGUgPSBmYWxzZTtcblxuICAgIHRoaXMucm93VG9QYWNrZXRUcmFuc2Zvcm0gPSBuZXcgUm93VHJhbnNmb3JtKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG5cbiAgICB0aGlzLmJ1bGtPcHRpb25zID0geyBjaGVja0NvbnN0cmFpbnRzLCBmaXJlVHJpZ2dlcnMsIGtlZXBOdWxscywgbG9ja1RhYmxlLCBvcmRlciB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb2x1bW4gdG8gdGhlIGJ1bGsgbG9hZC5cbiAgICpcbiAgICogVGhlIGNvbHVtbiBkZWZpbml0aW9ucyBzaG91bGQgbWF0Y2ggdGhlIHRhYmxlIHlvdSBhcmUgdHJ5aW5nIHRvIGluc2VydCBpbnRvLlxuICAgKiBBdHRlbXB0aW5nIHRvIGNhbGwgYWRkQ29sdW1uIGFmdGVyIHRoZSBmaXJzdCByb3cgaGFzIGJlZW4gYWRkZWQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGJ1bGtMb2FkLmFkZENvbHVtbignTXlJbnRDb2x1bW4nLCBUWVBFUy5JbnQsIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbHVtbi5cbiAgICogQHBhcmFtIHR5cGUgT25lIG9mIHRoZSBzdXBwb3J0ZWQgYGRhdGEgdHlwZXNgLlxuICAgKiBAcGFyYW0gX19uYW1lZFBhcmFtZXRlcnMgQWRkaXRpb25hbCBjb2x1bW4gdHlwZSBpbmZvcm1hdGlvbi4gQXQgYSBtaW5pbXVtLCBgbnVsbGFibGVgIG11c3QgYmUgc2V0IHRvIHRydWUgb3IgZmFsc2UuXG4gICAqIEBwYXJhbSBsZW5ndGggRm9yIFZhckNoYXIsIE5WYXJDaGFyLCBWYXJCaW5hcnkuIFVzZSBsZW5ndGggYXMgYEluZmluaXR5YCBmb3IgVmFyQ2hhcihtYXgpLCBOVmFyQ2hhcihtYXgpIGFuZCBWYXJCaW5hcnkobWF4KS5cbiAgICogQHBhcmFtIG51bGxhYmxlIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gYWNjZXB0cyBOVUxMIHZhbHVlcy5cbiAgICogQHBhcmFtIG9iak5hbWUgSWYgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZm91bmQgb24gYHJvd09iamAgYXJndW1lbnRzIHBhc3NlZCB0byBbW2FkZFJvd11dIG9yIFtbQ29ubmVjdGlvbi5leGVjQnVsa0xvYWRdXSwgdGhlbiB5b3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcGFyYW0gcHJlY2lzaW9uIEZvciBOdW1lcmljLCBEZWNpbWFsLlxuICAgKiBAcGFyYW0gc2NhbGUgRm9yIE51bWVyaWMsIERlY2ltYWwsIFRpbWUsIERhdGVUaW1lMiwgRGF0ZVRpbWVPZmZzZXQuXG4gICovXG4gIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlLCB7IG91dHB1dCA9IGZhbHNlLCBsZW5ndGgsIHByZWNpc2lvbiwgc2NhbGUsIG9iak5hbWUgPSBuYW1lLCBudWxsYWJsZSA9IHRydWUgfTogQ29sdW1uT3B0aW9ucykge1xuICAgIGlmICh0aGlzLmZpcnN0Um93V3JpdHRlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW5zIGNhbm5vdCBiZSBhZGRlZCB0byBidWxrIGluc2VydCBhZnRlciB0aGUgZmlyc3Qgcm93IGhhcyBiZWVuIHdyaXR0ZW4uJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmV4ZWN1dGlvblN0YXJ0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29sdW1ucyBjYW5ub3QgYmUgYWRkZWQgdG8gYnVsayBpbnNlcnQgYWZ0ZXIgZXhlY3V0aW9uIGhhcyBzdGFydGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbjogQ29sdW1uID0ge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbixcbiAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgIG9iak5hbWU6IG9iak5hbWUsXG4gICAgICBudWxsYWJsZTogbnVsbGFibGUsXG4gICAgICBjb2xsYXRpb246IHRoaXMuY29sbGF0aW9uXG4gICAgfTtcblxuICAgIGlmICgodHlwZS5pZCAmIDB4MzApID09PSAweDIwKSB7XG4gICAgICBpZiAoY29sdW1uLmxlbmd0aCA9PSBudWxsICYmIHR5cGUucmVzb2x2ZUxlbmd0aCkge1xuICAgICAgICBjb2x1bW4ubGVuZ3RoID0gdHlwZS5yZXNvbHZlTGVuZ3RoKGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUucmVzb2x2ZVByZWNpc2lvbiAmJiBjb2x1bW4ucHJlY2lzaW9uID09IG51bGwpIHtcbiAgICAgIGNvbHVtbi5wcmVjaXNpb24gPSB0eXBlLnJlc29sdmVQcmVjaXNpb24oY29sdW1uKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlU2NhbGUgJiYgY29sdW1uLnNjYWxlID09IG51bGwpIHtcbiAgICAgIGNvbHVtbi5zY2FsZSA9IHR5cGUucmVzb2x2ZVNjYWxlKGNvbHVtbik7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5zLnB1c2goY29sdW1uKTtcblxuICAgIHRoaXMuY29sdW1uc0J5TmFtZVtuYW1lXSA9IGNvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0T3B0aW9uc1NxbCgpIHtcbiAgICBjb25zdCBhZGRPcHRpb25zID0gW107XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5jaGVja0NvbnN0cmFpbnRzKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ0NIRUNLX0NPTlNUUkFJTlRTJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMuZmlyZVRyaWdnZXJzKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ0ZJUkVfVFJJR0dFUlMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5rZWVwTnVsbHMpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnS0VFUF9OVUxMUycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmxvY2tUYWJsZSkge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdUQUJMT0NLJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMub3JkZXIpIHtcbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1ucyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIGRpcmVjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5idWxrT3B0aW9ucy5vcmRlcikpIHtcbiAgICAgICAgb3JkZXJDb2x1bW5zLnB1c2goYCR7Y29sdW1ufSAke2RpcmVjdGlvbn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZGVyQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgYWRkT3B0aW9ucy5wdXNoKGBPUkRFUiAoJHtvcmRlckNvbHVtbnMuam9pbignLCAnKX0pYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGAgV0lUSCAoJHthZGRPcHRpb25zLmpvaW4oJywnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0QnVsa0luc2VydFNxbCgpIHtcbiAgICBsZXQgc3FsID0gJ2luc2VydCBidWxrICcgKyB0aGlzLnRhYmxlICsgJygnO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzcWwgKz0gJywgJztcbiAgICAgIH1cbiAgICAgIHNxbCArPSAnWycgKyBjLm5hbWUgKyAnXSAnICsgKGMudHlwZS5kZWNsYXJhdGlvbihjKSk7XG4gICAgfVxuICAgIHNxbCArPSAnKSc7XG5cbiAgICBzcWwgKz0gdGhpcy5nZXRPcHRpb25zU3FsKCk7XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHNpbXBseSBhIGhlbHBlciB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBgQ1JFQVRFIFRBQkxFIFNRTGAgc3RhdGVtZW50IGJhc2VkIG9uIHRoZSBjb2x1bW5zIGFkZGVkIHRvIHRoZSBidWxrTG9hZCBvYmplY3QuXG4gICAqIFRoaXMgbWF5IGJlIHBhcnRpY3VsYXJseSBoYW5keSB3aGVuIHlvdSB3YW50IHRvIGluc2VydCBpbnRvIGEgdGVtcG9yYXJ5IHRhYmxlIChhIHRhYmxlIHdoaWNoIHN0YXJ0cyB3aXRoIGAjYCkuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBzcWwgPSBidWxrTG9hZC5nZXRUYWJsZUNyZWF0aW9uU3FsKCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBBIHNpZGUgbm90ZSBvbiBidWxrIGluc2VydGluZyBpbnRvIHRlbXBvcmFyeSB0YWJsZXM6IGlmIHlvdSB3YW50IHRvIGFjY2VzcyBhIGxvY2FsIHRlbXBvcmFyeSB0YWJsZSBhZnRlciBleGVjdXRpbmcgdGhlIGJ1bGsgbG9hZCxcbiAgICogeW91J2xsIG5lZWQgdG8gdXNlIHRoZSBzYW1lIGNvbm5lY3Rpb24gYW5kIGV4ZWN1dGUgeW91ciByZXF1ZXN0cyB1c2luZyBbW0Nvbm5lY3Rpb24uZXhlY1NxbEJhdGNoXV0gaW5zdGVhZCBvZiBbW0Nvbm5lY3Rpb24uZXhlY1NxbF1dXG4gICAqL1xuICBnZXRUYWJsZUNyZWF0aW9uU3FsKCkge1xuICAgIGxldCBzcWwgPSAnQ1JFQVRFIFRBQkxFICcgKyB0aGlzLnRhYmxlICsgJyhcXG4nO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzcWwgKz0gJyxcXG4nO1xuICAgICAgfVxuICAgICAgc3FsICs9ICdbJyArIGMubmFtZSArICddICcgKyAoYy50eXBlLmRlY2xhcmF0aW9uKGMpKTtcbiAgICAgIGlmIChjLm51bGxhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3FsICs9ICcgJyArIChjLm51bGxhYmxlID8gJ05VTEwnIDogJ05PVCBOVUxMJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHNxbCArPSAnXFxuKSc7XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0Q29sTWV0YURhdGEoKSB7XG4gICAgY29uc3QgdEJ1ZiA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgbnVsbCwgdHJ1ZSk7XG4gICAgLy8gVG9rZW5UeXBlXG4gICAgdEJ1Zi53cml0ZVVJbnQ4KFRPS0VOX1RZUEUuQ09MTUVUQURBVEEpO1xuICAgIC8vIENvdW50XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKHRoaXMuY29sdW1ucy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IHRoaXMuY29sdW1ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tqXTtcbiAgICAgIC8vIFVzZXJUeXBlXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgICB0QnVmLndyaXRlVUludDE2TEUoMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0QnVmLndyaXRlVUludDMyTEUoMCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZsYWdzXG4gICAgICBsZXQgZmxhZ3MgPSBGTEFHUy51cGRhdGVhYmxlUmVhZFdyaXRlO1xuICAgICAgaWYgKGMubnVsbGFibGUpIHtcbiAgICAgICAgZmxhZ3MgfD0gRkxBR1MubnVsbGFibGU7XG4gICAgICB9IGVsc2UgaWYgKGMubnVsbGFibGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA+PSAnN18yJykge1xuICAgICAgICBmbGFncyB8PSBGTEFHUy5udWxsYWJsZVVua25vd247XG4gICAgICB9XG4gICAgICB0QnVmLndyaXRlVUludDE2TEUoZmxhZ3MpO1xuXG4gICAgICAvLyBUWVBFX0lORk9cbiAgICAgIHRCdWYud3JpdGVCdWZmZXIoYy50eXBlLmdlbmVyYXRlVHlwZUluZm8oYywgdGhpcy5vcHRpb25zKSk7XG5cbiAgICAgIC8vIFRhYmxlTmFtZVxuICAgICAgaWYgKGMudHlwZS5oYXNUYWJsZU5hbWUpIHtcbiAgICAgICAgdEJ1Zi53cml0ZVVzVmFyY2hhcih0aGlzLnRhYmxlLCAndWNzMicpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb2xOYW1lXG4gICAgICB0QnVmLndyaXRlQlZhcmNoYXIoYy5uYW1lLCAndWNzMicpO1xuICAgIH1cbiAgICByZXR1cm4gdEJ1Zi5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSB0aW1lb3V0IGZvciB0aGlzIGJ1bGsgbG9hZC5cbiAgICpcbiAgICogYGBganNcbiAgICogYnVsa0xvYWQuc2V0VGltZW91dCh0aW1lb3V0KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgYnVsayBsb2FkIGlzIGNvbnNpZGVyZWQgZmFpbGVkLCBvciAwIGZvciBubyB0aW1lb3V0LlxuICAgKiAgIFdoZW4gbm8gdGltZW91dCBpcyBzZXQgZm9yIHRoZSBidWxrIGxvYWQsIHRoZSBbW0Nvbm5lY3Rpb25PcHRpb25zLnJlcXVlc3RUaW1lb3V0XV0gb2YgdGhlIENvbm5lY3Rpb24gaXMgdXNlZC5cbiAgICovXG4gIHNldFRpbWVvdXQodGltZW91dD86IG51bWJlcikge1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZURvbmVUb2tlbigpIHtcbiAgICAvLyBJdCBtaWdodCBiZSBuaWNlIHRvIG1ha2UgRG9uZVRva2VuIGEgY2xhc3MgaWYgYW55dGhpbmcgbmVlZHMgdG8gY3JlYXRlIHRoZW0sIGJ1dCBmb3Igbm93LCBqdXN0IGRvIGl0IGhlcmVcbiAgICBjb25zdCB0QnVmID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJyA/IDkgOiAxMyk7XG4gICAgdEJ1Zi53cml0ZVVJbnQ4KFRPS0VOX1RZUEUuRE9ORSk7XG4gICAgY29uc3Qgc3RhdHVzID0gRE9ORV9TVEFUVVMuRklOQUw7XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKHN0YXR1cyk7XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKDApOyAvLyBDdXJDbWQgKFREUyBpZ25vcmVzIHRoaXMpXG4gICAgdEJ1Zi53cml0ZVVJbnQzMkxFKDApOyAvLyByb3cgY291bnQgLSBkb2Vzbid0IHJlYWxseSBtYXR0ZXJcbiAgICBpZiAodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPj0gJzdfMicpIHtcbiAgICAgIHRCdWYud3JpdGVVSW50MzJMRSgwKTsgLy8gcm93IGNvdW50IGlzIDY0IGJpdHMgaW4gPj0gVERTIDcuMlxuICAgIH1cbiAgICByZXR1cm4gdEJ1Zi5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMuY2FuY2VsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVtaXQoJ2NhbmNlbCcpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1bGtMb2FkO1xubW9kdWxlLmV4cG9ydHMgPSBCdWxrTG9hZDtcbiJdfQ==