appium-chromedriver 4.27.1 → 4.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/chromedriver.js +11 -3
- package/build/lib/install.js +1 -1
- package/build/lib/protocol-helpers.js +1 -1
- package/build/lib/storage-client.js +2 -2
- package/build/lib/utils.js +4 -3
- package/config/mapping.json +11 -0
- package/lib/chromedriver.js +6 -2
- package/lib/storage-client.js +1 -1
- package/package.json +4 -4
|
@@ -221,7 +221,7 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
221
221
|
async getChromeVersion() {
|
|
222
222
|
var _this$details, _this$details3, _this$details3$info;
|
|
223
223
|
|
|
224
|
-
if ((_this$details = this.details)
|
|
224
|
+
if ((_this$details = this.details) !== null && _this$details !== void 0 && _this$details.info) {
|
|
225
225
|
var _this$details2, _this$details2$info;
|
|
226
226
|
|
|
227
227
|
log.debug(`Browser version in the supplied details: ${(_this$details2 = this.details) === null || _this$details2 === void 0 ? void 0 : (_this$details2$info = _this$details2.info) === null || _this$details2$info === void 0 ? void 0 : _this$details2$info.Browser}`);
|
|
@@ -554,12 +554,20 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
554
554
|
let message = '';
|
|
555
555
|
|
|
556
556
|
if (e.message.includes('Chrome version must be')) {
|
|
557
|
-
|
|
557
|
+
var _$exec;
|
|
558
|
+
|
|
559
|
+
message += 'Unable to automate Chrome version because it is not supported by this version of Chromedriver.\n';
|
|
558
560
|
|
|
559
561
|
if (webviewVersion) {
|
|
560
562
|
message += `Chrome version on the device: ${webviewVersion}\n`;
|
|
561
563
|
}
|
|
562
564
|
|
|
565
|
+
const versionsSupportedByDriver = ((_$exec = /Chrome version must be (.+)/.exec(e.message)) === null || _$exec === void 0 ? void 0 : _$exec[1]) || '';
|
|
566
|
+
|
|
567
|
+
if (versionsSupportedByDriver) {
|
|
568
|
+
message += `Chromedriver supports Chrome version(s): ${versionsSupportedByDriver}\n`;
|
|
569
|
+
}
|
|
570
|
+
|
|
563
571
|
message += `Visit '${CHROMEDRIVER_TUTORIAL}' to troubleshoot the problem.\n`;
|
|
564
572
|
}
|
|
565
573
|
|
|
@@ -716,4 +724,4 @@ var _default = Chromedriver;
|
|
|
716
724
|
exports.default = _default;require('source-map-support').install();
|
|
717
725
|
|
|
718
726
|
|
|
719
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jaHJvbWVkcml2ZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04iLCJERUZBVUxUX0hPU1QiLCJNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUIiwiREVGQVVMVF9QT1JUIiwiQ0hST01FX0JVTkRMRV9JRCIsIldFQlZJRVdfU0hFTExfQlVORExFX0lEIiwiV0VCVklFV19CVU5ETEVfSURTIiwiQ0hST01FRFJJVkVSX1RVVE9SSUFMIiwiVkVSU0lPTl9QQVRURVJOIiwiQ0RfVkVSU0lPTl9USU1FT1VUIiwiQ2hyb21lZHJpdmVyIiwiZXZlbnRzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJhcmdzIiwiaG9zdCIsInBvcnQiLCJ1c2VTeXN0ZW1FeGVjdXRhYmxlIiwiZXhlY3V0YWJsZSIsImV4ZWN1dGFibGVEaXIiLCJidW5kbGVJZCIsIm1hcHBpbmdQYXRoIiwiY21kQXJncyIsImFkYiIsInZlcmJvc2UiLCJsb2dQYXRoIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJkZXRhaWxzIiwiaXNBdXRvZG93bmxvYWRFbmFibGVkIiwicHJveHlIb3N0IiwicHJveHlQb3J0IiwicHJvYyIsImNocm9tZWRyaXZlciIsImV4ZWN1dGFibGVWZXJpZmllZCIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsImp3cHJveHkiLCJKV1Byb3h5Iiwic2VydmVyIiwic3RvcmFnZUNsaWVudCIsIkNocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQiLCJjaHJvbWVkcml2ZXJEaXIiLCJjYXBhYmlsaXRpZXMiLCJkZXNpcmVkUHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiZ2V0RHJpdmVyc01hcHBpbmciLCJtYXBwaW5nIiwiXyIsImNsb25lRGVlcCIsIkNIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyIsImRlYnVnIiwiZnMiLCJleGlzdHMiLCJ3YXJuIiwiaW5mbyIsIkpTT04iLCJwYXJzZSIsInJlYWRGaWxlIiwiZXJyIiwibWVzc2FnZSIsImNkVmVyc2lvbiIsImNocm9tZVZlcnNpb24iLCJ0b1BhaXJzIiwiY29lcmNlZFZlcnNpb24iLCJzZW12ZXIiLCJjb2VyY2UiLCJ2ZXJzaW9uIiwiZ2V0Q2hyb21lZHJpdmVycyIsImV4ZWN1dGFibGVzIiwiZ2xvYiIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJjZHMiLCJtYXBDaHJvbWVkcml2ZXIiLCJsb2dFcnJvciIsInN0ZG91dCIsInN0ZGVyciIsImVyck1zZyIsInBhdGgiLCJiYXNlbmFtZSIsInRpbWVvdXQiLCJpbmNsdWRlcyIsIm1hdGNoIiwiZXhlYyIsIm1pbkNocm9tZVZlcnNpb24iLCJtYWpvciIsIm1pbm9yIiwiZmlsdGVyIiwiY2QiLCJzb3J0IiwiYSIsImIiLCJpc0VtcHR5IiwiZ2V0Q2hyb21lVmVyc2lvbiIsIkJyb3dzZXIiLCJ2ZXJzaW9uTWF0Y2giLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwidXBkYXRlRHJpdmVyc01hcHBpbmciLCJuZXdNYXBwaW5nIiwic2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyIsIndyaXRlRmlsZSIsInN0cmluZ2lmeSIsImUiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyIiwidmFsdWVzIiwiZGlkU3RvcmFnZVN5bmMiLCJzeW5jQ2hyb21lZHJpdmVycyIsInJldHJpZXZlZE1hcHBpbmciLCJyZXRyaWV2ZU1hcHBpbmciLCJkcml2ZXJLZXlzIiwic3luY0RyaXZlcnMiLCJtaW5Ccm93c2VyVmVyc2lvbiIsInN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nIiwicmVkdWNlIiwiYWNjIiwieCIsIm1pc3NpbmdWZXJzaW9ucyIsImNvZXJjZWRWZXIiLCJzaXplIiwiZXJyb3JBbmRUaHJvdyIsIm1hdGNoaW5nRHJpdmVycyIsIm1pbkNocm9tZVZlcnNpb25TIiwiZ3RlIiwiQ0RfQ0ROIiwic3RhY2siLCJhdXRvZG93bmxvYWRTdWdnZXN0aW9uIiwiRXJyb3IiLCJiaW5QYXRoIiwiaW5pdENocm9tZWRyaXZlclBhdGgiLCJzeW5jUHJvdG9jb2wiLCJXM0MiLCJjaHJvbWVPcHRpb25zIiwidzNjIiwic3RhcnQiLCJjYXBzIiwiZW1pdFN0YXJ0aW5nU3RhdGUiLCJsb2dnaW5nUHJlZnMiLCJicm93c2VyIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImFkYlBvcnQiLCJwdXNoIiwiaXNBcnJheSIsInN0YXJ0RGV0ZWN0b3IiLCJzdGFydHNXaXRoIiwicHJvY2Vzc0lzQWxpdmUiLCJ3ZWJ2aWV3VmVyc2lvbiIsImtpbGxBbGwiLCJTdWJQcm9jZXNzIiwib24iLCJvdXQiLCJsaW5lIiwidHJpbSIsInNwbGl0IiwiZXJyb3IiLCJjb2RlIiwic2lnbmFsIiwiU1RBVEVfU1RPUFBJTkciLCJTVEFURV9SRVNUQVJUSU5HIiwibXNnIiwiam9pbiIsIndhaXRGb3JPbmxpbmUiLCJzdGFydFNlc3Npb24iLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwic2Vzc2lvbklkIiwiU1RBVEVfT05MSU5FIiwicmVzdGFydCIsImNocm9tZWRyaXZlclN0b3BwZWQiLCJnZXRTdGF0dXMiLCJjb21tYW5kIiwic2Vzc2lvbkNhcHMiLCJhbHdheXNNYXRjaCIsImRlc2lyZWRDYXBhYmlsaXRpZXMiLCJlbWl0U3RhdGVzIiwiRVZFTlRfQ0hBTkdFRCIsInNlbmRDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsInByb3h5UmVxIiwicmVxIiwicmVzIiwicHJveHlSZXFSZXMiLCJjbWQiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJCIiwicHJvbWlzaWZ5IiwiY3AiLCJ1ZGlkSW5kZXgiLCJkZWZhdWx0QXJncyIsImZpbmRJbmRleCIsIml0ZW0iLCJ1ZGlkIiwiY29ubiIsImdldEZvcndhcmRMaXN0IiwicGFyYW1zIiwicmVtb3ZlUG9ydEZvcndhcmQiLCJyZXBsYWNlIiwiaGFzV29ya2luZ1dlYnZpZXciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7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QU1rSixpQkFBTixHQUEyQjtBQUd6QixRQUFJO0FBQ0YsWUFBTSxLQUFLMUssT0FBTCxDQUFhNEksT0FBYixDQUFxQixNQUFyQixFQUE2QixLQUE3QixDQUFOO0FBQ0EsYUFBTyxJQUFQO0FBQ0QsS0FIRCxDQUdFLE9BQU92RSxDQUFQLEVBQVU7QUFDVixhQUFPLEtBQVA7QUFDRDtBQUNGOztBQXhuQjRDOzs7QUEybkIvQy9GLFlBQVksQ0FBQytKLFdBQWIsR0FBMkIsb0JBQTNCO0FBQ0EvSixZQUFZLENBQUMySyxhQUFiLEdBQTZCLGNBQTdCO0FBQ0EzSyxZQUFZLENBQUN5QixhQUFiLEdBQTZCLFNBQTdCO0FBQ0F6QixZQUFZLENBQUNzSSxjQUFiLEdBQThCLFVBQTlCO0FBQ0F0SSxZQUFZLENBQUNrSyxZQUFiLEdBQTRCLFFBQTVCO0FBQ0FsSyxZQUFZLENBQUN3SixjQUFiLEdBQThCLFVBQTlCO0FBQ0F4SixZQUFZLENBQUN5SixnQkFBYixHQUFnQyxZQUFoQztlQUdlekosWSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IEpXUHJveHksIFBST1RPQ09MUyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCBhc3luY21hcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtcbiAgZ2V0Q2hyb21lVmVyc2lvbiwgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsXG4gIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgsIENEX0NETixcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY29tcGFyZVZlcnNpb25zIGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuaW1wb3J0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgZnJvbSAnLi9zdG9yYWdlLWNsaWVudCc7XG5pbXBvcnQgeyB0b1czY0NhcE5hbWVzLCBnZXRDYXBWYWx1ZSB9IGZyb20gJy4vcHJvdG9jb2wtaGVscGVycyc7XG5cblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignQ2hyb21lZHJpdmVyJyk7XG5cbmNvbnN0IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OID0gNzM7XG5jb25zdCBERUZBVUxUX0hPU1QgPSAnMTI3LjAuMC4xJztcbmNvbnN0IE1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQgPSA3NTtcbmNvbnN0IERFRkFVTFRfUE9SVCA9IDk1MTU7XG5jb25zdCBDSFJPTUVfQlVORExFX0lEID0gJ2NvbS5hbmRyb2lkLmNocm9tZSc7XG5jb25zdCBXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCA9ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCc7XG5jb25zdCBXRUJWSUVXX0JVTkRMRV9JRFMgPSBbXG4gICdjb20uZ29vZ2xlLmFuZHJvaWQud2VidmlldycsXG4gICdjb20uYW5kcm9pZC53ZWJ2aWV3Jyxcbl07XG5jb25zdCBDSFJPTUVEUklWRVJfVFVUT1JJQUwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3dlYi9jaHJvbWVkcml2ZXIubWQnO1xuY29uc3QgVkVSU0lPTl9QQVRURVJOID0gLyhbXFxkLl0rKS87XG5cbmNvbnN0IENEX1ZFUlNJT05fVElNRU9VVCA9IDUwMDA7XG5cbmNsYXNzIENocm9tZWRyaXZlciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoYXJncyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGhvc3QgPSBERUZBVUxUX0hPU1QsXG4gICAgICBwb3J0ID0gREVGQVVMVF9QT1JULFxuICAgICAgdXNlU3lzdGVtRXhlY3V0YWJsZSA9IGZhbHNlLFxuICAgICAgZXhlY3V0YWJsZSxcbiAgICAgIGV4ZWN1dGFibGVEaXIgPSBnZXRDaHJvbWVkcml2ZXJEaXIoKSxcbiAgICAgIGJ1bmRsZUlkLFxuICAgICAgbWFwcGluZ1BhdGgsXG4gICAgICBjbWRBcmdzLFxuICAgICAgYWRiLFxuICAgICAgdmVyYm9zZSxcbiAgICAgIGxvZ1BhdGgsXG4gICAgICBkaXNhYmxlQnVpbGRDaGVjayxcbiAgICAgIGRldGFpbHMsXG4gICAgICBpc0F1dG9kb3dubG9hZEVuYWJsZWQgPSBmYWxzZSxcbiAgICB9ID0gYXJncztcblxuICAgIHRoaXMucHJveHlIb3N0ID0gaG9zdDtcbiAgICB0aGlzLnByb3h5UG9ydCA9IHBvcnQ7XG4gICAgdGhpcy5hZGIgPSBhZGI7XG4gICAgdGhpcy5jbWRBcmdzID0gY21kQXJncztcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgIHRoaXMudXNlU3lzdGVtRXhlY3V0YWJsZSA9IHVzZVN5c3RlbUV4ZWN1dGFibGU7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBleGVjdXRhYmxlO1xuICAgIHRoaXMuZXhlY3V0YWJsZURpciA9IGV4ZWN1dGFibGVEaXI7XG4gICAgdGhpcy5tYXBwaW5nUGF0aCA9IG1hcHBpbmdQYXRoO1xuICAgIHRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDtcbiAgICB0aGlzLmV4ZWN1dGFibGVWZXJpZmllZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhdGUgPSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRDtcbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgSldQcm94eSh7c2VydmVyOiB0aGlzLnByb3h5SG9zdCwgcG9ydDogdGhpcy5wcm94eVBvcnR9KTtcbiAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlO1xuICAgIHRoaXMubG9nUGF0aCA9IGxvZ1BhdGg7XG4gICAgdGhpcy5kaXNhYmxlQnVpbGRDaGVjayA9ICEhZGlzYWJsZUJ1aWxkQ2hlY2s7XG4gICAgdGhpcy5zdG9yYWdlQ2xpZW50ID0gaXNBdXRvZG93bmxvYWRFbmFibGVkXG4gICAgICA/IG5ldyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50KHsgY2hyb21lZHJpdmVyRGlyOiB0aGlzLmV4ZWN1dGFibGVEaXIgfSlcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0ge307XG4gICAgdGhpcy5kZXNpcmVkUHJvdG9jb2wgPSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIGFzeW5jIGdldERyaXZlcnNNYXBwaW5nICgpIHtcbiAgICBsZXQgbWFwcGluZyA9IF8uY2xvbmVEZWVwKENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyk7XG4gICAgaWYgKHRoaXMubWFwcGluZ1BhdGgpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQXR0ZW1wdGluZyB0byB1c2UgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZyBmcm9tICcke3RoaXMubWFwcGluZ1BhdGh9J2ApO1xuICAgICAgaWYgKCFhd2FpdCBmcy5leGlzdHModGhpcy5tYXBwaW5nUGF0aCkpIHtcbiAgICAgICAgbG9nLndhcm4oYE5vIGZpbGUgZm91bmQgYXQgJyR7dGhpcy5tYXBwaW5nUGF0aH0nYCk7XG4gICAgICAgIGxvZy5pbmZvKCdEZWZhdWx0aW5nIHRvIHRoZSBzdGF0aWMgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtYXBwaW5nID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLm1hcHBpbmdQYXRoLCAndXRmOCcpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbG9nLndhcm4oYEVycm9yIHBhcnNpbmcgbWFwcGluZyBmcm9tICcke3RoaXMubWFwcGluZ1BhdGh9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICBsb2cuaW5mbygnRGVmYXVsdGluZyB0byB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZGVidWcoJ1VzaW5nIHRoZSBzdGF0aWMgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZycpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZXMgZm9yIG1pbmltdW0gY2hyb21lIHZlcnNpb24gYXJlIHNlbXZlciBjb21wbGlhbnRcbiAgICBmb3IgKGNvbnN0IFtjZFZlcnNpb24sIGNocm9tZVZlcnNpb25dIG9mIF8udG9QYWlycyhtYXBwaW5nKSkge1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIG1hcHBpbmdbY2RWZXJzaW9uXSA9IGNvZXJjZWRWZXJzaW9uLnZlcnNpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuaW5mbyhgJyR7Y2hyb21lVmVyc2lvbn0nIGlzIG5vdCBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBTa2lwcGluZyBpdGApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwcGluZztcbiAgfVxuXG4gIGFzeW5jIGdldENocm9tZWRyaXZlcnMgKG1hcHBpbmcpIHtcbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB2ZXJzaW9ucyBhdmFpbGFibGVcbiAgICBjb25zdCBleGVjdXRhYmxlcyA9IGF3YWl0IGZzLmdsb2IoYCR7dGhpcy5leGVjdXRhYmxlRGlyfS8qYCk7XG4gICAgbG9nLmRlYnVnKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdleGVjdXRhYmxlJywgZXhlY3V0YWJsZXMubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgICBgaW4gJyR7dGhpcy5leGVjdXRhYmxlRGlyfSdgKTtcbiAgICBjb25zdCBjZHMgPSAoYXdhaXQgYXN5bmNtYXAoZXhlY3V0YWJsZXMsIGFzeW5jIGZ1bmN0aW9uIG1hcENocm9tZWRyaXZlciAoZXhlY3V0YWJsZSkge1xuICAgICAgY29uc3QgbG9nRXJyb3IgPSAoe21lc3NhZ2UsIHN0ZG91dCA9IG51bGwsIHN0ZGVyciA9IG51bGx9KSA9PiB7XG4gICAgICAgIGxldCBlcnJNc2cgPSBgQ2Fubm90IHJldHJpZXZlIHZlcnNpb24gbnVtYmVyIGZyb20gJyR7cGF0aC5iYXNlbmFtZShleGVjdXRhYmxlKX0nIENocm9tZWRyaXZlciBiaW5hcnkuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgaXQgcmV0dXJucyBhIHZhbGlkIHZlcnNpb24gc3RyaW5nIGluIHJlc3BvbnNlIHRvICctLXZlcnNpb24nIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gJHttZXNzYWdlfWA7XG4gICAgICAgIGlmIChzdGRvdXQpIHtcbiAgICAgICAgICBlcnJNc2cgKz0gYFxcblN0ZG91dDogJHtzdGRvdXR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgZXJyTXNnICs9IGBcXG5TdGRlcnI6ICR7c3RkZXJyfWA7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLndhcm4oZXJyTXNnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBsZXQgc3Rkb3V0O1xuICAgICAgbGV0IHN0ZGVycjtcbiAgICAgIHRyeSB7XG4gICAgICAgICh7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgZXhlYyhleGVjdXRhYmxlLCBbJy0tdmVyc2lvbiddLCB7XG4gICAgICAgICAgdGltZW91dDogQ0RfVkVSU0lPTl9USU1FT1VULFxuICAgICAgICB9KSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCEoZXJyLm1lc3NhZ2UgfHwgJycpLmluY2x1ZGVzKCd0aW1lZCBvdXQnKSAmJiAhKGVyci5zdGRvdXQgfHwgJycpLmluY2x1ZGVzKCdTdGFydGluZyBDaHJvbWVEcml2ZXInKSkge1xuICAgICAgICAgIHJldHVybiBsb2dFcnJvcihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyBoYXMgdGltZWQgb3V0LCBpdCBoYXMgYWN0dWFsbHkgc3RhcnRlZCBDaHJvbWVkcml2ZXIsXG4gICAgICAgIC8vIGluIHdoaWNoIGNhc2UgdGhlcmUgd2lsbCBhbHNvIGJlIHRoZSB2ZXJzaW9uIHN0cmluZyBpbiB0aGUgb3V0cHV0XG4gICAgICAgIHN0ZG91dCA9IGVyci5zdGRvdXQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdGNoID0gL0Nocm9tZURyaXZlclxccytcXCg/dj8oW1xcZC5dKylcXCk/L2kuZXhlYyhzdGRvdXQpOyAvLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL3pwajV3QS8xXG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiBsb2dFcnJvcih7bWVzc2FnZTogJ0Nhbm5vdCBwYXJzZSB0aGUgdmVyc2lvbiBzdHJpbmcnLCBzdGRvdXQsIHN0ZGVycn0pO1xuICAgICAgfVxuICAgICAgbGV0IHZlcnNpb24gPSBtYXRjaFsxXTtcbiAgICAgIGxldCBtaW5DaHJvbWVWZXJzaW9uID0gbWFwcGluZ1t2ZXJzaW9uXTtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uKTtcbiAgICAgIGlmIChjb2VyY2VkVmVyc2lvbikge1xuICAgICAgICAvLyBiZWZvcmUgMjAxOS0wMy0wNiB2ZXJzaW9ucyB3ZXJlIG9mIHRoZSBmb3JtIG1ham9yLm1pbm9yXG4gICAgICAgIGlmIChjb2VyY2VkVmVyc2lvbi5tYWpvciA8IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OKSB7XG4gICAgICAgICAgdmVyc2lvbiA9IGAke2NvZXJjZWRWZXJzaW9uLm1ham9yfS4ke2NvZXJjZWRWZXJzaW9uLm1pbm9yfWA7XG4gICAgICAgICAgbWluQ2hyb21lVmVyc2lvbiA9IG1hcHBpbmdbdmVyc2lvbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uICYmIGNvZXJjZWRWZXJzaW9uLm1ham9yID49IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OKSB7XG4gICAgICAgICAgLy8gQXNzdW1lIHRoZSBtYWpvciBDaHJvbWUgdmVyc2lvbiBpcyB0aGUgc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBkcml2ZXIgbWFqb3IgdmVyc2lvblxuICAgICAgICAgIG1pbkNocm9tZVZlcnNpb24gPSBgJHtjb2VyY2VkVmVyc2lvbi5tYWpvcn1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleGVjdXRhYmxlLFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBtaW5DaHJvbWVWZXJzaW9uLFxuICAgICAgfTtcbiAgICB9KSlcbiAgICAgIC5maWx0ZXIoKGNkKSA9PiAhIWNkKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbXBhcmVWZXJzaW9ucyhiLnZlcnNpb24sIGEudmVyc2lvbikpO1xuICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgbG9nLmluZm8oYE5vIENocm9tZWRyaXZlcnMgd2VyZSBmb3VuZCBpbiAnJHt0aGlzLmV4ZWN1dGFibGVEaXJ9J2ApO1xuICAgICAgcmV0dXJuIGNkcztcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBUaGUgZm9sbG93aW5nIENocm9tZWRyaXZlciBleGVjdXRhYmxlcyB3ZXJlIGZvdW5kOmApO1xuICAgIGZvciAoY29uc3QgY2Qgb2YgY2RzKSB7XG4gICAgICBsb2cuZGVidWcoYCAgICAnJHtjZC5leGVjdXRhYmxlfScgKHZlcnNpb24gJyR7Y2QudmVyc2lvbn0nLCBtaW5pbXVtIENocm9tZSB2ZXJzaW9uICcke2NkLm1pbkNocm9tZVZlcnNpb24gPyBjZC5taW5DaHJvbWVWZXJzaW9uIDogJ1Vua25vd24nfScpYCk7XG4gICAgfVxuICAgIHJldHVybiBjZHM7XG4gIH1cblxuICBhc3luYyBnZXRDaHJvbWVWZXJzaW9uICgpIHtcbiAgICAvLyBUcnkgdG8gcmV0cmlldmUgdGhlIHZlcnNpb24gZnJvbSBgZGV0YWlsc2AgcHJvcGVydHkgaWYgaXQgaXMgc2V0XG4gICAgLy8gVGhlIGBpbmZvYCBpdGVtIG11c3QgY29udGFpbiB0aGUgb3V0cHV0IG9mIC9qc29uL3ZlcnNpb24gQ0RQIGNvbW1hbmRcbiAgICAvLyB3aGVyZSBgQnJvd3NlcmAgZmllbGQgbG9va3MgbGlrZSBgQ2hyb21lLzcyLjAuMzYwMS4wYGBcbiAgICBpZiAodGhpcy5kZXRhaWxzPy5pbmZvKSB7XG4gICAgICBsb2cuZGVidWcoYEJyb3dzZXIgdmVyc2lvbiBpbiB0aGUgc3VwcGxpZWQgZGV0YWlsczogJHt0aGlzLmRldGFpbHM/LmluZm8/LkJyb3dzZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IFZFUlNJT05fUEFUVEVSTi5leGVjKHRoaXMuZGV0YWlscz8uaW5mbz8uQnJvd3Nlcik7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKHZlcnNpb25NYXRjaFsxXSk7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGNvZXJjZWRWZXJzaW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjaHJvbWVWZXJzaW9uO1xuXG4gICAgLy8gaW4gY2FzZSBvZiBXZWJWaWV3IEJyb3dzZXIgVGVzdGVyLCBzaW1wbHkgdHJ5IHRvIGZpbmQgdGhlIHVuZGVybHlpbmcgd2Vidmlld1xuICAgIGlmICh0aGlzLmJ1bmRsZUlkID09PSBXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCkge1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBXRUJWSUVXX0JVTkRMRV9JRFMpIHtcbiAgICAgICAgY2hyb21lVmVyc2lvbiA9IGF3YWl0IGdldENocm9tZVZlcnNpb24odGhpcy5hZGIsIGJ1bmRsZUlkKTtcbiAgICAgICAgaWYgKGNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgICAgICAgcmV0dXJuIHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIG9uIEFuZHJvaWQgNy05IHdlYnZpZXdzIGFyZSBiYWNrZWQgYnkgdGhlIG1haW4gQ2hyb21lLCBub3QgdGhlIHN5c3RlbSB3ZWJ2aWV3XG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gICAgICBpZiAoYXBpTGV2ZWwgPj0gMjQgJiYgYXBpTGV2ZWwgPD0gMjggJiZcbiAgICAgICAgICBbV0VCVklFV19TSEVMTF9CVU5ETEVfSUQsIC4uLldFQlZJRVdfQlVORExFX0lEU10uaW5jbHVkZXModGhpcy5idW5kbGVJZCkpIHtcbiAgICAgICAgdGhpcy5idW5kbGVJZCA9IENIUk9NRV9CVU5ETEVfSUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHJ5IG91dCB3ZWJ2aWV3cyB3aGVuIG5vIGJ1bmRsZSBpZCBpcyBzZW50IGluXG4gICAgaWYgKCF0aGlzLmJ1bmRsZUlkKSB7XG4gICAgICAvLyBkZWZhdWx0IHRvIHRoZSBnZW5lcmljIENocm9tZSBidW5kbGVcbiAgICAgIHRoaXMuYnVuZGxlSWQgPSBDSFJPTUVfQlVORExFX0lEO1xuXG4gICAgICAvLyB3ZSBoYXZlIGEgd2VidmlldyBvZiBzb21lIHNvcnQsIHNvIHRyeSB0byBmaW5kIHRoZSBidW5kbGUgdmVyc2lvblxuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBXRUJWSUVXX0JVTkRMRV9JRFMpIHtcbiAgICAgICAgY2hyb21lVmVyc2lvbiA9IGF3YWl0IGdldENocm9tZVZlcnNpb24odGhpcy5hZGIsIGJ1bmRsZUlkKTtcbiAgICAgICAgaWYgKGNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBkbyBub3QgaGF2ZSBhIGNocm9tZSB2ZXJzaW9uLCBpdCBtdXN0IG5vdCBiZSBhIHdlYnZpZXdcbiAgICBpZiAoIWNocm9tZVZlcnNpb24pIHtcbiAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCB0aGlzLmJ1bmRsZUlkKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgaXQgaXMgc2VtdmVyLCBzbyBsYXRlciBjaGVja3Mgd29uJ3QgZmFpbFxuICAgIHJldHVybiBjaHJvbWVWZXJzaW9uID8gc2VtdmVyLmNvZXJjZShjaHJvbWVWZXJzaW9uKSA6IG51bGw7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEcml2ZXJzTWFwcGluZyAobmV3TWFwcGluZykge1xuICAgIGxldCBzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nID0gdHJ1ZTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRoaXMubWFwcGluZ1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGhpcy5tYXBwaW5nUGF0aCwgSlNPTi5zdHJpbmdpZnkobmV3TWFwcGluZywgbnVsbCwgMiksICd1dGY4Jyk7XG4gICAgICAgIHNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmcgPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLndhcm4oYENhbm5vdCBzdG9yZSB0aGUgdXBkYXRlZCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgaW50byAnJHt0aGlzLm1hcHBpbmdQYXRofScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIG9mIGZ1cnRoZXIgZXhlY3V0aW9ucy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZykge1xuICAgICAgT2JqZWN0LmFzc2lnbihDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIG5ld01hcHBpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIgKCkge1xuICAgIGlmICghdGhpcy5hZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwcGluZyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyc01hcHBpbmcoKTtcbiAgICBpZiAoIV8uaXNFbXB0eShtYXBwaW5nKSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGUgbW9zdCByZWNlbnQga25vd24gQ2hyb21lIHZlcnNpb246ICR7Xy52YWx1ZXMobWFwcGluZylbMF19YCk7XG4gICAgfVxuXG4gICAgbGV0IGRpZFN0b3JhZ2VTeW5jID0gZmFsc2U7XG4gICAgY29uc3Qgc3luY0Nocm9tZWRyaXZlcnMgPSBhc3luYyAoY2hyb21lVmVyc2lvbikgPT4ge1xuICAgICAgZGlkU3RvcmFnZVN5bmMgPSB0cnVlO1xuICAgICAgY29uc3QgcmV0cmlldmVkTWFwcGluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZUNsaWVudC5yZXRyaWV2ZU1hcHBpbmcoKTtcbiAgICAgIGxvZy5kZWJ1ZygnR290IGNocm9tZWRyaXZlcnMgbWFwcGluZyBmcm9tIHRoZSBzdG9yYWdlOiAnICtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocmV0cmlldmVkTWFwcGluZywgbnVsbCwgMikpO1xuICAgICAgY29uc3QgZHJpdmVyS2V5cyA9IGF3YWl0IHRoaXMuc3RvcmFnZUNsaWVudC5zeW5jRHJpdmVycyh7XG4gICAgICAgIG1pbkJyb3dzZXJWZXJzaW9uOiBjaHJvbWVWZXJzaW9uLm1ham9yLFxuICAgICAgfSk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcktleXMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nID0gZHJpdmVyS2V5cy5yZWR1Y2UoKGFjYywgeCkgPT4ge1xuICAgICAgICBjb25zdCB7dmVyc2lvbiwgbWluQnJvd3NlclZlcnNpb259ID0gcmV0cmlldmVkTWFwcGluZ1t4XTtcbiAgICAgICAgYWNjW3ZlcnNpb25dID0gbWluQnJvd3NlclZlcnNpb247XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gICAgICBPYmplY3QuYXNzaWduKG1hcHBpbmcsIHN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlRHJpdmVyc01hcHBpbmcobWFwcGluZyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgY2RzID0gYXdhaXQgdGhpcy5nZXRDaHJvbWVkcml2ZXJzKG1hcHBpbmcpO1xuXG4gICAgICBjb25zdCBtaXNzaW5nVmVyc2lvbnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qge3ZlcnNpb24sIG1pbkNocm9tZVZlcnNpb259IG9mIGNkcykge1xuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb24gfHwgbWFwcGluZ1t2ZXJzaW9uXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZXJjZWRWZXIgPSBzZW12ZXIuY29lcmNlKHZlcnNpb24pO1xuICAgICAgICBpZiAoIWNvZXJjZWRWZXIgfHwgY29lcmNlZFZlci5tYWpvciA8IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBtaXNzaW5nVmVyc2lvbnNbdmVyc2lvbl0gPSBtaW5DaHJvbWVWZXJzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzRW1wdHkobWlzc2luZ1ZlcnNpb25zKSkge1xuICAgICAgICBsb2cuaW5mbyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnQ2hyb21lZHJpdmVyJywgXy5zaXplKG1pc3NpbmdWZXJzaW9ucyksIHRydWUpfSwgYCArXG4gICAgICAgICAgYHdoaWNoICR7Xy5zaXplKG1pc3NpbmdWZXJzaW9ucykgPT09IDEgPyAnaXMnIDogJ2FyZSd9IG1pc3NpbmcgaW4gdGhlIGxpc3Qgb2Yga25vd24gdmVyc2lvbnM6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1pc3NpbmdWZXJzaW9ucykpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKE9iamVjdC5hc3NpZ24obWFwcGluZywgbWlzc2luZ1ZlcnNpb25zKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBDaHJvbWVkcml2ZXIgZXhlY3V0YWJsZSBhdmFpbGFibGUgZm9yIHVzZSBpZiBgICtcbiAgICAgICAgICAgIGAnY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2snIGNhcGFiaWxpdHkgaXMgc2V0IHRvICd0cnVlJ2ApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHt2ZXJzaW9uLCBleGVjdXRhYmxlfSA9IGNkc1swXTtcbiAgICAgICAgbG9nLndhcm4oYENocm9tZSBidWlsZCBjaGVjayBkaXNhYmxlZC4gVXNpbmcgbW9zdCByZWNlbnQgQ2hyb21lZHJpdmVyIHZlcnNpb24gKCR7dmVyc2lvbn0sIGF0ICcke2V4ZWN1dGFibGV9JylgKTtcbiAgICAgICAgbG9nLndhcm4oYElmIHRoaXMgaXMgd3JvbmcsIHNldCAnY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2snIGNhcGFiaWxpdHkgdG8gJ2ZhbHNlJ2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hyb21lVmVyc2lvbiA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lVmVyc2lvbigpO1xuICAgICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgIC8vIHVuYWJsZSB0byBnZXQgdGhlIGNocm9tZSB2ZXJzaW9uXG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBDaHJvbWVkcml2ZXIgZXhlY3V0YWJsZSBhdmFpbGFibGUgZm9yIHVzZSBpZiBgICtcbiAgICAgICAgICAgIGB0aGUgY3VycmVudCBDaHJvbWUgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHt2ZXJzaW9uLCBleGVjdXRhYmxlfSA9IGNkc1swXTtcbiAgICAgICAgbG9nLndhcm4oYFVuYWJsZSB0byBkaXNjb3ZlciBDaHJvbWUgdmVyc2lvbi4gVXNpbmcgQ2hyb21lZHJpdmVyICR7dmVyc2lvbn0gYXQgJyR7ZXhlY3V0YWJsZX0nYCk7XG4gICAgICAgIHJldHVybiBleGVjdXRhYmxlO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBGb3VuZCBDaHJvbWUgYnVuZGxlICcke3RoaXMuYnVuZGxlSWR9JyB2ZXJzaW9uICcke2Nocm9tZVZlcnNpb259J2ApO1xuXG4gICAgICBjb25zdCBtYXRjaGluZ0RyaXZlcnMgPSBjZHMuZmlsdGVyKCh7bWluQ2hyb21lVmVyc2lvbn0pID0+IHtcbiAgICAgICAgY29uc3QgbWluQ2hyb21lVmVyc2lvblMgPSBtaW5DaHJvbWVWZXJzaW9uICYmIHNlbXZlci5jb2VyY2UobWluQ2hyb21lVmVyc2lvbik7XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvblMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hyb21lVmVyc2lvbi5tYWpvciA+IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OXG4gICAgICAgICAgPyBtaW5DaHJvbWVWZXJzaW9uUy5tYWpvciA9PT0gY2hyb21lVmVyc2lvbi5tYWpvclxuICAgICAgICAgIDogc2VtdmVyLmd0ZShjaHJvbWVWZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9uUyk7XG4gICAgICB9KTtcbiAgICAgIGlmIChfLmlzRW1wdHkobWF0Y2hpbmdEcml2ZXJzKSkge1xuICAgICAgICBpZiAodGhpcy5zdG9yYWdlQ2xpZW50ICYmICFkaWRTdG9yYWdlU3luYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgc3luY0Nocm9tZWRyaXZlcnMoY2hyb21lVmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLndhcm4oYENhbm5vdCBzeW5jaHJvbml6ZSBsb2NhbCBjaHJvbWVkcml2ZXJzIHdpdGggdGhlIHJlbW90ZSBzdG9yYWdlIGF0ICR7Q0RfQ0ROfTogYCArXG4gICAgICAgICAgICAgIGUubWVzc2FnZSk7XG4gICAgICAgICAgICBsb2cuZGVidWcoZS5zdGFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF1dG9kb3dubG9hZFN1Z2dlc3Rpb24gPVxuICAgICAgICAgICdZb3UgY291bGQgYWxzbyB0cnkgdG8gZW5hYmxlIGF1dG9tYXRlZCBjaHJvbWVkcml2ZXJzIGRvd25sb2FkIHNlcnZlciBmZWF0dXJlJztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBDaHJvbWVkcml2ZXIgZm91bmQgdGhhdCBjYW4gYXV0b21hdGUgQ2hyb21lICcke2Nocm9tZVZlcnNpb259Jy4gYCArXG4gICAgICAgICAgKCF0aGlzLnN0b3JhZ2VDbGllbnQgPyBgJHthdXRvZG93bmxvYWRTdWdnZXN0aW9ufS4gYCA6ICcnKSArXG4gICAgICAgICAgYFNlZSAke0NIUk9NRURSSVZFUl9UVVRPUklBTH0gZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiaW5QYXRoID0gbWF0Y2hpbmdEcml2ZXJzWzBdLmV4ZWN1dGFibGU7XG4gICAgICBsb2cuZGVidWcoYEZvdW5kICR7dXRpbC5wbHVyYWxpemUoJ2V4ZWN1dGFibGUnLCBtYXRjaGluZ0RyaXZlcnMubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgICAgIGBjYXBhYmxlIG9mIGF1dG9tYXRpbmcgQ2hyb21lICcke2Nocm9tZVZlcnNpb259Jy5cXG5DaG9vc2luZyB0aGUgbW9zdCByZWNlbnQsICcke2JpblBhdGh9Jy5gKTtcbiAgICAgIGxvZy5kZWJ1ZygnSWYgYSBzcGVjaWZpYyB2ZXJzaW9uIGlzIHJlcXVpcmVkLCBzcGVjaWZ5IGl0IHdpdGggdGhlIGBjaHJvbWVkcml2ZXJFeGVjdXRhYmxlYCcgK1xuICAgICAgICAnZGVzaXJlZCBjYXBhYmlsaXR5LicpO1xuICAgICAgcmV0dXJuIGJpblBhdGg7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgIH0gd2hpbGUgKHRydWUpO1xuICB9XG5cbiAgYXN5bmMgaW5pdENocm9tZWRyaXZlclBhdGggKCkge1xuICAgIGlmICh0aGlzLmV4ZWN1dGFibGVWZXJpZmllZCkgcmV0dXJuOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIC8vIHRoZSBleGVjdXRhYmxlIG1pZ2h0IGJlIHNldCAoaWYgcGFzc2VkIGluKVxuICAgIC8vIG9yIHdlIG1pZ2h0IHdhbnQgdG8gdXNlIHRoZSBiYXNpYyBvbmUgaW5zdGFsbGVkIHdpdGggdGhpcyBkcml2ZXJcbiAgICAvLyBvciB3ZSB3YW50IHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgb25lXG4gICAgaWYgKCF0aGlzLmNocm9tZWRyaXZlcikge1xuICAgICAgdGhpcy5jaHJvbWVkcml2ZXIgPSB0aGlzLnVzZVN5c3RlbUV4ZWN1dGFibGVcbiAgICAgICAgPyBhd2FpdCBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoKClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyh0aGlzLmNocm9tZWRyaXZlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIHVzZSBhIGNocm9tZWRyaXZlciBiaW5hcnkgYXQgdGhlIHBhdGggYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jaHJvbWVkcml2ZXJ9LCBidXQgaXQgZG9lc24ndCBleGlzdCFgKTtcbiAgICB9XG4gICAgdGhpcy5leGVjdXRhYmxlVmVyaWZpZWQgPSB0cnVlO1xuICAgIGxvZy5pbmZvKGBTZXQgY2hyb21lZHJpdmVyIGJpbmFyeSBhczogJHt0aGlzLmNocm9tZWRyaXZlcn1gKTtcbiAgfVxuXG4gIHN5bmNQcm90b2NvbCAoY2RWZXJzaW9uID0gbnVsbCkge1xuICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShjZFZlcnNpb24pO1xuICAgIGlmICghY29lcmNlZFZlcnNpb24gfHwgY29lcmNlZFZlcnNpb24ubWFqb3IgPCBNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUKSB7XG4gICAgICBsb2cuZGVidWcoYENocm9tZWRyaXZlciB2LiAke2NkVmVyc2lvbn0gZG9lcyBub3QgZnVsbHkgc3VwcG9ydCAke1BST1RPQ09MUy5XM0N9IHByb3RvY29sLiBgICtcbiAgICAgICAgYERlZmF1bHRpbmcgdG8gJHtQUk9UT0NPTFMuTUpTT05XUH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2hyb21lT3B0aW9ucyA9IGdldENhcFZhbHVlKHRoaXMuY2FwYWJpbGl0aWVzLCAnY2hyb21lT3B0aW9ucycsIHt9KTtcbiAgICBpZiAoY2hyb21lT3B0aW9ucy53M2MgPT09IGZhbHNlKSB7XG4gICAgICBsb2cuaW5mbyhgQ2hyb21lZHJpdmVyIHYuICR7Y2RWZXJzaW9ufSBzdXBwb3J0cyAke1BST1RPQ09MUy5XM0N9IHByb3RvY29sLCBgICtcbiAgICAgICAgYGJ1dCAke1BST1RPQ09MUy5NSlNPTldQfSBvbmUgaGFzIGJlZW4gZXhwbGljaXRseSByZXF1ZXN0ZWRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZXNpcmVkUHJvdG9jb2wgPSBQUk9UT0NPTFMuVzNDO1xuICAgIC8vIGdpdmVuIGNhcHMgbWlnaHQgbm90IGJlIHByb3Blcmx5IHByZWZpeGVkXG4gICAgLy8gc28gd2UgdHJ5IHRvIGZpeCB0aGVtIGluIG9yZGVyIHRvIHByb3Blcmx5IGluaXRcbiAgICAvLyB0aGUgbmV3IFczQyBzZXNzaW9uXG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0b1czY0NhcE5hbWVzKHRoaXMuY2FwYWJpbGl0aWVzKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChjYXBzLCBlbWl0U3RhcnRpbmdTdGF0ZSA9IHRydWUpIHtcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKGNhcHMpO1xuXG4gICAgLy8gc2V0IHRoZSBsb2dnaW5nIHByZWZlcmVuY2VzIHRvIEFMTCB0aGUgY29uc29sZSBsb2dzXG4gICAgdGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzID0gXy5jbG9uZURlZXAoZ2V0Q2FwVmFsdWUoY2FwcywgJ2xvZ2dpbmdQcmVmcycsIHt9KSk7XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMuYnJvd3NlcikpIHtcbiAgICAgIHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcy5icm93c2VyID0gJ0FMTCc7XG4gICAgfVxuXG4gICAgaWYgKGVtaXRTdGFydGluZ1N0YXRlKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVEFSVElORyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IFsnLS11cmwtYmFzZT13ZC9odWInLCBgLS1wb3J0PSR7dGhpcy5wcm94eVBvcnR9YF07XG4gICAgaWYgKHRoaXMuYWRiICYmIHRoaXMuYWRiLmFkYlBvcnQpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1hZGItcG9ydD0ke3RoaXMuYWRiLmFkYlBvcnR9YCk7XG4gICAgfVxuICAgIGlmIChfLmlzQXJyYXkodGhpcy5jbWRBcmdzKSkge1xuICAgICAgYXJncy5wdXNoKC4uLnRoaXMuY21kQXJncyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvZ1BhdGgpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1sb2ctcGF0aD0ke3RoaXMubG9nUGF0aH1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2spIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1kaXNhYmxlLWJ1aWxkLWNoZWNrJyk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLS12ZXJib3NlJyk7XG4gICAgLy8gd2hhdCBhcmUgdGhlIHByb2Nlc3Mgc3Rkb3V0L3N0ZGVyciBjb25kaXRpb25zIHdoZXJlaW4gd2Uga25vdyB0aGF0XG4gICAgLy8gdGhlIHByb2Nlc3MgaGFzIHN0YXJ0ZWQgdG8gb3VyIHNhdGlzZmFjdGlvbj9cbiAgICBjb25zdCBzdGFydERldGVjdG9yID0gKHN0ZG91dCkgPT4gc3Rkb3V0LnN0YXJ0c1dpdGgoJ1N0YXJ0aW5nICcpO1xuXG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgbGV0IHdlYnZpZXdWZXJzaW9uO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRDaHJvbWVkcml2ZXJQYXRoKCk7XG4gICAgICBhd2FpdCB0aGlzLmtpbGxBbGwoKTtcblxuICAgICAgLy8gc2V0IHVwIG91ciBzdWJwcm9jZXNzIG9iamVjdFxuICAgICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3ModGhpcy5jaHJvbWVkcml2ZXIsIGFyZ3MpO1xuICAgICAgcHJvY2Vzc0lzQWxpdmUgPSB0cnVlO1xuXG4gICAgICAvLyBoYW5kbGUgbG9nIG91dHB1dFxuICAgICAgdGhpcy5wcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgLy8gaWYgdGhlIGNkIG91dHB1dCBpcyBub3QgcHJpbnRlZCwgZmluZCB0aGUgY2hyb21lIHZlcnNpb24gYW5kIHByaW50XG4gICAgICAgIC8vIHdpbGwgZ2V0IGEgcmVzcG9uc2UgbGlrZVxuICAgICAgICAvLyAgIERldlRvb2xzIHJlc3BvbnNlOiB7XG4gICAgICAgIC8vICAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2FtcGxlYXBwXCIsXG4gICAgICAgIC8vICAgICAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzU1LjAuMjg4My45MVwiLFxuICAgICAgICAvLyAgICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuMlwiLFxuICAgICAgICAvLyAgICAgIFwiVXNlci1BZ2VudFwiOiBcIi4uLlwiLFxuICAgICAgICAvLyAgICAgIFwiV2ViS2l0LVZlcnNpb25cIjogXCI1MzcuMzZcIlxuICAgICAgICAvLyAgIH1cbiAgICAgICAgY29uc3Qgb3V0ID0gc3Rkb3V0ICsgc3RkZXJyO1xuICAgICAgICBsZXQgbWF0Y2ggPSAvXCJCcm93c2VyXCI6IFwiKC4qKVwiLy5leGVjKG91dCk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHdlYnZpZXdWZXJzaW9uID0gbWF0Y2hbMV07XG4gICAgICAgICAgbG9nLmRlYnVnKGBXZWJ2aWV3IHZlcnNpb246ICcke3dlYnZpZXdWZXJzaW9ufSdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsc28gcHJpbnQgY2hyb21lZHJpdmVyIHZlcnNpb24gdG8gbG9nc1xuICAgICAgICAvLyB3aWxsIG91dHB1dCBzb21ldGhpbmcgbGlrZVxuICAgICAgICAvLyAgU3RhcnRpbmcgQ2hyb21lRHJpdmVyIDIuMzMuNTA2MTA2ICg4YTA2YzM5YzQ1ODJmYmZiYWI2OTY2ZGJiMWMzOGE5MTczYmZiMWEyKSBvbiBwb3J0IDk1MTVcbiAgICAgICAgbWF0Y2ggPSAvU3RhcnRpbmcgQ2hyb21lRHJpdmVyIChbLlxcZF0rKS8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYENocm9tZWRyaXZlciB2ZXJzaW9uOiAnJHttYXRjaFsxXX0nYCk7XG4gICAgICAgICAgdGhpcy5zeW5jUHJvdG9jb2wobWF0Y2hbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZ2l2ZSB0aGUgb3V0cHV0IGlmIGl0IGlzIHJlcXVlc3RlZFxuICAgICAgICBpZiAodGhpcy52ZXJib3NlKSB7XG4gICAgICAgICAgZm9yIChsZXQgbGluZSBvZiAoc3Rkb3V0IHx8ICcnKS50cmltKCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpLmxlbmd0aCkgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgW1NURE9VVF0gJHtsaW5lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIChzdGRlcnIgfHwgJycpLnRyaW0oKS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgIGlmICghbGluZS50cmltKCkubGVuZ3RoKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgICAgbG9nLmVycm9yKGBbU1RERVJSXSAke2xpbmV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBDaHJvbWVkcml2ZXIgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aXRoIGNvZGUgJHtjb2RlfSwgYCArXG4gICAgICAgICAgICAgICAgICAgIGBzaWduYWwgJHtzaWduYWx9YDtcbiAgICAgICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2cuaW5mbyhgU3Bhd25pbmcgY2hyb21lZHJpdmVyIHdpdGg6ICR7dGhpcy5jaHJvbWVkcml2ZXJ9IGAgK1xuICAgICAgICAgICAgICAgYCR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICAvLyBzdGFydCBzdWJwcm9jIGFuZCB3YWl0IGZvciBzdGFydERldGVjdG9yXG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoc3RhcnREZXRlY3Rvcik7XG4gICAgICBhd2FpdCB0aGlzLndhaXRGb3JPbmxpbmUoKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9FUlJPUiwgZSk7XG4gICAgICAvLyBqdXN0IGJlY2F1c2Ugd2UgaGFkIGFuIGVycm9yIGRvZXNuJ3QgbWVhbiB0aGUgY2hyb21lZHJpdmVyIHByb2Nlc3NcbiAgICAgIC8vIGZpbmlzaGVkOyB3ZSBzaG91bGQgY2xlYW4gdXAgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAocHJvY2Vzc0lzQWxpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgIC8vIG9mdGVuIHRoZSB1c2VyJ3MgQ2hyb21lIHZlcnNpb24gaXMgdG9vIGxvdyBmb3IgdGhlIHZlcnNpb24gb2YgQ2hyb21lZHJpdmVyXG4gICAgICBpZiAoZS5tZXNzYWdlLmluY2x1ZGVzKCdDaHJvbWUgdmVyc2lvbiBtdXN0IGJlJykpIHtcbiAgICAgICAgbWVzc2FnZSArPSAnVW5hYmxlIHRvIGF1dG9tYXRlIENocm9tZSB2ZXJzaW9uIGJlY2F1c2UgaXQgaXMgdG9vIG9sZCBmb3IgdGhpcyB2ZXJzaW9uIG9mIENocm9tZWRyaXZlci5cXG4nO1xuICAgICAgICBpZiAod2Vidmlld1ZlcnNpb24pIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBDaHJvbWUgdmVyc2lvbiBvbiB0aGUgZGV2aWNlOiAke3dlYnZpZXdWZXJzaW9ufVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZSArPSBgVmlzaXQgJyR7Q0hST01FRFJJVkVSX1RVVE9SSUFMfScgdG8gdHJvdWJsZXNob290IHRoZSBwcm9ibGVtLlxcbmA7XG4gICAgICB9XG5cbiAgICAgIG1lc3NhZ2UgKz0gZS5tZXNzYWdlO1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3cobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgc2Vzc2lvbklkICgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuandwcm94eS5zZXNzaW9uSWQ7XG4gIH1cblxuICBhc3luYyByZXN0YXJ0ICgpIHtcbiAgICBsb2cuaW5mbygnUmVzdGFydGluZyBjaHJvbWVkcml2ZXInKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcmVzdGFydCB3aGVuIHdlJ3JlIG5vdCBvbmxpbmVcIik7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcpO1xuICAgIGF3YWl0IHRoaXMuc3RvcChmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0aGlzLmNhcGFiaWxpdGllcywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvck9ubGluZSAoKSB7XG4gICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBDRCBoYXNuJ3QgY3Jhc2hlZFxuICAgIGxldCBjaHJvbWVkcml2ZXJTdG9wcGVkID0gZmFsc2U7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgyMCwgMjAwLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgICAgLy8gd2UgYXJlIGVpdGhlciBzdG9wcGVkIG9yIHN0b3BwaW5nLCBzbyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgICBjaHJvbWVkcml2ZXJTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9KTtcbiAgICBpZiAoY2hyb21lZHJpdmVyU3RvcHBlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaHJvbWVEcml2ZXIgY3Jhc2hlZCBkdXJpbmcgc3RhcnR1cC4nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoKSB7XG4gICAgY29uc3Qgc2Vzc2lvbkNhcHMgPSB0aGlzLmRlc2lyZWRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQ1xuICAgICAgPyB7Y2FwYWJpbGl0aWVzOiB7YWx3YXlzTWF0Y2g6IHRoaXMuY2FwYWJpbGl0aWVzfX1cbiAgICAgIDoge2Rlc2lyZWRDYXBhYmlsaXRpZXM6IHRoaXMuY2FwYWJpbGl0aWVzfTtcbiAgICBsb2cuaW5mbyhgU3RhcnRpbmcgJHt0aGlzLmRlc2lyZWRQcm90b2NvbH0gQ2hyb21lZHJpdmVyIHNlc3Npb24gd2l0aCBjYXBhYmlsaXRpZXM6IGAgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkNhcHMsIG51bGwsIDIpKTtcbiAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHNlc3Npb25DYXBzKTtcbiAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9PTkxJTkUpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoZW1pdFN0YXRlcyA9IHRydWUpIHtcbiAgICBpZiAoZW1pdFN0YXRlcykge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJycsICdERUxFVEUnKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCdTSUdURVJNJywgMjAwMDApO1xuICAgICAgaWYgKGVtaXRTdGF0ZXMpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVN0YXRlIChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICBsb2cuZGVidWcoYENoYW5nZWQgc3RhdGUgdG8gJyR7c3RhdGV9J2ApO1xuICAgIHRoaXMuZW1pdChDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCwge3N0YXRlfSk7XG4gIH1cblxuICBhc3luYyBzZW5kQ29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG5cbiAgYXN5bmMgcHJveHlSZXEgKHJlcSwgcmVzKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuandwcm94eS5wcm94eVJlcVJlcyhyZXEsIHJlcyk7XG4gIH1cblxuICBhc3luYyBraWxsQWxsICgpIHtcbiAgICBsZXQgY21kID0gc3lzdGVtLmlzV2luZG93cygpXG4gICAgICA/IGB3bWljIHByb2Nlc3Mgd2hlcmUgXCJjb21tYW5kbGluZSBsaWtlICclY2hyb21lZHJpdmVyLmV4ZSUtLXBvcnQ9JHt0aGlzLnByb3h5UG9ydH0lJ1wiIGRlbGV0ZWBcbiAgICAgIDogYHBraWxsIC0xNSAtZiBcIiR7dGhpcy5jaHJvbWVkcml2ZXJ9LiotLXBvcnQ9JHt0aGlzLnByb3h5UG9ydH1cImA7XG4gICAgbG9nLmRlYnVnKGBLaWxsaW5nIGFueSBvbGQgY2hyb21lZHJpdmVycywgcnVubmluZzogJHtjbWR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChCLnByb21pc2lmeShjcC5leGVjKSkoY21kKTtcbiAgICAgIGxvZy5kZWJ1ZygnU3VjY2Vzc2Z1bGx5IGNsZWFuZWQgdXAgb2xkIGNocm9tZWRyaXZlcnMnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKCdObyBvbGQgY2hyb21lZHJpdmVycyBzZWVtIHRvIGV4aXN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBjb25zdCB1ZGlkSW5kZXggPSB0aGlzLmFkYi5leGVjdXRhYmxlLmRlZmF1bHRBcmdzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbSA9PT0gJy1zJyk7XG4gICAgICBjb25zdCB1ZGlkID0gdWRpZEluZGV4ID4gLTEgPyB0aGlzLmFkYi5leGVjdXRhYmxlLmRlZmF1bHRBcmdzW3VkaWRJbmRleCArIDFdIDogbnVsbDtcblxuICAgICAgaWYgKHVkaWQpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBDbGVhbmluZyB0aGlzIGRldmljZSdzIGFkYiBmb3J3YXJkZWQgcG9ydCBzb2NrZXQgY29ubmVjdGlvbnM6ICR7dWRpZH1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ2xlYW5pbmcgYW55IG9sZCBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zYCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGNvbm4gb2YgYXdhaXQgdGhpcy5hZGIuZ2V0Rm9yd2FyZExpc3QoKSkge1xuICAgICAgICAgIC8vIGNocm9tZWRyaXZlciB3aWxsIGFzayBBREIgdG8gZm9yd2FyZCBhIHBvcnQgbGlrZSBcImRldmljZUlkIHRjcDpwb3J0IGxvY2FsYWJzdHJhY3Q6d2Vidmlld19kZXZ0b29sc19yZW1vdGVfcG9ydFwiXG4gICAgICAgICAgaWYgKCEoY29ubi5pbmNsdWRlcygnd2Vidmlld19kZXZ0b29scycpICYmICghdWRpZCB8fCBjb25uLmluY2x1ZGVzKHVkaWQpKSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBwYXJhbXMgPSBjb25uLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZChwYXJhbXNbMV0ucmVwbGFjZSgvW1xcRF0qLywgJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2cud2FybihgVW5hYmxlIHRvIGNsZWFuIGZvcndhcmRlZCBwb3J0cy4gRXJyb3I6ICcke2Vyci5tZXNzYWdlfScuIENvbnRpbnVpbmcuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFzV29ya2luZ1dlYnZpZXcgKCkge1xuICAgIC8vIHNvbWV0aW1lcyBjaHJvbWVkcml2ZXIgc3RvcHMgYXV0b21hdGluZyB3ZWJ2aWV3cy4gdGhpcyBtZXRob2QgcnVucyBhXG4gICAgLy8gc2ltcGxlIGNvbW1hbmQgdG8gZGV0ZXJtaW5lIG91ciBzdGF0ZSwgYW5kIHJlc3BvbmRzIGFjY29yZGluZ2x5XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvdXJsJywgJ0dFVCcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5DaHJvbWVkcml2ZXIuRVZFTlRfRVJST1IgPSAnY2hyb21lZHJpdmVyX2Vycm9yJztcbkNocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VEID0gJ3N0YXRlQ2hhbmdlZCc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCA9ICdzdG9wcGVkJztcbkNocm9tZWRyaXZlci5TVEFURV9TVEFSVElORyA9ICdzdGFydGluZyc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FID0gJ29ubGluZSc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcgPSAnc3RvcHBpbmcnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcgPSAncmVzdGFydGluZyc7XG5cbmV4cG9ydCB7IENocm9tZWRyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQ2hyb21lZHJpdmVyO1xuIl0sImZpbGUiOiJsaWIvY2hyb21lZHJpdmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
727
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jaHJvbWVkcml2ZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04iLCJERUZBVUxUX0hPU1QiLCJNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUIiwiREVGQVVMVF9QT1JUIiwiQ0hST01FX0JVTkRMRV9JRCIsIldFQlZJRVdfU0hFTExfQlVORExFX0lEIiwiV0VCVklFV19CVU5ETEVfSURTIiwiQ0hST01FRFJJVkVSX1RVVE9SSUFMIiwiVkVSU0lPTl9QQVRURVJOIiwiQ0RfVkVSU0lPTl9USU1FT1VUIiwiQ2hyb21lZHJpdmVyIiwiZXZlbnRzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJhcmdzIiwiaG9zdCIsInBvcnQiLCJ1c2VTeXN0ZW1FeGVjdXRhYmxlIiwiZXhlY3V0YWJsZSIsImV4ZWN1dGFibGVEaXIiLCJidW5kbGVJZCIsIm1hcHBpbmdQYXRoIiwiY21kQXJncyIsImFkYiIsInZlcmJvc2UiLCJsb2dQYXRoIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJkZXRhaWxzIiwiaXNBdXRvZG93bmxvYWRFbmFibGVkIiwicHJveHlIb3N0IiwicHJveHlQb3J0IiwicHJvYyIsImNocm9tZWRyaXZlciIsImV4ZWN1dGFibGVWZXJpZmllZCIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsImp3cHJveHkiLCJKV1Byb3h5Iiwic2VydmVyIiwic3RvcmFnZUNsaWVudCIsIkNocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQiLCJjaHJvbWVkcml2ZXJEaXIiLCJjYXBhYmlsaXRpZXMiLCJkZXNpcmVkUHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiZ2V0RHJpdmVyc01hcHBpbmciLCJtYXBwaW5nIiwiXyIsImNsb25lRGVlcCIsIkNIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyIsImRlYnVnIiwiZnMiLCJleGlzdHMiLCJ3YXJuIiwiaW5mbyIsIkpTT04iLCJwYXJzZSIsInJlYWRGaWxlIiwiZXJyIiwibWVzc2FnZSIsImNkVmVyc2lvbiIsImNocm9tZVZlcnNpb24iLCJ0b1BhaXJzIiwiY29lcmNlZFZlcnNpb24iLCJzZW12ZXIiLCJjb2VyY2UiLCJ2ZXJzaW9uIiwiZ2V0Q2hyb21lZHJpdmVycyIsImV4ZWN1dGFibGVzIiwiZ2xvYiIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJjZHMiLCJtYXBDaHJvbWVkcml2ZXIiLCJsb2dFcnJvciIsInN0ZG91dCIsInN0ZGVyciIsImVyck1zZyIsInBhdGgiLCJiYXNlbmFtZSIsInRpbWVvdXQiLCJpbmNsdWRlcyIsIm1hdGNoIiwiZXhlYyIsIm1pbkNocm9tZVZlcnNpb24iLCJtYWpvciIsIm1pbm9yIiwiZmlsdGVyIiwiY2QiLCJzb3J0IiwiYSIsImIiLCJpc0VtcHR5IiwiZ2V0Q2hyb21lVmVyc2lvbiIsIkJyb3dzZXIiLCJ2ZXJzaW9uTWF0Y2giLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwidXBkYXRlRHJpdmVyc01hcHBpbmciLCJuZXdNYXBwaW5nIiwic2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyIsIndyaXRlRmlsZSIsInN0cmluZ2lmeSIsImUiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyIiwidmFsdWVzIiwiZGlkU3RvcmFnZVN5bmMiLCJzeW5jQ2hyb21lZHJpdmVycyIsInJldHJpZXZlZE1hcHBpbmciLCJyZXRyaWV2ZU1hcHBpbmciLCJkcml2ZXJLZXlzIiwic3luY0RyaXZlcnMiLCJtaW5Ccm93c2VyVmVyc2lvbiIsInN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nIiwicmVkdWNlIiwiYWNjIiwieCIsIm1pc3NpbmdWZXJzaW9ucyIsImNvZXJjZWRWZXIiLCJzaXplIiwiZXJyb3JBbmRUaHJvdyIsIm1hdGNoaW5nRHJpdmVycyIsIm1pbkNocm9tZVZlcnNpb25TIiwiZ3RlIiwiQ0RfQ0ROIiwic3RhY2siLCJhdXRvZG93bmxvYWRTdWdnZXN0aW9uIiwiRXJyb3IiLCJiaW5QYXRoIiwiaW5pdENocm9tZWRyaXZlclBhdGgiLCJzeW5jUHJvdG9jb2wiLCJXM0MiLCJjaHJvbWVPcHRpb25zIiwidzNjIiwic3RhcnQiLCJjYXBzIiwiZW1pdFN0YXJ0aW5nU3RhdGUiLCJsb2dnaW5nUHJlZnMiLCJicm93c2VyIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImFkYlBvcnQiLCJwdXNoIiwiaXNBcnJheSIsInN0YXJ0RGV0ZWN0b3IiLCJzdGFydHNXaXRoIiwicHJvY2Vzc0lzQWxpdmUiLCJ3ZWJ2aWV3VmVyc2lvbiIsImtpbGxBbGwiLCJTdWJQcm9jZXNzIiwib24iLCJvdXQiLCJsaW5lIiwidHJpbSIsInNwbGl0IiwiZXJyb3IiLCJjb2RlIiwic2lnbmFsIiwiU1RBVEVfU1RPUFBJTkciLCJTVEFURV9SRVNUQVJUSU5HIiwibXNnIiwiam9pbiIsIndhaXRGb3JPbmxpbmUiLCJzdGFydFNlc3Npb24iLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwidmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciIsInNlc3Npb25JZCIsIlNUQVRFX09OTElORSIsInJlc3RhcnQiLCJjaHJvbWVkcml2ZXJTdG9wcGVkIiwiZ2V0U3RhdHVzIiwiY29tbWFuZCIsInNlc3Npb25DYXBzIiwiYWx3YXlzTWF0Y2giLCJkZXNpcmVkQ2FwYWJpbGl0aWVzIiwiZW1pdFN0YXRlcyIsIkVWRU5UX0NIQU5HRUQiLCJzZW5kQ29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJwcm94eVJlcSIsInJlcSIsInJlcyIsInByb3h5UmVxUmVzIiwiY21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiQiIsInByb21pc2lmeSIsImNwIiwidWRpZEluZGV4IiwiZGVmYXVsdEFyZ3MiLCJmaW5kSW5kZXgiLCJpdGVtIiwidWRpZCIsImNvbm4iLCJnZXRGb3J3YXJkTGlzdCIsInBhcmFtcyIsInJlbW92ZVBvcnRGb3J3YXJkIiwicmVwbGFjZSIsImhhc1dvcmtpbmdX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TSxDQUFDLENBQUQsQ0FBTixDQUFVRSxPQUFWLENBQWtCLE9BQWxCLEVBQTJCLEVBQTNCLENBQTNCLENBQU47QUFDRDtBQUNGO0FBQ0YsT0FaRCxDQVlFLE9BQU9uSixHQUFQLEVBQVk7QUFDWjlELFFBQUFBLEdBQUcsQ0FBQ3lELElBQUosQ0FBVSw0Q0FBMkNLLEdBQUcsQ0FBQ0MsT0FBUSxnQkFBakU7QUFDRDtBQUNGO0FBQ0Y7O0FBRXNCLFFBQWpCbUosaUJBQWlCLEdBQUk7QUFHekIsUUFBSTtBQUNGLFlBQU0sS0FBSzNLLE9BQUwsQ0FBYTZJLE9BQWIsQ0FBcUIsTUFBckIsRUFBNkIsS0FBN0IsQ0FBTjtBQUNBLGFBQU8sSUFBUDtBQUNELEtBSEQsQ0FHRSxPQUFPeEUsQ0FBUCxFQUFVO0FBQ1YsYUFBTyxLQUFQO0FBQ0Q7QUFDRjs7QUE1bkI0Qzs7O0FBK25CL0MvRixZQUFZLENBQUMrSixXQUFiLEdBQTJCLG9CQUEzQjtBQUNBL0osWUFBWSxDQUFDNEssYUFBYixHQUE2QixjQUE3QjtBQUNBNUssWUFBWSxDQUFDeUIsYUFBYixHQUE2QixTQUE3QjtBQUNBekIsWUFBWSxDQUFDc0ksY0FBYixHQUE4QixVQUE5QjtBQUNBdEksWUFBWSxDQUFDbUssWUFBYixHQUE0QixRQUE1QjtBQUNBbkssWUFBWSxDQUFDd0osY0FBYixHQUE4QixVQUE5QjtBQUNBeEosWUFBWSxDQUFDeUosZ0JBQWIsR0FBZ0MsWUFBaEM7ZUFHZXpKLFkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBKV1Byb3h5LCBQUk9UT0NPTFMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IGNwIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcywgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgYXN5bmNtYXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIGdldENocm9tZVZlcnNpb24sIGdldENocm9tZWRyaXZlckRpciwgQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HLFxuICBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoLCBDRF9DRE4sXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGNvbXBhcmVWZXJzaW9ucyBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IGZyb20gJy4vc3RvcmFnZS1jbGllbnQnO1xuaW1wb3J0IHsgdG9XM2NDYXBOYW1lcywgZ2V0Q2FwVmFsdWUgfSBmcm9tICcuL3Byb3RvY29sLWhlbHBlcnMnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0Nocm9tZWRyaXZlcicpO1xuXG5jb25zdCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTiA9IDczO1xuY29uc3QgREVGQVVMVF9IT1NUID0gJzEyNy4wLjAuMSc7XG5jb25zdCBNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUID0gNzU7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA5NTE1O1xuY29uc3QgQ0hST01FX0JVTkRMRV9JRCA9ICdjb20uYW5kcm9pZC5jaHJvbWUnO1xuY29uc3QgV0VCVklFV19TSEVMTF9CVU5ETEVfSUQgPSAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnO1xuY29uc3QgV0VCVklFV19CVU5ETEVfSURTID0gW1xuICAnY29tLmdvb2dsZS5hbmRyb2lkLndlYnZpZXcnLFxuICAnY29tLmFuZHJvaWQud2VidmlldycsXG5dO1xuY29uc3QgQ0hST01FRFJJVkVSX1RVVE9SSUFMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vd3JpdGluZy1ydW5uaW5nLWFwcGl1bS93ZWIvY2hyb21lZHJpdmVyLm1kJztcbmNvbnN0IFZFUlNJT05fUEFUVEVSTiA9IC8oW1xcZC5dKykvO1xuXG5jb25zdCBDRF9WRVJTSU9OX1RJTUVPVVQgPSA1MDAwO1xuXG5jbGFzcyBDaHJvbWVkcml2ZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBob3N0ID0gREVGQVVMVF9IT1NULFxuICAgICAgcG9ydCA9IERFRkFVTFRfUE9SVCxcbiAgICAgIHVzZVN5c3RlbUV4ZWN1dGFibGUgPSBmYWxzZSxcbiAgICAgIGV4ZWN1dGFibGUsXG4gICAgICBleGVjdXRhYmxlRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKCksXG4gICAgICBidW5kbGVJZCxcbiAgICAgIG1hcHBpbmdQYXRoLFxuICAgICAgY21kQXJncyxcbiAgICAgIGFkYixcbiAgICAgIHZlcmJvc2UsXG4gICAgICBsb2dQYXRoLFxuICAgICAgZGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgICBkZXRhaWxzLFxuICAgICAgaXNBdXRvZG93bmxvYWRFbmFibGVkID0gZmFsc2UsXG4gICAgfSA9IGFyZ3M7XG5cbiAgICB0aGlzLnByb3h5SG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wcm94eVBvcnQgPSBwb3J0O1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMuY21kQXJncyA9IGNtZEFyZ3M7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICB0aGlzLnVzZVN5c3RlbUV4ZWN1dGFibGUgPSB1c2VTeXN0ZW1FeGVjdXRhYmxlO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gZXhlY3V0YWJsZTtcbiAgICB0aGlzLmV4ZWN1dGFibGVEaXIgPSBleGVjdXRhYmxlRGlyO1xuICAgIHRoaXMubWFwcGluZ1BhdGggPSBtYXBwaW5nUGF0aDtcbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5leGVjdXRhYmxlVmVyaWZpZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRlID0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQ7XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkoe3NlcnZlcjogdGhpcy5wcm94eUhvc3QsIHBvcnQ6IHRoaXMucHJveHlQb3J0fSk7XG4gICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTtcbiAgICB0aGlzLmxvZ1BhdGggPSBsb2dQYXRoO1xuICAgIHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2sgPSAhIWRpc2FibGVCdWlsZENoZWNrO1xuICAgIHRoaXMuc3RvcmFnZUNsaWVudCA9IGlzQXV0b2Rvd25sb2FkRW5hYmxlZFxuICAgICAgPyBuZXcgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCh7IGNocm9tZWRyaXZlckRpcjogdGhpcy5leGVjdXRhYmxlRGlyIH0pXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHt9O1xuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBhc3luYyBnZXREcml2ZXJzTWFwcGluZyAoKSB7XG4gICAgbGV0IG1hcHBpbmcgPSBfLmNsb25lRGVlcChDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcpO1xuICAgIGlmICh0aGlzLm1hcHBpbmdQYXRoKSB7XG4gICAgICBsb2cuZGVidWcoYEF0dGVtcHRpbmcgdG8gdXNlIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSdgKTtcbiAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHRoaXMubWFwcGluZ1BhdGgpKSB7XG4gICAgICAgIGxvZy53YXJuKGBObyBmaWxlIGZvdW5kIGF0ICcke3RoaXMubWFwcGluZ1BhdGh9J2ApO1xuICAgICAgICBsb2cuaW5mbygnRGVmYXVsdGluZyB0byB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWFwcGluZyA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUodGhpcy5tYXBwaW5nUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy53YXJuKGBFcnJvciBwYXJzaW5nIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgbG9nLmluZm8oJ0RlZmF1bHRpbmcgdG8gdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmRlYnVnKCdVc2luZyB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWVzIGZvciBtaW5pbXVtIGNocm9tZSB2ZXJzaW9uIGFyZSBzZW12ZXIgY29tcGxpYW50XG4gICAgZm9yIChjb25zdCBbY2RWZXJzaW9uLCBjaHJvbWVWZXJzaW9uXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShjaHJvbWVWZXJzaW9uKTtcbiAgICAgIGlmIChjb2VyY2VkVmVyc2lvbikge1xuICAgICAgICBtYXBwaW5nW2NkVmVyc2lvbl0gPSBjb2VyY2VkVmVyc2lvbi52ZXJzaW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oYCcke2Nocm9tZVZlcnNpb259JyBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gU2tpcHBpbmcgaXRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBpbmc7XG4gIH1cblxuICBhc3luYyBnZXRDaHJvbWVkcml2ZXJzIChtYXBwaW5nKSB7XG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdmVyc2lvbnMgYXZhaWxhYmxlXG4gICAgY29uc3QgZXhlY3V0YWJsZXMgPSBhd2FpdCBmcy5nbG9iKGAke3RoaXMuZXhlY3V0YWJsZURpcn0vKmApO1xuICAgIGxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIGV4ZWN1dGFibGVzLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgYGluICcke3RoaXMuZXhlY3V0YWJsZURpcn0nYCk7XG4gICAgY29uc3QgY2RzID0gKGF3YWl0IGFzeW5jbWFwKGV4ZWN1dGFibGVzLCBhc3luYyBmdW5jdGlvbiBtYXBDaHJvbWVkcml2ZXIgKGV4ZWN1dGFibGUpIHtcbiAgICAgIGNvbnN0IGxvZ0Vycm9yID0gKHttZXNzYWdlLCBzdGRvdXQgPSBudWxsLCBzdGRlcnIgPSBudWxsfSkgPT4ge1xuICAgICAgICBsZXQgZXJyTXNnID0gYENhbm5vdCByZXRyaWV2ZSB2ZXJzaW9uIG51bWJlciBmcm9tICcke3BhdGguYmFzZW5hbWUoZXhlY3V0YWJsZSl9JyBDaHJvbWVkcml2ZXIgYmluYXJ5LiBgICtcbiAgICAgICAgICBgTWFrZSBzdXJlIGl0IHJldHVybnMgYSB2YWxpZCB2ZXJzaW9uIHN0cmluZyBpbiByZXNwb25zZSB0byAnLS12ZXJzaW9uJyBjb21tYW5kIGxpbmUgYXJndW1lbnQuICR7bWVzc2FnZX1gO1xuICAgICAgICBpZiAoc3Rkb3V0KSB7XG4gICAgICAgICAgZXJyTXNnICs9IGBcXG5TdGRvdXQ6ICR7c3Rkb3V0fWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZGVycikge1xuICAgICAgICAgIGVyck1zZyArPSBgXFxuU3RkZXJyOiAke3N0ZGVycn1gO1xuICAgICAgICB9XG4gICAgICAgIGxvZy53YXJuKGVyck1zZyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcblxuICAgICAgbGV0IHN0ZG91dDtcbiAgICAgIGxldCBzdGRlcnI7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IGV4ZWMoZXhlY3V0YWJsZSwgWyctLXZlcnNpb24nXSwge1xuICAgICAgICAgIHRpbWVvdXQ6IENEX1ZFUlNJT05fVElNRU9VVCxcbiAgICAgICAgfSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghKGVyci5tZXNzYWdlIHx8ICcnKS5pbmNsdWRlcygndGltZWQgb3V0JykgJiYgIShlcnIuc3Rkb3V0IHx8ICcnKS5pbmNsdWRlcygnU3RhcnRpbmcgQ2hyb21lRHJpdmVyJykpIHtcbiAgICAgICAgICByZXR1cm4gbG9nRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoaXMgaGFzIHRpbWVkIG91dCwgaXQgaGFzIGFjdHVhbGx5IHN0YXJ0ZWQgQ2hyb21lZHJpdmVyLFxuICAgICAgICAvLyBpbiB3aGljaCBjYXNlIHRoZXJlIHdpbGwgYWxzbyBiZSB0aGUgdmVyc2lvbiBzdHJpbmcgaW4gdGhlIG91dHB1dFxuICAgICAgICBzdGRvdXQgPSBlcnIuc3Rkb3V0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXRjaCA9IC9DaHJvbWVEcml2ZXJcXHMrXFwoP3Y/KFtcXGQuXSspXFwpPy9pLmV4ZWMoc3Rkb3V0KTsgLy8gaHR0cHM6Ly9yZWdleDEwMS5jb20vci96cGo1d0EvMVxuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe21lc3NhZ2U6ICdDYW5ub3QgcGFyc2UgdGhlIHZlcnNpb24gc3RyaW5nJywgc3Rkb3V0LCBzdGRlcnJ9KTtcbiAgICAgIH1cbiAgICAgIGxldCB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gICAgICBsZXQgbWluQ2hyb21lVmVyc2lvbiA9IG1hcHBpbmdbdmVyc2lvbl07XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UodmVyc2lvbik7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgLy8gYmVmb3JlIDIwMTktMDMtMDYgdmVyc2lvbnMgd2VyZSBvZiB0aGUgZm9ybSBtYWpvci5taW5vclxuICAgICAgICBpZiAoY29lcmNlZFZlcnNpb24ubWFqb3IgPCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIHZlcnNpb24gPSBgJHtjb2VyY2VkVmVyc2lvbi5tYWpvcn0uJHtjb2VyY2VkVmVyc2lvbi5taW5vcn1gO1xuICAgICAgICAgIG1pbkNocm9tZVZlcnNpb24gPSBtYXBwaW5nW3ZlcnNpb25dO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvbiAmJiBjb2VyY2VkVmVyc2lvbi5tYWpvciA+PSBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIC8vIEFzc3VtZSB0aGUgbWFqb3IgQ2hyb21lIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1ham9yIHZlcnNpb25cbiAgICAgICAgICBtaW5DaHJvbWVWZXJzaW9uID0gYCR7Y29lcmNlZFZlcnNpb24ubWFqb3J9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhlY3V0YWJsZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgbWluQ2hyb21lVmVyc2lvbixcbiAgICAgIH07XG4gICAgfSkpXG4gICAgICAuZmlsdGVyKChjZCkgPT4gISFjZClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBjb21wYXJlVmVyc2lvbnMoYi52ZXJzaW9uLCBhLnZlcnNpb24pKTtcbiAgICBpZiAoXy5pc0VtcHR5KGNkcykpIHtcbiAgICAgIGxvZy5pbmZvKGBObyBDaHJvbWVkcml2ZXJzIHdlcmUgZm91bmQgaW4gJyR7dGhpcy5leGVjdXRhYmxlRGlyfSdgKTtcbiAgICAgIHJldHVybiBjZHM7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgVGhlIGZvbGxvd2luZyBDaHJvbWVkcml2ZXIgZXhlY3V0YWJsZXMgd2VyZSBmb3VuZDpgKTtcbiAgICBmb3IgKGNvbnN0IGNkIG9mIGNkcykge1xuICAgICAgbG9nLmRlYnVnKGAgICAgJyR7Y2QuZXhlY3V0YWJsZX0nICh2ZXJzaW9uICcke2NkLnZlcnNpb259JywgbWluaW11bSBDaHJvbWUgdmVyc2lvbiAnJHtjZC5taW5DaHJvbWVWZXJzaW9uID8gY2QubWluQ2hyb21lVmVyc2lvbiA6ICdVbmtub3duJ30nKWApO1xuICAgIH1cbiAgICByZXR1cm4gY2RzO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2hyb21lVmVyc2lvbiAoKSB7XG4gICAgLy8gVHJ5IHRvIHJldHJpZXZlIHRoZSB2ZXJzaW9uIGZyb20gYGRldGFpbHNgIHByb3BlcnR5IGlmIGl0IGlzIHNldFxuICAgIC8vIFRoZSBgaW5mb2AgaXRlbSBtdXN0IGNvbnRhaW4gdGhlIG91dHB1dCBvZiAvanNvbi92ZXJzaW9uIENEUCBjb21tYW5kXG4gICAgLy8gd2hlcmUgYEJyb3dzZXJgIGZpZWxkIGxvb2tzIGxpa2UgYENocm9tZS83Mi4wLjM2MDEuMGBgXG4gICAgaWYgKHRoaXMuZGV0YWlscz8uaW5mbykge1xuICAgICAgbG9nLmRlYnVnKGBCcm93c2VyIHZlcnNpb24gaW4gdGhlIHN1cHBsaWVkIGRldGFpbHM6ICR7dGhpcy5kZXRhaWxzPy5pbmZvPy5Ccm93c2VyfWApO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBWRVJTSU9OX1BBVFRFUk4uZXhlYyh0aGlzLmRldGFpbHM/LmluZm8/LkJyb3dzZXIpO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uTWF0Y2hbMV0pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBjb2VyY2VkVmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY2hyb21lVmVyc2lvbjtcblxuICAgIC8vIGluIGNhc2Ugb2YgV2ViVmlldyBCcm93c2VyIFRlc3Rlciwgc2ltcGx5IHRyeSB0byBmaW5kIHRoZSB1bmRlcmx5aW5nIHdlYnZpZXdcbiAgICBpZiAodGhpcy5idW5kbGVJZCA9PT0gV0VCVklFV19TSEVMTF9CVU5ETEVfSUQpIHtcbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIHJldHVybiBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBvbiBBbmRyb2lkIDctOSB3ZWJ2aWV3cyBhcmUgYmFja2VkIGJ5IHRoZSBtYWluIENocm9tZSwgbm90IHRoZSBzeXN0ZW0gd2Vidmlld1xuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAgICAgaWYgKGFwaUxldmVsID49IDI0ICYmIGFwaUxldmVsIDw9IDI4ICYmXG4gICAgICAgICAgW1dFQlZJRVdfU0hFTExfQlVORExFX0lELCAuLi5XRUJWSUVXX0JVTkRMRV9JRFNdLmluY2x1ZGVzKHRoaXMuYnVuZGxlSWQpKSB7XG4gICAgICAgIHRoaXMuYnVuZGxlSWQgPSBDSFJPTUVfQlVORExFX0lEO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRyeSBvdXQgd2Vidmlld3Mgd2hlbiBubyBidW5kbGUgaWQgaXMgc2VudCBpblxuICAgIGlmICghdGhpcy5idW5kbGVJZCkge1xuICAgICAgLy8gZGVmYXVsdCB0byB0aGUgZ2VuZXJpYyBDaHJvbWUgYnVuZGxlXG4gICAgICB0aGlzLmJ1bmRsZUlkID0gQ0hST01FX0JVTkRMRV9JRDtcblxuICAgICAgLy8gd2UgaGF2ZSBhIHdlYnZpZXcgb2Ygc29tZSBzb3J0LCBzbyB0cnkgdG8gZmluZCB0aGUgYnVuZGxlIHZlcnNpb25cbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgZG8gbm90IGhhdmUgYSBjaHJvbWUgdmVyc2lvbiwgaXQgbXVzdCBub3QgYmUgYSB3ZWJ2aWV3XG4gICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICBjaHJvbWVWZXJzaW9uID0gYXdhaXQgZ2V0Q2hyb21lVmVyc2lvbih0aGlzLmFkYiwgdGhpcy5idW5kbGVJZCk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIGl0IGlzIHNlbXZlciwgc28gbGF0ZXIgY2hlY2tzIHdvbid0IGZhaWxcbiAgICByZXR1cm4gY2hyb21lVmVyc2lvbiA/IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbikgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJpdmVyc01hcHBpbmcgKG5ld01hcHBpbmcpIHtcbiAgICBsZXQgc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyA9IHRydWU7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm1hcHBpbmdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMubWFwcGluZ1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld01hcHBpbmcsIG51bGwsIDIpLCAndXRmOCcpO1xuICAgICAgICBzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy53YXJuKGBDYW5ub3Qgc3RvcmUgdGhlIHVwZGF0ZWQgY2hyb21lZHJpdmVycyBtYXBwaW5nIGludG8gJyR7dGhpcy5tYXBwaW5nUGF0aH0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgcmVkdWNlIHRoZSBwZXJmb3JtYW5jZSBvZiBmdXJ0aGVyIGV4ZWN1dGlvbnMuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmcpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HLCBuZXdNYXBwaW5nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyICgpIHtcbiAgICBpZiAoIXRoaXMuYWRiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBhd2FpdCB0aGlzLmdldERyaXZlcnNNYXBwaW5nKCk7XG4gICAgaWYgKCFfLmlzRW1wdHkobWFwcGluZykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlIG1vc3QgcmVjZW50IGtub3duIENocm9tZSB2ZXJzaW9uOiAke18udmFsdWVzKG1hcHBpbmcpWzBdfWApO1xuICAgIH1cblxuICAgIGxldCBkaWRTdG9yYWdlU3luYyA9IGZhbHNlO1xuICAgIGNvbnN0IHN5bmNDaHJvbWVkcml2ZXJzID0gYXN5bmMgKGNocm9tZVZlcnNpb24pID0+IHtcbiAgICAgIGRpZFN0b3JhZ2VTeW5jID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJldHJpZXZlZE1hcHBpbmcgPSBhd2FpdCB0aGlzLnN0b3JhZ2VDbGllbnQucmV0cmlldmVNYXBwaW5nKCk7XG4gICAgICBsb2cuZGVidWcoJ0dvdCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgZnJvbSB0aGUgc3RvcmFnZTogJyArXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHJldHJpZXZlZE1hcHBpbmcsIG51bGwsIDIpKTtcbiAgICAgIGNvbnN0IGRyaXZlcktleXMgPSBhd2FpdCB0aGlzLnN0b3JhZ2VDbGllbnQuc3luY0RyaXZlcnMoe1xuICAgICAgICBtaW5Ccm93c2VyVmVyc2lvbjogY2hyb21lVmVyc2lvbi5tYWpvcixcbiAgICAgIH0pO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJLZXlzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyA9IGRyaXZlcktleXMucmVkdWNlKChhY2MsIHgpID0+IHtcbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIG1pbkJyb3dzZXJWZXJzaW9ufSA9IHJldHJpZXZlZE1hcHBpbmdbeF07XG4gICAgICAgIGFjY1t2ZXJzaW9uXSA9IG1pbkJyb3dzZXJWZXJzaW9uO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgT2JqZWN0LmFzc2lnbihtYXBwaW5nLCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKG1hcHBpbmcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGNkcyA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lZHJpdmVycyhtYXBwaW5nKTtcblxuICAgICAgY29uc3QgbWlzc2luZ1ZlcnNpb25zID0ge307XG4gICAgICBmb3IgKGNvbnN0IHt2ZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9ufSBvZiBjZHMpIHtcbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uIHx8IG1hcHBpbmdbdmVyc2lvbl0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2VyY2VkVmVyID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uKTtcbiAgICAgICAgaWYgKCFjb2VyY2VkVmVyIHx8IGNvZXJjZWRWZXIubWFqb3IgPCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWlzc2luZ1ZlcnNpb25zW3ZlcnNpb25dID0gbWluQ2hyb21lVmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdWZXJzaW9ucykpIHtcbiAgICAgICAgbG9nLmluZm8oYEZvdW5kICR7dXRpbC5wbHVyYWxpemUoJ0Nocm9tZWRyaXZlcicsIF8uc2l6ZShtaXNzaW5nVmVyc2lvbnMpLCB0cnVlKX0sIGAgK1xuICAgICAgICAgIGB3aGljaCAke18uc2l6ZShtaXNzaW5nVmVyc2lvbnMpID09PSAxID8gJ2lzJyA6ICdhcmUnfSBtaXNzaW5nIGluIHRoZSBsaXN0IG9mIGtub3duIHZlcnNpb25zOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtaXNzaW5nVmVyc2lvbnMpKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVEcml2ZXJzTWFwcGluZyhPYmplY3QuYXNzaWduKG1hcHBpbmcsIG1pc3NpbmdWZXJzaW9ucykpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlQnVpbGRDaGVjaykge1xuICAgICAgICBpZiAoXy5pc0VtcHR5KGNkcykpIHtcbiAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGUgYXZhaWxhYmxlIGZvciB1c2UgaWYgYCArXG4gICAgICAgICAgICBgJ2Nocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrJyBjYXBhYmlsaXR5IGlzIHNldCB0byAndHJ1ZSdgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7dmVyc2lvbiwgZXhlY3V0YWJsZX0gPSBjZHNbMF07XG4gICAgICAgIGxvZy53YXJuKGBDaHJvbWUgYnVpbGQgY2hlY2sgZGlzYWJsZWQuIFVzaW5nIG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uICgke3ZlcnNpb259LCBhdCAnJHtleGVjdXRhYmxlfScpYCk7XG4gICAgICAgIGxvZy53YXJuKGBJZiB0aGlzIGlzIHdyb25nLCBzZXQgJ2Nocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrJyBjYXBhYmlsaXR5IHRvICdmYWxzZSdgKTtcbiAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNocm9tZVZlcnNpb24gPSBhd2FpdCB0aGlzLmdldENocm9tZVZlcnNpb24oKTtcbiAgICAgIGlmICghY2hyb21lVmVyc2lvbikge1xuICAgICAgICAvLyB1bmFibGUgdG8gZ2V0IHRoZSBjaHJvbWUgdmVyc2lvblxuICAgICAgICBpZiAoXy5pc0VtcHR5KGNkcykpIHtcbiAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGUgYXZhaWxhYmxlIGZvciB1c2UgaWYgYCArXG4gICAgICAgICAgICBgdGhlIGN1cnJlbnQgQ2hyb21lIHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7dmVyc2lvbiwgZXhlY3V0YWJsZX0gPSBjZHNbMF07XG4gICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gZGlzY292ZXIgQ2hyb21lIHZlcnNpb24uIFVzaW5nIENocm9tZWRyaXZlciAke3ZlcnNpb259IGF0ICcke2V4ZWN1dGFibGV9J2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgQ2hyb21lIGJ1bmRsZSAnJHt0aGlzLmJ1bmRsZUlkfScgdmVyc2lvbiAnJHtjaHJvbWVWZXJzaW9ufSdgKTtcblxuICAgICAgY29uc3QgbWF0Y2hpbmdEcml2ZXJzID0gY2RzLmZpbHRlcigoe21pbkNocm9tZVZlcnNpb259KSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbkNocm9tZVZlcnNpb25TID0gbWluQ2hyb21lVmVyc2lvbiAmJiBzZW12ZXIuY29lcmNlKG1pbkNocm9tZVZlcnNpb24pO1xuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb25TKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNocm9tZVZlcnNpb24ubWFqb3IgPiBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTlxuICAgICAgICAgID8gbWluQ2hyb21lVmVyc2lvblMubWFqb3IgPT09IGNocm9tZVZlcnNpb24ubWFqb3JcbiAgICAgICAgICA6IHNlbXZlci5ndGUoY2hyb21lVmVyc2lvbiwgbWluQ2hyb21lVmVyc2lvblMpO1xuICAgICAgfSk7XG4gICAgICBpZiAoXy5pc0VtcHR5KG1hdGNoaW5nRHJpdmVycykpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmFnZUNsaWVudCAmJiAhZGlkU3RvcmFnZVN5bmMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHN5bmNDaHJvbWVkcml2ZXJzKGNocm9tZVZlcnNpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKGBDYW5ub3Qgc3luY2hyb25pemUgbG9jYWwgY2hyb21lZHJpdmVycyB3aXRoIHRoZSByZW1vdGUgc3RvcmFnZSBhdCAke0NEX0NETn06IGAgK1xuICAgICAgICAgICAgICBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgbG9nLmRlYnVnKGUuc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdXRvZG93bmxvYWRTdWdnZXN0aW9uID1cbiAgICAgICAgICAnWW91IGNvdWxkIGFsc28gdHJ5IHRvIGVuYWJsZSBhdXRvbWF0ZWQgY2hyb21lZHJpdmVycyBkb3dubG9hZCBzZXJ2ZXIgZmVhdHVyZSc7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlIENocm9tZSAnJHtjaHJvbWVWZXJzaW9ufScuIGAgK1xuICAgICAgICAgICghdGhpcy5zdG9yYWdlQ2xpZW50ID8gYCR7YXV0b2Rvd25sb2FkU3VnZ2VzdGlvbn0uIGAgOiAnJykgK1xuICAgICAgICAgIGBTZWUgJHtDSFJPTUVEUklWRVJfVFVUT1JJQUx9IGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmluUGF0aCA9IG1hdGNoaW5nRHJpdmVyc1swXS5leGVjdXRhYmxlO1xuICAgICAgbG9nLmRlYnVnKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdleGVjdXRhYmxlJywgbWF0Y2hpbmdEcml2ZXJzLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgICBgY2FwYWJsZSBvZiBhdXRvbWF0aW5nIENocm9tZSAnJHtjaHJvbWVWZXJzaW9ufScuXFxuQ2hvb3NpbmcgdGhlIG1vc3QgcmVjZW50LCAnJHtiaW5QYXRofScuYCk7XG4gICAgICBsb2cuZGVidWcoJ0lmIGEgc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1aXJlZCwgc3BlY2lmeSBpdCB3aXRoIHRoZSBgY2hyb21lZHJpdmVyRXhlY3V0YWJsZWAnICtcbiAgICAgICAgJ2Rlc2lyZWQgY2FwYWJpbGl0eS4nKTtcbiAgICAgIHJldHVybiBiaW5QYXRoO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICB9IHdoaWxlICh0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRDaHJvbWVkcml2ZXJQYXRoICgpIHtcbiAgICBpZiAodGhpcy5leGVjdXRhYmxlVmVyaWZpZWQpIHJldHVybjsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICAvLyB0aGUgZXhlY3V0YWJsZSBtaWdodCBiZSBzZXQgKGlmIHBhc3NlZCBpbilcbiAgICAvLyBvciB3ZSBtaWdodCB3YW50IHRvIHVzZSB0aGUgYmFzaWMgb25lIGluc3RhbGxlZCB3aXRoIHRoaXMgZHJpdmVyXG4gICAgLy8gb3Igd2Ugd2FudCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZVxuICAgIGlmICghdGhpcy5jaHJvbWVkcml2ZXIpIHtcbiAgICAgIHRoaXMuY2hyb21lZHJpdmVyID0gdGhpcy51c2VTeXN0ZW1FeGVjdXRhYmxlXG4gICAgICAgID8gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCgpXG4gICAgICAgIDogYXdhaXQgdGhpcy5nZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHModGhpcy5jaHJvbWVkcml2ZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgYSBjaHJvbWVkcml2ZXIgYmluYXJ5IGF0IHRoZSBwYXRoIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY2hyb21lZHJpdmVyfSwgYnV0IGl0IGRvZXNuJ3QgZXhpc3QhYCk7XG4gICAgfVxuICAgIHRoaXMuZXhlY3V0YWJsZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICBsb2cuaW5mbyhgU2V0IGNocm9tZWRyaXZlciBiaW5hcnkgYXM6ICR7dGhpcy5jaHJvbWVkcml2ZXJ9YCk7XG4gIH1cblxuICBzeW5jUHJvdG9jb2wgKGNkVmVyc2lvbiA9IG51bGwpIHtcbiAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoY2RWZXJzaW9uKTtcbiAgICBpZiAoIWNvZXJjZWRWZXJzaW9uIHx8IGNvZXJjZWRWZXJzaW9uLm1ham9yIDwgTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCkge1xuICAgICAgbG9nLmRlYnVnKGBDaHJvbWVkcml2ZXIgdi4gJHtjZFZlcnNpb259IGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgJHtQUk9UT0NPTFMuVzNDfSBwcm90b2NvbC4gYCArXG4gICAgICAgIGBEZWZhdWx0aW5nIHRvICR7UFJPVE9DT0xTLk1KU09OV1B9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNocm9tZU9wdGlvbnMgPSBnZXRDYXBWYWx1ZSh0aGlzLmNhcGFiaWxpdGllcywgJ2Nocm9tZU9wdGlvbnMnLCB7fSk7XG4gICAgaWYgKGNocm9tZU9wdGlvbnMudzNjID09PSBmYWxzZSkge1xuICAgICAgbG9nLmluZm8oYENocm9tZWRyaXZlciB2LiAke2NkVmVyc2lvbn0gc3VwcG9ydHMgJHtQUk9UT0NPTFMuVzNDfSBwcm90b2NvbCwgYCArXG4gICAgICAgIGBidXQgJHtQUk9UT0NPTFMuTUpTT05XUH0gb25lIGhhcyBiZWVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLlczQztcbiAgICAvLyBnaXZlbiBjYXBzIG1pZ2h0IG5vdCBiZSBwcm9wZXJseSBwcmVmaXhlZFxuICAgIC8vIHNvIHdlIHRyeSB0byBmaXggdGhlbSBpbiBvcmRlciB0byBwcm9wZXJseSBpbml0XG4gICAgLy8gdGhlIG5ldyBXM0Mgc2Vzc2lvblxuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdG9XM2NDYXBOYW1lcyh0aGlzLmNhcGFiaWxpdGllcyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2FwcywgZW1pdFN0YXJ0aW5nU3RhdGUgPSB0cnVlKSB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChjYXBzKTtcblxuICAgIC8vIHNldCB0aGUgbG9nZ2luZyBwcmVmZXJlbmNlcyB0byBBTEwgdGhlIGNvbnNvbGUgbG9nc1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcyA9IF8uY2xvbmVEZWVwKGdldENhcFZhbHVlKGNhcHMsICdsb2dnaW5nUHJlZnMnLCB7fSkpO1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzLmJyb3dzZXIpKSB7XG4gICAgICB0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMuYnJvd3NlciA9ICdBTEwnO1xuICAgIH1cblxuICAgIGlmIChlbWl0U3RhcnRpbmdTdGF0ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RBUlRJTkcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSBbJy0tdXJsLWJhc2U9d2QvaHViJywgYC0tcG9ydD0ke3RoaXMucHJveHlQb3J0fWBdO1xuICAgIGlmICh0aGlzLmFkYiAmJiB0aGlzLmFkYi5hZGJQb3J0KSB7XG4gICAgICBhcmdzLnB1c2goYC0tYWRiLXBvcnQ9JHt0aGlzLmFkYi5hZGJQb3J0fWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0FycmF5KHRoaXMuY21kQXJncykpIHtcbiAgICAgIGFyZ3MucHVzaCguLi50aGlzLmNtZEFyZ3MpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2dQYXRoKSB7XG4gICAgICBhcmdzLnB1c2goYC0tbG9nLXBhdGg9JHt0aGlzLmxvZ1BhdGh9YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICBhcmdzLnB1c2goJy0tZGlzYWJsZS1idWlsZC1jaGVjaycpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tdmVyYm9zZScpO1xuICAgIC8vIHdoYXQgYXJlIHRoZSBwcm9jZXNzIHN0ZG91dC9zdGRlcnIgY29uZGl0aW9ucyB3aGVyZWluIHdlIGtub3cgdGhhdFxuICAgIC8vIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkIHRvIG91ciBzYXRpc2ZhY3Rpb24/XG4gICAgY29uc3Qgc3RhcnREZXRlY3RvciA9IChzdGRvdXQpID0+IHN0ZG91dC5zdGFydHNXaXRoKCdTdGFydGluZyAnKTtcblxuICAgIGxldCBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgIGxldCB3ZWJ2aWV3VmVyc2lvbjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0Q2hyb21lZHJpdmVyUGF0aCgpO1xuICAgICAgYXdhaXQgdGhpcy5raWxsQWxsKCk7XG5cbiAgICAgIC8vIHNldCB1cCBvdXIgc3VicHJvY2VzcyBvYmplY3RcbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuY2hyb21lZHJpdmVyLCBhcmdzKTtcbiAgICAgIHByb2Nlc3NJc0FsaXZlID0gdHJ1ZTtcblxuICAgICAgLy8gaGFuZGxlIGxvZyBvdXRwdXRcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIC8vIGlmIHRoZSBjZCBvdXRwdXQgaXMgbm90IHByaW50ZWQsIGZpbmQgdGhlIGNocm9tZSB2ZXJzaW9uIGFuZCBwcmludFxuICAgICAgICAvLyB3aWxsIGdldCBhIHJlc3BvbnNlIGxpa2VcbiAgICAgICAgLy8gICBEZXZUb29scyByZXNwb25zZToge1xuICAgICAgICAvLyAgICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNhbXBsZWFwcFwiLFxuICAgICAgICAvLyAgICAgIFwiQnJvd3NlclwiOiBcIkNocm9tZS81NS4wLjI4ODMuOTFcIixcbiAgICAgICAgLy8gICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjJcIixcbiAgICAgICAgLy8gICAgICBcIlVzZXItQWdlbnRcIjogXCIuLi5cIixcbiAgICAgICAgLy8gICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2XCJcbiAgICAgICAgLy8gICB9XG4gICAgICAgIGNvbnN0IG91dCA9IHN0ZG91dCArIHN0ZGVycjtcbiAgICAgICAgbGV0IG1hdGNoID0gL1wiQnJvd3NlclwiOiBcIiguKilcIi8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB3ZWJ2aWV3VmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgV2VidmlldyB2ZXJzaW9uOiAnJHt3ZWJ2aWV3VmVyc2lvbn0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbHNvIHByaW50IGNocm9tZWRyaXZlciB2ZXJzaW9uIHRvIGxvZ3NcbiAgICAgICAgLy8gd2lsbCBvdXRwdXQgc29tZXRoaW5nIGxpa2VcbiAgICAgICAgLy8gIFN0YXJ0aW5nIENocm9tZURyaXZlciAyLjMzLjUwNjEwNiAoOGEwNmMzOWM0NTgyZmJmYmFiNjk2NmRiYjFjMzhhOTE3M2JmYjFhMikgb24gcG9ydCA5NTE1XG4gICAgICAgIG1hdGNoID0gL1N0YXJ0aW5nIENocm9tZURyaXZlciAoWy5cXGRdKykvLmV4ZWMob3V0KTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBDaHJvbWVkcml2ZXIgdmVyc2lvbjogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgICAgIHRoaXMuc3luY1Byb3RvY29sKG1hdGNoWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdpdmUgdGhlIG91dHB1dCBpZiBpdCBpcyByZXF1ZXN0ZWRcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgKHN0ZG91dCB8fCAnJykudHJpbSgpLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW0oKS5sZW5ndGgpIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgICAgICAgICBsb2cuZGVidWcoYFtTVERPVVRdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgbGluZSBvZiAoc3RkZXJyIHx8ICcnKS50cmltKCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpLmxlbmd0aCkgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgICAgICAgIGxvZy5lcnJvcihgW1NUREVSUl0gJHtsaW5lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGhhbmRsZSBvdXQtb2YtYm91bmQgZXhpdCBieSBzaW1wbHkgZW1pdHRpbmcgYSBzdG9wcGVkIHN0YXRlXG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQSU5HICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORykge1xuICAgICAgICAgIGxldCBtc2cgPSBgQ2hyb21lZHJpdmVyIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0sIGAgK1xuICAgICAgICAgICAgICAgICAgICBgc2lnbmFsICR7c2lnbmFsfWA7XG4gICAgICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nLmluZm8oYFNwYXduaW5nIGNocm9tZWRyaXZlciB3aXRoOiAke3RoaXMuY2hyb21lZHJpdmVyfSBgICtcbiAgICAgICAgICAgICAgIGAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgLy8gc3RhcnQgc3VicHJvYyBhbmQgd2FpdCBmb3Igc3RhcnREZXRlY3RvclxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yT25saW5lKCk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMuZW1pdChDaHJvbWVkcml2ZXIuRVZFTlRfRVJST1IsIGUpO1xuICAgICAgLy8ganVzdCBiZWNhdXNlIHdlIGhhZCBhbiBlcnJvciBkb2Vzbid0IG1lYW4gdGhlIGNocm9tZWRyaXZlciBwcm9jZXNzXG4gICAgICAvLyBmaW5pc2hlZDsgd2Ugc2hvdWxkIGNsZWFuIHVwIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHByb2Nlc3NJc0FsaXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgICAvLyBvZnRlbiB0aGUgdXNlcidzIENocm9tZSB2ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHZlcnNpb24gb2YgQ2hyb21lZHJpdmVyXG4gICAgICBpZiAoZS5tZXNzYWdlLmluY2x1ZGVzKCdDaHJvbWUgdmVyc2lvbiBtdXN0IGJlJykpIHtcbiAgICAgICAgbWVzc2FnZSArPSAnVW5hYmxlIHRvIGF1dG9tYXRlIENocm9tZSB2ZXJzaW9uIGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHZlcnNpb24gb2YgQ2hyb21lZHJpdmVyLlxcbic7XG4gICAgICAgIGlmICh3ZWJ2aWV3VmVyc2lvbikge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYENocm9tZSB2ZXJzaW9uIG9uIHRoZSBkZXZpY2U6ICR7d2Vidmlld1ZlcnNpb259XFxuYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyID0gL0Nocm9tZSB2ZXJzaW9uIG11c3QgYmUgKC4rKS8uZXhlYyhlLm1lc3NhZ2UpPy5bMV0gfHwgJyc7XG4gICAgICAgIGlmICh2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgQ2hyb21lZHJpdmVyIHN1cHBvcnRzIENocm9tZSB2ZXJzaW9uKHMpOiAke3ZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXJ9XFxuYDtcbiAgICAgICAgfVxuICAgICAgICBtZXNzYWdlICs9IGBWaXNpdCAnJHtDSFJPTUVEUklWRVJfVFVUT1JJQUx9JyB0byB0cm91Ymxlc2hvb3QgdGhlIHByb2JsZW0uXFxuYDtcbiAgICAgIH1cblxuICAgICAgbWVzc2FnZSArPSBlLm1lc3NhZ2U7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBzZXNzaW9uSWQgKCkge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3Byb3h5LnNlc3Npb25JZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3RhcnQgKCkge1xuICAgIGxvZy5pbmZvKCdSZXN0YXJ0aW5nIGNocm9tZWRyaXZlcicpO1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCByZXN0YXJ0IHdoZW4gd2UncmUgbm90IG9ubGluZVwiKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORyk7XG4gICAgYXdhaXQgdGhpcy5zdG9wKGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0KHRoaXMuY2FwYWJpbGl0aWVzLCBmYWxzZSk7XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yT25saW5lICgpIHtcbiAgICAvLyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IENEIGhhc24ndCBjcmFzaGVkXG4gICAgbGV0IGNocm9tZWRyaXZlclN0b3BwZWQgPSBmYWxzZTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKDIwLCAyMDAsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgICAvLyB3ZSBhcmUgZWl0aGVyIHN0b3BwZWQgb3Igc3RvcHBpbmcsIHNvIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgIGNocm9tZWRyaXZlclN0b3BwZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH0pO1xuICAgIGlmIChjaHJvbWVkcml2ZXJTdG9wcGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nocm9tZURyaXZlciBjcmFzaGVkIGR1cmluZyBzdGFydHVwLicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXNzaW9uICgpIHtcbiAgICBjb25zdCBzZXNzaW9uQ2FwcyA9IHRoaXMuZGVzaXJlZFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDXG4gICAgICA/IHtjYXBhYmlsaXRpZXM6IHthbHdheXNNYXRjaDogdGhpcy5jYXBhYmlsaXRpZXN9fVxuICAgICAgOiB7ZGVzaXJlZENhcGFiaWxpdGllczogdGhpcy5jYXBhYmlsaXRpZXN9O1xuICAgIGxvZy5pbmZvKGBTdGFydGluZyAke3RoaXMuZGVzaXJlZFByb3RvY29sfSBDaHJvbWVkcml2ZXIgc2Vzc2lvbiB3aXRoIGNhcGFiaWxpdGllczogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShzZXNzaW9uQ2FwcywgbnVsbCwgMikpO1xuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywgc2Vzc2lvbkNhcHMpO1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSk7XG4gIH1cblxuICBhc3luYyBzdG9wIChlbWl0U3RhdGVzID0gdHJ1ZSkge1xuICAgIGlmIChlbWl0U3RhdGVzKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnJywgJ0RFTEVURScpO1xuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoJ1NJR1RFUk0nLCAyMDAwMCk7XG4gICAgICBpZiAoZW1pdFN0YXRlcykge1xuICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3RhdGUgKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIGxvZy5kZWJ1ZyhgQ2hhbmdlZCBzdGF0ZSB0byAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cblxuICBhc3luYyBwcm94eVJlcSAocmVxLCByZXMpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzKHJlcSwgcmVzKTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxBbGwgKCkge1xuICAgIGxldCBjbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKClcbiAgICAgID8gYHdtaWMgcHJvY2VzcyB3aGVyZSBcImNvbW1hbmRsaW5lIGxpa2UgJyVjaHJvbWVkcml2ZXIuZXhlJS0tcG9ydD0ke3RoaXMucHJveHlQb3J0fSUnXCIgZGVsZXRlYFxuICAgICAgOiBgcGtpbGwgLTE1IC1mIFwiJHt0aGlzLmNocm9tZWRyaXZlcn0uKi0tcG9ydD0ke3RoaXMucHJveHlQb3J0fVwiYDtcbiAgICBsb2cuZGVidWcoYEtpbGxpbmcgYW55IG9sZCBjaHJvbWVkcml2ZXJzLCBydW5uaW5nOiAke2NtZH1gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgKEIucHJvbWlzaWZ5KGNwLmV4ZWMpKShjbWQpO1xuICAgICAgbG9nLmRlYnVnKCdTdWNjZXNzZnVsbHkgY2xlYW5lZCB1cCBvbGQgY2hyb21lZHJpdmVycycpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oJ05vIG9sZCBjaHJvbWVkcml2ZXJzIHNlZW0gdG8gZXhpc3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGNvbnN0IHVkaWRJbmRleCA9IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtID09PSAnLXMnKTtcbiAgICAgIGNvbnN0IHVkaWQgPSB1ZGlkSW5kZXggPiAtMSA/IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3NbdWRpZEluZGV4ICsgMV0gOiBudWxsO1xuXG4gICAgICBpZiAodWRpZCkge1xuICAgICAgICBsb2cuZGVidWcoYENsZWFuaW5nIHRoaXMgZGV2aWNlJ3MgYWRiIGZvcndhcmRlZCBwb3J0IHNvY2tldCBjb25uZWN0aW9uczogJHt1ZGlkfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKGBDbGVhbmluZyBhbnkgb2xkIGFkYiBmb3J3YXJkZWQgcG9ydCBzb2NrZXQgY29ubmVjdGlvbnNgKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChsZXQgY29ubiBvZiBhd2FpdCB0aGlzLmFkYi5nZXRGb3J3YXJkTGlzdCgpKSB7XG4gICAgICAgICAgLy8gY2hyb21lZHJpdmVyIHdpbGwgYXNrIEFEQiB0byBmb3J3YXJkIGEgcG9ydCBsaWtlIFwiZGV2aWNlSWQgdGNwOnBvcnQgbG9jYWxhYnN0cmFjdDp3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV9wb3J0XCJcbiAgICAgICAgICBpZiAoIShjb25uLmluY2x1ZGVzKCd3ZWJ2aWV3X2RldnRvb2xzJykgJiYgKCF1ZGlkIHx8IGNvbm4uaW5jbHVkZXModWRpZCkpKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHBhcmFtcyA9IGNvbm4uc3BsaXQoL1xccysvKTtcbiAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHBhcmFtc1sxXS5yZXBsYWNlKC9bXFxEXSovLCAnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gY2xlYW4gZm9yd2FyZGVkIHBvcnRzLiBFcnJvcjogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBoYXNXb3JraW5nV2VidmlldyAoKSB7XG4gICAgLy8gc29tZXRpbWVzIGNocm9tZWRyaXZlciBzdG9wcyBhdXRvbWF0aW5nIHdlYnZpZXdzLiB0aGlzIG1ldGhvZCBydW5zIGFcbiAgICAvLyBzaW1wbGUgY29tbWFuZCB0byBkZXRlcm1pbmUgb3VyIHN0YXRlLCBhbmQgcmVzcG9uZHMgYWNjb3JkaW5nbHlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy91cmwnLCAnR0VUJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbkNocm9tZWRyaXZlci5FVkVOVF9FUlJPUiA9ICdjaHJvbWVkcml2ZXJfZXJyb3InO1xuQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEID0gJ3N0b3BwZWQnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUQVJUSU5HID0gJ3N0YXJ0aW5nJztcbkNocm9tZWRyaXZlci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyA9ICdzdG9wcGluZyc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORyA9ICdyZXN0YXJ0aW5nJztcblxuZXhwb3J0IHsgQ2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBDaHJvbWVkcml2ZXI7XG4iXSwiZmlsZSI6ImxpYi9jaHJvbWVkcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
package/build/lib/install.js
CHANGED
|
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.install = install;
|
|
9
8
|
exports.doInstall = doInstall;
|
|
9
|
+
exports.install = install;
|
|
10
10
|
|
|
11
11
|
require("source-map-support/register");
|
|
12
12
|
|
|
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.toW3cCapNames = toW3cCapNames;
|
|
9
8
|
exports.getCapValue = getCapValue;
|
|
9
|
+
exports.toW3cCapNames = toW3cCapNames;
|
|
10
10
|
|
|
11
11
|
require("source-map-support/register");
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
15
15
|
|
|
16
16
|
var _xpath = _interopRequireDefault(require("xpath"));
|
|
17
17
|
|
|
18
|
-
var _xmldom = require("xmldom");
|
|
18
|
+
var _xmldom = require("@xmldom/xmldom");
|
|
19
19
|
|
|
20
20
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
21
21
|
|
|
@@ -388,4 +388,4 @@ var _default = ChromedriverStorageClient;
|
|
|
388
388
|
exports.default = _default;require('source-map-support').install();
|
|
389
389
|
|
|
390
390
|
|
|
391
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zdG9yYWdlLWNsaWVudC5qcyJdLCJuYW1lcyI6WyJUSU1FT1VUX01TIiwiTUFYX1BBUkFMTEVMX0RPV05MT0FEUyIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsImlzQ3JjT2siLCJzcmMiLCJjaGVja3N1bSIsIm1kNSIsImZzIiwiaGFzaCIsIl8iLCJ0b0xvd2VyIiwiZmluZENoaWxkTm9kZSIsInBhcmVudCIsImNoaWxkTmFtZSIsInRleHQiLCJoYXNDaGlsZE5vZGVzIiwiY2hpbGROb2RlSWR4IiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkTm9kZSIsImxvY2FsTmFtZSIsImNoaWxkVGV4dCIsImV4dHJhY3ROb2RlVGV4dCIsIm5vZGUiLCJmaXJzdENoaWxkIiwidXRpbCIsImhhc1ZhbHVlIiwibm9kZVZhbHVlIiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNvbnN0cnVjdG9yIiwiYXJncyIsImNocm9tZWRyaXZlckRpciIsInRpbWVvdXQiLCJtYXBwaW5nIiwicGFyc2VOb3RlcyIsImNvbnRlbnQiLCJyZXN1bHQiLCJ2ZXJzaW9uTWF0Y2giLCJleGVjIiwidmVyc2lvbiIsIm1pbkJyb3dzZXJWZXJzaW9uTWF0Y2giLCJtaW5Ccm93c2VyVmVyc2lvbiIsInJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8iLCJkcml2ZXJLZXkiLCJub3Rlc1VybCIsImluZm9EaWN0Iiwibm90ZXMiLCJhY2NlcHQiLCJkZWJ1ZyIsInBhcnNlU3RvcmFnZVhtbCIsImRvYyIsInNob3VsZFBhcnNlTm90ZXMiLCJkcml2ZXJOb2RlcyIsInhwYXRoIiwic2VsZWN0IiwiaXNFbXB0eSIsInByb21pc2VzIiwiZHJpdmVyTm9kZSIsImtleSIsImluY2x1ZGVzIiwiZXRhZyIsImNkSW5mbyIsInVybCIsIkNEX0NETiIsInRyaW0iLCJmaXJzdCIsInNwbGl0Iiwibm90ZXNQYXRoIiwiaXNOb3Rlc1ByZXNlbnQiLCJyZWR1Y2UiLCJhY2MiLCJpbmZvIiwicHVzaCIsIkIiLCJhbGwiLCJzaXplIiwicmV0cmlldmVNYXBwaW5nIiwieG1sIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiY2xvbmVEZWVwIiwidW56aXBEcml2ZXIiLCJkc3QiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJ6aXAiLCJleHRyYWN0QWxsVG8iLCJjaHJvbWVkcml2ZXJQYXRoIiwid2Fsa0RpciIsIml0ZW1QYXRoIiwiaXNEaXJlY3RvcnkiLCJwYXRoIiwicGFyc2UiLCJuYW1lIiwiRXJyb3IiLCJiYXNlbmFtZSIsIm12IiwibWtkaXJwIiwicmltcmFmIiwic2VsZWN0TWF0Y2hpbmdEcml2ZXJzIiwib3NJbmZvIiwib3B0cyIsInZlcnNpb25zIiwiZHJpdmVyc1RvU3luYyIsImtleXMiLCJmaWx0ZXIiLCJjZE5hbWUiLCJwbHVyYWxpemUiLCJpc05hTiIsIm1pbkJyb3dzZXJWZXJzaW9uSW50IiwicGFyc2VJbnQiLCJjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIiLCJjdXJyZW50TWluQnJvd3NlclZlcnNpb24iLCJ1bmlxIiwibWFwIiwiYXJjaCIsImhhcmR3YXJlTmFtZSIsIlg2NCIsInNvbWUiLCJYODYiLCJPUyIsIm1hYyIsIk0xX0FSQ0hfU1VGRklYIiwicGxhdGZvcm1SZSIsIlJlZ0V4cCIsInRlc3QiLCJyZXRyaWV2ZURyaXZlciIsImluZGV4IiwiYXJjaGl2ZXNSb290IiwiaXNTdHJpY3QiLCJhcmNoaXZlUGF0aCIsInJlc29sdmUiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJpc01ldGVyZWQiLCJlIiwibXNnIiwibWVzc2FnZSIsImVycm9yIiwiZmlsZU5hbWUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJ0YXJnZXRQYXRoIiwiY2htb2QiLCJzeW5jRHJpdmVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzeW5jaHJvbml6ZWREcml2ZXJzIiwiaWR4IiwiZW50cmllcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxVQUFVLEdBQUcsS0FBbkI7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUEvQjs7QUFFQSxNQUFNQyxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLDJCQUFqQixDQUFaOztBQUdBLGVBQWVDLE9BQWYsQ0FBd0JDLEdBQXhCLEVBQTZCQyxRQUE3QixFQUF1QztBQUNyQyxRQUFNQyxHQUFHLEdBQUcsTUFBTUMsa0JBQUdDLElBQUgsQ0FBUUosR0FBUixFQUFhLEtBQWIsQ0FBbEI7QUFDQSxTQUFPSyxnQkFBRUMsT0FBRixDQUFVSixHQUFWLE1BQW1CRyxnQkFBRUMsT0FBRixDQUFVTCxRQUFWLENBQTFCO0FBQ0Q7O0FBRUQsU0FBU00sYUFBVCxDQUF3QkMsTUFBeEIsRUFBZ0NDLFNBQVMsR0FBRyxJQUE1QyxFQUFrREMsSUFBSSxHQUFHLElBQXpELEVBQStEO0FBQzdELE1BQUksQ0FBQ0QsU0FBRCxJQUFjLENBQUNDLElBQW5CLEVBQXlCO0FBQ3ZCLFdBQU8sSUFBUDtBQUNEOztBQUNELE1BQUksQ0FBQ0YsTUFBTSxDQUFDRyxhQUFQLEVBQUwsRUFBNkI7QUFDM0IsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsT0FBSyxJQUFJQyxZQUFZLEdBQUcsQ0FBeEIsRUFBMkJBLFlBQVksR0FBR0osTUFBTSxDQUFDSyxVQUFQLENBQWtCQyxNQUE1RCxFQUFvRUYsWUFBWSxFQUFoRixFQUFvRjtBQUNsRixVQUFNRyxTQUFTLEdBQUdQLE1BQU0sQ0FBQ0ssVUFBUCxDQUFrQkQsWUFBbEIsQ0FBbEI7O0FBQ0EsUUFBSUgsU0FBUyxJQUFJLENBQUNDLElBQWQsSUFBc0JELFNBQVMsS0FBS00sU0FBUyxDQUFDQyxTQUFsRCxFQUE2RDtBQUMzRCxhQUFPRCxTQUFQO0FBQ0Q7O0FBQ0QsUUFBSUwsSUFBSixFQUFVO0FBQ1IsWUFBTU8sU0FBUyxHQUFHQyxlQUFlLENBQUNILFNBQUQsQ0FBakM7O0FBQ0EsVUFBSSxDQUFDRSxTQUFMLEVBQWdCO0FBQ2Q7QUFDRDs7QUFDRCxVQUFJUixTQUFTLElBQUlBLFNBQVMsS0FBS00sU0FBUyxDQUFDQyxTQUFyQyxJQUFrRE4sSUFBSSxLQUFLTyxTQUEvRCxFQUEwRTtBQUN4RSxlQUFPRixTQUFQO0FBQ0Q7O0FBQ0QsVUFBSSxDQUFDTixTQUFELElBQWNDLElBQUksS0FBS08sU0FBM0IsRUFBc0M7QUFDcEMsZUFBT0YsU0FBUDtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxTQUFPLElBQVA7QUFDRDs7QUFFRCxTQUFTRyxlQUFULENBQTBCQyxJQUExQixFQUFnQztBQUM5QixTQUFRLENBQUNBLElBQUQsSUFBUyxDQUFDQSxJQUFJLENBQUNDLFVBQWYsSUFBNkIsQ0FBQ0Msb0JBQUtDLFFBQUwsQ0FBY0gsSUFBSSxDQUFDQyxVQUFMLENBQWdCRyxTQUE5QixDQUEvQixHQUNILElBREcsR0FFSEosSUFBSSxDQUFDQyxVQUFMLENBQWdCRyxTQUZwQjtBQUdEOztBQUdELE1BQU1DLHlCQUFOLENBQWdDO0FBQzlCQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7QUFDdEIsVUFBTTtBQUNKQyxNQUFBQSxlQUFlLEdBQUcsZ0NBRGQ7QUFFSkMsTUFBQUEsT0FBTyxHQUFHbEM7QUFGTixRQUdGZ0MsSUFISjtBQUlBLFNBQUtDLGVBQUwsR0FBdUJBLGVBQXZCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEVBQWY7QUFDRDs7QUFpQkRDLEVBQUFBLFVBQVUsQ0FBRUMsT0FBRixFQUFXO0FBQ25CLFVBQU1DLE1BQU0sR0FBRyxFQUFmO0FBQ0EsVUFBTUMsWUFBWSxHQUFHLHNDQUFzQ0MsSUFBdEMsQ0FBMkNILE9BQTNDLENBQXJCOztBQUNBLFFBQUlFLFlBQUosRUFBa0I7QUFDaEJELE1BQUFBLE1BQU0sQ0FBQ0csT0FBUCxHQUFpQkYsWUFBWSxDQUFDLENBQUQsQ0FBN0I7QUFDRDs7QUFDRCxVQUFNRyxzQkFBc0IsR0FBRyxrQ0FBa0NGLElBQWxDLENBQXVDSCxPQUF2QyxDQUEvQjs7QUFDQSxRQUFJSyxzQkFBSixFQUE0QjtBQUMxQkosTUFBQUEsTUFBTSxDQUFDSyxpQkFBUCxHQUEyQkQsc0JBQXNCLENBQUMsQ0FBRCxDQUFqRDtBQUNEOztBQUNELFdBQU9KLE1BQVA7QUFDRDs7QUFZRCxRQUFNTSw0QkFBTixDQUFvQ0MsU0FBcEMsRUFBK0NDLFFBQS9DLEVBQXlEQyxRQUF6RCxFQUFtRTtBQUNqRSxVQUFNQyxLQUFLLEdBQUcsTUFBTSx5QkFBYUYsUUFBYixFQUF1QjtBQUN6QyxvQkFBYyxRQUQyQjtBQUV6Q0csTUFBQUEsTUFBTSxFQUFFO0FBRmlDLEtBQXZCLEVBR2pCO0FBQUVmLE1BQUFBLE9BQU8sRUFBRSxLQUFLQTtBQUFoQixLQUhpQixDQUFwQjtBQUlBLFVBQU07QUFBRVMsTUFBQUE7QUFBRixRQUF3QixLQUFLUCxVQUFMLENBQWdCWSxLQUFoQixDQUE5Qjs7QUFDQSxRQUFJLENBQUNMLGlCQUFMLEVBQXdCO0FBQ3RCekMsTUFBQUEsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLGVBQWNMLFNBQVUsNkNBQTRDQyxRQUFTLElBQTlFLEdBQ1AsYUFESDtBQUVBO0FBQ0Q7O0FBQ0RDLElBQUFBLFFBQVEsQ0FBQ0osaUJBQVQsR0FBNkJBLGlCQUE3QjtBQUNEOztBQVlELFFBQU1RLGVBQU4sQ0FBdUJDLEdBQXZCLEVBQTRCQyxnQkFBZ0IsR0FBRyxJQUEvQyxFQUFxRDtBQUNuRCxVQUFNQyxXQUFXLEdBQUdDLGVBQU1DLE1BQU4sQ0FBYywrQkFBZCxFQUE4Q0osR0FBOUMsQ0FBcEI7O0FBQ0FsRCxJQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcsVUFBU0ksV0FBVyxDQUFDbEMsTUFBTywyQkFBdkM7O0FBQ0EsUUFBSVQsZ0JBQUU4QyxPQUFGLENBQVVILFdBQVYsQ0FBSixFQUE0QjtBQUMxQjtBQUNEOztBQUVELFVBQU1JLFFBQVEsR0FBRyxFQUFqQjs7QUFDQSxTQUFLLE1BQU1DLFVBQVgsSUFBeUJMLFdBQXpCLEVBQXNDO0FBQ3BDLFlBQU1NLEdBQUcsR0FBR3BDLGVBQWUsQ0FBQ1gsYUFBYSxDQUFDOEMsVUFBRCxFQUFhLEtBQWIsQ0FBZCxDQUEzQjs7QUFDQSxVQUFJLENBQUNoRCxnQkFBRWtELFFBQUYsQ0FBV0QsR0FBWCxFQUFnQixnQkFBaEIsQ0FBTCxFQUF3QztBQUN0QztBQUNEOztBQUVELFlBQU1FLElBQUksR0FBR3RDLGVBQWUsQ0FBQ1gsYUFBYSxDQUFDOEMsVUFBRCxFQUFhLE1BQWIsQ0FBZCxDQUE1Qjs7QUFDQSxVQUFJLENBQUNHLElBQUwsRUFBVztBQUNUNUQsUUFBQUEsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLGNBQWFVLEdBQUksOENBQTVCO0FBQ0E7QUFDRDs7QUFFRCxZQUFNRyxNQUFNLEdBQUc7QUFDYkMsUUFBQUEsR0FBRyxFQUFHLEdBQUVDLGFBQU8sSUFBR0wsR0FBSSxFQURUO0FBRWJFLFFBQUFBLElBQUksRUFBRW5ELGdCQUFFdUQsSUFBRixDQUFPSixJQUFQLEVBQWEsR0FBYixDQUZPO0FBR2JyQixRQUFBQSxPQUFPLEVBQUU5QixnQkFBRXdELEtBQUYsQ0FBUVAsR0FBRyxDQUFDUSxLQUFKLENBQVUsR0FBVixDQUFSO0FBSEksT0FBZjtBQUtBLFdBQUtqQyxPQUFMLENBQWF5QixHQUFiLElBQW9CRyxNQUFwQjtBQUVBLFlBQU1NLFNBQVMsR0FBSSxHQUFFTixNQUFNLENBQUN0QixPQUFRLFlBQXBDO0FBQ0EsWUFBTTZCLGNBQWMsR0FBRyxDQUFDLENBQUNoQixXQUFXLENBQ2pDaUIsTUFEc0IsQ0FDZixDQUFDQyxHQUFELEVBQU0vQyxJQUFOLEtBQWUrQyxHQUFHLElBQUkzRCxhQUFhLENBQUNZLElBQUQsRUFBTyxLQUFQLEVBQWM0QyxTQUFkLENBRHBCLEVBQzhDLEtBRDlDLENBQXpCOztBQUVBLFVBQUksQ0FBQ0MsY0FBTCxFQUFxQjtBQUNuQlAsUUFBQUEsTUFBTSxDQUFDcEIsaUJBQVAsR0FBMkIsSUFBM0I7O0FBQ0EsWUFBSVUsZ0JBQUosRUFBc0I7QUFDcEJuRCxVQUFBQSxHQUFHLENBQUN1RSxJQUFKLENBQVUsY0FBYWIsR0FBSSwyQ0FBM0I7QUFDRDs7QUFDRDtBQUNELE9BTkQsTUFNTyxJQUFJLENBQUNQLGdCQUFMLEVBQXVCO0FBQzVCO0FBQ0Q7O0FBRURLLE1BQUFBLFFBQVEsQ0FBQ2dCLElBQVQsQ0FBYyxLQUFLOUIsNEJBQUwsQ0FBa0NnQixHQUFsQyxFQUF3QyxHQUFFSyxhQUFPLElBQUdJLFNBQVUsRUFBOUQsRUFBaUVOLE1BQWpFLENBQWQ7O0FBQ0EsVUFBSUwsUUFBUSxDQUFDdEMsTUFBVCxHQUFrQm5CLHNCQUFsQixLQUE2QyxDQUFqRCxFQUFvRDtBQUNsRCxjQUFNMEUsa0JBQUVDLEdBQUYsQ0FBTWxCLFFBQU4sQ0FBTjtBQUNEO0FBQ0Y7O0FBQ0QsVUFBTWlCLGtCQUFFQyxHQUFGLENBQU1sQixRQUFOLENBQU47QUFDQXhELElBQUFBLEdBQUcsQ0FBQ3VFLElBQUosQ0FBVSw4Q0FBNkM5RCxnQkFBRWtFLElBQUYsQ0FBTyxLQUFLMUMsT0FBWixDQUFxQixFQUE1RTtBQUNEOztBQXlCRCxRQUFNMkMsZUFBTixDQUF1QnpCLGdCQUFnQixHQUFHLElBQTFDLEVBQWdEO0FBQzlDLFVBQU0wQixHQUFHLEdBQUcsTUFBTSx5QkFBYWQsYUFBYixFQUFxQjtBQUNyQyxvQkFBYyxRQUR1QjtBQUVyQ2hCLE1BQUFBLE1BQU0sRUFBRTtBQUY2QixLQUFyQixFQUdmO0FBQUVmLE1BQUFBLE9BQU8sRUFBRSxLQUFLQTtBQUFoQixLQUhlLENBQWxCO0FBSUEsVUFBTWtCLEdBQUcsR0FBRyxJQUFJNEIsaUJBQUosR0FBZ0JDLGVBQWhCLENBQWdDRixHQUFoQyxDQUFaO0FBQ0EsVUFBTSxLQUFLNUIsZUFBTCxDQUFxQkMsR0FBckIsRUFBMEJDLGdCQUExQixDQUFOO0FBQ0EsV0FBTzFDLGdCQUFFdUUsU0FBRixDQUFZLEtBQUsvQyxPQUFqQixDQUFQO0FBQ0Q7O0FBU0QsUUFBTWdELFdBQU4sQ0FBbUI3RSxHQUFuQixFQUF3QjhFLEdBQXhCLEVBQTZCO0FBQzNCLFVBQU1DLE9BQU8sR0FBRyxNQUFNQyx1QkFBUUMsT0FBUixFQUF0Qjs7QUFDQSxRQUFJO0FBQ0YsWUFBTUMsbUJBQUlDLFlBQUosQ0FBaUJuRixHQUFqQixFQUFzQitFLE9BQXRCLENBQU47QUFDQSxZQUFNSyxnQkFBZ0IsR0FBRyxNQUFNakYsa0JBQUdrRixPQUFILENBQVdOLE9BQVgsRUFBb0IsSUFBcEIsRUFBMEIsQ0FBQ08sUUFBRCxFQUFXQyxXQUFYLEtBQ3ZELENBQUNBLFdBQUQsSUFBZ0JsRixnQkFBRUMsT0FBRixDQUFVa0YsY0FBS0MsS0FBTCxDQUFXSCxRQUFYLEVBQXFCSSxJQUEvQixNQUF5QyxjQUQ1QixDQUEvQjs7QUFFQSxVQUFJLENBQUNOLGdCQUFMLEVBQXVCO0FBQ3JCLGNBQU0sSUFBSU8sS0FBSixDQUFVLHNGQUFWLENBQU47QUFDRDs7QUFDRC9GLE1BQUFBLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyx5QkFBd0I0QyxjQUFLSSxRQUFMLENBQWNSLGdCQUFkLENBQWdDLFNBQVFOLEdBQUksR0FBL0U7QUFDQSxZQUFNM0Usa0JBQUcwRixFQUFILENBQU1ULGdCQUFOLEVBQXdCTixHQUF4QixFQUE2QjtBQUNqQ2dCLFFBQUFBLE1BQU0sRUFBRTtBQUR5QixPQUE3QixDQUFOO0FBR0QsS0FYRCxTQVdVO0FBQ1IsWUFBTTNGLGtCQUFHNEYsTUFBSCxDQUFVaEIsT0FBVixDQUFOO0FBQ0Q7QUFDRjs7QUFzQkRpQixFQUFBQSxxQkFBcUIsQ0FBRUMsTUFBRixFQUFVQyxJQUFJLEdBQUcsRUFBakIsRUFBcUI7QUFDeEMsVUFBTTtBQUNKN0QsTUFBQUEsaUJBREk7QUFFSjhELE1BQUFBLFFBQVEsR0FBRztBQUZQLFFBR0ZELElBSEo7O0FBSUEsUUFBSUUsYUFBYSxHQUFHL0YsZ0JBQUVnRyxJQUFGLENBQU8sS0FBS3hFLE9BQVosQ0FBcEI7O0FBRUEsUUFBSSxDQUFDeEIsZ0JBQUU4QyxPQUFGLENBQVVnRCxRQUFWLENBQUwsRUFBMEI7QUFFeEJ2RyxNQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcsbURBQWtEdUQsUUFBUyxFQUF0RTtBQUNBQyxNQUFBQSxhQUFhLEdBQUdBLGFBQWEsQ0FDMUJFLE1BRGEsQ0FDTEMsTUFBRCxJQUFZSixRQUFRLENBQUM1QyxRQUFULENBQW1CLEdBQUUsS0FBSzFCLE9BQUwsQ0FBYTBFLE1BQWIsRUFBcUJwRSxPQUFRLEVBQWxELENBRE4sQ0FBaEI7QUFHQXZDLE1BQUFBLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyxPQUFNdkIsb0JBQUttRixTQUFMLENBQWUsTUFBZixFQUF1QkosYUFBYSxDQUFDdEYsTUFBckMsRUFBNkMsSUFBN0MsQ0FBbUQsRUFBcEU7O0FBQ0EsVUFBSVQsZ0JBQUU4QyxPQUFGLENBQVVpRCxhQUFWLENBQUosRUFBOEI7QUFDNUIsZUFBTyxFQUFQO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJLENBQUNLLEtBQUssQ0FBQ3BFLGlCQUFELENBQVYsRUFBK0I7QUFFN0IsWUFBTXFFLG9CQUFvQixHQUFHQyxRQUFRLENBQUN0RSxpQkFBRCxFQUFvQixFQUFwQixDQUFyQztBQUNBekMsTUFBQUEsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLDhFQUE2RThELG9CQUFxQixFQUE3RztBQUNBLFVBQUlFLDJCQUEyQixHQUFHLENBQWxDOztBQUVBLFdBQUssTUFBTUwsTUFBWCxJQUFxQkgsYUFBckIsRUFBb0M7QUFDbEMsY0FBTVMsd0JBQXdCLEdBQUdGLFFBQVEsQ0FBQyxLQUFLOUUsT0FBTCxDQUFhMEUsTUFBYixFQUFxQmxFLGlCQUF0QixFQUF5QyxFQUF6QyxDQUF6Qzs7QUFDQSxZQUFJLENBQUNvRSxLQUFLLENBQUNJLHdCQUFELENBQU4sSUFDR0Esd0JBQXdCLElBQUlILG9CQUQvQixJQUVHRSwyQkFBMkIsR0FBR0Msd0JBRnJDLEVBRStEO0FBQzdERCxVQUFBQSwyQkFBMkIsR0FBR0Msd0JBQTlCO0FBQ0Q7QUFDRjs7QUFDRFQsTUFBQUEsYUFBYSxHQUFHQSxhQUFhLENBQUNFLE1BQWQsQ0FBc0JDLE1BQUQsSUFBYSxHQUFFLEtBQUsxRSxPQUFMLENBQWEwRSxNQUFiLEVBQXFCbEUsaUJBQWtCLEVBQTFDLEtBQzlDLEdBQUV1RSwyQkFBMkIsR0FBRyxDQUE5QixHQUFrQ0EsMkJBQWxDLEdBQWdFRixvQkFBcUIsRUFEMUUsQ0FBaEI7QUFHQTlHLE1BQUFBLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyxPQUFNdkIsb0JBQUttRixTQUFMLENBQWUsTUFBZixFQUF1QkosYUFBYSxDQUFDdEYsTUFBckMsRUFBNkMsSUFBN0MsQ0FBbUQsRUFBcEU7O0FBQ0EsVUFBSVQsZ0JBQUU4QyxPQUFGLENBQVVpRCxhQUFWLENBQUosRUFBOEI7QUFDNUIsZUFBTyxFQUFQO0FBQ0Q7O0FBQ0R4RyxNQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcseUJBQXdCdkIsb0JBQUttRixTQUFMLENBQWUsUUFBZixFQUF5QkosYUFBYSxDQUFDdEYsTUFBdkMsQ0FBK0MsR0FBeEUsR0FDUCxpQkFBZ0JULGdCQUFFeUcsSUFBRixDQUFPVixhQUFhLENBQUNXLEdBQWQsQ0FBbUJSLE1BQUQsSUFBWSxLQUFLMUUsT0FBTCxDQUFhMEUsTUFBYixFQUFxQnBFLE9BQW5ELENBQVAsQ0FBb0UsR0FEdkY7QUFFRDs7QUFFRCxRQUFJLENBQUM5QixnQkFBRThDLE9BQUYsQ0FBVThDLE1BQVYsQ0FBTCxFQUF3QjtBQUV0QixVQUFJO0FBQUNQLFFBQUFBLElBQUQ7QUFBT3NCLFFBQUFBLElBQVA7QUFBYUMsUUFBQUE7QUFBYixVQUE2QmhCLE1BQWpDOztBQUNBLFVBQUllLElBQUksS0FBS0UsVUFBVCxJQUFnQixDQUFDZCxhQUFhLENBQUNlLElBQWQsQ0FBb0JaLE1BQUQsSUFBWUEsTUFBTSxDQUFDaEQsUUFBUCxDQUFpQixJQUFHbUMsSUFBSyxHQUFFd0IsVUFBSSxFQUEvQixDQUEvQixDQUFyQixFQUF3RjtBQUV0RkYsUUFBQUEsSUFBSSxHQUFHSSxVQUFQO0FBQ0Q7O0FBQ0QsVUFBSTFCLElBQUksS0FBSzJCLFVBQUdDLEdBQVosSUFBbUJqSCxnQkFBRWtELFFBQUYsQ0FBVzBELFlBQVgsRUFBeUIsS0FBekIsQ0FBbkIsSUFDR2IsYUFBYSxDQUFDZSxJQUFkLENBQW9CWixNQUFELElBQVlBLE1BQU0sQ0FBQ2hELFFBQVAsQ0FBZ0JnRSxxQkFBaEIsQ0FBL0IsQ0FEUCxFQUN3RTtBQUV0RVAsUUFBQUEsSUFBSSxJQUFJTyxxQkFBUjtBQUNEOztBQUNEM0gsTUFBQUEsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLHFEQUFvRDhDLElBQUssR0FBRXNCLElBQUssRUFBM0U7QUFDQSxZQUFNUSxVQUFVLEdBQUcsSUFBSUMsTUFBSixDQUFZLFVBQVMvQixJQUFLLEdBQUVzQixJQUFLLEtBQWpDLENBQW5CO0FBQ0FaLE1BQUFBLGFBQWEsR0FBR0EsYUFBYSxDQUFDRSxNQUFkLENBQXNCQyxNQUFELElBQVlpQixVQUFVLENBQUNFLElBQVgsQ0FBZ0JuQixNQUFoQixDQUFqQyxDQUFoQjtBQUNBM0csTUFBQUEsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLE9BQU12QixvQkFBS21GLFNBQUwsQ0FBZSxNQUFmLEVBQXVCSixhQUFhLENBQUN0RixNQUFyQyxFQUE2QyxJQUE3QyxDQUFtRCxFQUFwRTtBQUNEOztBQUVELFdBQU9zRixhQUFQO0FBQ0Q7O0FBaUJELFFBQU11QixjQUFOLENBQXNCQyxLQUF0QixFQUE2QnJGLFNBQTdCLEVBQXdDc0YsWUFBeEMsRUFBc0RDLFFBQVEsR0FBRyxLQUFqRSxFQUF3RTtBQUN0RSxVQUFNO0FBQUVwRSxNQUFBQSxHQUFGO0FBQU9GLE1BQUFBLElBQVA7QUFBYXJCLE1BQUFBO0FBQWIsUUFBeUIsS0FBS04sT0FBTCxDQUFhVSxTQUFiLENBQS9COztBQUNBLFVBQU13RixXQUFXLEdBQUd2QyxjQUFLd0MsT0FBTCxDQUFhSCxZQUFiLEVBQTRCLEdBQUVELEtBQU0sTUFBcEMsQ0FBcEI7O0FBQ0FoSSxJQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcsZUFBY2MsR0FBSSxTQUFRcUUsV0FBWSxHQUFqRDs7QUFDQSxRQUFJO0FBQ0YsWUFBTUUsbUJBQUlDLFlBQUosQ0FBaUJ4RSxHQUFqQixFQUFzQnFFLFdBQXRCLEVBQW1DO0FBQ3ZDSSxRQUFBQSxTQUFTLEVBQUUsS0FENEI7QUFFdkN2RyxRQUFBQSxPQUFPLEVBQUVsQztBQUY4QixPQUFuQyxDQUFOO0FBSUQsS0FMRCxDQUtFLE9BQU8wSSxDQUFQLEVBQVU7QUFDVixZQUFNQyxHQUFHLEdBQUkseURBQXdERCxDQUFDLENBQUNFLE9BQVEsRUFBL0U7O0FBQ0EsVUFBSVIsUUFBSixFQUFjO0FBQ1osY0FBTSxJQUFJbkMsS0FBSixDQUFVMEMsR0FBVixDQUFOO0FBQ0Q7O0FBQ0R6SSxNQUFBQSxHQUFHLENBQUMySSxLQUFKLENBQVVGLEdBQVY7QUFDQSxhQUFPLEtBQVA7QUFDRDs7QUFDRCxRQUFJLEVBQUMsTUFBTXRJLE9BQU8sQ0FBQ2dJLFdBQUQsRUFBY3ZFLElBQWQsQ0FBZCxDQUFKLEVBQXVDO0FBQ3JDLFlBQU02RSxHQUFHLEdBQUksaURBQWdEOUYsU0FBVSxpQkFBdkU7O0FBQ0EsVUFBSXVGLFFBQUosRUFBYztBQUNaLGNBQU0sSUFBSW5DLEtBQUosQ0FBVTBDLEdBQVYsQ0FBTjtBQUNEOztBQUNEekksTUFBQUEsR0FBRyxDQUFDMkksS0FBSixDQUFVRixHQUFWO0FBQ0EsYUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsVUFBTUcsUUFBUSxHQUFJLEdBQUVoRCxjQUFLQyxLQUFMLENBQVcvQixHQUFYLEVBQWdCZ0MsSUFBSyxLQUFJdkQsT0FBUSxFQUFwQyxJQUNkc0csc0JBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFEaEIsQ0FBakI7O0FBRUEsVUFBTUMsVUFBVSxHQUFHbkQsY0FBS3dDLE9BQUwsQ0FBYSxLQUFLckcsZUFBbEIsRUFBbUM2RyxRQUFuQyxDQUFuQjs7QUFDQSxRQUFJO0FBQ0YsWUFBTSxLQUFLM0QsV0FBTCxDQUFpQmtELFdBQWpCLEVBQThCWSxVQUE5QixDQUFOO0FBQ0EsWUFBTXhJLGtCQUFHeUksS0FBSCxDQUFTRCxVQUFULEVBQXFCLEtBQXJCLENBQU47QUFDQS9JLE1BQUFBLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyw0QkFBMkIrRixVQUFXLDRCQUFqRDtBQUNELEtBSkQsQ0FJRSxPQUFPUCxDQUFQLEVBQVU7QUFDVixVQUFJTixRQUFKLEVBQWM7QUFDWixjQUFNTSxDQUFOO0FBQ0Q7O0FBQ0R4SSxNQUFBQSxHQUFHLENBQUMySSxLQUFKLENBQVVILENBQUMsQ0FBQ0UsT0FBWjtBQUNBLGFBQU8sS0FBUDtBQUNEOztBQUNELFdBQU8sSUFBUDtBQUNEOztBQXdCRCxRQUFNTyxXQUFOLENBQW1CM0MsSUFBSSxHQUFHLEVBQTFCLEVBQThCO0FBQUE7O0FBQzVCLFFBQUk3RixnQkFBRThDLE9BQUYsQ0FBVSxLQUFLdEIsT0FBZixDQUFKLEVBQTZCO0FBQzNCLFlBQU0sS0FBSzJDLGVBQUwsQ0FBcUIsQ0FBQyxDQUFDMEIsSUFBSSxDQUFDN0QsaUJBQTVCLENBQU47QUFDRDs7QUFDRCxRQUFJaEMsZ0JBQUU4QyxPQUFGLENBQVUsS0FBS3RCLE9BQWYsQ0FBSixFQUE2QjtBQUMzQixZQUFNLElBQUk4RCxLQUFKLENBQVUsMkRBQVYsQ0FBTjtBQUNEOztBQUVELFVBQU1TLGFBQWEsR0FBRyxLQUFLSixxQkFBTCxpQkFBMkJFLElBQUksQ0FBQ0QsTUFBaEMsdURBQTBDLE1BQU0sdUJBQWhELEVBQTZEQyxJQUE3RCxDQUF0Qjs7QUFDQSxRQUFJN0YsZ0JBQUU4QyxPQUFGLENBQVVpRCxhQUFWLENBQUosRUFBOEI7QUFDNUJ4RyxNQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcsdUNBQVg7QUFDQSxhQUFPLEVBQVA7QUFDRDs7QUFDRGhELElBQUFBLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyxPQUFNdkIsb0JBQUttRixTQUFMLENBQWUsUUFBZixFQUF5QkosYUFBYSxDQUFDdEYsTUFBdkMsRUFBK0MsSUFBL0MsQ0FBcUQsWUFBNUQsR0FDUmdJLElBQUksQ0FBQ0MsU0FBTCxDQUFlM0MsYUFBZixFQUE4QixJQUE5QixFQUFvQyxDQUFwQyxDQURGO0FBR0EsVUFBTTRDLG1CQUFtQixHQUFHLEVBQTVCO0FBQ0EsVUFBTTVGLFFBQVEsR0FBRyxFQUFqQjtBQUNBLFVBQU15RSxZQUFZLEdBQUcsTUFBTTdDLHVCQUFRQyxPQUFSLEVBQTNCOztBQUNBLFFBQUk7QUFDRixXQUFLLE1BQU0sQ0FBQ2dFLEdBQUQsRUFBTTFHLFNBQU4sQ0FBWCxJQUErQjZELGFBQWEsQ0FBQzhDLE9BQWQsRUFBL0IsRUFBd0Q7QUFDdEQ5RixRQUFBQSxRQUFRLENBQUNnQixJQUFULENBQWMsQ0FBQyxZQUFZO0FBQ3pCLGNBQUksTUFBTSxLQUFLdUQsY0FBTCxDQUFvQnNCLEdBQXBCLEVBQXlCMUcsU0FBekIsRUFBb0NzRixZQUFwQyxFQUFrRCxDQUFDeEgsZ0JBQUU4QyxPQUFGLENBQVUrQyxJQUFWLENBQW5ELENBQVYsRUFBK0U7QUFDN0U4QyxZQUFBQSxtQkFBbUIsQ0FBQzVFLElBQXBCLENBQXlCN0IsU0FBekI7QUFDRDtBQUNGLFNBSmEsR0FBZDs7QUFNQSxZQUFJYSxRQUFRLENBQUN0QyxNQUFULEdBQWtCbkIsc0JBQWxCLEtBQTZDLENBQWpELEVBQW9EO0FBQ2xELGdCQUFNMEUsa0JBQUVDLEdBQUYsQ0FBTWxCLFFBQU4sQ0FBTjtBQUNEO0FBQ0Y7O0FBQ0QsWUFBTWlCLGtCQUFFQyxHQUFGLENBQU1sQixRQUFOLENBQU47QUFDRCxLQWJELFNBYVU7QUFDUixZQUFNakQsa0JBQUc0RixNQUFILENBQVU4QixZQUFWLENBQU47QUFDRDs7QUFDRCxRQUFJLENBQUN4SCxnQkFBRThDLE9BQUYsQ0FBVTZGLG1CQUFWLENBQUwsRUFBcUM7QUFDbkNwSixNQUFBQSxHQUFHLENBQUN1RSxJQUFKLENBQVUsNEJBQUQsR0FDTixHQUFFOUMsb0JBQUttRixTQUFMLENBQWUsY0FBZixFQUErQndDLG1CQUFtQixDQUFDbEksTUFBbkQsRUFBMkQsSUFBM0QsQ0FBaUUsRUFEdEU7QUFFRCxLQUhELE1BR087QUFDTGxCLE1BQUFBLEdBQUcsQ0FBQ3VFLElBQUosQ0FBVSxvQ0FBVjtBQUNEOztBQUNELFdBQU82RSxtQkFBUDtBQUNEOztBQWxZNkI7O2VBc1lqQnhILHlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDRF9DRE4sIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLFxuICBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeHBhdGggZnJvbSAneHBhdGgnO1xuaW1wb3J0IHsgRE9NUGFyc2VyIH0gZnJvbSAneG1sZG9tJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcywgbG9nZ2VyLCB0ZW1wRGlyLCB6aXAsIHV0aWwsIG5ldCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuXG5jb25zdCBUSU1FT1VUX01TID0gMTUwMDA7XG5jb25zdCBNQVhfUEFSQUxMRUxfRE9XTkxPQURTID0gNTtcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCcpO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIGlzQ3JjT2sgKHNyYywgY2hlY2tzdW0pIHtcbiAgY29uc3QgbWQ1ID0gYXdhaXQgZnMuaGFzaChzcmMsICdtZDUnKTtcbiAgcmV0dXJuIF8udG9Mb3dlcihtZDUpID09PSBfLnRvTG93ZXIoY2hlY2tzdW0pO1xufVxuXG5mdW5jdGlvbiBmaW5kQ2hpbGROb2RlIChwYXJlbnQsIGNoaWxkTmFtZSA9IG51bGwsIHRleHQgPSBudWxsKSB7XG4gIGlmICghY2hpbGROYW1lICYmICF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFwYXJlbnQuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKGxldCBjaGlsZE5vZGVJZHggPSAwOyBjaGlsZE5vZGVJZHggPCBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGNoaWxkTm9kZUlkeCsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gcGFyZW50LmNoaWxkTm9kZXNbY2hpbGROb2RlSWR4XTtcbiAgICBpZiAoY2hpbGROYW1lICYmICF0ZXh0ICYmIGNoaWxkTmFtZSA9PT0gY2hpbGROb2RlLmxvY2FsTmFtZSkge1xuICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICB9XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IGNoaWxkVGV4dCA9IGV4dHJhY3ROb2RlVGV4dChjaGlsZE5vZGUpO1xuICAgICAgaWYgKCFjaGlsZFRleHQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGROYW1lICYmIGNoaWxkTmFtZSA9PT0gY2hpbGROb2RlLmxvY2FsTmFtZSAmJiB0ZXh0ID09PSBjaGlsZFRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICghY2hpbGROYW1lICYmIHRleHQgPT09IGNoaWxkVGV4dCkge1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdE5vZGVUZXh0IChub2RlKSB7XG4gIHJldHVybiAoIW5vZGUgfHwgIW5vZGUuZmlyc3RDaGlsZCB8fCAhdXRpbC5oYXNWYWx1ZShub2RlLmZpcnN0Q2hpbGQubm9kZVZhbHVlKSlcbiAgICA/IG51bGxcbiAgICA6IG5vZGUuZmlyc3RDaGlsZC5ub2RlVmFsdWU7XG59XG5cblxuY2xhc3MgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChhcmdzID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBjaHJvbWVkcml2ZXJEaXIgPSBnZXRDaHJvbWVkcml2ZXJEaXIoKSxcbiAgICAgIHRpbWVvdXQgPSBUSU1FT1VUX01TLFxuICAgIH0gPSBhcmdzO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyRGlyID0gY2hyb21lZHJpdmVyRGlyO1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5tYXBwaW5nID0ge307XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gQWRkaXRpb25hbERyaXZlckRldGFpbHNcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSB2ZXJzaW9uIC0gQ2hyb21lZHJpdmVyIHZlcnNpb25cbiAgICogb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbkJyb3dzZXJWZXJzaW9uIC0gVGhlIG1pbmltdW0gYnJvd3NlciB2ZXJzaW9uXG4gICAqIHN1cHBvcnRlZCBieSBjaHJvbWVkcml2ZXIgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICAgKi9cblxuICAvKipcbiAgICogR2V0cyBhZGRpdGlvbmFsIGNocm9tZWRyaXZlciBkZXRhaWxzIGZyb20gY2hyb21lZHJpdmVyXG4gICAqIHJlbGVhc2Ugbm90ZXNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBSZWxlYXNlIG5vdGVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNocm9tZWRyaXZlclxuICAgKiBAcmV0dXJucyB7QWRkaXRpb25hbERyaXZlckRldGFpbHN9XG4gICAqL1xuICBwYXJzZU5vdGVzIChjb250ZW50KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gL15cXHMqWy1dK0Nocm9tZURyaXZlcltcXERdKyhbXFxkLl0rKS9pbS5leGVjKGNvbnRlbnQpO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIHJlc3VsdC52ZXJzaW9uID0gdmVyc2lvbk1hdGNoWzFdO1xuICAgIH1cbiAgICBjb25zdCBtaW5Ccm93c2VyVmVyc2lvbk1hdGNoID0gL15cXHMqU3VwcG9ydHMgQ2hyb21lW1xcRF0rKFxcZCspL2ltLmV4ZWMoY29udGVudCk7XG4gICAgaWYgKG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2gpIHtcbiAgICAgIHJlc3VsdC5taW5Ccm93c2VyVmVyc2lvbiA9IG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2hbMV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWRzIGNocm9tZWRyaXZlciByZWxlYXNlIG5vdGVzIGFuZCBwdXRzIHRoZW1cbiAgICogaW50byB0aGUgZGljdGlvbmFyeSBhcmd1bWVudFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHJpdmVyS2V5IC0gRHJpdmVyIHZlcnNpb24gcGx1cyBhcmNoaXZlIG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5vdGVzVXJsIC0gVGhlIFVSTCBvZiBjaHJvbWVkcml2ZXIgbm90ZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IGluZm9EaWN0IC0gVGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyBkcml2ZXIgaW5mby5cbiAgICogVGhlIG1ldGhvZCBjYWxsIG11dGF0ZXMgYnkgbWVyZ2luZyBgQWRkaXRpb25hbERyaXZlckRldGFpbHNgXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgcmVsZWFzZSBub3RlcyBjYW5ub3QgYmUgZG93bmxvYWRlZFxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVBZGRpdGlvbmFsRHJpdmVySW5mbyAoZHJpdmVyS2V5LCBub3Rlc1VybCwgaW5mb0RpY3QpIHtcbiAgICBjb25zdCBub3RlcyA9IGF3YWl0IHJldHJpZXZlRGF0YShub3Rlc1VybCwge1xuICAgICAgJ3VzZXItYWdlbnQnOiAnYXBwaXVtJyxcbiAgICAgIGFjY2VwdDogJyovKicsXG4gICAgfSwgeyB0aW1lb3V0OiB0aGlzLnRpbWVvdXQgfSk7XG4gICAgY29uc3QgeyBtaW5Ccm93c2VyVmVyc2lvbiB9ID0gdGhpcy5wYXJzZU5vdGVzKG5vdGVzKTtcbiAgICBpZiAoIW1pbkJyb3dzZXJWZXJzaW9uKSB7XG4gICAgICBsb2cuZGVidWcoYFRoZSBkcml2ZXIgJyR7ZHJpdmVyS2V5fScgZG9lcyBub3QgY29udGFpbiB2YWxpZCByZWxlYXNlIG5vdGVzIGF0ICR7bm90ZXNVcmx9LiBgICtcbiAgICAgICAgYFNraXBwaW5nIGl0YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluZm9EaWN0Lm1pbkJyb3dzZXJWZXJzaW9uID0gbWluQnJvd3NlclZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGNocm9tZWRyaXZlciBzdG9yYWdlIFhNTCBhbmQgc3RvcmVzXG4gICAqIHRoZSBwYXJzZWQgcmVzdWx0cyBpbnRvIGB0aGlzLm1hcHBpbmdgXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRG9jdW1lbnR9IGRvYyAtIFRoZSBET00gcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIGNocm9tZWRyaXZlciBzdG9yYWdlIFhNTFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFBhcnNlTm90ZXMgW3RydWVdIC0gSWYgc2V0IHRvIGB0cnVlYFxuICAgKiB0aGVuIGFkZGl0aW9uYWwgZHJpdmVycyBpbmZvcm1hdGlvbiBpcyBnb2luZyB0byBiZSBwYXJzZWRcbiAgICogYW5kIGFzc2lnbmVkIHRvIGB0aGlzLm1hcHBpbmdgXG4gICAqL1xuICBhc3luYyBwYXJzZVN0b3JhZ2VYbWwgKGRvYywgc2hvdWxkUGFyc2VOb3RlcyA9IHRydWUpIHtcbiAgICBjb25zdCBkcml2ZXJOb2RlcyA9IHhwYXRoLnNlbGVjdChgLy8qW2xvY2FsLW5hbWUoLik9J0NvbnRlbnRzJ11gLCBkb2MpO1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkICR7ZHJpdmVyTm9kZXMubGVuZ3RofSBlbnRyaWVzIGZyb20gc3RvcmFnZSBYTUxgKTtcbiAgICBpZiAoXy5pc0VtcHR5KGRyaXZlck5vZGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgZm9yIChjb25zdCBkcml2ZXJOb2RlIG9mIGRyaXZlck5vZGVzKSB7XG4gICAgICBjb25zdCBrZXkgPSBleHRyYWN0Tm9kZVRleHQoZmluZENoaWxkTm9kZShkcml2ZXJOb2RlLCAnS2V5JykpO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKGtleSwgJy9jaHJvbWVkcml2ZXJfJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV0YWcgPSBleHRyYWN0Tm9kZVRleHQoZmluZENoaWxkTm9kZShkcml2ZXJOb2RlLCAnRVRhZycpKTtcbiAgICAgIGlmICghZXRhZykge1xuICAgICAgICBsb2cuZGVidWcoYFRoZSBlbnRyeSAnJHtrZXl9JyBkb2VzIG5vdCBjb250YWluIHRoZSBjaGVja3N1bS4gU2tpcHBpbmcgaXRgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNkSW5mbyA9IHtcbiAgICAgICAgdXJsOiBgJHtDRF9DRE59LyR7a2V5fWAsXG4gICAgICAgIGV0YWc6IF8udHJpbShldGFnLCAnXCInKSxcbiAgICAgICAgdmVyc2lvbjogXy5maXJzdChrZXkuc3BsaXQoJy8nKSksXG4gICAgICB9O1xuICAgICAgdGhpcy5tYXBwaW5nW2tleV0gPSBjZEluZm87XG5cbiAgICAgIGNvbnN0IG5vdGVzUGF0aCA9IGAke2NkSW5mby52ZXJzaW9ufS9ub3Rlcy50eHRgO1xuICAgICAgY29uc3QgaXNOb3Rlc1ByZXNlbnQgPSAhIWRyaXZlck5vZGVzXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgbm9kZSkgPT4gYWNjIHx8IGZpbmRDaGlsZE5vZGUobm9kZSwgJ0tleScsIG5vdGVzUGF0aCksIGZhbHNlKTtcbiAgICAgIGlmICghaXNOb3Rlc1ByZXNlbnQpIHtcbiAgICAgICAgY2RJbmZvLm1pbkJyb3dzZXJWZXJzaW9uID0gbnVsbDtcbiAgICAgICAgaWYgKHNob3VsZFBhcnNlTm90ZXMpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgVGhlIGVudHJ5ICcke2tleX0nIGRvZXMgbm90IGNvbnRhaW4gYW55IG5vdGVzLiBTa2lwcGluZyBpdGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmICghc2hvdWxkUGFyc2VOb3Rlcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8oa2V5LCBgJHtDRF9DRE59LyR7bm90ZXNQYXRofWAsIGNkSW5mbykpO1xuICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCAlIE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPT09IDApIHtcbiAgICAgICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgbG9nLmluZm8oYFRoZSB0b3RhbCBjb3VudCBvZiBlbnRyaWVzIGluIHRoZSBtYXBwaW5nOiAke18uc2l6ZSh0aGlzLm1hcHBpbmcpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IERyaXZlckRldGFpbHNcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHVybCAtIFRoZSBmdWxsIHVybCB0byB0aGUgY29ycmVzcG9uZGluZyBkcml2ZXIgaW5cbiAgICogdGhlIHJlbW90ZSBzdG9yYWdlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBldGFnIC0gVGhlIENSQyBvZiB0aGUgZHJpdmVyIGFyY2hpdmVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24gLSBDaHJvbWVkcml2ZXIgdmVyc2lvblxuICAgKi9cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gQ2hyb21lZHJpdmVyc01hcHBpbmdcbiAgICogQHByb3BlcnR5IHtEcml2ZXJEZXRhaWxzfSAtIFRoZSBrZXlzIGFyZSB1bmlxdWUgZHJpdmVyIGlkZW50aWZpZXJzXG4gICAqICh2ZXJzaW9uL2FyY2hpdmUgbmFtZSkuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBoYXZlIGBEcml2ZXJEZXRhaWxzYFxuICAgKiBjb250YWluaW5nIGNocm9tZWRyaXZlciBkZXRhaWxzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgY2hyb21lZHJpdmVyIG1hcHBpbmcgZnJvbSB0aGUgc3RvcmFnZVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFBhcnNlTm90ZXMgW3RydWVdIC0gaWYgc2V0IHRvIGB0cnVlYFxuICAgKiB0aGVuIGFkZGl0aW9uYWwgY2hyb21lZHJpdmVycyBpbmZvIGlzIGdvaW5nIHRvIGJlIHJldHJpZXZlZCBhbmRcbiAgICogcGFyc2VkIGZyb20gcmVsZWFzZSBub3Rlc1xuICAgKiBAcmV0dXJucyB7Q2hyb21lZHJpdmVyc01hcHBpbmd9XG4gICAqL1xuICBhc3luYyByZXRyaWV2ZU1hcHBpbmcgKHNob3VsZFBhcnNlTm90ZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgeG1sID0gYXdhaXQgcmV0cmlldmVEYXRhKENEX0NETiwge1xuICAgICAgJ3VzZXItYWdlbnQnOiAnYXBwaXVtJyxcbiAgICAgIGFjY2VwdDogJ2FwcGxpY2F0aW9uL3htbCwgKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IHRoaXMudGltZW91dCB9KTtcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHhtbCk7XG4gICAgYXdhaXQgdGhpcy5wYXJzZVN0b3JhZ2VYbWwoZG9jLCBzaG91bGRQYXJzZU5vdGVzKTtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodGhpcy5tYXBwaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBkb3dubG9hZGVkIGNocm9tZWRyaXZlciBhcmNoaXZlXG4gICAqIGludG8gdGhlIGdpdmVuIGRlc3RpbmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgLSBUaGUgc291cmNlIGFyY2hpdmUgcGF0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHN0IC0gVGhlIGRlc3RpbmF0aW9uIGNocm9tZWRyaXZlciBwYXRoXG4gICAqL1xuICBhc3luYyB1bnppcERyaXZlciAoc3JjLCBkc3QpIHtcbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oc3JjLCB0bXBSb290KTtcbiAgICAgIGNvbnN0IGNocm9tZWRyaXZlclBhdGggPSBhd2FpdCBmcy53YWxrRGlyKHRtcFJvb3QsIHRydWUsIChpdGVtUGF0aCwgaXNEaXJlY3RvcnkpID0+XG4gICAgICAgICFpc0RpcmVjdG9yeSAmJiBfLnRvTG93ZXIocGF0aC5wYXJzZShpdGVtUGF0aCkubmFtZSkgPT09ICdjaHJvbWVkcml2ZXInKTtcbiAgICAgIGlmICghY2hyb21lZHJpdmVyUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmNoaXZlIHdhcyB1bnppcHBlZCBwcm9wZXJseSwgYnV0IHdlIGNvdWxkIG5vdCBmaW5kIGFueSBjaHJvbWVkcml2ZXIgZXhlY3V0YWJsZScpO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBNb3ZpbmcgdGhlIGV4dHJhY3RlZCAnJHtwYXRoLmJhc2VuYW1lKGNocm9tZWRyaXZlclBhdGgpfScgdG8gJyR7ZHN0fSdgKTtcbiAgICAgIGF3YWl0IGZzLm12KGNocm9tZWRyaXZlclBhdGgsIGRzdCwge1xuICAgICAgICBta2RpcnA6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IE9TSW5mb1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBob3N0IE9TXG4gICAqIENhbiBiZSBlaXRoZXIgYG1hY2AsIGB3aW5kb3dzYCBvciBgbGludXhgXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgaG9zdCBPRC5cbiAgICogQ2FuIGJlIGVpdGhlciBgMzJgIG9yIGA2NGBcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSBoYXJkd2FyZU5hbWUgLSBUaGUgb3V0cHV0IG9mIGB1bmFtZSAtbWAgY29tbWFuZFxuICAgKiBvbiBsaW51eCBhbmQgbWFjIHN5c3RlbXMuIGBudWxsYCBvbiBXaW5kb3dzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGB0aGlzLm1hcHBpbmdgIHRvIG9ubHkgc2VsZWN0IG1hdGNoaW5nXG4gICAqIGNocm9tZWRyaXZlciBlbnRyaWVzIGJ5IG9wZXJhdGluZyBzeXN0ZW0gaW5mb3JtYXRpb25cbiAgICogYW5kL29yIGFkZGl0aW9uYWwgc3luY2hyb25pemF0aW9uIG9wdGlvbnMgKGlmIHByb3ZpZGVkKVxuICAgKlxuICAgKiBAcGFyYW0gez9PU0luZm99IG9zSW5mb1xuICAgKiBAcGFyYW0gez9TeW5jT3B0aW9uc30gb3B0c1xuICAgKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGxpc3Qgb2YgZmlsdGVyZWQgY2hyb21lZHJpdmVyXG4gICAqIGVudHJ5IG5hbWVzICh2ZXJzaW9uL2FyY2hpdmUgbmFtZSlcbiAgICovXG4gIHNlbGVjdE1hdGNoaW5nRHJpdmVycyAob3NJbmZvLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBtaW5Ccm93c2VyVmVyc2lvbixcbiAgICAgIHZlcnNpb25zID0gW10sXG4gICAgfSA9IG9wdHM7XG4gICAgbGV0IGRyaXZlcnNUb1N5bmMgPSBfLmtleXModGhpcy5tYXBwaW5nKTtcblxuICAgIGlmICghXy5pc0VtcHR5KHZlcnNpb25zKSkge1xuICAgICAgLy8gSGFuZGxlIG9ubHkgc2VsZWN0ZWQgdmVyc2lvbnMgaWYgcmVxdWVzdGVkXG4gICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBjaHJvbWVkcml2ZXJzIHdob3NlIHZlcnNpb25zIG1hdGNoIHRvICR7dmVyc2lvbnN9YCk7XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luY1xuICAgICAgICAuZmlsdGVyKChjZE5hbWUpID0+IHZlcnNpb25zLmluY2x1ZGVzKGAke3RoaXMubWFwcGluZ1tjZE5hbWVdLnZlcnNpb259YCkpO1xuXG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc05hTihtaW5Ccm93c2VyVmVyc2lvbikpIHtcbiAgICAgIC8vIE9ubHkgc2VsZWN0IGRyaXZlcnMgdGhhdCBzdXBwb3J0IHRoZSBjdXJyZW50IGJyb3dzZXIgd2hvc2UgbWFqb3IgdmVyc2lvbiBudW1iZXIgZXF1YWxzIHRvIGBtaW5Ccm93c2VyVmVyc2lvbmBcbiAgICAgIGNvbnN0IG1pbkJyb3dzZXJWZXJzaW9uSW50ID0gcGFyc2VJbnQobWluQnJvd3NlclZlcnNpb24sIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgbWluaW11bSBzdXBwb3J0ZWQgYnJvd3NlciB2ZXJzaW9uIG1hdGNoZXMgdG8gJHttaW5Ccm93c2VyVmVyc2lvbkludH1gKTtcbiAgICAgIGxldCBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPSAwO1xuICAgICAgLy8gU2VsZWN0IHRoZSBuZXdlc3QgYXZhaWxhYmxlIGFuZCBjb21wYXRpYmxlIGNocm9tZWRyaXZlclxuICAgICAgZm9yIChjb25zdCBjZE5hbWUgb2YgZHJpdmVyc1RvU3luYykge1xuICAgICAgICBjb25zdCBjdXJyZW50TWluQnJvd3NlclZlcnNpb24gPSBwYXJzZUludCh0aGlzLm1hcHBpbmdbY2ROYW1lXS5taW5Ccm93c2VyVmVyc2lvbiwgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbilcbiAgICAgICAgICAgICYmIGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbiA8PSBtaW5Ccm93c2VyVmVyc2lvbkludFxuICAgICAgICAgICAgJiYgY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIDwgY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyID0gY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luYy5maWx0ZXIoKGNkTmFtZSkgPT4gYCR7dGhpcy5tYXBwaW5nW2NkTmFtZV0ubWluQnJvd3NlclZlcnNpb259YCA9PT1cbiAgICAgICAgYCR7Y2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyID4gMCA/IGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA6IG1pbkJyb3dzZXJWZXJzaW9uSW50fWApO1xuXG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYFdpbGwgc2VsZWN0IGNhbmRpZGF0ZSAke3V0aWwucGx1cmFsaXplKCdkcml2ZXInLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCl9IGAgK1xuICAgICAgICBgdmVyc2lvbmVkIGFzICcke18udW5pcShkcml2ZXJzVG9TeW5jLm1hcCgoY2ROYW1lKSA9PiB0aGlzLm1hcHBpbmdbY2ROYW1lXS52ZXJzaW9uKSl9J2ApO1xuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KG9zSW5mbykpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgZHJpdmVycyBmb3IgdW5zdXBwb3J0ZWQgc3lzdGVtIGFyY2hpdGVjdHVyZXNcbiAgICAgIGxldCB7bmFtZSwgYXJjaCwgaGFyZHdhcmVOYW1lfSA9IG9zSW5mbztcbiAgICAgIGlmIChhcmNoID09PSBYNjQgJiYgIWRyaXZlcnNUb1N5bmMuc29tZSgoY2ROYW1lKSA9PiBjZE5hbWUuaW5jbHVkZXMoYF8ke25hbWV9JHtYNjR9YCkpKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byB4ODYgYnVpbGQgaWYgeDY0IG9uZSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gT1NcbiAgICAgICAgYXJjaCA9IFg4NjtcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lID09PSBPUy5tYWMgJiYgXy5pbmNsdWRlcyhoYXJkd2FyZU5hbWUsICdhcm0nKVxuICAgICAgICAgICYmIGRyaXZlcnNUb1N5bmMuc29tZSgoY2ROYW1lKSA9PiBjZE5hbWUuaW5jbHVkZXMoTTFfQVJDSF9TVUZGSVgpKSkge1xuICAgICAgICAvLyBwcmVmZXIgZXhlY3V0YWJsZSBmb3IgTTEgYXJjaCBpZiBwcmVzZW50XG4gICAgICAgIGFyY2ggKz0gTTFfQVJDSF9TVUZGSVg7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBjaHJvbWVkcml2ZXJzIHdob3NlIHBsYXRmb3JtIG1hdGNoZXMgdG8gJHtuYW1lfSR7YXJjaH1gKTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtUmUgPSBuZXcgUmVnRXhwKGAoXFxcXGJ8Xykke25hbWV9JHthcmNofVxcXFxiYCk7XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luYy5maWx0ZXIoKGNkTmFtZSkgPT4gcGxhdGZvcm1SZS50ZXN0KGNkTmFtZSkpO1xuICAgICAgbG9nLmRlYnVnKGBHb3QgJHt1dGlsLnBsdXJhbGl6ZSgnaXRlbScsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZHJpdmVyc1RvU3luYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGdpdmVuIGNocm9tZWRyaXZlciBmcm9tIHRoZSBzdG9yYWdlXG4gICAqIGFuZCB1bnBhY2tzIGl0IGludG8gYHRoaXMuY2hyb21lZHJpdmVyRGlyYCBmb2xkZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIHVuaXF1ZSBkcml2ZXIgaW5kZXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRyaXZlcktleSAtIFRoZSBkcml2ZXIga2V5IGluIGB0aGlzLm1hcHBpbmdgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmNoaXZlc1Jvb3QgLSBUaGUgdGVtcG9yYXJ5IGZvbGRlciBwYXRoIHRvIGV4dHJhY3RcbiAgICogZG93bmxvYWRlZCBhcmNoaXZlcyB0b1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzU3RyaWN0IFt0cnVlXSAtIFdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgKGB0cnVlYClcbiAgICogb3IgcmV0dXJuIGEgYm9vbGVhbiByZXN1bHQgaWYgdGhlIGRyaXZlciByZXRyaWV2YWwgcHJvY2VzcyBmYWlsc1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSByZXRyaWV2aW5nIHRoZSBkcml2ZXJcbiAgICogYW5kIGBpc1N0cmljdGAgaXMgc2V0IHRvIGB0cnVlYFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgYHRydWVgIHRoZW4gdGhlIGNocm9tZWRyaXZlciBpcyBzdWNjZXNzZnVsbHlcbiAgICogZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkLlxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVEcml2ZXIgKGluZGV4LCBkcml2ZXJLZXksIGFyY2hpdmVzUm9vdCwgaXNTdHJpY3QgPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgdXJsLCBldGFnLCB2ZXJzaW9uIH0gPSB0aGlzLm1hcHBpbmdbZHJpdmVyS2V5XTtcbiAgICBjb25zdCBhcmNoaXZlUGF0aCA9IHBhdGgucmVzb2x2ZShhcmNoaXZlc1Jvb3QsIGAke2luZGV4fS56aXBgKTtcbiAgICBsb2cuZGVidWcoYFJldHJpZXZpbmcgJyR7dXJsfScgdG8gJyR7YXJjaGl2ZVBhdGh9J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXQuZG93bmxvYWRGaWxlKHVybCwgYXJjaGl2ZVBhdGgsIHtcbiAgICAgICAgaXNNZXRlcmVkOiBmYWxzZSxcbiAgICAgICAgdGltZW91dDogVElNRU9VVF9NU1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gYENhbm5vdCBkb3dubG9hZCBjaHJvbWVkcml2ZXIgYXJjaGl2ZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWA7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFhd2FpdCBpc0NyY09rKGFyY2hpdmVQYXRoLCBldGFnKSkge1xuICAgICAgY29uc3QgbXNnID0gYFRoZSBjaGVja3N1bSBmb3IgdGhlIGRvd25sb2FkZWQgY2hyb21lZHJpdmVyICcke2RyaXZlcktleX0nIGRpZCBub3QgbWF0Y2hgO1xuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7cGF0aC5wYXJzZSh1cmwpLm5hbWV9X3Yke3ZlcnNpb259YCArXG4gICAgICAoc3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJycpO1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5jaHJvbWVkcml2ZXJEaXIsIGZpbGVOYW1lKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51bnppcERyaXZlcihhcmNoaXZlUGF0aCwgdGFyZ2V0UGF0aCk7XG4gICAgICBhd2FpdCBmcy5jaG1vZCh0YXJnZXRQYXRoLCAwbzc1NSk7XG4gICAgICBsb2cuZGVidWcoYFBlcm1pc3Npb25zIG9mIHRoZSBmaWxlICcke3RhcmdldFBhdGh9JyBoYXZlIGJlZW4gY2hhbmdlZCB0byA3NTVgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBTeW5jT3B0aW9uc1xuICAgKiBAcHJvcGVydHkge0FycmF5PFN0cmluZz59IHZlcnNpb25zIC0gVGhlIGxpc3Qgb2YgY2hyb21lZHJpdmVyXG4gICAqIHZlcnNpb25zIHRvIHN5bmMuIElmIGVtcHR5ICh0aGUgZGVmYXVsdCB2YWx1ZSkgdGhlbiBhbGwgYXZhaWxhYmxlXG4gICAqIGNocm9tZWRyaXZlcnMgYXJlIGdvaW5nIHRvIGJlIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZFxuICAgKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IG1pbkJyb3dzZXJWZXJzaW9uIC0gVGhlIG1pbnVtdW0gc3VwcG9ydGVkXG4gICAqIENocm9tZSB2ZXJzaW9uIHRoYXQgZG93bmxvYWRlZCBjaHJvbWVkcml2ZXJzIHNob3VsZCBzdXBwb3J0LiBDYW4gbWF0Y2hcbiAgICogbXVsdGlwbGUgZHJpdmVycy5cbiAgICogQHByb3BlcnR5IHs/T1NJbmZvfSBvc0luZm8gLSBTeXN0ZW0gaW5mb3JtYXRpb24gdXNlZCB0byBmaWx0ZXIgb3V0XG4gICAqIHRoZSBsaXN0IG9mIHRoZSByZXRyaWV2ZWQgZHJpdmVycy4gSWYgbm90IHByb3ZpZGVkIHRoZW4gdGhlIHNjcmlwdFxuICAgKiB3aWxsIHRyeSB0byByZXRyaWV2ZSBpdC5cbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBjaHJvbWVkcml2ZXJzIGZyb20gdGhlIHJlbW90ZSBzdG9yYWdlXG4gICAqIHRvIHRoZSBsb2NhbCBmaWxlIHN5c3RlbVxuICAgKlxuICAgKiBAcGFyYW0gez9TeW5jT3B0aW9uc30gb3B0c1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aGlsZSByZXRyaWV2aW5nXG4gICAqIHRoZSBkcml2ZXJzXG4gICAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmd9IFRoZSBsaXN0IG9mIHN1Y2Nlc3NmdWxseSBzeW5jaHJvbml6ZWQgZHJpdmVyIGtleXNcbiAgICovXG4gIGFzeW5jIHN5bmNEcml2ZXJzIChvcHRzID0ge30pIHtcbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMubWFwcGluZykpIHtcbiAgICAgIGF3YWl0IHRoaXMucmV0cmlldmVNYXBwaW5nKCEhb3B0cy5taW5Ccm93c2VyVmVyc2lvbik7XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkodGhpcy5tYXBwaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcmV0cmlldmUgY2hyb21lZHJpdmVycyBtYXBwaW5nIGZyb20gR29vZ2xlIHN0b3JhZ2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkcml2ZXJzVG9TeW5jID0gdGhpcy5zZWxlY3RNYXRjaGluZ0RyaXZlcnMob3B0cy5vc0luZm8gPz8gYXdhaXQgZ2V0T3NJbmZvKCksIG9wdHMpO1xuICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyc1RvU3luYykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlcmUgYXJlIG5vIGRyaXZlcnMgdG8gc3luYy4gRXhpdGluZ2ApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdkcml2ZXInLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9IHRvIHN5bmM6IGAgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoZHJpdmVyc1RvU3luYywgbnVsbCwgMikpO1xuXG4gICAgY29uc3Qgc3luY2hyb25pemVkRHJpdmVycyA9IFtdO1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgY29uc3QgYXJjaGl2ZXNSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgW2lkeCwgZHJpdmVyS2V5XSBvZiBkcml2ZXJzVG9TeW5jLmVudHJpZXMoKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKGF3YWl0IHRoaXMucmV0cmlldmVEcml2ZXIoaWR4LCBkcml2ZXJLZXksIGFyY2hpdmVzUm9vdCwgIV8uaXNFbXB0eShvcHRzKSkpIHtcbiAgICAgICAgICAgIHN5bmNocm9uaXplZERyaXZlcnMucHVzaChkcml2ZXJLZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKSk7XG5cbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCAlIE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPT09IDApIHtcbiAgICAgICAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKGFyY2hpdmVzUm9vdCk7XG4gICAgfVxuICAgIGlmICghXy5pc0VtcHR5KHN5bmNocm9uaXplZERyaXZlcnMpKSB7XG4gICAgICBsb2cuaW5mbyhgU3VjY2Vzc2Z1bGx5IHN5bmNocm9uaXplZCBgICtcbiAgICAgICAgYCR7dXRpbC5wbHVyYWxpemUoJ2Nocm9tZWRyaXZlcicsIHN5bmNocm9uaXplZERyaXZlcnMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oYE5vIGNocm9tZWRyaXZlcnMgd2VyZSBzeW5jaHJvbml6ZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN5bmNocm9uaXplZERyaXZlcnM7XG4gIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50O1xuIl0sImZpbGUiOiJsaWIvc3RvcmFnZS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
391
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zdG9yYWdlLWNsaWVudC5qcyJdLCJuYW1lcyI6WyJUSU1FT1VUX01TIiwiTUFYX1BBUkFMTEVMX0RPV05MT0FEUyIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsImlzQ3JjT2siLCJzcmMiLCJjaGVja3N1bSIsIm1kNSIsImZzIiwiaGFzaCIsIl8iLCJ0b0xvd2VyIiwiZmluZENoaWxkTm9kZSIsInBhcmVudCIsImNoaWxkTmFtZSIsInRleHQiLCJoYXNDaGlsZE5vZGVzIiwiY2hpbGROb2RlSWR4IiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkTm9kZSIsImxvY2FsTmFtZSIsImNoaWxkVGV4dCIsImV4dHJhY3ROb2RlVGV4dCIsIm5vZGUiLCJmaXJzdENoaWxkIiwidXRpbCIsImhhc1ZhbHVlIiwibm9kZVZhbHVlIiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNvbnN0cnVjdG9yIiwiYXJncyIsImNocm9tZWRyaXZlckRpciIsInRpbWVvdXQiLCJtYXBwaW5nIiwicGFyc2VOb3RlcyIsImNvbnRlbnQiLCJyZXN1bHQiLCJ2ZXJzaW9uTWF0Y2giLCJleGVjIiwidmVyc2lvbiIsIm1pbkJyb3dzZXJWZXJzaW9uTWF0Y2giLCJtaW5Ccm93c2VyVmVyc2lvbiIsInJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8iLCJkcml2ZXJLZXkiLCJub3Rlc1VybCIsImluZm9EaWN0Iiwibm90ZXMiLCJhY2NlcHQiLCJkZWJ1ZyIsInBhcnNlU3RvcmFnZVhtbCIsImRvYyIsInNob3VsZFBhcnNlTm90ZXMiLCJkcml2ZXJOb2RlcyIsInhwYXRoIiwic2VsZWN0IiwiaXNFbXB0eSIsInByb21pc2VzIiwiZHJpdmVyTm9kZSIsImtleSIsImluY2x1ZGVzIiwiZXRhZyIsImNkSW5mbyIsInVybCIsIkNEX0NETiIsInRyaW0iLCJmaXJzdCIsInNwbGl0Iiwibm90ZXNQYXRoIiwiaXNOb3Rlc1ByZXNlbnQiLCJyZWR1Y2UiLCJhY2MiLCJpbmZvIiwicHVzaCIsIkIiLCJhbGwiLCJzaXplIiwicmV0cmlldmVNYXBwaW5nIiwieG1sIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiY2xvbmVEZWVwIiwidW56aXBEcml2ZXIiLCJkc3QiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJ6aXAiLCJleHRyYWN0QWxsVG8iLCJjaHJvbWVkcml2ZXJQYXRoIiwid2Fsa0RpciIsIml0ZW1QYXRoIiwiaXNEaXJlY3RvcnkiLCJwYXRoIiwicGFyc2UiLCJuYW1lIiwiRXJyb3IiLCJiYXNlbmFtZSIsIm12IiwibWtkaXJwIiwicmltcmFmIiwic2VsZWN0TWF0Y2hpbmdEcml2ZXJzIiwib3NJbmZvIiwib3B0cyIsInZlcnNpb25zIiwiZHJpdmVyc1RvU3luYyIsImtleXMiLCJmaWx0ZXIiLCJjZE5hbWUiLCJwbHVyYWxpemUiLCJpc05hTiIsIm1pbkJyb3dzZXJWZXJzaW9uSW50IiwicGFyc2VJbnQiLCJjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIiLCJjdXJyZW50TWluQnJvd3NlclZlcnNpb24iLCJ1bmlxIiwibWFwIiwiYXJjaCIsImhhcmR3YXJlTmFtZSIsIlg2NCIsInNvbWUiLCJYODYiLCJPUyIsIm1hYyIsIk0xX0FSQ0hfU1VGRklYIiwicGxhdGZvcm1SZSIsIlJlZ0V4cCIsInRlc3QiLCJyZXRyaWV2ZURyaXZlciIsImluZGV4IiwiYXJjaGl2ZXNSb290IiwiaXNTdHJpY3QiLCJhcmNoaXZlUGF0aCIsInJlc29sdmUiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJpc01ldGVyZWQiLCJlIiwibXNnIiwibWVzc2FnZSIsImVycm9yIiwiZmlsZU5hbWUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJ0YXJnZXRQYXRoIiwiY2htb2QiLCJzeW5jRHJpdmVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzeW5jaHJvbml6ZWREcml2ZXJzIiwiaWR4IiwiZW50cmllcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFJQTs7QUFDQTs7QUFDQTs7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YSwgZ2V0T3NJbmZvLFxuICBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeHBhdGggZnJvbSAneHBhdGgnO1xuaW1wb3J0IHsgRE9NUGFyc2VyIH0gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHRlbXBEaXIsIHppcCwgdXRpbCwgbmV0IH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuXG5cbmNvbnN0IFRJTUVPVVRfTVMgPSAxNTAwMDtcbmNvbnN0IE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPSA1O1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50Jyk7XG5cblxuYXN5bmMgZnVuY3Rpb24gaXNDcmNPayAoc3JjLCBjaGVja3N1bSkge1xuICBjb25zdCBtZDUgPSBhd2FpdCBmcy5oYXNoKHNyYywgJ21kNScpO1xuICByZXR1cm4gXy50b0xvd2VyKG1kNSkgPT09IF8udG9Mb3dlcihjaGVja3N1bSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZE5vZGUgKHBhcmVudCwgY2hpbGROYW1lID0gbnVsbCwgdGV4dCA9IG51bGwpIHtcbiAgaWYgKCFjaGlsZE5hbWUgJiYgIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIXBhcmVudC5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAobGV0IGNoaWxkTm9kZUlkeCA9IDA7IGNoaWxkTm9kZUlkeCA8IHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDsgY2hpbGROb2RlSWR4KyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBwYXJlbnQuY2hpbGROb2Rlc1tjaGlsZE5vZGVJZHhdO1xuICAgIGlmIChjaGlsZE5hbWUgJiYgIXRleHQgJiYgY2hpbGROYW1lID09PSBjaGlsZE5vZGUubG9jYWxOYW1lKSB7XG4gICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgIH1cbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3QgY2hpbGRUZXh0ID0gZXh0cmFjdE5vZGVUZXh0KGNoaWxkTm9kZSk7XG4gICAgICBpZiAoIWNoaWxkVGV4dCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZE5hbWUgJiYgY2hpbGROYW1lID09PSBjaGlsZE5vZGUubG9jYWxOYW1lICYmIHRleHQgPT09IGNoaWxkVGV4dCkge1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGlsZE5hbWUgJiYgdGV4dCA9PT0gY2hpbGRUZXh0KSB7XG4gICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0Tm9kZVRleHQgKG5vZGUpIHtcbiAgcmV0dXJuICghbm9kZSB8fCAhbm9kZS5maXJzdENoaWxkIHx8ICF1dGlsLmhhc1ZhbHVlKG5vZGUuZmlyc3RDaGlsZC5ub2RlVmFsdWUpKVxuICAgID8gbnVsbFxuICAgIDogbm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZTtcbn1cblxuXG5jbGFzcyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNocm9tZWRyaXZlckRpciA9IGdldENocm9tZWRyaXZlckRpcigpLFxuICAgICAgdGltZW91dCA9IFRJTUVPVVRfTVMsXG4gICAgfSA9IGFyZ3M7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXJEaXIgPSBjaHJvbWVkcml2ZXJEaXI7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgICB0aGlzLm1hcHBpbmcgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc1xuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IHZlcnNpb24gLSBDaHJvbWVkcml2ZXIgdmVyc2lvblxuICAgKiBvciBgbnVsbGAgaWYgaXQgY2Fubm90IGJlIGZvdW5kXG4gICAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWluQnJvd3NlclZlcnNpb24gLSBUaGUgbWluaW11bSBicm93c2VyIHZlcnNpb25cbiAgICogc3VwcG9ydGVkIGJ5IGNocm9tZWRyaXZlciBvciBgbnVsbGAgaWYgaXQgY2Fubm90IGJlIGZvdW5kXG4gICAqL1xuXG4gIC8qKlxuICAgKiBHZXRzIGFkZGl0aW9uYWwgY2hyb21lZHJpdmVyIGRldGFpbHMgZnJvbSBjaHJvbWVkcml2ZXJcbiAgICogcmVsZWFzZSBub3Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIFJlbGVhc2Ugbm90ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2hyb21lZHJpdmVyXG4gICAqIEByZXR1cm5zIHtBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc31cbiAgICovXG4gIHBhcnNlTm90ZXMgKGNvbnRlbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSAvXlxccypbLV0rQ2hyb21lRHJpdmVyW1xcRF0rKFtcXGQuXSspL2ltLmV4ZWMoY29udGVudCk7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgcmVzdWx0LnZlcnNpb24gPSB2ZXJzaW9uTWF0Y2hbMV07XG4gICAgfVxuICAgIGNvbnN0IG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2ggPSAvXlxccypTdXBwb3J0cyBDaHJvbWVbXFxEXSsoXFxkKykvaW0uZXhlYyhjb250ZW50KTtcbiAgICBpZiAobWluQnJvd3NlclZlcnNpb25NYXRjaCkge1xuICAgICAgcmVzdWx0Lm1pbkJyb3dzZXJWZXJzaW9uID0gbWluQnJvd3NlclZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZHMgY2hyb21lZHJpdmVyIHJlbGVhc2Ugbm90ZXMgYW5kIHB1dHMgdGhlbVxuICAgKiBpbnRvIHRoZSBkaWN0aW9uYXJ5IGFyZ3VtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXJLZXkgLSBEcml2ZXIgdmVyc2lvbiBwbHVzIGFyY2hpdmUgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbm90ZXNVcmwgLSBUaGUgVVJMIG9mIGNocm9tZWRyaXZlciBub3Rlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gaW5mb0RpY3QgLSBUaGUgZGljdGlvbmFyeSBjb250YWluaW5nIGRyaXZlciBpbmZvLlxuICAgKiBUaGUgbWV0aG9kIGNhbGwgbXV0YXRlcyBieSBtZXJnaW5nIGBBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc2BcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSByZWxlYXNlIG5vdGVzIGNhbm5vdCBiZSBkb3dubG9hZGVkXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZUFkZGl0aW9uYWxEcml2ZXJJbmZvIChkcml2ZXJLZXksIG5vdGVzVXJsLCBpbmZvRGljdCkge1xuICAgIGNvbnN0IG5vdGVzID0gYXdhaXQgcmV0cmlldmVEYXRhKG5vdGVzVXJsLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IHRoaXMudGltZW91dCB9KTtcbiAgICBjb25zdCB7IG1pbkJyb3dzZXJWZXJzaW9uIH0gPSB0aGlzLnBhcnNlTm90ZXMobm90ZXMpO1xuICAgIGlmICghbWluQnJvd3NlclZlcnNpb24pIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlIGRyaXZlciAnJHtkcml2ZXJLZXl9JyBkb2VzIG5vdCBjb250YWluIHZhbGlkIHJlbGVhc2Ugbm90ZXMgYXQgJHtub3Rlc1VybH0uIGAgK1xuICAgICAgICBgU2tpcHBpbmcgaXRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5mb0RpY3QubWluQnJvd3NlclZlcnNpb24gPSBtaW5Ccm93c2VyVmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgY2hyb21lZHJpdmVyIHN0b3JhZ2UgWE1MIGFuZCBzdG9yZXNcbiAgICogdGhlIHBhcnNlZCByZXN1bHRzIGludG8gYHRoaXMubWFwcGluZ2BcbiAgICpcbiAgICogQHBhcmFtIHtET01Eb2N1bWVudH0gZG9jIC0gVGhlIERPTSByZXByZXNlbnRhdGlvblxuICAgKiBvZiB0aGUgY2hyb21lZHJpdmVyIHN0b3JhZ2UgWE1MXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUGFyc2VOb3RlcyBbdHJ1ZV0gLSBJZiBzZXQgdG8gYHRydWVgXG4gICAqIHRoZW4gYWRkaXRpb25hbCBkcml2ZXJzIGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGJlIHBhcnNlZFxuICAgKiBhbmQgYXNzaWduZWQgdG8gYHRoaXMubWFwcGluZ2BcbiAgICovXG4gIGFzeW5jIHBhcnNlU3RvcmFnZVhtbCAoZG9jLCBzaG91bGRQYXJzZU5vdGVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRyaXZlck5vZGVzID0geHBhdGguc2VsZWN0KGAvLypbbG9jYWwtbmFtZSguKT0nQ29udGVudHMnXWAsIGRvYyk7XG4gICAgbG9nLmRlYnVnKGBQYXJzZWQgJHtkcml2ZXJOb2Rlcy5sZW5ndGh9IGVudHJpZXMgZnJvbSBzdG9yYWdlIFhNTGApO1xuICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyTm9kZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGRyaXZlck5vZGUgb2YgZHJpdmVyTm9kZXMpIHtcbiAgICAgIGNvbnN0IGtleSA9IGV4dHJhY3ROb2RlVGV4dChmaW5kQ2hpbGROb2RlKGRyaXZlck5vZGUsICdLZXknKSk7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoa2V5LCAnL2Nocm9tZWRyaXZlcl8nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXRhZyA9IGV4dHJhY3ROb2RlVGV4dChmaW5kQ2hpbGROb2RlKGRyaXZlck5vZGUsICdFVGFnJykpO1xuICAgICAgaWYgKCFldGFnKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlIGVudHJ5ICcke2tleX0nIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNoZWNrc3VtLiBTa2lwcGluZyBpdGApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2RJbmZvID0ge1xuICAgICAgICB1cmw6IGAke0NEX0NETn0vJHtrZXl9YCxcbiAgICAgICAgZXRhZzogXy50cmltKGV0YWcsICdcIicpLFxuICAgICAgICB2ZXJzaW9uOiBfLmZpcnN0KGtleS5zcGxpdCgnLycpKSxcbiAgICAgIH07XG4gICAgICB0aGlzLm1hcHBpbmdba2V5XSA9IGNkSW5mbztcblxuICAgICAgY29uc3Qgbm90ZXNQYXRoID0gYCR7Y2RJbmZvLnZlcnNpb259L25vdGVzLnR4dGA7XG4gICAgICBjb25zdCBpc05vdGVzUHJlc2VudCA9ICEhZHJpdmVyTm9kZXNcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBub2RlKSA9PiBhY2MgfHwgZmluZENoaWxkTm9kZShub2RlLCAnS2V5Jywgbm90ZXNQYXRoKSwgZmFsc2UpO1xuICAgICAgaWYgKCFpc05vdGVzUHJlc2VudCkge1xuICAgICAgICBjZEluZm8ubWluQnJvd3NlclZlcnNpb24gPSBudWxsO1xuICAgICAgICBpZiAoc2hvdWxkUGFyc2VOb3Rlcykge1xuICAgICAgICAgIGxvZy5pbmZvKGBUaGUgZW50cnkgJyR7a2V5fScgZG9lcyBub3QgY29udGFpbiBhbnkgbm90ZXMuIFNraXBwaW5nIGl0YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKCFzaG91bGRQYXJzZU5vdGVzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlcy5wdXNoKHRoaXMucmV0cmlldmVBZGRpdGlvbmFsRHJpdmVySW5mbyhrZXksIGAke0NEX0NETn0vJHtub3Rlc1BhdGh9YCwgY2RJbmZvKSk7XG4gICAgICBpZiAocHJvbWlzZXMubGVuZ3RoICUgTUFYX1BBUkFMTEVMX0RPV05MT0FEUyA9PT0gMCkge1xuICAgICAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICBsb2cuaW5mbyhgVGhlIHRvdGFsIGNvdW50IG9mIGVudHJpZXMgaW4gdGhlIG1hcHBpbmc6ICR7Xy5zaXplKHRoaXMubWFwcGluZyl9YCk7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gRHJpdmVyRGV0YWlsc1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIC0gVGhlIGZ1bGwgdXJsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBpblxuICAgKiB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGV0YWcgLSBUaGUgQ1JDIG9mIHRoZSBkcml2ZXIgYXJjaGl2ZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbiAtIENocm9tZWRyaXZlciB2ZXJzaW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBDaHJvbWVkcml2ZXJzTWFwcGluZ1xuICAgKiBAcHJvcGVydHkge0RyaXZlckRldGFpbHN9IC0gVGhlIGtleXMgYXJlIHVuaXF1ZSBkcml2ZXIgaWRlbnRpZmllcnNcbiAgICogKHZlcnNpb24vYXJjaGl2ZSBuYW1lKS4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGhhdmUgYERyaXZlckRldGFpbHNgXG4gICAqIGNvbnRhaW5pbmcgY2hyb21lZHJpdmVyIGRldGFpbHNcbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBjaHJvbWVkcml2ZXIgbWFwcGluZyBmcm9tIHRoZSBzdG9yYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUGFyc2VOb3RlcyBbdHJ1ZV0gLSBpZiBzZXQgdG8gYHRydWVgXG4gICAqIHRoZW4gYWRkaXRpb25hbCBjaHJvbWVkcml2ZXJzIGluZm8gaXMgZ29pbmcgdG8gYmUgcmV0cmlldmVkIGFuZFxuICAgKiBwYXJzZWQgZnJvbSByZWxlYXNlIG5vdGVzXG4gICAqIEByZXR1cm5zIHtDaHJvbWVkcml2ZXJzTWFwcGluZ31cbiAgICovXG4gIGFzeW5jIHJldHJpZXZlTWFwcGluZyAoc2hvdWxkUGFyc2VOb3RlcyA9IHRydWUpIHtcbiAgICBjb25zdCB4bWwgPSBhd2FpdCByZXRyaWV2ZURhdGEoQ0RfQ0ROLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24veG1sLCAqLyonLFxuICAgIH0sIHsgdGltZW91dDogdGhpcy50aW1lb3V0IH0pO1xuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoeG1sKTtcbiAgICBhd2FpdCB0aGlzLnBhcnNlU3RvcmFnZVhtbChkb2MsIHNob3VsZFBhcnNlTm90ZXMpO1xuICAgIHJldHVybiBfLmNsb25lRGVlcCh0aGlzLm1hcHBpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGRvd25sb2FkZWQgY2hyb21lZHJpdmVyIGFyY2hpdmVcbiAgICogaW50byB0aGUgZ2l2ZW4gZGVzdGluYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyAtIFRoZSBzb3VyY2UgYXJjaGl2ZSBwYXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkc3QgLSBUaGUgZGVzdGluYXRpb24gY2hyb21lZHJpdmVyIHBhdGhcbiAgICovXG4gIGFzeW5jIHVuemlwRHJpdmVyIChzcmMsIGRzdCkge1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhzcmMsIHRtcFJvb3QpO1xuICAgICAgY29uc3QgY2hyb21lZHJpdmVyUGF0aCA9IGF3YWl0IGZzLndhbGtEaXIodG1wUm9vdCwgdHJ1ZSwgKGl0ZW1QYXRoLCBpc0RpcmVjdG9yeSkgPT5cbiAgICAgICAgIWlzRGlyZWN0b3J5ICYmIF8udG9Mb3dlcihwYXRoLnBhcnNlKGl0ZW1QYXRoKS5uYW1lKSA9PT0gJ2Nocm9tZWRyaXZlcicpO1xuICAgICAgaWYgKCFjaHJvbWVkcml2ZXJQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGFyY2hpdmUgd2FzIHVuemlwcGVkIHByb3Blcmx5LCBidXQgd2UgY291bGQgbm90IGZpbmQgYW55IGNocm9tZWRyaXZlciBleGVjdXRhYmxlJyk7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYE1vdmluZyB0aGUgZXh0cmFjdGVkICcke3BhdGguYmFzZW5hbWUoY2hyb21lZHJpdmVyUGF0aCl9JyB0byAnJHtkc3R9J2ApO1xuICAgICAgYXdhaXQgZnMubXYoY2hyb21lZHJpdmVyUGF0aCwgZHN0LCB7XG4gICAgICAgIG1rZGlycDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gT1NJbmZvXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhvc3QgT1NcbiAgICogQ2FuIGJlIGVpdGhlciBgbWFjYCwgYHdpbmRvd3NgIG9yIGBsaW51eGBcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBob3N0IE9ELlxuICAgKiBDYW4gYmUgZWl0aGVyIGAzMmAgb3IgYDY0YFxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IGhhcmR3YXJlTmFtZSAtIFRoZSBvdXRwdXQgb2YgYHVuYW1lIC1tYCBjb21tYW5kXG4gICAqIG9uIGxpbnV4IGFuZCBtYWMgc3lzdGVtcy4gYG51bGxgIG9uIFdpbmRvd3NcbiAgICovXG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYHRoaXMubWFwcGluZ2AgdG8gb25seSBzZWxlY3QgbWF0Y2hpbmdcbiAgICogY2hyb21lZHJpdmVyIGVudHJpZXMgYnkgb3BlcmF0aW5nIHN5c3RlbSBpbmZvcm1hdGlvblxuICAgKiBhbmQvb3IgYWRkaXRpb25hbCBzeW5jaHJvbml6YXRpb24gb3B0aW9ucyAoaWYgcHJvdmlkZWQpXG4gICAqXG4gICAqIEBwYXJhbSB7P09TSW5mb30gb3NJbmZvXG4gICAqIEBwYXJhbSB7P1N5bmNPcHRpb25zfSBvcHRzXG4gICAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgbGlzdCBvZiBmaWx0ZXJlZCBjaHJvbWVkcml2ZXJcbiAgICogZW50cnkgbmFtZXMgKHZlcnNpb24vYXJjaGl2ZSBuYW1lKVxuICAgKi9cbiAgc2VsZWN0TWF0Y2hpbmdEcml2ZXJzIChvc0luZm8sIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIG1pbkJyb3dzZXJWZXJzaW9uLFxuICAgICAgdmVyc2lvbnMgPSBbXSxcbiAgICB9ID0gb3B0cztcbiAgICBsZXQgZHJpdmVyc1RvU3luYyA9IF8ua2V5cyh0aGlzLm1hcHBpbmcpO1xuXG4gICAgaWYgKCFfLmlzRW1wdHkodmVyc2lvbnMpKSB7XG4gICAgICAvLyBIYW5kbGUgb25seSBzZWxlY3RlZCB2ZXJzaW9ucyBpZiByZXF1ZXN0ZWRcbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgdmVyc2lvbnMgbWF0Y2ggdG8gJHt2ZXJzaW9uc31gKTtcbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jXG4gICAgICAgIC5maWx0ZXIoKGNkTmFtZSkgPT4gdmVyc2lvbnMuaW5jbHVkZXMoYCR7dGhpcy5tYXBwaW5nW2NkTmFtZV0udmVyc2lvbn1gKSk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2l0ZW0nLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcnNUb1N5bmMpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzTmFOKG1pbkJyb3dzZXJWZXJzaW9uKSkge1xuICAgICAgLy8gT25seSBzZWxlY3QgZHJpdmVycyB0aGF0IHN1cHBvcnQgdGhlIGN1cnJlbnQgYnJvd3NlciB3aG9zZSBtYWpvciB2ZXJzaW9uIG51bWJlciBlcXVhbHMgdG8gYG1pbkJyb3dzZXJWZXJzaW9uYFxuICAgICAgY29uc3QgbWluQnJvd3NlclZlcnNpb25JbnQgPSBwYXJzZUludChtaW5Ccm93c2VyVmVyc2lvbiwgMTApO1xuICAgICAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgY2hyb21lZHJpdmVycyB3aG9zZSBtaW5pbXVtIHN1cHBvcnRlZCBicm93c2VyIHZlcnNpb24gbWF0Y2hlcyB0byAke21pbkJyb3dzZXJWZXJzaW9uSW50fWApO1xuICAgICAgbGV0IGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA9IDA7XG4gICAgICAvLyBTZWxlY3QgdGhlIG5ld2VzdCBhdmFpbGFibGUgYW5kIGNvbXBhdGlibGUgY2hyb21lZHJpdmVyXG4gICAgICBmb3IgKGNvbnN0IGNkTmFtZSBvZiBkcml2ZXJzVG9TeW5jKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbiA9IHBhcnNlSW50KHRoaXMubWFwcGluZ1tjZE5hbWVdLm1pbkJyb3dzZXJWZXJzaW9uLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4oY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uKVxuICAgICAgICAgICAgJiYgY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uIDw9IG1pbkJyb3dzZXJWZXJzaW9uSW50XG4gICAgICAgICAgICAmJiBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPCBjdXJyZW50TWluQnJvd3NlclZlcnNpb24pIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPSBjdXJyZW50TWluQnJvd3NlclZlcnNpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jLmZpbHRlcigoY2ROYW1lKSA9PiBgJHt0aGlzLm1hcHBpbmdbY2ROYW1lXS5taW5Ccm93c2VyVmVyc2lvbn1gID09PVxuICAgICAgICBgJHtjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPiAwID8gY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIDogbWluQnJvd3NlclZlcnNpb25JbnR9YCk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2l0ZW0nLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcnNUb1N5bmMpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgV2lsbCBzZWxlY3QgY2FuZGlkYXRlICR7dXRpbC5wbHVyYWxpemUoJ2RyaXZlcicsIGRyaXZlcnNUb1N5bmMubGVuZ3RoKX0gYCArXG4gICAgICAgIGB2ZXJzaW9uZWQgYXMgJyR7Xy51bmlxKGRyaXZlcnNUb1N5bmMubWFwKChjZE5hbWUpID0+IHRoaXMubWFwcGluZ1tjZE5hbWVdLnZlcnNpb24pKX0nYCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkob3NJbmZvKSkge1xuICAgICAgLy8gRmlsdGVyIG91dCBkcml2ZXJzIGZvciB1bnN1cHBvcnRlZCBzeXN0ZW0gYXJjaGl0ZWN0dXJlc1xuICAgICAgbGV0IHtuYW1lLCBhcmNoLCBoYXJkd2FyZU5hbWV9ID0gb3NJbmZvO1xuICAgICAgaWYgKGFyY2ggPT09IFg2NCAmJiAhZHJpdmVyc1RvU3luYy5zb21lKChjZE5hbWUpID0+IGNkTmFtZS5pbmNsdWRlcyhgXyR7bmFtZX0ke1g2NH1gKSkpIHtcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHg4NiBidWlsZCBpZiB4NjQgb25lIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBPU1xuICAgICAgICBhcmNoID0gWDg2O1xuICAgICAgfVxuICAgICAgaWYgKG5hbWUgPT09IE9TLm1hYyAmJiBfLmluY2x1ZGVzKGhhcmR3YXJlTmFtZSwgJ2FybScpXG4gICAgICAgICAgJiYgZHJpdmVyc1RvU3luYy5zb21lKChjZE5hbWUpID0+IGNkTmFtZS5pbmNsdWRlcyhNMV9BUkNIX1NVRkZJWCkpKSB7XG4gICAgICAgIC8vIHByZWZlciBleGVjdXRhYmxlIGZvciBNMSBhcmNoIGlmIHByZXNlbnRcbiAgICAgICAgYXJjaCArPSBNMV9BUkNIX1NVRkZJWDtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgcGxhdGZvcm0gbWF0Y2hlcyB0byAke25hbWV9JHthcmNofWApO1xuICAgICAgY29uc3QgcGxhdGZvcm1SZSA9IG5ldyBSZWdFeHAoYChcXFxcYnxfKSR7bmFtZX0ke2FyY2h9XFxcXGJgKTtcbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jLmZpbHRlcigoY2ROYW1lKSA9PiBwbGF0Zm9ybVJlLnRlc3QoY2ROYW1lKSk7XG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBkcml2ZXJzVG9TeW5jO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZ2l2ZW4gY2hyb21lZHJpdmVyIGZyb20gdGhlIHN0b3JhZ2VcbiAgICogYW5kIHVucGFja3MgaXQgaW50byBgdGhpcy5jaHJvbWVkcml2ZXJEaXJgIGZvbGRlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgdW5pcXVlIGRyaXZlciBpbmRleFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHJpdmVyS2V5IC0gVGhlIGRyaXZlciBrZXkgaW4gYHRoaXMubWFwcGluZ2BcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyY2hpdmVzUm9vdCAtIFRoZSB0ZW1wb3JhcnkgZm9sZGVyIHBhdGggdG8gZXh0cmFjdFxuICAgKiBkb3dubG9hZGVkIGFyY2hpdmVzIHRvXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTdHJpY3QgW3RydWVdIC0gV2hldGhlciB0byB0aHJvdyBhbiBlcnJvciAoYHRydWVgKVxuICAgKiBvciByZXR1cm4gYSBib29sZWFuIHJlc3VsdCBpZiB0aGUgZHJpdmVyIHJldHJpZXZhbCBwcm9jZXNzIGZhaWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHJldHJpZXZpbmcgdGhlIGRyaXZlclxuICAgKiBhbmQgYGlzU3RyaWN0YCBpcyBzZXQgdG8gYHRydWVgXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBpZiBgdHJ1ZWAgdGhlbiB0aGUgY2hyb21lZHJpdmVyIGlzIHN1Y2Nlc3NmdWxseVxuICAgKiBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWQuXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZURyaXZlciAoaW5kZXgsIGRyaXZlcktleSwgYXJjaGl2ZXNSb290LCBpc1N0cmljdCA9IGZhbHNlKSB7XG4gICAgY29uc3QgeyB1cmwsIGV0YWcsIHZlcnNpb24gfSA9IHRoaXMubWFwcGluZ1tkcml2ZXJLZXldO1xuICAgIGNvbnN0IGFyY2hpdmVQYXRoID0gcGF0aC5yZXNvbHZlKGFyY2hpdmVzUm9vdCwgYCR7aW5kZXh9LnppcGApO1xuICAgIGxvZy5kZWJ1ZyhgUmV0cmlldmluZyAnJHt1cmx9JyB0byAnJHthcmNoaXZlUGF0aH0nYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldC5kb3dubG9hZEZpbGUodXJsLCBhcmNoaXZlUGF0aCwge1xuICAgICAgICBpc01ldGVyZWQ6IGZhbHNlLFxuICAgICAgICB0aW1lb3V0OiBUSU1FT1VUX01TXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBgQ2Fubm90IGRvd25sb2FkIGNocm9tZWRyaXZlciBhcmNoaXZlLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YDtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcihtc2cpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWF3YWl0IGlzQ3JjT2soYXJjaGl2ZVBhdGgsIGV0YWcpKSB7XG4gICAgICBjb25zdCBtc2cgPSBgVGhlIGNoZWNrc3VtIGZvciB0aGUgZG93bmxvYWRlZCBjaHJvbWVkcml2ZXIgJyR7ZHJpdmVyS2V5fScgZGlkIG5vdCBtYXRjaGA7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHtwYXRoLnBhcnNlKHVybCkubmFtZX1fdiR7dmVyc2lvbn1gICtcbiAgICAgIChzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJyk7XG4gICAgY29uc3QgdGFyZ2V0UGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmNocm9tZWRyaXZlckRpciwgZmlsZU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnVuemlwRHJpdmVyKGFyY2hpdmVQYXRoLCB0YXJnZXRQYXRoKTtcbiAgICAgIGF3YWl0IGZzLmNobW9kKHRhcmdldFBhdGgsIDBvNzU1KTtcbiAgICAgIGxvZy5kZWJ1ZyhgUGVybWlzc2lvbnMgb2YgdGhlIGZpbGUgJyR7dGFyZ2V0UGF0aH0nIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIDc1NWApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IFN5bmNPcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXk8U3RyaW5nPn0gdmVyc2lvbnMgLSBUaGUgbGlzdCBvZiBjaHJvbWVkcml2ZXJcbiAgICogdmVyc2lvbnMgdG8gc3luYy4gSWYgZW1wdHkgKHRoZSBkZWZhdWx0IHZhbHVlKSB0aGVuIGFsbCBhdmFpbGFibGVcbiAgICogY2hyb21lZHJpdmVycyBhcmUgZ29pbmcgdG8gYmUgZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gbWluQnJvd3NlclZlcnNpb24gLSBUaGUgbWludW11bSBzdXBwb3J0ZWRcbiAgICogQ2hyb21lIHZlcnNpb24gdGhhdCBkb3dubG9hZGVkIGNocm9tZWRyaXZlcnMgc2hvdWxkIHN1cHBvcnQuIENhbiBtYXRjaFxuICAgKiBtdWx0aXBsZSBkcml2ZXJzLlxuICAgKiBAcHJvcGVydHkgez9PU0luZm99IG9zSW5mbyAtIFN5c3RlbSBpbmZvcm1hdGlvbiB1c2VkIHRvIGZpbHRlciBvdXRcbiAgICogdGhlIGxpc3Qgb2YgdGhlIHJldHJpZXZlZCBkcml2ZXJzLiBJZiBub3QgcHJvdmlkZWQgdGhlbiB0aGUgc2NyaXB0XG4gICAqIHdpbGwgdHJ5IHRvIHJldHJpZXZlIGl0LlxuICAgKi9cblxuICAvKipcbiAgICogUmV0cmlldmVzIGNocm9tZWRyaXZlcnMgZnJvbSB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICogdG8gdGhlIGxvY2FsIGZpbGUgc3lzdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7P1N5bmNPcHRpb25zfSBvcHRzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIHJldHJpZXZpbmdcbiAgICogdGhlIGRyaXZlcnNcbiAgICogQHJldHVybnMge0FycmF5PFN0cmluZ30gVGhlIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5IHN5bmNocm9uaXplZCBkcml2ZXIga2V5c1xuICAgKi9cbiAgYXN5bmMgc3luY0RyaXZlcnMgKG9wdHMgPSB7fSkge1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5tYXBwaW5nKSkge1xuICAgICAgYXdhaXQgdGhpcy5yZXRyaWV2ZU1hcHBpbmcoISFvcHRzLm1pbkJyb3dzZXJWZXJzaW9uKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLm1hcHBpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgZnJvbSBHb29nbGUgc3RvcmFnZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGRyaXZlcnNUb1N5bmMgPSB0aGlzLnNlbGVjdE1hdGNoaW5nRHJpdmVycyhvcHRzLm9zSW5mbyA/PyBhd2FpdCBnZXRPc0luZm8oKSwgb3B0cyk7XG4gICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBhcmUgbm8gZHJpdmVycyB0byBzeW5jLiBFeGl0aW5nYCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2RyaXZlcicsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX0gdG8gc3luYzogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShkcml2ZXJzVG9TeW5jLCBudWxsLCAyKSk7XG5cbiAgICBjb25zdCBzeW5jaHJvbml6ZWREcml2ZXJzID0gW107XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBjb25zdCBhcmNoaXZlc1Jvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBbaWR4LCBkcml2ZXJLZXldIG9mIGRyaXZlcnNUb1N5bmMuZW50cmllcygpKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5yZXRyaWV2ZURyaXZlcihpZHgsIGRyaXZlcktleSwgYXJjaGl2ZXNSb290LCAhXy5pc0VtcHR5KG9wdHMpKSkge1xuICAgICAgICAgICAgc3luY2hyb25pemVkRHJpdmVycy5wdXNoKGRyaXZlcktleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpKTtcblxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoICUgTUFYX1BBUkFMTEVMX0RPV05MT0FEUyA9PT0gMCkge1xuICAgICAgICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYoYXJjaGl2ZXNSb290KTtcbiAgICB9XG4gICAgaWYgKCFfLmlzRW1wdHkoc3luY2hyb25pemVkRHJpdmVycykpIHtcbiAgICAgIGxvZy5pbmZvKGBTdWNjZXNzZnVsbHkgc3luY2hyb25pemVkIGAgK1xuICAgICAgICBgJHt1dGlsLnBsdXJhbGl6ZSgnY2hyb21lZHJpdmVyJywgc3luY2hyb25pemVkRHJpdmVycy5sZW5ndGgsIHRydWUpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbyhgTm8gY2hyb21lZHJpdmVycyB3ZXJlIHN5bmNocm9uaXplZGApO1xuICAgIH1cbiAgICByZXR1cm4gc3luY2hyb25pemVkRHJpdmVycztcbiAgfVxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQ7XG4iXSwiZmlsZSI6ImxpYi9zdG9yYWdlLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
package/build/lib/utils.js
CHANGED
|
@@ -5,12 +5,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
exports.X86 = exports.X64 = exports.OS = exports.M1_ARCH_SUFFIX = exports.CHROMEDRIVER_CHROME_MAPPING = exports.CD_VER = exports.CD_CDN = exports.CD_BASE_DIR = void 0;
|
|
8
9
|
exports.getChromeVersion = getChromeVersion;
|
|
9
|
-
exports.getChromedriverDir = getChromedriverDir;
|
|
10
10
|
exports.getChromedriverBinaryPath = getChromedriverBinaryPath;
|
|
11
|
+
exports.getChromedriverDir = getChromedriverDir;
|
|
11
12
|
exports.getMostRecentChromedriver = getMostRecentChromedriver;
|
|
13
|
+
exports.getOsName = exports.getOsInfo = void 0;
|
|
12
14
|
exports.retrieveData = retrieveData;
|
|
13
|
-
exports.M1_ARCH_SUFFIX = exports.X86 = exports.X64 = exports.OS = exports.getOsInfo = exports.CHROMEDRIVER_CHROME_MAPPING = exports.CD_VER = exports.CD_CDN = exports.CD_BASE_DIR = exports.getOsName = void 0;
|
|
14
15
|
|
|
15
16
|
require("source-map-support/register");
|
|
16
17
|
|
|
@@ -123,4 +124,4 @@ const getOsInfo = _lodash.default.memoize(async function getOsInfo() {
|
|
|
123
124
|
exports.getOsInfo = getOsInfo;require('source-map-support').install();
|
|
124
125
|
|
|
125
126
|
|
|
126
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
127
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJyb290RGlyIiwicGF0aCIsImJhc2VuYW1lIiwiX19kaXJuYW1lIiwicmVzb2x2ZSIsInByb2Nlc3MiLCJlbnYiLCJOT19QUkVDT01QSUxFIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwicmVxdWlyZSIsIkNEX1ZFUiIsIm5wbV9jb25maWdfY2hyb21lZHJpdmVyX3ZlcnNpb24iLCJDSFJPTUVEUklWRVJfVkVSU0lPTiIsImdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIiLCJDRF9CQVNFX0RJUiIsIkNEX0NETiIsIm5wbV9jb25maWdfY2hyb21lZHJpdmVyX2NkbnVybCIsIkNIUk9NRURSSVZFUl9DRE5VUkwiLCJPUyIsImxpbnV4Iiwid2luZG93cyIsIm1hYyIsIlg2NCIsIlg4NiIsIk0xX0FSQ0hfU1VGRklYIiwiQ0RfRVhFQ1VUQUJMRV9QUkVGSVgiLCJtYXBwaW5nIiwiXyIsImlzRW1wdHkiLCJFcnJvciIsImxhc3QiLCJrZXlzIiwic29ydCIsImNvbXBhcmVWZXJzaW9ucyIsImdldENocm9tZVZlcnNpb24iLCJhZGIiLCJidW5kbGVJZCIsInZlcnNpb25OYW1lIiwiZ2V0UGFja2FnZUluZm8iLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJvc05hbWUiLCJnZXRPc05hbWUiLCJnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIiwicGF0aFN1ZmZpeCIsInBhdGhzIiwiZnMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJub2Nhc2UiLCJub2RpciIsInN0cmljdCIsImZpcnN0IiwicmV0cmlldmVEYXRhIiwidXJsIiwiaGVhZGVycyIsIm9wdHMiLCJ0aW1lb3V0IiwicmVzcG9uc2VUeXBlIiwiZGF0YSIsIm1lbW9pemUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJpc01hYyIsImdldE9zSW5mbyIsIm5hbWUiLCJhcmNoIiwiaGFyZHdhcmVOYW1lIiwidHJpbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7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b3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHN5c3RlbSwgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBjb21wYXJlVmVyc2lvbnMgZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5cblxuY29uc3Qgcm9vdERpciA9IHBhdGguYmFzZW5hbWUoX19kaXJuYW1lKSA9PT0gJ2xpYidcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBwcm9jZXNzLmVudi5OT19QUkVDT01QSUxFID8gJy4uJyA6ICcuLi8uLicpXG4gIDogX19kaXJuYW1lO1xuLy8gQ2hyb21lZHJpdmVyIHZlcnNpb246IG1pbmltdW0gQ2hyb21lIHZlcnNpb25cbmNvbnN0IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKHJvb3REaXIsICdjb25maWcnLCAnbWFwcGluZy5qc29uJykpO1xuXG5jb25zdCBDRF9WRVIgPSBwcm9jZXNzLmVudi5ucG1fY29uZmlnX2Nocm9tZWRyaXZlcl92ZXJzaW9uXG4gIHx8IHByb2Nlc3MuZW52LkNIUk9NRURSSVZFUl9WRVJTSU9OXG4gIHx8IGdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIoKTtcbmNvbnN0IENEX0JBU0VfRElSID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2Nocm9tZWRyaXZlcicpO1xuY29uc3QgQ0RfQ0ROID0gcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19jaHJvbWVkcml2ZXJfY2RudXJsXG4gIHx8IHByb2Nlc3MuZW52LkNIUk9NRURSSVZFUl9DRE5VUkxcbiAgfHwgJ2h0dHBzOi8vY2hyb21lZHJpdmVyLnN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20nO1xuY29uc3QgT1MgPSB7XG4gIGxpbnV4OiAnbGludXgnLFxuICB3aW5kb3dzOiAnd2luJyxcbiAgbWFjOiAnbWFjJ1xufTtcbmNvbnN0IFg2NCA9ICc2NCc7XG5jb25zdCBYODYgPSAnMzInO1xuY29uc3QgTTFfQVJDSF9TVUZGSVggPSAnX20xJztcbmNvbnN0IENEX0VYRUNVVEFCTEVfUFJFRklYID0gJ2Nocm9tZWRyaXZlcic7XG5cblxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlciAobWFwcGluZyA9IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORykge1xuICBpZiAoXy5pc0VtcHR5KG1hcHBpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uIGZyb20gZW1wdHkgbWFwcGluZycpO1xuICB9XG4gIHJldHVybiBfLmxhc3QoXy5rZXlzKG1hcHBpbmcpLnNvcnQoY29tcGFyZVZlcnNpb25zKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZVZlcnNpb24gKGFkYiwgYnVuZGxlSWQpIHtcbiAgY29uc3Qge3ZlcnNpb25OYW1lfSA9IGF3YWl0IGFkYi5nZXRQYWNrYWdlSW5mbyhidW5kbGVJZCk7XG4gIHJldHVybiB2ZXJzaW9uTmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyRGlyIChvc05hbWUgPSBnZXRPc05hbWUoKSkge1xuICByZXR1cm4gcGF0aC5yZXNvbHZlKENEX0JBU0VfRElSLCBvc05hbWUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIChvc05hbWUgPSBnZXRPc05hbWUoKSkge1xuICBjb25zdCByb290RGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKG9zTmFtZSk7XG4gIGNvbnN0IHBhdGhTdWZmaXggPSBvc05hbWUgPT09IE9TLndpbmRvd3MgPyAnLmV4ZScgOiAnJztcbiAgY29uc3QgcGF0aHMgPSBhd2FpdCBmcy5nbG9iKGAke0NEX0VYRUNVVEFCTEVfUFJFRklYfSoke3BhdGhTdWZmaXh9YCwge1xuICAgIGN3ZDogcm9vdERpcixcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBub2Nhc2U6IHRydWUsXG4gICAgbm9kaXI6IHRydWUsXG4gICAgc3RyaWN0OiBmYWxzZSxcbiAgfSk7XG4gIHJldHVybiBfLmlzRW1wdHkocGF0aHMpXG4gICAgPyBwYXRoLnJlc29sdmUocm9vdERpciwgYCR7Q0RfRVhFQ1VUQUJMRV9QUkVGSVh9JHtwYXRoU3VmZml4fWApXG4gICAgOiBfLmZpcnN0KHBhdGhzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVEYXRhICh1cmwsIGhlYWRlcnMsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gICAgcmVzcG9uc2VUeXBlID0gJ3RleHQnLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgdXJsLFxuICAgIGhlYWRlcnMsXG4gICAgdGltZW91dCxcbiAgICByZXNwb25zZVR5cGUsXG4gIH0pKS5kYXRhO1xufVxuXG5jb25zdCBnZXRPc05hbWUgPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0T3NOYW1lICgpIHtcbiAgaWYgKHN5c3RlbS5pc1dpbmRvd3MoKSkge1xuICAgIHJldHVybiBPUy53aW5kb3dzO1xuICB9XG4gIGlmIChzeXN0ZW0uaXNNYWMoKSkge1xuICAgIHJldHVybiBPUy5tYWM7XG4gIH1cbiAgcmV0dXJuIE9TLmxpbnV4O1xufSk7XG5cbmNvbnN0IGdldE9zSW5mbyA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRPc0luZm8gKCkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGdldE9zTmFtZSgpLFxuICAgIGFyY2g6IGF3YWl0IHN5c3RlbS5hcmNoKCksXG4gICAgaGFyZHdhcmVOYW1lOiBzeXN0ZW0uaXNXaW5kb3dzKCkgPyBudWxsIDogXy50cmltKGF3YWl0IGV4ZWMoJ3VuYW1lJywgWyctbSddKSksXG4gIH07XG59KTtcblxuXG5leHBvcnQge1xuICBnZXRDaHJvbWVWZXJzaW9uLCBnZXRDaHJvbWVkcml2ZXJEaXIsIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgsIGdldE9zTmFtZSxcbiAgQ0RfQkFTRV9ESVIsIENEX0NETiwgQ0RfVkVSLCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIGdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIsXG4gIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLCBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLFxufTtcbiJdLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
package/config/mapping.json
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
{
|
|
2
|
+
"96.0.4664.45": "96.0.4664.45",
|
|
3
|
+
"95.0.4638.69": "95.0.4638.69",
|
|
4
|
+
"95.0.4638.54": "95.0.4638.54",
|
|
5
|
+
"94.0.4606.61": "94.0.4606.61",
|
|
6
|
+
"93.0.4577.63": "93.0.4577.63",
|
|
7
|
+
"93.0.4577.15": "93.0.4577.15",
|
|
8
|
+
"92.0.4515.107": "92.0.4515.107",
|
|
9
|
+
"92.0.4515.43": "92.0.4515.43",
|
|
10
|
+
"91.0.4472.101": "91.0.4472.101",
|
|
11
|
+
"91.0.4472.19": "91.0.4472.19",
|
|
12
|
+
"90.0.4430.24": "90.0.4430.24",
|
|
2
13
|
"89.0.4389.23": "89.0.4389.23",
|
|
3
14
|
"88.0.4324.96": "88.0.4324.96",
|
|
4
15
|
"87.0.4280.88": "87.0.4280.88",
|
package/lib/chromedriver.js
CHANGED
|
@@ -528,12 +528,16 @@ class Chromedriver extends events.EventEmitter {
|
|
|
528
528
|
}
|
|
529
529
|
|
|
530
530
|
let message = '';
|
|
531
|
-
// often the user's Chrome version is
|
|
531
|
+
// often the user's Chrome version is not supported by the version of Chromedriver
|
|
532
532
|
if (e.message.includes('Chrome version must be')) {
|
|
533
|
-
message += 'Unable to automate Chrome version because it is
|
|
533
|
+
message += 'Unable to automate Chrome version because it is not supported by this version of Chromedriver.\n';
|
|
534
534
|
if (webviewVersion) {
|
|
535
535
|
message += `Chrome version on the device: ${webviewVersion}\n`;
|
|
536
536
|
}
|
|
537
|
+
const versionsSupportedByDriver = /Chrome version must be (.+)/.exec(e.message)?.[1] || '';
|
|
538
|
+
if (versionsSupportedByDriver) {
|
|
539
|
+
message += `Chromedriver supports Chrome version(s): ${versionsSupportedByDriver}\n`;
|
|
540
|
+
}
|
|
537
541
|
message += `Visit '${CHROMEDRIVER_TUTORIAL}' to troubleshoot the problem.\n`;
|
|
538
542
|
}
|
|
539
543
|
|
package/lib/storage-client.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from './utils';
|
|
5
5
|
import _ from 'lodash';
|
|
6
6
|
import xpath from 'xpath';
|
|
7
|
-
import { DOMParser } from 'xmldom';
|
|
7
|
+
import { DOMParser } from '@xmldom/xmldom';
|
|
8
8
|
import B from 'bluebird';
|
|
9
9
|
import path from 'path';
|
|
10
10
|
import { system, fs, logger, tempDir, zip, util, net } from 'appium-support';
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"chrome",
|
|
7
7
|
"android"
|
|
8
8
|
],
|
|
9
|
-
"version": "4.
|
|
9
|
+
"version": "4.28.0",
|
|
10
10
|
"author": "appium",
|
|
11
11
|
"license": "Apache-2.0",
|
|
12
12
|
"repository": {
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@babel/runtime": "^7.0.0",
|
|
39
|
+
"@xmldom/xmldom": "^0.x",
|
|
39
40
|
"appium-base-driver": "^7.1.0",
|
|
40
41
|
"appium-support": "^2.46.0",
|
|
41
42
|
"asyncbox": "^2.0.2",
|
|
@@ -47,7 +48,6 @@
|
|
|
47
48
|
"semver": "^7.0.0",
|
|
48
49
|
"source-map-support": "^0.x",
|
|
49
50
|
"teen_process": "^1.15.0",
|
|
50
|
-
"xmldom": "^0.x",
|
|
51
51
|
"xpath": "^0.x"
|
|
52
52
|
},
|
|
53
53
|
"pre-commit": [
|
|
@@ -76,8 +76,8 @@
|
|
|
76
76
|
"chai-as-promised": "^7.1.1",
|
|
77
77
|
"eslint-config-appium": "^4.0.1",
|
|
78
78
|
"gulp": "^4.0.0",
|
|
79
|
-
"mocha": "^
|
|
79
|
+
"mocha": "^9.0.0",
|
|
80
80
|
"pre-commit": "^1.1.3",
|
|
81
|
-
"sinon": "^
|
|
81
|
+
"sinon": "^12.0.0"
|
|
82
82
|
}
|
|
83
83
|
}
|