appium-chromedriver 5.0.6 → 5.1.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 +9 -9
- package/build/lib/install.js +2 -2
- package/build/lib/protocol-helpers.js +3 -3
- package/build/lib/storage-client.js +2 -2
- package/build/lib/utils.js +4 -4
- package/config/mapping.json +1 -0
- package/lib/chromedriver.js +2 -2
- package/lib/install.js +1 -1
- package/lib/protocol-helpers.js +1 -1
- package/lib/storage-client.js +1 -1
- package/lib/utils.js +2 -2
- package/package.json +6 -4
|
@@ -11,11 +11,11 @@ require("source-map-support/register");
|
|
|
11
11
|
|
|
12
12
|
var _events = _interopRequireDefault(require("events"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _driver = require("appium/driver");
|
|
15
15
|
|
|
16
16
|
var _child_process = _interopRequireDefault(require("child_process"));
|
|
17
17
|
|
|
18
|
-
var _support = require("
|
|
18
|
+
var _support = require("appium/support");
|
|
19
19
|
|
|
20
20
|
var _asyncbox = require("asyncbox");
|
|
21
21
|
|
|
@@ -80,7 +80,7 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
80
80
|
this.bundleId = bundleId;
|
|
81
81
|
this.executableVerified = false;
|
|
82
82
|
this.state = Chromedriver.STATE_STOPPED;
|
|
83
|
-
this.jwproxy = new
|
|
83
|
+
this.jwproxy = new _driver.JWProxy({
|
|
84
84
|
server: this.proxyHost,
|
|
85
85
|
port: this.proxyPort,
|
|
86
86
|
log: this._log
|
|
@@ -93,7 +93,7 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
93
93
|
}) : null;
|
|
94
94
|
this.details = details;
|
|
95
95
|
this.capabilities = {};
|
|
96
|
-
this.desiredProtocol =
|
|
96
|
+
this.desiredProtocol = _driver.PROTOCOLS.MJSONWP;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
get log() {
|
|
@@ -454,18 +454,18 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
454
454
|
const coercedVersion = _semver.default.coerce(cdVersion);
|
|
455
455
|
|
|
456
456
|
if (!coercedVersion || coercedVersion.major < MIN_CD_VERSION_WITH_W3C_SUPPORT) {
|
|
457
|
-
this.log.debug(`Chromedriver v. ${cdVersion} does not fully support ${
|
|
457
|
+
this.log.debug(`Chromedriver v. ${cdVersion} does not fully support ${_driver.PROTOCOLS.W3C} protocol. ` + `Defaulting to ${_driver.PROTOCOLS.MJSONWP}`);
|
|
458
458
|
return;
|
|
459
459
|
}
|
|
460
460
|
|
|
461
461
|
const chromeOptions = (0, _protocolHelpers.getCapValue)(this.capabilities, 'chromeOptions', {});
|
|
462
462
|
|
|
463
463
|
if (chromeOptions.w3c === false) {
|
|
464
|
-
this.log.info(`Chromedriver v. ${cdVersion} supports ${
|
|
464
|
+
this.log.info(`Chromedriver v. ${cdVersion} supports ${_driver.PROTOCOLS.W3C} protocol, ` + `but ${_driver.PROTOCOLS.MJSONWP} one has been explicitly requested`);
|
|
465
465
|
return;
|
|
466
466
|
}
|
|
467
467
|
|
|
468
|
-
this.desiredProtocol =
|
|
468
|
+
this.desiredProtocol = _driver.PROTOCOLS.W3C;
|
|
469
469
|
this.capabilities = (0, _protocolHelpers.toW3cCapNames)(this.capabilities);
|
|
470
470
|
}
|
|
471
471
|
|
|
@@ -622,7 +622,7 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
622
622
|
}
|
|
623
623
|
|
|
624
624
|
async startSession() {
|
|
625
|
-
const sessionCaps = this.desiredProtocol ===
|
|
625
|
+
const sessionCaps = this.desiredProtocol === _driver.PROTOCOLS.W3C ? {
|
|
626
626
|
capabilities: {
|
|
627
627
|
alwaysMatch: this.capabilities
|
|
628
628
|
}
|
|
@@ -736,4 +736,4 @@ var _default = Chromedriver;
|
|
|
736
736
|
exports.default = _default;require('source-map-support').install();
|
|
737
737
|
|
|
738
738
|
|
|
739
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2Nocm9tZWRyaXZlci5qcyIsIm5hbWVzIjpbIk5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OIiwiREVGQVVMVF9IT1NUIiwiTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCIsIkRFRkFVTFRfUE9SVCIsIkNIUk9NRV9CVU5ETEVfSUQiLCJXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCIsIldFQlZJRVdfQlVORExFX0lEUyIsIkNIUk9NRURSSVZFUl9UVVRPUklBTCIsIlZFUlNJT05fUEFUVEVSTiIsIkNEX1ZFUlNJT05fVElNRU9VVCIsIkNocm9tZWRyaXZlciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImhvc3QiLCJwb3J0IiwidXNlU3lzdGVtRXhlY3V0YWJsZSIsImV4ZWN1dGFibGUiLCJleGVjdXRhYmxlRGlyIiwiYnVuZGxlSWQiLCJtYXBwaW5nUGF0aCIsImNtZEFyZ3MiLCJhZGIiLCJ2ZXJib3NlIiwibG9nUGF0aCIsImRpc2FibGVCdWlsZENoZWNrIiwiZGV0YWlscyIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIl9sb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJwcm94eUhvc3QiLCJwcm94eVBvcnQiLCJwcm9jIiwiY2hyb21lZHJpdmVyIiwiZXhlY3V0YWJsZVZlcmlmaWVkIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiandwcm94eSIsIkpXUHJveHkiLCJzZXJ2ZXIiLCJsb2ciLCJzdG9yYWdlQ2xpZW50IiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNocm9tZWRyaXZlckRpciIsImNhcGFiaWxpdGllcyIsImRlc2lyZWRQcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJnZXREcml2ZXJzTWFwcGluZyIsIm1hcHBpbmciLCJfIiwiY2xvbmVEZWVwIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwiZGVidWciLCJmcyIsImV4aXN0cyIsIndhcm4iLCJpbmZvIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGUiLCJlcnIiLCJtZXNzYWdlIiwiY2RWZXJzaW9uIiwiY2hyb21lVmVyc2lvbiIsInRvUGFpcnMiLCJjb2VyY2VkVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInZlcnNpb24iLCJnZXRDaHJvbWVkcml2ZXJzIiwiZXhlY3V0YWJsZXMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwibm9kaXIiLCJhYnNvbHV0ZSIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJjZHMiLCJsb2dFcnJvciIsInN0ZG91dCIsInN0ZGVyciIsImVyck1zZyIsInBhdGgiLCJiYXNlbmFtZSIsInRpbWVvdXQiLCJpbmNsdWRlcyIsIm1hdGNoIiwiZXhlYyIsIm1pbkNocm9tZVZlcnNpb24iLCJtYWpvciIsIm1pbm9yIiwiZmlsdGVyIiwiY2QiLCJzb3J0IiwiYSIsImIiLCJpc0VtcHR5IiwiZ2V0Q2hyb21lVmVyc2lvbiIsIkJyb3dzZXIiLCJ2ZXJzaW9uTWF0Y2giLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwidXBkYXRlRHJpdmVyc01hcHBpbmciLCJuZXdNYXBwaW5nIiwic2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyIsIndyaXRlRmlsZSIsInN0cmluZ2lmeSIsImUiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyIiwidmFsdWVzIiwiZGlkU3RvcmFnZVN5bmMiLCJzeW5jQ2hyb21lZHJpdmVycyIsInJldHJpZXZlZE1hcHBpbmciLCJyZXRyaWV2ZU1hcHBpbmciLCJkcml2ZXJLZXlzIiwic3luY0RyaXZlcnMiLCJtaW5Ccm93c2VyVmVyc2lvbiIsInN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nIiwicmVkdWNlIiwiYWNjIiwieCIsIm1pc3NpbmdWZXJzaW9ucyIsImNvZXJjZWRWZXIiLCJzaXplIiwiZXJyb3JBbmRUaHJvdyIsIm1hdGNoaW5nRHJpdmVycyIsIm1pbkNocm9tZVZlcnNpb25TIiwiZ3RlIiwiQ0RfQ0ROIiwic3RhY2siLCJhdXRvZG93bmxvYWRTdWdnZXN0aW9uIiwiRXJyb3IiLCJiaW5QYXRoIiwiaW5pdENocm9tZWRyaXZlclBhdGgiLCJzeW5jUHJvdG9jb2wiLCJXM0MiLCJjaHJvbWVPcHRpb25zIiwidzNjIiwic3RhcnQiLCJjYXBzIiwiZW1pdFN0YXJ0aW5nU3RhdGUiLCJsb2dnaW5nUHJlZnMiLCJicm93c2VyIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImFkYlBvcnQiLCJwdXNoIiwiaXNBcnJheSIsInN0YXJ0RGV0ZWN0b3IiLCJzdGFydHNXaXRoIiwicHJvY2Vzc0lzQWxpdmUiLCJ3ZWJ2aWV3VmVyc2lvbiIsImtpbGxBbGwiLCJTdWJQcm9jZXNzIiwib24iLCJvdXQiLCJsaW5lIiwidHJpbSIsInNwbGl0IiwiZXJyb3IiLCJjb2RlIiwic2lnbmFsIiwiU1RBVEVfU1RPUFBJTkciLCJTVEFURV9SRVNUQVJUSU5HIiwibXNnIiwiam9pbiIsIndhaXRGb3JPbmxpbmUiLCJzdGFydFNlc3Npb24iLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwidmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciIsInNlc3Npb25JZCIsIlNUQVRFX09OTElORSIsInJlc3RhcnQiLCJjaHJvbWVkcml2ZXJTdG9wcGVkIiwiZ2V0U3RhdHVzIiwiY29tbWFuZCIsInNlc3Npb25DYXBzIiwiYWx3YXlzTWF0Y2giLCJkZXNpcmVkQ2FwYWJpbGl0aWVzIiwicHJlZml4IiwiZW1pdFN0YXRlcyIsInJ1blNhZmVTdGVwIiwiZiIsIkVWRU5UX0NIQU5HRUQiLCJzZW5kQ29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJwcm94eVJlcSIsInJlcSIsInJlcyIsInByb3h5UmVxUmVzIiwiY21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiQiIsInByb21pc2lmeSIsImNwIiwidWRpZEluZGV4IiwiZGVmYXVsdEFyZ3MiLCJmaW5kSW5kZXgiLCJpdGVtIiwidWRpZCIsImNvbm4iLCJnZXRGb3J3YXJkTGlzdCIsInBhcmFtcyIsInJlbW92ZVBvcnRGb3J3YXJkIiwicmVwbGFjZSIsImhhc1dvcmtpbmdXZWJ2aWV3Il0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2Nocm9tZWRyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBKV1Byb3h5LCBQUk9UT0NPTFMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBjcCBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN5c3RlbSwgZnMsIGxvZ2dlciwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCBhc3luY21hcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtcbiAgZ2V0Q2hyb21lVmVyc2lvbiwgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsXG4gIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgsIENEX0NETiwgZ2VuZXJhdGVMb2dQcmVmaXhcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY29tcGFyZVZlcnNpb25zIGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuaW1wb3J0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgZnJvbSAnLi9zdG9yYWdlLWNsaWVudCc7XG5pbXBvcnQgeyB0b1czY0NhcE5hbWVzLCBnZXRDYXBWYWx1ZSB9IGZyb20gJy4vcHJvdG9jb2wtaGVscGVycyc7XG5cbmNvbnN0IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OID0gNzM7XG5jb25zdCBERUZBVUxUX0hPU1QgPSAnMTI3LjAuMC4xJztcbmNvbnN0IE1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQgPSA3NTtcbmNvbnN0IERFRkFVTFRfUE9SVCA9IDk1MTU7XG5jb25zdCBDSFJPTUVfQlVORExFX0lEID0gJ2NvbS5hbmRyb2lkLmNocm9tZSc7XG5jb25zdCBXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCA9ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCc7XG5jb25zdCBXRUJWSUVXX0JVTkRMRV9JRFMgPSBbXG4gICdjb20uZ29vZ2xlLmFuZHJvaWQud2VidmlldycsXG4gICdjb20uYW5kcm9pZC53ZWJ2aWV3Jyxcbl07XG5jb25zdCBDSFJPTUVEUklWRVJfVFVUT1JJQUwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3dlYi9jaHJvbWVkcml2ZXIubWQnO1xuY29uc3QgVkVSU0lPTl9QQVRURVJOID0gLyhbXFxkLl0rKS87XG5cbmNvbnN0IENEX1ZFUlNJT05fVElNRU9VVCA9IDUwMDA7XG5cbmNsYXNzIENocm9tZWRyaXZlciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoYXJncyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGhvc3QgPSBERUZBVUxUX0hPU1QsXG4gICAgICBwb3J0ID0gREVGQVVMVF9QT1JULFxuICAgICAgdXNlU3lzdGVtRXhlY3V0YWJsZSA9IGZhbHNlLFxuICAgICAgZXhlY3V0YWJsZSxcbiAgICAgIGV4ZWN1dGFibGVEaXIgPSBnZXRDaHJvbWVkcml2ZXJEaXIoKSxcbiAgICAgIGJ1bmRsZUlkLFxuICAgICAgbWFwcGluZ1BhdGgsXG4gICAgICBjbWRBcmdzLFxuICAgICAgYWRiLFxuICAgICAgdmVyYm9zZSxcbiAgICAgIGxvZ1BhdGgsXG4gICAgICBkaXNhYmxlQnVpbGRDaGVjayxcbiAgICAgIGRldGFpbHMsXG4gICAgICBpc0F1dG9kb3dubG9hZEVuYWJsZWQgPSBmYWxzZSxcbiAgICB9ID0gYXJncztcbiAgICB0aGlzLl9sb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKGdlbmVyYXRlTG9nUHJlZml4KHRoaXMpKTtcblxuICAgIHRoaXMucHJveHlIb3N0ID0gaG9zdDtcbiAgICB0aGlzLnByb3h5UG9ydCA9IHBvcnQ7XG4gICAgdGhpcy5hZGIgPSBhZGI7XG4gICAgdGhpcy5jbWRBcmdzID0gY21kQXJncztcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgIHRoaXMudXNlU3lzdGVtRXhlY3V0YWJsZSA9IHVzZVN5c3RlbUV4ZWN1dGFibGU7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBleGVjdXRhYmxlO1xuICAgIHRoaXMuZXhlY3V0YWJsZURpciA9IGV4ZWN1dGFibGVEaXI7XG4gICAgdGhpcy5tYXBwaW5nUGF0aCA9IG1hcHBpbmdQYXRoO1xuICAgIHRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDtcbiAgICB0aGlzLmV4ZWN1dGFibGVWZXJpZmllZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhdGUgPSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRDtcbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgSldQcm94eSh7XG4gICAgICBzZXJ2ZXI6IHRoaXMucHJveHlIb3N0LFxuICAgICAgcG9ydDogdGhpcy5wcm94eVBvcnQsXG4gICAgICBsb2c6IHRoaXMuX2xvZyxcbiAgICB9KTtcbiAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlO1xuICAgIHRoaXMubG9nUGF0aCA9IGxvZ1BhdGg7XG4gICAgdGhpcy5kaXNhYmxlQnVpbGRDaGVjayA9ICEhZGlzYWJsZUJ1aWxkQ2hlY2s7XG4gICAgdGhpcy5zdG9yYWdlQ2xpZW50ID0gaXNBdXRvZG93bmxvYWRFbmFibGVkXG4gICAgICA/IG5ldyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50KHsgY2hyb21lZHJpdmVyRGlyOiB0aGlzLmV4ZWN1dGFibGVEaXIgfSlcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0ge307XG4gICAgdGhpcy5kZXNpcmVkUHJvdG9jb2wgPSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIGdldCBsb2cgKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2c7XG4gIH1cblxuICBhc3luYyBnZXREcml2ZXJzTWFwcGluZyAoKSB7XG4gICAgbGV0IG1hcHBpbmcgPSBfLmNsb25lRGVlcChDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcpO1xuICAgIGlmICh0aGlzLm1hcHBpbmdQYXRoKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQXR0ZW1wdGluZyB0byB1c2UgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZyBmcm9tICcke3RoaXMubWFwcGluZ1BhdGh9J2ApO1xuICAgICAgaWYgKCFhd2FpdCBmcy5leGlzdHModGhpcy5tYXBwaW5nUGF0aCkpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgTm8gZmlsZSBmb3VuZCBhdCAnJHt0aGlzLm1hcHBpbmdQYXRofSdgKTtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnRGVmYXVsdGluZyB0byB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWFwcGluZyA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUodGhpcy5tYXBwaW5nUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIHBhcnNpbmcgbWFwcGluZyBmcm9tICcke3RoaXMubWFwcGluZ1BhdGh9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKCdEZWZhdWx0aW5nIHRvIHRoZSBzdGF0aWMgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdVc2luZyB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWVzIGZvciBtaW5pbXVtIGNocm9tZSB2ZXJzaW9uIGFyZSBzZW12ZXIgY29tcGxpYW50XG4gICAgZm9yIChjb25zdCBbY2RWZXJzaW9uLCBjaHJvbWVWZXJzaW9uXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShjaHJvbWVWZXJzaW9uKTtcbiAgICAgIGlmIChjb2VyY2VkVmVyc2lvbikge1xuICAgICAgICBtYXBwaW5nW2NkVmVyc2lvbl0gPSBjb2VyY2VkVmVyc2lvbi52ZXJzaW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgJyR7Y2hyb21lVmVyc2lvbn0nIGlzIG5vdCBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBTa2lwcGluZyBpdGApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwcGluZztcbiAgfVxuXG4gIGFzeW5jIGdldENocm9tZWRyaXZlcnMgKG1hcHBpbmcpIHtcbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB2ZXJzaW9ucyBhdmFpbGFibGVcbiAgICBjb25zdCBleGVjdXRhYmxlcyA9IGF3YWl0IGZzLmdsb2IoJyonLCB7XG4gICAgICBjd2Q6IHRoaXMuZXhlY3V0YWJsZURpcixcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgICBub2RpcjogdHJ1ZSxcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdleGVjdXRhYmxlJywgZXhlY3V0YWJsZXMubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgICBgaW4gJyR7dGhpcy5leGVjdXRhYmxlRGlyfSdgKTtcbiAgICBjb25zdCBjZHMgPSAoYXdhaXQgYXN5bmNtYXAoZXhlY3V0YWJsZXMsIGFzeW5jIChleGVjdXRhYmxlKSA9PiB7XG4gICAgICBjb25zdCBsb2dFcnJvciA9ICh7bWVzc2FnZSwgc3Rkb3V0ID0gbnVsbCwgc3RkZXJyID0gbnVsbH0pID0+IHtcbiAgICAgICAgbGV0IGVyck1zZyA9IGBDYW5ub3QgcmV0cmlldmUgdmVyc2lvbiBudW1iZXIgZnJvbSAnJHtwYXRoLmJhc2VuYW1lKGV4ZWN1dGFibGUpfScgQ2hyb21lZHJpdmVyIGJpbmFyeS4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSBpdCByZXR1cm5zIGEgdmFsaWQgdmVyc2lvbiBzdHJpbmcgaW4gcmVzcG9uc2UgdG8gJy0tdmVyc2lvbicgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAke21lc3NhZ2V9YDtcbiAgICAgICAgaWYgKHN0ZG91dCkge1xuICAgICAgICAgIGVyck1zZyArPSBgXFxuU3Rkb3V0OiAke3N0ZG91dH1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICBlcnJNc2cgKz0gYFxcblN0ZGVycjogJHtzdGRlcnJ9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZy53YXJuKGVyck1zZyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcblxuICAgICAgbGV0IHN0ZG91dDtcbiAgICAgIGxldCBzdGRlcnI7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IGV4ZWMoZXhlY3V0YWJsZSwgWyctLXZlcnNpb24nXSwge1xuICAgICAgICAgIHRpbWVvdXQ6IENEX1ZFUlNJT05fVElNRU9VVCxcbiAgICAgICAgfSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghKGVyci5tZXNzYWdlIHx8ICcnKS5pbmNsdWRlcygndGltZWQgb3V0JykgJiYgIShlcnIuc3Rkb3V0IHx8ICcnKS5pbmNsdWRlcygnU3RhcnRpbmcgQ2hyb21lRHJpdmVyJykpIHtcbiAgICAgICAgICByZXR1cm4gbG9nRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoaXMgaGFzIHRpbWVkIG91dCwgaXQgaGFzIGFjdHVhbGx5IHN0YXJ0ZWQgQ2hyb21lZHJpdmVyLFxuICAgICAgICAvLyBpbiB3aGljaCBjYXNlIHRoZXJlIHdpbGwgYWxzbyBiZSB0aGUgdmVyc2lvbiBzdHJpbmcgaW4gdGhlIG91dHB1dFxuICAgICAgICBzdGRvdXQgPSBlcnIuc3Rkb3V0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXRjaCA9IC9DaHJvbWVEcml2ZXJcXHMrXFwoP3Y/KFtcXGQuXSspXFwpPy9pLmV4ZWMoc3Rkb3V0KTsgLy8gaHR0cHM6Ly9yZWdleDEwMS5jb20vci96cGo1d0EvMVxuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe21lc3NhZ2U6ICdDYW5ub3QgcGFyc2UgdGhlIHZlcnNpb24gc3RyaW5nJywgc3Rkb3V0LCBzdGRlcnJ9KTtcbiAgICAgIH1cbiAgICAgIGxldCB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gICAgICBsZXQgbWluQ2hyb21lVmVyc2lvbiA9IG1hcHBpbmdbdmVyc2lvbl07XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UodmVyc2lvbik7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgLy8gYmVmb3JlIDIwMTktMDMtMDYgdmVyc2lvbnMgd2VyZSBvZiB0aGUgZm9ybSBtYWpvci5taW5vclxuICAgICAgICBpZiAoY29lcmNlZFZlcnNpb24ubWFqb3IgPCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIHZlcnNpb24gPSBgJHtjb2VyY2VkVmVyc2lvbi5tYWpvcn0uJHtjb2VyY2VkVmVyc2lvbi5taW5vcn1gO1xuICAgICAgICAgIG1pbkNocm9tZVZlcnNpb24gPSBtYXBwaW5nW3ZlcnNpb25dO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvbiAmJiBjb2VyY2VkVmVyc2lvbi5tYWpvciA+PSBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIC8vIEFzc3VtZSB0aGUgbWFqb3IgQ2hyb21lIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1ham9yIHZlcnNpb25cbiAgICAgICAgICBtaW5DaHJvbWVWZXJzaW9uID0gYCR7Y29lcmNlZFZlcnNpb24ubWFqb3J9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhlY3V0YWJsZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgbWluQ2hyb21lVmVyc2lvbixcbiAgICAgIH07XG4gICAgfSkpXG4gICAgICAuZmlsdGVyKChjZCkgPT4gISFjZClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBjb21wYXJlVmVyc2lvbnMoYi52ZXJzaW9uLCBhLnZlcnNpb24pKTtcbiAgICBpZiAoXy5pc0VtcHR5KGNkcykpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYE5vIENocm9tZWRyaXZlcnMgd2VyZSBmb3VuZCBpbiAnJHt0aGlzLmV4ZWN1dGFibGVEaXJ9J2ApO1xuICAgICAgcmV0dXJuIGNkcztcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBmb2xsb3dpbmcgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGVzIHdlcmUgZm91bmQ6YCk7XG4gICAgZm9yIChjb25zdCBjZCBvZiBjZHMpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGAgICAgJyR7Y2QuZXhlY3V0YWJsZX0nICh2ZXJzaW9uICcke2NkLnZlcnNpb259JywgbWluaW11bSBDaHJvbWUgdmVyc2lvbiAnJHtjZC5taW5DaHJvbWVWZXJzaW9uID8gY2QubWluQ2hyb21lVmVyc2lvbiA6ICdVbmtub3duJ30nKWApO1xuICAgIH1cbiAgICByZXR1cm4gY2RzO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2hyb21lVmVyc2lvbiAoKSB7XG4gICAgLy8gVHJ5IHRvIHJldHJpZXZlIHRoZSB2ZXJzaW9uIGZyb20gYGRldGFpbHNgIHByb3BlcnR5IGlmIGl0IGlzIHNldFxuICAgIC8vIFRoZSBgaW5mb2AgaXRlbSBtdXN0IGNvbnRhaW4gdGhlIG91dHB1dCBvZiAvanNvbi92ZXJzaW9uIENEUCBjb21tYW5kXG4gICAgLy8gd2hlcmUgYEJyb3dzZXJgIGZpZWxkIGxvb2tzIGxpa2UgYENocm9tZS83Mi4wLjM2MDEuMGBgXG4gICAgaWYgKHRoaXMuZGV0YWlscz8uaW5mbykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEJyb3dzZXIgdmVyc2lvbiBpbiB0aGUgc3VwcGxpZWQgZGV0YWlsczogJHt0aGlzLmRldGFpbHM/LmluZm8/LkJyb3dzZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IFZFUlNJT05fUEFUVEVSTi5leGVjKHRoaXMuZGV0YWlscz8uaW5mbz8uQnJvd3Nlcik7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKHZlcnNpb25NYXRjaFsxXSk7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGNvZXJjZWRWZXJzaW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjaHJvbWVWZXJzaW9uO1xuXG4gICAgLy8gaW4gY2FzZSBvZiBXZWJWaWV3IEJyb3dzZXIgVGVzdGVyLCBzaW1wbHkgdHJ5IHRvIGZpbmQgdGhlIHVuZGVybHlpbmcgd2Vidmlld1xuICAgIGlmICh0aGlzLmJ1bmRsZUlkID09PSBXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCkge1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBXRUJWSUVXX0JVTkRMRV9JRFMpIHtcbiAgICAgICAgY2hyb21lVmVyc2lvbiA9IGF3YWl0IGdldENocm9tZVZlcnNpb24odGhpcy5hZGIsIGJ1bmRsZUlkKTtcbiAgICAgICAgaWYgKGNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgICAgICAgcmV0dXJuIHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIG9uIEFuZHJvaWQgNy05IHdlYnZpZXdzIGFyZSBiYWNrZWQgYnkgdGhlIG1haW4gQ2hyb21lLCBub3QgdGhlIHN5c3RlbSB3ZWJ2aWV3XG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gICAgICBpZiAoYXBpTGV2ZWwgPj0gMjQgJiYgYXBpTGV2ZWwgPD0gMjggJiZcbiAgICAgICAgICBbV0VCVklFV19TSEVMTF9CVU5ETEVfSUQsIC4uLldFQlZJRVdfQlVORExFX0lEU10uaW5jbHVkZXModGhpcy5idW5kbGVJZCkpIHtcbiAgICAgICAgdGhpcy5idW5kbGVJZCA9IENIUk9NRV9CVU5ETEVfSUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHJ5IG91dCB3ZWJ2aWV3cyB3aGVuIG5vIGJ1bmRsZSBpZCBpcyBzZW50IGluXG4gICAgaWYgKCF0aGlzLmJ1bmRsZUlkKSB7XG4gICAgICAvLyBkZWZhdWx0IHRvIHRoZSBnZW5lcmljIENocm9tZSBidW5kbGVcbiAgICAgIHRoaXMuYnVuZGxlSWQgPSBDSFJPTUVfQlVORExFX0lEO1xuXG4gICAgICAvLyB3ZSBoYXZlIGEgd2VidmlldyBvZiBzb21lIHNvcnQsIHNvIHRyeSB0byBmaW5kIHRoZSBidW5kbGUgdmVyc2lvblxuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBXRUJWSUVXX0JVTkRMRV9JRFMpIHtcbiAgICAgICAgY2hyb21lVmVyc2lvbiA9IGF3YWl0IGdldENocm9tZVZlcnNpb24odGhpcy5hZGIsIGJ1bmRsZUlkKTtcbiAgICAgICAgaWYgKGNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBkbyBub3QgaGF2ZSBhIGNocm9tZSB2ZXJzaW9uLCBpdCBtdXN0IG5vdCBiZSBhIHdlYnZpZXdcbiAgICBpZiAoIWNocm9tZVZlcnNpb24pIHtcbiAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCB0aGlzLmJ1bmRsZUlkKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgaXQgaXMgc2VtdmVyLCBzbyBsYXRlciBjaGVja3Mgd29uJ3QgZmFpbFxuICAgIHJldHVybiBjaHJvbWVWZXJzaW9uID8gc2VtdmVyLmNvZXJjZShjaHJvbWVWZXJzaW9uKSA6IG51bGw7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEcml2ZXJzTWFwcGluZyAobmV3TWFwcGluZykge1xuICAgIGxldCBzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nID0gdHJ1ZTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRoaXMubWFwcGluZ1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGhpcy5tYXBwaW5nUGF0aCwgSlNPTi5zdHJpbmdpZnkobmV3TWFwcGluZywgbnVsbCwgMiksICd1dGY4Jyk7XG4gICAgICAgIHNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmcgPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHN0b3JlIHRoZSB1cGRhdGVkIGNocm9tZWRyaXZlcnMgbWFwcGluZyBpbnRvICcke3RoaXMubWFwcGluZ1BhdGh9Jy4gYCArXG4gICAgICAgICAgYFRoaXMgbWF5IHJlZHVjZSB0aGUgcGVyZm9ybWFuY2Ugb2YgZnVydGhlciBleGVjdXRpb25zLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nKSB7XG4gICAgICBPYmplY3QuYXNzaWduKENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORywgbmV3TWFwcGluZyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q29tcGF0aWJsZUNocm9tZWRyaXZlciAoKSB7XG4gICAgaWYgKCF0aGlzLmFkYikge1xuICAgICAgcmV0dXJuIGF3YWl0IGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgoKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXBwaW5nID0gYXdhaXQgdGhpcy5nZXREcml2ZXJzTWFwcGluZygpO1xuICAgIGlmICghXy5pc0VtcHR5KG1hcHBpbmcpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIG1vc3QgcmVjZW50IGtub3duIENocm9tZSB2ZXJzaW9uOiAke18udmFsdWVzKG1hcHBpbmcpWzBdfWApO1xuICAgIH1cblxuICAgIGxldCBkaWRTdG9yYWdlU3luYyA9IGZhbHNlO1xuICAgIGNvbnN0IHN5bmNDaHJvbWVkcml2ZXJzID0gYXN5bmMgKGNocm9tZVZlcnNpb24pID0+IHtcbiAgICAgIGRpZFN0b3JhZ2VTeW5jID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJldHJpZXZlZE1hcHBpbmcgPSBhd2FpdCB0aGlzLnN0b3JhZ2VDbGllbnQucmV0cmlldmVNYXBwaW5nKCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnR290IGNocm9tZWRyaXZlcnMgbWFwcGluZyBmcm9tIHRoZSBzdG9yYWdlOiAnICtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocmV0cmlldmVkTWFwcGluZywgbnVsbCwgMikpO1xuICAgICAgY29uc3QgZHJpdmVyS2V5cyA9IGF3YWl0IHRoaXMuc3RvcmFnZUNsaWVudC5zeW5jRHJpdmVycyh7XG4gICAgICAgIG1pbkJyb3dzZXJWZXJzaW9uOiBjaHJvbWVWZXJzaW9uLm1ham9yLFxuICAgICAgfSk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcktleXMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nID0gZHJpdmVyS2V5cy5yZWR1Y2UoKGFjYywgeCkgPT4ge1xuICAgICAgICBjb25zdCB7dmVyc2lvbiwgbWluQnJvd3NlclZlcnNpb259ID0gcmV0cmlldmVkTWFwcGluZ1t4XTtcbiAgICAgICAgYWNjW3ZlcnNpb25dID0gbWluQnJvd3NlclZlcnNpb247XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gICAgICBPYmplY3QuYXNzaWduKG1hcHBpbmcsIHN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlRHJpdmVyc01hcHBpbmcobWFwcGluZyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgY2RzID0gYXdhaXQgdGhpcy5nZXRDaHJvbWVkcml2ZXJzKG1hcHBpbmcpO1xuXG4gICAgICBjb25zdCBtaXNzaW5nVmVyc2lvbnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qge3ZlcnNpb24sIG1pbkNocm9tZVZlcnNpb259IG9mIGNkcykge1xuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb24gfHwgbWFwcGluZ1t2ZXJzaW9uXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZXJjZWRWZXIgPSBzZW12ZXIuY29lcmNlKHZlcnNpb24pO1xuICAgICAgICBpZiAoIWNvZXJjZWRWZXIgfHwgY29lcmNlZFZlci5tYWpvciA8IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBtaXNzaW5nVmVyc2lvbnNbdmVyc2lvbl0gPSBtaW5DaHJvbWVWZXJzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzRW1wdHkobWlzc2luZ1ZlcnNpb25zKSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdDaHJvbWVkcml2ZXInLCBfLnNpemUobWlzc2luZ1ZlcnNpb25zKSwgdHJ1ZSl9LCBgICtcbiAgICAgICAgICBgd2hpY2ggJHtfLnNpemUobWlzc2luZ1ZlcnNpb25zKSA9PT0gMSA/ICdpcycgOiAnYXJlJ30gbWlzc2luZyBpbiB0aGUgbGlzdCBvZiBrbm93biB2ZXJzaW9uczogYCArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWlzc2luZ1ZlcnNpb25zKSk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRHJpdmVyc01hcHBpbmcoT2JqZWN0LmFzc2lnbihtYXBwaW5nLCBtaXNzaW5nVmVyc2lvbnMpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2spIHtcbiAgICAgICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGUgYXZhaWxhYmxlIGZvciB1c2UgaWYgYCArXG4gICAgICAgICAgICBgJ2Nocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrJyBjYXBhYmlsaXR5IGlzIHNldCB0byAndHJ1ZSdgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7dmVyc2lvbiwgZXhlY3V0YWJsZX0gPSBjZHNbMF07XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENocm9tZSBidWlsZCBjaGVjayBkaXNhYmxlZC4gVXNpbmcgbW9zdCByZWNlbnQgQ2hyb21lZHJpdmVyIHZlcnNpb24gKCR7dmVyc2lvbn0sIGF0ICcke2V4ZWN1dGFibGV9JylgKTtcbiAgICAgICAgdGhpcy5sb2cud2FybihgSWYgdGhpcyBpcyB3cm9uZywgc2V0ICdjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjaycgY2FwYWJpbGl0eSB0byAnZmFsc2UnYCk7XG4gICAgICAgIHJldHVybiBleGVjdXRhYmxlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaHJvbWVWZXJzaW9uID0gYXdhaXQgdGhpcy5nZXRDaHJvbWVWZXJzaW9uKCk7XG4gICAgICBpZiAoIWNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgLy8gdW5hYmxlIHRvIGdldCB0aGUgY2hyb21lIHZlcnNpb25cbiAgICAgICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGUgYXZhaWxhYmxlIGZvciB1c2UgaWYgYCArXG4gICAgICAgICAgICBgdGhlIGN1cnJlbnQgQ2hyb21lIHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7dmVyc2lvbiwgZXhlY3V0YWJsZX0gPSBjZHNbMF07XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBkaXNjb3ZlciBDaHJvbWUgdmVyc2lvbi4gVXNpbmcgQ2hyb21lZHJpdmVyICR7dmVyc2lvbn0gYXQgJyR7ZXhlY3V0YWJsZX0nYCk7XG4gICAgICAgIHJldHVybiBleGVjdXRhYmxlO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kIENocm9tZSBidW5kbGUgJyR7dGhpcy5idW5kbGVJZH0nIHZlcnNpb24gJyR7Y2hyb21lVmVyc2lvbn0nYCk7XG5cbiAgICAgIGNvbnN0IG1hdGNoaW5nRHJpdmVycyA9IGNkcy5maWx0ZXIoKHttaW5DaHJvbWVWZXJzaW9ufSkgPT4ge1xuICAgICAgICBjb25zdCBtaW5DaHJvbWVWZXJzaW9uUyA9IG1pbkNocm9tZVZlcnNpb24gJiYgc2VtdmVyLmNvZXJjZShtaW5DaHJvbWVWZXJzaW9uKTtcbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uUykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaHJvbWVWZXJzaW9uLm1ham9yID4gTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT05cbiAgICAgICAgICA/IG1pbkNocm9tZVZlcnNpb25TLm1ham9yID09PSBjaHJvbWVWZXJzaW9uLm1ham9yXG4gICAgICAgICAgOiBzZW12ZXIuZ3RlKGNocm9tZVZlcnNpb24sIG1pbkNocm9tZVZlcnNpb25TKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKF8uaXNFbXB0eShtYXRjaGluZ0RyaXZlcnMpKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3JhZ2VDbGllbnQgJiYgIWRpZFN0b3JhZ2VTeW5jKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBzeW5jQ2hyb21lZHJpdmVycyhjaHJvbWVWZXJzaW9uKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3Qgc3luY2hyb25pemUgbG9jYWwgY2hyb21lZHJpdmVycyB3aXRoIHRoZSByZW1vdGUgc3RvcmFnZSBhdCAke0NEX0NETn06IGAgK1xuICAgICAgICAgICAgICBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF1dG9kb3dubG9hZFN1Z2dlc3Rpb24gPVxuICAgICAgICAgICdZb3UgY291bGQgYWxzbyB0cnkgdG8gZW5hYmxlIGF1dG9tYXRlZCBjaHJvbWVkcml2ZXJzIGRvd25sb2FkIHNlcnZlciBmZWF0dXJlJztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBDaHJvbWVkcml2ZXIgZm91bmQgdGhhdCBjYW4gYXV0b21hdGUgQ2hyb21lICcke2Nocm9tZVZlcnNpb259Jy4gYCArXG4gICAgICAgICAgKCF0aGlzLnN0b3JhZ2VDbGllbnQgPyBgJHthdXRvZG93bmxvYWRTdWdnZXN0aW9ufS4gYCA6ICcnKSArXG4gICAgICAgICAgYFNlZSAke0NIUk9NRURSSVZFUl9UVVRPUklBTH0gZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiaW5QYXRoID0gbWF0Y2hpbmdEcml2ZXJzWzBdLmV4ZWN1dGFibGU7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIG1hdGNoaW5nRHJpdmVycy5sZW5ndGgsIHRydWUpfSBgICtcbiAgICAgICAgYGNhcGFibGUgb2YgYXV0b21hdGluZyBDaHJvbWUgJyR7Y2hyb21lVmVyc2lvbn0nLlxcbkNob29zaW5nIHRoZSBtb3N0IHJlY2VudCwgJyR7YmluUGF0aH0nLmApO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0lmIGEgc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1aXJlZCwgc3BlY2lmeSBpdCB3aXRoIHRoZSBgY2hyb21lZHJpdmVyRXhlY3V0YWJsZWAnICtcbiAgICAgICAgJ2Rlc2lyZWQgY2FwYWJpbGl0eS4nKTtcbiAgICAgIHJldHVybiBiaW5QYXRoO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICB9IHdoaWxlICh0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRDaHJvbWVkcml2ZXJQYXRoICgpIHtcbiAgICBpZiAodGhpcy5leGVjdXRhYmxlVmVyaWZpZWQpIHJldHVybjsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICAvLyB0aGUgZXhlY3V0YWJsZSBtaWdodCBiZSBzZXQgKGlmIHBhc3NlZCBpbilcbiAgICAvLyBvciB3ZSBtaWdodCB3YW50IHRvIHVzZSB0aGUgYmFzaWMgb25lIGluc3RhbGxlZCB3aXRoIHRoaXMgZHJpdmVyXG4gICAgLy8gb3Igd2Ugd2FudCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZVxuICAgIGlmICghdGhpcy5jaHJvbWVkcml2ZXIpIHtcbiAgICAgIHRoaXMuY2hyb21lZHJpdmVyID0gdGhpcy51c2VTeXN0ZW1FeGVjdXRhYmxlXG4gICAgICAgID8gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCgpXG4gICAgICAgIDogYXdhaXQgdGhpcy5nZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHModGhpcy5jaHJvbWVkcml2ZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgYSBjaHJvbWVkcml2ZXIgYmluYXJ5IGF0IHRoZSBwYXRoIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY2hyb21lZHJpdmVyfSwgYnV0IGl0IGRvZXNuJ3QgZXhpc3QhYCk7XG4gICAgfVxuICAgIHRoaXMuZXhlY3V0YWJsZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB0aGlzLmxvZy5pbmZvKGBTZXQgY2hyb21lZHJpdmVyIGJpbmFyeSBhczogJHt0aGlzLmNocm9tZWRyaXZlcn1gKTtcbiAgfVxuXG4gIHN5bmNQcm90b2NvbCAoY2RWZXJzaW9uID0gbnVsbCkge1xuICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShjZFZlcnNpb24pO1xuICAgIGlmICghY29lcmNlZFZlcnNpb24gfHwgY29lcmNlZFZlcnNpb24ubWFqb3IgPCBNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hyb21lZHJpdmVyIHYuICR7Y2RWZXJzaW9ufSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0ICR7UFJPVE9DT0xTLlczQ30gcHJvdG9jb2wuIGAgK1xuICAgICAgICBgRGVmYXVsdGluZyB0byAke1BST1RPQ09MUy5NSlNPTldQfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaHJvbWVPcHRpb25zID0gZ2V0Q2FwVmFsdWUodGhpcy5jYXBhYmlsaXRpZXMsICdjaHJvbWVPcHRpb25zJywge30pO1xuICAgIGlmIChjaHJvbWVPcHRpb25zLnczYyA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYENocm9tZWRyaXZlciB2LiAke2NkVmVyc2lvbn0gc3VwcG9ydHMgJHtQUk9UT0NPTFMuVzNDfSBwcm90b2NvbCwgYCArXG4gICAgICAgIGBidXQgJHtQUk9UT0NPTFMuTUpTT05XUH0gb25lIGhhcyBiZWVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLlczQztcbiAgICAvLyBnaXZlbiBjYXBzIG1pZ2h0IG5vdCBiZSBwcm9wZXJseSBwcmVmaXhlZFxuICAgIC8vIHNvIHdlIHRyeSB0byBmaXggdGhlbSBpbiBvcmRlciB0byBwcm9wZXJseSBpbml0XG4gICAgLy8gdGhlIG5ldyBXM0Mgc2Vzc2lvblxuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdG9XM2NDYXBOYW1lcyh0aGlzLmNhcGFiaWxpdGllcyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2FwcywgZW1pdFN0YXJ0aW5nU3RhdGUgPSB0cnVlKSB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChjYXBzKTtcblxuICAgIC8vIHNldCB0aGUgbG9nZ2luZyBwcmVmZXJlbmNlcyB0byBBTEwgdGhlIGNvbnNvbGUgbG9nc1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcyA9IF8uY2xvbmVEZWVwKGdldENhcFZhbHVlKGNhcHMsICdsb2dnaW5nUHJlZnMnLCB7fSkpO1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzLmJyb3dzZXIpKSB7XG4gICAgICB0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMuYnJvd3NlciA9ICdBTEwnO1xuICAgIH1cblxuICAgIGlmIChlbWl0U3RhcnRpbmdTdGF0ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RBUlRJTkcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSBbYC0tcG9ydD0ke3RoaXMucHJveHlQb3J0fWBdO1xuICAgIGlmICh0aGlzLmFkYiAmJiB0aGlzLmFkYi5hZGJQb3J0KSB7XG4gICAgICBhcmdzLnB1c2goYC0tYWRiLXBvcnQ9JHt0aGlzLmFkYi5hZGJQb3J0fWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0FycmF5KHRoaXMuY21kQXJncykpIHtcbiAgICAgIGFyZ3MucHVzaCguLi50aGlzLmNtZEFyZ3MpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2dQYXRoKSB7XG4gICAgICBhcmdzLnB1c2goYC0tbG9nLXBhdGg9JHt0aGlzLmxvZ1BhdGh9YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICBhcmdzLnB1c2goJy0tZGlzYWJsZS1idWlsZC1jaGVjaycpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tdmVyYm9zZScpO1xuICAgIC8vIHdoYXQgYXJlIHRoZSBwcm9jZXNzIHN0ZG91dC9zdGRlcnIgY29uZGl0aW9ucyB3aGVyZWluIHdlIGtub3cgdGhhdFxuICAgIC8vIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkIHRvIG91ciBzYXRpc2ZhY3Rpb24/XG4gICAgY29uc3Qgc3RhcnREZXRlY3RvciA9IChzdGRvdXQpID0+IHN0ZG91dC5zdGFydHNXaXRoKCdTdGFydGluZyAnKTtcblxuICAgIGxldCBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgIGxldCB3ZWJ2aWV3VmVyc2lvbjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0Q2hyb21lZHJpdmVyUGF0aCgpO1xuICAgICAgYXdhaXQgdGhpcy5raWxsQWxsKCk7XG5cbiAgICAgIC8vIHNldCB1cCBvdXIgc3VicHJvY2VzcyBvYmplY3RcbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuY2hyb21lZHJpdmVyLCBhcmdzKTtcbiAgICAgIHByb2Nlc3NJc0FsaXZlID0gdHJ1ZTtcblxuICAgICAgLy8gaGFuZGxlIGxvZyBvdXRwdXRcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIC8vIGlmIHRoZSBjZCBvdXRwdXQgaXMgbm90IHByaW50ZWQsIGZpbmQgdGhlIGNocm9tZSB2ZXJzaW9uIGFuZCBwcmludFxuICAgICAgICAvLyB3aWxsIGdldCBhIHJlc3BvbnNlIGxpa2VcbiAgICAgICAgLy8gICBEZXZUb29scyByZXNwb25zZToge1xuICAgICAgICAvLyAgICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNhbXBsZWFwcFwiLFxuICAgICAgICAvLyAgICAgIFwiQnJvd3NlclwiOiBcIkNocm9tZS81NS4wLjI4ODMuOTFcIixcbiAgICAgICAgLy8gICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjJcIixcbiAgICAgICAgLy8gICAgICBcIlVzZXItQWdlbnRcIjogXCIuLi5cIixcbiAgICAgICAgLy8gICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2XCJcbiAgICAgICAgLy8gICB9XG4gICAgICAgIGNvbnN0IG91dCA9IHN0ZG91dCArIHN0ZGVycjtcbiAgICAgICAgbGV0IG1hdGNoID0gL1wiQnJvd3NlclwiOiBcIiguKilcIi8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB3ZWJ2aWV3VmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBXZWJ2aWV3IHZlcnNpb246ICcke3dlYnZpZXdWZXJzaW9ufSdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsc28gcHJpbnQgY2hyb21lZHJpdmVyIHZlcnNpb24gdG8gbG9nc1xuICAgICAgICAvLyB3aWxsIG91dHB1dCBzb21ldGhpbmcgbGlrZVxuICAgICAgICAvLyAgU3RhcnRpbmcgQ2hyb21lRHJpdmVyIDIuMzMuNTA2MTA2ICg4YTA2YzM5YzQ1ODJmYmZiYWI2OTY2ZGJiMWMzOGE5MTczYmZiMWEyKSBvbiBwb3J0IDk1MTVcbiAgICAgICAgbWF0Y2ggPSAvU3RhcnRpbmcgQ2hyb21lRHJpdmVyIChbLlxcZF0rKS8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hyb21lZHJpdmVyIHZlcnNpb246ICcke21hdGNoWzFdfSdgKTtcbiAgICAgICAgICB0aGlzLnN5bmNQcm90b2NvbChtYXRjaFsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnaXZlIHRoZSBvdXRwdXQgaWYgaXQgaXMgcmVxdWVzdGVkXG4gICAgICAgIGlmICh0aGlzLnZlcmJvc2UpIHtcbiAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIChzdGRvdXQgfHwgJycpLnRyaW0oKS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgIGlmICghbGluZS50cmltKCkubGVuZ3RoKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFtTVERPVVRdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgbGluZSBvZiAoc3RkZXJyIHx8ICcnKS50cmltKCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpLmxlbmd0aCkgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGBbU1RERVJSXSAke2xpbmV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HKSB7XG4gICAgICAgICAgY29uc3QgbXNnID0gYENocm9tZWRyaXZlciBleGl0ZWQgdW5leHBlY3RlZGx5IHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YDtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvcihtc2cpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nLmluZm8oYFNwYXduaW5nIGNocm9tZWRyaXZlciB3aXRoOiAke3RoaXMuY2hyb21lZHJpdmVyfSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgLy8gc3RhcnQgc3VicHJvYyBhbmQgd2FpdCBmb3Igc3RhcnREZXRlY3RvclxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yT25saW5lKCk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9FUlJPUiwgZSk7XG4gICAgICAvLyBqdXN0IGJlY2F1c2Ugd2UgaGFkIGFuIGVycm9yIGRvZXNuJ3QgbWVhbiB0aGUgY2hyb21lZHJpdmVyIHByb2Nlc3NcbiAgICAgIC8vIGZpbmlzaGVkOyB3ZSBzaG91bGQgY2xlYW4gdXAgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAocHJvY2Vzc0lzQWxpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgIC8vIG9mdGVuIHRoZSB1c2VyJ3MgQ2hyb21lIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdmVyc2lvbiBvZiBDaHJvbWVkcml2ZXJcbiAgICAgIGlmIChlLm1lc3NhZ2UuaW5jbHVkZXMoJ0Nocm9tZSB2ZXJzaW9uIG11c3QgYmUnKSkge1xuICAgICAgICBtZXNzYWdlICs9ICdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24gYmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBDaHJvbWVkcml2ZXIuXFxuJztcbiAgICAgICAgaWYgKHdlYnZpZXdWZXJzaW9uKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgQ2hyb21lIHZlcnNpb24gb24gdGhlIGRldmljZTogJHt3ZWJ2aWV3VmVyc2lvbn1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXIgPSAvQ2hyb21lIHZlcnNpb24gbXVzdCBiZSAoLispLy5leGVjKGUubWVzc2FnZSk/LlsxXSB8fCAnJztcbiAgICAgICAgaWYgKHZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXIpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBDaHJvbWVkcml2ZXIgc3VwcG9ydHMgQ2hyb21lIHZlcnNpb24ocyk6ICR7dmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlcn1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgKz0gYFZpc2l0ICcke0NIUk9NRURSSVZFUl9UVVRPUklBTH0nIHRvIHRyb3VibGVzaG9vdCB0aGUgcHJvYmxlbS5cXG5gO1xuICAgICAgfVxuXG4gICAgICBtZXNzYWdlICs9IGUubWVzc2FnZTtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3cobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgc2Vzc2lvbklkICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSA/IHRoaXMuandwcm94eS5zZXNzaW9uSWQgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcmVzdGFydCAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnUmVzdGFydGluZyBjaHJvbWVkcml2ZXInKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcmVzdGFydCB3aGVuIHdlJ3JlIG5vdCBvbmxpbmVcIik7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcpO1xuICAgIGF3YWl0IHRoaXMuc3RvcChmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0aGlzLmNhcGFiaWxpdGllcywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvck9ubGluZSAoKSB7XG4gICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBDRCBoYXNuJ3QgY3Jhc2hlZFxuICAgIGxldCBjaHJvbWVkcml2ZXJTdG9wcGVkID0gZmFsc2U7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgyMCwgMjAwLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgICAgLy8gd2UgYXJlIGVpdGhlciBzdG9wcGVkIG9yIHN0b3BwaW5nLCBzbyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgICBjaHJvbWVkcml2ZXJTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9KTtcbiAgICBpZiAoY2hyb21lZHJpdmVyU3RvcHBlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaHJvbWVEcml2ZXIgY3Jhc2hlZCBkdXJpbmcgc3RhcnR1cC4nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoKSB7XG4gICAgY29uc3Qgc2Vzc2lvbkNhcHMgPSB0aGlzLmRlc2lyZWRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQ1xuICAgICAgPyB7Y2FwYWJpbGl0aWVzOiB7YWx3YXlzTWF0Y2g6IHRoaXMuY2FwYWJpbGl0aWVzfX1cbiAgICAgIDoge2Rlc2lyZWRDYXBhYmlsaXRpZXM6IHRoaXMuY2FwYWJpbGl0aWVzfTtcbiAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyAke3RoaXMuZGVzaXJlZFByb3RvY29sfSBDaHJvbWVkcml2ZXIgc2Vzc2lvbiB3aXRoIGNhcGFiaWxpdGllczogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShzZXNzaW9uQ2FwcywgbnVsbCwgMikpO1xuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywgc2Vzc2lvbkNhcHMpO1xuICAgIHRoaXMubG9nLnByZWZpeCA9IGdlbmVyYXRlTG9nUHJlZml4KHRoaXMsIHRoaXMuandwcm94eS5zZXNzaW9uSWQpO1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSk7XG4gIH1cblxuICBhc3luYyBzdG9wIChlbWl0U3RhdGVzID0gdHJ1ZSkge1xuICAgIGlmIChlbWl0U3RhdGVzKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyk7XG4gICAgfVxuICAgIGNvbnN0IHJ1blNhZmVTdGVwID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oZS5tZXNzYWdlKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfTtcbiAgICBhd2FpdCBydW5TYWZlU3RlcCgoKSA9PiB0aGlzLmp3cHJveHkuY29tbWFuZCgnJywgJ0RFTEVURScpKTtcbiAgICBhd2FpdCBydW5TYWZlU3RlcCgoKSA9PiB0aGlzLnByb2Muc3RvcCgnU0lHVEVSTScsIDIwMDAwKSk7XG4gICAgdGhpcy5sb2cucHJlZml4ID0gZ2VuZXJhdGVMb2dQcmVmaXgodGhpcyk7XG4gICAgaWYgKGVtaXRTdGF0ZXMpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVN0YXRlIChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hhbmdlZCBzdGF0ZSB0byAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cblxuICBhc3luYyBwcm94eVJlcSAocmVxLCByZXMpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzKHJlcSwgcmVzKTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxBbGwgKCkge1xuICAgIGxldCBjbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKClcbiAgICAgID8gYHdtaWMgcHJvY2VzcyB3aGVyZSBcImNvbW1hbmRsaW5lIGxpa2UgJyVjaHJvbWVkcml2ZXIuZXhlJS0tcG9ydD0ke3RoaXMucHJveHlQb3J0fSUnXCIgZGVsZXRlYFxuICAgICAgOiBgcGtpbGwgLTE1IC1mIFwiJHt0aGlzLmNocm9tZWRyaXZlcn0uKi0tcG9ydD0ke3RoaXMucHJveHlQb3J0fVwiYDtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgS2lsbGluZyBhbnkgb2xkIGNocm9tZWRyaXZlcnMsIHJ1bm5pbmc6ICR7Y21kfWApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCAoQi5wcm9taXNpZnkoY3AuZXhlYykpKGNtZCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnU3VjY2Vzc2Z1bGx5IGNsZWFuZWQgdXAgb2xkIGNocm9tZWRyaXZlcnMnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ05vIG9sZCBjaHJvbWVkcml2ZXJzIHNlZW0gdG8gZXhpc3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGNvbnN0IHVkaWRJbmRleCA9IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtID09PSAnLXMnKTtcbiAgICAgIGNvbnN0IHVkaWQgPSB1ZGlkSW5kZXggPiAtMSA/IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3NbdWRpZEluZGV4ICsgMV0gOiBudWxsO1xuXG4gICAgICBpZiAodWRpZCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdGhpcyBkZXZpY2UncyBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zOiAke3VkaWR9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xlYW5pbmcgYW55IG9sZCBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zYCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGNvbm4gb2YgYXdhaXQgdGhpcy5hZGIuZ2V0Rm9yd2FyZExpc3QoKSkge1xuICAgICAgICAgIC8vIGNocm9tZWRyaXZlciB3aWxsIGFzayBBREIgdG8gZm9yd2FyZCBhIHBvcnQgbGlrZSBcImRldmljZUlkIHRjcDpwb3J0IGxvY2FsYWJzdHJhY3Q6d2Vidmlld19kZXZ0b29sc19yZW1vdGVfcG9ydFwiXG4gICAgICAgICAgaWYgKCEoY29ubi5pbmNsdWRlcygnd2Vidmlld19kZXZ0b29scycpICYmICghdWRpZCB8fCBjb25uLmluY2x1ZGVzKHVkaWQpKSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBwYXJhbXMgPSBjb25uLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZChwYXJhbXNbMV0ucmVwbGFjZSgvW1xcRF0qLywgJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gY2xlYW4gZm9yd2FyZGVkIHBvcnRzLiBFcnJvcjogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBoYXNXb3JraW5nV2VidmlldyAoKSB7XG4gICAgLy8gc29tZXRpbWVzIGNocm9tZWRyaXZlciBzdG9wcyBhdXRvbWF0aW5nIHdlYnZpZXdzLiB0aGlzIG1ldGhvZCBydW5zIGFcbiAgICAvLyBzaW1wbGUgY29tbWFuZCB0byBkZXRlcm1pbmUgb3VyIHN0YXRlLCBhbmQgcmVzcG9uZHMgYWNjb3JkaW5nbHlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy91cmwnLCAnR0VUJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbkNocm9tZWRyaXZlci5FVkVOVF9FUlJPUiA9ICdjaHJvbWVkcml2ZXJfZXJyb3InO1xuQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEID0gJ3N0b3BwZWQnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUQVJUSU5HID0gJ3N0YXJ0aW5nJztcbkNocm9tZWRyaXZlci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyA9ICdzdG9wcGluZyc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORyA9ICdyZXN0YXJ0aW5nJztcblxuZXhwb3J0IHsgQ2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBDaHJvbWVkcml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsbUNBQW1DLEdBQUcsRUFBNUM7QUFDQSxNQUFNQyxZQUFZLEdBQUcsV0FBckI7QUFDQSxNQUFNQywrQkFBK0IsR0FBRyxFQUF4QztBQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFyQjtBQUNBLE1BQU1DLGdCQUFnQixHQUFHLG9CQUF6QjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLDRCQUFoQztBQUNBLE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCLDRCQUR5QixFQUV6QixxQkFGeUIsQ0FBM0I7QUFJQSxNQUFNQyxxQkFBcUIsR0FBRyxpR0FBOUI7QUFDQSxNQUFNQyxlQUFlLEdBQUcsVUFBeEI7QUFFQSxNQUFNQyxrQkFBa0IsR0FBRyxJQUEzQjs7QUFFQSxNQUFNQyxZQUFOLFNBQTJCQyxn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
|
|
739
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2Nocm9tZWRyaXZlci5qcyIsIm5hbWVzIjpbIk5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OIiwiREVGQVVMVF9IT1NUIiwiTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCIsIkRFRkFVTFRfUE9SVCIsIkNIUk9NRV9CVU5ETEVfSUQiLCJXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCIsIldFQlZJRVdfQlVORExFX0lEUyIsIkNIUk9NRURSSVZFUl9UVVRPUklBTCIsIlZFUlNJT05fUEFUVEVSTiIsIkNEX1ZFUlNJT05fVElNRU9VVCIsIkNocm9tZWRyaXZlciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImhvc3QiLCJwb3J0IiwidXNlU3lzdGVtRXhlY3V0YWJsZSIsImV4ZWN1dGFibGUiLCJleGVjdXRhYmxlRGlyIiwiZ2V0Q2hyb21lZHJpdmVyRGlyIiwiYnVuZGxlSWQiLCJtYXBwaW5nUGF0aCIsImNtZEFyZ3MiLCJhZGIiLCJ2ZXJib3NlIiwibG9nUGF0aCIsImRpc2FibGVCdWlsZENoZWNrIiwiZGV0YWlscyIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIl9sb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJnZW5lcmF0ZUxvZ1ByZWZpeCIsInByb3h5SG9zdCIsInByb3h5UG9ydCIsInByb2MiLCJjaHJvbWVkcml2ZXIiLCJleGVjdXRhYmxlVmVyaWZpZWQiLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJqd3Byb3h5IiwiSldQcm94eSIsInNlcnZlciIsImxvZyIsInN0b3JhZ2VDbGllbnQiLCJDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IiwiY2hyb21lZHJpdmVyRGlyIiwiY2FwYWJpbGl0aWVzIiwiZGVzaXJlZFByb3RvY29sIiwiUFJPVE9DT0xTIiwiTUpTT05XUCIsImdldERyaXZlcnNNYXBwaW5nIiwibWFwcGluZyIsIl8iLCJjbG9uZURlZXAiLCJDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkciLCJkZWJ1ZyIsImZzIiwiZXhpc3RzIiwid2FybiIsImluZm8iLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZSIsImVyciIsIm1lc3NhZ2UiLCJjZFZlcnNpb24iLCJjaHJvbWVWZXJzaW9uIiwidG9QYWlycyIsImNvZXJjZWRWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwidmVyc2lvbiIsImdldENocm9tZWRyaXZlcnMiLCJleGVjdXRhYmxlcyIsImdsb2IiLCJjd2QiLCJzdHJpY3QiLCJub2RpciIsImFic29sdXRlIiwidXRpbCIsInBsdXJhbGl6ZSIsImxlbmd0aCIsImNkcyIsImFzeW5jbWFwIiwibG9nRXJyb3IiLCJzdGRvdXQiLCJzdGRlcnIiLCJlcnJNc2ciLCJwYXRoIiwiYmFzZW5hbWUiLCJleGVjIiwidGltZW91dCIsImluY2x1ZGVzIiwibWF0Y2giLCJtaW5DaHJvbWVWZXJzaW9uIiwibWFqb3IiLCJtaW5vciIsImZpbHRlciIsImNkIiwic29ydCIsImEiLCJiIiwiY29tcGFyZVZlcnNpb25zIiwiaXNFbXB0eSIsImdldENocm9tZVZlcnNpb24iLCJCcm93c2VyIiwidmVyc2lvbk1hdGNoIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsInVwZGF0ZURyaXZlcnNNYXBwaW5nIiwibmV3TWFwcGluZyIsInNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmciLCJ3cml0ZUZpbGUiLCJzdHJpbmdpZnkiLCJlIiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0Q29tcGF0aWJsZUNocm9tZWRyaXZlciIsImdldENocm9tZWRyaXZlckJpbmFyeVBhdGgiLCJ2YWx1ZXMiLCJkaWRTdG9yYWdlU3luYyIsInN5bmNDaHJvbWVkcml2ZXJzIiwicmV0cmlldmVkTWFwcGluZyIsInJldHJpZXZlTWFwcGluZyIsImRyaXZlcktleXMiLCJzeW5jRHJpdmVycyIsIm1pbkJyb3dzZXJWZXJzaW9uIiwic3luY2hyb25pemVkRHJpdmVyc01hcHBpbmciLCJyZWR1Y2UiLCJhY2MiLCJ4IiwibWlzc2luZ1ZlcnNpb25zIiwiY29lcmNlZFZlciIsInNpemUiLCJlcnJvckFuZFRocm93IiwibWF0Y2hpbmdEcml2ZXJzIiwibWluQ2hyb21lVmVyc2lvblMiLCJndGUiLCJDRF9DRE4iLCJzdGFjayIsImF1dG9kb3dubG9hZFN1Z2dlc3Rpb24iLCJFcnJvciIsImJpblBhdGgiLCJpbml0Q2hyb21lZHJpdmVyUGF0aCIsInN5bmNQcm90b2NvbCIsIlczQyIsImNocm9tZU9wdGlvbnMiLCJnZXRDYXBWYWx1ZSIsInczYyIsInRvVzNjQ2FwTmFtZXMiLCJzdGFydCIsImNhcHMiLCJlbWl0U3RhcnRpbmdTdGF0ZSIsImxvZ2dpbmdQcmVmcyIsImJyb3dzZXIiLCJjaGFuZ2VTdGF0ZSIsIlNUQVRFX1NUQVJUSU5HIiwiYWRiUG9ydCIsInB1c2giLCJpc0FycmF5Iiwic3RhcnREZXRlY3RvciIsInN0YXJ0c1dpdGgiLCJwcm9jZXNzSXNBbGl2ZSIsIndlYnZpZXdWZXJzaW9uIiwia2lsbEFsbCIsIlN1YlByb2Nlc3MiLCJvbiIsIm91dCIsImxpbmUiLCJ0cmltIiwic3BsaXQiLCJlcnJvciIsImNvZGUiLCJzaWduYWwiLCJTVEFURV9TVE9QUElORyIsIlNUQVRFX1JFU1RBUlRJTkciLCJtc2ciLCJqb2luIiwid2FpdEZvck9ubGluZSIsInN0YXJ0U2Vzc2lvbiIsImVtaXQiLCJFVkVOVF9FUlJPUiIsInN0b3AiLCJ2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyIiwic2Vzc2lvbklkIiwiU1RBVEVfT05MSU5FIiwicmVzdGFydCIsImNocm9tZWRyaXZlclN0b3BwZWQiLCJyZXRyeUludGVydmFsIiwiZ2V0U3RhdHVzIiwiY29tbWFuZCIsInNlc3Npb25DYXBzIiwiYWx3YXlzTWF0Y2giLCJkZXNpcmVkQ2FwYWJpbGl0aWVzIiwicHJlZml4IiwiZW1pdFN0YXRlcyIsInJ1blNhZmVTdGVwIiwiZiIsIkVWRU5UX0NIQU5HRUQiLCJzZW5kQ29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJwcm94eVJlcSIsInJlcSIsInJlcyIsInByb3h5UmVxUmVzIiwiY21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiQiIsInByb21pc2lmeSIsImNwIiwidWRpZEluZGV4IiwiZGVmYXVsdEFyZ3MiLCJmaW5kSW5kZXgiLCJpdGVtIiwidWRpZCIsImNvbm4iLCJnZXRGb3J3YXJkTGlzdCIsInBhcmFtcyIsInJlbW92ZVBvcnRGb3J3YXJkIiwicmVwbGFjZSIsImhhc1dvcmtpbmdXZWJ2aWV3Il0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2Nocm9tZWRyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBKV1Byb3h5LCBQUk9UT0NPTFMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBjcCBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN5c3RlbSwgZnMsIGxvZ2dlciwgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIGFzeW5jbWFwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgU3ViUHJvY2VzcywgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge1xuICBnZXRDaHJvbWVWZXJzaW9uLCBnZXRDaHJvbWVkcml2ZXJEaXIsIENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyxcbiAgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCwgQ0RfQ0ROLCBnZW5lcmF0ZUxvZ1ByZWZpeFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBjb21wYXJlVmVyc2lvbnMgZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCBmcm9tICcuL3N0b3JhZ2UtY2xpZW50JztcbmltcG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH0gZnJvbSAnLi9wcm90b2NvbC1oZWxwZXJzJztcblxuY29uc3QgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04gPSA3MztcbmNvbnN0IERFRkFVTFRfSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCA9IDc1O1xuY29uc3QgREVGQVVMVF9QT1JUID0gOTUxNTtcbmNvbnN0IENIUk9NRV9CVU5ETEVfSUQgPSAnY29tLmFuZHJvaWQuY2hyb21lJztcbmNvbnN0IFdFQlZJRVdfU0hFTExfQlVORExFX0lEID0gJ29yZy5jaHJvbWl1bS53ZWJ2aWV3X3NoZWxsJztcbmNvbnN0IFdFQlZJRVdfQlVORExFX0lEUyA9IFtcbiAgJ2NvbS5nb29nbGUuYW5kcm9pZC53ZWJ2aWV3JyxcbiAgJ2NvbS5hbmRyb2lkLndlYnZpZXcnLFxuXTtcbmNvbnN0IENIUk9NRURSSVZFUl9UVVRPUklBTCA9ICdodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9ibG9iL21hc3Rlci9kb2NzL2VuL3dyaXRpbmctcnVubmluZy1hcHBpdW0vd2ViL2Nocm9tZWRyaXZlci5tZCc7XG5jb25zdCBWRVJTSU9OX1BBVFRFUk4gPSAvKFtcXGQuXSspLztcblxuY29uc3QgQ0RfVkVSU0lPTl9USU1FT1VUID0gNTAwMDtcblxuY2xhc3MgQ2hyb21lZHJpdmVyIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChhcmdzID0ge30pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgY29uc3Qge1xuICAgICAgaG9zdCA9IERFRkFVTFRfSE9TVCxcbiAgICAgIHBvcnQgPSBERUZBVUxUX1BPUlQsXG4gICAgICB1c2VTeXN0ZW1FeGVjdXRhYmxlID0gZmFsc2UsXG4gICAgICBleGVjdXRhYmxlLFxuICAgICAgZXhlY3V0YWJsZURpciA9IGdldENocm9tZWRyaXZlckRpcigpLFxuICAgICAgYnVuZGxlSWQsXG4gICAgICBtYXBwaW5nUGF0aCxcbiAgICAgIGNtZEFyZ3MsXG4gICAgICBhZGIsXG4gICAgICB2ZXJib3NlLFxuICAgICAgbG9nUGF0aCxcbiAgICAgIGRpc2FibGVCdWlsZENoZWNrLFxuICAgICAgZGV0YWlscyxcbiAgICAgIGlzQXV0b2Rvd25sb2FkRW5hYmxlZCA9IGZhbHNlLFxuICAgIH0gPSBhcmdzO1xuICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoZ2VuZXJhdGVMb2dQcmVmaXgodGhpcykpO1xuXG4gICAgdGhpcy5wcm94eUhvc3QgPSBob3N0O1xuICAgIHRoaXMucHJveHlQb3J0ID0gcG9ydDtcbiAgICB0aGlzLmFkYiA9IGFkYjtcbiAgICB0aGlzLmNtZEFyZ3MgPSBjbWRBcmdzO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gICAgdGhpcy51c2VTeXN0ZW1FeGVjdXRhYmxlID0gdXNlU3lzdGVtRXhlY3V0YWJsZTtcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IGV4ZWN1dGFibGU7XG4gICAgdGhpcy5leGVjdXRhYmxlRGlyID0gZXhlY3V0YWJsZURpcjtcbiAgICB0aGlzLm1hcHBpbmdQYXRoID0gbWFwcGluZ1BhdGg7XG4gICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgIHRoaXMuZXhlY3V0YWJsZVZlcmlmaWVkID0gZmFsc2U7XG4gICAgdGhpcy5zdGF0ZSA9IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEO1xuICAgIHRoaXMuandwcm94eSA9IG5ldyBKV1Byb3h5KHtcbiAgICAgIHNlcnZlcjogdGhpcy5wcm94eUhvc3QsXG4gICAgICBwb3J0OiB0aGlzLnByb3h5UG9ydCxcbiAgICAgIGxvZzogdGhpcy5fbG9nLFxuICAgIH0pO1xuICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2U7XG4gICAgdGhpcy5sb2dQYXRoID0gbG9nUGF0aDtcbiAgICB0aGlzLmRpc2FibGVCdWlsZENoZWNrID0gISFkaXNhYmxlQnVpbGRDaGVjaztcbiAgICB0aGlzLnN0b3JhZ2VDbGllbnQgPSBpc0F1dG9kb3dubG9hZEVuYWJsZWRcbiAgICAgID8gbmV3IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQoeyBjaHJvbWVkcml2ZXJEaXI6IHRoaXMuZXhlY3V0YWJsZURpciB9KVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB7fTtcbiAgICB0aGlzLmRlc2lyZWRQcm90b2NvbCA9IFBST1RPQ09MUy5NSlNPTldQO1xuICB9XG5cbiAgZ2V0IGxvZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZztcbiAgfVxuXG4gIGFzeW5jIGdldERyaXZlcnNNYXBwaW5nICgpIHtcbiAgICBsZXQgbWFwcGluZyA9IF8uY2xvbmVEZWVwKENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyk7XG4gICAgaWYgKHRoaXMubWFwcGluZ1BhdGgpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBBdHRlbXB0aW5nIHRvIHVzZSBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nIGZyb20gJyR7dGhpcy5tYXBwaW5nUGF0aH0nYCk7XG4gICAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyh0aGlzLm1hcHBpbmdQYXRoKSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBObyBmaWxlIGZvdW5kIGF0ICcke3RoaXMubWFwcGluZ1BhdGh9J2ApO1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdEZWZhdWx0aW5nIHRvIHRoZSBzdGF0aWMgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtYXBwaW5nID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLm1hcHBpbmdQYXRoLCAndXRmOCcpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgRXJyb3IgcGFyc2luZyBtYXBwaW5nIGZyb20gJyR7dGhpcy5tYXBwaW5nUGF0aH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oJ0RlZmF1bHRpbmcgdG8gdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1VzaW5nIHRoZSBzdGF0aWMgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZycpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZXMgZm9yIG1pbmltdW0gY2hyb21lIHZlcnNpb24gYXJlIHNlbXZlciBjb21wbGlhbnRcbiAgICBmb3IgKGNvbnN0IFtjZFZlcnNpb24sIGNocm9tZVZlcnNpb25dIG9mIF8udG9QYWlycyhtYXBwaW5nKSkge1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIG1hcHBpbmdbY2RWZXJzaW9uXSA9IGNvZXJjZWRWZXJzaW9uLnZlcnNpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGAnJHtjaHJvbWVWZXJzaW9ufScgaXMgbm90IGEgdmFsaWQgdmVyc2lvbiBudW1iZXIuIFNraXBwaW5nIGl0YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXBwaW5nO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2hyb21lZHJpdmVycyAobWFwcGluZykge1xuICAgIC8vIGdvIHRocm91Z2ggdGhlIHZlcnNpb25zIGF2YWlsYWJsZVxuICAgIGNvbnN0IGV4ZWN1dGFibGVzID0gYXdhaXQgZnMuZ2xvYignKicsIHtcbiAgICAgIGN3ZDogdGhpcy5leGVjdXRhYmxlRGlyLFxuICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICAgIG5vZGlyOiB0cnVlLFxuICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kICR7dXRpbC5wbHVyYWxpemUoJ2V4ZWN1dGFibGUnLCBleGVjdXRhYmxlcy5sZW5ndGgsIHRydWUpfSBgICtcbiAgICAgIGBpbiAnJHt0aGlzLmV4ZWN1dGFibGVEaXJ9J2ApO1xuICAgIGNvbnN0IGNkcyA9IChhd2FpdCBhc3luY21hcChleGVjdXRhYmxlcywgYXN5bmMgKGV4ZWN1dGFibGUpID0+IHtcbiAgICAgIGNvbnN0IGxvZ0Vycm9yID0gKHttZXNzYWdlLCBzdGRvdXQgPSBudWxsLCBzdGRlcnIgPSBudWxsfSkgPT4ge1xuICAgICAgICBsZXQgZXJyTXNnID0gYENhbm5vdCByZXRyaWV2ZSB2ZXJzaW9uIG51bWJlciBmcm9tICcke3BhdGguYmFzZW5hbWUoZXhlY3V0YWJsZSl9JyBDaHJvbWVkcml2ZXIgYmluYXJ5LiBgICtcbiAgICAgICAgICBgTWFrZSBzdXJlIGl0IHJldHVybnMgYSB2YWxpZCB2ZXJzaW9uIHN0cmluZyBpbiByZXNwb25zZSB0byAnLS12ZXJzaW9uJyBjb21tYW5kIGxpbmUgYXJndW1lbnQuICR7bWVzc2FnZX1gO1xuICAgICAgICBpZiAoc3Rkb3V0KSB7XG4gICAgICAgICAgZXJyTXNnICs9IGBcXG5TdGRvdXQ6ICR7c3Rkb3V0fWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZGVycikge1xuICAgICAgICAgIGVyck1zZyArPSBgXFxuU3RkZXJyOiAke3N0ZGVycn1gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nLndhcm4oZXJyTXNnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBsZXQgc3Rkb3V0O1xuICAgICAgbGV0IHN0ZGVycjtcbiAgICAgIHRyeSB7XG4gICAgICAgICh7c3Rkb3V0LCBzdGRlcnJ9ID0gYXdhaXQgZXhlYyhleGVjdXRhYmxlLCBbJy0tdmVyc2lvbiddLCB7XG4gICAgICAgICAgdGltZW91dDogQ0RfVkVSU0lPTl9USU1FT1VULFxuICAgICAgICB9KSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCEoZXJyLm1lc3NhZ2UgfHwgJycpLmluY2x1ZGVzKCd0aW1lZCBvdXQnKSAmJiAhKGVyci5zdGRvdXQgfHwgJycpLmluY2x1ZGVzKCdTdGFydGluZyBDaHJvbWVEcml2ZXInKSkge1xuICAgICAgICAgIHJldHVybiBsb2dFcnJvcihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhpcyBoYXMgdGltZWQgb3V0LCBpdCBoYXMgYWN0dWFsbHkgc3RhcnRlZCBDaHJvbWVkcml2ZXIsXG4gICAgICAgIC8vIGluIHdoaWNoIGNhc2UgdGhlcmUgd2lsbCBhbHNvIGJlIHRoZSB2ZXJzaW9uIHN0cmluZyBpbiB0aGUgb3V0cHV0XG4gICAgICAgIHN0ZG91dCA9IGVyci5zdGRvdXQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdGNoID0gL0Nocm9tZURyaXZlclxccytcXCg/dj8oW1xcZC5dKylcXCk/L2kuZXhlYyhzdGRvdXQpOyAvLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL3pwajV3QS8xXG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiBsb2dFcnJvcih7bWVzc2FnZTogJ0Nhbm5vdCBwYXJzZSB0aGUgdmVyc2lvbiBzdHJpbmcnLCBzdGRvdXQsIHN0ZGVycn0pO1xuICAgICAgfVxuICAgICAgbGV0IHZlcnNpb24gPSBtYXRjaFsxXTtcbiAgICAgIGxldCBtaW5DaHJvbWVWZXJzaW9uID0gbWFwcGluZ1t2ZXJzaW9uXTtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uKTtcbiAgICAgIGlmIChjb2VyY2VkVmVyc2lvbikge1xuICAgICAgICAvLyBiZWZvcmUgMjAxOS0wMy0wNiB2ZXJzaW9ucyB3ZXJlIG9mIHRoZSBmb3JtIG1ham9yLm1pbm9yXG4gICAgICAgIGlmIChjb2VyY2VkVmVyc2lvbi5tYWpvciA8IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OKSB7XG4gICAgICAgICAgdmVyc2lvbiA9IGAke2NvZXJjZWRWZXJzaW9uLm1ham9yfS4ke2NvZXJjZWRWZXJzaW9uLm1pbm9yfWA7XG4gICAgICAgICAgbWluQ2hyb21lVmVyc2lvbiA9IG1hcHBpbmdbdmVyc2lvbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uICYmIGNvZXJjZWRWZXJzaW9uLm1ham9yID49IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OKSB7XG4gICAgICAgICAgLy8gQXNzdW1lIHRoZSBtYWpvciBDaHJvbWUgdmVyc2lvbiBpcyB0aGUgc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBkcml2ZXIgbWFqb3IgdmVyc2lvblxuICAgICAgICAgIG1pbkNocm9tZVZlcnNpb24gPSBgJHtjb2VyY2VkVmVyc2lvbi5tYWpvcn1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleGVjdXRhYmxlLFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBtaW5DaHJvbWVWZXJzaW9uLFxuICAgICAgfTtcbiAgICB9KSlcbiAgICAgIC5maWx0ZXIoKGNkKSA9PiAhIWNkKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbXBhcmVWZXJzaW9ucyhiLnZlcnNpb24sIGEudmVyc2lvbikpO1xuICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgTm8gQ2hyb21lZHJpdmVycyB3ZXJlIGZvdW5kIGluICcke3RoaXMuZXhlY3V0YWJsZURpcn0nYCk7XG4gICAgICByZXR1cm4gY2RzO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIGZvbGxvd2luZyBDaHJvbWVkcml2ZXIgZXhlY3V0YWJsZXMgd2VyZSBmb3VuZDpgKTtcbiAgICBmb3IgKGNvbnN0IGNkIG9mIGNkcykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYCAgICAnJHtjZC5leGVjdXRhYmxlfScgKHZlcnNpb24gJyR7Y2QudmVyc2lvbn0nLCBtaW5pbXVtIENocm9tZSB2ZXJzaW9uICcke2NkLm1pbkNocm9tZVZlcnNpb24gPyBjZC5taW5DaHJvbWVWZXJzaW9uIDogJ1Vua25vd24nfScpYCk7XG4gICAgfVxuICAgIHJldHVybiBjZHM7XG4gIH1cblxuICBhc3luYyBnZXRDaHJvbWVWZXJzaW9uICgpIHtcbiAgICAvLyBUcnkgdG8gcmV0cmlldmUgdGhlIHZlcnNpb24gZnJvbSBgZGV0YWlsc2AgcHJvcGVydHkgaWYgaXQgaXMgc2V0XG4gICAgLy8gVGhlIGBpbmZvYCBpdGVtIG11c3QgY29udGFpbiB0aGUgb3V0cHV0IG9mIC9qc29uL3ZlcnNpb24gQ0RQIGNvbW1hbmRcbiAgICAvLyB3aGVyZSBgQnJvd3NlcmAgZmllbGQgbG9va3MgbGlrZSBgQ2hyb21lLzcyLjAuMzYwMS4wYGBcbiAgICBpZiAodGhpcy5kZXRhaWxzPy5pbmZvKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQnJvd3NlciB2ZXJzaW9uIGluIHRoZSBzdXBwbGllZCBkZXRhaWxzOiAke3RoaXMuZGV0YWlscz8uaW5mbz8uQnJvd3Nlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gVkVSU0lPTl9QQVRURVJOLmV4ZWModGhpcy5kZXRhaWxzPy5pbmZvPy5Ccm93c2VyKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UodmVyc2lvbk1hdGNoWzFdKTtcbiAgICAgIGlmIChjb2VyY2VkVmVyc2lvbikge1xuICAgICAgICByZXR1cm4gY29lcmNlZFZlcnNpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNocm9tZVZlcnNpb247XG5cbiAgICAvLyBpbiBjYXNlIG9mIFdlYlZpZXcgQnJvd3NlciBUZXN0ZXIsIHNpbXBseSB0cnkgdG8gZmluZCB0aGUgdW5kZXJseWluZyB3ZWJ2aWV3XG4gICAgaWYgKHRoaXMuYnVuZGxlSWQgPT09IFdFQlZJRVdfU0hFTExfQlVORExFX0lEKSB7XG4gICAgICBmb3IgKGNvbnN0IGJ1bmRsZUlkIG9mIFdFQlZJRVdfQlVORExFX0lEUykge1xuICAgICAgICBjaHJvbWVWZXJzaW9uID0gYXdhaXQgZ2V0Q2hyb21lVmVyc2lvbih0aGlzLmFkYiwgYnVuZGxlSWQpO1xuICAgICAgICBpZiAoY2hyb21lVmVyc2lvbikge1xuICAgICAgICAgIHRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDtcbiAgICAgICAgICByZXR1cm4gc2VtdmVyLmNvZXJjZShjaHJvbWVWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gb24gQW5kcm9pZCA3LTkgd2Vidmlld3MgYXJlIGJhY2tlZCBieSB0aGUgbWFpbiBDaHJvbWUsIG5vdCB0aGUgc3lzdGVtIHdlYnZpZXdcbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgICAgIGlmIChhcGlMZXZlbCA+PSAyNCAmJiBhcGlMZXZlbCA8PSAyOCAmJlxuICAgICAgICAgIFtXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCwgLi4uV0VCVklFV19CVU5ETEVfSURTXS5pbmNsdWRlcyh0aGlzLmJ1bmRsZUlkKSkge1xuICAgICAgICB0aGlzLmJ1bmRsZUlkID0gQ0hST01FX0JVTkRMRV9JRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0cnkgb3V0IHdlYnZpZXdzIHdoZW4gbm8gYnVuZGxlIGlkIGlzIHNlbnQgaW5cbiAgICBpZiAoIXRoaXMuYnVuZGxlSWQpIHtcbiAgICAgIC8vIGRlZmF1bHQgdG8gdGhlIGdlbmVyaWMgQ2hyb21lIGJ1bmRsZVxuICAgICAgdGhpcy5idW5kbGVJZCA9IENIUk9NRV9CVU5ETEVfSUQ7XG5cbiAgICAgIC8vIHdlIGhhdmUgYSB3ZWJ2aWV3IG9mIHNvbWUgc29ydCwgc28gdHJ5IHRvIGZpbmQgdGhlIGJ1bmRsZSB2ZXJzaW9uXG4gICAgICBmb3IgKGNvbnN0IGJ1bmRsZUlkIG9mIFdFQlZJRVdfQlVORExFX0lEUykge1xuICAgICAgICBjaHJvbWVWZXJzaW9uID0gYXdhaXQgZ2V0Q2hyb21lVmVyc2lvbih0aGlzLmFkYiwgYnVuZGxlSWQpO1xuICAgICAgICBpZiAoY2hyb21lVmVyc2lvbikge1xuICAgICAgICAgIHRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHdlIGRvIG5vdCBoYXZlIGEgY2hyb21lIHZlcnNpb24sIGl0IG11c3Qgbm90IGJlIGEgd2Vidmlld1xuICAgIGlmICghY2hyb21lVmVyc2lvbikge1xuICAgICAgY2hyb21lVmVyc2lvbiA9IGF3YWl0IGdldENocm9tZVZlcnNpb24odGhpcy5hZGIsIHRoaXMuYnVuZGxlSWQpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBzZW12ZXIsIHNvIGxhdGVyIGNoZWNrcyB3b24ndCBmYWlsXG4gICAgcmV0dXJuIGNocm9tZVZlcnNpb24gPyBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pIDogbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURyaXZlcnNNYXBwaW5nIChuZXdNYXBwaW5nKSB7XG4gICAgbGV0IHNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmcgPSB0cnVlO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHModGhpcy5tYXBwaW5nUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLm1hcHBpbmdQYXRoLCBKU09OLnN0cmluZ2lmeShuZXdNYXBwaW5nLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgICAgICAgc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyA9IGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3Qgc3RvcmUgdGhlIHVwZGF0ZWQgY2hyb21lZHJpdmVycyBtYXBwaW5nIGludG8gJyR7dGhpcy5tYXBwaW5nUGF0aH0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgcmVkdWNlIHRoZSBwZXJmb3JtYW5jZSBvZiBmdXJ0aGVyIGV4ZWN1dGlvbnMuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmcpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HLCBuZXdNYXBwaW5nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyICgpIHtcbiAgICBpZiAoIXRoaXMuYWRiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBhd2FpdCB0aGlzLmdldERyaXZlcnNNYXBwaW5nKCk7XG4gICAgaWYgKCFfLmlzRW1wdHkobWFwcGluZykpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgbW9zdCByZWNlbnQga25vd24gQ2hyb21lIHZlcnNpb246ICR7Xy52YWx1ZXMobWFwcGluZylbMF19YCk7XG4gICAgfVxuXG4gICAgbGV0IGRpZFN0b3JhZ2VTeW5jID0gZmFsc2U7XG4gICAgY29uc3Qgc3luY0Nocm9tZWRyaXZlcnMgPSBhc3luYyAoY2hyb21lVmVyc2lvbikgPT4ge1xuICAgICAgZGlkU3RvcmFnZVN5bmMgPSB0cnVlO1xuICAgICAgY29uc3QgcmV0cmlldmVkTWFwcGluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZUNsaWVudC5yZXRyaWV2ZU1hcHBpbmcoKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdHb3QgY2hyb21lZHJpdmVycyBtYXBwaW5nIGZyb20gdGhlIHN0b3JhZ2U6ICcgK1xuICAgICAgICBKU09OLnN0cmluZ2lmeShyZXRyaWV2ZWRNYXBwaW5nLCBudWxsLCAyKSk7XG4gICAgICBjb25zdCBkcml2ZXJLZXlzID0gYXdhaXQgdGhpcy5zdG9yYWdlQ2xpZW50LnN5bmNEcml2ZXJzKHtcbiAgICAgICAgbWluQnJvd3NlclZlcnNpb246IGNocm9tZVZlcnNpb24ubWFqb3IsXG4gICAgICB9KTtcbiAgICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyS2V5cykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3luY2hyb25pemVkRHJpdmVyc01hcHBpbmcgPSBkcml2ZXJLZXlzLnJlZHVjZSgoYWNjLCB4KSA9PiB7XG4gICAgICAgIGNvbnN0IHt2ZXJzaW9uLCBtaW5Ccm93c2VyVmVyc2lvbn0gPSByZXRyaWV2ZWRNYXBwaW5nW3hdO1xuICAgICAgICBhY2NbdmVyc2lvbl0gPSBtaW5Ccm93c2VyVmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcbiAgICAgIE9iamVjdC5hc3NpZ24obWFwcGluZywgc3luY2hyb25pemVkRHJpdmVyc01hcHBpbmcpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVEcml2ZXJzTWFwcGluZyhtYXBwaW5nKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBkbyB7XG4gICAgICBjb25zdCBjZHMgPSBhd2FpdCB0aGlzLmdldENocm9tZWRyaXZlcnMobWFwcGluZyk7XG5cbiAgICAgIGNvbnN0IG1pc3NpbmdWZXJzaW9ucyA9IHt9O1xuICAgICAgZm9yIChjb25zdCB7dmVyc2lvbiwgbWluQ2hyb21lVmVyc2lvbn0gb2YgY2RzKSB7XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvbiB8fCBtYXBwaW5nW3ZlcnNpb25dKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29lcmNlZFZlciA9IHNlbXZlci5jb2VyY2UodmVyc2lvbik7XG4gICAgICAgIGlmICghY29lcmNlZFZlciB8fCBjb2VyY2VkVmVyLm1ham9yIDwgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1pc3NpbmdWZXJzaW9uc1t2ZXJzaW9uXSA9IG1pbkNocm9tZVZlcnNpb247XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNFbXB0eShtaXNzaW5nVmVyc2lvbnMpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEZvdW5kICR7dXRpbC5wbHVyYWxpemUoJ0Nocm9tZWRyaXZlcicsIF8uc2l6ZShtaXNzaW5nVmVyc2lvbnMpLCB0cnVlKX0sIGAgK1xuICAgICAgICAgIGB3aGljaCAke18uc2l6ZShtaXNzaW5nVmVyc2lvbnMpID09PSAxID8gJ2lzJyA6ICdhcmUnfSBtaXNzaW5nIGluIHRoZSBsaXN0IG9mIGtub3duIHZlcnNpb25zOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtaXNzaW5nVmVyc2lvbnMpKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVEcml2ZXJzTWFwcGluZyhPYmplY3QuYXNzaWduKG1hcHBpbmcsIG1pc3NpbmdWZXJzaW9ucykpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlQnVpbGRDaGVjaykge1xuICAgICAgICBpZiAoXy5pc0VtcHR5KGNkcykpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBDaHJvbWVkcml2ZXIgZXhlY3V0YWJsZSBhdmFpbGFibGUgZm9yIHVzZSBpZiBgICtcbiAgICAgICAgICAgIGAnY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2snIGNhcGFiaWxpdHkgaXMgc2V0IHRvICd0cnVlJ2ApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHt2ZXJzaW9uLCBleGVjdXRhYmxlfSA9IGNkc1swXTtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2hyb21lIGJ1aWxkIGNoZWNrIGRpc2FibGVkLiBVc2luZyBtb3N0IHJlY2VudCBDaHJvbWVkcml2ZXIgdmVyc2lvbiAoJHt2ZXJzaW9ufSwgYXQgJyR7ZXhlY3V0YWJsZX0nKWApO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBJZiB0aGlzIGlzIHdyb25nLCBzZXQgJ2Nocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrJyBjYXBhYmlsaXR5IHRvICdmYWxzZSdgKTtcbiAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNocm9tZVZlcnNpb24gPSBhd2FpdCB0aGlzLmdldENocm9tZVZlcnNpb24oKTtcbiAgICAgIGlmICghY2hyb21lVmVyc2lvbikge1xuICAgICAgICAvLyB1bmFibGUgdG8gZ2V0IHRoZSBjaHJvbWUgdmVyc2lvblxuICAgICAgICBpZiAoXy5pc0VtcHR5KGNkcykpIHtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBDaHJvbWVkcml2ZXIgZXhlY3V0YWJsZSBhdmFpbGFibGUgZm9yIHVzZSBpZiBgICtcbiAgICAgICAgICAgIGB0aGUgY3VycmVudCBDaHJvbWUgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHt2ZXJzaW9uLCBleGVjdXRhYmxlfSA9IGNkc1swXTtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGRpc2NvdmVyIENocm9tZSB2ZXJzaW9uLiBVc2luZyBDaHJvbWVkcml2ZXIgJHt2ZXJzaW9ufSBhdCAnJHtleGVjdXRhYmxlfSdgKTtcbiAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgQ2hyb21lIGJ1bmRsZSAnJHt0aGlzLmJ1bmRsZUlkfScgdmVyc2lvbiAnJHtjaHJvbWVWZXJzaW9ufSdgKTtcblxuICAgICAgY29uc3QgbWF0Y2hpbmdEcml2ZXJzID0gY2RzLmZpbHRlcigoe21pbkNocm9tZVZlcnNpb259KSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbkNocm9tZVZlcnNpb25TID0gbWluQ2hyb21lVmVyc2lvbiAmJiBzZW12ZXIuY29lcmNlKG1pbkNocm9tZVZlcnNpb24pO1xuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb25TKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNocm9tZVZlcnNpb24ubWFqb3IgPiBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTlxuICAgICAgICAgID8gbWluQ2hyb21lVmVyc2lvblMubWFqb3IgPT09IGNocm9tZVZlcnNpb24ubWFqb3JcbiAgICAgICAgICA6IHNlbXZlci5ndGUoY2hyb21lVmVyc2lvbiwgbWluQ2hyb21lVmVyc2lvblMpO1xuICAgICAgfSk7XG4gICAgICBpZiAoXy5pc0VtcHR5KG1hdGNoaW5nRHJpdmVycykpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmFnZUNsaWVudCAmJiAhZGlkU3RvcmFnZVN5bmMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHN5bmNDaHJvbWVkcml2ZXJzKGNocm9tZVZlcnNpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBzeW5jaHJvbml6ZSBsb2NhbCBjaHJvbWVkcml2ZXJzIHdpdGggdGhlIHJlbW90ZSBzdG9yYWdlIGF0ICR7Q0RfQ0ROfTogYCArXG4gICAgICAgICAgICAgIGUubWVzc2FnZSk7XG4gICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhlLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXV0b2Rvd25sb2FkU3VnZ2VzdGlvbiA9XG4gICAgICAgICAgJ1lvdSBjb3VsZCBhbHNvIHRyeSB0byBlbmFibGUgYXV0b21hdGVkIGNocm9tZWRyaXZlcnMgZG93bmxvYWQgc2VydmVyIGZlYXR1cmUnO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENocm9tZWRyaXZlciBmb3VuZCB0aGF0IGNhbiBhdXRvbWF0ZSBDaHJvbWUgJyR7Y2hyb21lVmVyc2lvbn0nLiBgICtcbiAgICAgICAgICAoIXRoaXMuc3RvcmFnZUNsaWVudCA/IGAke2F1dG9kb3dubG9hZFN1Z2dlc3Rpb259LiBgIDogJycpICtcbiAgICAgICAgICBgU2VlICR7Q0hST01FRFJJVkVSX1RVVE9SSUFMfSBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJpblBhdGggPSBtYXRjaGluZ0RyaXZlcnNbMF0uZXhlY3V0YWJsZTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdleGVjdXRhYmxlJywgbWF0Y2hpbmdEcml2ZXJzLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgICBgY2FwYWJsZSBvZiBhdXRvbWF0aW5nIENocm9tZSAnJHtjaHJvbWVWZXJzaW9ufScuXFxuQ2hvb3NpbmcgdGhlIG1vc3QgcmVjZW50LCAnJHtiaW5QYXRofScuYCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnSWYgYSBzcGVjaWZpYyB2ZXJzaW9uIGlzIHJlcXVpcmVkLCBzcGVjaWZ5IGl0IHdpdGggdGhlIGBjaHJvbWVkcml2ZXJFeGVjdXRhYmxlYCcgK1xuICAgICAgICAnZGVzaXJlZCBjYXBhYmlsaXR5LicpO1xuICAgICAgcmV0dXJuIGJpblBhdGg7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgIH0gd2hpbGUgKHRydWUpO1xuICB9XG5cbiAgYXN5bmMgaW5pdENocm9tZWRyaXZlclBhdGggKCkge1xuICAgIGlmICh0aGlzLmV4ZWN1dGFibGVWZXJpZmllZCkgcmV0dXJuOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIC8vIHRoZSBleGVjdXRhYmxlIG1pZ2h0IGJlIHNldCAoaWYgcGFzc2VkIGluKVxuICAgIC8vIG9yIHdlIG1pZ2h0IHdhbnQgdG8gdXNlIHRoZSBiYXNpYyBvbmUgaW5zdGFsbGVkIHdpdGggdGhpcyBkcml2ZXJcbiAgICAvLyBvciB3ZSB3YW50IHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgb25lXG4gICAgaWYgKCF0aGlzLmNocm9tZWRyaXZlcikge1xuICAgICAgdGhpcy5jaHJvbWVkcml2ZXIgPSB0aGlzLnVzZVN5c3RlbUV4ZWN1dGFibGVcbiAgICAgICAgPyBhd2FpdCBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoKClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyh0aGlzLmNocm9tZWRyaXZlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIHVzZSBhIGNocm9tZWRyaXZlciBiaW5hcnkgYXQgdGhlIHBhdGggYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jaHJvbWVkcml2ZXJ9LCBidXQgaXQgZG9lc24ndCBleGlzdCFgKTtcbiAgICB9XG4gICAgdGhpcy5leGVjdXRhYmxlVmVyaWZpZWQgPSB0cnVlO1xuICAgIHRoaXMubG9nLmluZm8oYFNldCBjaHJvbWVkcml2ZXIgYmluYXJ5IGFzOiAke3RoaXMuY2hyb21lZHJpdmVyfWApO1xuICB9XG5cbiAgc3luY1Byb3RvY29sIChjZFZlcnNpb24gPSBudWxsKSB7XG4gICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKGNkVmVyc2lvbik7XG4gICAgaWYgKCFjb2VyY2VkVmVyc2lvbiB8fCBjb2VyY2VkVmVyc2lvbi5tYWpvciA8IE1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDaHJvbWVkcml2ZXIgdi4gJHtjZFZlcnNpb259IGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgJHtQUk9UT0NPTFMuVzNDfSBwcm90b2NvbC4gYCArXG4gICAgICAgIGBEZWZhdWx0aW5nIHRvICR7UFJPVE9DT0xTLk1KU09OV1B9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNocm9tZU9wdGlvbnMgPSBnZXRDYXBWYWx1ZSh0aGlzLmNhcGFiaWxpdGllcywgJ2Nocm9tZU9wdGlvbnMnLCB7fSk7XG4gICAgaWYgKGNocm9tZU9wdGlvbnMudzNjID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgQ2hyb21lZHJpdmVyIHYuICR7Y2RWZXJzaW9ufSBzdXBwb3J0cyAke1BST1RPQ09MUy5XM0N9IHByb3RvY29sLCBgICtcbiAgICAgICAgYGJ1dCAke1BST1RPQ09MUy5NSlNPTldQfSBvbmUgaGFzIGJlZW4gZXhwbGljaXRseSByZXF1ZXN0ZWRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZXNpcmVkUHJvdG9jb2wgPSBQUk9UT0NPTFMuVzNDO1xuICAgIC8vIGdpdmVuIGNhcHMgbWlnaHQgbm90IGJlIHByb3Blcmx5IHByZWZpeGVkXG4gICAgLy8gc28gd2UgdHJ5IHRvIGZpeCB0aGVtIGluIG9yZGVyIHRvIHByb3Blcmx5IGluaXRcbiAgICAvLyB0aGUgbmV3IFczQyBzZXNzaW9uXG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0b1czY0NhcE5hbWVzKHRoaXMuY2FwYWJpbGl0aWVzKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChjYXBzLCBlbWl0U3RhcnRpbmdTdGF0ZSA9IHRydWUpIHtcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKGNhcHMpO1xuXG4gICAgLy8gc2V0IHRoZSBsb2dnaW5nIHByZWZlcmVuY2VzIHRvIEFMTCB0aGUgY29uc29sZSBsb2dzXG4gICAgdGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzID0gXy5jbG9uZURlZXAoZ2V0Q2FwVmFsdWUoY2FwcywgJ2xvZ2dpbmdQcmVmcycsIHt9KSk7XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMuYnJvd3NlcikpIHtcbiAgICAgIHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcy5icm93c2VyID0gJ0FMTCc7XG4gICAgfVxuXG4gICAgaWYgKGVtaXRTdGFydGluZ1N0YXRlKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVEFSVElORyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IFtgLS1wb3J0PSR7dGhpcy5wcm94eVBvcnR9YF07XG4gICAgaWYgKHRoaXMuYWRiICYmIHRoaXMuYWRiLmFkYlBvcnQpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1hZGItcG9ydD0ke3RoaXMuYWRiLmFkYlBvcnR9YCk7XG4gICAgfVxuICAgIGlmIChfLmlzQXJyYXkodGhpcy5jbWRBcmdzKSkge1xuICAgICAgYXJncy5wdXNoKC4uLnRoaXMuY21kQXJncyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvZ1BhdGgpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1sb2ctcGF0aD0ke3RoaXMubG9nUGF0aH1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2spIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1kaXNhYmxlLWJ1aWxkLWNoZWNrJyk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLS12ZXJib3NlJyk7XG4gICAgLy8gd2hhdCBhcmUgdGhlIHByb2Nlc3Mgc3Rkb3V0L3N0ZGVyciBjb25kaXRpb25zIHdoZXJlaW4gd2Uga25vdyB0aGF0XG4gICAgLy8gdGhlIHByb2Nlc3MgaGFzIHN0YXJ0ZWQgdG8gb3VyIHNhdGlzZmFjdGlvbj9cbiAgICBjb25zdCBzdGFydERldGVjdG9yID0gKHN0ZG91dCkgPT4gc3Rkb3V0LnN0YXJ0c1dpdGgoJ1N0YXJ0aW5nICcpO1xuXG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgbGV0IHdlYnZpZXdWZXJzaW9uO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRDaHJvbWVkcml2ZXJQYXRoKCk7XG4gICAgICBhd2FpdCB0aGlzLmtpbGxBbGwoKTtcblxuICAgICAgLy8gc2V0IHVwIG91ciBzdWJwcm9jZXNzIG9iamVjdFxuICAgICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3ModGhpcy5jaHJvbWVkcml2ZXIsIGFyZ3MpO1xuICAgICAgcHJvY2Vzc0lzQWxpdmUgPSB0cnVlO1xuXG4gICAgICAvLyBoYW5kbGUgbG9nIG91dHB1dFxuICAgICAgdGhpcy5wcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgLy8gaWYgdGhlIGNkIG91dHB1dCBpcyBub3QgcHJpbnRlZCwgZmluZCB0aGUgY2hyb21lIHZlcnNpb24gYW5kIHByaW50XG4gICAgICAgIC8vIHdpbGwgZ2V0IGEgcmVzcG9uc2UgbGlrZVxuICAgICAgICAvLyAgIERldlRvb2xzIHJlc3BvbnNlOiB7XG4gICAgICAgIC8vICAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2FtcGxlYXBwXCIsXG4gICAgICAgIC8vICAgICAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzU1LjAuMjg4My45MVwiLFxuICAgICAgICAvLyAgICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuMlwiLFxuICAgICAgICAvLyAgICAgIFwiVXNlci1BZ2VudFwiOiBcIi4uLlwiLFxuICAgICAgICAvLyAgICAgIFwiV2ViS2l0LVZlcnNpb25cIjogXCI1MzcuMzZcIlxuICAgICAgICAvLyAgIH1cbiAgICAgICAgY29uc3Qgb3V0ID0gc3Rkb3V0ICsgc3RkZXJyO1xuICAgICAgICBsZXQgbWF0Y2ggPSAvXCJCcm93c2VyXCI6IFwiKC4qKVwiLy5leGVjKG91dCk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHdlYnZpZXdWZXJzaW9uID0gbWF0Y2hbMV07XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFdlYnZpZXcgdmVyc2lvbjogJyR7d2Vidmlld1ZlcnNpb259J2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWxzbyBwcmludCBjaHJvbWVkcml2ZXIgdmVyc2lvbiB0byBsb2dzXG4gICAgICAgIC8vIHdpbGwgb3V0cHV0IHNvbWV0aGluZyBsaWtlXG4gICAgICAgIC8vICBTdGFydGluZyBDaHJvbWVEcml2ZXIgMi4zMy41MDYxMDYgKDhhMDZjMzljNDU4MmZiZmJhYjY5NjZkYmIxYzM4YTkxNzNiZmIxYTIpIG9uIHBvcnQgOTUxNVxuICAgICAgICBtYXRjaCA9IC9TdGFydGluZyBDaHJvbWVEcml2ZXIgKFsuXFxkXSspLy5leGVjKG91dCk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBDaHJvbWVkcml2ZXIgdmVyc2lvbjogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgICAgIHRoaXMuc3luY1Byb3RvY29sKG1hdGNoWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdpdmUgdGhlIG91dHB1dCBpZiBpdCBpcyByZXF1ZXN0ZWRcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgKHN0ZG91dCB8fCAnJykudHJpbSgpLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW0oKS5sZW5ndGgpIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgW1NURE9VVF0gJHtsaW5lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIChzdGRlcnIgfHwgJycpLnRyaW0oKS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgIGlmICghbGluZS50cmltKCkubGVuZ3RoKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IoYFtTVERFUlJdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBoYW5kbGUgb3V0LW9mLWJvdW5kIGV4aXQgYnkgc2ltcGx5IGVtaXR0aW5nIGEgc3RvcHBlZCBzdGF0ZVxuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcpIHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBgQ2hyb21lZHJpdmVyIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gO1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKG1zZyk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgU3Bhd25pbmcgY2hyb21lZHJpdmVyIHdpdGg6ICR7dGhpcy5jaHJvbWVkcml2ZXJ9ICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICAvLyBzdGFydCBzdWJwcm9jIGFuZCB3YWl0IGZvciBzdGFydERldGVjdG9yXG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoc3RhcnREZXRlY3Rvcik7XG4gICAgICBhd2FpdCB0aGlzLndhaXRGb3JPbmxpbmUoKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoZSk7XG4gICAgICB0aGlzLmVtaXQoQ2hyb21lZHJpdmVyLkVWRU5UX0VSUk9SLCBlKTtcbiAgICAgIC8vIGp1c3QgYmVjYXVzZSB3ZSBoYWQgYW4gZXJyb3IgZG9lc24ndCBtZWFuIHRoZSBjaHJvbWVkcml2ZXIgcHJvY2Vzc1xuICAgICAgLy8gZmluaXNoZWQ7IHdlIHNob3VsZCBjbGVhbiB1cCBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChwcm9jZXNzSXNBbGl2ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgICAgLy8gb2Z0ZW4gdGhlIHVzZXIncyBDaHJvbWUgdmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB2ZXJzaW9uIG9mIENocm9tZWRyaXZlclxuICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcygnQ2hyb21lIHZlcnNpb24gbXVzdCBiZScpKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gJ1VuYWJsZSB0byBhdXRvbWF0ZSBDaHJvbWUgdmVyc2lvbiBiZWNhdXNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIENocm9tZWRyaXZlci5cXG4nO1xuICAgICAgICBpZiAod2Vidmlld1ZlcnNpb24pIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBDaHJvbWUgdmVyc2lvbiBvbiB0aGUgZGV2aWNlOiAke3dlYnZpZXdWZXJzaW9ufVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciA9IC9DaHJvbWUgdmVyc2lvbiBtdXN0IGJlICguKykvLmV4ZWMoZS5tZXNzYWdlKT8uWzFdIHx8ICcnO1xuICAgICAgICBpZiAodmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlcikge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYENocm9tZWRyaXZlciBzdXBwb3J0cyBDaHJvbWUgdmVyc2lvbihzKTogJHt2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyfVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZSArPSBgVmlzaXQgJyR7Q0hST01FRFJJVkVSX1RVVE9SSUFMfScgdG8gdHJvdWJsZXNob290IHRoZSBwcm9ibGVtLlxcbmA7XG4gICAgICB9XG5cbiAgICAgIG1lc3NhZ2UgKz0gZS5tZXNzYWdlO1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBzZXNzaW9uSWQgKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FID8gdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA6IG51bGw7XG4gIH1cblxuICBhc3luYyByZXN0YXJ0ICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdSZXN0YXJ0aW5nIGNocm9tZWRyaXZlcicpO1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCByZXN0YXJ0IHdoZW4gd2UncmUgbm90IG9ubGluZVwiKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORyk7XG4gICAgYXdhaXQgdGhpcy5zdG9wKGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0KHRoaXMuY2FwYWJpbGl0aWVzLCBmYWxzZSk7XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yT25saW5lICgpIHtcbiAgICAvLyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IENEIGhhc24ndCBjcmFzaGVkXG4gICAgbGV0IGNocm9tZWRyaXZlclN0b3BwZWQgPSBmYWxzZTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKDIwLCAyMDAsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgICAvLyB3ZSBhcmUgZWl0aGVyIHN0b3BwZWQgb3Igc3RvcHBpbmcsIHNvIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgIGNocm9tZWRyaXZlclN0b3BwZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH0pO1xuICAgIGlmIChjaHJvbWVkcml2ZXJTdG9wcGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nocm9tZURyaXZlciBjcmFzaGVkIGR1cmluZyBzdGFydHVwLicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXNzaW9uICgpIHtcbiAgICBjb25zdCBzZXNzaW9uQ2FwcyA9IHRoaXMuZGVzaXJlZFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDXG4gICAgICA/IHtjYXBhYmlsaXRpZXM6IHthbHdheXNNYXRjaDogdGhpcy5jYXBhYmlsaXRpZXN9fVxuICAgICAgOiB7ZGVzaXJlZENhcGFiaWxpdGllczogdGhpcy5jYXBhYmlsaXRpZXN9O1xuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICR7dGhpcy5kZXNpcmVkUHJvdG9jb2x9IENocm9tZWRyaXZlciBzZXNzaW9uIHdpdGggY2FwYWJpbGl0aWVzOiBgICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHNlc3Npb25DYXBzLCBudWxsLCAyKSk7XG4gICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCBzZXNzaW9uQ2Fwcyk7XG4gICAgdGhpcy5sb2cucHJlZml4ID0gZ2VuZXJhdGVMb2dQcmVmaXgodGhpcywgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCk7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKGVtaXRTdGF0ZXMgPSB0cnVlKSB7XG4gICAgaWYgKGVtaXRTdGF0ZXMpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQSU5HKTtcbiAgICB9XG4gICAgY29uc3QgcnVuU2FmZVN0ZXAgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGYoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihlLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhlLnN0YWNrKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGF3YWl0IHJ1blNhZmVTdGVwKCgpID0+IHRoaXMuandwcm94eS5jb21tYW5kKCcnLCAnREVMRVRFJykpO1xuICAgIGF3YWl0IHJ1blNhZmVTdGVwKCgpID0+IHRoaXMucHJvYy5zdG9wKCdTSUdURVJNJywgMjAwMDApKTtcbiAgICB0aGlzLmxvZy5wcmVmaXggPSBnZW5lcmF0ZUxvZ1ByZWZpeCh0aGlzKTtcbiAgICBpZiAoZW1pdFN0YXRlcykge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3RhdGUgKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDaGFuZ2VkIHN0YXRlIHRvICcke3N0YXRlfSdgKTtcbiAgICB0aGlzLmVtaXQoQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIHtzdGF0ZX0pO1xuICB9XG5cbiAgYXN5bmMgc2VuZENvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxuXG4gIGFzeW5jIHByb3h5UmVxIChyZXEsIHJlcykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMocmVxLCByZXMpO1xuICB9XG5cbiAgYXN5bmMga2lsbEFsbCAoKSB7XG4gICAgbGV0IGNtZCA9IHN5c3RlbS5pc1dpbmRvd3MoKVxuICAgICAgPyBgd21pYyBwcm9jZXNzIHdoZXJlIFwiY29tbWFuZGxpbmUgbGlrZSAnJWNocm9tZWRyaXZlci5leGUlLS1wb3J0PSR7dGhpcy5wcm94eVBvcnR9JSdcIiBkZWxldGVgXG4gICAgICA6IGBwa2lsbCAtMTUgLWYgXCIke3RoaXMuY2hyb21lZHJpdmVyfS4qLS1wb3J0PSR7dGhpcy5wcm94eVBvcnR9XCJgO1xuICAgIHRoaXMubG9nLmRlYnVnKGBLaWxsaW5nIGFueSBvbGQgY2hyb21lZHJpdmVycywgcnVubmluZzogJHtjbWR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChCLnByb21pc2lmeShjcC5leGVjKSkoY21kKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdTdWNjZXNzZnVsbHkgY2xlYW5lZCB1cCBvbGQgY2hyb21lZHJpdmVycycpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cud2FybignTm8gb2xkIGNocm9tZWRyaXZlcnMgc2VlbSB0byBleGlzdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgY29uc3QgdWRpZEluZGV4ID0gdGhpcy5hZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJncy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0gPT09ICctcycpO1xuICAgICAgY29uc3QgdWRpZCA9IHVkaWRJbmRleCA+IC0xID8gdGhpcy5hZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJnc1t1ZGlkSW5kZXggKyAxXSA6IG51bGw7XG5cbiAgICAgIGlmICh1ZGlkKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyB0aGlzIGRldmljZSdzIGFkYiBmb3J3YXJkZWQgcG9ydCBzb2NrZXQgY29ubmVjdGlvbnM6ICR7dWRpZH1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyBhbnkgb2xkIGFkYiBmb3J3YXJkZWQgcG9ydCBzb2NrZXQgY29ubmVjdGlvbnNgKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChsZXQgY29ubiBvZiBhd2FpdCB0aGlzLmFkYi5nZXRGb3J3YXJkTGlzdCgpKSB7XG4gICAgICAgICAgLy8gY2hyb21lZHJpdmVyIHdpbGwgYXNrIEFEQiB0byBmb3J3YXJkIGEgcG9ydCBsaWtlIFwiZGV2aWNlSWQgdGNwOnBvcnQgbG9jYWxhYnN0cmFjdDp3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV9wb3J0XCJcbiAgICAgICAgICBpZiAoIShjb25uLmluY2x1ZGVzKCd3ZWJ2aWV3X2RldnRvb2xzJykgJiYgKCF1ZGlkIHx8IGNvbm4uaW5jbHVkZXModWRpZCkpKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHBhcmFtcyA9IGNvbm4uc3BsaXQoL1xccysvKTtcbiAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHBhcmFtc1sxXS5yZXBsYWNlKC9bXFxEXSovLCAnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBjbGVhbiBmb3J3YXJkZWQgcG9ydHMuIEVycm9yOiAnJHtlcnIubWVzc2FnZX0nLiBDb250aW51aW5nLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhc1dvcmtpbmdXZWJ2aWV3ICgpIHtcbiAgICAvLyBzb21ldGltZXMgY2hyb21lZHJpdmVyIHN0b3BzIGF1dG9tYXRpbmcgd2Vidmlld3MuIHRoaXMgbWV0aG9kIHJ1bnMgYVxuICAgIC8vIHNpbXBsZSBjb21tYW5kIHRvIGRldGVybWluZSBvdXIgc3RhdGUsIGFuZCByZXNwb25kcyBhY2NvcmRpbmdseVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3VybCcsICdHRVQnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuQ2hyb21lZHJpdmVyLkVWRU5UX0VSUk9SID0gJ2Nocm9tZWRyaXZlcl9lcnJvcic7XG5DaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCA9ICdzdGF0ZUNoYW5nZWQnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQgPSAnc3RvcHBlZCc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfU1RBUlRJTkcgPSAnc3RhcnRpbmcnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSA9ICdvbmxpbmUnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQSU5HID0gJ3N0b3BwaW5nJztcbkNocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HID0gJ3Jlc3RhcnRpbmcnO1xuXG5leHBvcnQgeyBDaHJvbWVkcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IENocm9tZWRyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxtQ0FBbUMsR0FBRyxFQUE1QztBQUNBLE1BQU1DLFlBQVksR0FBRyxXQUFyQjtBQUNBLE1BQU1DLCtCQUErQixHQUFHLEVBQXhDO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLElBQXJCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsb0JBQXpCO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsNEJBQWhDO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsQ0FDekIs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
|
package/build/lib/install.js
CHANGED
|
@@ -10,7 +10,7 @@ exports.install = install;
|
|
|
10
10
|
|
|
11
11
|
require("source-map-support/register");
|
|
12
12
|
|
|
13
|
-
var _support = require("
|
|
13
|
+
var _support = require("appium/support");
|
|
14
14
|
|
|
15
15
|
var _storageClient = _interopRequireDefault(require("./storage-client"));
|
|
16
16
|
|
|
@@ -54,4 +54,4 @@ async function doInstall() {
|
|
|
54
54
|
}require('source-map-support').install();
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2luc3RhbGwuanMiLCJuYW1lcyI6WyJET1dOTE9BRF9USU1FT1VUX01TIiwiTEFURVNUX1ZFUlNJT04iLCJmb3JtYXRDZFZlcnNpb24iLCJ2ZXIiLCJyZXRyaWV2ZURhdGEiLCJDRF9DRE4iLCJhY2NlcHQiLCJ0aW1lb3V0IiwidHJpbSIsInByZXBhcmVDaHJvbWVkcml2ZXJEaXIiLCJwbGF0Zm9ybU5hbWUiLCJjaHJvbWVkcml2ZXJEaXIiLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJmcyIsImV4aXN0cyIsIm1rZGlycCIsImluc3RhbGwiLCJvc0luZm8iLCJnZXRPc0luZm8iLCJjbGllbnQiLCJDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IiwibmFtZSIsInN5bmNEcml2ZXJzIiwidmVyc2lvbnMiLCJDRF9WRVIiLCJkb0luc3RhbGwiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvaW5zdGFsbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgbWtkaXJwIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgZnJvbSAnLi9zdG9yYWdlLWNsaWVudCc7XG5pbXBvcnQge1xuICBDRF9DRE4sIENEX1ZFUiwgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sIGdldENocm9tZWRyaXZlckRpcixcbn0gZnJvbSAnLi91dGlscyc7XG5cblxuY29uc3QgRE9XTkxPQURfVElNRU9VVF9NUyA9IDE1ICogMTAwMDtcbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ0xBVEVTVCc7XG5cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdENkVmVyc2lvbiAodmVyKSB7XG4gIHJldHVybiB2ZXIgPT09IExBVEVTVF9WRVJTSU9OXG4gICAgPyAoYXdhaXQgcmV0cmlldmVEYXRhKGAke0NEX0NETn0vTEFURVNUX1JFTEVBU0VgLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IERPV05MT0FEX1RJTUVPVVRfTVMgfSkpLnRyaW0oKVxuICAgIDogdmVyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQ2hyb21lZHJpdmVyRGlyIChwbGF0Zm9ybU5hbWUpIHtcbiAgY29uc3QgY2hyb21lZHJpdmVyRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKHBsYXRmb3JtTmFtZSk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGNocm9tZWRyaXZlckRpcikpIHtcbiAgICBhd2FpdCBta2RpcnAoY2hyb21lZHJpdmVyRGlyKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyRGlyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsICgpIHtcbiAgY29uc3Qgb3NJbmZvID0gYXdhaXQgZ2V0T3NJbmZvKCk7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50KHtcbiAgICBjaHJvbWVkcml2ZXJEaXI6IGF3YWl0IHByZXBhcmVDaHJvbWVkcml2ZXJEaXIob3NJbmZvLm5hbWUpLFxuICB9KTtcbiAgYXdhaXQgY2xpZW50LnN5bmNEcml2ZXJzKHtcbiAgICBvc0luZm8sXG4gICAgdmVyc2lvbnM6IFthd2FpdCBmb3JtYXRDZFZlcnNpb24oQ0RfVkVSKV0sXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb0luc3RhbGwgKCkge1xuICBhd2FpdCBpbnN0YWxsKCk7XG59XG5cbmV4cG9ydCB7IGluc3RhbGwsIGRvSW5zdGFsbCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFLQSxNQUFNQSxtQkFBbUIsR0FBRyxLQUFLLElBQWpDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLFFBQXZCOztBQUVBLGVBQWVDLGVBQWYsQ0FBZ0NDLEdBQWhDLEVBQXFDO0VBQ25DLE9BQU9BLEdBQUcsS0FBS0YsY0FBUixHQUNILENBQUMsTUFBTSxJQUFBRyxtQkFBQSxFQUFjLEdBQUVDLGFBQU8saUJBQXZCLEVBQXlDO0lBQ2hELGNBQWMsUUFEa0M7SUFFaERDLE1BQU0sRUFBRTtFQUZ3QyxDQUF6QyxFQUdOO0lBQUVDLE9BQU8sRUFBRVA7RUFBWCxDQUhNLENBQVAsRUFHb0NRLElBSHBDLEVBREcsR0FLSEwsR0FMSjtBQU1EOztBQUVELGVBQWVNLHNCQUFmLENBQXVDQyxZQUF2QyxFQUFxRDtFQUNuRCxNQUFNQyxlQUFlLEdBQUcsSUFBQUMseUJBQUEsRUFBbUJGLFlBQW5CLENBQXhCOztFQUNBLElBQUksRUFBQyxNQUFNRyxXQUFBLENBQUdDLE1BQUgsQ0FBVUgsZUFBVixDQUFQLENBQUosRUFBdUM7SUFDckMsTUFBTSxJQUFBSSxlQUFBLEVBQU9KLGVBQVAsQ0FBTjtFQUNEOztFQUNELE9BQU9BLGVBQVA7QUFDRDs7QUFFRCxlQUFlSyxPQUFmLEdBQTBCO0VBQ3hCLE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUFDLGdCQUFBLEdBQXJCO0VBQ0EsTUFBTUMsTUFBTSxHQUFHLElBQUlDLHNCQUFKLENBQThCO0lBQzNDVCxlQUFlLEVBQUUsTUFBTUYsc0JBQXNCLENBQUNRLE1BQU0sQ0FBQ0ksSUFBUjtFQURGLENBQTlCLENBQWY7RUFHQSxNQUFNRixNQUFNLENBQUNHLFdBQVAsQ0FBbUI7SUFDdkJMLE1BRHVCO0lBRXZCTSxRQUFRLEVBQUUsQ0FBQyxNQUFNckIsZUFBZSxDQUFDc0IsYUFBRCxDQUF0QjtFQUZhLENBQW5CLENBQU47QUFJRDs7QUFFRCxlQUFlQyxTQUFmLEdBQTRCO0VBQzFCLE1BQU1ULE9BQU8sRUFBYjtBQUNEIn0=
|
|
@@ -12,12 +12,12 @@ require("source-map-support/register");
|
|
|
12
12
|
|
|
13
13
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _driver = require("appium/driver");
|
|
16
16
|
|
|
17
17
|
const W3C_PREFIX = 'goog:';
|
|
18
18
|
|
|
19
19
|
function toW3cCapName(capName) {
|
|
20
|
-
return _lodash.default.isString(capName) && !capName.includes(':') && !(0,
|
|
20
|
+
return _lodash.default.isString(capName) && !capName.includes(':') && !(0, _driver.isStandardCap)(capName) ? `${W3C_PREFIX}${capName}` : capName;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
function getCapValue(allCaps = {}, rawCapName, defaultValue) {
|
|
@@ -38,4 +38,4 @@ function toW3cCapNames(originalCaps = {}) {
|
|
|
38
38
|
}require('source-map-support').install();
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Byb3RvY29sLWhlbHBlcnMuanMiLCJuYW1lcyI6WyJXM0NfUFJFRklYIiwidG9XM2NDYXBOYW1lIiwiY2FwTmFtZSIsIl8iLCJpc1N0cmluZyIsImluY2x1ZGVzIiwiaXNTdGFuZGFyZENhcCIsImdldENhcFZhbHVlIiwiYWxsQ2FwcyIsInJhd0NhcE5hbWUiLCJkZWZhdWx0VmFsdWUiLCJjYXBWYWx1ZSIsInRvUGFpcnMiLCJ0b1czY0NhcE5hbWVzIiwib3JpZ2luYWxDYXBzIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJrZXkiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvcHJvdG9jb2wtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgaXNTdGFuZGFyZENhcCB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBXM0NfUFJFRklYID0gJ2dvb2c6JztcblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lIChjYXBOYW1lKSB7XG4gIHJldHVybiAoXy5pc1N0cmluZyhjYXBOYW1lKSAmJiAhY2FwTmFtZS5pbmNsdWRlcygnOicpICYmICFpc1N0YW5kYXJkQ2FwKGNhcE5hbWUpKVxuICAgID8gYCR7VzNDX1BSRUZJWH0ke2NhcE5hbWV9YFxuICAgIDogY2FwTmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FwVmFsdWUgKGFsbENhcHMgPSB7fSwgcmF3Q2FwTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGZvciAoY29uc3QgW2NhcE5hbWUsIGNhcFZhbHVlXSBvZiBfLnRvUGFpcnMoYWxsQ2FwcykpIHtcbiAgICBpZiAodG9XM2NDYXBOYW1lKGNhcE5hbWUpID09PSB0b1czY0NhcE5hbWUocmF3Q2FwTmFtZSkpIHtcbiAgICAgIHJldHVybiBjYXBWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lcyAob3JpZ2luYWxDYXBzID0ge30pIHtcbiAgcmV0dXJuIF8ucmVkdWNlKG9yaWdpbmFsQ2FwcywgKGFjYywgdmFsdWUsIGtleSkgPT4ge1xuICAgIGFjY1t0b1czY0NhcE5hbWUoa2V5KV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBRyxPQUFuQjs7QUFFQSxTQUFTQyxZQUFULENBQXVCQyxPQUF2QixFQUFnQztFQUM5QixPQUFRQyxlQUFBLENBQUVDLFFBQUYsQ0FBV0YsT0FBWCxLQUF1QixDQUFDQSxPQUFPLENBQUNHLFFBQVIsQ0FBaUIsR0FBakIsQ0FBeEIsSUFBaUQsQ0FBQyxJQUFBQyxxQkFBQSxFQUFjSixPQUFkLENBQW5ELEdBQ0YsR0FBRUYsVUFBVyxHQUFFRSxPQUFRLEVBRHJCLEdBRUhBLE9BRko7QUFHRDs7QUFFRCxTQUFTSyxXQUFULENBQXNCQyxPQUFPLEdBQUcsRUFBaEMsRUFBb0NDLFVBQXBDLEVBQWdEQyxZQUFoRCxFQUE4RDtFQUM1RCxLQUFLLE1BQU0sQ0FBQ1IsT0FBRCxFQUFVUyxRQUFWLENBQVgsSUFBa0NSLGVBQUEsQ0FBRVMsT0FBRixDQUFVSixPQUFWLENBQWxDLEVBQXNEO0lBQ3BELElBQUlQLFlBQVksQ0FBQ0MsT0FBRCxDQUFaLEtBQTBCRCxZQUFZLENBQUNRLFVBQUQsQ0FBMUMsRUFBd0Q7TUFDdEQsT0FBT0UsUUFBUDtJQUNEO0VBQ0Y7O0VBQ0QsT0FBT0QsWUFBUDtBQUNEOztBQUVELFNBQVNHLGFBQVQsQ0FBd0JDLFlBQVksR0FBRyxFQUF2QyxFQUEyQztFQUN6QyxPQUFPWCxlQUFBLENBQUVZLE1BQUYsQ0FBU0QsWUFBVCxFQUF1QixDQUFDRSxHQUFELEVBQU1DLEtBQU4sRUFBYUMsR0FBYixLQUFxQjtJQUNqREYsR0FBRyxDQUFDZixZQUFZLENBQUNpQixHQUFELENBQWIsQ0FBSCxHQUF5QkQsS0FBekI7SUFDQSxPQUFPRCxHQUFQO0VBQ0QsQ0FITSxFQUdKLEVBSEksQ0FBUDtBQUlEIn0=
|
|
@@ -21,7 +21,7 @@ var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
|
21
21
|
|
|
22
22
|
var _path = _interopRequireDefault(require("path"));
|
|
23
23
|
|
|
24
|
-
var _support = require("
|
|
24
|
+
var _support = require("appium/support");
|
|
25
25
|
|
|
26
26
|
const TIMEOUT_MS = 15000;
|
|
27
27
|
const MAX_PARALLEL_DOWNLOADS = 5;
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3N0b3JhZ2UtY2xpZW50LmpzIiwibmFtZXMiOlsiVElNRU9VVF9NUyIsIk1BWF9QQVJBTExFTF9ET1dOTE9BRFMiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJpc0NyY09rIiwic3JjIiwiY2hlY2tzdW0iLCJtZDUiLCJmcyIsImhhc2giLCJfIiwidG9Mb3dlciIsImZpbmRDaGlsZE5vZGUiLCJwYXJlbnQiLCJjaGlsZE5hbWUiLCJ0ZXh0IiwiaGFzQ2hpbGROb2RlcyIsImNoaWxkTm9kZUlkeCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJjaGlsZE5vZGUiLCJsb2NhbE5hbWUiLCJjaGlsZFRleHQiLCJleHRyYWN0Tm9kZVRleHQiLCJub2RlIiwiZmlyc3RDaGlsZCIsInV0aWwiLCJoYXNWYWx1ZSIsIm5vZGVWYWx1ZSIsIkNocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJjaHJvbWVkcml2ZXJEaXIiLCJ0aW1lb3V0IiwibWFwcGluZyIsInBhcnNlTm90ZXMiLCJjb250ZW50IiwicmVzdWx0IiwidmVyc2lvbk1hdGNoIiwiZXhlYyIsInZlcnNpb24iLCJtaW5Ccm93c2VyVmVyc2lvbk1hdGNoIiwibWluQnJvd3NlclZlcnNpb24iLCJyZXRyaWV2ZUFkZGl0aW9uYWxEcml2ZXJJbmZvIiwiZHJpdmVyS2V5Iiwibm90ZXNVcmwiLCJpbmZvRGljdCIsIm5vdGVzIiwiYWNjZXB0IiwiZGVidWciLCJwYXJzZVN0b3JhZ2VYbWwiLCJkb2MiLCJzaG91bGRQYXJzZU5vdGVzIiwiZHJpdmVyTm9kZXMiLCJ4cGF0aCIsInNlbGVjdCIsImlzRW1wdHkiLCJwcm9taXNlcyIsImRyaXZlck5vZGUiLCJrZXkiLCJpbmNsdWRlcyIsImV0YWciLCJjZEluZm8iLCJ1cmwiLCJDRF9DRE4iLCJ0cmltIiwiZmlyc3QiLCJzcGxpdCIsIm5vdGVzUGF0aCIsImlzTm90ZXNQcmVzZW50IiwicmVkdWNlIiwiYWNjIiwiaW5mbyIsInB1c2giLCJCIiwiYWxsIiwic2l6ZSIsInJldHJpZXZlTWFwcGluZyIsInhtbCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImNsb25lRGVlcCIsInVuemlwRHJpdmVyIiwiZHN0IiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiY2hyb21lZHJpdmVyUGF0aCIsIndhbGtEaXIiLCJpdGVtUGF0aCIsImlzRGlyZWN0b3J5IiwicGF0aCIsInBhcnNlIiwibmFtZSIsIkVycm9yIiwiYmFzZW5hbWUiLCJtdiIsIm1rZGlycCIsInJpbXJhZiIsInNlbGVjdE1hdGNoaW5nRHJpdmVycyIsIm9zSW5mbyIsIm9wdHMiLCJ2ZXJzaW9ucyIsImRyaXZlcnNUb1N5bmMiLCJrZXlzIiwiZmlsdGVyIiwiY2ROYW1lIiwicGx1cmFsaXplIiwiaXNOYU4iLCJtaW5Ccm93c2VyVmVyc2lvbkludCIsInBhcnNlSW50IiwiY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIiwiY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uIiwidW5pcSIsIm1hcCIsImFyY2giLCJoYXJkd2FyZU5hbWUiLCJYNjQiLCJzb21lIiwiWDg2IiwiT1MiLCJtYWMiLCJNMV9BUkNIX1NVRkZJWCIsInBsYXRmb3JtUmUiLCJSZWdFeHAiLCJ0ZXN0IiwicmV0cmlldmVEcml2ZXIiLCJpbmRleCIsImFyY2hpdmVzUm9vdCIsImlzU3RyaWN0IiwiYXJjaGl2ZVBhdGgiLCJyZXNvbHZlIiwibmV0IiwiZG93bmxvYWRGaWxlIiwiaXNNZXRlcmVkIiwiZSIsIm1zZyIsIm1lc3NhZ2UiLCJlcnJvciIsImZpbGVOYW1lIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwidGFyZ2V0UGF0aCIsImNobW9kIiwic3luY0RyaXZlcnMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3luY2hyb25pemVkRHJpdmVycyIsImlkeCIsImVudHJpZXMiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvc3RvcmFnZS1jbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDRF9DRE4sIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLFxuICBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeHBhdGggZnJvbSAneHBhdGgnO1xuaW1wb3J0IHsgRE9NUGFyc2VyIH0gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHRlbXBEaXIsIHppcCwgdXRpbCwgbmV0IH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBUSU1FT1VUX01TID0gMTUwMDA7XG5jb25zdCBNQVhfUEFSQUxMRUxfRE9XTkxPQURTID0gNTtcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCcpO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIGlzQ3JjT2sgKHNyYywgY2hlY2tzdW0pIHtcbiAgY29uc3QgbWQ1ID0gYXdhaXQgZnMuaGFzaChzcmMsICdtZDUnKTtcbiAgcmV0dXJuIF8udG9Mb3dlcihtZDUpID09PSBfLnRvTG93ZXIoY2hlY2tzdW0pO1xufVxuXG5mdW5jdGlvbiBmaW5kQ2hpbGROb2RlIChwYXJlbnQsIGNoaWxkTmFtZSA9IG51bGwsIHRleHQgPSBudWxsKSB7XG4gIGlmICghY2hpbGROYW1lICYmICF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFwYXJlbnQuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKGxldCBjaGlsZE5vZGVJZHggPSAwOyBjaGlsZE5vZGVJZHggPCBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGNoaWxkTm9kZUlkeCsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gcGFyZW50LmNoaWxkTm9kZXNbY2hpbGROb2RlSWR4XTtcbiAgICBpZiAoY2hpbGROYW1lICYmICF0ZXh0ICYmIGNoaWxkTmFtZSA9PT0gY2hpbGROb2RlLmxvY2FsTmFtZSkge1xuICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICB9XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IGNoaWxkVGV4dCA9IGV4dHJhY3ROb2RlVGV4dChjaGlsZE5vZGUpO1xuICAgICAgaWYgKCFjaGlsZFRleHQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGROYW1lICYmIGNoaWxkTmFtZSA9PT0gY2hpbGROb2RlLmxvY2FsTmFtZSAmJiB0ZXh0ID09PSBjaGlsZFRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICghY2hpbGROYW1lICYmIHRleHQgPT09IGNoaWxkVGV4dCkge1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdE5vZGVUZXh0IChub2RlKSB7XG4gIHJldHVybiAoIW5vZGUgfHwgIW5vZGUuZmlyc3RDaGlsZCB8fCAhdXRpbC5oYXNWYWx1ZShub2RlLmZpcnN0Q2hpbGQubm9kZVZhbHVlKSlcbiAgICA/IG51bGxcbiAgICA6IG5vZGUuZmlyc3RDaGlsZC5ub2RlVmFsdWU7XG59XG5cblxuY2xhc3MgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChhcmdzID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBjaHJvbWVkcml2ZXJEaXIgPSBnZXRDaHJvbWVkcml2ZXJEaXIoKSxcbiAgICAgIHRpbWVvdXQgPSBUSU1FT1VUX01TLFxuICAgIH0gPSBhcmdzO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyRGlyID0gY2hyb21lZHJpdmVyRGlyO1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5tYXBwaW5nID0ge307XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gQWRkaXRpb25hbERyaXZlckRldGFpbHNcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSB2ZXJzaW9uIC0gQ2hyb21lZHJpdmVyIHZlcnNpb25cbiAgICogb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbkJyb3dzZXJWZXJzaW9uIC0gVGhlIG1pbmltdW0gYnJvd3NlciB2ZXJzaW9uXG4gICAqIHN1cHBvcnRlZCBieSBjaHJvbWVkcml2ZXIgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICAgKi9cblxuICAvKipcbiAgICogR2V0cyBhZGRpdGlvbmFsIGNocm9tZWRyaXZlciBkZXRhaWxzIGZyb20gY2hyb21lZHJpdmVyXG4gICAqIHJlbGVhc2Ugbm90ZXNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBSZWxlYXNlIG5vdGVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNocm9tZWRyaXZlclxuICAgKiBAcmV0dXJucyB7QWRkaXRpb25hbERyaXZlckRldGFpbHN9XG4gICAqL1xuICBwYXJzZU5vdGVzIChjb250ZW50KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gL15cXHMqWy1dK0Nocm9tZURyaXZlcltcXERdKyhbXFxkLl0rKS9pbS5leGVjKGNvbnRlbnQpO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIHJlc3VsdC52ZXJzaW9uID0gdmVyc2lvbk1hdGNoWzFdO1xuICAgIH1cbiAgICBjb25zdCBtaW5Ccm93c2VyVmVyc2lvbk1hdGNoID0gL15cXHMqU3VwcG9ydHMgQ2hyb21lW1xcRF0rKFxcZCspL2ltLmV4ZWMoY29udGVudCk7XG4gICAgaWYgKG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2gpIHtcbiAgICAgIHJlc3VsdC5taW5Ccm93c2VyVmVyc2lvbiA9IG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2hbMV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWRzIGNocm9tZWRyaXZlciByZWxlYXNlIG5vdGVzIGFuZCBwdXRzIHRoZW1cbiAgICogaW50byB0aGUgZGljdGlvbmFyeSBhcmd1bWVudFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHJpdmVyS2V5IC0gRHJpdmVyIHZlcnNpb24gcGx1cyBhcmNoaXZlIG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5vdGVzVXJsIC0gVGhlIFVSTCBvZiBjaHJvbWVkcml2ZXIgbm90ZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IGluZm9EaWN0IC0gVGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyBkcml2ZXIgaW5mby5cbiAgICogVGhlIG1ldGhvZCBjYWxsIG11dGF0ZXMgYnkgbWVyZ2luZyBgQWRkaXRpb25hbERyaXZlckRldGFpbHNgXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgcmVsZWFzZSBub3RlcyBjYW5ub3QgYmUgZG93bmxvYWRlZFxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVBZGRpdGlvbmFsRHJpdmVySW5mbyAoZHJpdmVyS2V5LCBub3Rlc1VybCwgaW5mb0RpY3QpIHtcbiAgICBjb25zdCBub3RlcyA9IGF3YWl0IHJldHJpZXZlRGF0YShub3Rlc1VybCwge1xuICAgICAgJ3VzZXItYWdlbnQnOiAnYXBwaXVtJyxcbiAgICAgIGFjY2VwdDogJyovKicsXG4gICAgfSwgeyB0aW1lb3V0OiB0aGlzLnRpbWVvdXQgfSk7XG4gICAgY29uc3QgeyBtaW5Ccm93c2VyVmVyc2lvbiB9ID0gdGhpcy5wYXJzZU5vdGVzKG5vdGVzKTtcbiAgICBpZiAoIW1pbkJyb3dzZXJWZXJzaW9uKSB7XG4gICAgICBsb2cuZGVidWcoYFRoZSBkcml2ZXIgJyR7ZHJpdmVyS2V5fScgZG9lcyBub3QgY29udGFpbiB2YWxpZCByZWxlYXNlIG5vdGVzIGF0ICR7bm90ZXNVcmx9LiBgICtcbiAgICAgICAgYFNraXBwaW5nIGl0YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluZm9EaWN0Lm1pbkJyb3dzZXJWZXJzaW9uID0gbWluQnJvd3NlclZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGNocm9tZWRyaXZlciBzdG9yYWdlIFhNTCBhbmQgc3RvcmVzXG4gICAqIHRoZSBwYXJzZWQgcmVzdWx0cyBpbnRvIGB0aGlzLm1hcHBpbmdgXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRG9jdW1lbnR9IGRvYyAtIFRoZSBET00gcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIGNocm9tZWRyaXZlciBzdG9yYWdlIFhNTFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFBhcnNlTm90ZXMgW3RydWVdIC0gSWYgc2V0IHRvIGB0cnVlYFxuICAgKiB0aGVuIGFkZGl0aW9uYWwgZHJpdmVycyBpbmZvcm1hdGlvbiBpcyBnb2luZyB0byBiZSBwYXJzZWRcbiAgICogYW5kIGFzc2lnbmVkIHRvIGB0aGlzLm1hcHBpbmdgXG4gICAqL1xuICBhc3luYyBwYXJzZVN0b3JhZ2VYbWwgKGRvYywgc2hvdWxkUGFyc2VOb3RlcyA9IHRydWUpIHtcbiAgICBjb25zdCBkcml2ZXJOb2RlcyA9IHhwYXRoLnNlbGVjdChgLy8qW2xvY2FsLW5hbWUoLik9J0NvbnRlbnRzJ11gLCBkb2MpO1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkICR7ZHJpdmVyTm9kZXMubGVuZ3RofSBlbnRyaWVzIGZyb20gc3RvcmFnZSBYTUxgKTtcbiAgICBpZiAoXy5pc0VtcHR5KGRyaXZlck5vZGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgZm9yIChjb25zdCBkcml2ZXJOb2RlIG9mIGRyaXZlck5vZGVzKSB7XG4gICAgICBjb25zdCBrZXkgPSBleHRyYWN0Tm9kZVRleHQoZmluZENoaWxkTm9kZShkcml2ZXJOb2RlLCAnS2V5JykpO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKGtleSwgJy9jaHJvbWVkcml2ZXJfJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV0YWcgPSBleHRyYWN0Tm9kZVRleHQoZmluZENoaWxkTm9kZShkcml2ZXJOb2RlLCAnRVRhZycpKTtcbiAgICAgIGlmICghZXRhZykge1xuICAgICAgICBsb2cuZGVidWcoYFRoZSBlbnRyeSAnJHtrZXl9JyBkb2VzIG5vdCBjb250YWluIHRoZSBjaGVja3N1bS4gU2tpcHBpbmcgaXRgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNkSW5mbyA9IHtcbiAgICAgICAgdXJsOiBgJHtDRF9DRE59LyR7a2V5fWAsXG4gICAgICAgIGV0YWc6IF8udHJpbShldGFnLCAnXCInKSxcbiAgICAgICAgdmVyc2lvbjogXy5maXJzdChrZXkuc3BsaXQoJy8nKSksXG4gICAgICB9O1xuICAgICAgdGhpcy5tYXBwaW5nW2tleV0gPSBjZEluZm87XG5cbiAgICAgIGNvbnN0IG5vdGVzUGF0aCA9IGAke2NkSW5mby52ZXJzaW9ufS9ub3Rlcy50eHRgO1xuICAgICAgY29uc3QgaXNOb3Rlc1ByZXNlbnQgPSAhIWRyaXZlck5vZGVzXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgbm9kZSkgPT4gYWNjIHx8IGZpbmRDaGlsZE5vZGUobm9kZSwgJ0tleScsIG5vdGVzUGF0aCksIGZhbHNlKTtcbiAgICAgIGlmICghaXNOb3Rlc1ByZXNlbnQpIHtcbiAgICAgICAgY2RJbmZvLm1pbkJyb3dzZXJWZXJzaW9uID0gbnVsbDtcbiAgICAgICAgaWYgKHNob3VsZFBhcnNlTm90ZXMpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgVGhlIGVudHJ5ICcke2tleX0nIGRvZXMgbm90IGNvbnRhaW4gYW55IG5vdGVzLiBTa2lwcGluZyBpdGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmICghc2hvdWxkUGFyc2VOb3Rlcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8oa2V5LCBgJHtDRF9DRE59LyR7bm90ZXNQYXRofWAsIGNkSW5mbykpO1xuICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCAlIE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPT09IDApIHtcbiAgICAgICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgbG9nLmluZm8oYFRoZSB0b3RhbCBjb3VudCBvZiBlbnRyaWVzIGluIHRoZSBtYXBwaW5nOiAke18uc2l6ZSh0aGlzLm1hcHBpbmcpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IERyaXZlckRldGFpbHNcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHVybCAtIFRoZSBmdWxsIHVybCB0byB0aGUgY29ycmVzcG9uZGluZyBkcml2ZXIgaW5cbiAgICogdGhlIHJlbW90ZSBzdG9yYWdlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBldGFnIC0gVGhlIENSQyBvZiB0aGUgZHJpdmVyIGFyY2hpdmVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24gLSBDaHJvbWVkcml2ZXIgdmVyc2lvblxuICAgKi9cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gQ2hyb21lZHJpdmVyc01hcHBpbmdcbiAgICogQHByb3BlcnR5IHtEcml2ZXJEZXRhaWxzfSAtIFRoZSBrZXlzIGFyZSB1bmlxdWUgZHJpdmVyIGlkZW50aWZpZXJzXG4gICAqICh2ZXJzaW9uL2FyY2hpdmUgbmFtZSkuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBoYXZlIGBEcml2ZXJEZXRhaWxzYFxuICAgKiBjb250YWluaW5nIGNocm9tZWRyaXZlciBkZXRhaWxzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgY2hyb21lZHJpdmVyIG1hcHBpbmcgZnJvbSB0aGUgc3RvcmFnZVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFBhcnNlTm90ZXMgW3RydWVdIC0gaWYgc2V0IHRvIGB0cnVlYFxuICAgKiB0aGVuIGFkZGl0aW9uYWwgY2hyb21lZHJpdmVycyBpbmZvIGlzIGdvaW5nIHRvIGJlIHJldHJpZXZlZCBhbmRcbiAgICogcGFyc2VkIGZyb20gcmVsZWFzZSBub3Rlc1xuICAgKiBAcmV0dXJucyB7Q2hyb21lZHJpdmVyc01hcHBpbmd9XG4gICAqL1xuICBhc3luYyByZXRyaWV2ZU1hcHBpbmcgKHNob3VsZFBhcnNlTm90ZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgeG1sID0gYXdhaXQgcmV0cmlldmVEYXRhKENEX0NETiwge1xuICAgICAgJ3VzZXItYWdlbnQnOiAnYXBwaXVtJyxcbiAgICAgIGFjY2VwdDogJ2FwcGxpY2F0aW9uL3htbCwgKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IHRoaXMudGltZW91dCB9KTtcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHhtbCk7XG4gICAgYXdhaXQgdGhpcy5wYXJzZVN0b3JhZ2VYbWwoZG9jLCBzaG91bGRQYXJzZU5vdGVzKTtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodGhpcy5tYXBwaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBkb3dubG9hZGVkIGNocm9tZWRyaXZlciBhcmNoaXZlXG4gICAqIGludG8gdGhlIGdpdmVuIGRlc3RpbmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgLSBUaGUgc291cmNlIGFyY2hpdmUgcGF0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHN0IC0gVGhlIGRlc3RpbmF0aW9uIGNocm9tZWRyaXZlciBwYXRoXG4gICAqL1xuICBhc3luYyB1bnppcERyaXZlciAoc3JjLCBkc3QpIHtcbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oc3JjLCB0bXBSb290KTtcbiAgICAgIGNvbnN0IGNocm9tZWRyaXZlclBhdGggPSBhd2FpdCBmcy53YWxrRGlyKHRtcFJvb3QsIHRydWUsIChpdGVtUGF0aCwgaXNEaXJlY3RvcnkpID0+XG4gICAgICAgICFpc0RpcmVjdG9yeSAmJiBfLnRvTG93ZXIocGF0aC5wYXJzZShpdGVtUGF0aCkubmFtZSkgPT09ICdjaHJvbWVkcml2ZXInKTtcbiAgICAgIGlmICghY2hyb21lZHJpdmVyUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmNoaXZlIHdhcyB1bnppcHBlZCBwcm9wZXJseSwgYnV0IHdlIGNvdWxkIG5vdCBmaW5kIGFueSBjaHJvbWVkcml2ZXIgZXhlY3V0YWJsZScpO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBNb3ZpbmcgdGhlIGV4dHJhY3RlZCAnJHtwYXRoLmJhc2VuYW1lKGNocm9tZWRyaXZlclBhdGgpfScgdG8gJyR7ZHN0fSdgKTtcbiAgICAgIGF3YWl0IGZzLm12KGNocm9tZWRyaXZlclBhdGgsIGRzdCwge1xuICAgICAgICBta2RpcnA6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IE9TSW5mb1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBob3N0IE9TXG4gICAqIENhbiBiZSBlaXRoZXIgYG1hY2AsIGB3aW5kb3dzYCBvciBgbGludXhgXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgaG9zdCBPRC5cbiAgICogQ2FuIGJlIGVpdGhlciBgMzJgIG9yIGA2NGBcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSBoYXJkd2FyZU5hbWUgLSBUaGUgb3V0cHV0IG9mIGB1bmFtZSAtbWAgY29tbWFuZFxuICAgKiBvbiBsaW51eCBhbmQgbWFjIHN5c3RlbXMuIGBudWxsYCBvbiBXaW5kb3dzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGB0aGlzLm1hcHBpbmdgIHRvIG9ubHkgc2VsZWN0IG1hdGNoaW5nXG4gICAqIGNocm9tZWRyaXZlciBlbnRyaWVzIGJ5IG9wZXJhdGluZyBzeXN0ZW0gaW5mb3JtYXRpb25cbiAgICogYW5kL29yIGFkZGl0aW9uYWwgc3luY2hyb25pemF0aW9uIG9wdGlvbnMgKGlmIHByb3ZpZGVkKVxuICAgKlxuICAgKiBAcGFyYW0gez9PU0luZm99IG9zSW5mb1xuICAgKiBAcGFyYW0gez9TeW5jT3B0aW9uc30gb3B0c1xuICAgKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGxpc3Qgb2YgZmlsdGVyZWQgY2hyb21lZHJpdmVyXG4gICAqIGVudHJ5IG5hbWVzICh2ZXJzaW9uL2FyY2hpdmUgbmFtZSlcbiAgICovXG4gIHNlbGVjdE1hdGNoaW5nRHJpdmVycyAob3NJbmZvLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBtaW5Ccm93c2VyVmVyc2lvbixcbiAgICAgIHZlcnNpb25zID0gW10sXG4gICAgfSA9IG9wdHM7XG4gICAgbGV0IGRyaXZlcnNUb1N5bmMgPSBfLmtleXModGhpcy5tYXBwaW5nKTtcblxuICAgIGlmICghXy5pc0VtcHR5KHZlcnNpb25zKSkge1xuICAgICAgLy8gSGFuZGxlIG9ubHkgc2VsZWN0ZWQgdmVyc2lvbnMgaWYgcmVxdWVzdGVkXG4gICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBjaHJvbWVkcml2ZXJzIHdob3NlIHZlcnNpb25zIG1hdGNoIHRvICR7dmVyc2lvbnN9YCk7XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luY1xuICAgICAgICAuZmlsdGVyKChjZE5hbWUpID0+IHZlcnNpb25zLmluY2x1ZGVzKGAke3RoaXMubWFwcGluZ1tjZE5hbWVdLnZlcnNpb259YCkpO1xuXG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc05hTihtaW5Ccm93c2VyVmVyc2lvbikpIHtcbiAgICAgIC8vIE9ubHkgc2VsZWN0IGRyaXZlcnMgdGhhdCBzdXBwb3J0IHRoZSBjdXJyZW50IGJyb3dzZXIgd2hvc2UgbWFqb3IgdmVyc2lvbiBudW1iZXIgZXF1YWxzIHRvIGBtaW5Ccm93c2VyVmVyc2lvbmBcbiAgICAgIGNvbnN0IG1pbkJyb3dzZXJWZXJzaW9uSW50ID0gcGFyc2VJbnQobWluQnJvd3NlclZlcnNpb24sIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgbWluaW11bSBzdXBwb3J0ZWQgYnJvd3NlciB2ZXJzaW9uIG1hdGNoZXMgdG8gJHttaW5Ccm93c2VyVmVyc2lvbkludH1gKTtcbiAgICAgIGxldCBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPSAwO1xuICAgICAgLy8gU2VsZWN0IHRoZSBuZXdlc3QgYXZhaWxhYmxlIGFuZCBjb21wYXRpYmxlIGNocm9tZWRyaXZlclxuICAgICAgZm9yIChjb25zdCBjZE5hbWUgb2YgZHJpdmVyc1RvU3luYykge1xuICAgICAgICBjb25zdCBjdXJyZW50TWluQnJvd3NlclZlcnNpb24gPSBwYXJzZUludCh0aGlzLm1hcHBpbmdbY2ROYW1lXS5taW5Ccm93c2VyVmVyc2lvbiwgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbilcbiAgICAgICAgICAgICYmIGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbiA8PSBtaW5Ccm93c2VyVmVyc2lvbkludFxuICAgICAgICAgICAgJiYgY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIDwgY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyID0gY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luYy5maWx0ZXIoKGNkTmFtZSkgPT4gYCR7dGhpcy5tYXBwaW5nW2NkTmFtZV0ubWluQnJvd3NlclZlcnNpb259YCA9PT1cbiAgICAgICAgYCR7Y2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyID4gMCA/IGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA6IG1pbkJyb3dzZXJWZXJzaW9uSW50fWApO1xuXG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYFdpbGwgc2VsZWN0IGNhbmRpZGF0ZSAke3V0aWwucGx1cmFsaXplKCdkcml2ZXInLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCl9IGAgK1xuICAgICAgICBgdmVyc2lvbmVkIGFzICcke18udW5pcShkcml2ZXJzVG9TeW5jLm1hcCgoY2ROYW1lKSA9PiB0aGlzLm1hcHBpbmdbY2ROYW1lXS52ZXJzaW9uKSl9J2ApO1xuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KG9zSW5mbykpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgZHJpdmVycyBmb3IgdW5zdXBwb3J0ZWQgc3lzdGVtIGFyY2hpdGVjdHVyZXNcbiAgICAgIGxldCB7bmFtZSwgYXJjaCwgaGFyZHdhcmVOYW1lfSA9IG9zSW5mbztcbiAgICAgIGlmIChhcmNoID09PSBYNjQgJiYgIWRyaXZlcnNUb1N5bmMuc29tZSgoY2ROYW1lKSA9PiBjZE5hbWUuaW5jbHVkZXMoYF8ke25hbWV9JHtYNjR9YCkpKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byB4ODYgYnVpbGQgaWYgeDY0IG9uZSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gT1NcbiAgICAgICAgYXJjaCA9IFg4NjtcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lID09PSBPUy5tYWMgJiYgXy5pbmNsdWRlcyhoYXJkd2FyZU5hbWUsICdhcm0nKVxuICAgICAgICAgICYmIGRyaXZlcnNUb1N5bmMuc29tZSgoY2ROYW1lKSA9PiBjZE5hbWUuaW5jbHVkZXMoTTFfQVJDSF9TVUZGSVgpKSkge1xuICAgICAgICAvLyBwcmVmZXIgZXhlY3V0YWJsZSBmb3IgTTEgYXJjaCBpZiBwcmVzZW50XG4gICAgICAgIGFyY2ggKz0gTTFfQVJDSF9TVUZGSVg7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBjaHJvbWVkcml2ZXJzIHdob3NlIHBsYXRmb3JtIG1hdGNoZXMgdG8gJHtuYW1lfSR7YXJjaH1gKTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtUmUgPSBuZXcgUmVnRXhwKGAoXFxcXGJ8Xykke25hbWV9JHthcmNofVxcXFxiYCk7XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luYy5maWx0ZXIoKGNkTmFtZSkgPT4gcGxhdGZvcm1SZS50ZXN0KGNkTmFtZSkpO1xuICAgICAgbG9nLmRlYnVnKGBHb3QgJHt1dGlsLnBsdXJhbGl6ZSgnaXRlbScsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZHJpdmVyc1RvU3luYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGdpdmVuIGNocm9tZWRyaXZlciBmcm9tIHRoZSBzdG9yYWdlXG4gICAqIGFuZCB1bnBhY2tzIGl0IGludG8gYHRoaXMuY2hyb21lZHJpdmVyRGlyYCBmb2xkZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIHVuaXF1ZSBkcml2ZXIgaW5kZXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRyaXZlcktleSAtIFRoZSBkcml2ZXIga2V5IGluIGB0aGlzLm1hcHBpbmdgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmNoaXZlc1Jvb3QgLSBUaGUgdGVtcG9yYXJ5IGZvbGRlciBwYXRoIHRvIGV4dHJhY3RcbiAgICogZG93bmxvYWRlZCBhcmNoaXZlcyB0b1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzU3RyaWN0IFt0cnVlXSAtIFdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgKGB0cnVlYClcbiAgICogb3IgcmV0dXJuIGEgYm9vbGVhbiByZXN1bHQgaWYgdGhlIGRyaXZlciByZXRyaWV2YWwgcHJvY2VzcyBmYWlsc1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSByZXRyaWV2aW5nIHRoZSBkcml2ZXJcbiAgICogYW5kIGBpc1N0cmljdGAgaXMgc2V0IHRvIGB0cnVlYFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgYHRydWVgIHRoZW4gdGhlIGNocm9tZWRyaXZlciBpcyBzdWNjZXNzZnVsbHlcbiAgICogZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkLlxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVEcml2ZXIgKGluZGV4LCBkcml2ZXJLZXksIGFyY2hpdmVzUm9vdCwgaXNTdHJpY3QgPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgdXJsLCBldGFnLCB2ZXJzaW9uIH0gPSB0aGlzLm1hcHBpbmdbZHJpdmVyS2V5XTtcbiAgICBjb25zdCBhcmNoaXZlUGF0aCA9IHBhdGgucmVzb2x2ZShhcmNoaXZlc1Jvb3QsIGAke2luZGV4fS56aXBgKTtcbiAgICBsb2cuZGVidWcoYFJldHJpZXZpbmcgJyR7dXJsfScgdG8gJyR7YXJjaGl2ZVBhdGh9J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXQuZG93bmxvYWRGaWxlKHVybCwgYXJjaGl2ZVBhdGgsIHtcbiAgICAgICAgaXNNZXRlcmVkOiBmYWxzZSxcbiAgICAgICAgdGltZW91dDogVElNRU9VVF9NU1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gYENhbm5vdCBkb3dubG9hZCBjaHJvbWVkcml2ZXIgYXJjaGl2ZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWA7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFhd2FpdCBpc0NyY09rKGFyY2hpdmVQYXRoLCBldGFnKSkge1xuICAgICAgY29uc3QgbXNnID0gYFRoZSBjaGVja3N1bSBmb3IgdGhlIGRvd25sb2FkZWQgY2hyb21lZHJpdmVyICcke2RyaXZlcktleX0nIGRpZCBub3QgbWF0Y2hgO1xuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7cGF0aC5wYXJzZSh1cmwpLm5hbWV9X3Yke3ZlcnNpb259YCArXG4gICAgICAoc3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJycpO1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5jaHJvbWVkcml2ZXJEaXIsIGZpbGVOYW1lKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51bnppcERyaXZlcihhcmNoaXZlUGF0aCwgdGFyZ2V0UGF0aCk7XG4gICAgICBhd2FpdCBmcy5jaG1vZCh0YXJnZXRQYXRoLCAwbzc1NSk7XG4gICAgICBsb2cuZGVidWcoYFBlcm1pc3Npb25zIG9mIHRoZSBmaWxlICcke3RhcmdldFBhdGh9JyBoYXZlIGJlZW4gY2hhbmdlZCB0byA3NTVgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBTeW5jT3B0aW9uc1xuICAgKiBAcHJvcGVydHkge0FycmF5PFN0cmluZz59IHZlcnNpb25zIC0gVGhlIGxpc3Qgb2YgY2hyb21lZHJpdmVyXG4gICAqIHZlcnNpb25zIHRvIHN5bmMuIElmIGVtcHR5ICh0aGUgZGVmYXVsdCB2YWx1ZSkgdGhlbiBhbGwgYXZhaWxhYmxlXG4gICAqIGNocm9tZWRyaXZlcnMgYXJlIGdvaW5nIHRvIGJlIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZFxuICAgKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IG1pbkJyb3dzZXJWZXJzaW9uIC0gVGhlIG1pbnVtdW0gc3VwcG9ydGVkXG4gICAqIENocm9tZSB2ZXJzaW9uIHRoYXQgZG93bmxvYWRlZCBjaHJvbWVkcml2ZXJzIHNob3VsZCBzdXBwb3J0LiBDYW4gbWF0Y2hcbiAgICogbXVsdGlwbGUgZHJpdmVycy5cbiAgICogQHByb3BlcnR5IHs/T1NJbmZvfSBvc0luZm8gLSBTeXN0ZW0gaW5mb3JtYXRpb24gdXNlZCB0byBmaWx0ZXIgb3V0XG4gICAqIHRoZSBsaXN0IG9mIHRoZSByZXRyaWV2ZWQgZHJpdmVycy4gSWYgbm90IHByb3ZpZGVkIHRoZW4gdGhlIHNjcmlwdFxuICAgKiB3aWxsIHRyeSB0byByZXRyaWV2ZSBpdC5cbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBjaHJvbWVkcml2ZXJzIGZyb20gdGhlIHJlbW90ZSBzdG9yYWdlXG4gICAqIHRvIHRoZSBsb2NhbCBmaWxlIHN5c3RlbVxuICAgKlxuICAgKiBAcGFyYW0gez9TeW5jT3B0aW9uc30gb3B0c1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aGlsZSByZXRyaWV2aW5nXG4gICAqIHRoZSBkcml2ZXJzXG4gICAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmd9IFRoZSBsaXN0IG9mIHN1Y2Nlc3NmdWxseSBzeW5jaHJvbml6ZWQgZHJpdmVyIGtleXNcbiAgICovXG4gIGFzeW5jIHN5bmNEcml2ZXJzIChvcHRzID0ge30pIHtcbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMubWFwcGluZykpIHtcbiAgICAgIGF3YWl0IHRoaXMucmV0cmlldmVNYXBwaW5nKCEhb3B0cy5taW5Ccm93c2VyVmVyc2lvbik7XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkodGhpcy5tYXBwaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcmV0cmlldmUgY2hyb21lZHJpdmVycyBtYXBwaW5nIGZyb20gR29vZ2xlIHN0b3JhZ2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkcml2ZXJzVG9TeW5jID0gdGhpcy5zZWxlY3RNYXRjaGluZ0RyaXZlcnMob3B0cy5vc0luZm8gPz8gYXdhaXQgZ2V0T3NJbmZvKCksIG9wdHMpO1xuICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyc1RvU3luYykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlcmUgYXJlIG5vIGRyaXZlcnMgdG8gc3luYy4gRXhpdGluZ2ApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdkcml2ZXInLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9IHRvIHN5bmM6IGAgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoZHJpdmVyc1RvU3luYywgbnVsbCwgMikpO1xuXG4gICAgY29uc3Qgc3luY2hyb25pemVkRHJpdmVycyA9IFtdO1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgY29uc3QgYXJjaGl2ZXNSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgW2lkeCwgZHJpdmVyS2V5XSBvZiBkcml2ZXJzVG9TeW5jLmVudHJpZXMoKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKGF3YWl0IHRoaXMucmV0cmlldmVEcml2ZXIoaWR4LCBkcml2ZXJLZXksIGFyY2hpdmVzUm9vdCwgIV8uaXNFbXB0eShvcHRzKSkpIHtcbiAgICAgICAgICAgIHN5bmNocm9uaXplZERyaXZlcnMucHVzaChkcml2ZXJLZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKSk7XG5cbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCAlIE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPT09IDApIHtcbiAgICAgICAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKGFyY2hpdmVzUm9vdCk7XG4gICAgfVxuICAgIGlmICghXy5pc0VtcHR5KHN5bmNocm9uaXplZERyaXZlcnMpKSB7XG4gICAgICBsb2cuaW5mbyhgU3VjY2Vzc2Z1bGx5IHN5bmNocm9uaXplZCBgICtcbiAgICAgICAgYCR7dXRpbC5wbHVyYWxpemUoJ2Nocm9tZWRyaXZlcicsIHN5bmNocm9uaXplZERyaXZlcnMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oYE5vIGNocm9tZWRyaXZlcnMgd2VyZSBzeW5jaHJvbml6ZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN5bmNocm9uaXplZERyaXZlcnM7XG4gIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFVBQVUsR0FBRyxLQUFuQjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLENBQS9COztBQUVBLE1BQU1DLEdBQUcsR0FBR0MsZ0JBQU9DLFNBQVAsQ0FBaUIsMkJBQWpCLENBQVo7O0FBR0EsZUFBZUMsT0FBZixDQUF3QkMsR0FBeEIsRUFBNkJDLFFBQTdCLEVBQXVDO0VBQ3JDLE1BQU1DLEdBQUcsR0FBRyxNQUFNQyxZQUFHQyxJQUFILENBQVFKLEdBQVIsRUFBYSxLQUFiLENBQWxCO0VBQ0EsT0FBT0ssZ0JBQUVDLE9BQUYsQ0FBVUosR0FBVixNQUFtQkcsZ0JBQUVDLE9BQUYsQ0FBVUwsUUFBVixDQUExQjtBQUNEOztBQUVELFNBQVNNLGFBQVQsQ0FBd0JDLE1BQXhCLEVBQWdDQyxTQUFTLEdBQUcsSUFBNUMsRUFBa0RDLElBQUksR0FBRyxJQUF6RCxFQUErRDtFQUM3RCxJQUFJLENBQUNELFNBQUQsSUFBYyxDQUFDQyxJQUFuQixFQUF5QjtJQUN2QixPQUFPLElBQVA7RUFDRDs7RUFDRCxJQUFJLENBQUNGLE1BQU0sQ0FBQ0csYUFBUCxFQUFMLEVBQTZCO0lBQzNCLE9BQU8sSUFBUDtFQUNEOztFQUVELEtBQUssSUFBSUMsWUFBWSxHQUFHLENBQXhCLEVBQTJCQSxZQUFZLEdBQUdKLE1BQU0sQ0FBQ0ssVUFBUCxDQUFrQkMsTUFBNUQsRUFBb0VGLFlBQVksRUFBaEYsRUFBb0Y7SUFDbEYsTUFBTUcsU0FBUyxHQUFHUCxNQUFNLENBQUNLLFVBQVAsQ0FBa0JELFlBQWxCLENBQWxCOztJQUNBLElBQUlILFNBQVMsSUFBSSxDQUFDQyxJQUFkLElBQXNCRCxTQUFTLEtBQUtNLFNBQVMsQ0FBQ0MsU0FBbEQsRUFBNkQ7TUFDM0QsT0FBT0QsU0FBUDtJQUNEOztJQUNELElBQUlMLElBQUosRUFBVTtNQUNSLE1BQU1PLFNBQVMsR0FBR0MsZUFBZSxDQUFDSCxTQUFELENBQWpDOztNQUNBLElBQUksQ0FBQ0UsU0FBTCxFQUFnQjtRQUNkO01BQ0Q7O01BQ0QsSUFBSVIsU0FBUyxJQUFJQSxTQUFTLEtBQUtNLFNBQVMsQ0FBQ0MsU0FBckMsSUFBa0ROLElBQUksS0FBS08sU0FBL0QsRUFBMEU7UUFDeEUsT0FBT0YsU0FBUDtNQUNEOztNQUNELElBQUksQ0FBQ04sU0FBRCxJQUFjQyxJQUFJLEtBQUtPLFNBQTNCLEVBQXNDO1FBQ3BDLE9BQU9GLFNBQVA7TUFDRDtJQUNGO0VBQ0Y7O0VBQ0QsT0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBU0csZUFBVCxDQUEwQkMsSUFBMUIsRUFBZ0M7RUFDOUIsT0FBUSxDQUFDQSxJQUFELElBQVMsQ0FBQ0EsSUFBSSxDQUFDQyxVQUFmLElBQTZCLENBQUNDLGNBQUtDLFFBQUwsQ0FBY0gsSUFBSSxDQUFDQyxVQUFMLENBQWdCRyxTQUE5QixDQUEvQixHQUNILElBREcsR0FFSEosSUFBSSxDQUFDQyxVQUFMLENBQWdCRyxTQUZwQjtBQUdEOztBQUdELE1BQU1DLHlCQUFOLENBQWdDO0VBQzlCQyxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7SUFDdEIsTUFBTTtNQUNKQyxlQUFlLEdBQUcsZ0NBRGQ7TUFFSkMsT0FBTyxHQUFHbEM7SUFGTixJQUdGZ0MsSUFISjtJQUlBLEtBQUtDLGVBQUwsR0FBdUJBLGVBQXZCO0lBQ0EsS0FBS0MsT0FBTCxHQUFlQSxPQUFmO0lBQ0EsS0FBS0MsT0FBTCxHQUFlLEVBQWY7RUFDRDs7RUFpQkRDLFVBQVUsQ0FBRUMsT0FBRixFQUFXO0lBQ25CLE1BQU1DLE1BQU0sR0FBRyxFQUFmO0lBQ0EsTUFBTUMsWUFBWSxHQUFHLHNDQUFzQ0MsSUFBdEMsQ0FBMkNILE9BQTNDLENBQXJCOztJQUNBLElBQUlFLFlBQUosRUFBa0I7TUFDaEJELE1BQU0sQ0FBQ0csT0FBUCxHQUFpQkYsWUFBWSxDQUFDLENBQUQsQ0FBN0I7SUFDRDs7SUFDRCxNQUFNRyxzQkFBc0IsR0FBRyxrQ0FBa0NGLElBQWxDLENBQXVDSCxPQUF2QyxDQUEvQjs7SUFDQSxJQUFJSyxzQkFBSixFQUE0QjtNQUMxQkosTUFBTSxDQUFDSyxpQkFBUCxHQUEyQkQsc0JBQXNCLENBQUMsQ0FBRCxDQUFqRDtJQUNEOztJQUNELE9BQU9KLE1BQVA7RUFDRDs7RUFZaUMsTUFBNUJNLDRCQUE0QixDQUFFQyxTQUFGLEVBQWFDLFFBQWIsRUFBdUJDLFFBQXZCLEVBQWlDO0lBQ2pFLE1BQU1DLEtBQUssR0FBRyxNQUFNLHlCQUFhRixRQUFiLEVBQXVCO01BQ3pDLGNBQWMsUUFEMkI7TUFFekNHLE1BQU0sRUFBRTtJQUZpQyxDQUF2QixFQUdqQjtNQUFFZixPQUFPLEVBQUUsS0FBS0E7SUFBaEIsQ0FIaUIsQ0FBcEI7SUFJQSxNQUFNO01BQUVTO0lBQUYsSUFBd0IsS0FBS1AsVUFBTCxDQUFnQlksS0FBaEIsQ0FBOUI7O0lBQ0EsSUFBSSxDQUFDTCxpQkFBTCxFQUF3QjtNQUN0QnpDLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyxlQUFjTCxTQUFVLDZDQUE0Q0MsUUFBUyxJQUE5RSxHQUNQLGFBREg7TUFFQTtJQUNEOztJQUNEQyxRQUFRLENBQUNKLGlCQUFULEdBQTZCQSxpQkFBN0I7RUFDRDs7RUFZb0IsTUFBZlEsZUFBZSxDQUFFQyxHQUFGLEVBQU9DLGdCQUFnQixHQUFHLElBQTFCLEVBQWdDO0lBQ25ELE1BQU1DLFdBQVcsR0FBR0MsZUFBTUMsTUFBTixDQUFjLCtCQUFkLEVBQThDSixHQUE5QyxDQUFwQjs7SUFDQWxELEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyxVQUFTSSxXQUFXLENBQUNsQyxNQUFPLDJCQUF2Qzs7SUFDQSxJQUFJVCxnQkFBRThDLE9BQUYsQ0FBVUgsV0FBVixDQUFKLEVBQTRCO01BQzFCO0lBQ0Q7O0lBRUQsTUFBTUksUUFBUSxHQUFHLEVBQWpCOztJQUNBLEtBQUssTUFBTUMsVUFBWCxJQUF5QkwsV0FBekIsRUFBc0M7TUFDcEMsTUFBTU0sR0FBRyxHQUFHcEMsZUFBZSxDQUFDWCxhQUFhLENBQUM4QyxVQUFELEVBQWEsS0FBYixDQUFkLENBQTNCOztNQUNBLElBQUksQ0FBQ2hELGdCQUFFa0QsUUFBRixDQUFXRCxHQUFYLEVBQWdCLGdCQUFoQixDQUFMLEVBQXdDO1FBQ3RDO01BQ0Q7O01BRUQsTUFBTUUsSUFBSSxHQUFHdEMsZUFBZSxDQUFDWCxhQUFhLENBQUM4QyxVQUFELEVBQWEsTUFBYixDQUFkLENBQTVCOztNQUNBLElBQUksQ0FBQ0csSUFBTCxFQUFXO1FBQ1Q1RCxHQUFHLENBQUNnRCxLQUFKLENBQVcsY0FBYVUsR0FBSSw4Q0FBNUI7UUFDQTtNQUNEOztNQUVELE1BQU1HLE1BQU0sR0FBRztRQUNiQyxHQUFHLEVBQUcsR0FBRUMsYUFBTyxJQUFHTCxHQUFJLEVBRFQ7UUFFYkUsSUFBSSxFQUFFbkQsZ0JBQUV1RCxJQUFGLENBQU9KLElBQVAsRUFBYSxHQUFiLENBRk87UUFHYnJCLE9BQU8sRUFBRTlCLGdCQUFFd0QsS0FBRixDQUFRUCxHQUFHLENBQUNRLEtBQUosQ0FBVSxHQUFWLENBQVI7TUFISSxDQUFmO01BS0EsS0FBS2pDLE9BQUwsQ0FBYXlCLEdBQWIsSUFBb0JHLE1BQXBCO01BRUEsTUFBTU0sU0FBUyxHQUFJLEdBQUVOLE1BQU0sQ0FBQ3RCLE9BQVEsWUFBcEM7TUFDQSxNQUFNNkIsY0FBYyxHQUFHLENBQUMsQ0FBQ2hCLFdBQVcsQ0FDakNpQixNQURzQixDQUNmLENBQUNDLEdBQUQsRUFBTS9DLElBQU4sS0FBZStDLEdBQUcsSUFBSTNELGFBQWEsQ0FBQ1ksSUFBRCxFQUFPLEtBQVAsRUFBYzRDLFNBQWQsQ0FEcEIsRUFDOEMsS0FEOUMsQ0FBekI7O01BRUEsSUFBSSxDQUFDQyxjQUFMLEVBQXFCO1FBQ25CUCxNQUFNLENBQUNwQixpQkFBUCxHQUEyQixJQUEzQjs7UUFDQSxJQUFJVSxnQkFBSixFQUFzQjtVQUNwQm5ELEdBQUcsQ0FBQ3VFLElBQUosQ0FBVSxjQUFhYixHQUFJLDJDQUEzQjtRQUNEOztRQUNEO01BQ0QsQ0FORCxNQU1PLElBQUksQ0FBQ1AsZ0JBQUwsRUFBdUI7UUFDNUI7TUFDRDs7TUFFREssUUFBUSxDQUFDZ0IsSUFBVCxDQUFjLEtBQUs5Qiw0QkFBTCxDQUFrQ2dCLEdBQWxDLEVBQXdDLEdBQUVLLGFBQU8sSUFBR0ksU0FBVSxFQUE5RCxFQUFpRU4sTUFBakUsQ0FBZDs7TUFDQSxJQUFJTCxRQUFRLENBQUN0QyxNQUFULEdBQWtCbkIsc0JBQWxCLEtBQTZDLENBQWpELEVBQW9EO1FBQ2xELE1BQU0wRSxrQkFBRUMsR0FBRixDQUFNbEIsUUFBTixDQUFOO01BQ0Q7SUFDRjs7SUFDRCxNQUFNaUIsa0JBQUVDLEdBQUYsQ0FBTWxCLFFBQU4sQ0FBTjtJQUNBeEQsR0FBRyxDQUFDdUUsSUFBSixDQUFVLDhDQUE2QzlELGdCQUFFa0UsSUFBRixDQUFPLEtBQUsxQyxPQUFaLENBQXFCLEVBQTVFO0VBQ0Q7O0VBeUJvQixNQUFmMkMsZUFBZSxDQUFFekIsZ0JBQWdCLEdBQUcsSUFBckIsRUFBMkI7SUFDOUMsTUFBTTBCLEdBQUcsR0FBRyxNQUFNLHlCQUFhZCxhQUFiLEVBQXFCO01BQ3JDLGNBQWMsUUFEdUI7TUFFckNoQixNQUFNLEVBQUU7SUFGNkIsQ0FBckIsRUFHZjtNQUFFZixPQUFPLEVBQUUsS0FBS0E7SUFBaEIsQ0FIZSxDQUFsQjtJQUlBLE1BQU1rQixHQUFHLEdBQUcsSUFBSTRCLGlCQUFKLEdBQWdCQyxlQUFoQixDQUFnQ0YsR0FBaEMsQ0FBWjtJQUNBLE1BQU0sS0FBSzVCLGVBQUwsQ0FBcUJDLEdBQXJCLEVBQTBCQyxnQkFBMUIsQ0FBTjtJQUNBLE9BQU8xQyxnQkFBRXVFLFNBQUYsQ0FBWSxLQUFLL0MsT0FBakIsQ0FBUDtFQUNEOztFQVNnQixNQUFYZ0QsV0FBVyxDQUFFN0UsR0FBRixFQUFPOEUsR0FBUCxFQUFZO0lBQzNCLE1BQU1DLE9BQU8sR0FBRyxNQUFNQyxpQkFBUUMsT0FBUixFQUF0Qjs7SUFDQSxJQUFJO01BQ0YsTUFBTUMsYUFBSUMsWUFBSixDQUFpQm5GLEdBQWpCLEVBQXNCK0UsT0FBdEIsQ0FBTjtNQUNBLE1BQU1LLGdCQUFnQixHQUFHLE1BQU1qRixZQUFHa0YsT0FBSCxDQUFXTixPQUFYLEVBQW9CLElBQXBCLEVBQTBCLENBQUNPLFFBQUQsRUFBV0MsV0FBWCxLQUN2RCxDQUFDQSxXQUFELElBQWdCbEYsZ0JBQUVDLE9BQUYsQ0FBVWtGLGNBQUtDLEtBQUwsQ0FBV0gsUUFBWCxFQUFxQkksSUFBL0IsTUFBeUMsY0FENUIsQ0FBL0I7O01BRUEsSUFBSSxDQUFDTixnQkFBTCxFQUF1QjtRQUNyQixNQUFNLElBQUlPLEtBQUosQ0FBVSxzRkFBVixDQUFOO01BQ0Q7O01BQ0QvRixHQUFHLENBQUNnRCxLQUFKLENBQVcseUJBQXdCNEMsY0FBS0ksUUFBTCxDQUFjUixnQkFBZCxDQUFnQyxTQUFRTixHQUFJLEdBQS9FO01BQ0EsTUFBTTNFLFlBQUcwRixFQUFILENBQU1ULGdCQUFOLEVBQXdCTixHQUF4QixFQUE2QjtRQUNqQ2dCLE1BQU0sRUFBRTtNQUR5QixDQUE3QixDQUFOO0lBR0QsQ0FYRCxTQVdVO01BQ1IsTUFBTTNGLFlBQUc0RixNQUFILENBQVVoQixPQUFWLENBQU47SUFDRDtFQUNGOztFQXNCRGlCLHFCQUFxQixDQUFFQyxNQUFGLEVBQVVDLElBQUksR0FBRyxFQUFqQixFQUFxQjtJQUN4QyxNQUFNO01BQ0o3RCxpQkFESTtNQUVKOEQsUUFBUSxHQUFHO0lBRlAsSUFHRkQsSUFISjs7SUFJQSxJQUFJRSxhQUFhLEdBQUcvRixnQkFBRWdHLElBQUYsQ0FBTyxLQUFLeEUsT0FBWixDQUFwQjs7SUFFQSxJQUFJLENBQUN4QixnQkFBRThDLE9BQUYsQ0FBVWdELFFBQVYsQ0FBTCxFQUEwQjtNQUV4QnZHLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyxtREFBa0R1RCxRQUFTLEVBQXRFO01BQ0FDLGFBQWEsR0FBR0EsYUFBYSxDQUMxQkUsTUFEYSxDQUNMQyxNQUFELElBQVlKLFFBQVEsQ0FBQzVDLFFBQVQsQ0FBbUIsR0FBRSxLQUFLMUIsT0FBTCxDQUFhMEUsTUFBYixFQUFxQnBFLE9BQVEsRUFBbEQsQ0FETixDQUFoQjtNQUdBdkMsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLE9BQU12QixjQUFLbUYsU0FBTCxDQUFlLE1BQWYsRUFBdUJKLGFBQWEsQ0FBQ3RGLE1BQXJDLEVBQTZDLElBQTdDLENBQW1ELEVBQXBFOztNQUNBLElBQUlULGdCQUFFOEMsT0FBRixDQUFVaUQsYUFBVixDQUFKLEVBQThCO1FBQzVCLE9BQU8sRUFBUDtNQUNEO0lBQ0Y7O0lBRUQsSUFBSSxDQUFDSyxLQUFLLENBQUNwRSxpQkFBRCxDQUFWLEVBQStCO01BRTdCLE1BQU1xRSxvQkFBb0IsR0FBR0MsUUFBUSxDQUFDdEUsaUJBQUQsRUFBb0IsRUFBcEIsQ0FBckM7TUFDQXpDLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyw4RUFBNkU4RCxvQkFBcUIsRUFBN0c7TUFDQSxJQUFJRSwyQkFBMkIsR0FBRyxDQUFsQzs7TUFFQSxLQUFLLE1BQU1MLE1BQVgsSUFBcUJILGFBQXJCLEVBQW9DO1FBQ2xDLE1BQU1TLHdCQUF3QixHQUFHRixRQUFRLENBQUMsS0FBSzlFLE9BQUwsQ0FBYTBFLE1BQWIsRUFBcUJsRSxpQkFBdEIsRUFBeUMsRUFBekMsQ0FBekM7O1FBQ0EsSUFBSSxDQUFDb0UsS0FBSyxDQUFDSSx3QkFBRCxDQUFOLElBQ0dBLHdCQUF3QixJQUFJSCxvQkFEL0IsSUFFR0UsMkJBQTJCLEdBQUdDLHdCQUZyQyxFQUUrRDtVQUM3REQsMkJBQTJCLEdBQUdDLHdCQUE5QjtRQUNEO01BQ0Y7O01BQ0RULGFBQWEsR0FBR0EsYUFBYSxDQUFDRSxNQUFkLENBQXNCQyxNQUFELElBQWEsR0FBRSxLQUFLMUUsT0FBTCxDQUFhMEUsTUFBYixFQUFxQmxFLGlCQUFrQixFQUExQyxLQUM5QyxHQUFFdUUsMkJBQTJCLEdBQUcsQ0FBOUIsR0FBa0NBLDJCQUFsQyxHQUFnRUYsb0JBQXFCLEVBRDFFLENBQWhCO01BR0E5RyxHQUFHLENBQUNnRCxLQUFKLENBQVcsT0FBTXZCLGNBQUttRixTQUFMLENBQWUsTUFBZixFQUF1QkosYUFBYSxDQUFDdEYsTUFBckMsRUFBNkMsSUFBN0MsQ0FBbUQsRUFBcEU7O01BQ0EsSUFBSVQsZ0JBQUU4QyxPQUFGLENBQVVpRCxhQUFWLENBQUosRUFBOEI7UUFDNUIsT0FBTyxFQUFQO01BQ0Q7O01BQ0R4RyxHQUFHLENBQUNnRCxLQUFKLENBQVcseUJBQXdCdkIsY0FBS21GLFNBQUwsQ0FBZSxRQUFmLEVBQXlCSixhQUFhLENBQUN0RixNQUF2QyxDQUErQyxHQUF4RSxHQUNQLGlCQUFnQlQsZ0JBQUV5RyxJQUFGLENBQU9WLGFBQWEsQ0FBQ1csR0FBZCxDQUFtQlIsTUFBRCxJQUFZLEtBQUsxRSxPQUFMLENBQWEwRSxNQUFiLEVBQXFCcEUsT0FBbkQsQ0FBUCxDQUFvRSxHQUR2RjtJQUVEOztJQUVELElBQUksQ0FBQzlCLGdCQUFFOEMsT0FBRixDQUFVOEMsTUFBVixDQUFMLEVBQXdCO01BRXRCLElBQUk7UUFBQ1AsSUFBRDtRQUFPc0IsSUFBUDtRQUFhQztNQUFiLElBQTZCaEIsTUFBakM7O01BQ0EsSUFBSWUsSUFBSSxLQUFLRSxVQUFULElBQWdCLENBQUNkLGFBQWEsQ0FBQ2UsSUFBZCxDQUFvQlosTUFBRCxJQUFZQSxNQUFNLENBQUNoRCxRQUFQLENBQWlCLElBQUdtQyxJQUFLLEdBQUV3QixVQUFJLEVBQS9CLENBQS9CLENBQXJCLEVBQXdGO1FBRXRGRixJQUFJLEdBQUdJLFVBQVA7TUFDRDs7TUFDRCxJQUFJMUIsSUFBSSxLQUFLMkIsVUFBR0MsR0FBWixJQUFtQmpILGdCQUFFa0QsUUFBRixDQUFXMEQsWUFBWCxFQUF5QixLQUF6QixDQUFuQixJQUNHYixhQUFhLENBQUNlLElBQWQsQ0FBb0JaLE1BQUQsSUFBWUEsTUFBTSxDQUFDaEQsUUFBUCxDQUFnQmdFLHFCQUFoQixDQUEvQixDQURQLEVBQ3dFO1FBRXRFUCxJQUFJLElBQUlPLHFCQUFSO01BQ0Q7O01BQ0QzSCxHQUFHLENBQUNnRCxLQUFKLENBQVcscURBQW9EOEMsSUFBSyxHQUFFc0IsSUFBSyxFQUEzRTtNQUNBLE1BQU1RLFVBQVUsR0FBRyxJQUFJQyxNQUFKLENBQVksVUFBUy9CLElBQUssR0FBRXNCLElBQUssS0FBakMsQ0FBbkI7TUFDQVosYUFBYSxHQUFHQSxhQUFhLENBQUNFLE1BQWQsQ0FBc0JDLE1BQUQsSUFBWWlCLFVBQVUsQ0FBQ0UsSUFBWCxDQUFnQm5CLE1BQWhCLENBQWpDLENBQWhCO01BQ0EzRyxHQUFHLENBQUNnRCxLQUFKLENBQVcsT0FBTXZCLGNBQUttRixTQUFMLENBQWUsTUFBZixFQUF1QkosYUFBYSxDQUFDdEYsTUFBckMsRUFBNkMsSUFBN0MsQ0FBbUQsRUFBcEU7SUFDRDs7SUFFRCxPQUFPc0YsYUFBUDtFQUNEOztFQWlCbUIsTUFBZHVCLGNBQWMsQ0FBRUMsS0FBRixFQUFTckYsU0FBVCxFQUFvQnNGLFlBQXBCLEVBQWtDQyxRQUFRLEdBQUcsS0FBN0MsRUFBb0Q7SUFDdEUsTUFBTTtNQUFFcEUsR0FBRjtNQUFPRixJQUFQO01BQWFyQjtJQUFiLElBQXlCLEtBQUtOLE9BQUwsQ0FBYVUsU0FBYixDQUEvQjs7SUFDQSxNQUFNd0YsV0FBVyxHQUFHdkMsY0FBS3dDLE9BQUwsQ0FBYUgsWUFBYixFQUE0QixHQUFFRCxLQUFNLE1BQXBDLENBQXBCOztJQUNBaEksR0FBRyxDQUFDZ0QsS0FBSixDQUFXLGVBQWNjLEdBQUksU0FBUXFFLFdBQVksR0FBakQ7O0lBQ0EsSUFBSTtNQUNGLE1BQU1FLGFBQUlDLFlBQUosQ0FBaUJ4RSxHQUFqQixFQUFzQnFFLFdBQXRCLEVBQW1DO1FBQ3ZDSSxTQUFTLEVBQUUsS0FENEI7UUFFdkN2RyxPQUFPLEVBQUVsQztNQUY4QixDQUFuQyxDQUFOO0lBSUQsQ0FMRCxDQUtFLE9BQU8wSSxDQUFQLEVBQVU7TUFDVixNQUFNQyxHQUFHLEdBQUkseURBQXdERCxDQUFDLENBQUNFLE9BQVEsRUFBL0U7O01BQ0EsSUFBSVIsUUFBSixFQUFjO1FBQ1osTUFBTSxJQUFJbkMsS0FBSixDQUFVMEMsR0FBVixDQUFOO01BQ0Q7O01BQ0R6SSxHQUFHLENBQUMySSxLQUFKLENBQVVGLEdBQVY7TUFDQSxPQUFPLEtBQVA7SUFDRDs7SUFDRCxJQUFJLEVBQUMsTUFBTXRJLE9BQU8sQ0FBQ2dJLFdBQUQsRUFBY3ZFLElBQWQsQ0FBZCxDQUFKLEVBQXVDO01BQ3JDLE1BQU02RSxHQUFHLEdBQUksaURBQWdEOUYsU0FBVSxpQkFBdkU7O01BQ0EsSUFBSXVGLFFBQUosRUFBYztRQUNaLE1BQU0sSUFBSW5DLEtBQUosQ0FBVTBDLEdBQVYsQ0FBTjtNQUNEOztNQUNEekksR0FBRyxDQUFDMkksS0FBSixDQUFVRixHQUFWO01BQ0EsT0FBTyxLQUFQO0lBQ0Q7O0lBQ0QsTUFBTUcsUUFBUSxHQUFJLEdBQUVoRCxjQUFLQyxLQUFMLENBQVcvQixHQUFYLEVBQWdCZ0MsSUFBSyxLQUFJdkQsT0FBUSxFQUFwQyxJQUNkc0csZ0JBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFEaEIsQ0FBakI7O0lBRUEsTUFBTUMsVUFBVSxHQUFHbkQsY0FBS3dDLE9BQUwsQ0FBYSxLQUFLckcsZUFBbEIsRUFBbUM2RyxRQUFuQyxDQUFuQjs7SUFDQSxJQUFJO01BQ0YsTUFBTSxLQUFLM0QsV0FBTCxDQUFpQmtELFdBQWpCLEVBQThCWSxVQUE5QixDQUFOO01BQ0EsTUFBTXhJLFlBQUd5SSxLQUFILENBQVNELFVBQVQsRUFBcUIsS0FBckIsQ0FBTjtNQUNBL0ksR0FBRyxDQUFDZ0QsS0FBSixDQUFXLDRCQUEyQitGLFVBQVcsNEJBQWpEO0lBQ0QsQ0FKRCxDQUlFLE9BQU9QLENBQVAsRUFBVTtNQUNWLElBQUlOLFFBQUosRUFBYztRQUNaLE1BQU1NLENBQU47TUFDRDs7TUFDRHhJLEdBQUcsQ0FBQzJJLEtBQUosQ0FBVUgsQ0FBQyxDQUFDRSxPQUFaO01BQ0EsT0FBTyxLQUFQO0lBQ0Q7O0lBQ0QsT0FBTyxJQUFQO0VBQ0Q7O0VBd0JnQixNQUFYTyxXQUFXLENBQUUzQyxJQUFJLEdBQUcsRUFBVCxFQUFhO0lBQUE7O0lBQzVCLElBQUk3RixnQkFBRThDLE9BQUYsQ0FBVSxLQUFLdEIsT0FBZixDQUFKLEVBQTZCO01BQzNCLE1BQU0sS0FBSzJDLGVBQUwsQ0FBcUIsQ0FBQyxDQUFDMEIsSUFBSSxDQUFDN0QsaUJBQTVCLENBQU47SUFDRDs7SUFDRCxJQUFJaEMsZ0JBQUU4QyxPQUFGLENBQVUsS0FBS3RCLE9BQWYsQ0FBSixFQUE2QjtNQUMzQixNQUFNLElBQUk4RCxLQUFKLENBQVUsMkRBQVYsQ0FBTjtJQUNEOztJQUVELE1BQU1TLGFBQWEsR0FBRyxLQUFLSixxQkFBTCxpQkFBMkJFLElBQUksQ0FBQ0QsTUFBaEMsdURBQTBDLE1BQU0sdUJBQWhELEVBQTZEQyxJQUE3RCxDQUF0Qjs7SUFDQSxJQUFJN0YsZ0JBQUU4QyxPQUFGLENBQVVpRCxhQUFWLENBQUosRUFBOEI7TUFDNUJ4RyxHQUFHLENBQUNnRCxLQUFKLENBQVcsdUNBQVg7TUFDQSxPQUFPLEVBQVA7SUFDRDs7SUFDRGhELEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyxPQUFNdkIsY0FBS21GLFNBQUwsQ0FBZSxRQUFmLEVBQXlCSixhQUFhLENBQUN0RixNQUF2QyxFQUErQyxJQUEvQyxDQUFxRCxZQUE1RCxHQUNSZ0ksSUFBSSxDQUFDQyxTQUFMLENBQWUzQyxhQUFmLEVBQThCLElBQTlCLEVBQW9DLENBQXBDLENBREY7SUFHQSxNQUFNNEMsbUJBQW1CLEdBQUcsRUFBNUI7SUFDQSxNQUFNNUYsUUFBUSxHQUFHLEVBQWpCO0lBQ0EsTUFBTXlFLFlBQVksR0FBRyxNQUFNN0MsaUJBQVFDLE9BQVIsRUFBM0I7O0lBQ0EsSUFBSTtNQUNGLEtBQUssTUFBTSxDQUFDZ0UsR0FBRCxFQUFNMUcsU0FBTixDQUFYLElBQStCNkQsYUFBYSxDQUFDOEMsT0FBZCxFQUEvQixFQUF3RDtRQUN0RDlGLFFBQVEsQ0FBQ2dCLElBQVQsQ0FBYyxDQUFDLFlBQVk7VUFDekIsSUFBSSxNQUFNLEtBQUt1RCxjQUFMLENBQW9Cc0IsR0FBcEIsRUFBeUIxRyxTQUF6QixFQUFvQ3NGLFlBQXBDLEVBQWtELENBQUN4SCxnQkFBRThDLE9BQUYsQ0FBVStDLElBQVYsQ0FBbkQsQ0FBVixFQUErRTtZQUM3RThDLG1CQUFtQixDQUFDNUUsSUFBcEIsQ0FBeUI3QixTQUF6QjtVQUNEO1FBQ0YsQ0FKYSxHQUFkOztRQU1BLElBQUlhLFFBQVEsQ0FBQ3RDLE1BQVQsR0FBa0JuQixzQkFBbEIsS0FBNkMsQ0FBakQsRUFBb0Q7VUFDbEQsTUFBTTBFLGtCQUFFQyxHQUFGLENBQU1sQixRQUFOLENBQU47UUFDRDtNQUNGOztNQUNELE1BQU1pQixrQkFBRUMsR0FBRixDQUFNbEIsUUFBTixDQUFOO0lBQ0QsQ0FiRCxTQWFVO01BQ1IsTUFBTWpELFlBQUc0RixNQUFILENBQVU4QixZQUFWLENBQU47SUFDRDs7SUFDRCxJQUFJLENBQUN4SCxnQkFBRThDLE9BQUYsQ0FBVTZGLG1CQUFWLENBQUwsRUFBcUM7TUFDbkNwSixHQUFHLENBQUN1RSxJQUFKLENBQVUsNEJBQUQsR0FDTixHQUFFOUMsY0FBS21GLFNBQUwsQ0FBZSxjQUFmLEVBQStCd0MsbUJBQW1CLENBQUNsSSxNQUFuRCxFQUEyRCxJQUEzRCxDQUFpRSxFQUR0RTtJQUVELENBSEQsTUFHTztNQUNMbEIsR0FBRyxDQUFDdUUsSUFBSixDQUFVLG9DQUFWO0lBQ0Q7O0lBQ0QsT0FBTzZFLG1CQUFQO0VBQ0Q7O0FBbFk2Qjs7ZUFzWWpCeEgseUIifQ==
|
|
391
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3N0b3JhZ2UtY2xpZW50LmpzIiwibmFtZXMiOlsiVElNRU9VVF9NUyIsIk1BWF9QQVJBTExFTF9ET1dOTE9BRFMiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJpc0NyY09rIiwic3JjIiwiY2hlY2tzdW0iLCJtZDUiLCJmcyIsImhhc2giLCJfIiwidG9Mb3dlciIsImZpbmRDaGlsZE5vZGUiLCJwYXJlbnQiLCJjaGlsZE5hbWUiLCJ0ZXh0IiwiaGFzQ2hpbGROb2RlcyIsImNoaWxkTm9kZUlkeCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJjaGlsZE5vZGUiLCJsb2NhbE5hbWUiLCJjaGlsZFRleHQiLCJleHRyYWN0Tm9kZVRleHQiLCJub2RlIiwiZmlyc3RDaGlsZCIsInV0aWwiLCJoYXNWYWx1ZSIsIm5vZGVWYWx1ZSIsIkNocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJjaHJvbWVkcml2ZXJEaXIiLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJ0aW1lb3V0IiwibWFwcGluZyIsInBhcnNlTm90ZXMiLCJjb250ZW50IiwicmVzdWx0IiwidmVyc2lvbk1hdGNoIiwiZXhlYyIsInZlcnNpb24iLCJtaW5Ccm93c2VyVmVyc2lvbk1hdGNoIiwibWluQnJvd3NlclZlcnNpb24iLCJyZXRyaWV2ZUFkZGl0aW9uYWxEcml2ZXJJbmZvIiwiZHJpdmVyS2V5Iiwibm90ZXNVcmwiLCJpbmZvRGljdCIsIm5vdGVzIiwicmV0cmlldmVEYXRhIiwiYWNjZXB0IiwiZGVidWciLCJwYXJzZVN0b3JhZ2VYbWwiLCJkb2MiLCJzaG91bGRQYXJzZU5vdGVzIiwiZHJpdmVyTm9kZXMiLCJ4cGF0aCIsInNlbGVjdCIsImlzRW1wdHkiLCJwcm9taXNlcyIsImRyaXZlck5vZGUiLCJrZXkiLCJpbmNsdWRlcyIsImV0YWciLCJjZEluZm8iLCJ1cmwiLCJDRF9DRE4iLCJ0cmltIiwiZmlyc3QiLCJzcGxpdCIsIm5vdGVzUGF0aCIsImlzTm90ZXNQcmVzZW50IiwicmVkdWNlIiwiYWNjIiwiaW5mbyIsInB1c2giLCJCIiwiYWxsIiwic2l6ZSIsInJldHJpZXZlTWFwcGluZyIsInhtbCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImNsb25lRGVlcCIsInVuemlwRHJpdmVyIiwiZHN0IiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiY2hyb21lZHJpdmVyUGF0aCIsIndhbGtEaXIiLCJpdGVtUGF0aCIsImlzRGlyZWN0b3J5IiwicGF0aCIsInBhcnNlIiwibmFtZSIsIkVycm9yIiwiYmFzZW5hbWUiLCJtdiIsIm1rZGlycCIsInJpbXJhZiIsInNlbGVjdE1hdGNoaW5nRHJpdmVycyIsIm9zSW5mbyIsIm9wdHMiLCJ2ZXJzaW9ucyIsImRyaXZlcnNUb1N5bmMiLCJrZXlzIiwiZmlsdGVyIiwiY2ROYW1lIiwicGx1cmFsaXplIiwiaXNOYU4iLCJtaW5Ccm93c2VyVmVyc2lvbkludCIsInBhcnNlSW50IiwiY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIiwiY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uIiwidW5pcSIsIm1hcCIsImFyY2giLCJoYXJkd2FyZU5hbWUiLCJYNjQiLCJzb21lIiwiWDg2IiwiT1MiLCJtYWMiLCJNMV9BUkNIX1NVRkZJWCIsInBsYXRmb3JtUmUiLCJSZWdFeHAiLCJ0ZXN0IiwicmV0cmlldmVEcml2ZXIiLCJpbmRleCIsImFyY2hpdmVzUm9vdCIsImlzU3RyaWN0IiwiYXJjaGl2ZVBhdGgiLCJyZXNvbHZlIiwibmV0IiwiZG93bmxvYWRGaWxlIiwiaXNNZXRlcmVkIiwiZSIsIm1zZyIsIm1lc3NhZ2UiLCJlcnJvciIsImZpbGVOYW1lIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwidGFyZ2V0UGF0aCIsImNobW9kIiwic3luY0RyaXZlcnMiLCJnZXRPc0luZm8iLCJKU09OIiwic3RyaW5naWZ5Iiwic3luY2hyb25pemVkRHJpdmVycyIsImlkeCIsImVudHJpZXMiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvc3RvcmFnZS1jbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDRF9DRE4sIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLFxuICBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeHBhdGggZnJvbSAneHBhdGgnO1xuaW1wb3J0IHsgRE9NUGFyc2VyIH0gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHRlbXBEaXIsIHppcCwgdXRpbCwgbmV0IH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IFRJTUVPVVRfTVMgPSAxNTAwMDtcbmNvbnN0IE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPSA1O1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50Jyk7XG5cblxuYXN5bmMgZnVuY3Rpb24gaXNDcmNPayAoc3JjLCBjaGVja3N1bSkge1xuICBjb25zdCBtZDUgPSBhd2FpdCBmcy5oYXNoKHNyYywgJ21kNScpO1xuICByZXR1cm4gXy50b0xvd2VyKG1kNSkgPT09IF8udG9Mb3dlcihjaGVja3N1bSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZE5vZGUgKHBhcmVudCwgY2hpbGROYW1lID0gbnVsbCwgdGV4dCA9IG51bGwpIHtcbiAgaWYgKCFjaGlsZE5hbWUgJiYgIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIXBhcmVudC5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAobGV0IGNoaWxkTm9kZUlkeCA9IDA7IGNoaWxkTm9kZUlkeCA8IHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDsgY2hpbGROb2RlSWR4KyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBwYXJlbnQuY2hpbGROb2Rlc1tjaGlsZE5vZGVJZHhdO1xuICAgIGlmIChjaGlsZE5hbWUgJiYgIXRleHQgJiYgY2hpbGROYW1lID09PSBjaGlsZE5vZGUubG9jYWxOYW1lKSB7XG4gICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgIH1cbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3QgY2hpbGRUZXh0ID0gZXh0cmFjdE5vZGVUZXh0KGNoaWxkTm9kZSk7XG4gICAgICBpZiAoIWNoaWxkVGV4dCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZE5hbWUgJiYgY2hpbGROYW1lID09PSBjaGlsZE5vZGUubG9jYWxOYW1lICYmIHRleHQgPT09IGNoaWxkVGV4dCkge1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGlsZE5hbWUgJiYgdGV4dCA9PT0gY2hpbGRUZXh0KSB7XG4gICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0Tm9kZVRleHQgKG5vZGUpIHtcbiAgcmV0dXJuICghbm9kZSB8fCAhbm9kZS5maXJzdENoaWxkIHx8ICF1dGlsLmhhc1ZhbHVlKG5vZGUuZmlyc3RDaGlsZC5ub2RlVmFsdWUpKVxuICAgID8gbnVsbFxuICAgIDogbm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZTtcbn1cblxuXG5jbGFzcyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNocm9tZWRyaXZlckRpciA9IGdldENocm9tZWRyaXZlckRpcigpLFxuICAgICAgdGltZW91dCA9IFRJTUVPVVRfTVMsXG4gICAgfSA9IGFyZ3M7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXJEaXIgPSBjaHJvbWVkcml2ZXJEaXI7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgICB0aGlzLm1hcHBpbmcgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc1xuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IHZlcnNpb24gLSBDaHJvbWVkcml2ZXIgdmVyc2lvblxuICAgKiBvciBgbnVsbGAgaWYgaXQgY2Fubm90IGJlIGZvdW5kXG4gICAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWluQnJvd3NlclZlcnNpb24gLSBUaGUgbWluaW11bSBicm93c2VyIHZlcnNpb25cbiAgICogc3VwcG9ydGVkIGJ5IGNocm9tZWRyaXZlciBvciBgbnVsbGAgaWYgaXQgY2Fubm90IGJlIGZvdW5kXG4gICAqL1xuXG4gIC8qKlxuICAgKiBHZXRzIGFkZGl0aW9uYWwgY2hyb21lZHJpdmVyIGRldGFpbHMgZnJvbSBjaHJvbWVkcml2ZXJcbiAgICogcmVsZWFzZSBub3Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIFJlbGVhc2Ugbm90ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2hyb21lZHJpdmVyXG4gICAqIEByZXR1cm5zIHtBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc31cbiAgICovXG4gIHBhcnNlTm90ZXMgKGNvbnRlbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSAvXlxccypbLV0rQ2hyb21lRHJpdmVyW1xcRF0rKFtcXGQuXSspL2ltLmV4ZWMoY29udGVudCk7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgcmVzdWx0LnZlcnNpb24gPSB2ZXJzaW9uTWF0Y2hbMV07XG4gICAgfVxuICAgIGNvbnN0IG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2ggPSAvXlxccypTdXBwb3J0cyBDaHJvbWVbXFxEXSsoXFxkKykvaW0uZXhlYyhjb250ZW50KTtcbiAgICBpZiAobWluQnJvd3NlclZlcnNpb25NYXRjaCkge1xuICAgICAgcmVzdWx0Lm1pbkJyb3dzZXJWZXJzaW9uID0gbWluQnJvd3NlclZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZHMgY2hyb21lZHJpdmVyIHJlbGVhc2Ugbm90ZXMgYW5kIHB1dHMgdGhlbVxuICAgKiBpbnRvIHRoZSBkaWN0aW9uYXJ5IGFyZ3VtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXJLZXkgLSBEcml2ZXIgdmVyc2lvbiBwbHVzIGFyY2hpdmUgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbm90ZXNVcmwgLSBUaGUgVVJMIG9mIGNocm9tZWRyaXZlciBub3Rlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gaW5mb0RpY3QgLSBUaGUgZGljdGlvbmFyeSBjb250YWluaW5nIGRyaXZlciBpbmZvLlxuICAgKiBUaGUgbWV0aG9kIGNhbGwgbXV0YXRlcyBieSBtZXJnaW5nIGBBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc2BcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSByZWxlYXNlIG5vdGVzIGNhbm5vdCBiZSBkb3dubG9hZGVkXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZUFkZGl0aW9uYWxEcml2ZXJJbmZvIChkcml2ZXJLZXksIG5vdGVzVXJsLCBpbmZvRGljdCkge1xuICAgIGNvbnN0IG5vdGVzID0gYXdhaXQgcmV0cmlldmVEYXRhKG5vdGVzVXJsLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IHRoaXMudGltZW91dCB9KTtcbiAgICBjb25zdCB7IG1pbkJyb3dzZXJWZXJzaW9uIH0gPSB0aGlzLnBhcnNlTm90ZXMobm90ZXMpO1xuICAgIGlmICghbWluQnJvd3NlclZlcnNpb24pIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlIGRyaXZlciAnJHtkcml2ZXJLZXl9JyBkb2VzIG5vdCBjb250YWluIHZhbGlkIHJlbGVhc2Ugbm90ZXMgYXQgJHtub3Rlc1VybH0uIGAgK1xuICAgICAgICBgU2tpcHBpbmcgaXRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5mb0RpY3QubWluQnJvd3NlclZlcnNpb24gPSBtaW5Ccm93c2VyVmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgY2hyb21lZHJpdmVyIHN0b3JhZ2UgWE1MIGFuZCBzdG9yZXNcbiAgICogdGhlIHBhcnNlZCByZXN1bHRzIGludG8gYHRoaXMubWFwcGluZ2BcbiAgICpcbiAgICogQHBhcmFtIHtET01Eb2N1bWVudH0gZG9jIC0gVGhlIERPTSByZXByZXNlbnRhdGlvblxuICAgKiBvZiB0aGUgY2hyb21lZHJpdmVyIHN0b3JhZ2UgWE1MXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUGFyc2VOb3RlcyBbdHJ1ZV0gLSBJZiBzZXQgdG8gYHRydWVgXG4gICAqIHRoZW4gYWRkaXRpb25hbCBkcml2ZXJzIGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGJlIHBhcnNlZFxuICAgKiBhbmQgYXNzaWduZWQgdG8gYHRoaXMubWFwcGluZ2BcbiAgICovXG4gIGFzeW5jIHBhcnNlU3RvcmFnZVhtbCAoZG9jLCBzaG91bGRQYXJzZU5vdGVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRyaXZlck5vZGVzID0geHBhdGguc2VsZWN0KGAvLypbbG9jYWwtbmFtZSguKT0nQ29udGVudHMnXWAsIGRvYyk7XG4gICAgbG9nLmRlYnVnKGBQYXJzZWQgJHtkcml2ZXJOb2Rlcy5sZW5ndGh9IGVudHJpZXMgZnJvbSBzdG9yYWdlIFhNTGApO1xuICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyTm9kZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGRyaXZlck5vZGUgb2YgZHJpdmVyTm9kZXMpIHtcbiAgICAgIGNvbnN0IGtleSA9IGV4dHJhY3ROb2RlVGV4dChmaW5kQ2hpbGROb2RlKGRyaXZlck5vZGUsICdLZXknKSk7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoa2V5LCAnL2Nocm9tZWRyaXZlcl8nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXRhZyA9IGV4dHJhY3ROb2RlVGV4dChmaW5kQ2hpbGROb2RlKGRyaXZlck5vZGUsICdFVGFnJykpO1xuICAgICAgaWYgKCFldGFnKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlIGVudHJ5ICcke2tleX0nIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNoZWNrc3VtLiBTa2lwcGluZyBpdGApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2RJbmZvID0ge1xuICAgICAgICB1cmw6IGAke0NEX0NETn0vJHtrZXl9YCxcbiAgICAgICAgZXRhZzogXy50cmltKGV0YWcsICdcIicpLFxuICAgICAgICB2ZXJzaW9uOiBfLmZpcnN0KGtleS5zcGxpdCgnLycpKSxcbiAgICAgIH07XG4gICAgICB0aGlzLm1hcHBpbmdba2V5XSA9IGNkSW5mbztcblxuICAgICAgY29uc3Qgbm90ZXNQYXRoID0gYCR7Y2RJbmZvLnZlcnNpb259L25vdGVzLnR4dGA7XG4gICAgICBjb25zdCBpc05vdGVzUHJlc2VudCA9ICEhZHJpdmVyTm9kZXNcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBub2RlKSA9PiBhY2MgfHwgZmluZENoaWxkTm9kZShub2RlLCAnS2V5Jywgbm90ZXNQYXRoKSwgZmFsc2UpO1xuICAgICAgaWYgKCFpc05vdGVzUHJlc2VudCkge1xuICAgICAgICBjZEluZm8ubWluQnJvd3NlclZlcnNpb24gPSBudWxsO1xuICAgICAgICBpZiAoc2hvdWxkUGFyc2VOb3Rlcykge1xuICAgICAgICAgIGxvZy5pbmZvKGBUaGUgZW50cnkgJyR7a2V5fScgZG9lcyBub3QgY29udGFpbiBhbnkgbm90ZXMuIFNraXBwaW5nIGl0YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKCFzaG91bGRQYXJzZU5vdGVzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlcy5wdXNoKHRoaXMucmV0cmlldmVBZGRpdGlvbmFsRHJpdmVySW5mbyhrZXksIGAke0NEX0NETn0vJHtub3Rlc1BhdGh9YCwgY2RJbmZvKSk7XG4gICAgICBpZiAocHJvbWlzZXMubGVuZ3RoICUgTUFYX1BBUkFMTEVMX0RPV05MT0FEUyA9PT0gMCkge1xuICAgICAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICBsb2cuaW5mbyhgVGhlIHRvdGFsIGNvdW50IG9mIGVudHJpZXMgaW4gdGhlIG1hcHBpbmc6ICR7Xy5zaXplKHRoaXMubWFwcGluZyl9YCk7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gRHJpdmVyRGV0YWlsc1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIC0gVGhlIGZ1bGwgdXJsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBpblxuICAgKiB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGV0YWcgLSBUaGUgQ1JDIG9mIHRoZSBkcml2ZXIgYXJjaGl2ZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbiAtIENocm9tZWRyaXZlciB2ZXJzaW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBDaHJvbWVkcml2ZXJzTWFwcGluZ1xuICAgKiBAcHJvcGVydHkge0RyaXZlckRldGFpbHN9IC0gVGhlIGtleXMgYXJlIHVuaXF1ZSBkcml2ZXIgaWRlbnRpZmllcnNcbiAgICogKHZlcnNpb24vYXJjaGl2ZSBuYW1lKS4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGhhdmUgYERyaXZlckRldGFpbHNgXG4gICAqIGNvbnRhaW5pbmcgY2hyb21lZHJpdmVyIGRldGFpbHNcbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBjaHJvbWVkcml2ZXIgbWFwcGluZyBmcm9tIHRoZSBzdG9yYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUGFyc2VOb3RlcyBbdHJ1ZV0gLSBpZiBzZXQgdG8gYHRydWVgXG4gICAqIHRoZW4gYWRkaXRpb25hbCBjaHJvbWVkcml2ZXJzIGluZm8gaXMgZ29pbmcgdG8gYmUgcmV0cmlldmVkIGFuZFxuICAgKiBwYXJzZWQgZnJvbSByZWxlYXNlIG5vdGVzXG4gICAqIEByZXR1cm5zIHtDaHJvbWVkcml2ZXJzTWFwcGluZ31cbiAgICovXG4gIGFzeW5jIHJldHJpZXZlTWFwcGluZyAoc2hvdWxkUGFyc2VOb3RlcyA9IHRydWUpIHtcbiAgICBjb25zdCB4bWwgPSBhd2FpdCByZXRyaWV2ZURhdGEoQ0RfQ0ROLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24veG1sLCAqLyonLFxuICAgIH0sIHsgdGltZW91dDogdGhpcy50aW1lb3V0IH0pO1xuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoeG1sKTtcbiAgICBhd2FpdCB0aGlzLnBhcnNlU3RvcmFnZVhtbChkb2MsIHNob3VsZFBhcnNlTm90ZXMpO1xuICAgIHJldHVybiBfLmNsb25lRGVlcCh0aGlzLm1hcHBpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGRvd25sb2FkZWQgY2hyb21lZHJpdmVyIGFyY2hpdmVcbiAgICogaW50byB0aGUgZ2l2ZW4gZGVzdGluYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyAtIFRoZSBzb3VyY2UgYXJjaGl2ZSBwYXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkc3QgLSBUaGUgZGVzdGluYXRpb24gY2hyb21lZHJpdmVyIHBhdGhcbiAgICovXG4gIGFzeW5jIHVuemlwRHJpdmVyIChzcmMsIGRzdCkge1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhzcmMsIHRtcFJvb3QpO1xuICAgICAgY29uc3QgY2hyb21lZHJpdmVyUGF0aCA9IGF3YWl0IGZzLndhbGtEaXIodG1wUm9vdCwgdHJ1ZSwgKGl0ZW1QYXRoLCBpc0RpcmVjdG9yeSkgPT5cbiAgICAgICAgIWlzRGlyZWN0b3J5ICYmIF8udG9Mb3dlcihwYXRoLnBhcnNlKGl0ZW1QYXRoKS5uYW1lKSA9PT0gJ2Nocm9tZWRyaXZlcicpO1xuICAgICAgaWYgKCFjaHJvbWVkcml2ZXJQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGFyY2hpdmUgd2FzIHVuemlwcGVkIHByb3Blcmx5LCBidXQgd2UgY291bGQgbm90IGZpbmQgYW55IGNocm9tZWRyaXZlciBleGVjdXRhYmxlJyk7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYE1vdmluZyB0aGUgZXh0cmFjdGVkICcke3BhdGguYmFzZW5hbWUoY2hyb21lZHJpdmVyUGF0aCl9JyB0byAnJHtkc3R9J2ApO1xuICAgICAgYXdhaXQgZnMubXYoY2hyb21lZHJpdmVyUGF0aCwgZHN0LCB7XG4gICAgICAgIG1rZGlycDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gT1NJbmZvXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhvc3QgT1NcbiAgICogQ2FuIGJlIGVpdGhlciBgbWFjYCwgYHdpbmRvd3NgIG9yIGBsaW51eGBcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBob3N0IE9ELlxuICAgKiBDYW4gYmUgZWl0aGVyIGAzMmAgb3IgYDY0YFxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IGhhcmR3YXJlTmFtZSAtIFRoZSBvdXRwdXQgb2YgYHVuYW1lIC1tYCBjb21tYW5kXG4gICAqIG9uIGxpbnV4IGFuZCBtYWMgc3lzdGVtcy4gYG51bGxgIG9uIFdpbmRvd3NcbiAgICovXG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYHRoaXMubWFwcGluZ2AgdG8gb25seSBzZWxlY3QgbWF0Y2hpbmdcbiAgICogY2hyb21lZHJpdmVyIGVudHJpZXMgYnkgb3BlcmF0aW5nIHN5c3RlbSBpbmZvcm1hdGlvblxuICAgKiBhbmQvb3IgYWRkaXRpb25hbCBzeW5jaHJvbml6YXRpb24gb3B0aW9ucyAoaWYgcHJvdmlkZWQpXG4gICAqXG4gICAqIEBwYXJhbSB7P09TSW5mb30gb3NJbmZvXG4gICAqIEBwYXJhbSB7P1N5bmNPcHRpb25zfSBvcHRzXG4gICAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgbGlzdCBvZiBmaWx0ZXJlZCBjaHJvbWVkcml2ZXJcbiAgICogZW50cnkgbmFtZXMgKHZlcnNpb24vYXJjaGl2ZSBuYW1lKVxuICAgKi9cbiAgc2VsZWN0TWF0Y2hpbmdEcml2ZXJzIChvc0luZm8sIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIG1pbkJyb3dzZXJWZXJzaW9uLFxuICAgICAgdmVyc2lvbnMgPSBbXSxcbiAgICB9ID0gb3B0cztcbiAgICBsZXQgZHJpdmVyc1RvU3luYyA9IF8ua2V5cyh0aGlzLm1hcHBpbmcpO1xuXG4gICAgaWYgKCFfLmlzRW1wdHkodmVyc2lvbnMpKSB7XG4gICAgICAvLyBIYW5kbGUgb25seSBzZWxlY3RlZCB2ZXJzaW9ucyBpZiByZXF1ZXN0ZWRcbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgdmVyc2lvbnMgbWF0Y2ggdG8gJHt2ZXJzaW9uc31gKTtcbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jXG4gICAgICAgIC5maWx0ZXIoKGNkTmFtZSkgPT4gdmVyc2lvbnMuaW5jbHVkZXMoYCR7dGhpcy5tYXBwaW5nW2NkTmFtZV0udmVyc2lvbn1gKSk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2l0ZW0nLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcnNUb1N5bmMpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzTmFOKG1pbkJyb3dzZXJWZXJzaW9uKSkge1xuICAgICAgLy8gT25seSBzZWxlY3QgZHJpdmVycyB0aGF0IHN1cHBvcnQgdGhlIGN1cnJlbnQgYnJvd3NlciB3aG9zZSBtYWpvciB2ZXJzaW9uIG51bWJlciBlcXVhbHMgdG8gYG1pbkJyb3dzZXJWZXJzaW9uYFxuICAgICAgY29uc3QgbWluQnJvd3NlclZlcnNpb25JbnQgPSBwYXJzZUludChtaW5Ccm93c2VyVmVyc2lvbiwgMTApO1xuICAgICAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgY2hyb21lZHJpdmVycyB3aG9zZSBtaW5pbXVtIHN1cHBvcnRlZCBicm93c2VyIHZlcnNpb24gbWF0Y2hlcyB0byAke21pbkJyb3dzZXJWZXJzaW9uSW50fWApO1xuICAgICAgbGV0IGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA9IDA7XG4gICAgICAvLyBTZWxlY3QgdGhlIG5ld2VzdCBhdmFpbGFibGUgYW5kIGNvbXBhdGlibGUgY2hyb21lZHJpdmVyXG4gICAgICBmb3IgKGNvbnN0IGNkTmFtZSBvZiBkcml2ZXJzVG9TeW5jKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbiA9IHBhcnNlSW50KHRoaXMubWFwcGluZ1tjZE5hbWVdLm1pbkJyb3dzZXJWZXJzaW9uLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4oY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uKVxuICAgICAgICAgICAgJiYgY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uIDw9IG1pbkJyb3dzZXJWZXJzaW9uSW50XG4gICAgICAgICAgICAmJiBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPCBjdXJyZW50TWluQnJvd3NlclZlcnNpb24pIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPSBjdXJyZW50TWluQnJvd3NlclZlcnNpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jLmZpbHRlcigoY2ROYW1lKSA9PiBgJHt0aGlzLm1hcHBpbmdbY2ROYW1lXS5taW5Ccm93c2VyVmVyc2lvbn1gID09PVxuICAgICAgICBgJHtjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPiAwID8gY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIDogbWluQnJvd3NlclZlcnNpb25JbnR9YCk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2l0ZW0nLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcnNUb1N5bmMpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgV2lsbCBzZWxlY3QgY2FuZGlkYXRlICR7dXRpbC5wbHVyYWxpemUoJ2RyaXZlcicsIGRyaXZlcnNUb1N5bmMubGVuZ3RoKX0gYCArXG4gICAgICAgIGB2ZXJzaW9uZWQgYXMgJyR7Xy51bmlxKGRyaXZlcnNUb1N5bmMubWFwKChjZE5hbWUpID0+IHRoaXMubWFwcGluZ1tjZE5hbWVdLnZlcnNpb24pKX0nYCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkob3NJbmZvKSkge1xuICAgICAgLy8gRmlsdGVyIG91dCBkcml2ZXJzIGZvciB1bnN1cHBvcnRlZCBzeXN0ZW0gYXJjaGl0ZWN0dXJlc1xuICAgICAgbGV0IHtuYW1lLCBhcmNoLCBoYXJkd2FyZU5hbWV9ID0gb3NJbmZvO1xuICAgICAgaWYgKGFyY2ggPT09IFg2NCAmJiAhZHJpdmVyc1RvU3luYy5zb21lKChjZE5hbWUpID0+IGNkTmFtZS5pbmNsdWRlcyhgXyR7bmFtZX0ke1g2NH1gKSkpIHtcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHg4NiBidWlsZCBpZiB4NjQgb25lIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBPU1xuICAgICAgICBhcmNoID0gWDg2O1xuICAgICAgfVxuICAgICAgaWYgKG5hbWUgPT09IE9TLm1hYyAmJiBfLmluY2x1ZGVzKGhhcmR3YXJlTmFtZSwgJ2FybScpXG4gICAgICAgICAgJiYgZHJpdmVyc1RvU3luYy5zb21lKChjZE5hbWUpID0+IGNkTmFtZS5pbmNsdWRlcyhNMV9BUkNIX1NVRkZJWCkpKSB7XG4gICAgICAgIC8vIHByZWZlciBleGVjdXRhYmxlIGZvciBNMSBhcmNoIGlmIHByZXNlbnRcbiAgICAgICAgYXJjaCArPSBNMV9BUkNIX1NVRkZJWDtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgcGxhdGZvcm0gbWF0Y2hlcyB0byAke25hbWV9JHthcmNofWApO1xuICAgICAgY29uc3QgcGxhdGZvcm1SZSA9IG5ldyBSZWdFeHAoYChcXFxcYnxfKSR7bmFtZX0ke2FyY2h9XFxcXGJgKTtcbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jLmZpbHRlcigoY2ROYW1lKSA9PiBwbGF0Zm9ybVJlLnRlc3QoY2ROYW1lKSk7XG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBkcml2ZXJzVG9TeW5jO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZ2l2ZW4gY2hyb21lZHJpdmVyIGZyb20gdGhlIHN0b3JhZ2VcbiAgICogYW5kIHVucGFja3MgaXQgaW50byBgdGhpcy5jaHJvbWVkcml2ZXJEaXJgIGZvbGRlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgdW5pcXVlIGRyaXZlciBpbmRleFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHJpdmVyS2V5IC0gVGhlIGRyaXZlciBrZXkgaW4gYHRoaXMubWFwcGluZ2BcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyY2hpdmVzUm9vdCAtIFRoZSB0ZW1wb3JhcnkgZm9sZGVyIHBhdGggdG8gZXh0cmFjdFxuICAgKiBkb3dubG9hZGVkIGFyY2hpdmVzIHRvXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTdHJpY3QgW3RydWVdIC0gV2hldGhlciB0byB0aHJvdyBhbiBlcnJvciAoYHRydWVgKVxuICAgKiBvciByZXR1cm4gYSBib29sZWFuIHJlc3VsdCBpZiB0aGUgZHJpdmVyIHJldHJpZXZhbCBwcm9jZXNzIGZhaWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHJldHJpZXZpbmcgdGhlIGRyaXZlclxuICAgKiBhbmQgYGlzU3RyaWN0YCBpcyBzZXQgdG8gYHRydWVgXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBpZiBgdHJ1ZWAgdGhlbiB0aGUgY2hyb21lZHJpdmVyIGlzIHN1Y2Nlc3NmdWxseVxuICAgKiBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWQuXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZURyaXZlciAoaW5kZXgsIGRyaXZlcktleSwgYXJjaGl2ZXNSb290LCBpc1N0cmljdCA9IGZhbHNlKSB7XG4gICAgY29uc3QgeyB1cmwsIGV0YWcsIHZlcnNpb24gfSA9IHRoaXMubWFwcGluZ1tkcml2ZXJLZXldO1xuICAgIGNvbnN0IGFyY2hpdmVQYXRoID0gcGF0aC5yZXNvbHZlKGFyY2hpdmVzUm9vdCwgYCR7aW5kZXh9LnppcGApO1xuICAgIGxvZy5kZWJ1ZyhgUmV0cmlldmluZyAnJHt1cmx9JyB0byAnJHthcmNoaXZlUGF0aH0nYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldC5kb3dubG9hZEZpbGUodXJsLCBhcmNoaXZlUGF0aCwge1xuICAgICAgICBpc01ldGVyZWQ6IGZhbHNlLFxuICAgICAgICB0aW1lb3V0OiBUSU1FT1VUX01TXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBgQ2Fubm90IGRvd25sb2FkIGNocm9tZWRyaXZlciBhcmNoaXZlLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YDtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcihtc2cpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWF3YWl0IGlzQ3JjT2soYXJjaGl2ZVBhdGgsIGV0YWcpKSB7XG4gICAgICBjb25zdCBtc2cgPSBgVGhlIGNoZWNrc3VtIGZvciB0aGUgZG93bmxvYWRlZCBjaHJvbWVkcml2ZXIgJyR7ZHJpdmVyS2V5fScgZGlkIG5vdCBtYXRjaGA7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHtwYXRoLnBhcnNlKHVybCkubmFtZX1fdiR7dmVyc2lvbn1gICtcbiAgICAgIChzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJyk7XG4gICAgY29uc3QgdGFyZ2V0UGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmNocm9tZWRyaXZlckRpciwgZmlsZU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnVuemlwRHJpdmVyKGFyY2hpdmVQYXRoLCB0YXJnZXRQYXRoKTtcbiAgICAgIGF3YWl0IGZzLmNobW9kKHRhcmdldFBhdGgsIDBvNzU1KTtcbiAgICAgIGxvZy5kZWJ1ZyhgUGVybWlzc2lvbnMgb2YgdGhlIGZpbGUgJyR7dGFyZ2V0UGF0aH0nIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIDc1NWApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IFN5bmNPcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXk8U3RyaW5nPn0gdmVyc2lvbnMgLSBUaGUgbGlzdCBvZiBjaHJvbWVkcml2ZXJcbiAgICogdmVyc2lvbnMgdG8gc3luYy4gSWYgZW1wdHkgKHRoZSBkZWZhdWx0IHZhbHVlKSB0aGVuIGFsbCBhdmFpbGFibGVcbiAgICogY2hyb21lZHJpdmVycyBhcmUgZ29pbmcgdG8gYmUgZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gbWluQnJvd3NlclZlcnNpb24gLSBUaGUgbWludW11bSBzdXBwb3J0ZWRcbiAgICogQ2hyb21lIHZlcnNpb24gdGhhdCBkb3dubG9hZGVkIGNocm9tZWRyaXZlcnMgc2hvdWxkIHN1cHBvcnQuIENhbiBtYXRjaFxuICAgKiBtdWx0aXBsZSBkcml2ZXJzLlxuICAgKiBAcHJvcGVydHkgez9PU0luZm99IG9zSW5mbyAtIFN5c3RlbSBpbmZvcm1hdGlvbiB1c2VkIHRvIGZpbHRlciBvdXRcbiAgICogdGhlIGxpc3Qgb2YgdGhlIHJldHJpZXZlZCBkcml2ZXJzLiBJZiBub3QgcHJvdmlkZWQgdGhlbiB0aGUgc2NyaXB0XG4gICAqIHdpbGwgdHJ5IHRvIHJldHJpZXZlIGl0LlxuICAgKi9cblxuICAvKipcbiAgICogUmV0cmlldmVzIGNocm9tZWRyaXZlcnMgZnJvbSB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICogdG8gdGhlIGxvY2FsIGZpbGUgc3lzdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7P1N5bmNPcHRpb25zfSBvcHRzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIHJldHJpZXZpbmdcbiAgICogdGhlIGRyaXZlcnNcbiAgICogQHJldHVybnMge0FycmF5PFN0cmluZ30gVGhlIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5IHN5bmNocm9uaXplZCBkcml2ZXIga2V5c1xuICAgKi9cbiAgYXN5bmMgc3luY0RyaXZlcnMgKG9wdHMgPSB7fSkge1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5tYXBwaW5nKSkge1xuICAgICAgYXdhaXQgdGhpcy5yZXRyaWV2ZU1hcHBpbmcoISFvcHRzLm1pbkJyb3dzZXJWZXJzaW9uKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLm1hcHBpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgZnJvbSBHb29nbGUgc3RvcmFnZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGRyaXZlcnNUb1N5bmMgPSB0aGlzLnNlbGVjdE1hdGNoaW5nRHJpdmVycyhvcHRzLm9zSW5mbyA/PyBhd2FpdCBnZXRPc0luZm8oKSwgb3B0cyk7XG4gICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBhcmUgbm8gZHJpdmVycyB0byBzeW5jLiBFeGl0aW5nYCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2RyaXZlcicsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX0gdG8gc3luYzogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShkcml2ZXJzVG9TeW5jLCBudWxsLCAyKSk7XG5cbiAgICBjb25zdCBzeW5jaHJvbml6ZWREcml2ZXJzID0gW107XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBjb25zdCBhcmNoaXZlc1Jvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBbaWR4LCBkcml2ZXJLZXldIG9mIGRyaXZlcnNUb1N5bmMuZW50cmllcygpKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5yZXRyaWV2ZURyaXZlcihpZHgsIGRyaXZlcktleSwgYXJjaGl2ZXNSb290LCAhXy5pc0VtcHR5KG9wdHMpKSkge1xuICAgICAgICAgICAgc3luY2hyb25pemVkRHJpdmVycy5wdXNoKGRyaXZlcktleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpKTtcblxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoICUgTUFYX1BBUkFMTEVMX0RPV05MT0FEUyA9PT0gMCkge1xuICAgICAgICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYoYXJjaGl2ZXNSb290KTtcbiAgICB9XG4gICAgaWYgKCFfLmlzRW1wdHkoc3luY2hyb25pemVkRHJpdmVycykpIHtcbiAgICAgIGxvZy5pbmZvKGBTdWNjZXNzZnVsbHkgc3luY2hyb25pemVkIGAgK1xuICAgICAgICBgJHt1dGlsLnBsdXJhbGl6ZSgnY2hyb21lZHJpdmVyJywgc3luY2hyb25pemVkRHJpdmVycy5sZW5ndGgsIHRydWUpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbyhgTm8gY2hyb21lZHJpdmVycyB3ZXJlIHN5bmNocm9uaXplZGApO1xuICAgIH1cbiAgICByZXR1cm4gc3luY2hyb25pemVkRHJpdmVycztcbiAgfVxu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
|
package/build/lib/utils.js
CHANGED
|
@@ -18,9 +18,9 @@ require("source-map-support/register");
|
|
|
18
18
|
|
|
19
19
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
20
20
|
|
|
21
|
-
var _support = require("
|
|
21
|
+
var _support = require("appium/support");
|
|
22
22
|
|
|
23
|
-
var
|
|
23
|
+
var _driver = require("appium/driver");
|
|
24
24
|
|
|
25
25
|
var _path = _interopRequireDefault(require("path"));
|
|
26
26
|
|
|
@@ -126,11 +126,11 @@ const getOsInfo = _lodash.default.memoize(async function getOsInfo() {
|
|
|
126
126
|
|
|
127
127
|
exports.getOsInfo = getOsInfo;
|
|
128
128
|
|
|
129
|
-
const getBaseDriverInstance = _lodash.default.memoize(() => new
|
|
129
|
+
const getBaseDriverInstance = _lodash.default.memoize(() => new _driver.BaseDriver({}, false));
|
|
130
130
|
|
|
131
131
|
function generateLogPrefix(obj, sessionId = null) {
|
|
132
132
|
return getBaseDriverInstance().helpers.generateDriverLogPrefix(obj, sessionId);
|
|
133
133
|
}require('source-map-support').install();
|
|
134
134
|
|
|
135
135
|
|
|
136
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
136
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsicm9vdERpciIsInBhdGgiLCJiYXNlbmFtZSIsIl9fZGlybmFtZSIsInJlc29sdmUiLCJwcm9jZXNzIiwiZW52IiwiTk9fUFJFQ09NUElMRSIsIkNIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyIsInJlcXVpcmUiLCJDRF9WRVIiLCJucG1fY29uZmlnX2Nocm9tZWRyaXZlcl92ZXJzaW9uIiwiQ0hST01FRFJJVkVSX1ZFUlNJT04iLCJnZXRNb3N0UmVjZW50Q2hyb21lZHJpdmVyIiwiQ0RfQkFTRV9ESVIiLCJDRF9DRE4iLCJucG1fY29uZmlnX2Nocm9tZWRyaXZlcl9jZG51cmwiLCJDSFJPTUVEUklWRVJfQ0ROVVJMIiwiT1MiLCJsaW51eCIsIndpbmRvd3MiLCJtYWMiLCJYNjQiLCJYODYiLCJNMV9BUkNIX1NVRkZJWCIsIkNEX0VYRUNVVEFCTEVfUFJFRklYIiwibWFwcGluZyIsIl8iLCJpc0VtcHR5IiwiRXJyb3IiLCJsYXN0Iiwia2V5cyIsInNvcnQiLCJjb21wYXJlVmVyc2lvbnMiLCJnZXRDaHJvbWVWZXJzaW9uIiwiYWRiIiwiYnVuZGxlSWQiLCJ2ZXJzaW9uTmFtZSIsImdldFBhY2thZ2VJbmZvIiwiZ2V0Q2hyb21lZHJpdmVyRGlyIiwib3NOYW1lIiwiZ2V0T3NOYW1lIiwiZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCIsInBhdGhTdWZmaXgiLCJwYXRocyIsImZzIiwiZ2xvYiIsImN3ZCIsImFic29sdXRlIiwibm9jYXNlIiwibm9kaXIiLCJzdHJpY3QiLCJmaXJzdCIsInJldHJpZXZlRGF0YSIsInVybCIsImhlYWRlcnMiLCJvcHRzIiwidGltZW91dCIsInJlc3BvbnNlVHlwZSIsImF4aW9zIiwiZGF0YSIsIm1lbW9pemUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJpc01hYyIsImdldE9zSW5mbyIsIm5hbWUiLCJhcmNoIiwiaGFyZHdhcmVOYW1lIiwidHJpbSIsImV4ZWMiLCJnZXRCYXNlRHJpdmVySW5zdGFuY2UiLCJCYXNlRHJpdmVyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJvYmoiLCJzZXNzaW9uSWQiLCJoZWxwZXJzIiwiZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHN5c3RlbSwgZnMgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBjb21wYXJlVmVyc2lvbnMgZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5cblxuY29uc3Qgcm9vdERpciA9IHBhdGguYmFzZW5hbWUoX19kaXJuYW1lKSA9PT0gJ2xpYidcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBwcm9jZXNzLmVudi5OT19QUkVDT01QSUxFID8gJy4uJyA6ICcuLi8uLicpXG4gIDogX19kaXJuYW1lO1xuLy8gQ2hyb21lZHJpdmVyIHZlcnNpb246IG1pbmltdW0gQ2hyb21lIHZlcnNpb25cbmNvbnN0IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKHJvb3REaXIsICdjb25maWcnLCAnbWFwcGluZy5qc29uJykpO1xuXG5jb25zdCBDRF9WRVIgPSBwcm9jZXNzLmVudi5ucG1fY29uZmlnX2Nocm9tZWRyaXZlcl92ZXJzaW9uXG4gIHx8IHByb2Nlc3MuZW52LkNIUk9NRURSSVZFUl9WRVJTSU9OXG4gIHx8IGdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIoKTtcbmNvbnN0IENEX0JBU0VfRElSID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2Nocm9tZWRyaXZlcicpO1xuY29uc3QgQ0RfQ0ROID0gcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19jaHJvbWVkcml2ZXJfY2RudXJsXG4gIHx8IHByb2Nlc3MuZW52LkNIUk9NRURSSVZFUl9DRE5VUkxcbiAgfHwgJ2h0dHBzOi8vY2hyb21lZHJpdmVyLnN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20nO1xuY29uc3QgT1MgPSB7XG4gIGxpbnV4OiAnbGludXgnLFxuICB3aW5kb3dzOiAnd2luJyxcbiAgbWFjOiAnbWFjJ1xufTtcbmNvbnN0IFg2NCA9ICc2NCc7XG5jb25zdCBYODYgPSAnMzInO1xuY29uc3QgTTFfQVJDSF9TVUZGSVggPSAnX20xJztcbmNvbnN0IENEX0VYRUNVVEFCTEVfUFJFRklYID0gJ2Nocm9tZWRyaXZlcic7XG5cblxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlciAobWFwcGluZyA9IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORykge1xuICBpZiAoXy5pc0VtcHR5KG1hcHBpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uIGZyb20gZW1wdHkgbWFwcGluZycpO1xuICB9XG4gIHJldHVybiBfLmxhc3QoXy5rZXlzKG1hcHBpbmcpLnNvcnQoY29tcGFyZVZlcnNpb25zKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZVZlcnNpb24gKGFkYiwgYnVuZGxlSWQpIHtcbiAgY29uc3Qge3ZlcnNpb25OYW1lfSA9IGF3YWl0IGFkYi5nZXRQYWNrYWdlSW5mbyhidW5kbGVJZCk7XG4gIHJldHVybiB2ZXJzaW9uTmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyRGlyIChvc05hbWUgPSBnZXRPc05hbWUoKSkge1xuICByZXR1cm4gcGF0aC5yZXNvbHZlKENEX0JBU0VfRElSLCBvc05hbWUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIChvc05hbWUgPSBnZXRPc05hbWUoKSkge1xuICBjb25zdCByb290RGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKG9zTmFtZSk7XG4gIGNvbnN0IHBhdGhTdWZmaXggPSBvc05hbWUgPT09IE9TLndpbmRvd3MgPyAnLmV4ZScgOiAnJztcbiAgY29uc3QgcGF0aHMgPSBhd2FpdCBmcy5nbG9iKGAke0NEX0VYRUNVVEFCTEVfUFJFRklYfSoke3BhdGhTdWZmaXh9YCwge1xuICAgIGN3ZDogcm9vdERpcixcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBub2Nhc2U6IHRydWUsXG4gICAgbm9kaXI6IHRydWUsXG4gICAgc3RyaWN0OiBmYWxzZSxcbiAgfSk7XG4gIHJldHVybiBfLmlzRW1wdHkocGF0aHMpXG4gICAgPyBwYXRoLnJlc29sdmUocm9vdERpciwgYCR7Q0RfRVhFQ1VUQUJMRV9QUkVGSVh9JHtwYXRoU3VmZml4fWApXG4gICAgOiBfLmZpcnN0KHBhdGhzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVEYXRhICh1cmwsIGhlYWRlcnMsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gICAgcmVzcG9uc2VUeXBlID0gJ3RleHQnLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgdXJsLFxuICAgIGhlYWRlcnMsXG4gICAgdGltZW91dCxcbiAgICByZXNwb25zZVR5cGUsXG4gIH0pKS5kYXRhO1xufVxuXG5jb25zdCBnZXRPc05hbWUgPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0T3NOYW1lICgpIHtcbiAgaWYgKHN5c3RlbS5pc1dpbmRvd3MoKSkge1xuICAgIHJldHVybiBPUy53aW5kb3dzO1xuICB9XG4gIGlmIChzeXN0ZW0uaXNNYWMoKSkge1xuICAgIHJldHVybiBPUy5tYWM7XG4gIH1cbiAgcmV0dXJuIE9TLmxpbnV4O1xufSk7XG5cbmNvbnN0IGdldE9zSW5mbyA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRPc0luZm8gKCkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGdldE9zTmFtZSgpLFxuICAgIGFyY2g6IGF3YWl0IHN5c3RlbS5hcmNoKCksXG4gICAgaGFyZHdhcmVOYW1lOiBzeXN0ZW0uaXNXaW5kb3dzKCkgPyBudWxsIDogXy50cmltKGF3YWl0IGV4ZWMoJ3VuYW1lJywgWyctbSddKSksXG4gIH07XG59KTtcblxuY29uc3QgZ2V0QmFzZURyaXZlckluc3RhbmNlID0gXy5tZW1vaXplKCgpID0+IG5ldyBCYXNlRHJpdmVyKHt9LCBmYWxzZSkpO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBsb2cgcHJlZml4IHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmogbG9nIG93bmVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZz99IHNlc3Npb25JZCBPcHRpb25hbCBzZXNzaW9uIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlTG9nUHJlZml4IChvYmosIHNlc3Npb25JZCA9IG51bGwpIHtcbiAgcmV0dXJuIGdldEJhc2VEcml2ZXJJbnN0YW5jZSgpLmhlbHBlcnMuZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgob2JqLCBzZXNzaW9uSWQpO1xufVxuXG5cbmV4cG9ydCB7XG4gIGdldENocm9tZVZlcnNpb24sIGdldENocm9tZWRyaXZlckRpciwgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCwgZ2V0T3NOYW1lLFxuICBDRF9CQVNFX0RJUiwgQ0RfQ0ROLCBDRF9WRVIsIENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORywgZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlcixcbiAgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sIE9TLCBYNjQsIFg4NiwgTTFfQVJDSF9TVUZGSVgsIGdlbmVyYXRlTG9nUHJlZml4LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7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
|
package/config/mapping.json
CHANGED
package/lib/chromedriver.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// transpile:main
|
|
2
2
|
|
|
3
3
|
import events from 'events';
|
|
4
|
-
import { JWProxy, PROTOCOLS } from '
|
|
4
|
+
import { JWProxy, PROTOCOLS } from 'appium/driver';
|
|
5
5
|
import cp from 'child_process';
|
|
6
|
-
import { system, fs, logger, util } from '
|
|
6
|
+
import { system, fs, logger, util } from 'appium/support';
|
|
7
7
|
import { retryInterval, asyncmap } from 'asyncbox';
|
|
8
8
|
import { SubProcess, exec } from 'teen_process';
|
|
9
9
|
import B from 'bluebird';
|
package/lib/install.js
CHANGED
package/lib/protocol-helpers.js
CHANGED
package/lib/storage-client.js
CHANGED
|
@@ -7,7 +7,7 @@ import xpath from 'xpath';
|
|
|
7
7
|
import { DOMParser } from '@xmldom/xmldom';
|
|
8
8
|
import B from 'bluebird';
|
|
9
9
|
import path from 'path';
|
|
10
|
-
import { system, fs, logger, tempDir, zip, util, net } from '
|
|
10
|
+
import { system, fs, logger, tempDir, zip, util, net } from 'appium/support';
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
const TIMEOUT_MS = 15000;
|
package/lib/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
|
-
import { system, fs } from '
|
|
3
|
-
import { BaseDriver } from '
|
|
2
|
+
import { system, fs } from 'appium/support';
|
|
3
|
+
import { BaseDriver } from 'appium/driver';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import compareVersions from 'compare-versions';
|
|
6
6
|
import axios from 'axios';
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"chrome",
|
|
7
7
|
"android"
|
|
8
8
|
],
|
|
9
|
-
"version": "5.0
|
|
9
|
+
"version": "5.1.0",
|
|
10
10
|
"author": "appium",
|
|
11
11
|
"license": "Apache-2.0",
|
|
12
12
|
"repository": {
|
|
@@ -35,8 +35,6 @@
|
|
|
35
35
|
"config/mapping.json"
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@appium/base-driver": "^8.4.0",
|
|
39
|
-
"@appium/support": "^2.55.3",
|
|
40
38
|
"@babel/runtime": "^7.0.0",
|
|
41
39
|
"@xmldom/xmldom": "^0.x",
|
|
42
40
|
"asyncbox": "^2.0.2",
|
|
@@ -70,11 +68,15 @@
|
|
|
70
68
|
"lint": "gulp lint",
|
|
71
69
|
"lint:fix": "gulp lint --fix"
|
|
72
70
|
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"appium": "^2.0.0-beta.40"
|
|
73
|
+
},
|
|
73
74
|
"devDependencies": {
|
|
74
75
|
"@appium/gulp-plugins": "^7.0.0",
|
|
75
76
|
"@appium/eslint-config-appium": "^6.0.0",
|
|
76
77
|
"@appium/test-support": "^1.0.0",
|
|
77
78
|
"@semantic-release/git": "^10.0.1",
|
|
79
|
+
"appium": "^2.0.0-beta.40",
|
|
78
80
|
"chai": "^4.1.2",
|
|
79
81
|
"chai-as-promised": "^7.1.1",
|
|
80
82
|
"eslint-config-prettier": "^8.5.0",
|
|
@@ -82,6 +84,6 @@
|
|
|
82
84
|
"mocha": "^10.0.0",
|
|
83
85
|
"pre-commit": "^1.1.3",
|
|
84
86
|
"semantic-release": "^19.0.2",
|
|
85
|
-
"sinon": "^
|
|
87
|
+
"sinon": "^14.0.0"
|
|
86
88
|
}
|
|
87
89
|
}
|