oxygen-cli 1.33.3 → 1.33.5

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v1.33.5 (2024-05-29)
4
+
5
+ #### :beetle: Bug Fix
6
+ * Fix `web.waitForAngular` when running inside an iframe.
7
+
8
+ ## v1.33.4 (2024-05-10)
9
+
10
+ #### :beetle: Bug Fix
11
+ * Fix incorrect processing of parameters.
12
+ * Better handle situations when taking screenshots fails.
13
+
14
+ #### :house: Internal
15
+ * Bump webdriverio dependencies.
16
+
3
17
  ## v1.33.2 (2024-05-24)
4
18
 
5
19
  #### :house: Internal
@@ -53,8 +53,15 @@ async function waitForAngular(rootSelector, softWait = false, timeout = 60 * 100
53
53
  return testable;
54
54
  } else {
55
55
  const stable = await this.driver.execute(() => {
56
- // following way of obtaining testability is the same as using: var testability = window.getAllAngularTestabilities()[0];
57
56
  // eslint-disable-next-line no-undef
57
+ if (!window.getAllAngularRootElements && window !== window.parent) {
58
+ // if we are running inside iframe where getAllAngularRootElements is not unavailable
59
+ // we return true
60
+ return true;
61
+ } // following way of obtaining testability is the same as using: var testability = window.getAllAngularTestabilities()[0];
62
+ // eslint-disable-next-line no-undef
63
+
64
+
58
65
  const rootElement = window.getAllAngularRootElements()[0]; // eslint-disable-next-line no-undef
59
66
 
60
67
  const testability = window.getAngularTestability(rootElement); // use isStable instead of whenStable due to this issue:
@@ -62,19 +69,11 @@ async function waitForAngular(rootSelector, softWait = false, timeout = 60 * 100
62
69
 
63
70
  return testability.isStable();
64
71
  });
65
- const version = await this.driver.execute(() => {
66
- // eslint-disable-next-line no-undef
67
- const el = document.querySelector('[ng-version]');
68
-
69
- if (!el) {
70
- return null;
71
- }
72
-
73
- return el.getAttribute('ng-version');
74
- });
75
- return version && stable;
72
+ return stable;
76
73
  }
77
- } catch (err) {// if we got here then it's executeAsync timeout.
74
+ } catch (err) {
75
+ // if we got here then it's executeAsync timeout
76
+ console.log('executeAsync err', err);
78
77
  }
79
78
  }, {
80
79
  timeout: timeout,
@@ -86,4 +85,4 @@ async function waitForAngular(rootSelector, softWait = false, timeout = 60 * 100
86
85
  }
87
86
  }
88
87
  }
89
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIvY29tbWFuZHMvd2FpdEZvckFuZ3VsYXIuanMiXSwibmFtZXMiOlsid2FpdEZvckFuZ3VsYXIiLCJyb290U2VsZWN0b3IiLCJzb2Z0V2FpdCIsInRpbWVvdXQiLCJoZWxwZXJzIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiZHJpdmVyIiwid2FpdFVudGlsIiwiYW5ndWxhcjEiLCJleGVjdXRlIiwid2luZG93IiwiYW5ndWxhciIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwidGVzdGFibGUiLCJyb290RWxlbWVudCIsImVsZW1lbnQiLCJ0ZXN0YWJpbGl0eSIsImdldFRlc3RhYmlsaXR5IiwiaXNTdGFibGUiLCJzdGFibGUiLCJnZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzIiwiZ2V0QW5ndWxhclRlc3RhYmlsaXR5IiwidmVyc2lvbiIsImVsIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwiZXJyIiwidGltZW91dE1zZyIsImUiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiVElNRU9VVCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRU8sZUFBZUEsY0FBZixDQUE4QkMsWUFBOUIsRUFBNENDLFFBQVEsR0FBRyxLQUF2RCxFQUE4REMsT0FBTyxHQUFHLEtBQUcsSUFBM0UsRUFBaUY7QUFDcEYsT0FBS0MsT0FBTCxDQUFhQyxxQkFBYixDQUFtQ0YsT0FBbkMsRUFBNEMsU0FBNUM7O0FBRUEsTUFBSTtBQUNBLFVBQU0sS0FBS0csTUFBTCxDQUFZQyxTQUFaLENBQXNCLFlBQVk7QUFDcEMsVUFBSTtBQUVBO0FBQ0E7QUFDQSxjQUFNQyxRQUFRLEdBQUcsTUFBTSxLQUFLRixNQUFMLENBQVlHLE9BQVosQ0FBb0IsTUFBTTtBQUM3QztBQUNBLGlCQUFPLENBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxPQUFoQjtBQUNILFNBSHNCLENBQXZCOztBQUtBLFlBQUlILFFBQUosRUFBYztBQUNWLGVBQUtKLE9BQUwsQ0FBYVEsb0JBQWIsQ0FBa0NYLFlBQWxDLEVBQWdELGNBQWhEO0FBQ0EsZ0JBQU1ZLFFBQVEsR0FBRyxNQUFNLEtBQUtQLE1BQUwsQ0FBWUcsT0FBWixDQUFxQlIsWUFBRCxJQUFrQjtBQUN6RDtBQUNBLGtCQUFNYSxXQUFXLEdBQUdKLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlSSxPQUFmLENBQXVCZCxZQUF2QixDQUFwQixDQUZ5RCxDQUd6RDs7QUFDQSxrQkFBTWUsV0FBVyxHQUFHTixNQUFNLENBQUNDLE9BQVAsQ0FBZU0sY0FBZixDQUE4QkgsV0FBOUIsQ0FBcEI7QUFDQSxtQkFBT0UsV0FBVyxDQUFDRSxRQUFaLEVBQVA7QUFDSCxXQU5zQixFQU1wQmpCLFlBTm9CLENBQXZCO0FBUUEsaUJBQU9ZLFFBQVA7QUFDSCxTQVhELE1BV087QUFDSCxnQkFBTU0sTUFBTSxHQUFHLE1BQU0sS0FBS2IsTUFBTCxDQUFZRyxPQUFaLENBQW9CLE1BQU07QUFDM0M7QUFDQTtBQUNBLGtCQUFNSyxXQUFXLEdBQUdKLE1BQU0sQ0FBQ1UseUJBQVAsR0FBbUMsQ0FBbkMsQ0FBcEIsQ0FIMkMsQ0FJMUM7O0FBQ0Qsa0JBQU1KLFdBQVcsR0FBR04sTUFBTSxDQUFDVyxxQkFBUCxDQUE2QlAsV0FBN0IsQ0FBcEIsQ0FMMkMsQ0FNM0M7QUFDQTs7QUFDQSxtQkFBT0UsV0FBVyxDQUFDRSxRQUFaLEVBQVA7QUFDSCxXQVRvQixDQUFyQjtBQVdBLGdCQUFNSSxPQUFPLEdBQUcsTUFBTSxLQUFLaEIsTUFBTCxDQUFZRyxPQUFaLENBQW9CLE1BQU07QUFDNUM7QUFDQSxrQkFBTWMsRUFBRSxHQUFHQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsY0FBdkIsQ0FBWDs7QUFDQSxnQkFBSSxDQUFDRixFQUFMLEVBQVM7QUFDTCxxQkFBTyxJQUFQO0FBQ0g7O0FBQ0QsbUJBQU9BLEVBQUUsQ0FBQ0csWUFBSCxDQUFnQixZQUFoQixDQUFQO0FBQ0gsV0FQcUIsQ0FBdEI7QUFTQSxpQkFBUUosT0FBTyxJQUFJSCxNQUFuQjtBQUNIO0FBQ0osT0EzQ0QsQ0EyQ0UsT0FBT1EsR0FBUCxFQUFZLENBQ1Y7QUFDSDtBQUNKLEtBL0NLLEVBK0NKO0FBQ0V4QixNQUFBQSxPQUFPLEVBQUVBLE9BRFg7QUFFRXlCLE1BQUFBLFVBQVUsRUFBRyxxQ0FBb0N6QixPQUFRO0FBRjNELEtBL0NJLENBQU47QUFtREgsR0FwREQsQ0FvREUsT0FBTzBCLENBQVAsRUFBVTtBQUNSLFFBQUksQ0FBQzNCLFFBQUwsRUFBZTtBQUNYLFlBQU0sSUFBSSxLQUFLNEIsT0FBVCxDQUFpQixLQUFLQyxTQUFMLENBQWVDLFNBQWYsQ0FBeUJDLE9BQTFDLEVBQW1ESixDQUFDLENBQUNLLE9BQXJELENBQU47QUFDSDtBQUNKO0FBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAc3VtbWFyeSBXYWl0IGZvciBBbmd1bGFyIGJhc2VkIGFwcCB3aWxsIGJlIGxvYWRlZFxyXG4gKiBAZnVuY3Rpb24gd2FpdEZvckFuZ3VsYXJcclxuICogQHBhcmFtIHtTdHJpbmc9fSByb290U2VsZWN0b3IgLSBTZWxlY3RvciBmb3Igcm9vdCBlbGVtZW50LCBuZWVkZWQgb25seSBmb3IgQW5ndWxhckpTICh2MSkuIFxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIEFuZ3VsYXIgKHYyKSBmaXJzdCBhdmFpbGFibGUgcm9vdCBub2RlIHdpbGwgYmUgc2VsZWN0ZWQgYXV0b21hdGljYWxseS5cclxuICogQHBhcmFtIHtCb29sZWFuPX0gc29mdFdhaXQgLSBJZiB0cnVlIHRoZW4gZG8gbm90IHByb2R1Y2UgZXJyb3IgaWYgc3RhYmlsaXR5IGNhbm5vdCBiZSBhdHRhaW5lZC4gRGVmYXVsdCBpcyBmYWxzZS5cclxuICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dCBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAqIHdlYi5pbml0KCk7XHJcbiAqIHdlYi5vcGVuKFwid3d3LnlvdXJ3ZWJzaXRlLmNvbVwiKTtcclxuICogd2ViLndhaXRGb3JBbmd1bGFyKCk7XHJcbiAqL1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBbmd1bGFyKHJvb3RTZWxlY3Rvciwgc29mdFdhaXQgPSBmYWxzZSwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaW4gQW5ndWxhckpTICh2MSkgd2luZG93LmFuZ3VsYXIgd2lsbCBiZSBkZWZpbmVkIFxyXG4gICAgICAgICAgICAgICAgLy8gaW4gQW5ndWxhciAodjIpIHdpbmRvdy5hbmd1bGFyIHdpbGwgYmUgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbmd1bGFyMSA9IGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhIXdpbmRvdy5hbmd1bGFyO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nKHJvb3RTZWxlY3RvciwgJ3Jvb3RTZWxlY3RvcicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RhYmxlID0gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZSgocm9vdFNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb290RWxlbWVudCA9IHdpbmRvdy5hbmd1bGFyLmVsZW1lbnQocm9vdFNlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RhYmlsaXR5ID0gd2luZG93LmFuZ3VsYXIuZ2V0VGVzdGFiaWxpdHkocm9vdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdGFiaWxpdHkuaXNTdGFibGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCByb290U2VsZWN0b3IpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdGFibGU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWJsZSA9IGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb2xsb3dpbmcgd2F5IG9mIG9idGFpbmluZyB0ZXN0YWJpbGl0eSBpcyB0aGUgc2FtZSBhcyB1c2luZzogdmFyIHRlc3RhYmlsaXR5ID0gd2luZG93LmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKClbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb290RWxlbWVudCA9IHdpbmRvdy5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzKClbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVzdGFiaWxpdHkgPSB3aW5kb3cuZ2V0QW5ndWxhclRlc3RhYmlsaXR5KHJvb3RFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGlzU3RhYmxlIGluc3RlYWQgb2Ygd2hlblN0YWJsZSBkdWUgdG8gdGhpcyBpc3N1ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTQ1MDk2NDcvdGVzdGFiaWxpdHktd2hlbnN0YWJsZS1yZXR1cm5zLXRlc3RhYmlsaXR5LWlzc3RhYmxlLXJldHVybnMtZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RhYmlsaXR5LmlzU3RhYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25nLXZlcnNpb25dJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoJ25nLXZlcnNpb24nKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh2ZXJzaW9uICYmIHN0YWJsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgZ290IGhlcmUgdGhlbiBpdCdzIGV4ZWN1dGVBc3luYyB0aW1lb3V0LlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSx7XHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQsXHJcbiAgICAgICAgICAgIHRpbWVvdXRNc2c6IGBVbmFibGUgdG8gYXR0YWluIHN0YWJpbGl0eSB3aXRoaW4gJHt0aW1lb3V0fW1zIChvciB0aGlzIGlzIG5vdCBhbiBBbmd1bGFyIGFwcGxpY2F0aW9uKWBcclxuICAgICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAoIXNvZnRXYWl0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyB0aGlzLk94RXJyb3IodGhpcy5lcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
88
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIvY29tbWFuZHMvd2FpdEZvckFuZ3VsYXIuanMiXSwibmFtZXMiOlsid2FpdEZvckFuZ3VsYXIiLCJyb290U2VsZWN0b3IiLCJzb2Z0V2FpdCIsInRpbWVvdXQiLCJoZWxwZXJzIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiZHJpdmVyIiwid2FpdFVudGlsIiwiYW5ndWxhcjEiLCJleGVjdXRlIiwid2luZG93IiwiYW5ndWxhciIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwidGVzdGFibGUiLCJyb290RWxlbWVudCIsImVsZW1lbnQiLCJ0ZXN0YWJpbGl0eSIsImdldFRlc3RhYmlsaXR5IiwiaXNTdGFibGUiLCJzdGFibGUiLCJnZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzIiwicGFyZW50IiwiZ2V0QW5ndWxhclRlc3RhYmlsaXR5IiwiZXJyIiwiY29uc29sZSIsImxvZyIsInRpbWVvdXRNc2ciLCJlIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIlRJTUVPVVQiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVPLGVBQWVBLGNBQWYsQ0FBOEJDLFlBQTlCLEVBQTRDQyxRQUFRLEdBQUcsS0FBdkQsRUFBOERDLE9BQU8sR0FBRyxLQUFHLElBQTNFLEVBQWlGO0FBQ3BGLE9BQUtDLE9BQUwsQ0FBYUMscUJBQWIsQ0FBbUNGLE9BQW5DLEVBQTRDLFNBQTVDOztBQUVBLE1BQUk7QUFDQSxVQUFNLEtBQUtHLE1BQUwsQ0FBWUMsU0FBWixDQUFzQixZQUFZO0FBQ3BDLFVBQUk7QUFFQTtBQUNBO0FBQ0EsY0FBTUMsUUFBUSxHQUFHLE1BQU0sS0FBS0YsTUFBTCxDQUFZRyxPQUFaLENBQW9CLE1BQU07QUFDN0M7QUFDQSxpQkFBTyxDQUFDLENBQUNDLE1BQU0sQ0FBQ0MsT0FBaEI7QUFDSCxTQUhzQixDQUF2Qjs7QUFLQSxZQUFJSCxRQUFKLEVBQWM7QUFDVixlQUFLSixPQUFMLENBQWFRLG9CQUFiLENBQWtDWCxZQUFsQyxFQUFnRCxjQUFoRDtBQUNBLGdCQUFNWSxRQUFRLEdBQUcsTUFBTSxLQUFLUCxNQUFMLENBQVlHLE9BQVosQ0FBcUJSLFlBQUQsSUFBa0I7QUFDekQ7QUFDQSxrQkFBTWEsV0FBVyxHQUFHSixNQUFNLENBQUNDLE9BQVAsQ0FBZUksT0FBZixDQUF1QmQsWUFBdkIsQ0FBcEIsQ0FGeUQsQ0FHekQ7O0FBQ0Esa0JBQU1lLFdBQVcsR0FBR04sTUFBTSxDQUFDQyxPQUFQLENBQWVNLGNBQWYsQ0FBOEJILFdBQTlCLENBQXBCO0FBQ0EsbUJBQU9FLFdBQVcsQ0FBQ0UsUUFBWixFQUFQO0FBQ0gsV0FOc0IsRUFNcEJqQixZQU5vQixDQUF2QjtBQVFBLGlCQUFPWSxRQUFQO0FBQ0gsU0FYRCxNQVdPO0FBQ0gsZ0JBQU1NLE1BQU0sR0FBRyxNQUFNLEtBQUtiLE1BQUwsQ0FBWUcsT0FBWixDQUFvQixNQUFNO0FBQzNDO0FBQ0EsZ0JBQUksQ0FBQ0MsTUFBTSxDQUFDVSx5QkFBUixJQUFxQ1YsTUFBTSxLQUFLQSxNQUFNLENBQUNXLE1BQTNELEVBQW1FO0FBQ2pFO0FBQ0E7QUFDRSxxQkFBTyxJQUFQO0FBQ0gsYUFOMEMsQ0FRM0M7QUFDQTs7O0FBQ0Esa0JBQU1QLFdBQVcsR0FBR0osTUFBTSxDQUFDVSx5QkFBUCxHQUFtQyxDQUFuQyxDQUFwQixDQVYyQyxDQVcxQzs7QUFDRCxrQkFBTUosV0FBVyxHQUFHTixNQUFNLENBQUNZLHFCQUFQLENBQTZCUixXQUE3QixDQUFwQixDQVoyQyxDQWEzQztBQUNBOztBQUNBLG1CQUFPRSxXQUFXLENBQUNFLFFBQVosRUFBUDtBQUNILFdBaEJvQixDQUFyQjtBQWtCQSxpQkFBT0MsTUFBUDtBQUNIO0FBQ0osT0F6Q0QsQ0F5Q0UsT0FBT0ksR0FBUCxFQUFZO0FBQ1Y7QUFDQUMsUUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksa0JBQVosRUFBZ0NGLEdBQWhDO0FBQ0g7QUFDSixLQTlDSyxFQThDSjtBQUNFcEIsTUFBQUEsT0FBTyxFQUFFQSxPQURYO0FBRUV1QixNQUFBQSxVQUFVLEVBQUcscUNBQW9DdkIsT0FBUTtBQUYzRCxLQTlDSSxDQUFOO0FBa0RILEdBbkRELENBbURFLE9BQU93QixDQUFQLEVBQVU7QUFDUixRQUFJLENBQUN6QixRQUFMLEVBQWU7QUFDWCxZQUFNLElBQUksS0FBSzBCLE9BQVQsQ0FBaUIsS0FBS0MsU0FBTCxDQUFlQyxTQUFmLENBQXlCQyxPQUExQyxFQUFtREosQ0FBQyxDQUFDSyxPQUFyRCxDQUFOO0FBQ0g7QUFDSjtBQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQHN1bW1hcnkgV2FpdCBmb3IgQW5ndWxhciBiYXNlZCBhcHAgd2lsbCBiZSBsb2FkZWRcclxuICogQGZ1bmN0aW9uIHdhaXRGb3JBbmd1bGFyXHJcbiAqIEBwYXJhbSB7U3RyaW5nPX0gcm9vdFNlbGVjdG9yIC0gU2VsZWN0b3IgZm9yIHJvb3QgZWxlbWVudCwgbmVlZGVkIG9ubHkgZm9yIEFuZ3VsYXJKUyAodjEpLiBcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBBbmd1bGFyICh2MikgZmlyc3QgYXZhaWxhYmxlIHJvb3Qgbm9kZSB3aWxsIGJlIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbj19IHNvZnRXYWl0IC0gSWYgdHJ1ZSB0aGVuIGRvIG5vdCBwcm9kdWNlIGVycm9yIGlmIHN0YWJpbGl0eSBjYW5ub3QgYmUgYXR0YWluZWQuIERlZmF1bHQgaXMgZmFsc2UuXHJcbiAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gKiB3ZWIuaW5pdCgpO1xyXG4gKiB3ZWIub3BlbihcInd3dy55b3Vyd2Vic2l0ZS5jb21cIik7XHJcbiAqIHdlYi53YWl0Rm9yQW5ndWxhcigpO1xyXG4gKi9cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQW5ndWxhcihyb290U2VsZWN0b3IsIHNvZnRXYWl0ID0gZmFsc2UsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGluIEFuZ3VsYXJKUyAodjEpIHdpbmRvdy5hbmd1bGFyIHdpbGwgYmUgZGVmaW5lZCBcclxuICAgICAgICAgICAgICAgIC8vIGluIEFuZ3VsYXIgKHYyKSB3aW5kb3cuYW5ndWxhciB3aWxsIGJlIHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgY29uc3QgYW5ndWxhcjEgPSBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gISF3aW5kb3cuYW5ndWxhcjtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFN0cmluZyhyb290U2VsZWN0b3IsICdyb290U2VsZWN0b3InKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXN0YWJsZSA9IGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoKHJvb3RTZWxlY3RvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdEVsZW1lbnQgPSB3aW5kb3cuYW5ndWxhci5lbGVtZW50KHJvb3RTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXN0YWJpbGl0eSA9IHdpbmRvdy5hbmd1bGFyLmdldFRlc3RhYmlsaXR5KHJvb3RFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RhYmlsaXR5LmlzU3RhYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgcm9vdFNlbGVjdG9yKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RhYmxlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFibGUgPSBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHMgJiYgd2luZG93ICE9PSB3aW5kb3cucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSB3aGVyZSBnZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzIGlzIG5vdCB1bmF2YWlsYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9sbG93aW5nIHdheSBvZiBvYnRhaW5pbmcgdGVzdGFiaWxpdHkgaXMgdGhlIHNhbWUgYXMgdXNpbmc6IHZhciB0ZXN0YWJpbGl0eSA9IHdpbmRvdy5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcygpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdEVsZW1lbnQgPSB3aW5kb3cuZ2V0QWxsQW5ndWxhclJvb3RFbGVtZW50cygpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RhYmlsaXR5ID0gd2luZG93LmdldEFuZ3VsYXJUZXN0YWJpbGl0eShyb290RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBpc1N0YWJsZSBpbnN0ZWFkIG9mIHdoZW5TdGFibGUgZHVlIHRvIHRoaXMgaXNzdWU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU0NTA5NjQ3L3Rlc3RhYmlsaXR5LXdoZW5zdGFibGUtcmV0dXJucy10ZXN0YWJpbGl0eS1pc3N0YWJsZS1yZXR1cm5zLWZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0YWJpbGl0eS5pc1N0YWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhYmxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGdvdCBoZXJlIHRoZW4gaXQncyBleGVjdXRlQXN5bmMgdGltZW91dFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2V4ZWN1dGVBc3luYyBlcnInLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSx7XHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQsXHJcbiAgICAgICAgICAgIHRpbWVvdXRNc2c6IGBVbmFibGUgdG8gYXR0YWluIHN0YWJpbGl0eSB3aXRoaW4gJHt0aW1lb3V0fW1zIChvciB0aGlzIGlzIG5vdCBhbiBBbmd1bGFyIGFwcGxpY2F0aW9uKWBcclxuICAgICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAoIXNvZnRXYWl0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyB0aGlzLk94RXJyb3IodGhpcy5lcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
@@ -570,71 +570,75 @@ class WebModule extends _WebDriverModule.default {
570
570
  let retval;
571
571
  this.driver.call(() => {
572
572
  return new Promise((resolve, reject) => {
573
- const waitUntilRetVal = this.driver.waitUntil(async () => {
574
- try {
575
- let images = []; // collect all (screenshot and title) images
573
+ try {
574
+ const waitUntilRetVal = this.driver.waitUntil(async () => {
575
+ try {
576
+ let images = []; // collect all (screenshot and title) images
576
577
 
577
- const handles = await this.driver.getWindowHandles();
578
+ const handles = await this.driver.getWindowHandles();
578
579
 
579
- if (handles && Array.isArray(handles) && handles.length > 0) {
580
- for (const handle of handles) {
581
- await this.driver.switchToWindow(handle);
582
- const image = await this.driver.takeScreenshot();
583
- const title = await this.driver.getTitle();
580
+ if (Array.isArray(handles) && handles.length > 0) {
581
+ for (const handle of handles) {
582
+ await this.driver.switchToWindow(handle);
583
+ const image = await this.driver.takeScreenshot();
584
+ const title = await this.driver.getTitle();
584
585
 
585
- if (title) {
586
- const textToImage = require('../lib/text-to-image');
586
+ if (title) {
587
+ const textToImage = require('../lib/text-to-image');
587
588
 
588
- let titleImage = await textToImage.generate(title);
589
+ let titleImage = await textToImage.generate(title);
589
590
 
590
- if (titleImage && typeof titleImage === 'string') {
591
- titleImage = titleImage.replace('data:image/png;base64,', '');
592
- images.push(titleImage);
591
+ if (titleImage && typeof titleImage === 'string') {
592
+ titleImage = titleImage.replace('data:image/png;base64,', '');
593
+ images.push(titleImage);
594
+ }
593
595
  }
596
+
597
+ images.push(image);
594
598
  }
599
+ } // merge all images into one
595
600
 
596
- images.push(image);
597
- }
598
- } // merge all images into one
599
601
 
602
+ const mergedImage = await (0, _imgMerge.default)(images, {
603
+ direction: true
604
+ });
600
605
 
601
- const mergedImage = await (0, _imgMerge.default)(images, {
602
- direction: true
603
- });
606
+ if (mergedImage && typeof mergedImage === 'string') {
607
+ retval = mergedImage.replace('data:image/jpeg;base64,', '');
608
+ }
604
609
 
605
- if (mergedImage && typeof mergedImage === 'string') {
606
- retval = mergedImage.replace('data:image/jpeg;base64,', '');
610
+ return true;
611
+ } catch (e) {
612
+ error = e;
613
+ return false;
607
614
  }
615
+ }, {
616
+ timeout: 30 * 1000
617
+ });
608
618
 
609
- return true;
610
- } catch (e) {
611
- error = e;
612
- return false;
613
- }
614
- }, {
615
- timeout: 30 * 1000
616
- });
617
-
618
- if (waitUntilRetVal && waitUntilRetVal.then) {
619
- waitUntilRetVal.then(() => {
619
+ if (waitUntilRetVal && waitUntilRetVal.then) {
620
+ waitUntilRetVal.then(() => {
621
+ resolve();
622
+ }).catch(err => {
623
+ reject(err);
624
+ });
625
+ } else {
620
626
  resolve();
621
- }).catch(err => {
622
- reject(err);
623
- });
624
- } else {
625
- resolve();
627
+ }
628
+ } catch (ew) {
629
+ this.logger.error('Cannot get screenshot (1)', error);
626
630
  }
627
631
  });
628
632
  });
629
633
 
630
634
  if (error) {
631
- this.logger.error('Cannot get screenshot', error);
635
+ this.logger.error('Cannot get screenshot (2)', error);
632
636
  }
633
637
 
634
638
  return retval;
635
639
  }
636
640
  } catch (e) {
637
- this.logger.error('Cannot get screenshot', e);
641
+ this.logger.error('Cannot get screenshot (3)', e);
638
642
 
639
643
  if (error) {
640
644
  this.logger.error('Cannot get screenshot inner error', error);
@@ -972,4 +976,4 @@ class WebModule extends _WebDriverModule.default {
972
976
  }
973
977
 
974
978
  exports.default = WebModule;
975
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiYXBwaXVtVXJsIiwic3RhcnRzV2l0aCIsImN0eCIsImRlZmF1bHRCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJlcnJvckNvZGUiLCJJTlZBTElEX0NBUEFCSUxJVElFUyIsInRvTG93ZXJDYXNlIiwicmVjb3JkSEFSIiwiYnJvd3NlciIsInBlcmZvcm1hbmNlIiwidXJsIiwiVVJMIiwicGFyc2UiLCJwcm90b2NvbCIsInJlcGxhY2UiLCJob3N0IiwiaG9zdG5hbWUiLCJwb3J0IiwicGFyc2VJbnQiLCJwYXRoIiwicGF0aG5hbWUiLCJhdXRoIiwic3BsaXQiLCJ3ZGlvT3B0cyIsInVzZXIiLCJrZXkiLCJzZWxlbml1bVVybEJhc2UiLCJpc1J1bm5pbmdPblNlbGVub2lkIiwiX2lzU2VsZW5vaWRIdWIiLCJlbmFibGVWaWRlbyIsInVuZGVmaW5lZCIsInZpZGVvRnJhbWVSYXRlIiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsImluaXRFcnJvciIsIl90aGlzIiwicHJvdmlkZXIiLCJtb2RVdGlscyIsImRldGVybWluZVByb3ZpZGVyIiwiUEVSRkVDVE8iLCJvcGVuRGV2aWNlVGltZW91dCIsImRyaXZlciIsIndkaW8iLCJyZW1vdGUiLCJzZXNzaW9uSWQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwicGVyZmVjdG9FeGVjdXRpb25Db250ZXh0IiwicGVyZmVjdG9SZXBvcnRpbmciLCJQZXJmZWN0byIsIlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsIndlYmRyaXZlciIsImV4ZWN1dGVTY3JpcHQiLCJjb21tYW5kIiwicGFyYW1zIiwiZXhlY3V0ZSIsInJlcG9ydGluZ0NsaWVudCIsIlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50IiwidGVzdFN0YXJ0IiwiZSIsImdldFNlbGVuaXVtSW5pdEVycm9yIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwiZ2V0QnJvd3NlckxvZ3MiLCJlcnJvciIsIkxBTUJEQVRFU1QiLCJCUk9XU0VSU1RBQ0siLCJpbmNsdWRlcyIsIm1heGltaXplV2luZG93Iiwic2V0VGltZW91dCIsImVyciIsIlVOS05PV05fRVJST1IiLCJtZXNzYWdlIiwidXRpbCIsImluc3BlY3QiLCJkaXNwb3NlIiwic3RhdHVzIiwiX3doZW5XZWJNb2R1bGVEaXNwb3NlIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwiU0FVQ0VMQUJTIiwidXNlcm5hbWUiLCJhY2Nlc3NLZXkiLCJwYXNzZWQiLCJpZCIsImJvZHkiLCJteUFjY291bnQiLCJTYXVjZUxhYnMiLCJ1cGRhdGVKb2IiLCJzdG9wSm9iIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3QiLCJkZWxldGVTZXNzaW9uIiwiVEVTVElOR0JPVCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90IiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImNsb3NlQnJvd3NlcldpbmRvd3MiLCJkaXNwb3NlQ29udGludWUiLCJ3YXJuIiwicHJvbWlzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJzZWxlbml1bVBpZCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsInN0ZGlvIiwicGdyZXBSZXN1bHQiLCJ0b1N0cmluZyIsInJlc29sdmUiLCJfaXRlcmF0aW9uU3RhcnQiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJsb2dzIiwibG9nIiwicHVzaCIsIl9hZGp1c3RCcm93c2VyTG9nIiwiX2dldEhBUiIsImhhciIsImhhc0ZhaWxlZCIsIl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudCIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiY2FsbCIsIlByb21pc2UiLCJyZWplY3QiLCJ3YWl0VW50aWxSZXRWYWwiLCJ3YWl0VW50aWwiLCJpbWFnZXMiLCJoYW5kbGVzIiwiZ2V0V2luZG93SGFuZGxlcyIsImhhbmRsZSIsInN3aXRjaFRvV2luZG93IiwiaW1hZ2UiLCJ0aXRsZSIsImdldFRpdGxlIiwidGV4dFRvSW1hZ2UiLCJyZXF1aXJlIiwidGl0bGVJbWFnZSIsImdlbmVyYXRlIiwibWVyZ2VkSW1hZ2UiLCJkaXJlY3Rpb24iLCJ0aW1lb3V0IiwidGhlbiIsImNhdGNoIiwidGltZSIsInRpbWVzdGFtcCIsIm1zZyIsImxldmVsIiwic3JjIiwiX2dldFN0YXRzIiwiY29tbWFuZE5hbWUiLCJmZXRjaFN0YXRzIiwibmF2aWdhdGlvblN0YXJ0IiwiZG9tQ29udGVudExvYWRlZCIsImxvYWQiLCJzYW1lUGFnZSIsImxhc3RFcnJvciIsInRpbWluZ3MiLCJ3aW5kb3ciLCJ0aW1pbmciLCJkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCIsImxvYWRFdmVudFN0YXJ0IiwiZXhlY3V0ZUVycm9yIiwiY29uc29sZSIsIkRvbUNvbnRlbnRMb2FkZWRFdmVudCIsIkxvYWRFdmVudCIsInRyYW5zYWN0aW9uIiwiY291bnRlciIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJnZXRXZGlvTG9jYXRvciIsIm1hdGNoUGF0dGVybiIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsInR5cGVzIiwiZ2V0TG9nVHlwZXMiLCJnZXRMb2dzIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnRzIiwibXNnT2JqIiwiY2hlY2tXYWl0Rm9yQW5ndWxhciIsImF1dG9XYWl0Rm9yQW5ndWxhciIsIndhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyUm9vdFNlbGVjdG9yIiwiYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQiLCJhdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0IiwibGFtYmRhQ3JlZGVudGlhbHMiLCJsYW1iZGFBdXRvbWF0aW9uQ2xpZW50IiwibGFtYmRhUmVzdENsaWVudCIsIkF1dG9tYXRpb25DbGllbnQiLCJyZXF1ZXN0Qm9keSIsInN0YXR1c19pbmQiLCJ1cGRhdGVTZXNzaW9uQnlJZCIsInRiIiwiVGVzdGluZ0JvdCIsImFwaV9rZXkiLCJhcGlfc2VjcmV0IiwidGVzdERhdGEiLCJ1cGRhdGVUZXN0IiwidGVzdERldGFpbHMiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwicmVzIiwiaW5kZXhPZiIsInJlY29yZFZpZGVvIiwidmlkZW9GaWxlVXJsIiwiZmlsZU5hbWUiLCJhdHRhY2htZW50cyIsIm5ld1ZpZGVvQXR0YWNobWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFHQSxNQUFNQSxXQUFXLEdBQUcsS0FBcEI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyw4QkFBN0I7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxRQUE3QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLFNBQS9CO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBQyxNQUFELEVBQVMsYUFBVCxDQUEvQjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxDQUFDLE1BQUQsRUFBUyxPQUFULENBQXhCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsS0FBSyxJQUFsQyxDLENBQW1EOztBQUVwQyxNQUFNQyxTQUFOLFNBQXdCQyx3QkFBeEIsQ0FBd0M7QUFDbkRDLEVBQUFBLFdBQVcsQ0FBQ0MsT0FBRCxFQUFVQyxPQUFWLEVBQW1CQyxFQUFuQixFQUF1QkMsTUFBdkIsRUFBK0JDLE9BQS9CLEVBQXdDQyxRQUF4QyxFQUFrRDtBQUN6RCxVQUFNTCxPQUFOLEVBQWVDLE9BQWYsRUFBd0JDLEVBQXhCLEVBQTRCQyxNQUE1QixFQUFvQ0MsT0FBcEMsRUFBNkNDLFFBQTdDO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixFQUFwQixDQUZ5RCxDQUVaOztBQUM3QyxTQUFLQyx1QkFBTCxHQUErQixJQUEvQjtBQUNBLFNBQUtDLE9BQUwsR0FBZSxFQUFmOztBQUNBLFNBQUtDLG9CQUFMLEdBTHlELENBTXpEOzs7QUFDQSxTQUFLQyxPQUFMLEdBQWVBLG9CQUFmO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQkEsZUFBakIsQ0FSeUQsQ0FTekQ7O0FBQ0EsU0FBS0MsY0FBTCxHQUFzQmhCLG9CQUF0QjtBQUNIOztBQUVPLE1BQUppQixJQUFJLEdBQUc7QUFDUCxXQUFPdkIsV0FBUDtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0l3QixFQUFBQSxTQUFTLEdBQUc7QUFDUixXQUFPLE1BQU1BLFNBQU4sRUFBUDtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lDLEVBQUFBLGVBQWUsR0FBRztBQUNkLFdBQU8sS0FBS0MsSUFBTCxJQUFhLE1BQU1ELGVBQU4sRUFBcEI7QUFDSDtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ2MsUUFBSkUsSUFBSSxDQUFDRCxJQUFELEVBQU9FLFdBQVAsRUFBb0I7QUFDMUIsUUFBSSxLQUFLQyxhQUFULEVBQXdCO0FBQ3BCO0FBQ0g7O0FBRUQsUUFBSSxDQUFDRCxXQUFMLEVBQWtCO0FBQ2Q7QUFDQSxVQUFJLEtBQUtsQixPQUFMLENBQWFvQixTQUFiLElBQTBCLENBQUMsS0FBS3BCLE9BQUwsQ0FBYW9CLFNBQWIsQ0FBdUJDLFVBQXZCLENBQWtDLGtCQUFsQyxDQUEvQixFQUFzRjtBQUNsRkgsUUFBQUEsV0FBVyxHQUFHLEtBQUtsQixPQUFMLENBQWFvQixTQUEzQjtBQUNILE9BRkQsTUFHSztBQUNERixRQUFBQSxXQUFXLEdBQUcsS0FBS2xCLE9BQUwsQ0FBYWtCLFdBQWIsSUFBNEIzQixvQkFBMUM7QUFDSDtBQUNKLEtBYnlCLENBZTFCO0FBQ0E7OztBQUNBLFNBQUt5QixJQUFMLEdBQVksRUFBWjs7QUFDQSxRQUFJLEtBQUtNLEdBQUwsQ0FBU04sSUFBYixFQUFtQjtBQUNmLFdBQUtBLElBQUwsR0FBWSxFQUFFLEdBQUcsS0FBS00sR0FBTCxDQUFTTjtBQUFkLE9BQVo7QUFDSDs7QUFDRCxRQUFJQSxJQUFKLEVBQVU7QUFDTixXQUFLQSxJQUFMLEdBQVksRUFBRSxHQUFHLEtBQUtBLElBQVY7QUFBZ0IsV0FBR0E7QUFBbkIsT0FBWjtBQUNILEtBdkJ5QixDQXlCMUI7OztBQUNBLFFBQUlPLGNBQWMsR0FBRyxLQUFyQjs7QUFDQSxRQUFJLENBQUMsS0FBS1AsSUFBTCxDQUFVUSxXQUFmLEVBQTRCO0FBQ3hCLFdBQUtSLElBQUwsQ0FBVVEsV0FBVixHQUF3QixLQUFLeEIsT0FBTCxDQUFhd0IsV0FBYixJQUE0QmhDLG9CQUFwRDtBQUNBK0IsTUFBQUEsY0FBYyxHQUFHLElBQWpCO0FBQ0gsS0E5QnlCLENBK0IxQjs7O0FBQ0EsUUFBSSxDQUFDLEtBQUtQLElBQUwsQ0FBVVEsV0FBZixFQUE0QjtBQUN4QixZQUFNLElBQUlkLG9CQUFKLENBQVlDLGdCQUFVYyxTQUFWLENBQW9CQyxvQkFBaEMsRUFDRixvRUFERSxDQUFOO0FBRUgsS0FuQ3lCLENBcUMxQjs7O0FBQ0EsUUFBSSxLQUFLVixJQUFMLENBQVVRLFdBQVYsQ0FBc0JHLFdBQXRCLE9BQXdDLElBQTVDLEVBQWtEO0FBQzlDO0FBQ0E7QUFDQSxXQUFLWCxJQUFMLENBQVVRLFdBQVYsR0FBd0IsbUJBQXhCO0FBQ0gsS0FKRCxNQUlPLElBQUksS0FBS1IsSUFBTCxDQUFVLGdCQUFWLENBQUosRUFBaUMsQ0FDcEM7QUFDSCxLQUZNLE1BRUEsSUFBSSxLQUFLQSxJQUFMLENBQVUsd0JBQVYsQ0FBSixFQUF5QyxDQUM1QztBQUNILEtBRk0sTUFFQSxJQUFJLEtBQUtBLElBQUwsQ0FBVVEsV0FBVixLQUEwQixlQUE5QixFQUErQztBQUNsRDtBQUNBO0FBQ0EsV0FBS1IsSUFBTCxDQUFVUSxXQUFWLEdBQXdCLEtBQUtSLElBQUwsQ0FBVVEsV0FBVixDQUFzQkcsV0FBdEIsRUFBeEI7QUFDSCxLQWxEeUIsQ0FvRDFCOzs7QUFDQSxRQUFJLEtBQUszQixPQUFMLENBQWE0QixTQUFiLElBQTBCLEtBQUtaLElBQUwsQ0FBVVEsV0FBVixLQUEwQixRQUF4RCxFQUFrRTtBQUM5RCxXQUFLUixJQUFMLENBQVUsbUJBQVYsSUFBaUM7QUFBTTtBQUNuQ2EsUUFBQUEsT0FBTyxFQUFFLEtBRG9CO0FBRTdCQyxRQUFBQSxXQUFXLEVBQUU7QUFGZ0IsT0FBakM7QUFJQTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNTLEtBdkV5QixDQXlFMUI7OztBQUNBLFVBQU1DLEdBQUcsR0FBR0MsYUFBSUMsS0FBSixDQUFVZixXQUFXLElBQUkzQixvQkFBekIsQ0FBWjs7QUFDQSxVQUFNMkMsUUFBUSxHQUFHSCxHQUFHLENBQUNHLFFBQUosQ0FBYUMsT0FBYixDQUFxQixJQUFyQixFQUEyQixFQUEzQixDQUFqQjtBQUNBLFVBQU1DLElBQUksR0FBR0wsR0FBRyxDQUFDTSxRQUFqQjtBQUNBLFVBQU1DLElBQUksR0FBR0MsUUFBUSxDQUFDUixHQUFHLENBQUNPLElBQUosS0FBYUosUUFBUSxLQUFLLE9BQWIsR0FBdUIsR0FBdkIsR0FBNkIsRUFBMUMsQ0FBRCxDQUFyQjtBQUNBLFVBQU1NLElBQUksR0FBR1QsR0FBRyxDQUFDVSxRQUFqQixDQTlFMEIsQ0FnRjFCOztBQUNBLFFBQUlWLEdBQUcsQ0FBQ1csSUFBUixFQUFjO0FBQ1YsWUFBTUEsSUFBSSxHQUFHWCxHQUFHLENBQUNXLElBQUosQ0FBU0MsS0FBVCxDQUFlLEdBQWYsQ0FBYjtBQUNBLFdBQUszQyxPQUFMLENBQWE0QyxRQUFiLEdBQXdCO0FBQ3BCQyxRQUFBQSxJQUFJLEVBQUVILElBQUksQ0FBQyxDQUFELENBRFU7QUFFcEJJLFFBQUFBLEdBQUcsRUFBRUosSUFBSSxDQUFDLENBQUQ7QUFGVyxPQUF4QjtBQUlIOztBQUNELFNBQUtLLGVBQUwsR0FBd0IsR0FBRWIsUUFBUyxNQUFLRSxJQUFLLElBQUdFLElBQUssRUFBckQsQ0F4RjBCLENBeUYxQjs7QUFDQSxTQUFLVSxtQkFBTCxHQUEyQixNQUFNLEtBQUtDLGNBQUwsQ0FBb0IsS0FBS0YsZUFBekIsQ0FBakM7O0FBQ0EsUUFBSSxLQUFLQyxtQkFBVCxFQUE4QjtBQUMxQixVQUFJLENBQUMsS0FBS2hDLElBQUwsQ0FBVSxrQkFBVixDQUFMLEVBQW9DO0FBQ2hDLGFBQUtBLElBQUwsQ0FBVSxrQkFBVixJQUFnQyxFQUFoQztBQUNIOztBQUNELFVBQUksS0FBS0EsSUFBTCxDQUFVLGtCQUFWLEVBQThCa0MsV0FBOUIsS0FBOENDLFNBQWxELEVBQTZEO0FBQ3pELGFBQUtuQyxJQUFMLENBQVUsa0JBQVYsRUFBOEJrQyxXQUE5QixHQUE0QyxJQUE1QztBQUNBLGFBQUtsQyxJQUFMLENBQVUsa0JBQVYsRUFBOEJvQyxjQUE5QixHQUErQyxDQUEvQztBQUNIO0FBQ0osS0FuR3lCLENBb0cxQjs7O0FBQ0EsVUFBTVIsUUFBUSxHQUFHLEVBQ2IsSUFBRyxLQUFLNUMsT0FBTCxDQUFhNEMsUUFBYixJQUF5QixFQUE1QixDQURhO0FBRWJWLE1BQUFBLFFBQVEsRUFBRUEsUUFGRztBQUdiRyxNQUFBQSxRQUFRLEVBQUVELElBSEc7QUFJYkUsTUFBQUEsSUFBSSxFQUFFQSxJQUpPO0FBS2JFLE1BQUFBLElBQUksRUFBRUEsSUFMTztBQU1iYSxNQUFBQSxZQUFZLEVBQUUsS0FBS3JDLElBTk47QUFPYnNDLE1BQUFBLFFBQVEsRUFBRSxRQVBHO0FBUWJDLE1BQUFBLE1BQU0sRUFBRSxNQVJLO0FBU2JDLE1BQUFBLGNBQWMsRUFBRSxJQVRIO0FBU1M7QUFDdEJDLE1BQUFBLHNCQUFzQixFQUFFLE1BQUksSUFWZjtBQVdiQyxNQUFBQSxvQkFBb0IsRUFBRTtBQVhULEtBQWpCO0FBY0EsUUFBSUMsU0FBUyxHQUFHLElBQWhCOztBQUNBLFVBQU1DLEtBQUssR0FBRyxJQUFkOztBQUNBLFVBQU1DLFFBQVEsR0FBR0MsZUFBU0MsaUJBQVQsQ0FBMkJuQixRQUEzQixDQUFqQjs7QUFFQSxRQUFJaUIsUUFBUSxLQUFLQyxlQUFTRCxRQUFULENBQWtCRyxRQUFuQyxFQUE2QztBQUN6Q3BCLE1BQUFBLFFBQVEsQ0FBQ0osSUFBVCxHQUFnQixvQ0FBaEI7QUFDQUksTUFBQUEsUUFBUSxDQUFDTixJQUFULEdBQWdCLEVBQWhCO0FBQ0FNLE1BQUFBLFFBQVEsQ0FBQ1YsUUFBVCxHQUFvQixNQUFwQjtBQUNBVSxNQUFBQSxRQUFRLENBQUNxQixpQkFBVCxHQUE2QixFQUE3QjtBQUNIOztBQUVELFFBQUlwRCxJQUFJLEdBQUcsTUFBWDs7QUFDQSxRQUFJK0IsUUFBUSxDQUFDUyxZQUFULENBQXNCLHdCQUF0QixLQUFtRFQsUUFBUSxDQUFDUyxZQUFULENBQXNCLHdCQUF0QixFQUFnRCxNQUFoRCxDQUF2RCxFQUFnSDtBQUM1R3hDLE1BQUFBLElBQUksR0FBRytCLFFBQVEsQ0FBQ1MsWUFBVCxDQUFzQix3QkFBdEIsRUFBZ0QsTUFBaEQsQ0FBUDtBQUNBLGFBQU9ULFFBQVEsQ0FBQ1MsWUFBVCxDQUFzQix3QkFBdEIsQ0FBUDtBQUNIOztBQUNELFFBQUlULFFBQVEsQ0FBQ1MsWUFBVCxDQUFzQixnQkFBdEIsS0FBMkNULFFBQVEsQ0FBQ1MsWUFBVCxDQUFzQixnQkFBdEIsRUFBd0MsTUFBeEMsQ0FBL0MsRUFBZ0c7QUFDNUZ4QyxNQUFBQSxJQUFJLEdBQUcrQixRQUFRLENBQUNTLFlBQVQsQ0FBc0IsZ0JBQXRCLEVBQXdDLE1BQXhDLENBQVA7QUFDQSxhQUFPVCxRQUFRLENBQUNTLFlBQVQsQ0FBc0IsZ0JBQXRCLENBQVA7QUFDSDs7QUFDRCxRQUFJVCxRQUFRLENBQUNTLFlBQVQsQ0FBc0Isb0JBQXRCLEtBQStDVCxRQUFRLENBQUNTLFlBQVQsQ0FBc0Isb0JBQXRCLEVBQTRDLE1BQTVDLENBQW5ELEVBQXdHO0FBQ3BHeEMsTUFBQUEsSUFBSSxHQUFHK0IsUUFBUSxDQUFDUyxZQUFULENBQXNCLG9CQUF0QixFQUE0QyxNQUE1QyxDQUFQO0FBQ0EsYUFBT1QsUUFBUSxDQUFDUyxZQUFULENBQXNCLG9CQUF0QixDQUFQO0FBQ0g7O0FBQ0QsUUFBSVQsUUFBUSxDQUFDUyxZQUFULENBQXNCLGdCQUF0QixLQUEyQ1QsUUFBUSxDQUFDUyxZQUFULENBQXNCLGdCQUF0QixFQUF3QyxNQUF4QyxDQUEvQyxFQUFnRztBQUM1RnhDLE1BQUFBLElBQUksR0FBRytCLFFBQVEsQ0FBQ1MsWUFBVCxDQUFzQixnQkFBdEIsRUFBd0MsTUFBeEMsQ0FBUDtBQUNBLGFBQU9ULFFBQVEsQ0FBQ1MsWUFBVCxDQUFzQixnQkFBdEIsQ0FBUDtBQUNILEtBOUl5QixDQStJMUI7OztBQUNBLFFBQUk5QixjQUFjLElBQUlzQyxRQUF0QixFQUFnQztBQUM1QixXQUFLN0MsSUFBTCxDQUFVUSxXQUFWLEdBQXdCb0IsUUFBUSxDQUFDUyxZQUFULENBQXNCN0IsV0FBdEIsR0FBb0MvQixzQkFBNUQ7QUFDSDs7QUFDRCxTQUFLbUQsUUFBTCxHQUFnQkEsUUFBaEI7O0FBQ0EsUUFBSTtBQUNBLFdBQUtzQixNQUFMLEdBQWMsTUFBTUMsSUFBSSxDQUFDQyxNQUFMLENBQVl4QixRQUFaLENBQXBCO0FBQ0EsV0FBS3lCLFNBQUwsR0FBaUIsS0FBS0gsTUFBTCxDQUFZRyxTQUE3QjtBQUNBLFdBQUtILE1BQUwsQ0FBWUwsUUFBWixHQUF1QkEsUUFBdkI7O0FBRUEsVUFBSSxLQUFLN0QsT0FBTCxDQUFhc0Usc0JBQWpCLEVBQXlDO0FBQ3JDLGFBQUtKLE1BQUwsQ0FBWUksc0JBQVosR0FBcUMsS0FBS3RFLE9BQUwsQ0FBYXNFLHNCQUFsRDtBQUNIOztBQUVELFVBQUksS0FBS3RFLE9BQUwsQ0FBYXVFLGVBQWpCLEVBQWtDO0FBQzlCLGFBQUtMLE1BQUwsQ0FBWUssZUFBWixHQUE4QixLQUFLdkUsT0FBTCxDQUFhdUUsZUFBM0M7QUFDSDs7QUFFRCxVQUFJVixRQUFRLEtBQUtDLGVBQVNELFFBQVQsQ0FBa0JHLFFBQW5DLEVBQTZDO0FBQ3pDLGNBQU1RLHdCQUF3QixHQUFHLE1BQU0sSUFBSUMsMkJBQWtCQyxRQUFsQixDQUEyQkMsd0JBQS9CLENBQXdEO0FBQzNGQyxVQUFBQSxTQUFTLEVBQUU7QUFDUEMsWUFBQUEsYUFBYSxFQUFFLE9BQU9DLE9BQVAsRUFBZ0JDLE1BQWhCLEtBQTJCO0FBQ3RDLHFCQUFPLE1BQU0sS0FBS2IsTUFBTCxDQUFZYyxPQUFaLENBQW9CRixPQUFwQixFQUE2QkMsTUFBN0IsQ0FBYjtBQUNIO0FBSE07QUFEZ0YsU0FBeEQsQ0FBdkM7QUFPQSxhQUFLRSxlQUFMLEdBQXVCLElBQUlSLDJCQUFrQkMsUUFBbEIsQ0FBMkJRLHVCQUEvQixDQUF1RFYsd0JBQXZELENBQXZCO0FBQ0EsY0FBTSxLQUFLUyxlQUFMLENBQXFCRSxTQUFyQixDQUErQnRFLElBQS9CLENBQU47QUFDSDtBQUNKLEtBeEJELENBeUJBLE9BQU91RSxDQUFQLEVBQVU7QUFDTixZQUFNekUsZ0JBQVUwRSxvQkFBVixDQUErQkQsQ0FBL0IsQ0FBTjtBQUNILEtBL0t5QixDQWlMMUI7OztBQUNBLFFBQUksS0FBS3BGLE9BQUwsQ0FBYXNGLGtCQUFiLElBQW1DLEtBQUt0RSxJQUFMLENBQVVRLFdBQVYsS0FBMEIsUUFBakUsRUFBMkU7QUFDdkUsVUFBSTtBQUNBO0FBQ0EsY0FBTSxLQUFLK0QsY0FBTCxFQUFOO0FBQ0gsT0FIRCxDQUdFLE9BQU9ILENBQVAsRUFBVTtBQUNSLGFBQUtqRixNQUFMLENBQVlxRixLQUFaLENBQWtCLCtCQUFsQixFQUFtREosQ0FBbkQ7QUFDSDtBQUNKOztBQUVELFFBQUk7QUFDQSxVQUNJLENBQUN0QixlQUFTRCxRQUFULENBQWtCNEIsVUFBbkIsRUFBK0IzQixlQUFTRCxRQUFULENBQWtCNkIsWUFBakQsRUFBK0Q1QixlQUFTRCxRQUFULENBQWtCRyxRQUFqRixFQUEyRjJCLFFBQTNGLENBQW9HLEtBQUt6QixNQUFMLENBQVlMLFFBQWhILENBREosQ0FFSTtBQUZKLFFBR0UsQ0FDRTtBQUNBO0FBQ0gsU0FORCxNQU1PO0FBQ0g7QUFDQSxjQUFNLEtBQUtLLE1BQUwsQ0FBWTBCLGNBQVosRUFBTixDQUZHLENBR0g7O0FBQ0EsY0FBTSxLQUFLMUIsTUFBTCxDQUFZMkIsVUFBWixDQUF1QjtBQUN6QixzQkFBWSxLQUFLakYsY0FEUTtBQUV6QixzQkFBWSxLQUFLQTtBQUZRLFNBQXZCLENBQU47QUFJSDtBQUVKLEtBakJELENBaUJFLE9BQU9rRixHQUFQLEVBQVk7QUFDVixZQUFNLElBQUlwRixvQkFBSixDQUFZQyxnQkFBVWMsU0FBVixDQUFvQnNFLGFBQWhDLEVBQStDRCxHQUFHLENBQUNFLE9BQW5ELEVBQTREQyxjQUFLQyxPQUFMLENBQWFKLEdBQWIsQ0FBNUQsQ0FBTjtBQUNIOztBQUNELFVBQU03RSxJQUFOLENBQVcsS0FBS2lELE1BQWhCO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFDaUIsUUFBUGlDLE9BQU8sQ0FBQ0MsTUFBRCxFQUFTO0FBQ2xCLFNBQUs5RixZQUFMLEdBQW9CLEVBQXBCO0FBQ0EsU0FBSytGLHFCQUFMLEdBQTZCLGtCQUE3Qjs7QUFFQSxRQUFJLENBQUNELE1BQUwsRUFBYTtBQUNUQSxNQUFBQSxNQUFNLEdBQUcsUUFBVDs7QUFFQSxVQUFJLEtBQUtsRyxFQUFMLENBQVFvRyxLQUFSLElBQWlCQyxLQUFLLENBQUNDLE9BQU4sQ0FBYyxLQUFLdEcsRUFBTCxDQUFRb0csS0FBdEIsQ0FBakIsSUFBaUQsS0FBS3BHLEVBQUwsQ0FBUW9HLEtBQVIsQ0FBY0csTUFBZCxHQUF1QixDQUE1RSxFQUErRTtBQUMzRSxjQUFNQyxZQUFZLEdBQUcsS0FBS3hHLEVBQUwsQ0FBUW9HLEtBQVIsQ0FBY0ssSUFBZCxDQUFvQkMsSUFBRCxJQUFVQSxJQUFJLENBQUNSLE1BQUwsS0FBZ0IsUUFBN0MsQ0FBckI7O0FBQ0EsWUFBSU0sWUFBSixFQUFrQjtBQUNkTixVQUFBQSxNQUFNLEdBQUcsUUFBVDtBQUNIO0FBQ0o7QUFDSjs7QUFFRCxRQUFJLEtBQUtsQyxNQUFMLElBQWUsS0FBSy9DLGFBQXhCLEVBQXVDO0FBQ25DLFVBQUk7QUFDQWlGLFFBQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDUyxXQUFQLEVBQVQ7O0FBRUEsWUFBSSxLQUFLM0MsTUFBTCxDQUFZTCxRQUFaLEtBQXlCQyxlQUFTRCxRQUFULENBQWtCaUQsU0FBL0MsRUFBMEQ7QUFDdEQsZ0JBQU1DLFFBQVEsR0FBRyxLQUFLbkUsUUFBTCxDQUFjUyxZQUFkLENBQTJCLGVBQTNCLEVBQTRDLFVBQTVDLENBQWpCO0FBQ0EsZ0JBQU0yRCxTQUFTLEdBQUcsS0FBS3BFLFFBQUwsQ0FBY1MsWUFBZCxDQUEyQixlQUEzQixFQUE0QyxXQUE1QyxDQUFsQjtBQUNBLGdCQUFNNEQsTUFBTSxHQUFHYixNQUFNLEtBQUssUUFBMUI7QUFDQSxnQkFBTWMsRUFBRSxHQUFHLEtBQUtoRCxNQUFMLENBQVlHLFNBQXZCO0FBQ0EsZ0JBQU04QyxJQUFJLEdBQUcsaUJBQWVGLE1BQWYsR0FBc0IsR0FBbkM7QUFFQSxnQkFBTUcsU0FBUyxHQUFHLElBQUlDLGtCQUFKLENBQWM7QUFBRXhFLFlBQUFBLElBQUksRUFBRWtFLFFBQVI7QUFBa0JqRSxZQUFBQSxHQUFHLEVBQUVrRTtBQUF2QixXQUFkLENBQWxCO0FBQ0EsZ0JBQU1JLFNBQVMsQ0FBQ0UsU0FBVixDQUFvQlAsUUFBcEIsRUFBOEJHLEVBQTlCLEVBQWtDQyxJQUFsQyxDQUFOO0FBQ0EsZ0JBQU1DLFNBQVMsQ0FBQ0csT0FBVixDQUFrQlIsUUFBbEIsRUFBNEJHLEVBQTVCLENBQU47QUFDSCxTQVZELE1BVU8sSUFBSSxLQUFLaEQsTUFBTCxDQUFZTCxRQUFaLEtBQXlCQyxlQUFTRCxRQUFULENBQWtCNEIsVUFBL0MsRUFBMkQ7QUFDOUQsZ0JBQU0sS0FBSytCLDZCQUFMLENBQW1DcEIsTUFBbkMsQ0FBTjtBQUNBLGdCQUFNLEtBQUtxQixhQUFMLEVBQU47QUFDSCxTQUhNLE1BR0EsSUFBSSxLQUFLdkQsTUFBTCxDQUFZTCxRQUFaLEtBQXlCQyxlQUFTRCxRQUFULENBQWtCNkQsVUFBL0MsRUFBMkQ7QUFDOUQsZ0JBQU0sS0FBS0MsNkJBQUwsQ0FBbUN2QixNQUFuQyxDQUFOO0FBQ0EsZ0JBQU0sS0FBS3FCLGFBQUwsRUFBTjtBQUNILFNBSE0sTUFHQSxJQUFJLEtBQUt2RCxNQUFMLENBQVlMLFFBQVosS0FBeUJDLGVBQVNELFFBQVQsQ0FBa0JHLFFBQS9DLEVBQXlEO0FBQzVELGdCQUFNLEtBQUtpQixlQUFMLENBQXFCMkMsUUFBckIsQ0FBOEI7QUFDaEN4QixZQUFBQSxNQUFNLEVBQUVBLE1BQU0sS0FBSyxRQUFYLEdBQ0kzQiwyQkFBa0JvRCxTQUFsQixDQUE0QkMsT0FBNUIsQ0FBb0NiLE1BRHhDLEdBRUl4QywyQkFBa0JvRCxTQUFsQixDQUE0QkMsT0FBNUIsQ0FBb0NDO0FBSGhCLFdBQTlCLENBQU47QUFLSCxTQU5NLE1BTUEsSUFBSSxLQUFLN0QsTUFBTCxDQUFZTCxRQUFaLEtBQXlCQyxlQUFTRCxRQUFULENBQWtCNkIsWUFBL0MsRUFBNkQ7QUFDaEUsZ0JBQU0sS0FBS3NDLCtCQUFMLENBQXFDNUIsTUFBckMsQ0FBTjtBQUNBLGdCQUFNLEtBQUtxQixhQUFMLEVBQU47QUFDSDs7QUFFRCxZQUFJLEtBQUt2RCxNQUFMLENBQVlMLFFBQVosS0FBeUIsSUFBekIsSUFBaUMsQ0FBQyxRQUFELEVBQVUsUUFBVixFQUFvQjhCLFFBQXBCLENBQTZCUyxNQUE3QixDQUFyQyxFQUEyRTtBQUN2RSxnQkFBTSxLQUFLNkIsbUJBQUwsQ0FBeUI3QixNQUF6QixDQUFOO0FBQ0gsU0FGRCxNQUVPO0FBQ0g7QUFDQSxlQUFLOEIsZUFBTDtBQUNIO0FBQ0osT0FwQ0QsQ0FvQ0UsT0FBTzlDLENBQVAsRUFBVTtBQUNSLGFBQUtqRixNQUFMLENBQVlnSSxJQUFaLENBQWlCLDBCQUFqQixFQUE2Qy9DLENBQTdDLEVBRFEsQ0FDNEM7QUFDdkQ7QUFDSixLQXhDRCxNQXdDTztBQUNILFdBQUs4QyxlQUFMO0FBQ0g7O0FBRUQsV0FBTyxLQUFLN0IscUJBQUwsQ0FBMkIrQixPQUFsQztBQUNIOztBQUVrQixRQUFiWCxhQUFhLEdBQUc7QUFDbEIsUUFBSTtBQUNBLFVBQUksS0FBS3ZELE1BQUwsSUFBZSxLQUFLQSxNQUFMLENBQVl1RCxhQUEvQixFQUE4QztBQUMxQyxZQUFJLEtBQUtZLHNCQUFULEVBQWlDLENBQzdCO0FBQ0E7QUFDSCxTQUhELE1BR087QUFDSCxnQkFBTSxLQUFLbkUsTUFBTCxDQUFZdUQsYUFBWixFQUFOO0FBQ0g7QUFDSjtBQUNKLEtBVEQsQ0FTRSxPQUFPckMsQ0FBUCxFQUFVO0FBQ1IsV0FBS2pGLE1BQUwsQ0FBWXFGLEtBQVosQ0FBa0IscUJBQWxCLEVBQXlDSixDQUF6QztBQUNIO0FBQ0o7O0FBRXdCLFFBQW5CNkMsbUJBQW1CLENBQUM3QixNQUFELEVBQVM7QUFDOUIsUUFBSUEsTUFBTSxJQUFJLGFBQWFBLE1BQU0sQ0FBQ1MsV0FBUCxFQUF2QixJQUErQyxLQUFLN0csT0FBcEQsSUFBK0QsS0FBS0EsT0FBTCxDQUFhc0ksV0FBaEYsRUFBNkY7QUFDekYsV0FBS0osZUFBTCxDQUFxQjlCLE1BQXJCO0FBQ0gsS0FGRCxNQUVPO0FBQ0gsWUFBTSxLQUFLcUIsYUFBTCxFQUFOO0FBQ0EsV0FBS1MsZUFBTDtBQUNIO0FBQ0o7O0FBRURBLEVBQUFBLGVBQWUsQ0FBQzlCLE1BQUQsRUFBUztBQUNwQixTQUFLbEMsTUFBTCxHQUFjLElBQWQ7QUFDQSxTQUFLM0QsdUJBQUwsR0FBK0IsSUFBL0I7QUFDQSxVQUFNNEYsT0FBTixHQUhvQixDQUtwQjs7QUFDQSxRQUFJLEtBQUtuRyxPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYXNJLFdBQTdCLEtBQTZDLENBQUNsQyxNQUFELElBQVcsYUFBYUEsTUFBTSxDQUFDUyxXQUFQLEVBQXJFLENBQUosRUFBZ0c7QUFDNUYsVUFBSTtBQUNBLFlBQUkwQixPQUFPLENBQUNDLFFBQVIsS0FBcUIsT0FBekIsRUFBa0M7QUFDOUIsdUNBQVMsa0NBQVQsRUFBNkM7QUFBRUMsWUFBQUEsS0FBSyxFQUFFLENBQUMsUUFBRCxFQUFXLFFBQVgsRUFBcUIsUUFBckI7QUFBVCxXQUE3QztBQUNILFNBRkQsTUFFTztBQUNILGNBQUlDLFdBQVcsR0FBRyw2QkFBUywwQkFBVCxDQUFsQjs7QUFDQSxjQUFJQSxXQUFXLElBQUlBLFdBQVcsQ0FBQ0MsUUFBL0IsRUFBeUM7QUFDckNELFlBQUFBLFdBQVcsR0FBR0EsV0FBVyxDQUFDQyxRQUFaLEVBQWQ7O0FBQ0EsZ0JBQUlELFdBQUosRUFBaUI7QUFDYiwyQ0FBUyxhQUFhQSxXQUF0QixFQUFtQztBQUFFRCxnQkFBQUEsS0FBSyxFQUFFLENBQUMsUUFBRCxFQUFXLFFBQVgsRUFBcUIsUUFBckI7QUFBVCxlQUFuQztBQUNIO0FBQ0o7QUFDSjtBQUNKLE9BWkQsQ0FZRSxPQUFPckQsQ0FBUCxFQUFVLENBQ1I7QUFDSDtBQUNKLEtBdEJtQixDQXdCcEI7OztBQUNBLFFBQUksS0FBS3BGLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhc0ksV0FBN0IsS0FBNkMsQ0FBQ2xDLE1BQUQsSUFBVyxhQUFhQSxNQUFNLENBQUNTLFdBQVAsRUFBckUsQ0FBSixFQUFnRztBQUM1RixVQUFJO0FBQ0EsWUFBSTBCLE9BQU8sQ0FBQ0MsUUFBUixLQUFxQixPQUF6QixFQUFrQyxDQUM5QjtBQUNILFNBRkQsTUFFTztBQUNILGNBQUlFLFdBQVcsR0FBRyw2QkFBUywwQkFBVCxDQUFsQjs7QUFDQSxjQUFJQSxXQUFXLElBQUlBLFdBQVcsQ0FBQ0MsUUFBL0IsRUFBeUM7QUFDckNELFlBQUFBLFdBQVcsR0FBR0EsV0FBVyxDQUFDQyxRQUFaLEVBQWQ7O0FBQ0EsZ0JBQUlELFdBQUosRUFBaUI7QUFDYiwyQ0FBUyxhQUFhQSxXQUF0QixFQUFtQztBQUFFRCxnQkFBQUEsS0FBSyxFQUFFLENBQUMsUUFBRCxFQUFXLFFBQVgsRUFBcUIsUUFBckI7QUFBVCxlQUFuQztBQUNIO0FBQ0o7QUFDSjtBQUNKLE9BWkQsQ0FZRSxPQUFPckQsQ0FBUCxFQUFVLENBQ1I7QUFDSDtBQUNKOztBQUVELFNBQUtpQixxQkFBTCxDQUEyQnVDLE9BQTNCLENBQW1DLElBQW5DO0FBQ0g7O0FBRURDLEVBQUFBLGVBQWUsR0FBRztBQUNkO0FBQ0FDLElBQUFBLE1BQU0sQ0FBQ0Msb0JBQVAsR0FBOEIsSUFBOUI7QUFDSDs7QUFFa0IsUUFBYkMsYUFBYSxDQUFDeEQsS0FBRCxFQUFRO0FBQ3ZCLFFBQUlBLEtBQUssSUFBSUEsS0FBSyxDQUFDeUQsSUFBTixLQUFlQyxnQkFBWXpILFNBQVosQ0FBc0IwSCx3QkFBbEQsRUFBNEU7QUFDeEUsV0FBS2Qsc0JBQUwsR0FBOEIsSUFBOUI7QUFDQTtBQUNILEtBSEQsTUFHTztBQUNILFdBQUtBLHNCQUFMLEdBQThCLEtBQTlCO0FBQ0g7O0FBRUQsUUFBSSxDQUFDLEtBQUtsSCxhQUFWLEVBQXlCO0FBQ3JCO0FBQ0gsS0FWc0IsQ0FXdkI7OztBQUNBLFFBQUksS0FBS25CLE9BQUwsQ0FBYXNGLGtCQUFiLEtBQW9DLElBQXBDLElBQTRDLEtBQUt0RSxJQUFMLENBQVVRLFdBQVYsS0FBMEIsUUFBMUUsRUFBb0Y7QUFDaEYsVUFBSTtBQUNBLGNBQU00SCxJQUFJLEdBQUcsTUFBTSxLQUFLN0QsY0FBTCxFQUFuQjs7QUFDQSxZQUFJNkQsSUFBSSxJQUFJN0MsS0FBSyxDQUFDQyxPQUFOLENBQWM0QyxJQUFkLENBQVosRUFBaUM7QUFDN0IsZUFBSyxJQUFJQyxHQUFULElBQWdCRCxJQUFoQixFQUFzQjtBQUNsQixpQkFBS2xKLEVBQUwsQ0FBUWtKLElBQVIsQ0FBYUUsSUFBYixDQUFrQixLQUFLQyxpQkFBTCxDQUF1QkYsR0FBdkIsQ0FBbEI7QUFDSDtBQUNKO0FBQ0osT0FQRCxDQU9FLE9BQU9qRSxDQUFQLEVBQVU7QUFDUjtBQUNBLGFBQUtqRixNQUFMLENBQVlxRixLQUFaLENBQWtCLCtCQUFsQixFQUFtREosQ0FBbkQ7QUFDSDtBQUNKLEtBeEJzQixDQXlCdkI7QUFDQTs7O0FBQ0EsUUFBSSxLQUFLcEYsT0FBTCxDQUFhNEIsU0FBYixJQUEwQixLQUFLWixJQUFMLENBQVVRLFdBQVYsS0FBMEIsUUFBeEQsRUFBa0U7QUFDOUQ7QUFDQSxVQUFJc0gsTUFBTSxDQUFDQyxvQkFBWCxFQUFpQztBQUM3QixhQUFLekksWUFBTCxDQUFrQndJLE1BQU0sQ0FBQ0Msb0JBQXpCLElBQWlELE1BQU0sS0FBS1MsT0FBTCxFQUF2RDtBQUNIO0FBQ0o7O0FBRUQsU0FBS3RKLEVBQUwsQ0FBUXVKLEdBQVIsR0FBYyxLQUFLbkosWUFBbkI7QUFDQSxVQUFNb0osU0FBUyxHQUFHbEUsS0FBSyxLQUFLckMsU0FBVixJQUF1QnFDLEtBQUssS0FBSyxJQUFuRDs7QUFDQSxTQUFLbUUsaUNBQUwsQ0FBdUNELFNBQXZDO0FBQ0g7O0FBRURFLEVBQUFBLFNBQVMsQ0FBQy9JLElBQUQsRUFBTztBQUNaLFdBQU9sQixlQUFlLENBQUNnRyxRQUFoQixDQUF5QjlFLElBQXpCLENBQVA7QUFDSDs7QUFFRGdKLEVBQUFBLHFCQUFxQixDQUFDaEosSUFBRCxFQUFPO0FBQ3hCLFFBQUksQ0FBQ25CLHNCQUFzQixDQUFDaUcsUUFBdkIsQ0FBZ0M5RSxJQUFoQyxDQUFMLEVBQTRDO0FBQ3hDLFVBQUkyRSxLQUFKOztBQUNBLFVBQUk7QUFDQSxZQUNJLEtBQUt0QixNQUFMLElBQ0EsS0FBS0EsTUFBTCxDQUFZNEYsY0FGaEIsRUFHRTtBQUNFLGNBQUlDLE1BQUo7QUFDQSxlQUFLN0YsTUFBTCxDQUFZOEYsSUFBWixDQUFpQixNQUFNO0FBQ25CLG1CQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDckIsT0FBRCxFQUFVc0IsTUFBVixLQUFxQjtBQUNwQyxvQkFBTUMsZUFBZSxHQUFHLEtBQUtqRyxNQUFMLENBQVlrRyxTQUFaLENBQXNCLFlBQVc7QUFDckQsb0JBQUk7QUFDQSxzQkFBSUMsTUFBTSxHQUFHLEVBQWIsQ0FEQSxDQUdBOztBQUNBLHdCQUFNQyxPQUFPLEdBQUcsTUFBTSxLQUFLcEcsTUFBTCxDQUFZcUcsZ0JBQVosRUFBdEI7O0FBQ0Esc0JBQ0lELE9BQU8sSUFDUC9ELEtBQUssQ0FBQ0MsT0FBTixDQUFjOEQsT0FBZCxDQURBLElBRUFBLE9BQU8sQ0FBQzdELE1BQVIsR0FBaUIsQ0FIckIsRUFJRTtBQUNFLHlCQUFLLE1BQU0rRCxNQUFYLElBQXFCRixPQUFyQixFQUE4QjtBQUMxQiw0QkFBTSxLQUFLcEcsTUFBTCxDQUFZdUcsY0FBWixDQUEyQkQsTUFBM0IsQ0FBTjtBQUNBLDRCQUFNRSxLQUFLLEdBQUcsTUFBTSxLQUFLeEcsTUFBTCxDQUFZNEYsY0FBWixFQUFwQjtBQUNBLDRCQUFNYSxLQUFLLEdBQUcsTUFBTSxLQUFLekcsTUFBTCxDQUFZMEcsUUFBWixFQUFwQjs7QUFFQSwwQkFBSUQsS0FBSixFQUFXO0FBQ1AsOEJBQU1FLFdBQVcsR0FBR0MsT0FBTyxDQUFDLHNCQUFELENBQTNCOztBQUNBLDRCQUFJQyxVQUFVLEdBQUcsTUFBTUYsV0FBVyxDQUFDRyxRQUFaLENBQXFCTCxLQUFyQixDQUF2Qjs7QUFDQSw0QkFBSUksVUFBVSxJQUFJLE9BQU9BLFVBQVAsS0FBc0IsUUFBeEMsRUFBa0Q7QUFDOUNBLDBCQUFBQSxVQUFVLEdBQUdBLFVBQVUsQ0FBQzVJLE9BQVgsQ0FBbUIsd0JBQW5CLEVBQTZDLEVBQTdDLENBQWI7QUFDQWtJLDBCQUFBQSxNQUFNLENBQUNmLElBQVAsQ0FBWXlCLFVBQVo7QUFDSDtBQUNKOztBQUVEVixzQkFBQUEsTUFBTSxDQUFDZixJQUFQLENBQVlvQixLQUFaO0FBQ0g7QUFDSixtQkExQkQsQ0E0QkE7OztBQUNBLHdCQUFNTyxXQUFXLEdBQUcsTUFBTSx1QkFBWVosTUFBWixFQUFvQjtBQUFFYSxvQkFBQUEsU0FBUyxFQUFFO0FBQWIsbUJBQXBCLENBQTFCOztBQUNBLHNCQUFJRCxXQUFXLElBQUksT0FBT0EsV0FBUCxLQUF1QixRQUExQyxFQUFvRDtBQUNoRGxCLG9CQUFBQSxNQUFNLEdBQUdrQixXQUFXLENBQUM5SSxPQUFaLENBQW9CLHlCQUFwQixFQUErQyxFQUEvQyxDQUFUO0FBQ0g7O0FBRUQseUJBQU8sSUFBUDtBQUNILGlCQW5DRCxDQW1DRSxPQUFPaUQsQ0FBUCxFQUFVO0FBQ1JJLGtCQUFBQSxLQUFLLEdBQUdKLENBQVI7QUFDQSx5QkFBTyxLQUFQO0FBQ0g7QUFDSixlQXhDdUIsRUF5Q3hCO0FBQUUrRixnQkFBQUEsT0FBTyxFQUFFLEtBQUc7QUFBZCxlQXpDd0IsQ0FBeEI7O0FBMkNBLGtCQUFJaEIsZUFBZSxJQUFJQSxlQUFlLENBQUNpQixJQUF2QyxFQUE2QztBQUN6Q2pCLGdCQUFBQSxlQUFlLENBQUNpQixJQUFoQixDQUFxQixNQUFNO0FBQ3ZCeEMsa0JBQUFBLE9BQU87QUFDVixpQkFGRCxFQUVHeUMsS0FGSCxDQUVVdkYsR0FBRCxJQUFTO0FBQ2RvRSxrQkFBQUEsTUFBTSxDQUFDcEUsR0FBRCxDQUFOO0FBQ0gsaUJBSkQ7QUFLSCxlQU5ELE1BTU87QUFDSDhDLGdCQUFBQSxPQUFPO0FBQ1Y7QUFDSixhQXJETSxDQUFQO0FBc0RILFdBdkREOztBQXlEQSxjQUFJcEQsS0FBSixFQUFXO0FBQ1AsaUJBQUtyRixNQUFMLENBQVlxRixLQUFaLENBQWtCLHVCQUFsQixFQUEyQ0EsS0FBM0M7QUFDSDs7QUFFRCxpQkFBT3VFLE1BQVA7QUFDSDtBQUNKLE9BckVELENBcUVFLE9BQU8zRSxDQUFQLEVBQVU7QUFDUixhQUFLakYsTUFBTCxDQUFZcUYsS0FBWixDQUFrQix1QkFBbEIsRUFBMkNKLENBQTNDOztBQUNBLFlBQUlJLEtBQUosRUFBVztBQUNQLGVBQUtyRixNQUFMLENBQVlxRixLQUFaLENBQWtCLG1DQUFsQixFQUF1REEsS0FBdkQ7QUFDSCxTQUpPLENBS1I7O0FBQ0g7QUFDSjtBQUNKOztBQUVEK0QsRUFBQUEsaUJBQWlCLENBQUNGLEdBQUQsRUFBTTtBQUNuQixRQUFJLENBQUNBLEdBQUQsSUFBUSxPQUFPQSxHQUFQLEtBQWUsUUFBM0IsRUFBcUM7QUFDakMsYUFBTyxJQUFQO0FBQ0gsS0FIa0IsQ0FJbkI7OztBQUNBLFdBQU87QUFDSGlDLE1BQUFBLElBQUksRUFBRWpDLEdBQUcsQ0FBQ2tDLFNBRFA7QUFFSEMsTUFBQUEsR0FBRyxFQUFFbkMsR0FBRyxDQUFDckQsT0FGTjtBQUdIO0FBQ0F5RixNQUFBQSxLQUFLLEVBQUVwQyxHQUFHLENBQUNvQyxLQUFKLEtBQWMsUUFBZCxHQUF5QixPQUF6QixHQUFtQ3BDLEdBQUcsQ0FBQ29DLEtBSjNDO0FBS0hDLE1BQUFBLEdBQUcsRUFBRTtBQUxGLEtBQVA7QUFPSDtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lDLEVBQUFBLFNBQVMsQ0FBQ0MsV0FBRCxFQUFjO0FBQ25CLFFBQUksS0FBSzVMLE9BQUwsQ0FBYTZMLFVBQWIsSUFBMkIsS0FBSzFLLGFBQWhDLElBQWlELEtBQUt5SSxTQUFMLENBQWVnQyxXQUFmLENBQXJELEVBQWtGO0FBQzlFLFVBQUlFLGVBQUo7QUFDQSxVQUFJQyxnQkFBZ0IsR0FBRyxDQUF2QjtBQUNBLFVBQUlDLElBQUksR0FBRyxDQUFYO0FBQ0EsVUFBSUMsUUFBUSxHQUFHLEtBQWYsQ0FKOEUsQ0FNOUU7QUFDQTtBQUNBOztBQUNBLFVBQUk7QUFDQSxhQUFLL0gsTUFBTCxDQUFZOEYsSUFBWixDQUFpQixNQUFNO0FBQ25CLGlCQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDckIsT0FBRCxFQUFVc0IsTUFBVixLQUFxQjtBQUNwQyxnQkFBSWdDLFNBQVMsR0FBRyxLQUFoQjtBQUNBLGtCQUFNL0IsZUFBZSxHQUFHLEtBQUtqRyxNQUFMLENBQVlrRyxTQUFaLENBQXNCLFlBQVc7QUFDckQsa0JBQUk7QUFDQTtBQUNBLG9CQUFJK0IsT0FBTyxHQUFHLE1BQU0sS0FBS2pJLE1BQUwsQ0FBWWMsT0FBWixDQUFvQixZQUFXO0FBQy9DLHlCQUFPO0FBQ0g4RyxvQkFBQUEsZUFBZSxFQUFFTSxNQUFNLENBQUN0SyxXQUFQLENBQW1CdUssTUFBbkIsQ0FBMEJQLGVBRHhDO0FBRUhRLG9CQUFBQSwwQkFBMEIsRUFBRUYsTUFBTSxDQUFDdEssV0FBUCxDQUFtQnVLLE1BQW5CLENBQTBCQywwQkFGbkQ7QUFHSEMsb0JBQUFBLGNBQWMsRUFBRUgsTUFBTSxDQUFDdEssV0FBUCxDQUFtQnVLLE1BQW5CLENBQTBCRTtBQUh2QyxtQkFBUDtBQUtILGlCQU5tQixDQUFwQjtBQU9BTCxnQkFBQUEsU0FBUyxHQUFHLEtBQVo7O0FBRUEsb0JBQUlDLE9BQU8sQ0FBQ0csMEJBQVIsR0FBcUMsQ0FBckMsSUFBMENILE9BQU8sQ0FBQ0ksY0FBUixHQUF5QixDQUF2RSxFQUEwRTtBQUN0RU4sa0JBQUFBLFFBQVEsR0FBRyxLQUFLMUwsdUJBQUwsSUFBZ0MsS0FBS0EsdUJBQUwsSUFBZ0M0TCxPQUFPLENBQUNMLGVBQW5GO0FBQ0FBLGtCQUFBQSxlQUFlLEdBQUcsS0FBS3ZMLHVCQUFMLEdBQStCNEwsT0FBTyxDQUFDTCxlQUF6RDtBQUNBLHNCQUFJUSwwQkFBMEIsR0FBR0gsT0FBTyxDQUFDRywwQkFBekM7QUFDQSxzQkFBSUMsY0FBYyxHQUFHSixPQUFPLENBQUNJLGNBQTdCO0FBRUFSLGtCQUFBQSxnQkFBZ0IsR0FBR08sMEJBQTBCLEdBQUdSLGVBQWhEO0FBQ0FFLGtCQUFBQSxJQUFJLEdBQUdPLGNBQWMsR0FBR1QsZUFBeEI7QUFFQSx5QkFBT1EsMEJBQTBCLEdBQUcsQ0FBN0IsSUFBa0NDLGNBQWMsR0FBRyxDQUExRDtBQUNILGlCQVZELE1BVU87QUFDSCx5QkFBTyxLQUFQO0FBQ0g7QUFDSixlQXhCRCxDQXdCRSxPQUFPQyxZQUFQLEVBQXFCO0FBQ25CO0FBQ0FOLGdCQUFBQSxTQUFTLEdBQUdNLFlBQVo7QUFDSDtBQUNKLGFBN0J1QixFQThCeEI7QUFBRXJCLGNBQUFBLE9BQU8sRUFBRSxLQUFHO0FBQWQsYUE5QndCLENBQXhCOztBQWdDQSxnQkFBSWhCLGVBQWUsSUFBSUEsZUFBZSxDQUFDaUIsSUFBdkMsRUFBNkM7QUFDekNqQixjQUFBQSxlQUFlLENBQUNpQixJQUFoQixDQUFxQixNQUFNO0FBQ3ZCLG9CQUFJYyxTQUFKLEVBQWU7QUFDWDtBQUNBTyxrQkFBQUEsT0FBTyxDQUFDcEQsR0FBUixDQUFZNkMsU0FBWjtBQUNIOztBQUNEdEQsZ0JBQUFBLE9BQU87QUFDVixlQU5ELEVBTUd5QyxLQU5ILENBTVV2RixHQUFELElBQVM7QUFDZCxvQkFBSW9HLFNBQUosRUFBZTtBQUNYO0FBQ0FPLGtCQUFBQSxPQUFPLENBQUNwRCxHQUFSLENBQVk2QyxTQUFaO0FBQ0g7O0FBQ0RoQyxnQkFBQUEsTUFBTSxDQUFDcEUsR0FBRCxDQUFOO0FBQ0gsZUFaRDtBQWFILGFBZEQsTUFjTztBQUNIOEMsY0FBQUEsT0FBTztBQUNWO0FBQ0osV0FuRE0sQ0FBUDtBQW9ESCxTQXJERDtBQXNESCxPQXZERCxDQXVERSxPQUFPeEQsQ0FBUCxFQUFVO0FBQ1IsZUFBTyxFQUFQLENBRFEsQ0FFUjtBQUNIOztBQUVELFdBQUs3RSx1QkFBTCxHQUErQnVMLGVBQS9CO0FBRUEsYUFBT0csUUFBUSxHQUFHLEVBQUgsR0FBUTtBQUFFUyxRQUFBQSxxQkFBcUIsRUFBRVgsZ0JBQXpCO0FBQTJDWSxRQUFBQSxTQUFTLEVBQUVYO0FBQXRELE9BQXZCO0FBQ0g7O0FBRUQsV0FBTyxFQUFQO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNxQixRQUFYWSxXQUFXLENBQUMvTCxJQUFELEVBQU87QUFDcEIsUUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDUDtBQUNILEtBSG1CLENBSXBCOzs7QUFDQUEsSUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUM4SCxRQUFMLEVBQVA7O0FBRUEsUUFBSUcsTUFBTSxDQUFDQyxvQkFBWCxFQUFpQztBQUM3QixXQUFLekksWUFBTCxDQUFrQndJLE1BQU0sQ0FBQ0Msb0JBQXpCLElBQWlELElBQWpEOztBQUVBLFVBQUksS0FBSy9JLE9BQUwsQ0FBYTRCLFNBQWIsSUFBMEIsS0FBS1QsYUFBL0IsSUFBZ0QsS0FBS0gsSUFBTCxDQUFVUSxXQUFWLEtBQTBCLFFBQTlFLEVBQXdGO0FBQ3BGLGFBQUtsQixZQUFMLENBQWtCd0ksTUFBTSxDQUFDQyxvQkFBekIsSUFBaUQsTUFBTSxLQUFLUyxPQUFMLEVBQXZEO0FBQ0g7QUFDSjs7QUFFRCxRQUFJLE9BQU8sS0FBS2xKLFlBQUwsQ0FBa0JPLElBQWxCLENBQVAsS0FBbUMsV0FBdkMsRUFBb0Q7QUFDaEQsWUFBTWdNLE9BQU8sR0FBR0MsTUFBTSxDQUFDQyxJQUFQLENBQVksS0FBS3pNLFlBQWpCLEVBQStCME0sTUFBL0IsQ0FBdUNwRyxJQUFELElBQVVBLElBQUksQ0FBQ3ZGLFVBQUwsQ0FBZ0JSLElBQWhCLENBQWhELEVBQXVFNEYsTUFBdkUsR0FBZ0YsQ0FBaEc7QUFDQXFDLE1BQUFBLE1BQU0sQ0FBQ0Msb0JBQVAsR0FBOEJsSSxJQUFJLEdBQUMsS0FBTCxHQUFXZ00sT0FBWCxHQUFtQixHQUFqRDtBQUNILEtBSEQsTUFHTztBQUNIL0QsTUFBQUEsTUFBTSxDQUFDQyxvQkFBUCxHQUE4QmxJLElBQTlCO0FBQ0g7QUFDSjs7QUFFREosRUFBQUEsb0JBQW9CLEdBQUc7QUFDbkIsU0FBS0QsT0FBTCxDQUFheU0sY0FBYixHQUE4Qm5KLGVBQVNtSixjQUF2QztBQUNBLFNBQUt6TSxPQUFMLENBQWEwTSxZQUFiLEdBQTRCcEosZUFBU29KLFlBQXJDO0FBQ0EsU0FBSzFNLE9BQUwsQ0FBYTJNLFVBQWIsR0FBMEJySixlQUFTcUosVUFBbkM7QUFDQSxTQUFLM00sT0FBTCxDQUFhNE0sV0FBYixHQUEyQnRKLGVBQVNzSixXQUFwQztBQUNBLFNBQUs1TSxPQUFMLENBQWE2TSxlQUFiLEdBQStCdkosZUFBU3VKLGVBQXhDO0FBQ0EsU0FBSzdNLE9BQUwsQ0FBYThNLGdCQUFiLEdBQWdDeEosZUFBU3dKLGdCQUF6QztBQUNBLFNBQUs5TSxPQUFMLENBQWErTSxrQkFBYixHQUFrQ3pKLGVBQVN5SixrQkFBM0M7QUFDQSxTQUFLL00sT0FBTCxDQUFhZ04sc0JBQWIsR0FBc0MxSixlQUFTMEosc0JBQS9DO0FBQ0EsU0FBS2hOLE9BQUwsQ0FBYWlOLGNBQWIsR0FBOEIzSixlQUFTMkosY0FBdkM7QUFDQSxTQUFLak4sT0FBTCxDQUFha04sNEJBQWIsR0FBNEM1SixlQUFTNEosNEJBQXJEO0FBQ0EsU0FBS2xOLE9BQUwsQ0FBYW1OLG9CQUFiLEdBQW9DN0osZUFBUzZKLG9CQUE3QztBQUNBLFNBQUtuTixPQUFMLENBQWFvTiwrQkFBYixHQUErQzlKLGVBQVM4SiwrQkFBeEQ7QUFDQSxTQUFLcE4sT0FBTCxDQUFhcU4sa0JBQWIsR0FBa0MvSixlQUFTK0osa0JBQTNDO0FBQ0EsU0FBS3JOLE9BQUwsQ0FBYXNOLDBCQUFiLEdBQTBDaEssZUFBU2dLLDBCQUFuRDtBQUNBLFNBQUt0TixPQUFMLENBQWF1TixxQkFBYixHQUFxQ2pLLGVBQVNpSyxxQkFBOUM7QUFDQSxTQUFLdk4sT0FBTCxDQUFhd04sb0JBQWIsR0FBb0NsSyxlQUFTa0ssb0JBQTdDO0FBQ0g7O0FBRVksUUFBUHhFLE9BQU8sR0FBRztBQUNaLFFBQUk7QUFDQSxZQUFNeUUsS0FBSyxHQUFHLE1BQU0sS0FBSy9KLE1BQUwsQ0FBWWdLLFdBQVosRUFBcEI7O0FBRUEsVUFBSUQsS0FBSyxDQUFDdEksUUFBTixDQUFlLGFBQWYsQ0FBSixFQUFtQztBQUMvQixjQUFNeUQsSUFBSSxHQUFHLE1BQU0sS0FBS2xGLE1BQUwsQ0FBWWlLLE9BQVosQ0FBb0IsYUFBcEIsQ0FBbkIsQ0FEK0IsQ0FHL0I7O0FBQ0EsWUFBSSxDQUFDL0UsSUFBRCxJQUFTLE9BQU9BLElBQUksQ0FBQ2dGLE1BQU0sQ0FBQ0MsUUFBUixDQUFYLEtBQWlDLFVBQTlDLEVBQTBEO0FBQ3RELGVBQUtsTyxNQUFMLENBQVlxRixLQUFaLENBQWtCLGdDQUFnQzhJLElBQUksQ0FBQ0MsU0FBTCxDQUFlbkYsSUFBZixDQUFsRDtBQUNBLGlCQUFPLElBQVA7QUFDSDs7QUFFRCxjQUFNb0YsTUFBTSxHQUFHLEVBQWY7O0FBQ0EsYUFBSyxJQUFJbkYsR0FBVCxJQUFnQkQsSUFBaEIsRUFBc0I7QUFDbEIsZ0JBQU1xRixNQUFNLEdBQUdILElBQUksQ0FBQ3JNLEtBQUwsQ0FBV29ILEdBQUcsQ0FBQ3JELE9BQWYsQ0FBZixDQURrQixDQUN3Qjs7QUFDMUN3SSxVQUFBQSxNQUFNLENBQUNsRixJQUFQLENBQVltRixNQUFNLENBQUN6SSxPQUFuQjtBQUNIOztBQUVELGNBQU15RCxHQUFHLEdBQUcsZ0NBQWdCK0UsTUFBaEIsQ0FBWjtBQUNBLGVBQU9GLElBQUksQ0FBQ0MsU0FBTCxDQUFlOUUsR0FBZixDQUFQO0FBQ0gsT0FqQkQsTUFpQk87QUFDSCxlQUFPLElBQVA7QUFDSDtBQUNKLEtBdkJELENBdUJFLE9BQU9yRSxDQUFQLEVBQVU7QUFDUixXQUFLakYsTUFBTCxDQUFZcUYsS0FBWixDQUFrQiwwQkFBMEJKLENBQUMsQ0FBQ3VELFFBQUYsRUFBNUM7QUFDQSxhQUFPLElBQVA7QUFDSDtBQUNKOztBQUV3QixRQUFuQitGLG1CQUFtQixHQUFHO0FBQ3hCLFFBQUksS0FBS0Msa0JBQVQsRUFBNkI7QUFDekIsWUFBTSxLQUFLQyxjQUFMLENBQW9CLEtBQUtDLDhCQUF6QixFQUF5RCxLQUFLQywwQkFBOUQsRUFBMEYsS0FBS0MseUJBQS9GLENBQU47QUFDSDtBQUNKOztBQUVrQyxRQUE3QnZILDZCQUE2QixDQUFDcEIsTUFBRCxFQUFTO0FBQ3hDLFdBQU8sSUFBSTZELE9BQUosQ0FBWSxDQUFDckIsT0FBRCxFQUFVc0IsTUFBVixLQUFxQjtBQUNwQyxZQUFNOEUsaUJBQWlCLEdBQUc7QUFDdEJqSSxRQUFBQSxRQUFRLEVBQUUsS0FBS25FLFFBQUwsQ0FBY0MsSUFERjtBQUV0Qm1FLFFBQUFBLFNBQVMsRUFBRSxLQUFLcEUsUUFBTCxDQUFjRTtBQUZILE9BQTFCO0FBSUEsWUFBTXVCLFNBQVMsR0FBRyxLQUFLSCxNQUFMLENBQVlHLFNBQTlCOztBQUNBLFlBQU00SyxzQkFBc0IsR0FBR0Msd0JBQWlCQyxnQkFBakIsQ0FDM0JILGlCQUQyQixDQUEvQjs7QUFHQSxZQUFNSSxXQUFXLEdBQUc7QUFDaEJDLFFBQUFBLFVBQVUsRUFBRWpKLE1BQU0sS0FBSyxRQUFYLEdBQXNCLFFBQXRCLEdBQWlDO0FBRDdCLE9BQXBCOztBQUdBLFVBQUk7QUFDQTZJLFFBQUFBLHNCQUFzQixDQUFDSyxpQkFBdkIsQ0FBeUNqTCxTQUF6QyxFQUFvRCtLLFdBQXBELEVBQWtFNUosS0FBRCxJQUFXO0FBQ3hFb0QsVUFBQUEsT0FBTztBQUNWLFNBRkQ7QUFHSCxPQUpELENBSUUsT0FBT3hELENBQVAsRUFBVTtBQUNSLGFBQUtqRixNQUFMLENBQVlxRixLQUFaLENBQWtCLGlEQUFpREosQ0FBQyxDQUFDdUQsUUFBRixFQUFuRTtBQUNBQyxRQUFBQSxPQUFPO0FBQ1Y7QUFDSixLQXBCTSxDQUFQO0FBcUJIOztBQUVrQyxRQUE3QmpCLDZCQUE2QixDQUFDdkIsTUFBRCxFQUFTO0FBQ3hDLFdBQU8sSUFBSTZELE9BQUosQ0FBWSxDQUFDckIsT0FBRCxFQUFVc0IsTUFBVixLQUFxQjtBQUNwQyxZQUFNN0YsU0FBUyxHQUFHLEtBQUtILE1BQUwsQ0FBWUcsU0FBOUI7QUFDQSxZQUFNa0wsRUFBRSxHQUFHLElBQUlDLHNCQUFKLENBQWU7QUFDdEJDLFFBQUFBLE9BQU8sRUFBRSxLQUFLN00sUUFBTCxDQUFjQyxJQUREO0FBRXRCNk0sUUFBQUEsVUFBVSxFQUFFLEtBQUs5TSxRQUFMLENBQWNFO0FBRkosT0FBZixDQUFYO0FBSUEsWUFBTTZNLFFBQVEsR0FBRztBQUFFLHlCQUFrQnZKLE1BQU0sS0FBSyxRQUFYLEdBQXNCLEdBQXRCLEdBQTRCO0FBQWhELE9BQWpCOztBQUNBLFVBQUk7QUFDQW1KLFFBQUFBLEVBQUUsQ0FBQ0ssVUFBSCxDQUFjRCxRQUFkLEVBQXdCdEwsU0FBeEIsRUFBbUMsVUFBU21CLEtBQVQsRUFBZ0JxSyxXQUFoQixFQUE2QjtBQUM1RGpILFVBQUFBLE9BQU87QUFDVixTQUZEO0FBR0gsT0FKRCxDQUlFLE9BQU94RCxDQUFQLEVBQVU7QUFDUixhQUFLakYsTUFBTCxDQUFZcUYsS0FBWixDQUFrQixpREFBaURKLENBQUMsQ0FBQ3VELFFBQUYsRUFBbkU7QUFDQUMsUUFBQUEsT0FBTztBQUNWO0FBQ0osS0FmTSxDQUFQO0FBZ0JIOztBQUVvQyxRQUEvQlosK0JBQStCLENBQUM1QixNQUFELEVBQVM7QUFDMUMsV0FBTyxJQUFJNkQsT0FBSixDQUFZLENBQUNyQixPQUFELEVBQVVzQixNQUFWLEtBQXFCO0FBQ3BDLFlBQU1rRixXQUFXLEdBQUc7QUFDaEJoSixRQUFBQSxNQUFNLEVBQUVBLE1BQU0sS0FBSyxRQUFYLEdBQXNCLFFBQXRCLEdBQWlDO0FBRHpCLE9BQXBCO0FBSUEsWUFBTXBHLE9BQU8sR0FBRztBQUNaK0IsUUFBQUEsR0FBRyxFQUFHLGtEQUFpRCxLQUFLbUMsTUFBTCxDQUFZRyxTQUFVLE9BRGpFO0FBRVp5TCxRQUFBQSxNQUFNLEVBQUUsS0FGSTtBQUdaQyxRQUFBQSxJQUFJLEVBQUUsSUFITTtBQUlaQyxRQUFBQSxrQkFBa0IsRUFBRSxLQUpSO0FBS1o3SSxRQUFBQSxJQUFJLEVBQUVpSSxXQUxNO0FBTVosZ0JBQVE7QUFDSixrQkFBUSxLQUFLeE0sUUFBTCxDQUFjQyxJQURsQjtBQUVKLGtCQUFRLEtBQUtELFFBQUwsQ0FBY0UsR0FGbEI7QUFHSiw2QkFBbUI7QUFIZjtBQU5JLE9BQWhCOztBQWFBLFVBQUk7QUFDQSw4QkFBUTlDLE9BQVIsRUFBaUIsQ0FBQzhGLEdBQUQsRUFBTW1LLEdBQU4sRUFBVzlJLElBQVgsS0FBb0I7QUFDakN5QixVQUFBQSxPQUFPO0FBQ1YsU0FGRDtBQUdILE9BSkQsQ0FJRSxPQUFPeEQsQ0FBUCxFQUFVO0FBQ1IsYUFBS2pGLE1BQUwsQ0FBWXFGLEtBQVosQ0FBa0IsbURBQW1ESixDQUFDLENBQUN1RCxRQUFGLEVBQXJFO0FBQ0FDLFFBQUFBLE9BQU87QUFDVjtBQUNKLEtBMUJNLENBQVA7QUEyQkg7O0FBRW1CLFFBQWQzRixjQUFjLENBQUMvQixXQUFELEVBQWM7QUFDOUIsV0FBTyxJQUFJK0ksT0FBSixDQUFZLENBQUNyQixPQUFELEVBQVVzQixNQUFWLEtBQXFCO0FBQ3BDLFlBQU1sSyxPQUFPLEdBQUc7QUFDWitCLFFBQUFBLEdBQUcsRUFBRyxHQUFFYixXQUFZLEVBRFI7QUFFWjRPLFFBQUFBLE1BQU0sRUFBRSxLQUZJO0FBR1pDLFFBQUFBLElBQUksRUFBRSxLQUhNO0FBSVpDLFFBQUFBLGtCQUFrQixFQUFFO0FBSlIsT0FBaEI7O0FBT0EsVUFBSTtBQUNBLDhCQUFRaFEsT0FBUixFQUFpQixDQUFDOEYsR0FBRCxFQUFNbUssR0FBTixFQUFXOUksSUFBWCxLQUFvQjtBQUNqQyxjQUFJckIsR0FBSixFQUFTO0FBQ0xvRSxZQUFBQSxNQUFNLENBQUNwRSxHQUFELENBQU47QUFDSCxXQUZELE1BR0s7QUFDRCxnQkFBSXFCLElBQUksSUFBSUEsSUFBSSxDQUFDVixNQUFiLElBQXVCVSxJQUFJLENBQUMrSSxPQUFMLENBQWEsd0JBQWIsSUFBeUMsQ0FBQyxDQUFyRSxFQUF3RTtBQUNwRXRILGNBQUFBLE9BQU8sQ0FBQyxJQUFELENBQVA7QUFDSCxhQUZELE1BR0s7QUFDREEsY0FBQUEsT0FBTyxDQUFDLEtBQUQsQ0FBUDtBQUNIO0FBQ0o7QUFDSixTQVpEO0FBYUgsT0FkRCxDQWNFLE9BQU94RCxDQUFQLEVBQVU7QUFDUixhQUFLakYsTUFBTCxDQUFZcUYsS0FBWixDQUFrQixtREFBbURKLENBQUMsQ0FBQ3VELFFBQUYsRUFBckU7QUFDQUMsUUFBQUEsT0FBTztBQUNWO0FBQ0osS0ExQk0sQ0FBUDtBQTJCSCxHQXB6QmtELENBc3pCbkQ7OztBQUN1QyxRQUFqQ2UsaUNBQWlDLENBQUNELFNBQVMsR0FBRyxLQUFiLEVBQW9CO0FBQ3ZELFFBQUksQ0FBQyxLQUFLMUcsbUJBQVYsRUFBK0I7QUFDM0I7QUFDSDs7QUFDRCxRQUFJLENBQUMsS0FBS2hELE9BQUwsQ0FBYW1RLFdBQWQsSUFBNkIsQ0FBQ3pHLFNBQWxDLEVBQTZDO0FBQ3pDO0FBQ0g7O0FBQ0QsVUFBTTBHLFlBQVksR0FBSSxHQUFFLEtBQUtyTixlQUFnQixVQUFTLEtBQUtzQixTQUFVLE1BQXJFO0FBQ0EsVUFBTWdNLFFBQVEsR0FBSSxHQUFFLEtBQUtoTSxTQUFVLE1BQW5DO0FBQ0EsU0FBS25FLEVBQUwsQ0FBUW9RLFdBQVIsQ0FBb0JoSCxJQUFwQixDQUF5QnhGLGVBQVN5TSxrQkFBVCxDQUE0QkYsUUFBNUIsRUFBc0NELFlBQXRDLENBQXpCO0FBQ0g7O0FBajBCa0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xyXG4vKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuLyoqXHJcbiAqIEBuYW1lIHdlYlxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3IgYnJvd3NlciBhdXRvbWF0aW9uLlxyXG4gKiBAc2FtcGxlICoqTm90ZXM6KiogIFxyXG4gKiAgIFxyXG4gKiBDb21tYW5kcyB3aGljaCBvcGVyYXRlIG9uIGVsZW1lbnRzIHN1Y2ggYXMgY2xpY2ssIGFzc2VydCwgd2FpdEZvciwgdHlwZSwgc2VsZWN0LCBhbmQgb3RoZXJzIHdpbGwgYXV0b21hdGljYWxseSB3YWl0IGZvciBhIHBlcmlvZCBvZiB0aW1lIGZvciB0aGUgZWxlbWVudCB0byBhcHBlYXIgaW4gRE9NIGFuZCBiZWNvbWUgdmlzaWJsZS4gQnkgZGVmYXVsdCB0aGlzIHBlcmlvZCBlcXVhbHMgdG8gNjAgc2Vjb25kcywgYnV0IGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoZSBgc2V0VGltZW91dGBjb21tYW5kLlxyXG4gKiAgIFxyXG4gKiAqKlN0cmluZyBtYXRjaGluZyBwYXR0ZXJuczoqKiBcclxuICogXHJcbiAqICBDb21tYW5kcyB3aGljaCBleHBlY3QgYSBzdHJpbmcgbWF0Y2hpbmcgcGF0dGVybiBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIHBhdHRlcm5zIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlOlxyXG4gKiBcclxuICogICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAgKiBgcmVnZXhpOlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGBleGFjdDpTVFJJTkdgIC0gTWF0Y2ggdGhlIHN0cmluZyB2ZXJiYXRpbS5cclxuICogICogYGdsb2I6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyBjYXNlLWluc2Vuc2l0aXZlIGdsb2IgcGF0dGVybi4gYD9gIHdpbGwgbWF0Y2ggYW55IHNpbmdsZSBjaGFyYWN0ZXIgZXhjZXB0IG5ldyBsaW5lIFxcKFxcblxcKS4gYCpgIHdpbGwgbWF0Y2ggYW55IHNlcXVlbmNlIFxcKDAgb3IgbW9yZVxcKSBvZiBjaGFyYWN0ZXJzIGV4Y2VwdCBuZXcgbGluZS4gRW1wdHkgICAgIFBBVFRFUk4gd2lsbCBtYXRjaCBvbmx5IG90aGVyIGVtcHR5IHN0cmluZ3MuXHJcbiAqICAqIGBQQVRURVJOYCAtIFNhbWUgYXMgZ2xvYiBtYXRjaGluZy4gIFxyXG4gKlxyXG4gKiAqKkxvY2F0b3JzOioqIFxyXG4gKiBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhbiBlbGVtZW50IGxvY2F0b3IgaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBsb2NhdG9yIHR5cGVzIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlOlxyXG4gKiBcclxuICogICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgSUQgYXR0cmlidXRlLlxyXG4gKiAgKiBgY3NzPUNTU19TRUxFQ1RPUmAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYSBDU1Mgc2VsZWN0b3IuXHJcbiAqICAqIGBsaW5rPVRFWFRgIC0gTG9jYXRlcyBsaW5rIGVsZW1lbnQgd2hvc2UgdmlzaWJsZSB0ZXh0IG1hdGNoZXMgdGhlIGdpdmVuIHN0cmluZy5cclxuICogICogYGxpbmstY29udGFpbnM9VEVYVGAgLSBMb2NhdGVzIGxpbmsgZWxlbWVudCB3aG9zZSB2aXNpYmxlIHRleHQgY29udGFpbnMgdGhlIGdpdmVuIHN0cmluZy5cclxuICogICogYG5hbWU9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIE5BTUUgYXR0cmlidXRlLlxyXG4gKiAgKiBgdGFnPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyB0YWcgbmFtZS5cclxuICogICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICAqIGAoWFBBVEgpW11gIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKi9cclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIHF1b3RlcyAqL1xyXG5pbXBvcnQgeyBoYXJGcm9tTWVzc2FnZXMgfSBmcm9tICdjaHJvbWUtaGFyJztcclxuaW1wb3J0IFVSTCBmcm9tICd1cmwnO1xyXG5pbXBvcnQgKiBhcyB3ZGlvIGZyb20gJ3dlYmRyaXZlcmlvJztcclxuaW1wb3J0IFdlYkRyaXZlck1vZHVsZSBmcm9tICcuLi9jb3JlL1dlYkRyaXZlck1vZHVsZSc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcbmltcG9ydCBtb2RVdGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IHV0aWwgZnJvbSAndXRpbCc7XHJcbmltcG9ydCBTYXVjZUxhYnMgZnJvbSAnc2F1Y2VsYWJzJztcclxuaW1wb3J0IGxhbWJkYVJlc3RDbGllbnQgZnJvbSAnQGxhbWJkYXRlc3Qvbm9kZS1yZXN0LWNsaWVudCc7XHJcbmltcG9ydCBUZXN0aW5nQm90IGZyb20gJ3Rlc3Rpbmdib3QtYXBpJztcclxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuaW1wb3J0IHBlcmZlY3RvUmVwb3J0aW5nIGZyb20gJ3BlcmZlY3RvLXJlcG9ydGluZyc7XHJcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3JlcXVlc3QnO1xyXG5pbXBvcnQgbWVyZ2VJbWFnZXMgZnJvbSAnLi4vbGliL2ltZy1tZXJnZSc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3dlYic7XHJcbmNvbnN0IERFRkFVTFRfU0VMRU5JVU1fVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDQ0NC93ZC9odWInO1xyXG5jb25zdCBERUZBVUxUX0JST1dTRVJfTkFNRSA9ICdjaHJvbWUnO1xyXG5jb25zdCBERUZBVUxUX01PQklMRV9CUk9XU0VSID0gJ2RlZmF1bHQnO1xyXG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0J107XHJcbmNvbnN0IEFDVElPTl9DT01NQU5EUyA9IFsnb3BlbicsICdjbGljayddO1xyXG5jb25zdCBERUZBVUxUX1dBSVRfVElNRU9VVCA9IDYwICogMTAwMDsgICAgICAgICAgICAvLyBkZWZhdWx0IDYwcyB3YWl0IHRpbWVvdXRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYk1vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9OyAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbi0+aGFyIGRpY3Rpb25hcnlcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0RHJpdmVyXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBXRElPIGRyaXZlci5cclxuICAgICAqL1xyXG4gICAgZ2V0RHJpdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXREcml2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXRDYXBhYmlsaXRpZXNcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBzIHx8IHN1cGVyLmdldENhcGFiaWxpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIG5ldyBTZWxlbml1bSBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMuIElmIG5vdCBzcGVjaWZpZWQgY2FwYWJpbGl0aWVzIHdpbGwgYmUgdGFrZW4gZnJvbSBzdWl0ZSBkZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBzZWxlbml1bVVybCAtIFJlbW90ZSBzZXJ2ZXIgVVJMIChkZWZhdWx0OiBodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViKS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdChjYXBzLCBzZWxlbml1bVVybCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWxlbml1bVVybCkge1xyXG4gICAgICAgICAgICAvLyBpZiBhcHBpdW1VcmwgcG9pbnRzIHRvIGFuIGV4dGVybmFsIGV4ZWN1dGlvbiBncmlkIChzdWNoIGFzIEJTKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFwcGl1bVVybCAmJiAhdGhpcy5vcHRpb25zLmFwcGl1bVVybC5zdGFydHNXaXRoKCdodHRwOi8vbG9jYWxob3N0JykpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVuaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGVuaXVtVXJsID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVXJsIHx8IERFRkFVTFRfU0VMRU5JVU1fVVJMO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0YWtlIGNhcGFiaWxpdGllcyBlaXRoZXIgZnJvbSBpbml0IG1ldGhvZCBhcmd1bWVudCBvciBmcm9tIGNvbnRleHQgcGFyYW1ldGVycyBwYXNzZWQgaW4gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgLy8gbWVyZ2UgY2FwYWJpbGl0aWVzIGZyb20gY29udGV4dCBhbmQgZnJvbSBpbml0IGZ1bmN0aW9uIGFyZ3VtZW50LCBnaXZlIHByZWZlcmVuY2UgdG8gY29udGV4dC1wYXNzZWQgY2FwYWJpbGl0aWVzXHJcbiAgICAgICAgdGhpcy5jYXBzID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmN0eC5jYXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jYXBzLCAuLi5jYXBzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBicm93c2VyTmFtZSBjYXBzIGZyb20gb3B0aW9ucy4gRklYTUU6IHdoeSBpcyB0aGlzIGV2ZW4gbmVlZGVkP1xyXG4gICAgICAgIGxldCBkZWZhdWx0QnJvd3NlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHRoaXMub3B0aW9ucy5icm93c2VyTmFtZSB8fCBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICAgICAgZGVmYXVsdEJyb3dzZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGSVhNRTogc2hhbGwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGJyb3dzZXJOYW1lIGlzIG5vdCBzcGVjaWZpZWQsIG5laXRoZXIgaW4gY2FwcyBub3IgaW4gb3B0aW9ucz8hXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5JTlZBTElEX0NBUEFCSUxJVElFUyxcclxuICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBgd2ViYCBtb2R1bGUgLSBicm93c2VyTmFtZSBtdXN0IGJlIHNwZWNpZmllZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBicm93c2VyTmFtZS1zXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWUnKSB7XHJcbiAgICAgICAgICAgIC8vIElFIGlzIHNwZWNpZmllZCBhcyAnaWUnIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZSBhbmQgcG9zc2libHkgc3VpdGVzXHJcbiAgICAgICAgICAgIC8vIGJ1dCBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzICdpbnRlcm5ldCBleHBsb3JlcidcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gJ2ludGVybmV0IGV4cGxvcmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwc1snbGFtYmRhOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAvLyBsYW1iZGF0ZXN0IGV4cGVjdHMgb3JpZ2luYWwgY2FzZSBuYW1lc1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgLy8gcGVyZmVjdG9Nb2JpbGUgZXhwZWN0cyBvcmlnaW5hbCBjYXNlIG5hbWVzXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgIT09ICdNaWNyb3NvZnRFZGdlJykge1xyXG4gICAgICAgICAgICAvLyBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzIGFsbCBicm93c2VyTmFtZXMgdG8gYmUgbG93ZXJjYXNlXHJcbiAgICAgICAgICAgIC8vIGV4Y2VwdCBcIk1pY3Jvc29mdEVkZ2VcIlxyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgLy8gc3BlY2lmeWluZyB0aGlzIGxlYWRzIENocm9tZSA3NysgdG8gcmVmdXNlIGxvYWRpbmdcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmxvZ2dpbmdQcmVmcyA9IHsgICAgICAgICAgICAgLy8gZm9yIENocm9tZURyaXZlciA8IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuY2hyb21lT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHBlcmZMb2dnaW5nUHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVOZXR3b3JrOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZVBhZ2U6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2Uoc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZW5pdW1VcmxCYXNlID0gYCR7cHJvdG9jb2x9Oi8vJHtob3N0fToke3BvcnR9YDtcclxuICAgICAgICAvLyBjaGVjayBpZiBzZWxlbml1bSBodWIgaXMgYmFzZWQgb24gU2VsZW5vaWQsIHRoZW4gZW5hYmxlIHZpZGVvIHJlY29yZGluZ1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCA9IGF3YWl0IHRoaXMuX2lzU2VsZW5vaWRIdWIodGhpcy5zZWxlbml1bVVybEJhc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10uZW5hYmxlVmlkZW8gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10uZW5hYmxlVmlkZW8gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10udmlkZW9GcmFtZVJhdGUgPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIFdlYmRyaXZlci5pbyBvcHRpb25zXHJcbiAgICAgICAgY29uc3Qgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBpbml0RXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBjb25zdCBwcm92aWRlciA9IG1vZFV0aWxzLmRldGVybWluZVByb3ZpZGVyKHdkaW9PcHRzKTtcclxuXHJcbiAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wYXRoID0gJy9uZXhwZXJpZW5jZS9wZXJmZWN0b21vYmlsZS93ZC9odWInO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wb3J0ID0gODA7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnByb3RvY29sID0gJ2h0dHAnO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5vcGVuRGV2aWNlVGltZW91dCA9IDE1O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSAnbmFtZSc7XHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddICYmIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddWyduYW1lJ10pIHtcclxuICAgICAgICAgICAgbmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snbGFtYmRhOm9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2xhbWJkYTpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydsYW1iZGE6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2xhbWJkYTpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3Rlc3RpbmdCb3Q6b3B0aW9ucyddICYmIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXVsnbmFtZSddO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IGJyb3dzZXIgZm9yIG1vYmlsZSB3ZWIgdGVzdHMsIGlmIGV4ZWN1dGVkIGFnYWluc3QgcmVtb3RlIGRldmljZXMgb2YgYSBjbG91ZCBwcm92aWRlclxyXG4gICAgICAgIGlmIChkZWZhdWx0QnJvd3NlciAmJiBwcm92aWRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUgPSBERUZBVUxUX01PQklMRV9CUk9XU0VSO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndkaW9PcHRzID0gd2Rpb09wdHM7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5wcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQgPSBhd2FpdCBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICB3ZWJkcml2ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdDogYXN5bmMgKGNvbW1hbmQsIHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoY29tbWFuZCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdDbGllbnQgPSBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQocGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdGFydChuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0U2VsZW5pdW1Jbml0RXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXNldCBicm93c2VyIGxvZ3MgaWYgYXV0byBjb2xsZWN0IGxvZ3Mgb3B0aW9uIGlzIGVuYWJsZWRcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncyAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzaW1wbHkgY2FsbCB0aGlzIHRvIGNsZWFyIHRoZSBwcmV2aW91cyBsb2dzIGFuZCBzdGFydCB0aGUgdGVzdCB3aXRoIHRoZSBjbGVhbiBsb2dzXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldEJyb3dzZXJMb2dzKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBbbW9kVXRpbHMucHJvdmlkZXIuTEFNQkRBVEVTVCwgbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLLCBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUT10uaW5jbHVkZXModGhpcy5kcml2ZXIucHJvdmlkZXIpXHJcbiAgICAgICAgICAgICAgICAvL1snTWljcm9zb2Z0RWRnZScsICdtc2VkZ2UnLCAnRWRnZScsICdJbnRlcm5ldCBFeHBsb3JlciddLmluY2x1ZGVzKHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkbyBub3QgbWF4aW1pemUgd2luZG93IGlmIHRoZSB0ZXN0IGlzIGV4ZWN1dGVkIGFnYWluc3QgZXh0ZXJuYWwgY2xvdWQgcHJvdmlkZXIgaW5mcmFzdHJ1Y3R1cmVcclxuICAgICAgICAgICAgICAgIC8vIGFzIG1vc3Qgb2YgY2xvdWQgcHJvdmlkZXJzIGRvIG5vdCBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbWF4aW1pemUgYnJvd3NlciB3aW5kb3dcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLm1heGltaXplV2luZG93KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5pdGlhbCBUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHtcclxuICAgICAgICAgICAgICAgICAgICAnaW1wbGljaXQnOiB0aGlzLndhaXRGb3JUaW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgICAgICdwYWdlTG9hZCc6IHRoaXMud2FpdEZvclRpbWVvdXRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlVOS05PV05fRVJST1IsIGVyci5tZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc3RhdHVzIC0gVGVzdCBzdGF0dXMsIGVpdGhlciBgcGFzc2VkYCBvciBgZmFpbGVkYC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlID0gZGVmZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcclxuICAgICAgICAgICAgc3RhdHVzID0gJ3Bhc3NlZCc7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ycy5zdGVwcyAmJiBBcnJheS5pc0FycmF5KHRoaXMucnMuc3RlcHMpICYmIHRoaXMucnMuc3RlcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkRmluZGVkID0gdGhpcy5ycy5zdGVwcy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxlZEZpbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlNBVUNFTEFCUykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJuYW1lID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXVsndXNlcm5hbWUnXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2Nlc3NLZXkgPSB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snc2F1Y2U6b3B0aW9ucyddWydhY2Nlc3NLZXknXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXNzZWQgPSBzdGF0dXMgPT09ICdQQVNTRUQnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBcIntcXFwicGFzc2VkXFxcIjpcIitwYXNzZWQrXCJ9XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG15QWNjb3VudCA9IG5ldyBTYXVjZUxhYnMoeyB1c2VyOiB1c2VybmFtZSwga2V5OiBhY2Nlc3NLZXl9KTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteUFjY291bnQudXBkYXRlSm9iKHVzZXJuYW1lLCBpZCwgYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXlBY2NvdW50LnN0b3BKb2IodXNlcm5hbWUsIGlkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkxBTUJEQVRFU1QpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZW5kUmVzdWx0U3RhdHVzVG9MYW1iZGFUZXN0KHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5URVNUSU5HQk9UKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvVGVzdGluZ0JvdChzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RvcCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLnBhc3NlZCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLmZhaWxlZFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBudWxsICYmIFsnUEFTU0VEJywnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xvc2VCcm93c2VyV2luZG93cyhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYW5jZWxlZCBvciBvdGhlciBzdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnLCBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fd2hlbldlYk1vZHVsZURpc3Bvc2UucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVTZXNzaW9uKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiB3aWxsIHRha2UgNSBtaW4gdG8gY2FsbFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWxldGVTZXNzaW9uIGVycm9yJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNsb3NlQnJvd3NlcldpbmRvd3Moc3RhdHVzKSB7XHJcbiAgICAgICAgaWYgKHN0YXR1cyAmJiAnRkFJTEVEJyA9PT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZShzdGF0dXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaXNwb3NlQ29udGludWUoc3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICAgICAgLy8gY2xlYW51cCBjaHJvbWVkcml2ZXIncyBvbmx5IHdoZW4gcnVubmluZyBmcm9tIHdpdGhpbiB0aGUgSURFIGFuZCB0ZXN0IGRpZCBub3QgZmFpbFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkICYmICghc3RhdHVzIHx8ICdGQUlMRUQnICE9PSBzdGF0dXMudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ3Rhc2traWxsIC9JTSBjaHJvbWVkcml2ZXIuZXhlIC9GJywgeyBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ2lnbm9yZSddIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGdyZXBSZXN1bHQgPSBleGVjU3luYyhcInBncmVwIC1kJyAnIGNocm9tZWRyaXZlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGdyZXBSZXN1bHQgJiYgcGdyZXBSZXN1bHQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGdyZXBSZXN1bHQgPSBwZ3JlcFJlc3VsdC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGdyZXBSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKCdraWxsIC05ICcgKyBwZ3JlcFJlc3VsdCwgeyBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ2lnbm9yZSddIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNsZWFudXAgZWRnZWRyaXZlcidzIG9ubHkgd2hlbiBydW5uaW5nIGZyb20gd2l0aGluIHRoZSBJREUgYW5kIHRlc3QgZGlkIG5vdCBmYWlsXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQgJiYgKCFzdGF0dXMgfHwgJ0ZBSUxFRCcgIT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZm9yIG5vd1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGdyZXBSZXN1bHQgPSBleGVjU3luYyhcInBncmVwIC1kJyAnIG1zZWRnZWRyaXZlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGdyZXBSZXN1bHQgJiYgcGdyZXBSZXN1bHQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGdyZXBSZXN1bHQgPSBwZ3JlcFJlc3VsdC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGdyZXBSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKCdraWxsIC05ICcgKyBwZ3JlcFJlc3VsdCwgeyBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ2lnbm9yZSddIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlLnJlc29sdmUobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2l0ZXJhdGlvblN0YXJ0KCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHRyYW5zYWN0aW9uIG5hbWUgc2F2ZWQgaW4gcHJldmlvdXMgaXRlcmF0aW9uIGlmIGFueVxyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2l0ZXJhdGlvbkVuZChlcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29sbGVjdCBicm93c2VyIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEJyb3dzZXJMb2dzID09PSB0cnVlICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0aGlzLmdldEJyb3dzZXJMb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nIG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QnJvd3NlckxvZyhsb2cpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IHNob3VsZCBjbGVhciB0cmFuc2FjdGlvbnMgdG8gYXZvaWQgZHVwbGljYXRlIG5hbWVzIGFjcm9zcyBpdGVyYXRpb25zXHJcbiAgICAgICAgLy8gYWxzbyBzaG91bGQgdGhyb3cgb24gZHVwbGljYXRlIG5hbWVzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgLy8gdGhlcmUgbWlnaHQgYmUgbm8gdHJhbnNhY3Rpb25zIHNldCBpZiB0ZXN0IGZhaWxzIGJlZm9yZSB3ZWIudHJhbnNhY3Rpb24gY29tbWFuZFxyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uc1tnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWVdID0gYXdhaXQgdGhpcy5fZ2V0SEFSKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucnMuaGFyID0gdGhpcy50cmFuc2FjdGlvbnM7XHJcbiAgICAgICAgY29uc3QgaGFzRmFpbGVkID0gZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBlcnJvciAhPT0gbnVsbDtcclxuICAgICAgICB0aGlzLl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudChoYXNGYWlsZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGFsbCAoc2NyZWVuc2hvdCBhbmQgdGl0bGUpIGltYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGhhbmRsZXMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZSBvZiBoYW5kbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc3dpdGNoVG9XaW5kb3coaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaXRsZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFRvSW1hZ2UgPSByZXF1aXJlKCcuLi9saWIvdGV4dC10by1pbWFnZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGVJbWFnZSA9IGF3YWl0IHRleHRUb0ltYWdlLmdlbmVyYXRlKHRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlSW1hZ2UgJiYgdHlwZW9mIHRpdGxlSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUltYWdlID0gdGl0bGVJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2godGl0bGVJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWxsIGltYWdlcyBpbnRvIG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRJbWFnZSA9IGF3YWl0IG1lcmdlSW1hZ2VzKGltYWdlcywgeyBkaXJlY3Rpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZWRJbWFnZSAmJiB0eXBlb2YgbWVyZ2VkSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBtZXJnZWRJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0aW1lb3V0OiAzMCoxMDAwIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgaW5uZXIgZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfYWRqdXN0QnJvd3NlckxvZyhsb2cpIHtcclxuICAgICAgICBpZiAoIWxvZyB8fCB0eXBlb2YgbG9nICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogY29udmVydCBsb2cudGltZXN0YW1wIGZyb20gdGhlIGJyb3dzZXIgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncylcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aW1lOiBsb2cudGltZXN0YW1wLFxyXG4gICAgICAgICAgICBtc2c6IGxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICAvLyBjb252ZXJ0IFNFVkVSRSBsb2cgbGV2ZWwgdG8gRVJST1JcclxuICAgICAgICAgICAgbGV2ZWw6IGxvZy5sZXZlbCA9PT0gJ1NFVkVSRScgPyAnRVJST1InIDogbG9nLmxldmVsLFxyXG4gICAgICAgICAgICBzcmM6ICdicm93c2VyJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEZJWE1FOiBUaGVyZSBpcyBhIGJ1ZyB3aXRoIElFLiBTZWUgdGhlIGNvbW1lbnQgd2l0aGluIGZ1bmN0aW9uIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogIGRvbUNvbnRlbnRMb2FkZWQgKGFrYSBGaXJzdCBWaXN1YWwgVGltZSktIFJlcHJlc2VudHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCBhbmQgbmF2aWdhdGlvblN0YXJ0LlxyXG4gICAgICogIGxvYWQgKGFrYSBGdWxsIExvYWQgVGltZSkgICAgICAgICAgICAgICAtIFJlcHJlc2VudHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsb2FkRXZlbnRTdGFydCBhbmQgbmF2aWdhdGlvblN0YXJ0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBwcm9jZXNzaW5nIG1vZGVsOlxyXG4gICAgICpcclxuICAgICAqICAxLiBuYXZpZ2F0aW9uU3RhcnQgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgaGFzIHJlcXVlc3RlZCB0aGUgZG9jdW1lbnQuXHJcbiAgICAgKiAgMi4gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAtIE5vdCByZWxldmFudCB0byB1cy4gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL25hdmlnYXRpb24tdGltaW5nLyNwcm9jZXNzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAgICogIDMuIGRvbUxvYWRpbmcgICAgICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBzdGFydHMgcGFyc2luZyB0aGUgZG9jdW1lbnQuXHJcbiAgICAgKiAgNC4gZG9tSW50ZXJhY3RpdmUgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhcyBmaW5pc2hlZCBwYXJzaW5nIHRoZSBkb2N1bWVudCBhbmQgdGhlIHVzZXIgY2FuIGludGVyYWN0IHdpdGggdGhlIHBhZ2UuXHJcbiAgICAgKiAgNS4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgICAtIFRoZSBkb2N1bWVudCBoYXMgYmVlbiBjb21wbGV0ZWx5IGxvYWRlZCBhbmQgcGFyc2VkIGFuZCBkZWZlcnJlZCBzY3JpcHRzLCBpZiBhbnksIGhhdmUgZXhlY3V0ZWQuIFxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3luYyBzY3JpcHRzLCBpZiBhbnksIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGV4ZWN1dGVkLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZXNoZWV0c1sxXSwgaW1hZ2VzLCBhbmQgc3ViZnJhbWVzIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGZpbmlzaGVkIGxvYWRpbmcuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdIC0gU3R5bGVzaGVldHMgL3VzdWFsbHkvIGRlZmVyIHRoaXMgZXZlbnQhIC0gaHR0cDovL21vbGlseS5kZS93ZWJsb2cvZG9tY29udGVudGxvYWRlZFxyXG4gICAgICogIDYuIGRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCAgICAgLSBUaGUgRE9NQ29udGVudExvYWRlZCBldmVudCBjYWxsYmFjaywgaWYgYW55LCBmaW5pc2hlZCBleGVjdXRpbmcuIEUuZy5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRPTSBmdWxseSBsb2FkZWQgYW5kIHBhcnNlZFwiKTtcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAqICA3LiBkb21Db21wbGV0ZSAgICAgICAgICAgICAgICAgIC0gVGhlIERPTSB0cmVlIGlzIGNvbXBsZXRlbHkgYnVpbHQuIEFzeW5jIHNjcmlwdHMsIGlmIGFueSwgaGF2ZSBleGVjdXRlZC5cclxuICAgICAqICA4LiBsb2FkRXZlbnRTdGFydCAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nIGFsbCB0aGUgcmVzb3VyY2VzIGxpa2UgaW1hZ2VzLCBzd2YsIGV0Yy5cclxuICAgICAqICA5LiBsb2FkRXZlbnRFbmQgICAgICAgICAgICAgICAgIC0gVGhlIGxvYWQgZXZlbnQgY2FsbGJhY2ssIGlmIGFueSwgZmluaXNoZWQgZXhlY3V0aW5nLlxyXG4gICAgICovXHJcbiAgICBfZ2V0U3RhdHMoY29tbWFuZE5hbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZldGNoU3RhdHMgJiYgdGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuX2lzQWN0aW9uKGNvbW1hbmROYW1lKSkge1xyXG4gICAgICAgICAgICB2YXIgbmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICB2YXIgZG9tQ29udGVudExvYWRlZCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBsb2FkID0gMDtcclxuICAgICAgICAgICAgdmFyIHNhbWVQYWdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgZm9sbG93aW5nIHNpdHVhdGlvbjpcclxuICAgICAgICAgICAgLy8gaWYgbmF2aWdhdGVTdGFydCBlcXVhbHMgdG8gdGhlIG9uZSB3ZSBnb3QgZnJvbSBwcmV2aW91cyBhdHRlbXB0ICh3ZSBuZWVkIHRvIHNhdmUgaXQpXHJcbiAgICAgICAgICAgIC8vIGl0IG1lYW5zIHdlIGFyZSBzdGlsbCBvbiB0aGUgc2FtZSBwYWdlIGFuZCBkb24ndCBuZWVkIHRvIHJlY29yZCBsb2FkL2RvbUNvbnRlbnRMb2FkZWQgdGltZXNcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsYXN0RXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmdsb2JhbCB3aW5kb3cqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1pbmdzID0gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZShmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25TdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRFdmVudFN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLmxvYWRFdmVudFN0YXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aW1pbmdzLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID4gMCAmJiB0aW1pbmdzLmxvYWRFdmVudFN0YXJ0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lUGFnZSA9IHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgJiYgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9PSB0aW1pbmdzLm5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvblN0YXJ0ID0gdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IHRpbWluZ3MubmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPSB0aW1pbmdzLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZEV2ZW50U3RhcnQgPSB0aW1pbmdzLmxvYWRFdmVudFN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tQ29udGVudExvYWRlZCA9IGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IC0gbmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkID0gbG9hZEV2ZW50U3RhcnQgLSBuYXZpZ2F0aW9uU3RhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPiAwICYmIGxvYWRFdmVudFN0YXJ0ID4gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhlY3V0ZUVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBlcnJvciBpbnNpZGUgZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGV4ZWN1dGVFcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyB0aW1lb3V0OiAzMCoxMDAwIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnQgZXJyb3IgZnJvbSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50IGVycm9yIGZyb20gZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgICAgICAgICAgLy8gY291bGRuJ3QgZ2V0IHRpbWluZ3MuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBuYXZpZ2F0aW9uU3RhcnQ7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2FtZVBhZ2UgPyB7fSA6IHsgRG9tQ29udGVudExvYWRlZEV2ZW50OiBkb21Db250ZW50TG9hZGVkLCBMb2FkRXZlbnQ6IGxvYWQgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZSB1bmlxdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gdHJhbnNhY3Rpb25cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHRyYW5zYWN0aW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBqdXN0IGluIGNhc2UgdXNlciBwYXNzZWQgYSBjb21wbGV4IG9iamVjdCBieSBtaXN0YWtlXHJcbiAgICAgICAgbmFtZSA9IG5hbWUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgaWYgKGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uc1tnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWVdID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuaXNJbml0aWFsaXplZCAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uc1tnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWVdID0gYXdhaXQgdGhpcy5fZ2V0SEFSKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50cmFuc2FjdGlvbnNbbmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ZXIgPSBPYmplY3Qua2V5cyh0aGlzLnRyYW5zYWN0aW9ucykuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnN0YXJ0c1dpdGgobmFtZSkpLmxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWUrJyAoIycrY291bnRlcisnKSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRIZWxwZXJGdW5jdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yID0gbW9kVXRpbHMuZ2V0V2Rpb0xvY2F0b3I7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLm1hdGNoUGF0dGVybiA9IG1vZFV0aWxzLm1hdGNoUGF0dGVybjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudCA9IG1vZFV0aWxzLmdldEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0RWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudCA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50cyA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnNldFRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnNldFRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZTtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFRpbWVvdXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2dldEhBUigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldExvZ1R5cGVzKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoJ3BlcmZvcm1hbmNlJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRMb2dzKCdwZXJmb3JtYW5jZScpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGluIG9uZSBpbnN0YW5jZSwgbG9ncyB3YXMgbm90IGl0ZXJhYmxlIGZvciBzb21lIHJlYXNvbiAtIGhlbmNlIHRoZSBmb2xsb3dpbmcgY2hlY2s6XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxvZ3MgfHwgdHlwZW9mIGxvZ3NbU3ltYm9sLml0ZXJhdG9yXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdnZXRIQVI6IGxvZ3Mgbm90IGl0ZXJhYmxlOiAnICsgSlNPTi5zdHJpbmdpZnkobG9ncykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbG9nIG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2dPYmogPSBKU09OLnBhcnNlKGxvZy5tZXNzYWdlKTsgICAvLyByZXR1cm5lZCBhcyBzdHJpbmdcclxuICAgICAgICAgICAgICAgICAgICBldmVudHMucHVzaChtc2dPYmoubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFyID0gaGFyRnJvbU1lc3NhZ2VzKGV2ZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaGFyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGZldGNoIEhBUjogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja1dhaXRGb3JBbmd1bGFyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhcikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JBbmd1bGFyKHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyUm9vdFNlbGVjdG9yLCB0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhclNvZnRXYWl0LCB0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhclRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvTGFtYmRhVGVzdChzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBsYW1iZGFDcmVkZW50aWFscyA9IHtcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICBhY2Nlc3NLZXk6IHRoaXMud2Rpb09wdHMua2V5XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgY29uc3QgbGFtYmRhQXV0b21hdGlvbkNsaWVudCA9IGxhbWJkYVJlc3RDbGllbnQuQXV0b21hdGlvbkNsaWVudChcclxuICAgICAgICAgICAgICAgIGxhbWJkYUNyZWRlbnRpYWxzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzX2luZDogc3RhdHVzID09PSAnUEFTU0VEJyA/ICdwYXNzZWQnIDogJ2ZhaWxlZCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxhbWJkYUF1dG9tYXRpb25DbGllbnQudXBkYXRlU2Vzc2lvbkJ5SWQoc2Vzc2lvbklkLCByZXF1ZXN0Qm9keSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIExhbWJkYVRlc3Q6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb1Rlc3RpbmdCb3Qoc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICBjb25zdCB0YiA9IG5ldyBUZXN0aW5nQm90KHtcclxuICAgICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMud2Rpb09wdHMudXNlcixcclxuICAgICAgICAgICAgICAgIGFwaV9zZWNyZXQ6IHRoaXMud2Rpb09wdHMua2V5XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0RGF0YSA9IHsgXCJ0ZXN0W3N1Y2Nlc3NdXCIgOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gXCIxXCIgOiBcIjBcIiB9O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGIudXBkYXRlVGVzdCh0ZXN0RGF0YSwgc2Vzc2lvbklkLCBmdW5jdGlvbihlcnJvciwgdGVzdERldGFpbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gVGVzdGluZ0JvdDogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmJyb3dzZXJzdGFjay5jb20vYXV0b21hdGUvc2Vzc2lvbnMvJHt0aGlzLmRyaXZlci5zZXNzaW9uSWR9Lmpzb25gLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgICAgIGpzb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHksXHJcbiAgICAgICAgICAgICAgICAnYXV0aCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAndXNlcic6IHRoaXMud2Rpb09wdHMudXNlcixcclxuICAgICAgICAgICAgICAgICAgICAncGFzcyc6IHRoaXMud2Rpb09wdHMua2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBCcm93c2Vyc3RhY2s6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2lzU2VsZW5vaWRIdWIoc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBgJHtzZWxlbml1bVVybH1gLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIGpzb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keSAmJiBib2R5Lmxlbmd0aCAmJiBib2R5LmluZGV4T2YoJ1lvdSBhcmUgdXNpbmcgU2VsZW5vaWQnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gQnJvd3NlcnN0YWNrOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHRoZSB0ZXN0IGlzIHJ1bm5pbmcgaW5zaWRlIFNlbGVub2lkLCB0aGVuIGRvd25sb2FkIHRoZSB2aWRlbyBpZiB0ZXN0IGhhcyBmYWlsZWRcclxuICAgIGFzeW5jIF9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudChoYXNGYWlsZWQgPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1J1bm5pbmdPblNlbGVub2lkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMucmVjb3JkVmlkZW8gJiYgIWhhc0ZhaWxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHZpZGVvRmlsZVVybCA9IGAke3RoaXMuc2VsZW5pdW1VcmxCYXNlfS92aWRlby8ke3RoaXMuc2Vzc2lvbklkfS5tcDRgO1xyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7dGhpcy5zZXNzaW9uSWR9Lm1wNGA7XHJcbiAgICAgICAgdGhpcy5ycy5hdHRhY2htZW50cy5wdXNoKG1vZFV0aWxzLm5ld1ZpZGVvQXR0YWNobWVudChmaWxlTmFtZSwgdmlkZW9GaWxlVXJsKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbiJdfQ==
979
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiYXBwaXVtVXJsIiwic3RhcnRzV2l0aCIsImN0eCIsImRlZmF1bHRCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJlcnJvckNvZGUiLCJJTlZBTElEX0NBUEFCSUxJVElFUyIsInRvTG93ZXJDYXNlIiwicmVjb3JkSEFSIiwiYnJvd3NlciIsInBlcmZvcm1hbmNlIiwidXJsIiwiVVJMIiwicGFyc2UiLCJwcm90b2NvbCIsInJlcGxhY2UiLCJob3N0IiwiaG9zdG5hbWUiLCJwb3J0IiwicGFyc2VJbnQiLCJwYXRoIiwicGF0aG5hbWUiLCJhdXRoIiwic3BsaXQiLCJ3ZGlvT3B0cyIsInVzZXIiLCJrZXkiLCJzZWxlbml1bVVybEJhc2UiLCJpc1J1bm5pbmdPblNlbGVub2lkIiwiX2lzU2VsZW5vaWRIdWIiLCJlbmFibGVWaWRlbyIsInVuZGVmaW5lZCIsInZpZGVvRnJhbWVSYXRlIiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsImluaXRFcnJvciIsIl90aGlzIiwicHJvdmlkZXIiLCJtb2RVdGlscyIsImRldGVybWluZVByb3ZpZGVyIiwiUEVSRkVDVE8iLCJvcGVuRGV2aWNlVGltZW91dCIsImRyaXZlciIsIndkaW8iLCJyZW1vdGUiLCJzZXNzaW9uSWQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwicGVyZmVjdG9FeGVjdXRpb25Db250ZXh0IiwicGVyZmVjdG9SZXBvcnRpbmciLCJQZXJmZWN0byIsIlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsIndlYmRyaXZlciIsImV4ZWN1dGVTY3JpcHQiLCJjb21tYW5kIiwicGFyYW1zIiwiZXhlY3V0ZSIsInJlcG9ydGluZ0NsaWVudCIsIlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50IiwidGVzdFN0YXJ0IiwiZSIsImdldFNlbGVuaXVtSW5pdEVycm9yIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwiZ2V0QnJvd3NlckxvZ3MiLCJlcnJvciIsIkxBTUJEQVRFU1QiLCJCUk9XU0VSU1RBQ0siLCJpbmNsdWRlcyIsIm1heGltaXplV2luZG93Iiwic2V0VGltZW91dCIsImVyciIsIlVOS05PV05fRVJST1IiLCJtZXNzYWdlIiwidXRpbCIsImluc3BlY3QiLCJkaXNwb3NlIiwic3RhdHVzIiwiX3doZW5XZWJNb2R1bGVEaXNwb3NlIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwiU0FVQ0VMQUJTIiwidXNlcm5hbWUiLCJhY2Nlc3NLZXkiLCJwYXNzZWQiLCJpZCIsImJvZHkiLCJteUFjY291bnQiLCJTYXVjZUxhYnMiLCJ1cGRhdGVKb2IiLCJzdG9wSm9iIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3QiLCJkZWxldGVTZXNzaW9uIiwiVEVTVElOR0JPVCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90IiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImNsb3NlQnJvd3NlcldpbmRvd3MiLCJkaXNwb3NlQ29udGludWUiLCJ3YXJuIiwicHJvbWlzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJzZWxlbml1bVBpZCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsInN0ZGlvIiwicGdyZXBSZXN1bHQiLCJ0b1N0cmluZyIsInJlc29sdmUiLCJfaXRlcmF0aW9uU3RhcnQiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJsb2dzIiwibG9nIiwicHVzaCIsIl9hZGp1c3RCcm93c2VyTG9nIiwiX2dldEhBUiIsImhhciIsImhhc0ZhaWxlZCIsIl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudCIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiY2FsbCIsIlByb21pc2UiLCJyZWplY3QiLCJ3YWl0VW50aWxSZXRWYWwiLCJ3YWl0VW50aWwiLCJpbWFnZXMiLCJoYW5kbGVzIiwiZ2V0V2luZG93SGFuZGxlcyIsImhhbmRsZSIsInN3aXRjaFRvV2luZG93IiwiaW1hZ2UiLCJ0aXRsZSIsImdldFRpdGxlIiwidGV4dFRvSW1hZ2UiLCJyZXF1aXJlIiwidGl0bGVJbWFnZSIsImdlbmVyYXRlIiwibWVyZ2VkSW1hZ2UiLCJkaXJlY3Rpb24iLCJ0aW1lb3V0IiwidGhlbiIsImNhdGNoIiwiZXciLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibGV2ZWwiLCJzcmMiLCJfZ2V0U3RhdHMiLCJjb21tYW5kTmFtZSIsImZldGNoU3RhdHMiLCJuYXZpZ2F0aW9uU3RhcnQiLCJkb21Db250ZW50TG9hZGVkIiwibG9hZCIsInNhbWVQYWdlIiwibGFzdEVycm9yIiwidGltaW5ncyIsIndpbmRvdyIsInRpbWluZyIsImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IiwibG9hZEV2ZW50U3RhcnQiLCJleGVjdXRlRXJyb3IiLCJjb25zb2xlIiwiRG9tQ29udGVudExvYWRlZEV2ZW50IiwiTG9hZEV2ZW50IiwidHJhbnNhY3Rpb24iLCJjb3VudGVyIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwidHlwZXMiLCJnZXRMb2dUeXBlcyIsImdldExvZ3MiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudHMiLCJtc2dPYmoiLCJjaGVja1dhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyIiwid2FpdEZvckFuZ3VsYXIiLCJhdXRvV2FpdEZvckFuZ3VsYXJSb290U2VsZWN0b3IiLCJhdXRvV2FpdEZvckFuZ3VsYXJTb2Z0V2FpdCIsImF1dG9XYWl0Rm9yQW5ndWxhclRpbWVvdXQiLCJsYW1iZGFDcmVkZW50aWFscyIsImxhbWJkYUF1dG9tYXRpb25DbGllbnQiLCJsYW1iZGFSZXN0Q2xpZW50IiwiQXV0b21hdGlvbkNsaWVudCIsInJlcXVlc3RCb2R5Iiwic3RhdHVzX2luZCIsInVwZGF0ZVNlc3Npb25CeUlkIiwidGIiLCJUZXN0aW5nQm90IiwiYXBpX2tleSIsImFwaV9zZWNyZXQiLCJ0ZXN0RGF0YSIsInVwZGF0ZVRlc3QiLCJ0ZXN0RGV0YWlscyIsIm1ldGhvZCIsImpzb24iLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJyZXMiLCJpbmRleE9mIiwicmVjb3JkVmlkZW8iLCJ2aWRlb0ZpbGVVcmwiLCJmaWxlTmFtZSIsImF0dGFjaG1lbnRzIiwibmV3VmlkZW9BdHRhY2htZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUdBLE1BQU1BLFdBQVcsR0FBRyxLQUFwQjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLDhCQUE3QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLFFBQTdCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsU0FBL0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUFDLE1BQUQsRUFBUyxhQUFULENBQS9CO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLENBQUMsTUFBRCxFQUFTLE9BQVQsQ0FBeEI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxLQUFLLElBQWxDLEMsQ0FBbUQ7O0FBRXBDLE1BQU1DLFNBQU4sU0FBd0JDLHdCQUF4QixDQUF3QztBQUNuREMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLE9BQVYsRUFBbUJDLEVBQW5CLEVBQXVCQyxNQUF2QixFQUErQkMsT0FBL0IsRUFBd0NDLFFBQXhDLEVBQWtEO0FBQ3pELFVBQU1MLE9BQU4sRUFBZUMsT0FBZixFQUF3QkMsRUFBeEIsRUFBNEJDLE1BQTVCLEVBQW9DQyxPQUFwQyxFQUE2Q0MsUUFBN0M7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLEVBQXBCLENBRnlELENBRVo7O0FBQzdDLFNBQUtDLHVCQUFMLEdBQStCLElBQS9CO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEVBQWY7O0FBQ0EsU0FBS0Msb0JBQUwsR0FMeUQsQ0FNekQ7OztBQUNBLFNBQUtDLE9BQUwsR0FBZUEsb0JBQWY7QUFDQSxTQUFLQyxTQUFMLEdBQWlCQSxlQUFqQixDQVJ5RCxDQVN6RDs7QUFDQSxTQUFLQyxjQUFMLEdBQXNCaEIsb0JBQXRCO0FBQ0g7O0FBRU8sTUFBSmlCLElBQUksR0FBRztBQUNQLFdBQU92QixXQUFQO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSXdCLEVBQUFBLFNBQVMsR0FBRztBQUNSLFdBQU8sTUFBTUEsU0FBTixFQUFQO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSUMsRUFBQUEsZUFBZSxHQUFHO0FBQ2QsV0FBTyxLQUFLQyxJQUFMLElBQWEsTUFBTUQsZUFBTixFQUFwQjtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDYyxRQUFKRSxJQUFJLENBQUNELElBQUQsRUFBT0UsV0FBUCxFQUFvQjtBQUMxQixRQUFJLEtBQUtDLGFBQVQsRUFBd0I7QUFDcEI7QUFDSDs7QUFFRCxRQUFJLENBQUNELFdBQUwsRUFBa0I7QUFDZDtBQUNBLFVBQUksS0FBS2xCLE9BQUwsQ0FBYW9CLFNBQWIsSUFBMEIsQ0FBQyxLQUFLcEIsT0FBTCxDQUFhb0IsU0FBYixDQUF1QkMsVUFBdkIsQ0FBa0Msa0JBQWxDLENBQS9CLEVBQXNGO0FBQ2xGSCxRQUFBQSxXQUFXLEdBQUcsS0FBS2xCLE9BQUwsQ0FBYW9CLFNBQTNCO0FBQ0gsT0FGRCxNQUdLO0FBQ0RGLFFBQUFBLFdBQVcsR0FBRyxLQUFLbEIsT0FBTCxDQUFha0IsV0FBYixJQUE0QjNCLG9CQUExQztBQUNIO0FBQ0osS0FieUIsQ0FlMUI7QUFDQTs7O0FBQ0EsU0FBS3lCLElBQUwsR0FBWSxFQUFaOztBQUNBLFFBQUksS0FBS00sR0FBTCxDQUFTTixJQUFiLEVBQW1CO0FBQ2YsV0FBS0EsSUFBTCxHQUFZLEVBQUUsR0FBRyxLQUFLTSxHQUFMLENBQVNOO0FBQWQsT0FBWjtBQUNIOztBQUNELFFBQUlBLElBQUosRUFBVTtBQUNOLFdBQUtBLElBQUwsR0FBWSxFQUFFLEdBQUcsS0FBS0EsSUFBVjtBQUFnQixXQUFHQTtBQUFuQixPQUFaO0FBQ0gsS0F2QnlCLENBeUIxQjs7O0FBQ0EsUUFBSU8sY0FBYyxHQUFHLEtBQXJCOztBQUNBLFFBQUksQ0FBQyxLQUFLUCxJQUFMLENBQVVRLFdBQWYsRUFBNEI7QUFDeEIsV0FBS1IsSUFBTCxDQUFVUSxXQUFWLEdBQXdCLEtBQUt4QixPQUFMLENBQWF3QixXQUFiLElBQTRCaEMsb0JBQXBEO0FBQ0ErQixNQUFBQSxjQUFjLEdBQUcsSUFBakI7QUFDSCxLQTlCeUIsQ0ErQjFCOzs7QUFDQSxRQUFJLENBQUMsS0FBS1AsSUFBTCxDQUFVUSxXQUFmLEVBQTRCO0FBQ3hCLFlBQU0sSUFBSWQsb0JBQUosQ0FBWUMsZ0JBQVVjLFNBQVYsQ0FBb0JDLG9CQUFoQyxFQUNGLG9FQURFLENBQU47QUFFSCxLQW5DeUIsQ0FxQzFCOzs7QUFDQSxRQUFJLEtBQUtWLElBQUwsQ0FBVVEsV0FBVixDQUFzQkcsV0FBdEIsT0FBd0MsSUFBNUMsRUFBa0Q7QUFDOUM7QUFDQTtBQUNBLFdBQUtYLElBQUwsQ0FBVVEsV0FBVixHQUF3QixtQkFBeEI7QUFDSCxLQUpELE1BSU8sSUFBSSxLQUFLUixJQUFMLENBQVUsZ0JBQVYsQ0FBSixFQUFpQyxDQUNwQztBQUNILEtBRk0sTUFFQSxJQUFJLEtBQUtBLElBQUwsQ0FBVSx3QkFBVixDQUFKLEVBQXlDLENBQzVDO0FBQ0gsS0FGTSxNQUVBLElBQUksS0FBS0EsSUFBTCxDQUFVUSxXQUFWLEtBQTBCLGVBQTlCLEVBQStDO0FBQ2xEO0FBQ0E7QUFDQSxXQUFLUixJQUFMLENBQVVRLFdBQVYsR0FBd0IsS0FBS1IsSUFBTCxDQUFVUSxXQUFWLENBQXNCRyxXQUF0QixFQUF4QjtBQUNILEtBbER5QixDQW9EMUI7OztBQUNBLFFBQUksS0FBSzNCLE9BQUwsQ0FBYTRCLFNBQWIsSUFBMEIsS0FBS1osSUFBTCxDQUFVUSxXQUFWLEtBQTBCLFFBQXhELEVBQWtFO0FBQzlELFdBQUtSLElBQUwsQ0FBVSxtQkFBVixJQUFpQztBQUFNO0FBQ25DYSxRQUFBQSxPQUFPLEVBQUUsS0FEb0I7QUFFN0JDLFFBQUFBLFdBQVcsRUFBRTtBQUZnQixPQUFqQztBQUlBO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ1MsS0F2RXlCLENBeUUxQjs7O0FBQ0EsVUFBTUMsR0FBRyxHQUFHQyxhQUFJQyxLQUFKLENBQVVmLFdBQVcsSUFBSTNCLG9CQUF6QixDQUFaOztBQUNBLFVBQU0yQyxRQUFRLEdBQUdILEdBQUcsQ0FBQ0csUUFBSixDQUFhQyxPQUFiLENBQXFCLElBQXJCLEVBQTJCLEVBQTNCLENBQWpCO0FBQ0EsVUFBTUMsSUFBSSxHQUFHTCxHQUFHLENBQUNNLFFBQWpCO0FBQ0EsVUFBTUMsSUFBSSxHQUFHQyxRQUFRLENBQUNSLEdBQUcsQ0FBQ08sSUFBSixLQUFhSixRQUFRLEtBQUssT0FBYixHQUF1QixHQUF2QixHQUE2QixFQUExQyxDQUFELENBQXJCO0FBQ0EsVUFBTU0sSUFBSSxHQUFHVCxHQUFHLENBQUNVLFFBQWpCLENBOUUwQixDQWdGMUI7O0FBQ0EsUUFBSVYsR0FBRyxDQUFDVyxJQUFSLEVBQWM7QUFDVixZQUFNQSxJQUFJLEdBQUdYLEdBQUcsQ0FBQ1csSUFBSixDQUFTQyxLQUFULENBQWUsR0FBZixDQUFiO0FBQ0EsV0FBSzNDLE9BQUwsQ0FBYTRDLFFBQWIsR0FBd0I7QUFDcEJDLFFBQUFBLElBQUksRUFBRUgsSUFBSSxDQUFDLENBQUQsQ0FEVTtBQUVwQkksUUFBQUEsR0FBRyxFQUFFSixJQUFJLENBQUMsQ0FBRDtBQUZXLE9BQXhCO0FBSUg7O0FBQ0QsU0FBS0ssZUFBTCxHQUF3QixHQUFFYixRQUFTLE1BQUtFLElBQUssSUFBR0UsSUFBSyxFQUFyRCxDQXhGMEIsQ0F5RjFCOztBQUNBLFNBQUtVLG1CQUFMLEdBQTJCLE1BQU0sS0FBS0MsY0FBTCxDQUFvQixLQUFLRixlQUF6QixDQUFqQzs7QUFDQSxRQUFJLEtBQUtDLG1CQUFULEVBQThCO0FBQzFCLFVBQUksQ0FBQyxLQUFLaEMsSUFBTCxDQUFVLGtCQUFWLENBQUwsRUFBb0M7QUFDaEMsYUFBS0EsSUFBTCxDQUFVLGtCQUFWLElBQWdDLEVBQWhDO0FBQ0g7O0FBQ0QsVUFBSSxLQUFLQSxJQUFMLENBQVUsa0JBQVYsRUFBOEJrQyxXQUE5QixLQUE4Q0MsU0FBbEQsRUFBNkQ7QUFDekQsYUFBS25DLElBQUwsQ0FBVSxrQkFBVixFQUE4QmtDLFdBQTlCLEdBQTRDLElBQTVDO0FBQ0EsYUFBS2xDLElBQUwsQ0FBVSxrQkFBVixFQUE4Qm9DLGNBQTlCLEdBQStDLENBQS9DO0FBQ0g7QUFDSixLQW5HeUIsQ0FvRzFCOzs7QUFDQSxVQUFNUixRQUFRLEdBQUcsRUFDYixJQUFHLEtBQUs1QyxPQUFMLENBQWE0QyxRQUFiLElBQXlCLEVBQTVCLENBRGE7QUFFYlYsTUFBQUEsUUFBUSxFQUFFQSxRQUZHO0FBR2JHLE1BQUFBLFFBQVEsRUFBRUQsSUFIRztBQUliRSxNQUFBQSxJQUFJLEVBQUVBLElBSk87QUFLYkUsTUFBQUEsSUFBSSxFQUFFQSxJQUxPO0FBTWJhLE1BQUFBLFlBQVksRUFBRSxLQUFLckMsSUFOTjtBQU9ic0MsTUFBQUEsUUFBUSxFQUFFLFFBUEc7QUFRYkMsTUFBQUEsTUFBTSxFQUFFLE1BUks7QUFTYkMsTUFBQUEsY0FBYyxFQUFFLElBVEg7QUFTUztBQUN0QkMsTUFBQUEsc0JBQXNCLEVBQUUsTUFBSSxJQVZmO0FBV2JDLE1BQUFBLG9CQUFvQixFQUFFO0FBWFQsS0FBakI7QUFjQSxRQUFJQyxTQUFTLEdBQUcsSUFBaEI7O0FBQ0EsVUFBTUMsS0FBSyxHQUFHLElBQWQ7O0FBQ0EsVUFBTUMsUUFBUSxHQUFHQyxlQUFTQyxpQkFBVCxDQUEyQm5CLFFBQTNCLENBQWpCOztBQUVBLFFBQUlpQixRQUFRLEtBQUtDLGVBQVNELFFBQVQsQ0FBa0JHLFFBQW5DLEVBQTZDO0FBQ3pDcEIsTUFBQUEsUUFBUSxDQUFDSixJQUFULEdBQWdCLG9DQUFoQjtBQUNBSSxNQUFBQSxRQUFRLENBQUNOLElBQVQsR0FBZ0IsRUFBaEI7QUFDQU0sTUFBQUEsUUFBUSxDQUFDVixRQUFULEdBQW9CLE1BQXBCO0FBQ0FVLE1BQUFBLFFBQVEsQ0FBQ3FCLGlCQUFULEdBQTZCLEVBQTdCO0FBQ0g7O0FBRUQsUUFBSXBELElBQUksR0FBRyxNQUFYOztBQUNBLFFBQUkrQixRQUFRLENBQUNTLFlBQVQsQ0FBc0Isd0JBQXRCLEtBQW1EVCxRQUFRLENBQUNTLFlBQVQsQ0FBc0Isd0JBQXRCLEVBQWdELE1BQWhELENBQXZELEVBQWdIO0FBQzVHeEMsTUFBQUEsSUFBSSxHQUFHK0IsUUFBUSxDQUFDUyxZQUFULENBQXNCLHdCQUF0QixFQUFnRCxNQUFoRCxDQUFQO0FBQ0EsYUFBT1QsUUFBUSxDQUFDUyxZQUFULENBQXNCLHdCQUF0QixDQUFQO0FBQ0g7O0FBQ0QsUUFBSVQsUUFBUSxDQUFDUyxZQUFULENBQXNCLGdCQUF0QixLQUEyQ1QsUUFBUSxDQUFDUyxZQUFULENBQXNCLGdCQUF0QixFQUF3QyxNQUF4QyxDQUEvQyxFQUFnRztBQUM1RnhDLE1BQUFBLElBQUksR0FBRytCLFFBQVEsQ0FBQ1MsWUFBVCxDQUFzQixnQkFBdEIsRUFBd0MsTUFBeEMsQ0FBUDtBQUNBLGFBQU9ULFFBQVEsQ0FBQ1MsWUFBVCxDQUFzQixnQkFBdEIsQ0FBUDtBQUNIOztBQUNELFFBQUlULFFBQVEsQ0FBQ1MsWUFBVCxDQUFzQixvQkFBdEIsS0FBK0NULFFBQVEsQ0FBQ1MsWUFBVCxDQUFzQixvQkFBdEIsRUFBNEMsTUFBNUMsQ0FBbkQsRUFBd0c7QUFDcEd4QyxNQUFBQSxJQUFJLEdBQUcrQixRQUFRLENBQUNTLFlBQVQsQ0FBc0Isb0JBQXRCLEVBQTRDLE1BQTVDLENBQVA7QUFDQSxhQUFPVCxRQUFRLENBQUNTLFlBQVQsQ0FBc0Isb0JBQXRCLENBQVA7QUFDSDs7QUFDRCxRQUFJVCxRQUFRLENBQUNTLFlBQVQsQ0FBc0IsZ0JBQXRCLEtBQTJDVCxRQUFRLENBQUNTLFlBQVQsQ0FBc0IsZ0JBQXRCLEVBQXdDLE1BQXhDLENBQS9DLEVBQWdHO0FBQzVGeEMsTUFBQUEsSUFBSSxHQUFHK0IsUUFBUSxDQUFDUyxZQUFULENBQXNCLGdCQUF0QixFQUF3QyxNQUF4QyxDQUFQO0FBQ0EsYUFBT1QsUUFBUSxDQUFDUyxZQUFULENBQXNCLGdCQUF0QixDQUFQO0FBQ0gsS0E5SXlCLENBK0kxQjs7O0FBQ0EsUUFBSTlCLGNBQWMsSUFBSXNDLFFBQXRCLEVBQWdDO0FBQzVCLFdBQUs3QyxJQUFMLENBQVVRLFdBQVYsR0FBd0JvQixRQUFRLENBQUNTLFlBQVQsQ0FBc0I3QixXQUF0QixHQUFvQy9CLHNCQUE1RDtBQUNIOztBQUNELFNBQUttRCxRQUFMLEdBQWdCQSxRQUFoQjs7QUFDQSxRQUFJO0FBQ0EsV0FBS3NCLE1BQUwsR0FBYyxNQUFNQyxJQUFJLENBQUNDLE1BQUwsQ0FBWXhCLFFBQVosQ0FBcEI7QUFDQSxXQUFLeUIsU0FBTCxHQUFpQixLQUFLSCxNQUFMLENBQVlHLFNBQTdCO0FBQ0EsV0FBS0gsTUFBTCxDQUFZTCxRQUFaLEdBQXVCQSxRQUF2Qjs7QUFFQSxVQUFJLEtBQUs3RCxPQUFMLENBQWFzRSxzQkFBakIsRUFBeUM7QUFDckMsYUFBS0osTUFBTCxDQUFZSSxzQkFBWixHQUFxQyxLQUFLdEUsT0FBTCxDQUFhc0Usc0JBQWxEO0FBQ0g7O0FBRUQsVUFBSSxLQUFLdEUsT0FBTCxDQUFhdUUsZUFBakIsRUFBa0M7QUFDOUIsYUFBS0wsTUFBTCxDQUFZSyxlQUFaLEdBQThCLEtBQUt2RSxPQUFMLENBQWF1RSxlQUEzQztBQUNIOztBQUVELFVBQUlWLFFBQVEsS0FBS0MsZUFBU0QsUUFBVCxDQUFrQkcsUUFBbkMsRUFBNkM7QUFDekMsY0FBTVEsd0JBQXdCLEdBQUcsTUFBTSxJQUFJQywyQkFBa0JDLFFBQWxCLENBQTJCQyx3QkFBL0IsQ0FBd0Q7QUFDM0ZDLFVBQUFBLFNBQVMsRUFBRTtBQUNQQyxZQUFBQSxhQUFhLEVBQUUsT0FBT0MsT0FBUCxFQUFnQkMsTUFBaEIsS0FBMkI7QUFDdEMscUJBQU8sTUFBTSxLQUFLYixNQUFMLENBQVljLE9BQVosQ0FBb0JGLE9BQXBCLEVBQTZCQyxNQUE3QixDQUFiO0FBQ0g7QUFITTtBQURnRixTQUF4RCxDQUF2QztBQU9BLGFBQUtFLGVBQUwsR0FBdUIsSUFBSVIsMkJBQWtCQyxRQUFsQixDQUEyQlEsdUJBQS9CLENBQXVEVix3QkFBdkQsQ0FBdkI7QUFDQSxjQUFNLEtBQUtTLGVBQUwsQ0FBcUJFLFNBQXJCLENBQStCdEUsSUFBL0IsQ0FBTjtBQUNIO0FBQ0osS0F4QkQsQ0F5QkEsT0FBT3VFLENBQVAsRUFBVTtBQUNOLFlBQU16RSxnQkFBVTBFLG9CQUFWLENBQStCRCxDQUEvQixDQUFOO0FBQ0gsS0EvS3lCLENBaUwxQjs7O0FBQ0EsUUFBSSxLQUFLcEYsT0FBTCxDQUFhc0Ysa0JBQWIsSUFBbUMsS0FBS3RFLElBQUwsQ0FBVVEsV0FBVixLQUEwQixRQUFqRSxFQUEyRTtBQUN2RSxVQUFJO0FBQ0E7QUFDQSxjQUFNLEtBQUsrRCxjQUFMLEVBQU47QUFDSCxPQUhELENBR0UsT0FBT0gsQ0FBUCxFQUFVO0FBQ1IsYUFBS2pGLE1BQUwsQ0FBWXFGLEtBQVosQ0FBa0IsK0JBQWxCLEVBQW1ESixDQUFuRDtBQUNIO0FBQ0o7O0FBRUQsUUFBSTtBQUNBLFVBQ0ksQ0FBQ3RCLGVBQVNELFFBQVQsQ0FBa0I0QixVQUFuQixFQUErQjNCLGVBQVNELFFBQVQsQ0FBa0I2QixZQUFqRCxFQUErRDVCLGVBQVNELFFBQVQsQ0FBa0JHLFFBQWpGLEVBQTJGMkIsUUFBM0YsQ0FBb0csS0FBS3pCLE1BQUwsQ0FBWUwsUUFBaEgsQ0FESixDQUVJO0FBRkosUUFHRSxDQUNFO0FBQ0E7QUFDSCxTQU5ELE1BTU87QUFDSDtBQUNBLGNBQU0sS0FBS0ssTUFBTCxDQUFZMEIsY0FBWixFQUFOLENBRkcsQ0FHSDs7QUFDQSxjQUFNLEtBQUsxQixNQUFMLENBQVkyQixVQUFaLENBQXVCO0FBQ3pCLHNCQUFZLEtBQUtqRixjQURRO0FBRXpCLHNCQUFZLEtBQUtBO0FBRlEsU0FBdkIsQ0FBTjtBQUlIO0FBRUosS0FqQkQsQ0FpQkUsT0FBT2tGLEdBQVAsRUFBWTtBQUNWLFlBQU0sSUFBSXBGLG9CQUFKLENBQVlDLGdCQUFVYyxTQUFWLENBQW9Cc0UsYUFBaEMsRUFBK0NELEdBQUcsQ0FBQ0UsT0FBbkQsRUFBNERDLGNBQUtDLE9BQUwsQ0FBYUosR0FBYixDQUE1RCxDQUFOO0FBQ0g7O0FBQ0QsVUFBTTdFLElBQU4sQ0FBVyxLQUFLaUQsTUFBaEI7QUFDSDtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUNpQixRQUFQaUMsT0FBTyxDQUFDQyxNQUFELEVBQVM7QUFDbEIsU0FBSzlGLFlBQUwsR0FBb0IsRUFBcEI7QUFDQSxTQUFLK0YscUJBQUwsR0FBNkIsa0JBQTdCOztBQUVBLFFBQUksQ0FBQ0QsTUFBTCxFQUFhO0FBQ1RBLE1BQUFBLE1BQU0sR0FBRyxRQUFUOztBQUVBLFVBQUksS0FBS2xHLEVBQUwsQ0FBUW9HLEtBQVIsSUFBaUJDLEtBQUssQ0FBQ0MsT0FBTixDQUFjLEtBQUt0RyxFQUFMLENBQVFvRyxLQUF0QixDQUFqQixJQUFpRCxLQUFLcEcsRUFBTCxDQUFRb0csS0FBUixDQUFjRyxNQUFkLEdBQXVCLENBQTVFLEVBQStFO0FBQzNFLGNBQU1DLFlBQVksR0FBRyxLQUFLeEcsRUFBTCxDQUFRb0csS0FBUixDQUFjSyxJQUFkLENBQW9CQyxJQUFELElBQVVBLElBQUksQ0FBQ1IsTUFBTCxLQUFnQixRQUE3QyxDQUFyQjs7QUFDQSxZQUFJTSxZQUFKLEVBQWtCO0FBQ2ROLFVBQUFBLE1BQU0sR0FBRyxRQUFUO0FBQ0g7QUFDSjtBQUNKOztBQUVELFFBQUksS0FBS2xDLE1BQUwsSUFBZSxLQUFLL0MsYUFBeEIsRUFBdUM7QUFDbkMsVUFBSTtBQUNBaUYsUUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNTLFdBQVAsRUFBVDs7QUFFQSxZQUFJLEtBQUszQyxNQUFMLENBQVlMLFFBQVosS0FBeUJDLGVBQVNELFFBQVQsQ0FBa0JpRCxTQUEvQyxFQUEwRDtBQUN0RCxnQkFBTUMsUUFBUSxHQUFHLEtBQUtuRSxRQUFMLENBQWNTLFlBQWQsQ0FBMkIsZUFBM0IsRUFBNEMsVUFBNUMsQ0FBakI7QUFDQSxnQkFBTTJELFNBQVMsR0FBRyxLQUFLcEUsUUFBTCxDQUFjUyxZQUFkLENBQTJCLGVBQTNCLEVBQTRDLFdBQTVDLENBQWxCO0FBQ0EsZ0JBQU00RCxNQUFNLEdBQUdiLE1BQU0sS0FBSyxRQUExQjtBQUNBLGdCQUFNYyxFQUFFLEdBQUcsS0FBS2hELE1BQUwsQ0FBWUcsU0FBdkI7QUFDQSxnQkFBTThDLElBQUksR0FBRyxpQkFBZUYsTUFBZixHQUFzQixHQUFuQztBQUVBLGdCQUFNRyxTQUFTLEdBQUcsSUFBSUMsa0JBQUosQ0FBYztBQUFFeEUsWUFBQUEsSUFBSSxFQUFFa0UsUUFBUjtBQUFrQmpFLFlBQUFBLEdBQUcsRUFBRWtFO0FBQXZCLFdBQWQsQ0FBbEI7QUFDQSxnQkFBTUksU0FBUyxDQUFDRSxTQUFWLENBQW9CUCxRQUFwQixFQUE4QkcsRUFBOUIsRUFBa0NDLElBQWxDLENBQU47QUFDQSxnQkFBTUMsU0FBUyxDQUFDRyxPQUFWLENBQWtCUixRQUFsQixFQUE0QkcsRUFBNUIsQ0FBTjtBQUNILFNBVkQsTUFVTyxJQUFJLEtBQUtoRCxNQUFMLENBQVlMLFFBQVosS0FBeUJDLGVBQVNELFFBQVQsQ0FBa0I0QixVQUEvQyxFQUEyRDtBQUM5RCxnQkFBTSxLQUFLK0IsNkJBQUwsQ0FBbUNwQixNQUFuQyxDQUFOO0FBQ0EsZ0JBQU0sS0FBS3FCLGFBQUwsRUFBTjtBQUNILFNBSE0sTUFHQSxJQUFJLEtBQUt2RCxNQUFMLENBQVlMLFFBQVosS0FBeUJDLGVBQVNELFFBQVQsQ0FBa0I2RCxVQUEvQyxFQUEyRDtBQUM5RCxnQkFBTSxLQUFLQyw2QkFBTCxDQUFtQ3ZCLE1BQW5DLENBQU47QUFDQSxnQkFBTSxLQUFLcUIsYUFBTCxFQUFOO0FBQ0gsU0FITSxNQUdBLElBQUksS0FBS3ZELE1BQUwsQ0FBWUwsUUFBWixLQUF5QkMsZUFBU0QsUUFBVCxDQUFrQkcsUUFBL0MsRUFBeUQ7QUFDNUQsZ0JBQU0sS0FBS2lCLGVBQUwsQ0FBcUIyQyxRQUFyQixDQUE4QjtBQUNoQ3hCLFlBQUFBLE1BQU0sRUFBRUEsTUFBTSxLQUFLLFFBQVgsR0FDSTNCLDJCQUFrQm9ELFNBQWxCLENBQTRCQyxPQUE1QixDQUFvQ2IsTUFEeEMsR0FFSXhDLDJCQUFrQm9ELFNBQWxCLENBQTRCQyxPQUE1QixDQUFvQ0M7QUFIaEIsV0FBOUIsQ0FBTjtBQUtILFNBTk0sTUFNQSxJQUFJLEtBQUs3RCxNQUFMLENBQVlMLFFBQVosS0FBeUJDLGVBQVNELFFBQVQsQ0FBa0I2QixZQUEvQyxFQUE2RDtBQUNoRSxnQkFBTSxLQUFLc0MsK0JBQUwsQ0FBcUM1QixNQUFyQyxDQUFOO0FBQ0EsZ0JBQU0sS0FBS3FCLGFBQUwsRUFBTjtBQUNIOztBQUVELFlBQUksS0FBS3ZELE1BQUwsQ0FBWUwsUUFBWixLQUF5QixJQUF6QixJQUFpQyxDQUFDLFFBQUQsRUFBVSxRQUFWLEVBQW9COEIsUUFBcEIsQ0FBNkJTLE1BQTdCLENBQXJDLEVBQTJFO0FBQ3ZFLGdCQUFNLEtBQUs2QixtQkFBTCxDQUF5QjdCLE1BQXpCLENBQU47QUFDSCxTQUZELE1BRU87QUFDSDtBQUNBLGVBQUs4QixlQUFMO0FBQ0g7QUFDSixPQXBDRCxDQW9DRSxPQUFPOUMsQ0FBUCxFQUFVO0FBQ1IsYUFBS2pGLE1BQUwsQ0FBWWdJLElBQVosQ0FBaUIsMEJBQWpCLEVBQTZDL0MsQ0FBN0MsRUFEUSxDQUM0QztBQUN2RDtBQUNKLEtBeENELE1Bd0NPO0FBQ0gsV0FBSzhDLGVBQUw7QUFDSDs7QUFFRCxXQUFPLEtBQUs3QixxQkFBTCxDQUEyQitCLE9BQWxDO0FBQ0g7O0FBRWtCLFFBQWJYLGFBQWEsR0FBRztBQUNsQixRQUFJO0FBQ0EsVUFBSSxLQUFLdkQsTUFBTCxJQUFlLEtBQUtBLE1BQUwsQ0FBWXVELGFBQS9CLEVBQThDO0FBQzFDLFlBQUksS0FBS1ksc0JBQVQsRUFBaUMsQ0FDN0I7QUFDQTtBQUNILFNBSEQsTUFHTztBQUNILGdCQUFNLEtBQUtuRSxNQUFMLENBQVl1RCxhQUFaLEVBQU47QUFDSDtBQUNKO0FBQ0osS0FURCxDQVNFLE9BQU9yQyxDQUFQLEVBQVU7QUFDUixXQUFLakYsTUFBTCxDQUFZcUYsS0FBWixDQUFrQixxQkFBbEIsRUFBeUNKLENBQXpDO0FBQ0g7QUFDSjs7QUFFd0IsUUFBbkI2QyxtQkFBbUIsQ0FBQzdCLE1BQUQsRUFBUztBQUM5QixRQUFJQSxNQUFNLElBQUksYUFBYUEsTUFBTSxDQUFDUyxXQUFQLEVBQXZCLElBQStDLEtBQUs3RyxPQUFwRCxJQUErRCxLQUFLQSxPQUFMLENBQWFzSSxXQUFoRixFQUE2RjtBQUN6RixXQUFLSixlQUFMLENBQXFCOUIsTUFBckI7QUFDSCxLQUZELE1BRU87QUFDSCxZQUFNLEtBQUtxQixhQUFMLEVBQU47QUFDQSxXQUFLUyxlQUFMO0FBQ0g7QUFDSjs7QUFFREEsRUFBQUEsZUFBZSxDQUFDOUIsTUFBRCxFQUFTO0FBQ3BCLFNBQUtsQyxNQUFMLEdBQWMsSUFBZDtBQUNBLFNBQUszRCx1QkFBTCxHQUErQixJQUEvQjtBQUNBLFVBQU00RixPQUFOLEdBSG9CLENBS3BCOztBQUNBLFFBQUksS0FBS25HLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhc0ksV0FBN0IsS0FBNkMsQ0FBQ2xDLE1BQUQsSUFBVyxhQUFhQSxNQUFNLENBQUNTLFdBQVAsRUFBckUsQ0FBSixFQUFnRztBQUM1RixVQUFJO0FBQ0EsWUFBSTBCLE9BQU8sQ0FBQ0MsUUFBUixLQUFxQixPQUF6QixFQUFrQztBQUM5Qix1Q0FBUyxrQ0FBVCxFQUE2QztBQUFFQyxZQUFBQSxLQUFLLEVBQUUsQ0FBQyxRQUFELEVBQVcsUUFBWCxFQUFxQixRQUFyQjtBQUFULFdBQTdDO0FBQ0gsU0FGRCxNQUVPO0FBQ0gsY0FBSUMsV0FBVyxHQUFHLDZCQUFTLDBCQUFULENBQWxCOztBQUNBLGNBQUlBLFdBQVcsSUFBSUEsV0FBVyxDQUFDQyxRQUEvQixFQUF5QztBQUNyQ0QsWUFBQUEsV0FBVyxHQUFHQSxXQUFXLENBQUNDLFFBQVosRUFBZDs7QUFDQSxnQkFBSUQsV0FBSixFQUFpQjtBQUNiLDJDQUFTLGFBQWFBLFdBQXRCLEVBQW1DO0FBQUVELGdCQUFBQSxLQUFLLEVBQUUsQ0FBQyxRQUFELEVBQVcsUUFBWCxFQUFxQixRQUFyQjtBQUFULGVBQW5DO0FBQ0g7QUFDSjtBQUNKO0FBQ0osT0FaRCxDQVlFLE9BQU9yRCxDQUFQLEVBQVUsQ0FDUjtBQUNIO0FBQ0osS0F0Qm1CLENBd0JwQjs7O0FBQ0EsUUFBSSxLQUFLcEYsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWFzSSxXQUE3QixLQUE2QyxDQUFDbEMsTUFBRCxJQUFXLGFBQWFBLE1BQU0sQ0FBQ1MsV0FBUCxFQUFyRSxDQUFKLEVBQWdHO0FBQzVGLFVBQUk7QUFDQSxZQUFJMEIsT0FBTyxDQUFDQyxRQUFSLEtBQXFCLE9BQXpCLEVBQWtDLENBQzlCO0FBQ0gsU0FGRCxNQUVPO0FBQ0gsY0FBSUUsV0FBVyxHQUFHLDZCQUFTLDBCQUFULENBQWxCOztBQUNBLGNBQUlBLFdBQVcsSUFBSUEsV0FBVyxDQUFDQyxRQUEvQixFQUF5QztBQUNyQ0QsWUFBQUEsV0FBVyxHQUFHQSxXQUFXLENBQUNDLFFBQVosRUFBZDs7QUFDQSxnQkFBSUQsV0FBSixFQUFpQjtBQUNiLDJDQUFTLGFBQWFBLFdBQXRCLEVBQW1DO0FBQUVELGdCQUFBQSxLQUFLLEVBQUUsQ0FBQyxRQUFELEVBQVcsUUFBWCxFQUFxQixRQUFyQjtBQUFULGVBQW5DO0FBQ0g7QUFDSjtBQUNKO0FBQ0osT0FaRCxDQVlFLE9BQU9yRCxDQUFQLEVBQVUsQ0FDUjtBQUNIO0FBQ0o7O0FBRUQsU0FBS2lCLHFCQUFMLENBQTJCdUMsT0FBM0IsQ0FBbUMsSUFBbkM7QUFDSDs7QUFFREMsRUFBQUEsZUFBZSxHQUFHO0FBQ2Q7QUFDQUMsSUFBQUEsTUFBTSxDQUFDQyxvQkFBUCxHQUE4QixJQUE5QjtBQUNIOztBQUVrQixRQUFiQyxhQUFhLENBQUN4RCxLQUFELEVBQVE7QUFDdkIsUUFBSUEsS0FBSyxJQUFJQSxLQUFLLENBQUN5RCxJQUFOLEtBQWVDLGdCQUFZekgsU0FBWixDQUFzQjBILHdCQUFsRCxFQUE0RTtBQUN4RSxXQUFLZCxzQkFBTCxHQUE4QixJQUE5QjtBQUNBO0FBQ0gsS0FIRCxNQUdPO0FBQ0gsV0FBS0Esc0JBQUwsR0FBOEIsS0FBOUI7QUFDSDs7QUFFRCxRQUFJLENBQUMsS0FBS2xILGFBQVYsRUFBeUI7QUFDckI7QUFDSCxLQVZzQixDQVd2Qjs7O0FBQ0EsUUFBSSxLQUFLbkIsT0FBTCxDQUFhc0Ysa0JBQWIsS0FBb0MsSUFBcEMsSUFBNEMsS0FBS3RFLElBQUwsQ0FBVVEsV0FBVixLQUEwQixRQUExRSxFQUFvRjtBQUNoRixVQUFJO0FBQ0EsY0FBTTRILElBQUksR0FBRyxNQUFNLEtBQUs3RCxjQUFMLEVBQW5COztBQUNBLFlBQUk2RCxJQUFJLElBQUk3QyxLQUFLLENBQUNDLE9BQU4sQ0FBYzRDLElBQWQsQ0FBWixFQUFpQztBQUM3QixlQUFLLElBQUlDLEdBQVQsSUFBZ0JELElBQWhCLEVBQXNCO0FBQ2xCLGlCQUFLbEosRUFBTCxDQUFRa0osSUFBUixDQUFhRSxJQUFiLENBQWtCLEtBQUtDLGlCQUFMLENBQXVCRixHQUF2QixDQUFsQjtBQUNIO0FBQ0o7QUFDSixPQVBELENBT0UsT0FBT2pFLENBQVAsRUFBVTtBQUNSO0FBQ0EsYUFBS2pGLE1BQUwsQ0FBWXFGLEtBQVosQ0FBa0IsK0JBQWxCLEVBQW1ESixDQUFuRDtBQUNIO0FBQ0osS0F4QnNCLENBeUJ2QjtBQUNBOzs7QUFDQSxRQUFJLEtBQUtwRixPQUFMLENBQWE0QixTQUFiLElBQTBCLEtBQUtaLElBQUwsQ0FBVVEsV0FBVixLQUEwQixRQUF4RCxFQUFrRTtBQUM5RDtBQUNBLFVBQUlzSCxNQUFNLENBQUNDLG9CQUFYLEVBQWlDO0FBQzdCLGFBQUt6SSxZQUFMLENBQWtCd0ksTUFBTSxDQUFDQyxvQkFBekIsSUFBaUQsTUFBTSxLQUFLUyxPQUFMLEVBQXZEO0FBQ0g7QUFDSjs7QUFFRCxTQUFLdEosRUFBTCxDQUFRdUosR0FBUixHQUFjLEtBQUtuSixZQUFuQjtBQUNBLFVBQU1vSixTQUFTLEdBQUdsRSxLQUFLLEtBQUtyQyxTQUFWLElBQXVCcUMsS0FBSyxLQUFLLElBQW5EOztBQUNBLFNBQUttRSxpQ0FBTCxDQUF1Q0QsU0FBdkM7QUFDSDs7QUFFREUsRUFBQUEsU0FBUyxDQUFDL0ksSUFBRCxFQUFPO0FBQ1osV0FBT2xCLGVBQWUsQ0FBQ2dHLFFBQWhCLENBQXlCOUUsSUFBekIsQ0FBUDtBQUNIOztBQUVEZ0osRUFBQUEscUJBQXFCLENBQUNoSixJQUFELEVBQU87QUFDeEIsUUFBSSxDQUFDbkIsc0JBQXNCLENBQUNpRyxRQUF2QixDQUFnQzlFLElBQWhDLENBQUwsRUFBNEM7QUFDeEMsVUFBSTJFLEtBQUo7O0FBQ0EsVUFBSTtBQUNBLFlBQ0ksS0FBS3RCLE1BQUwsSUFDQSxLQUFLQSxNQUFMLENBQVk0RixjQUZoQixFQUdFO0FBQ0UsY0FBSUMsTUFBSjtBQUNBLGVBQUs3RixNQUFMLENBQVk4RixJQUFaLENBQWlCLE1BQU07QUFDbkIsbUJBQU8sSUFBSUMsT0FBSixDQUFZLENBQUNyQixPQUFELEVBQVVzQixNQUFWLEtBQXFCO0FBQ3BDLGtCQUFJO0FBQ0Esc0JBQU1DLGVBQWUsR0FBRyxLQUFLakcsTUFBTCxDQUFZa0csU0FBWixDQUFzQixZQUFXO0FBQ3JELHNCQUFJO0FBQ0Esd0JBQUlDLE1BQU0sR0FBRyxFQUFiLENBREEsQ0FHQTs7QUFDQSwwQkFBTUMsT0FBTyxHQUFHLE1BQU0sS0FBS3BHLE1BQUwsQ0FBWXFHLGdCQUFaLEVBQXRCOztBQUNBLHdCQUFJaEUsS0FBSyxDQUFDQyxPQUFOLENBQWM4RCxPQUFkLEtBQTBCQSxPQUFPLENBQUM3RCxNQUFSLEdBQWlCLENBQS9DLEVBQWtEO0FBQzlDLDJCQUFLLE1BQU0rRCxNQUFYLElBQXFCRixPQUFyQixFQUE4QjtBQUMxQiw4QkFBTSxLQUFLcEcsTUFBTCxDQUFZdUcsY0FBWixDQUEyQkQsTUFBM0IsQ0FBTjtBQUNBLDhCQUFNRSxLQUFLLEdBQUcsTUFBTSxLQUFLeEcsTUFBTCxDQUFZNEYsY0FBWixFQUFwQjtBQUNBLDhCQUFNYSxLQUFLLEdBQUcsTUFBTSxLQUFLekcsTUFBTCxDQUFZMEcsUUFBWixFQUFwQjs7QUFFQSw0QkFBSUQsS0FBSixFQUFXO0FBQ1AsZ0NBQU1FLFdBQVcsR0FBR0MsT0FBTyxDQUFDLHNCQUFELENBQTNCOztBQUNBLDhCQUFJQyxVQUFVLEdBQUcsTUFBTUYsV0FBVyxDQUFDRyxRQUFaLENBQXFCTCxLQUFyQixDQUF2Qjs7QUFDQSw4QkFBSUksVUFBVSxJQUFJLE9BQU9BLFVBQVAsS0FBc0IsUUFBeEMsRUFBa0Q7QUFDOUNBLDRCQUFBQSxVQUFVLEdBQUdBLFVBQVUsQ0FBQzVJLE9BQVgsQ0FBbUIsd0JBQW5CLEVBQTZDLEVBQTdDLENBQWI7QUFDQWtJLDRCQUFBQSxNQUFNLENBQUNmLElBQVAsQ0FBWXlCLFVBQVo7QUFDSDtBQUNKOztBQUVEVix3QkFBQUEsTUFBTSxDQUFDZixJQUFQLENBQVlvQixLQUFaO0FBQ0g7QUFDSixxQkF0QkQsQ0F3QkE7OztBQUNBLDBCQUFNTyxXQUFXLEdBQUcsTUFBTSx1QkFBWVosTUFBWixFQUFvQjtBQUFFYSxzQkFBQUEsU0FBUyxFQUFFO0FBQWIscUJBQXBCLENBQTFCOztBQUNBLHdCQUFJRCxXQUFXLElBQUksT0FBT0EsV0FBUCxLQUF1QixRQUExQyxFQUFvRDtBQUNoRGxCLHNCQUFBQSxNQUFNLEdBQUdrQixXQUFXLENBQUM5SSxPQUFaLENBQW9CLHlCQUFwQixFQUErQyxFQUEvQyxDQUFUO0FBQ0g7O0FBRUQsMkJBQU8sSUFBUDtBQUNILG1CQS9CRCxDQStCRSxPQUFPaUQsQ0FBUCxFQUFVO0FBQ1JJLG9CQUFBQSxLQUFLLEdBQUdKLENBQVI7QUFDQSwyQkFBTyxLQUFQO0FBQ0g7QUFDSixpQkFwQ3VCLEVBcUN4QjtBQUFFK0Ysa0JBQUFBLE9BQU8sRUFBRSxLQUFHO0FBQWQsaUJBckN3QixDQUF4Qjs7QUF1Q0Esb0JBQUloQixlQUFlLElBQUlBLGVBQWUsQ0FBQ2lCLElBQXZDLEVBQTZDO0FBQ3pDakIsa0JBQUFBLGVBQWUsQ0FBQ2lCLElBQWhCLENBQXFCLE1BQU07QUFDdkJ4QyxvQkFBQUEsT0FBTztBQUNWLG1CQUZELEVBRUd5QyxLQUZILENBRVV2RixHQUFELElBQVM7QUFDZG9FLG9CQUFBQSxNQUFNLENBQUNwRSxHQUFELENBQU47QUFDSCxtQkFKRDtBQUtILGlCQU5ELE1BTU87QUFDSDhDLGtCQUFBQSxPQUFPO0FBQ1Y7QUFDSixlQWpERCxDQWlERSxPQUFPMEMsRUFBUCxFQUFXO0FBQ1QscUJBQUtuTCxNQUFMLENBQVlxRixLQUFaLENBQWtCLDJCQUFsQixFQUErQ0EsS0FBL0M7QUFDSDtBQUNKLGFBckRNLENBQVA7QUFzREgsV0F2REQ7O0FBeURBLGNBQUlBLEtBQUosRUFBVztBQUNQLGlCQUFLckYsTUFBTCxDQUFZcUYsS0FBWixDQUFrQiwyQkFBbEIsRUFBK0NBLEtBQS9DO0FBQ0g7O0FBRUQsaUJBQU91RSxNQUFQO0FBQ0g7QUFDSixPQXJFRCxDQXFFRSxPQUFPM0UsQ0FBUCxFQUFVO0FBQ1IsYUFBS2pGLE1BQUwsQ0FBWXFGLEtBQVosQ0FBa0IsMkJBQWxCLEVBQStDSixDQUEvQzs7QUFDQSxZQUFJSSxLQUFKLEVBQVc7QUFDUCxlQUFLckYsTUFBTCxDQUFZcUYsS0FBWixDQUFrQixtQ0FBbEIsRUFBdURBLEtBQXZEO0FBQ0gsU0FKTyxDQUtSOztBQUNIO0FBQ0o7QUFDSjs7QUFFRCtELEVBQUFBLGlCQUFpQixDQUFDRixHQUFELEVBQU07QUFDbkIsUUFBSSxDQUFDQSxHQUFELElBQVEsT0FBT0EsR0FBUCxLQUFlLFFBQTNCLEVBQXFDO0FBQ2pDLGFBQU8sSUFBUDtBQUNILEtBSGtCLENBSW5COzs7QUFDQSxXQUFPO0FBQ0hrQyxNQUFBQSxJQUFJLEVBQUVsQyxHQUFHLENBQUNtQyxTQURQO0FBRUhDLE1BQUFBLEdBQUcsRUFBRXBDLEdBQUcsQ0FBQ3JELE9BRk47QUFHSDtBQUNBMEYsTUFBQUEsS0FBSyxFQUFFckMsR0FBRyxDQUFDcUMsS0FBSixLQUFjLFFBQWQsR0FBeUIsT0FBekIsR0FBbUNyQyxHQUFHLENBQUNxQyxLQUozQztBQUtIQyxNQUFBQSxHQUFHLEVBQUU7QUFMRixLQUFQO0FBT0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJQyxFQUFBQSxTQUFTLENBQUNDLFdBQUQsRUFBYztBQUNuQixRQUFJLEtBQUs3TCxPQUFMLENBQWE4TCxVQUFiLElBQTJCLEtBQUszSyxhQUFoQyxJQUFpRCxLQUFLeUksU0FBTCxDQUFlaUMsV0FBZixDQUFyRCxFQUFrRjtBQUM5RSxVQUFJRSxlQUFKO0FBQ0EsVUFBSUMsZ0JBQWdCLEdBQUcsQ0FBdkI7QUFDQSxVQUFJQyxJQUFJLEdBQUcsQ0FBWDtBQUNBLFVBQUlDLFFBQVEsR0FBRyxLQUFmLENBSjhFLENBTTlFO0FBQ0E7QUFDQTs7QUFDQSxVQUFJO0FBQ0EsYUFBS2hJLE1BQUwsQ0FBWThGLElBQVosQ0FBaUIsTUFBTTtBQUNuQixpQkFBTyxJQUFJQyxPQUFKLENBQVksQ0FBQ3JCLE9BQUQsRUFBVXNCLE1BQVYsS0FBcUI7QUFDcEMsZ0JBQUlpQyxTQUFTLEdBQUcsS0FBaEI7QUFDQSxrQkFBTWhDLGVBQWUsR0FBRyxLQUFLakcsTUFBTCxDQUFZa0csU0FBWixDQUFzQixZQUFXO0FBQ3JELGtCQUFJO0FBQ0E7QUFDQSxvQkFBSWdDLE9BQU8sR0FBRyxNQUFNLEtBQUtsSSxNQUFMLENBQVljLE9BQVosQ0FBb0IsWUFBVztBQUMvQyx5QkFBTztBQUNIK0csb0JBQUFBLGVBQWUsRUFBRU0sTUFBTSxDQUFDdkssV0FBUCxDQUFtQndLLE1BQW5CLENBQTBCUCxlQUR4QztBQUVIUSxvQkFBQUEsMEJBQTBCLEVBQUVGLE1BQU0sQ0FBQ3ZLLFdBQVAsQ0FBbUJ3SyxNQUFuQixDQUEwQkMsMEJBRm5EO0FBR0hDLG9CQUFBQSxjQUFjLEVBQUVILE1BQU0sQ0FBQ3ZLLFdBQVAsQ0FBbUJ3SyxNQUFuQixDQUEwQkU7QUFIdkMsbUJBQVA7QUFLSCxpQkFObUIsQ0FBcEI7QUFPQUwsZ0JBQUFBLFNBQVMsR0FBRyxLQUFaOztBQUVBLG9CQUFJQyxPQUFPLENBQUNHLDBCQUFSLEdBQXFDLENBQXJDLElBQTBDSCxPQUFPLENBQUNJLGNBQVIsR0FBeUIsQ0FBdkUsRUFBMEU7QUFDdEVOLGtCQUFBQSxRQUFRLEdBQUcsS0FBSzNMLHVCQUFMLElBQWdDLEtBQUtBLHVCQUFMLElBQWdDNkwsT0FBTyxDQUFDTCxlQUFuRjtBQUNBQSxrQkFBQUEsZUFBZSxHQUFHLEtBQUt4TCx1QkFBTCxHQUErQjZMLE9BQU8sQ0FBQ0wsZUFBekQ7QUFDQSxzQkFBSVEsMEJBQTBCLEdBQUdILE9BQU8sQ0FBQ0csMEJBQXpDO0FBQ0Esc0JBQUlDLGNBQWMsR0FBR0osT0FBTyxDQUFDSSxjQUE3QjtBQUVBUixrQkFBQUEsZ0JBQWdCLEdBQUdPLDBCQUEwQixHQUFHUixlQUFoRDtBQUNBRSxrQkFBQUEsSUFBSSxHQUFHTyxjQUFjLEdBQUdULGVBQXhCO0FBRUEseUJBQU9RLDBCQUEwQixHQUFHLENBQTdCLElBQWtDQyxjQUFjLEdBQUcsQ0FBMUQ7QUFDSCxpQkFWRCxNQVVPO0FBQ0gseUJBQU8sS0FBUDtBQUNIO0FBQ0osZUF4QkQsQ0F3QkUsT0FBT0MsWUFBUCxFQUFxQjtBQUNuQjtBQUNBTixnQkFBQUEsU0FBUyxHQUFHTSxZQUFaO0FBQ0g7QUFDSixhQTdCdUIsRUE4QnhCO0FBQUV0QixjQUFBQSxPQUFPLEVBQUUsS0FBRztBQUFkLGFBOUJ3QixDQUF4Qjs7QUFnQ0EsZ0JBQUloQixlQUFlLElBQUlBLGVBQWUsQ0FBQ2lCLElBQXZDLEVBQTZDO0FBQ3pDakIsY0FBQUEsZUFBZSxDQUFDaUIsSUFBaEIsQ0FBcUIsTUFBTTtBQUN2QixvQkFBSWUsU0FBSixFQUFlO0FBQ1g7QUFDQU8sa0JBQUFBLE9BQU8sQ0FBQ3JELEdBQVIsQ0FBWThDLFNBQVo7QUFDSDs7QUFDRHZELGdCQUFBQSxPQUFPO0FBQ1YsZUFORCxFQU1HeUMsS0FOSCxDQU1VdkYsR0FBRCxJQUFTO0FBQ2Qsb0JBQUlxRyxTQUFKLEVBQWU7QUFDWDtBQUNBTyxrQkFBQUEsT0FBTyxDQUFDckQsR0FBUixDQUFZOEMsU0FBWjtBQUNIOztBQUNEakMsZ0JBQUFBLE1BQU0sQ0FBQ3BFLEdBQUQsQ0FBTjtBQUNILGVBWkQ7QUFhSCxhQWRELE1BY087QUFDSDhDLGNBQUFBLE9BQU87QUFDVjtBQUNKLFdBbkRNLENBQVA7QUFvREgsU0FyREQ7QUFzREgsT0F2REQsQ0F1REUsT0FBT3hELENBQVAsRUFBVTtBQUNSLGVBQU8sRUFBUCxDQURRLENBRVI7QUFDSDs7QUFFRCxXQUFLN0UsdUJBQUwsR0FBK0J3TCxlQUEvQjtBQUVBLGFBQU9HLFFBQVEsR0FBRyxFQUFILEdBQVE7QUFBRVMsUUFBQUEscUJBQXFCLEVBQUVYLGdCQUF6QjtBQUEyQ1ksUUFBQUEsU0FBUyxFQUFFWDtBQUF0RCxPQUF2QjtBQUNIOztBQUVELFdBQU8sRUFBUDtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDcUIsUUFBWFksV0FBVyxDQUFDaE0sSUFBRCxFQUFPO0FBQ3BCLFFBQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1A7QUFDSCxLQUhtQixDQUlwQjs7O0FBQ0FBLElBQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDOEgsUUFBTCxFQUFQOztBQUVBLFFBQUlHLE1BQU0sQ0FBQ0Msb0JBQVgsRUFBaUM7QUFDN0IsV0FBS3pJLFlBQUwsQ0FBa0J3SSxNQUFNLENBQUNDLG9CQUF6QixJQUFpRCxJQUFqRDs7QUFFQSxVQUFJLEtBQUsvSSxPQUFMLENBQWE0QixTQUFiLElBQTBCLEtBQUtULGFBQS9CLElBQWdELEtBQUtILElBQUwsQ0FBVVEsV0FBVixLQUEwQixRQUE5RSxFQUF3RjtBQUNwRixhQUFLbEIsWUFBTCxDQUFrQndJLE1BQU0sQ0FBQ0Msb0JBQXpCLElBQWlELE1BQU0sS0FBS1MsT0FBTCxFQUF2RDtBQUNIO0FBQ0o7O0FBRUQsUUFBSSxPQUFPLEtBQUtsSixZQUFMLENBQWtCTyxJQUFsQixDQUFQLEtBQW1DLFdBQXZDLEVBQW9EO0FBQ2hELFlBQU1pTSxPQUFPLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLEtBQUsxTSxZQUFqQixFQUErQjJNLE1BQS9CLENBQXVDckcsSUFBRCxJQUFVQSxJQUFJLENBQUN2RixVQUFMLENBQWdCUixJQUFoQixDQUFoRCxFQUF1RTRGLE1BQXZFLEdBQWdGLENBQWhHO0FBQ0FxQyxNQUFBQSxNQUFNLENBQUNDLG9CQUFQLEdBQThCbEksSUFBSSxHQUFDLEtBQUwsR0FBV2lNLE9BQVgsR0FBbUIsR0FBakQ7QUFDSCxLQUhELE1BR087QUFDSGhFLE1BQUFBLE1BQU0sQ0FBQ0Msb0JBQVAsR0FBOEJsSSxJQUE5QjtBQUNIO0FBQ0o7O0FBRURKLEVBQUFBLG9CQUFvQixHQUFHO0FBQ25CLFNBQUtELE9BQUwsQ0FBYTBNLGNBQWIsR0FBOEJwSixlQUFTb0osY0FBdkM7QUFDQSxTQUFLMU0sT0FBTCxDQUFhMk0sWUFBYixHQUE0QnJKLGVBQVNxSixZQUFyQztBQUNBLFNBQUszTSxPQUFMLENBQWE0TSxVQUFiLEdBQTBCdEosZUFBU3NKLFVBQW5DO0FBQ0EsU0FBSzVNLE9BQUwsQ0FBYTZNLFdBQWIsR0FBMkJ2SixlQUFTdUosV0FBcEM7QUFDQSxTQUFLN00sT0FBTCxDQUFhOE0sZUFBYixHQUErQnhKLGVBQVN3SixlQUF4QztBQUNBLFNBQUs5TSxPQUFMLENBQWErTSxnQkFBYixHQUFnQ3pKLGVBQVN5SixnQkFBekM7QUFDQSxTQUFLL00sT0FBTCxDQUFhZ04sa0JBQWIsR0FBa0MxSixlQUFTMEosa0JBQTNDO0FBQ0EsU0FBS2hOLE9BQUwsQ0FBYWlOLHNCQUFiLEdBQXNDM0osZUFBUzJKLHNCQUEvQztBQUNBLFNBQUtqTixPQUFMLENBQWFrTixjQUFiLEdBQThCNUosZUFBUzRKLGNBQXZDO0FBQ0EsU0FBS2xOLE9BQUwsQ0FBYW1OLDRCQUFiLEdBQTRDN0osZUFBUzZKLDRCQUFyRDtBQUNBLFNBQUtuTixPQUFMLENBQWFvTixvQkFBYixHQUFvQzlKLGVBQVM4SixvQkFBN0M7QUFDQSxTQUFLcE4sT0FBTCxDQUFhcU4sK0JBQWIsR0FBK0MvSixlQUFTK0osK0JBQXhEO0FBQ0EsU0FBS3JOLE9BQUwsQ0FBYXNOLGtCQUFiLEdBQWtDaEssZUFBU2dLLGtCQUEzQztBQUNBLFNBQUt0TixPQUFMLENBQWF1TiwwQkFBYixHQUEwQ2pLLGVBQVNpSywwQkFBbkQ7QUFDQSxTQUFLdk4sT0FBTCxDQUFhd04scUJBQWIsR0FBcUNsSyxlQUFTa0sscUJBQTlDO0FBQ0EsU0FBS3hOLE9BQUwsQ0FBYXlOLG9CQUFiLEdBQW9DbkssZUFBU21LLG9CQUE3QztBQUNIOztBQUVZLFFBQVB6RSxPQUFPLEdBQUc7QUFDWixRQUFJO0FBQ0EsWUFBTTBFLEtBQUssR0FBRyxNQUFNLEtBQUtoSyxNQUFMLENBQVlpSyxXQUFaLEVBQXBCOztBQUVBLFVBQUlELEtBQUssQ0FBQ3ZJLFFBQU4sQ0FBZSxhQUFmLENBQUosRUFBbUM7QUFDL0IsY0FBTXlELElBQUksR0FBRyxNQUFNLEtBQUtsRixNQUFMLENBQVlrSyxPQUFaLENBQW9CLGFBQXBCLENBQW5CLENBRCtCLENBRy9COztBQUNBLFlBQUksQ0FBQ2hGLElBQUQsSUFBUyxPQUFPQSxJQUFJLENBQUNpRixNQUFNLENBQUNDLFFBQVIsQ0FBWCxLQUFpQyxVQUE5QyxFQUEwRDtBQUN0RCxlQUFLbk8sTUFBTCxDQUFZcUYsS0FBWixDQUFrQixnQ0FBZ0MrSSxJQUFJLENBQUNDLFNBQUwsQ0FBZXBGLElBQWYsQ0FBbEQ7QUFDQSxpQkFBTyxJQUFQO0FBQ0g7O0FBRUQsY0FBTXFGLE1BQU0sR0FBRyxFQUFmOztBQUNBLGFBQUssSUFBSXBGLEdBQVQsSUFBZ0JELElBQWhCLEVBQXNCO0FBQ2xCLGdCQUFNc0YsTUFBTSxHQUFHSCxJQUFJLENBQUN0TSxLQUFMLENBQVdvSCxHQUFHLENBQUNyRCxPQUFmLENBQWYsQ0FEa0IsQ0FDd0I7O0FBQzFDeUksVUFBQUEsTUFBTSxDQUFDbkYsSUFBUCxDQUFZb0YsTUFBTSxDQUFDMUksT0FBbkI7QUFDSDs7QUFFRCxjQUFNeUQsR0FBRyxHQUFHLGdDQUFnQmdGLE1BQWhCLENBQVo7QUFDQSxlQUFPRixJQUFJLENBQUNDLFNBQUwsQ0FBZS9FLEdBQWYsQ0FBUDtBQUNILE9BakJELE1BaUJPO0FBQ0gsZUFBTyxJQUFQO0FBQ0g7QUFDSixLQXZCRCxDQXVCRSxPQUFPckUsQ0FBUCxFQUFVO0FBQ1IsV0FBS2pGLE1BQUwsQ0FBWXFGLEtBQVosQ0FBa0IsMEJBQTBCSixDQUFDLENBQUN1RCxRQUFGLEVBQTVDO0FBQ0EsYUFBTyxJQUFQO0FBQ0g7QUFDSjs7QUFFd0IsUUFBbkJnRyxtQkFBbUIsR0FBRztBQUN4QixRQUFJLEtBQUtDLGtCQUFULEVBQTZCO0FBQ3pCLFlBQU0sS0FBS0MsY0FBTCxDQUFvQixLQUFLQyw4QkFBekIsRUFBeUQsS0FBS0MsMEJBQTlELEVBQTBGLEtBQUtDLHlCQUEvRixDQUFOO0FBQ0g7QUFDSjs7QUFFa0MsUUFBN0J4SCw2QkFBNkIsQ0FBQ3BCLE1BQUQsRUFBUztBQUN4QyxXQUFPLElBQUk2RCxPQUFKLENBQVksQ0FBQ3JCLE9BQUQsRUFBVXNCLE1BQVYsS0FBcUI7QUFDcEMsWUFBTStFLGlCQUFpQixHQUFHO0FBQ3RCbEksUUFBQUEsUUFBUSxFQUFFLEtBQUtuRSxRQUFMLENBQWNDLElBREY7QUFFdEJtRSxRQUFBQSxTQUFTLEVBQUUsS0FBS3BFLFFBQUwsQ0FBY0U7QUFGSCxPQUExQjtBQUlBLFlBQU11QixTQUFTLEdBQUcsS0FBS0gsTUFBTCxDQUFZRyxTQUE5Qjs7QUFDQSxZQUFNNkssc0JBQXNCLEdBQUdDLHdCQUFpQkMsZ0JBQWpCLENBQzNCSCxpQkFEMkIsQ0FBL0I7O0FBR0EsWUFBTUksV0FBVyxHQUFHO0FBQ2hCQyxRQUFBQSxVQUFVLEVBQUVsSixNQUFNLEtBQUssUUFBWCxHQUFzQixRQUF0QixHQUFpQztBQUQ3QixPQUFwQjs7QUFHQSxVQUFJO0FBQ0E4SSxRQUFBQSxzQkFBc0IsQ0FBQ0ssaUJBQXZCLENBQXlDbEwsU0FBekMsRUFBb0RnTCxXQUFwRCxFQUFrRTdKLEtBQUQsSUFBVztBQUN4RW9ELFVBQUFBLE9BQU87QUFDVixTQUZEO0FBR0gsT0FKRCxDQUlFLE9BQU94RCxDQUFQLEVBQVU7QUFDUixhQUFLakYsTUFBTCxDQUFZcUYsS0FBWixDQUFrQixpREFBaURKLENBQUMsQ0FBQ3VELFFBQUYsRUFBbkU7QUFDQUMsUUFBQUEsT0FBTztBQUNWO0FBQ0osS0FwQk0sQ0FBUDtBQXFCSDs7QUFFa0MsUUFBN0JqQiw2QkFBNkIsQ0FBQ3ZCLE1BQUQsRUFBUztBQUN4QyxXQUFPLElBQUk2RCxPQUFKLENBQVksQ0FBQ3JCLE9BQUQsRUFBVXNCLE1BQVYsS0FBcUI7QUFDcEMsWUFBTTdGLFNBQVMsR0FBRyxLQUFLSCxNQUFMLENBQVlHLFNBQTlCO0FBQ0EsWUFBTW1MLEVBQUUsR0FBRyxJQUFJQyxzQkFBSixDQUFlO0FBQ3RCQyxRQUFBQSxPQUFPLEVBQUUsS0FBSzlNLFFBQUwsQ0FBY0MsSUFERDtBQUV0QjhNLFFBQUFBLFVBQVUsRUFBRSxLQUFLL00sUUFBTCxDQUFjRTtBQUZKLE9BQWYsQ0FBWDtBQUlBLFlBQU04TSxRQUFRLEdBQUc7QUFBRSx5QkFBa0J4SixNQUFNLEtBQUssUUFBWCxHQUFzQixHQUF0QixHQUE0QjtBQUFoRCxPQUFqQjs7QUFDQSxVQUFJO0FBQ0FvSixRQUFBQSxFQUFFLENBQUNLLFVBQUgsQ0FBY0QsUUFBZCxFQUF3QnZMLFNBQXhCLEVBQW1DLFVBQVNtQixLQUFULEVBQWdCc0ssV0FBaEIsRUFBNkI7QUFDNURsSCxVQUFBQSxPQUFPO0FBQ1YsU0FGRDtBQUdILE9BSkQsQ0FJRSxPQUFPeEQsQ0FBUCxFQUFVO0FBQ1IsYUFBS2pGLE1BQUwsQ0FBWXFGLEtBQVosQ0FBa0IsaURBQWlESixDQUFDLENBQUN1RCxRQUFGLEVBQW5FO0FBQ0FDLFFBQUFBLE9BQU87QUFDVjtBQUNKLEtBZk0sQ0FBUDtBQWdCSDs7QUFFb0MsUUFBL0JaLCtCQUErQixDQUFDNUIsTUFBRCxFQUFTO0FBQzFDLFdBQU8sSUFBSTZELE9BQUosQ0FBWSxDQUFDckIsT0FBRCxFQUFVc0IsTUFBVixLQUFxQjtBQUNwQyxZQUFNbUYsV0FBVyxHQUFHO0FBQ2hCakosUUFBQUEsTUFBTSxFQUFFQSxNQUFNLEtBQUssUUFBWCxHQUFzQixRQUF0QixHQUFpQztBQUR6QixPQUFwQjtBQUlBLFlBQU1wRyxPQUFPLEdBQUc7QUFDWitCLFFBQUFBLEdBQUcsRUFBRyxrREFBaUQsS0FBS21DLE1BQUwsQ0FBWUcsU0FBVSxPQURqRTtBQUVaMEwsUUFBQUEsTUFBTSxFQUFFLEtBRkk7QUFHWkMsUUFBQUEsSUFBSSxFQUFFLElBSE07QUFJWkMsUUFBQUEsa0JBQWtCLEVBQUUsS0FKUjtBQUtaOUksUUFBQUEsSUFBSSxFQUFFa0ksV0FMTTtBQU1aLGdCQUFRO0FBQ0osa0JBQVEsS0FBS3pNLFFBQUwsQ0FBY0MsSUFEbEI7QUFFSixrQkFBUSxLQUFLRCxRQUFMLENBQWNFLEdBRmxCO0FBR0osNkJBQW1CO0FBSGY7QUFOSSxPQUFoQjs7QUFhQSxVQUFJO0FBQ0EsOEJBQVE5QyxPQUFSLEVBQWlCLENBQUM4RixHQUFELEVBQU1vSyxHQUFOLEVBQVcvSSxJQUFYLEtBQW9CO0FBQ2pDeUIsVUFBQUEsT0FBTztBQUNWLFNBRkQ7QUFHSCxPQUpELENBSUUsT0FBT3hELENBQVAsRUFBVTtBQUNSLGFBQUtqRixNQUFMLENBQVlxRixLQUFaLENBQWtCLG1EQUFtREosQ0FBQyxDQUFDdUQsUUFBRixFQUFyRTtBQUNBQyxRQUFBQSxPQUFPO0FBQ1Y7QUFDSixLQTFCTSxDQUFQO0FBMkJIOztBQUVtQixRQUFkM0YsY0FBYyxDQUFDL0IsV0FBRCxFQUFjO0FBQzlCLFdBQU8sSUFBSStJLE9BQUosQ0FBWSxDQUFDckIsT0FBRCxFQUFVc0IsTUFBVixLQUFxQjtBQUNwQyxZQUFNbEssT0FBTyxHQUFHO0FBQ1orQixRQUFBQSxHQUFHLEVBQUcsR0FBRWIsV0FBWSxFQURSO0FBRVo2TyxRQUFBQSxNQUFNLEVBQUUsS0FGSTtBQUdaQyxRQUFBQSxJQUFJLEVBQUUsS0FITTtBQUlaQyxRQUFBQSxrQkFBa0IsRUFBRTtBQUpSLE9BQWhCOztBQU9BLFVBQUk7QUFDQSw4QkFBUWpRLE9BQVIsRUFBaUIsQ0FBQzhGLEdBQUQsRUFBTW9LLEdBQU4sRUFBVy9JLElBQVgsS0FBb0I7QUFDakMsY0FBSXJCLEdBQUosRUFBUztBQUNMb0UsWUFBQUEsTUFBTSxDQUFDcEUsR0FBRCxDQUFOO0FBQ0gsV0FGRCxNQUdLO0FBQ0QsZ0JBQUlxQixJQUFJLElBQUlBLElBQUksQ0FBQ1YsTUFBYixJQUF1QlUsSUFBSSxDQUFDZ0osT0FBTCxDQUFhLHdCQUFiLElBQXlDLENBQUMsQ0FBckUsRUFBd0U7QUFDcEV2SCxjQUFBQSxPQUFPLENBQUMsSUFBRCxDQUFQO0FBQ0gsYUFGRCxNQUdLO0FBQ0RBLGNBQUFBLE9BQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKO0FBQ0osU0FaRDtBQWFILE9BZEQsQ0FjRSxPQUFPeEQsQ0FBUCxFQUFVO0FBQ1IsYUFBS2pGLE1BQUwsQ0FBWXFGLEtBQVosQ0FBa0IsbURBQW1ESixDQUFDLENBQUN1RCxRQUFGLEVBQXJFO0FBQ0FDLFFBQUFBLE9BQU87QUFDVjtBQUNKLEtBMUJNLENBQVA7QUEyQkgsR0FwekJrRCxDQXN6Qm5EOzs7QUFDdUMsUUFBakNlLGlDQUFpQyxDQUFDRCxTQUFTLEdBQUcsS0FBYixFQUFvQjtBQUN2RCxRQUFJLENBQUMsS0FBSzFHLG1CQUFWLEVBQStCO0FBQzNCO0FBQ0g7O0FBQ0QsUUFBSSxDQUFDLEtBQUtoRCxPQUFMLENBQWFvUSxXQUFkLElBQTZCLENBQUMxRyxTQUFsQyxFQUE2QztBQUN6QztBQUNIOztBQUNELFVBQU0yRyxZQUFZLEdBQUksR0FBRSxLQUFLdE4sZUFBZ0IsVUFBUyxLQUFLc0IsU0FBVSxNQUFyRTtBQUNBLFVBQU1pTSxRQUFRLEdBQUksR0FBRSxLQUFLak0sU0FBVSxNQUFuQztBQUNBLFNBQUtuRSxFQUFMLENBQVFxUSxXQUFSLENBQW9CakgsSUFBcEIsQ0FBeUJ4RixlQUFTME0sa0JBQVQsQ0FBNEJGLFFBQTVCLEVBQXNDRCxZQUF0QyxDQUF6QjtBQUNIOztBQWowQmtEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSB3ZWJcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIGJyb3dzZXIgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKk5vdGVzOioqICBcclxuICogICBcclxuICogQ29tbWFuZHMgd2hpY2ggb3BlcmF0ZSBvbiBlbGVtZW50cyBzdWNoIGFzIGNsaWNrLCBhc3NlcnQsIHdhaXRGb3IsIHR5cGUsIHNlbGVjdCwgYW5kIG90aGVycyB3aWxsIGF1dG9tYXRpY2FsbHkgd2FpdCBmb3IgYSBwZXJpb2Qgb2YgdGltZSBmb3IgdGhlIGVsZW1lbnQgdG8gYXBwZWFyIGluIERPTSBhbmQgYmVjb21lIHZpc2libGUuIEJ5IGRlZmF1bHQgdGhpcyBwZXJpb2QgZXF1YWxzIHRvIDYwIHNlY29uZHMsIGJ1dCBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgYHNldFRpbWVvdXRgY29tbWFuZC5cclxuICogICBcclxuICogKipTdHJpbmcgbWF0Y2hpbmcgcGF0dGVybnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICAqIGByZWdleDpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYHJlZ2V4aTpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAgKiBgZXhhY3Q6U1RSSU5HYCAtIE1hdGNoIHRoZSBzdHJpbmcgdmVyYmF0aW0uXHJcbiAqICAqIGBnbG9iOlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSBnbG9iIHBhdHRlcm4uIGA/YCB3aWxsIG1hdGNoIGFueSBzaW5nbGUgY2hhcmFjdGVyIGV4Y2VwdCBuZXcgbGluZSBcXChcXG5cXCkuIGAqYCB3aWxsIG1hdGNoIGFueSBzZXF1ZW5jZSBcXCgwIG9yIG1vcmVcXCkgb2YgY2hhcmFjdGVycyBleGNlcHQgbmV3IGxpbmUuIEVtcHR5ICAgICBQQVRURVJOIHdpbGwgbWF0Y2ggb25seSBvdGhlciBlbXB0eSBzdHJpbmdzLlxyXG4gKiAgKiBgUEFUVEVSTmAgLSBTYW1lIGFzIGdsb2IgbWF0Y2hpbmcuICBcclxuICpcclxuICogKipMb2NhdG9yczoqKiBcclxuICogXHJcbiAqICBDb21tYW5kcyB3aGljaCBleHBlY3QgYW4gZWxlbWVudCBsb2NhdG9yIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgbG9jYXRvciB0eXBlcyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElEIGF0dHJpYnV0ZS5cclxuICogICogYGNzcz1DU1NfU0VMRUNUT1JgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgQ1NTIHNlbGVjdG9yLlxyXG4gKiAgKiBgbGluaz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBtYXRjaGVzIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICAqIGBsaW5rLWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBsaW5rIGVsZW1lbnQgd2hvc2UgdmlzaWJsZSB0ZXh0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBOQU1FIGF0dHJpYnV0ZS5cclxuICogICogYHRhZz1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdGFnIG5hbWUuXHJcbiAqICAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAgKiBgKFhQQVRIKVtdYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICovXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBxdW90ZXMgKi9cclxuaW1wb3J0IHsgaGFyRnJvbU1lc3NhZ2VzIH0gZnJvbSAnY2hyb21lLWhhcic7XHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnO1xyXG5pbXBvcnQgU2F1Y2VMYWJzIGZyb20gJ3NhdWNlbGFicyc7XHJcbmltcG9ydCBsYW1iZGFSZXN0Q2xpZW50IGZyb20gJ0BsYW1iZGF0ZXN0L25vZGUtcmVzdC1jbGllbnQnO1xyXG5pbXBvcnQgVGVzdGluZ0JvdCBmcm9tICd0ZXN0aW5nYm90LWFwaSc7XHJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCBwZXJmZWN0b1JlcG9ydGluZyBmcm9tICdwZXJmZWN0by1yZXBvcnRpbmcnO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tICdyZXF1ZXN0JztcclxuaW1wb3J0IG1lcmdlSW1hZ2VzIGZyb20gJy4uL2xpYi9pbWctbWVyZ2UnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3ZWInO1xyXG5jb25zdCBERUZBVUxUX1NFTEVOSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9CUk9XU0VSX05BTUUgPSAnY2hyb21lJztcclxuY29uc3QgREVGQVVMVF9NT0JJTEVfQlJPV1NFUiA9ICdkZWZhdWx0JztcclxuY29uc3QgTk9fU0NSRUVOU0hPVF9DT01NQU5EUyA9IFsnaW5pdCcsICdhc3NlcnRBbGVydCddO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCAnY2xpY2snXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTsgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24tPmhhciBkaWN0aW9uYXJ5XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xyXG4gICAgICAgIC8vIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBtb2R1bGUgY29tbWFuZHMgbWlnaHQgcmVmZXIgdG8gdGhpcy5PeEVycm9yIGFuZCB0aGlzLmVyckhlbHBlcilcclxuICAgICAgICB0aGlzLk94RXJyb3IgPSBPeEVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xyXG4gICAgICAgIC8vIGhvbGRzIGVsZW1lbnQgb3BlcmF0aW9uIHRpbWVvdXQgdmFsdWVcclxuICAgICAgICB0aGlzLndhaXRGb3JUaW1lb3V0ID0gREVGQVVMVF9XQUlUX1RJTUVPVVQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldERyaXZlclxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyBXRElPIGRyaXZlci5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gV0RJTyBkcml2ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldERyaXZlcigpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RHJpdmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0aWVzXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGN1cnJlbnRseSBkZWZpbmVkIGNhcGFiaWxpdGllcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRDYXBhYmlsaXRpZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwcyB8fCBzdXBlci5nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBuZXcgU2VsZW5pdW0gc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY2FwcyAtIERlc2lyZWQgY2FwYWJpbGl0aWVzLiBJZiBub3Qgc3BlY2lmaWVkIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRha2VuIGZyb20gc3VpdGUgZGVmaW5pdGlvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc2VsZW5pdW1VcmwgLSBSZW1vdGUgc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2Fwcywgc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICAgICAgLy8gaWYgYXBwaXVtVXJsIHBvaW50cyB0byBhbiBleHRlcm5hbCBleGVjdXRpb24gZ3JpZCAoc3VjaCBhcyBCUylcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcHBpdW1VcmwgJiYgIXRoaXMub3B0aW9ucy5hcHBpdW1Vcmwuc3RhcnRzV2l0aCgnaHR0cDovL2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlbml1bVVybCA9IHRoaXMub3B0aW9ucy5hcHBpdW1Vcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlbml1bVVybCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVVybCB8fCBERUZBVUxUX1NFTEVOSVVNX1VSTDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGFrZSBjYXBhYmlsaXRpZXMgZWl0aGVyIGZyb20gaW5pdCBtZXRob2QgYXJndW1lbnQgb3IgZnJvbSBjb250ZXh0IHBhcmFtZXRlcnMgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgICAgIC8vIG1lcmdlIGNhcGFiaWxpdGllcyBmcm9tIGNvbnRleHQgYW5kIGZyb20gaW5pdCBmdW5jdGlvbiBhcmd1bWVudCwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGNvbnRleHQtcGFzc2VkIGNhcGFiaWxpdGllc1xyXG4gICAgICAgIHRoaXMuY2FwcyA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jdHguY2FwcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY2FwcywgLi4uY2FwcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcG9wdWxhdGUgYnJvd3Nlck5hbWUgY2FwcyBmcm9tIG9wdGlvbnMuIEZJWE1FOiB3aHkgaXMgdGhpcyBldmVuIG5lZWRlZD9cclxuICAgICAgICBsZXQgZGVmYXVsdEJyb3dzZXIgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLm9wdGlvbnMuYnJvd3Nlck5hbWUgfHwgREVGQVVMVF9CUk9XU0VSX05BTUU7XHJcbiAgICAgICAgICAgIGRlZmF1bHRCcm93c2VyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRklYTUU6IHNoYWxsIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBicm93c2VyTmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBuZWl0aGVyIGluIGNhcHMgbm9yIGluIG9wdGlvbnM/IVxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuSU5WQUxJRF9DQVBBQklMSVRJRVMsXHJcbiAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGluaXRpYWxpemUgYHdlYmAgbW9kdWxlIC0gYnJvd3Nlck5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGp1c3QgYnJvd3Nlck5hbWUtc1xyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2llJykge1xyXG4gICAgICAgICAgICAvLyBJRSBpcyBzcGVjaWZpZWQgYXMgJ2llJyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUgYW5kIHBvc3NpYmx5IHN1aXRlc1xyXG4gICAgICAgICAgICAvLyBidXQgc2VsZW5pdW0gc3RhbmRhbG9uZSBzZXJ2ZXIgZXhwZWN0cyAnaW50ZXJuZXQgZXhwbG9yZXInXHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9ICdpbnRlcm5ldCBleHBsb3Jlcic7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHNbJ2xhbWJkYTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgLy8gbGFtYmRhdGVzdCBleHBlY3RzIG9yaWdpbmFsIGNhc2UgbmFtZXNcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIC8vIHBlcmZlY3RvTW9iaWxlIGV4cGVjdHMgb3JpZ2luYWwgY2FzZSBuYW1lc1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzLmJyb3dzZXJOYW1lICE9PSAnTWljcm9zb2Z0RWRnZScpIHtcclxuICAgICAgICAgICAgLy8gc2VsZW5pdW0gc3RhbmRhbG9uZSBzZXJ2ZXIgZXhwZWN0cyBhbGwgYnJvd3Nlck5hbWVzIHRvIGJlIGxvd2VyY2FzZVxyXG4gICAgICAgICAgICAvLyBleGNlcHQgXCJNaWNyb3NvZnRFZGdlXCJcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGp1c3QgY2FwYWJpbGl0aWVzIHRvIGVuYWJsZSBjb2xsZWN0aW5nIGJyb3dzZXIgYW5kIHBlcmZvcm1hbmNlIHN0YXRzIGluIENocm9tZSBcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwc1snZ29vZzpsb2dnaW5nUHJlZnMnXSA9IHsgICAgIC8vIGZvciBDaHJvbWVEcml2ZXIgPj0gNzVcclxuICAgICAgICAgICAgICAgIGJyb3dzZXI6ICdBTEwnLFxyXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2U6ICdBTEwnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgIC8vIHNwZWNpZnlpbmcgdGhpcyBsZWFkcyBDaHJvbWUgNzcrIHRvIHJlZnVzZSBsb2FkaW5nXHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5sb2dnaW5nUHJlZnMgPSB7ICAgICAgICAgICAgIC8vIGZvciBDaHJvbWVEcml2ZXIgPCA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmNocm9tZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBwZXJmTG9nZ2luZ1ByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlTmV0d29yazogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVQYWdlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcG9wdWxhdGUgV0RJTyBvcHRpb25zXHJcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLnBhcnNlKHNlbGVuaXVtVXJsIHx8IERFRkFVTFRfU0VMRU5JVU1fVVJMKTtcclxuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKTtcclxuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xyXG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh1cmwucG9ydCB8fCAocHJvdG9jb2wgPT09ICdodHRwcycgPyA0NDMgOiA4MCkpO1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB1cmwucGF0aG5hbWU7XHJcblxyXG4gICAgICAgIC8vIGF1dGggaXMgbmVlZGVkIG1vc3RseSBmb3IgY2xvdWQgcHJvdmlkZXJzIHN1Y2ggYXMgTGFtYmRhVGVzdFxyXG4gICAgICAgIGlmICh1cmwuYXV0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLndkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogYXV0aFswXSxcclxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVuaXVtVXJsQmFzZSA9IGAke3Byb3RvY29sfTovLyR7aG9zdH06JHtwb3J0fWA7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgc2VsZW5pdW0gaHViIGlzIGJhc2VkIG9uIFNlbGVub2lkLCB0aGVuIGVuYWJsZSB2aWRlbyByZWNvcmRpbmdcclxuICAgICAgICB0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQgPSBhd2FpdCB0aGlzLl9pc1NlbGVub2lkSHViKHRoaXMuc2VsZW5pdW1VcmxCYXNlKTtcclxuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmdPblNlbGVub2lkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddLmVuYWJsZVZpZGVvID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddLmVuYWJsZVZpZGVvID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddLnZpZGVvRnJhbWVSYXRlID0gNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBnZW5lcmF0ZSBXZWJkcml2ZXIuaW8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHdkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMud2Rpb09wdHMgfHwge30sXHJcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcclxuICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogdGhpcy5jYXBzLFxyXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXHJcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxyXG4gICAgICAgICAgICB3YWl0Zm9yVGltZW91dDogNTAwMCwgLy8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgMzAwMFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiAzMTAqMTAwMCxcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgaW5pdEVycm9yID0gbnVsbDtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBtb2RVdGlscy5kZXRlcm1pbmVQcm92aWRlcih3ZGlvT3B0cyk7XHJcblxyXG4gICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgd2Rpb09wdHMucGF0aCA9ICcvbmV4cGVyaWVuY2UvcGVyZmVjdG9tb2JpbGUvd2QvaHViJztcclxuICAgICAgICAgICAgd2Rpb09wdHMucG9ydCA9IDgwO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wcm90b2NvbCA9ICdodHRwJztcclxuICAgICAgICAgICAgd2Rpb09wdHMub3BlbkRldmljZVRpbWVvdXQgPSAxNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJ25hbWUnO1xyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXVsnbmFtZSddO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2xhbWJkYTpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydsYW1iZGE6b3B0aW9ucyddWyduYW1lJ10pIHtcclxuICAgICAgICAgICAgbmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1snbGFtYmRhOm9wdGlvbnMnXVsnbmFtZSddO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydsYW1iZGE6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3Rlc3RpbmdCb3Q6b3B0aW9ucyddWyduYW1lJ10pIHtcclxuICAgICAgICAgICAgbmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddWyduYW1lJ10pIHtcclxuICAgICAgICAgICAgbmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXVsnbmFtZSddO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBicm93c2VyIGZvciBtb2JpbGUgd2ViIHRlc3RzLCBpZiBleGVjdXRlZCBhZ2FpbnN0IHJlbW90ZSBkZXZpY2VzIG9mIGEgY2xvdWQgcHJvdmlkZXJcclxuICAgICAgICBpZiAoZGVmYXVsdEJyb3dzZXIgJiYgcHJvdmlkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID0gREVGQVVMVF9NT0JJTEVfQlJPV1NFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53ZGlvT3B0cyA9IHdkaW9PcHRzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gYXdhaXQgd2Rpby5yZW1vdGUod2Rpb09wdHMpO1xyXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIucHJvdmlkZXIgPSBwcm92aWRlcjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZmVjdG9FeGVjdXRpb25Db250ZXh0ID0gYXdhaXQgbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2ViZHJpdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQ6IGFzeW5jIChjb21tYW5kLCBwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGNvbW1hbmQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nQ2xpZW50ID0gbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50KHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RhcnQobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJySGVscGVyLmdldFNlbGVuaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzZXQgYnJvd3NlciBsb2dzIGlmIGF1dG8gY29sbGVjdCBsb2dzIG9wdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2ltcGx5IGNhbGwgdGhpcyB0byBjbGVhciB0aGUgcHJldmlvdXMgbG9ncyBhbmQgc3RhcnQgdGhlIHRlc3Qgd2l0aCB0aGUgY2xlYW4gbG9nc1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgW21vZFV0aWxzLnByb3ZpZGVyLkxBTUJEQVRFU1QsIG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSywgbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE9dLmluY2x1ZGVzKHRoaXMuZHJpdmVyLnByb3ZpZGVyKVxyXG4gICAgICAgICAgICAgICAgLy9bJ01pY3Jvc29mdEVkZ2UnLCAnbXNlZGdlJywgJ0VkZ2UnLCAnSW50ZXJuZXQgRXhwbG9yZXInXS5pbmNsdWRlcyh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90IG1heGltaXplIHdpbmRvdyBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGV4dGVybmFsIGNsb3VkIHByb3ZpZGVyIGluZnJhc3RydWN0dXJlXHJcbiAgICAgICAgICAgICAgICAvLyBhcyBtb3N0IG9mIGNsb3VkIHByb3ZpZGVycyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIG1heGltaXplIGJyb3dzZXIgd2luZG93XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5tYXhpbWl6ZVdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGluaXRpYWwgVGltZW91dFxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCxcclxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aGlzLndhaXRGb3JUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5VTktOT1dOX0VSUk9SLCBlcnIubWVzc2FnZSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAc3VtbWFyeSBFbmRzIHRoZSBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHN0YXR1cyAtIFRlc3Qgc3RhdHVzLCBlaXRoZXIgYHBhc3NlZGAgb3IgYGZhaWxlZGAuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZSA9IGRlZmVyKCk7XHJcblxyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9ICdwYXNzZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucnMuc3RlcHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnJzLnN0ZXBzKSAmJiB0aGlzLnJzLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZEZpbmRlZCA9IHRoaXMucnMuc3RlcHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWRGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5TQVVDRUxBQlMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ11bJ3VzZXJuYW1lJ107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzS2V5ID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXVsnYWNjZXNzS2V5J107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzc2VkID0gc3RhdHVzID09PSAnUEFTU0VEJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gXCJ7XFxcInBhc3NlZFxcXCI6XCIrcGFzc2VkK1wifVwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBteUFjY291bnQgPSBuZXcgU2F1Y2VMYWJzKHsgdXNlcjogdXNlcm5hbWUsIGtleTogYWNjZXNzS2V5fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXlBY2NvdW50LnVwZGF0ZUpvYih1c2VybmFtZSwgaWQsIGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15QWNjb3VudC5zdG9wSm9iKHVzZXJuYW1lLCBpZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5MQU1CREFURVNUKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvTGFtYmRhVGVzdChzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuVEVTVElOR0JPVCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb1Rlc3RpbmdCb3Qoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0b3Aoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5mYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbnVsbCAmJiBbJ1BBU1NFRCcsJ0ZBSUxFRCddLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlQnJvd3NlcldpbmRvd3Moc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsZWQgb3Igb3RoZXIgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRXJyb3IgZGlzcG9zaW5nIGRyaXZlcjogJywgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlU2Vzc2lvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVsZXRlU2Vzc2lvbiBlcnJvcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbG9zZUJyb3dzZXJXaW5kb3dzKHN0YXR1cykge1xyXG4gICAgICAgIGlmIChzdGF0dXMgJiYgJ0ZBSUxFRCcgPT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoc3RhdHVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcG9zZUNvbnRpbnVlKHN0YXR1cykge1xyXG4gICAgICAgIHRoaXMuZHJpdmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcblxyXG4gICAgICAgIC8vIGNsZWFudXAgY2hyb21lZHJpdmVyJ3Mgb25seSB3aGVuIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIElERSBhbmQgdGVzdCBkaWQgbm90IGZhaWxcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCAmJiAoIXN0YXR1cyB8fCAnRkFJTEVEJyAhPT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKCd0YXNra2lsbCAvSU0gY2hyb21lZHJpdmVyLmV4ZSAvRicsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBjaHJvbWVkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjbGVhbnVwIGVkZ2Vkcml2ZXIncyBvbmx5IHdoZW4gcnVubmluZyBmcm9tIHdpdGhpbiB0aGUgSURFIGFuZCB0ZXN0IGRpZCBub3QgZmFpbFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkICYmICghc3RhdHVzIHx8ICdGQUlMRUQnICE9PSBzdGF0dXMudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGZvciBub3dcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBtc2VkZ2Vkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25TdGFydCgpIHtcclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pdGVyYXRpb25FbmQoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYnJvd3NlciBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncyA9PT0gdHJ1ZSAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEJyb3dzZXJMb2cobG9nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBzaG91bGQgY2xlYXIgdHJhbnNhY3Rpb25zIHRvIGF2b2lkIGR1cGxpY2F0ZSBuYW1lcyBhY3Jvc3MgaXRlcmF0aW9uc1xyXG4gICAgICAgIC8vIGFsc28gc2hvdWxkIHRocm93IG9uIGR1cGxpY2F0ZSBuYW1lcy5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoZXJlIG1pZ2h0IGJlIG5vIHRyYW5zYWN0aW9ucyBzZXQgaWYgdGVzdCBmYWlscyBiZWZvcmUgd2ViLnRyYW5zYWN0aW9uIGNvbW1hbmRcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IGF3YWl0IHRoaXMuX2dldEhBUigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJzLmhhciA9IHRoaXMudHJhbnNhY3Rpb25zO1xyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZCA9IGVycm9yICE9PSB1bmRlZmluZWQgJiYgZXJyb3IgIT09IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYWRkU2VsZW5vaWRWaWRlb0FzVGVzdEF0dGFjaG1lbnQoaGFzRmFpbGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXNBY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHJldHVybiBBQ1RJT05fQ09NTUFORFMuaW5jbHVkZXMobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Rha2VTY3JlZW5zaG90U2lsZW50KG5hbWUpIHtcclxuICAgICAgICBpZiAoIU5PX1NDUkVFTlNIT1RfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3RcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FsbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGFsbCAoc2NyZWVuc2hvdCBhbmQgdGl0bGUpIGltYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFdpbmRvd0hhbmRsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXMpICYmIGhhbmRsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlIG9mIGhhbmRsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc3dpdGNoVG9XaW5kb3coaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFRpdGxlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRUb0ltYWdlID0gcmVxdWlyZSgnLi4vbGliL3RleHQtdG8taW1hZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZUltYWdlID0gYXdhaXQgdGV4dFRvSW1hZ2UuZ2VuZXJhdGUodGl0bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlSW1hZ2UgJiYgdHlwZW9mIHRpdGxlSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVJbWFnZSA9IHRpdGxlSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCh0aXRsZUltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goaW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhbGwgaW1hZ2VzIGludG8gb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRJbWFnZSA9IGF3YWl0IG1lcmdlSW1hZ2VzKGltYWdlcywgeyBkaXJlY3Rpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VkSW1hZ2UgJiYgdHlwZW9mIG1lcmdlZEltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IG1lcmdlZEltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgxKScsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgyKScsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgKDMpJywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90IGlubmVyIGVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2FkanVzdEJyb3dzZXJMb2cobG9nKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBicm93c2VyIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZTogbG9nLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgLy8gY29udmVydCBTRVZFUkUgbG9nIGxldmVsIHRvIEVSUk9SXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwgPT09ICdTRVZFUkUnID8gJ0VSUk9SJyA6IGxvZy5sZXZlbCxcclxuICAgICAgICAgICAgc3JjOiAnYnJvd3NlcidcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBGSVhNRTogVGhlcmUgaXMgYSBidWcgd2l0aCBJRS4gU2VlIHRoZSBjb21tZW50IHdpdGhpbiBmdW5jdGlvbiBib2R5LlxyXG4gICAgICpcclxuICAgICAqICBkb21Db250ZW50TG9hZGVkIChha2EgRmlyc3QgVmlzdWFsIFRpbWUpLSBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgYW5kIG5hdmlnYXRpb25TdGFydC5cclxuICAgICAqICBsb2FkIChha2EgRnVsbCBMb2FkIFRpbWUpICAgICAgICAgICAgICAgLSBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbG9hZEV2ZW50U3RhcnQgYW5kIG5hdmlnYXRpb25TdGFydC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgcHJvY2Vzc2luZyBtb2RlbDpcclxuICAgICAqXHJcbiAgICAgKiAgMS4gbmF2aWdhdGlvblN0YXJ0ICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhcyByZXF1ZXN0ZWQgdGhlIGRvY3VtZW50LlxyXG4gICAgICogIDIuIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBOb3QgcmVsZXZhbnQgdG8gdXMuIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9uYXZpZ2F0aW9uLXRpbWluZy8jcHJvY2VzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cclxuICAgICAqICAzLiBkb21Mb2FkaW5nICAgICAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgc3RhcnRzIHBhcnNpbmcgdGhlIGRvY3VtZW50LlxyXG4gICAgICogIDQuIGRvbUludGVyYWN0aXZlICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXMgZmluaXNoZWQgcGFyc2luZyB0aGUgZG9jdW1lbnQgYW5kIHRoZSB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlLlxyXG4gICAgICogIDUuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ICAgLSBUaGUgZG9jdW1lbnQgaGFzIGJlZW4gY29tcGxldGVseSBsb2FkZWQgYW5kIHBhcnNlZCBhbmQgZGVmZXJyZWQgc2NyaXB0cywgaWYgYW55LCBoYXZlIGV4ZWN1dGVkLiBcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN5bmMgc2NyaXB0cywgaWYgYW55LCBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBleGVjdXRlZC5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVzaGVldHNbMV0sIGltYWdlcywgYW5kIHN1YmZyYW1lcyBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXSAtIFN0eWxlc2hlZXRzIC91c3VhbGx5LyBkZWZlciB0aGlzIGV2ZW50ISAtIGh0dHA6Ly9tb2xpbHkuZGUvd2VibG9nL2RvbWNvbnRlbnRsb2FkZWRcclxuICAgICAqICA2LiBkb21Db250ZW50TG9hZGVkRXZlbnRFbmQgICAgIC0gVGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgY2FsbGJhY2ssIGlmIGFueSwgZmluaXNoZWQgZXhlY3V0aW5nLiBFLmcuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJET00gZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWRcIik7XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgKiAgNy4gZG9tQ29tcGxldGUgICAgICAgICAgICAgICAgICAtIFRoZSBET00gdHJlZSBpcyBjb21wbGV0ZWx5IGJ1aWx0LiBBc3luYyBzY3JpcHRzLCBpZiBhbnksIGhhdmUgZXhlY3V0ZWQuXHJcbiAgICAgKiAgOC4gbG9hZEV2ZW50U3RhcnQgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhdmUgZmluaXNoZWQgbG9hZGluZyBhbGwgdGhlIHJlc291cmNlcyBsaWtlIGltYWdlcywgc3dmLCBldGMuXHJcbiAgICAgKiAgOS4gbG9hZEV2ZW50RW5kICAgICAgICAgICAgICAgICAtIFRoZSBsb2FkIGV2ZW50IGNhbGxiYWNrLCBpZiBhbnksIGZpbmlzaGVkIGV4ZWN1dGluZy5cclxuICAgICAqL1xyXG4gICAgX2dldFN0YXRzKGNvbW1hbmROYW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mZXRjaFN0YXRzICYmIHRoaXMuaXNJbml0aWFsaXplZCAmJiB0aGlzLl9pc0FjdGlvbihjb21tYW5kTmFtZSkpIHtcclxuICAgICAgICAgICAgdmFyIG5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgdmFyIGRvbUNvbnRlbnRMb2FkZWQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgbG9hZCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBzYW1lUGFnZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIGZvbGxvd2luZyBzaXR1YXRpb246XHJcbiAgICAgICAgICAgIC8vIGlmIG5hdmlnYXRlU3RhcnQgZXF1YWxzIHRvIHRoZSBvbmUgd2UgZ290IGZyb20gcHJldmlvdXMgYXR0ZW1wdCAod2UgbmVlZCB0byBzYXZlIGl0KVxyXG4gICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBhcmUgc3RpbGwgb24gdGhlIHNhbWUgcGFnZSBhbmQgZG9uJ3QgbmVlZCB0byByZWNvcmQgbG9hZC9kb21Db250ZW50TG9hZGVkIHRpbWVzXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdEVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypnbG9iYWwgd2luZG93Ki9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGltaW5ncyA9IGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uU3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkRXZlbnRTdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5sb2FkRXZlbnRTdGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltaW5ncy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA+IDAgJiYgdGltaW5ncy5sb2FkRXZlbnRTdGFydCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVBhZ2UgPSB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lICYmIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPT0gdGltaW5ncy5uYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25TdGFydCA9IHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSB0aW1pbmdzLm5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID0gdGltaW5ncy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWRFdmVudFN0YXJ0ID0gdGltaW5ncy5sb2FkRXZlbnRTdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnRMb2FkZWQgPSBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCAtIG5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGxvYWRFdmVudFN0YXJ0IC0gbmF2aWdhdGlvblN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID4gMCAmJiBsb2FkRXZlbnRTdGFydCA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4ZWN1dGVFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgZXJyb3IgaW5zaWRlIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBleGVjdXRlRXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFJldFZhbC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50IGVycm9yIGZyb20gZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmludCBlcnJvciBmcm9tIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFzdEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkbid0IGdldCB0aW1pbmdzLlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbmF2aWdhdGlvblN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNhbWVQYWdlID8ge30gOiB7IERvbUNvbnRlbnRMb2FkZWRFdmVudDogZG9tQ29udGVudExvYWRlZCwgTG9hZEV2ZW50OiBsb2FkIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBuZXcgdHJhbnNhY3Rpb24uXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8ganVzdCBpbiBjYXNlIHVzZXIgcGFzc2VkIGEgY29tcGxleCBvYmplY3QgYnkgbWlzdGFrZVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIGlmIChnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IGF3YWl0IHRoaXMuX2dldEhBUigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNhY3Rpb25zW25hbWVdICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudGVyID0gT2JqZWN0LmtleXModGhpcy50cmFuc2FjdGlvbnMpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zdGFydHNXaXRoKG5hbWUpKS5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lKycgKCMnK2NvdW50ZXIrJyknO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IG1vZFV0aWxzLmdldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50U3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9nZXRIQVIoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRMb2dUeXBlcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKCdwZXJmb3JtYW5jZScpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0TG9ncygncGVyZm9ybWFuY2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpbiBvbmUgaW5zdGFuY2UsIGxvZ3Mgd2FzIG5vdCBpdGVyYWJsZSBmb3Igc29tZSByZWFzb24gLSBoZW5jZSB0aGUgZm9sbG93aW5nIGNoZWNrOlxyXG4gICAgICAgICAgICAgICAgaWYgKCFsb2dzIHx8IHR5cGVvZiBsb2dzW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZ2V0SEFSOiBsb2dzIG5vdCBpdGVyYWJsZTogJyArIEpTT04uc3RyaW5naWZ5KGxvZ3MpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnT2JqID0gSlNPTi5wYXJzZShsb2cubWVzc2FnZSk7ICAgLy8gcmV0dXJuZWQgYXMgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnB1c2gobXNnT2JqLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhciA9IGhhckZyb21NZXNzYWdlcyhldmVudHMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGhhcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmZXRjaCBIQVI6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tXYWl0Rm9yQW5ndWxhcigpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvV2FpdEZvckFuZ3VsYXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQW5ndWxhcih0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhclJvb3RTZWxlY3RvciwgdGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJTb2Z0V2FpdCwgdGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3Qoc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGFtYmRhQ3JlZGVudGlhbHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgYWNjZXNzS2V5OiB0aGlzLndkaW9PcHRzLmtleVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUF1dG9tYXRpb25DbGllbnQgPSBsYW1iZGFSZXN0Q2xpZW50LkF1dG9tYXRpb25DbGllbnQoXHJcbiAgICAgICAgICAgICAgICBsYW1iZGFDcmVkZW50aWFsc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1c19pbmQ6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBsYW1iZGFBdXRvbWF0aW9uQ2xpZW50LnVwZGF0ZVNlc3Npb25CeUlkKHNlc3Npb25JZCwgcmVxdWVzdEJvZHksIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBMYW1iZGFUZXN0OiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90KHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgY29uc3QgdGIgPSBuZXcgVGVzdGluZ0JvdCh7XHJcbiAgICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICBhcGlfc2VjcmV0OiB0aGlzLndkaW9PcHRzLmtleVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgdGVzdERhdGEgPSB7IFwidGVzdFtzdWNjZXNzXVwiIDogc3RhdHVzID09PSAnUEFTU0VEJyA/IFwiMVwiIDogXCIwXCIgfTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRiLnVwZGF0ZVRlc3QodGVzdERhdGEsIHNlc3Npb25JZCwgZnVuY3Rpb24oZXJyb3IsIHRlc3REZXRhaWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIFRlc3RpbmdCb3Q6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/ICdwYXNzZWQnIDogJ2ZhaWxlZCdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxyXG4gICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3Bhc3MnOiB0aGlzLndkaW9PcHRzLmtleSxcclxuICAgICAgICAgICAgICAgICAgICAnc2VuZEltbWVkaWF0ZWx5JzogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gQnJvd3NlcnN0YWNrOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pc1NlbGVub2lkSHViKHNlbGVuaXVtVXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHVybDogYCR7c2VsZW5pdW1Vcmx9YCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICBqc29uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggJiYgYm9keS5pbmRleE9mKCdZb3UgYXJlIHVzaW5nIFNlbGVub2lkJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIEJyb3dzZXJzdGFjazogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB0aGUgdGVzdCBpcyBydW5uaW5nIGluc2lkZSBTZWxlbm9pZCwgdGhlbiBkb3dubG9hZCB0aGUgdmlkZW8gaWYgdGVzdCBoYXMgZmFpbGVkXHJcbiAgICBhc3luYyBfYWRkU2VsZW5vaWRWaWRlb0FzVGVzdEF0dGFjaG1lbnQoaGFzRmFpbGVkID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJlY29yZFZpZGVvICYmICFoYXNGYWlsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2aWRlb0ZpbGVVcmwgPSBgJHt0aGlzLnNlbGVuaXVtVXJsQmFzZX0vdmlkZW8vJHt0aGlzLnNlc3Npb25JZH0ubXA0YDtcclxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGAke3RoaXMuc2Vzc2lvbklkfS5tcDRgO1xyXG4gICAgICAgIHRoaXMucnMuYXR0YWNobWVudHMucHVzaChtb2RVdGlscy5uZXdWaWRlb0F0dGFjaG1lbnQoZmlsZU5hbWUsIHZpZGVvRmlsZVVybCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=
@@ -463,19 +463,19 @@ class OxygenRunner extends _events.EventEmitter {
463
463
  const reRun = reRunCount > 0;
464
464
 
465
465
  if (suite.paramManager) {
466
- _lodash.default.extend(params, suite.paramManager.getValues());
467
-
468
- if (!reRun) {
469
- suite.paramManager.readNext();
466
+ if (reRun) {
467
+ suite.paramManager.readPrev();
470
468
  }
469
+
470
+ _lodash.default.extend(params, suite.paramManager.getValues());
471
471
  }
472
472
 
473
473
  if (caze.paramManager) {
474
- _lodash.default.extend(params, caze.paramManager.getValues());
475
-
476
- if (!reRun) {
477
- caze.paramManager.readNext();
474
+ if (reRun) {
475
+ caze.paramManager.readPrev();
478
476
  }
477
+
478
+ _lodash.default.extend(params, caze.paramManager.getValues());
479
479
  }
480
480
 
481
481
  if (this._debugMode && this._worker && this._worker.debugger && caze.breakpoints) {
@@ -505,6 +505,15 @@ class OxygenRunner extends _events.EventEmitter {
505
505
  caseResult.duration = 0;
506
506
  caseResult.failure = _helper.default.getFailureFromError(e);
507
507
  caseResult.status = _status.default.FAILED;
508
+
509
+ if (suite.paramManager) {
510
+ suite.paramManager.readNext();
511
+ }
512
+
513
+ if (caze.paramManager) {
514
+ caze.paramManager.readNext();
515
+ }
516
+
508
517
  return caseResult;
509
518
  }
510
519
 
@@ -562,6 +571,15 @@ class OxygenRunner extends _events.EventEmitter {
562
571
 
563
572
  const disposeOxygenModules = typeof this._options.autoDispose !== 'boolean' || this._options.autoDispose === true;
564
573
  await this._worker_endSession(caseResult.status, disposeOxygenModules);
574
+
575
+ if (suite.paramManager) {
576
+ suite.paramManager.readNext();
577
+ }
578
+
579
+ if (caze.paramManager) {
580
+ caze.paramManager.readNext();
581
+ }
582
+
565
583
  return caseResult;
566
584
  }
567
585
 
@@ -865,4 +883,4 @@ class OxygenRunner extends _events.EventEmitter {
865
883
  }
866
884
 
867
885
  exports.default = OxygenRunner;
868
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJERUZBVUxUX0lTU1VFUiIsIk1BWF9SRVJVTlMiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImdldFN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVzIiwicmV0dmFsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwic3VpdGUiLCJjYXNlcyIsImNhemUiLCJicmVha3BvaW50cyIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMiLCJyZW1vdmVCcmVha3BvaW50IiwiaWR4IiwiZmlsZSIsImxpbmUiLCJzcGxpY2UiLCJPeHlnZW5SdW5uZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfaWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemluZyIsIl9pc0Rpc3Bvc2luZyIsIl93b3JrZXIiLCJfZGVidWdNb2RlIiwiX3dvcmtlclByb2NMYXN0RXJyb3IiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9zdWl0ZSIsIl9lbnZWYXJzIiwiX3ZhcnMiLCJfY2FwcyIsIl9tb2RDYXBzIiwiX2F0dHJpYnV0ZXMiLCJfb3B0aW9ucyIsIl9sb2NhbFRpbWUiLCJfdGVzdEtpbGxlZCIsIl9zY3JpcHRDb250ZW50TGluZU9mZnNldCIsIl93aGVuRGlzcG9zZWQiLCJnZXRJZCIsImluaXQiLCJjYXBzIiwicmVwb3J0ZXIiLCJFcnJvciIsIl9jd2QiLCJjd2QiLCJwcm9jZXNzIiwiX3JlcG9ydGVyIiwiX2lzSW5pdGlhbGl6ZWQiLCJvcHRFbnYiLCJlbnYiLCJlbnZzIiwiT2JqZWN0Iiwia2V5cyIsImVudlZhcnMiLCJfZW52IiwidGVzdEF0dHJpYnV0ZXMiLCJfc3VpdGVzIiwiZGVidWdQb3J0SWRlIiwiZGVidWdQb3J0IiwiX2RlYnVnUG9ydCIsInNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0IiwibG9jYWxUaW1lIiwiX3N0YXJ0V29ya2VyUHJvY2VzcyIsIl93b3JrZXJfSW5pdE94eWdlbiIsImRpc3Bvc2UiLCJzdGF0dXMiLCJzdG9wRGVidWdnZXIiLCJpc1J1bm5pbmciLCJzdG9wIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiX3Jlc2V0R2xvYmFsVmFyaWFibGVzIiwicnVuIiwib25SdW5uZXJTdGFydCIsImVycm9yIiwicmVzdWx0IiwiX3J1blRlc3QiLCJmYWlsdXJlIiwib25SdW5uZXJFbmQiLCJraWxsIiwiZGVidWdDb250aW51ZSIsImRlYnVnZ2VyIiwiY29udGludWUiLCJ1cGRhdGVCcmVha3BvaW50cyIsImZpbGVQYXRoIiwic2V0QnJlYWtwb2ludHNBY3RpdmUiLCJwcm9taXNlcyIsInRzQnJlYWtwb2ludHMiLCJnZXRCcmVha3BvaW50cyIsInN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVCcCIsImluY2x1ZGVzIiwiYWN0dWFsQ3VycmVudEJwIiwicmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUiLCJ1c2VyU2V0QnAiLCJzZXRCcmVha3BvaW50IiwicHJvbWlzZUFsbFByb21pc2UiLCJhbGwiLCJ0aGVuIiwidmFsdWUiLCJkZWJ1ZyIsImJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMiLCJyZXBsQ2xvc2UiLCJfc2VuZCIsImV2ZW50IiwibmFtZSIsInJlcGxTZW5kIiwiY21kIiwiY29udGVudCIsInJlcGxTdGFydCIsImludm9rZSIsImNsZWFyQnJlYWtwb2ludCIsIlRlc3RSZXN1bHQiLCJzdGFydFRpbWUiLCJnZXRUaW1lU3RhbXAiLCJTdGF0dXMiLCJQQVNTRUQiLCJfd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vayIsInN1aXRlUmVzdWx0IiwiX3J1blN1aXRlIiwiZW5kVGltZSIsImR1cmF0aW9uIiwiaGFzRmFpbGVkU3VpdGVzIiwic29tZSIsInN1aXRlSXRlcmF0aW9ucyIsIngiLCJGQUlMRUQiLCJlbnZpcm9ubWVudCIsImNhcGFiaWxpdGllcyIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2siLCJwYXRoIiwiaXRlcmF0aW9uQ291bnQiLCJzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMiLCJyZVJ1bk9uRmFpbHVyZSIsInJlUnVuT25GYWlsZWQiLCJzdWl0ZUl0ZXJhdGlvbiIsIm9uSXRlcmF0aW9uU3RhcnQiLCJUZXN0U3VpdGVSZXN1bHQiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJpdGVyYXRpb25OdW0iLCJfd29ya2VyX2NhbGxCZWZvcmVTdWl0ZUhvb2siLCJvblN1aXRlU3RhcnQiLCJ1cmkiLCJjYXNlSXRlcmF0aW9uIiwic2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMiLCJvbkNhc2VTdGFydCIsImlkIiwiY2FzZVJlc3VsdCIsInJlUnVuQ291bnQiLCJfcnVuQ2FzZSIsIm9uQ2FzZUVuZCIsIm9uSXRlcmF0aW9uRW5kIiwiV0FSTklORyIsIl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rIiwib25TdWl0ZUVuZCIsInBhcmFtcyIsInJlUnVuIiwicGFyYW1NYW5hZ2VyIiwiXyIsImV4dGVuZCIsImdldFZhbHVlcyIsInJlYWROZXh0IiwiaSIsIl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rIiwiVGVzdENhc2VSZXN1bHQiLCJsb2NhdGlvbiIsIl93b3JrZXJfc3RhcnRTZXNzaW9uIiwicmVzdWx0U3RvcmUiLCJjb250ZXh0IiwibW9kdWxlQ2FwcyIsIl93b3JrZXJfUnVuIiwiX3Byb2Nlc3NUZXN0UmVzdWx0cyIsInN0ZXBzIiwibG9ncyIsImhhciIsImF0dHJpYnV0ZXMiLCJhdHRhY2htZW50cyIsImZhaWxlZFN0ZXBzIiwiZmluZCIsIndhcm5pbmdTdGVwcyIsImlzRW1wdHkiLCJtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQiLCJfd29ya2VyX2NhbGxBZnRlckNhc2VIb29rIiwiZGlzcG9zZU94eWdlbk1vZHVsZXMiLCJhdXRvRGlzcG9zZSIsIl93b3JrZXJfZW5kU2Vzc2lvbiIsIl93aGVuVGVzdENhc2VGaW5pc2hlZCIsInJlamVjdCIsInNjcmlwdE5hbWUiLCJzY3JpcHRQYXRoIiwidmFycyIsInRlc3QiLCJjYXNlIiwiaXRlcmF0aW9uIiwicG9GaWxlIiwicG8iLCJpbml0T3h5Z2VuIiwic3RhcnRTZXNzaW9uIiwiZGlzcG9zZU1vZHVsZXMiLCJlbmRTZXNzaW9uIiwiaW52b2tlVGVzdEhvb2siLCJvbkxvZ0VudHJ5Iiwid29ya2VyUGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJXb3JrZXJQcm9jZXNzIiwic3RhcnQiLCJfaG9va1dvcmtlckV2ZW50cyIsInN0YXJ0RGVidWdnZXIiLCJfaG9va1dvcmtlckRlYnVnZ2VyRXZlbnRzIiwiX3RoaXMiLCJzdWJzY3JpYmUiLCJfaGFuZGxlQmVmb3JlQ29tbWFuZCIsImJpbmQiLCJfaGFuZGxlQWZ0ZXJDb21tYW5kIiwib24iLCJwYXlsb2FkIiwiZXhpdERvbmUiLCJlbWl0IiwiZXhpdENvZGUiLCJwcm9taXNlIiwiT3h5Z2VuRXJyb3IiLCJlcnJvckNvZGUiLCJTQ1JJUFRfRVJST1IiLCJtc2ciLCJsZXZlbCIsImluZm8iLCJlcnIiLCJ0aW1lIiwic3JjIiwic3RhY2siLCJtZXRob2QiLCJicmVha3BvaW50RGF0YSIsImJyZWFrRXJyb3IiLCJvblN0ZXBTdGFydCIsIm1vZHVsZSIsIm9uU3RlcEVuZCIsIl9lbWl0SXRlcmF0aW9uRW5kIiwidHMiLCJ0YyIsInN1aXRlSXRlcmF0aW9uTnVtIiwiY2FzZUl0ZXJhdGlvbk51bSIsImNhc2VJdGVyYXRpb25SZXN1bHQiLCJfc3RhdHVzIiwiX2VtaXRUZXN0RW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFVQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7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RXZCeEssTUFBQUEsT0FBTyxFQUFFdUssbUJBQW1CLENBQUN2SyxPQUFwQixJQUErQixJQUZqQjtBQUd2QnFILE1BQUFBLElBQUksRUFBRTtBQUNGOUMsUUFBQUEsRUFBRSxFQUFFNkYsRUFBRSxDQUFDN0YsRUFBSCxJQUFTLElBRFg7QUFFRjNDLFFBQUFBLElBQUksRUFBRXdJLEVBQUUsQ0FBQ3hJLElBRlA7QUFHRjBGLFFBQUFBLFNBQVMsRUFBRWdELGdCQUhUO0FBSUY5RyxRQUFBQSxjQUFjLEVBQUU0RyxFQUFFLENBQUM1RztBQUpqQixPQUhpQjtBQVN2QnRJLE1BQUFBLEtBQUssRUFBRTtBQUNIcUosUUFBQUEsRUFBRSxFQUFFNEYsRUFBRSxDQUFDNUYsRUFBSCxJQUFTLElBRFY7QUFFSDNDLFFBQUFBLElBQUksRUFBRXVJLEVBQUUsQ0FBQ3ZJLElBRk47QUFHSDBGLFFBQUFBLFNBQVMsRUFBRStDLGlCQUhSO0FBSUg3RyxRQUFBQSxjQUFjLEVBQUUyRyxFQUFFLENBQUMzRztBQUpoQjtBQVRnQixLQUEzQjtBQWdCSDs7QUFFRGlILEVBQUFBLFlBQVksQ0FBQzNLLE1BQUQsRUFBUztBQUNqQixTQUFLaUosSUFBTCxDQUFVLFVBQVYsRUFBc0JqSixNQUF0QjtBQUNIOztBQXB4QmtEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvciAqL1xyXG4vKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vLi4vbGliL2xvZ2dlcic7XHJcbmNvbnN0IGxvZyA9IGxvZ2dlcignT3h5Z2VuUnVubmVyJyk7XHJcbmNvbnN0IERFRkFVTFRfSVNTVUVSID0gJ3VzZXInO1xyXG5jb25zdCBNQVhfUkVSVU5TID0gMjtcclxuXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCBfICBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmltcG9ydCBUZXN0U3VpdGVSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvc3VpdGUtcmVzdWx0JztcclxuaW1wb3J0IFRlc3RDYXNlUmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL2Nhc2UtcmVzdWx0JztcclxuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xyXG5pbXBvcnQgU3RhdHVzIGZyb20gJy4uLy4uL21vZGVsL3N0YXR1cyc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vLi4vbGliL3V0aWwnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeHlnZW5FcnJvciBmcm9tICcuLi8uLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgUGFyYW1ldGVyTWFuYWdlciBmcm9tICcuLi8uLi9saWIvcGFyYW0tbWFuYWdlci5qcyc7XHJcbmltcG9ydCBXb3JrZXJQcm9jZXNzIGZyb20gJy4uL1dvcmtlclByb2Nlc3MnO1xyXG5cclxuLy8gc25vb3plIGZ1bmN0aW9uIC0gYXN5bmMgd3JhcHBlciBhcm91bmQgc2V0VGltZW91dCBmdW5jdGlvblxyXG5jb25zdCBzbm9vemUgPSBtcyA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuXHJcbmNvbnN0IGdldFN1aXRlc0JyZWFrcG9pbnRzID0gKHN1aXRlcykgPT4ge1xyXG4gICAgY29uc3QgcmV0dmFsID0gW107XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAgIHN1aXRlcyAmJlxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGVzKSAmJlxyXG4gICAgICAgIHN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgICBzdWl0ZXMubWFwKChzdWl0ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzdWl0ZSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGUuY2FzZXMpICYmXHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubWFwKChjYXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjYXplLmJyZWFrcG9pbnRzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5tYXAoKGJyZWFrcG9pbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbC5wdXNoKGJyZWFrcG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXR2YWw7XHJcbn07XHJcblxyXG5jb25zdCByZW1vdmVCcmVha3BvaW50RnJvbVN1aXRlcyA9IChzdWl0ZXMsIHJlbW92ZUJyZWFrcG9pbnQpID0+IHtcclxuICAgIGlmIChcclxuICAgICAgICBzdWl0ZXMgJiZcclxuICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlcykgJiZcclxuICAgICAgICBzdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgc3VpdGUgJiZcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzICYmXHJcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlLmNhc2VzKSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLm1hcCgoY2F6ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY2F6ZS5icmVha3BvaW50cykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMubWFwKChicmVha3BvaW50LCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50LmZpbGUgPT09IHJlbW92ZUJyZWFrcG9pbnQuZmlsZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQubGluZSA9PT0gcmVtb3ZlQnJlYWtwb2ludC5saW5lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3h5Z2VuUnVubmVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8vIGNsYXNzIHZhcmlhYmxlc1xyXG4gICAgICAgIHRoaXMuX2lkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzRGlzcG9zaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm5wbUdSb290RXhlY3V0aW9uICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG9wdGlvbnMubnBtR1Jvb3RFeGVjdXRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBkZWZpbmUgdmFyaWFibGVzIHRvIGl0ZXJhdGUgdGhyb3VnaCB0ZXN0IGNhc2VzIGFuZCB0ZXN0IHN1aXRlIGl0ZXJhdGlvbnNcclxuICAgICAgICB0aGlzLl9zdWl0ZTtcclxuICAgICAgICB0aGlzLl9lbnZWYXJzID0ge307ICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcGFzc2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRlc3RcclxuICAgICAgICB0aGlzLl92YXJzID0ge307ICAgICAvLyB1c2VyLWRlZmluZWQgdmFyaWFibGVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBzY3JpcHRzXHJcbiAgICAgICAgdGhpcy5fY2FwcyA9IHt9OyAvLyBkZXNpcmVkIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBwYXNzZWQgdG8gZWFjaCBtb2R1bGVcclxuICAgICAgICB0aGlzLl9tb2RDYXBzID0ge307XHJcbiAgICAgICAgdGhpcy5fYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2xvY2FsVGltZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCA9IDM7XHJcbiAgICAgICAgLy8gcHJvbWlzZXNcclxuICAgICAgICB0aGlzLl93aGVuRGlzcG9zZWQgPSBkZWZlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICogUHVibGljIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICBnZXRJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdChvcHRpb25zLCBjYXBzID0ge30sIHJlcG9ydGVyKSB7XHJcbiAgICAgICAgLy8gbWFrZSBzdXJlIGF0IGxlYXN0IG9uZSB0ZXN0IHN1aXRlIGlzIGRlZmluZWRcclxuICAgICAgICBpZiAoIW9wdGlvbnMuc3VpdGVzKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5pdGlhbGl6YXRpb24gZmFpbGVkIC0gbm8gdGVzdCBzdWl0ZXMgYXJlIGRlZmluZWQuIFlvdSBtdXN0IGRlZmluZSBcInN1aXRlc1wiIHByb3BlcnR5IGluIE94eWdlbiBvcHRpb25zLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5fY3dkID0gdGhpcy5fb3B0aW9ucy5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlciA9IHJlcG9ydGVyO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIC8vIG1lcmdlIGN1cnJlbnQgYW5kIHRlc3QgY29uZmlndXJhdGlvbiBiYXNlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcclxuICAgICAgICAgICAgbGV0IG9wdEVudiA9IHt9O1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbnYpIHtcclxuICAgICAgICAgICAgICAgIC8vICdlbnYnIG9wdGlvbiBtaWdodCBiZSBkZWZpbmVkIGVpdGhlciBhcyBhIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IG9yIGFzIGFuIG9iamVjdCB0aGF0IGxpc3RzIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcclxuICAgICAgICAgICAgICAgIC8vIGlmICdlbnYnIGlzIGEgc3RyaW5nLCB0aGVuIHJlc29sdmUgdGhlIGFjdHVhbCB2YXJpYWJsZXMgZnJvbSAnZW52cycgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZW52ID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb3B0aW9ucy5lbnZzID09PSAnb2JqZWN0JyAmJiBvcHRpb25zLmVudnNbb3B0aW9ucy5lbnZdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0RW52ID0gb3B0aW9ucy5lbnZzW29wdGlvbnMuZW52XTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAnZW52JyBpcyBhbiBvYmplY3QsIHVzZSB0aGUgdmFyaWFibGVzIGRlZmluZWQgaW4gaXRcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmVudiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5lbnYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0RW52ID0gb3B0aW9ucy5lbnY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVudlZhcnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5lbnZWYXJzKSkge1xyXG4gICAgICAgICAgICAgICAgb3B0RW52ID0geyAuLi5vcHRFbnYsIC4uLm9wdGlvbnMuZW52VmFycyB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBsYXRlciB1c2VcclxuICAgICAgICAgICAgdGhpcy5fZW52ID0ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZW52LFxyXG4gICAgICAgICAgICAgICAgLi4ub3B0RW52XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSBvcHRpb25zLnRlc3RBdHRyaWJ1dGVzIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2FwcyA9IHsgLi4uY2FwcyB9OyAvLyBhc3NpZ24gY2FwcyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgdGhpcy5fc3VpdGVzID0gWyAuLi5vcHRpb25zLnN1aXRlcyBdO1xyXG4gICAgICAgIC8vIHNldCB1cCBkZWJ1Z2dpbmcgb3B0aW9uc1xyXG4gICAgICAgIC8vIFRPRE86IHRoaXMgbmVlZHMgdG8gYmUgcmVpbXBsZW1lbnRlZC4gRXZlcnl0aGluZyByZWxhdGVkIHRvIGRlYnVnZ2luZyAoaW5pdGlhbGl6ZURlYnVnZ2VyKSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIE94eWdlblxyXG4gICAgICAgIC8vIGFuZCBhZGRlZCB0byBJREUgaW5zdGVhZC4gSS5lLiB0aGUgb25seSB0aGluZyBveHlnZW4gc2hvdWxkIGRvIGlzIHRvIGxhdW5jaCB0aGUgY2hpbGQgcHJvY2VzcyB3aXRoIHRoZSBkZWJ1Z2dpbmcgc3dpdGNoLlxyXG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9ICBvcHRpb25zLmRlYnVnUG9ydElkZSB8fCBvcHRpb25zLmRlYnVnUG9ydCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z1BvcnQgPSBvcHRpb25zLmRlYnVnUG9ydCB8fCBvcHRpb25zLmRlYnVnUG9ydElkZSB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuc2NyaXB0Q29udGVudExpbmVPZmZzZXQgPSB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldDtcclxuICAgICAgICB0aGlzLl9sb2NhbFRpbWUgPSAodGhpcy5fb3B0aW9ucyAmJiB0aGlzLl9vcHRpb25zLmxvY2FsVGltZSkgfHwgdGhpcy5fbG9jYWxUaW1lO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0V29ya2VyUHJvY2VzcygpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9Jbml0T3h5Z2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlciAmJiBhd2FpdCB0aGlzLl93b3JrZXIuc3RvcERlYnVnZ2VyKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmlzUnVubmluZykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0b3Aoc3RhdHVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoZW4gZGlzcG9zaW5nIFJ1bm5lcicsIGUpO1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzIGR1cmluZyB0aGUgZGlzcG9zZVxyXG4gICAgICAgICAgICBsb2cud2FybignRXJyb3Igd2hlbiBkaXNwb3NpbmcgUnVubmVyOicsIGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ0NBTkNFTEVEJykge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldEdsb2JhbFZhcmlhYmxlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBydW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluaXRpYWxpemF0aW9uIGhhc24ndCBiZWVuIGNvbXBsZXRlZCB5ZXQsIHdhaXQgZm9yICdpbml0aWFsaXplZCcgZXZlbnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJldmlvdXMgdGVzdCBpcyBzdGlsbCBydW5uaW5nLCB3YWl0IGZvciAndGVzdC1lbmRlZCcgZXZlbnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uUnVubmVyU3RhcnQodGhpcy5faWQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NhcHMpO1xyXG5cclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1blRlc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFlcnJvciAmJiByZXN1bHQgJiYgcmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSByZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uUnVubmVyRW5kKHRoaXMuX2lkLCByZXN1bHQsIGVycm9yKTtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMga2lsbChzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fdGVzdEtpbGxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmlzUnVubmluZykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIua2lsbChzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWJ1Z0NvbnRpbnVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5jb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVCcmVha3BvaW50cyhicmVha3BvaW50cywgZmlsZVBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVCcmVha3BvaW50cyhicmVha3BvaW50cywgZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdHNCcmVha3BvaW50cyA9IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5nZXRCcmVha3BvaW50cyhmaWxlUGF0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWl0ZXNCcmVha3BvaW50cyA9IGdldFN1aXRlc0JyZWFrcG9pbnRzKHRoaXMuX3N1aXRlcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGJyZWFrcG9pbnRzIGZyb20gc3VpdGVzL2Nhc2VzIHRyZWVcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHN1aXRlQnAgb2Ygc3VpdGVzQnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnRzLmluY2x1ZGVzKHN1aXRlQnAubGluZSkgJiYgIGZpbGVQYXRoID09PSBzdWl0ZUJwLmZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXModGhpcy5fc3VpdGVzLCBzdWl0ZUJwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGRlbGV0ZWQgYnJlYWtwb2ludHNcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGFjdHVhbEN1cnJlbnRCcCBvZiB0c0JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50cy5pbmNsdWRlcyhhY3R1YWxDdXJyZW50QnApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fd29ya2VyLmRlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnRCeVZhbHVlKGZpbGVQYXRoLCBhY3R1YWxDdXJyZW50QnApKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gYWRkIG5ldyBicmVha3BvaW50c1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdXNlclNldEJwIG9mIGJyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0c0JyZWFrcG9pbnRzLmluY2x1ZGVzKHVzZXJTZXRCcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlUGF0aCwgdXNlclNldEJwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlQWxsUHJvbWlzZSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbm9vemUoNTAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ3VwZGF0ZUJyZWFrcG9pbnRzKCkgZG9uZS4nKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zID0gdGhpcy5fd29ya2VyLmRlYnVnZ2VyLmdldEJyZWFrcG9pbnRzKGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwcm9taXNlQWxsUHJvbWlzZSA6IHByb21pc2VBbGxQcm9taXNlLCBicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zIDogYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignRGVidWdnZXIgZXJyb3InLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbENsb3NlKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5fc2VuZCh7XHJcbiAgICAgICAgICAgIGV2ZW50OiAncmVwbCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdyZXBsX3N0b3AnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbFNlbmQoY21kKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLl9zZW5kKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdyZXBsJyxcclxuICAgICAgICAgICAgbmFtZTogJ3JlcGxfZXZhbCcsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICAgIGNtZDogY21kXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXBsU3RhcnQoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZSgncmVwbFN0YXJ0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QnJlYWtwb2ludChsaW5lKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl9zdWl0ZSAmJiB0aGlzLl9zdWl0ZS50ZXN0Y2FzZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdGMgPSB0aGlzLl9zdWl0ZS50ZXN0Y2FzZXNbdGNpbmRleF07XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1Zygnb3h5Z2VuLnNldEJyZWFrcG9pbnQ6ICcgKyAobGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0KSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50KHRjLm5hbWUsIGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCk7XHJcbiAgICAgICAgfSovXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJCcmVha3BvaW50KGxpbmUpIHtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5jbGVhckJyZWFrcG9pbnQobGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0LCBudWxsKTtcclxuICAgICAgICB9Ki9cclxuICAgIH1cclxuXHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiBQcml2YXRlIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4gICAgYXN5bmMgX3J1blRlc3QoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRlc3RSZXN1bHQoKTtcclxuICAgICAgICByZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgIHJlc3VsdC5zdWl0ZXMgPSBbXTtcclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIC8vIGNhbGwgYmVmb3JlVGVzdCBob29rXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vaygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBzdWl0ZXNcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgdGhpcy5fc3VpdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1blN1aXRlKHN1aXRlKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMucHVzaChzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICByZXN1bHQuZHVyYXRpb24gPSByZXN1bHQuZW5kVGltZSAtIHJlc3VsdC5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN1aXRlcyA9IHJlc3VsdC5zdWl0ZXMuc29tZShzdWl0ZUl0ZXJhdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3VpdGVJdGVyYXRpb25zICYmIEFycmF5LmlzQXJyYXkoc3VpdGVJdGVyYXRpb25zKSAmJiBzdWl0ZUl0ZXJhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlSXRlcmF0aW9ucy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSBoYXNGYWlsZWRTdWl0ZXMgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICByZXN1bHQuZW52aXJvbm1lbnQgPSB7IC4uLnRoaXMuX2VudiB9O1xyXG4gICAgICAgIC8vIGNvbWJpbmUgdGVzdCBkZWZpbmVkIGNhcHMgYW5kIHBlciBtb2R1bGUgY2FwYWJpbGl0aWVzLCB0aGF0IHdlcmUgcGFzc2VkIGJ5IHVzZXIgaW4gZWFjaCBtb2R1bGUncyBpbml0IGZ1bmN0aW9uXHJcbiAgICAgICAgcmVzdWx0LmNhcGFiaWxpdGllcyA9IHsgLi4udGhpcy5fY2FwcywgLi4udGhpcy5fbW9kQ2FwcyB9OyAgICAvLyBhc3NpZ24gYSBjb3B5IG9mIF9jYXBzIG9iamVjdFxyXG4gICAgICAgIHJlc3VsdC5vcHRpb25zID0geyAuLi50aGlzLl9vcHRpb25zIH07ICAvLyBhc3NpZ24gYSBjb3B5IG9mIF9vcHRpb25zIG9iamVjdFxyXG5cclxuICAgICAgICAvLyBpZiBlcnJvciBvY2N1cmVkLCBhZGQgaXQgdG8gdGhlIHN1bW1hcnlcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJUZXN0SG9vayhyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3J1blN1aXRlKHN1aXRlKSB7XHJcbiAgICAgICAgaWYgKCFzdWl0ZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ3N1aXRlIGlzIG51bGwgaW4gX3J1blN1aXRlKCkhISEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWdub3JlIHN1aXRlIHdpdGggbWlzc2luZyBtYW5kYXRvcnkgcHJvcGVydGllc1xyXG4gICAgICAgIGlmICghc3VpdGUubmFtZSAmJiAhc3VpdGUucGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBhbHdheXMgc3BlY2lmeSBzdWl0ZS5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgIGlmICghc3VpdGUuaXRlcmF0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHN1aXRlLml0ZXJhdGlvbkNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICBzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVSdW5PbkZhaWx1cmUgPSB0aGlzLl9vcHRpb25zLnJlUnVuT25GYWlsZWQgfHwgZmFsc2U7XHJcbiAgICAgICAgLy8gc2luZ2xlIHN1aXRlIG1pZ2h0IHByb2R1Y2UgbXVsdGlwbGUgcmVzdWx0cywgYmFzZWQgb24gYW1vdW50IG9mIGRlZmluZWQgaXRlcmF0aW9uc1xyXG4gICAgICAgIGNvbnN0IHN1aXRlSXRlcmF0aW9ucyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHN1aXRlSXRlcmF0aW9uPTE7IHN1aXRlSXRlcmF0aW9uIDw9IHN1aXRlLml0ZXJhdGlvbkNvdW50OyBzdWl0ZUl0ZXJhdGlvbisrKSB7XHJcbiAgICAgICAgICAgIGlmIChzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uU3RhcnQodGhpcy5faWQsIHN1aXRlSXRlcmF0aW9uLCAnU3VpdGUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IG5ldyBUZXN0U3VpdGVSZXN1bHQoKTtcclxuICAgICAgICAgICAgc3VpdGVJdGVyYXRpb25zLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5uYW1lID0gc3VpdGUubmFtZSB8fCBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHN1aXRlLnBhdGgpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IHN1aXRlSXRlcmF0aW9uO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayhzdWl0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uU3VpdGVTdGFydCh0aGlzLl9pZCwgc3VpdGUudXJpLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNhemUgb2Ygc3VpdGUuY2FzZXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBjYXNlcyB3aXRoIG1pc3NpbmcgbWFuZGF0b3J5ICdwYXRoJyBwcm9wZXJ0eSBcclxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhemUubmFtZSA9IG94dXRpbC5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoY2F6ZS5wYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5pdGVyYXRpb25Db3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhemUuaXRlcmF0aW9uQ291bnQgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2FzZUl0ZXJhdGlvbj0xOyBjYXNlSXRlcmF0aW9uIDw9IGNhemUuaXRlcmF0aW9uQ291bnQ7IGNhc2VJdGVyYXRpb24rKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2F6ZSAmJiBjYXplLml0ZXJhdGlvbkNvdW50ICYmIGNhemUuaXRlcmF0aW9uQ291bnQgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uU3RhcnQodGhpcy5faWQsIGNhc2VJdGVyYXRpb24sICdDYXNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBjYXNlIHN0YXJ0IGV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25DYXNlU3RhcnQodGhpcy5faWQsIHN1aXRlLnVyaSB8fCBzdWl0ZS5pZCwgY2F6ZS51cmkgfHwgY2F6ZS5pZCB8fCBjYXplLnBhdGgsIGNhemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vbGV0IHJlUnVuQ291bnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYXNlUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJ1biBvciByZS1ydW4gdGhlIGN1cnJlbnQgdGVzdCBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcmVSdW5Db3VudCA9IDA7IHJlUnVuQ291bnQgPCBNQVhfUkVSVU5TOyByZVJ1bkNvdW50KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZVJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1bkNhc2Uoc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCByZVJ1bkNvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghY2FzZVJlc3VsdCB8fCBjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkgJiYgIXJlUnVuT25GYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYXNlUmVzdWx0ICYmIGNhc2VSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyByZXBvcnQgY2FzZSBlbmQgZXZlbnRcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkNhc2VFbmQodGhpcy5faWQsIHN1aXRlLnVyaSB8fCBzdWl0ZS5pZCwgY2F6ZS51cmkgfHwgY2F6ZS5pZCwgY2FzZVJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uRW5kKHRoaXMuX2lkLCBjYXNlUmVzdWx0LCAnQ2FzZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgY2FzZSByZXN1bHQgdG8gdGhlIHN1aXRlIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0LmNhc2VzLnB1c2goY2FzZVJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGVzdCBjYXNlIGl0ZXJhdGlvbiBoYXMgZmFpbGVkLCB0aGVuIG1hcmsgdGhlIGVudGlyZSB0ZXN0IGNhc2UgYXMgZmFpbGVkLCBcclxuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIGl0ZXJhdGluZyBvdmVyIGl0IGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHRlc3QgY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LmR1cmF0aW9uID0gc3VpdGVSZXN1bHQuZW5kVGltZSAtIHN1aXRlUmVzdWx0LnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uRW5kKHRoaXMuX2lkLCBzdWl0ZVJlc3VsdCwgJ1N1aXRlJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJTdWl0ZUhvb2soc3VpdGUsIHN1aXRlUmVzdWx0KTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIub25TdWl0ZUVuZCh0aGlzLl9pZCwgc3VpdGUudXJpLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZUl0ZXJhdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3J1bkNhc2Uoc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCByZVJ1bkNvdW50ID0gMCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHJlUnVuID0gcmVSdW5Db3VudCA+IDA7XHJcbiAgICAgICAgLy8gZ2V0IHRlc3Qgc3VpdGUncyBwYXJhbWV0ZXJzIGlmIGRlZmluZWRcclxuICAgICAgICAvLyBnZXQgdGhlbSBmaXJzdCBhbmQgdGhlbiBvdmVycmlkZSB3aXRoIHRlc3QgY2FzZSBsZXZlbCBwYXJhbWV0ZXJzIGlmIGRlZmluZWRcclxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIC8qaWYgKHJlUnVuKSB7XHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIucmVhZFByZXYoKTtcclxuICAgICAgICAgICAgfSovXHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgc3VpdGUucGFyYW1NYW5hZ2VyLmdldFZhbHVlcygpKTtcclxuICAgICAgICAgICAgaWYgKCFyZVJ1bikge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVhZCB0ZXN0IGNhc2UncyBuZXh0IGxpbmVzIG9mIHBhcmFtZXRlcnMgaWYgcGFyYW1ldGVyIG1hbmFnZXIgaXMgZGVmaW5lZFxyXG4gICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAvKmlmIChyZVJ1bikge1xyXG4gICAgICAgICAgICAgICAgY2F6ZS5wYXJhbU1hbmFnZXIucmVhZFByZXYoKTtcclxuICAgICAgICAgICAgfSovXHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgY2F6ZS5wYXJhbU1hbmFnZXIuZ2V0VmFsdWVzKCkpO1xyXG4gICAgICAgICAgICBpZiAoIXJlUnVuKSB7XHJcbiAgICAgICAgICAgICAgICBjYXplLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGQgYnJlYWtwb2ludHMgYmVmb3JlIHJ1bm5pbmcgdGhlIHNjcmlwdCBpZiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIGNhemUuYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlZGl0b3IgaW5kZXggc3RhcnRzIGZyb20gMSwgYnV0IHdlIG5lZWQgemVybyBiYXNlZCBpbmRleFxyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjYXplLmJyZWFrcG9pbnRzW2ldLmxpbmU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IGNhemUuYnJlYWtwb2ludHNbaV0uZmlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlLCBsaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpO1xyXG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBuZXcgVGVzdENhc2VSZXN1bHQoKTtcclxuICAgICAgICBjYXNlUmVzdWx0Lm5hbWUgPSBjYXplLm5hbWU7XHJcbiAgICAgICAgY2FzZVJlc3VsdC5sb2NhdGlvbiA9IGNhemUucGF0aDtcclxuICAgICAgICBjYXNlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IGNhc2VJdGVyYXRpb247XHJcbiAgICAgICAgY2FzZVJlc3VsdC5yZVJ1bkNvdW50ID0gcmVSdW5Db3VudDtcclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIGluaXRpYWxpemUgT3h5Z2VuIGFuZCBoYW5kbGUgYW55IHBvc3NpYmxlIGVycm9yXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKCEodGhpcy5fd29ya2VyKSAmJiB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ193b3JrZXJfSW5pdE94eWdlbigpIHRocm93biBhbiBlcnJvcjonLCBlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGFydFRpbWUgPSBjYXNlUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZHVyYXRpb24gPSAwO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGUpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgIHJldHVybiBjYXNlUmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdGFydCBuZXcgdGVzdCBzZXNzaW9uXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX3N0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgIC8vIHJ1biB0aGUgdGVzdCBpbiB0aGUgd29ya2VyIHByb2Nlc3MgYW5kIGhhbmRsZSBhbnkgcG9zc2libGUgZXJyb3JcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgY29uc3QgeyByZXN1bHRTdG9yZSwgY29udGV4dCwgbW9kdWxlQ2FwcywgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX3dvcmtlcl9SdW4oc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgY29udGV4dCwgZXJyb3IsIG1vZHVsZUNhcHMgfSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5kdXJhdGlvbiA9IGNhc2VSZXN1bHQuZW5kVGltZSAtIGNhc2VSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0ZXBzID0gcmVzdWx0U3RvcmUgJiYgcmVzdWx0U3RvcmUuc3RlcHMgPyByZXN1bHRTdG9yZS5zdGVwcyA6IFtdO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmxvZ3MgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5sb2dzID8gcmVzdWx0U3RvcmUubG9ncyA6IFtdO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmhhciA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmhhciA/IHJlc3VsdFN0b3JlLmhhciA6IG51bGw7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQudGVzdEF0dHJpYnV0ZXMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5hdHRyaWJ1dGVzID8gcmVzdWx0U3RvcmUuYXR0cmlidXRlcyA6IG51bGw7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuYXR0YWNobWVudHMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5hdHRhY2htZW50cyA/IHJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSB0ZXN0IGNhc2UgaXRlcmF0aW9uIHN0YXR1cyAtIG1hcmsgaXQgYXMgZmFpbGVkIGlmIGFueSBzdGVwIGhhcyBmYWlsZWRcclxuICAgICAgICAgICAgdmFyIGZhaWxlZFN0ZXBzID0gXy5maW5kKGNhc2VSZXN1bHQuc3RlcHMsIHtzdGF0dXM6IFN0YXR1cy5GQUlMRUR9KTtcclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzdGVwcyB3aXRoIFdhcm5pbmcgc3RhdHVzXHJcbiAgICAgICAgICAgIHZhciB3YXJuaW5nU3RlcHMgPSBfLmZpbmQoY2FzZVJlc3VsdC5zdGVwcywge3N0YXR1czogU3RhdHVzLldBUk5JTkd9KTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBfLmlzRW1wdHkoZmFpbGVkU3RlcHMpICYmICFlcnJvciA/IFN0YXR1cy5QQVNTRUQgOiBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQuZmFpbHVyZSA9IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGVwcyA9IG94dXRpbC5tYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQoY2FzZVJlc3VsdC5zdGVwcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIV8uaXNFbXB0eSh3YXJuaW5nU3RlcHMpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJDYXNlSG9vayhjYXplLCBjYXNlUmVzdWx0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignX3dvcmtlcl9SdW4oKSB0aHJvd24gYW4gZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRpc3Bvc2VPeHlnZW5Nb2R1bGVzID0gdHlwZW9mIHRoaXMuX29wdGlvbnMuYXV0b0Rpc3Bvc2UgIT09ICdib29sZWFuJyB8fCB0aGlzLl9vcHRpb25zLmF1dG9EaXNwb3NlID09PSB0cnVlO1xyXG4gICAgICAgIC8vIGVuZCBzZXNzaW9uIGFuZCBkaXNwb3NlIE94eWdlbiBtb2R1bGVzIGlmIHJlcXVpcmVkXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2VuZFNlc3Npb24oY2FzZVJlc3VsdC5zdGF0dXMsIGRpc3Bvc2VPeHlnZW5Nb2R1bGVzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9SdW4oc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCBwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3dvcmtlcikge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ193b3JrZXIgaXMgbnVsbCBidXQgbm90IHN1cHBvc2UgdG8hJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3doZW5UZXN0Q2FzZUZpbmlzaGVkLnJlamVjdChuZXcgRXJyb3IoJ193b3JrZXIgaXMgbnVsbCcpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YXJ0IHJ1bm5pbmcgdGhlIHRlc3RcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fd29ya2VyLnJ1bih7XHJcbiAgICAgICAgICAgIHNjcmlwdE5hbWU6IGNhemUubmFtZSxcclxuICAgICAgICAgICAgc2NyaXB0UGF0aDogY2F6ZS5wYXRoLFxyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIGVudjogdGhpcy5fZW52LFxyXG4gICAgICAgICAgICAgICAgY2FwczogdGhpcy5fY2FwcyxcclxuICAgICAgICAgICAgICAgIHZhcnM6IHRoaXMuX3ZhcnMsXHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0aGlzLl9hdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgdGVzdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY2F6ZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb246IGNhc2VJdGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHN1aXRlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogc3VpdGVJdGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBvRmlsZTogdGhpcy5fb3B0aW9ucy5wbyB8fCBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfSW5pdE94eWdlbigpIHtcclxuICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbml0T3h5Z2VuKHRoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9zdGFydFNlc3Npb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuc3RhcnRTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdGFydFNlc3Npb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9lbmRTZXNzaW9uKHN0YXR1cyA9IG51bGwsIGRpc3Bvc2VNb2R1bGVzID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmVuZFNlc3Npb24pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmVuZFNlc3Npb24oc3RhdHVzLCBkaXNwb3NlTW9kdWxlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZVRlc3RIb29rKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2spIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlVGVzdCcsIFt0aGlzLl9pZCwgdGhpcy5fb3B0aW9ucywgdGhpcy5fY2Fwc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVUZXN0XCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVUZXN0XCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayhzdWl0ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2spIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlU3VpdGUnLCBbc3VpdGVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYmVmb3JlU3VpdGVcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZVN1aXRlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlQ2FzZScsIFtjYXplXSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYmVmb3JlQ2FzZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlQ2FzZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2NhbGxBZnRlclRlc3RIb29rKHJlc3VsdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlclRlc3QnLCBbdGhpcy5faWQsIHJlc3VsdF0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImFmdGVyVGVzdFwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJUZXN0XCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rKHN1aXRlLCByZXN1bHQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJTdWl0ZScsIFtzdWl0ZSwgcmVzdWx0XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJTdWl0ZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJTdWl0ZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2NhbGxBZnRlckNhc2VIb29rKGNhemUsIHJlc3VsdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlckNhc2UnLCBbY2F6ZSwgcmVzdWx0XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJDYXNlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlckNhc2VcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3N0YXJ0V29ya2VyUHJvY2VzcygpIHtcclxuICAgICAgICBjb25zdCB3b3JrZXJQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3dvcmtlci5qcycpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG5ldyBXb3JrZXJQcm9jZXNzKHRoaXMuX2lkLCB3b3JrZXJQYXRoLCB0aGlzLl9kZWJ1Z01vZGUsIHRoaXMuX2RlYnVnUG9ydCwgJ094eWdlbicsIHRoaXMuX25wbUdSb290RXhlY3V0aW9uKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnQoKTtcclxuICAgICAgICB0aGlzLl9ob29rV29ya2VyRXZlbnRzKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0RGVidWdnZXIoKTtcclxuICAgICAgICB0aGlzLl9ob29rV29ya2VyRGVidWdnZXJFdmVudHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBfaG9va1dvcmtlckV2ZW50cygpIHtcclxuICAgICAgICAvLyBwcmVzZXJ2ZSB0aGlzIG9iamVjdFxyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLl93b3JrZXIuc3Vic2NyaWJlKCdjb21tYW5kOmJlZm9yZScsIHRoaXMuX2hhbmRsZUJlZm9yZUNvbW1hbmQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyLnN1YnNjcmliZSgnY29tbWFuZDphZnRlcicsIHRoaXMuX2hhbmRsZUFmdGVyQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl93b3JrZXIub24oJ2Vycm9yJywgKHBheWxvYWQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdXb3JrZXIgcHJvY2VzcyBlcnJvcjogJywgZXJyb3IpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZXhpdERvbmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgndGVzdC1lcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yID0gZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl93b3JrZXIub24oJ2V4aXQnLCAocGF5bG9hZCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV4aXREb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgeyBleGl0Q29kZSB9ID0gcGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgIGlmIChleGl0Q29kZSAmJiBleGl0Q29kZSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRlc3QgaXMgcnVubmluZyBvciBpcyBiZWluZyBkaXNwb3NlZCBhbmQgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGRpZWQsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIGVuZCB0aGUgdGVzdCBvciBkaXNwb3NhbCB3aXRoIGZhdGFsIGVycm9yXHJcbiAgICAgICAgICAgICAgICAvLyAoY2hpbGQgcHJvY2VzcyBub3Qgc3VwcG9zZSB0byBkaWUgd2l0aCBjb2RlID4gMClcclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5faXNEaXNwb3NpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gX3RoaXMuX3doZW5EaXNwb3NlZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLl9pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gX3RoaXMuX3doZW5UZXN0Q2FzZUZpbmlzaGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gX3RoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChleGl0Q29kZSA9PSAxMzQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBPeHlnZW5FcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnT3V0IG9mIG1lbW9yeSBlcnJvci4gTWFrZSBzdXJlIHRoYXQgeW91IGRvblxcJ3QgaGF2ZSBhbnkgbWVtb3J5IGxlYWtzIGluIHRoZSB0ZXN0IHNjcmlwdC4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IE94eWdlbkVycm9yKGBXb3JrZXIgcHJvY2VzcyBleGl0ZWQgd2l0aCBjb2RlOiAke2V4aXRDb2RlfS5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwcm9taXNlICYmIHByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9yZXNldEdsb2JhbFZhcmlhYmxlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyLm9uKCdtZXNzYWdlJywgYXN5bmMgKG1zZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtc2cubGV2ZWwgPT09ICdERUJVRycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcobXNnLm1zZyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5sZXZlbCA9PT0gJ0lORk8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8obXNnLm1zZyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5sZXZlbCA9PT0gJ0VSUk9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcihtc2cubXNnLCBtc2cuZXJyKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnV0FSTicpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cud2Fybihtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdsb2cnLCBtc2cudGltZSwgbXNnLmxldmVsLCBtc2cubXNnLCBtc2cuc3JjIHx8IERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9yZXBvcnRlciAmJiBfdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShtc2cudGltZSwgbXNnLmxldmVsLCBtc2cubXNnLCBtc2cuc3JjIHx8IERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnbGluZS11cGRhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdsaW5lLXVwZGF0ZScsIG1zZy5saW5lLCBtc2cuc3RhY2ssIG1zZy50aW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAncmVzdWx0LXVwZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtc2cubWV0aG9kID09PSAnaW5pdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdpbml0LWRvbmUnLCBtc2cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICd3b3JrZXJFcnJvcicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd3b3JrZXJFcnJvcjonLCBtc2cpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNwb3NlKCdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMua2lsbCgnZmFpbGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ3JlcGwnKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdyZXBsJywgbXNnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9ob29rV29ya2VyRGVidWdnZXJFdmVudHMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLm9uKCdkZWJ1Z2dlcjpicmVhaycsIChicmVha3BvaW50RGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrcG9pbnQnLCBicmVha3BvaW50RGF0YSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIub24oJ2RlYnVnZ2VyOmJyZWFrRXJyb3InLCAoYnJlYWtFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrcG9pbnRFcnJvcicsIGJyZWFrRXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9oYW5kbGVCZWZvcmVDb21tYW5kKGUpIHtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vblN0ZXBTdGFydCh0aGlzLl9pZCwgZSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubW9kdWxlICYmIGUubW9kdWxlID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlQ29tbWFuZCcsIFtlXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9oYW5kbGVBZnRlckNvbW1hbmQoZSkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uU3RlcEVuZCh0aGlzLl9pZCwgZS5yZXN1bHQpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubW9kdWxlICYmIGUubW9kdWxlID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJDb21tYW5kJywgW2UucmVzdWx0XSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlckNvbW1hbmRcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyQ29tbWFuZFwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfcmVzZXRHbG9iYWxWYXJpYWJsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93aGVuRGlzcG9zZWQgPSBkZWZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgbW9kdWxlQ2FwcywgY29udGV4dCA9IHt9LCBlcnJvciA9IG51bGwgfSkge1xyXG4gICAgICAgIC8vIGlmIHRlc3Qgd2FzIGtpbGxlZCBiZWZvcmUgYW55IHJlc3VsdHMgd2VyZSBnZW5lcmF0ZWQsIHRoZW4ganVzdCBmaW5hbGl6ZSB0aGUgdGVzdCB3aXRob3V0IHByb2Nlc3NpbmcgcmVzdWx0c1xyXG4gICAgICAgIGlmICh0aGlzLl90ZXN0S2lsbGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdG9yZSAndmFycycgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgYSBsYXRlciB1c2VcclxuICAgICAgICB0aGlzLl92YXJzID0gY29udGV4dC52YXJzIHx8IHRoaXMuX3ZhcnM7XHJcbiAgICAgICAgLy8gc3RvcmUgJ21vZENhcHMnIHBhcnQgb2YgdGhlIGNvbnRleHQgZm9yIGEgbGF0ZXIgdXNlXHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHsgLi4udGhpcy5fbW9kQ2FwcywgLi4ubW9kdWxlQ2FwcyB8fCB7fSB9O1xyXG4gICAgICAgIC8vIGNsZWFuIHVwIGNvbnRleHQgZnJvbSBpbnRlcm5hbCBlbGVtZW50cywgbm90IG5lZWQgaW4gdGhlIHJlcG9ydDpcclxuICAgICAgICAvLyByZW1vdmUgY2FwcyBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcclxuICAgICAgICBpZiAoY29udGV4dC5jYXBzKVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5jYXBzO1xyXG4gICAgICAgIC8vIHJlbW92ZSBlbnYgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQuZW52KVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5lbnY7XHJcbiAgICAgICAgLy8gcmVtb3ZlIHRlc3QgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQudGVzdClcclxuICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQudGVzdDtcclxuICAgIH1cclxuXHJcbiAgICBfZW1pdEl0ZXJhdGlvbkVuZCh0cywgdGMsIHN1aXRlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdpdGVyYXRpb24tZW5kJywge1xyXG4gICAgICAgICAgICBzdGF0dXM6IGNhc2VJdGVyYXRpb25SZXN1bHQuX3N0YXR1cyxcclxuICAgICAgICAgICAgZmFpbHVyZTogY2FzZUl0ZXJhdGlvblJlc3VsdC5mYWlsdXJlIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNhc2U6IHtcclxuICAgICAgICAgICAgICAgIGlkOiB0Yy5pZCB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdGMubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogY2FzZUl0ZXJhdGlvbk51bSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0Yy5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWl0ZToge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRzLmlkIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0cy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBzdWl0ZUl0ZXJhdGlvbk51bSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0cy5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2VtaXRUZXN0RW5kKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgndGVzdC1lbmQnLCByZXN1bHQpO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IHsgUGFyYW1ldGVyTWFuYWdlciB9OyJdfQ==
886
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJERUZBVUxUX0lTU1VFUiIsIk1BWF9SRVJVTlMiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImdldFN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVzIiwicmV0dmFsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwic3VpdGUiLCJjYXNlcyIsImNhemUiLCJicmVha3BvaW50cyIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMiLCJyZW1vdmVCcmVha3BvaW50IiwiaWR4IiwiZmlsZSIsImxpbmUiLCJzcGxpY2UiLCJPeHlnZW5SdW5uZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfaWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemluZyIsIl9pc0Rpc3Bvc2luZyIsIl93b3JrZXIiLCJfZGVidWdNb2RlIiwiX3dvcmtlclByb2NMYXN0RXJyb3IiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9zdWl0ZSIsIl9lbnZWYXJzIiwiX3ZhcnMiLCJfY2FwcyIsIl9tb2RDYXBzIiwiX2F0dHJpYnV0ZXMiLCJfb3B0aW9ucyIsIl9sb2NhbFRpbWUiLCJfdGVzdEtpbGxlZCIsIl9zY3JpcHRDb250ZW50TGluZU9mZnNldCIsIl93aGVuRGlzcG9zZWQiLCJnZXRJZCIsImluaXQiLCJjYXBzIiwicmVwb3J0ZXIiLCJFcnJvciIsIl9jd2QiLCJjd2QiLCJwcm9jZXNzIiwiX3JlcG9ydGVyIiwiX2lzSW5pdGlhbGl6ZWQiLCJvcHRFbnYiLCJlbnYiLCJlbnZzIiwiT2JqZWN0Iiwia2V5cyIsImVudlZhcnMiLCJfZW52IiwidGVzdEF0dHJpYnV0ZXMiLCJfc3VpdGVzIiwiZGVidWdQb3J0SWRlIiwiZGVidWdQb3J0IiwiX2RlYnVnUG9ydCIsInNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0IiwibG9jYWxUaW1lIiwiX3N0YXJ0V29ya2VyUHJvY2VzcyIsIl93b3JrZXJfSW5pdE94eWdlbiIsImRpc3Bvc2UiLCJzdGF0dXMiLCJzdG9wRGVidWdnZXIiLCJpc1J1bm5pbmciLCJzdG9wIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiX3Jlc2V0R2xvYmFsVmFyaWFibGVzIiwicnVuIiwib25SdW5uZXJTdGFydCIsImVycm9yIiwicmVzdWx0IiwiX3J1blRlc3QiLCJmYWlsdXJlIiwib25SdW5uZXJFbmQiLCJraWxsIiwiZGVidWdDb250aW51ZSIsImRlYnVnZ2VyIiwiY29udGludWUiLCJ1cGRhdGVCcmVha3BvaW50cyIsImZpbGVQYXRoIiwic2V0QnJlYWtwb2ludHNBY3RpdmUiLCJwcm9taXNlcyIsInRzQnJlYWtwb2ludHMiLCJnZXRCcmVha3BvaW50cyIsInN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVCcCIsImluY2x1ZGVzIiwiYWN0dWFsQ3VycmVudEJwIiwicmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUiLCJ1c2VyU2V0QnAiLCJzZXRCcmVha3BvaW50IiwicHJvbWlzZUFsbFByb21pc2UiLCJhbGwiLCJ0aGVuIiwidmFsdWUiLCJkZWJ1ZyIsImJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMiLCJyZXBsQ2xvc2UiLCJfc2VuZCIsImV2ZW50IiwibmFtZSIsInJlcGxTZW5kIiwiY21kIiwiY29udGVudCIsInJlcGxTdGFydCIsImludm9rZSIsImNsZWFyQnJlYWtwb2ludCIsIlRlc3RSZXN1bHQiLCJzdGFydFRpbWUiLCJnZXRUaW1lU3RhbXAiLCJTdGF0dXMiLCJQQVNTRUQiLCJfd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vayIsInN1aXRlUmVzdWx0IiwiX3J1blN1aXRlIiwiZW5kVGltZSIsImR1cmF0aW9uIiwiaGFzRmFpbGVkU3VpdGVzIiwic29tZSIsInN1aXRlSXRlcmF0aW9ucyIsIngiLCJGQUlMRUQiLCJlbnZpcm9ubWVudCIsImNhcGFiaWxpdGllcyIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2siLCJwYXRoIiwiaXRlcmF0aW9uQ291bnQiLCJzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMiLCJyZVJ1bk9uRmFpbHVyZSIsInJlUnVuT25GYWlsZWQiLCJzdWl0ZUl0ZXJhdGlvbiIsIm9uSXRlcmF0aW9uU3RhcnQiLCJUZXN0U3VpdGVSZXN1bHQiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJpdGVyYXRpb25OdW0iLCJfd29ya2VyX2NhbGxCZWZvcmVTdWl0ZUhvb2siLCJvblN1aXRlU3RhcnQiLCJ1cmkiLCJjYXNlSXRlcmF0aW9uIiwic2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMiLCJvbkNhc2VTdGFydCIsImlkIiwiY2FzZVJlc3VsdCIsInJlUnVuQ291bnQiLCJfcnVuQ2FzZSIsIm9uQ2FzZUVuZCIsIm9uSXRlcmF0aW9uRW5kIiwiV0FSTklORyIsIl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rIiwib25TdWl0ZUVuZCIsInBhcmFtcyIsInJlUnVuIiwicGFyYW1NYW5hZ2VyIiwicmVhZFByZXYiLCJfIiwiZXh0ZW5kIiwiZ2V0VmFsdWVzIiwiaSIsIl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rIiwiVGVzdENhc2VSZXN1bHQiLCJsb2NhdGlvbiIsInJlYWROZXh0IiwiX3dvcmtlcl9zdGFydFNlc3Npb24iLCJyZXN1bHRTdG9yZSIsImNvbnRleHQiLCJtb2R1bGVDYXBzIiwiX3dvcmtlcl9SdW4iLCJfcHJvY2Vzc1Rlc3RSZXN1bHRzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiYXR0cmlidXRlcyIsImF0dGFjaG1lbnRzIiwiZmFpbGVkU3RlcHMiLCJmaW5kIiwid2FybmluZ1N0ZXBzIiwiaXNFbXB0eSIsIm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZCIsIl93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2siLCJkaXNwb3NlT3h5Z2VuTW9kdWxlcyIsImF1dG9EaXNwb3NlIiwiX3dvcmtlcl9lbmRTZXNzaW9uIiwiX3doZW5UZXN0Q2FzZUZpbmlzaGVkIiwicmVqZWN0Iiwic2NyaXB0TmFtZSIsInNjcmlwdFBhdGgiLCJ2YXJzIiwidGVzdCIsImNhc2UiLCJpdGVyYXRpb24iLCJwb0ZpbGUiLCJwbyIsImluaXRPeHlnZW4iLCJzdGFydFNlc3Npb24iLCJkaXNwb3NlTW9kdWxlcyIsImVuZFNlc3Npb24iLCJpbnZva2VUZXN0SG9vayIsIm9uTG9nRW50cnkiLCJ3b3JrZXJQYXRoIiwiam9pbiIsIl9fZGlybmFtZSIsIldvcmtlclByb2Nlc3MiLCJzdGFydCIsIl9ob29rV29ya2VyRXZlbnRzIiwic3RhcnREZWJ1Z2dlciIsIl9ob29rV29ya2VyRGVidWdnZXJFdmVudHMiLCJfdGhpcyIsInN1YnNjcmliZSIsIl9oYW5kbGVCZWZvcmVDb21tYW5kIiwiYmluZCIsIl9oYW5kbGVBZnRlckNvbW1hbmQiLCJvbiIsInBheWxvYWQiLCJleGl0RG9uZSIsImVtaXQiLCJleGl0Q29kZSIsInByb21pc2UiLCJPeHlnZW5FcnJvciIsImVycm9yQ29kZSIsIlNDUklQVF9FUlJPUiIsIm1zZyIsImxldmVsIiwiaW5mbyIsImVyciIsInRpbWUiLCJzcmMiLCJzdGFjayIsIm1ldGhvZCIsImJyZWFrcG9pbnREYXRhIiwiYnJlYWtFcnJvciIsIm9uU3RlcFN0YXJ0IiwibW9kdWxlIiwib25TdGVwRW5kIiwiX2VtaXRJdGVyYXRpb25FbmQiLCJ0cyIsInRjIiwic3VpdGVJdGVyYXRpb25OdW0iLCJjYXNlSXRlcmF0aW9uTnVtIiwiY2FzZUl0ZXJhdGlvblJlc3VsdCIsIl9zdGF0dXMiLCJfZW1pdFRlc3RFbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQVVBOztBQUtBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztB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InNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3IgKi9cclxuLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uLy4uL2xpYi9sb2dnZXInO1xyXG5jb25zdCBsb2cgPSBsb2dnZXIoJ094eWdlblJ1bm5lcicpO1xyXG5jb25zdCBERUZBVUxUX0lTU1VFUiA9ICd1c2VyJztcclxuY29uc3QgTUFYX1JFUlVOUyA9IDI7XHJcblxyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgXyAgZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5pbXBvcnQgVGVzdFN1aXRlUmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL3N1aXRlLXJlc3VsdCc7XHJcbmltcG9ydCBUZXN0Q2FzZVJlc3VsdCBmcm9tICcuLi8uLi9tb2RlbC9jYXNlLXJlc3VsdCc7XHJcbmltcG9ydCBUZXN0UmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL3Rlc3QtcmVzdWx0JztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi8uLi9tb2RlbC9zdGF0dXMnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uLy4uL2xpYi91dGlsJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uLy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3h5Z2VuRXJyb3IgZnJvbSAnLi4vLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IFBhcmFtZXRlck1hbmFnZXIgZnJvbSAnLi4vLi4vbGliL3BhcmFtLW1hbmFnZXIuanMnO1xyXG5pbXBvcnQgV29ya2VyUHJvY2VzcyBmcm9tICcuLi9Xb3JrZXJQcm9jZXNzJztcclxuXHJcbi8vIHNub296ZSBmdW5jdGlvbiAtIGFzeW5jIHdyYXBwZXIgYXJvdW5kIHNldFRpbWVvdXQgZnVuY3Rpb25cclxuY29uc3Qgc25vb3plID0gbXMgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XHJcblxyXG5jb25zdCBnZXRTdWl0ZXNCcmVha3BvaW50cyA9IChzdWl0ZXMpID0+IHtcclxuICAgIGNvbnN0IHJldHZhbCA9IFtdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgICBzdWl0ZXMgJiZcclxuICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlcykgJiZcclxuICAgICAgICBzdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgc3VpdGUgJiZcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzICYmXHJcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlLmNhc2VzKSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLm1hcCgoY2F6ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY2F6ZS5icmVha3BvaW50cykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMubWFwKChicmVha3BvaW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwucHVzaChicmVha3BvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0dmFsO1xyXG59O1xyXG5cclxuY29uc3QgcmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMgPSAoc3VpdGVzLCByZW1vdmVCcmVha3BvaW50KSA9PiB7XHJcbiAgICBpZiAoXHJcbiAgICAgICAgc3VpdGVzICYmXHJcbiAgICAgICAgQXJyYXkuaXNBcnJheShzdWl0ZXMpICYmXHJcbiAgICAgICAgc3VpdGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICAgIHN1aXRlcy5tYXAoKHN1aXRlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHN1aXRlICYmXHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcyAmJlxyXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShzdWl0ZS5jYXNlcykgJiZcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5tYXAoKGNhemUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGNhemUuYnJlYWtwb2ludHMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLm1hcCgoYnJlYWtwb2ludCwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5maWxlID09PSByZW1vdmVCcmVha3BvaW50LmZpbGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50LmxpbmUgPT09IHJlbW92ZUJyZWFrcG9pbnQubGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE94eWdlblJ1bm5lciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyBjbGFzcyB2YXJpYWJsZXNcclxuICAgICAgICB0aGlzLl9pZCA9IG94dXRpbC5nZW5lcmF0ZVVuaXF1ZUlkKCk7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXppbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0Rpc3Bvc2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyUHJvY0xhc3RFcnJvciA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuX25wbUdSb290RXhlY3V0aW9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5ucG1HUm9vdEV4ZWN1dGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24gPSBvcHRpb25zLm5wbUdSb290RXhlY3V0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVmaW5lIHZhcmlhYmxlcyB0byBpdGVyYXRlIHRocm91Z2ggdGVzdCBjYXNlcyBhbmQgdGVzdCBzdWl0ZSBpdGVyYXRpb25zXHJcbiAgICAgICAgdGhpcy5fc3VpdGU7XHJcbiAgICAgICAgdGhpcy5fZW52VmFycyA9IHt9OyAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGVzIHBhc3NlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXN0XHJcbiAgICAgICAgdGhpcy5fdmFycyA9IHt9OyAgICAgLy8gdXNlci1kZWZpbmVkIHZhcmlhYmxlcyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBkaWZmZXJlbnQgc2NyaXB0c1xyXG4gICAgICAgIHRoaXMuX2NhcHMgPSB7fTsgLy8gZGVzaXJlZCBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgcGFzc2VkIHRvIGVhY2ggbW9kdWxlXHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9vcHRpb25zID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9sb2NhbFRpbWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90ZXN0S2lsbGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQgPSAzO1xyXG4gICAgICAgIC8vIHByb21pc2VzXHJcbiAgICAgICAgdGhpcy5fd2hlbkRpc3Bvc2VkID0gZGVmZXIoKTtcclxuICAgIH1cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAqIFB1YmxpYyBtZXRob2RzXHJcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gICAgZ2V0SWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQob3B0aW9ucywgY2FwcyA9IHt9LCByZXBvcnRlcikge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSBhdCBsZWFzdCBvbmUgdGVzdCBzdWl0ZSBpcyBkZWZpbmVkXHJcbiAgICAgICAgaWYgKCFvcHRpb25zLnN1aXRlcykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luaXRpYWxpemF0aW9uIGZhaWxlZCAtIG5vIHRlc3Qgc3VpdGVzIGFyZSBkZWZpbmVkLiBZb3UgbXVzdCBkZWZpbmUgXCJzdWl0ZXNcIiBwcm9wZXJ0eSBpbiBPeHlnZW4gb3B0aW9ucy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgIHRoaXMuX2N3ZCA9IHRoaXMuX29wdGlvbnMuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZXIgPSByZXBvcnRlcjtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgICAvLyBtZXJnZSBjdXJyZW50IGFuZCB0ZXN0IGNvbmZpZ3VyYXRpb24gYmFzZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGxldCBvcHRFbnYgPSB7fTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW52KSB7XHJcbiAgICAgICAgICAgICAgICAvLyAnZW52JyBvcHRpb24gbWlnaHQgYmUgZGVmaW5lZCBlaXRoZXIgYXMgYSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCBvciBhcyBhbiBvYmplY3QgdGhhdCBsaXN0cyBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbiAgICAgICAgICAgICAgICAvLyBpZiAnZW52JyBpcyBhIHN0cmluZywgdGhlbiByZXNvbHZlIHRoZSBhY3R1YWwgdmFyaWFibGVzIGZyb20gJ2VudnMnIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmVudiA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG9wdGlvbnMuZW52cyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucy5lbnZzW29wdGlvbnMuZW52XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdEVudiA9IG9wdGlvbnMuZW52c1tvcHRpb25zLmVudl07XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWYgJ2VudicgaXMgYW4gb2JqZWN0LCB1c2UgdGhlIHZhcmlhYmxlcyBkZWZpbmVkIGluIGl0XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5lbnYgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZW52KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdEVudiA9IG9wdGlvbnMuZW52O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbnZWYXJzICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZW52VmFycykpIHtcclxuICAgICAgICAgICAgICAgIG9wdEVudiA9IHsgLi4ub3B0RW52LCAuLi5vcHRpb25zLmVudlZhcnMgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgICAgIHRoaXMuX2VudiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2VudixcclxuICAgICAgICAgICAgICAgIC4uLm9wdEVudlxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzID0gb3B0aW9ucy50ZXN0QXR0cmlidXRlcyB8fCB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NhcHMgPSB7IC4uLmNhcHMgfTsgLy8gYXNzaWduIGNhcHMgZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgIHRoaXMuX3N1aXRlcyA9IFsgLi4ub3B0aW9ucy5zdWl0ZXMgXTtcclxuICAgICAgICAvLyBzZXQgdXAgZGVidWdnaW5nIG9wdGlvbnNcclxuICAgICAgICAvLyBUT0RPOiB0aGlzIG5lZWRzIHRvIGJlIHJlaW1wbGVtZW50ZWQuIEV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgKGluaXRpYWxpemVEZWJ1Z2dlcikgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBPeHlnZW5cclxuICAgICAgICAvLyBhbmQgYWRkZWQgdG8gSURFIGluc3RlYWQuIEkuZS4gdGhlIG9ubHkgdGhpbmcgb3h5Z2VuIHNob3VsZCBkbyBpcyB0byBsYXVuY2ggdGhlIGNoaWxkIHByb2Nlc3Mgd2l0aCB0aGUgZGVidWdnaW5nIHN3aXRjaC5cclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSAgb3B0aW9ucy5kZWJ1Z1BvcnRJZGUgfHwgb3B0aW9ucy5kZWJ1Z1BvcnQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fZGVidWdQb3J0ID0gb3B0aW9ucy5kZWJ1Z1BvcnQgfHwgb3B0aW9ucy5kZWJ1Z1BvcnRJZGUgfHwgbnVsbDtcclxuICAgICAgICBvcHRpb25zLnNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0ID0gdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQ7XHJcbiAgICAgICAgdGhpcy5fbG9jYWxUaW1lID0gKHRoaXMuX29wdGlvbnMgJiYgdGhpcy5fb3B0aW9ucy5sb2NhbFRpbWUpIHx8IHRoaXMuX2xvY2FsVGltZTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zdGFydFdvcmtlclByb2Nlc3MoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX2lzRGlzcG9zaW5nID0gdHJ1ZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIgJiYgYXdhaXQgdGhpcy5fd29ya2VyLnN0b3BEZWJ1Z2dlcigpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdG9wKHN0YXR1cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB3aGVuIGRpc3Bvc2luZyBSdW5uZXInLCBlKTtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9ycyBkdXJpbmcgdGhlIGRpc3Bvc2VcclxuICAgICAgICAgICAgbG9nLndhcm4oJ0Vycm9yIHdoZW4gZGlzcG9zaW5nIFJ1bm5lcjonLCBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdDQU5DRUxFRCcpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRHbG9iYWxWYXJpYWJsZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcnVuKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemluZykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbml0aWFsaXphdGlvbiBoYXNuJ3QgYmVlbiBjb21wbGV0ZWQgeWV0LCB3YWl0IGZvciAnaW5pdGlhbGl6ZWQnIGV2ZW50XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5faXNSdW5uaW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByZXZpb3VzIHRlc3QgaXMgc3RpbGwgcnVubmluZywgd2FpdCBmb3IgJ3Rlc3QtZW5kZWQnIGV2ZW50XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblJ1bm5lclN0YXJ0KHRoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzKTtcclxuXHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5UZXN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZXJyb3IgJiYgcmVzdWx0ICYmIHJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gcmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblJ1bm5lckVuZCh0aGlzLl9pZCwgcmVzdWx0LCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGtpbGwoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmtpbGwoc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVidWdDb250aW51ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlcikge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuY29udGludWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMsIGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNub296ZSg1MDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMsIGZpbGVQYXRoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRzQnJlYWtwb2ludHMgPSB0aGlzLl93b3JrZXIuZGVidWdnZXIuZ2V0QnJlYWtwb2ludHMoZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVzQnJlYWtwb2ludHMgPSBnZXRTdWl0ZXNCcmVha3BvaW50cyh0aGlzLl9zdWl0ZXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBicmVha3BvaW50cyBmcm9tIHN1aXRlcy9jYXNlcyB0cmVlXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWl0ZUJwIG9mIHN1aXRlc0JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50cy5pbmNsdWRlcyhzdWl0ZUJwLmxpbmUpICYmICBmaWxlUGF0aCA9PT0gc3VpdGVCcC5maWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUJyZWFrcG9pbnRGcm9tU3VpdGVzKHRoaXMuX3N1aXRlcywgc3VpdGVCcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBkZWxldGVkIGJyZWFrcG9pbnRzXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhY3R1YWxDdXJyZW50QnAgb2YgdHNCcmVha3BvaW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtwb2ludHMuaW5jbHVkZXMoYWN0dWFsQ3VycmVudEJwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50QnlWYWx1ZShmaWxlUGF0aCwgYWN0dWFsQ3VycmVudEJwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGFkZCBuZXcgYnJlYWtwb2ludHNcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHVzZXJTZXRCcCBvZiBicmVha3BvaW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdHNCcmVha3BvaW50cy5pbmNsdWRlcyh1c2VyU2V0QnApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnQoZmlsZVBhdGgsIHVzZXJTZXRCcCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKCd1cGRhdGVCcmVha3BvaW50cygpIGRvbmUuJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyA9IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5nZXRCcmVha3BvaW50cyhmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJvbWlzZUFsbFByb21pc2UgOiBwcm9taXNlQWxsUHJvbWlzZSwgYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyA6IGJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0RlYnVnZ2VyIGVycm9yJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlcGxDbG9zZSgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuX3NlbmQoe1xyXG4gICAgICAgICAgICBldmVudDogJ3JlcGwnLFxyXG4gICAgICAgICAgICBuYW1lOiAncmVwbF9zdG9wJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlcGxTZW5kKGNtZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5fc2VuZCh7XHJcbiAgICAgICAgICAgIGV2ZW50OiAncmVwbCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdyZXBsX2V2YWwnLFxyXG4gICAgICAgICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgICAgICAgICBjbWQ6IGNtZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbFN0YXJ0KCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2UoJ3JlcGxTdGFydCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJyZWFrcG9pbnQobGluZSkge1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgaWYgKHRoaXMuZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fc3VpdGUgJiYgdGhpcy5fc3VpdGUudGVzdGNhc2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRjID0gdGhpcy5fc3VpdGUudGVzdGNhc2VzW3RjaW5kZXhdO1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoJ294eWdlbi5zZXRCcmVha3BvaW50OiAnICsgKGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCkpO1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludCh0Yy5uYW1lLCBsaW5lICsgdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQpO1xyXG4gICAgICAgIH0qL1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQnJlYWtwb2ludChsaW5lKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlcikge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuY2xlYXJCcmVha3BvaW50KGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCwgbnVsbCk7XHJcbiAgICAgICAgfSovXHJcbiAgICB9XHJcblxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICogUHJpdmF0ZSBtZXRob2RzXHJcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAgIGFzeW5jIF9ydW5UZXN0KCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUZXN0UmVzdWx0KCk7XHJcbiAgICAgICAgcmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICByZXN1bHQuc3VpdGVzID0gW107XHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAvLyBjYWxsIGJlZm9yZVRlc3QgaG9va1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2soKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2ggc3VpdGVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IHN1aXRlIG9mIHRoaXMuX3N1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5TdWl0ZShzdWl0ZSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuc3VpdGVzLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcmVzdWx0LmR1cmF0aW9uID0gcmVzdWx0LmVuZFRpbWUgLSByZXN1bHQuc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNGYWlsZWRTdWl0ZXMgPSByZXN1bHQuc3VpdGVzLnNvbWUoc3VpdGVJdGVyYXRpb25zID0+IHtcclxuICAgICAgICAgICAgaWYgKHN1aXRlSXRlcmF0aW9ucyAmJiBBcnJheS5pc0FycmF5KHN1aXRlSXRlcmF0aW9ucykgJiYgc3VpdGVJdGVyYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdWl0ZUl0ZXJhdGlvbnMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXN1bHQuc3RhdHVzID0gaGFzRmFpbGVkU3VpdGVzID8gU3RhdHVzLkZBSUxFRCA6IFN0YXR1cy5QQVNTRUQ7XHJcbiAgICAgICAgcmVzdWx0LmVudmlyb25tZW50ID0geyAuLi50aGlzLl9lbnYgfTtcclxuICAgICAgICAvLyBjb21iaW5lIHRlc3QgZGVmaW5lZCBjYXBzIGFuZCBwZXIgbW9kdWxlIGNhcGFiaWxpdGllcywgdGhhdCB3ZXJlIHBhc3NlZCBieSB1c2VyIGluIGVhY2ggbW9kdWxlJ3MgaW5pdCBmdW5jdGlvblxyXG4gICAgICAgIHJlc3VsdC5jYXBhYmlsaXRpZXMgPSB7IC4uLnRoaXMuX2NhcHMsIC4uLnRoaXMuX21vZENhcHMgfTsgICAgLy8gYXNzaWduIGEgY29weSBvZiBfY2FwcyBvYmplY3RcclxuICAgICAgICByZXN1bHQub3B0aW9ucyA9IHsgLi4udGhpcy5fb3B0aW9ucyB9OyAgLy8gYXNzaWduIGEgY29weSBvZiBfb3B0aW9ucyBvYmplY3RcclxuXHJcbiAgICAgICAgLy8gaWYgZXJyb3Igb2NjdXJlZCwgYWRkIGl0IHRvIHRoZSBzdW1tYXJ5XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2socmVzdWx0KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9ydW5TdWl0ZShzdWl0ZSkge1xyXG4gICAgICAgIGlmICghc3VpdGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdzdWl0ZSBpcyBudWxsIGluIF9ydW5TdWl0ZSgpISEhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlnbm9yZSBzdWl0ZSB3aXRoIG1pc3NpbmcgbWFuZGF0b3J5IHByb3BlcnRpZXNcclxuICAgICAgICBpZiAoIXN1aXRlLm5hbWUgJiYgIXN1aXRlLnBhdGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gYWx3YXlzIHNwZWNpZnkgc3VpdGUuaXRlcmF0aW9uQ291bnRcclxuICAgICAgICBpZiAoIXN1aXRlLml0ZXJhdGlvbkNvdW50KSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHNob3dTdWl0ZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChzdWl0ZS5pdGVyYXRpb25Db3VudCA+IDEpIHtcclxuICAgICAgICAgICAgc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlUnVuT25GYWlsdXJlID0gdGhpcy5fb3B0aW9ucy5yZVJ1bk9uRmFpbGVkIHx8IGZhbHNlO1xyXG4gICAgICAgIC8vIHNpbmdsZSBzdWl0ZSBtaWdodCBwcm9kdWNlIG11bHRpcGxlIHJlc3VsdHMsIGJhc2VkIG9uIGFtb3VudCBvZiBkZWZpbmVkIGl0ZXJhdGlvbnNcclxuICAgICAgICBjb25zdCBzdWl0ZUl0ZXJhdGlvbnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBzdWl0ZUl0ZXJhdGlvbj0xOyBzdWl0ZUl0ZXJhdGlvbiA8PSBzdWl0ZS5pdGVyYXRpb25Db3VudDsgc3VpdGVJdGVyYXRpb24rKykge1xyXG4gICAgICAgICAgICBpZiAoc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvblN0YXJ0KHRoaXMuX2lkLCBzdWl0ZUl0ZXJhdGlvbiwgJ1N1aXRlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSBuZXcgVGVzdFN1aXRlUmVzdWx0KCk7XHJcbiAgICAgICAgICAgIHN1aXRlSXRlcmF0aW9ucy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQubmFtZSA9IHN1aXRlLm5hbWUgfHwgb3h1dGlsLmdldEZpbGVOYW1lV2l0aG91dEV4dChzdWl0ZS5wYXRoKTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW0gPSBzdWl0ZUl0ZXJhdGlvbjtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVTdWl0ZUhvb2soc3VpdGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vblN1aXRlU3RhcnQodGhpcy5faWQsIHN1aXRlLnVyaSwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjYXplIG9mIHN1aXRlLmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgY2FzZXMgd2l0aCBtaXNzaW5nIG1hbmRhdG9yeSAncGF0aCcgcHJvcGVydHkgXHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjYXplLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXplLm5hbWUgPSBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhemUucGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUuaXRlcmF0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXplLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNhc2VJdGVyYXRpb249MTsgY2FzZUl0ZXJhdGlvbiA8PSBjYXplLml0ZXJhdGlvbkNvdW50OyBjYXNlSXRlcmF0aW9uKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhemUgJiYgY2F6ZS5pdGVyYXRpb25Db3VudCAmJiBjYXplLml0ZXJhdGlvbkNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvblN0YXJ0KHRoaXMuX2lkLCBjYXNlSXRlcmF0aW9uLCAnQ2FzZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyByZXBvcnQgY2FzZSBzdGFydCBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uQ2FzZVN0YXJ0KHRoaXMuX2lkLCBzdWl0ZS51cmkgfHwgc3VpdGUuaWQsIGNhemUudXJpIHx8IGNhemUuaWQgfHwgY2F6ZS5wYXRoLCBjYXplKTtcclxuICAgICAgICAgICAgICAgICAgICAvL2xldCByZVJ1bkNvdW50ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FzZVJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBydW4gb3IgcmUtcnVuIHRoZSBjdXJyZW50IHRlc3QgY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJlUnVuQ291bnQgPSAwOyByZVJ1bkNvdW50IDwgTUFYX1JFUlVOUzsgcmVSdW5Db3VudCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5DYXNlKHN1aXRlLCBjYXplLCBzdWl0ZUl0ZXJhdGlvbiwgY2FzZUl0ZXJhdGlvbiwgcmVSdW5Db3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIWNhc2VSZXN1bHQgfHwgY2FzZVJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpICYmICFyZVJ1bk9uRmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FzZVJlc3VsdCAmJiBjYXNlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwb3J0IGNhc2UgZW5kIGV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25DYXNlRW5kKHRoaXMuX2lkLCBzdWl0ZS51cmkgfHwgc3VpdGUuaWQsIGNhemUudXJpIHx8IGNhemUuaWQsIGNhc2VSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvbkVuZCh0aGlzLl9pZCwgY2FzZVJlc3VsdCwgJ0Nhc2UnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGNhc2UgcmVzdWx0IHRvIHRoZSBzdWl0ZSByZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5jYXNlcy5wdXNoKGNhc2VSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRlc3QgY2FzZSBpdGVyYXRpb24gaGFzIGZhaWxlZCwgdGhlbiBtYXJrIHRoZSBlbnRpcmUgdGVzdCBjYXNlIGFzIGZhaWxlZCwgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RvcCBpdGVyYXRpbmcgb3ZlciBpdCBhbmQgbW92ZSB0byB0aGUgbmV4dCB0ZXN0IGNhc2VcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FzZVJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FzZVJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5kdXJhdGlvbiA9IHN1aXRlUmVzdWx0LmVuZFRpbWUgLSBzdWl0ZVJlc3VsdC5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvbkVuZCh0aGlzLl9pZCwgc3VpdGVSZXN1bHQsICdTdWl0ZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rKHN1aXRlLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uU3VpdGVFbmQodGhpcy5faWQsIHN1aXRlLnVyaSwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VpdGVJdGVyYXRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9ydW5DYXNlKHN1aXRlLCBjYXplLCBzdWl0ZUl0ZXJhdGlvbiwgY2FzZUl0ZXJhdGlvbiwgcmVSdW5Db3VudCA9IDApIHtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcclxuICAgICAgICBjb25zdCByZVJ1biA9IHJlUnVuQ291bnQgPiAwO1xyXG4gICAgICAgIC8vIGdldCB0ZXN0IHN1aXRlJ3MgcGFyYW1ldGVycyBpZiBkZWZpbmVkXHJcbiAgICAgICAgLy8gZ2V0IHRoZW0gZmlyc3QgYW5kIHRoZW4gb3ZlcnJpZGUgd2l0aCB0ZXN0IGNhc2UgbGV2ZWwgcGFyYW1ldGVycyBpZiBkZWZpbmVkXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICBpZiAocmVSdW4pIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkUHJldigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgc3VpdGUucGFyYW1NYW5hZ2VyLmdldFZhbHVlcygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVhZCB0ZXN0IGNhc2UncyBuZXh0IGxpbmVzIG9mIHBhcmFtZXRlcnMgaWYgcGFyYW1ldGVyIG1hbmFnZXIgaXMgZGVmaW5lZFxyXG4gICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICBpZiAocmVSdW4pIHtcclxuICAgICAgICAgICAgICAgIGNhemUucGFyYW1NYW5hZ2VyLnJlYWRQcmV2KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXy5leHRlbmQocGFyYW1zLCBjYXplLnBhcmFtTWFuYWdlci5nZXRWYWx1ZXMoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGQgYnJlYWtwb2ludHMgYmVmb3JlIHJ1bm5pbmcgdGhlIHNjcmlwdCBpZiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIGNhemUuYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlZGl0b3IgaW5kZXggc3RhcnRzIGZyb20gMSwgYnV0IHdlIG5lZWQgemVybyBiYXNlZCBpbmRleFxyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjYXplLmJyZWFrcG9pbnRzW2ldLmxpbmU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IGNhemUuYnJlYWtwb2ludHNbaV0uZmlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlLCBsaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpO1xyXG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBuZXcgVGVzdENhc2VSZXN1bHQoKTtcclxuICAgICAgICBjYXNlUmVzdWx0Lm5hbWUgPSBjYXplLm5hbWU7XHJcbiAgICAgICAgY2FzZVJlc3VsdC5sb2NhdGlvbiA9IGNhemUucGF0aDtcclxuICAgICAgICBjYXNlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IGNhc2VJdGVyYXRpb247XHJcbiAgICAgICAgY2FzZVJlc3VsdC5yZVJ1bkNvdW50ID0gcmVSdW5Db3VudDtcclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIGluaXRpYWxpemUgT3h5Z2VuIGFuZCBoYW5kbGUgYW55IHBvc3NpYmxlIGVycm9yXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKCEodGhpcy5fd29ya2VyKSAmJiB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyX0luaXRPeHlnZW4oKSB0aHJvd24gYW4gZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgY2F6ZS5wYXJhbU1hbmFnZXIucmVhZE5leHQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YXJ0IG5ldyB0ZXN0IHNlc3Npb25cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfc3RhcnRTZXNzaW9uKCk7XHJcbiAgICAgICAgLy8gcnVuIHRoZSB0ZXN0IGluIHRoZSB3b3JrZXIgcHJvY2VzcyBhbmQgaGFuZGxlIGFueSBwb3NzaWJsZSBlcnJvclxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlc3VsdFN0b3JlLCBjb250ZXh0LCBtb2R1bGVDYXBzLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fd29ya2VyX1J1bihzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NUZXN0UmVzdWx0cyh7IHJlc3VsdFN0b3JlLCBjb250ZXh0LCBlcnJvciwgbW9kdWxlQ2FwcyB9KTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gY2FzZVJlc3VsdC5lbmRUaW1lIC0gY2FzZVJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RlcHMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5zdGVwcyA/IHJlc3VsdFN0b3JlLnN0ZXBzIDogW107XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQubG9ncyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmxvZ3MgPyByZXN1bHRTdG9yZS5sb2dzIDogW107XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuaGFyID0gcmVzdWx0U3RvcmUgJiYgcmVzdWx0U3RvcmUuaGFyID8gcmVzdWx0U3RvcmUuaGFyIDogbnVsbDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC50ZXN0QXR0cmlidXRlcyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmF0dHJpYnV0ZXMgPyByZXN1bHRTdG9yZS5hdHRyaWJ1dGVzIDogbnVsbDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5hdHRhY2htZW50cyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzID8gcmVzdWx0U3RvcmUuYXR0YWNobWVudHMgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRlc3QgY2FzZSBpdGVyYXRpb24gc3RhdHVzIC0gbWFyayBpdCBhcyBmYWlsZWQgaWYgYW55IHN0ZXAgaGFzIGZhaWxlZFxyXG4gICAgICAgICAgICB2YXIgZmFpbGVkU3RlcHMgPSBfLmZpbmQoY2FzZVJlc3VsdC5zdGVwcywge3N0YXR1czogU3RhdHVzLkZBSUxFRH0pO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN0ZXBzIHdpdGggV2FybmluZyBzdGF0dXNcclxuICAgICAgICAgICAgdmFyIHdhcm5pbmdTdGVwcyA9IF8uZmluZChjYXNlUmVzdWx0LnN0ZXBzLCB7c3RhdHVzOiBTdGF0dXMuV0FSTklOR30pO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IF8uaXNFbXB0eShmYWlsZWRTdGVwcykgJiYgIWVycm9yID8gU3RhdHVzLlBBU1NFRCA6IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0ZXBzID0gb3h1dGlsLm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZChjYXNlUmVzdWx0LnN0ZXBzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghXy5pc0VtcHR5KHdhcm5pbmdTdGVwcykpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlckNhc2VIb29rKGNhemUsIGNhc2VSZXN1bHQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyX1J1bigpIHRocm93biBhbiBlcnJvcjonLCBlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGlzcG9zZU94eWdlbk1vZHVsZXMgPSB0eXBlb2YgdGhpcy5fb3B0aW9ucy5hdXRvRGlzcG9zZSAhPT0gJ2Jvb2xlYW4nIHx8IHRoaXMuX29wdGlvbnMuYXV0b0Rpc3Bvc2UgPT09IHRydWU7XHJcbiAgICAgICAgLy8gZW5kIHNlc3Npb24gYW5kIGRpc3Bvc2UgT3h5Z2VuIG1vZHVsZXMgaWYgcmVxdWlyZWRcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfZW5kU2Vzc2lvbihjYXNlUmVzdWx0LnN0YXR1cywgZGlzcG9zZU94eWdlbk1vZHVsZXMpO1xyXG5cclxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhemUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIGNhemUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FzZVJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX1J1bihzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHBhcmFtcykge1xyXG4gICAgICAgIGlmICghdGhpcy5fd29ya2VyKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignX3dvcmtlciBpcyBudWxsIGJ1dCBub3Qgc3VwcG9zZSB0byEnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93aGVuVGVzdENhc2VGaW5pc2hlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQucmVqZWN0KG5ldyBFcnJvcignX3dvcmtlciBpcyBudWxsJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc3RhcnQgcnVubmluZyB0aGUgdGVzdFxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93b3JrZXIucnVuKHtcclxuICAgICAgICAgICAgc2NyaXB0TmFtZTogY2F6ZS5uYW1lLFxyXG4gICAgICAgICAgICBzY3JpcHRQYXRoOiBjYXplLnBhdGgsXHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgZW52OiB0aGlzLl9lbnYsXHJcbiAgICAgICAgICAgICAgICBjYXBzOiB0aGlzLl9jYXBzLFxyXG4gICAgICAgICAgICAgICAgdmFyczogdGhpcy5fdmFycyxcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRoaXMuX2F0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICB0ZXN0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjYXplLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogY2FzZUl0ZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc3VpdGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBzdWl0ZUl0ZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcG9GaWxlOiB0aGlzLl9vcHRpb25zLnBvIHx8IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9Jbml0T3h5Z2VuKCkge1xyXG4gICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmluaXRPeHlnZW4odGhpcy5faWQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NhcHMpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX3N0YXJ0U2Vzc2lvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5zdGFydFNlc3Npb24pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2VuZFNlc3Npb24oc3RhdHVzID0gbnVsbCwgZGlzcG9zZU1vZHVsZXMgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZW5kU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZW5kU2Vzc2lvbihzdGF0dXMsIGRpc3Bvc2VNb2R1bGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2soKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVUZXN0JywgW3RoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZVRlc3RcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZVRlc3RcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlU3VpdGVIb29rKHN1aXRlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVTdWl0ZScsIFtzdWl0ZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVTdWl0ZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlU3VpdGVcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlQ2FzZUhvb2soY2F6ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVDYXNlJywgW2NhemVdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDYXNlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDYXNlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2socmVzdWx0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyVGVzdCcsIFt0aGlzLl9pZCwgcmVzdWx0XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJUZXN0XCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlclRlc3RcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQWZ0ZXJTdWl0ZUhvb2soc3VpdGUsIHJlc3VsdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlclN1aXRlJywgW3N1aXRlLCByZXN1bHRdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlclN1aXRlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlclN1aXRlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2soY2F6ZSwgcmVzdWx0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyQ2FzZScsIFtjYXplLCByZXN1bHRdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlckNhc2VcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyQ2FzZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc3RhcnRXb3JrZXJQcm9jZXNzKCkge1xyXG4gICAgICAgIGNvbnN0IHdvcmtlclBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnd29ya2VyLmpzJyk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbmV3IFdvcmtlclByb2Nlc3ModGhpcy5faWQsIHdvcmtlclBhdGgsIHRoaXMuX2RlYnVnTW9kZSwgdGhpcy5fZGVidWdQb3J0LCAnT3h5Z2VuJywgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdGFydCgpO1xyXG4gICAgICAgIHRoaXMuX2hvb2tXb3JrZXJFdmVudHMoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnREZWJ1Z2dlcigpO1xyXG4gICAgICAgIHRoaXMuX2hvb2tXb3JrZXJEZWJ1Z2dlckV2ZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIF9ob29rV29ya2VyRXZlbnRzKCkge1xyXG4gICAgICAgIC8vIHByZXNlcnZlIHRoaXMgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5zdWJzY3JpYmUoJ2NvbW1hbmQ6YmVmb3JlJywgdGhpcy5faGFuZGxlQmVmb3JlQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl93b3JrZXIuc3Vic2NyaWJlKCdjb21tYW5kOmFmdGVyJywgdGhpcy5faGFuZGxlQWZ0ZXJDb21tYW5kLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignZXJyb3InLCAocGF5bG9hZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1dvcmtlciBwcm9jZXNzIGVycm9yOiAnLCBlcnJvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5leGl0RG9uZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgPSBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignZXhpdCcsIChwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdERvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCB7IGV4aXRDb2RlIH0gPSBwYXlsb2FkO1xyXG5cclxuICAgICAgICAgICAgaWYgKGV4aXRDb2RlICYmIGV4aXRDb2RlICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGVzdCBpcyBydW5uaW5nIG9yIGlzIGJlaW5nIGRpc3Bvc2VkIGFuZCB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgZGllZCxcclxuICAgICAgICAgICAgICAgIC8vIHRoZW4gZW5kIHRoZSB0ZXN0IG9yIGRpc3Bvc2FsIHdpdGggZmF0YWwgZXJyb3JcclxuICAgICAgICAgICAgICAgIC8vIChjaGlsZCBwcm9jZXNzIG5vdCBzdXBwb3NlIHRvIGRpZSB3aXRoIGNvZGUgPiAwKVxyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9pc0Rpc3Bvc2luZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBfdGhpcy5fd2hlbkRpc3Bvc2VkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoX3RoaXMuX2lzUnVubmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBfdGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBfdGhpcy5fd29ya2VyUHJvY0xhc3RFcnJvciB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4aXRDb2RlID09IDEzNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdPdXQgb2YgbWVtb3J5IGVycm9yLiBNYWtlIHN1cmUgdGhhdCB5b3UgZG9uXFwndCBoYXZlIGFueSBtZW1vcnkgbGVha3MgaW4gdGhlIHRlc3Qgc2NyaXB0LicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgT3h5Z2VuRXJyb3IoYFdvcmtlciBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGU6ICR7ZXhpdENvZGV9LmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2UgJiYgcHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3Jlc2V0R2xvYmFsVmFyaWFibGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl93b3JrZXIub24oJ21lc3NhZ2UnLCBhc3luYyAobXNnKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1zZy5sZXZlbCA9PT0gJ0RFQlVHJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1Zyhtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnSU5GTycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnRVJST1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKG1zZy5tc2csIG1zZy5lcnIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cubGV2ZWwgPT09ICdXQVJOJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKG1zZy5tc2cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2xvZycsIG1zZy50aW1lLCBtc2cubGV2ZWwsIG1zZy5tc2csIG1zZy5zcmMgfHwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcG9ydGVyICYmIF90aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG1zZy50aW1lLCBtc2cubGV2ZWwsIG1zZy5tc2csIG1zZy5zcmMgfHwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdsaW5lLXVwZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2xpbmUtdXBkYXRlJywgbXNnLmxpbmUsIG1zZy5zdGFjaywgbXNnLnRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdyZXN1bHQtdXBkYXRlJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1zZy5tZXRob2QgPT09ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2luaXQtZG9uZScsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ3dvcmtlckVycm9yJykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3dvcmtlckVycm9yOicsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRpc3Bvc2UoJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5raWxsKCdmYWlsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAncmVwbCcpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3JlcGwnLCBtc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hvb2tXb3JrZXJEZWJ1Z2dlckV2ZW50cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3dvcmtlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIub24oJ2RlYnVnZ2VyOmJyZWFrJywgKGJyZWFrcG9pbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnREYXRhKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5vbignZGVidWdnZXI6YnJlYWtFcnJvcicsIChicmVha0Vycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtwb2ludEVycm9yJywgYnJlYWtFcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZUJlZm9yZUNvbW1hbmQoZSkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uU3RlcFN0YXJ0KHRoaXMuX2lkLCBlKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGUgJiYgZS5tb2R1bGUgJiYgZS5tb2R1bGUgPT09ICdsb2cnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVDb21tYW5kJywgW2VdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZUNvbW1hbmRcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZUNvbW1hbmRcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZUFmdGVyQ29tbWFuZChlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25TdGVwRW5kKHRoaXMuX2lkLCBlLnJlc3VsdCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGUgJiYgZS5tb2R1bGUgJiYgZS5tb2R1bGUgPT09ICdsb2cnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlckNvbW1hbmQnLCBbZS5yZXN1bHRdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImFmdGVyQ29tbWFuZFwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJDb21tYW5kXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9yZXNldEdsb2JhbFZhcmlhYmxlcygpIHtcclxuICAgICAgICB0aGlzLl9tb2RDYXBzID0ge307XHJcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0Rpc3Bvc2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fdGVzdEtpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3doZW5EaXNwb3NlZCA9IGRlZmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NUZXN0UmVzdWx0cyh7IHJlc3VsdFN0b3JlLCBtb2R1bGVDYXBzLCBjb250ZXh0ID0ge30sIGVycm9yID0gbnVsbCB9KSB7XHJcbiAgICAgICAgLy8gaWYgdGVzdCB3YXMga2lsbGVkIGJlZm9yZSBhbnkgcmVzdWx0cyB3ZXJlIGdlbmVyYXRlZCwgdGhlbiBqdXN0IGZpbmFsaXplIHRoZSB0ZXN0IHdpdGhvdXQgcHJvY2Vzc2luZyByZXN1bHRzXHJcbiAgICAgICAgaWYgKHRoaXMuX3Rlc3RLaWxsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3Rlc3QtZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0b3JlICd2YXJzJyBwYXJ0IG9mIHRoZSBjb250ZXh0IGZvciBhIGxhdGVyIHVzZVxyXG4gICAgICAgIHRoaXMuX3ZhcnMgPSBjb250ZXh0LnZhcnMgfHwgdGhpcy5fdmFycztcclxuICAgICAgICAvLyBzdG9yZSAnbW9kQ2FwcycgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgYSBsYXRlciB1c2VcclxuICAgICAgICB0aGlzLl9tb2RDYXBzID0geyAuLi50aGlzLl9tb2RDYXBzLCAuLi5tb2R1bGVDYXBzIHx8IHt9IH07XHJcbiAgICAgICAgLy8gY2xlYW4gdXAgY29udGV4dCBmcm9tIGludGVybmFsIGVsZW1lbnRzLCBub3QgbmVlZCBpbiB0aGUgcmVwb3J0OlxyXG4gICAgICAgIC8vIHJlbW92ZSBjYXBzIGZyb20gdGhlIGNvbnRleHQgYXMgaXQgYWxyZWFkeSBhcHBlYXJzIGluIFRlc3RSZXN1bHQgbm9kZVxyXG4gICAgICAgIGlmIChjb250ZXh0LmNhcHMpXHJcbiAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LmNhcHM7XHJcbiAgICAgICAgLy8gcmVtb3ZlIGVudiBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcclxuICAgICAgICBpZiAoY29udGV4dC5lbnYpXHJcbiAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LmVudjtcclxuICAgICAgICAvLyByZW1vdmUgdGVzdCBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcclxuICAgICAgICBpZiAoY29udGV4dC50ZXN0KVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC50ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIF9lbWl0SXRlcmF0aW9uRW5kKHRzLCB0Yywgc3VpdGVJdGVyYXRpb25OdW0sIGNhc2VJdGVyYXRpb25OdW0sIGNhc2VJdGVyYXRpb25SZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ2l0ZXJhdGlvbi1lbmQnLCB7XHJcbiAgICAgICAgICAgIHN0YXR1czogY2FzZUl0ZXJhdGlvblJlc3VsdC5fc3RhdHVzLFxyXG4gICAgICAgICAgICBmYWlsdXJlOiBjYXNlSXRlcmF0aW9uUmVzdWx0LmZhaWx1cmUgfHwgbnVsbCxcclxuICAgICAgICAgICAgY2FzZToge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRjLmlkIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0Yy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBjYXNlSXRlcmF0aW9uTnVtLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uQ291bnQ6IHRjLml0ZXJhdGlvbkNvdW50XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN1aXRlOiB7XHJcbiAgICAgICAgICAgICAgICBpZDogdHMuaWQgfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRzLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBpdGVyYXRpb246IHN1aXRlSXRlcmF0aW9uTnVtLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uQ291bnQ6IHRzLml0ZXJhdGlvbkNvdW50XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZW1pdFRlc3RFbmQocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVuZCcsIHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgeyBQYXJhbWV0ZXJNYW5hZ2VyIH07Il19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxygen-cli",
3
- "version": "1.33.3",
3
+ "version": "1.33.5",
4
4
  "description": "Automation framework for testing modern applications",
5
5
  "main": "./build/index.js",
6
6
  "bin": {
@@ -57,9 +57,9 @@
57
57
  "@lambdatest/node-rest-client": "1.0.5",
58
58
  "@oxygenhq/logger": "0.5.1",
59
59
  "@oxygenhq/mitmproxy-node": "1.0.1",
60
- "@wdio/cli": "7.30.0",
61
- "@wdio/devtools-service": "7.30.0",
62
- "@wdio/sync": "7.30.0",
60
+ "@wdio/cli": "7.36.0",
61
+ "@wdio/devtools-service": "7.36.0",
62
+ "@wdio/sync": "7.36.0",
63
63
  "async": "3.2.5",
64
64
  "axios": "0.27.2",
65
65
  "canvas": "2.11.2",
@@ -106,7 +106,7 @@
106
106
  "testdouble": "3.16.8",
107
107
  "testingbot-api": "1.0.8",
108
108
  "twilio": "3.84.1",
109
- "webdriverio": "7.30.0",
109
+ "webdriverio": "7.36.0",
110
110
  "when": "3.7.8",
111
111
  "xlsx": "0.18.5"
112
112
  },