@appium/base-driver 8.2.4 → 8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/build/lib/basedriver/commands/find.js +4 -11
  2. package/build/lib/basedriver/commands/log.js +3 -6
  3. package/build/lib/basedriver/commands/session.js +18 -27
  4. package/build/lib/basedriver/commands/settings.js +4 -8
  5. package/build/lib/basedriver/commands/timeout.js +10 -15
  6. package/build/lib/basedriver/device-settings.js +14 -2
  7. package/build/lib/basedriver/driver.js +22 -20
  8. package/build/lib/basedriver/helpers.js +9 -9
  9. package/build/lib/express/express-logging.js +2 -2
  10. package/build/lib/express/idempotency.js +2 -2
  11. package/build/lib/helpers/capabilities.js +39 -0
  12. package/build/lib/index.js +3 -5
  13. package/build/lib/jsonwp-proxy/protocol-converter.js +18 -12
  14. package/build/lib/jsonwp-proxy/proxy.js +19 -12
  15. package/build/lib/protocol/protocol.js +36 -27
  16. package/build/lib/protocol/routes.js +67 -1
  17. package/build/test/basedriver/capabilities-specs.js +43 -1
  18. package/build/test/basedriver/capability-specs.js +126 -167
  19. package/build/test/basedriver/commands/log-specs.js +12 -5
  20. package/build/test/basedriver/driver-tests.js +11 -14
  21. package/build/test/basedriver/timeout-specs.js +7 -9
  22. package/build/test/express/server-e2e-specs.js +10 -5
  23. package/build/test/express/server-specs.js +22 -16
  24. package/build/test/express/static-specs.js +10 -5
  25. package/build/test/protocol/fake-driver.js +12 -15
  26. package/build/test/protocol/protocol-e2e-specs.js +16 -10
  27. package/build/test/protocol/routes-specs.js +2 -2
  28. package/lib/basedriver/commands/find.js +3 -6
  29. package/lib/basedriver/commands/log.js +2 -4
  30. package/lib/basedriver/commands/session.js +21 -22
  31. package/lib/basedriver/commands/settings.js +3 -5
  32. package/lib/basedriver/commands/timeout.js +9 -10
  33. package/lib/basedriver/device-settings.js +10 -1
  34. package/lib/basedriver/driver.js +25 -12
  35. package/lib/basedriver/helpers.js +13 -11
  36. package/lib/express/express-logging.js +1 -1
  37. package/lib/express/idempotency.js +1 -1
  38. package/lib/helpers/capabilities.js +25 -0
  39. package/lib/index.js +2 -2
  40. package/lib/jsonwp-proxy/protocol-converter.js +14 -13
  41. package/lib/jsonwp-proxy/proxy.js +16 -12
  42. package/lib/protocol/protocol.js +34 -29
  43. package/lib/protocol/routes.js +60 -1
  44. package/package.json +29 -22
  45. package/test/basedriver/capabilities-specs.js +34 -2
  46. package/test/basedriver/capability-specs.js +120 -146
  47. package/test/basedriver/commands/log-specs.js +12 -3
  48. package/test/basedriver/driver-tests.js +12 -7
  49. package/test/basedriver/timeout-specs.js +6 -11
  50. package/build/lib/protocol/sessions-cache.js +0 -88
  51. package/lib/protocol/sessions-cache.js +0 -74
@@ -15,13 +15,15 @@ var _bluebird = _interopRequireDefault(require("bluebird"));
15
15
 
16
16
  var _lib = require("../../lib");
17
17
 
18
- var _sinon = _interopRequireDefault(require("sinon"));
18
+ var _sinon = require("sinon");
19
19
 
20
20
  function baseDriverUnitTests(DriverClass, defaultCaps = {}) {
21
21
  const className = DriverClass.name || '(unknown driver)';
22
22
  describe(`BaseDriver (as ${className})`, function () {
23
23
  let d, w3cCaps;
24
+ let sandbox;
24
25
  beforeEach(function () {
26
+ sandbox = (0, _sinon.createSandbox)();
25
27
  d = new DriverClass();
26
28
  w3cCaps = {
27
29
  alwaysMatch: Object.assign({}, defaultCaps, {
@@ -33,6 +35,7 @@ function baseDriverUnitTests(DriverClass, defaultCaps = {}) {
33
35
  });
34
36
  afterEach(async function () {
35
37
  await d.deleteSession();
38
+ sandbox.restore();
36
39
  });
37
40
  it('should report the version of BaseDriver used', function () {
38
41
  should.exist(DriverClass.baseVersion);
@@ -346,8 +349,7 @@ function baseDriverUnitTests(DriverClass, defaultCaps = {}) {
346
349
  });
347
350
  describe('#proxyRouteIsAvoided', function () {
348
351
  it('should validate form of avoidance list', function () {
349
- const avoidStub = _sinon.default.stub(d, 'getProxyAvoidList');
350
-
352
+ const avoidStub = sandbox.stub(d, 'getProxyAvoidList');
351
353
  avoidStub.returns([['POST', /\/foo/], ['GET']]);
352
354
  (() => {
353
355
  d.proxyRouteIsAvoided();
@@ -359,8 +361,7 @@ function baseDriverUnitTests(DriverClass, defaultCaps = {}) {
359
361
  avoidStub.restore();
360
362
  });
361
363
  it('should reject bad http methods', function () {
362
- const avoidStub = _sinon.default.stub(d, 'getProxyAvoidList');
363
-
364
+ const avoidStub = sandbox.stub(d, 'getProxyAvoidList');
364
365
  avoidStub.returns([['POST', /^foo/], ['BAZETE', /^bar/]]);
365
366
  (() => {
366
367
  d.proxyRouteIsAvoided();
@@ -368,8 +369,7 @@ function baseDriverUnitTests(DriverClass, defaultCaps = {}) {
368
369
  avoidStub.restore();
369
370
  });
370
371
  it('should reject non-regex routes', function () {
371
- const avoidStub = _sinon.default.stub(d, 'getProxyAvoidList');
372
-
372
+ const avoidStub = sandbox.stub(d, 'getProxyAvoidList');
373
373
  avoidStub.returns([['POST', /^foo/], ['GET', '/bar']]);
374
374
  (() => {
375
375
  d.proxyRouteIsAvoided();
@@ -377,22 +377,19 @@ function baseDriverUnitTests(DriverClass, defaultCaps = {}) {
377
377
  avoidStub.restore();
378
378
  });
379
379
  it('should return true for routes in the avoid list', function () {
380
- const avoidStub = _sinon.default.stub(d, 'getProxyAvoidList');
381
-
380
+ const avoidStub = sandbox.stub(d, 'getProxyAvoidList');
382
381
  avoidStub.returns([['POST', /^\/foo/]]);
383
382
  d.proxyRouteIsAvoided(null, 'POST', '/foo/bar').should.be.true;
384
383
  avoidStub.restore();
385
384
  });
386
385
  it('should strip away any wd/hub prefix', function () {
387
- const avoidStub = _sinon.default.stub(d, 'getProxyAvoidList');
388
-
386
+ const avoidStub = sandbox.stub(d, 'getProxyAvoidList');
389
387
  avoidStub.returns([['POST', /^\/foo/]]);
390
388
  d.proxyRouteIsAvoided(null, 'POST', '/foo/bar').should.be.true;
391
389
  avoidStub.restore();
392
390
  });
393
391
  it('should return false for routes not in the avoid list', function () {
394
- const avoidStub = _sinon.default.stub(d, 'getProxyAvoidList');
395
-
392
+ const avoidStub = sandbox.stub(d, 'getProxyAvoidList');
396
393
  avoidStub.returns([['POST', /^\/foo/]]);
397
394
  d.proxyRouteIsAvoided(null, 'GET', '/foo/bar').should.be.false;
398
395
  d.proxyRouteIsAvoided(null, 'POST', '/boo').should.be.false;
@@ -547,4 +544,4 @@ var _default = baseDriverUnitTests;
547
544
  exports.default = _default;require('source-map-support').install();
548
545
 
549
546
 
550
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9kcml2ZXItdGVzdHMuanMiXSwibmFtZXMiOlsiYmFzZURyaXZlclVuaXRUZXN0cyIsIkRyaXZlckNsYXNzIiwiZGVmYXVsdENhcHMiLCJjbGFzc05hbWUiLCJuYW1lIiwiZGVzY3JpYmUiLCJkIiwidzNjQ2FwcyIsImJlZm9yZUVhY2giLCJhbHdheXNNYXRjaCIsIk9iamVjdCIsImFzc2lnbiIsInBsYXRmb3JtTmFtZSIsImZpcnN0TWF0Y2giLCJhZnRlckVhY2giLCJkZWxldGVTZXNzaW9uIiwiaXQiLCJzaG91bGQiLCJleGlzdCIsImJhc2VWZXJzaW9uIiwic3RhdHVzIiwiZ2V0U3RhdHVzIiwiZXFsIiwic2Vzc0lkIiwiY3JlYXRlU2Vzc2lvbiIsImJlIiwiYSIsImxlbmd0aCIsImFib3ZlIiwiXyIsImNsb25lRGVlcCIsImV2ZW50dWFsbHkiLCJyZWplY3RlZFdpdGgiLCJzZXNzaW9uSWQxIiwiZXF1YWwiLCJzZXNzaW9uSWQiLCJzZXNzaW9uSWQyIiwibm90IiwiY2FwcyIsImdldFNlc3Npb24iLCJzZXNzaW9ucyIsImdldFNlc3Npb25zIiwiY2xvbmUiLCJpbmNsdWRlIiwiaWQiLCJjYXBhYmlsaXRpZXMiLCJkZXZpY2VOYW1lIiwiQiIsImRlbGF5IiwiYmluZCIsImNtZFByb21pc2UiLCJleGVjdXRlQ29tbWFuZCIsInAiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2V0VGltZW91dCIsIkVycm9yIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsIm9sZERlbGV0ZVNlc3Npb24iLCJwcm90b2NvbCIsImRyaXZlckZvclNlc3Npb24iLCJ3YWl0TXMiLCJEYXRlIiwibm93IiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsIm51bUNtZHMiLCJjbWRzIiwiaSIsInB1c2giLCJyZXN1bHRzIiwiYWxsIiwic2V0dGxlIiwidmFsdWUiLCJyZWFzb24iLCJtZXNzYWdlIiwiY29udGFpbiIsImJlZm9yZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJ0aW1lb3V0cyIsImltcGxpY2l0V2FpdE1zIiwidW5kZWZpbmVkIiwiZ2V0VGltZW91dHMiLCJoYXZlIiwicHJvcGVydHkiLCJkZWVwIiwiaW1wbGljaXQiLCJjb21tYW5kIiwibmV3Q2FwcyIsInByb3h5QWN0aXZlIiwiYW4iLCJpbnN0YW5jZW9mIiwiRnVuY3Rpb24iLCJmYWxzZSIsInRocm93IiwiZ2V0UHJveHlBdm9pZExpc3QiLCJBcnJheSIsImNhblByb3h5IiwiYXZvaWRTdHViIiwic2lub24iLCJzdHViIiwicmV0dXJucyIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJyZXN0b3JlIiwidHJ1ZSIsImJlZm9yZVN0YXJ0VGltZSIsInNob3VsZFZhbGlkYXRlQ2FwcyIsImV2ZW50SGlzdG9yeSIsImNvbW1hbmRzIiwibmV3U2Vzc2lvblJlcXVlc3RlZCIsIm5ld1Nlc3Npb25TdGFydGVkIiwiY21kIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImxvZ0V2ZW50IiwiZm9vIiwiYmFyIiwicmVzIiwiZXZlbnRzIiwiZXZlbnRUaW1pbmdzIiwicmVzZXQiLCJvYmoiLCJkMSIsIkRldmljZVNldHRpbmdzIiwiZDIiLCJfc2V0dGluZ3MiLCJkZW55SW5zZWN1cmUiLCJhbGxvd0luc2VjdXJlIiwicmVsYXhlZFNlY3VyaXR5RW5hYmxlZCIsImlzRmVhdHVyZUVuYWJsZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsU0FBU0EsbUJBQVQsQ0FBOEJDLFdBQTlCLEVBQTJDQyxXQUFXLEdBQUcsRUFBekQsRUFBNkQ7QUFFM0QsUUFBTUMsU0FBUyxHQUFHRixXQUFXLENBQUNHLElBQVosSUFBb0Isa0JBQXRDO0FBRUFDLEVBQUFBLFFBQVEsQ0FBRSxrQkFBaUJGLFNBQVUsR0FBN0IsRUFBaUMsWUFBWTtBQUNuRCxRQUFJRyxDQUFKLEVBQU9DLE9BQVA7QUFFQUMsSUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckJG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QUYsQ0FBbUIsS0FBbkIsRUFBMEJoSCxNQUExQixDQUFpQ1EsRUFBakMsQ0FBb0MrRSxJQUFwQztBQUNELEtBTkMsQ0FBRjtBQU9ELEdBM0NPLENBQVI7QUE0Q0Q7O2VBRWN4RyxtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuXG5cbi8vIHdyYXAgdGhlc2UgdGVzdHMgaW4gYSBmdW5jdGlvbiBzbyB3ZSBjYW4gZXhwb3J0IHRoZSB0ZXN0cyBhbmQgcmUtdXNlIHRoZW1cbi8vIGZvciBhY3R1YWwgZHJpdmVyIGltcGxlbWVudGF0aW9uc1xuZnVuY3Rpb24gYmFzZURyaXZlclVuaXRUZXN0cyAoRHJpdmVyQ2xhc3MsIGRlZmF1bHRDYXBzID0ge30pIHtcbiAgLy8gdG8gZGlzcGxheSB0aGUgZHJpdmVyIHVuZGVyIHRlc3QgaW4gcmVwb3J0XG4gIGNvbnN0IGNsYXNzTmFtZSA9IERyaXZlckNsYXNzLm5hbWUgfHwgJyh1bmtub3duIGRyaXZlciknO1xuXG4gIGRlc2NyaWJlKGBCYXNlRHJpdmVyIChhcyAke2NsYXNzTmFtZX0pYCwgZnVuY3Rpb24gKCkge1xuICAgIGxldCBkLCB3M2NDYXBzO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBkID0gbmV3IERyaXZlckNsYXNzKCk7XG4gICAgICB3M2NDYXBzID0ge1xuICAgICAgICBhbHdheXNNYXRjaDogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENhcHMsIHtcbiAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdGYWtlJyxcbiAgICAgICAgICAnYXBwaXVtOmRldmljZU5hbWUnOiAnQ29tbW9kb3JlIDY0JyxcbiAgICAgICAgfSksXG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBkLmRlbGV0ZVNlc3Npb24oKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVwb3J0IHRoZSB2ZXJzaW9uIG9mIEJhc2VEcml2ZXIgdXNlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZC5leGlzdChEcml2ZXJDbGFzcy5iYXNlVmVyc2lvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzdGF0dXMgb2JqZWN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHN0YXR1cyA9IGF3YWl0IGQuZ2V0U3RhdHVzKCk7XG4gICAgICBzdGF0dXMuc2hvdWxkLmVxbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIHNlc3Npb25JZCBmcm9tIGNyZWF0ZVNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgW3Nlc3NJZF0gPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICBzaG91bGQuZXhpc3Qoc2Vzc0lkKTtcbiAgICAgIHNlc3NJZC5zaG91bGQuYmUuYSgnc3RyaW5nJyk7XG4gICAgICBzZXNzSWQubGVuZ3RoLnNob3VsZC5iZS5hYm92ZSg1KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGJlIGFibGUgdG8gc3RhcnQgdHdvIHNlc3Npb25zIHdpdGhvdXQgY2xvc2luZyB0aGUgZmlyc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZURlZXAodzNjQ2FwcykpO1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoJ3Nlc3Npb24nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgYWJsZSB0byBkZWxldGUgYSBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHNlc3Npb25JZDEgPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZURlZXAodzNjQ2FwcykpO1xuICAgICAgYXdhaXQgZC5kZWxldGVTZXNzaW9uKCk7XG4gICAgICBzaG91bGQuZXF1YWwoZC5zZXNzaW9uSWQsIG51bGwpO1xuICAgICAgbGV0IHNlc3Npb25JZDIgPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZURlZXAodzNjQ2FwcykpO1xuICAgICAgc2Vzc2lvbklkMS5zaG91bGQubm90LmVxbChzZXNzaW9uSWQyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IHRoZSBjdXJyZW50IHNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgWywgY2Fwc10gPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICBjYXBzLnNob3VsZC5lcXVhbChhd2FpdCBkLmdldFNlc3Npb24oKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBzZXNzaW9ucyBpZiBubyBzZXNzaW9uIGV4aXN0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBzZXNzaW9ucyA9IGF3YWl0IGQuZ2V0U2Vzc2lvbnMoKTtcbiAgICAgIHNlc3Npb25zLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBzZXNzaW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhcHMgPSBfLmNsb25lKHczY0NhcHMpO1xuICAgICAgY2Fwcy5hID0gJ2NhcCc7XG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgY2Fwcyk7XG4gICAgICBsZXQgc2Vzc2lvbnMgPSBhd2FpdCBkLmdldFNlc3Npb25zKCk7XG5cbiAgICAgIHNlc3Npb25zLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBzZXNzaW9uc1swXS5zaG91bGQuaW5jbHVkZSh7XG4gICAgICAgIGlkOiBkLnNlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBzZXNzaW9uc1swXS5jYXBhYmlsaXRpZXMuc2hvdWxkLmluY2x1ZGUoe1xuICAgICAgICBkZXZpY2VOYW1lOiAnQ29tbW9kb3JlIDY0JyxcbiAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZSdcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmdWxmaWxsIGFuIHVuZXhwZWN0ZWQgZHJpdmVyIHF1aXQgcHJvbWlzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG1ha2UgYSBjb21tYW5kIHRoYXQgd2lsbCB3YWl0IGEgYml0IHNvIHdlIGNhbiBjcmFzaCB3aGlsZSBpdCdzIHJ1bm5pbmdcbiAgICAgIGQuZ2V0U3RhdHVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICAgICAgICByZXR1cm4gJ2dvb2Qgc3RhdHVzJztcbiAgICAgIH0uYmluZChkKTtcbiAgICAgIGxldCBjbWRQcm9taXNlID0gZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJyk7XG4gICAgICBhd2FpdCBCLmRlbGF5KDEwKTtcbiAgICAgIGNvbnN0IHAgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0JykpLCA1MDAwKTtcbiAgICAgICAgZC5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ1dlIGNyYXNoZWQnKSk7XG4gICAgICBhd2FpdCBjbWRQcm9taXNlLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL1dlIGNyYXNoZWQvKTtcbiAgICAgIGF3YWl0IHA7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBjb21tYW5kcyBpbiBtaWRkbGUgb2YgdW5leHBlY3RlZCBzaHV0ZG93bicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG1ha2UgYSBjb21tYW5kIHRoYXQgd2lsbCB3YWl0IGEgYml0IHNvIHdlIGNhbiBjcmFzaCB3aGlsZSBpdCdzIHJ1bm5pbmdcbiAgICAgIGQub2xkRGVsZXRlU2Vzc2lvbiA9IGQuZGVsZXRlU2Vzc2lvbjtcbiAgICAgIGQuZGVsZXRlU2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDApO1xuICAgICAgICBhd2FpdCB0aGlzLm9sZERlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH0uYmluZChkKTtcbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB3M2NDYXBzKTtcbiAgICAgIGNvbnN0IHAgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0JykpLCA1MDAwKTtcbiAgICAgICAgZC5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ1dlIGNyYXNoZWQnKSk7XG4gICAgICBhd2FpdCBwO1xuICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnZ2V0U2Vzc2lvbicpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3NodXQgZG93bi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBuZXcgY29tbWFuZHMgYWZ0ZXIgZG9uZSBzaHV0dGluZyBkb3duJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gbWFrZSBhIGNvbW1hbmQgdGhhdCB3aWxsIHdhaXQgYSBiaXQgc28gd2UgY2FuIGNyYXNoIHdoaWxlIGl0J3MgcnVubmluZ1xuICAgICAgZC5vbGREZWxldGVTZXNzaW9uID0gZC5kZWxldGVTZXNzaW9uO1xuICAgICAgZC5kZWxldGVTZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBCLmRlbGF5KDEwMCk7XG4gICAgICAgIGF3YWl0IHRoaXMub2xkRGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfS5iaW5kKGQpO1xuXG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZURlZXAodzNjQ2FwcykpO1xuICAgICAgY29uc3QgcCA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdvblVuZXhwZWN0ZWRTaHV0ZG93biBldmVudCBpcyBleHBlY3RlZCB0byBiZSBmaXJlZCB3aXRoaW4gNSBzZWNvbmRzIHRpbWVvdXQnKSksIDUwMDApO1xuICAgICAgICBkLm9uVW5leHBlY3RlZFNodXRkb3duKHJlc29sdmUpO1xuICAgICAgfSk7XG4gICAgICBkLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKG5ldyBFcnJvcignV2UgY3Jhc2hlZCcpKTtcbiAgICAgIGF3YWl0IHA7XG5cbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFNlc3Npb24nKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zaHV0IGRvd24vKTtcbiAgICAgIGF3YWl0IEIuZGVsYXkoNTAwKTtcblxuICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnY3JlYXRlU2Vzc2lvbicsIG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIFczQyBhbmQgSlNPTldQIHNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUZXN0IFczQyAobGVhdmUgZmlyc3QgMiBhcmdzIG51bGwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlIEpTT05XUCBhcmdzKVxuICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnY3JlYXRlU2Vzc2lvbicsIG51bGwsIG51bGwsIHtcbiAgICAgICAgYWx3YXlzTWF0Y2g6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDYXBzLCB7XG4gICAgICAgICAgcGxhdGZvcm1OYW1lOiAnRmFrZScsXG4gICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgIH0pLFxuICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgfSk7XG5cbiAgICAgIGQucHJvdG9jb2wuc2hvdWxkLmVxdWFsKCdXM0MnKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcm90b2NvbCBkZXRlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHVzZSBXM0MgaWYgb25seSBXM0MgY2FwcyBhcmUgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB7YWx3YXlzTWF0Y2g6IF8uY2xvbmUoZGVmYXVsdENhcHMpLCBmaXJzdE1hdGNoOiBbe31dfSk7XG4gICAgICAgIGQucHJvdG9jb2wuc2hvdWxkLmVxdWFsKCdXM0MnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGEgbWV0aG9kIHRvIGdldCBkcml2ZXIgZm9yIGEgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBbc2Vzc0lkXSA9IGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB3M2NDYXBzKTtcbiAgICAgIGQuZHJpdmVyRm9yU2Vzc2lvbihzZXNzSWQpLnNob3VsZC5lcWwoZCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY29tbWFuZCBxdWV1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBkID0gbmV3IERyaXZlckNsYXNzKCk7XG5cbiAgICAgIGxldCB3YWl0TXMgPSAxMDtcbiAgICAgIGQuZ2V0U3RhdHVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBCLmRlbGF5KHdhaXRNcyk7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpO1xuICAgICAgfS5iaW5kKGQpO1xuXG4gICAgICBkLmdldFNlc3Npb25zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBCLmRlbGF5KHdhaXRNcyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbXVsdGlwYXNzJyk7XG4gICAgICB9LmJpbmQoZCk7XG5cbiAgICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGQuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcXVldWUgY29tbWFuZHMgYW5kLmV4ZWN1dGVDb21tYW5kL3Jlc3BvbmQgaW4gdGhlIG9yZGVyIHJlY2VpdmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbnVtQ21kcyA9IDEwO1xuICAgICAgICBsZXQgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBCLmFsbChjbWRzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBpZiAocmVzdWx0c1tpXSA8PSByZXN1bHRzW2kgLSAxXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHb3QgcmVzdWx0IG91dCBvZiBvcmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGVycm9ycyBjb3JyZWN0bHkgd2hlbiBxdWV1aW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbnVtQ21kcyA9IDEwO1xuICAgICAgICBsZXQgY21kcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGlmIChpID09PSA1KSB7XG4gICAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U2Vzc2lvbnMnKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNtZHMucHVzaChkLmV4ZWN1dGVDb21tYW5kKCdnZXRTdGF0dXMnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgQi5zZXR0bGUoY21kcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgNTsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbaV0udmFsdWUoKSA8PSByZXN1bHRzW2kgLSAxXS52YWx1ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dvdCByZXN1bHQgb3V0IG9mIG9yZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHNbNV0ucmVhc29uKCkubWVzc2FnZS5zaG91bGQuY29udGFpbignbXVsdGlwYXNzJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSA3OyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbaV0udmFsdWUoKSA8PSByZXN1bHRzW2kgLSAxXS52YWx1ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dvdCByZXN1bHQgb3V0IG9mIG9yZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBub3QgY2FyZSBpZiBxdWV1ZSBlbXB0aWVzIGZvciBhIGJpdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG51bUNtZHMgPSAxMDtcbiAgICAgICAgbGV0IGNtZHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJykpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgQi5hbGwoY21kcyk7XG4gICAgICAgIGNtZHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJykpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHMgPSBhd2FpdCBCLmFsbChjbWRzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBpZiAocmVzdWx0c1tpXSA8PSByZXN1bHRzW2kgLSAxXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHb3QgcmVzdWx0IG91dCBvZiBvcmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndGltZW91dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCdjb21tYW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGV4aXN0IGJ5IGRlZmF1bHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5lcXVhbCg2MDAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIGJlIHNldHRhYmxlIHRocm91Z2ggYHRpbWVvdXRzYCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCBkLnRpbWVvdXRzKCdjb21tYW5kJywgMjApO1xuICAgICAgICAgIGQubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXF1YWwoMjApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJ2ltcGxpY2l0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIG5vdCBleGlzdCBieSBkZWZhdWx0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxdWFsKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBiZSBzZXR0YWJsZSB0aHJvdWdoIGB0aW1lb3V0c2AnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgZC50aW1lb3V0cygnaW1wbGljaXQnLCAyMCk7XG4gICAgICAgICAgZC5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXF1YWwoMjApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3RpbWVvdXRzIChXM0MpJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCB3M2NDYXBzKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZC5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgZ2V0IHRpbWVvdXRzIHRoYXQgd2Ugc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLnRpbWVvdXRzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgMTAwMCk7XG4gICAgICAgIGF3YWl0IGQuZ2V0VGltZW91dHMoKS5zaG91bGQuZXZlbnR1YWxseS5oYXZlLnByb3BlcnR5KCdpbXBsaWNpdCcsIDEwMDApO1xuICAgICAgICBhd2FpdCBkLnRpbWVvdXRzKCdjb21tYW5kJywgMjAwMCk7XG4gICAgICAgIGF3YWl0IGQuZ2V0VGltZW91dHMoKS5zaG91bGQuZXZlbnR1YWxseS5kZWVwLmVxdWFsKHtcbiAgICAgICAgICBpbXBsaWNpdDogMTAwMCxcbiAgICAgICAgICBjb21tYW5kOiAyMDAwLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDMwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuZGVlcC5lcXVhbCh7XG4gICAgICAgICAgaW1wbGljaXQ6IDMwMDAsXG4gICAgICAgICAgY29tbWFuZDogMjAwMCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZXNldCBjb21wYXRpYmlsaXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgYm90aCBmdWxsUmVzZXQgYW5kIG5vUmVzZXQgdG8gYmUgdHJ1ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbmV3Q2FwcyA9IHtcbiAgICAgICAgICBhbHdheXNNYXRjaDogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENhcHMsIHtcbiAgICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ0Zha2UnLFxuICAgICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgICAgICAnYXBwaXVtOmZ1bGxSZXNldCc6IHRydWUsXG4gICAgICAgICAgICAnYXBwaXVtOm5vUmVzZXQnOiB0cnVlXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBuZXdDYXBzKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgICAvbm9SZXNldC4rZnVsbFJlc2V0Lyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcm94eWluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBzZXNzSWQ7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW3Nlc3NJZF0gPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCcjcHJveHlBY3RpdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZXhpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5wcm94eUFjdGl2ZS5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihGdW5jdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLnByb3h5QWN0aXZlKHNlc3NJZCkuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHNlc3Npb25JZCBpcyB3cm9uZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4geyBkLnByb3h5QWN0aXZlKCdhYWEnKTsgfSkuc2hvdWxkLnRocm93O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnI2dldFByb3h5QXZvaWRMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGV4aXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQuZ2V0UHJveHlBdm9pZExpc3Quc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoRnVuY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5nZXRQcm94eUF2b2lkTGlzdChzZXNzSWQpLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEFycmF5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBzZXNzaW9uSWQgaXMgd3JvbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHsgZC5nZXRQcm94eUF2b2lkTGlzdCgnYWFhJyk7IH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJyNjYW5Qcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGEgI2NhblByb3h5IG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmNhblByb3h5LnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEZ1bmN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgYm9vbGVhbiBmcm9tICNjYW5Qcm94eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmNhblByb3h5KHNlc3NJZCkuc2hvdWxkLmJlLmEoJ2Jvb2xlYW4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBzZXNzaW9uSWQgaXMgd3JvbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHsgZC5jYW5Qcm94eSgpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCcjcHJveHlSb3V0ZUlzQXZvaWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBmb3JtIG9mIGF2b2lkYW5jZSBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNpbm9uLnN0dWIoZCwgJ2dldFByb3h5QXZvaWRMaXN0Jyk7XG4gICAgICAgICAgYXZvaWRTdHViLnJldHVybnMoW1snUE9TVCcsIC9cXC9mb28vXSwgWydHRVQnXV0pO1xuICAgICAgICAgICgoKSA9PiB7IGQucHJveHlSb3V0ZUlzQXZvaWRlZCgpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgICAgYXZvaWRTdHViLnJldHVybnMoW1snUE9TVCcsIC9cXC9mb28vXSwgWydHRVQnLCAvXmZvby8sICdiYXInXV0pO1xuICAgICAgICAgICgoKSA9PiB7IGQucHJveHlSb3V0ZUlzQXZvaWRlZCgpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgICAgYXZvaWRTdHViLnJlc3RvcmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IGJhZCBodHRwIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2lub24uc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15mb28vXSwgWydCQVpFVEUnLCAvXmJhci9dXSk7XG4gICAgICAgICAgKCgpID0+IHsgZC5wcm94eVJvdXRlSXNBdm9pZGVkKCk7IH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgICBhdm9pZFN0dWIucmVzdG9yZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZWplY3Qgbm9uLXJlZ2V4IHJvdXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhdm9pZFN0dWIgPSBzaW5vbi5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXmZvby9dLCBbJ0dFVCcsICcvYmFyJ11dKTtcbiAgICAgICAgICAoKCkgPT4geyBkLnByb3h5Um91dGVJc0F2b2lkZWQoKTsgfSkuc2hvdWxkLnRocm93O1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXN0b3JlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciByb3V0ZXMgaW4gdGhlIGF2b2lkIGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2lub24uc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15cXC9mb28vXV0pO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZChudWxsLCAnUE9TVCcsICcvZm9vL2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXN0b3JlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHN0cmlwIGF3YXkgYW55IHdkL2h1YiBwcmVmaXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2lub24uc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15cXC9mb28vXV0pO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZChudWxsLCAnUE9TVCcsICcvZm9vL2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXN0b3JlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igcm91dGVzIG5vdCBpbiB0aGUgYXZvaWQgbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhdm9pZFN0dWIgPSBzaW5vbi5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXlxcL2Zvby9dXSk7XG4gICAgICAgICAgZC5wcm94eVJvdXRlSXNBdm9pZGVkKG51bGwsICdHRVQnLCAnL2Zvby9iYXInKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICAgICAgZC5wcm94eVJvdXRlSXNBdm9pZGVkKG51bGwsICdQT1NUJywgJy9ib28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICAgICAgYXZvaWRTdHViLnJlc3RvcmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdldmVudCB0aW1pbmcgZnJhbWV3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGJlZm9yZVN0YXJ0VGltZTtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBiZWZvcmVTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBkLnNob3VsZFZhbGlkYXRlQ2FwcyA9IGZhbHNlO1xuICAgICAgICBhd2FpdCBkLmV4ZWN1dGVDb21tYW5kKCdjcmVhdGVTZXNzaW9uJywgbnVsbCwgbnVsbCwge2Fsd2F5c01hdGNoOiB7Li4uZGVmYXVsdENhcHN9LCBmaXJzdE1hdGNoOiBbe31dfSk7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCcjZXZlbnRIaXN0b3J5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYW4gZXZlbnRIaXN0b3J5IHByb3BlcnR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNob3VsZC5leGlzdChkLmV2ZW50SGlzdG9yeSk7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0KGQuZXZlbnRIaXN0b3J5LmNvbW1hbmRzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGEgc2Vzc2lvbiBzdGFydCB0aW1pbmcgYWZ0ZXIgc2Vzc2lvbiBzdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsZXQge25ld1Nlc3Npb25SZXF1ZXN0ZWQsIG5ld1Nlc3Npb25TdGFydGVkfSA9IGQuZXZlbnRIaXN0b3J5O1xuICAgICAgICAgIG5ld1Nlc3Npb25SZXF1ZXN0ZWQuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgICAgIG5ld1Nlc3Npb25TdGFydGVkLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgICAgICBuZXdTZXNzaW9uUmVxdWVzdGVkWzBdLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgICBuZXdTZXNzaW9uU3RhcnRlZFswXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgICAgKG5ld1Nlc3Npb25SZXF1ZXN0ZWRbMF0gPj0gYmVmb3JlU3RhcnRUaW1lKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgICAobmV3U2Vzc2lvblN0YXJ0ZWRbMF0gPj0gbmV3U2Vzc2lvblJlcXVlc3RlZFswXSkuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBhIGNvbW1hbmRzIGxpc3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJywgW10pO1xuICAgICAgICAgIGQuZXZlbnRIaXN0b3J5LmNvbW1hbmRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gICAgICAgICAgZC5ldmVudEhpc3RvcnkuY29tbWFuZHNbMV0uY21kLnNob3VsZC5lcXVhbCgnZ2V0U3RhdHVzJyk7XG4gICAgICAgICAgZC5ldmVudEhpc3RvcnkuY29tbWFuZHNbMV0uc3RhcnRUaW1lLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgICBkLmV2ZW50SGlzdG9yeS5jb21tYW5kc1sxXS5lbmRUaW1lLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCcjbG9nRXZlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgYWxsb3cgbG9nZ2luZyBhcmJpdHJhcnkgZXZlbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQubG9nRXZlbnQoJ2ZvbycpO1xuICAgICAgICAgIGQuZXZlbnRIaXN0b3J5LmZvb1swXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgICAgKGQuZXZlbnRIaXN0b3J5LmZvb1swXSA+PSBiZWZvcmVTdGFydFRpbWUpLnNob3VsZC5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgcmVzZXJ2ZWQgb3Igb2RkbHkgZm9ybWVkIGV2ZW50IG5hbWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICBkLmxvZ0V2ZW50KCdjb21tYW5kcycpO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdygpO1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICBkLmxvZ0V2ZW50KDEpO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdygpO1xuICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICBkLmxvZ0V2ZW50KHt9KTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3coKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWxsb3cgbG9nZ2luZyB0aGUgc2FtZSBldmVudCBtdWx0aXBsZSB0aW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZC5sb2dFdmVudCgnYmFyJyk7XG4gICAgICAgIGQubG9nRXZlbnQoJ2JhcicpO1xuICAgICAgICBkLmV2ZW50SGlzdG9yeS5iYXIuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgICAgICBkLmV2ZW50SGlzdG9yeS5iYXJbMV0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICAoZC5ldmVudEhpc3RvcnkuYmFyWzFdID49IGQuZXZlbnRIaXN0b3J5LmJhclswXSkuc2hvdWxkLmJlLnRydWU7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCdnZXRTZXNzaW9uIGRlY29yYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZGVjb3JhdGUgZ2V0U2Vzc2lvbiByZXNwb25zZSBpZiBvcHQtaW4gY2FwIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCByZXMgPSBhd2FpdCBkLmdldFNlc3Npb24oKTtcbiAgICAgICAgICBzaG91bGQubm90LmV4aXN0KHJlcy5ldmVudHMpO1xuXG4gICAgICAgICAgZC5jYXBzLmV2ZW50VGltaW5ncyA9IHRydWU7XG4gICAgICAgICAgcmVzID0gYXdhaXQgZC5nZXRTZXNzaW9uKCk7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0KHJlcy5ldmVudHMpO1xuICAgICAgICAgIHNob3VsZC5leGlzdChyZXMuZXZlbnRzLm5ld1Nlc3Npb25SZXF1ZXN0ZWQpO1xuICAgICAgICAgIHJlcy5ldmVudHMubmV3U2Vzc2lvblJlcXVlc3RlZFswXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJy5yZXNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgcmVzZXQgYXMgVzNDIGlmIHRoZSBvcmlnaW5hbCBzZXNzaW9uIHdhcyBXM0MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNhcHMgPSB7XG4gICAgICAgICAgYWx3YXlzTWF0Y2g6IE9iamVjdC5hc3NpZ24oe30sIHtcbiAgICAgICAgICAgICdhcHBpdW06YXBwJzogJ0Zha2UnLFxuICAgICAgICAgICAgJ2FwcGl1bTpkZXZpY2VOYW1lJzogJ0Zha2UnLFxuICAgICAgICAgICAgJ2FwcGl1bTphdXRvbWF0aW9uTmFtZSc6ICdGYWtlJyxcbiAgICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ0Zha2UnLFxuICAgICAgICAgIH0sIGRlZmF1bHRDYXBzKSxcbiAgICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24odW5kZWZpbmVkLCB1bmRlZmluZWQsIGNhcHMpO1xuICAgICAgICBkLnByb3RvY29sLnNob3VsZC5lcXVhbCgnVzNDJyk7XG4gICAgICAgIGF3YWl0IGQucmVzZXQoKTtcbiAgICAgICAgZC5wcm90b2NvbC5zaG91bGQuZXF1YWwoJ1czQycpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdEZXZpY2VTZXR0aW5ncycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIG5vdCBob2xkIG9uIHRvIHJlZmVyZW5jZSBvZiBkZWZhdWx0cyBpbiBjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBvYmogPSB7Zm9vOiAnYmFyJ307XG4gICAgICBsZXQgZDEgPSBuZXcgRGV2aWNlU2V0dGluZ3Mob2JqKTtcbiAgICAgIGxldCBkMiA9IG5ldyBEZXZpY2VTZXR0aW5ncyhvYmopO1xuICAgICAgZDEuX3NldHRpbmdzLmZvbyA9ICdiYXonO1xuICAgICAgZDEuX3NldHRpbmdzLnNob3VsZC5ub3QuZXFsKGQyLl9zZXR0aW5ncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcuaXNGZWF0dXJlRW5hYmxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkID0gbmV3IERyaXZlckNsYXNzKCk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgZC5kZW55SW5zZWN1cmUgPSBudWxsO1xuICAgICAgZC5hbGxvd0luc2VjdXJlID0gbnVsbDtcbiAgICAgIGQucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IG51bGw7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNheSBhIGZlYXR1cmUgaXMgZW5hYmxlZCB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgYWxsb3dlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFsnZm9vJywgJ2JhciddO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmFyJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JheicpLnNob3VsZC5iZS5mYWxzZTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2F5IGEgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCBpZiBpdCBpcyBub3QgZW5hYmxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFtdO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZWZlciBkZW55SW5zZWN1cmUgdG8gYWxsb3dJbnNlY3VyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IFsnZm9vJywgJ2JhciddO1xuICAgICAgZC5kZW55SW5zZWN1cmUgPSBbJ2ZvbyddO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsbG93IGdsb2JhbCBzZXR0aW5nIGZvciBpbnNlY3VyaXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgZC5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnZm9vJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcblxuICAgIGl0KCdnbG9iYWwgc2V0dGluZyBzaG91bGQgYmUgb3ZlcnJpZGVhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgZC5yZWxheGVkU2VjdXJpdHlFbmFibGVkID0gdHJ1ZTtcbiAgICAgIGQuZGVueUluc2VjdXJlID0gWydmb28nLCAnYmFyJ107XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2ZvbycpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmFyJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUudHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VEcml2ZXJVbml0VGVzdHM7XG4iXSwiZmlsZSI6InRlc3QvYmFzZWRyaXZlci9kcml2ZXItdGVzdHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
547
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9kcml2ZXItdGVzdHMuanMiXSwibmFtZXMiOlsiYmFzZURyaXZlclVuaXRUZXN0cyIsIkRyaXZlckNsYXNzIiwiZGVmYXVsdENhcHMiLCJjbGFzc05hbWUiLCJuYW1lIiwiZGVzY3JpYmUiLCJkIiwidzNjQ2FwcyIsInNhbmRib3giLCJiZWZvcmVFYWNoIiwiYWx3YXlzTWF0Y2giLCJPYmplY3QiLCJhc3NpZ24iLCJwbGF0Zm9ybU5hbWUiLCJmaXJzdE1hdGNoIiwiYWZ0ZXJFYWNoIiwiZGVsZXRlU2Vzc2lvbiIsInJlc3RvcmUiLCJpdCIsInNob3VsZCIsImV4aXN0IiwiYmFzZVZlcnNpb24iLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJlcWwiLCJzZXNzSWQiLCJjcmVhdGVTZXNzaW9uIiwiYmUiLCJhIiwibGVuZ3RoIiwiYWJvdmUiLCJfIiwiY2xvbmVEZWVwIiwiZXZlbnR1YWxseSIsInJlamVjdGVkV2l0aCIsInNlc3Npb25JZDEiLCJlcXVhbCIsInNlc3Npb25JZCIsInNlc3Npb25JZDIiLCJub3QiLCJjYXBzIiwiZ2V0U2Vzc2lvbiIsInNlc3Npb25zIiwiZ2V0U2Vzc2lvbnMiLCJjbG9uZSIsImluY2x1ZGUiLCJpZCIsImNhcGFiaWxpdGllcyIsImRldmljZU5hbWUiLCJCIiwiZGVsYXkiLCJiaW5kIiwiY21kUHJvbWlzZSIsImV4ZWN1dGVDb21tYW5kIiwicCIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwiRXJyb3IiLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwib2xkRGVsZXRlU2Vzc2lvbiIsInByb3RvY29sIiwiZHJpdmVyRm9yU2Vzc2lvbiIsIndhaXRNcyIsIkRhdGUiLCJub3ciLCJjbGVhck5ld0NvbW1hbmRUaW1lb3V0IiwibnVtQ21kcyIsImNtZHMiLCJpIiwicHVzaCIsInJlc3VsdHMiLCJhbGwiLCJzZXR0bGUiLCJ2YWx1ZSIsInJlYXNvbiIsIm1lc3NhZ2UiLCJjb250YWluIiwiYmVmb3JlIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsInRpbWVvdXRzIiwiaW1wbGljaXRXYWl0TXMiLCJ1bmRlZmluZWQiLCJnZXRUaW1lb3V0cyIsImhhdmUiLCJwcm9wZXJ0eSIsImRlZXAiLCJpbXBsaWNpdCIsImNvbW1hbmQiLCJuZXdDYXBzIiwicHJveHlBY3RpdmUiLCJhbiIsImluc3RhbmNlb2YiLCJGdW5jdGlvbiIsImZhbHNlIiwidGhyb3ciLCJnZXRQcm94eUF2b2lkTGlzdCIsIkFycmF5IiwiY2FuUHJveHkiLCJhdm9pZFN0dWIiLCJzdHViIiwicmV0dXJucyIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJ0cnVlIiwiYmVmb3JlU3RhcnRUaW1lIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiZXZlbnRIaXN0b3J5IiwiY29tbWFuZHMiLCJuZXdTZXNzaW9uUmVxdWVzdGVkIiwibmV3U2Vzc2lvblN0YXJ0ZWQiLCJjbWQiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwibG9nRXZlbnQiLCJmb28iLCJiYXIiLCJyZXMiLCJldmVudHMiLCJldmVudFRpbWluZ3MiLCJyZXNldCIsIm9iaiIsImQxIiwiRGV2aWNlU2V0dGluZ3MiLCJkMiIsIl9zZXR0aW5ncyIsImRlbnlJbnNlY3VyZSIsImFsbG93SW5zZWN1cmUiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiaXNGZWF0dXJlRW5hYmxlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQSxTQUFTQSxtQkFBVCxDQUE4QkMsV0FBOUIsRUFBMkNDLFdBQVcsR0FBRyxFQUF6RCxFQUE2RDtBQUUzRCxRQUFNQyxTQUFTLEdBQUdGLFdBQVcsQ0FBQ0csSUFBWixJQUFvQixrQkFBdEM7QUFHQUMsRUFBQUEsUUFBUSxDQUFFLGtCQUFpQkYsU0FBVSxHQUE3QixFQUFpQyxZQUFZO0FBQ25ELFFBQUlHLENBQUosRUFBT0MsT0FBUDtBQUVBLFFBQUlDLE9BQUo7QUFFQUMsSUFBQUEsVUFB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akMsQ0FBb0NvRSxLQUFwQztBQUNBekYsTUFBQUEsQ0FBQyxDQUFDMkgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI5RyxNQUExQixDQUFpQ1EsRUFBakMsQ0FBb0NvRSxLQUFwQztBQUNBekYsTUFBQUEsQ0FBQyxDQUFDMkgsZ0JBQUYsQ0FBbUIsS0FBbkIsRUFBMEI5RyxNQUExQixDQUFpQ1EsRUFBakMsQ0FBb0M2RSxJQUFwQztBQUNELEtBTkMsQ0FBRjtBQU9ELEdBM0NPLENBQVI7QUE0Q0Q7O2VBRWN4RyxtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgeyBjcmVhdGVTYW5kYm94IH0gZnJvbSAnc2lub24nO1xuXG5cbi8vIHdyYXAgdGhlc2UgdGVzdHMgaW4gYSBmdW5jdGlvbiBzbyB3ZSBjYW4gZXhwb3J0IHRoZSB0ZXN0cyBhbmQgcmUtdXNlIHRoZW1cbi8vIGZvciBhY3R1YWwgZHJpdmVyIGltcGxlbWVudGF0aW9uc1xuZnVuY3Rpb24gYmFzZURyaXZlclVuaXRUZXN0cyAoRHJpdmVyQ2xhc3MsIGRlZmF1bHRDYXBzID0ge30pIHtcbiAgLy8gdG8gZGlzcGxheSB0aGUgZHJpdmVyIHVuZGVyIHRlc3QgaW4gcmVwb3J0XG4gIGNvbnN0IGNsYXNzTmFtZSA9IERyaXZlckNsYXNzLm5hbWUgfHwgJyh1bmtub3duIGRyaXZlciknO1xuXG5cbiAgZGVzY3JpYmUoYEJhc2VEcml2ZXIgKGFzICR7Y2xhc3NOYW1lfSlgLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGQsIHczY0NhcHM7XG5cbiAgICBsZXQgc2FuZGJveDtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2FuZGJveCA9IGNyZWF0ZVNhbmRib3goKTtcbiAgICAgIGQgPSBuZXcgRHJpdmVyQ2xhc3MoKTtcbiAgICAgIHczY0NhcHMgPSB7XG4gICAgICAgIGFsd2F5c01hdGNoOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q2Fwcywge1xuICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ0Zha2UnLFxuICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdDb21tb2RvcmUgNjQnLFxuICAgICAgICB9KSxcbiAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcG9ydCB0aGUgdmVyc2lvbiBvZiBCYXNlRHJpdmVyIHVzZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQuZXhpc3QoRHJpdmVyQ2xhc3MuYmFzZVZlcnNpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RhdHVzIG9iamVjdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBzdGF0dXMgPSBhd2FpdCBkLmdldFN0YXR1cygpO1xuICAgICAgc3RhdHVzLnNob3VsZC5lcWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzZXNzaW9uSWQgZnJvbSBjcmVhdGVTZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IFtzZXNzSWRdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHczY0NhcHMpO1xuICAgICAgc2hvdWxkLmV4aXN0KHNlc3NJZCk7XG4gICAgICBzZXNzSWQuc2hvdWxkLmJlLmEoJ3N0cmluZycpO1xuICAgICAgc2Vzc0lkLmxlbmd0aC5zaG91bGQuYmUuYWJvdmUoNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHN0YXJ0IHR3byBzZXNzaW9ucyB3aXRob3V0IGNsb3NpbmcgdGhlIGZpcnN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIGF3YWl0IGQuY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBfLmNsb25lRGVlcCh3M2NDYXBzKSkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKCdzZXNzaW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gZGVsZXRlIGEgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBzZXNzaW9uSWQxID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKGQuc2Vzc2lvbklkLCBudWxsKTtcbiAgICAgIGxldCBzZXNzaW9uSWQyID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIHNlc3Npb25JZDEuc2hvdWxkLm5vdC5lcWwoc2Vzc2lvbklkMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCB0aGUgY3VycmVudCBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IFssIGNhcHNdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHczY0NhcHMpO1xuICAgICAgY2Fwcy5zaG91bGQuZXF1YWwoYXdhaXQgZC5nZXRTZXNzaW9uKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gc2Vzc2lvbnMgaWYgbm8gc2Vzc2lvbiBleGlzdHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgc2Vzc2lvbnMgPSBhd2FpdCBkLmdldFNlc3Npb25zKCk7XG4gICAgICBzZXNzaW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gc2Vzc2lvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjYXBzID0gXy5jbG9uZSh3M2NDYXBzKTtcbiAgICAgIGNhcHMuYSA9ICdjYXAnO1xuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIGNhcHMpO1xuICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgZC5nZXRTZXNzaW9ucygpO1xuXG4gICAgICBzZXNzaW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgc2Vzc2lvbnNbMF0uc2hvdWxkLmluY2x1ZGUoe1xuICAgICAgICBpZDogZC5zZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgc2Vzc2lvbnNbMF0uY2FwYWJpbGl0aWVzLnNob3VsZC5pbmNsdWRlKHtcbiAgICAgICAgZGV2aWNlTmFtZTogJ0NvbW1vZG9yZSA2NCcsXG4gICAgICAgIHBsYXRmb3JtTmFtZTogJ0Zha2UnXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZnVsZmlsbCBhbiB1bmV4cGVjdGVkIGRyaXZlciBxdWl0IHByb21pc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBtYWtlIGEgY29tbWFuZCB0aGF0IHdpbGwgd2FpdCBhIGJpdCBzbyB3ZSBjYW4gY3Jhc2ggd2hpbGUgaXQncyBydW5uaW5nXG4gICAgICBkLmdldFN0YXR1cyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgICAgcmV0dXJuICdnb29kIHN0YXR1cyc7XG4gICAgICB9LmJpbmQoZCk7XG4gICAgICBsZXQgY21kUHJvbWlzZSA9IGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFN0YXR1cycpO1xuICAgICAgYXdhaXQgQi5kZWxheSgxMCk7XG4gICAgICBjb25zdCBwID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ29uVW5leHBlY3RlZFNodXRkb3duIGV2ZW50IGlzIGV4cGVjdGVkIHRvIGJlIGZpcmVkIHdpdGhpbiA1IHNlY29uZHMgdGltZW91dCcpKSwgNTAwMCk7XG4gICAgICAgIGQub25VbmV4cGVjdGVkU2h1dGRvd24ocmVzb2x2ZSk7XG4gICAgICB9KTtcbiAgICAgIGQuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24obmV3IEVycm9yKCdXZSBjcmFzaGVkJykpO1xuICAgICAgYXdhaXQgY21kUHJvbWlzZS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9XZSBjcmFzaGVkLyk7XG4gICAgICBhd2FpdCBwO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgY29tbWFuZHMgaW4gbWlkZGxlIG9mIHVuZXhwZWN0ZWQgc2h1dGRvd24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBtYWtlIGEgY29tbWFuZCB0aGF0IHdpbGwgd2FpdCBhIGJpdCBzbyB3ZSBjYW4gY3Jhc2ggd2hpbGUgaXQncyBydW5uaW5nXG4gICAgICBkLm9sZERlbGV0ZVNlc3Npb24gPSBkLmRlbGV0ZVNlc3Npb247XG4gICAgICBkLmRlbGV0ZVNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbGREZWxldGVTZXNzaW9uKCk7XG4gICAgICB9LmJpbmQoZCk7XG4gICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICBjb25zdCBwID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ29uVW5leHBlY3RlZFNodXRkb3duIGV2ZW50IGlzIGV4cGVjdGVkIHRvIGJlIGZpcmVkIHdpdGhpbiA1IHNlY29uZHMgdGltZW91dCcpKSwgNTAwMCk7XG4gICAgICAgIGQub25VbmV4cGVjdGVkU2h1dGRvd24ocmVzb2x2ZSk7XG4gICAgICB9KTtcbiAgICAgIGQuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24obmV3IEVycm9yKCdXZSBjcmFzaGVkJykpO1xuICAgICAgYXdhaXQgcDtcbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFNlc3Npb24nKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9zaHV0IGRvd24vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgbmV3IGNvbW1hbmRzIGFmdGVyIGRvbmUgc2h1dHRpbmcgZG93bicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG1ha2UgYSBjb21tYW5kIHRoYXQgd2lsbCB3YWl0IGEgYml0IHNvIHdlIGNhbiBjcmFzaCB3aGlsZSBpdCdzIHJ1bm5pbmdcbiAgICAgIGQub2xkRGVsZXRlU2Vzc2lvbiA9IGQuZGVsZXRlU2Vzc2lvbjtcbiAgICAgIGQuZGVsZXRlU2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDApO1xuICAgICAgICBhd2FpdCB0aGlzLm9sZERlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH0uYmluZChkKTtcblxuICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmVEZWVwKHczY0NhcHMpKTtcbiAgICAgIGNvbnN0IHAgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignb25VbmV4cGVjdGVkU2h1dGRvd24gZXZlbnQgaXMgZXhwZWN0ZWQgdG8gYmUgZmlyZWQgd2l0aGluIDUgc2Vjb25kcyB0aW1lb3V0JykpLCA1MDAwKTtcbiAgICAgICAgZC5vblVuZXhwZWN0ZWRTaHV0ZG93bihyZXNvbHZlKTtcbiAgICAgIH0pO1xuICAgICAgZC5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoJ1dlIGNyYXNoZWQnKSk7XG4gICAgICBhd2FpdCBwO1xuXG4gICAgICBhd2FpdCBkLmV4ZWN1dGVDb21tYW5kKCdnZXRTZXNzaW9uJykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvc2h1dCBkb3duLyk7XG4gICAgICBhd2FpdCBCLmRlbGF5KDUwMCk7XG5cbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2NyZWF0ZVNlc3Npb24nLCBudWxsLCBudWxsLCBfLmNsb25lRGVlcCh3M2NDYXBzKSk7XG4gICAgICBhd2FpdCBkLmRlbGV0ZVNlc3Npb24oKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBXM0MgYW5kIEpTT05XUCBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCBXM0MgKGxlYXZlIGZpcnN0IDIgYXJncyBudWxsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBKU09OV1AgYXJncylcbiAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2NyZWF0ZVNlc3Npb24nLCBudWxsLCBudWxsLCB7XG4gICAgICAgIGFsd2F5c01hdGNoOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q2Fwcywge1xuICAgICAgICAgIHBsYXRmb3JtTmFtZTogJ0Zha2UnLFxuICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdDb21tb2RvcmUgNjQnLFxuICAgICAgICB9KSxcbiAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgIH0pO1xuXG4gICAgICBkLnByb3RvY29sLnNob3VsZC5lcXVhbCgnVzNDJyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncHJvdG9jb2wgZGV0ZWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCB1c2UgVzNDIGlmIG9ubHkgVzNDIGNhcHMgYXJlIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwge2Fsd2F5c01hdGNoOiBfLmNsb25lKGRlZmF1bHRDYXBzKSwgZmlyc3RNYXRjaDogW3t9XX0pO1xuICAgICAgICBkLnByb3RvY29sLnNob3VsZC5lcXVhbCgnVzNDJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBhIG1ldGhvZCB0byBnZXQgZHJpdmVyIGZvciBhIHNlc3Npb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgW3Nlc3NJZF0gPSBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICBkLmRyaXZlckZvclNlc3Npb24oc2Vzc0lkKS5zaG91bGQuZXFsKGQpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvbW1hbmQgcXVldWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgZCA9IG5ldyBEcml2ZXJDbGFzcygpO1xuXG4gICAgICBsZXQgd2FpdE1zID0gMTA7XG4gICAgICBkLmdldFN0YXR1cyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSh3YWl0TXMpO1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgICAgIH0uYmluZChkKTtcblxuICAgICAgZC5nZXRTZXNzaW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSh3YWl0TXMpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpcGFzcycpO1xuICAgICAgfS5iaW5kKGQpO1xuXG4gICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBkLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHF1ZXVlIGNvbW1hbmRzIGFuZC5leGVjdXRlQ29tbWFuZC9yZXNwb25kIGluIHRoZSBvcmRlciByZWNlaXZlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG51bUNtZHMgPSAxMDtcbiAgICAgICAgbGV0IGNtZHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJykpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgQi5hbGwoY21kcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbaV0gPD0gcmVzdWx0c1tpIC0gMV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR290IHJlc3VsdCBvdXQgb2Ygb3JkZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBlcnJvcnMgY29ycmVjdGx5IHdoZW4gcXVldWluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG51bUNtZHMgPSAxMDtcbiAgICAgICAgbGV0IGNtZHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DbWRzOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSA9PT0gNSkge1xuICAgICAgICAgICAgY21kcy5wdXNoKGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFNlc3Npb25zJykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbWRzLnB1c2goZC5leGVjdXRlQ29tbWFuZCgnZ2V0U3RhdHVzJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IEIuc2V0dGxlKGNtZHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDU7IGkrKykge1xuICAgICAgICAgIGlmIChyZXN1bHRzW2ldLnZhbHVlKCkgPD0gcmVzdWx0c1tpIC0gMV0udmFsdWUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHb3QgcmVzdWx0IG91dCBvZiBvcmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRzWzVdLnJlYXNvbigpLm1lc3NhZ2Uuc2hvdWxkLmNvbnRhaW4oJ211bHRpcGFzcycpO1xuICAgICAgICBmb3IgKGxldCBpID0gNzsgaSA8IG51bUNtZHM7IGkrKykge1xuICAgICAgICAgIGlmIChyZXN1bHRzW2ldLnZhbHVlKCkgPD0gcmVzdWx0c1tpIC0gMV0udmFsdWUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHb3QgcmVzdWx0IG91dCBvZiBvcmRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IGNhcmUgaWYgcXVldWUgZW1wdGllcyBmb3IgYSBiaXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBudW1DbWRzID0gMTA7XG4gICAgICAgIGxldCBjbWRzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgY21kcy5wdXNoKGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFN0YXR1cycpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IEIuYWxsKGNtZHMpO1xuICAgICAgICBjbWRzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgY21kcy5wdXNoKGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFN0YXR1cycpKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRzID0gYXdhaXQgQi5hbGwoY21kcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtQ21kczsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdHNbaV0gPD0gcmVzdWx0c1tpIC0gMV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR290IHJlc3VsdCBvdXQgb2Ygb3JkZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3RpbWVvdXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHczY0NhcHMpO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnY29tbWFuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBleGlzdCBieSBkZWZhdWx0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXF1YWwoNjAwMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBiZSBzZXR0YWJsZSB0aHJvdWdoIGB0aW1lb3V0c2AnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgZC50aW1lb3V0cygnY29tbWFuZCcsIDIwKTtcbiAgICAgICAgICBkLm5ld0NvbW1hbmRUaW1lb3V0TXMuc2hvdWxkLmVxdWFsKDIwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGRlc2NyaWJlKCdpbXBsaWNpdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBub3QgZXhpc3QgYnkgZGVmYXVsdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcXVhbCgwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgYmUgc2V0dGFibGUgdGhyb3VnaCBgdGltZW91dHNgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGF3YWl0IGQudGltZW91dHMoJ2ltcGxpY2l0JywgMjApO1xuICAgICAgICAgIGQuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxdWFsKDIwKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd0aW1lb3V0cyAoVzNDKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgdzNjQ2Fwcyk7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGQuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGdldCB0aW1lb3V0cyB0aGF0IHdlIHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDEwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuaGF2ZS5wcm9wZXJ0eSgnaW1wbGljaXQnLCAxMDAwKTtcbiAgICAgICAgYXdhaXQgZC50aW1lb3V0cygnY29tbWFuZCcsIDIwMDApO1xuICAgICAgICBhd2FpdCBkLmdldFRpbWVvdXRzKCkuc2hvdWxkLmV2ZW50dWFsbHkuZGVlcC5lcXVhbCh7XG4gICAgICAgICAgaW1wbGljaXQ6IDEwMDAsXG4gICAgICAgICAgY29tbWFuZDogMjAwMCxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGQudGltZW91dHModW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAzMDAwKTtcbiAgICAgICAgYXdhaXQgZC5nZXRUaW1lb3V0cygpLnNob3VsZC5ldmVudHVhbGx5LmRlZXAuZXF1YWwoe1xuICAgICAgICAgIGltcGxpY2l0OiAzMDAwLFxuICAgICAgICAgIGNvbW1hbmQ6IDIwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncmVzZXQgY29tcGF0aWJpbGl0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IGJvdGggZnVsbFJlc2V0IGFuZCBub1Jlc2V0IHRvIGJlIHRydWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG5ld0NhcHMgPSB7XG4gICAgICAgICAgYWx3YXlzTWF0Y2g6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDYXBzLCB7XG4gICAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdGYWtlJyxcbiAgICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdDb21tb2RvcmUgNjQnLFxuICAgICAgICAgICAgJ2FwcGl1bTpmdWxsUmVzZXQnOiB0cnVlLFxuICAgICAgICAgICAgJ2FwcGl1bTpub1Jlc2V0JzogdHJ1ZVxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBkLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgbmV3Q2Fwcykuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgL25vUmVzZXQuK2Z1bGxSZXNldC8pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncHJveHlpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgc2Vzc0lkO1xuICAgICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtzZXNzSWRdID0gYXdhaXQgZC5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIHczY0NhcHMpO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnI3Byb3h5QWN0aXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGV4aXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQucHJveHlBY3RpdmUuc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoRnVuY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5wcm94eUFjdGl2ZShzZXNzSWQpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBzZXNzaW9uSWQgaXMgd3JvbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHsgZC5wcm94eUFjdGl2ZSgnYWFhJyk7IH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJyNnZXRQcm94eUF2b2lkTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBleGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmdldFByb3h5QXZvaWRMaXN0LnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEZ1bmN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGQuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc0lkKS5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihBcnJheSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gc2Vzc2lvbklkIGlzIHdyb25nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7IGQuZ2V0UHJveHlBdm9pZExpc3QoJ2FhYScpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCcjY2FuUHJveHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBhICNjYW5Qcm94eSBtZXRob2QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5jYW5Qcm94eS5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihGdW5jdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIGJvb2xlYW4gZnJvbSAjY2FuUHJveHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZC5jYW5Qcm94eShzZXNzSWQpLnNob3VsZC5iZS5hKCdib29sZWFuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gc2Vzc2lvbklkIGlzIHdyb25nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7IGQuY2FuUHJveHkoKTsgfSkuc2hvdWxkLnRocm93O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnI3Byb3h5Um91dGVJc0F2b2lkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgZm9ybSBvZiBhdm9pZGFuY2UgbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhdm9pZFN0dWIgPSBzYW5kYm94LnN0dWIoZCwgJ2dldFByb3h5QXZvaWRMaXN0Jyk7XG4gICAgICAgICAgYXZvaWRTdHViLnJldHVybnMoW1snUE9TVCcsIC9cXC9mb28vXSwgWydHRVQnXV0pO1xuICAgICAgICAgICgoKSA9PiB7IGQucHJveHlSb3V0ZUlzQXZvaWRlZCgpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgICAgYXZvaWRTdHViLnJldHVybnMoW1snUE9TVCcsIC9cXC9mb28vXSwgWydHRVQnLCAvXmZvby8sICdiYXInXV0pO1xuICAgICAgICAgICgoKSA9PiB7IGQucHJveHlSb3V0ZUlzQXZvaWRlZCgpOyB9KS5zaG91bGQudGhyb3c7XG4gICAgICAgICAgYXZvaWRTdHViLnJlc3RvcmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmVqZWN0IGJhZCBodHRwIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXmZvby9dLCBbJ0JBWkVURScsIC9eYmFyL11dKTtcbiAgICAgICAgICAoKCkgPT4geyBkLnByb3h5Um91dGVJc0F2b2lkZWQoKTsgfSkuc2hvdWxkLnRocm93O1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXN0b3JlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJlamVjdCBub24tcmVnZXggcm91dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15mb28vXSwgWydHRVQnLCAnL2JhciddXSk7XG4gICAgICAgICAgKCgpID0+IHsgZC5wcm94eVJvdXRlSXNBdm9pZGVkKCk7IH0pLnNob3VsZC50aHJvdztcbiAgICAgICAgICBhdm9pZFN0dWIucmVzdG9yZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3Igcm91dGVzIGluIHRoZSBhdm9pZCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15cXC9mb28vXV0pO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZChudWxsLCAnUE9TVCcsICcvZm9vL2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXN0b3JlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHN0cmlwIGF3YXkgYW55IHdkL2h1YiBwcmVmaXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYXZvaWRTdHViID0gc2FuZGJveC5zdHViKGQsICdnZXRQcm94eUF2b2lkTGlzdCcpO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXR1cm5zKFtbJ1BPU1QnLCAvXlxcL2Zvby9dXSk7XG4gICAgICAgICAgZC5wcm94eVJvdXRlSXNBdm9pZGVkKG51bGwsICdQT1NUJywgJy9mb28vYmFyJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgICAgYXZvaWRTdHViLnJlc3RvcmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciByb3V0ZXMgbm90IGluIHRoZSBhdm9pZCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGF2b2lkU3R1YiA9IHNhbmRib3guc3R1YihkLCAnZ2V0UHJveHlBdm9pZExpc3QnKTtcbiAgICAgICAgICBhdm9pZFN0dWIucmV0dXJucyhbWydQT1NUJywgL15cXC9mb28vXV0pO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZChudWxsLCAnR0VUJywgJy9mb28vYmFyJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgICAgIGQucHJveHlSb3V0ZUlzQXZvaWRlZChudWxsLCAnUE9TVCcsICcvYm9vJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgICAgIGF2b2lkU3R1Yi5yZXN0b3JlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXZlbnQgdGltaW5nIGZyYW1ld29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBiZWZvcmVTdGFydFRpbWU7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYmVmb3JlU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZC5zaG91bGRWYWxpZGF0ZUNhcHMgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgZC5leGVjdXRlQ29tbWFuZCgnY3JlYXRlU2Vzc2lvbicsIG51bGwsIG51bGwsIHthbHdheXNNYXRjaDogey4uLmRlZmF1bHRDYXBzfSwgZmlyc3RNYXRjaDogW3t9XX0pO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnI2V2ZW50SGlzdG9yeScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGFuIGV2ZW50SGlzdG9yeSBwcm9wZXJ0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaG91bGQuZXhpc3QoZC5ldmVudEhpc3RvcnkpO1xuICAgICAgICAgIHNob3VsZC5leGlzdChkLmV2ZW50SGlzdG9yeS5jb21tYW5kcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBhIHNlc3Npb24gc3RhcnQgdGltaW5nIGFmdGVyIHNlc3Npb24gc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGV0IHtuZXdTZXNzaW9uUmVxdWVzdGVkLCBuZXdTZXNzaW9uU3RhcnRlZH0gPSBkLmV2ZW50SGlzdG9yeTtcbiAgICAgICAgICBuZXdTZXNzaW9uUmVxdWVzdGVkLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgICAgICBuZXdTZXNzaW9uU3RhcnRlZC5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICAgICAgbmV3U2Vzc2lvblJlcXVlc3RlZFswXS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgICAgbmV3U2Vzc2lvblN0YXJ0ZWRbMF0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICAgIChuZXdTZXNzaW9uUmVxdWVzdGVkWzBdID49IGJlZm9yZVN0YXJ0VGltZSkuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgICAgKG5ld1Nlc3Npb25TdGFydGVkWzBdID49IG5ld1Nlc3Npb25SZXF1ZXN0ZWRbMF0pLnNob3VsZC5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGluY2x1ZGUgYSBjb21tYW5kcyBsaXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGF3YWl0IGQuZXhlY3V0ZUNvbW1hbmQoJ2dldFN0YXR1cycsIFtdKTtcbiAgICAgICAgICBkLmV2ZW50SGlzdG9yeS5jb21tYW5kcy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgICAgICAgIGQuZXZlbnRIaXN0b3J5LmNvbW1hbmRzWzFdLmNtZC5zaG91bGQuZXF1YWwoJ2dldFN0YXR1cycpO1xuICAgICAgICAgIGQuZXZlbnRIaXN0b3J5LmNvbW1hbmRzWzFdLnN0YXJ0VGltZS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgICAgZC5ldmVudEhpc3RvcnkuY29tbWFuZHNbMV0uZW5kVGltZS5zaG91bGQuYmUuYSgnbnVtYmVyJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnI2xvZ0V2ZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGFsbG93IGxvZ2dpbmcgYXJiaXRyYXJ5IGV2ZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkLmxvZ0V2ZW50KCdmb28nKTtcbiAgICAgICAgICBkLmV2ZW50SGlzdG9yeS5mb29bMF0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICAgIChkLmV2ZW50SGlzdG9yeS5mb29bMF0gPj0gYmVmb3JlU3RhcnRUaW1lKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IHJlc2VydmVkIG9yIG9kZGx5IGZvcm1lZCBldmVudCBuYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgZC5sb2dFdmVudCgnY29tbWFuZHMnKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3coKTtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgZC5sb2dFdmVudCgxKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3coKTtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgZC5sb2dFdmVudCh7fSk7XG4gICAgICAgICAgfSkuc2hvdWxkLnRocm93KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGFsbG93IGxvZ2dpbmcgdGhlIHNhbWUgZXZlbnQgbXVsdGlwbGUgdGltZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGQubG9nRXZlbnQoJ2JhcicpO1xuICAgICAgICBkLmxvZ0V2ZW50KCdiYXInKTtcbiAgICAgICAgZC5ldmVudEhpc3RvcnkuYmFyLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgICAgZC5ldmVudEhpc3RvcnkuYmFyWzFdLnNob3VsZC5iZS5hKCdudW1iZXInKTtcbiAgICAgICAgKGQuZXZlbnRIaXN0b3J5LmJhclsxXSA+PSBkLmV2ZW50SGlzdG9yeS5iYXJbMF0pLnNob3VsZC5iZS50cnVlO1xuICAgICAgfSk7XG4gICAgICBkZXNjcmliZSgnZ2V0U2Vzc2lvbiBkZWNvcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGRlY29yYXRlIGdldFNlc3Npb24gcmVzcG9uc2UgaWYgb3B0LWluIGNhcCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsZXQgcmVzID0gYXdhaXQgZC5nZXRTZXNzaW9uKCk7XG4gICAgICAgICAgc2hvdWxkLm5vdC5leGlzdChyZXMuZXZlbnRzKTtcblxuICAgICAgICAgIGQuY2Fwcy5ldmVudFRpbWluZ3MgPSB0cnVlO1xuICAgICAgICAgIHJlcyA9IGF3YWl0IGQuZ2V0U2Vzc2lvbigpO1xuICAgICAgICAgIHNob3VsZC5leGlzdChyZXMuZXZlbnRzKTtcbiAgICAgICAgICBzaG91bGQuZXhpc3QocmVzLmV2ZW50cy5uZXdTZXNzaW9uUmVxdWVzdGVkKTtcbiAgICAgICAgICByZXMuZXZlbnRzLm5ld1Nlc3Npb25SZXF1ZXN0ZWRbMF0uc2hvdWxkLmJlLmEoJ251bWJlcicpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCcucmVzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHJlc2V0IGFzIFczQyBpZiB0aGUgb3JpZ2luYWwgc2Vzc2lvbiB3YXMgVzNDJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjYXBzID0ge1xuICAgICAgICAgIGFsd2F5c01hdGNoOiBPYmplY3QuYXNzaWduKHt9LCB7XG4gICAgICAgICAgICAnYXBwaXVtOmFwcCc6ICdGYWtlJyxcbiAgICAgICAgICAgICdhcHBpdW06ZGV2aWNlTmFtZSc6ICdGYWtlJyxcbiAgICAgICAgICAgICdhcHBpdW06YXV0b21hdGlvbk5hbWUnOiAnRmFrZScsXG4gICAgICAgICAgICBwbGF0Zm9ybU5hbWU6ICdGYWtlJyxcbiAgICAgICAgICB9LCBkZWZhdWx0Q2FwcyksXG4gICAgICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZC5jcmVhdGVTZXNzaW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjYXBzKTtcbiAgICAgICAgZC5wcm90b2NvbC5zaG91bGQuZXF1YWwoJ1czQycpO1xuICAgICAgICBhd2FpdCBkLnJlc2V0KCk7XG4gICAgICAgIGQucHJvdG9jb2wuc2hvdWxkLmVxdWFsKCdXM0MnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGV2aWNlU2V0dGluZ3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBub3QgaG9sZCBvbiB0byByZWZlcmVuY2Ugb2YgZGVmYXVsdHMgaW4gY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgb2JqID0ge2ZvbzogJ2Jhcid9O1xuICAgICAgbGV0IGQxID0gbmV3IERldmljZVNldHRpbmdzKG9iaik7XG4gICAgICBsZXQgZDIgPSBuZXcgRGV2aWNlU2V0dGluZ3Mob2JqKTtcbiAgICAgIGQxLl9zZXR0aW5ncy5mb28gPSAnYmF6JztcbiAgICAgIGQxLl9zZXR0aW5ncy5zaG91bGQubm90LmVxbChkMi5fc2V0dGluZ3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnLmlzRmVhdHVyZUVuYWJsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZCA9IG5ldyBEcml2ZXJDbGFzcygpO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGQuZGVueUluc2VjdXJlID0gbnVsbDtcbiAgICAgIGQuYWxsb3dJbnNlY3VyZSA9IG51bGw7XG4gICAgICBkLnJlbGF4ZWRTZWN1cml0eUVuYWJsZWQgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzYXkgYSBmZWF0dXJlIGlzIGVuYWJsZWQgd2hlbiBpdCBpcyBleHBsaWNpdGx5IGFsbG93ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkLmFsbG93SW5zZWN1cmUgPSBbJ2ZvbycsICdiYXInXTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnZm9vJykuc2hvdWxkLmJlLnRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXonKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNheSBhIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgaWYgaXQgaXMgbm90IGVuYWJsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkLmFsbG93SW5zZWN1cmUgPSBbXTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnZm9vJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcmVmZXIgZGVueUluc2VjdXJlIHRvIGFsbG93SW5zZWN1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkLmFsbG93SW5zZWN1cmUgPSBbJ2ZvbycsICdiYXInXTtcbiAgICAgIGQuZGVueUluc2VjdXJlID0gWydmb28nXTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnZm9vJykuc2hvdWxkLmJlLmZhbHNlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXInKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmF6Jykuc2hvdWxkLmJlLmZhbHNlO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBnbG9iYWwgc2V0dGluZyBmb3IgaW5zZWN1cml0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2ZvbycpLnNob3VsZC5iZS50cnVlO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdiYXInKS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmF6Jykuc2hvdWxkLmJlLnRydWU7XG4gICAgfSk7XG5cbiAgICBpdCgnZ2xvYmFsIHNldHRpbmcgc2hvdWxkIGJlIG92ZXJyaWRlYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICBkLmRlbnlJbnNlY3VyZSA9IFsnZm9vJywgJ2JhciddO1xuICAgICAgZC5pc0ZlYXR1cmVFbmFibGVkKCdmb28nKS5zaG91bGQuYmUuZmFsc2U7XG4gICAgICBkLmlzRmVhdHVyZUVuYWJsZWQoJ2JhcicpLnNob3VsZC5iZS5mYWxzZTtcbiAgICAgIGQuaXNGZWF0dXJlRW5hYmxlZCgnYmF6Jykuc2hvdWxkLmJlLnRydWU7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRHJpdmVyVW5pdFRlc3RzO1xuIl0sImZpbGUiOiJ0ZXN0L2Jhc2Vkcml2ZXIvZHJpdmVyLXRlc3RzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -6,21 +6,19 @@ require("source-map-support/register");
6
6
 
7
7
  var _lib = _interopRequireDefault(require("../../lib"));
8
8
 
9
- var _sinon = _interopRequireDefault(require("sinon"));
9
+ var _sinon = require("sinon");
10
10
 
11
11
  describe('timeout', function () {
12
12
  let driver = new _lib.default();
13
- let implicitWaitSpy, newCommandTimeoutSpy;
14
- before(function () {
15
- implicitWaitSpy = _sinon.default.spy(driver, 'setImplicitWait');
16
- newCommandTimeoutSpy = _sinon.default.spy(driver, 'setNewCommandTimeout');
17
- });
13
+ let implicitWaitSpy;
14
+ let sandbox;
18
15
  beforeEach(function () {
16
+ sandbox = (0, _sinon.createSandbox)();
19
17
  driver.implicitWaitMs = 0;
18
+ implicitWaitSpy = sandbox.spy(driver, 'setImplicitWait');
20
19
  });
21
20
  afterEach(function () {
22
- implicitWaitSpy.resetHistory();
23
- newCommandTimeoutSpy.resetHistory();
21
+ sandbox.restore();
24
22
  });
25
23
  describe('timeouts', function () {
26
24
  describe('errors', function () {
@@ -136,4 +134,4 @@ describe('timeout', function () {
136
134
  });require('source-map-support').install();
137
135
 
138
136
 
139
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci90aW1lb3V0LXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiZHJpdmVyIiwiQmFzZURyaXZlciIsImltcGxpY2l0V2FpdFNweSIsIm5ld0NvbW1hbmRUaW1lb3V0U3B5IiwiYmVmb3JlIiwic2lub24iLCJzcHkiLCJiZWZvcmVFYWNoIiwiaW1wbGljaXRXYWl0TXMiLCJhZnRlckVhY2giLCJyZXNldEhpc3RvcnkiLCJpdCIsInRpbWVvdXRzIiwic2hvdWxkIiwiZXZlbnR1YWxseSIsImJlIiwicmVqZWN0ZWQiLCJ1bmRlZmluZWQiLCJjYWxsZWRPbmNlIiwidHJ1ZSIsImZpcnN0Q2FsbCIsImFyZ3MiLCJlcXVhbCIsImVxbCIsImltcGxpY2l0V2FpdCIsInNldEltcGxpY2l0V2FpdCIsIm1hbmFnZWREcml2ZXIxIiwibWFuYWdlZERyaXZlcjIiLCJhZGRNYW5hZ2VkRHJpdmVyIiwiYWZ0ZXIiLCJtYW5hZ2VkRHJpdmVycyIsInNldE5ld0NvbW1hbmRUaW1lb3V0IiwibmV3Q29tbWFuZFRpbWVvdXRNcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBS0FBLFFBQVEsQ0FBQyxTQUFELEVBQVksWUFBWTtBQUM5QixNQUFJQyxNQUFNLEdBQUcsSUFBSUMsWUFBSixFQUFiO0FBQ0EsTUFBSUMsZUFBSixFQUFxQkMsb0JBQXJCO0FBQ0FDLEVBQUFBLE1BQU0sQ0FBQyxZQUFZO0FBQ2pCRixJQUFBQSxlQUFlLEdBQUdHLGVBQU1DLEdBQU4sQ0FBVU4sTUFBVixFQUFrQixpQkFBbEIsQ0FBbEI7QUFDQUcsSUFBQUEsb0JBQW9CLEdBQUdFLGVBQU1DLEdBQU4sQ0FBVU4sTUFBVixFQUFrQixzQkFBbEIsQ0FBdkI7QUFDRCxHQUhLLENBQU47QUFJQU8sRUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckJQLElBQUFBLE1BQU0sQ0FBQ1EsY0FBUCxHQUF3QixDQUF4QjtBQUNELEdBRlMsQ0FBVjtBQUdBQyxFQUFBQSxTQUFT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b250ZW50IjpbImltcG9ydCBCYXNlRHJpdmVyIGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuXG5cblxuXG5kZXNjcmliZSgndGltZW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGRyaXZlciA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gIGxldCBpbXBsaWNpdFdhaXRTcHksIG5ld0NvbW1hbmRUaW1lb3V0U3B5O1xuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGltcGxpY2l0V2FpdFNweSA9IHNpbm9uLnNweShkcml2ZXIsICdzZXRJbXBsaWNpdFdhaXQnKTtcbiAgICBuZXdDb21tYW5kVGltZW91dFNweSA9IHNpbm9uLnNweShkcml2ZXIsICdzZXROZXdDb21tYW5kVGltZW91dCcpO1xuICB9KTtcbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zID0gMDtcbiAgfSk7XG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgaW1wbGljaXRXYWl0U3B5LnJlc2V0SGlzdG9yeSgpO1xuICAgIG5ld0NvbW1hbmRUaW1lb3V0U3B5LnJlc2V0SGlzdG9yeSgpO1xuICB9KTtcbiAgZGVzY3JpYmUoJ3RpbWVvdXRzJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHNvbWV0aGluZyByYW5kb20gaXMgc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKCdyYW5kb20gdGltZW91dCcsICdob3dkeScpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHRpbWVvdXQgaXMgbmVnYXRpdmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cygncmFuZG9tIHRpbWVvdXQnLCAtNDIpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9ycyBpZiB0aW1lb3V0IHR5cGUgaXMgdW5rbm93bicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKCdyYW5kb20gdGltZW91dCcsIDQyKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiBzb21ldGhpbmcgcmFuZG9tIGlzIHNlbnQgdG8gc2NyaXB0RHVyYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgMTIzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgc29tZXRoaW5nIHJhbmRvbSBpcyBzZW50IHRvIHBhZ2VMb2FkRHVyYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAxMjMsIHVuZGVmaW5lZCkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnaW1wbGljaXQgd2FpdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhbiBpbnRlZ2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHMoJ2ltcGxpY2l0JywgNDIpO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgaW1wbGljaXRXYWl0U3B5LmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCg0Mik7XG4gICAgICAgIGRyaXZlci5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHNldEltcGxpY2l0V2FpdCB3aGVuIGdpdmVuIGEgc3RyaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHMoJ2ltcGxpY2l0JywgJzQyJyk7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgc2V0SW1wbGljaXRXYWl0IHdoZW4gZ2l2ZW4gYW4gaW50ZWdlciB0byBpbXBsaWNpdER1cmF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHModW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCA0Mik7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgc2V0SW1wbGljaXRXYWl0IHdoZW4gZ2l2ZW4gYSBzdHJpbmcgdG8gaW1wbGljaXREdXJhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJzQyJyk7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnaW1wbGljaXRXYWl0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhbiBpbnRlZ2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZHJpdmVyLmltcGxpY2l0V2FpdCg0Mik7XG4gICAgICBpbXBsaWNpdFdhaXRTcHkuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGltcGxpY2l0V2FpdFNweS5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoNDIpO1xuICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhIHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGRyaXZlci5pbXBsaWNpdFdhaXQoJzQyJyk7XG4gICAgICBpbXBsaWNpdFdhaXRTcHkuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGltcGxpY2l0V2FpdFNweS5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoNDIpO1xuICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgc29tZXRoaW5nIHJhbmRvbSBpcyBzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZHJpdmVyLmltcGxpY2l0V2FpdCgnaG93ZHknKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHRpbWVvdXQgaXMgbmVnYXRpdmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBkcml2ZXIuaW1wbGljaXRXYWl0KC00Mikuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXQgaW1wbGljaXQgd2FpdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNldCB0aGUgaW1wbGljaXQgd2FpdCB3aXRoIGFuIGludGVnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkcml2ZXIuc2V0SW1wbGljaXRXYWl0KDQyKTtcbiAgICAgIGRyaXZlci5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnd2l0aCBtYW5hZ2VkIGRyaXZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBtYW5hZ2VkRHJpdmVyMSA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgICBsZXQgbWFuYWdlZERyaXZlcjIgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZHJpdmVyLmFkZE1hbmFnZWREcml2ZXIobWFuYWdlZERyaXZlcjEpO1xuICAgICAgICBkcml2ZXIuYWRkTWFuYWdlZERyaXZlcihtYW5hZ2VkRHJpdmVyMik7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZHJpdmVyLm1hbmFnZWREcml2ZXJzID0gW107XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgc2V0IHRoZSBpbXBsaWNpdCB3YWl0IG9uIG1hbmFnZWQgZHJpdmVycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZHJpdmVyLnNldEltcGxpY2l0V2FpdCg0Mik7XG4gICAgICAgIGRyaXZlci5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgICAgbWFuYWdlZERyaXZlcjEuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxbCg0Mik7XG4gICAgICAgIG1hbmFnZWREcml2ZXIyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnc2V0IG5ldyBjb21tYW5kIHRpbWVvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgdGhlIG5ldyBjb21tYW5kIHRpbWVvdXQgd2l0aCBhbiBpbnRlZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgZHJpdmVyLnNldE5ld0NvbW1hbmRUaW1lb3V0KDQyKTtcbiAgICAgIGRyaXZlci5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5lcWwoNDIpO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCd3aXRoIG1hbmFnZWQgZHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IG1hbmFnZWREcml2ZXIxID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICAgIGxldCBtYW5hZ2VkRHJpdmVyMiA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIuYWRkTWFuYWdlZERyaXZlcihtYW5hZ2VkRHJpdmVyMSk7XG4gICAgICAgIGRyaXZlci5hZGRNYW5hZ2VkRHJpdmVyKG1hbmFnZWREcml2ZXIyKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIubWFuYWdlZERyaXZlcnMgPSBbXTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIG5ldyBjb21tYW5kIHRpbWVvdXQgb24gbWFuYWdlZCBkcml2ZXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQoNDIpO1xuICAgICAgICBkcml2ZXIubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgICAgbWFuYWdlZERyaXZlcjEubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgICAgbWFuYWdlZERyaXZlcjIubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2Jhc2Vkcml2ZXIvdGltZW91dC1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
137
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci90aW1lb3V0LXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiZHJpdmVyIiwiQmFzZURyaXZlciIsImltcGxpY2l0V2FpdFNweSIsInNhbmRib3giLCJiZWZvcmVFYWNoIiwiaW1wbGljaXRXYWl0TXMiLCJzcHkiLCJhZnRlckVhY2giLCJyZXN0b3JlIiwiaXQiLCJ0aW1lb3V0cyIsInNob3VsZCIsImV2ZW50dWFsbHkiLCJiZSIsInJlamVjdGVkIiwidW5kZWZpbmVkIiwiY2FsbGVkT25jZSIsInRydWUiLCJmaXJzdENhbGwiLCJhcmdzIiwiZXF1YWwiLCJlcWwiLCJpbXBsaWNpdFdhaXQiLCJzZXRJbXBsaWNpdFdhaXQiLCJtYW5hZ2VkRHJpdmVyMSIsIm1hbmFnZWREcml2ZXIyIiwiYmVmb3JlIiwiYWRkTWFuYWdlZERyaXZlciIsImFmdGVyIiwibWFuYWdlZERyaXZlcnMiLCJzZXROZXdDb21tYW5kVGltZW91dCIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUVBQSxRQUFRLENBQUMsU0FBRCxFQUFZLFlBQVk7QUFDOUIsTUFBSUMsTUFBTSxHQUFHLElBQUlDLFlBQUosRUFBYjtBQUNBLE1BQUlDLGVBQUo7QUFDQSxNQUFJQyxPQUFKO0FBQ0FDLEVBQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCRCxJQUFBQSxPQUFPLEdBQUcsMkJBQVY7QUFDQUgsSUFBQUEsTUFBTSxDQUFDSyxjQUFQLEdBQXdCLENBQXhCO0FBQ0FILElBQUFBLGVBQWUsR0FBR0MsT0FBTyxDQUFDRyxHQUFSLENBQVlOLE1BQVosRUFBb0IsaUJBQXBCLENBQWxCO0FBQ0QsR0FKUyxDQUFWO0FBS0FPLEVBQUFBLFNBQVMsQ0FBQyxZQUFZO0FBQ3BCSixJQUFBQSxPQUFPLENBQUNLLE9BQVI7QUFDRCxHQUZRLENBQVQ7QUFHQVQsRUFBQUEsUUFBUSxDQUFDLFVBQUQsRUFBYSxZQUFZO0FBQy9CQSxJ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UCxDQUEyQnBCLE1BQTNCLENBQWtDVSxHQUFsQyxDQUFzQyxFQUF0QztBQUNELEtBSEMsQ0FBRjtBQUlBdEIsSUFBQUEsUUFBUSxDQUFDLHFCQUFELEVBQXdCLFlBQVk7QUFDMUMsVUFBSXlCLGNBQWMsR0FBRyxJQUFJdkIsWUFBSixFQUFyQjtBQUNBLFVBQUl3QixjQUFjLEdBQUcsSUFBSXhCLFlBQUosRUFBckI7QUFDQXlCLE1BQUFBLE1BQU0sQ0FBQyxZQUFZO0FBQ2pCMUIsUUFBQUEsTUFBTSxDQUFDMkIsZ0JBQVAsQ0FBd0JILGNBQXhCO0FBQ0F4QixRQUFBQSxNQUFNLENBQUMyQixnQkFBUCxDQUF3QkYsY0FBeEI7QUFDRCxPQUhLLENBQU47QUFJQUcsTUFBQUEsS0FBSyxDQUFDLFlBQVk7QUFDaEI1QixRQUFBQSxNQUFNLENBQUM2QixjQUFQLEdBQXdCLEVBQXhCO0FBQ0QsT0FGSSxDQUFMO0FBR0FwQixNQUFBQSxFQUFFLENBQUMsdURBQUQsRUFBMEQsWUFBWTtBQUN0RVQsUUFBQUEsTUFBTSxDQUFDOEIsb0JBQVAsQ0FBNEIsRUFBNUI7QUFDQTlCLFFBQUFBLE1BQU0sQ0FBQytCLG1CQUFQLENBQTJCcEIsTUFBM0IsQ0FBa0NVLEdBQWxDLENBQXNDLEVBQXRDO0FBQ0FHLFFBQUFBLGNBQWMsQ0FBQ08sbUJBQWYsQ0FBbUNwQixNQUFuQyxDQUEwQ1UsR0FBMUMsQ0FBOEMsRUFBOUM7QUFDQUksUUFBQUEsY0FBYyxDQUFDTSxtQkFBZixDQUFtQ3BCLE1BQW5DLENBQTBDVSxHQUExQyxDQUE4QyxFQUE5QztBQUNELE9BTEMsQ0FBRjtBQU1ELEtBaEJPLENBQVI7QUFpQkQsR0F0Qk8sQ0FBUjtBQXVCRCxDQTVITyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VEcml2ZXIgZnJvbSAnLi4vLi4vbGliJztcbmltcG9ydCB7IGNyZWF0ZVNhbmRib3ggfSBmcm9tICdzaW5vbic7XG5cbmRlc2NyaWJlKCd0aW1lb3V0JywgZnVuY3Rpb24gKCkge1xuICBsZXQgZHJpdmVyID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgbGV0IGltcGxpY2l0V2FpdFNweTtcbiAgbGV0IHNhbmRib3g7XG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3ggPSBjcmVhdGVTYW5kYm94KCk7XG4gICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zID0gMDtcbiAgICBpbXBsaWNpdFdhaXRTcHkgPSBzYW5kYm94LnNweShkcml2ZXIsICdzZXRJbXBsaWNpdFdhaXQnKTtcbiAgfSk7XG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gIH0pO1xuICBkZXNjcmliZSgndGltZW91dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ2Vycm9ycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgc29tZXRoaW5nIHJhbmRvbSBpcyBzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHMoJ3JhbmRvbSB0aW1lb3V0JywgJ2hvd2R5Jykuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgdGltZW91dCBpcyBuZWdhdGl2ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKCdyYW5kb20gdGltZW91dCcsIC00Mikuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3JzIGlmIHRpbWVvdXQgdHlwZSBpcyB1bmtub3duJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHMoJ3JhbmRvbSB0aW1lb3V0JywgNDIpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHNvbWV0aGluZyByYW5kb20gaXMgc2VudCB0byBzY3JpcHREdXJhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAxMjMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiBzb21ldGhpbmcgcmFuZG9tIGlzIHNlbnQgdG8gcGFnZUxvYWREdXJhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDEyMywgdW5kZWZpbmVkKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdpbXBsaWNpdCB3YWl0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHNldEltcGxpY2l0V2FpdCB3aGVuIGdpdmVuIGFuIGludGVnZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cygnaW1wbGljaXQnLCA0Mik7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgc2V0SW1wbGljaXRXYWl0IHdoZW4gZ2l2ZW4gYSBzdHJpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cygnaW1wbGljaXQnLCAnNDInKTtcbiAgICAgICAgaW1wbGljaXRXYWl0U3B5LmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoNDIpO1xuICAgICAgICBkcml2ZXIuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxbCg0Mik7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhbiBpbnRlZ2VyIHRvIGltcGxpY2l0RHVyYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDQyKTtcbiAgICAgICAgaW1wbGljaXRXYWl0U3B5LmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoNDIpO1xuICAgICAgICBkcml2ZXIuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxbCg0Mik7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhIHN0cmluZyB0byBpbXBsaWNpdER1cmF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHModW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnNDInKTtcbiAgICAgICAgaW1wbGljaXRXYWl0U3B5LmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWU7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoNDIpO1xuICAgICAgICBkcml2ZXIuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxbCg0Mik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdpbXBsaWNpdFdhaXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjYWxsIHNldEltcGxpY2l0V2FpdCB3aGVuIGdpdmVuIGFuIGludGVnZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBkcml2ZXIuaW1wbGljaXRXYWl0KDQyKTtcbiAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgaW1wbGljaXRXYWl0U3B5LmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCg0Mik7XG4gICAgICBkcml2ZXIuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxbCg0Mik7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBjYWxsIHNldEltcGxpY2l0V2FpdCB3aGVuIGdpdmVuIGEgc3RyaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZHJpdmVyLmltcGxpY2l0V2FpdCgnNDInKTtcbiAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgaW1wbGljaXRXYWl0U3B5LmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCg0Mik7XG4gICAgICBkcml2ZXIuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxbCg0Mik7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiBzb21ldGhpbmcgcmFuZG9tIGlzIHNlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBkcml2ZXIuaW1wbGljaXRXYWl0KCdob3dkeScpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgdGltZW91dCBpcyBuZWdhdGl2ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGRyaXZlci5pbXBsaWNpdFdhaXQoLTQyKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NldCBpbXBsaWNpdCB3YWl0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHRoZSBpbXBsaWNpdCB3YWl0IHdpdGggYW4gaW50ZWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRyaXZlci5zZXRJbXBsaWNpdFdhaXQoNDIpO1xuICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCd3aXRoIG1hbmFnZWQgZHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IG1hbmFnZWREcml2ZXIxID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICAgIGxldCBtYW5hZ2VkRHJpdmVyMiA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIuYWRkTWFuYWdlZERyaXZlcihtYW5hZ2VkRHJpdmVyMSk7XG4gICAgICAgIGRyaXZlci5hZGRNYW5hZ2VkRHJpdmVyKG1hbmFnZWREcml2ZXIyKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIubWFuYWdlZERyaXZlcnMgPSBbXTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIGltcGxpY2l0IHdhaXQgb24gbWFuYWdlZCBkcml2ZXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIuc2V0SW1wbGljaXRXYWl0KDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgICBtYW5hZ2VkRHJpdmVyMS5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgICAgbWFuYWdlZERyaXZlcjIuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxbCg0Mik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdzZXQgbmV3IGNvbW1hbmQgdGltZW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNldCB0aGUgbmV3IGNvbW1hbmQgdGltZW91dCB3aXRoIGFuIGludGVnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQoNDIpO1xuICAgICAgZHJpdmVyLm5ld0NvbW1hbmRUaW1lb3V0TXMuc2hvdWxkLmVxbCg0Mik7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ3dpdGggbWFuYWdlZCBkcml2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgbWFuYWdlZERyaXZlcjEgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgICAgbGV0IG1hbmFnZWREcml2ZXIyID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRyaXZlci5hZGRNYW5hZ2VkRHJpdmVyKG1hbmFnZWREcml2ZXIxKTtcbiAgICAgICAgZHJpdmVyLmFkZE1hbmFnZWREcml2ZXIobWFuYWdlZERyaXZlcjIpO1xuICAgICAgfSk7XG4gICAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRyaXZlci5tYW5hZ2VkRHJpdmVycyA9IFtdO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHNldCB0aGUgbmV3IGNvbW1hbmQgdGltZW91dCBvbiBtYW5hZ2VkIGRyaXZlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRyaXZlci5zZXROZXdDb21tYW5kVGltZW91dCg0Mik7XG4gICAgICAgIGRyaXZlci5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgICBtYW5hZ2VkRHJpdmVyMS5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgICBtYW5hZ2VkRHJpdmVyMi5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvYmFzZWRyaXZlci90aW1lb3V0LXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -8,7 +8,7 @@ var _lib = require("../../lib");
8
8
 
9
9
  var _axios = _interopRequireDefault(require("axios"));
10
10
 
11
- var _sinon = _interopRequireDefault(require("sinon"));
11
+ var _sinon = require("sinon");
12
12
 
13
13
  var _bluebird = _interopRequireDefault(require("bluebird"));
14
14
 
@@ -18,11 +18,10 @@ var _helpers = require("../helpers");
18
18
 
19
19
  describe('server', function () {
20
20
  let hwServer;
21
- let errorStub;
22
21
  let port;
22
+ let sandbox;
23
23
  before(async function () {
24
24
  port = await (0, _helpers.getTestPort)(true);
25
- errorStub = _sinon.default.stub(console, 'error');
26
25
 
27
26
  function configureRoutes(app) {
28
27
  app.get('/', (req, res) => {
@@ -47,9 +46,15 @@ describe('server', function () {
47
46
  port
48
47
  });
49
48
  });
49
+ beforeEach(function () {
50
+ sandbox = (0, _sinon.createSandbox)();
51
+ sandbox.stub(console, 'error');
52
+ });
50
53
  after(async function () {
51
54
  await hwServer.close();
52
- errorStub.restore();
55
+ });
56
+ afterEach(function () {
57
+ sandbox.restore();
53
58
  });
54
59
  it('should start up with our middleware', async function () {
55
60
  const {
@@ -153,4 +158,4 @@ describe('server plugins', function () {
153
158
  });require('source-map-support').install();
154
159
 
155
160
 
156
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZXhwcmVzcy9zZXJ2ZXItZTJlLXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaHdTZXJ2ZXIiLCJlcnJvclN0dWIiLCJwb3J0IiwiYmVmb3JlIiwic2lub24iLCJzdHViIiwiY29uc29sZSIsImNvbmZpZ3VyZVJvdXRlcyIsImFwcCIsImdldCIsInJlcSIsInJlcyIsImhlYWRlciIsInN0YXR1cyIsInNlbmQiLCJoZWFkZXJzIiwiRXJyb3IiLCJCIiwiZGVsYXkiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJhZnRlciIsImNsb3NlIiwicmVzdG9yZSIsIml0IiwiZGF0YSIsImF4aW9zIiwiVEVTVF9IT1NUIiwic2hvdWxkIiwiZXFsIiwidXJsIiwiYmUiLCJyZWplY3RlZCIsInJlamVjdGVkV2l0aCIsImJvZHlQcm9taXNlIiwiY2F0Y2giLCJEYXRlIiwibm93Iiwibm90IiwiYWJvdmUiLCJ0aW1lb3V0IiwiXyIsIm5vb3AiLCJob3N0bmFtZSIsImFmdGVyRWFjaCIsImlnbiIsInVwZGF0ZXJXaXRoR2V0Um91dGUiLCJyb3V0ZSIsInJlcGx5IiwiaHR0cFNlcnZlciIsInNlcnZlclVwZGF0ZXJzIiwiX3VwZGF0ZWRfcGx1Z2luMSIsInRydWUiLCJfdXBkYXRlZF9wbHVnaW4yIiwiZXZlbnR1YWxseSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0FBLFFBQVEsQ0FBQyxRQUFELEVBQVcsWUFBWTtBQUM3QixNQUFJQyxRQUFKO0FBQ0EsTUFBSUMsU0FBSjtBQUNBLE1BQUlDLElBQUo7QUFDQUMsRUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QkQsSUFBQUEsSUFBSSxHQUFHLE1BQU0sMEJBQVksSUFBWixDQUFiO0FBQ0FELElBQUFBLFNBQVMsR0FBR0csZUFBTUMsSUFBTixDQUFXQyxPQUFYLEVBQW9CLE9BQXBCLENBQVo7O0FBQ0EsYUFBU0MsZUFBVCxDQUEwQkMsR0FB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QUFDRyxNQUFMLENBQVlDLEdBQVosQ0FBZ0Isd0JBQWhCO0FBQ0EsS0FBQztBQUFDSixNQUFBQTtBQUFELFFBQVMsTUFBTUMsZUFBTWhCLEdBQU4sQ0FBVyxVQUFTaUIsa0JBQVUsSUFBR3hCLElBQUssVUFBdEMsQ0FBaEI7QUFDQXNCLElBQUFBLElBQUksQ0FBQ0csTUFBTCxDQUFZQyxHQUFaLENBQWdCLHdCQUFoQjtBQUNBNUIsSUFBQUEsUUFBUSxDQUFDa0QsZ0JBQVQsQ0FBMEJ2QixNQUExQixDQUFpQ0csRUFBakMsQ0FBb0NxQixJQUFwQztBQUNBbkQsSUFBQUEsUUFBUSxDQUFDb0QsZ0JBQVQsQ0FBMEJ6QixNQUExQixDQUFpQ0csRUFBakMsQ0FBb0NxQixJQUFwQztBQUNELEdBZkMsQ0FBRjtBQWdCQTVCLEVBQUFBLEVBQUUsQ0FBQywyREFBRCxFQUE4RCxrQkFBa0I7QUFDaEYsVUFBTSxpQkFBTztBQUNYSixNQUFBQSx3QkFBd0IsRUFBRXFCLGdCQUFFQyxJQURqQjtBQUVYdkMsTUFBQUEsSUFGVztBQUdYK0MsTUFBQUEsY0FBYyxFQUFFLENBQUMsTUFBTTtBQUFFLGNBQU0sSUFBSWpDLEtBQUosQ0FBVSxLQUFWLENBQU47QUFBd0IsT0FBakM7QUFITCxLQUFQLEVBSUhXLE1BSkcsQ0FJSTBCLFVBSkosQ0FJZXZCLEVBSmYsQ0FJa0JFLFlBSmxCLENBSStCLEtBSi9CLENBQU47QUFLRCxHQU5DLENBQUY7QUFPRCxDQS9DTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCB7IHNlcnZlciB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1RFU1RfSE9TVCwgZ2V0VGVzdFBvcnR9IGZyb20gJy4uL2hlbHBlcnMnO1xuXG5cbmRlc2NyaWJlKCdzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBod1NlcnZlcjtcbiAgbGV0IGVycm9yU3R1YjtcbiAgbGV0IHBvcnQ7XG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydCA9IGF3YWl0IGdldFRlc3RQb3J0KHRydWUpO1xuICAgIGVycm9yU3R1YiA9IHNpbm9uLnN0dWIoY29uc29sZSwgJ2Vycm9yJyk7XG4gICAgZnVuY3Rpb24gY29uZmlndXJlUm91dGVzIChhcHApIHtcbiAgICAgIGFwcC5nZXQoJy8nLCAocmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLmhlYWRlclsnY29udGVudC10eXBlJ10gPSAndGV4dC9odG1sJztcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLnNlbmQoJ0hlbGxvIFdvcmxkIScpO1xuICAgICAgfSk7XG4gICAgICBhcHAuZ2V0KCcvcHl0aG9uJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSk7XG4gICAgICB9KTtcbiAgICAgIGFwcC5nZXQoJy9lcnJvcicsICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYWhhaGEnKTtcbiAgICAgIH0pO1xuICAgICAgYXBwLmdldCgnL3BhdXNlJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5oZWFkZXJbJ2NvbnRlbnQtdHlwZSddID0gJ3RleHQvaHRtbCc7XG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKCdXZSBoYXZlIHdhaXRlZCEnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBod1NlcnZlciA9IGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb246IGNvbmZpZ3VyZVJvdXRlcyxcbiAgICAgIHBvcnQsXG4gICAgfSk7XG4gIH0pO1xuICBhZnRlcihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgaHdTZXJ2ZXIuY2xvc2UoKTtcbiAgICBlcnJvclN0dWIucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHN0YXJ0IHVwIHdpdGggb3VyIG1pZGRsZXdhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3MuZ2V0KGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vYCk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdIZWxsbyBXb3JsZCEnKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgZml4IGJyb2tlbiBjb250ZXh0IHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgdXJsOiBgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L3B5dGhvbmAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogJ1B5dGhvbicsXG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRhdGEuc2hvdWxkLmVxbCgnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBjYXRjaCBlcnJvcnMgaW4gdGhlIGNhdGNoYWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGF4aW9zLmdldChgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L2Vycm9yYCkuc2hvdWxkLmJlLnJlamVjdGVkO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBlcnJvciBpZiB3ZSB0cnkgdG8gc3RhcnQgYWdhaW4gb24gYSBwb3J0IHRoYXQgaXMgdXNlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uICgpIHt9LFxuICAgICAgcG9ydCxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9FQUREUklOVVNFLyk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIG5vdCB3YWl0IGZvciB0aGUgc2VydmVyIGNsb3NlIGNvbm5lY3Rpb25zIGJlZm9yZSBmaW5pc2hpbmcgY2xvc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgYm9keVByb21pc2UgPSBheGlvcy5nZXQoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9wYXVzZWApLmNhdGNoKCgpID0+IHt9KTtcblxuICAgIC8vIHJlbGlucXVpc2ggY29udHJvbCBzbyB0aGF0IHdlIGRvbid0IGNsb3NlIGJlZm9yZSB0aGUgcmVxdWVzdCBpcyByZWNlaXZlZFxuICAgIGF3YWl0IEIuZGVsYXkoMTAwKTtcblxuICAgIGxldCBiZWZvcmUgPSBEYXRlLm5vdygpO1xuICAgIGF3YWl0IGh3U2VydmVyLmNsb3NlKCk7XG4gICAgLy8gZXhwZWN0IHNsaWdodGx5IGxlc3MgdGhhbiB0aGUgcmVxdWVzdCB3YWl0ZWQsIHNpbmNlIHdlIHBhdXNlZCBhYm92ZVxuICAgIChEYXRlLm5vdygpIC0gYmVmb3JlKS5zaG91bGQubm90LmJlLmFib3ZlKDgwMCk7XG5cbiAgICBhd2FpdCBib2R5UHJvbWlzZTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgZXJyb3IgaWYgd2UgdHJ5IHRvIHN0YXJ0IG9uIGEgYmFkIGhvc3RuYW1lJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudGltZW91dCg2MDAwMCk7XG4gICAgYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogXy5ub29wLFxuICAgICAgcG9ydCxcbiAgICAgIGhvc3RuYW1lOiAnbG9sY2F0aG9zdCcsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvRU5PVEZPVU5EfEVBRERSTk9UQVZBSUx8RUFJX0FHQUlOLyk7XG4gICAgYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogXy5ub29wLFxuICAgICAgcG9ydCxcbiAgICAgIGhvc3RuYW1lOiAnMS4xLjEuMScsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvRUFERFJOT1RBVkFJTC8pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc2VydmVyIHBsdWdpbnMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBod1NlcnZlcjtcbiAgbGV0IHBvcnQ7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBwb3J0ID0gYXdhaXQgZ2V0VGVzdFBvcnQodHJ1ZSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGh3U2VydmVyLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9KTtcblxuICBmdW5jdGlvbiB1cGRhdGVyV2l0aEdldFJvdXRlIChyb3V0ZSwgcmVwbHkpIHtcbiAgICByZXR1cm4gYXN5bmMgKGFwcCwgaHR0cFNlcnZlcikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICAgIGFwcC5nZXQoYC8ke3JvdXRlfWAsIChyZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMuaGVhZGVyWydjb250ZW50LXR5cGUnXSA9ICd0ZXh0L2h0bWwnO1xuICAgICAgICByZXMuc3RhdHVzKDIwMCkuc2VuZChyZXBseSk7XG4gICAgICB9KTtcbiAgICAgIGh0dHBTZXJ2ZXJbYF91cGRhdGVkXyR7cm91dGV9YF0gPSB0cnVlO1xuICAgIH07XG4gIH1cblxuICBpdCgnc2hvdWxkIGFsbG93IG9uZSBvciBtb3JlIHBsdWdpbnMgdG8gdXBkYXRlIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaHdTZXJ2ZXIgPSBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uOiBfLm5vb3AsXG4gICAgICBwb3J0LFxuICAgICAgc2VydmVyVXBkYXRlcnM6IFtcbiAgICAgICAgdXBkYXRlcldpdGhHZXRSb3V0ZSgncGx1Z2luMScsICdyZXMgZnJvbSBwbHVnaW4xIHJvdXRlJyksXG4gICAgICAgIHVwZGF0ZXJXaXRoR2V0Um91dGUoJ3BsdWdpbjInLCAncmVzIGZyb20gcGx1Z2luMiByb3V0ZScpLFxuICAgICAgXVxuICAgIH0pO1xuICAgIGxldCB7ZGF0YX0gPSBhd2FpdCBheGlvcy5nZXQoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9wbHVnaW4xYCk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdyZXMgZnJvbSBwbHVnaW4xIHJvdXRlJyk7XG4gICAgKHtkYXRhfSA9IGF3YWl0IGF4aW9zLmdldChgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L3BsdWdpbjJgKSk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdyZXMgZnJvbSBwbHVnaW4yIHJvdXRlJyk7XG4gICAgaHdTZXJ2ZXIuX3VwZGF0ZWRfcGx1Z2luMS5zaG91bGQuYmUudHJ1ZTtcbiAgICBod1NlcnZlci5fdXBkYXRlZF9wbHVnaW4yLnNob3VsZC5iZS50cnVlO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBwYXNzIG9uIGVycm9ycyBmcm9tIHRoZSBwbHVnaW4gdXBkYXRlU2VydmVyIG1ldGhvZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uOiBfLm5vb3AsXG4gICAgICBwb3J0LFxuICAgICAgc2VydmVyVXBkYXRlcnM6IFsoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndWdoJyk7fV1cbiAgICB9KS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL3VnaC8pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2V4cHJlc3Mvc2VydmVyLWUyZS1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
161
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZXhwcmVzcy9zZXJ2ZXItZTJlLXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaHdTZXJ2ZXIiLCJwb3J0Iiwic2FuZGJveCIsImJlZm9yZSIsImNvbmZpZ3VyZVJvdXRlcyIsImFwcCIsImdldCIsInJlcSIsInJlcyIsImhlYWRlciIsInN0YXR1cyIsInNlbmQiLCJoZWFkZXJzIiwiRXJyb3IiLCJCIiwiZGVsYXkiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJiZWZvcmVFYWNoIiwic3R1YiIsImNvbnNvbGUiLCJhZnRlciIsImNsb3NlIiwiYWZ0ZXJFYWNoIiwicmVzdG9yZSIsIml0IiwiZGF0YSIsImF4aW9zIiwiVEVTVF9IT1NUIiwic2hvdWxkIiwiZXFsIiwidXJsIiwiYmUiLCJyZWplY3RlZCIsInJlamVjdGVkV2l0aCIsImJvZHlQcm9taXNlIiwiY2F0Y2giLCJEYXRlIiwibm93Iiwibm90IiwiYWJvdmUiLCJ0aW1lb3V0IiwiXyIsIm5vb3AiLCJob3N0bmFtZSIsImlnbiIsInVwZGF0ZXJXaXRoR2V0Um91dGUiLCJyb3V0ZSIsInJlcGx5IiwiaHR0cFNlcnZlciIsInNlcnZlclVwZGF0ZXJzIiwiX3VwZGF0ZWRfcGx1Z2luMSIsInRydWUiLCJfdXBkYXRlZF9wbHVnaW4yIiwiZXZlbnR1YWxseSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0FBLFFBQVEsQ0FBQyxRQUFELEVBQVcsWUFBWTtBQUM3QixNQUFJQyxRQUFKO0FBQ0EsTUFBSUMsSUFBSjtBQUNBLE1BQUlDLE9BQUo7QUFDQUMsRUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QkYsSUFBQUEsSUFBSSxHQUFHLE1BQU0sMEJBQVksSUFBWixDQUFiOztBQUVBLGFBQVNHLGVBQVQsQ0FBMEJDLEdBQTFCLEVBQStCO0FBQzdCQSxNQUFBQSxHQUFHLENBQUNDLEdBQUosQ0FBUSxHQUFSLEVBQWEsQ0FBQ0Ms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UUFBSTtBQUFDcEIsTUFBQUE7QUFBRCxRQUFTLE1BQU1DLGVBQU1wQixHQUFOLENBQVcsVUFBU3FCLGtCQUFVLElBQUcxQixJQUFLLFVBQXRDLENBQW5CO0FBQ0F3QixJQUFBQSxJQUFJLENBQUNHLE1BQUwsQ0FBWUMsR0FBWixDQUFnQix3QkFBaEI7QUFDQSxLQUFDO0FBQUNKLE1BQUFBO0FBQUQsUUFBUyxNQUFNQyxlQUFNcEIsR0FBTixDQUFXLFVBQVNxQixrQkFBVSxJQUFHMUIsSUFBSyxVQUF0QyxDQUFoQjtBQUNBd0IsSUFBQUEsSUFBSSxDQUFDRyxNQUFMLENBQVlDLEdBQVosQ0FBZ0Isd0JBQWhCO0FBQ0E3QixJQUFBQSxRQUFRLENBQUNrRCxnQkFBVCxDQUEwQnRCLE1BQTFCLENBQWlDRyxFQUFqQyxDQUFvQ29CLElBQXBDO0FBQ0FuRCxJQUFBQSxRQUFRLENBQUNvRCxnQkFBVCxDQUEwQnhCLE1BQTFCLENBQWlDRyxFQUFqQyxDQUFvQ29CLElBQXBDO0FBQ0QsR0FmQyxDQUFGO0FBZ0JBM0IsRUFBQUEsRUFBRSxDQUFDLDJEQUFELEVBQThELGtCQUFrQjtBQUNoRixVQUFNLGlCQUFPO0FBQ1hSLE1BQUFBLHdCQUF3QixFQUFFeUIsZ0JBQUVDLElBRGpCO0FBRVh6QyxNQUFBQSxJQUZXO0FBR1hnRCxNQUFBQSxjQUFjLEVBQUUsQ0FBQyxNQUFNO0FBQUUsY0FBTSxJQUFJcEMsS0FBSixDQUFVLEtBQVYsQ0FBTjtBQUF3QixPQUFqQztBQUhMLEtBQVAsRUFJSGUsTUFKRyxDQUlJeUIsVUFKSixDQUlldEIsRUFKZixDQUlrQkUsWUFKbEIsQ0FJK0IsS0FKL0IsQ0FBTjtBQUtELEdBTkMsQ0FBRjtBQU9ELENBL0NPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bW9jaGFcblxuaW1wb3J0IHsgc2VydmVyIH0gZnJvbSAnLi4vLi4vbGliJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBjcmVhdGVTYW5kYm94IH0gZnJvbSAnc2lub24nO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7VEVTVF9IT1NULCBnZXRUZXN0UG9ydH0gZnJvbSAnLi4vaGVscGVycyc7XG5cblxuZGVzY3JpYmUoJ3NlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGh3U2VydmVyO1xuICBsZXQgcG9ydDtcbiAgbGV0IHNhbmRib3g7XG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydCA9IGF3YWl0IGdldFRlc3RQb3J0KHRydWUpO1xuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlUm91dGVzIChhcHApIHtcbiAgICAgIGFwcC5nZXQoJy8nLCAocmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLmhlYWRlclsnY29udGVudC10eXBlJ10gPSAndGV4dC9odG1sJztcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLnNlbmQoJ0hlbGxvIFdvcmxkIScpO1xuICAgICAgfSk7XG4gICAgICBhcHAuZ2V0KCcvcHl0aG9uJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSk7XG4gICAgICB9KTtcbiAgICAgIGFwcC5nZXQoJy9lcnJvcicsICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYWhhaGEnKTtcbiAgICAgIH0pO1xuICAgICAgYXBwLmdldCgnL3BhdXNlJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5oZWFkZXJbJ2NvbnRlbnQtdHlwZSddID0gJ3RleHQvaHRtbCc7XG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKCdXZSBoYXZlIHdhaXRlZCEnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBod1NlcnZlciA9IGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb246IGNvbmZpZ3VyZVJvdXRlcyxcbiAgICAgIHBvcnQsXG4gICAgfSk7XG4gIH0pO1xuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94ID0gY3JlYXRlU2FuZGJveCgpO1xuICAgIHNhbmRib3guc3R1Yihjb25zb2xlLCAnZXJyb3InKTtcbiAgfSk7XG4gIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBod1NlcnZlci5jbG9zZSgpO1xuICB9KTtcbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdGFydCB1cCB3aXRoIG91ciBtaWRkbGV3YXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IGF4aW9zLmdldChgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L2ApO1xuICAgIGRhdGEuc2hvdWxkLmVxbCgnSGVsbG8gV29ybGQhJyk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIGZpeCBicm9rZW4gY29udGV4dCB0eXBlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IGF4aW9zKHtcbiAgICAgIHVybDogYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9weXRob25gLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAndXNlci1hZ2VudCc6ICdQeXRob24nLFxuICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkYXRhLnNob3VsZC5lcWwoJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgY2F0Y2ggZXJyb3JzIGluIHRoZSBjYXRjaGFsbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBheGlvcy5nZXQoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9lcnJvcmApLnNob3VsZC5iZS5yZWplY3RlZDtcbiAgfSk7XG4gIGl0KCdzaG91bGQgZXJyb3IgaWYgd2UgdHJ5IHRvIHN0YXJ0IGFnYWluIG9uIGEgcG9ydCB0aGF0IGlzIHVzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiAoKSB7fSxcbiAgICAgIHBvcnQsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvRUFERFJJTlVTRS8pO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBub3Qgd2FpdCBmb3IgdGhlIHNlcnZlciBjbG9zZSBjb25uZWN0aW9ucyBiZWZvcmUgZmluaXNoaW5nIGNsb3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJvZHlQcm9taXNlID0gYXhpb3MuZ2V0KGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vcGF1c2VgKS5jYXRjaCgoKSA9PiB7fSk7XG5cbiAgICAvLyByZWxpbnF1aXNoIGNvbnRyb2wgc28gdGhhdCB3ZSBkb24ndCBjbG9zZSBiZWZvcmUgdGhlIHJlcXVlc3QgaXMgcmVjZWl2ZWRcbiAgICBhd2FpdCBCLmRlbGF5KDEwMCk7XG5cbiAgICBsZXQgYmVmb3JlID0gRGF0ZS5ub3coKTtcbiAgICBhd2FpdCBod1NlcnZlci5jbG9zZSgpO1xuICAgIC8vIGV4cGVjdCBzbGlnaHRseSBsZXNzIHRoYW4gdGhlIHJlcXVlc3Qgd2FpdGVkLCBzaW5jZSB3ZSBwYXVzZWQgYWJvdmVcbiAgICAoRGF0ZS5ub3coKSAtIGJlZm9yZSkuc2hvdWxkLm5vdC5iZS5hYm92ZSg4MDApO1xuXG4gICAgYXdhaXQgYm9keVByb21pc2U7XG4gIH0pO1xuICBpdCgnc2hvdWxkIGVycm9yIGlmIHdlIHRyeSB0byBzdGFydCBvbiBhIGJhZCBob3N0bmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRpbWVvdXQoNjAwMDApO1xuICAgIGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb246IF8ubm9vcCxcbiAgICAgIHBvcnQsXG4gICAgICBob3N0bmFtZTogJ2xvbGNhdGhvc3QnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0VOT1RGT1VORHxFQUREUk5PVEFWQUlMfEVBSV9BR0FJTi8pO1xuICAgIGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb246IF8ubm9vcCxcbiAgICAgIHBvcnQsXG4gICAgICBob3N0bmFtZTogJzEuMS4xLjEnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0VBRERSTk9UQVZBSUwvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3NlcnZlciBwbHVnaW5zJywgZnVuY3Rpb24gKCkge1xuICBsZXQgaHdTZXJ2ZXI7XG4gIGxldCBwb3J0O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydCA9IGF3YWl0IGdldFRlc3RQb3J0KHRydWUpO1xuICB9KTtcblxuICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBod1NlcnZlci5jbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfSk7XG5cbiAgZnVuY3Rpb24gdXBkYXRlcldpdGhHZXRSb3V0ZSAocm91dGUsIHJlcGx5KSB7XG4gICAgcmV0dXJuIGFzeW5jIChhcHAsIGh0dHBTZXJ2ZXIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgICBhcHAuZ2V0KGAvJHtyb3V0ZX1gLCAocmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLmhlYWRlclsnY29udGVudC10eXBlJ10gPSAndGV4dC9odG1sJztcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLnNlbmQocmVwbHkpO1xuICAgICAgfSk7XG4gICAgICBodHRwU2VydmVyW2BfdXBkYXRlZF8ke3JvdXRlfWBdID0gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyBvbmUgb3IgbW9yZSBwbHVnaW5zIHRvIHVwZGF0ZSB0aGUgc2VydmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGh3U2VydmVyID0gYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogXy5ub29wLFxuICAgICAgcG9ydCxcbiAgICAgIHNlcnZlclVwZGF0ZXJzOiBbXG4gICAgICAgIHVwZGF0ZXJXaXRoR2V0Um91dGUoJ3BsdWdpbjEnLCAncmVzIGZyb20gcGx1Z2luMSByb3V0ZScpLFxuICAgICAgICB1cGRhdGVyV2l0aEdldFJvdXRlKCdwbHVnaW4yJywgJ3JlcyBmcm9tIHBsdWdpbjIgcm91dGUnKSxcbiAgICAgIF1cbiAgICB9KTtcbiAgICBsZXQge2RhdGF9ID0gYXdhaXQgYXhpb3MuZ2V0KGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vcGx1Z2luMWApO1xuICAgIGRhdGEuc2hvdWxkLmVxbCgncmVzIGZyb20gcGx1Z2luMSByb3V0ZScpO1xuICAgICh7ZGF0YX0gPSBhd2FpdCBheGlvcy5nZXQoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9wbHVnaW4yYCkpO1xuICAgIGRhdGEuc2hvdWxkLmVxbCgncmVzIGZyb20gcGx1Z2luMiByb3V0ZScpO1xuICAgIGh3U2VydmVyLl91cGRhdGVkX3BsdWdpbjEuc2hvdWxkLmJlLnRydWU7XG4gICAgaHdTZXJ2ZXIuX3VwZGF0ZWRfcGx1Z2luMi5zaG91bGQuYmUudHJ1ZTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgcGFzcyBvbiBlcnJvcnMgZnJvbSB0aGUgcGx1Z2luIHVwZGF0ZVNlcnZlciBtZXRob2QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogXy5ub29wLFxuICAgICAgcG9ydCxcbiAgICAgIHNlcnZlclVwZGF0ZXJzOiBbKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ3VnaCcpO31dXG4gICAgfSkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKC91Z2gvKTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoidGVzdC9leHByZXNzL3NlcnZlci1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==