appium-chromedriver 4.27.3 → 5.0.1

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.
@@ -15,21 +15,21 @@ var _lodash = _interopRequireDefault(require("lodash"));
15
15
 
16
16
  var _xpath = _interopRequireDefault(require("xpath"));
17
17
 
18
- var _xmldom = require("xmldom");
18
+ var _xmldom = require("@xmldom/xmldom");
19
19
 
20
20
  var _bluebird = _interopRequireDefault(require("bluebird"));
21
21
 
22
22
  var _path = _interopRequireDefault(require("path"));
23
23
 
24
- var _appiumSupport = require("appium-support");
24
+ var _support = require("@appium/support");
25
25
 
26
26
  const TIMEOUT_MS = 15000;
27
27
  const MAX_PARALLEL_DOWNLOADS = 5;
28
28
 
29
- const log = _appiumSupport.logger.getLogger('ChromedriverStorageClient');
29
+ const log = _support.logger.getLogger('ChromedriverStorageClient');
30
30
 
31
31
  async function isCrcOk(src, checksum) {
32
- const md5 = await _appiumSupport.fs.hash(src, 'md5');
32
+ const md5 = await _support.fs.hash(src, 'md5');
33
33
  return _lodash.default.toLower(md5) === _lodash.default.toLower(checksum);
34
34
  }
35
35
 
@@ -70,7 +70,7 @@ function findChildNode(parent, childName = null, text = null) {
70
70
  }
71
71
 
72
72
  function extractNodeText(node) {
73
- return !node || !node.firstChild || !_appiumSupport.util.hasValue(node.firstChild.nodeValue) ? null : node.firstChild.nodeValue;
73
+ return !node || !node.firstChild || !_support.util.hasValue(node.firstChild.nodeValue) ? null : node.firstChild.nodeValue;
74
74
  }
75
75
 
76
76
  class ChromedriverStorageClient {
@@ -190,22 +190,22 @@ class ChromedriverStorageClient {
190
190
  }
191
191
 
192
192
  async unzipDriver(src, dst) {
193
- const tmpRoot = await _appiumSupport.tempDir.openDir();
193
+ const tmpRoot = await _support.tempDir.openDir();
194
194
 
195
195
  try {
196
- await _appiumSupport.zip.extractAllTo(src, tmpRoot);
197
- const chromedriverPath = await _appiumSupport.fs.walkDir(tmpRoot, true, (itemPath, isDirectory) => !isDirectory && _lodash.default.toLower(_path.default.parse(itemPath).name) === 'chromedriver');
196
+ await _support.zip.extractAllTo(src, tmpRoot);
197
+ const chromedriverPath = await _support.fs.walkDir(tmpRoot, true, (itemPath, isDirectory) => !isDirectory && _lodash.default.toLower(_path.default.parse(itemPath).name) === 'chromedriver');
198
198
 
199
199
  if (!chromedriverPath) {
200
200
  throw new Error('The archive was unzipped properly, but we could not find any chromedriver executable');
201
201
  }
202
202
 
203
203
  log.debug(`Moving the extracted '${_path.default.basename(chromedriverPath)}' to '${dst}'`);
204
- await _appiumSupport.fs.mv(chromedriverPath, dst, {
204
+ await _support.fs.mv(chromedriverPath, dst, {
205
205
  mkdirp: true
206
206
  });
207
207
  } finally {
208
- await _appiumSupport.fs.rimraf(tmpRoot);
208
+ await _support.fs.rimraf(tmpRoot);
209
209
  }
210
210
  }
211
211
 
@@ -220,7 +220,7 @@ class ChromedriverStorageClient {
220
220
  if (!_lodash.default.isEmpty(versions)) {
221
221
  log.debug(`Selecting chromedrivers whose versions match to ${versions}`);
222
222
  driversToSync = driversToSync.filter(cdName => versions.includes(`${this.mapping[cdName].version}`));
223
- log.debug(`Got ${_appiumSupport.util.pluralize('item', driversToSync.length, true)}`);
223
+ log.debug(`Got ${_support.util.pluralize('item', driversToSync.length, true)}`);
224
224
 
225
225
  if (_lodash.default.isEmpty(driversToSync)) {
226
226
  return [];
@@ -241,13 +241,13 @@ class ChromedriverStorageClient {
241
241
  }
242
242
 
243
243
  driversToSync = driversToSync.filter(cdName => `${this.mapping[cdName].minBrowserVersion}` === `${closestMatchedVersionNumber > 0 ? closestMatchedVersionNumber : minBrowserVersionInt}`);
244
- log.debug(`Got ${_appiumSupport.util.pluralize('item', driversToSync.length, true)}`);
244
+ log.debug(`Got ${_support.util.pluralize('item', driversToSync.length, true)}`);
245
245
 
246
246
  if (_lodash.default.isEmpty(driversToSync)) {
247
247
  return [];
248
248
  }
249
249
 
250
- log.debug(`Will select candidate ${_appiumSupport.util.pluralize('driver', driversToSync.length)} ` + `versioned as '${_lodash.default.uniq(driversToSync.map(cdName => this.mapping[cdName].version))}'`);
250
+ log.debug(`Will select candidate ${_support.util.pluralize('driver', driversToSync.length)} ` + `versioned as '${_lodash.default.uniq(driversToSync.map(cdName => this.mapping[cdName].version))}'`);
251
251
  }
252
252
 
253
253
  if (!_lodash.default.isEmpty(osInfo)) {
@@ -268,7 +268,7 @@ class ChromedriverStorageClient {
268
268
  log.debug(`Selecting chromedrivers whose platform matches to ${name}${arch}`);
269
269
  const platformRe = new RegExp(`(\\b|_)${name}${arch}\\b`);
270
270
  driversToSync = driversToSync.filter(cdName => platformRe.test(cdName));
271
- log.debug(`Got ${_appiumSupport.util.pluralize('item', driversToSync.length, true)}`);
271
+ log.debug(`Got ${_support.util.pluralize('item', driversToSync.length, true)}`);
272
272
  }
273
273
 
274
274
  return driversToSync;
@@ -286,7 +286,7 @@ class ChromedriverStorageClient {
286
286
  log.debug(`Retrieving '${url}' to '${archivePath}'`);
287
287
 
288
288
  try {
289
- await _appiumSupport.net.downloadFile(url, archivePath, {
289
+ await _support.net.downloadFile(url, archivePath, {
290
290
  isMetered: false,
291
291
  timeout: TIMEOUT_MS
292
292
  });
@@ -312,13 +312,13 @@ class ChromedriverStorageClient {
312
312
  return false;
313
313
  }
314
314
 
315
- const fileName = `${_path.default.parse(url).name}_v${version}` + (_appiumSupport.system.isWindows() ? '.exe' : '');
315
+ const fileName = `${_path.default.parse(url).name}_v${version}` + (_support.system.isWindows() ? '.exe' : '');
316
316
 
317
317
  const targetPath = _path.default.resolve(this.chromedriverDir, fileName);
318
318
 
319
319
  try {
320
320
  await this.unzipDriver(archivePath, targetPath);
321
- await _appiumSupport.fs.chmod(targetPath, 0o755);
321
+ await _support.fs.chmod(targetPath, 0o755);
322
322
  log.debug(`Permissions of the file '${targetPath}' have been changed to 755`);
323
323
  } catch (e) {
324
324
  if (isStrict) {
@@ -350,10 +350,10 @@ class ChromedriverStorageClient {
350
350
  return [];
351
351
  }
352
352
 
353
- log.debug(`Got ${_appiumSupport.util.pluralize('driver', driversToSync.length, true)} to sync: ` + JSON.stringify(driversToSync, null, 2));
353
+ log.debug(`Got ${_support.util.pluralize('driver', driversToSync.length, true)} to sync: ` + JSON.stringify(driversToSync, null, 2));
354
354
  const synchronizedDrivers = [];
355
355
  const promises = [];
356
- const archivesRoot = await _appiumSupport.tempDir.openDir();
356
+ const archivesRoot = await _support.tempDir.openDir();
357
357
 
358
358
  try {
359
359
  for (const [idx, driverKey] of driversToSync.entries()) {
@@ -370,11 +370,11 @@ class ChromedriverStorageClient {
370
370
 
371
371
  await _bluebird.default.all(promises);
372
372
  } finally {
373
- await _appiumSupport.fs.rimraf(archivesRoot);
373
+ await _support.fs.rimraf(archivesRoot);
374
374
  }
375
375
 
376
376
  if (!_lodash.default.isEmpty(synchronizedDrivers)) {
377
- log.info(`Successfully synchronized ` + `${_appiumSupport.util.pluralize('chromedriver', synchronizedDrivers.length, true)}`);
377
+ log.info(`Successfully synchronized ` + `${_support.util.pluralize('chromedriver', synchronizedDrivers.length, true)}`);
378
378
  } else {
379
379
  log.info(`No chromedrivers were synchronized`);
380
380
  }
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zdG9yYWdlLWNsaWVudC5qcyJdLCJuYW1lcyI6WyJUSU1FT1VUX01TIiwiTUFYX1BBUkFMTEVMX0RPV05MT0FEUyIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsImlzQ3JjT2siLCJzcmMiLCJjaGVja3N1bSIsIm1kNSIsImZzIiwiaGFzaCIsIl8iLCJ0b0xvd2VyIiwiZmluZENoaWxkTm9kZSIsInBhcmVudCIsImNoaWxkTmFtZSIsInRleHQiLCJoYXNDaGlsZE5vZGVzIiwiY2hpbGROb2RlSWR4IiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkTm9kZSIsImxvY2FsTmFtZSIsImNoaWxkVGV4dCIsImV4dHJhY3ROb2RlVGV4dCIsIm5vZGUiLCJmaXJzdENoaWxkIiwidXRpbCIsImhhc1ZhbHVlIiwibm9kZVZhbHVlIiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNvbnN0cnVjdG9yIiwiYXJncyIsImNocm9tZWRyaXZlckRpciIsInRpbWVvdXQiLCJtYXBwaW5nIiwicGFyc2VOb3RlcyIsImNvbnRlbnQiLCJyZXN1bHQiLCJ2ZXJzaW9uTWF0Y2giLCJleGVjIiwidmVyc2lvbiIsIm1pbkJyb3dzZXJWZXJzaW9uTWF0Y2giLCJtaW5Ccm93c2VyVmVyc2lvbiIsInJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8iLCJkcml2ZXJLZXkiLCJub3Rlc1VybCIsImluZm9EaWN0Iiwibm90ZXMiLCJhY2NlcHQiLCJkZWJ1ZyIsInBhcnNlU3RvcmFnZVhtbCIsImRvYyIsInNob3VsZFBhcnNlTm90ZXMiLCJkcml2ZXJOb2RlcyIsInhwYXRoIiwic2VsZWN0IiwiaXNFbXB0eSIsInByb21pc2VzIiwiZHJpdmVyTm9kZSIsImtleSIsImluY2x1ZGVzIiwiZXRhZyIsImNkSW5mbyIsInVybCIsIkNEX0NETiIsInRyaW0iLCJmaXJzdCIsInNwbGl0Iiwibm90ZXNQYXRoIiwiaXNOb3Rlc1ByZXNlbnQiLCJyZWR1Y2UiLCJhY2MiLCJpbmZvIiwicHVzaCIsIkIiLCJhbGwiLCJzaXplIiwicmV0cmlldmVNYXBwaW5nIiwieG1sIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiY2xvbmVEZWVwIiwidW56aXBEcml2ZXIiLCJkc3QiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJ6aXAiLCJleHRyYWN0QWxsVG8iLCJjaHJvbWVkcml2ZXJQYXRoIiwid2Fsa0RpciIsIml0ZW1QYXRoIiwiaXNEaXJlY3RvcnkiLCJwYXRoIiwicGFyc2UiLCJuYW1lIiwiRXJyb3IiLCJiYXNlbmFtZSIsIm12IiwibWtkaXJwIiwicmltcmFmIiwic2VsZWN0TWF0Y2hpbmdEcml2ZXJzIiwib3NJbmZvIiwib3B0cyIsInZlcnNpb25zIiwiZHJpdmVyc1RvU3luYyIsImtleXMiLCJmaWx0ZXIiLCJjZE5hbWUiLCJwbHVyYWxpemUiLCJpc05hTiIsIm1pbkJyb3dzZXJWZXJzaW9uSW50IiwicGFyc2VJbnQiLCJjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIiLCJjdXJyZW50TWluQnJvd3NlclZlcnNpb24iLCJ1bmlxIiwibWFwIiwiYXJjaCIsImhhcmR3YXJlTmFtZSIsIlg2NCIsInNvbWUiLCJYODYiLCJPUyIsIm1hYyIsIk0xX0FSQ0hfU1VGRklYIiwicGxhdGZvcm1SZSIsIlJlZ0V4cCIsInRlc3QiLCJyZXRyaWV2ZURyaXZlciIsImluZGV4IiwiYXJjaGl2ZXNSb290IiwiaXNTdHJpY3QiLCJhcmNoaXZlUGF0aCIsInJlc29sdmUiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJpc01ldGVyZWQiLCJlIiwibXNnIiwibWVzc2FnZSIsImVycm9yIiwiZmlsZU5hbWUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJ0YXJnZXRQYXRoIiwiY2htb2QiLCJzeW5jRHJpdmVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzeW5jaHJvbml6ZWREcml2ZXJzIiwiaWR4IiwiZW50cmllcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFJQTs7QUFDQTs7QUFDQTs7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YSwgZ2V0T3NJbmZvLFxuICBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeHBhdGggZnJvbSAneHBhdGgnO1xuaW1wb3J0IHsgRE9NUGFyc2VyIH0gZnJvbSAneG1sZG9tJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcywgbG9nZ2VyLCB0ZW1wRGlyLCB6aXAsIHV0aWwsIG5ldCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuXG5jb25zdCBUSU1FT1VUX01TID0gMTUwMDA7XG5jb25zdCBNQVhfUEFSQUxMRUxfRE9XTkxPQURTID0gNTtcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCcpO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIGlzQ3JjT2sgKHNyYywgY2hlY2tzdW0pIHtcbiAgY29uc3QgbWQ1ID0gYXdhaXQgZnMuaGFzaChzcmMsICdtZDUnKTtcbiAgcmV0dXJuIF8udG9Mb3dlcihtZDUpID09PSBfLnRvTG93ZXIoY2hlY2tzdW0pO1xufVxuXG5mdW5jdGlvbiBmaW5kQ2hpbGROb2RlIChwYXJlbnQsIGNoaWxkTmFtZSA9IG51bGwsIHRleHQgPSBudWxsKSB7XG4gIGlmICghY2hpbGROYW1lICYmICF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFwYXJlbnQuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKGxldCBjaGlsZE5vZGVJZHggPSAwOyBjaGlsZE5vZGVJZHggPCBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGNoaWxkTm9kZUlkeCsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gcGFyZW50LmNoaWxkTm9kZXNbY2hpbGROb2RlSWR4XTtcbiAgICBpZiAoY2hpbGROYW1lICYmICF0ZXh0ICYmIGNoaWxkTmFtZSA9PT0gY2hpbGROb2RlLmxvY2FsTmFtZSkge1xuICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICB9XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IGNoaWxkVGV4dCA9IGV4dHJhY3ROb2RlVGV4dChjaGlsZE5vZGUpO1xuICAgICAgaWYgKCFjaGlsZFRleHQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGROYW1lICYmIGNoaWxkTmFtZSA9PT0gY2hpbGROb2RlLmxvY2FsTmFtZSAmJiB0ZXh0ID09PSBjaGlsZFRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICghY2hpbGROYW1lICYmIHRleHQgPT09IGNoaWxkVGV4dCkge1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdE5vZGVUZXh0IChub2RlKSB7XG4gIHJldHVybiAoIW5vZGUgfHwgIW5vZGUuZmlyc3RDaGlsZCB8fCAhdXRpbC5oYXNWYWx1ZShub2RlLmZpcnN0Q2hpbGQubm9kZVZhbHVlKSlcbiAgICA/IG51bGxcbiAgICA6IG5vZGUuZmlyc3RDaGlsZC5ub2RlVmFsdWU7XG59XG5cblxuY2xhc3MgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChhcmdzID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBjaHJvbWVkcml2ZXJEaXIgPSBnZXRDaHJvbWVkcml2ZXJEaXIoKSxcbiAgICAgIHRpbWVvdXQgPSBUSU1FT1VUX01TLFxuICAgIH0gPSBhcmdzO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyRGlyID0gY2hyb21lZHJpdmVyRGlyO1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5tYXBwaW5nID0ge307XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gQWRkaXRpb25hbERyaXZlckRldGFpbHNcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSB2ZXJzaW9uIC0gQ2hyb21lZHJpdmVyIHZlcnNpb25cbiAgICogb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbkJyb3dzZXJWZXJzaW9uIC0gVGhlIG1pbmltdW0gYnJvd3NlciB2ZXJzaW9uXG4gICAqIHN1cHBvcnRlZCBieSBjaHJvbWVkcml2ZXIgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICAgKi9cblxuICAvKipcbiAgICogR2V0cyBhZGRpdGlvbmFsIGNocm9tZWRyaXZlciBkZXRhaWxzIGZyb20gY2hyb21lZHJpdmVyXG4gICAqIHJlbGVhc2Ugbm90ZXNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBSZWxlYXNlIG5vdGVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNocm9tZWRyaXZlclxuICAgKiBAcmV0dXJucyB7QWRkaXRpb25hbERyaXZlckRldGFpbHN9XG4gICAqL1xuICBwYXJzZU5vdGVzIChjb250ZW50KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gL15cXHMqWy1dK0Nocm9tZURyaXZlcltcXERdKyhbXFxkLl0rKS9pbS5leGVjKGNvbnRlbnQpO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIHJlc3VsdC52ZXJzaW9uID0gdmVyc2lvbk1hdGNoWzFdO1xuICAgIH1cbiAgICBjb25zdCBtaW5Ccm93c2VyVmVyc2lvbk1hdGNoID0gL15cXHMqU3VwcG9ydHMgQ2hyb21lW1xcRF0rKFxcZCspL2ltLmV4ZWMoY29udGVudCk7XG4gICAgaWYgKG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2gpIHtcbiAgICAgIHJlc3VsdC5taW5Ccm93c2VyVmVyc2lvbiA9IG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2hbMV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWRzIGNocm9tZWRyaXZlciByZWxlYXNlIG5vdGVzIGFuZCBwdXRzIHRoZW1cbiAgICogaW50byB0aGUgZGljdGlvbmFyeSBhcmd1bWVudFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHJpdmVyS2V5IC0gRHJpdmVyIHZlcnNpb24gcGx1cyBhcmNoaXZlIG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5vdGVzVXJsIC0gVGhlIFVSTCBvZiBjaHJvbWVkcml2ZXIgbm90ZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IGluZm9EaWN0IC0gVGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyBkcml2ZXIgaW5mby5cbiAgICogVGhlIG1ldGhvZCBjYWxsIG11dGF0ZXMgYnkgbWVyZ2luZyBgQWRkaXRpb25hbERyaXZlckRldGFpbHNgXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgcmVsZWFzZSBub3RlcyBjYW5ub3QgYmUgZG93bmxvYWRlZFxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVBZGRpdGlvbmFsRHJpdmVySW5mbyAoZHJpdmVyS2V5LCBub3Rlc1VybCwgaW5mb0RpY3QpIHtcbiAgICBjb25zdCBub3RlcyA9IGF3YWl0IHJldHJpZXZlRGF0YShub3Rlc1VybCwge1xuICAgICAgJ3VzZXItYWdlbnQnOiAnYXBwaXVtJyxcbiAgICAgIGFjY2VwdDogJyovKicsXG4gICAgfSwgeyB0aW1lb3V0OiB0aGlzLnRpbWVvdXQgfSk7XG4gICAgY29uc3QgeyBtaW5Ccm93c2VyVmVyc2lvbiB9ID0gdGhpcy5wYXJzZU5vdGVzKG5vdGVzKTtcbiAgICBpZiAoIW1pbkJyb3dzZXJWZXJzaW9uKSB7XG4gICAgICBsb2cuZGVidWcoYFRoZSBkcml2ZXIgJyR7ZHJpdmVyS2V5fScgZG9lcyBub3QgY29udGFpbiB2YWxpZCByZWxlYXNlIG5vdGVzIGF0ICR7bm90ZXNVcmx9LiBgICtcbiAgICAgICAgYFNraXBwaW5nIGl0YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluZm9EaWN0Lm1pbkJyb3dzZXJWZXJzaW9uID0gbWluQnJvd3NlclZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGNocm9tZWRyaXZlciBzdG9yYWdlIFhNTCBhbmQgc3RvcmVzXG4gICAqIHRoZSBwYXJzZWQgcmVzdWx0cyBpbnRvIGB0aGlzLm1hcHBpbmdgXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRG9jdW1lbnR9IGRvYyAtIFRoZSBET00gcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIGNocm9tZWRyaXZlciBzdG9yYWdlIFhNTFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFBhcnNlTm90ZXMgW3RydWVdIC0gSWYgc2V0IHRvIGB0cnVlYFxuICAgKiB0aGVuIGFkZGl0aW9uYWwgZHJpdmVycyBpbmZvcm1hdGlvbiBpcyBnb2luZyB0byBiZSBwYXJzZWRcbiAgICogYW5kIGFzc2lnbmVkIHRvIGB0aGlzLm1hcHBpbmdgXG4gICAqL1xuICBhc3luYyBwYXJzZVN0b3JhZ2VYbWwgKGRvYywgc2hvdWxkUGFyc2VOb3RlcyA9IHRydWUpIHtcbiAgICBjb25zdCBkcml2ZXJOb2RlcyA9IHhwYXRoLnNlbGVjdChgLy8qW2xvY2FsLW5hbWUoLik9J0NvbnRlbnRzJ11gLCBkb2MpO1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkICR7ZHJpdmVyTm9kZXMubGVuZ3RofSBlbnRyaWVzIGZyb20gc3RvcmFnZSBYTUxgKTtcbiAgICBpZiAoXy5pc0VtcHR5KGRyaXZlck5vZGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgZm9yIChjb25zdCBkcml2ZXJOb2RlIG9mIGRyaXZlck5vZGVzKSB7XG4gICAgICBjb25zdCBrZXkgPSBleHRyYWN0Tm9kZVRleHQoZmluZENoaWxkTm9kZShkcml2ZXJOb2RlLCAnS2V5JykpO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKGtleSwgJy9jaHJvbWVkcml2ZXJfJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV0YWcgPSBleHRyYWN0Tm9kZVRleHQoZmluZENoaWxkTm9kZShkcml2ZXJOb2RlLCAnRVRhZycpKTtcbiAgICAgIGlmICghZXRhZykge1xuICAgICAgICBsb2cuZGVidWcoYFRoZSBlbnRyeSAnJHtrZXl9JyBkb2VzIG5vdCBjb250YWluIHRoZSBjaGVja3N1bS4gU2tpcHBpbmcgaXRgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNkSW5mbyA9IHtcbiAgICAgICAgdXJsOiBgJHtDRF9DRE59LyR7a2V5fWAsXG4gICAgICAgIGV0YWc6IF8udHJpbShldGFnLCAnXCInKSxcbiAgICAgICAgdmVyc2lvbjogXy5maXJzdChrZXkuc3BsaXQoJy8nKSksXG4gICAgICB9O1xuICAgICAgdGhpcy5tYXBwaW5nW2tleV0gPSBjZEluZm87XG5cbiAgICAgIGNvbnN0IG5vdGVzUGF0aCA9IGAke2NkSW5mby52ZXJzaW9ufS9ub3Rlcy50eHRgO1xuICAgICAgY29uc3QgaXNOb3Rlc1ByZXNlbnQgPSAhIWRyaXZlck5vZGVzXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgbm9kZSkgPT4gYWNjIHx8IGZpbmRDaGlsZE5vZGUobm9kZSwgJ0tleScsIG5vdGVzUGF0aCksIGZhbHNlKTtcbiAgICAgIGlmICghaXNOb3Rlc1ByZXNlbnQpIHtcbiAgICAgICAgY2RJbmZvLm1pbkJyb3dzZXJWZXJzaW9uID0gbnVsbDtcbiAgICAgICAgaWYgKHNob3VsZFBhcnNlTm90ZXMpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgVGhlIGVudHJ5ICcke2tleX0nIGRvZXMgbm90IGNvbnRhaW4gYW55IG5vdGVzLiBTa2lwcGluZyBpdGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmICghc2hvdWxkUGFyc2VOb3Rlcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8oa2V5LCBgJHtDRF9DRE59LyR7bm90ZXNQYXRofWAsIGNkSW5mbykpO1xuICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCAlIE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPT09IDApIHtcbiAgICAgICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgbG9nLmluZm8oYFRoZSB0b3RhbCBjb3VudCBvZiBlbnRyaWVzIGluIHRoZSBtYXBwaW5nOiAke18uc2l6ZSh0aGlzLm1hcHBpbmcpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IERyaXZlckRldGFpbHNcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHVybCAtIFRoZSBmdWxsIHVybCB0byB0aGUgY29ycmVzcG9uZGluZyBkcml2ZXIgaW5cbiAgICogdGhlIHJlbW90ZSBzdG9yYWdlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBldGFnIC0gVGhlIENSQyBvZiB0aGUgZHJpdmVyIGFyY2hpdmVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24gLSBDaHJvbWVkcml2ZXIgdmVyc2lvblxuICAgKi9cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gQ2hyb21lZHJpdmVyc01hcHBpbmdcbiAgICogQHByb3BlcnR5IHtEcml2ZXJEZXRhaWxzfSAtIFRoZSBrZXlzIGFyZSB1bmlxdWUgZHJpdmVyIGlkZW50aWZpZXJzXG4gICAqICh2ZXJzaW9uL2FyY2hpdmUgbmFtZSkuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBoYXZlIGBEcml2ZXJEZXRhaWxzYFxuICAgKiBjb250YWluaW5nIGNocm9tZWRyaXZlciBkZXRhaWxzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgY2hyb21lZHJpdmVyIG1hcHBpbmcgZnJvbSB0aGUgc3RvcmFnZVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFBhcnNlTm90ZXMgW3RydWVdIC0gaWYgc2V0IHRvIGB0cnVlYFxuICAgKiB0aGVuIGFkZGl0aW9uYWwgY2hyb21lZHJpdmVycyBpbmZvIGlzIGdvaW5nIHRvIGJlIHJldHJpZXZlZCBhbmRcbiAgICogcGFyc2VkIGZyb20gcmVsZWFzZSBub3Rlc1xuICAgKiBAcmV0dXJucyB7Q2hyb21lZHJpdmVyc01hcHBpbmd9XG4gICAqL1xuICBhc3luYyByZXRyaWV2ZU1hcHBpbmcgKHNob3VsZFBhcnNlTm90ZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgeG1sID0gYXdhaXQgcmV0cmlldmVEYXRhKENEX0NETiwge1xuICAgICAgJ3VzZXItYWdlbnQnOiAnYXBwaXVtJyxcbiAgICAgIGFjY2VwdDogJ2FwcGxpY2F0aW9uL3htbCwgKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IHRoaXMudGltZW91dCB9KTtcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHhtbCk7XG4gICAgYXdhaXQgdGhpcy5wYXJzZVN0b3JhZ2VYbWwoZG9jLCBzaG91bGRQYXJzZU5vdGVzKTtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodGhpcy5tYXBwaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBkb3dubG9hZGVkIGNocm9tZWRyaXZlciBhcmNoaXZlXG4gICAqIGludG8gdGhlIGdpdmVuIGRlc3RpbmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgLSBUaGUgc291cmNlIGFyY2hpdmUgcGF0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHN0IC0gVGhlIGRlc3RpbmF0aW9uIGNocm9tZWRyaXZlciBwYXRoXG4gICAqL1xuICBhc3luYyB1bnppcERyaXZlciAoc3JjLCBkc3QpIHtcbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oc3JjLCB0bXBSb290KTtcbiAgICAgIGNvbnN0IGNocm9tZWRyaXZlclBhdGggPSBhd2FpdCBmcy53YWxrRGlyKHRtcFJvb3QsIHRydWUsIChpdGVtUGF0aCwgaXNEaXJlY3RvcnkpID0+XG4gICAgICAgICFpc0RpcmVjdG9yeSAmJiBfLnRvTG93ZXIocGF0aC5wYXJzZShpdGVtUGF0aCkubmFtZSkgPT09ICdjaHJvbWVkcml2ZXInKTtcbiAgICAgIGlmICghY2hyb21lZHJpdmVyUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmNoaXZlIHdhcyB1bnppcHBlZCBwcm9wZXJseSwgYnV0IHdlIGNvdWxkIG5vdCBmaW5kIGFueSBjaHJvbWVkcml2ZXIgZXhlY3V0YWJsZScpO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBNb3ZpbmcgdGhlIGV4dHJhY3RlZCAnJHtwYXRoLmJhc2VuYW1lKGNocm9tZWRyaXZlclBhdGgpfScgdG8gJyR7ZHN0fSdgKTtcbiAgICAgIGF3YWl0IGZzLm12KGNocm9tZWRyaXZlclBhdGgsIGRzdCwge1xuICAgICAgICBta2RpcnA6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IE9TSW5mb1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBob3N0IE9TXG4gICAqIENhbiBiZSBlaXRoZXIgYG1hY2AsIGB3aW5kb3dzYCBvciBgbGludXhgXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgaG9zdCBPRC5cbiAgICogQ2FuIGJlIGVpdGhlciBgMzJgIG9yIGA2NGBcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSBoYXJkd2FyZU5hbWUgLSBUaGUgb3V0cHV0IG9mIGB1bmFtZSAtbWAgY29tbWFuZFxuICAgKiBvbiBsaW51eCBhbmQgbWFjIHN5c3RlbXMuIGBudWxsYCBvbiBXaW5kb3dzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGB0aGlzLm1hcHBpbmdgIHRvIG9ubHkgc2VsZWN0IG1hdGNoaW5nXG4gICAqIGNocm9tZWRyaXZlciBlbnRyaWVzIGJ5IG9wZXJhdGluZyBzeXN0ZW0gaW5mb3JtYXRpb25cbiAgICogYW5kL29yIGFkZGl0aW9uYWwgc3luY2hyb25pemF0aW9uIG9wdGlvbnMgKGlmIHByb3ZpZGVkKVxuICAgKlxuICAgKiBAcGFyYW0gez9PU0luZm99IG9zSW5mb1xuICAgKiBAcGFyYW0gez9TeW5jT3B0aW9uc30gb3B0c1xuICAgKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGxpc3Qgb2YgZmlsdGVyZWQgY2hyb21lZHJpdmVyXG4gICAqIGVudHJ5IG5hbWVzICh2ZXJzaW9uL2FyY2hpdmUgbmFtZSlcbiAgICovXG4gIHNlbGVjdE1hdGNoaW5nRHJpdmVycyAob3NJbmZvLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBtaW5Ccm93c2VyVmVyc2lvbixcbiAgICAgIHZlcnNpb25zID0gW10sXG4gICAgfSA9IG9wdHM7XG4gICAgbGV0IGRyaXZlcnNUb1N5bmMgPSBfLmtleXModGhpcy5tYXBwaW5nKTtcblxuICAgIGlmICghXy5pc0VtcHR5KHZlcnNpb25zKSkge1xuICAgICAgLy8gSGFuZGxlIG9ubHkgc2VsZWN0ZWQgdmVyc2lvbnMgaWYgcmVxdWVzdGVkXG4gICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBjaHJvbWVkcml2ZXJzIHdob3NlIHZlcnNpb25zIG1hdGNoIHRvICR7dmVyc2lvbnN9YCk7XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luY1xuICAgICAgICAuZmlsdGVyKChjZE5hbWUpID0+IHZlcnNpb25zLmluY2x1ZGVzKGAke3RoaXMubWFwcGluZ1tjZE5hbWVdLnZlcnNpb259YCkpO1xuXG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc05hTihtaW5Ccm93c2VyVmVyc2lvbikpIHtcbiAgICAgIC8vIE9ubHkgc2VsZWN0IGRyaXZlcnMgdGhhdCBzdXBwb3J0IHRoZSBjdXJyZW50IGJyb3dzZXIgd2hvc2UgbWFqb3IgdmVyc2lvbiBudW1iZXIgZXF1YWxzIHRvIGBtaW5Ccm93c2VyVmVyc2lvbmBcbiAgICAgIGNvbnN0IG1pbkJyb3dzZXJWZXJzaW9uSW50ID0gcGFyc2VJbnQobWluQnJvd3NlclZlcnNpb24sIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgbWluaW11bSBzdXBwb3J0ZWQgYnJvd3NlciB2ZXJzaW9uIG1hdGNoZXMgdG8gJHttaW5Ccm93c2VyVmVyc2lvbkludH1gKTtcbiAgICAgIGxldCBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPSAwO1xuICAgICAgLy8gU2VsZWN0IHRoZSBuZXdlc3QgYXZhaWxhYmxlIGFuZCBjb21wYXRpYmxlIGNocm9tZWRyaXZlclxuICAgICAgZm9yIChjb25zdCBjZE5hbWUgb2YgZHJpdmVyc1RvU3luYykge1xuICAgICAgICBjb25zdCBjdXJyZW50TWluQnJvd3NlclZlcnNpb24gPSBwYXJzZUludCh0aGlzLm1hcHBpbmdbY2ROYW1lXS5taW5Ccm93c2VyVmVyc2lvbiwgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbilcbiAgICAgICAgICAgICYmIGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbiA8PSBtaW5Ccm93c2VyVmVyc2lvbkludFxuICAgICAgICAgICAgJiYgY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIDwgY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyID0gY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luYy5maWx0ZXIoKGNkTmFtZSkgPT4gYCR7dGhpcy5tYXBwaW5nW2NkTmFtZV0ubWluQnJvd3NlclZlcnNpb259YCA9PT1cbiAgICAgICAgYCR7Y2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyID4gMCA/IGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA6IG1pbkJyb3dzZXJWZXJzaW9uSW50fWApO1xuXG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYFdpbGwgc2VsZWN0IGNhbmRpZGF0ZSAke3V0aWwucGx1cmFsaXplKCdkcml2ZXInLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCl9IGAgK1xuICAgICAgICBgdmVyc2lvbmVkIGFzICcke18udW5pcShkcml2ZXJzVG9TeW5jLm1hcCgoY2ROYW1lKSA9PiB0aGlzLm1hcHBpbmdbY2ROYW1lXS52ZXJzaW9uKSl9J2ApO1xuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KG9zSW5mbykpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgZHJpdmVycyBmb3IgdW5zdXBwb3J0ZWQgc3lzdGVtIGFyY2hpdGVjdHVyZXNcbiAgICAgIGxldCB7bmFtZSwgYXJjaCwgaGFyZHdhcmVOYW1lfSA9IG9zSW5mbztcbiAgICAgIGlmIChhcmNoID09PSBYNjQgJiYgIWRyaXZlcnNUb1N5bmMuc29tZSgoY2ROYW1lKSA9PiBjZE5hbWUuaW5jbHVkZXMoYF8ke25hbWV9JHtYNjR9YCkpKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byB4ODYgYnVpbGQgaWYgeDY0IG9uZSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gT1NcbiAgICAgICAgYXJjaCA9IFg4NjtcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lID09PSBPUy5tYWMgJiYgXy5pbmNsdWRlcyhoYXJkd2FyZU5hbWUsICdhcm0nKVxuICAgICAgICAgICYmIGRyaXZlcnNUb1N5bmMuc29tZSgoY2ROYW1lKSA9PiBjZE5hbWUuaW5jbHVkZXMoTTFfQVJDSF9TVUZGSVgpKSkge1xuICAgICAgICAvLyBwcmVmZXIgZXhlY3V0YWJsZSBmb3IgTTEgYXJjaCBpZiBwcmVzZW50XG4gICAgICAgIGFyY2ggKz0gTTFfQVJDSF9TVUZGSVg7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBjaHJvbWVkcml2ZXJzIHdob3NlIHBsYXRmb3JtIG1hdGNoZXMgdG8gJHtuYW1lfSR7YXJjaH1gKTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtUmUgPSBuZXcgUmVnRXhwKGAoXFxcXGJ8Xykke25hbWV9JHthcmNofVxcXFxiYCk7XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luYy5maWx0ZXIoKGNkTmFtZSkgPT4gcGxhdGZvcm1SZS50ZXN0KGNkTmFtZSkpO1xuICAgICAgbG9nLmRlYnVnKGBHb3QgJHt1dGlsLnBsdXJhbGl6ZSgnaXRlbScsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZHJpdmVyc1RvU3luYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGdpdmVuIGNocm9tZWRyaXZlciBmcm9tIHRoZSBzdG9yYWdlXG4gICAqIGFuZCB1bnBhY2tzIGl0IGludG8gYHRoaXMuY2hyb21lZHJpdmVyRGlyYCBmb2xkZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIHVuaXF1ZSBkcml2ZXIgaW5kZXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRyaXZlcktleSAtIFRoZSBkcml2ZXIga2V5IGluIGB0aGlzLm1hcHBpbmdgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmNoaXZlc1Jvb3QgLSBUaGUgdGVtcG9yYXJ5IGZvbGRlciBwYXRoIHRvIGV4dHJhY3RcbiAgICogZG93bmxvYWRlZCBhcmNoaXZlcyB0b1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzU3RyaWN0IFt0cnVlXSAtIFdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgKGB0cnVlYClcbiAgICogb3IgcmV0dXJuIGEgYm9vbGVhbiByZXN1bHQgaWYgdGhlIGRyaXZlciByZXRyaWV2YWwgcHJvY2VzcyBmYWlsc1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSByZXRyaWV2aW5nIHRoZSBkcml2ZXJcbiAgICogYW5kIGBpc1N0cmljdGAgaXMgc2V0IHRvIGB0cnVlYFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgYHRydWVgIHRoZW4gdGhlIGNocm9tZWRyaXZlciBpcyBzdWNjZXNzZnVsbHlcbiAgICogZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkLlxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVEcml2ZXIgKGluZGV4LCBkcml2ZXJLZXksIGFyY2hpdmVzUm9vdCwgaXNTdHJpY3QgPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgdXJsLCBldGFnLCB2ZXJzaW9uIH0gPSB0aGlzLm1hcHBpbmdbZHJpdmVyS2V5XTtcbiAgICBjb25zdCBhcmNoaXZlUGF0aCA9IHBhdGgucmVzb2x2ZShhcmNoaXZlc1Jvb3QsIGAke2luZGV4fS56aXBgKTtcbiAgICBsb2cuZGVidWcoYFJldHJpZXZpbmcgJyR7dXJsfScgdG8gJyR7YXJjaGl2ZVBhdGh9J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXQuZG93bmxvYWRGaWxlKHVybCwgYXJjaGl2ZVBhdGgsIHtcbiAgICAgICAgaXNNZXRlcmVkOiBmYWxzZSxcbiAgICAgICAgdGltZW91dDogVElNRU9VVF9NU1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gYENhbm5vdCBkb3dubG9hZCBjaHJvbWVkcml2ZXIgYXJjaGl2ZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWA7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFhd2FpdCBpc0NyY09rKGFyY2hpdmVQYXRoLCBldGFnKSkge1xuICAgICAgY29uc3QgbXNnID0gYFRoZSBjaGVja3N1bSBmb3IgdGhlIGRvd25sb2FkZWQgY2hyb21lZHJpdmVyICcke2RyaXZlcktleX0nIGRpZCBub3QgbWF0Y2hgO1xuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7cGF0aC5wYXJzZSh1cmwpLm5hbWV9X3Yke3ZlcnNpb259YCArXG4gICAgICAoc3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJycpO1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5jaHJvbWVkcml2ZXJEaXIsIGZpbGVOYW1lKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51bnppcERyaXZlcihhcmNoaXZlUGF0aCwgdGFyZ2V0UGF0aCk7XG4gICAgICBhd2FpdCBmcy5jaG1vZCh0YXJnZXRQYXRoLCAwbzc1NSk7XG4gICAgICBsb2cuZGVidWcoYFBlcm1pc3Npb25zIG9mIHRoZSBmaWxlICcke3RhcmdldFBhdGh9JyBoYXZlIGJlZW4gY2hhbmdlZCB0byA3NTVgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBTeW5jT3B0aW9uc1xuICAgKiBAcHJvcGVydHkge0FycmF5PFN0cmluZz59IHZlcnNpb25zIC0gVGhlIGxpc3Qgb2YgY2hyb21lZHJpdmVyXG4gICAqIHZlcnNpb25zIHRvIHN5bmMuIElmIGVtcHR5ICh0aGUgZGVmYXVsdCB2YWx1ZSkgdGhlbiBhbGwgYXZhaWxhYmxlXG4gICAqIGNocm9tZWRyaXZlcnMgYXJlIGdvaW5nIHRvIGJlIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZFxuICAgKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IG1pbkJyb3dzZXJWZXJzaW9uIC0gVGhlIG1pbnVtdW0gc3VwcG9ydGVkXG4gICAqIENocm9tZSB2ZXJzaW9uIHRoYXQgZG93bmxvYWRlZCBjaHJvbWVkcml2ZXJzIHNob3VsZCBzdXBwb3J0LiBDYW4gbWF0Y2hcbiAgICogbXVsdGlwbGUgZHJpdmVycy5cbiAgICogQHByb3BlcnR5IHs/T1NJbmZvfSBvc0luZm8gLSBTeXN0ZW0gaW5mb3JtYXRpb24gdXNlZCB0byBmaWx0ZXIgb3V0XG4gICAqIHRoZSBsaXN0IG9mIHRoZSByZXRyaWV2ZWQgZHJpdmVycy4gSWYgbm90IHByb3ZpZGVkIHRoZW4gdGhlIHNjcmlwdFxuICAgKiB3aWxsIHRyeSB0byByZXRyaWV2ZSBpdC5cbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBjaHJvbWVkcml2ZXJzIGZyb20gdGhlIHJlbW90ZSBzdG9yYWdlXG4gICAqIHRvIHRoZSBsb2NhbCBmaWxlIHN5c3RlbVxuICAgKlxuICAgKiBAcGFyYW0gez9TeW5jT3B0aW9uc30gb3B0c1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aGlsZSByZXRyaWV2aW5nXG4gICAqIHRoZSBkcml2ZXJzXG4gICAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmd9IFRoZSBsaXN0IG9mIHN1Y2Nlc3NmdWxseSBzeW5jaHJvbml6ZWQgZHJpdmVyIGtleXNcbiAgICovXG4gIGFzeW5jIHN5bmNEcml2ZXJzIChvcHRzID0ge30pIHtcbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMubWFwcGluZykpIHtcbiAgICAgIGF3YWl0IHRoaXMucmV0cmlldmVNYXBwaW5nKCEhb3B0cy5taW5Ccm93c2VyVmVyc2lvbik7XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkodGhpcy5tYXBwaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcmV0cmlldmUgY2hyb21lZHJpdmVycyBtYXBwaW5nIGZyb20gR29vZ2xlIHN0b3JhZ2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkcml2ZXJzVG9TeW5jID0gdGhpcy5zZWxlY3RNYXRjaGluZ0RyaXZlcnMob3B0cy5vc0luZm8gPz8gYXdhaXQgZ2V0T3NJbmZvKCksIG9wdHMpO1xuICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyc1RvU3luYykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlcmUgYXJlIG5vIGRyaXZlcnMgdG8gc3luYy4gRXhpdGluZ2ApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdkcml2ZXInLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9IHRvIHN5bmM6IGAgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoZHJpdmVyc1RvU3luYywgbnVsbCwgMikpO1xuXG4gICAgY29uc3Qgc3luY2hyb25pemVkRHJpdmVycyA9IFtdO1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgY29uc3QgYXJjaGl2ZXNSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgW2lkeCwgZHJpdmVyS2V5XSBvZiBkcml2ZXJzVG9TeW5jLmVudHJpZXMoKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKGF3YWl0IHRoaXMucmV0cmlldmVEcml2ZXIoaWR4LCBkcml2ZXJLZXksIGFyY2hpdmVzUm9vdCwgIV8uaXNFbXB0eShvcHRzKSkpIHtcbiAgICAgICAgICAgIHN5bmNocm9uaXplZERyaXZlcnMucHVzaChkcml2ZXJLZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKSk7XG5cbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCAlIE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPT09IDApIHtcbiAgICAgICAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKGFyY2hpdmVzUm9vdCk7XG4gICAgfVxuICAgIGlmICghXy5pc0VtcHR5KHN5bmNocm9uaXplZERyaXZlcnMpKSB7XG4gICAgICBsb2cuaW5mbyhgU3VjY2Vzc2Z1bGx5IHN5bmNocm9uaXplZCBgICtcbiAgICAgICAgYCR7dXRpbC5wbHVyYWxpemUoJ2Nocm9tZWRyaXZlcicsIHN5bmNocm9uaXplZERyaXZlcnMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oYE5vIGNocm9tZWRyaXZlcnMgd2VyZSBzeW5jaHJvbml6ZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN5bmNocm9uaXplZERyaXZlcnM7XG4gIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50O1xuIl0sImZpbGUiOiJsaWIvc3RvcmFnZS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
391
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zdG9yYWdlLWNsaWVudC5qcyJdLCJuYW1lcyI6WyJUSU1FT1VUX01TIiwiTUFYX1BBUkFMTEVMX0RPV05MT0FEUyIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsImlzQ3JjT2siLCJzcmMiLCJjaGVja3N1bSIsIm1kNSIsImZzIiwiaGFzaCIsIl8iLCJ0b0xvd2VyIiwiZmluZENoaWxkTm9kZSIsInBhcmVudCIsImNoaWxkTmFtZSIsInRleHQiLCJoYXNDaGlsZE5vZGVzIiwiY2hpbGROb2RlSWR4IiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkTm9kZSIsImxvY2FsTmFtZSIsImNoaWxkVGV4dCIsImV4dHJhY3ROb2RlVGV4dCIsIm5vZGUiLCJmaXJzdENoaWxkIiwidXRpbCIsImhhc1ZhbHVlIiwibm9kZVZhbHVlIiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNvbnN0cnVjdG9yIiwiYXJncyIsImNocm9tZWRyaXZlckRpciIsInRpbWVvdXQiLCJtYXBwaW5nIiwicGFyc2VOb3RlcyIsImNvbnRlbnQiLCJyZXN1bHQiLCJ2ZXJzaW9uTWF0Y2giLCJleGVjIiwidmVyc2lvbiIsIm1pbkJyb3dzZXJWZXJzaW9uTWF0Y2giLCJtaW5Ccm93c2VyVmVyc2lvbiIsInJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8iLCJkcml2ZXJLZXkiLCJub3Rlc1VybCIsImluZm9EaWN0Iiwibm90ZXMiLCJhY2NlcHQiLCJkZWJ1ZyIsInBhcnNlU3RvcmFnZVhtbCIsImRvYyIsInNob3VsZFBhcnNlTm90ZXMiLCJkcml2ZXJOb2RlcyIsInhwYXRoIiwic2VsZWN0IiwiaXNFbXB0eSIsInByb21pc2VzIiwiZHJpdmVyTm9kZSIsImtleSIsImluY2x1ZGVzIiwiZXRhZyIsImNkSW5mbyIsInVybCIsIkNEX0NETiIsInRyaW0iLCJmaXJzdCIsInNwbGl0Iiwibm90ZXNQYXRoIiwiaXNOb3Rlc1ByZXNlbnQiLCJyZWR1Y2UiLCJhY2MiLCJpbmZvIiwicHVzaCIsIkIiLCJhbGwiLCJzaXplIiwicmV0cmlldmVNYXBwaW5nIiwieG1sIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiY2xvbmVEZWVwIiwidW56aXBEcml2ZXIiLCJkc3QiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJ6aXAiLCJleHRyYWN0QWxsVG8iLCJjaHJvbWVkcml2ZXJQYXRoIiwid2Fsa0RpciIsIml0ZW1QYXRoIiwiaXNEaXJlY3RvcnkiLCJwYXRoIiwicGFyc2UiLCJuYW1lIiwiRXJyb3IiLCJiYXNlbmFtZSIsIm12IiwibWtkaXJwIiwicmltcmFmIiwic2VsZWN0TWF0Y2hpbmdEcml2ZXJzIiwib3NJbmZvIiwib3B0cyIsInZlcnNpb25zIiwiZHJpdmVyc1RvU3luYyIsImtleXMiLCJmaWx0ZXIiLCJjZE5hbWUiLCJwbHVyYWxpemUiLCJpc05hTiIsIm1pbkJyb3dzZXJWZXJzaW9uSW50IiwicGFyc2VJbnQiLCJjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIiLCJjdXJyZW50TWluQnJvd3NlclZlcnNpb24iLCJ1bmlxIiwibWFwIiwiYXJjaCIsImhhcmR3YXJlTmFtZSIsIlg2NCIsInNvbWUiLCJYODYiLCJPUyIsIm1hYyIsIk0xX0FSQ0hfU1VGRklYIiwicGxhdGZvcm1SZSIsIlJlZ0V4cCIsInRlc3QiLCJyZXRyaWV2ZURyaXZlciIsImluZGV4IiwiYXJjaGl2ZXNSb290IiwiaXNTdHJpY3QiLCJhcmNoaXZlUGF0aCIsInJlc29sdmUiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJpc01ldGVyZWQiLCJlIiwibXNnIiwibWVzc2FnZSIsImVycm9yIiwiZmlsZU5hbWUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJ0YXJnZXRQYXRoIiwiY2htb2QiLCJzeW5jRHJpdmVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzeW5jaHJvbml6ZWREcml2ZXJzIiwiaWR4IiwiZW50cmllcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxVQUFVLEdBQUcsS0FBbkI7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUEvQjs7QUFFQSxNQUFNQyxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLDJCQUFqQixDQUFaOztBQUdBLGVBQWVDLE9BQWYsQ0FBd0JDLEdBQXhCLEVBQTZCQyxRQUE3QixFQUF1QztBQUNyQyxRQUFNQyxHQUFHLEdBQUcsTUFBTUMsWUFBR0MsSUFBSCxDQUFRSixHQUFSLEVBQWEsS0FBYixDQUFsQjtBQUNBLFNBQU9LLGdCQUFFQyxPQUFGLENBQVVKLEdBQVYsTUFBbUJHLGdCQUFFQyxPQUFGLENBQVVMLFFBQVYsQ0FBMUI7QUFDRDs7QUFFRCxTQUFTTSxhQUFULENBQXdCQyxNQUF4QixFQUFnQ0MsU0FBUyxHQUFHLElBQTVDLEVBQWtEQyxJQUFJLEdBQUcsSUFBekQsRUFBK0Q7QUFDN0QsTUFBSSxDQUFDRCxTQUFELElBQWMsQ0FBQ0MsSUFBbkIsRUFBeUI7QUFDdkIsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDRixNQUFNLENBQUNHLGFBQVAsRUFBTCxFQUE2QjtBQUMzQixXQUFPLElBQVA7QUFDRDs7QUFFRCxPQUFLLElBQUlDLFlBQVksR0FBRyxDQUF4QixFQUEyQkEsWUFBWSxHQUFHSixNQUFNLENBQUNLLFVBQVAsQ0FBa0JDLE1BQTVELEVBQW9FRixZQUFZLEVBQWhGLEVBQW9GO0FBQ2xGLFVBQU1HLFNBQVMsR0FBR1AsTUFBTSxDQUFDSyxVQUFQLENBQWtCRCxZQUFsQixDQUFsQjs7QUFDQSxRQUFJSCxTQUFTLElBQUksQ0FBQ0MsSUFBZCxJQUFzQkQsU0FBUyxLQUFLTSxTQUFTLENBQUNDLFNBQWxELEVBQTZEO0FBQzNELGFBQU9ELFNBQVA7QUFDRDs7QUFDRCxRQUFJTCxJQUFKLEVBQVU7QUFDUixZQUFNTyxTQUFTLEdBQUdDLGVBQWUsQ0FBQ0gsU0FBRCxDQUFqQzs7QUFDQSxVQUFJLENBQUNFLFNBQUwsRUFBZ0I7QUFDZDtBQUNEOztBQUNELFVBQUlSLFNBQVMsSUFBSUEsU0FBUyxLQUFLTSxTQUFTLENBQUNDLFNBQXJDLElBQWtETixJQUFJLEtBQUtPLFNBQS9ELEVBQTBFO0FBQ3hFLGVBQU9GLFNBQVA7QUFDRDs7QUFDRCxVQUFJLENBQUNOLFNBQUQsSUFBY0MsSUFBSSxLQUFLTyxTQUEzQixFQUFzQztBQUNwQyxlQUFPRixTQUFQO0FBQ0Q7QUFDRjtBQUNGOztBQUNELFNBQU8sSUFBUDtBQUNEOztBQUVELFNBQVNHLGVBQVQsQ0FBMEJDLElBQTFCLEVBQWdDO0FBQzlCLFNBQVEsQ0FBQ0EsSUFBRCxJQUFTLENBQUNBLElBQUksQ0FBQ0MsVUFBZixJQUE2QixDQUFDQyxjQUFLQyxRQUFMLENBQWNILElBQUksQ0FBQ0MsVUFBTCxDQUFnQkcsU0FBOUIsQ0FBL0IsR0FDSCxJQURHLEdBRUhKLElBQUksQ0FBQ0MsVUFBTCxDQUFnQkcsU0FGcEI7QUFHRDs7QUFHRCxNQUFNQyx5QkFBTixDQUFnQztBQUM5QkMsRUFBQUEsV0FBVyxDQUFFQyxJQUFJLEdBQUcsRUFBVCxFQUFhO0FBQ3RCLFVBQU07QUFDSkMsTUFBQUEsZUFBZSxHQUFHLGdDQURkO0FBRUpDLE1BQUFBLE9BQU8sR0FBR2xDO0FBRk4sUUFHRmdDLElBSEo7QUFJQSxTQUFLQyxlQUFMLEdBQXVCQSxlQUF2QjtBQUNBLFNBQUtDLE9BQUwsR0FBZUEsT0FBZjtBQUNBLFNBQUtDLE9BQUwsR0FBZSxFQUFmO0FBQ0Q7O0FBaUJEQyxFQUFBQSxVQUFVLENBQUVDLE9BQUYsRUFBVztBQUNuQixVQUFNQyxNQUFNLEdBQUcsRUFBZjtBQUNBLFVBQU1DLFlBQVksR0FBRyxzQ0FBc0NDLElBQXRDLENBQTJDSCxPQUEzQyxDQUFyQjs7QUFDQSxRQUFJRSxZQUFKLEVBQWtCO0FBQ2hCRCxNQUFBQSxNQUFNLENBQUNHLE9BQVAsR0FBaUJGLFlBQVksQ0FBQyxDQUFELENBQTdCO0FBQ0Q7O0FBQ0QsVUFBTUcsc0JBQXNCLEdBQUcsa0NBQWtDRixJQUFsQyxDQUF1Q0gsT0FBdkMsQ0FBL0I7O0FBQ0EsUUFBSUssc0JBQUosRUFBNEI7QUFDMUJKLE1BQUFBLE1BQU0sQ0FBQ0ssaUJBQVAsR0FBMkJELHNCQUFzQixDQUFDLENBQUQsQ0FBakQ7QUFDRDs7QUFDRCxXQUFPSixNQUFQO0FBQ0Q7O0FBWWlDLFFBQTVCTSw0QkFBNEIsQ0FBRUMsU0FBRixFQUFhQyxRQUFiLEVBQXVCQyxRQUF2QixFQUFpQztBQUNqRSxVQUFNQyxLQUFLLEdBQUcsTUFBTSx5QkFBYUYsUUFBYixFQUF1QjtBQUN6QyxvQkFBYyxRQUQyQjtBQUV6Q0csTUFBQUEsTUFBTSxFQUFFO0FBRmlDLEtBQXZCLEVBR2pCO0FBQUVmLE1BQUFBLE9BQU8sRUFBRSxLQUFLQTtBQUFoQixLQUhpQixDQUFwQjtBQUlBLFVBQU07QUFBRVMsTUFBQUE7QUFBRixRQUF3QixLQUFLUCxVQUFMLENBQWdCWSxLQUFoQixDQUE5Qjs7QUFDQSxRQUFJLENBQUNMLGlCQUFMLEVBQXdCO0FBQ3RCekMsTUFBQUEsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLGVBQWNMLFNBQVUsNkNBQTRDQyxRQUFTLElBQTlFLEdBQ1AsYUFESDtBQUVBO0FBQ0Q7O0FBQ0RDLElBQUFBLFFBQVEsQ0FBQ0osaUJBQVQsR0FBNkJBLGlCQUE3QjtBQUNEOztBQVlvQixRQUFmUSxlQUFlLENBQUVDLEdBQUYsRUFBT0MsZ0JBQWdCLEdBQUcsSUFBMUIsRUFBZ0M7QUFDbkQsVUFBTUMsV0FBVyxHQUFHQyxlQUFNQyxNQUFOLENBQWMsK0JBQWQsRUFBOENKLEdBQTlDLENBQXBCOztBQUNBbEQsSUFBQUEsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLFVBQVNJLFdBQVcsQ0FBQ2xDLE1BQU8sMkJBQXZDOztBQUNBLFFBQUlULGdCQUFFOEMsT0FBRixDQUFVSCxXQUFWLENBQUosRUFBNEI7QUFDMUI7QUFDRDs7QUFFRCxVQUFNSSxRQUFRLEdBQUcsRUFBakI7O0FBQ0EsU0FBSyxNQUFNQyxVQUFYLElBQXlCTCxXQUF6QixFQUFzQztBQUNwQyxZQUFNTSxHQUFHLEdBQUdwQyxlQUFlLENBQUNYLGFBQWEsQ0FBQzhDLFVBQUQsRUFBYSxLQUFiLENBQWQsQ0FBM0I7O0FBQ0EsVUFBSSxDQUFDaEQsZ0JBQUVrRCxRQUFGLENBQVdELEdBQVgsRUFBZ0IsZ0JBQWhCLENBQUwsRUFBd0M7QUFDdEM7QUFDRDs7QUFFRCxZQUFNRSxJQUFJLEdBQUd0QyxlQUFlLENBQUNYLGFBQWEsQ0FBQzhDLFVBQUQsRUFBYSxNQUFiLENBQWQsQ0FBNUI7O0FBQ0EsVUFBSSxDQUFDRyxJQUFMLEVBQVc7QUFDVDVELFFBQUFBLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyxjQUFhVSxHQUFJLDhDQUE1QjtBQUNBO0FBQ0Q7O0FBRUQsWUFBTUcsTUFBTSxHQUFHO0FBQ2JDLFFBQUFBLEdBQUcsRUFBRyxHQUFFQyxhQUFPLElBQUdMLEdBQUksRUFEVDtBQUViRSxRQUFBQSxJQUFJLEVBQUVuRCxnQkFBRXVELElBQUYsQ0FBT0osSUFBUCxFQUFhLEdBQWIsQ0FGTztBQUdickIsUUFBQUEsT0FBTyxFQUFFOUIsZ0JBQUV3RCxLQUFGLENBQVFQLEdBQUcsQ0FBQ1EsS0FBSixDQUFVLEdBQVYsQ0FBUjtBQUhJLE9BQWY7QUFLQSxXQUFLakMsT0FBTCxDQUFheUIsR0FBYixJQUFvQkcsTUFBcEI7QUFFQSxZQUFNTSxTQUFTLEdBQUksR0FBRU4sTUFBTSxDQUFDdEIsT0FBUSxZQUFwQztBQUNBLFlBQU02QixjQUFjLEdBQUcsQ0FBQyxDQUFDaEIsV0FBVyxDQUNqQ2lCLE1BRHNCLENBQ2YsQ0FBQ0MsR0FBRCxFQUFNL0MsSUFBTixLQUFlK0MsR0FBRyxJQUFJM0QsYUFBYSxDQUFDWSxJQUFELEVBQU8sS0FBUCxFQUFjNEMsU0FBZCxDQURwQixFQUM4QyxLQUQ5QyxDQUF6Qjs7QUFFQSxVQUFJLENBQUNDLGNBQUwsRUFBcUI7QUFDbkJQLFFBQUFBLE1BQU0sQ0FBQ3BCLGlCQUFQLEdBQTJCLElBQTNCOztBQUNBLFlBQUlVLGdCQUFKLEVBQXNCO0FBQ3BCbkQsVUFBQUEsR0FBRyxDQUFDdUUsSUFBSixDQUFVLGNBQWFiLEdBQUksMkNBQTNCO0FBQ0Q7O0FBQ0Q7QUFDRCxPQU5ELE1BTU8sSUFBSSxDQUFDUCxnQkFBTCxFQUF1QjtBQUM1QjtBQUNEOztBQUVESyxNQUFBQSxRQUFRLENBQUNnQixJQUFULENBQWMsS0FBSzlCLDRCQUFMLENBQWtDZ0IsR0FBbEMsRUFBd0MsR0FBRUssYUFBTyxJQUFHSSxTQUFVLEVBQTlELEVBQWlFTixNQUFqRSxDQUFkOztBQUNBLFVBQUlMLFFBQVEsQ0FBQ3RDLE1BQVQsR0FBa0JuQixzQkFBbEIsS0FBNkMsQ0FBakQsRUFBb0Q7QUFDbEQsY0FBTTBFLGtCQUFFQyxHQUFGLENBQU1sQixRQUFOLENBQU47QUFDRDtBQUNGOztBQUNELFVBQU1pQixrQkFBRUMsR0FBRixDQUFNbEIsUUFBTixDQUFOO0FBQ0F4RCxJQUFBQSxHQUFHLENBQUN1RSxJQUFKLENBQVUsOENBQTZDOUQsZ0JBQUVrRSxJQUFGLENBQU8sS0FBSzFDLE9BQVosQ0FBcUIsRUFBNUU7QUFDRDs7QUF5Qm9CLFFBQWYyQyxlQUFlLENBQUV6QixnQkFBZ0IsR0FBRyxJQUFyQixFQUEyQjtBQUM5QyxVQUFNMEIsR0FBRyxHQUFHLE1BQU0seUJBQWFkLGFBQWIsRUFBcUI7QUFDckMsb0JBQWMsUUFEdUI7QUFFckNoQixNQUFBQSxNQUFNLEVBQUU7QUFGNkIsS0FBckIsRUFHZjtBQUFFZixNQUFBQSxPQUFPLEVBQUUsS0FBS0E7QUFBaEIsS0FIZSxDQUFsQjtBQUlBLFVBQU1rQixHQUFHLEdBQUcsSUFBSTRCLGlCQUFKLEdBQWdCQyxlQUFoQixDQUFnQ0YsR0FBaEMsQ0FBWjtBQUNBLFVBQU0sS0FBSzVCLGVBQUwsQ0FBcUJDLEdBQXJCLEVBQTBCQyxnQkFBMUIsQ0FBTjtBQUNBLFdBQU8xQyxnQkFBRXVFLFNBQUYsQ0FBWSxLQUFLL0MsT0FBakIsQ0FBUDtBQUNEOztBQVNnQixRQUFYZ0QsV0FBVyxDQUFFN0UsR0FBRixFQUFPOEUsR0FBUCxFQUFZO0FBQzNCLFVBQU1DLE9BQU8sR0FBRyxNQUFNQyxpQkFBUUMsT0FBUixFQUF0Qjs7QUFDQSxRQUFJO0FBQ0YsWUFBTUMsYUFBSUMsWUFBSixDQUFpQm5GLEdBQWpCLEVBQXNCK0UsT0FBdEIsQ0FBTjtBQUNBLFlBQU1LLGdCQUFnQixHQUFHLE1BQU1qRixZQUFHa0YsT0FBSCxDQUFXTixPQUFYLEVBQW9CLElBQXBCLEVBQTBCLENBQUNPLFFBQUQsRUFBV0MsV0FBWCxLQUN2RCxDQUFDQSxXQUFELElBQWdCbEYsZ0JBQUVDLE9BQUYsQ0FBVWtGLGNBQUtDLEtBQUwsQ0FBV0gsUUFBWCxFQUFxQkksSUFBL0IsTUFBeUMsY0FENUIsQ0FBL0I7O0FBRUEsVUFBSSxDQUFDTixnQkFBTCxFQUF1QjtBQUNyQixjQUFNLElBQUlPLEtBQUosQ0FBVSxzRkFBVixDQUFOO0FBQ0Q7O0FBQ0QvRixNQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcseUJBQXdCNEMsY0FBS0ksUUFBTCxDQUFjUixnQkFBZCxDQUFnQyxTQUFRTixHQUFJLEdBQS9FO0FBQ0EsWUFBTTNFLFlBQUcwRixFQUFILENBQU1ULGdCQUFOLEVBQXdCTixHQUF4QixFQUE2QjtBQUNqQ2dCLFFBQUFBLE1BQU0sRUFBRTtBQUR5QixPQUE3QixDQUFOO0FBR0QsS0FYRCxTQVdVO0FBQ1IsWUFBTTNGLFlBQUc0RixNQUFILENBQVVoQixPQUFWLENBQU47QUFDRDtBQUNGOztBQXNCRGlCLEVBQUFBLHFCQUFxQixDQUFFQyxNQUFGLEVBQVVDLElBQUksR0FBRyxFQUFqQixFQUFxQjtBQUN4QyxVQUFNO0FBQ0o3RCxNQUFBQSxpQkFESTtBQUVKOEQsTUFBQUEsUUFBUSxHQUFHO0FBRlAsUUFHRkQsSUFISjs7QUFJQSxRQUFJRSxhQUFhLEdBQUcvRixnQkFBRWdHLElBQUYsQ0FBTyxLQUFLeEUsT0FBWixDQUFwQjs7QUFFQSxRQUFJLENBQUN4QixnQkFBRThDLE9BQUYsQ0FBVWdELFFBQVYsQ0FBTCxFQUEwQjtBQUV4QnZHLE1BQUFBLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyxtREFBa0R1RCxRQUFTLEVBQXRFO0FBQ0FDLE1BQUFBLGFBQWEsR0FBR0EsYUFBYSxDQUMxQkUsTUFEYSxDQUNMQyxNQUFELElBQVlKLFFBQVEsQ0FBQzVDLFFBQVQsQ0FBbUIsR0FBRSxLQUFLMUIsT0FBTCxDQUFhMEUsTUFBYixFQUFxQnBFLE9BQVEsRUFBbEQsQ0FETixDQUFoQjtBQUdBdkMsTUFBQUEsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLE9BQU12QixjQUFLbUYsU0FBTCxDQUFlLE1BQWYsRUFBdUJKLGFBQWEsQ0FBQ3RGLE1BQXJDLEVBQTZDLElBQTdDLENBQW1ELEVBQXBFOztBQUNBLFVBQUlULGdCQUFFOEMsT0FBRixDQUFVaUQsYUFBVixDQUFKLEVBQThCO0FBQzVCLGVBQU8sRUFBUDtBQUNEO0FBQ0Y7O0FBRUQsUUFBSSxDQUFDSyxLQUFLLENBQUNwRSxpQkFBRCxDQUFWLEVBQStCO0FBRTdCLFlBQU1xRSxvQkFBb0IsR0FBR0MsUUFBUSxDQUFDdEUsaUJBQUQsRUFBb0IsRUFBcEIsQ0FBckM7QUFDQXpDLE1BQUFBLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyw4RUFBNkU4RCxvQkFBcUIsRUFBN0c7QUFDQSxVQUFJRSwyQkFBMkIsR0FBRyxDQUFsQzs7QUFFQSxXQUFLLE1BQU1MLE1BQVgsSUFBcUJILGFBQXJCLEVBQW9DO0FBQ2xDLGNBQU1TLHdCQUF3QixHQUFHRixRQUFRLENBQUMsS0FBSzlFLE9BQUwsQ0FBYTBFLE1BQWIsRUFBcUJsRSxpQkFBdEIsRUFBeUMsRUFBekMsQ0FBekM7O0FBQ0EsWUFBSSxDQUFDb0UsS0FBSyxDQUFDSSx3QkFBRCxDQUFOLElBQ0dBLHdCQUF3QixJQUFJSCxvQkFEL0IsSUFFR0UsMkJBQTJCLEdBQUdDLHdCQUZyQyxFQUUrRDtBQUM3REQsVUFBQUEsMkJBQTJCLEdBQUdDLHdCQUE5QjtBQUNEO0FBQ0Y7O0FBQ0RULE1BQUFBLGFBQWEsR0FBR0EsYUFBYSxDQUFDRSxNQUFkLENBQXNCQyxNQUFELElBQWEsR0FBRSxLQUFLMUUsT0FBTCxDQUFhMEUsTUFBYixFQUFxQmxFLGlCQUFrQixFQUExQyxLQUM5QyxHQUFFdUUsMkJBQTJCLEdBQUcsQ0FBOUIsR0FBa0NBLDJCQUFsQyxHQUFnRUYsb0JBQXFCLEVBRDFFLENBQWhCO0FBR0E5RyxNQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcsT0FBTXZCLGNBQUttRixTQUFMLENBQWUsTUFBZixFQUF1QkosYUFBYSxDQUFDdEYsTUFBckMsRUFBNkMsSUFBN0MsQ0FBbUQsRUFBcEU7O0FBQ0EsVUFBSVQsZ0JBQUU4QyxPQUFGLENBQVVpRCxhQUFWLENBQUosRUFBOEI7QUFDNUIsZUFBTyxFQUFQO0FBQ0Q7O0FBQ0R4RyxNQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcseUJBQXdCdkIsY0FBS21GLFNBQUwsQ0FBZSxRQUFmLEVBQXlCSixhQUFhLENBQUN0RixNQUF2QyxDQUErQyxHQUF4RSxHQUNQLGlCQUFnQlQsZ0JBQUV5RyxJQUFGLENBQU9WLGFBQWEsQ0FBQ1csR0FBZCxDQUFtQlIsTUFBRCxJQUFZLEtBQUsxRSxPQUFMLENBQWEwRSxNQUFiLEVBQXFCcEUsT0FBbkQsQ0FBUCxDQUFvRSxHQUR2RjtBQUVEOztBQUVELFFBQUksQ0FBQzlCLGdCQUFFOEMsT0FBRixDQUFVOEMsTUFBVixDQUFMLEVBQXdCO0FBRXRCLFVBQUk7QUFBQ1AsUUFBQUEsSUFBRDtBQUFPc0IsUUFBQUEsSUFBUDtBQUFhQyxRQUFBQTtBQUFiLFVBQTZCaEIsTUFBakM7O0FBQ0EsVUFBSWUsSUFBSSxLQUFLRSxVQUFULElBQWdCLENBQUNkLGFBQWEsQ0FBQ2UsSUFBZCxDQUFvQlosTUFBRCxJQUFZQSxNQUFNLENBQUNoRCxRQUFQLENBQWlCLElBQUdtQyxJQUFLLEdBQUV3QixVQUFJLEVBQS9CLENBQS9CLENBQXJCLEVBQXdGO0FBRXRGRixRQUFBQSxJQUFJLEdBQUdJLFVBQVA7QUFDRDs7QUFDRCxVQUFJMUIsSUFBSSxLQUFLMkIsVUFBR0MsR0FBWixJQUFtQmpILGdCQUFFa0QsUUFBRixDQUFXMEQsWUFBWCxFQUF5QixLQUF6QixDQUFuQixJQUNHYixhQUFhLENBQUNlLElBQWQsQ0FBb0JaLE1BQUQsSUFBWUEsTUFBTSxDQUFDaEQsUUFBUCxDQUFnQmdFLHFCQUFoQixDQUEvQixDQURQLEVBQ3dFO0FBRXRFUCxRQUFBQSxJQUFJLElBQUlPLHFCQUFSO0FBQ0Q7O0FBQ0QzSCxNQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcscURBQW9EOEMsSUFBSyxHQUFFc0IsSUFBSyxFQUEzRTtBQUNBLFlBQU1RLFVBQVUsR0FBRyxJQUFJQyxNQUFKLENBQVksVUFBUy9CLElBQUssR0FBRXNCLElBQUssS0FBakMsQ0FBbkI7QUFDQVosTUFBQUEsYUFBYSxHQUFHQSxhQUFhLENBQUNFLE1BQWQsQ0FBc0JDLE1BQUQsSUFBWWlCLFVBQVUsQ0FBQ0UsSUFBWCxDQUFnQm5CLE1BQWhCLENBQWpDLENBQWhCO0FBQ0EzRyxNQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcsT0FBTXZCLGNBQUttRixTQUFMLENBQWUsTUFBZixFQUF1QkosYUFBYSxDQUFDdEYsTUFBckMsRUFBNkMsSUFBN0MsQ0FBbUQsRUFBcEU7QUFDRDs7QUFFRCxXQUFPc0YsYUFBUDtBQUNEOztBQWlCbUIsUUFBZHVCLGNBQWMsQ0FBRUMsS0FBRixFQUFTckYsU0FBVCxFQUFvQnNGLFlBQXBCLEVBQWtDQyxRQUFRLEdBQUcsS0FBN0MsRUFBb0Q7QUFDdEUsVUFBTTtBQUFFcEUsTUFBQUEsR0FBRjtBQUFPRixNQUFBQSxJQUFQO0FBQWFyQixNQUFBQTtBQUFiLFFBQXlCLEtBQUtOLE9BQUwsQ0FBYVUsU0FBYixDQUEvQjs7QUFDQSxVQUFNd0YsV0FBVyxHQUFHdkMsY0FBS3dDLE9BQUwsQ0FBYUgsWUFBYixFQUE0QixHQUFFRCxLQUFNLE1BQXBDLENBQXBCOztBQUNBaEksSUFBQUEsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLGVBQWNjLEdBQUksU0FBUXFFLFdBQVksR0FBakQ7O0FBQ0EsUUFBSTtBQUNGLFlBQU1FLGFBQUlDLFlBQUosQ0FBaUJ4RSxHQUFqQixFQUFzQnFFLFdBQXRCLEVBQW1DO0FBQ3ZDSSxRQUFBQSxTQUFTLEVBQUUsS0FENEI7QUFFdkN2RyxRQUFBQSxPQUFPLEVBQUVsQztBQUY4QixPQUFuQyxDQUFOO0FBSUQsS0FMRCxDQUtFLE9BQU8wSSxDQUFQLEVBQVU7QUFDVixZQUFNQyxHQUFHLEdBQUkseURBQXdERCxDQUFDLENBQUNFLE9BQVEsRUFBL0U7O0FBQ0EsVUFBSVIsUUFBSixFQUFjO0FBQ1osY0FBTSxJQUFJbkMsS0FBSixDQUFVMEMsR0FBVixDQUFOO0FBQ0Q7O0FBQ0R6SSxNQUFBQSxHQUFHLENBQUMySSxLQUFKLENBQVVGLEdBQVY7QUFDQSxhQUFPLEtBQVA7QUFDRDs7QUFDRCxRQUFJLEVBQUMsTUFBTXRJLE9BQU8sQ0FBQ2dJLFdBQUQsRUFBY3ZFLElBQWQsQ0FBZCxDQUFKLEVBQXVDO0FBQ3JDLFlBQU02RSxHQUFHLEdBQUksaURBQWdEOUYsU0FBVSxpQkFBdkU7O0FBQ0EsVUFBSXVGLFFBQUosRUFBYztBQUNaLGNBQU0sSUFBSW5DLEtBQUosQ0FBVTBDLEdBQVYsQ0FBTjtBQUNEOztBQUNEekksTUFBQUEsR0FBRyxDQUFDMkksS0FBSixDQUFVRixHQUFWO0FBQ0EsYUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsVUFBTUcsUUFBUSxHQUFJLEdBQUVoRCxjQUFLQyxLQUFMLENBQVcvQixHQUFYLEVBQWdCZ0MsSUFBSyxLQUFJdkQsT0FBUSxFQUFwQyxJQUNkc0csZ0JBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFEaEIsQ0FBakI7O0FBRUEsVUFBTUMsVUFBVSxHQUFHbkQsY0FBS3dDLE9BQUwsQ0FBYSxLQUFLckcsZUFBbEIsRUFBbUM2RyxRQUFuQyxDQUFuQjs7QUFDQSxRQUFJO0FBQ0YsWUFBTSxLQUFLM0QsV0FBTCxDQUFpQmtELFdBQWpCLEVBQThCWSxVQUE5QixDQUFOO0FBQ0EsWUFBTXhJLFlBQUd5SSxLQUFILENBQVNELFVBQVQsRUFBcUIsS0FBckIsQ0FBTjtBQUNBL0ksTUFBQUEsR0FBRyxDQUFDZ0QsS0FBSixDQUFXLDRCQUEyQitGLFVBQVcsNEJBQWpEO0FBQ0QsS0FKRCxDQUlFLE9BQU9QLENBQVAsRUFBVTtBQUNWLFVBQUlOLFFBQUosRUFBYztBQUNaLGNBQU1NLENBQU47QUFDRDs7QUFDRHhJLE1BQUFBLEdBQUcsQ0FBQzJJLEtBQUosQ0FBVUgsQ0FBQyxDQUFDRSxPQUFaO0FBQ0EsYUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7O0FBd0JnQixRQUFYTyxXQUFXLENBQUUzQyxJQUFJLEdBQUcsRUFBVCxFQUFhO0FBQUE7O0FBQzVCLFFBQUk3RixnQkFBRThDLE9BQUYsQ0FBVSxLQUFLdEIsT0FBZixDQUFKLEVBQTZCO0FBQzNCLFlBQU0sS0FBSzJDLGVBQUwsQ0FBcUIsQ0FBQyxDQUFDMEIsSUFBSSxDQUFDN0QsaUJBQTVCLENBQU47QUFDRDs7QUFDRCxRQUFJaEMsZ0JBQUU4QyxPQUFGLENBQVUsS0FBS3RCLE9BQWYsQ0FBSixFQUE2QjtBQUMzQixZQUFNLElBQUk4RCxLQUFKLENBQVUsMkRBQVYsQ0FBTjtBQUNEOztBQUVELFVBQU1TLGFBQWEsR0FBRyxLQUFLSixxQkFBTCxpQkFBMkJFLElBQUksQ0FBQ0QsTUFBaEMsdURBQTBDLE1BQU0sdUJBQWhELEVBQTZEQyxJQUE3RCxDQUF0Qjs7QUFDQSxRQUFJN0YsZ0JBQUU4QyxPQUFGLENBQVVpRCxhQUFWLENBQUosRUFBOEI7QUFDNUJ4RyxNQUFBQSxHQUFHLENBQUNnRCxLQUFKLENBQVcsdUNBQVg7QUFDQSxhQUFPLEVBQVA7QUFDRDs7QUFDRGhELElBQUFBLEdBQUcsQ0FBQ2dELEtBQUosQ0FBVyxPQUFNdkIsY0FBS21GLFNBQUwsQ0FBZSxRQUFmLEVBQXlCSixhQUFhLENBQUN0RixNQUF2QyxFQUErQyxJQUEvQyxDQUFxRCxZQUE1RCxHQUNSZ0ksSUFBSSxDQUFDQyxTQUFMLENBQWUzQyxhQUFmLEVBQThCLElBQTlCLEVBQW9DLENBQXBDLENBREY7QUFHQSxVQUFNNEMsbUJBQW1CLEdBQUcsRUFBNUI7QUFDQSxVQUFNNUYsUUFBUSxHQUFHLEVBQWpCO0FBQ0EsVUFBTXlFLFlBQVksR0FBRyxNQUFNN0MsaUJBQVFDLE9BQVIsRUFBM0I7O0FBQ0EsUUFBSTtBQUNGLFdBQUssTUFBTSxDQUFDZ0UsR0FBRCxFQUFNMUcsU0FBTixDQUFYLElBQStCNkQsYUFBYSxDQUFDOEMsT0FBZCxFQUEvQixFQUF3RDtBQUN0RDlGLFFBQUFBLFFBQVEsQ0FBQ2dCLElBQVQsQ0FBYyxDQUFDLFlBQVk7QUFDekIsY0FBSSxNQUFNLEtBQUt1RCxjQUFMLENBQW9Cc0IsR0FBcEIsRUFBeUIxRyxTQUF6QixFQUFvQ3NGLFlBQXBDLEVBQWtELENBQUN4SCxnQkFBRThDLE9BQUYsQ0FBVStDLElBQVYsQ0FBbkQsQ0FBVixFQUErRTtBQUM3RThDLFlBQUFBLG1CQUFtQixDQUFDNUUsSUFBcEIsQ0FBeUI3QixTQUF6QjtBQUNEO0FBQ0YsU0FKYSxHQUFkOztBQU1BLFlBQUlhLFFBQVEsQ0FBQ3RDLE1BQVQsR0FBa0JuQixzQkFBbEIsS0FBNkMsQ0FBakQsRUFBb0Q7QUFDbEQsZ0JBQU0wRSxrQkFBRUMsR0FBRixDQUFNbEIsUUFBTixDQUFOO0FBQ0Q7QUFDRjs7QUFDRCxZQUFNaUIsa0JBQUVDLEdBQUYsQ0FBTWxCLFFBQU4sQ0FBTjtBQUNELEtBYkQsU0FhVTtBQUNSLFlBQU1qRCxZQUFHNEYsTUFBSCxDQUFVOEIsWUFBVixDQUFOO0FBQ0Q7O0FBQ0QsUUFBSSxDQUFDeEgsZ0JBQUU4QyxPQUFGLENBQVU2RixtQkFBVixDQUFMLEVBQXFDO0FBQ25DcEosTUFBQUEsR0FBRyxDQUFDdUUsSUFBSixDQUFVLDRCQUFELEdBQ04sR0FBRTlDLGNBQUttRixTQUFMLENBQWUsY0FBZixFQUErQndDLG1CQUFtQixDQUFDbEksTUFBbkQsRUFBMkQsSUFBM0QsQ0FBaUUsRUFEdEU7QUFFRCxLQUhELE1BR087QUFDTGxCLE1BQUFBLEdBQUcsQ0FBQ3VFLElBQUosQ0FBVSxvQ0FBVjtBQUNEOztBQUNELFdBQU82RSxtQkFBUDtBQUNEOztBQWxZNkI7O2VBc1lqQnhILHlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDRF9DRE4sIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLFxuICBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeHBhdGggZnJvbSAneHBhdGgnO1xuaW1wb3J0IHsgRE9NUGFyc2VyIH0gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHRlbXBEaXIsIHppcCwgdXRpbCwgbmV0IH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBUSU1FT1VUX01TID0gMTUwMDA7XG5jb25zdCBNQVhfUEFSQUxMRUxfRE9XTkxPQURTID0gNTtcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCcpO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIGlzQ3JjT2sgKHNyYywgY2hlY2tzdW0pIHtcbiAgY29uc3QgbWQ1ID0gYXdhaXQgZnMuaGFzaChzcmMsICdtZDUnKTtcbiAgcmV0dXJuIF8udG9Mb3dlcihtZDUpID09PSBfLnRvTG93ZXIoY2hlY2tzdW0pO1xufVxuXG5mdW5jdGlvbiBmaW5kQ2hpbGROb2RlIChwYXJlbnQsIGNoaWxkTmFtZSA9IG51bGwsIHRleHQgPSBudWxsKSB7XG4gIGlmICghY2hpbGROYW1lICYmICF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFwYXJlbnQuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKGxldCBjaGlsZE5vZGVJZHggPSAwOyBjaGlsZE5vZGVJZHggPCBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGNoaWxkTm9kZUlkeCsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gcGFyZW50LmNoaWxkTm9kZXNbY2hpbGROb2RlSWR4XTtcbiAgICBpZiAoY2hpbGROYW1lICYmICF0ZXh0ICYmIGNoaWxkTmFtZSA9PT0gY2hpbGROb2RlLmxvY2FsTmFtZSkge1xuICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICB9XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IGNoaWxkVGV4dCA9IGV4dHJhY3ROb2RlVGV4dChjaGlsZE5vZGUpO1xuICAgICAgaWYgKCFjaGlsZFRleHQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGROYW1lICYmIGNoaWxkTmFtZSA9PT0gY2hpbGROb2RlLmxvY2FsTmFtZSAmJiB0ZXh0ID09PSBjaGlsZFRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICghY2hpbGROYW1lICYmIHRleHQgPT09IGNoaWxkVGV4dCkge1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdE5vZGVUZXh0IChub2RlKSB7XG4gIHJldHVybiAoIW5vZGUgfHwgIW5vZGUuZmlyc3RDaGlsZCB8fCAhdXRpbC5oYXNWYWx1ZShub2RlLmZpcnN0Q2hpbGQubm9kZVZhbHVlKSlcbiAgICA/IG51bGxcbiAgICA6IG5vZGUuZmlyc3RDaGlsZC5ub2RlVmFsdWU7XG59XG5cblxuY2xhc3MgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChhcmdzID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBjaHJvbWVkcml2ZXJEaXIgPSBnZXRDaHJvbWVkcml2ZXJEaXIoKSxcbiAgICAgIHRpbWVvdXQgPSBUSU1FT1VUX01TLFxuICAgIH0gPSBhcmdzO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyRGlyID0gY2hyb21lZHJpdmVyRGlyO1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5tYXBwaW5nID0ge307XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gQWRkaXRpb25hbERyaXZlckRldGFpbHNcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSB2ZXJzaW9uIC0gQ2hyb21lZHJpdmVyIHZlcnNpb25cbiAgICogb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbkJyb3dzZXJWZXJzaW9uIC0gVGhlIG1pbmltdW0gYnJvd3NlciB2ZXJzaW9uXG4gICAqIHN1cHBvcnRlZCBieSBjaHJvbWVkcml2ZXIgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICAgKi9cblxuICAvKipcbiAgICogR2V0cyBhZGRpdGlvbmFsIGNocm9tZWRyaXZlciBkZXRhaWxzIGZyb20gY2hyb21lZHJpdmVyXG4gICAqIHJlbGVhc2Ugbm90ZXNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBSZWxlYXNlIG5vdGVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNocm9tZWRyaXZlclxuICAgKiBAcmV0dXJucyB7QWRkaXRpb25hbERyaXZlckRldGFpbHN9XG4gICAqL1xuICBwYXJzZU5vdGVzIChjb250ZW50KSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3QgdmVyc2lvbk1hdGNoID0gL15cXHMqWy1dK0Nocm9tZURyaXZlcltcXERdKyhbXFxkLl0rKS9pbS5leGVjKGNvbnRlbnQpO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIHJlc3VsdC52ZXJzaW9uID0gdmVyc2lvbk1hdGNoWzFdO1xuICAgIH1cbiAgICBjb25zdCBtaW5Ccm93c2VyVmVyc2lvbk1hdGNoID0gL15cXHMqU3VwcG9ydHMgQ2hyb21lW1xcRF0rKFxcZCspL2ltLmV4ZWMoY29udGVudCk7XG4gICAgaWYgKG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2gpIHtcbiAgICAgIHJlc3VsdC5taW5Ccm93c2VyVmVyc2lvbiA9IG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2hbMV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWRzIGNocm9tZWRyaXZlciByZWxlYXNlIG5vdGVzIGFuZCBwdXRzIHRoZW1cbiAgICogaW50byB0aGUgZGljdGlvbmFyeSBhcmd1bWVudFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHJpdmVyS2V5IC0gRHJpdmVyIHZlcnNpb24gcGx1cyBhcmNoaXZlIG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5vdGVzVXJsIC0gVGhlIFVSTCBvZiBjaHJvbWVkcml2ZXIgbm90ZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IGluZm9EaWN0IC0gVGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyBkcml2ZXIgaW5mby5cbiAgICogVGhlIG1ldGhvZCBjYWxsIG11dGF0ZXMgYnkgbWVyZ2luZyBgQWRkaXRpb25hbERyaXZlckRldGFpbHNgXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgcmVsZWFzZSBub3RlcyBjYW5ub3QgYmUgZG93bmxvYWRlZFxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVBZGRpdGlvbmFsRHJpdmVySW5mbyAoZHJpdmVyS2V5LCBub3Rlc1VybCwgaW5mb0RpY3QpIHtcbiAgICBjb25zdCBub3RlcyA9IGF3YWl0IHJldHJpZXZlRGF0YShub3Rlc1VybCwge1xuICAgICAgJ3VzZXItYWdlbnQnOiAnYXBwaXVtJyxcbiAgICAgIGFjY2VwdDogJyovKicsXG4gICAgfSwgeyB0aW1lb3V0OiB0aGlzLnRpbWVvdXQgfSk7XG4gICAgY29uc3QgeyBtaW5Ccm93c2VyVmVyc2lvbiB9ID0gdGhpcy5wYXJzZU5vdGVzKG5vdGVzKTtcbiAgICBpZiAoIW1pbkJyb3dzZXJWZXJzaW9uKSB7XG4gICAgICBsb2cuZGVidWcoYFRoZSBkcml2ZXIgJyR7ZHJpdmVyS2V5fScgZG9lcyBub3QgY29udGFpbiB2YWxpZCByZWxlYXNlIG5vdGVzIGF0ICR7bm90ZXNVcmx9LiBgICtcbiAgICAgICAgYFNraXBwaW5nIGl0YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGluZm9EaWN0Lm1pbkJyb3dzZXJWZXJzaW9uID0gbWluQnJvd3NlclZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGNocm9tZWRyaXZlciBzdG9yYWdlIFhNTCBhbmQgc3RvcmVzXG4gICAqIHRoZSBwYXJzZWQgcmVzdWx0cyBpbnRvIGB0aGlzLm1hcHBpbmdgXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRG9jdW1lbnR9IGRvYyAtIFRoZSBET00gcmVwcmVzZW50YXRpb25cbiAgICogb2YgdGhlIGNocm9tZWRyaXZlciBzdG9yYWdlIFhNTFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFBhcnNlTm90ZXMgW3RydWVdIC0gSWYgc2V0IHRvIGB0cnVlYFxuICAgKiB0aGVuIGFkZGl0aW9uYWwgZHJpdmVycyBpbmZvcm1hdGlvbiBpcyBnb2luZyB0byBiZSBwYXJzZWRcbiAgICogYW5kIGFzc2lnbmVkIHRvIGB0aGlzLm1hcHBpbmdgXG4gICAqL1xuICBhc3luYyBwYXJzZVN0b3JhZ2VYbWwgKGRvYywgc2hvdWxkUGFyc2VOb3RlcyA9IHRydWUpIHtcbiAgICBjb25zdCBkcml2ZXJOb2RlcyA9IHhwYXRoLnNlbGVjdChgLy8qW2xvY2FsLW5hbWUoLik9J0NvbnRlbnRzJ11gLCBkb2MpO1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkICR7ZHJpdmVyTm9kZXMubGVuZ3RofSBlbnRyaWVzIGZyb20gc3RvcmFnZSBYTUxgKTtcbiAgICBpZiAoXy5pc0VtcHR5KGRyaXZlck5vZGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgZm9yIChjb25zdCBkcml2ZXJOb2RlIG9mIGRyaXZlck5vZGVzKSB7XG4gICAgICBjb25zdCBrZXkgPSBleHRyYWN0Tm9kZVRleHQoZmluZENoaWxkTm9kZShkcml2ZXJOb2RlLCAnS2V5JykpO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKGtleSwgJy9jaHJvbWVkcml2ZXJfJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV0YWcgPSBleHRyYWN0Tm9kZVRleHQoZmluZENoaWxkTm9kZShkcml2ZXJOb2RlLCAnRVRhZycpKTtcbiAgICAgIGlmICghZXRhZykge1xuICAgICAgICBsb2cuZGVidWcoYFRoZSBlbnRyeSAnJHtrZXl9JyBkb2VzIG5vdCBjb250YWluIHRoZSBjaGVja3N1bS4gU2tpcHBpbmcgaXRgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNkSW5mbyA9IHtcbiAgICAgICAgdXJsOiBgJHtDRF9DRE59LyR7a2V5fWAsXG4gICAgICAgIGV0YWc6IF8udHJpbShldGFnLCAnXCInKSxcbiAgICAgICAgdmVyc2lvbjogXy5maXJzdChrZXkuc3BsaXQoJy8nKSksXG4gICAgICB9O1xuICAgICAgdGhpcy5tYXBwaW5nW2tleV0gPSBjZEluZm87XG5cbiAgICAgIGNvbnN0IG5vdGVzUGF0aCA9IGAke2NkSW5mby52ZXJzaW9ufS9ub3Rlcy50eHRgO1xuICAgICAgY29uc3QgaXNOb3Rlc1ByZXNlbnQgPSAhIWRyaXZlck5vZGVzXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgbm9kZSkgPT4gYWNjIHx8IGZpbmRDaGlsZE5vZGUobm9kZSwgJ0tleScsIG5vdGVzUGF0aCksIGZhbHNlKTtcbiAgICAgIGlmICghaXNOb3Rlc1ByZXNlbnQpIHtcbiAgICAgICAgY2RJbmZvLm1pbkJyb3dzZXJWZXJzaW9uID0gbnVsbDtcbiAgICAgICAgaWYgKHNob3VsZFBhcnNlTm90ZXMpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgVGhlIGVudHJ5ICcke2tleX0nIGRvZXMgbm90IGNvbnRhaW4gYW55IG5vdGVzLiBTa2lwcGluZyBpdGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmICghc2hvdWxkUGFyc2VOb3Rlcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8oa2V5LCBgJHtDRF9DRE59LyR7bm90ZXNQYXRofWAsIGNkSW5mbykpO1xuICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCAlIE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPT09IDApIHtcbiAgICAgICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgbG9nLmluZm8oYFRoZSB0b3RhbCBjb3VudCBvZiBlbnRyaWVzIGluIHRoZSBtYXBwaW5nOiAke18uc2l6ZSh0aGlzLm1hcHBpbmcpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IERyaXZlckRldGFpbHNcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHVybCAtIFRoZSBmdWxsIHVybCB0byB0aGUgY29ycmVzcG9uZGluZyBkcml2ZXIgaW5cbiAgICogdGhlIHJlbW90ZSBzdG9yYWdlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBldGFnIC0gVGhlIENSQyBvZiB0aGUgZHJpdmVyIGFyY2hpdmVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24gLSBDaHJvbWVkcml2ZXIgdmVyc2lvblxuICAgKi9cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gQ2hyb21lZHJpdmVyc01hcHBpbmdcbiAgICogQHByb3BlcnR5IHtEcml2ZXJEZXRhaWxzfSAtIFRoZSBrZXlzIGFyZSB1bmlxdWUgZHJpdmVyIGlkZW50aWZpZXJzXG4gICAqICh2ZXJzaW9uL2FyY2hpdmUgbmFtZSkuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBoYXZlIGBEcml2ZXJEZXRhaWxzYFxuICAgKiBjb250YWluaW5nIGNocm9tZWRyaXZlciBkZXRhaWxzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgY2hyb21lZHJpdmVyIG1hcHBpbmcgZnJvbSB0aGUgc3RvcmFnZVxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFBhcnNlTm90ZXMgW3RydWVdIC0gaWYgc2V0IHRvIGB0cnVlYFxuICAgKiB0aGVuIGFkZGl0aW9uYWwgY2hyb21lZHJpdmVycyBpbmZvIGlzIGdvaW5nIHRvIGJlIHJldHJpZXZlZCBhbmRcbiAgICogcGFyc2VkIGZyb20gcmVsZWFzZSBub3Rlc1xuICAgKiBAcmV0dXJucyB7Q2hyb21lZHJpdmVyc01hcHBpbmd9XG4gICAqL1xuICBhc3luYyByZXRyaWV2ZU1hcHBpbmcgKHNob3VsZFBhcnNlTm90ZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgeG1sID0gYXdhaXQgcmV0cmlldmVEYXRhKENEX0NETiwge1xuICAgICAgJ3VzZXItYWdlbnQnOiAnYXBwaXVtJyxcbiAgICAgIGFjY2VwdDogJ2FwcGxpY2F0aW9uL3htbCwgKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IHRoaXMudGltZW91dCB9KTtcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHhtbCk7XG4gICAgYXdhaXQgdGhpcy5wYXJzZVN0b3JhZ2VYbWwoZG9jLCBzaG91bGRQYXJzZU5vdGVzKTtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodGhpcy5tYXBwaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBkb3dubG9hZGVkIGNocm9tZWRyaXZlciBhcmNoaXZlXG4gICAqIGludG8gdGhlIGdpdmVuIGRlc3RpbmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgLSBUaGUgc291cmNlIGFyY2hpdmUgcGF0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHN0IC0gVGhlIGRlc3RpbmF0aW9uIGNocm9tZWRyaXZlciBwYXRoXG4gICAqL1xuICBhc3luYyB1bnppcERyaXZlciAoc3JjLCBkc3QpIHtcbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oc3JjLCB0bXBSb290KTtcbiAgICAgIGNvbnN0IGNocm9tZWRyaXZlclBhdGggPSBhd2FpdCBmcy53YWxrRGlyKHRtcFJvb3QsIHRydWUsIChpdGVtUGF0aCwgaXNEaXJlY3RvcnkpID0+XG4gICAgICAgICFpc0RpcmVjdG9yeSAmJiBfLnRvTG93ZXIocGF0aC5wYXJzZShpdGVtUGF0aCkubmFtZSkgPT09ICdjaHJvbWVkcml2ZXInKTtcbiAgICAgIGlmICghY2hyb21lZHJpdmVyUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmNoaXZlIHdhcyB1bnppcHBlZCBwcm9wZXJseSwgYnV0IHdlIGNvdWxkIG5vdCBmaW5kIGFueSBjaHJvbWVkcml2ZXIgZXhlY3V0YWJsZScpO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBNb3ZpbmcgdGhlIGV4dHJhY3RlZCAnJHtwYXRoLmJhc2VuYW1lKGNocm9tZWRyaXZlclBhdGgpfScgdG8gJyR7ZHN0fSdgKTtcbiAgICAgIGF3YWl0IGZzLm12KGNocm9tZWRyaXZlclBhdGgsIGRzdCwge1xuICAgICAgICBta2RpcnA6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IE9TSW5mb1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBob3N0IE9TXG4gICAqIENhbiBiZSBlaXRoZXIgYG1hY2AsIGB3aW5kb3dzYCBvciBgbGludXhgXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcmNoIC0gVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgaG9zdCBPRC5cbiAgICogQ2FuIGJlIGVpdGhlciBgMzJgIG9yIGA2NGBcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSBoYXJkd2FyZU5hbWUgLSBUaGUgb3V0cHV0IG9mIGB1bmFtZSAtbWAgY29tbWFuZFxuICAgKiBvbiBsaW51eCBhbmQgbWFjIHN5c3RlbXMuIGBudWxsYCBvbiBXaW5kb3dzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGB0aGlzLm1hcHBpbmdgIHRvIG9ubHkgc2VsZWN0IG1hdGNoaW5nXG4gICAqIGNocm9tZWRyaXZlciBlbnRyaWVzIGJ5IG9wZXJhdGluZyBzeXN0ZW0gaW5mb3JtYXRpb25cbiAgICogYW5kL29yIGFkZGl0aW9uYWwgc3luY2hyb25pemF0aW9uIG9wdGlvbnMgKGlmIHByb3ZpZGVkKVxuICAgKlxuICAgKiBAcGFyYW0gez9PU0luZm99IG9zSW5mb1xuICAgKiBAcGFyYW0gez9TeW5jT3B0aW9uc30gb3B0c1xuICAgKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGxpc3Qgb2YgZmlsdGVyZWQgY2hyb21lZHJpdmVyXG4gICAqIGVudHJ5IG5hbWVzICh2ZXJzaW9uL2FyY2hpdmUgbmFtZSlcbiAgICovXG4gIHNlbGVjdE1hdGNoaW5nRHJpdmVycyAob3NJbmZvLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBtaW5Ccm93c2VyVmVyc2lvbixcbiAgICAgIHZlcnNpb25zID0gW10sXG4gICAgfSA9IG9wdHM7XG4gICAgbGV0IGRyaXZlcnNUb1N5bmMgPSBfLmtleXModGhpcy5tYXBwaW5nKTtcblxuICAgIGlmICghXy5pc0VtcHR5KHZlcnNpb25zKSkge1xuICAgICAgLy8gSGFuZGxlIG9ubHkgc2VsZWN0ZWQgdmVyc2lvbnMgaWYgcmVxdWVzdGVkXG4gICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBjaHJvbWVkcml2ZXJzIHdob3NlIHZlcnNpb25zIG1hdGNoIHRvICR7dmVyc2lvbnN9YCk7XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luY1xuICAgICAgICAuZmlsdGVyKChjZE5hbWUpID0+IHZlcnNpb25zLmluY2x1ZGVzKGAke3RoaXMubWFwcGluZ1tjZE5hbWVdLnZlcnNpb259YCkpO1xuXG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc05hTihtaW5Ccm93c2VyVmVyc2lvbikpIHtcbiAgICAgIC8vIE9ubHkgc2VsZWN0IGRyaXZlcnMgdGhhdCBzdXBwb3J0IHRoZSBjdXJyZW50IGJyb3dzZXIgd2hvc2UgbWFqb3IgdmVyc2lvbiBudW1iZXIgZXF1YWxzIHRvIGBtaW5Ccm93c2VyVmVyc2lvbmBcbiAgICAgIGNvbnN0IG1pbkJyb3dzZXJWZXJzaW9uSW50ID0gcGFyc2VJbnQobWluQnJvd3NlclZlcnNpb24sIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgbWluaW11bSBzdXBwb3J0ZWQgYnJvd3NlciB2ZXJzaW9uIG1hdGNoZXMgdG8gJHttaW5Ccm93c2VyVmVyc2lvbkludH1gKTtcbiAgICAgIGxldCBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPSAwO1xuICAgICAgLy8gU2VsZWN0IHRoZSBuZXdlc3QgYXZhaWxhYmxlIGFuZCBjb21wYXRpYmxlIGNocm9tZWRyaXZlclxuICAgICAgZm9yIChjb25zdCBjZE5hbWUgb2YgZHJpdmVyc1RvU3luYykge1xuICAgICAgICBjb25zdCBjdXJyZW50TWluQnJvd3NlclZlcnNpb24gPSBwYXJzZUludCh0aGlzLm1hcHBpbmdbY2ROYW1lXS5taW5Ccm93c2VyVmVyc2lvbiwgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbilcbiAgICAgICAgICAgICYmIGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbiA8PSBtaW5Ccm93c2VyVmVyc2lvbkludFxuICAgICAgICAgICAgJiYgY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIDwgY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyID0gY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luYy5maWx0ZXIoKGNkTmFtZSkgPT4gYCR7dGhpcy5tYXBwaW5nW2NkTmFtZV0ubWluQnJvd3NlclZlcnNpb259YCA9PT1cbiAgICAgICAgYCR7Y2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyID4gMCA/IGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA6IG1pbkJyb3dzZXJWZXJzaW9uSW50fWApO1xuXG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYFdpbGwgc2VsZWN0IGNhbmRpZGF0ZSAke3V0aWwucGx1cmFsaXplKCdkcml2ZXInLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCl9IGAgK1xuICAgICAgICBgdmVyc2lvbmVkIGFzICcke18udW5pcShkcml2ZXJzVG9TeW5jLm1hcCgoY2ROYW1lKSA9PiB0aGlzLm1hcHBpbmdbY2ROYW1lXS52ZXJzaW9uKSl9J2ApO1xuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KG9zSW5mbykpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgZHJpdmVycyBmb3IgdW5zdXBwb3J0ZWQgc3lzdGVtIGFyY2hpdGVjdHVyZXNcbiAgICAgIGxldCB7bmFtZSwgYXJjaCwgaGFyZHdhcmVOYW1lfSA9IG9zSW5mbztcbiAgICAgIGlmIChhcmNoID09PSBYNjQgJiYgIWRyaXZlcnNUb1N5bmMuc29tZSgoY2ROYW1lKSA9PiBjZE5hbWUuaW5jbHVkZXMoYF8ke25hbWV9JHtYNjR9YCkpKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byB4ODYgYnVpbGQgaWYgeDY0IG9uZSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gT1NcbiAgICAgICAgYXJjaCA9IFg4NjtcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lID09PSBPUy5tYWMgJiYgXy5pbmNsdWRlcyhoYXJkd2FyZU5hbWUsICdhcm0nKVxuICAgICAgICAgICYmIGRyaXZlcnNUb1N5bmMuc29tZSgoY2ROYW1lKSA9PiBjZE5hbWUuaW5jbHVkZXMoTTFfQVJDSF9TVUZGSVgpKSkge1xuICAgICAgICAvLyBwcmVmZXIgZXhlY3V0YWJsZSBmb3IgTTEgYXJjaCBpZiBwcmVzZW50XG4gICAgICAgIGFyY2ggKz0gTTFfQVJDSF9TVUZGSVg7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBjaHJvbWVkcml2ZXJzIHdob3NlIHBsYXRmb3JtIG1hdGNoZXMgdG8gJHtuYW1lfSR7YXJjaH1gKTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtUmUgPSBuZXcgUmVnRXhwKGAoXFxcXGJ8Xykke25hbWV9JHthcmNofVxcXFxiYCk7XG4gICAgICBkcml2ZXJzVG9TeW5jID0gZHJpdmVyc1RvU3luYy5maWx0ZXIoKGNkTmFtZSkgPT4gcGxhdGZvcm1SZS50ZXN0KGNkTmFtZSkpO1xuICAgICAgbG9nLmRlYnVnKGBHb3QgJHt1dGlsLnBsdXJhbGl6ZSgnaXRlbScsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZHJpdmVyc1RvU3luYztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGdpdmVuIGNocm9tZWRyaXZlciBmcm9tIHRoZSBzdG9yYWdlXG4gICAqIGFuZCB1bnBhY2tzIGl0IGludG8gYHRoaXMuY2hyb21lZHJpdmVyRGlyYCBmb2xkZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIHVuaXF1ZSBkcml2ZXIgaW5kZXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRyaXZlcktleSAtIFRoZSBkcml2ZXIga2V5IGluIGB0aGlzLm1hcHBpbmdgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmNoaXZlc1Jvb3QgLSBUaGUgdGVtcG9yYXJ5IGZvbGRlciBwYXRoIHRvIGV4dHJhY3RcbiAgICogZG93bmxvYWRlZCBhcmNoaXZlcyB0b1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzU3RyaWN0IFt0cnVlXSAtIFdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgKGB0cnVlYClcbiAgICogb3IgcmV0dXJuIGEgYm9vbGVhbiByZXN1bHQgaWYgdGhlIGRyaXZlciByZXRyaWV2YWwgcHJvY2VzcyBmYWlsc1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSByZXRyaWV2aW5nIHRoZSBkcml2ZXJcbiAgICogYW5kIGBpc1N0cmljdGAgaXMgc2V0IHRvIGB0cnVlYFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgYHRydWVgIHRoZW4gdGhlIGNocm9tZWRyaXZlciBpcyBzdWNjZXNzZnVsbHlcbiAgICogZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkLlxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVEcml2ZXIgKGluZGV4LCBkcml2ZXJLZXksIGFyY2hpdmVzUm9vdCwgaXNTdHJpY3QgPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgdXJsLCBldGFnLCB2ZXJzaW9uIH0gPSB0aGlzLm1hcHBpbmdbZHJpdmVyS2V5XTtcbiAgICBjb25zdCBhcmNoaXZlUGF0aCA9IHBhdGgucmVzb2x2ZShhcmNoaXZlc1Jvb3QsIGAke2luZGV4fS56aXBgKTtcbiAgICBsb2cuZGVidWcoYFJldHJpZXZpbmcgJyR7dXJsfScgdG8gJyR7YXJjaGl2ZVBhdGh9J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXQuZG93bmxvYWRGaWxlKHVybCwgYXJjaGl2ZVBhdGgsIHtcbiAgICAgICAgaXNNZXRlcmVkOiBmYWxzZSxcbiAgICAgICAgdGltZW91dDogVElNRU9VVF9NU1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gYENhbm5vdCBkb3dubG9hZCBjaHJvbWVkcml2ZXIgYXJjaGl2ZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWA7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFhd2FpdCBpc0NyY09rKGFyY2hpdmVQYXRoLCBldGFnKSkge1xuICAgICAgY29uc3QgbXNnID0gYFRoZSBjaGVja3N1bSBmb3IgdGhlIGRvd25sb2FkZWQgY2hyb21lZHJpdmVyICcke2RyaXZlcktleX0nIGRpZCBub3QgbWF0Y2hgO1xuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7cGF0aC5wYXJzZSh1cmwpLm5hbWV9X3Yke3ZlcnNpb259YCArXG4gICAgICAoc3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJycpO1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5jaHJvbWVkcml2ZXJEaXIsIGZpbGVOYW1lKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51bnppcERyaXZlcihhcmNoaXZlUGF0aCwgdGFyZ2V0UGF0aCk7XG4gICAgICBhd2FpdCBmcy5jaG1vZCh0YXJnZXRQYXRoLCAwbzc1NSk7XG4gICAgICBsb2cuZGVidWcoYFBlcm1pc3Npb25zIG9mIHRoZSBmaWxlICcke3RhcmdldFBhdGh9JyBoYXZlIGJlZW4gY2hhbmdlZCB0byA3NTVgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBTeW5jT3B0aW9uc1xuICAgKiBAcHJvcGVydHkge0FycmF5PFN0cmluZz59IHZlcnNpb25zIC0gVGhlIGxpc3Qgb2YgY2hyb21lZHJpdmVyXG4gICAqIHZlcnNpb25zIHRvIHN5bmMuIElmIGVtcHR5ICh0aGUgZGVmYXVsdCB2YWx1ZSkgdGhlbiBhbGwgYXZhaWxhYmxlXG4gICAqIGNocm9tZWRyaXZlcnMgYXJlIGdvaW5nIHRvIGJlIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZFxuICAgKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IG1pbkJyb3dzZXJWZXJzaW9uIC0gVGhlIG1pbnVtdW0gc3VwcG9ydGVkXG4gICAqIENocm9tZSB2ZXJzaW9uIHRoYXQgZG93bmxvYWRlZCBjaHJvbWVkcml2ZXJzIHNob3VsZCBzdXBwb3J0LiBDYW4gbWF0Y2hcbiAgICogbXVsdGlwbGUgZHJpdmVycy5cbiAgICogQHByb3BlcnR5IHs/T1NJbmZvfSBvc0luZm8gLSBTeXN0ZW0gaW5mb3JtYXRpb24gdXNlZCB0byBmaWx0ZXIgb3V0XG4gICAqIHRoZSBsaXN0IG9mIHRoZSByZXRyaWV2ZWQgZHJpdmVycy4gSWYgbm90IHByb3ZpZGVkIHRoZW4gdGhlIHNjcmlwdFxuICAgKiB3aWxsIHRyeSB0byByZXRyaWV2ZSBpdC5cbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBjaHJvbWVkcml2ZXJzIGZyb20gdGhlIHJlbW90ZSBzdG9yYWdlXG4gICAqIHRvIHRoZSBsb2NhbCBmaWxlIHN5c3RlbVxuICAgKlxuICAgKiBAcGFyYW0gez9TeW5jT3B0aW9uc30gb3B0c1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aGlsZSByZXRyaWV2aW5nXG4gICAqIHRoZSBkcml2ZXJzXG4gICAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmd9IFRoZSBsaXN0IG9mIHN1Y2Nlc3NmdWxseSBzeW5jaHJvbml6ZWQgZHJpdmVyIGtleXNcbiAgICovXG4gIGFzeW5jIHN5bmNEcml2ZXJzIChvcHRzID0ge30pIHtcbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMubWFwcGluZykpIHtcbiAgICAgIGF3YWl0IHRoaXMucmV0cmlldmVNYXBwaW5nKCEhb3B0cy5taW5Ccm93c2VyVmVyc2lvbik7XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkodGhpcy5tYXBwaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcmV0cmlldmUgY2hyb21lZHJpdmVycyBtYXBwaW5nIGZyb20gR29vZ2xlIHN0b3JhZ2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkcml2ZXJzVG9TeW5jID0gdGhpcy5zZWxlY3RNYXRjaGluZ0RyaXZlcnMob3B0cy5vc0luZm8gPz8gYXdhaXQgZ2V0T3NJbmZvKCksIG9wdHMpO1xuICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyc1RvU3luYykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlcmUgYXJlIG5vIGRyaXZlcnMgdG8gc3luYy4gRXhpdGluZ2ApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdkcml2ZXInLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9IHRvIHN5bmM6IGAgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoZHJpdmVyc1RvU3luYywgbnVsbCwgMikpO1xuXG4gICAgY29uc3Qgc3luY2hyb25pemVkRHJpdmVycyA9IFtdO1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgY29uc3QgYXJjaGl2ZXNSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgW2lkeCwgZHJpdmVyS2V5XSBvZiBkcml2ZXJzVG9TeW5jLmVudHJpZXMoKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKGF3YWl0IHRoaXMucmV0cmlldmVEcml2ZXIoaWR4LCBkcml2ZXJLZXksIGFyY2hpdmVzUm9vdCwgIV8uaXNFbXB0eShvcHRzKSkpIHtcbiAgICAgICAgICAgIHN5bmNocm9uaXplZERyaXZlcnMucHVzaChkcml2ZXJLZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKSk7XG5cbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCAlIE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPT09IDApIHtcbiAgICAgICAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKGFyY2hpdmVzUm9vdCk7XG4gICAgfVxuICAgIGlmICghXy5pc0VtcHR5KHN5bmNocm9uaXplZERyaXZlcnMpKSB7XG4gICAgICBsb2cuaW5mbyhgU3VjY2Vzc2Z1bGx5IHN5bmNocm9uaXplZCBgICtcbiAgICAgICAgYCR7dXRpbC5wbHVyYWxpemUoJ2Nocm9tZWRyaXZlcicsIHN5bmNocm9uaXplZERyaXZlcnMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oYE5vIGNocm9tZWRyaXZlcnMgd2VyZSBzeW5jaHJvbml6ZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN5bmNocm9uaXplZERyaXZlcnM7XG4gIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50O1xuIl0sImZpbGUiOiJsaWIvc3RvcmFnZS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -5,18 +5,19 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.X86 = exports.X64 = exports.OS = exports.M1_ARCH_SUFFIX = exports.CHROMEDRIVER_CHROME_MAPPING = exports.CD_VER = exports.CD_CDN = exports.CD_BASE_DIR = void 0;
8
9
  exports.getChromeVersion = getChromeVersion;
9
- exports.getChromedriverDir = getChromedriverDir;
10
10
  exports.getChromedriverBinaryPath = getChromedriverBinaryPath;
11
+ exports.getChromedriverDir = getChromedriverDir;
11
12
  exports.getMostRecentChromedriver = getMostRecentChromedriver;
13
+ exports.getOsName = exports.getOsInfo = void 0;
12
14
  exports.retrieveData = retrieveData;
13
- exports.M1_ARCH_SUFFIX = exports.X86 = exports.X64 = exports.OS = exports.getOsInfo = exports.CHROMEDRIVER_CHROME_MAPPING = exports.CD_VER = exports.CD_CDN = exports.CD_BASE_DIR = exports.getOsName = void 0;
14
15
 
15
16
  require("source-map-support/register");
16
17
 
17
18
  var _lodash = _interopRequireDefault(require("lodash"));
18
19
 
19
- var _appiumSupport = require("appium-support");
20
+ var _support = require("@appium/support");
20
21
 
21
22
  var _path = _interopRequireDefault(require("path"));
22
23
 
@@ -75,7 +76,7 @@ function getChromedriverDir(osName = getOsName()) {
75
76
  async function getChromedriverBinaryPath(osName = getOsName()) {
76
77
  const rootDir = getChromedriverDir(osName);
77
78
  const pathSuffix = osName === OS.windows ? '.exe' : '';
78
- const paths = await _appiumSupport.fs.glob(`${CD_EXECUTABLE_PREFIX}*${pathSuffix}`, {
79
+ const paths = await _support.fs.glob(`${CD_EXECUTABLE_PREFIX}*${pathSuffix}`, {
79
80
  cwd: rootDir,
80
81
  absolute: true,
81
82
  nocase: true,
@@ -99,11 +100,11 @@ async function retrieveData(url, headers, opts = {}) {
99
100
  }
100
101
 
101
102
  const getOsName = _lodash.default.memoize(function getOsName() {
102
- if (_appiumSupport.system.isWindows()) {
103
+ if (_support.system.isWindows()) {
103
104
  return OS.windows;
104
105
  }
105
106
 
106
- if (_appiumSupport.system.isMac()) {
107
+ if (_support.system.isMac()) {
107
108
  return OS.mac;
108
109
  }
109
110
 
@@ -115,12 +116,12 @@ exports.getOsName = getOsName;
115
116
  const getOsInfo = _lodash.default.memoize(async function getOsInfo() {
116
117
  return {
117
118
  name: getOsName(),
118
- arch: await _appiumSupport.system.arch(),
119
- hardwareName: _appiumSupport.system.isWindows() ? null : _lodash.default.trim(await (0, _teen_process.exec)('uname', ['-m']))
119
+ arch: await _support.system.arch(),
120
+ hardwareName: _support.system.isWindows() ? null : _lodash.default.trim(await (0, _teen_process.exec)('uname', ['-m']))
120
121
  };
121
122
  });
122
123
 
123
124
  exports.getOsInfo = getOsInfo;require('source-map-support').install();
124
125
 
125
126
 
126
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJyb290RGlyIiwicGF0aCIsImJhc2VuYW1lIiwiX19kaXJuYW1lIiwicmVzb2x2ZSIsInByb2Nlc3MiLCJlbnYiLCJOT19QUkVDT01QSUxFIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwicmVxdWlyZSIsIkNEX1ZFUiIsIm5wbV9jb25maWdfY2hyb21lZHJpdmVyX3ZlcnNpb24iLCJDSFJPTUVEUklWRVJfVkVSU0lPTiIsImdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIiLCJDRF9CQVNFX0RJUiIsIkNEX0NETiIsIm5wbV9jb25maWdfY2hyb21lZHJpdmVyX2NkbnVybCIsIkNIUk9NRURSSVZFUl9DRE5VUkwiLCJPUyIsImxpbnV4Iiwid2luZG93cyIsIm1hYyIsIlg2NCIsIlg4NiIsIk0xX0FSQ0hfU1VGRklYIiwiQ0RfRVhFQ1VUQUJMRV9QUkVGSVgiLCJtYXBwaW5nIiwiXyIsImlzRW1wdHkiLCJFcnJvciIsImxhc3QiLCJrZXlzIiwic29ydCIsImNvbXBhcmVWZXJzaW9ucyIsImdldENocm9tZVZlcnNpb24iLCJhZGIiLCJidW5kbGVJZCIsInZlcnNpb25OYW1lIiwiZ2V0UGFja2FnZUluZm8iLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJvc05hbWUiLCJnZXRPc05hbWUiLCJnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIiwicGF0aFN1ZmZpeCIsInBhdGhzIiwiZnMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJub2Nhc2UiLCJub2RpciIsInN0cmljdCIsImZpcnN0IiwicmV0cmlldmVEYXRhIiwidXJsIiwiaGVhZGVycyIsIm9wdHMiLCJ0aW1lb3V0IiwicmVzcG9uc2VUeXBlIiwiZGF0YSIsIm1lbW9pemUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJpc01hYyIsImdldE9zSW5mbyIsIm5hbWUiLCJhcmNoIiwiaGFyZHdhcmVOYW1lIiwidHJpbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7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cnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGNvbXBhcmVWZXJzaW9ucyBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuXG5jb25zdCByb290RGlyID0gcGF0aC5iYXNlbmFtZShfX2Rpcm5hbWUpID09PSAnbGliJ1xuICA/IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIHByb2Nlc3MuZW52Lk5PX1BSRUNPTVBJTEUgPyAnLi4nIDogJy4uLy4uJylcbiAgOiBfX2Rpcm5hbWU7XG4vLyBDaHJvbWVkcml2ZXIgdmVyc2lvbjogbWluaW11bSBDaHJvbWUgdmVyc2lvblxuY29uc3QgQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HID0gcmVxdWlyZShwYXRoLnJlc29sdmUocm9vdERpciwgJ2NvbmZpZycsICdtYXBwaW5nLmpzb24nKSk7XG5cbmNvbnN0IENEX1ZFUiA9IHByb2Nlc3MuZW52Lm5wbV9jb25maWdfY2hyb21lZHJpdmVyX3ZlcnNpb25cbiAgfHwgcHJvY2Vzcy5lbnYuQ0hST01FRFJJVkVSX1ZFUlNJT05cbiAgfHwgZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlcigpO1xuY29uc3QgQ0RfQkFTRV9ESVIgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnY2hyb21lZHJpdmVyJyk7XG5jb25zdCBDRF9DRE4gPSBwcm9jZXNzLmVudi5ucG1fY29uZmlnX2Nocm9tZWRyaXZlcl9jZG51cmxcbiAgfHwgcHJvY2Vzcy5lbnYuQ0hST01FRFJJVkVSX0NETlVSTFxuICB8fCAnaHR0cHM6Ly9jaHJvbWVkcml2ZXIuc3RvcmFnZS5nb29nbGVhcGlzLmNvbSc7XG5jb25zdCBPUyA9IHtcbiAgbGludXg6ICdsaW51eCcsXG4gIHdpbmRvd3M6ICd3aW4nLFxuICBtYWM6ICdtYWMnXG59O1xuY29uc3QgWDY0ID0gJzY0JztcbmNvbnN0IFg4NiA9ICczMic7XG5jb25zdCBNMV9BUkNIX1NVRkZJWCA9ICdfbTEnO1xuY29uc3QgQ0RfRVhFQ1VUQUJMRV9QUkVGSVggPSAnY2hyb21lZHJpdmVyJztcblxuXG5mdW5jdGlvbiBnZXRNb3N0UmVjZW50Q2hyb21lZHJpdmVyIChtYXBwaW5nID0gQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HKSB7XG4gIGlmIChfLmlzRW1wdHkobWFwcGluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBnZXQgbW9zdCByZWNlbnQgQ2hyb21lZHJpdmVyIHZlcnNpb24gZnJvbSBlbXB0eSBtYXBwaW5nJyk7XG4gIH1cbiAgcmV0dXJuIF8ubGFzdChfLmtleXMobWFwcGluZykuc29ydChjb21wYXJlVmVyc2lvbnMpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q2hyb21lVmVyc2lvbiAoYWRiLCBidW5kbGVJZCkge1xuICBjb25zdCB7dmVyc2lvbk5hbWV9ID0gYXdhaXQgYWRiLmdldFBhY2thZ2VJbmZvKGJ1bmRsZUlkKTtcbiAgcmV0dXJuIHZlcnNpb25OYW1lO1xufVxuXG5mdW5jdGlvbiBnZXRDaHJvbWVkcml2ZXJEaXIgKG9zTmFtZSA9IGdldE9zTmFtZSgpKSB7XG4gIHJldHVybiBwYXRoLnJlc29sdmUoQ0RfQkFTRV9ESVIsIG9zTmFtZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGggKG9zTmFtZSA9IGdldE9zTmFtZSgpKSB7XG4gIGNvbnN0IHJvb3REaXIgPSBnZXRDaHJvbWVkcml2ZXJEaXIob3NOYW1lKTtcbiAgY29uc3QgcGF0aFN1ZmZpeCA9IG9zTmFtZSA9PT0gT1Mud2luZG93cyA/ICcuZXhlJyA6ICcnO1xuICBjb25zdCBwYXRocyA9IGF3YWl0IGZzLmdsb2IoYCR7Q0RfRVhFQ1VUQUJMRV9QUkVGSVh9KiR7cGF0aFN1ZmZpeH1gLCB7XG4gICAgY3dkOiByb290RGlyLFxuICAgIGFic29sdXRlOiB0cnVlLFxuICAgIG5vY2FzZTogdHJ1ZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBzdHJpY3Q6IGZhbHNlLFxuICB9KTtcbiAgcmV0dXJuIF8uaXNFbXB0eShwYXRocylcbiAgICA/IHBhdGgucmVzb2x2ZShyb290RGlyLCBgJHtDRF9FWEVDVVRBQkxFX1BSRUZJWH0ke3BhdGhTdWZmaXh9YClcbiAgICA6IF8uZmlyc3QocGF0aHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXRyaWV2ZURhdGEgKHVybCwgaGVhZGVycywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0ID0gNTAwMCxcbiAgICByZXNwb25zZVR5cGUgPSAndGV4dCcsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gKGF3YWl0IGF4aW9zKHtcbiAgICB1cmwsXG4gICAgaGVhZGVycyxcbiAgICB0aW1lb3V0LFxuICAgIHJlc3BvbnNlVHlwZSxcbiAgfSkpLmRhdGE7XG59XG5cbmNvbnN0IGdldE9zTmFtZSA9IF8ubWVtb2l6ZShmdW5jdGlvbiBnZXRPc05hbWUgKCkge1xuICBpZiAoc3lzdGVtLmlzV2luZG93cygpKSB7XG4gICAgcmV0dXJuIE9TLndpbmRvd3M7XG4gIH1cbiAgaWYgKHN5c3RlbS5pc01hYygpKSB7XG4gICAgcmV0dXJuIE9TLm1hYztcbiAgfVxuICByZXR1cm4gT1MubGludXg7XG59KTtcblxuY29uc3QgZ2V0T3NJbmZvID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldE9zSW5mbyAoKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogZ2V0T3NOYW1lKCksXG4gICAgYXJjaDogYXdhaXQgc3lzdGVtLmFyY2goKSxcbiAgICBoYXJkd2FyZU5hbWU6IHN5c3RlbS5pc1dpbmRvd3MoKSA/IG51bGwgOiBfLnRyaW0oYXdhaXQgZXhlYygndW5hbWUnLCBbJy1tJ10pKSxcbiAgfTtcbn0pO1xuXG5cbmV4cG9ydCB7XG4gIGdldENocm9tZVZlcnNpb24sIGdldENocm9tZWRyaXZlckRpciwgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCwgZ2V0T3NOYW1lLFxuICBDRF9CQVNFX0RJUiwgQ0RfQ0ROLCBDRF9WRVIsIENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORywgZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlcixcbiAgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sIE9TLCBYNjQsIFg4NiwgTTFfQVJDSF9TVUZGSVgsXG59O1xuIl0sImZpbGUiOiJsaWIvdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
127
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJyb290RGlyIiwicGF0aCIsImJhc2VuYW1lIiwiX19kaXJuYW1lIiwicmVzb2x2ZSIsInByb2Nlc3MiLCJlbnYiLCJOT19QUkVDT01QSUxFIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwicmVxdWlyZSIsIkNEX1ZFUiIsIm5wbV9jb25maWdfY2hyb21lZHJpdmVyX3ZlcnNpb24iLCJDSFJPTUVEUklWRVJfVkVSU0lPTiIsImdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIiLCJDRF9CQVNFX0RJUiIsIkNEX0NETiIsIm5wbV9jb25maWdfY2hyb21lZHJpdmVyX2NkbnVybCIsIkNIUk9NRURSSVZFUl9DRE5VUkwiLCJPUyIsImxpbnV4Iiwid2luZG93cyIsIm1hYyIsIlg2NCIsIlg4NiIsIk0xX0FSQ0hfU1VGRklYIiwiQ0RfRVhFQ1VUQUJMRV9QUkVGSVgiLCJtYXBwaW5nIiwiXyIsImlzRW1wdHkiLCJFcnJvciIsImxhc3QiLCJrZXlzIiwic29ydCIsImNvbXBhcmVWZXJzaW9ucyIsImdldENocm9tZVZlcnNpb24iLCJhZGIiLCJidW5kbGVJZCIsInZlcnNpb25OYW1lIiwiZ2V0UGFja2FnZUluZm8iLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJvc05hbWUiLCJnZXRPc05hbWUiLCJnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIiwicGF0aFN1ZmZpeCIsInBhdGhzIiwiZnMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJub2Nhc2UiLCJub2RpciIsInN0cmljdCIsImZpcnN0IiwicmV0cmlldmVEYXRhIiwidXJsIiwiaGVhZGVycyIsIm9wdHMiLCJ0aW1lb3V0IiwicmVzcG9uc2VUeXBlIiwiZGF0YSIsIm1lbW9pemUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJpc01hYyIsImdldE9zSW5mbyIsIm5hbWUiLCJhcmNoIiwiaGFyZHdhcmVOYW1lIiwidHJpbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7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cnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBjb21wYXJlVmVyc2lvbnMgZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5cblxuY29uc3Qgcm9vdERpciA9IHBhdGguYmFzZW5hbWUoX19kaXJuYW1lKSA9PT0gJ2xpYidcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBwcm9jZXNzLmVudi5OT19QUkVDT01QSUxFID8gJy4uJyA6ICcuLi8uLicpXG4gIDogX19kaXJuYW1lO1xuLy8gQ2hyb21lZHJpdmVyIHZlcnNpb246IG1pbmltdW0gQ2hyb21lIHZlcnNpb25cbmNvbnN0IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKHJvb3REaXIsICdjb25maWcnLCAnbWFwcGluZy5qc29uJykpO1xuXG5jb25zdCBDRF9WRVIgPSBwcm9jZXNzLmVudi5ucG1fY29uZmlnX2Nocm9tZWRyaXZlcl92ZXJzaW9uXG4gIHx8IHByb2Nlc3MuZW52LkNIUk9NRURSSVZFUl9WRVJTSU9OXG4gIHx8IGdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIoKTtcbmNvbnN0IENEX0JBU0VfRElSID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2Nocm9tZWRyaXZlcicpO1xuY29uc3QgQ0RfQ0ROID0gcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19jaHJvbWVkcml2ZXJfY2RudXJsXG4gIHx8IHByb2Nlc3MuZW52LkNIUk9NRURSSVZFUl9DRE5VUkxcbiAgfHwgJ2h0dHBzOi8vY2hyb21lZHJpdmVyLnN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20nO1xuY29uc3QgT1MgPSB7XG4gIGxpbnV4OiAnbGludXgnLFxuICB3aW5kb3dzOiAnd2luJyxcbiAgbWFjOiAnbWFjJ1xufTtcbmNvbnN0IFg2NCA9ICc2NCc7XG5jb25zdCBYODYgPSAnMzInO1xuY29uc3QgTTFfQVJDSF9TVUZGSVggPSAnX20xJztcbmNvbnN0IENEX0VYRUNVVEFCTEVfUFJFRklYID0gJ2Nocm9tZWRyaXZlcic7XG5cblxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlciAobWFwcGluZyA9IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORykge1xuICBpZiAoXy5pc0VtcHR5KG1hcHBpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uIGZyb20gZW1wdHkgbWFwcGluZycpO1xuICB9XG4gIHJldHVybiBfLmxhc3QoXy5rZXlzKG1hcHBpbmcpLnNvcnQoY29tcGFyZVZlcnNpb25zKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZVZlcnNpb24gKGFkYiwgYnVuZGxlSWQpIHtcbiAgY29uc3Qge3ZlcnNpb25OYW1lfSA9IGF3YWl0IGFkYi5nZXRQYWNrYWdlSW5mbyhidW5kbGVJZCk7XG4gIHJldHVybiB2ZXJzaW9uTmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyRGlyIChvc05hbWUgPSBnZXRPc05hbWUoKSkge1xuICByZXR1cm4gcGF0aC5yZXNvbHZlKENEX0JBU0VfRElSLCBvc05hbWUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIChvc05hbWUgPSBnZXRPc05hbWUoKSkge1xuICBjb25zdCByb290RGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKG9zTmFtZSk7XG4gIGNvbnN0IHBhdGhTdWZmaXggPSBvc05hbWUgPT09IE9TLndpbmRvd3MgPyAnLmV4ZScgOiAnJztcbiAgY29uc3QgcGF0aHMgPSBhd2FpdCBmcy5nbG9iKGAke0NEX0VYRUNVVEFCTEVfUFJFRklYfSoke3BhdGhTdWZmaXh9YCwge1xuICAgIGN3ZDogcm9vdERpcixcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBub2Nhc2U6IHRydWUsXG4gICAgbm9kaXI6IHRydWUsXG4gICAgc3RyaWN0OiBmYWxzZSxcbiAgfSk7XG4gIHJldHVybiBfLmlzRW1wdHkocGF0aHMpXG4gICAgPyBwYXRoLnJlc29sdmUocm9vdERpciwgYCR7Q0RfRVhFQ1VUQUJMRV9QUkVGSVh9JHtwYXRoU3VmZml4fWApXG4gICAgOiBfLmZpcnN0KHBhdGhzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVEYXRhICh1cmwsIGhlYWRlcnMsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gICAgcmVzcG9uc2VUeXBlID0gJ3RleHQnLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgdXJsLFxuICAgIGhlYWRlcnMsXG4gICAgdGltZW91dCxcbiAgICByZXNwb25zZVR5cGUsXG4gIH0pKS5kYXRhO1xufVxuXG5jb25zdCBnZXRPc05hbWUgPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0T3NOYW1lICgpIHtcbiAgaWYgKHN5c3RlbS5pc1dpbmRvd3MoKSkge1xuICAgIHJldHVybiBPUy53aW5kb3dzO1xuICB9XG4gIGlmIChzeXN0ZW0uaXNNYWMoKSkge1xuICAgIHJldHVybiBPUy5tYWM7XG4gIH1cbiAgcmV0dXJuIE9TLmxpbnV4O1xufSk7XG5cbmNvbnN0IGdldE9zSW5mbyA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRPc0luZm8gKCkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGdldE9zTmFtZSgpLFxuICAgIGFyY2g6IGF3YWl0IHN5c3RlbS5hcmNoKCksXG4gICAgaGFyZHdhcmVOYW1lOiBzeXN0ZW0uaXNXaW5kb3dzKCkgPyBudWxsIDogXy50cmltKGF3YWl0IGV4ZWMoJ3VuYW1lJywgWyctbSddKSksXG4gIH07XG59KTtcblxuXG5leHBvcnQge1xuICBnZXRDaHJvbWVWZXJzaW9uLCBnZXRDaHJvbWVkcml2ZXJEaXIsIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgsIGdldE9zTmFtZSxcbiAgQ0RfQkFTRV9ESVIsIENEX0NETiwgQ0RfVkVSLCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIGdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIsXG4gIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLCBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLFxufTtcbiJdLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
@@ -1,4 +1,13 @@
1
1
  {
2
+ "97.0.4692.71": "97.0.4692.71",
3
+ "96.0.4664.45": "96.0.4664.45",
4
+ "95.0.4638.69": "95.0.4638.69",
5
+ "95.0.4638.54": "95.0.4638.54",
6
+ "94.0.4606.61": "94.0.4606.61",
7
+ "93.0.4577.63": "93.0.4577.63",
8
+ "93.0.4577.15": "93.0.4577.15",
9
+ "92.0.4515.107": "92.0.4515.107",
10
+ "92.0.4515.43": "92.0.4515.43",
2
11
  "91.0.4472.101": "91.0.4472.101",
3
12
  "91.0.4472.19": "91.0.4472.19",
4
13
  "90.0.4430.24": "90.0.4430.24",
@@ -1,9 +1,9 @@
1
1
  // transpile:main
2
2
 
3
3
  import events from 'events';
4
- import { JWProxy, PROTOCOLS } from 'appium-base-driver';
4
+ import { JWProxy, PROTOCOLS } from '@appium/base-driver';
5
5
  import cp from 'child_process';
6
- import { system, fs, logger, util } from 'appium-support';
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';
@@ -69,7 +69,10 @@ class Chromedriver extends events.EventEmitter {
69
69
  this.bundleId = bundleId;
70
70
  this.executableVerified = false;
71
71
  this.state = Chromedriver.STATE_STOPPED;
72
- this.jwproxy = new JWProxy({server: this.proxyHost, port: this.proxyPort});
72
+ this.jwproxy = new JWProxy({
73
+ server: this.proxyHost,
74
+ port: this.proxyPort
75
+ });
73
76
  this.verbose = verbose;
74
77
  this.logPath = logPath;
75
78
  this.disableBuildCheck = !!disableBuildCheck;
@@ -432,7 +435,7 @@ class Chromedriver extends events.EventEmitter {
432
435
  this.changeState(Chromedriver.STATE_STARTING);
433
436
  }
434
437
 
435
- const args = ['--url-base=wd/hub', `--port=${this.proxyPort}`];
438
+ const args = [`--port=${this.proxyPort}`];
436
439
  if (this.adb && this.adb.adbPort) {
437
440
  args.push(`--adb-port=${this.adb.adbPort}`);
438
441
  }
@@ -528,12 +531,16 @@ class Chromedriver extends events.EventEmitter {
528
531
  }
529
532
 
530
533
  let message = '';
531
- // often the user's Chrome version is too low for the version of Chromedriver
534
+ // often the user's Chrome version is not supported by the version of Chromedriver
532
535
  if (e.message.includes('Chrome version must be')) {
533
- message += 'Unable to automate Chrome version because it is too old for this version of Chromedriver.\n';
536
+ message += 'Unable to automate Chrome version because it is not supported by this version of Chromedriver.\n';
534
537
  if (webviewVersion) {
535
538
  message += `Chrome version on the device: ${webviewVersion}\n`;
536
539
  }
540
+ const versionsSupportedByDriver = /Chrome version must be (.+)/.exec(e.message)?.[1] || '';
541
+ if (versionsSupportedByDriver) {
542
+ message += `Chromedriver supports Chrome version(s): ${versionsSupportedByDriver}\n`;
543
+ }
537
544
  message += `Visit '${CHROMEDRIVER_TUTORIAL}' to troubleshoot the problem.\n`;
538
545
  }
539
546
 
package/lib/install.js CHANGED
@@ -1,4 +1,4 @@
1
- import { fs, mkdirp } from 'appium-support';
1
+ import { fs, mkdirp } from '@appium/support';
2
2
  import ChromedriverStorageClient from './storage-client';
3
3
  import {
4
4
  CD_CDN, CD_VER, retrieveData, getOsInfo, getChromedriverDir,
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { isStandardCap } from 'appium-base-driver';
2
+ import { isStandardCap } from '@appium/base-driver';
3
3
 
4
4
  const W3C_PREFIX = 'goog:';
5
5
 
@@ -4,10 +4,10 @@ import {
4
4
  } from './utils';
5
5
  import _ from 'lodash';
6
6
  import xpath from 'xpath';
7
- import { DOMParser } from 'xmldom';
7
+ import { DOMParser } from '@xmldom/xmldom';
8
8
  import B from 'bluebird';
9
9
  import path from 'path';
10
- import { system, fs, logger, tempDir, zip, util, net } from 'appium-support';
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,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { system, fs } from 'appium-support';
2
+ import { system, fs } from '@appium/support';
3
3
  import path from 'path';
4
4
  import compareVersions from 'compare-versions';
5
5
  import axios from 'axios';
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "chrome",
7
7
  "android"
8
8
  ],
9
- "version": "4.27.3",
9
+ "version": "5.0.1",
10
10
  "author": "appium",
11
11
  "license": "Apache-2.0",
12
12
  "repository": {
@@ -35,19 +35,19 @@
35
35
  "config/mapping.json"
36
36
  ],
37
37
  "dependencies": {
38
+ "@appium/base-driver": "^8.0.0",
39
+ "@appium/support": "^2.55.3",
38
40
  "@babel/runtime": "^7.0.0",
39
- "appium-base-driver": "^7.1.0",
40
- "appium-support": "^2.46.0",
41
+ "@xmldom/xmldom": "^0.x",
41
42
  "asyncbox": "^2.0.2",
42
43
  "axios": "^0.x",
43
44
  "bluebird": "^3.5.1",
44
45
  "compare-versions": "^3.4.0",
45
- "fancy-log": "^1.3.2",
46
+ "fancy-log": "^2.0.0",
46
47
  "lodash": "^4.17.4",
47
48
  "semver": "^7.0.0",
48
49
  "source-map-support": "^0.x",
49
50
  "teen_process": "^1.15.0",
50
- "xmldom": "^0.x",
51
51
  "xpath": "^0.x"
52
52
  },
53
53
  "pre-commit": [
@@ -71,13 +71,20 @@
71
71
  "lint:fix": "gulp lint --fix"
72
72
  },
73
73
  "devDependencies": {
74
- "appium-gulp-plugins": "^5.4.0",
74
+ "@appium/gulp-plugins": "^6.0.0",
75
+ "@appium/eslint-config-appium": "^5.0.0",
76
+ "@appium/test-support": "^1.0.0",
77
+ "@babel/core": "^7.16.0",
78
+ "@babel/eslint-parser": "^7.16.3",
75
79
  "chai": "^4.1.2",
76
80
  "chai-as-promised": "^7.1.1",
77
- "eslint-config-appium": "^4.0.1",
81
+ "eslint": "^7.32.0",
82
+ "eslint-plugin-import": "^2.25.3",
83
+ "eslint-plugin-mocha": "^9.0.0",
84
+ "eslint-plugin-promise": "^6.0.0",
78
85
  "gulp": "^4.0.0",
79
86
  "mocha": "^9.0.0",
80
87
  "pre-commit": "^1.1.3",
81
- "sinon": "^11.0.0"
88
+ "sinon": "^12.0.0"
82
89
  }
83
90
  }