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.
@@ -16,6 +16,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
16
16
  */
17
17
  const errHelper = require('../errors/helper');
18
18
 
19
+ const {
20
+ v1
21
+ } = require('uuid');
22
+
19
23
  const providers = {
20
24
  PERFECTO: 'perfecto',
21
25
  BROWSERSTACK: 'browserstack',
@@ -418,6 +422,13 @@ module.exports = {
418
422
  if (hasCircularDependency) {
419
423
  throw new _OxygenError.default(errHelper.errorCode.CIRCULAR_ERROR, hasCircularDependency);
420
424
  }
421
- }
425
+ },
426
+ newVideoAttachment: (fileName, videoUrl) => ({
427
+ id: v1(),
428
+ fileName,
429
+ type: 'video',
430
+ subtype: 'screencast',
431
+ _url: videoUrl
432
+ })
422
433
  };
423
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL3V0aWxzLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJwcm92aWRlcnMiLCJQRVJGRUNUTyIsIkJST1dTRVJTVEFDSyIsIlNBVUNFTEFCUyIsIkxBTUJEQVRFU1QiLCJURVNUSU5HQk9UIiwiY29udGV4dExpc3QiLCJhbmRyb2lkIiwiaW9zIiwiaHlicmlkIiwid2ViIiwiaXNFbGVtZW50Tm90Rm91bmQiLCJlbCIsInJlc3VsdCIsImVycm9yIiwibWVzc2FnZSIsInN0YXJ0c1dpdGgiLCJtb2R1bGUiLCJleHBvcnRzIiwibWF0Y2hQYXR0ZXJuIiwidmFsIiwicGF0dGVybiIsImdsb2JUb1JlZ2V4IiwidG9TdHJpbmciLCJyZXBsYWNlIiwicmVnZXgiLCJpbmRleE9mIiwiUmVnRXhwIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwidGVzdCIsImZsYWdzIiwiZ2V0RWxlbWVudCIsImxvY2F0b3IiLCJ3YWl0Rm9yVmlzaWJsZSIsInRpbWVvdXQiLCJ0aHJvd0V4Y2VwdGlvbiIsInNldFRpbWVvdXRJbXBsaWNpdCIsImNhbGwiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJoZWxwZXJzIiwiZ2V0V2Rpb0xvY2F0b3IiLCJkcml2ZXIiLCIkIiwiZWxlbWVudE5vdEZvdW5kIiwicmVzdG9yZVRpbWVvdXRJbXBsaWNpdCIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJFTEVNRU5UX05PVF9GT1VORCIsIndhaXRGb3JEaXNwbGF5ZWQiLCJ3YWl0Rm9yVGltZW91dCIsImUiLCJpbmNsdWRlcyIsIkVMRU1FTlRfTk9UX1ZJU0lCTEUiLCJnZXRFbGVtZW50cyIsImVscyIsIiQkIiwiZWxlbWVudHNOb3RGb3VuZCIsImdldENoaWxkRWxlbWVudCIsInBhcmVudEVsZW1lbnQiLCJTQ1JJUFRfRVJST1IiLCJnZXRDaGlsZEVsZW1lbnRzIiwic2VsZW5pdW1UaW1lb3V0Iiwic2VsZW5pdW1Ccm93c2VyVGltZW91dCIsInRpbWVvdXRzIiwiY2FwYWJpbGl0aWVzIiwiYnJvd3Nlck5hbWUiLCJnZXRUaW1lb3V0cyIsInN0b3BVcmwiLCJjb25zb2xlIiwibG9nIiwiaW1wbGljaXQiLCJfcHJldkltcGxpY2l0VGltZW91dCIsInBhZ2VMb2FkIiwiX3ByZXZQYWdlTG9hZFRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiYXNzZXJ0QXJndW1lbnQiLCJhcmciLCJ1bmRlZmluZWQiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydENvbnRleHQiLCJhbG93ZWRDb250ZXh0cyIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiaXNXZWIiLCJzdWJzdHIiLCJnZXRMb2dUeXBlcyIsInByb3ZpZGVyIiwiZGV0ZXJtaW5lUHJvdmlkZXIiLCJ3ZGlvT3B0cyIsImhvc3RuYW1lIiwiaGFzQ2lyY3VsYXJEZXBlbmRlbmN5Iiwib2JqIiwiSlNPTiIsInN0cmluZ2lmeSIsIlN0cmluZyIsImFzc2VydENpcmN1bGFyIiwiQ0lSQ1VMQVJfRVJST1IiXSwibWFwcGluZ3MiOiI7Ozs7QUFVQTs7OztBQVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF6Qjs7QUFHQSxNQUFNQyxTQUFTLEdBQUc7QUFDZEMsRUFBQUEsUUFBUSxFQUFFLFVBREk7QUFFZEMsRUFBQUEsWUFBWSxFQUFFLGNBRkE7QUFHZEMsRUFBQUEsU0FBUyxFQUFFLE9BSEc7QUFJZEMsRUFBQUEsVUFBVSxFQUFFLFFBSkU7QUFLZEMsRUFBQUEsVUFBVSxFQUFFO0FBTEUsQ0FBbEI7QUFRQSxNQUFNQyxXQUFXLEdBQUc7QUFD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O0FBQ0gsS0FGTSxNQUVBLElBQUk0RixRQUFRLENBQUM5QixZQUFULENBQXNCLG9CQUF0QixDQUFKLEVBQWlEO0FBQ3BELGFBQU9sRSxTQUFTLENBQUNLLFVBQWpCO0FBQ0g7O0FBRUQsV0FBTyxJQUFQO0FBQ0gsR0FuWFk7QUFxWGI2RixFQUFBQSxxQkFBcUIsRUFBRSxVQUFVQyxHQUFWLEVBQWU7QUFDbEMsUUFBSTtBQUNBQyxNQUFBQSxJQUFJLENBQUNDLFNBQUwsQ0FBZUYsR0FBZjtBQUNILEtBRkQsQ0FFRSxPQUFPL0MsQ0FBUCxFQUFVO0FBQ1IsVUFBSWtELE1BQU0sQ0FBQ2xELENBQUQsQ0FBTixDQUFVQyxRQUFWLENBQW1CLHVDQUFuQixDQUFKLEVBQWlFO0FBQzdELGVBQU9pRCxNQUFNLENBQUNsRCxDQUFELENBQWI7QUFDSDtBQUNKOztBQUNELFdBQU8sS0FBUDtBQUNILEdBOVhZO0FBZ1libUQsRUFBQUEsY0FBYyxFQUFFLFVBQVNKLEdBQVQsRUFBYztBQUMxQixVQUFNRCxxQkFBcUIsR0FBRyxLQUFLQSxxQkFBTCxDQUEyQkMsR0FBM0IsQ0FBOUI7O0FBQ0EsUUFBSUQscUJBQUosRUFBMkI7QUFDdkIsWUFBTSxJQUFJbkQsb0JBQUosQ0FBWWpELFNBQVMsQ0FBQ2tELFNBQVYsQ0FBb0J3RCxjQUFoQyxFQUFnRE4scUJBQWhELENBQU47QUFDSDtBQUNKO0FBcllZLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG5jb25zdCBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcblxyXG5jb25zdCBwcm92aWRlcnMgPSB7XHJcbiAgICBQRVJGRUNUTzogJ3BlcmZlY3RvJyxcclxuICAgIEJST1dTRVJTVEFDSzogJ2Jyb3dzZXJzdGFjaycsXHJcbiAgICBTQVVDRUxBQlM6ICdzYXVjZScsXHJcbiAgICBMQU1CREFURVNUOiAnbGFtYmRhJyxcclxuICAgIFRFU1RJTkdCT1Q6ICd0ZXN0aW5nYm90J1xyXG59O1xyXG5cclxuY29uc3QgY29udGV4dExpc3QgPSB7XHJcbiAgICBhbmRyb2lkOiAnYW5kcm9pZCcsXHJcbiAgICBpb3M6ICdpb3MnLFxyXG4gICAgaHlicmlkOiAnaHlicmlkJyxcclxuICAgIHdlYjogJ3dlYidcclxufTtcclxuXHJcbmNvbnN0IGlzRWxlbWVudE5vdEZvdW5kID0gKGVsKSA9PiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICBpZiAoXHJcbiAgICAgICAgZWwuZXJyb3IgJiYgKFxyXG4gICAgICAgIGVsLmVycm9yLmVycm9yID09PSAnbm8gc3VjaCBlbGVtZW50JyB8fFxyXG4gICAgICAgIChlbC5lcnJvci5tZXNzYWdlICYmIC8qIHdpbmFwcGRyaXZlciB3aW4ucmlnaHRDbGljayAqLyBlbC5lcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ25vIHN1Y2ggZWxlbWVudCcpIHx8XHJcbiAgICAgICAgZWwuZXJyb3IubWVzc2FnZSAmJiAvKiB3aW5hcHBkcml2ZXIgKi8gZWwuZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdBbiBlbGVtZW50IGNvdWxkIG5vdCBiZSBsb2NhdGVkJykpKVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICAgIG1hdGNoUGF0dGVybjogZnVuY3Rpb24odmFsLCBwYXR0ZXJuKSB7XHJcbiAgICAgICAgaWYgKCF2YWwgJiYgIXBhdHRlcm4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2xvYlRvUmVnZXggPSByZXF1aXJlKCdnbG9iLXRvLXJlZ2V4cCcpO1xyXG4gICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xyXG5cclxuICAgICAgICB2YXIgcmVnZXg7XHJcbiAgICAgICAgaWYgKHBhdHRlcm4uaW5kZXhPZigncmVnZXg6JykgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoIHVzaW5nIGEgcmVndWxhci1leHByZXNzaW9uXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLnN1YnN0cmluZygncmVnZXg6Jy5sZW5ndGgpLCAnZycpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5pbmRleE9mKCdyZWdleGk6JykgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCB1c2luZyBhIGNhc2UtaW5zZW5zaXRpdmUgcmVndWxhci1leHByZXNzaW9uXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLnN1YnN0cmluZygncmVnZXhpOicubGVuZ3RoKSwgJ2lnJyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLmluZGV4T2YoJ2V4YWN0OicpID09IDAgfHwgcGF0dGVybiA9PT0gJycpIHsgIC8vIG1hdGNoIGEgc3RyaW5nIGV4YWN0bHksIHZlcmJhdGltXHJcbiAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuLnN1YnN0cmluZygnZXhhY3Q6Jy5sZW5ndGgpID09PSB2YWw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLmluZGV4T2YoJ2dsb2I6JykgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoIGFnYWluc3QgYSBjYXNlLWluc2Vuc2l0aXZlIFwiZ2xvYlwiIHBhdHRlcm5cclxuICAgICAgICAgICAgcmVnZXggPSBnbG9iVG9SZWdleChwYXR0ZXJuLnN1YnN0cmluZygnZ2xvYjonLmxlbmd0aCksIHsgZmxhZ3M6ICdpZycgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbCk7XHJcbiAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIHByZWZpeCBzYW1lIGFzIGdsb2IgbWF0Y2hpbmdcclxuICAgICAgICAgICAgcmVnZXggPSBnbG9iVG9SZWdleChwYXR0ZXJuLCB7IGZsYWdzOiAnaWcnIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxlbWVudDogYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgd2FpdEZvclZpc2libGUsIHRpbWVvdXQsIHRocm93RXhjZXB0aW9uID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnNldFRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMsIHRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVsO1xyXG4gICAgICAgIGlmIChsb2NhdG9yICYmIGxvY2F0b3IuY29uc3RydWN0b3IgJiYgbG9jYXRvci5jb25zdHJ1Y3Rvci5uYW1lID09PSAnRWxlbWVudCcpIHtcclxuICAgICAgICAgICAgZWwgPSBsb2NhdG9yO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxvY2F0b3IgPSB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcik7XHJcbiAgICAgICAgICAgIGVsID0gYXdhaXQgdGhpcy5kcml2ZXIuJChsb2NhdG9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVsZW1lbnROb3RGb3VuZCA9IGlzRWxlbWVudE5vdEZvdW5kKGVsKTtcclxuICAgICAgICBpZiAoZWxlbWVudE5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVMRU1FTlRfTk9UX0ZPVU5ELCBgVW5hYmxlIHRvIGZpbmQgZWxlbWVudDogJHtsb2NhdG9yfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdhaXRGb3JWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBlbC53YWl0Rm9yRGlzcGxheWVkKHsgdGltZW91dDp0aW1lb3V0ID8gdGltZW91dCA6IHRoaXMud2FpdEZvclRpbWVvdXR9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24gJiYgZS5tZXNzYWdlICYmIGUubWVzc2FnZS5pbmNsdWRlcygnc3RpbGwgbm90IGRpc3BsYXllZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9WSVNJQkxFLCBgRWxlbWVudCBub3QgdmlzaWJsZTogJHtsb2NhdG9yfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhyb3dFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxlbWVudHM6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHRpbWVvdXQpIHtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5zZXRUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzLCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBlbHMgPSBbXTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZWxzID0gYXdhaXQgdGhpcy5kcml2ZXIuJCQodGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzTm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbHMpO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNOb3RGb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldENoaWxkRWxlbWVudDogYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgcGFyZW50RWxlbWVudCwgd2FpdEZvclZpc2libGUsIHRpbWVvdXQpIHtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5zZXRUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzLCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxvY2F0b3IgPSB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcik7XHJcblxyXG4gICAgICAgIGlmICghKHBhcmVudEVsZW1lbnQgJiYgcGFyZW50RWxlbWVudC4kKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBwYXJlbnRFbGVtZW50LCBtdXN0IGJlIGEgdmFsaWQgZWxlbWVudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVsID0gYXdhaXQgcGFyZW50RWxlbWVudC4kKGxvY2F0b3IpO1xyXG5cclxuICAgICAgICBjb25zdCBlbGVtZW50Tm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnROb3RGb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfRk9VTkQsIGBVbmFibGUgdG8gZmluZCBlbGVtZW50OiAke2xvY2F0b3J9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2FpdEZvclZpc2libGUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGVsLndhaXRGb3JEaXNwbGF5ZWQoeyB0aW1lb3V0OiB0aW1lb3V0ID8gdGltZW91dCA6IHRoaXMud2FpdEZvclRpbWVvdXR9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5tZXNzYWdlICYmIGUubWVzc2FnZS5pbmNsdWRlcygnc3RpbGwgbm90IGRpc3BsYXllZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9WSVNJQkxFLCBgRWxlbWVudCBub3QgdmlzaWJsZTogJHtsb2NhdG9yfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVsO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRDaGlsZEVsZW1lbnRzOiBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCBwYXJlbnRFbGVtZW50LCB0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xyXG5cclxuICAgICAgICBpZiAoIShwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuJCQpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIHBhcmVudEVsZW1lbnQsIG11c3QgYmUgYSB2YWxpZCBlbGVtZW50Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZWxzID0gW107XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZWxzID0gYXdhaXQgcGFyZW50RWxlbWVudC4kJChsb2NhdG9yKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzTm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbHMpO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNOb3RGb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVscztcclxuICAgIH0sXHJcblxyXG4gICAgc2V0VGltZW91dEltcGxpY2l0OiBhc3luYyBmdW5jdGlvbih0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRyaXZlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ICYmIHRpbWVvdXQgPiB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgKiAxMDAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgdGltZW91dCBtdXN0IGJlIGxlc3MgdGhhbiAke3RoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCAqIDEwMDB9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ICYmIHRpbWVvdXQgPiB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ICogMTAwMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgYHRpbWVvdXQgbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ICogMTAwMH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0aW1lb3V0cztcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiZcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID09PSAnTWljcm9zb2Z0RWRnZSdcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgLy8gbm90IHN1cHBvcnRlZCBvbiBFZGdlXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLmdldFRpbWVvdXRzKSB7XHJcbiAgICAgICAgICAgIC8vIGNocm9tZSA+PSA3NVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5zdG9wVXJsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLnN0b3BVcmwuaW5jbHVkZXMoJ3BlcmZlY3RvbW9iaWxlLmNvbScpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAvL2lnbm9yZVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0cyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFRpbWVvdXRzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGZhaWxzIG9uIHBlcmZlY3RvIG1vYmlsZVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2dldFRpbWVvdXRzIGVycm9yJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcyAmJiB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMudGltZW91dHMpIHtcclxuICAgICAgICAgICAgLy8gY2hyb21lID49IDcyICYmIGNocm9tZSA8IDc1XHJcbiAgICAgICAgICAgIHRpbWVvdXRzID0gdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLnRpbWVvdXRzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRpbWVvdXRzICYmIHRpbWVvdXRzLmltcGxpY2l0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXZJbXBsaWNpdFRpbWVvdXQgPSB0aW1lb3V0cy5pbXBsaWNpdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRpbWVvdXRzICYmIHRpbWVvdXRzLnBhZ2VMb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXZQYWdlTG9hZFRpbWVvdXQgPSB0aW1lb3V0cy5wYWdlTG9hZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnNldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcyAmJiB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGJyb3dzZXJOYW1lICdkZWZhdWx0JyBvbiBhbmRyb2lkIFxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2ltcGxpY2l0JzogdGltZW91dCxcclxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aW1lb3V0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xyXG4gICAgICAgICAgICAgICAgICAgICdpbXBsaWNpdCc6IHRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVzdG9yZVRpbWVvdXRJbXBsaWNpdDogYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZJbXBsaWNpdFRpbWVvdXQgJiYgdGhpcy5kcml2ZXIuc2V0VGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ2ltcGxpY2l0JzogdGhpcy5fcHJldkltcGxpY2l0VGltZW91dCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZQYWdlTG9hZFRpbWVvdXQgJiYgdGhpcy5kcml2ZXIuc2V0VGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ3BhZ2VMb2FkJzogdGhpcy5fcHJldlBhZ2VMb2FkVGltZW91dCB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50OiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIGlzIHJlcXVpcmVkLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50U3RyaW5nOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgc3RyaW5nLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICghYXJnIHx8IHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYXNzZXJ0QXJndW1lbnROdW1iZXI6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbnVtYmVyLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50Qm9vbDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihhcmcpICE9IHR5cGVvZih0cnVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgdHJ1ZSBvciBmYWxzZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihhcmcpICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YoYXJnKSAhPSB0eXBlb2YodHJ1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYXNzZXJ0QXJndW1lbnRUaW1lb3V0OiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnICYmICh0eXBlb2YoYXJnKSAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbm9uIG5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjb250ZXh0TGlzdDogY29udGV4dExpc3QsXHJcblxyXG4gICAgYXNzZXJ0Q29udGV4dDogYXN5bmMgZnVuY3Rpb24oLi4uYWxvd2VkQ29udGV4dHMpIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldENvbnRleHQoKTtcclxuICAgICAgICBjb25zdCBpc1dlYiA9IChjb250ZXh0ICYmIChjb250ZXh0LmluZGV4T2YoJ1dFQlZJRVcnKSA+IC0xIHx8IGNvbnRleHQuaW5kZXhPZignQ0hST01JVU0nKSA+IC0xKSk7XHJcblxyXG4gICAgICAgIGlmIChpc1dlYikge1xyXG4gICAgICAgICAgICBpZiAoYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3Qud2ViKSB8fCBhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC5oeWJyaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIGFsbCBpcyBva1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGNvbnRleHQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC5hbmRyb2lkKSB8fCBhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC5pb3MpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIGFsbCBpcyBva1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGNvbnRleHQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0V2Rpb0xvY2F0b3I6IGZ1bmN0aW9uKGxvY2F0b3IpIHtcclxuICAgICAgICBpZiAoIWxvY2F0b3IpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBsb2NhdG9yID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIHhwYXRoIGxvY2F0b3IgYXMgaXNcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGdlbmVyYXRlIFhQYXRoIGluc3RlYWQgb2YgQ1NTIGZvciBicm93c2VyIHRlc3RzLCBzaW5jZSBJRCBjYW4gY29udGFpbiBpbGxlZ2FsIGNoYXJhY3RlcnNcclxuICAgICAgICAgICAgLy8gYW5kIGVzY2FwaW5nIGRvZXNuJ3Qgd29yayByZWxpYWJseSBvciBpbiBpZGVudGljYWwgbWFubmVyIGluIGFsbCBicm93c2VyXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiYgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYC8vKltAaWQ9XCIke2xvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCl9XCJdYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnIycgKyBsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbmFtZT0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuICdbbmFtZT1cIicgKyBsb2NhdG9yLnN1YnN0cignbmFtZT0nLmxlbmd0aCkgKyAnXCJdJztcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbms9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rLWNvbnRhaW5zPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJyo9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2Nzcz0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3Iuc3Vic3RyKCdjc3M9Jy5sZW5ndGgpOyAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBjc3MsIGp1c3QgcmVtb3ZlIGNzcz0gcHJlZml4XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCd0YWc9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnPCcgKyBsb2NhdG9yLnN1YnN0cigndGFnPScubGVuZ3RoKSArICcgLz4nO1xyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TG9nVHlwZXM6IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoY29udGV4dCA9PT0gJ05BVElWRV9BUFAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ2xvZ2NhdCcsICdidWdyZXBvcnQnLCAnc2VydmVyJ107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFsnYnJvd3NlcicsICdkcml2ZXInXTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHByb3ZpZGVyOiBwcm92aWRlcnMsXHJcblxyXG4gICAgZGV0ZXJtaW5lUHJvdmlkZXI6IGZ1bmN0aW9uKHdkaW9PcHRzKSB7XHJcbiAgICAgICAgaWYgKCF3ZGlvT3B0cyB8fCAhd2Rpb09wdHMuY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddIHx8ICh3ZGlvT3B0cy5ob3N0bmFtZSAmJiB3ZGlvT3B0cy5ob3N0bmFtZS5pbmNsdWRlcygncGVyZmVjdG9tb2JpbGUuY29tJykpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuUEVSRkVDVE87XHJcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5CUk9XU0VSU1RBQ0s7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlNBVUNFTEFCUztcclxuICAgICAgICB9IGVsc2UgaWYgKHdkaW9PcHRzLmhvc3RuYW1lLmluY2x1ZGVzKCdsYW1iZGF0ZXN0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5MQU1CREFURVNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlRFU1RJTkdCT1Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5OiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob2JqKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5jbHVkZXMoJ0NvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04nKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydENpcmN1bGFyOiBmdW5jdGlvbihvYmopIHtcclxuICAgICAgICBjb25zdCBoYXNDaXJjdWxhckRlcGVuZGVuY3kgPSB0aGlzLmhhc0NpcmN1bGFyRGVwZW5kZW5jeShvYmopO1xyXG4gICAgICAgIGlmIChoYXNDaXJjdWxhckRlcGVuZGVuY3kpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5DSVJDVUxBUl9FUlJPUiwgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG59O1xyXG4iXX0=
434
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL3V0aWxzLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJ2MSIsInByb3ZpZGVycyIsIlBFUkZFQ1RPIiwiQlJPV1NFUlNUQUNLIiwiU0FVQ0VMQUJTIiwiTEFNQkRBVEVTVCIsIlRFU1RJTkdCT1QiLCJjb250ZXh0TGlzdCIsImFuZHJvaWQiLCJpb3MiLCJoeWJyaWQiLCJ3ZWIiLCJpc0VsZW1lbnROb3RGb3VuZCIsImVsIiwicmVzdWx0IiwiZXJyb3IiLCJtZXNzYWdlIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtYXRjaFBhdHRlcm4iLCJ2YWwiLCJwYXR0ZXJuIiwiZ2xvYlRvUmVnZXgiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZWdleCIsImluZGV4T2YiLCJSZWdFeHAiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJ0ZXN0IiwiZmxhZ3MiLCJnZXRFbGVtZW50IiwibG9jYXRvciIsIndhaXRGb3JWaXNpYmxlIiwidGltZW91dCIsInRocm93RXhjZXB0aW9uIiwic2V0VGltZW91dEltcGxpY2l0IiwiY2FsbCIsImNvbnN0cnVjdG9yIiwibmFtZSIsImhlbHBlcnMiLCJnZXRXZGlvTG9jYXRvciIsImRyaXZlciIsIiQiLCJlbGVtZW50Tm90Rm91bmQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkVMRU1FTlRfTk9UX0ZPVU5EIiwid2FpdEZvckRpc3BsYXllZCIsIndhaXRGb3JUaW1lb3V0IiwiZSIsImluY2x1ZGVzIiwiRUxFTUVOVF9OT1RfVklTSUJMRSIsImdldEVsZW1lbnRzIiwiZWxzIiwiJCQiLCJlbGVtZW50c05vdEZvdW5kIiwiZ2V0Q2hpbGRFbGVtZW50IiwicGFyZW50RWxlbWVudCIsIlNDUklQVF9FUlJPUiIsImdldENoaWxkRWxlbWVudHMiLCJzZWxlbml1bVRpbWVvdXQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0IiwidGltZW91dHMiLCJjYXBhYmlsaXRpZXMiLCJicm93c2VyTmFtZSIsImdldFRpbWVvdXRzIiwic3RvcFVybCIsImNvbnNvbGUiLCJsb2ciLCJpbXBsaWNpdCIsIl9wcmV2SW1wbGljaXRUaW1lb3V0IiwicGFnZUxvYWQiLCJfcHJldlBhZ2VMb2FkVGltZW91dCIsInNldFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudCIsImFyZyIsInVuZGVmaW5lZCIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiYXNzZXJ0Q29udGV4dCIsImFsb3dlZENvbnRleHRzIiwiY29udGV4dCIsImdldENvbnRleHQiLCJpc1dlYiIsInN1YnN0ciIsImdldExvZ1R5cGVzIiwicHJvdmlkZXIiLCJkZXRlcm1pbmVQcm92aWRlciIsIndkaW9PcHRzIiwiaG9zdG5hbWUiLCJoYXNDaXJjdWxhckRlcGVuZGVuY3kiLCJvYmoiLCJKU09OIiwic3RyaW5naWZ5IiwiU3RyaW5nIiwiYXNzZXJ0Q2lyY3VsYXIiLCJDSVJDVUxBUl9FUlJPUiIsIm5ld1ZpZGVvQXR0YWNobWVudCIsImZpbGVOYW1lIiwidmlkZW9VcmwiLCJpZCIsInR5cGUiLCJzdWJ0eXBlIiwiX3VybCJdLCJtYXBwaW5ncyI6Ijs7OztBQVVBOzs7O0FBVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGtCQUFELENBQXpCOztBQUVBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFTRCxPQUFPLENBQUMsTUFBRCxDQUF0Qjs7QUFFQSxNQUFNRSxTQUFTLEdBQUc7QUFDZEMsRUFBQUEsUUFBUSxFQUFFLFVBREk7QUFFZEMs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WUFKZ0M7QUFLekNDLElBQUFBLElBQUksRUFBRUo7QUFMbUMsR0FBekI7QUF2WVAsQ0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbmNvbnN0IGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuY29uc3QgeyB2MSB9ID0gcmVxdWlyZSgndXVpZCcpO1xyXG5cclxuY29uc3QgcHJvdmlkZXJzID0ge1xyXG4gICAgUEVSRkVDVE86ICdwZXJmZWN0bycsXHJcbiAgICBCUk9XU0VSU1RBQ0s6ICdicm93c2Vyc3RhY2snLFxyXG4gICAgU0FVQ0VMQUJTOiAnc2F1Y2UnLFxyXG4gICAgTEFNQkRBVEVTVDogJ2xhbWJkYScsXHJcbiAgICBURVNUSU5HQk9UOiAndGVzdGluZ2JvdCdcclxufTtcclxuXHJcbmNvbnN0IGNvbnRleHRMaXN0ID0ge1xyXG4gICAgYW5kcm9pZDogJ2FuZHJvaWQnLFxyXG4gICAgaW9zOiAnaW9zJyxcclxuICAgIGh5YnJpZDogJ2h5YnJpZCcsXHJcbiAgICB3ZWI6ICd3ZWInXHJcbn07XHJcblxyXG5jb25zdCBpc0VsZW1lbnROb3RGb3VuZCA9IChlbCkgPT4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgaWYgKFxyXG4gICAgICAgIGVsLmVycm9yICYmIChcclxuICAgICAgICBlbC5lcnJvci5lcnJvciA9PT0gJ25vIHN1Y2ggZWxlbWVudCcgfHxcclxuICAgICAgICAoZWwuZXJyb3IubWVzc2FnZSAmJiAvKiB3aW5hcHBkcml2ZXIgd2luLnJpZ2h0Q2xpY2sgKi8gZWwuZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdubyBzdWNoIGVsZW1lbnQnKSB8fFxyXG4gICAgICAgIGVsLmVycm9yLm1lc3NhZ2UgJiYgLyogd2luYXBwZHJpdmVyICovIGVsLmVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnQW4gZWxlbWVudCBjb3VsZCBub3QgYmUgbG9jYXRlZCcpKSlcclxuICAgICkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBtYXRjaFBhdHRlcm46IGZ1bmN0aW9uKHZhbCwgcGF0dGVybikge1xyXG4gICAgICAgIGlmICghdmFsICYmICFwYXR0ZXJuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdsb2JUb1JlZ2V4ID0gcmVxdWlyZSgnZ2xvYi10by1yZWdleHAnKTtcclxuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcclxuXHJcbiAgICAgICAgdmFyIHJlZ2V4O1xyXG4gICAgICAgIGlmIChwYXR0ZXJuLmluZGV4T2YoJ3JlZ2V4OicpID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCB1c2luZyBhIHJlZ3VsYXItZXhwcmVzc2lvblxyXG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybi5zdWJzdHJpbmcoJ3JlZ2V4OicubGVuZ3RoKSwgJ2cnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhdHRlcm4uaW5kZXhPZigncmVnZXhpOicpID09IDApIHsgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2ggdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXItZXhwcmVzc2lvblxyXG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybi5zdWJzdHJpbmcoJ3JlZ2V4aTonLmxlbmd0aCksICdpZycpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5pbmRleE9mKCdleGFjdDonKSA9PSAwIHx8IHBhdHRlcm4gPT09ICcnKSB7ICAvLyBtYXRjaCBhIHN0cmluZyBleGFjdGx5LCB2ZXJiYXRpbVxyXG4gICAgICAgICAgICByZXR1cm4gcGF0dGVybi5zdWJzdHJpbmcoJ2V4YWN0OicubGVuZ3RoKSA9PT0gdmFsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5pbmRleE9mKCdnbG9iOicpID09IDApIHsgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCBhZ2FpbnN0IGEgY2FzZS1pbnNlbnNpdGl2ZSBcImdsb2JcIiBwYXR0ZXJuXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gZ2xvYlRvUmVnZXgocGF0dGVybi5zdWJzdHJpbmcoJ2dsb2I6Jy5sZW5ndGgpLCB7IGZsYWdzOiAnaWcnIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBwcmVmaXggc2FtZSBhcyBnbG9iIG1hdGNoaW5nXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gZ2xvYlRvUmVnZXgocGF0dGVybiwgeyBmbGFnczogJ2lnJyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHdhaXRGb3JWaXNpYmxlLCB0aW1lb3V0LCB0aHJvd0V4Y2VwdGlvbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5zZXRUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzLCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbDtcclxuICAgICAgICBpZiAobG9jYXRvciAmJiBsb2NhdG9yLmNvbnN0cnVjdG9yICYmIGxvY2F0b3IuY29uc3RydWN0b3IubmFtZSA9PT0gJ0VsZW1lbnQnKSB7XHJcbiAgICAgICAgICAgIGVsID0gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xyXG4gICAgICAgICAgICBlbCA9IGF3YWl0IHRoaXMuZHJpdmVyLiQobG9jYXRvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbGVtZW50Tm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnROb3RGb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9GT1VORCwgYFVuYWJsZSB0byBmaW5kIGVsZW1lbnQ6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3YWl0Rm9yVmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZWwud2FpdEZvckRpc3BsYXllZCh7IHRpbWVvdXQ6dGltZW91dCA/IHRpbWVvdXQgOiB0aGlzLndhaXRGb3JUaW1lb3V0fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uICYmIGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBkaXNwbGF5ZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfVklTSUJMRSwgYEVsZW1lbnQgbm90IHZpc2libGU6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRocm93RXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZWw7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVsZW1lbnRzOiBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZWxzID0gW107XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGVscyA9IGF3YWl0IHRoaXMuZHJpdmVyLiQkKHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvcihsb2NhdG9yKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c05vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWxzKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZWxzO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRDaGlsZEVsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHBhcmVudEVsZW1lbnQsIHdhaXRGb3JWaXNpYmxlLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xyXG5cclxuICAgICAgICBpZiAoIShwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuJCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gcGFyZW50RWxlbWVudCwgbXVzdCBiZSBhIHZhbGlkIGVsZW1lbnQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbCA9IGF3YWl0IHBhcmVudEVsZW1lbnQuJChsb2NhdG9yKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWxlbWVudE5vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWwpO1xyXG4gICAgICAgIGlmIChlbGVtZW50Tm90Rm91bmQpIHtcclxuICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVMRU1FTlRfTk9UX0ZPVU5ELCBgVW5hYmxlIHRvIGZpbmQgZWxlbWVudDogJHtsb2NhdG9yfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdhaXRGb3JWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBlbC53YWl0Rm9yRGlzcGxheWVkKHsgdGltZW91dDogdGltZW91dCA/IHRpbWVvdXQgOiB0aGlzLndhaXRGb3JUaW1lb3V0fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBkaXNwbGF5ZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfVklTSUJMRSwgYEVsZW1lbnQgbm90IHZpc2libGU6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Q2hpbGRFbGVtZW50czogYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgcGFyZW50RWxlbWVudCwgdGltZW91dCkge1xyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzLnNldFRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMsIHRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbG9jYXRvciA9IHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvcihsb2NhdG9yKTtcclxuXHJcbiAgICAgICAgaWYgKCEocGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LiQkKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBwYXJlbnRFbGVtZW50LCBtdXN0IGJlIGEgdmFsaWQgZWxlbWVudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGVscyA9IFtdO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGVscyA9IGF3YWl0IHBhcmVudEVsZW1lbnQuJCQobG9jYXRvcik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c05vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWxzKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbHM7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRpbWVvdXRJbXBsaWNpdDogYXN5bmMgZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kcml2ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ICogMTAwMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgYHRpbWVvdXQgbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgKiAxMDAwfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAqIDEwMDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIGB0aW1lb3V0IG11c3QgYmUgbGVzcyB0aGFuICR7dGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAqIDEwMDB9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGltZW91dHM7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmXHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9PT0gJ01pY3Jvc29mdEVkZ2UnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgb24gRWRnZVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5nZXRUaW1lb3V0cykge1xyXG4gICAgICAgICAgICAvLyBjaHJvbWUgPj0gNzVcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuc3RvcFVybCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5zdG9wVXJsLmluY2x1ZGVzKCdwZXJmZWN0b21vYmlsZS5jb20nKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9pZ25vcmVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dHMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaW1lb3V0cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmYWlscyBvbiBwZXJmZWN0byBtb2JpbGVcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRUaW1lb3V0cyBlcnJvcicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiYgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLnRpbWVvdXRzKSB7XHJcbiAgICAgICAgICAgIC8vIGNocm9tZSA+PSA3MiAmJiBjaHJvbWUgPCA3NVxyXG4gICAgICAgICAgICB0aW1lb3V0cyA9IHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy50aW1lb3V0cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5pbXBsaWNpdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2SW1wbGljaXRUaW1lb3V0ID0gdGltZW91dHMuaW1wbGljaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5wYWdlTG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2UGFnZUxvYWRUaW1lb3V0ID0gdGltZW91dHMucGFnZUxvYWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlci5zZXRUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiYgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBicm93c2VyTmFtZSAnZGVmYXVsdCcgb24gYW5kcm9pZCBcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xyXG4gICAgICAgICAgICAgICAgICAgICdpbXBsaWNpdCc6IHRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3BhZ2VMb2FkJzogdGltZW91dFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHtcclxuICAgICAgICAgICAgICAgICAgICAnaW1wbGljaXQnOiB0aW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlc3RvcmVUaW1lb3V0SW1wbGljaXQ6IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wcmV2SW1wbGljaXRUaW1lb3V0ICYmIHRoaXMuZHJpdmVyLnNldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMuX3ByZXZJbXBsaWNpdFRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9wcmV2UGFnZUxvYWRUaW1lb3V0ICYmIHRoaXMuZHJpdmVyLnNldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdwYWdlTG9hZCc6IHRoaXMuX3ByZXZQYWdlTG9hZFRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBpcyByZXF1aXJlZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudFN0cmluZzogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIHN0cmluZy5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAoIWFyZyB8fCB0eXBlb2YgYXJnICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tZW1wdHkgc3RyaW5nLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50TnVtYmVyOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGFyZykgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG51bWJlci5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGFyZykgIT09ICdudW1iZXInIHx8IGFyZyA8IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudEJvb2w6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPSB0eXBlb2YodHJ1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKGFyZykgIT0gdHlwZW9mKHRydWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSB0cnVlIG9yIGZhbHNlLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50VGltZW91dDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKGFyZyAmJiAodHlwZW9mKGFyZykgIT09ICdudW1iZXInIHx8IGFyZyA8IDApKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG5vbiBuZWdhdGl2ZSBudW1iZXIuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY29udGV4dExpc3Q6IGNvbnRleHRMaXN0LFxyXG5cclxuICAgIGFzc2VydENvbnRleHQ6IGFzeW5jIGZ1bmN0aW9uKC4uLmFsb3dlZENvbnRleHRzKSB7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRDb250ZXh0KCk7XHJcbiAgICAgICAgY29uc3QgaXNXZWIgPSAoY29udGV4dCAmJiAoY29udGV4dC5pbmRleE9mKCdXRUJWSUVXJykgPiAtMSB8fCBjb250ZXh0LmluZGV4T2YoJ0NIUk9NSVVNJykgPiAtMSkpO1xyXG5cclxuICAgICAgICBpZiAoaXNXZWIpIHtcclxuICAgICAgICAgICAgaWYgKGFsb3dlZENvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRMaXN0LndlYikgfHwgYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3QuaHlicmlkKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlLCBhbGwgaXMgb2tcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBjb250ZXh0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3QuYW5kcm9pZCkgfHwgYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3QuaW9zKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlLCBhbGwgaXMgb2tcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBjb250ZXh0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFdkaW9Mb2NhdG9yOiBmdW5jdGlvbihsb2NhdG9yKSB7XHJcbiAgICAgICAgaWYgKCFsb2NhdG9yKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBsb2NhdG9yIG5vdCBzcGVjaWZpZWQnKTtcclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG9jYXRvciA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignLycpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSB4cGF0aCBsb2NhdG9yIGFzIGlzXHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAvLyBnZW5lcmF0ZSBYUGF0aCBpbnN0ZWFkIG9mIENTUyBmb3IgYnJvd3NlciB0ZXN0cywgc2luY2UgSUQgY2FuIGNvbnRhaW4gaWxsZWdhbCBjaGFyYWN0ZXJzXHJcbiAgICAgICAgICAgIC8vIGFuZCBlc2NhcGluZyBkb2Vzbid0IHdvcmsgcmVsaWFibHkgb3IgaW4gaWRlbnRpY2FsIG1hbm5lciBpbiBhbGwgYnJvd3NlclxyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAvLypbQGlkPVwiJHtsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpfVwiXWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyMnICsgbG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ25hbWU9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnW25hbWU9XCInICsgbG9jYXRvci5zdWJzdHIoJ25hbWU9Jy5sZW5ndGgpICsgJ1wiXSc7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJz0nICsgbG9jYXRvci5zdWJzdHIoJ2xpbms9Jy5sZW5ndGgpO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbGluay1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuICcqPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yLnN1YnN0cignY3NzPScubGVuZ3RoKTsgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgY3NzLCBqdXN0IHJlbW92ZSBjc3M9IHByZWZpeFxyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGFnPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJzwnICsgbG9jYXRvci5zdWJzdHIoJ3RhZz0nLmxlbmd0aCkgKyAnIC8+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExvZ1R5cGVzOiBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKGNvbnRleHQgPT09ICdOQVRJVkVfQVBQJykge1xyXG4gICAgICAgICAgICByZXR1cm4gWydsb2djYXQnLCAnYnVncmVwb3J0JywgJ3NlcnZlciddO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ2Jyb3dzZXInLCAnZHJpdmVyJ107XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBwcm92aWRlcjogcHJvdmlkZXJzLFxyXG5cclxuICAgIGRldGVybWluZVByb3ZpZGVyOiBmdW5jdGlvbih3ZGlvT3B0cykge1xyXG4gICAgICAgIGlmICghd2Rpb09wdHMgfHwgIXdkaW9PcHRzLmNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSB8fCAod2Rpb09wdHMuaG9zdG5hbWUgJiYgd2Rpb09wdHMuaG9zdG5hbWUuaW5jbHVkZXMoJ3BlcmZlY3RvbW9iaWxlLmNvbScpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlBFUkZFQ1RPO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuQlJPV1NFUlNUQUNLO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5TQVVDRUxBQlM7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5ob3N0bmFtZS5pbmNsdWRlcygnbGFtYmRhdGVzdCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuTEFNQkRBVEVTVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5URVNUSU5HQk9UO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIGhhc0NpcmN1bGFyRGVwZW5kZW5jeTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9iaik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoU3RyaW5nKGUpLmluY2x1ZGVzKCdDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OJykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRDaXJjdWxhcjogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgY29uc3QgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5ID0gdGhpcy5oYXNDaXJjdWxhckRlcGVuZGVuY3kob2JqKTtcclxuICAgICAgICBpZiAoaGFzQ2lyY3VsYXJEZXBlbmRlbmN5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQ0lSQ1VMQVJfRVJST1IsIGhhc0NpcmN1bGFyRGVwZW5kZW5jeSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBuZXdWaWRlb0F0dGFjaG1lbnQ6IChmaWxlTmFtZSwgdmlkZW9VcmwpID0+ICh7XHJcbiAgICAgICAgaWQ6IHYxKCksXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgdHlwZTogJ3ZpZGVvJyxcclxuICAgICAgICBzdWJ0eXBlOiAnc2NyZWVuY2FzdCcsXHJcbiAgICAgICAgX3VybDogdmlkZW9VcmwsXHJcbiAgICB9KSxcclxufTtcclxuIl19
@@ -266,8 +266,9 @@ class ReportAggregator extends _events.EventEmitter {
266
266
  });
267
267
  }
268
268
 
269
- onCaseEnd(rid, suiteId, caseId, caseResult) {
269
+ async onCaseEnd(rid, suiteId, caseId, caseResult) {
270
270
  console.log(`- Case "${caseResult.name}" has ended with status: ${caseResult.status.toUpperCase()}.`);
271
+ await this._saveTestCaseVideoAttachment(caseResult);
271
272
  this.emit('case:end', {
272
273
  rid,
273
274
  suiteId,
@@ -466,7 +467,45 @@ class ReportAggregator extends _events.EventEmitter {
466
467
  });
467
468
  }
468
469
 
470
+ async _saveTestCaseVideoAttachment(caseResult) {
471
+ if (!caseResult || !caseResult.attachments || !caseResult.attachments.length) {
472
+ return;
473
+ }
474
+
475
+ const attachmentsToRemove = [];
476
+
477
+ for (let i = 0; i < caseResult.attachments.length; i++) {
478
+ const attachment = caseResult.attachments[i];
479
+
480
+ if (!attachment._url) {
481
+ continue;
482
+ }
483
+
484
+ try {
485
+ const videoFilePath = await _util.default.downloadVideo(attachment.fileName, attachment._url, this.options);
486
+
487
+ if (!videoFilePath) {
488
+ attachmentsToRemove.push(attachment);
489
+ } else {
490
+ attachment.filePath = videoFilePath;
491
+ delete attachment['_url'];
492
+ }
493
+ } catch (e) {
494
+ console.warn('Failed to download video file: ', e.message);
495
+ attachmentsToRemove.push(attachment);
496
+ }
497
+ }
498
+
499
+ for (let i = 0; i < attachmentsToRemove.length; i++) {
500
+ const elmIndexToRemove = caseResult.attachments.indexOf(attachmentsToRemove[i]);
501
+
502
+ if (!elmIndexToRemove > -1) {
503
+ caseResult.attachments.splice(elmIndexToRemove, 1);
504
+ }
505
+ }
506
+ }
507
+
469
508
  }
470
509
 
471
510
  exports.default = ReportAggregator;
472
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiaW5zdGFudGlhdGVSZXBvcnRlcnMiLCJnZXRFeGl0Q29kZSIsImV4aXRDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidGVzdEZhaWxkZWQiLCJmaW5kIiwiaXRlbSIsInN0YXR1cyIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwicHVzaCIsImdldFJlc3VsdHMiLCJnZW5lcmF0ZVJlcG9ydHMiLCJncm91cGVkUmVzdWx0cyIsImdyb3VwUmVzdWx0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJsb2ciLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwid2FpdEZvclJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJfZGV0ZXJtaW5lVGVzdFN0YXR1c0J5U3VpdGVzIiwiU3RhdHVzIiwiRkFJTEVEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJoYXNGYWlsZWRTdWl0ZXMiLCJzdWl0ZXMiLCJzb21lIiwiaGFzV2FybmluZ1N1aXRlcyIsIldBUk5JTkciLCJhbGxTdWl0ZXNTa2lwcGVkIiwiZXZlcnkiLCJTS0lQUEVEIiwiUEFTU0VEIiwib25JdGVyYXRpb25TdGFydCIsIml0ZXJhdGlvbiIsInN0YXJ0IiwibXNnIiwib25Mb2dFbnRyeSIsIm9uSXRlcmF0aW9uRW5kIiwiaXRlcmF0aW9uTnVtIiwib25TdWl0ZVN0YXJ0Iiwic3VpdGVJZCIsInN1aXRlIiwib25TdWl0ZUVuZCIsInN1aXRlUmVzdWx0Iiwib25DYXNlU3RhcnQiLCJjYXNlSWQiLCJjYXNlRGVmIiwiY2FzZSIsIm9uQ2FzZUVuZCIsImNhc2VSZXN1bHQiLCJvblN0ZXBTdGFydCIsInN0ZXAiLCJyb290UGF0aCIsImZyYW1ld29yayIsImZ1bGxQYXRoIiwicGF0aCIsIm9uU3RlcEVuZCIsInN0ZXBSZXN1bHQiLCJ0b0ZpeGVkIiwidGltZSIsImxldmVsIiwic3JjIiwiY2FzZXMiLCJzdGVwcyIsInVuZ3JvdXBlZFJlc3VsdHMiLCJfZ3JvdXBSZXN1bHQiLCJyZXN1bHRLZXkiLCJzdWl0ZUtleSIsImdyb3VwZWRSZXN1bHQiLCJNYXRoIiwibWluIiwibWF4IiwiY3VycmVudFN1aXRlUmVzdWx0IiwiZ3JvdXBLZXkiLCJncm91cGVkU3VpdGVSZXN1bHQiLCJfc3VpdGVzSGFzaCIsImMiLCJncm91cGVkUmVzdWx0c0xpc3QiLCJrZXlzIiwibWFwIiwic3VpdGVHcm91cEtleSIsImZpcnN0RmFpbGVkU3VpdGUiLCJzIiwiZmlyc3RTdWl0ZVdpdGhXYXJuaW5nIiwicmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMiLCJ2YWxpZGF0ZVJlc3VsdCIsImZhaWxlZCIsInVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcyIsImluY2x1ZGVzIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBWUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUc7QUFDZEMsRUFBQUEsSUFBSSxFQUFFQyxxQkFEUTtBQUVkQyxFQUFBQSxLQUFLLEVBQUVDLHNCQUZPO0FBR2RDLEVBQUFBLElBQUksRUFBRUMscUJBSFE7QUFJZEMsRUFBQUEsS0FBSyxFQUFFQyxzQkFKTztBQUtkQyxFQUFBQSxHQUFHLEVBQUVDLG9CQUxTO0FBTWRDLEVBQUFBLEdBQUcsRUFBRUM7QUFOUyxDQUFsQjtBQVNBLE1BQU1DLGlCQUFpQixHQUFHLGFBQTFCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsRUFBMUI7O0FBRWUsTUFBTUMsZ0JBQU4sU0FBK0JDLG9CQUEvQixDQUE0QztBQUN2REMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVU7QUFDakI7QUFFQSxTQUFLQyxPQUFMLEdBQWUsRUFBZjtBQUVBLFNBQUtDLGlCQUFMLEdBQXlCLEVBQXpCO0FBQ0EsU0FBS0YsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0csb0JBQUw7QUFDSDs7QUFFREMsRUFBQUEsV0FBVyxHQUFHO0FBQ1YsUUFBSUMsUUFBUSxHQUFHLENBQWY7O0FBRUEsUUFDSSxLQUFLSixPQUFMLElBQ0FLLEtBQUssQ0FBQ0MsT0FBTixDQUFjLEtBQUtOLE9BQW5CLENBREEsSUFFQSxLQUFLQSxPQUFMLENBQWFPLE1BQWIsR0FBc0IsQ0FIMUIsRUFJRTtBQUNFLFlBQU1DLFdBQVcsR0FB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UCxHQUFnQjhDLGdCQUFPaUIsT0FBdkI7QUFDSDtBQUNKOztBQUVELGFBQU9SLE1BQVA7QUFDSCxLQWpCTSxDQUFQO0FBa0JIOztBQUVEa0UsRUFBQUEsY0FBYyxDQUFDcEksT0FBRCxFQUFVO0FBQ3BCLFVBQU1zSSx3QkFBd0IsR0FBRyxFQUFqQztBQUVBdEksSUFBQUEsT0FBTyxDQUFDOEgsR0FBUixDQUFhNUQsTUFBRCxJQUFZO0FBQ3BCQSxNQUFBQSxNQUFNLENBQUNLLE1BQVAsQ0FBY3VELEdBQWQsQ0FBbUJ0QyxLQUFELElBQVc7QUFDekIsWUFBSThDLHdCQUF3QixDQUFDQyxRQUF6QixDQUFrQy9DLEtBQUssQ0FBQ0gsWUFBeEMsQ0FBSixFQUEyRDtBQUN2RHZELFVBQUFBLE9BQU8sQ0FBQzBHLElBQVIsQ0FBYSxvQkFBYixFQUFtQ2hELEtBQUssQ0FBQ0gsWUFBekMsRUFBdUQsYUFBdkQ7QUFDSCxTQUZELE1BRU87QUFDSGlELFVBQUFBLHdCQUF3QixDQUFDL0csSUFBekIsQ0FBOEJpRSxLQUFLLENBQUNILFlBQXBDO0FBQ0g7QUFDSixPQU5EO0FBT0gsS0FSRDtBQVNIOztBQS9ac0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFJlcG9ydCBhZ2dyZWdhdG9yXHJcbiAqL1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuXHJcbi8vIGltcG9ydCBhbGwgYnVpbHQtaW4gcmVwb3J0ZXJzXHJcbmltcG9ydCBKc29uUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWpzb24nO1xyXG5pbXBvcnQgSlVuaXRSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanVuaXQnO1xyXG5pbXBvcnQgSHRtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1odG1sJztcclxuaW1wb3J0IEV4Y2VsUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWV4Y2VsJztcclxuaW1wb3J0IFBkZlJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1wZGYnO1xyXG5pbXBvcnQgWG1sUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXhtbCc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xyXG5cclxuY29uc3QgUmVwb3J0ZXJzID0ge1xyXG4gICAganNvbjogSnNvblJlcG9ydGVyLFxyXG4gICAganVuaXQ6IEpVbml0UmVwb3J0ZXIsXHJcbiAgICBodG1sOiBIdG1sUmVwb3J0ZXIsXHJcbiAgICBleGNlbDogRXhjZWxSZXBvcnRlcixcclxuICAgIHBkZjogUGRmUmVwb3J0ZXIsXHJcbiAgICB4bWw6IFhtbFJlcG9ydGVyXHJcbn07XHJcblxyXG5jb25zdCBERUZBVUxUX1RFU1RfTkFNRSA9ICdPeHlnZW4gVGVzdCc7XHJcbmNvbnN0IERFRkFVTFRfUkVQT1JURVJTID0gW107XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBvcnRBZ2dyZWdhdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8vIHJlc3VsdHMgaGFzaCB0YWJsZSBiYXNlZCBvbiBydW5uZXIgaWQga2V5XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgLy8gYSBoYXNoIGxpc3Qgb2YgcnVubmVyRW5kIGV2ZW50IHByb21pc2VzLCBrZXllZCBieSBydW5uZXIgaWRcclxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzID0ge307XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB0aGlzLmluc3RhbnRpYXRlUmVwb3J0ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RXhpdENvZGUoKSB7XHJcbiAgICAgICAgbGV0IGV4aXRDb2RlID0gMDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgJiZcclxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnJlc3VsdHMpICYmXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cy5sZW5ndGggPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3RGYWlsZGVkID0gdGhpcy5yZXN1bHRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVzdEZhaWxkZWQpIHtcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgYnJva2VuID9cclxuICAgICAgICAgICAgZXhpdENvZGUgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBleGl0Q29kZTtcclxuICAgIH1cclxuXHJcbiAgICBpbnN0YW50aWF0ZVJlcG9ydGVycygpIHtcclxuICAgICAgICB0aGlzLnJlcG9ydGVycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGdlbmVyYWxSZXBvcnRpbmdPcHRzID0gdGhpcy5vcHRpb25zLnJlcG9ydGluZyB8fCB7fTtcclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiBnZW5lcmFsUmVwb3J0aW5nT3B0cy5yZXBvcnRlcnMgfHwgREVGQVVMVF9SRVBPUlRFUlMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBvcnRlciAhPT0gJ3N0cmluZycgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXBvcnRlciwgJ25hbWUnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIHJlcG9ydGVycyB0aGF0IGRvIG5vdCBoYXZlICduYW1lJyBwcm9wZXJ0eSBhcyBpdCdzIGVzc2VudGlhbCB0byBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIFJlcG9ydGVyIGNsYXNzXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJOYW1lID0gdHlwZW9mIHJlcG9ydGVyID09PSAnc3RyaW5nJyA/IHJlcG9ydGVyIDogcmVwb3J0ZXIubmFtZTtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJPcHRzID0gdHlwZW9mIHJlcG9ydGVyID09PSAnb2JqZWN0JyA/IHJlcG9ydGVyIDogZ2VuZXJhbFJlcG9ydGluZ09wdHM7XHJcblxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJlcG9ydGVycywgcmVwb3J0ZXJOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRlcnMucHVzaChuZXcgUmVwb3J0ZXJzW3JlcG9ydGVyTmFtZV0odGhpcy5vcHRpb25zLCByZXBvcnRlck9wdHMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXN1bHRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgdGhpcy5yZXBvcnRlcnMpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0UGF0aCA9IHJlcG9ydGVyLmdlbmVyYXRlKGdyb3VwZWRSZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3YWl0Rm9yUmVzdWx0cygpIHtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlcyAmJiB0aGlzLnJ1bm5lckVuZFByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5ydW5uZXJFbmRQcm9taXNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUnVubmVyU3RhcnQocmlkLCBvcHRzLCBjYXBzKSB7XHJcbiAgICAgICAgaWYgKCFyaWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJpZFwiIGNhbm5vdCBiZSBlbXB0eS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IG5ldyBUZXN0UmVzdWx0KCk7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5yaWQgPSByaWQ7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5uYW1lID0gb3B0cy5uYW1lIHx8IERFRkFVTFRfVEVTVF9OQU1FO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gY2FwcztcclxuICAgICAgICB0ZXN0UmVzdWx0LmVudmlyb25tZW50ID0gb3B0cy5lbnZWYXJzIHx8IHt9O1xyXG4gICAgICAgIHRlc3RSZXN1bHQub3B0aW9ucyA9IG9wdHM7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLnB1c2godGVzdFJlc3VsdCk7XHJcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHByb21pc2UgZm9yIGxhdGVyIHRvIGJlIHJlc29sdmVkIG9uIHJ1bm5lcjplbmQgZXZlbnRcclxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0gPSBkZWZlcigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgc3RhcnRlZC4uLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIG9wdHMsXHJcbiAgICAgICAgICAgIGNhcHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lckVuZChyaWQsIGZpbmFsUmVzdWx0LCBmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IHRoaXMucmVzdWx0cy5maW5kKHggPT4geC5yaWQgPT09IHJpZCk7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmR1cmF0aW9uID0gdGVzdFJlc3VsdC5lbmRUaW1lIC0gdGVzdFJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSB0ZXN0IHN0YXR1cyBiYXNlZCBvbiBzdWl0ZXMgc3RhdHVzZXNcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5zdGF0dXMgPSB0aGlzLl9kZXRlcm1pbmVUZXN0U3RhdHVzQnlTdWl0ZXModGVzdFJlc3VsdCwgZmF0YWxFcnJvcik7XHJcbiAgICAgICAgICAgIC8vIHRlc3RSZXN1bHQuc3RhdHVzID0gZmF0YWxFcnJvciA/IFN0YXR1cy5GQUlMRUQgOiAodGVzdFJlc3VsdC5zdWl0ZXMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmF0YWxFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGlmIGZhdGFsRXJyb3IgaXMgbm90IGluaGVyaXRlZCBmcm9tIEVycm9yIGNsYXNzIHRoZW4gd2UgYWxyZWFkeSBnb3QgT3h5Z2VuIEZhaWx1cmUgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gZmF0YWxFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihmYXRhbEVycm9yKSA6IGZhdGFsRXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmZhaWx1cmUgPSB0aGlzLl9nZXRGaXJzdEZhaWx1cmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpbmFsUmVzdWx0ICYmIGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5jYXBhYmlsaXRpZXMgPSBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZS50eXBlICYmIHRlc3RSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX0gYXQgJHt0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb259LmApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX1gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlc3RSZXN1bHQuZmFpbHVyZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgZmluaXNoZWQgd2l0aCBzdGF0dXM6ICR7dGVzdFJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHRlc3RSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICAvLyBjYWxsaW5nIG5leHRUaWNrKCkgd2lsbCBoZWxwIHVzIHRvIGluc3VyZSB0aGF0IHdlIHJlc29sdmUgdGhlIHByb21pc2UgYWZ0ZXIgZW1pdCgncnVubmVyOmVuZCcpIGhhcyBjb21wbGV0ZWRcclxuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0ucmVzb2x2ZSh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9kZXRlcm1pbmVUZXN0U3RhdHVzQnlTdWl0ZXModGVzdFJlc3VsdCwgZmF0YWxFcnJvcikge1xyXG4gICAgICAgIGlmIChmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBoYXNGYWlsZWRTdWl0ZXMgPSB0ZXN0UmVzdWx0LnN1aXRlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xyXG4gICAgICAgIGlmIChoYXNGYWlsZWRTdWl0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhhc1dhcm5pbmdTdWl0ZXMgPSB0ZXN0UmVzdWx0LnN1aXRlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKTtcclxuICAgICAgICBpZiAoaGFzV2FybmluZ1N1aXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFsbFN1aXRlc1NraXBwZWQgPSB0ZXN0UmVzdWx0LnN1aXRlcy5ldmVyeSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuU0tJUFBFRCk7XHJcbiAgICAgICAgaWYgKGFsbFN1aXRlc1NraXBwZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5TS0lQUEVEO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU3RhdHVzLlBBU1NFRDtcclxuICAgIH1cclxuXHJcbiAgICBvbkl0ZXJhdGlvblN0YXJ0KHJpZCwgaXRlcmF0aW9uLCBzdGFydCkge1xyXG4gICAgICAgIGlmIChpdGVyYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtpdGVyYXRpb259IHN0YXJ0ZWQuLi5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uRW5kKHJpZCwgcmVzdWx0LCBzdGFydCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lml0ZXJhdGlvbk51bSAmJiByZXN1bHQuc3RhdHVzICYmIHJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtyZXN1bHQuaXRlcmF0aW9uTnVtfSBlbmRlZCB3aXRoIHN0YXR1czogJHtyZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TdWl0ZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlOiBzdWl0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlRW5kKHJpZCwgc3VpdGVJZCwgc3VpdGVSZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcclxuICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXN0UmVzdWx0LnN1aXRlcy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke3N1aXRlUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHN1aXRlUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZVN0YXJ0KHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBjYXNlRGVmKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZURlZi5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgY2FzZTogY2FzZURlZixcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhc2VFbmQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VSZXN1bHQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke2Nhc2VSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGNhc2VSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwU3RhcnQocmlkLCBzdGVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwRW5kKHJpZCwgc3RlcFJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0ZXBSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXBSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgaW4gJHtkdXJhdGlvbn1zIHdpdGggc3RhdHVzOiAke3N0YXR1c30uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTG9nRW50cnkodGltZSwgbGV2ZWwsIG1zZywgc3JjID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywge1xyXG4gICAgICAgICAgICBsZXZlbCwgbXNnLCB0aW1lLCBzcmNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGZhaWx1cmUgb2JqZWN0IGluIG9uZSBvZiB0ZXN0IHJlc3VsdCdzIGVudGl0aWVzLiBcclxuICAgICAqIEBwYXJhbSB7VGVzdFJlc3VsdH0gdGVzdFJlc3VsdCBcclxuICAgICAqL1xyXG4gICAgX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlUmVzdWx0IG9mIHN1aXRlUmVzdWx0LmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGVwUmVzdWx0IG9mIGNhc2VSZXN1bHQuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwUmVzdWx0cygpIHtcclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHVuZ3JvdXBlZFJlc3VsdHMgPSBbXTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSB8fCB0aGlzLnJlc3VsdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgdGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0IHx8ICFyZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQucmVzdWx0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICB1bmdyb3VwZWRSZXN1bHRzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdEtleSA9IHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5yZXN1bHRLZXk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1aXRlS2V5ID0gcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnN1aXRlS2V5O1xyXG4gICAgICAgICAgICBsZXQgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV07XHJcbiAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlczogW10sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdFsnX3N1aXRlc0hhc2gnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGFydFRpbWUgPSBNYXRoLm1pbihncm91cGVkUmVzdWx0LnN0YXJ0VGltZSwgcmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmVuZFRpbWUgPSBNYXRoLm1heChncm91cGVkUmVzdWx0LmVuZFRpbWUsIHJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZHVyYXRpb24gPSBncm91cGVkUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkUmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBncm91cGluZyBpcyBieSByZXN1bHQgb25seSwgdGhlbiBqdXN0IGFwcGVuZCBjdXJyZW50IHJlc3VsdCdzIHN1aXRlcyB0byB0aGUgZ3JvdXAncyBzdWl0ZXNcclxuICAgICAgICAgICAgaWYgKCFzdWl0ZUtleSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LnN1aXRlc1xyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3VycmVudFN1aXRlUmVzdWx0IG9mIHJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cEtleSA9IGAke3N1aXRlS2V5fS0ke2N1cnJlbnRTdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW19YDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkU3VpdGVSZXN1bHQgPSBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwZWRTdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XSA9IHsgLi4uY3VycmVudFN1aXRlUmVzdWx0IH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gTWF0aC5taW4oZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZSwgY3VycmVudFN1aXRlUmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lID0gTWF0aC5tYXgoZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUsIGN1cnJlbnRTdWl0ZVJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LmR1cmF0aW9uID0gZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50U3VpdGVSZXN1bHQuY2FzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdWl0ZVJlc3VsdC5jYXNlcy5zb21lKGMgPT4gYy5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50U3VpdGVSZXN1bHQuY2FzZXMuc29tZShjID0+IGMuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb252ZXJ0IGdyb3VwZWQgcmVzdWx0cyBoYXNoIHRvIGFuIGFycmF5XHJcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdHNMaXN0ID0gT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdHMpLm1hcChcclxuICAgICAgICAgICAgZ3JvdXBLZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkubWFwKHN1aXRlR3JvdXBLZXkgPT4gZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaFtzdWl0ZUdyb3VwS2V5XSlcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEZhaWxlZFN1aXRlID0gZ3JvdXBlZFJlc3VsdC5zdWl0ZXMuZmluZChzID0+IHMuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdEZhaWxlZFN1aXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZmFpbHVyZSA9IGZpcnN0RmFpbGVkU3VpdGUuZmFpbHVyZSB8fCBncm91cGVkUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFN1aXRlV2l0aFdhcm5pbmcgPSBncm91cGVkUmVzdWx0LnN1aXRlcy5maW5kKHMgPT4gcy5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RTdWl0ZVdpdGhXYXJuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZmFpbHVyZSA9IGZpcnN0U3VpdGVXaXRoV2FybmluZy5mYWlsdXJlIHx8IGdyb3VwZWRSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgZ3JvdXBlZFJlc3VsdFsnX3N1aXRlc0hhc2gnXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkUmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFsuLi5ncm91cGVkUmVzdWx0c0xpc3QsIC4uLnVuZ3JvdXBlZFJlc3VsdHNdO1xyXG4gICAgICAgIC8vIGNoYW5nZSByZXN1bHRzIHN0YXR1cyB0byBmYWlkZWQgaWYgZmFpbGVkIHN1aXRlcyBhcmUgZmluZGVkXHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMucmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMocmVzdWx0cyk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXN1bHQocmVzdWx0cyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMocmVzdWx0cykge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHJlc3VsdCAmJlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcyAmJlxyXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHQuc3VpdGVzKSAmJlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0LnN1aXRlcy5maW5kKChzdWl0ZSkgPT4gc3VpdGUuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5zdWl0ZXMuZmluZCgoc3VpdGUpID0+IHN1aXRlLnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlUmVzdWx0KHJlc3VsdHMpIHtcclxuICAgICAgICBjb25zdCB1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMgPSBbXTtcclxuXHJcbiAgICAgICAgcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMuaW5jbHVkZXMoc3VpdGUuaXRlcmF0aW9uTnVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignc3VpdGUuaXRlcmF0aW9uTnVtJywgc3VpdGUuaXRlcmF0aW9uTnVtLCAnIG5vdCB1bmlxdWUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzLnB1c2goc3VpdGUuaXRlcmF0aW9uTnVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXX0=
511
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiaW5zdGFudGlhdGVSZXBvcnRlcnMiLCJnZXRFeGl0Q29kZSIsImV4aXRDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidGVzdEZhaWxkZWQiLCJmaW5kIiwiaXRlbSIsInN0YXR1cyIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwicHVzaCIsImdldFJlc3VsdHMiLCJnZW5lcmF0ZVJlcG9ydHMiLCJncm91cGVkUmVzdWx0cyIsImdyb3VwUmVzdWx0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJsb2ciLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwid2FpdEZvclJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJfZGV0ZXJtaW5lVGVzdFN0YXR1c0J5U3VpdGVzIiwiU3RhdHVzIiwiRkFJTEVEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJoYXNGYWlsZWRTdWl0ZXMiLCJzdWl0ZXMiLCJzb21lIiwiaGFzV2FybmluZ1N1aXRlcyIsIldBUk5JTkciLCJhbGxTdWl0ZXNTa2lwcGVkIiwiZXZlcnkiLCJTS0lQUEVEIiwiUEFTU0VEIiwib25JdGVyYXRpb25TdGFydCIsIml0ZXJhdGlvbiIsInN0YXJ0IiwibXNnIiwib25Mb2dFbnRyeSIsIm9uSXRlcmF0aW9uRW5kIiwiaXRlcmF0aW9uTnVtIiwib25TdWl0ZVN0YXJ0Iiwic3VpdGVJZCIsInN1aXRlIiwib25TdWl0ZUVuZCIsInN1aXRlUmVzdWx0Iiwib25DYXNlU3RhcnQiLCJjYXNlSWQiLCJjYXNlRGVmIiwiY2FzZSIsIm9uQ2FzZUVuZCIsImNhc2VSZXN1bHQiLCJfc2F2ZVRlc3RDYXNlVmlkZW9BdHRhY2htZW50Iiwib25TdGVwU3RhcnQiLCJzdGVwIiwicm9vdFBhdGgiLCJmcmFtZXdvcmsiLCJmdWxsUGF0aCIsInBhdGgiLCJvblN0ZXBFbmQiLCJzdGVwUmVzdWx0IiwidG9GaXhlZCIsInRpbWUiLCJsZXZlbCIsInNyYyIsImNhc2VzIiwic3RlcHMiLCJ1bmdyb3VwZWRSZXN1bHRzIiwiX2dyb3VwUmVzdWx0IiwicmVzdWx0S2V5Iiwic3VpdGVLZXkiLCJncm91cGVkUmVzdWx0IiwiTWF0aCIsIm1pbiIsIm1heCIsImN1cnJlbnRTdWl0ZVJlc3VsdCIsImdyb3VwS2V5IiwiZ3JvdXBlZFN1aXRlUmVzdWx0IiwiX3N1aXRlc0hhc2giLCJjIiwiZ3JvdXBlZFJlc3VsdHNMaXN0Iiwia2V5cyIsIm1hcCIsInN1aXRlR3JvdXBLZXkiLCJmaXJzdEZhaWxlZFN1aXRlIiwicyIsImZpcnN0U3VpdGVXaXRoV2FybmluZyIsInJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzIiwidmFsaWRhdGVSZXN1bHQiLCJmYWlsZWQiLCJ1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMiLCJpbmNsdWRlcyIsIndhcm4iLCJhdHRhY2htZW50cyIsImF0dGFjaG1lbnRzVG9SZW1vdmUiLCJpIiwiYXR0YWNobWVudCIsIl91cmwiLCJ2aWRlb0ZpbGVQYXRoIiwiZG93bmxvYWRWaWRlbyIsImZpbGVOYW1lIiwiZmlsZVBhdGgiLCJlIiwibWVzc2FnZSIsImVsbUluZGV4VG9SZW1vdmUiLCJpbmRleE9mIiwic3BsaWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLFNBQVMsR0FBRztBQUNkQyxFQUFBQSxJQUFJLEVBQUVDLHFCQURRO0FBRWRDLEVBQUFBLEtBQUssRUFBRUMsc0JBRk87QUFHZEMsRUFBQUEsSUFBSSxFQUFFQyxxQkFIUTtBQUlkQyxFQUFBQSxLQUFLLEVBQUVDLHNCQUpPO0FBS2RDLEVBQUFBLEdBQUcsRUFBRUMsb0JBTFM7QUFNZEMsRUFBQUEsR0FBRyxFQUFFQztBQU5TLENBQWxCO0FBU0EsTUFBTUMsaUJBQWlCLEdBQUcsYUFBMUI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxFQUExQjs7QUFFZSxNQUFNQyxnQkFBTixTQUErQkMsb0JBQS9CLENBQTRDO0FBQ3ZEQyxFQUFBQSxXQUFXLENBQUNDLE9BQUQsRUFBVTtBQUNqQjtBQUVBLFNBQUtDLE9BQUwsR0FBZSxFQUFmO0FBRUEsU0FBS0MsaUJBQUwsR0FBeUIsRUFBekI7QUFDQSxTQUFLRixPQUFMLEdBQWVBLE9BQWY7QUFD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QixFQUE0QjtBQUN4QnJELFFBQUFBLFVBQVUsQ0FBQzBDLFdBQVgsQ0FBdUJhLE1BQXZCLENBQThCRixnQkFBOUIsRUFBZ0QsQ0FBaEQ7QUFDSDtBQUNKO0FBQ0o7O0FBbmNzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogUmVwb3J0IGFnZ3JlZ2F0b3JcclxuICovXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgVGVzdFJlc3VsdCBmcm9tICcuLi9tb2RlbC90ZXN0LXJlc3VsdCc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vbGliL3V0aWwnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5cclxuLy8gaW1wb3J0IGFsbCBidWlsdC1pbiByZXBvcnRlcnNcclxuaW1wb3J0IEpzb25SZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanNvbic7XHJcbmltcG9ydCBKVW5pdFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1qdW5pdCc7XHJcbmltcG9ydCBIdG1sUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWh0bWwnO1xyXG5pbXBvcnQgRXhjZWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItZXhjZWwnO1xyXG5pbXBvcnQgUGRmUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXBkZic7XHJcbmltcG9ydCBYbWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXIteG1sJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgU3RhdHVzIGZyb20gJy4uL21vZGVsL3N0YXR1cyc7XHJcblxyXG5jb25zdCBSZXBvcnRlcnMgPSB7XHJcbiAgICBqc29uOiBKc29uUmVwb3J0ZXIsXHJcbiAgICBqdW5pdDogSlVuaXRSZXBvcnRlcixcclxuICAgIGh0bWw6IEh0bWxSZXBvcnRlcixcclxuICAgIGV4Y2VsOiBFeGNlbFJlcG9ydGVyLFxyXG4gICAgcGRmOiBQZGZSZXBvcnRlcixcclxuICAgIHhtbDogWG1sUmVwb3J0ZXJcclxufTtcclxuXHJcbmNvbnN0IERFRkFVTFRfVEVTVF9OQU1FID0gJ094eWdlbiBUZXN0JztcclxuY29uc3QgREVGQVVMVF9SRVBPUlRFUlMgPSBbXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcG9ydEFnZ3JlZ2F0b3IgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgLy8gcmVzdWx0cyBoYXNoIHRhYmxlIGJhc2VkIG9uIHJ1bm5lciBpZCBrZXlcclxuICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAvLyBhIGhhc2ggbGlzdCBvZiBydW5uZXJFbmQgZXZlbnQgcHJvbWlzZXMsIGtleWVkIGJ5IHJ1bm5lciBpZFxyXG4gICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXMgPSB7fTtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgIHRoaXMuaW5zdGFudGlhdGVSZXBvcnRlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFeGl0Q29kZSgpIHtcclxuICAgICAgICBsZXQgZXhpdENvZGUgPSAwO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cyAmJlxyXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMucmVzdWx0cykgJiZcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmxlbmd0aCA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgdGVzdEZhaWxkZWQgPSB0aGlzLnJlc3VsdHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0ZXN0RmFpbGRlZCkge1xyXG4gICAgICAgICAgICAgICAgZXhpdENvZGUgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBicm9rZW4gP1xyXG4gICAgICAgICAgICBleGl0Q29kZSA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGV4aXRDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGluc3RhbnRpYXRlUmVwb3J0ZXJzKCkge1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXJzID0gW107XHJcbiAgICAgICAgY29uc3QgZ2VuZXJhbFJlcG9ydGluZ09wdHMgPSB0aGlzLm9wdGlvbnMucmVwb3J0aW5nIHx8IHt9O1xyXG4gICAgICAgIGZvciAobGV0IHJlcG9ydGVyIG9mIGdlbmVyYWxSZXBvcnRpbmdPcHRzLnJlcG9ydGVycyB8fCBERUZBVUxUX1JFUE9SVEVSUykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcG9ydGVyICE9PSAnc3RyaW5nJyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcG9ydGVyLCAnbmFtZScpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgcmVwb3J0ZXJzIHRoYXQgZG8gbm90IGhhdmUgJ25hbWUnIHByb3BlcnR5IGFzIGl0J3MgZXNzZW50aWFsIHRvIGxvYWQgdGhlIGNvcnJlc3BvbmRpbmcgUmVwb3J0ZXIgY2xhc3NcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRlck5hbWUgPSB0eXBlb2YgcmVwb3J0ZXIgPT09ICdzdHJpbmcnID8gcmVwb3J0ZXIgOiByZXBvcnRlci5uYW1lO1xyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRlck9wdHMgPSB0eXBlb2YgcmVwb3J0ZXIgPT09ICdvYmplY3QnID8gcmVwb3J0ZXIgOiBnZW5lcmFsUmVwb3J0aW5nT3B0cztcclxuXHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUmVwb3J0ZXJzLCByZXBvcnRlck5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGVycy5wdXNoKG5ldyBSZXBvcnRlcnNbcmVwb3J0ZXJOYW1lXSh0aGlzLm9wdGlvbnMsIHJlcG9ydGVyT3B0cykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFJlc3VsdHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZVJlcG9ydHMoKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMucmVwb3J0ZXJzKSB8fCB0aGlzLnJlcG9ydGVycy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZXN1bHRzID0gdGhpcy5ncm91cFJlc3VsdHMoKTtcclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiB0aGlzLnJlcG9ydGVycykge1xyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRQYXRoID0gcmVwb3J0ZXIuZ2VuZXJhdGUoZ3JvdXBlZFJlc3VsdHMpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgWW91ciByZXBvcnQgaXMgcmVhZHk6ICR7cmVwb3J0UGF0aH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgd2FpdEZvclJlc3VsdChyaWQpIHtcclxuICAgICAgICBpZiAoIXJpZCB8fCAhdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHRzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bm5lckVuZFByb21pc2VzICYmIHRoaXMucnVubmVyRW5kUHJvbWlzZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLnJ1bm5lckVuZFByb21pc2VzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SdW5uZXJTdGFydChyaWQsIG9wdHMsIGNhcHMpIHtcclxuICAgICAgICBpZiAoIXJpZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicmlkXCIgY2Fubm90IGJlIGVtcHR5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gbmV3IFRlc3RSZXN1bHQoKTtcclxuICAgICAgICB0ZXN0UmVzdWx0LnJpZCA9IHJpZDtcclxuICAgICAgICB0ZXN0UmVzdWx0Lm5hbWUgPSBvcHRzLm5hbWUgfHwgREVGQVVMVF9URVNUX05BTUU7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5jYXBhYmlsaXRpZXMgPSBjYXBzO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuZW52aXJvbm1lbnQgPSBvcHRzLmVudlZhcnMgfHwge307XHJcbiAgICAgICAgdGVzdFJlc3VsdC5vcHRpb25zID0gb3B0cztcclxuICAgICAgICB0aGlzLnJlc3VsdHMucHVzaCh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgcHJvbWlzZSBmb3IgbGF0ZXIgdG8gYmUgcmVzb2x2ZWQgb24gcnVubmVyOmVuZCBldmVudFxyXG4gICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSA9IGRlZmVyKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFRlc3QgJHtyaWR9IGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdydW5uZXI6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgb3B0cyxcclxuICAgICAgICAgICAgY2Fwc1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUnVubmVyRW5kKHJpZCwgZmluYWxSZXN1bHQsIGZhdGFsRXJyb3IpIHtcclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcclxuICAgICAgICBpZiAodGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIHRlc3RSZXN1bHQuZHVyYXRpb24gPSB0ZXN0UmVzdWx0LmVuZFRpbWUgLSB0ZXN0UmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRlc3Qgc3RhdHVzIGJhc2VkIG9uIHN1aXRlcyBzdGF0dXNlc1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LnN0YXR1cyA9IHRoaXMuX2RldGVybWluZVRlc3RTdGF0dXNCeVN1aXRlcyh0ZXN0UmVzdWx0LCBmYXRhbEVycm9yKTtcclxuICAgICAgICAgICAgLy8gdGVzdFJlc3VsdC5zdGF0dXMgPSBmYXRhbEVycm9yID8gU3RhdHVzLkZBSUxFRCA6ICh0ZXN0UmVzdWx0LnN1aXRlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpKSA/IFN0YXR1cy5GQUlMRUQgOiBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1lIHRoYXQgaWYgZmF0YWxFcnJvciBpcyBub3QgaW5oZXJpdGVkIGZyb20gRXJyb3IgY2xhc3MgdGhlbiB3ZSBhbHJlYWR5IGdvdCBPeHlnZW4gRmFpbHVyZSBvYmplY3RcclxuICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmZhaWx1cmUgPSBmYXRhbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGZhdGFsRXJyb3IpIDogZmF0YWxFcnJvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuZmFpbHVyZSA9IHRoaXMuX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZmluYWxSZXN1bHQgJiYgZmluYWxSZXN1bHQuY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5mYWlsdXJlLnR5cGUgJiYgdGVzdFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZS50eXBlfSBhdCAke3Rlc3RSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbn0uYCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZS50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZS50eXBlfWApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGVzdFJlc3VsdC5mYWlsdXJlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmV9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFRlc3QgJHtyaWR9IGhhcyBmaW5pc2hlZCB3aXRoIHN0YXR1czogJHt0ZXN0UmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0KCdydW5uZXI6ZW5kJywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogdGVzdFJlc3VsdCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdKSB7XHJcbiAgICAgICAgICAgIC8vIGNhbGxpbmcgbmV4dFRpY2soKSB3aWxsIGhlbHAgdXMgdG8gaW5zdXJlIHRoYXQgd2UgcmVzb2x2ZSB0aGUgcHJvbWlzZSBhZnRlciBlbWl0KCdydW5uZXI6ZW5kJykgaGFzIGNvbXBsZXRlZFxyXG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXS5yZXNvbHZlKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2RldGVybWluZVRlc3RTdGF0dXNCeVN1aXRlcyh0ZXN0UmVzdWx0LCBmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgaWYgKGZhdGFsRXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN1aXRlcyA9IHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgaWYgKGhhc0ZhaWxlZFN1aXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaGFzV2FybmluZ1N1aXRlcyA9IHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpO1xyXG4gICAgICAgIGlmIChoYXNXYXJuaW5nU3VpdGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuV0FSTklORztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWxsU3VpdGVzU2tpcHBlZCA9IHRlc3RSZXN1bHQuc3VpdGVzLmV2ZXJ5KHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5TS0lQUEVEKTtcclxuICAgICAgICBpZiAoYWxsU3VpdGVzU2tpcHBlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RhdHVzLlNLSVBQRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTdGF0dXMuUEFTU0VEO1xyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uU3RhcnQocmlkLCBpdGVyYXRpb24sIHN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKGl0ZXJhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgJHtzdGFydH0gSXRlcmF0aW9uICMke2l0ZXJhdGlvbn0gc3RhcnRlZC4uLmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25JdGVyYXRpb25FbmQocmlkLCByZXN1bHQsIHN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuaXRlcmF0aW9uTnVtICYmIHJlc3VsdC5zdGF0dXMgJiYgcmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSkge1xyXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgJHtzdGFydH0gSXRlcmF0aW9uICMke3Jlc3VsdC5pdGVyYXRpb25OdW19IGVuZGVkIHdpdGggc3RhdHVzOiAke3Jlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICAgICAgdGhpcy5vbkxvZ0VudHJ5KG51bGwsICdJTkZPJywgbXNnLCAndXNlcicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlU3RhcnQocmlkLCBzdWl0ZUlkLCBzdWl0ZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWl0ZSBcIiR7c3VpdGUubmFtZX1cIiBoYXMgc3RhcnRlZC4uLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnc3VpdGU6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZDogc3VpdGVJZCxcclxuICAgICAgICAgICAgc3VpdGU6IHN1aXRlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU3VpdGVFbmQocmlkLCBzdWl0ZUlkLCBzdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHgucmlkID09PSByaWQpO1xyXG4gICAgICAgIGlmICghdGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlc3RSZXN1bHQuc3VpdGVzLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWl0ZSBcIiR7c3VpdGVSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7c3VpdGVSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnc3VpdGU6ZW5kJywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogc3VpdGVSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYXNlU3RhcnQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VEZWYpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlRGVmLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2Nhc2U6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICBjYXNlOiBjYXNlRGVmLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQ2FzZUVuZChyaWQsIHN1aXRlSWQsIGNhc2VJZCwgY2FzZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAtIENhc2UgXCIke2Nhc2VSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7Y2FzZVJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVRlc3RDYXNlVmlkZW9BdHRhY2htZW50KGNhc2VSZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGNhc2VSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwU3RhcnQocmlkLCBzdGVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwRW5kKHJpZCwgc3RlcFJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0ZXBSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXBSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgaW4gJHtkdXJhdGlvbn1zIHdpdGggc3RhdHVzOiAke3N0YXR1c30uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTG9nRW50cnkodGltZSwgbGV2ZWwsIG1zZywgc3JjID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywge1xyXG4gICAgICAgICAgICBsZXZlbCwgbXNnLCB0aW1lLCBzcmNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGZhaWx1cmUgb2JqZWN0IGluIG9uZSBvZiB0ZXN0IHJlc3VsdCdzIGVudGl0aWVzLiBcclxuICAgICAqIEBwYXJhbSB7VGVzdFJlc3VsdH0gdGVzdFJlc3VsdCBcclxuICAgICAqL1xyXG4gICAgX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlUmVzdWx0IG9mIHN1aXRlUmVzdWx0LmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGVwUmVzdWx0IG9mIGNhc2VSZXN1bHQuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwUmVzdWx0cygpIHtcclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHVuZ3JvdXBlZFJlc3VsdHMgPSBbXTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSB8fCB0aGlzLnJlc3VsdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgdGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0IHx8ICFyZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQucmVzdWx0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICB1bmdyb3VwZWRSZXN1bHRzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdEtleSA9IHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5yZXN1bHRLZXk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1aXRlS2V5ID0gcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnN1aXRlS2V5O1xyXG4gICAgICAgICAgICBsZXQgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV07XHJcbiAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlczogW10sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdFsnX3N1aXRlc0hhc2gnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGFydFRpbWUgPSBNYXRoLm1pbihncm91cGVkUmVzdWx0LnN0YXJ0VGltZSwgcmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmVuZFRpbWUgPSBNYXRoLm1heChncm91cGVkUmVzdWx0LmVuZFRpbWUsIHJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZHVyYXRpb24gPSBncm91cGVkUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkUmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBncm91cGluZyBpcyBieSByZXN1bHQgb25seSwgdGhlbiBqdXN0IGFwcGVuZCBjdXJyZW50IHJlc3VsdCdzIHN1aXRlcyB0byB0aGUgZ3JvdXAncyBzdWl0ZXNcclxuICAgICAgICAgICAgaWYgKCFzdWl0ZUtleSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LnN1aXRlc1xyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3VycmVudFN1aXRlUmVzdWx0IG9mIHJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cEtleSA9IGAke3N1aXRlS2V5fS0ke2N1cnJlbnRTdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW19YDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkU3VpdGVSZXN1bHQgPSBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwZWRTdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XSA9IHsgLi4uY3VycmVudFN1aXRlUmVzdWx0IH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gTWF0aC5taW4oZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZSwgY3VycmVudFN1aXRlUmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lID0gTWF0aC5tYXgoZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUsIGN1cnJlbnRTdWl0ZVJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LmR1cmF0aW9uID0gZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50U3VpdGVSZXN1bHQuY2FzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdWl0ZVJlc3VsdC5jYXNlcy5zb21lKGMgPT4gYy5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50U3VpdGVSZXN1bHQuY2FzZXMuc29tZShjID0+IGMuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb252ZXJ0IGdyb3VwZWQgcmVzdWx0cyBoYXNoIHRvIGFuIGFycmF5XHJcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdHNMaXN0ID0gT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdHMpLm1hcChcclxuICAgICAgICAgICAgZ3JvdXBLZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkubWFwKHN1aXRlR3JvdXBLZXkgPT4gZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaFtzdWl0ZUdyb3VwS2V5XSlcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEZhaWxlZFN1aXRlID0gZ3JvdXBlZFJlc3VsdC5zdWl0ZXMuZmluZChzID0+IHMuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdEZhaWxlZFN1aXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZmFpbHVyZSA9IGZpcnN0RmFpbGVkU3VpdGUuZmFpbHVyZSB8fCBncm91cGVkUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFN1aXRlV2l0aFdhcm5pbmcgPSBncm91cGVkUmVzdWx0LnN1aXRlcy5maW5kKHMgPT4gcy5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RTdWl0ZVdpdGhXYXJuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZmFpbHVyZSA9IGZpcnN0U3VpdGVXaXRoV2FybmluZy5mYWlsdXJlIHx8IGdyb3VwZWRSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgZ3JvdXBlZFJlc3VsdFsnX3N1aXRlc0hhc2gnXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkUmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFsuLi5ncm91cGVkUmVzdWx0c0xpc3QsIC4uLnVuZ3JvdXBlZFJlc3VsdHNdO1xyXG4gICAgICAgIC8vIGNoYW5nZSByZXN1bHRzIHN0YXR1cyB0byBmYWlkZWQgaWYgZmFpbGVkIHN1aXRlcyBhcmUgZmluZGVkXHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMucmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMocmVzdWx0cyk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXN1bHQocmVzdWx0cyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMocmVzdWx0cykge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHJlc3VsdCAmJlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcyAmJlxyXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHQuc3VpdGVzKSAmJlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0LnN1aXRlcy5maW5kKChzdWl0ZSkgPT4gc3VpdGUuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5zdWl0ZXMuZmluZCgoc3VpdGUpID0+IHN1aXRlLnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlUmVzdWx0KHJlc3VsdHMpIHtcclxuICAgICAgICBjb25zdCB1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMgPSBbXTtcclxuXHJcbiAgICAgICAgcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMuaW5jbHVkZXMoc3VpdGUuaXRlcmF0aW9uTnVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignc3VpdGUuaXRlcmF0aW9uTnVtJywgc3VpdGUuaXRlcmF0aW9uTnVtLCAnIG5vdCB1bmlxdWUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzLnB1c2goc3VpdGUuaXRlcmF0aW9uTnVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NhdmVUZXN0Q2FzZVZpZGVvQXR0YWNobWVudChjYXNlUmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKCFjYXNlUmVzdWx0IHx8ICFjYXNlUmVzdWx0LmF0dGFjaG1lbnRzIHx8ICFjYXNlUmVzdWx0LmF0dGFjaG1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzVG9SZW1vdmUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8IGNhc2VSZXN1bHQuYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGNhc2VSZXN1bHQuYXR0YWNobWVudHNbaV07XHJcbiAgICAgICAgICAgIGlmICghYXR0YWNobWVudC5fdXJsKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlkZW9GaWxlUGF0aCA9XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgb3h1dGlsLmRvd25sb2FkVmlkZW8oYXR0YWNobWVudC5maWxlTmFtZSwgYXR0YWNobWVudC5fdXJsLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2aWRlb0ZpbGVQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHNUb1JlbW92ZS5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudC5maWxlUGF0aCA9IHZpZGVvRmlsZVBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGF0dGFjaG1lbnRbJ191cmwnXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZG93bmxvYWQgdmlkZW8gZmlsZTogJywgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzVG9SZW1vdmUucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZW1vdmUgdmlkZW8gYXR0YWNobWVudHMgdGhhdCBjb3VsZG4ndCBiZSBkb3dubG9hZGVkXHJcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBhdHRhY2htZW50c1RvUmVtb3ZlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsbUluZGV4VG9SZW1vdmUgPSBjYXNlUmVzdWx0LmF0dGFjaG1lbnRzLmluZGV4T2YoYXR0YWNobWVudHNUb1JlbW92ZVtpXSk7XHJcbiAgICAgICAgICAgIGlmICghZWxtSW5kZXhUb1JlbW92ZSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LmF0dGFjaG1lbnRzLnNwbGljZShlbG1JbmRleFRvUmVtb3ZlLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==