oxygen-cli 1.30.2 → 1.31.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.
@@ -193,9 +193,7 @@ class OxygenRunner extends _events.EventEmitter {
193
193
  }
194
194
 
195
195
  this._isRunning = true;
196
-
197
- this._reporter.onRunnerStart(this._id, this._options, this._caps);
198
-
196
+ await this._reporter.onRunnerStart(this._id, this._options, this._caps);
199
197
  let error = null;
200
198
  let result = null;
201
199
 
@@ -209,8 +207,7 @@ class OxygenRunner extends _events.EventEmitter {
209
207
  error = result.failure;
210
208
  }
211
209
 
212
- this._reporter.onRunnerEnd(this._id, result, error);
213
-
210
+ await this._reporter.onRunnerEnd(this._id, result, error);
214
211
  this._isRunning = false;
215
212
 
216
213
  if (error) {
@@ -417,8 +414,7 @@ class OxygenRunner extends _events.EventEmitter {
417
414
  this._reporter.onIterationStart(this._id, caseIteration, 'Case');
418
415
  }
419
416
 
420
- this._reporter.onCaseStart(this._id, suite.uri || suite.id, caze.uri || caze.id || caze.path, caze);
421
-
417
+ await this._reporter.onCaseStart(this._id, suite.uri || suite.id, caze.uri || caze.id || caze.path, caze);
422
418
  let caseResult;
423
419
 
424
420
  for (let reRunCount = 0; reRunCount < MAX_RERUNS; reRunCount++) {
@@ -431,7 +427,7 @@ class OxygenRunner extends _events.EventEmitter {
431
427
  }
432
428
  }
433
429
 
434
- this._reporter.onCaseEnd(this._id, suite.uri || suite.id, caze.uri || caze.id, caseResult);
430
+ await this._reporter.onCaseEnd(this._id, suite.uri || suite.id, caze.uri || caze.id, caseResult);
435
431
 
436
432
  if (showCaseIterationsMessages) {
437
433
  this._reporter.onIterationEnd(this._id, caseResult, 'Case');
@@ -537,6 +533,7 @@ class OxygenRunner extends _events.EventEmitter {
537
533
  caseResult.logs = resultStore && resultStore.logs ? resultStore.logs : [];
538
534
  caseResult.har = resultStore && resultStore.har ? resultStore.har : null;
539
535
  caseResult.testAttributes = resultStore && resultStore.attributes ? resultStore.attributes : null;
536
+ caseResult.attachments = resultStore && resultStore.attachments ? resultStore.attachments : null;
540
537
 
541
538
  var failedSteps = _lodash.default.find(caseResult.steps, {
542
539
  status: _status.default.FAILED
@@ -868,4 +865,4 @@ class OxygenRunner extends _events.EventEmitter {
868
865
  }
869
866
 
870
867
  exports.default = OxygenRunner;
871
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJERUZBVUxUX0lTU1VFUiIsIk1BWF9SRVJVTlMiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImdldFN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVzIiwicmV0dmFsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwic3VpdGUiLCJjYXNlcyIsImNhemUiLCJicmVha3BvaW50cyIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMiLCJyZW1vdmVCcmVha3BvaW50IiwiaWR4IiwiZmlsZSIsImxpbmUiLCJzcGxpY2UiLCJPeHlnZW5SdW5uZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfaWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemluZyIsIl9pc0Rpc3Bvc2luZyIsIl93b3JrZXIiLCJfZGVidWdNb2RlIiwiX3dvcmtlclByb2NMYXN0RXJyb3IiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9zdWl0ZSIsIl9lbnZWYXJzIiwiX3ZhcnMiLCJfY2FwcyIsIl9tb2RDYXBzIiwiX2F0dHJpYnV0ZXMiLCJfb3B0aW9ucyIsIl9sb2NhbFRpbWUiLCJfdGVzdEtpbGxlZCIsIl9zY3JpcHRDb250ZW50TGluZU9mZnNldCIsIl93aGVuRGlzcG9zZWQiLCJnZXRJZCIsImluaXQiLCJjYXBzIiwicmVwb3J0ZXIiLCJFcnJvciIsIl9jd2QiLCJjd2QiLCJwcm9jZXNzIiwiX3JlcG9ydGVyIiwiX2lzSW5pdGlhbGl6ZWQiLCJvcHRFbnYiLCJlbnYiLCJlbnZzIiwiT2JqZWN0Iiwia2V5cyIsImVudlZhcnMiLCJfZW52IiwidGVzdEF0dHJpYnV0ZXMiLCJfc3VpdGVzIiwiZGVidWdQb3J0SWRlIiwiZGVidWdQb3J0IiwiX2RlYnVnUG9ydCIsInNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0IiwibG9jYWxUaW1lIiwiX3N0YXJ0V29ya2VyUHJvY2VzcyIsIl93b3JrZXJfSW5pdE94eWdlbiIsImRpc3Bvc2UiLCJzdGF0dXMiLCJzdG9wRGVidWdnZXIiLCJpc1J1bm5pbmciLCJzdG9wIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiX3Jlc2V0R2xvYmFsVmFyaWFibGVzIiwicnVuIiwib25SdW5uZXJTdGFydCIsImVycm9yIiwicmVzdWx0IiwiX3J1blRlc3QiLCJmYWlsdXJlIiwib25SdW5uZXJFbmQiLCJraWxsIiwiZGVidWdDb250aW51ZSIsImRlYnVnZ2VyIiwiY29udGludWUiLCJ1cGRhdGVCcmVha3BvaW50cyIsImZpbGVQYXRoIiwic2V0QnJlYWtwb2ludHNBY3RpdmUiLCJwcm9taXNlcyIsInRzQnJlYWtwb2ludHMiLCJnZXRCcmVha3BvaW50cyIsInN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVCcCIsImluY2x1ZGVzIiwiYWN0dWFsQ3VycmVudEJwIiwicmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUiLCJ1c2VyU2V0QnAiLCJzZXRCcmVha3BvaW50IiwicHJvbWlzZUFsbFByb21pc2UiLCJhbGwiLCJ0aGVuIiwidmFsdWUiLCJkZWJ1ZyIsImJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMiLCJyZXBsQ2xvc2UiLCJfc2VuZCIsImV2ZW50IiwibmFtZSIsInJlcGxTZW5kIiwiY21kIiwiY29udGVudCIsInJlcGxTdGFydCIsImludm9rZSIsImNsZWFyQnJlYWtwb2ludCIsIlRlc3RSZXN1bHQiLCJzdGFydFRpbWUiLCJnZXRUaW1lU3RhbXAiLCJTdGF0dXMiLCJQQVNTRUQiLCJfd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vayIsInN1aXRlUmVzdWx0IiwiX3J1blN1aXRlIiwiZW5kVGltZSIsImR1cmF0aW9uIiwiaGFzRmFpbGVkU3VpdGVzIiwic29tZSIsInN1aXRlSXRlcmF0aW9ucyIsIngiLCJGQUlMRUQiLCJlbnZpcm9ubWVudCIsImNhcGFiaWxpdGllcyIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2siLCJwYXRoIiwiaXRlcmF0aW9uQ291bnQiLCJzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMiLCJyZVJ1bk9uRmFpbHVyZSIsInJlUnVuT25GYWlsZWQiLCJzdWl0ZUl0ZXJhdGlvbiIsIm9uSXRlcmF0aW9uU3RhcnQiLCJUZXN0U3VpdGVSZXN1bHQiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJpdGVyYXRpb25OdW0iLCJfd29ya2VyX2NhbGxCZWZvcmVTdWl0ZUhvb2siLCJvblN1aXRlU3RhcnQiLCJ1cmkiLCJjYXNlSXRlcmF0aW9uIiwic2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMiLCJvbkNhc2VTdGFydCIsImlkIiwiY2FzZVJlc3VsdCIsInJlUnVuQ291bnQiLCJfcnVuQ2FzZSIsIm9uQ2FzZUVuZCIsIm9uSXRlcmF0aW9uRW5kIiwiV0FSTklORyIsIl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rIiwib25TdWl0ZUVuZCIsInBhcmFtcyIsInJlUnVuIiwicGFyYW1NYW5hZ2VyIiwiXyIsImV4dGVuZCIsImdldFZhbHVlcyIsInJlYWROZXh0IiwiaSIsIl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rIiwiVGVzdENhc2VSZXN1bHQiLCJsb2NhdGlvbiIsIl93b3JrZXJfc3RhcnRTZXNzaW9uIiwicmVzdWx0U3RvcmUiLCJjb250ZXh0IiwibW9kdWxlQ2FwcyIsIl93b3JrZXJfUnVuIiwiX3Byb2Nlc3NUZXN0UmVzdWx0cyIsInN0ZXBzIiwibG9ncyIsImhhciIsImF0dHJpYnV0ZXMiLCJmYWlsZWRTdGVwcyIsImZpbmQiLCJ3YXJuaW5nU3RlcHMiLCJpc0VtcHR5IiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwiX3dvcmtlcl9jYWxsQWZ0ZXJDYXNlSG9vayIsImRpc3Bvc2VPeHlnZW5Nb2R1bGVzIiwiYXV0b0Rpc3Bvc2UiLCJfd29ya2VyX2VuZFNlc3Npb24iLCJfd2hlblRlc3RDYXNlRmluaXNoZWQiLCJyZWplY3QiLCJzY3JpcHROYW1lIiwic2NyaXB0UGF0aCIsInZhcnMiLCJ0ZXN0IiwiY2FzZSIsIml0ZXJhdGlvbiIsInBvRmlsZSIsInBvIiwiaW5pdE94eWdlbiIsInN0YXJ0U2Vzc2lvbiIsImRpc3Bvc2VNb2R1bGVzIiwiZW5kU2Vzc2lvbiIsImludm9rZVRlc3RIb29rIiwib25Mb2dFbnRyeSIsIndvcmtlclBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwiV29ya2VyUHJvY2VzcyIsInN0YXJ0IiwiX2hvb2tXb3JrZXJFdmVudHMiLCJzdGFydERlYnVnZ2VyIiwiX2hvb2tXb3JrZXJEZWJ1Z2dlckV2ZW50cyIsIl90aGlzIiwic3Vic2NyaWJlIiwiX2hhbmRsZUJlZm9yZUNvbW1hbmQiLCJiaW5kIiwiX2hhbmRsZUFmdGVyQ29tbWFuZCIsIm9uIiwicGF5bG9hZCIsImV4aXREb25lIiwiZW1pdCIsImV4aXRDb2RlIiwicHJvbWlzZSIsIk94eWdlbkVycm9yIiwiZXJyb3JDb2RlIiwiU0NSSVBUX0VSUk9SIiwibXNnIiwibGV2ZWwiLCJpbmZvIiwiZXJyIiwidGltZSIsInNyYyIsInN0YWNrIiwibWV0aG9kIiwiYnJlYWtwb2ludERhdGEiLCJicmVha0Vycm9yIiwib25TdGVwU3RhcnQiLCJtb2R1bGUiLCJvblN0ZXBFbmQiLCJfZW1pdEl0ZXJhdGlvbkVuZCIsInRzIiwidGMiLCJzdWl0ZUl0ZXJhdGlvbk51bSIsImNhc2VJdGVyYXRpb25OdW0iLCJjYXNlSXRlcmF0aW9uUmVzdWx0IiwiX3N0YXR1cyIsIl9lbWl0VGVzdEVuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBVUE7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFqQkEsTUFBTUEs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RXVJLEVBQUUsQ0FBQ3ZJLElBRlA7QUFHRnlGLFFBQUFBLFNBQVMsRUFBRWdELGdCQUhUO0FBSUY3RyxRQUFBQSxjQUFjLEVBQUUyRyxFQUFFLENBQUMzRztBQUpqQixPQUhpQjtBQVN2QnRJLE1BQUFBLEtBQUssRUFBRTtBQUNIcUosUUFBQUEsRUFBRSxFQUFFMkYsRUFBRSxDQUFDM0YsRUFBSCxJQUFTLElBRFY7QUFFSDNDLFFBQUFBLElBQUksRUFBRXNJLEVBQUUsQ0FBQ3RJLElBRk47QUFHSHlGLFFBQUFBLFNBQVMsRUFBRStDLGlCQUhSO0FBSUg1RyxRQUFBQSxjQUFjLEVBQUUwRyxFQUFFLENBQUMxRztBQUpoQjtBQVRnQixLQUEzQjtBQWdCSDs7QUFFRGdILEVBQUFBLFlBQVksQ0FBQzFLLE1BQUQsRUFBUztBQUNqQixTQUFLZ0osSUFBTCxDQUFVLFVBQVYsRUFBc0JoSixNQUF0QjtBQUNIOztBQW54QmtEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvciAqL1xyXG4vKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vLi4vbGliL2xvZ2dlcic7XHJcbmNvbnN0IGxvZyA9IGxvZ2dlcignT3h5Z2VuUnVubmVyJyk7XHJcbmNvbnN0IERFRkFVTFRfSVNTVUVSID0gJ3VzZXInO1xyXG5jb25zdCBNQVhfUkVSVU5TID0gMjtcclxuXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCBfICBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmltcG9ydCBUZXN0U3VpdGVSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvc3VpdGUtcmVzdWx0JztcclxuaW1wb3J0IFRlc3RDYXNlUmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL2Nhc2UtcmVzdWx0JztcclxuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xyXG5pbXBvcnQgU3RhdHVzIGZyb20gJy4uLy4uL21vZGVsL3N0YXR1cyc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vLi4vbGliL3V0aWwnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeHlnZW5FcnJvciBmcm9tICcuLi8uLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgUGFyYW1ldGVyTWFuYWdlciBmcm9tICcuLi8uLi9saWIvcGFyYW0tbWFuYWdlci5qcyc7XHJcbmltcG9ydCBXb3JrZXJQcm9jZXNzIGZyb20gJy4uL1dvcmtlclByb2Nlc3MnO1xyXG5cclxuLy8gc25vb3plIGZ1bmN0aW9uIC0gYXN5bmMgd3JhcHBlciBhcm91bmQgc2V0VGltZW91dCBmdW5jdGlvblxyXG5jb25zdCBzbm9vemUgPSBtcyA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuXHJcbmNvbnN0IGdldFN1aXRlc0JyZWFrcG9pbnRzID0gKHN1aXRlcykgPT4ge1xyXG4gICAgY29uc3QgcmV0dmFsID0gW107XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAgIHN1aXRlcyAmJlxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGVzKSAmJlxyXG4gICAgICAgIHN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgICBzdWl0ZXMubWFwKChzdWl0ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzdWl0ZSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGUuY2FzZXMpICYmXHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubWFwKChjYXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjYXplLmJyZWFrcG9pbnRzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5tYXAoKGJyZWFrcG9pbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbC5wdXNoKGJyZWFrcG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXR2YWw7XHJcbn07XHJcblxyXG5jb25zdCByZW1vdmVCcmVha3BvaW50RnJvbVN1aXRlcyA9IChzdWl0ZXMsIHJlbW92ZUJyZWFrcG9pbnQpID0+IHtcclxuICAgIGlmIChcclxuICAgICAgICBzdWl0ZXMgJiZcclxuICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlcykgJiZcclxuICAgICAgICBzdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgc3VpdGUgJiZcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzICYmXHJcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlLmNhc2VzKSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLm1hcCgoY2F6ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY2F6ZS5icmVha3BvaW50cykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMubWFwKChicmVha3BvaW50LCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50LmZpbGUgPT09IHJlbW92ZUJyZWFrcG9pbnQuZmlsZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQubGluZSA9PT0gcmVtb3ZlQnJlYWtwb2ludC5saW5lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3h5Z2VuUnVubmVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8vIGNsYXNzIHZhcmlhYmxlc1xyXG4gICAgICAgIHRoaXMuX2lkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzRGlzcG9zaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm5wbUdSb290RXhlY3V0aW9uICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG9wdGlvbnMubnBtR1Jvb3RFeGVjdXRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBkZWZpbmUgdmFyaWFibGVzIHRvIGl0ZXJhdGUgdGhyb3VnaCB0ZXN0IGNhc2VzIGFuZCB0ZXN0IHN1aXRlIGl0ZXJhdGlvbnNcclxuICAgICAgICB0aGlzLl9zdWl0ZTtcclxuICAgICAgICB0aGlzLl9lbnZWYXJzID0ge307ICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcGFzc2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRlc3RcclxuICAgICAgICB0aGlzLl92YXJzID0ge307ICAgICAvLyB1c2VyLWRlZmluZWQgdmFyaWFibGVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBzY3JpcHRzXHJcbiAgICAgICAgdGhpcy5fY2FwcyA9IHt9OyAvLyBkZXNpcmVkIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBwYXNzZWQgdG8gZWFjaCBtb2R1bGVcclxuICAgICAgICB0aGlzLl9tb2RDYXBzID0ge307XHJcbiAgICAgICAgdGhpcy5fYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2xvY2FsVGltZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCA9IDM7XHJcbiAgICAgICAgLy8gcHJvbWlzZXNcclxuICAgICAgICB0aGlzLl93aGVuRGlzcG9zZWQgPSBkZWZlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICogUHVibGljIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICBnZXRJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdChvcHRpb25zLCBjYXBzID0ge30sIHJlcG9ydGVyKSB7XHJcbiAgICAgICAgLy8gbWFrZSBzdXJlIGF0IGxlYXN0IG9uZSB0ZXN0IHN1aXRlIGlzIGRlZmluZWRcclxuICAgICAgICBpZiAoIW9wdGlvbnMuc3VpdGVzKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5pdGlhbGl6YXRpb24gZmFpbGVkIC0gbm8gdGVzdCBzdWl0ZXMgYXJlIGRlZmluZWQuIFlvdSBtdXN0IGRlZmluZSBcInN1aXRlc1wiIHByb3BlcnR5IGluIE94eWdlbiBvcHRpb25zLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5fY3dkID0gdGhpcy5fb3B0aW9ucy5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlciA9IHJlcG9ydGVyO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIC8vIG1lcmdlIGN1cnJlbnQgYW5kIHRlc3QgY29uZmlndXJhdGlvbiBiYXNlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcclxuICAgICAgICAgICAgbGV0IG9wdEVudiA9IHt9O1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbnYpIHtcclxuICAgICAgICAgICAgICAgIC8vICdlbnYnIG9wdGlvbiBtaWdodCBiZSBkZWZpbmVkIGVpdGhlciBhcyBhIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IG9yIGFzIGFuIG9iamVjdCB0aGF0IGxpc3RzIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcclxuICAgICAgICAgICAgICAgIC8vIGlmICdlbnYnIGlzIGEgc3RyaW5nLCB0aGVuIHJlc29sdmUgdGhlIGFjdHVhbCB2YXJpYWJsZXMgZnJvbSAnZW52cycgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZW52ID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb3B0aW9ucy5lbnZzID09PSAnb2JqZWN0JyAmJiBvcHRpb25zLmVudnNbb3B0aW9ucy5lbnZdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0RW52ID0gb3B0aW9ucy5lbnZzW29wdGlvbnMuZW52XTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAnZW52JyBpcyBhbiBvYmplY3QsIHVzZSB0aGUgdmFyaWFibGVzIGRlZmluZWQgaW4gaXRcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmVudiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5lbnYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0RW52ID0gb3B0aW9ucy5lbnY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVudlZhcnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5lbnZWYXJzKSkge1xyXG4gICAgICAgICAgICAgICAgb3B0RW52ID0geyAuLi5vcHRFbnYsIC4uLm9wdGlvbnMuZW52VmFycyB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBsYXRlciB1c2VcclxuICAgICAgICAgICAgdGhpcy5fZW52ID0ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZW52LFxyXG4gICAgICAgICAgICAgICAgLi4ub3B0RW52XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSBvcHRpb25zLnRlc3RBdHRyaWJ1dGVzIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2FwcyA9IHsgLi4uY2FwcyB9OyAvLyBhc3NpZ24gY2FwcyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgdGhpcy5fc3VpdGVzID0gWyAuLi5vcHRpb25zLnN1aXRlcyBdO1xyXG4gICAgICAgIC8vIHNldCB1cCBkZWJ1Z2dpbmcgb3B0aW9uc1xyXG4gICAgICAgIC8vIFRPRE86IHRoaXMgbmVlZHMgdG8gYmUgcmVpbXBsZW1lbnRlZC4gRXZlcnl0aGluZyByZWxhdGVkIHRvIGRlYnVnZ2luZyAoaW5pdGlhbGl6ZURlYnVnZ2VyKSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIE94eWdlblxyXG4gICAgICAgIC8vIGFuZCBhZGRlZCB0byBJREUgaW5zdGVhZC4gSS5lLiB0aGUgb25seSB0aGluZyBveHlnZW4gc2hvdWxkIGRvIGlzIHRvIGxhdW5jaCB0aGUgY2hpbGQgcHJvY2VzcyB3aXRoIHRoZSBkZWJ1Z2dpbmcgc3dpdGNoLlxyXG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9ICBvcHRpb25zLmRlYnVnUG9ydElkZSB8fCBvcHRpb25zLmRlYnVnUG9ydCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z1BvcnQgPSBvcHRpb25zLmRlYnVnUG9ydCB8fCBvcHRpb25zLmRlYnVnUG9ydElkZSB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuc2NyaXB0Q29udGVudExpbmVPZmZzZXQgPSB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldDtcclxuICAgICAgICB0aGlzLl9sb2NhbFRpbWUgPSAodGhpcy5fb3B0aW9ucyAmJiB0aGlzLl9vcHRpb25zLmxvY2FsVGltZSkgfHwgdGhpcy5fbG9jYWxUaW1lO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0V29ya2VyUHJvY2VzcygpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9Jbml0T3h5Z2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlciAmJiBhd2FpdCB0aGlzLl93b3JrZXIuc3RvcERlYnVnZ2VyKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmlzUnVubmluZykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0b3Aoc3RhdHVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoZW4gZGlzcG9zaW5nIFJ1bm5lcicsIGUpO1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzIGR1cmluZyB0aGUgZGlzcG9zZVxyXG4gICAgICAgICAgICBsb2cud2FybignRXJyb3Igd2hlbiBkaXNwb3NpbmcgUnVubmVyOicsIGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ0NBTkNFTEVEJykge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldEdsb2JhbFZhcmlhYmxlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBydW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluaXRpYWxpemF0aW9uIGhhc24ndCBiZWVuIGNvbXBsZXRlZCB5ZXQsIHdhaXQgZm9yICdpbml0aWFsaXplZCcgZXZlbnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJldmlvdXMgdGVzdCBpcyBzdGlsbCBydW5uaW5nLCB3YWl0IGZvciAndGVzdC1lbmRlZCcgZXZlbnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uUnVubmVyU3RhcnQodGhpcy5faWQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NhcHMpO1xyXG5cclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1blRlc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFlcnJvciAmJiByZXN1bHQgJiYgcmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSByZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uUnVubmVyRW5kKHRoaXMuX2lkLCByZXN1bHQsIGVycm9yKTtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMga2lsbChzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fdGVzdEtpbGxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmlzUnVubmluZykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIua2lsbChzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWJ1Z0NvbnRpbnVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5jb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVCcmVha3BvaW50cyhicmVha3BvaW50cywgZmlsZVBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVCcmVha3BvaW50cyhicmVha3BvaW50cywgZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdHNCcmVha3BvaW50cyA9IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5nZXRCcmVha3BvaW50cyhmaWxlUGF0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWl0ZXNCcmVha3BvaW50cyA9IGdldFN1aXRlc0JyZWFrcG9pbnRzKHRoaXMuX3N1aXRlcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGJyZWFrcG9pbnRzIGZyb20gc3VpdGVzL2Nhc2VzIHRyZWVcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHN1aXRlQnAgb2Ygc3VpdGVzQnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnRzLmluY2x1ZGVzKHN1aXRlQnAubGluZSkgJiYgIGZpbGVQYXRoID09PSBzdWl0ZUJwLmZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXModGhpcy5fc3VpdGVzLCBzdWl0ZUJwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGRlbGV0ZWQgYnJlYWtwb2ludHNcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGFjdHVhbEN1cnJlbnRCcCBvZiB0c0JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50cy5pbmNsdWRlcyhhY3R1YWxDdXJyZW50QnApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fd29ya2VyLmRlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnRCeVZhbHVlKGZpbGVQYXRoLCBhY3R1YWxDdXJyZW50QnApKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gYWRkIG5ldyBicmVha3BvaW50c1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdXNlclNldEJwIG9mIGJyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0c0JyZWFrcG9pbnRzLmluY2x1ZGVzKHVzZXJTZXRCcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlUGF0aCwgdXNlclNldEJwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlQWxsUHJvbWlzZSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbm9vemUoNTAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ3VwZGF0ZUJyZWFrcG9pbnRzKCkgZG9uZS4nKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zID0gdGhpcy5fd29ya2VyLmRlYnVnZ2VyLmdldEJyZWFrcG9pbnRzKGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwcm9taXNlQWxsUHJvbWlzZSA6IHByb21pc2VBbGxQcm9taXNlLCBicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zIDogYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignRGVidWdnZXIgZXJyb3InLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbENsb3NlKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5fc2VuZCh7XHJcbiAgICAgICAgICAgIGV2ZW50OiAncmVwbCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdyZXBsX3N0b3AnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbFNlbmQoY21kKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLl9zZW5kKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdyZXBsJyxcclxuICAgICAgICAgICAgbmFtZTogJ3JlcGxfZXZhbCcsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICAgIGNtZDogY21kXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXBsU3RhcnQoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZSgncmVwbFN0YXJ0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QnJlYWtwb2ludChsaW5lKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl9zdWl0ZSAmJiB0aGlzLl9zdWl0ZS50ZXN0Y2FzZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdGMgPSB0aGlzLl9zdWl0ZS50ZXN0Y2FzZXNbdGNpbmRleF07XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1Zygnb3h5Z2VuLnNldEJyZWFrcG9pbnQ6ICcgKyAobGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0KSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50KHRjLm5hbWUsIGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCk7XHJcbiAgICAgICAgfSovXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJCcmVha3BvaW50KGxpbmUpIHtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5jbGVhckJyZWFrcG9pbnQobGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0LCBudWxsKTtcclxuICAgICAgICB9Ki9cclxuICAgIH1cclxuXHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiBQcml2YXRlIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4gICAgYXN5bmMgX3J1blRlc3QoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRlc3RSZXN1bHQoKTtcclxuICAgICAgICByZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgIHJlc3VsdC5zdWl0ZXMgPSBbXTtcclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIC8vIGNhbGwgYmVmb3JlVGVzdCBob29rXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vaygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBzdWl0ZXNcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgdGhpcy5fc3VpdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1blN1aXRlKHN1aXRlKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMucHVzaChzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICByZXN1bHQuZHVyYXRpb24gPSByZXN1bHQuZW5kVGltZSAtIHJlc3VsdC5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN1aXRlcyA9IHJlc3VsdC5zdWl0ZXMuc29tZShzdWl0ZUl0ZXJhdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3VpdGVJdGVyYXRpb25zICYmIEFycmF5LmlzQXJyYXkoc3VpdGVJdGVyYXRpb25zKSAmJiBzdWl0ZUl0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlSXRlcmF0aW9ucy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSBoYXNGYWlsZWRTdWl0ZXMgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICByZXN1bHQuZW52aXJvbm1lbnQgPSB7IC4uLnRoaXMuX2VudiB9O1xyXG4gICAgICAgIC8vIGNvbWJpbmUgdGVzdCBkZWZpbmVkIGNhcHMgYW5kIHBlciBtb2R1bGUgY2FwYWJpbGl0aWVzLCB0aGF0IHdlcmUgcGFzc2VkIGJ5IHVzZXIgaW4gZWFjaCBtb2R1bGUncyBpbml0IGZ1bmN0aW9uXHJcbiAgICAgICAgcmVzdWx0LmNhcGFiaWxpdGllcyA9IHsgLi4udGhpcy5fY2FwcywgLi4udGhpcy5fbW9kQ2FwcyB9OyAgICAvLyBhc3NpZ24gYSBjb3B5IG9mIF9jYXBzIG9iamVjdFxyXG4gICAgICAgIHJlc3VsdC5vcHRpb25zID0geyAuLi50aGlzLl9vcHRpb25zIH07ICAvLyBhc3NpZ24gYSBjb3B5IG9mIF9vcHRpb25zIG9iamVjdFxyXG5cclxuICAgICAgICAvLyBpZiBlcnJvciBvY2N1cmVkLCBhZGQgaXQgdG8gdGhlIHN1bW1hcnlcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJUZXN0SG9vayhyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3J1blN1aXRlKHN1aXRlKSB7XHJcbiAgICAgICAgaWYgKCFzdWl0ZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ3N1aXRlIGlzIG51bGwgaW4gX3J1blN1aXRlKCkhISEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWdub3JlIHN1aXRlIHdpdGggbWlzc2luZyBtYW5kYXRvcnkgcHJvcGVydGllc1xyXG4gICAgICAgIGlmICghc3VpdGUubmFtZSAmJiAhc3VpdGUucGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBhbHdheXMgc3BlY2lmeSBzdWl0ZS5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgIGlmICghc3VpdGUuaXRlcmF0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHN1aXRlLml0ZXJhdGlvbkNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICBzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVSdW5PbkZhaWx1cmUgPSB0aGlzLl9vcHRpb25zLnJlUnVuT25GYWlsZWQgfHwgZmFsc2U7XHJcbiAgICAgICAgLy8gc2luZ2xlIHN1aXRlIG1pZ2h0IHByb2R1Y2UgbXVsdGlwbGUgcmVzdWx0cywgYmFzZWQgb24gYW1vdW50IG9mIGRlZmluZWQgaXRlcmF0aW9uc1xyXG4gICAgICAgIGNvbnN0IHN1aXRlSXRlcmF0aW9ucyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHN1aXRlSXRlcmF0aW9uPTE7IHN1aXRlSXRlcmF0aW9uIDw9IHN1aXRlLml0ZXJhdGlvbkNvdW50OyBzdWl0ZUl0ZXJhdGlvbisrKSB7XHJcbiAgICAgICAgICAgIGlmIChzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uU3RhcnQodGhpcy5faWQsIHN1aXRlSXRlcmF0aW9uLCAnU3VpdGUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IG5ldyBUZXN0U3VpdGVSZXN1bHQoKTtcclxuICAgICAgICAgICAgc3VpdGVJdGVyYXRpb25zLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5uYW1lID0gc3VpdGUubmFtZSB8fCBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHN1aXRlLnBhdGgpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IHN1aXRlSXRlcmF0aW9uO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayhzdWl0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uU3VpdGVTdGFydCh0aGlzLl9pZCwgc3VpdGUudXJpLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNhemUgb2Ygc3VpdGUuY2FzZXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBjYXNlcyB3aXRoIG1pc3NpbmcgbWFuZGF0b3J5ICdwYXRoJyBwcm9wZXJ0eSBcclxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhemUubmFtZSA9IG94dXRpbC5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoY2F6ZS5wYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5pdGVyYXRpb25Db3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhemUuaXRlcmF0aW9uQ291bnQgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2FzZUl0ZXJhdGlvbj0xOyBjYXNlSXRlcmF0aW9uIDw9IGNhemUuaXRlcmF0aW9uQ291bnQ7IGNhc2VJdGVyYXRpb24rKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2F6ZSAmJiBjYXplLml0ZXJhdGlvbkNvdW50ICYmIGNhemUuaXRlcmF0aW9uQ291bnQgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uU3RhcnQodGhpcy5faWQsIGNhc2VJdGVyYXRpb24sICdDYXNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBjYXNlIHN0YXJ0IGV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIub25DYXNlU3RhcnQodGhpcy5faWQsIHN1aXRlLnVyaSB8fCBzdWl0ZS5pZCwgY2F6ZS51cmkgfHwgY2F6ZS5pZCB8fCBjYXplLnBhdGgsIGNhemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vbGV0IHJlUnVuQ291bnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYXNlUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJ1biBvciByZS1ydW4gdGhlIGN1cnJlbnQgdGVzdCBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcmVSdW5Db3VudCA9IDA7IHJlUnVuQ291bnQgPCBNQVhfUkVSVU5TOyByZVJ1bkNvdW50KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZVJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1bkNhc2Uoc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCByZVJ1bkNvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghY2FzZVJlc3VsdCB8fCBjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkgJiYgIXJlUnVuT25GYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYXNlUmVzdWx0ICYmIGNhc2VSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyByZXBvcnQgY2FzZSBlbmQgZXZlbnRcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkNhc2VFbmQodGhpcy5faWQsIHN1aXRlLnVyaSB8fCBzdWl0ZS5pZCwgY2F6ZS51cmkgfHwgY2F6ZS5pZCwgY2FzZVJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uRW5kKHRoaXMuX2lkLCBjYXNlUmVzdWx0LCAnQ2FzZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgY2FzZSByZXN1bHQgdG8gdGhlIHN1aXRlIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0LmNhc2VzLnB1c2goY2FzZVJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGVzdCBjYXNlIGl0ZXJhdGlvbiBoYXMgZmFpbGVkLCB0aGVuIG1hcmsgdGhlIGVudGlyZSB0ZXN0IGNhc2UgYXMgZmFpbGVkLCBcclxuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIGl0ZXJhdGluZyBvdmVyIGl0IGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHRlc3QgY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LmR1cmF0aW9uID0gc3VpdGVSZXN1bHQuZW5kVGltZSAtIHN1aXRlUmVzdWx0LnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uRW5kKHRoaXMuX2lkLCBzdWl0ZVJlc3VsdCwgJ1N1aXRlJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJTdWl0ZUhvb2soc3VpdGUsIHN1aXRlUmVzdWx0KTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIub25TdWl0ZUVuZCh0aGlzLl9pZCwgc3VpdGUudXJpLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZUl0ZXJhdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3J1bkNhc2Uoc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCByZVJ1bkNvdW50ID0gMCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHJlUnVuID0gcmVSdW5Db3VudCA+IDA7XHJcbiAgICAgICAgLy8gZ2V0IHRlc3Qgc3VpdGUncyBwYXJhbWV0ZXJzIGlmIGRlZmluZWRcclxuICAgICAgICAvLyBnZXQgdGhlbSBmaXJzdCBhbmQgdGhlbiBvdmVycmlkZSB3aXRoIHRlc3QgY2FzZSBsZXZlbCBwYXJhbWV0ZXJzIGlmIGRlZmluZWRcclxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIC8qaWYgKHJlUnVuKSB7XHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIucmVhZFByZXYoKTtcclxuICAgICAgICAgICAgfSovXHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgc3VpdGUucGFyYW1NYW5hZ2VyLmdldFZhbHVlcygpKTtcclxuICAgICAgICAgICAgaWYgKCFyZVJ1bikge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVhZCB0ZXN0IGNhc2UncyBuZXh0IGxpbmVzIG9mIHBhcmFtZXRlcnMgaWYgcGFyYW1ldGVyIG1hbmFnZXIgaXMgZGVmaW5lZFxyXG4gICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAvKmlmIChyZVJ1bikge1xyXG4gICAgICAgICAgICAgICAgY2F6ZS5wYXJhbU1hbmFnZXIucmVhZFByZXYoKTtcclxuICAgICAgICAgICAgfSovXHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgY2F6ZS5wYXJhbU1hbmFnZXIuZ2V0VmFsdWVzKCkpO1xyXG4gICAgICAgICAgICBpZiAoIXJlUnVuKSB7XHJcbiAgICAgICAgICAgICAgICBjYXplLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGQgYnJlYWtwb2ludHMgYmVmb3JlIHJ1bm5pbmcgdGhlIHNjcmlwdCBpZiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIGNhemUuYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlZGl0b3IgaW5kZXggc3RhcnRzIGZyb20gMSwgYnV0IHdlIG5lZWQgemVybyBiYXNlZCBpbmRleFxyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjYXplLmJyZWFrcG9pbnRzW2ldLmxpbmU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IGNhemUuYnJlYWtwb2ludHNbaV0uZmlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlLCBsaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpO1xyXG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBuZXcgVGVzdENhc2VSZXN1bHQoKTtcclxuICAgICAgICBjYXNlUmVzdWx0Lm5hbWUgPSBjYXplLm5hbWU7XHJcbiAgICAgICAgY2FzZVJlc3VsdC5sb2NhdGlvbiA9IGNhemUucGF0aDtcclxuICAgICAgICBjYXNlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IGNhc2VJdGVyYXRpb247XHJcbiAgICAgICAgY2FzZVJlc3VsdC5yZVJ1bkNvdW50ID0gcmVSdW5Db3VudDtcclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIGluaXRpYWxpemUgT3h5Z2VuIGFuZCBoYW5kbGUgYW55IHBvc3NpYmxlIGVycm9yXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKCEodGhpcy5fd29ya2VyKSAmJiB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ193b3JrZXJfSW5pdE94eWdlbigpIHRocm93biBhbiBlcnJvcjonLCBlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGFydFRpbWUgPSBjYXNlUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZHVyYXRpb24gPSAwO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGUpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgIHJldHVybiBjYXNlUmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdGFydCBuZXcgdGVzdCBzZXNzaW9uXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX3N0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgIC8vIHJ1biB0aGUgdGVzdCBpbiB0aGUgd29ya2VyIHByb2Nlc3MgYW5kIGhhbmRsZSBhbnkgcG9zc2libGUgZXJyb3JcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgY29uc3QgeyByZXN1bHRTdG9yZSwgY29udGV4dCwgbW9kdWxlQ2FwcywgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX3dvcmtlcl9SdW4oc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgY29udGV4dCwgZXJyb3IsIG1vZHVsZUNhcHMgfSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5kdXJhdGlvbiA9IGNhc2VSZXN1bHQuZW5kVGltZSAtIGNhc2VSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0ZXBzID0gcmVzdWx0U3RvcmUgJiYgcmVzdWx0U3RvcmUuc3RlcHMgPyByZXN1bHRTdG9yZS5zdGVwcyA6IFtdO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmxvZ3MgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5sb2dzID8gcmVzdWx0U3RvcmUubG9ncyA6IFtdO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmhhciA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmhhciA/IHJlc3VsdFN0b3JlLmhhciA6IG51bGw7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQudGVzdEF0dHJpYnV0ZXMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5hdHRyaWJ1dGVzID8gcmVzdWx0U3RvcmUuYXR0cmlidXRlcyA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgdGVzdCBjYXNlIGl0ZXJhdGlvbiBzdGF0dXMgLSBtYXJrIGl0IGFzIGZhaWxlZCBpZiBhbnkgc3RlcCBoYXMgZmFpbGVkXHJcbiAgICAgICAgICAgIHZhciBmYWlsZWRTdGVwcyA9IF8uZmluZChjYXNlUmVzdWx0LnN0ZXBzLCB7c3RhdHVzOiBTdGF0dXMuRkFJTEVEfSk7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3RlcHMgd2l0aCBXYXJuaW5nIHN0YXR1c1xyXG4gICAgICAgICAgICB2YXIgd2FybmluZ1N0ZXBzID0gXy5maW5kKGNhc2VSZXN1bHQuc3RlcHMsIHtzdGF0dXM6IFN0YXR1cy5XQVJOSU5HfSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gXy5pc0VtcHR5KGZhaWxlZFN0ZXBzKSAmJiAhZXJyb3IgPyBTdGF0dXMuUEFTU0VEIDogU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LmZhaWx1cmUgPSBlcnJvcjtcclxuICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RlcHMgPSBveHV0aWwubWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKGNhc2VSZXN1bHQuc3RlcHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFfLmlzRW1wdHkod2FybmluZ1N0ZXBzKSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2soY2F6ZSwgY2FzZVJlc3VsdCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ193b3JrZXJfUnVuKCkgdGhyb3duIGFuIGVycm9yOicsIGUpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGUpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkaXNwb3NlT3h5Z2VuTW9kdWxlcyA9IHR5cGVvZiB0aGlzLl9vcHRpb25zLmF1dG9EaXNwb3NlICE9PSAnYm9vbGVhbicgfHwgdGhpcy5fb3B0aW9ucy5hdXRvRGlzcG9zZSA9PT0gdHJ1ZTtcclxuICAgICAgICAvLyBlbmQgc2Vzc2lvbiBhbmQgZGlzcG9zZSBPeHlnZW4gbW9kdWxlcyBpZiByZXF1aXJlZFxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9lbmRTZXNzaW9uKGNhc2VSZXN1bHQuc3RhdHVzLCBkaXNwb3NlT3h5Z2VuTW9kdWxlcyk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYXNlUmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfUnVuKHN1aXRlLCBjYXplLCBzdWl0ZUl0ZXJhdGlvbiwgY2FzZUl0ZXJhdGlvbiwgcGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyIGlzIG51bGwgYnV0IG5vdCBzdXBwb3NlIHRvIScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3doZW5UZXN0Q2FzZUZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93aGVuVGVzdENhc2VGaW5pc2hlZC5yZWplY3QobmV3IEVycm9yKCdfd29ya2VyIGlzIG51bGwnKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdGFydCBydW5uaW5nIHRoZSB0ZXN0XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dvcmtlci5ydW4oe1xyXG4gICAgICAgICAgICBzY3JpcHROYW1lOiBjYXplLm5hbWUsXHJcbiAgICAgICAgICAgIHNjcmlwdFBhdGg6IGNhemUucGF0aCxcclxuICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBlbnY6IHRoaXMuX2VudixcclxuICAgICAgICAgICAgICAgIGNhcHM6IHRoaXMuX2NhcHMsXHJcbiAgICAgICAgICAgICAgICB2YXJzOiB0aGlzLl92YXJzLFxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdGhpcy5fYXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgIHRlc3Q6IHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNhemUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBjYXNlSXRlcmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWl0ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBzdWl0ZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb246IHN1aXRlSXRlcmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwb0ZpbGU6IHRoaXMuX29wdGlvbnMucG8gfHwgbnVsbCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX0luaXRPeHlnZW4oKSB7XHJcbiAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW5pdE94eWdlbih0aGlzLl9pZCwgdGhpcy5fb3B0aW9ucywgdGhpcy5fY2FwcykpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfc3RhcnRTZXNzaW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLnN0YXJ0U2Vzc2lvbikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnRTZXNzaW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfZW5kU2Vzc2lvbihzdGF0dXMgPSBudWxsLCBkaXNwb3NlTW9kdWxlcyA9IHRydWUpIHtcclxuICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5lbmRTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5lbmRTZXNzaW9uKHN0YXR1cywgZGlzcG9zZU1vZHVsZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vaygpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcyAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2JlZm9yZVRlc3QnLCBbdGhpcy5faWQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NhcHNdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYmVmb3JlVGVzdFwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlVGVzdFwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2NhbGxCZWZvcmVTdWl0ZUhvb2soc3VpdGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcyAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2JlZm9yZVN1aXRlJywgW3N1aXRlXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZVN1aXRlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVTdWl0ZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2NhbGxCZWZvcmVDYXNlSG9vayhjYXplKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2JlZm9yZUNhc2UnLCBbY2F6ZV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZUNhc2VcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZUNhc2VcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQWZ0ZXJUZXN0SG9vayhyZXN1bHQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJUZXN0JywgW3RoaXMuX2lkLCByZXN1bHRdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlclRlc3RcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyVGVzdFwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2NhbGxBZnRlclN1aXRlSG9vayhzdWl0ZSwgcmVzdWx0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyU3VpdGUnLCBbc3VpdGUsIHJlc3VsdF0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImFmdGVyU3VpdGVcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyU3VpdGVcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQWZ0ZXJDYXNlSG9vayhjYXplLCByZXN1bHQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJDYXNlJywgW2NhemUsIHJlc3VsdF0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImFmdGVyQ2FzZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJDYXNlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zdGFydFdvcmtlclByb2Nlc3MoKSB7XHJcbiAgICAgICAgY29uc3Qgd29ya2VyUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICd3b3JrZXIuanMnKTtcclxuICAgICAgICB0aGlzLl93b3JrZXIgPSBuZXcgV29ya2VyUHJvY2Vzcyh0aGlzLl9pZCwgd29ya2VyUGF0aCwgdGhpcy5fZGVidWdNb2RlLCB0aGlzLl9kZWJ1Z1BvcnQsICdPeHlnZW4nLCB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbik7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0KCk7XHJcbiAgICAgICAgdGhpcy5faG9va1dvcmtlckV2ZW50cygpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdGFydERlYnVnZ2VyKCk7XHJcbiAgICAgICAgdGhpcy5faG9va1dvcmtlckRlYnVnZ2VyRXZlbnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hvb2tXb3JrZXJFdmVudHMoKSB7XHJcbiAgICAgICAgLy8gcHJlc2VydmUgdGhpcyBvYmplY3RcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyLnN1YnNjcmliZSgnY29tbWFuZDpiZWZvcmUnLCB0aGlzLl9oYW5kbGVCZWZvcmVDb21tYW5kLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5zdWJzY3JpYmUoJ2NvbW1hbmQ6YWZ0ZXInLCB0aGlzLl9oYW5kbGVBZnRlckNvbW1hbmQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyLm9uKCdlcnJvcicsIChwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignV29ya2VyIHByb2Nlc3MgZXJyb3I6ICcsIGVycm9yKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4aXREb25lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3Rlc3QtZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5fd29ya2VyUHJvY0xhc3RFcnJvciA9IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyLm9uKCdleGl0JywgKHBheWxvYWQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5leGl0RG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZXhpdENvZGUgfSA9IHBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXhpdENvZGUgJiYgZXhpdENvZGUgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB0ZXN0IGlzIHJ1bm5pbmcgb3IgaXMgYmVpbmcgZGlzcG9zZWQgYW5kIHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBkaWVkLFxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBlbmQgdGhlIHRlc3Qgb3IgZGlzcG9zYWwgd2l0aCBmYXRhbCBlcnJvclxyXG4gICAgICAgICAgICAgICAgLy8gKGNoaWxkIHByb2Nlc3Mgbm90IHN1cHBvc2UgdG8gZGllIHdpdGggY29kZSA+IDApXHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2lzRGlzcG9zaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IF90aGlzLl93aGVuRGlzcG9zZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGhpcy5faXNSdW5uaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IF90aGlzLl93aGVuVGVzdENhc2VGaW5pc2hlZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IF90aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhpdENvZGUgPT0gMTM0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgT3h5Z2VuRXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ091dCBvZiBtZW1vcnkgZXJyb3IuIE1ha2Ugc3VyZSB0aGF0IHlvdSBkb25cXCd0IGhhdmUgYW55IG1lbW9yeSBsZWFrcyBpbiB0aGUgdGVzdCBzY3JpcHQuJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBPeHlnZW5FcnJvcihgV29ya2VyIHByb2Nlc3MgZXhpdGVkIHdpdGggY29kZTogJHtleGl0Q29kZX0uYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcHJvbWlzZSAmJiBwcm9taXNlLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVzZXRHbG9iYWxWYXJpYWJsZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignbWVzc2FnZScsIGFzeW5jIChtc2cpID0+IHtcclxuICAgICAgICAgICAgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdsb2cnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobXNnLmxldmVsID09PSAnREVCVUcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKG1zZy5tc2cpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cubGV2ZWwgPT09ICdJTkZPJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKG1zZy5tc2cpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cubGV2ZWwgPT09ICdFUlJPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IobXNnLm1zZywgbXNnLmVycik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5sZXZlbCA9PT0gJ1dBUk4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4obXNnLm1zZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnbG9nJywgbXNnLnRpbWUsIG1zZy5sZXZlbCwgbXNnLm1zZywgbXNnLnNyYyB8fCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVwb3J0ZXIgJiYgX3RoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobXNnLnRpbWUsIG1zZy5sZXZlbCwgbXNnLm1zZywgbXNnLnNyYyB8fCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ2xpbmUtdXBkYXRlJykge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnbGluZS11cGRhdGUnLCBtc2cubGluZSwgbXNnLnN0YWNrLCBtc2cudGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ3Jlc3VsdC11cGRhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobXNnLm1ldGhvZCA9PT0gJ2luaXQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnaW5pdC1kb25lJywgbXNnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnd29ya2VyRXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnd29ya2VyRXJyb3I6JywgbXNnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzcG9zZSgnZmFpbGVkJyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmtpbGwoJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdyZXBsJykge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgncmVwbCcsIG1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfaG9va1dvcmtlckRlYnVnZ2VyRXZlbnRzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fd29ya2VyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5vbignZGVidWdnZXI6YnJlYWsnLCAoYnJlYWtwb2ludERhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdicmVha3BvaW50JywgYnJlYWtwb2ludERhdGEpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLm9uKCdkZWJ1Z2dlcjpicmVha0Vycm9yJywgKGJyZWFrRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdicmVha3BvaW50RXJyb3InLCBicmVha0Vycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaGFuZGxlQmVmb3JlQ29tbWFuZChlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25TdGVwU3RhcnQodGhpcy5faWQsIGUpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZSAmJiBlLm1vZHVsZSAmJiBlLm1vZHVsZSA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2JlZm9yZUNvbW1hbmQnLCBbZV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYmVmb3JlQ29tbWFuZFwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlQ29tbWFuZFwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaGFuZGxlQWZ0ZXJDb21tYW5kKGUpIHtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vblN0ZXBFbmQodGhpcy5faWQsIGUucmVzdWx0KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZSAmJiBlLm1vZHVsZSAmJiBlLm1vZHVsZSA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyQ29tbWFuZCcsIFtlLnJlc3VsdF0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJDb21tYW5kXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlckNvbW1hbmRcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Jlc2V0R2xvYmFsVmFyaWFibGVzKCkge1xyXG4gICAgICAgIHRoaXMuX21vZENhcHMgPSB7fTtcclxuICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzRGlzcG9zaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXppbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90ZXN0S2lsbGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fd2hlbkRpc3Bvc2VkID0gZGVmZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc1Rlc3RSZXN1bHRzKHsgcmVzdWx0U3RvcmUsIG1vZHVsZUNhcHMsIGNvbnRleHQgPSB7fSwgZXJyb3IgPSBudWxsIH0pIHtcclxuICAgICAgICAvLyBpZiB0ZXN0IHdhcyBraWxsZWQgYmVmb3JlIGFueSByZXN1bHRzIHdlcmUgZ2VuZXJhdGVkLCB0aGVuIGp1c3QgZmluYWxpemUgdGhlIHRlc3Qgd2l0aG91dCBwcm9jZXNzaW5nIHJlc3VsdHNcclxuICAgICAgICBpZiAodGhpcy5fdGVzdEtpbGxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgndGVzdC1lcnJvcicsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc3RvcmUgJ3ZhcnMnIHBhcnQgb2YgdGhlIGNvbnRleHQgZm9yIGEgbGF0ZXIgdXNlXHJcbiAgICAgICAgdGhpcy5fdmFycyA9IGNvbnRleHQudmFycyB8fCB0aGlzLl92YXJzO1xyXG4gICAgICAgIC8vIHN0b3JlICdtb2RDYXBzJyBwYXJ0IG9mIHRoZSBjb250ZXh0IGZvciBhIGxhdGVyIHVzZVxyXG4gICAgICAgIHRoaXMuX21vZENhcHMgPSB7IC4uLnRoaXMuX21vZENhcHMsIC4uLm1vZHVsZUNhcHMgfHwge30gfTtcclxuICAgICAgICAvLyBjbGVhbiB1cCBjb250ZXh0IGZyb20gaW50ZXJuYWwgZWxlbWVudHMsIG5vdCBuZWVkIGluIHRoZSByZXBvcnQ6XHJcbiAgICAgICAgLy8gcmVtb3ZlIGNhcHMgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQuY2FwcylcclxuICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQuY2FwcztcclxuICAgICAgICAvLyByZW1vdmUgZW52IGZyb20gdGhlIGNvbnRleHQgYXMgaXQgYWxyZWFkeSBhcHBlYXJzIGluIFRlc3RSZXN1bHQgbm9kZVxyXG4gICAgICAgIGlmIChjb250ZXh0LmVudilcclxuICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQuZW52O1xyXG4gICAgICAgIC8vIHJlbW92ZSB0ZXN0IGZyb20gdGhlIGNvbnRleHQgYXMgaXQgYWxyZWFkeSBhcHBlYXJzIGluIFRlc3RSZXN1bHQgbm9kZVxyXG4gICAgICAgIGlmIChjb250ZXh0LnRlc3QpXHJcbiAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LnRlc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgX2VtaXRJdGVyYXRpb25FbmQodHMsIHRjLCBzdWl0ZUl0ZXJhdGlvbk51bSwgY2FzZUl0ZXJhdGlvbk51bSwgY2FzZUl0ZXJhdGlvblJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnaXRlcmF0aW9uLWVuZCcsIHtcclxuICAgICAgICAgICAgc3RhdHVzOiBjYXNlSXRlcmF0aW9uUmVzdWx0Ll9zdGF0dXMsXHJcbiAgICAgICAgICAgIGZhaWx1cmU6IGNhc2VJdGVyYXRpb25SZXN1bHQuZmFpbHVyZSB8fCBudWxsLFxyXG4gICAgICAgICAgICBjYXNlOiB7XHJcbiAgICAgICAgICAgICAgICBpZDogdGMuaWQgfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRjLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBpdGVyYXRpb246IGNhc2VJdGVyYXRpb25OdW0sXHJcbiAgICAgICAgICAgICAgICBpdGVyYXRpb25Db3VudDogdGMuaXRlcmF0aW9uQ291bnRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VpdGU6IHtcclxuICAgICAgICAgICAgICAgIGlkOiB0cy5pZCB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdHMubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogc3VpdGVJdGVyYXRpb25OdW0sXHJcbiAgICAgICAgICAgICAgICBpdGVyYXRpb25Db3VudDogdHMuaXRlcmF0aW9uQ291bnRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9lbWl0VGVzdEVuZChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ3Rlc3QtZW5kJywgcmVzdWx0KTtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCB7IFBhcmFtZXRlck1hbmFnZXIgfTsiXX0=
868
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJERUZBVUxUX0lTU1VFUiIsIk1BWF9SRVJVTlMiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImdldFN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVzIiwicmV0dmFsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwic3VpdGUiLCJjYXNlcyIsImNhemUiLCJicmVha3BvaW50cyIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMiLCJyZW1vdmVCcmVha3BvaW50IiwiaWR4IiwiZmlsZSIsImxpbmUiLCJzcGxpY2UiLCJPeHlnZW5SdW5uZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfaWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemluZyIsIl9pc0Rpc3Bvc2luZyIsIl93b3JrZXIiLCJfZGVidWdNb2RlIiwiX3dvcmtlclByb2NMYXN0RXJyb3IiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9zdWl0ZSIsIl9lbnZWYXJzIiwiX3ZhcnMiLCJfY2FwcyIsIl9tb2RDYXBzIiwiX2F0dHJpYnV0ZXMiLCJfb3B0aW9ucyIsIl9sb2NhbFRpbWUiLCJfdGVzdEtpbGxlZCIsIl9zY3JpcHRDb250ZW50TGluZU9mZnNldCIsIl93aGVuRGlzcG9zZWQiLCJnZXRJZCIsImluaXQiLCJjYXBzIiwicmVwb3J0ZXIiLCJFcnJvciIsIl9jd2QiLCJjd2QiLCJwcm9jZXNzIiwiX3JlcG9ydGVyIiwiX2lzSW5pdGlhbGl6ZWQiLCJvcHRFbnYiLCJlbnYiLCJlbnZzIiwiT2JqZWN0Iiwia2V5cyIsImVudlZhcnMiLCJfZW52IiwidGVzdEF0dHJpYnV0ZXMiLCJfc3VpdGVzIiwiZGVidWdQb3J0SWRlIiwiZGVidWdQb3J0IiwiX2RlYnVnUG9ydCIsInNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0IiwibG9jYWxUaW1lIiwiX3N0YXJ0V29ya2VyUHJvY2VzcyIsIl93b3JrZXJfSW5pdE94eWdlbiIsImRpc3Bvc2UiLCJzdGF0dXMiLCJzdG9wRGVidWdnZXIiLCJpc1J1bm5pbmciLCJzdG9wIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiX3Jlc2V0R2xvYmFsVmFyaWFibGVzIiwicnVuIiwib25SdW5uZXJTdGFydCIsImVycm9yIiwicmVzdWx0IiwiX3J1blRlc3QiLCJmYWlsdXJlIiwib25SdW5uZXJFbmQiLCJraWxsIiwiZGVidWdDb250aW51ZSIsImRlYnVnZ2VyIiwiY29udGludWUiLCJ1cGRhdGVCcmVha3BvaW50cyIsImZpbGVQYXRoIiwic2V0QnJlYWtwb2ludHNBY3RpdmUiLCJwcm9taXNlcyIsInRzQnJlYWtwb2ludHMiLCJnZXRCcmVha3BvaW50cyIsInN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVCcCIsImluY2x1ZGVzIiwiYWN0dWFsQ3VycmVudEJwIiwicmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUiLCJ1c2VyU2V0QnAiLCJzZXRCcmVha3BvaW50IiwicHJvbWlzZUFsbFByb21pc2UiLCJhbGwiLCJ0aGVuIiwidmFsdWUiLCJkZWJ1ZyIsImJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMiLCJyZXBsQ2xvc2UiLCJfc2VuZCIsImV2ZW50IiwibmFtZSIsInJlcGxTZW5kIiwiY21kIiwiY29udGVudCIsInJlcGxTdGFydCIsImludm9rZSIsImNsZWFyQnJlYWtwb2ludCIsIlRlc3RSZXN1bHQiLCJzdGFydFRpbWUiLCJnZXRUaW1lU3RhbXAiLCJTdGF0dXMiLCJQQVNTRUQiLCJfd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vayIsInN1aXRlUmVzdWx0IiwiX3J1blN1aXRlIiwiZW5kVGltZSIsImR1cmF0aW9uIiwiaGFzRmFpbGVkU3VpdGVzIiwic29tZSIsInN1aXRlSXRlcmF0aW9ucyIsIngiLCJGQUlMRUQiLCJlbnZpcm9ubWVudCIsImNhcGFiaWxpdGllcyIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2siLCJwYXRoIiwiaXRlcmF0aW9uQ291bnQiLCJzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMiLCJyZVJ1bk9uRmFpbHVyZSIsInJlUnVuT25GYWlsZWQiLCJzdWl0ZUl0ZXJhdGlvbiIsIm9uSXRlcmF0aW9uU3RhcnQiLCJUZXN0U3VpdGVSZXN1bHQiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJpdGVyYXRpb25OdW0iLCJfd29ya2VyX2NhbGxCZWZvcmVTdWl0ZUhvb2siLCJvblN1aXRlU3RhcnQiLCJ1cmkiLCJjYXNlSXRlcmF0aW9uIiwic2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMiLCJvbkNhc2VTdGFydCIsImlkIiwiY2FzZVJlc3VsdCIsInJlUnVuQ291bnQiLCJfcnVuQ2FzZSIsIm9uQ2FzZUVuZCIsIm9uSXRlcmF0aW9uRW5kIiwiV0FSTklORyIsIl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rIiwib25TdWl0ZUVuZCIsInBhcmFtcyIsInJlUnVuIiwicGFyYW1NYW5hZ2VyIiwiXyIsImV4dGVuZCIsImdldFZhbHVlcyIsInJlYWROZXh0IiwiaSIsIl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rIiwiVGVzdENhc2VSZXN1bHQiLCJsb2NhdGlvbiIsIl93b3JrZXJfc3RhcnRTZXNzaW9uIiwicmVzdWx0U3RvcmUiLCJjb250ZXh0IiwibW9kdWxlQ2FwcyIsIl93b3JrZXJfUnVuIiwiX3Byb2Nlc3NUZXN0UmVzdWx0cyIsInN0ZXBzIiwibG9ncyIsImhhciIsImF0dHJpYnV0ZXMiLCJhdHRhY2htZW50cyIsImZhaWxlZFN0ZXBzIiwiZmluZCIsIndhcm5pbmdTdGVwcyIsImlzRW1wdHkiLCJtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQiLCJfd29ya2VyX2NhbGxBZnRlckNhc2VIb29rIiwiZGlzcG9zZU94eWdlbk1vZHVsZXMiLCJhdXRvRGlzcG9zZSIsIl93b3JrZXJfZW5kU2Vzc2lvbiIsIl93aGVuVGVzdENhc2VGaW5pc2hlZCIsInJlamVjdCIsInNjcmlwdE5hbWUiLCJzY3JpcHRQYXRoIiwidmFycyIsInRlc3QiLCJjYXNlIiwiaXRlcmF0aW9uIiwicG9GaWxlIiwicG8iLCJpbml0T3h5Z2VuIiwic3RhcnRTZXNzaW9uIiwiZGlzcG9zZU1vZHVsZXMiLCJlbmRTZXNzaW9uIiwiaW52b2tlVGVzdEhvb2siLCJvbkxvZ0VudHJ5Iiwid29ya2VyUGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJXb3JrZXJQcm9jZXNzIiwic3RhcnQiLCJfaG9va1dvcmtlckV2ZW50cyIsInN0YXJ0RGVidWdnZXIiLCJfaG9va1dvcmtlckRlYnVnZ2VyRXZlbnRzIiwiX3RoaXMiLCJzdWJzY3JpYmUiLCJfaGFuZGxlQmVmb3JlQ29tbWFuZCIsImJpbmQiLCJfaGFuZGxlQWZ0ZXJDb21tYW5kIiwib24iLCJwYXlsb2FkIiwiZXhpdERvbmUiLCJlbWl0IiwiZXhpdENvZGUiLCJwcm9taXNlIiwiT3h5Z2VuRXJyb3IiLCJlcnJvckNvZGUiLCJTQ1JJUFRfRVJST1IiLCJtc2ciLCJsZXZlbCIsImluZm8iLCJlcnIiLCJ0aW1lIiwic3JjIiwic3RhY2siLCJtZXRob2QiLCJicmVha3BvaW50RGF0YSIsImJyZWFrRXJyb3IiLCJvblN0ZXBTdGFydCIsIm1vZHVsZSIsIm9uU3RlcEVuZCIsIl9lbWl0SXRlcmF0aW9uRW5kIiwidHMiLCJ0YyIsInN1aXRlSXRlcmF0aW9uTnVtIiwiY2FzZUl0ZXJhdGlvbk51bSIsImNhc2VJdGVyYXRpb25SZXN1bHQiLCJfc3RhdHVzIiwiX2VtaXRUZXN0RW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFVQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQWpCQSxNQUFNQSxHQUFHLEdBQUcscUJBQU8sY0FBUCxDQUFaO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLE1BQXZCO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLENBQW5COztBQWtCQSxNQUFNQyxNQUFNLEdBQUdDLEVBQUUsSUFBSSxJQUFJQyxPQUFKLENBQVlDLE9BQU8sSUFBSUMsVUFBVSxDQUFDRCxPQUFELEVBQVVGLEVBQVYsQ0FBakMsQ0FBckI7O0FBRUEsTUFBTUksb0JBQW9CLEdBQUlDLE1BQUQsSUFBWTtBQUNyQyxRQUFNQyxNQUFNLEdBQUcsRUFBZjs7QUFFQSxNQUNJRCxNQUFNLElBQ05FLEtBQUssQ0FBQ0MsT0FBTixDQUFjSCxNQUFkLENBREEsSUFFQUEsTUFBTSxDQUFDSSxNQUFQLEdBQWdCLENBSHBCLEVBSUU7QUFDRUosSUFBQUEsTUFBTSxDQUFDSyxHQUFQLENBQVlDLEtBQUQsSUFBVztBQUNsQixVQUNJQSxLQUFLLElBQ0xBLEtBQUssQ0FBQ0MsS0FETixJQUVBTCxLQUFLLENBQUNDLE9BQU4sQ0FBY0csS0FBSyxDQUFDQyxLQUFwQixDQUZBLElBR0FELEtBQUssQ0FBQ0MsS0FBTixDQUFZSCxNQUFaLEdBQXFCLENBSnpCLEVBS0U7QUFDRUUsUUFBQUEsS0FBSyxDQUFDQyxLQUFOLENBQVlGLEdBQVosQ0FBaUJHLElBQUQsSUFBVTtBQUN0QixjQUNJQSxJQUFJLElBQ0pBLElBQUksQ0FBQ0MsV0FETCxJQUVBUCxLQUFLLENBQUNDLE9BQU4sQ0FBY0ssSUFBSSxDQUFDQyxXQUFuQixDQUZBLElBR0FELElBQUksQ0FBQ0MsV0FBTCxDQUFpQkwsTUFBakIsR0FBMEIsQ0FKOUIsRUFLRTtBQUNFSSxZQUFBQSxJQUFJLENBQUNDLFdBQUwsQ0FBaUJKLEdBQWpCLENBQXNCSyxVQUFELElBQWdCO0FBQ2pDVCxjQUFBQSxNQUFNLENBQUNVLElBQVAsQ0FBWUQsVUFBWjtBQUNILGFBRkQ7QUFHSDtBQUNKLFNBWEQ7QUFZSDtBQUNKLEtBcEJEO0FBcUJIOztBQUVELFNBQU9ULE1BQVA7QUFDSCxDQWhDRDs7QUFrQ0EsTUFBTVcsMEJBQTBCLEdBQUcsQ0FBQ1osTUFBRCxFQUFTYSxnQkFBVCxLQUE4QjtBQUM3RCxNQUNJYixNQUFNLElBQ05FLEtBQUssQ0FBQ0MsT0FBTixDQUFjSCxNQUFkLENBREEsSUFFQUEsTUFBTSxDQUFDSSxNQUFQLEdBQWdCLENBSHBCLEVBSUU7QUFDRUosSUFBQUEsTUFBTSxDQUFDSyxHQUFQLENBQVlDLEtBQUQsSUFBVztBQUNsQixVQUNJQSxLQUFLLElBQ0xBLEtBQUssQ0FBQ0MsS0FETixJQUVBTCxLQUFLLENBQUNDLE9BQU4sQ0FBY0csS0FBSyxDQUFDQyxLQUFwQixDQUZBLElBR0FELEtBQUssQ0FBQ0MsS0FBTixDQUFZSCxNQUFaLEdBQXFCLENBSnpCLEVBS0U7QUFDRUUsUUFBQUEsS0FBSyxDQUFDQyxLQUFOLENBQVlGLEdBQVosQ0FBaUJHLElBQUQsSUFBVTtBQUN0QixjQUNJQSxJQUFJLElBQ0pBLElBQUksQ0FBQ0MsV0FETCxJQUVBUCxLQUFLLENBQUNDLE9BQU4sQ0FBY0ssSUFBSSxDQUFDQyxXQUFuQixDQUZBLElBR0FELElBQUksQ0FBQ0MsV0FBTCxDQUFpQkwsTUFBakIsR0FBMEIsQ0FKOUIsRUFLRTtBQUNFSSxZQUFBQSxJQUFJLENBQUNDLFdBQUwsQ0FBaUJKLEdBQWpCLENBQXFCLENBQUNLLFVBQUQsRUFBYUksR0FBYixLQUFxQjtBQUN0QyxrQkFDSUosVUFBVSxDQUFDSyxJQUFYLEtBQW9CRixnQkFBZ0IsQ0FBQ0UsSUFBckMsSUFDQUwsVUFBVSxDQUFDTSxJQUFYLEtBQW9CSCxnQkFBZ0IsQ0FBQ0csSUFGekMsRUFHRTtBQUNFUixnQkFBQUEsSUFBSSxDQUFDQyxXQUFMLENBQWlCUSxNQUFqQixDQUF3QkgsR0FBeEIsRUFBNkIsQ0FBN0I7QUFDSDtBQUNKLGFBUEQ7QUFRSDtBQUNKLFNBaEJEO0FBaUJIO0FBQ0osS0F6QkQ7QUEwQkg7QUFDSixDQWpDRDs7QUFtQ2UsTUFBTUksWUFBTixTQUEyQkMsb0JBQTNCLENBQXdDO0FBQ25EQyxFQUFBQSxXQUFXLENBQUNDLE9BQUQsRUFBVTtBQUNqQjtBQUVBLFNBQUtDLEdBQUwsR0FBV0MsY0FBT0MsZ0JBQVAsRUFBWDtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsS0FBbEI7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLEtBQXZCO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixLQUFwQjtBQUNBLFNBQUtDLE9BQUwsR0FBZSxJQUFmO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixLQUFsQjtBQUNBLFNBQUtDLG9CQUFMLEdBQTRCLElBQTVCO0FBRUEsU0FBS0Msa0JBQUwsR0FBMEIsSUFBMUI7O0FBQ0EsUUFBSVYsT0FBTyxJQUFJLE9BQU9BLE9BQU8sQ0FBQ1csaUJBQWYsS0FBcUMsV0FBcEQsRUFBaUU7QUFDN0QsV0FBS0Qsa0JBQUwsR0FBMEJWLE9BQU8sQ0FBQ1csaUJBQWxDO0FBQ0g7O0FBR0QsU0FBS0MsTUFBTDtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxTQUFLQyxLQUFMLEdBQWEsRUFBYjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxFQUFiO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsRUFBbkI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixLQUFsQjtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsS0FBbkI7QUFDQSxTQUFLQyx3QkFBTCxHQUFnQyxDQUFoQztBQUVBLFNBQUtDLGFBQUwsR0FBcUIsa0JBQXJCO0FBQ0g7O0FBSURDLEVBQUFBLEtBQUssR0FBRztBQUNKLFdBQU8sS0FBS3RCLEdBQVo7QUFDSDs7QUFFUyxRQUFKdUIsSUFBSSxDQUFDeEIsT0FBRCxFQUFVeUIsSUFBSSxHQUFHLEVBQWpCLEVBQXFCQyxRQUFyQixFQUErQjtBQUVyQyxRQUFJLENBQUMxQixPQUFPLENBQUNyQixNQUFiLEVBQXFCO0FBQ2pCLFlBQU0sSUFBSWdELEtBQUosQ0FBVSwwR0FBVixDQUFOO0FBQ0g7O0FBRUQsU0FBS1QsUUFBTCxHQUFnQmxCLE9BQWhCO0FBQ0EsU0FBSzRCLElBQUwsR0FBWSxLQUFLVixRQUFMLENBQWNXLEdBQWQsSUFBcUJDLE9BQU8sQ0FBQ0QsR0FBUixFQUFqQztBQUNBLFNBQUtFLFNBQUwsR0FBaUJMLFFBQWpCO0FBQ0EsU0FBS00sY0FBTCxHQUFzQixJQUF0Qjs7QUFDQSxRQUFJaEMsT0FBSixFQUFhO0FBRVQsVUFBSWlDLE1BQU0sR0FBRyxFQUFiOztBQUNBLFVBQUlqQyxPQUFPLENBQUNrQyxHQUFaLEVBQWlCO0FBR2IsWUFBSSxPQUFPbEMsT0FBTyxDQUFDa0MsR0FBZixLQUF1QixRQUF2QixJQUFtQyxPQUFPbEMsT0FBTyxDQUFDbUMsSUFBZixLQUF3QixRQUEzRCxJQUF1RW5DLE9BQU8sQ0FBQ21DLElBQVIsQ0FBYW5DLE9BQU8sQ0FBQ2tDLEdBQXJCLENBQTNFLEVBQXNHO0FBQ2xHRCxVQUFBQSxNQUFNLEdBQUdqQyxPQUFPLENBQUNtQyxJQUFSLENBQWFuQyxPQUFPLENBQUNrQyxHQUFyQixDQUFUO0FBRUgsU0FIRCxNQUtLLElBQUksT0FBT2xDLE9BQU8sQ0FBQ2tDLEdBQWYsS0FBdUIsUUFBdkIsSUFBbUNFLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZckMsT0FBTyxDQUFDa0MsR0FBcEIsQ0FBdkMsRUFBaUU7QUFDbEVELFlBQUFBLE1BQU0sR0FBR2pDLE9BQU8sQ0FBQ2tDLEdBQWpCO0FBQ0g7QUFDSjs7QUFFRCxVQUFJbEMsT0FBTyxDQUFDc0MsT0FBUixJQUFtQkYsTUFBTSxDQUFDQyxJQUFQLENBQVlyQyxPQUFPLENBQUNzQyxPQUFwQixDQUF2QixFQUFxRDtBQUNqREwsUUFBQUEsTUFBTSxHQUFHLEVBQUUsR0FBR0EsTUFBTDtBQUFhLGFBQUdqQyxPQUFPLENBQUNzQztBQUF4QixTQUFUO0FBQ0g7O0FBR0QsV0FBS0MsSUFBTCxHQUFZLEVBQ1IsR0FBRyxLQUFLQSxJQURBO0FBRVIsV0FBR047QUFGSyxPQUFaO0FBSUEsV0FBS2hCLFdBQUwsR0FBbUJqQixPQUFPLENBQUN3QyxjQUFSLElBQTBCLEVBQTdDO0FBQ0g7O0FBRUQsU0FBS3pCLEtBQUwsR0FBYSxFQUFFLEdBQUdVO0FBQUwsS0FBYjtBQUNBLFNBQUtnQixPQUFMLEdBQWUsQ0FBRSxHQUFHekMsT0FBTyxDQUFDckIsTUFBYixDQUFmO0FBSUEsU0FBSzZCLFVBQUwsR0FBbUJSLE9BQU8sQ0FBQzBDLFlBQVIsSUFBd0IxQyxPQUFPLENBQUMyQyxTQUFoQyxHQUE0QyxJQUE1QyxHQUFtRCxLQUF0RTtBQUNBLFNBQUtDLFVBQUwsR0FBa0I1QyxPQUFPLENBQUMyQyxTQUFSLElBQXFCM0MsT0FBTyxDQUFDMEMsWUFBN0IsSUFBNkMsSUFBL0Q7QUFDQTFDLElBQUFBLE9BQU8sQ0FBQzZDLHVCQUFSLEdBQWtDLEtBQUt4Qix3QkFBdkM7QUFDQSxTQUFLRixVQUFMLEdBQW1CLEtBQUtELFFBQUwsSUFBaUIsS0FBS0EsUUFBTCxDQUFjNEIsU0FBaEMsSUFBOEMsS0FBSzNCLFVBQXJFO0FBQ0EsVUFBTSxLQUFLNEIsbUJBQUwsRUFBTjtBQUNBLFVBQU0sS0FBS0Msa0JBQUwsRUFBTjtBQUNIOztBQUVZLFFBQVBDLE9BQU8sQ0FBQ0MsTUFBTSxHQUFHLElBQVYsRUFBZ0I7QUFDekIsU0FBSzVDLFlBQUwsR0FBb0IsSUFBcEI7O0FBQ0EsUUFBSTtBQUNBLFdBQUtDLE9BQUwsS0FBZ0IsTUFBTSxLQUFLQSxPQUFMLENBQWE0QyxZQUFiLEVBQXRCOztBQUNBLFVBQUksS0FBSzVDLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhNkMsU0FBakMsRUFBNEM7QUFDeEMsY0FBTSxLQUFLN0MsT0FBTCxDQUFhOEMsSUFBYixDQUFrQkgsTUFBbEIsQ0FBTjtBQUNIO0FBQ0osS0FMRCxDQUtFLE9BQU9JLENBQVAsRUFBVTtBQUNSQyxNQUFBQSxPQUFPLENBQUNyRixHQUFSLENBQVksNkJBQVosRUFBMkNvRixDQUEzQztBQUVBcEYsTUFBQUEsR0FBRyxDQUFDc0YsSUFBSixDQUFTLDhCQUFULEVBQXlDRixDQUF6QztBQUNIOztBQUVELFFBQUlKLE1BQU0sS0FBSyxVQUFmLEVBQTJCO0FBQ3ZCLFdBQUtPLHFCQUFMO0FBQ0g7QUFDSjs7QUFFUSxRQUFIQyxHQUFHLEdBQUc7QUFDUixRQUFJLEtBQUtyRCxlQUFULEVBQTBCO0FBQ3RCLFlBQU0sSUFBSXNCLEtBQUosQ0FBVSx3RUFBVixDQUFOO0FBQ0g7O0FBQ0QsUUFBSSxLQUFLdkIsVUFBVCxFQUFxQjtBQUNqQixZQUFNLElBQUl1QixLQUFKLENBQVUsNkRBQVYsQ0FBTjtBQUNIOztBQUNELFNBQUt2QixVQUFMLEdBQWtCLElBQWxCO0FBRUEsVUFBTSxLQUFLMkIsU0FBTCxDQUFlNEIsYUFBZixDQUE2QixLQUFLMUQsR0FBbEMsRUFBdUMsS0FBS2lCLFFBQTVDLEVBQXNELEtBQUtILEtBQTNELENBQU47QUFFQSxRQUFJNkMsS0FBSyxHQUFHLElBQVo7QUFDQSxRQUFJQyxNQUFNLEdBQUcsSUFBYjs7QUFDQSxRQUFJO0FBQ0FBLE1BQUFBLE1BQU0sR0FBRyxNQUFNLEtBQUtDLFFBQUwsRUFBZjtBQUNILEtBRkQsQ0FHQSxPQUFPUixDQUFQLEVBQVU7QUFDTk0sTUFBQUEsS0FBSyxHQUFHTixDQUFSO0FBQ0g7O0FBRUQsUUFBSSxDQUFDTSxLQUFELElBQVVDLE1BQVYsSUFBb0JBLE1BQU0sQ0FBQ0UsT0FBL0IsRUFBd0M7QUFDcENILE1BQUFBLEtBQUssR0FBR0MsTUFBTSxDQUFDRSxPQUFmO0FBQ0g7O0FBRUQsVUFBTSxLQUFLaEMsU0FBTCxDQUFlaUMsV0FBZixDQUEyQixLQUFLL0QsR0FBaEMsRUFBcUM0RCxNQUFyQyxFQUE2Q0QsS0FBN0MsQ0FBTjtBQUNBLFNBQUt4RCxVQUFMLEdBQWtCLEtBQWxCOztBQUNBLFFBQUl3RCxLQUFKLEVBQVc7QUFDUCxZQUFNQSxLQUFOO0FBQ0g7O0FBQ0QsV0FBT0MsTUFBUDtBQUNIOztBQUVTLFFBQUpJLElBQUksQ0FBQ2YsTUFBTSxHQUFHLElBQVYsRUFBZ0I7QUFDdEIsU0FBSzlCLFdBQUwsR0FBbUIsSUFBbkI7O0FBRUEsUUFBSSxLQUFLYixPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYTZDLFNBQWpDLEVBQTRDO0FBQ3hDLFlBQU0sS0FBSzdDLE9BQUwsQ0FBYTBELElBQWIsQ0FBa0JmLE1BQWxCLENBQU47QUFDSDtBQUNKOztBQUVEZ0IsRUFBQUEsYUFBYSxHQUFHO0FBQ1osUUFBSSxLQUFLMUQsVUFBTCxJQUFtQixLQUFLRCxPQUE1QixFQUFxQztBQUNqQyxXQUFLQSxPQUFMLENBQWE0RCxRQUFiLENBQXNCQyxRQUF0QjtBQUNIO0FBQ0o7O0FBRXNCLFFBQWpCQyxpQkFBaUIsQ0FBQ2pGLFdBQUQsRUFBY2tGLFFBQWQsRUFBd0I7QUFDM0MsUUFBSTtBQUVBLFVBQUksS0FBSy9ELE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhNEQsUUFBN0IsSUFBeUMsS0FBSzVELE9BQUwsQ0FBYTRELFFBQWIsQ0FBc0JJLG9CQUFuRSxFQUF5RjtBQUNyRixjQUFNLEtBQUtoRSxPQUFMLENBQWE0RCxRQUFiLENBQXNCSSxvQkFBdEIsQ0FBMkMsS0FBM0MsQ0FBTjtBQUNILE9BRkQsTUFFTztBQUNILGNBQU1sRyxNQUFNLENBQUMsR0FBRCxDQUFaO0FBQ0EsZUFBTyxNQUFNLEtBQUtnRyxpQkFBTCxDQUF1QmpGLFdBQXZCLEVBQW9Da0YsUUFBcEMsQ0FBYjtBQUNIOztBQUVELFVBQUksS0FBSzlELFVBQUwsSUFBbUIsS0FBS0QsT0FBTCxDQUFhNEQsUUFBcEMsRUFBOEM7QUFDMUMsWUFBSUssUUFBUSxHQUFHLEVBQWY7O0FBRUEsY0FBTUMsYUFBYSxHQUFHLEtBQUtsRSxPQUFMLENBQWE0RCxRQUFiLENBQXNCTyxjQUF0QixDQUFxQ0osUUFBckMsQ0FBdEI7O0FBQ0EsY0FBTUssaUJBQWlCLEdBQUdqRyxvQkFBb0IsQ0FBQyxLQUFLK0QsT0FBTixDQUE5Qzs7QUFHQSxhQUFLLElBQUltQyxPQUFULElBQW9CRCxpQkFBcEIsRUFBdUM7QUFDbkMsY0FBSSxDQUFDdkYsV0FBVyxDQUFDeUYsUUFBWixDQUFxQkQsT0FBTyxDQUFDakYsSUFBN0IsQ0FBRCxJQUF3QzJFLFFBQVEsS0FBS00sT0FBTyxDQUFDbEYsSUFBakUsRUFBdUU7QUFDbkVILFlBQUFBLDBCQUEwQixDQUFDLEtBQUtrRCxPQUFOLEVBQWVtQyxPQUFmLENBQTFCO0FBQ0g7QUFDSjs7QUFHRCxhQUFLLElBQUlFLGVBQVQsSUFBNEJMLGFBQTVCLEVBQTJDO0FBQ3ZDLGNBQUksQ0FBQ3JGLFdBQVcsQ0FBQ3lGLFFBQVosQ0FBcUJDLGVBQXJCLENBQUwsRUFBNEM7QUFDeENOLFlBQUFBLFFBQVEsQ0FBQ2xGLElBQVQsQ0FBYyxLQUFLaUIsT0FBTCxDQUFhNEQsUUFBYixDQUFzQlksdUJBQXRCLENBQThDVCxRQUE5QyxFQUF3RFEsZUFBeEQsQ0FBZDtBQUNIO0FBQ0o7O0FBR0QsYUFBSyxJQUFJRSxTQUFULElBQXNCNUYsV0FBdEIsRUFBbUM7QUFDL0IsY0FBSSxDQUFDcUYsYUFBYSxDQUFDSSxRQUFkLENBQXVCRyxTQUF2QixDQUFMLEVBQXdDO0FBQ3BDUixZQUFBQSxRQUFRLENBQUNsRixJQUFULENBQWMsS0FBS2lCLE9BQUwsQ0FBYTRELFFBQWIsQ0FBc0JjLGFBQXRCLENBQW9DWCxRQUFwQyxFQUE4Q1UsU0FBOUMsQ0FBZDtBQUNIO0FBQ0o7O0FBRUQsWUFBSUUsaUJBQWlCLEdBQUcsTUFBTTNHLE9BQU8sQ0FBQzRHLEdBQVIsQ0FBWVgsUUFBWixFQUFzQlksSUFBdEIsQ0FBNEJDLEtBQUQsSUFBVztBQUNoRSxpQkFBT0EsS0FBUDtBQUNILFNBRjZCLENBQTlCO0FBSUEsY0FBTSxLQUFLOUUsT0FBTCxDQUFhNEQsUUFBYixDQUFzQkksb0JBQXRCLENBQTJDLElBQTNDLENBQU47QUFFQSxjQUFNbEcsTUFBTSxDQUFDLEdBQUQsQ0FBWjtBQUVBSCxRQUFBQSxHQUFHLENBQUNvSCxLQUFKLENBQVUsMkJBQVY7O0FBRUEsY0FBTUMsNEJBQTRCLEdBQUcsS0FBS2hGLE9BQUwsQ0FBYTRELFFBQWIsQ0FBc0JPLGNBQXRCLENBQXFDSixRQUFyQyxDQUFyQzs7QUFFQSxlQUFPO0FBQUVZLFVBQUFBLGlCQUFpQixFQUFHQSxpQkFBdEI7QUFBeUNLLFVBQUFBLDRCQUE0QixFQUFHQTtBQUF4RSxTQUFQO0FBQ0gsT0F4Q0QsTUF3Q087QUFDSCxlQUFPLElBQVA7QUFDSDtBQUNKLEtBcERELENBb0RFLE9BQU9qQyxDQUFQLEVBQVU7QUFDUnBGLE1BQUFBLEdBQUcsQ0FBQzBGLEtBQUosQ0FBVSxnQkFBVixFQUE0Qk4sQ0FBNUI7QUFDSDtBQUNKOztBQUVjLFFBQVRrQyxTQUFTLEdBQUc7QUFDZCxVQUFNLEtBQUtqRixPQUFMLENBQWFrRixLQUFiLENBQW1CO0FBQ3JCQyxNQUFBQSxLQUFLLEVBQUUsTUFEYztBQUVyQkMsTUFBQUEsSUFBSSxFQUFFO0FBRmUsS0FBbkIsQ0FBTjtBQUlIOztBQUVhLFFBQVJDLFFBQVEsQ0FBQ0MsR0FBRCxFQUFNO0FBQ2hCLFVBQU0sS0FBS3RGLE9BQUwsQ0FBYWtGLEtBQWIsQ0FBbUI7QUFDckJDLE1BQUFBLEtBQUssRUFBRSxNQURjO0FBRXJCQyxNQUFBQSxJQUFJLEVBQUUsV0FGZTtBQUdyQkcsTUFBQUEsT0FBTyxFQUFFO0FBQ0xELFFBQUFBLEdBQUcsRUFBRUE7QUFEQTtBQUhZLEtBQW5CLENBQU47QUFPSDs7QUFFYyxRQUFURSxTQUFTLEdBQUc7QUFDZCxVQUFNLEtBQUt4RixPQUFMLENBQWF5RixNQUFiLENBQW9CLFdBQXBCLENBQU47QUFDSDs7QUFFRGYsRUFBQUEsYUFBYSxDQUFDdEYsSUFBRCxFQUFPLENBT25COztBQUVEc0csRUFBQUEsZUFBZSxDQUFDdEcsSUFBRCxFQUFPLENBS3JCOztBQU1hLFFBQVJtRSxRQUFRLEdBQUc7QUFDYixVQUFNRCxNQUFNLEdBQUcsSUFBSXFDLG1CQUFKLEVBQWY7QUFDQXJDLElBQUFBLE1BQU0sQ0FBQ3NDLFNBQVAsR0FBbUJqRyxjQUFPa0csWUFBUCxFQUFuQjtBQUNBdkMsSUFBQUEsTUFBTSxDQUFDWCxNQUFQLEdBQWdCbUQsZ0JBQU9DLE1BQXZCO0FBQ0F6QyxJQUFBQSxNQUFNLENBQUNsRixNQUFQLEdBQWdCLEVBQWhCO0FBQ0EsUUFBSWlGLEtBQUssR0FBRyxJQUFaO0FBRUEsVUFBTSxLQUFLMkMsMEJBQUwsRUFBTjs7QUFDQSxRQUFJO0FBRUEsV0FBSyxJQUFJdEgsS0FBVCxJQUFrQixLQUFLd0QsT0FBdkIsRUFBZ0M7QUFDNUIsY0FBTStELFdBQVcsR0FBRyxNQUFNLEtBQUtDLFNBQUwsQ0FBZXhILEtBQWYsQ0FBMUI7QUFDQTRFLFFBQUFBLE1BQU0sQ0FBQ2xGLE1BQVAsQ0FBY1csSUFBZCxDQUFtQmtILFdBQW5CO0FBQ0g7QUFDSixLQU5ELENBT0EsT0FBT2xELENBQVAsRUFBVTtBQUNOTSxNQUFBQSxLQUFLLEdBQUdOLENBQVI7QUFDSDs7QUFDRE8sSUFBQUEsTUFBTSxDQUFDNkMsT0FBUCxHQUFpQnhHLGNBQU9rRyxZQUFQLEVBQWpCO0FBQ0F2QyxJQUFBQSxNQUFNLENBQUM4QyxRQUFQLEdBQWtCOUMsTUFBTSxDQUFDNkMsT0FBUCxHQUFpQjdDLE1BQU0sQ0FBQ3NDLFNBQTFDO0FBRUEsVUFBTVMsZUFBZSxHQUFHL0MsTUFBTSxDQUFDbEYsTUFBUCxDQUFja0ksSUFBZCxDQUFtQkMsZUFBZSxJQUFJO0FBQzFELFVBQUlBLGVBQWUsSUFBSWpJLEtBQUssQ0FBQ0MsT0FBTixDQUFjZ0ksZUFBZCxDQUFuQixJQUFxREEsZUFBZSxDQUFDL0gsTUFBaEIsR0FBeUIsQ0FBbEYsRUFBcUY7QUFDakYsZUFBTytILGVBQWUsQ0FBQ0QsSUFBaEIsQ0FBcUJFLENBQUMsSUFBSUEsQ0FBQyxDQUFDN0QsTUFBRixLQUFhbUQsZ0JBQU9XLE1BQTlDLENBQVA7QUFDSDtBQUNKLEtBSnVCLENBQXhCO0FBTUFuRCxJQUFBQSxNQUFNLENBQUNYLE1BQVAsR0FBZ0IwRCxlQUFlLEdBQUdQLGdCQUFPVyxNQUFWLEdBQW1CWCxnQkFBT0MsTUFBekQ7QUFDQXpDLElBQUFBLE1BQU0sQ0FBQ29ELFdBQVAsR0FBcUIsRUFBRSxHQUFHLEtBQUsxRTtBQUFWLEtBQXJCO0FBRUFzQixJQUFBQSxNQUFNLENBQUNxRCxZQUFQLEdBQXNCLEVBQUUsR0FBRyxLQUFLbkcsS0FBVjtBQUFpQixTQUFHLEtBQUtDO0FBQXpCLEtBQXRCO0FBQ0E2QyxJQUFBQSxNQUFNLENBQUM3RCxPQUFQLEdBQWlCLEVBQUUsR0FBRyxLQUFLa0I7QUFBVixLQUFqQjs7QUFHQSxRQUFJMEMsS0FBSixFQUFXO0FBQ1BDLE1BQUFBLE1BQU0sQ0FBQ0UsT0FBUCxHQUFpQm9ELGdCQUFZQyxtQkFBWixDQUFnQ3hELEtBQWhDLENBQWpCO0FBQ0FDLE1BQUFBLE1BQU0sQ0FBQ1gsTUFBUCxHQUFnQm1ELGdCQUFPVyxNQUF2QjtBQUNIOztBQUNELFVBQU0sS0FBS0sseUJBQUwsQ0FBK0J4RCxNQUEvQixDQUFOO0FBQ0EsV0FBT0EsTUFBUDtBQUNIOztBQUVjLFFBQVQ0QyxTQUFTLENBQUN4SCxLQUFELEVBQVE7QUFDbkIsUUFBSSxDQUFDQSxLQUFMLEVBQVk7QUFDUmYsTUFBQUEsR0FBRyxDQUFDMEYsS0FBSixDQUFVLGlDQUFWO0FBQ0g7O0FBRUQsUUFBSSxDQUFDM0UsS0FBSyxDQUFDMEcsSUFBUCxJQUFlLENBQUMxRyxLQUFLLENBQUNxSSxJQUExQixFQUFnQztBQUM1QixhQUFPLEVBQVA7QUFDSDs7QUFFRCxRQUFJLENBQUNySSxLQUFLLENBQUNzSSxjQUFYLEVBQTJCO0FBQ3ZCdEksTUFBQUEsS0FBSyxDQUFDc0ksY0FBTixHQUF1QixDQUF2QjtBQUNIOztBQUNELFFBQUlDLDJCQUEyQixHQUFHLEtBQWxDOztBQUNBLFFBQUl2SSxLQUFLLENBQUNzSSxjQUFOLEdBQXVCLENBQTNCLEVBQThCO0FBQzFCQyxNQUFBQSwyQkFBMkIsR0FBRyxJQUE5QjtBQUNIOztBQUVELFVBQU1DLGNBQWMsR0FBRyxLQUFLdkcsUUFBTCxDQUFjd0csYUFBZCxJQUErQixLQUF0RDtBQUVBLFVBQU1aLGVBQWUsR0FBRyxFQUF4Qjs7QUFDQSxTQUFLLElBQUlhLGNBQWMsR0FBQyxDQUF4QixFQUEyQkEsY0FBYyxJQUFJMUksS0FBSyxDQUFDc0ksY0FBbkQsRUFBbUVJLGNBQWMsRUFBakYsRUFBcUY7QUFDakYsVUFBSUgsMkJBQUosRUFBaUM7QUFDN0IsYUFBS3pGLFNBQUwsQ0FBZTZGLGdCQUFmLENBQWdDLEtBQUszSCxHQUFyQyxFQUEwQzBILGNBQTFDLEVBQTBELE9BQTFEO0FBQ0g7O0FBQ0QsWUFBTW5CLFdBQVcsR0FBRyxJQUFJcUIsb0JBQUosRUFBcEI7QUFDQWYsTUFBQUEsZUFBZSxDQUFDeEgsSUFBaEIsQ0FBcUJrSCxXQUFyQjtBQUNBQSxNQUFBQSxXQUFXLENBQUNiLElBQVosR0FBbUIxRyxLQUFLLENBQUMwRyxJQUFOLElBQWN6RixjQUFPNEgscUJBQVAsQ0FBNkI3SSxLQUFLLENBQUNxSSxJQUFuQyxDQUFqQztBQUNBZCxNQUFBQSxXQUFXLENBQUNMLFNBQVosR0FBd0JqRyxjQUFPa0csWUFBUCxFQUF4QjtBQUNBSSxNQUFBQSxXQUFXLENBQUN1QixZQUFaLEdBQTJCSixjQUEzQjtBQUNBbkIsTUFBQUEsV0FBVyxDQUFDdEQsTUFBWixHQUFxQm1ELGdCQUFPQyxNQUE1QjtBQUNBLFlBQU0sS0FBSzBCLDJCQUFMLENBQWlDL0ksS0FBakMsQ0FBTjs7QUFDQSxXQUFLOEMsU0FBTCxDQUFla0csWUFBZixDQUE0QixLQUFLaEksR0FBakMsRUFBc0NoQixLQUFLLENBQUNpSixHQUE1QyxFQUFpRDFCLFdBQWpEOztBQUNBLFdBQUssSUFBSXJILElBQVQsSUFBaUJGLEtBQUssQ0FBQ0MsS0FBdkIsRUFBOEI7QUFFMUIsWUFBSSxDQUFDQyxJQUFJLENBQUNtSSxJQUFWLEVBQWdCO0FBQ1o7QUFDSDs7QUFDRCxZQUFJLENBQUNuSSxJQUFJLENBQUN3RyxJQUFWLEVBQWdCO0FBQ1p4RyxVQUFBQSxJQUFJLENBQUN3RyxJQUFMLEdBQVl6RixjQUFPNEgscUJBQVAsQ0FBNkIzSSxJQUFJLENBQUNtSSxJQUFsQyxDQUFaO0FBQ0g7O0FBQ0QsWUFBSSxDQUFDbkksSUFBSSxDQUFDb0ksY0FBVixFQUEwQjtBQUN0QnBJLFVBQUFBLElBQUksQ0FBQ29JLGNBQUwsR0FBc0IsQ0FBdEI7QUFDSDs7QUFDRCxhQUFLLElBQUlZLGFBQWEsR0FBQyxDQUF2QixFQUEwQkEsYUFBYSxJQUFJaEosSUFBSSxDQUFDb0ksY0FBaEQsRUFBZ0VZLGFBQWEsRUFBN0UsRUFBaUY7QUFFN0UsY0FBSUMsMEJBQTBCLEdBQUcsS0FBakM7O0FBQ0EsY0FBSWpKLElBQUksSUFBSUEsSUFBSSxDQUFDb0ksY0FBYixJQUErQnBJLElBQUksQ0FBQ29JLGNBQUwsR0FBc0IsQ0FBekQsRUFBNEQ7QUFDeERhLFlBQUFBLDBCQUEwQixHQUFHLElBQTdCO0FBQ0g7O0FBQ0QsY0FBSUEsMEJBQUosRUFBZ0M7QUFDNUIsaUJBQUtyRyxTQUFMLENBQWU2RixnQkFBZixDQUFnQyxLQUFLM0gsR0FBckMsRUFBMENrSSxhQUExQyxFQUF5RCxNQUF6RDtBQUNIOztBQUVELGdCQUFNLEtBQUtwRyxTQUFMLENBQWVzRyxXQUFmLENBQTJCLEtBQUtwSSxHQUFoQyxFQUFxQ2hCLEtBQUssQ0FBQ2lKLEdBQU4sSUFBYWpKLEtBQUssQ0FBQ3FKLEVBQXhELEVBQTREbkosSUFBSSxDQUFDK0ksR0FBTCxJQUFZL0ksSUFBSSxDQUFDbUosRUFBakIsSUFBdUJuSixJQUFJLENBQUNtSSxJQUF4RixFQUE4Rm5JLElBQTlGLENBQU47QUFFQSxjQUFJb0osVUFBSjs7QUFFQSxlQUFLLElBQUlDLFVBQVUsR0FBRyxDQUF0QixFQUF5QkEsVUFBVSxHQUFHcEssVUFBdEMsRUFBa0RvSyxVQUFVLEVBQTVELEVBQWdFO0FBQzVERCxZQUFBQSxVQUFVLEdBQUcsTUFBTSxLQUFLRSxRQUFMLENBQWN4SixLQUFkLEVBQXFCRSxJQUFyQixFQUEyQndJLGNBQTNCLEVBQTJDUSxhQUEzQyxFQUEwREssVUFBMUQsQ0FBbkI7O0FBQ0EsZ0JBQUksQ0FBQyxDQUFDRCxVQUFELElBQWVBLFVBQVUsQ0FBQ3JGLE1BQVgsS0FBc0JtRCxnQkFBT1csTUFBN0MsS0FBd0QsQ0FBQ1MsY0FBN0QsRUFBNkU7QUFDekU7QUFDSCxhQUZELE1BR0ssSUFBSWMsVUFBVSxJQUFJQSxVQUFVLENBQUNyRixNQUFYLEtBQXNCbUQsZ0JBQU9XLE1BQS9DLEVBQXVEO0FBQ3hEO0FBQ0g7QUFDSjs7QUFFRCxnQkFBTSxLQUFLakYsU0FBTCxDQUFlMkcsU0FBZixDQUF5QixLQUFLekksR0FBOUIsRUFBbUNoQixLQUFLLENBQUNpSixHQUFOLElBQWFqSixLQUFLLENBQUNxSixFQUF0RCxFQUEwRG5KLElBQUksQ0FBQytJLEdBQUwsSUFBWS9JLElBQUksQ0FBQ21KLEVBQTNFLEVBQStFQyxVQUEvRSxDQUFOOztBQUNBLGNBQUlILDBCQUFKLEVBQWdDO0FBQzVCLGlCQUFLckcsU0FBTCxDQUFlNEcsY0FBZixDQUE4QixLQUFLMUksR0FBbkMsRUFBd0NzSSxVQUF4QyxFQUFvRCxNQUFwRDtBQUNIOztBQUVEL0IsVUFBQUEsV0FBVyxDQUFDdEgsS0FBWixDQUFrQkksSUFBbEIsQ0FBdUJpSixVQUF2Qjs7QUFHQSxjQUFJQSxVQUFVLENBQUNyRixNQUFYLEtBQXNCbUQsZ0JBQU9XLE1BQWpDLEVBQXlDO0FBQ3JDUixZQUFBQSxXQUFXLENBQUN0RCxNQUFaLEdBQXFCbUQsZ0JBQU9XLE1BQTVCO0FBQ0gsV0FGRCxNQUdLLElBQUl1QixVQUFVLENBQUNyRixNQUFYLEtBQXNCbUQsZ0JBQU91QyxPQUFqQyxFQUEwQztBQUMzQ3BDLFlBQUFBLFdBQVcsQ0FBQ3RELE1BQVosR0FBcUJtRCxnQkFBT3VDLE9BQTVCO0FBQ0g7QUFDSjtBQUNKOztBQUNEcEMsTUFBQUEsV0FBVyxDQUFDRSxPQUFaLEdBQXNCeEcsY0FBT2tHLFlBQVAsRUFBdEI7QUFDQUksTUFBQUEsV0FBVyxDQUFDRyxRQUFaLEdBQXVCSCxXQUFXLENBQUNFLE9BQVosR0FBc0JGLFdBQVcsQ0FBQ0wsU0FBekQ7O0FBRUEsVUFBSXFCLDJCQUFKLEVBQWlDO0FBQzdCLGFBQUt6RixTQUFMLENBQWU0RyxjQUFmLENBQThCLEtBQUsxSSxHQUFuQyxFQUF3Q3VHLFdBQXhDLEVBQXFELE9BQXJEO0FBQ0g7O0FBRUQsWUFBTSxLQUFLcUMsMEJBQUwsQ0FBZ0M1SixLQUFoQyxFQUF1Q3VILFdBQXZDLENBQU47O0FBQ0EsV0FBS3pFLFNBQUwsQ0FBZStHLFVBQWYsQ0FBMEIsS0FBSzdJLEdBQS9CLEVBQW9DaEIsS0FBSyxDQUFDaUosR0FBMUMsRUFBK0MxQixXQUEvQztBQUNIOztBQUNELFdBQU9NLGVBQVA7QUFDSDs7QUFFYSxRQUFSMkIsUUFBUSxDQUFDeEosS0FBRCxFQUFRRSxJQUFSLEVBQWN3SSxjQUFkLEVBQThCUSxhQUE5QixFQUE2Q0ssVUFBVSxHQUFHLENBQTFELEVBQTZEO0FBQ3ZFLFVBQU1PLE1BQU0sR0FBRyxFQUFmO0FBQ0EsVUFBTUMsS0FBSyxHQUFHUixVQUFVLEdBQUcsQ0FBM0I7O0FBR0EsUUFBSXZKLEtBQUssQ0FBQ2dLLFlBQVYsRUFBd0I7QUFJcEJDLHNCQUFFQyxNQUFGLENBQVNKLE1BQVQsRUFBaUI5SixLQUFLLENBQUNnSyxZQUFOLENBQW1CRyxTQUFuQixFQUFqQjs7QUFDQSxVQUFJLENBQUNKLEtBQUwsRUFBWTtBQUNSL0osUUFBQUEsS0FBSyxDQUFDZ0ssWUFBTixDQUFtQkksUUFBbkI7QUFDSDtBQUNKOztBQUVELFFBQUlsSyxJQUFJLENBQUM4SixZQUFULEVBQXVCO0FBSW5CQyxzQkFBRUMsTUFBRixDQUFTSixNQUFULEVBQWlCNUosSUFBSSxDQUFDOEosWUFBTCxDQUFrQkcsU0FBbEIsRUFBakI7O0FBQ0EsVUFBSSxDQUFDSixLQUFMLEVBQVk7QUFDUjdKLFFBQUFBLElBQUksQ0FBQzhKLFlBQUwsQ0FBa0JJLFFBQWxCO0FBQ0g7QUFDSjs7QUFHRCxRQUFJLEtBQUs3SSxVQUFMLElBQW1CLEtBQUtELE9BQXhCLElBQW1DLEtBQUtBLE9BQUwsQ0FBYTRELFFBQWhELElBQTREaEYsSUFBSSxDQUFDQyxXQUFyRSxFQUFrRjtBQUM5RSxXQUFLLElBQUlrSyxDQUFDLEdBQUMsQ0FBWCxFQUFjQSxDQUFDLEdBQUVuSyxJQUFJLENBQUNDLFdBQUwsQ0FBaUJMLE1BQWxDLEVBQTBDdUssQ0FBQyxFQUEzQyxFQUErQztBQUUzQyxZQUFJM0osSUFBSSxHQUFHUixJQUFJLENBQUNDLFdBQUwsQ0FBaUJrSyxDQUFqQixFQUFvQjNKLElBQS9CO0FBQ0EsWUFBSUQsSUFBSSxHQUFHUCxJQUFJLENBQUNDLFdBQUwsQ0FBaUJrSyxDQUFqQixFQUFvQjVKLElBQS9CO0FBRUEsY0FBTSxLQUFLYSxPQUFMLENBQWE0RCxRQUFiLENBQXNCYyxhQUF0QixDQUFvQ3ZGLElBQXBDLEVBQTBDQyxJQUExQyxDQUFOO0FBQ0g7QUFDSjs7QUFDRCxVQUFNLEtBQUs0SiwwQkFBTCxDQUFnQ3BLLElBQWhDLENBQU47QUFDQSxVQUFNb0osVUFBVSxHQUFHLElBQUlpQixtQkFBSixFQUFuQjtBQUNBakIsSUFBQUEsVUFBVSxDQUFDNUMsSUFBWCxHQUFrQnhHLElBQUksQ0FBQ3dHLElBQXZCO0FBQ0E0QyxJQUFBQSxVQUFVLENBQUNrQixRQUFYLEdBQXNCdEssSUFBSSxDQUFDbUksSUFBM0I7QUFDQWlCLElBQUFBLFVBQVUsQ0FBQ1IsWUFBWCxHQUEwQkksYUFBMUI7QUFDQUksSUFBQUEsVUFBVSxDQUFDQyxVQUFYLEdBQXdCQSxVQUF4Qjs7QUFHQSxRQUFJO0FBQ0EsYUFBTyxDQUFFLEtBQUtqSSxPQUFQLElBQW1CLEtBQUt5QyxrQkFBTCxFQUExQjs7QUFDQSxVQUFJLENBQUMsS0FBS3pDLE9BQVYsRUFBbUI7QUFDZjtBQUNIO0FBQ0osS0FMRCxDQU1BLE9BQU8rQyxDQUFQLEVBQVU7QUFDTnBGLE1BQUFBLEdBQUcsQ0FBQzBGLEtBQUosQ0FBVSx1Q0FBVixFQUFtRE4sQ0FBbkQ7QUFDQWlGLE1BQUFBLFVBQVUsQ0FBQ3BDLFNBQVgsR0FBdUJvQyxVQUFVLENBQUM3QixPQUFYLEdBQXFCeEcsY0FBT2tHLFlBQVAsRUFBNUM7QUFDQW1DLE1BQUFBLFVBQVUsQ0FBQzVCLFFBQVgsR0FBc0IsQ0FBdEI7QUFDQTRCLE1BQUFBLFVBQVUsQ0FBQ3hFLE9BQVgsR0FBcUJvRCxnQkFBWUMsbUJBQVosQ0FBZ0M5RCxDQUFoQyxDQUFyQjtBQUNBaUYsTUFBQUEsVUFBVSxDQUFDckYsTUFBWCxHQUFvQm1ELGdCQUFPVyxNQUEzQjtBQUNBLGFBQU91QixVQUFQO0FBQ0g7O0FBRUQsVUFBTSxLQUFLbUIsb0JBQUwsRUFBTjs7QUFFQSxRQUFJO0FBQ0FuQixNQUFBQSxVQUFVLENBQUNwQyxTQUFYLEdBQXVCakcsY0FBT2tHLFlBQVAsRUFBdkI7QUFDQSxZQUFNO0FBQUV1RCxRQUFBQSxXQUFGO0FBQWVDLFFBQUFBLE9BQWY7QUFBd0JDLFFBQUFBLFVBQXhCO0FBQW9DakcsUUFBQUE7QUFBcEMsVUFBOEMsTUFBTSxLQUFLa0csV0FBTCxDQUFpQjdLLEtBQWpCLEVBQXdCRSxJQUF4QixFQUE4QndJLGNBQTlCLEVBQThDUSxhQUE5QyxFQUE2RFksTUFBN0QsQ0FBMUQ7O0FBQ0EsV0FBS2dCLG1CQUFMLENBQXlCO0FBQUVKLFFBQUFBLFdBQUY7QUFBZUMsUUFBQUEsT0FBZjtBQUF3QmhHLFFBQUFBLEtBQXhCO0FBQStCaUcsUUFBQUE7QUFBL0IsT0FBekI7O0FBQ0F0QixNQUFBQSxVQUFVLENBQUM3QixPQUFYLEdBQXFCeEcsY0FBT2tHLFlBQVAsRUFBckI7QUFDQW1DLE1BQUFBLFVBQVUsQ0FBQzVCLFFBQVgsR0FBc0I0QixVQUFVLENBQUM3QixPQUFYLEdBQXFCNkIsVUFBVSxDQUFDcEMsU0FBdEQ7QUFDQW9DLE1BQUFBLFVBQVUsQ0FBQ3FCLE9BQVgsR0FBcUJBLE9BQXJCO0FBQ0FyQixNQUFBQSxVQUFVLENBQUN5QixLQUFYLEdBQW1CTCxXQUFXLElBQUlBLFdBQVcsQ0FBQ0ssS0FBM0IsR0FBbUNMLFdBQVcsQ0FBQ0ssS0FBL0MsR0FBdUQsRUFBMUU7QUFDQXpCLE1BQUFBLFVBQVUsQ0FBQzBCLElBQVgsR0FBa0JOLFdBQVcsSUFBSUEsV0FBVyxDQUFDTSxJQUEzQixHQUFrQ04sV0FBVyxDQUFDTSxJQUE5QyxHQUFxRCxFQUF2RTtBQUNBMUIsTUFBQUEsVUFBVSxDQUFDMkIsR0FBWCxHQUFpQlAsV0FBVyxJQUFJQSxXQUFXLENBQUNPLEdBQTNCLEdBQWlDUCxXQUFXLENBQUNPLEdBQTdDLEdBQW1ELElBQXBFO0FBQ0EzQixNQUFBQSxVQUFVLENBQUMvRixjQUFYLEdBQTRCbUgsV0FBVyxJQUFJQSxXQUFXLENBQUNRLFVBQTNCLEdBQXdDUixXQUFXLENBQUNRLFVBQXBELEdBQWlFLElBQTdGO0FBQ0E1QixNQUFBQSxVQUFVLENBQUM2QixXQUFYLEdBQXlCVCxXQUFXLElBQUlBLFdBQVcsQ0FBQ1MsV0FBM0IsR0FBeUNULFdBQVcsQ0FBQ1MsV0FBckQsR0FBbUUsSUFBNUY7O0FBR0EsVUFBSUMsV0FBVyxHQUFHbkIsZ0JBQUVvQixJQUFGLENBQU8vQixVQUFVLENBQUN5QixLQUFsQixFQUF5QjtBQUFDOUcsUUFBQUEsTUFBTSxFQUFFbUQsZ0JBQU9XO0FBQWhCLE9BQXpCLENBQWxCOztBQUVBLFVBQUl1RCxZQUFZLEdBQUdyQixnQkFBRW9CLElBQUYsQ0FBTy9CLFVBQVUsQ0FBQ3lCLEtBQWxCLEVBQXlCO0FBQUM5RyxRQUFBQSxNQUFNLEVBQUVtRCxnQkFBT3VDO0FBQWhCLE9BQXpCLENBQW5COztBQUNBTCxNQUFBQSxVQUFVLENBQUNyRixNQUFYLEdBQW9CZ0csZ0JBQUVzQixPQUFGLENBQVVILFdBQVYsS0FBMEIsQ0FBQ3pHLEtBQTNCLEdBQW1DeUMsZ0JBQU9DLE1BQTFDLEdBQW1ERCxnQkFBT1csTUFBOUU7O0FBQ0EsVUFBSXBELEtBQUosRUFBVztBQUNQMkUsUUFBQUEsVUFBVSxDQUFDeEUsT0FBWCxHQUFxQkgsS0FBckI7QUFDQTJFLFFBQUFBLFVBQVUsQ0FBQ3JGLE1BQVgsR0FBb0JtRCxnQkFBT1csTUFBM0I7QUFDQXVCLFFBQUFBLFVBQVUsQ0FBQ3lCLEtBQVgsR0FBbUI5SixjQUFPdUssaUNBQVAsQ0FBeUNsQyxVQUFVLENBQUN5QixLQUFwRCxDQUFuQjtBQUNILE9BSkQsTUFLSyxJQUFJLENBQUNkLGdCQUFFc0IsT0FBRixDQUFVRCxZQUFWLENBQUwsRUFBOEI7QUFDL0JoQyxRQUFBQSxVQUFVLENBQUNyRixNQUFYLEdBQW9CbUQsZ0JBQU91QyxPQUEzQjtBQUNIOztBQUNELFlBQU0sS0FBSzhCLHlCQUFMLENBQStCdkwsSUFBL0IsRUFBcUNvSixVQUFyQyxDQUFOO0FBQ0gsS0EzQkQsQ0EyQkUsT0FBT2pGLENBQVAsRUFBVTtBQUNScEYsTUFBQUEsR0FBRyxDQUFDMEYsS0FBSixDQUFVLGdDQUFWLEVBQTRDTixDQUE1QztBQUNBaUYsTUFBQUEsVUFBVSxDQUFDeEUsT0FBWCxHQUFxQm9ELGdCQUFZQyxtQkFBWixDQUFnQzlELENBQWhDLENBQXJCO0FBQ0FpRixNQUFBQSxVQUFVLENBQUNyRixNQUFYLEdBQW9CbUQsZ0JBQU9XLE1BQTNCO0FBRUg7O0FBQ0QsVUFBTTJELG9CQUFvQixHQUFHLE9BQU8sS0FBS3pKLFFBQUwsQ0FBYzBKLFdBQXJCLEtBQXFDLFNBQXJDLElBQWtELEtBQUsxSixRQUFMLENBQWMwSixXQUFkLEtBQThCLElBQTdHO0FBRUEsVUFBTSxLQUFLQyxrQkFBTCxDQUF3QnRDLFVBQVUsQ0FBQ3JGLE1BQW5DLEVBQTJDeUgsb0JBQTNDLENBQU47QUFFQSxXQUFPcEMsVUFBUDtBQUNIOztBQUVnQixRQUFYdUIsV0FBVyxDQUFDN0ssS0FBRCxFQUFRRSxJQUFSLEVBQWN3SSxjQUFkLEVBQThCUSxhQUE5QixFQUE2Q1ksTUFBN0MsRUFBcUQ7QUFDbEUsUUFBSSxDQUFDLEtBQUt4SSxPQUFWLEVBQW1CO0FBQ2ZyQyxNQUFBQSxHQUFHLENBQUMwRixLQUFKLENBQVUscUNBQVY7O0FBRUEsVUFBSSxLQUFLa0gscUJBQVQsRUFBZ0M7QUFDNUIsYUFBS0EscUJBQUwsQ0FBMkJDLE1BQTNCLENBQWtDLElBQUlwSixLQUFKLENBQVUsaUJBQVYsQ0FBbEM7QUFDSDs7QUFDRDtBQUNIOztBQUVELFdBQU8sTUFBTSxLQUFLcEIsT0FBTCxDQUFhbUQsR0FBYixDQUFpQjtBQUMxQnNILE1BQUFBLFVBQVUsRUFBRTdMLElBQUksQ0FBQ3dHLElBRFM7QUFFMUJzRixNQUFBQSxVQUFVLEVBQUU5TCxJQUFJLENBQUNtSSxJQUZTO0FBRzFCc0MsTUFBQUEsT0FBTyxFQUFFO0FBQ0xiLFFBQUFBLE1BQU0sRUFBRUEsTUFESDtBQUVMN0csUUFBQUEsR0FBRyxFQUFFLEtBQUtLLElBRkw7QUFHTGQsUUFBQUEsSUFBSSxFQUFFLEtBQUtWLEtBSE47QUFJTG1LLFFBQUFBLElBQUksRUFBRSxLQUFLcEssS0FKTjtBQUtMcUosUUFBQUEsVUFBVSxFQUFFLEtBQUtsSixXQUxaO0FBTUxrSyxRQUFBQSxJQUFJLEVBQUU7QUFDRkMsVUFBQUEsSUFBSSxFQUFFO0FBQ0Z6RixZQUFBQSxJQUFJLEVBQUV4RyxJQUFJLENBQUN3RyxJQURUO0FBRUYwRixZQUFBQSxTQUFTLEVBQUVsRDtBQUZULFdBREo7QUFLRmxKLFVBQUFBLEtBQUssRUFBRTtBQUNIMEcsWUFBQUEsSUFBSSxFQUFFMUcsS0FBSyxDQUFDMEcsSUFEVDtBQUVIMEYsWUFBQUEsU0FBUyxFQUFFMUQ7QUFGUjtBQUxMO0FBTkQsT0FIaUI7QUFvQjFCMkQsTUFBQUEsTUFBTSxFQUFFLEtBQUtwSyxRQUFMLENBQWNxSyxFQUFkLElBQW9CO0FBcEJGLEtBQWpCLENBQWI7QUFzQkg7O0FBRXVCLFFBQWxCdkksa0JBQWtCLEdBQUc7QUFDdkIsV0FBTyxLQUFLekMsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWFpTCxVQUFiLENBQXdCLEtBQUt2TCxHQUE3QixFQUFrQyxLQUFLaUIsUUFBdkMsRUFBaUQsS0FBS0gsS0FBdEQsQ0FBdkI7QUFDSDs7QUFFeUIsUUFBcEIySSxvQkFBb0IsR0FBRztBQUN6QixRQUFJLEtBQUtuSixPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYWtMLFlBQWpDLEVBQStDO0FBQzNDLFlBQU0sS0FBS2xMLE9BQUwsQ0FBYWtMLFlBQWIsRUFBTjtBQUNIO0FBQ0o7O0FBRXVCLFFBQWxCWixrQkFBa0IsQ0FBQzNILE1BQU0sR0FBRyxJQUFWLEVBQWdCd0ksY0FBYyxHQUFHLElBQWpDLEVBQXVDO0FBQzNELFFBQUksS0FBS25MLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhb0wsVUFBakMsRUFBNkM7QUFDekMsWUFBTSxLQUFLcEwsT0FBTCxDQUFhb0wsVUFBYixDQUF3QnpJLE1BQXhCLEVBQWdDd0ksY0FBaEMsQ0FBTjtBQUNIO0FBQ0o7O0FBRStCLFFBQTFCbkYsMEJBQTBCLEdBQUc7QUFDL0IsUUFBSTtBQUNBLFVBQUksUUFBUSxLQUFLaEcsT0FBYixJQUF3QixLQUFLQSxPQUFMLENBQWFxTCxjQUF6QyxFQUF5RDtBQUNyRCxjQUFNLEtBQUtyTCxPQUFMLENBQWFxTCxjQUFiLENBQTRCLFlBQTVCLEVBQTBDLENBQUMsS0FBSzNMLEdBQU4sRUFBVyxLQUFLaUIsUUFBaEIsRUFBMEIsS0FBS0gsS0FBL0IsQ0FBMUMsQ0FBTjtBQUNIO0FBQ0osS0FKRCxDQUtBLE9BQU91QyxDQUFQLEVBQVU7QUFDTnBGLE1BQUFBLEdBQUcsQ0FBQzBGLEtBQUosQ0FBVSwyQkFBVixFQUF1Q04sQ0FBdkM7QUFDQSxXQUFLdkIsU0FBTCxJQUFrQixLQUFLQSxTQUFMLENBQWU4SixVQUFmLENBQTBCLElBQTFCLEVBQWdDLE1BQWhDLEVBQXdDLDhCQUE0QnZJLENBQXBFLEVBQXVFbkYsY0FBdkUsQ0FBbEI7QUFDSDtBQUNKOztBQUVnQyxRQUEzQjZKLDJCQUEyQixDQUFDL0ksS0FBRCxFQUFRO0FBQ3JDLFFBQUk7QUFDQSxVQUFJLFFBQVEsS0FBS3NCLE9BQWIsSUFBd0IsS0FBS0EsT0FBTCxDQUFhcUwsY0FBekMsRUFBeUQ7QUFDckQsY0FBTSxLQUFLckwsT0FBTCxDQUFhcUwsY0FBYixDQUE0QixhQUE1QixFQUEyQyxDQUFDM00sS0FBRCxDQUEzQyxDQUFOO0FBQ0g7QUFDSixLQUpELENBS0EsT0FBT3FFLENBQVAsRUFBVTtBQUNOcEYsTUFBQUEsR0FBRyxDQUFDMEYsS0FBSixDQUFVLDRCQUFWLEVBQXdDTixDQUF4QztBQUNBLFdBQUt2QixTQUFMLElBQWtCLEtBQUtBLFNBQUwsQ0FBZThKLFVBQWYsQ0FBMEIsSUFBMUIsRUFBZ0MsTUFBaEMsRUFBd0MsK0JBQTZCdkksQ0FBckUsRUFBd0VuRixjQUF4RSxDQUFsQjtBQUNIO0FBQ0o7O0FBRStCLFFBQTFCb0wsMEJBQTBCLENBQUNwSyxJQUFELEVBQU87QUFDbkMsUUFBSTtBQUNBLGFBQU8sS0FBS29CLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhcUwsY0FBYixDQUE0QixZQUE1QixFQUEwQyxDQUFDek0sSUFBRCxDQUExQyxDQUF2QjtBQUNILEtBRkQsQ0FHQSxPQUFPbUUsQ0FBUCxFQUFVO0FBQ05wRixNQUFBQSxHQUFHLENBQUMwRixLQUFKLENBQVUsMkJBQVYsRUFBdUNOLENBQXZDO0FBQ0EsV0FBS3ZCLFNBQUwsSUFBa0IsS0FBS0EsU0FBTCxDQUFlOEosVUFBZixDQUEwQixJQUExQixFQUFnQyxNQUFoQyxFQUF3Qyw4QkFBNEJ2SSxDQUFwRSxFQUF1RW5GLGNBQXZFLENBQWxCO0FBQ0g7QUFDSjs7QUFFOEIsUUFBekJrSix5QkFBeUIsQ0FBQ3hELE1BQUQsRUFBUztBQUNwQyxRQUFJO0FBQ0EsYUFBTyxLQUFLdEQsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWFxTCxjQUFiLENBQTRCLFdBQTVCLEVBQXlDLENBQUMsS0FBSzNMLEdBQU4sRUFBVzRELE1BQVgsQ0FBekMsQ0FBdkI7QUFDSCxLQUZELENBR0EsT0FBT1AsQ0FBUCxFQUFVO0FBQ05wRixNQUFBQSxHQUFHLENBQUMwRixLQUFKLENBQVUsMEJBQVYsRUFBc0NOLENBQXRDO0FBQ0EsV0FBS3ZCLFNBQUwsSUFBa0IsS0FBS0EsU0FBTCxDQUFlOEosVUFBZixDQUEwQixJQUExQixFQUFnQyxNQUFoQyxFQUF3Qyw2QkFBMkJ2SSxDQUFuRSxFQUFzRW5GLGNBQXRFLENBQWxCO0FBQ0g7QUFDSjs7QUFFK0IsUUFBMUIwSywwQkFBMEIsQ0FBQzVKLEtBQUQsRUFBUTRFLE1BQVIsRUFBZ0I7QUFDNUMsUUFBSTtBQUNBLGFBQU8sS0FBS3RELE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhcUwsY0FBYixDQUE0QixZQUE1QixFQUEwQyxDQUFDM00sS0FBRCxFQUFRNEUsTUFBUixDQUExQyxDQUF2QjtBQUNILEtBRkQsQ0FHQSxPQUFPUCxDQUFQLEVBQVU7QUFDTnBGLE1BQUFBLEdBQUcsQ0FBQzBGLEtBQUosQ0FBVSwyQkFBVixFQUF1Q04sQ0FBdkM7QUFDQSxXQUFLdkIsU0FBTCxJQUFrQixLQUFLQSxTQUFMLENBQWU4SixVQUFmLENBQTBCLElBQTFCLEVBQWdDLE1BQWhDLEVBQXdDLDhCQUE0QnZJLENBQXBFLEVBQXVFbkYsY0FBdkUsQ0FBbEI7QUFDSDtBQUNKOztBQUU4QixRQUF6QnVNLHlCQUF5QixDQUFDdkwsSUFBRCxFQUFPMEUsTUFBUCxFQUFlO0FBQzFDLFFBQUk7QUFDQSxhQUFPLEtBQUt0RCxPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYXFMLGNBQWIsQ0FBNEIsV0FBNUIsRUFBeUMsQ0FBQ3pNLElBQUQsRUFBTzBFLE1BQVAsQ0FBekMsQ0FBdkI7QUFDSCxLQUZELENBR0EsT0FBT1AsQ0FBUCxFQUFVO0FBQ05wRixNQUFBQSxHQUFHLENBQUMwRixLQUFKLENBQVUsMEJBQVYsRUFBc0NOLENBQXRDO0FBQ0EsV0FBS3ZCLFNBQUwsSUFBa0IsS0FBS0EsU0FBTCxDQUFlOEosVUFBZixDQUEwQixJQUExQixFQUFnQyxNQUFoQyxFQUF3Qyw2QkFBMkJ2SSxDQUFuRSxFQUFzRW5GLGNBQXRFLENBQWxCO0FBQ0g7QUFDSjs7QUFFd0IsUUFBbkI0RSxtQkFBbUIsR0FBRztBQUN4QixVQUFNK0ksVUFBVSxHQUFHeEUsY0FBS3lFLElBQUwsQ0FBVUMsU0FBVixFQUFxQixXQUFyQixDQUFuQjs7QUFDQSxTQUFLekwsT0FBTCxHQUFlLElBQUkwTCxzQkFBSixDQUFrQixLQUFLaE0sR0FBdkIsRUFBNEI2TCxVQUE1QixFQUF3QyxLQUFLdEwsVUFBN0MsRUFBeUQsS0FBS29DLFVBQTlELEVBQTBFLFFBQTFFLEVBQW9GLEtBQUtsQyxrQkFBekYsQ0FBZjtBQUNBLFVBQU0sS0FBS0gsT0FBTCxDQUFhMkwsS0FBYixFQUFOOztBQUNBLFNBQUtDLGlCQUFMOztBQUNBLFVBQU0sS0FBSzVMLE9BQUwsQ0FBYTZMLGFBQWIsRUFBTjs7QUFDQSxTQUFLQyx5QkFBTDtBQUNIOztBQUVERixFQUFBQSxpQkFBaUIsR0FBRztBQUVoQixVQUFNRyxLQUFLLEdBQUcsSUFBZDs7QUFDQSxTQUFLL0wsT0FBTCxDQUFhZ00sU0FBYixDQUF1QixnQkFBdkIsRUFBeUMsS0FBS0Msb0JBQUwsQ0FBMEJDLElBQTFCLENBQStCLElBQS9CLENBQXpDOztBQUNBLFNBQUtsTSxPQUFMLENBQWFnTSxTQUFiLENBQXVCLGVBQXZCLEVBQXdDLEtBQUtHLG1CQUFMLENBQXlCRCxJQUF6QixDQUE4QixJQUE5QixDQUF4Qzs7QUFDQSxTQUFLbE0sT0FBTCxDQUFhb00sRUFBYixDQUFnQixPQUFoQixFQUEwQkMsT0FBRCxJQUFhO0FBQ2xDLFlBQU07QUFBRWhKLFFBQUFBO0FBQUYsVUFBWWdKLE9BQWxCO0FBQ0ExTyxNQUFBQSxHQUFHLENBQUMwRixLQUFKLENBQVUsd0JBQVYsRUFBb0NBLEtBQXBDOztBQUVBLFVBQUksS0FBS2lKLFFBQVQsRUFBbUI7QUFDZixhQUFLQyxJQUFMLENBQVUsWUFBVixFQUF3QmxKLEtBQXhCO0FBQ0gsT0FGRCxNQUVPO0FBQ0gwSSxRQUFBQSxLQUFLLENBQUM3TCxvQkFBTixHQUE2Qm1ELEtBQTdCO0FBQ0g7QUFDSixLQVREOztBQVVBLFNBQUtyRCxPQUFMLENBQWFvTSxFQUFiLENBQWdCLE1BQWhCLEVBQXlCQyxPQUFELElBQWE7QUFDakMsV0FBS0MsUUFBTCxHQUFnQixJQUFoQjtBQUNBLFlBQU07QUFBRUUsUUFBQUE7QUFBRixVQUFlSCxPQUFyQjs7QUFFQSxVQUFJRyxRQUFRLElBQUlBLFFBQVEsS0FBSyxDQUE3QixFQUFnQztBQUk1QixZQUFJQyxPQUFPLEdBQUcsSUFBZDs7QUFDQSxZQUFJVixLQUFLLENBQUNoTSxZQUFWLEVBQXdCO0FBQ3BCME0sVUFBQUEsT0FBTyxHQUFHVixLQUFLLENBQUNoTCxhQUFoQjtBQUNILFNBRkQsTUFHSyxJQUFJZ0wsS0FBSyxDQUFDbE0sVUFBVixFQUFzQjtBQUN2QjRNLFVBQUFBLE9BQU8sR0FBR1YsS0FBSyxDQUFDeEIscUJBQWhCO0FBQ0g7O0FBQ0QsWUFBSWxILEtBQUssR0FBRzBJLEtBQUssQ0FBQzdMLG9CQUFOLElBQThCLElBQTFDOztBQUNBLFlBQUlzTSxRQUFRLElBQUksR0FBaEIsRUFBcUI7QUFDakJuSixVQUFBQSxLQUFLLEdBQUcsSUFBSXFKLG9CQUFKLENBQWdCOUYsZ0JBQVkrRixTQUFaLENBQXNCQyxZQUF0QyxFQUFvRCwwRkFBcEQsQ0FBUjtBQUNILFNBRkQsTUFHSyxJQUFJLENBQUN2SixLQUFMLEVBQVk7QUFDYkEsVUFBQUEsS0FBSyxHQUFHLElBQUlxSixvQkFBSixDQUFpQixvQ0FBbUNGLFFBQVMsR0FBN0QsQ0FBUjtBQUNIOztBQUVEQyxRQUFBQSxPQUFPLElBQUlBLE9BQU8sQ0FBQ2pDLE1BQVIsQ0FBZW5ILEtBQWYsQ0FBWDs7QUFDQTBJLFFBQUFBLEtBQUssQ0FBQzdJLHFCQUFOO0FBQ0g7QUFDSixLQTFCRDs7QUEyQkEsU0FBS2xELE9BQUwsQ0FBYW9NLEVBQWIsQ0FBZ0IsU0FBaEIsRUFBMkIsTUFBT1MsR0FBUCxJQUFlO0FBQ3RDLFVBQUlBLEdBQUcsQ0FBQzFILEtBQUosSUFBYTBILEdBQUcsQ0FBQzFILEtBQUosS0FBYyxLQUEvQixFQUFzQztBQUNsQyxZQUFJMEgsR0FBRyxDQUFDQyxLQUFKLEtBQWMsT0FBbEIsRUFBMkI7QUFDdkJuUCxVQUFBQSxHQUFHLENBQUNvSCxLQUFKLENBQVU4SCxHQUFHLENBQUNBLEdBQWQ7QUFDSCxTQUZELE1BRU8sSUFBSUEsR0FBRyxDQUFDQyxLQUFKLEtBQWMsTUFBbEIsRUFBMEI7QUFDN0JuUCxVQUFBQSxHQUFHLENBQUNvUCxJQUFKLENBQVNGLEdBQUcsQ0FBQ0EsR0FBYjtBQUNILFNBRk0sTUFFQSxJQUFJQSxHQUFHLENBQUNDLEtBQUosS0FBYyxPQUFsQixFQUEyQjtBQUM5Qm5QLFVBQUFBLEdBQUcsQ0FBQzBGLEtBQUosQ0FBVXdKLEdBQUcsQ0FBQ0EsR0FBZCxFQUFtQkEsR0FBRyxDQUFDRyxHQUF2QjtBQUNILFNBRk0sTUFFQSxJQUFJSCxHQUFHLENBQUNDLEtBQUosS0FBYyxNQUFsQixFQUEwQjtBQUM3Qm5QLFVBQUFBLEdBQUcsQ0FBQ3NGLElBQUosQ0FBUzRKLEdBQUcsQ0FBQ0EsR0FBYjtBQUNIOztBQUVEZCxRQUFBQSxLQUFLLENBQUNRLElBQU4sQ0FBVyxLQUFYLEVBQWtCTSxHQUFHLENBQUNJLElBQXRCLEVBQTRCSixHQUFHLENBQUNDLEtBQWhDLEVBQXVDRCxHQUFHLENBQUNBLEdBQTNDLEVBQWdEQSxHQUFHLENBQUNLLEdBQUosSUFBV3RQLGNBQTNEOztBQUNBbU8sUUFBQUEsS0FBSyxDQUFDdkssU0FBTixJQUFtQnVLLEtBQUssQ0FBQ3ZLLFNBQU4sQ0FBZ0I4SixVQUFoQixDQUEyQnVCLEdBQUcsQ0FBQ0ksSUFBL0IsRUFBcUNKLEdBQUcsQ0FBQ0MsS0FBekMsRUFBZ0RELEdBQUcsQ0FBQ0EsR0FBcEQsRUFBeURBLEdBQUcsQ0FBQ0ssR0FBSixJQUFXdFAsY0FBcEUsQ0FBbkI7QUFDSCxPQWJELE1BY0ssSUFBSWlQLEdBQUcsQ0FBQzFILEtBQUosSUFBYTBILEdBQUcsQ0FBQzFILEtBQUosS0FBYyxhQUEvQixFQUE4QztBQUMvQzRHLFFBQUFBLEtBQUssQ0FBQ1EsSUFBTixDQUFXLGFBQVgsRUFBMEJNLEdBQUcsQ0FBQ3pOLElBQTlCLEVBQW9DeU4sR0FBRyxDQUFDTSxLQUF4QyxFQUErQ04sR0FBRyxDQUFDSSxJQUFuRDtBQUNILE9BRkksTUFHQSxJQUFJSixHQUFHLENBQUMxSCxLQUFKLElBQWEwSCxHQUFHLENBQUMxSCxLQUFKLEtBQWMsZUFBL0IsRUFBZ0Q7QUFDakQsWUFBSTBILEdBQUcsQ0FBQ08sTUFBSixLQUFlLE1BQW5CLEVBQTJCO0FBQ3ZCckIsVUFBQUEsS0FBSyxDQUFDUSxJQUFOLENBQVcsV0FBWCxFQUF3Qk0sR0FBeEI7QUFDSDtBQUNKLE9BSkksTUFLQSxJQUFJQSxHQUFHLENBQUMxSCxLQUFKLElBQWEwSCxHQUFHLENBQUMxSCxLQUFKLEtBQWMsYUFBL0IsRUFBOEM7QUFDL0NuQyxRQUFBQSxPQUFPLENBQUNyRixHQUFSLENBQVksY0FBWixFQUE0QmtQLEdBQTVCO0FBQ0EsY0FBTSxLQUFLbkssT0FBTCxDQUFhLFFBQWIsQ0FBTjtBQUNBLGNBQU0sS0FBS2dCLElBQUwsQ0FBVSxRQUFWLENBQU47QUFDSCxPQUpJLE1BS0EsSUFBSW1KLEdBQUcsQ0FBQzFILEtBQUosSUFBYTBILEdBQUcsQ0FBQzFILEtBQUosS0FBYyxNQUEvQixFQUF1QztBQUN4QzRHLFFBQUFBLEtBQUssQ0FBQ1EsSUFBTixDQUFXLE1BQVgsRUFBbUJNLEdBQW5CO0FBQ0g7QUFDSixLQS9CRDtBQWdDSDs7QUFFRGYsRUFBQUEseUJBQXlCLEdBQUc7QUFDeEIsUUFBSSxDQUFDLEtBQUs5TCxPQUFWLEVBQW1CO0FBQ2Y7QUFDSDs7QUFDRCxTQUFLQSxPQUFMLENBQWE0RCxRQUFiLElBQXlCLEtBQUs1RCxPQUFMLENBQWE0RCxRQUFiLENBQXNCd0ksRUFBdEIsQ0FBeUIsZ0JBQXpCLEVBQTRDaUIsY0FBRCxJQUFvQjtBQUNwRixXQUFLZCxJQUFMLENBQVUsWUFBVixFQUF3QmMsY0FBeEI7QUFDSCxLQUZ3QixDQUF6QjtBQUlBLFNBQUtyTixPQUFMLENBQWE0RCxRQUFiLElBQXlCLEtBQUs1RCxPQUFMLENBQWE0RCxRQUFiLENBQXNCd0ksRUFBdEIsQ0FBeUIscUJBQXpCLEVBQWlEa0IsVUFBRCxJQUFnQjtBQUNyRixXQUFLZixJQUFMLENBQVUsaUJBQVYsRUFBNkJlLFVBQTdCO0FBQ0gsS0FGd0IsQ0FBekI7QUFHSDs7QUFFeUIsUUFBcEJyQixvQkFBb0IsQ0FBQ2xKLENBQUQsRUFBSTtBQUMxQixTQUFLdkIsU0FBTCxJQUFrQixLQUFLQSxTQUFMLENBQWUrTCxXQUFmLENBQTJCLEtBQUs3TixHQUFoQyxFQUFxQ3FELENBQXJDLENBQWxCOztBQUVBLFFBQUk7QUFDQSxVQUFJQSxDQUFDLElBQUlBLENBQUMsQ0FBQ3lLLE1BQVAsSUFBaUJ6SyxDQUFDLENBQUN5SyxNQUFGLEtBQWEsS0FBbEMsRUFBeUMsQ0FFeEMsQ0FGRCxNQUVPO0FBQ0gsZUFBTyxLQUFLeE4sT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWFxTCxjQUFiLENBQTRCLGVBQTVCLEVBQTZDLENBQUN0SSxDQUFELENBQTdDLENBQXZCO0FBQ0g7QUFDSixLQU5ELENBT0EsT0FBT0EsQ0FBUCxFQUFVO0FBQ05wRixNQUFBQSxHQUFHLENBQUMwRixLQUFKLENBQVUsOEJBQVYsRUFBMENOLENBQTFDO0FBQ0EsV0FBS3ZCLFNBQUwsSUFBa0IsS0FBS0EsU0FBTCxDQUFlOEosVUFBZixDQUEwQixJQUExQixFQUFnQyxNQUFoQyxFQUF3QyxpQ0FBK0J2SSxDQUF2RSxFQUEwRW5GLGNBQTFFLENBQWxCO0FBQ0g7QUFDSjs7QUFFd0IsUUFBbkJ1TyxtQkFBbUIsQ0FBQ3BKLENBQUQsRUFBSTtBQUN6QixTQUFLdkIsU0FBTCxJQUFrQixLQUFLQSxTQUFMLENBQWVpTSxTQUFmLENBQXlCLEtBQUsvTixHQUE5QixFQUFtQ3FELENBQUMsQ0FBQ08sTUFBckMsQ0FBbEI7O0FBQ0EsUUFBSTtBQUNBLFVBQUlQLENBQUMsSUFBSUEsQ0FBQyxDQUFDeUssTUFBUCxJQUFpQnpLLENBQUMsQ0FBQ3lLLE1BQUYsS0FBYSxLQUFsQyxFQUF5QyxDQUV4QyxDQUZELE1BRU87QUFDSCxlQUFPLEtBQUt4TixPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYXFMLGNBQWIsQ0FBNEIsY0FBNUIsRUFBNEMsQ0FBQ3RJLENBQUMsQ0FBQ08sTUFBSCxDQUE1QyxDQUF2QjtBQUNIO0FBQ0osS0FORCxDQU9BLE9BQU9QLENBQVAsRUFBVTtBQUNOcEYsTUFBQUEsR0FBRyxDQUFDMEYsS0FBSixDQUFVLDZCQUFWLEVBQXlDTixDQUF6QztBQUNBLFdBQUt2QixTQUFMLElBQWtCLEtBQUtBLFNBQUwsQ0FBZThKLFVBQWYsQ0FBMEIsSUFBMUIsRUFBZ0MsTUFBaEMsRUFBd0MsZ0NBQThCdkksQ0FBdEUsRUFBeUVuRixjQUF6RSxDQUFsQjtBQUNIO0FBQ0o7O0FBRURzRixFQUFBQSxxQkFBcUIsR0FBRztBQUNwQixTQUFLekMsUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUtULE9BQUwsR0FBZSxJQUFmO0FBQ0EsU0FBS0gsVUFBTCxHQUFrQixLQUFsQjtBQUNBLFNBQUtFLFlBQUwsR0FBb0IsS0FBcEI7QUFDQSxTQUFLRCxlQUFMLEdBQXVCLEtBQXZCO0FBQ0EsU0FBS2UsV0FBTCxHQUFtQixLQUFuQjtBQUNBLFNBQUtFLGFBQUwsR0FBcUIsa0JBQXJCO0FBQ0g7O0FBRUR5SSxFQUFBQSxtQkFBbUIsQ0FBQztBQUFFSixJQUFBQSxXQUFGO0FBQWVFLElBQUFBLFVBQWY7QUFBMkJELElBQUFBLE9BQU8sR0FBRyxFQUFyQztBQUF5Q2hHLElBQUFBLEtBQUssR0FBRztBQUFqRCxHQUFELEVBQTBEO0FBRXpFLFFBQUksS0FBS3hDLFdBQVQsRUFBc0I7QUFDbEIsYUFBTyxJQUFQO0FBQ0g7O0FBQ0QsUUFBSXdDLEtBQUosRUFBVztBQUNQLFdBQUtrSixJQUFMLENBQVUsWUFBVixFQUF3QmxKLEtBQXhCO0FBQ0g7O0FBRUQsU0FBSzlDLEtBQUwsR0FBYThJLE9BQU8sQ0FBQ3NCLElBQVIsSUFBZ0IsS0FBS3BLLEtBQWxDO0FBRUEsU0FBS0UsUUFBTCxHQUFnQixFQUFFLEdBQUcsS0FBS0EsUUFBVjtBQUFvQixVQUFHNkksVUFBVSxJQUFJLEVBQWpCO0FBQXBCLEtBQWhCO0FBR0EsUUFBSUQsT0FBTyxDQUFDbkksSUFBWixFQUNJLE9BQU9tSSxPQUFPLENBQUNuSSxJQUFmO0FBRUosUUFBSW1JLE9BQU8sQ0FBQzFILEdBQVosRUFDSSxPQUFPMEgsT0FBTyxDQUFDMUgsR0FBZjtBQUVKLFFBQUkwSCxPQUFPLENBQUN1QixJQUFaLEVBQ0ksT0FBT3ZCLE9BQU8sQ0FBQ3VCLElBQWY7QUFDUDs7QUFFRDhDLEVBQUFBLGlCQUFpQixDQUFDQyxFQUFELEVBQUtDLEVBQUwsRUFBU0MsaUJBQVQsRUFBNEJDLGdCQUE1QixFQUE4Q0MsbUJBQTlDLEVBQW1FO0FBQ2hGLFNBQUt4QixJQUFMLENBQVUsZUFBVixFQUEyQjtBQUN2QjVKLE1BQUFBLE1BQU0sRUFBRW9MLG1CQUFtQixDQUFDQyxPQURMO0FBRXZCeEssTUFBQUEsT0FBTyxFQUFFdUssbUJBQW1CLENBQUN2SyxPQUFwQixJQUErQixJQUZqQjtBQUd2QnFILE1BQUFBLElBQUksRUFBRTtBQUNGOUMsUUFBQUEsRUFBRSxFQUFFNkYsRUFBRSxDQUFDN0YsRUFBSCxJQUFTLElBRFg7QUFFRjNDLFFBQUFBLElBQUksRUFBRXdJLEVBQUUsQ0FBQ3hJLElBRlA7QUFHRjBGLFFBQUFBLFNBQVMsRUFBRWdELGdCQUhUO0FBSUY5RyxRQUFBQSxjQUFjLEVBQUU0RyxFQUFFLENBQUM1RztBQUpqQixPQUhpQjtBQVN2QnRJLE1BQUFBLEtBQUssRUFBRTtBQUNIcUosUUFBQUEsRUFBRSxFQUFFNEYsRUFBRSxDQUFDNUYsRUFBSCxJQUFTLElBRFY7QUFFSDNDLFFBQUFBLElBQUksRUFBRXVJLEVBQUUsQ0FBQ3ZJLElBRk47QUFHSDBGLFFBQUFBLFNBQVMsRUFBRStDLGlCQUhSO0FBSUg3RyxRQUFBQSxjQUFjLEVBQUUyRyxFQUFFLENBQUMzRztBQUpoQjtBQVRnQixLQUEzQjtBQWdCSDs7QUFFRGlILEVBQUFBLFlBQVksQ0FBQzNLLE1BQUQsRUFBUztBQUNqQixTQUFLaUosSUFBTCxDQUFVLFVBQVYsRUFBc0JqSixNQUF0QjtBQUNIOztBQXB4QmtEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvciAqL1xyXG4vKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vLi4vbGliL2xvZ2dlcic7XHJcbmNvbnN0IGxvZyA9IGxvZ2dlcignT3h5Z2VuUnVubmVyJyk7XHJcbmNvbnN0IERFRkFVTFRfSVNTVUVSID0gJ3VzZXInO1xyXG5jb25zdCBNQVhfUkVSVU5TID0gMjtcclxuXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCBfICBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmltcG9ydCBUZXN0U3VpdGVSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvc3VpdGUtcmVzdWx0JztcclxuaW1wb3J0IFRlc3RDYXNlUmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL2Nhc2UtcmVzdWx0JztcclxuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xyXG5pbXBvcnQgU3RhdHVzIGZyb20gJy4uLy4uL21vZGVsL3N0YXR1cyc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vLi4vbGliL3V0aWwnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeHlnZW5FcnJvciBmcm9tICcuLi8uLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgUGFyYW1ldGVyTWFuYWdlciBmcm9tICcuLi8uLi9saWIvcGFyYW0tbWFuYWdlci5qcyc7XHJcbmltcG9ydCBXb3JrZXJQcm9jZXNzIGZyb20gJy4uL1dvcmtlclByb2Nlc3MnO1xyXG5cclxuLy8gc25vb3plIGZ1bmN0aW9uIC0gYXN5bmMgd3JhcHBlciBhcm91bmQgc2V0VGltZW91dCBmdW5jdGlvblxyXG5jb25zdCBzbm9vemUgPSBtcyA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuXHJcbmNvbnN0IGdldFN1aXRlc0JyZWFrcG9pbnRzID0gKHN1aXRlcykgPT4ge1xyXG4gICAgY29uc3QgcmV0dmFsID0gW107XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAgIHN1aXRlcyAmJlxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGVzKSAmJlxyXG4gICAgICAgIHN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgICBzdWl0ZXMubWFwKChzdWl0ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzdWl0ZSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGUuY2FzZXMpICYmXHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubWFwKChjYXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjYXplLmJyZWFrcG9pbnRzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5tYXAoKGJyZWFrcG9pbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbC5wdXNoKGJyZWFrcG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXR2YWw7XHJcbn07XHJcblxyXG5jb25zdCByZW1vdmVCcmVha3BvaW50RnJvbVN1aXRlcyA9IChzdWl0ZXMsIHJlbW92ZUJyZWFrcG9pbnQpID0+IHtcclxuICAgIGlmIChcclxuICAgICAgICBzdWl0ZXMgJiZcclxuICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlcykgJiZcclxuICAgICAgICBzdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgc3VpdGUgJiZcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzICYmXHJcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlLmNhc2VzKSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLm1hcCgoY2F6ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY2F6ZS5icmVha3BvaW50cykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMubWFwKChicmVha3BvaW50LCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50LmZpbGUgPT09IHJlbW92ZUJyZWFrcG9pbnQuZmlsZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQubGluZSA9PT0gcmVtb3ZlQnJlYWtwb2ludC5saW5lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3h5Z2VuUnVubmVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8vIGNsYXNzIHZhcmlhYmxlc1xyXG4gICAgICAgIHRoaXMuX2lkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzRGlzcG9zaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm5wbUdSb290RXhlY3V0aW9uICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG9wdGlvbnMubnBtR1Jvb3RFeGVjdXRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBkZWZpbmUgdmFyaWFibGVzIHRvIGl0ZXJhdGUgdGhyb3VnaCB0ZXN0IGNhc2VzIGFuZCB0ZXN0IHN1aXRlIGl0ZXJhdGlvbnNcclxuICAgICAgICB0aGlzLl9zdWl0ZTtcclxuICAgICAgICB0aGlzLl9lbnZWYXJzID0ge307ICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcGFzc2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRlc3RcclxuICAgICAgICB0aGlzLl92YXJzID0ge307ICAgICAvLyB1c2VyLWRlZmluZWQgdmFyaWFibGVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBzY3JpcHRzXHJcbiAgICAgICAgdGhpcy5fY2FwcyA9IHt9OyAvLyBkZXNpcmVkIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBwYXNzZWQgdG8gZWFjaCBtb2R1bGVcclxuICAgICAgICB0aGlzLl9tb2RDYXBzID0ge307XHJcbiAgICAgICAgdGhpcy5fYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2xvY2FsVGltZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCA9IDM7XHJcbiAgICAgICAgLy8gcHJvbWlzZXNcclxuICAgICAgICB0aGlzLl93aGVuRGlzcG9zZWQgPSBkZWZlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICogUHVibGljIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICBnZXRJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdChvcHRpb25zLCBjYXBzID0ge30sIHJlcG9ydGVyKSB7XHJcbiAgICAgICAgLy8gbWFrZSBzdXJlIGF0IGxlYXN0IG9uZSB0ZXN0IHN1aXRlIGlzIGRlZmluZWRcclxuICAgICAgICBpZiAoIW9wdGlvbnMuc3VpdGVzKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5pdGlhbGl6YXRpb24gZmFpbGVkIC0gbm8gdGVzdCBzdWl0ZXMgYXJlIGRlZmluZWQuIFlvdSBtdXN0IGRlZmluZSBcInN1aXRlc1wiIHByb3BlcnR5IGluIE94eWdlbiBvcHRpb25zLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5fY3dkID0gdGhpcy5fb3B0aW9ucy5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlciA9IHJlcG9ydGVyO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIC8vIG1lcmdlIGN1cnJlbnQgYW5kIHRlc3QgY29uZmlndXJhdGlvbiBiYXNlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcclxuICAgICAgICAgICAgbGV0IG9wdEVudiA9IHt9O1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbnYpIHtcclxuICAgICAgICAgICAgICAgIC8vICdlbnYnIG9wdGlvbiBtaWdodCBiZSBkZWZpbmVkIGVpdGhlciBhcyBhIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IG9yIGFzIGFuIG9iamVjdCB0aGF0IGxpc3RzIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcclxuICAgICAgICAgICAgICAgIC8vIGlmICdlbnYnIGlzIGEgc3RyaW5nLCB0aGVuIHJlc29sdmUgdGhlIGFjdHVhbCB2YXJpYWJsZXMgZnJvbSAnZW52cycgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZW52ID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb3B0aW9ucy5lbnZzID09PSAnb2JqZWN0JyAmJiBvcHRpb25zLmVudnNbb3B0aW9ucy5lbnZdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0RW52ID0gb3B0aW9ucy5lbnZzW29wdGlvbnMuZW52XTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAnZW52JyBpcyBhbiBvYmplY3QsIHVzZSB0aGUgdmFyaWFibGVzIGRlZmluZWQgaW4gaXRcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmVudiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5lbnYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0RW52ID0gb3B0aW9ucy5lbnY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVudlZhcnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5lbnZWYXJzKSkge1xyXG4gICAgICAgICAgICAgICAgb3B0RW52ID0geyAuLi5vcHRFbnYsIC4uLm9wdGlvbnMuZW52VmFycyB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBsYXRlciB1c2VcclxuICAgICAgICAgICAgdGhpcy5fZW52ID0ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZW52LFxyXG4gICAgICAgICAgICAgICAgLi4ub3B0RW52XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSBvcHRpb25zLnRlc3RBdHRyaWJ1dGVzIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2FwcyA9IHsgLi4uY2FwcyB9OyAvLyBhc3NpZ24gY2FwcyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgdGhpcy5fc3VpdGVzID0gWyAuLi5vcHRpb25zLnN1aXRlcyBdO1xyXG4gICAgICAgIC8vIHNldCB1cCBkZWJ1Z2dpbmcgb3B0aW9uc1xyXG4gICAgICAgIC8vIFRPRE86IHRoaXMgbmVlZHMgdG8gYmUgcmVpbXBsZW1lbnRlZC4gRXZlcnl0aGluZyByZWxhdGVkIHRvIGRlYnVnZ2luZyAoaW5pdGlhbGl6ZURlYnVnZ2VyKSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIE94eWdlblxyXG4gICAgICAgIC8vIGFuZCBhZGRlZCB0byBJREUgaW5zdGVhZC4gSS5lLiB0aGUgb25seSB0aGluZyBveHlnZW4gc2hvdWxkIGRvIGlzIHRvIGxhdW5jaCB0aGUgY2hpbGQgcHJvY2VzcyB3aXRoIHRoZSBkZWJ1Z2dpbmcgc3dpdGNoLlxyXG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9ICBvcHRpb25zLmRlYnVnUG9ydElkZSB8fCBvcHRpb25zLmRlYnVnUG9ydCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z1BvcnQgPSBvcHRpb25zLmRlYnVnUG9ydCB8fCBvcHRpb25zLmRlYnVnUG9ydElkZSB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuc2NyaXB0Q29udGVudExpbmVPZmZzZXQgPSB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldDtcclxuICAgICAgICB0aGlzLl9sb2NhbFRpbWUgPSAodGhpcy5fb3B0aW9ucyAmJiB0aGlzLl9vcHRpb25zLmxvY2FsVGltZSkgfHwgdGhpcy5fbG9jYWxUaW1lO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0V29ya2VyUHJvY2VzcygpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9Jbml0T3h5Z2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlciAmJiBhd2FpdCB0aGlzLl93b3JrZXIuc3RvcERlYnVnZ2VyKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmlzUnVubmluZykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0b3Aoc3RhdHVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoZW4gZGlzcG9zaW5nIFJ1bm5lcicsIGUpO1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzIGR1cmluZyB0aGUgZGlzcG9zZVxyXG4gICAgICAgICAgICBsb2cud2FybignRXJyb3Igd2hlbiBkaXNwb3NpbmcgUnVubmVyOicsIGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ0NBTkNFTEVEJykge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldEdsb2JhbFZhcmlhYmxlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBydW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluaXRpYWxpemF0aW9uIGhhc24ndCBiZWVuIGNvbXBsZXRlZCB5ZXQsIHdhaXQgZm9yICdpbml0aWFsaXplZCcgZXZlbnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJldmlvdXMgdGVzdCBpcyBzdGlsbCBydW5uaW5nLCB3YWl0IGZvciAndGVzdC1lbmRlZCcgZXZlbnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uUnVubmVyU3RhcnQodGhpcy5faWQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NhcHMpO1xyXG5cclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1blRlc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFlcnJvciAmJiByZXN1bHQgJiYgcmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSByZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uUnVubmVyRW5kKHRoaXMuX2lkLCByZXN1bHQsIGVycm9yKTtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMga2lsbChzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fdGVzdEtpbGxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmlzUnVubmluZykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIua2lsbChzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWJ1Z0NvbnRpbnVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5jb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVCcmVha3BvaW50cyhicmVha3BvaW50cywgZmlsZVBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVCcmVha3BvaW50cyhicmVha3BvaW50cywgZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdHNCcmVha3BvaW50cyA9IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5nZXRCcmVha3BvaW50cyhmaWxlUGF0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWl0ZXNCcmVha3BvaW50cyA9IGdldFN1aXRlc0JyZWFrcG9pbnRzKHRoaXMuX3N1aXRlcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGJyZWFrcG9pbnRzIGZyb20gc3VpdGVzL2Nhc2VzIHRyZWVcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHN1aXRlQnAgb2Ygc3VpdGVzQnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnRzLmluY2x1ZGVzKHN1aXRlQnAubGluZSkgJiYgIGZpbGVQYXRoID09PSBzdWl0ZUJwLmZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXModGhpcy5fc3VpdGVzLCBzdWl0ZUJwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGRlbGV0ZWQgYnJlYWtwb2ludHNcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGFjdHVhbEN1cnJlbnRCcCBvZiB0c0JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50cy5pbmNsdWRlcyhhY3R1YWxDdXJyZW50QnApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fd29ya2VyLmRlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnRCeVZhbHVlKGZpbGVQYXRoLCBhY3R1YWxDdXJyZW50QnApKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gYWRkIG5ldyBicmVha3BvaW50c1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdXNlclNldEJwIG9mIGJyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0c0JyZWFrcG9pbnRzLmluY2x1ZGVzKHVzZXJTZXRCcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlUGF0aCwgdXNlclNldEJwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlQWxsUHJvbWlzZSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbm9vemUoNTAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ3VwZGF0ZUJyZWFrcG9pbnRzKCkgZG9uZS4nKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zID0gdGhpcy5fd29ya2VyLmRlYnVnZ2VyLmdldEJyZWFrcG9pbnRzKGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwcm9taXNlQWxsUHJvbWlzZSA6IHByb21pc2VBbGxQcm9taXNlLCBicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zIDogYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignRGVidWdnZXIgZXJyb3InLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbENsb3NlKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5fc2VuZCh7XHJcbiAgICAgICAgICAgIGV2ZW50OiAncmVwbCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdyZXBsX3N0b3AnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbFNlbmQoY21kKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLl9zZW5kKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdyZXBsJyxcclxuICAgICAgICAgICAgbmFtZTogJ3JlcGxfZXZhbCcsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICAgIGNtZDogY21kXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXBsU3RhcnQoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZSgncmVwbFN0YXJ0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QnJlYWtwb2ludChsaW5lKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl9zdWl0ZSAmJiB0aGlzLl9zdWl0ZS50ZXN0Y2FzZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdGMgPSB0aGlzLl9zdWl0ZS50ZXN0Y2FzZXNbdGNpbmRleF07XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1Zygnb3h5Z2VuLnNldEJyZWFrcG9pbnQ6ICcgKyAobGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0KSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50KHRjLm5hbWUsIGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCk7XHJcbiAgICAgICAgfSovXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJCcmVha3BvaW50KGxpbmUpIHtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5jbGVhckJyZWFrcG9pbnQobGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0LCBudWxsKTtcclxuICAgICAgICB9Ki9cclxuICAgIH1cclxuXHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiBQcml2YXRlIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4gICAgYXN5bmMgX3J1blRlc3QoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRlc3RSZXN1bHQoKTtcclxuICAgICAgICByZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgIHJlc3VsdC5zdWl0ZXMgPSBbXTtcclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIC8vIGNhbGwgYmVmb3JlVGVzdCBob29rXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vaygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBzdWl0ZXNcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgdGhpcy5fc3VpdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1blN1aXRlKHN1aXRlKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMucHVzaChzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICByZXN1bHQuZHVyYXRpb24gPSByZXN1bHQuZW5kVGltZSAtIHJlc3VsdC5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN1aXRlcyA9IHJlc3VsdC5zdWl0ZXMuc29tZShzdWl0ZUl0ZXJhdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3VpdGVJdGVyYXRpb25zICYmIEFycmF5LmlzQXJyYXkoc3VpdGVJdGVyYXRpb25zKSAmJiBzdWl0ZUl0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlSXRlcmF0aW9ucy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSBoYXNGYWlsZWRTdWl0ZXMgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICByZXN1bHQuZW52aXJvbm1lbnQgPSB7IC4uLnRoaXMuX2VudiB9O1xyXG4gICAgICAgIC8vIGNvbWJpbmUgdGVzdCBkZWZpbmVkIGNhcHMgYW5kIHBlciBtb2R1bGUgY2FwYWJpbGl0aWVzLCB0aGF0IHdlcmUgcGFzc2VkIGJ5IHVzZXIgaW4gZWFjaCBtb2R1bGUncyBpbml0IGZ1bmN0aW9uXHJcbiAgICAgICAgcmVzdWx0LmNhcGFiaWxpdGllcyA9IHsgLi4udGhpcy5fY2FwcywgLi4udGhpcy5fbW9kQ2FwcyB9OyAgICAvLyBhc3NpZ24gYSBjb3B5IG9mIF9jYXBzIG9iamVjdFxyXG4gICAgICAgIHJlc3VsdC5vcHRpb25zID0geyAuLi50aGlzLl9vcHRpb25zIH07ICAvLyBhc3NpZ24gYSBjb3B5IG9mIF9vcHRpb25zIG9iamVjdFxyXG5cclxuICAgICAgICAvLyBpZiBlcnJvciBvY2N1cmVkLCBhZGQgaXQgdG8gdGhlIHN1bW1hcnlcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJUZXN0SG9vayhyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3J1blN1aXRlKHN1aXRlKSB7XHJcbiAgICAgICAgaWYgKCFzdWl0ZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ3N1aXRlIGlzIG51bGwgaW4gX3J1blN1aXRlKCkhISEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWdub3JlIHN1aXRlIHdpdGggbWlzc2luZyBtYW5kYXRvcnkgcHJvcGVydGllc1xyXG4gICAgICAgIGlmICghc3VpdGUubmFtZSAmJiAhc3VpdGUucGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBhbHdheXMgc3BlY2lmeSBzdWl0ZS5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgIGlmICghc3VpdGUuaXRlcmF0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHN1aXRlLml0ZXJhdGlvbkNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICBzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVSdW5PbkZhaWx1cmUgPSB0aGlzLl9vcHRpb25zLnJlUnVuT25GYWlsZWQgfHwgZmFsc2U7XHJcbiAgICAgICAgLy8gc2luZ2xlIHN1aXRlIG1pZ2h0IHByb2R1Y2UgbXVsdGlwbGUgcmVzdWx0cywgYmFzZWQgb24gYW1vdW50IG9mIGRlZmluZWQgaXRlcmF0aW9uc1xyXG4gICAgICAgIGNvbnN0IHN1aXRlSXRlcmF0aW9ucyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHN1aXRlSXRlcmF0aW9uPTE7IHN1aXRlSXRlcmF0aW9uIDw9IHN1aXRlLml0ZXJhdGlvbkNvdW50OyBzdWl0ZUl0ZXJhdGlvbisrKSB7XHJcbiAgICAgICAgICAgIGlmIChzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uU3RhcnQodGhpcy5faWQsIHN1aXRlSXRlcmF0aW9uLCAnU3VpdGUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IG5ldyBUZXN0U3VpdGVSZXN1bHQoKTtcclxuICAgICAgICAgICAgc3VpdGVJdGVyYXRpb25zLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5uYW1lID0gc3VpdGUubmFtZSB8fCBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHN1aXRlLnBhdGgpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IHN1aXRlSXRlcmF0aW9uO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayhzdWl0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uU3VpdGVTdGFydCh0aGlzLl9pZCwgc3VpdGUudXJpLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNhemUgb2Ygc3VpdGUuY2FzZXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBjYXNlcyB3aXRoIG1pc3NpbmcgbWFuZGF0b3J5ICdwYXRoJyBwcm9wZXJ0eSBcclxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhemUubmFtZSA9IG94dXRpbC5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoY2F6ZS5wYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5pdGVyYXRpb25Db3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhemUuaXRlcmF0aW9uQ291bnQgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2FzZUl0ZXJhdGlvbj0xOyBjYXNlSXRlcmF0aW9uIDw9IGNhemUuaXRlcmF0aW9uQ291bnQ7IGNhc2VJdGVyYXRpb24rKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2F6ZSAmJiBjYXplLml0ZXJhdGlvbkNvdW50ICYmIGNhemUuaXRlcmF0aW9uQ291bnQgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uU3RhcnQodGhpcy5faWQsIGNhc2VJdGVyYXRpb24sICdDYXNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBjYXNlIHN0YXJ0IGV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25DYXNlU3RhcnQodGhpcy5faWQsIHN1aXRlLnVyaSB8fCBzdWl0ZS5pZCwgY2F6ZS51cmkgfHwgY2F6ZS5pZCB8fCBjYXplLnBhdGgsIGNhemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vbGV0IHJlUnVuQ291bnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYXNlUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJ1biBvciByZS1ydW4gdGhlIGN1cnJlbnQgdGVzdCBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcmVSdW5Db3VudCA9IDA7IHJlUnVuQ291bnQgPCBNQVhfUkVSVU5TOyByZVJ1bkNvdW50KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZVJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1bkNhc2Uoc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCByZVJ1bkNvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghY2FzZVJlc3VsdCB8fCBjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkgJiYgIXJlUnVuT25GYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYXNlUmVzdWx0ICYmIGNhc2VSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyByZXBvcnQgY2FzZSBlbmQgZXZlbnRcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkNhc2VFbmQodGhpcy5faWQsIHN1aXRlLnVyaSB8fCBzdWl0ZS5pZCwgY2F6ZS51cmkgfHwgY2F6ZS5pZCwgY2FzZVJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uRW5kKHRoaXMuX2lkLCBjYXNlUmVzdWx0LCAnQ2FzZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgY2FzZSByZXN1bHQgdG8gdGhlIHN1aXRlIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0LmNhc2VzLnB1c2goY2FzZVJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGVzdCBjYXNlIGl0ZXJhdGlvbiBoYXMgZmFpbGVkLCB0aGVuIG1hcmsgdGhlIGVudGlyZSB0ZXN0IGNhc2UgYXMgZmFpbGVkLCBcclxuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIGl0ZXJhdGluZyBvdmVyIGl0IGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHRlc3QgY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LmR1cmF0aW9uID0gc3VpdGVSZXN1bHQuZW5kVGltZSAtIHN1aXRlUmVzdWx0LnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uRW5kKHRoaXMuX2lkLCBzdWl0ZVJlc3VsdCwgJ1N1aXRlJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJTdWl0ZUhvb2soc3VpdGUsIHN1aXRlUmVzdWx0KTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIub25TdWl0ZUVuZCh0aGlzLl9pZCwgc3VpdGUudXJpLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZUl0ZXJhdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3J1bkNhc2Uoc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCByZVJ1bkNvdW50ID0gMCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHJlUnVuID0gcmVSdW5Db3VudCA+IDA7XHJcbiAgICAgICAgLy8gZ2V0IHRlc3Qgc3VpdGUncyBwYXJhbWV0ZXJzIGlmIGRlZmluZWRcclxuICAgICAgICAvLyBnZXQgdGhlbSBmaXJzdCBhbmQgdGhlbiBvdmVycmlkZSB3aXRoIHRlc3QgY2FzZSBsZXZlbCBwYXJhbWV0ZXJzIGlmIGRlZmluZWRcclxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIC8qaWYgKHJlUnVuKSB7XHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIucmVhZFByZXYoKTtcclxuICAgICAgICAgICAgfSovXHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgc3VpdGUucGFyYW1NYW5hZ2VyLmdldFZhbHVlcygpKTtcclxuICAgICAgICAgICAgaWYgKCFyZVJ1bikge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVhZCB0ZXN0IGNhc2UncyBuZXh0IGxpbmVzIG9mIHBhcmFtZXRlcnMgaWYgcGFyYW1ldGVyIG1hbmFnZXIgaXMgZGVmaW5lZFxyXG4gICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAvKmlmIChyZVJ1bikge1xyXG4gICAgICAgICAgICAgICAgY2F6ZS5wYXJhbU1hbmFnZXIucmVhZFByZXYoKTtcclxuICAgICAgICAgICAgfSovXHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgY2F6ZS5wYXJhbU1hbmFnZXIuZ2V0VmFsdWVzKCkpO1xyXG4gICAgICAgICAgICBpZiAoIXJlUnVuKSB7XHJcbiAgICAgICAgICAgICAgICBjYXplLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGQgYnJlYWtwb2ludHMgYmVmb3JlIHJ1bm5pbmcgdGhlIHNjcmlwdCBpZiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIGNhemUuYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlZGl0b3IgaW5kZXggc3RhcnRzIGZyb20gMSwgYnV0IHdlIG5lZWQgemVybyBiYXNlZCBpbmRleFxyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjYXplLmJyZWFrcG9pbnRzW2ldLmxpbmU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IGNhemUuYnJlYWtwb2ludHNbaV0uZmlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlLCBsaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpO1xyXG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBuZXcgVGVzdENhc2VSZXN1bHQoKTtcclxuICAgICAgICBjYXNlUmVzdWx0Lm5hbWUgPSBjYXplLm5hbWU7XHJcbiAgICAgICAgY2FzZVJlc3VsdC5sb2NhdGlvbiA9IGNhemUucGF0aDtcclxuICAgICAgICBjYXNlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IGNhc2VJdGVyYXRpb247XHJcbiAgICAgICAgY2FzZVJlc3VsdC5yZVJ1bkNvdW50ID0gcmVSdW5Db3VudDtcclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIGluaXRpYWxpemUgT3h5Z2VuIGFuZCBoYW5kbGUgYW55IHBvc3NpYmxlIGVycm9yXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKCEodGhpcy5fd29ya2VyKSAmJiB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ193b3JrZXJfSW5pdE94eWdlbigpIHRocm93biBhbiBlcnJvcjonLCBlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGFydFRpbWUgPSBjYXNlUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZHVyYXRpb24gPSAwO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGUpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgIHJldHVybiBjYXNlUmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdGFydCBuZXcgdGVzdCBzZXNzaW9uXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX3N0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgIC8vIHJ1biB0aGUgdGVzdCBpbiB0aGUgd29ya2VyIHByb2Nlc3MgYW5kIGhhbmRsZSBhbnkgcG9zc2libGUgZXJyb3JcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgY29uc3QgeyByZXN1bHRTdG9yZSwgY29udGV4dCwgbW9kdWxlQ2FwcywgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX3dvcmtlcl9SdW4oc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgY29udGV4dCwgZXJyb3IsIG1vZHVsZUNhcHMgfSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5kdXJhdGlvbiA9IGNhc2VSZXN1bHQuZW5kVGltZSAtIGNhc2VSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0ZXBzID0gcmVzdWx0U3RvcmUgJiYgcmVzdWx0U3RvcmUuc3RlcHMgPyByZXN1bHRTdG9yZS5zdGVwcyA6IFtdO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmxvZ3MgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5sb2dzID8gcmVzdWx0U3RvcmUubG9ncyA6IFtdO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmhhciA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmhhciA/IHJlc3VsdFN0b3JlLmhhciA6IG51bGw7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQudGVzdEF0dHJpYnV0ZXMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5hdHRyaWJ1dGVzID8gcmVzdWx0U3RvcmUuYXR0cmlidXRlcyA6IG51bGw7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuYXR0YWNobWVudHMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5hdHRhY2htZW50cyA/IHJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSB0ZXN0IGNhc2UgaXRlcmF0aW9uIHN0YXR1cyAtIG1hcmsgaXQgYXMgZmFpbGVkIGlmIGFueSBzdGVwIGhhcyBmYWlsZWRcclxuICAgICAgICAgICAgdmFyIGZhaWxlZFN0ZXBzID0gXy5maW5kKGNhc2VSZXN1bHQuc3RlcHMsIHtzdGF0dXM6IFN0YXR1cy5GQUlMRUR9KTtcclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzdGVwcyB3aXRoIFdhcm5pbmcgc3RhdHVzXHJcbiAgICAgICAgICAgIHZhciB3YXJuaW5nU3RlcHMgPSBfLmZpbmQoY2FzZVJlc3VsdC5zdGVwcywge3N0YXR1czogU3RhdHVzLldBUk5JTkd9KTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBfLmlzRW1wdHkoZmFpbGVkU3RlcHMpICYmICFlcnJvciA/IFN0YXR1cy5QQVNTRUQgOiBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQuZmFpbHVyZSA9IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGVwcyA9IG94dXRpbC5tYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQoY2FzZVJlc3VsdC5zdGVwcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIV8uaXNFbXB0eSh3YXJuaW5nU3RlcHMpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJDYXNlSG9vayhjYXplLCBjYXNlUmVzdWx0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignX3dvcmtlcl9SdW4oKSB0aHJvd24gYW4gZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRpc3Bvc2VPeHlnZW5Nb2R1bGVzID0gdHlwZW9mIHRoaXMuX29wdGlvbnMuYXV0b0Rpc3Bvc2UgIT09ICdib29sZWFuJyB8fCB0aGlzLl9vcHRpb25zLmF1dG9EaXNwb3NlID09PSB0cnVlO1xyXG4gICAgICAgIC8vIGVuZCBzZXNzaW9uIGFuZCBkaXNwb3NlIE94eWdlbiBtb2R1bGVzIGlmIHJlcXVpcmVkXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2VuZFNlc3Npb24oY2FzZVJlc3VsdC5zdGF0dXMsIGRpc3Bvc2VPeHlnZW5Nb2R1bGVzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9SdW4oc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCBwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3dvcmtlcikge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ193b3JrZXIgaXMgbnVsbCBidXQgbm90IHN1cHBvc2UgdG8hJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3doZW5UZXN0Q2FzZUZpbmlzaGVkLnJlamVjdChuZXcgRXJyb3IoJ193b3JrZXIgaXMgbnVsbCcpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YXJ0IHJ1bm5pbmcgdGhlIHRlc3RcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fd29ya2VyLnJ1bih7XHJcbiAgICAgICAgICAgIHNjcmlwdE5hbWU6IGNhemUubmFtZSxcclxuICAgICAgICAgICAgc2NyaXB0UGF0aDogY2F6ZS5wYXRoLFxyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIGVudjogdGhpcy5fZW52LFxyXG4gICAgICAgICAgICAgICAgY2FwczogdGhpcy5fY2FwcyxcclxuICAgICAgICAgICAgICAgIHZhcnM6IHRoaXMuX3ZhcnMsXHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0aGlzLl9hdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgdGVzdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY2F6ZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb246IGNhc2VJdGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHN1aXRlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogc3VpdGVJdGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBvRmlsZTogdGhpcy5fb3B0aW9ucy5wbyB8fCBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfSW5pdE94eWdlbigpIHtcclxuICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbml0T3h5Z2VuKHRoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9zdGFydFNlc3Npb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuc3RhcnRTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdGFydFNlc3Npb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9lbmRTZXNzaW9uKHN0YXR1cyA9IG51bGwsIGRpc3Bvc2VNb2R1bGVzID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmVuZFNlc3Npb24pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmVuZFNlc3Npb24oc3RhdHVzLCBkaXNwb3NlTW9kdWxlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZVRlc3RIb29rKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2spIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlVGVzdCcsIFt0aGlzLl9pZCwgdGhpcy5fb3B0aW9ucywgdGhpcy5fY2Fwc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVUZXN0XCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVUZXN0XCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayhzdWl0ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2spIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlU3VpdGUnLCBbc3VpdGVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYmVmb3JlU3VpdGVcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZVN1aXRlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlQ2FzZScsIFtjYXplXSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYmVmb3JlQ2FzZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlQ2FzZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2NhbGxBZnRlclRlc3RIb29rKHJlc3VsdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlclRlc3QnLCBbdGhpcy5faWQsIHJlc3VsdF0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImFmdGVyVGVzdFwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJUZXN0XCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rKHN1aXRlLCByZXN1bHQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJTdWl0ZScsIFtzdWl0ZSwgcmVzdWx0XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJTdWl0ZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJTdWl0ZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2NhbGxBZnRlckNhc2VIb29rKGNhemUsIHJlc3VsdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlckNhc2UnLCBbY2F6ZSwgcmVzdWx0XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJDYXNlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlckNhc2VcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3N0YXJ0V29ya2VyUHJvY2VzcygpIHtcclxuICAgICAgICBjb25zdCB3b3JrZXJQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3dvcmtlci5qcycpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG5ldyBXb3JrZXJQcm9jZXNzKHRoaXMuX2lkLCB3b3JrZXJQYXRoLCB0aGlzLl9kZWJ1Z01vZGUsIHRoaXMuX2RlYnVnUG9ydCwgJ094eWdlbicsIHRoaXMuX25wbUdSb290RXhlY3V0aW9uKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnQoKTtcclxuICAgICAgICB0aGlzLl9ob29rV29ya2VyRXZlbnRzKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0RGVidWdnZXIoKTtcclxuICAgICAgICB0aGlzLl9ob29rV29ya2VyRGVidWdnZXJFdmVudHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBfaG9va1dvcmtlckV2ZW50cygpIHtcclxuICAgICAgICAvLyBwcmVzZXJ2ZSB0aGlzIG9iamVjdFxyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLl93b3JrZXIuc3Vic2NyaWJlKCdjb21tYW5kOmJlZm9yZScsIHRoaXMuX2hhbmRsZUJlZm9yZUNvbW1hbmQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyLnN1YnNjcmliZSgnY29tbWFuZDphZnRlcicsIHRoaXMuX2hhbmRsZUFmdGVyQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl93b3JrZXIub24oJ2Vycm9yJywgKHBheWxvYWQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdXb3JrZXIgcHJvY2VzcyBlcnJvcjogJywgZXJyb3IpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZXhpdERvbmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgndGVzdC1lcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yID0gZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl93b3JrZXIub24oJ2V4aXQnLCAocGF5bG9hZCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV4aXREb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgeyBleGl0Q29kZSB9ID0gcGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgIGlmIChleGl0Q29kZSAmJiBleGl0Q29kZSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRlc3QgaXMgcnVubmluZyBvciBpcyBiZWluZyBkaXNwb3NlZCBhbmQgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGRpZWQsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIGVuZCB0aGUgdGVzdCBvciBkaXNwb3NhbCB3aXRoIGZhdGFsIGVycm9yXHJcbiAgICAgICAgICAgICAgICAvLyAoY2hpbGQgcHJvY2VzcyBub3Qgc3VwcG9zZSB0byBkaWUgd2l0aCBjb2RlID4gMClcclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5faXNEaXNwb3NpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gX3RoaXMuX3doZW5EaXNwb3NlZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLl9pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gX3RoaXMuX3doZW5UZXN0Q2FzZUZpbmlzaGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gX3RoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChleGl0Q29kZSA9PSAxMzQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBPeHlnZW5FcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnT3V0IG9mIG1lbW9yeSBlcnJvci4gTWFrZSBzdXJlIHRoYXQgeW91IGRvblxcJ3QgaGF2ZSBhbnkgbWVtb3J5IGxlYWtzIGluIHRoZSB0ZXN0IHNjcmlwdC4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IE94eWdlbkVycm9yKGBXb3JrZXIgcHJvY2VzcyBleGl0ZWQgd2l0aCBjb2RlOiAke2V4aXRDb2RlfS5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwcm9taXNlICYmIHByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9yZXNldEdsb2JhbFZhcmlhYmxlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyLm9uKCdtZXNzYWdlJywgYXN5bmMgKG1zZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtc2cubGV2ZWwgPT09ICdERUJVRycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcobXNnLm1zZyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5sZXZlbCA9PT0gJ0lORk8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8obXNnLm1zZyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5sZXZlbCA9PT0gJ0VSUk9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcihtc2cubXNnLCBtc2cuZXJyKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnV0FSTicpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cud2Fybihtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdsb2cnLCBtc2cudGltZSwgbXNnLmxldmVsLCBtc2cubXNnLCBtc2cuc3JjIHx8IERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9yZXBvcnRlciAmJiBfdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShtc2cudGltZSwgbXNnLmxldmVsLCBtc2cubXNnLCBtc2cuc3JjIHx8IERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnbGluZS11cGRhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdsaW5lLXVwZGF0ZScsIG1zZy5saW5lLCBtc2cuc3RhY2ssIG1zZy50aW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAncmVzdWx0LXVwZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtc2cubWV0aG9kID09PSAnaW5pdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdpbml0LWRvbmUnLCBtc2cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICd3b3JrZXJFcnJvcicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd3b3JrZXJFcnJvcjonLCBtc2cpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNwb3NlKCdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMua2lsbCgnZmFpbGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ3JlcGwnKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdyZXBsJywgbXNnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9ob29rV29ya2VyRGVidWdnZXJFdmVudHMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLm9uKCdkZWJ1Z2dlcjpicmVhaycsIChicmVha3BvaW50RGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrcG9pbnQnLCBicmVha3BvaW50RGF0YSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIub24oJ2RlYnVnZ2VyOmJyZWFrRXJyb3InLCAoYnJlYWtFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrcG9pbnRFcnJvcicsIGJyZWFrRXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9oYW5kbGVCZWZvcmVDb21tYW5kKGUpIHtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vblN0ZXBTdGFydCh0aGlzLl9pZCwgZSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubW9kdWxlICYmIGUubW9kdWxlID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlQ29tbWFuZCcsIFtlXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9oYW5kbGVBZnRlckNvbW1hbmQoZSkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uU3RlcEVuZCh0aGlzLl9pZCwgZS5yZXN1bHQpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubW9kdWxlICYmIGUubW9kdWxlID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJDb21tYW5kJywgW2UucmVzdWx0XSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlckNvbW1hbmRcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyQ29tbWFuZFwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfcmVzZXRHbG9iYWxWYXJpYWJsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93aGVuRGlzcG9zZWQgPSBkZWZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgbW9kdWxlQ2FwcywgY29udGV4dCA9IHt9LCBlcnJvciA9IG51bGwgfSkge1xyXG4gICAgICAgIC8vIGlmIHRlc3Qgd2FzIGtpbGxlZCBiZWZvcmUgYW55IHJlc3VsdHMgd2VyZSBnZW5lcmF0ZWQsIHRoZW4ganVzdCBmaW5hbGl6ZSB0aGUgdGVzdCB3aXRob3V0IHByb2Nlc3NpbmcgcmVzdWx0c1xyXG4gICAgICAgIGlmICh0aGlzLl90ZXN0S2lsbGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdG9yZSAndmFycycgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgYSBsYXRlciB1c2VcclxuICAgICAgICB0aGlzLl92YXJzID0gY29udGV4dC52YXJzIHx8IHRoaXMuX3ZhcnM7XHJcbiAgICAgICAgLy8gc3RvcmUgJ21vZENhcHMnIHBhcnQgb2YgdGhlIGNvbnRleHQgZm9yIGEgbGF0ZXIgdXNlXHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHsgLi4udGhpcy5fbW9kQ2FwcywgLi4ubW9kdWxlQ2FwcyB8fCB7fSB9O1xyXG4gICAgICAgIC8vIGNsZWFuIHVwIGNvbnRleHQgZnJvbSBpbnRlcm5hbCBlbGVtZW50cywgbm90IG5lZWQgaW4gdGhlIHJlcG9ydDpcclxuICAgICAgICAvLyByZW1vdmUgY2FwcyBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcclxuICAgICAgICBpZiAoY29udGV4dC5jYXBzKVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5jYXBzO1xyXG4gICAgICAgIC8vIHJlbW92ZSBlbnYgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQuZW52KVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5lbnY7XHJcbiAgICAgICAgLy8gcmVtb3ZlIHRlc3QgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQudGVzdClcclxuICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQudGVzdDtcclxuICAgIH1cclxuXHJcbiAgICBfZW1pdEl0ZXJhdGlvbkVuZCh0cywgdGMsIHN1aXRlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdpdGVyYXRpb24tZW5kJywge1xyXG4gICAgICAgICAgICBzdGF0dXM6IGNhc2VJdGVyYXRpb25SZXN1bHQuX3N0YXR1cyxcclxuICAgICAgICAgICAgZmFpbHVyZTogY2FzZUl0ZXJhdGlvblJlc3VsdC5mYWlsdXJlIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNhc2U6IHtcclxuICAgICAgICAgICAgICAgIGlkOiB0Yy5pZCB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdGMubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogY2FzZUl0ZXJhdGlvbk51bSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0Yy5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWl0ZToge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRzLmlkIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0cy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBzdWl0ZUl0ZXJhdGlvbk51bSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0cy5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2VtaXRUZXN0RW5kKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgndGVzdC1lbmQnLCByZXN1bHQpO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IHsgUGFyYW1ldGVyTWFuYWdlciB9OyJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxygen-cli",
3
- "version": "1.30.2",
3
+ "version": "1.31.0",
4
4
  "description": "Automation framework for testing modern applications",
5
5
  "main": "./build/index.js",
6
6
  "bin": {
@@ -72,6 +72,7 @@
72
72
  "cucumber": "6.0.5",
73
73
  "deasync": "0.1.28",
74
74
  "decache": "4.6.1",
75
+ "download": "8.0.0",
75
76
  "easyxml": "2.0.1",
76
77
  "ejs": "3.1.9",
77
78
  "esm": "3.2.25",