verdaccio 6.3.2 → 6.5.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.
@@ -510,6 +510,26 @@ class LocalStorage {
510
510
  }
511
511
  this._readPackage(name, storage, callback);
512
512
  }
513
+ getPackageMetadataAsync(name) {
514
+ return new Promise((resolve, reject) => {
515
+ this.getPackageMetadata(name, (err, metadata) => {
516
+ if (err) {
517
+ return reject(err);
518
+ }
519
+ resolve(metadata);
520
+ });
521
+ });
522
+ }
523
+ updateVersionsAsync(name, packageInfo) {
524
+ return new Promise((resolve, reject) => {
525
+ this.updateVersions(name, packageInfo, (err, result) => {
526
+ if (err) {
527
+ return reject(err);
528
+ }
529
+ resolve(result);
530
+ });
531
+ });
532
+ }
513
533
 
514
534
  /**
515
535
  * Search a local package.
@@ -737,4 +757,4 @@ class LocalStorage {
737
757
  }
738
758
  }
739
759
  var _default = exports.default = LocalStorage;
740
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVidWciLCJfbG9kYXNoIiwiX3VybCIsIl9zdHJlYW1zIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9zdG9yYWdlVXRpbHMiLCJfdXRpbHMyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGVidWciLCJidWlsRGVidWciLCJMb2NhbFN0b3JhZ2UiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImxvZ2dlciIsImxvY2FsU3RvcmFnZSIsInN0b3JhZ2VQbHVnaW4iLCJhZGRQYWNrYWdlIiwibmFtZSIsInBrZyIsImNhbGxiYWNrIiwic3RvcmFnZSIsIl9nZXRMb2NhbFN0b3JhZ2UiLCJfIiwiaXNOaWwiLCJFcnJvckNvZGUiLCJnZXROb3RGb3VuZCIsImNyZWF0ZVBhY2thZ2UiLCJnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZSIsImVyciIsImlzTnVsbCIsImNvZGUiLCJTVE9SQUdFIiwiRklMRV9FWElTVF9FUlJPUiIsIkhUVFBfU1RBVFVTIiwiQ09ORkxJQ1QiLCJnZXRDb25mbGljdCIsImxhdGVzdCIsImdldExhdGVzdFZlcnNpb24iLCJ2ZXJzaW9ucyIsInJlbW92ZVBhY2thZ2UiLCJyZWFkUGFja2FnZSIsImRhdGEiLCJOT19TVUNIX0ZJTEVfRVJST1IiLCJOT1RfRk9VTkQiLCJub3JtYWxpemVQYWNrYWdlIiwicmVtb3ZlIiwicmVtb3ZlRmFpbGVkIiwiZXJyb3IiLCJnZXRCYWREYXRhIiwibWVzc2FnZSIsImRlbGV0ZVBhY2thZ2UiLCJQQUNLQUdFX0ZJTEVfTkFNRSIsImF0dGFjaG1lbnRzIiwiT2JqZWN0Iiwia2V5cyIsIl9hdHRhY2htZW50cyIsIl9kZWxldGVBdHRhY2htZW50cyIsInVwZGF0ZVZlcnNpb25zIiwicGFja2FnZUluZm8iLCJfcmVhZENyZWF0ZVBhY2thZ2UiLCJwYWNrYWdlTG9jYWxKc29uIiwiY2hhbmdlIiwicmVhZG1lIiwiZ2V0TGF0ZXN0UmVhZG1lIiwidmVyc2lvbklkIiwidmVyc2lvbiIsImNsZWFuVXBSZWFkbWUiLCJjb250cmlidXRvcnMiLCJub3JtYWxpemVDb250cmlidXRvcnMiLCJkaXN0IiwidGFyYmFsbCIsInVybE9iamVjdCIsIlVybE5vZGUiLCJwYXJzZSIsImZpbGVuYW1lIiwicGF0aG5hbWUiLCJyZXBsYWNlIiwiX2Rpc3RmaWxlcyIsImhhc2giLCJ1cmwiLCJzaGEiLCJzaGFzdW0iLCJ1cExpbmsiLCJTeW1ib2wiLCJmb3IiLCJfdXBkYXRlVXBsaW5rVG9SZW1vdGVQcm90b2NvbCIsInRhZyIsIkRJU1RfVEFHUyIsInVwIiwiX3VwbGlua3MiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJuZWVkX2NoYW5nZSIsImlzT2JqZWN0IiwiZXRhZyIsImZldGNoZWQiLCJpc0VxdWFsIiwidGltZSIsIl93cml0ZVBhY2thZ2UiLCJhZGRWZXJzaW9uIiwibWV0YWRhdGEiLCJfdXBkYXRlUGFja2FnZSIsImNiIiwiaGFzVmVyc2lvbiIsImlzU3RyaW5nIiwiZXJyb3JNZXNzYWdlIiwiZ2V0QmFkUmVxdWVzdCIsImN1cnJlbnREYXRlIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiY3JlYXRlZCIsInRhZ1ZlcnNpb24iLCJhZGQiLCJhZGRGYWlsZWQiLCJtZXJnZVRhZ3MiLCJwa2dOYW1lIiwidGFncyIsIl9nZXRWZXJzaW9uTm90Rm91bmQiLCJBUElfRVJST1IiLCJWRVJTSU9OX05PVF9FWElTVCIsIl9nZXRGaWxlTm90QXZhaWxhYmxlIiwiY2hhbmdlUGFja2FnZSIsImluY29taW5nUGtnIiwicmV2aXNpb24iLCJsb2NhbERhdGEiLCJpbmNvbWluZ1ZlcnNpb24iLCJpbmZvIiwiZmlsZSIsImluY29taW5nRGVwcmVjYXRlZCIsImRlcHJlY2F0ZWQiLCJtb2RpZmllZCIsIlVTRVJTIiwicmVtb3ZlVGFyYmFsbCIsImFzc2VydCIsInZhbGlkYXRlTmFtZSIsImFkZFRhcmJhbGwiLCJsZW5ndGgiLCJzaGFPbmVIYXNoIiwiY3JlYXRlVGFyYmFsbEhhc2giLCJ1cGxvYWRTdHJlYW0iLCJVcGxvYWRUYXJiYWxsIiwiX3RyYW5zZm9ybSIsImFib3J0IiwiZG9uZSIsImFyZ3MiLCJ1cGRhdGUiLCJhcHBsaWVkRGF0YSIsImFwcGx5IiwicHJvY2VzcyIsIm5leHRUaWNrIiwiZW1pdCIsImdldEZvcmJpZGRlbiIsIndyaXRlU3RyZWFtIiwid3JpdGVUYXJiYWxsIiwib24iLCJnZXRQYWNrYWdlTWV0YWRhdGEiLCJfZXJyIiwidXBkYXRlciIsImRpZ2VzdCIsInBpcGUiLCJnZXRUYXJiYWxsIiwiX2NyZWF0ZUZhaWx1cmVTdHJlYW1SZXNwb25zZSIsIl9zdHJlYW1TdWNjZXNzUmVhZFRhckJhbGwiLCJzdHJlYW0iLCJSZWFkVGFyYmFsbCIsInJlYWRUYXJiYWxsU3RyZWFtIiwicmVhZFRhcmJhbGwiLCJlNDA0IiwiY29udGVudCIsIl9yZWFkUGFja2FnZSIsInNlYXJjaCIsInN0YXJ0S2V5Iiwib3B0aW9ucyIsIm9iamVjdE1vZGUiLCJfc2VhcmNoRWFjaFBhY2thZ2UiLCJpdGVtIiwicGFyc2VJbnQiLCJyZXN1bHQiLCJwcmVwYXJlU2VhcmNoUGFja2FnZSIsInB1c2giLCJvbkVuZCIsImVuZCIsImdldFBhY2thZ2VTdG9yYWdlIiwiX2ludGVybmFsRXJyb3IiLCJvblBhY2thZ2UiLCJ3YXJuIiwiX2NyZWF0ZU5ld1BhY2thZ2UiLCJnZXRJbnRlcm5hbEVycm9yIiwidXBkYXRlSGFuZGxlciIsInVwZGF0ZVBhY2thZ2UiLCJiaW5kIiwianNvbiIsInNhdmVQYWNrYWdlIiwiX3NldERlZmF1bHRSZXZpc2lvbiIsIl9yZXYiLCJERUZBVUxUX1JFVklTSU9OIiwiZ2VuZXJhdGVSZXZpc2lvbiIsInVubGlua05leHQiLCJpc0VtcHR5IiwiYXR0YWNobWVudCIsInNoaWZ0IiwidXBMaW5rS2V5IiwidGFyYmFsbFVybCIsInVwbGlua1VybCIsInVwbGlua3MiLCJob3N0IiwicHJvdG9jb2wiLCJyZWdpc3RyeSIsImZvcm1hdCIsImdldFNlY3JldCIsInNlY3JldEtleSIsInNldFNlY3JldCIsImNoZWNrU2VjcmV0S2V5Iiwic2F2ZVRva2VuIiwidG9rZW4iLCJpc0Z1bmN0aW9uIiwiUHJvbWlzZSIsInJlamVjdCIsImdldENvZGUiLCJTRVJWSUNFX1VOQVZBSUxBQkxFIiwiU1VQUE9SVF9FUlJPUlMiLCJQTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UiLCJkZWxldGVUb2tlbiIsInVzZXIiLCJ0b2tlbktleSIsInJlYWRUb2tlbnMiLCJmaWx0ZXIiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2xvY2FsLXN0b3JhZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IGJ1aWxEZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFVybE5vZGUgZnJvbSAndXJsJztcblxuaW1wb3J0IHsgUmVhZFRhcmJhbGwsIFVwbG9hZFRhcmJhbGwgfSBmcm9tICdAdmVyZGFjY2lvL3N0cmVhbXMnO1xuaW1wb3J0IHtcbiAgQXV0aG9yLFxuICBDYWxsYmFjayxcbiAgQ29uZmlnLFxuICBEaXN0RmlsZSxcbiAgTG9nZ2VyLFxuICBNYW5pZmVzdCxcbiAgTWVyZ2VUYWdzLFxuICBTdG9yYWdlVXBkYXRlQ2FsbGJhY2ssXG4gIFRva2VuLFxuICBUb2tlbkZpbHRlcixcbiAgVmVyc2lvbixcbiAgb25FbmRTZWFyY2hQYWNrYWdlLFxuICBvblNlYXJjaFBhY2thZ2UsXG59IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlVGFyYmFsbEhhc2gsXG4gIGdldExhdGVzdFZlcnNpb24sXG4gIG5vcm1hbGl6ZUNvbnRyaWJ1dG9ycyxcbiAgdmFsaWRhdGVOYW1lLFxufSBmcm9tICdAdmVyZGFjY2lvL3V0aWxzJztcblxuaW1wb3J0IHsgU3RvcmFnZVBsdWdpbkxlZ2FjeSB9IGZyb20gJy4uLy4uL3R5cGVzL2N1c3RvbSc7XG5pbXBvcnQgeyBTdHJpbmdWYWx1ZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgRElTVF9UQUdTLCBIVFRQX1NUQVRVUywgU1RPUkFHRSwgU1VQUE9SVF9FUlJPUlMsIFVTRVJTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgY2xlYW5VcFJlYWRtZSxcbiAgZ2VuZXJhdGVQYWNrYWdlVGVtcGxhdGUsXG4gIGdlbmVyYXRlUmV2aXNpb24sXG4gIGdldExhdGVzdFJlYWRtZSxcbiAgbm9ybWFsaXplUGFja2FnZSxcbn0gZnJvbSAnLi9zdG9yYWdlLXV0aWxzJztcbmltcG9ydCB7IHByZXBhcmVTZWFyY2hQYWNrYWdlIH0gZnJvbSAnLi9zdG9yYWdlLXV0aWxzJztcbmltcG9ydCB7IEVycm9yQ29kZSwgaXNPYmplY3QsIHRhZ1ZlcnNpb24gfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZGVidWcgPSBidWlsRGVidWcoJ3ZlcmRhY2Npbzpsb2NhbC1zdG9yYWdlJyk7XG5leHBvcnQgdHlwZSBTdG9yYWdlUGx1Z2luID0gU3RvcmFnZVBsdWdpbkxlZ2FjeTxDb25maWc+IHwgYW55O1xuLyoqXG4gKiBJbXBsZW1lbnRzIFN0b3JhZ2UgaW50ZXJmYWNlIChzYW1lIGZvciBzdG9yYWdlLmpzLCBsb2NhbC1zdG9yYWdlLmpzLCB1cC1zdG9yYWdlLmpzKS5cbiAqL1xuY2xhc3MgTG9jYWxTdG9yYWdlIHtcbiAgcHVibGljIGNvbmZpZzogQ29uZmlnO1xuICBwdWJsaWMgc3RvcmFnZVBsdWdpbjogU3RvcmFnZVBsdWdpbjtcbiAgcHVibGljIGxvZ2dlcjogTG9nZ2VyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZywgbG9nZ2VyOiBMb2dnZXIsIGxvY2FsU3RvcmFnZTogU3RvcmFnZVBsdWdpbikge1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuc3RvcmFnZVBsdWdpbiA9IGxvY2FsU3RvcmFnZTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRQYWNrYWdlKG5hbWU6IHN0cmluZywgcGtnOiBNYW5pZmVzdCwgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmFnZTogYW55ID0gdGhpcy5fZ2V0TG9jYWxTdG9yYWdlKG5hbWUpO1xuXG4gICAgaWYgKF8uaXNOaWwoc3RvcmFnZSkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Tm90Rm91bmQoJ3RoaXMgcGFja2FnZSBjYW5ub3QgYmUgYWRkZWQnKSk7XG4gICAgfVxuXG4gICAgc3RvcmFnZS5jcmVhdGVQYWNrYWdlKG5hbWUsIGdlbmVyYXRlUGFja2FnZVRlbXBsYXRlKG5hbWUpLCAoZXJyKSA9PiB7XG4gICAgICAvLyBGSVhNRTogaXQgd2lsbCBiZSBmaXhlZCBoZXJlIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJkYWNjaW8vdmVyZGFjY2lvL3B1bGwvMTM2MFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKFxuICAgICAgICBfLmlzTnVsbChlcnIpID09PSBmYWxzZSAmJlxuICAgICAgICAoZXJyLmNvZGUgPT09IFNUT1JBR0UuRklMRV9FWElTVF9FUlJPUiB8fCBlcnIuY29kZSA9PT0gSFRUUF9TVEFUVVMuQ09ORkxJQ1QpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRDb25mbGljdCgpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGF0ZXN0ID0gZ2V0TGF0ZXN0VmVyc2lvbihwa2cpO1xuICAgICAgaWYgKF8uaXNOaWwobGF0ZXN0KSA9PT0gZmFsc2UgJiYgcGtnLnZlcnNpb25zW2xhdGVzdF0pIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHBrZy52ZXJzaW9uc1tsYXRlc3RdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHBhY2thZ2UuXG4gICAqIEBwYXJhbSB7Kn0gbmFtZVxuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVBhY2thZ2UobmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlOiBhbnkgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UobmFtZSk7XG4gICAgZGVidWcoJ1tzdG9yYWdlXSByZW1vdmluZyBwYWNrYWdlICVvJywgbmFtZSk7XG4gICAgaWYgKF8uaXNOaWwoc3RvcmFnZSkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Tm90Rm91bmQoKSk7XG4gICAgfVxuXG4gICAgc3RvcmFnZS5yZWFkUGFja2FnZShuYW1lLCAoZXJyLCBkYXRhOiBNYW5pZmVzdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSBTVE9SQUdFLk5PX1NVQ0hfRklMRV9FUlJPUiB8fCBlcnIuY29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXROb3RGb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgZGF0YSA9IG5vcm1hbGl6ZVBhY2thZ2UoZGF0YSk7XG4gICAgICB0aGlzLnN0b3JhZ2VQbHVnaW4ucmVtb3ZlKG5hbWUsIChyZW1vdmVGYWlsZWQ6IEVycm9yKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChyZW1vdmVGYWlsZWQpIHtcbiAgICAgICAgICAvLyBUaGlzIHdpbGwgaGFwcGVuIHdoZW4gZGF0YWJhc2UgaXMgbG9ja2VkXG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICB7IG5hbWUgfSxcbiAgICAgICAgICAgIGBbc3RvcmFnZS9yZW1vdmVQYWNrYWdlXSB0aGUgZGF0YWJhc2UgaXMgbG9ja2VkLCByZW1vdmVkIGhhcyBmYWlsZWQgZm9yIEB7bmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soRXJyb3JDb2RlLmdldEJhZERhdGEocmVtb3ZlRmFpbGVkLm1lc3NhZ2UpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0b3JhZ2UuZGVsZXRlUGFja2FnZShTVE9SQUdFLlBBQ0tBR0VfRklMRV9OQU1FLCAoZXJyKTogdm9pZCA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gT2JqZWN0LmtleXMoZGF0YS5fYXR0YWNobWVudHMpO1xuXG4gICAgICAgICAgdGhpcy5fZGVsZXRlQXR0YWNobWVudHMoc3RvcmFnZSwgYXR0YWNobWVudHMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbml6ZSByZW1vdGUgcGFja2FnZSBpbmZvIHdpdGggdGhlIGxvY2FsIG9uZVxuICAgKiBAcGFyYW0geyp9IG5hbWVcbiAgICogQHBhcmFtIHsqfSBwYWNrYWdlSW5mb1xuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlVmVyc2lvbnMobmFtZTogc3RyaW5nLCBwYWNrYWdlSW5mbzogTWFuaWZlc3QsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMuX3JlYWRDcmVhdGVQYWNrYWdlKG5hbWUsIChlcnIsIHBhY2thZ2VMb2NhbEpzb24pOiB2b2lkID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG5cbiAgICAgIGxldCBjaGFuZ2UgPSBmYWxzZTtcbiAgICAgIC8vIHVwZGF0aW5nIHJlYWRtZVxuICAgICAgcGFja2FnZUxvY2FsSnNvbi5yZWFkbWUgPSBnZXRMYXRlc3RSZWFkbWUocGFja2FnZUluZm8pO1xuICAgICAgaWYgKHBhY2thZ2VJbmZvLnJlYWRtZSAhPT0gcGFja2FnZUxvY2FsSnNvbi5yZWFkbWUpIHtcbiAgICAgICAgY2hhbmdlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgdmVyc2lvbklkIGluIHBhY2thZ2VJbmZvLnZlcnNpb25zKSB7XG4gICAgICAgIGlmIChfLmlzTmlsKHBhY2thZ2VMb2NhbEpzb24udmVyc2lvbnNbdmVyc2lvbklkXSkpIHtcbiAgICAgICAgICBsZXQgdmVyc2lvbiA9IHBhY2thZ2VJbmZvLnZlcnNpb25zW3ZlcnNpb25JZF07XG5cbiAgICAgICAgICAvLyB3ZSBkb24ndCBrZWVwIHJlYWRtZSBmb3IgcGFja2FnZSB2ZXJzaW9ucyxcbiAgICAgICAgICAvLyBvbmx5IG9uZSByZWFkbWUgcGVyIHBhY2thZ2VcbiAgICAgICAgICB2ZXJzaW9uID0gY2xlYW5VcFJlYWRtZSh2ZXJzaW9uKTtcbiAgICAgICAgICB2ZXJzaW9uLmNvbnRyaWJ1dG9ycyA9IG5vcm1hbGl6ZUNvbnRyaWJ1dG9ycyh2ZXJzaW9uLmNvbnRyaWJ1dG9ycyBhcyBBdXRob3JbXSk7XG5cbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgIHBhY2thZ2VMb2NhbEpzb24udmVyc2lvbnNbdmVyc2lvbklkXSA9IHZlcnNpb247XG5cbiAgICAgICAgICBpZiAodmVyc2lvbi5kaXN0ICYmIHZlcnNpb24uZGlzdC50YXJiYWxsKSB7XG4gICAgICAgICAgICBjb25zdCB1cmxPYmplY3Q6IGFueSA9IFVybE5vZGUucGFyc2UodmVyc2lvbi5kaXN0LnRhcmJhbGwpO1xuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSB1cmxPYmplY3QucGF0aG5hbWUucmVwbGFjZSgvXi4qXFwvLywgJycpO1xuXG4gICAgICAgICAgICAvLyB3ZSBkbyBOT1Qgb3ZlcndyaXRlIGFueSBleGlzdGluZyByZWNvcmRzXG4gICAgICAgICAgICBpZiAoXy5pc05pbChwYWNrYWdlTG9jYWxKc29uLl9kaXN0ZmlsZXNbZmlsZW5hbWVdKSkge1xuICAgICAgICAgICAgICBjb25zdCBoYXNoOiBEaXN0RmlsZSA9IChwYWNrYWdlTG9jYWxKc29uLl9kaXN0ZmlsZXNbZmlsZW5hbWVdID0ge1xuICAgICAgICAgICAgICAgIHVybDogdmVyc2lvbi5kaXN0LnRhcmJhbGwsXG4gICAgICAgICAgICAgICAgc2hhOiB2ZXJzaW9uLmRpc3Quc2hhc3VtLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgLyogZXNsaW50IHNwYWNlZC1jb21tZW50OiAwICovXG4gICAgICAgICAgICAgIGNvbnN0IHVwTGluazogc3RyaW5nID0gdmVyc2lvbltTeW1ib2wuZm9yKCdfX3ZlcmRhY2Npb191cGxpbmsnKV07XG5cbiAgICAgICAgICAgICAgaWYgKF8uaXNOaWwodXBMaW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVcGxpbmtUb1JlbW90ZVByb3RvY29sKGhhc2gsIHVwTGluayk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB0YWcgaW4gcGFja2FnZUluZm9bRElTVF9UQUdTXSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXBhY2thZ2VMb2NhbEpzb25bRElTVF9UQUdTXVt0YWddIHx8XG4gICAgICAgICAgcGFja2FnZUxvY2FsSnNvbltESVNUX1RBR1NdW3RhZ10gIT09IHBhY2thZ2VJbmZvW0RJU1RfVEFHU11bdGFnXVxuICAgICAgICApIHtcbiAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgIHBhY2thZ2VMb2NhbEpzb25bRElTVF9UQUdTXVt0YWddID0gcGFja2FnZUluZm9bRElTVF9UQUdTXVt0YWddO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgdXAgaW4gcGFja2FnZUluZm8uX3VwbGlua3MpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYWNrYWdlSW5mby5fdXBsaW5rcywgdXApKSB7XG4gICAgICAgICAgY29uc3QgbmVlZF9jaGFuZ2UgPVxuICAgICAgICAgICAgIWlzT2JqZWN0KHBhY2thZ2VMb2NhbEpzb24uX3VwbGlua3NbdXBdKSB8fFxuICAgICAgICAgICAgcGFja2FnZUluZm8uX3VwbGlua3NbdXBdLmV0YWcgIT09IHBhY2thZ2VMb2NhbEpzb24uX3VwbGlua3NbdXBdLmV0YWcgfHxcbiAgICAgICAgICAgIHBhY2thZ2VJbmZvLl91cGxpbmtzW3VwXS5mZXRjaGVkICE9PSBwYWNrYWdlTG9jYWxKc29uLl91cGxpbmtzW3VwXS5mZXRjaGVkO1xuXG4gICAgICAgICAgaWYgKG5lZWRfY2hhbmdlKSB7XG4gICAgICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgcGFja2FnZUxvY2FsSnNvbi5fdXBsaW5rc1t1cF0gPSBwYWNrYWdlSW5mby5fdXBsaW5rc1t1cF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgndGltZScgaW4gcGFja2FnZUluZm8gJiYgIV8uaXNFcXVhbChwYWNrYWdlTG9jYWxKc29uLnRpbWUsIHBhY2thZ2VJbmZvLnRpbWUpKSB7XG4gICAgICAgIHBhY2thZ2VMb2NhbEpzb24udGltZSA9IHBhY2thZ2VJbmZvLnRpbWU7XG4gICAgICAgIGNoYW5nZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgICAgZGVidWcoJ3VwZGF0aW5nIHBhY2thZ2UgJW8gaW5mbycsIG5hbWUpO1xuICAgICAgICB0aGlzLl93cml0ZVBhY2thZ2UobmFtZSwgcGFja2FnZUxvY2FsSnNvbiwgZnVuY3Rpb24gKGVycik6IHZvaWQge1xuICAgICAgICAgIGNhbGxiYWNrKGVyciwgcGFja2FnZUxvY2FsSnNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcGFja2FnZUxvY2FsSnNvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHZlcnNpb24gdG8gYSBwcmV2aW91cyBsb2NhbCBwYWNrYWdlLlxuICAgKiBAcGFyYW0geyp9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2ZXJzaW9uXG4gICAqIEBwYXJhbSB7Kn0gbWV0YWRhdGFcbiAgICogQHBhcmFtIHsqfSB0YWdcbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIGFkZFZlcnNpb24oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICBtZXRhZGF0YTogVmVyc2lvbixcbiAgICB0YWc6IFN0cmluZ1ZhbHVlLFxuICAgIGNhbGxiYWNrOiBDYWxsYmFja1xuICApOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVQYWNrYWdlKFxuICAgICAgbmFtZSxcbiAgICAgIChkYXRhLCBjYjogQ2FsbGJhY2spOiB2b2lkID0+IHtcbiAgICAgICAgLy8ga2VlcCBvbmx5IG9uZSByZWFkbWUgcGVyIHBhY2thZ2VcbiAgICAgICAgZGF0YS5yZWFkbWUgPSBtZXRhZGF0YS5yZWFkbWU7XG5cbiAgICAgICAgLy8gVE9ETzogbG9kYXNoIHJlbW92ZVxuICAgICAgICBtZXRhZGF0YSA9IGNsZWFuVXBSZWFkbWUobWV0YWRhdGEpO1xuICAgICAgICBtZXRhZGF0YS5jb250cmlidXRvcnMgPSBub3JtYWxpemVDb250cmlidXRvcnMobWV0YWRhdGEuY29udHJpYnV0b3JzIGFzIEF1dGhvcltdKTtcblxuICAgICAgICBjb25zdCBoYXNWZXJzaW9uID0gZGF0YS52ZXJzaW9uc1t2ZXJzaW9uXSAhPSBudWxsO1xuICAgICAgICBpZiAoaGFzVmVyc2lvbikge1xuICAgICAgICAgIHJldHVybiBjYihFcnJvckNvZGUuZ2V0Q29uZmxpY3QoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB1cGxvYWRlZCB0YXJiYWxsIGhhcyBhIGRpZmZlcmVudCBzaGFzdW0sIGl0J3MgdmVyeSBsaWtlbHkgdGhhdCB3ZSBoYXZlIHNvbWUga2luZCBvZiBlcnJvclxuICAgICAgICBpZiAoaXNPYmplY3QobWV0YWRhdGEuZGlzdCkgJiYgXy5pc1N0cmluZyhtZXRhZGF0YS5kaXN0LnRhcmJhbGwpKSB7XG4gICAgICAgICAgY29uc3QgdGFyYmFsbCA9IG1ldGFkYXRhLmRpc3QudGFyYmFsbC5yZXBsYWNlKC8uKlxcLy8sICcnKTtcblxuICAgICAgICAgIGlmIChpc09iamVjdChkYXRhLl9hdHRhY2htZW50c1t0YXJiYWxsXSkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgXy5pc05pbChkYXRhLl9hdHRhY2htZW50c1t0YXJiYWxsXS5zaGFzdW0pID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICBfLmlzTmlsKG1ldGFkYXRhLmRpc3Quc2hhc3VtKSA9PT0gZmFsc2VcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoZGF0YS5fYXR0YWNobWVudHNbdGFyYmFsbF0uc2hhc3VtICE9IG1ldGFkYXRhLmRpc3Quc2hhc3VtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYHNoYXN1bSBlcnJvciwgJHtkYXRhLl9hdHRhY2htZW50c1t0YXJiYWxsXS5zaGFzdW19ICE9ICR7bWV0YWRhdGEuZGlzdC5zaGFzdW19YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2IoRXJyb3JDb2RlLmdldEJhZFJlcXVlc3QoZXJyb3JNZXNzYWdlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIC8vIHNvbWUgb2xkIHN0b3JhZ2UgZG8gbm90IGhhdmUgdGhpcyBmaWVsZCAjNzQwXG4gICAgICAgICAgICBpZiAoXy5pc05pbChkYXRhLnRpbWUpKSB7XG4gICAgICAgICAgICAgIGRhdGEudGltZSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhLnRpbWVbJ21vZGlmaWVkJ10gPSBjdXJyZW50RGF0ZTtcblxuICAgICAgICAgICAgaWYgKCdjcmVhdGVkJyBpbiBkYXRhLnRpbWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGRhdGEudGltZS5jcmVhdGVkID0gY3VycmVudERhdGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGEudGltZVt2ZXJzaW9uXSA9IGN1cnJlbnREYXRlO1xuICAgICAgICAgICAgZGF0YS5fYXR0YWNobWVudHNbdGFyYmFsbF0udmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS52ZXJzaW9uc1t2ZXJzaW9uXSA9IG1ldGFkYXRhO1xuICAgICAgICB0YWdWZXJzaW9uKGRhdGEsIHZlcnNpb24sIHRhZyk7XG5cbiAgICAgICAgdGhpcy5zdG9yYWdlUGx1Z2luLmFkZChuYW1lLCAoYWRkRmFpbGVkKTogdm9pZCA9PiB7XG4gICAgICAgICAgaWYgKGFkZEZhaWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNiKEVycm9yQ29kZS5nZXRCYWREYXRhKGFkZEZhaWxlZC5tZXNzYWdlKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2IoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIGEgbmV3IGxpc3Qgb2YgdGFncyBmb3IgYSBsb2NhbCBwYWNrYWdlcyB3aXRoIHRoZSBleGlzdGluZyBvbmUuXG4gICAqIEBwYXJhbSB7Kn0gcGtnTmFtZVxuICAgKiBAcGFyYW0geyp9IHRhZ3NcbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIG1lcmdlVGFncyhwa2dOYW1lOiBzdHJpbmcsIHRhZ3M6IE1lcmdlVGFncywgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgdGhpcy5fdXBkYXRlUGFja2FnZShcbiAgICAgIHBrZ05hbWUsXG4gICAgICAoZGF0YSwgY2IpOiB2b2lkID0+IHtcbiAgICAgICAgLyogZXNsaW50IGd1YXJkLWZvci1pbjogMCAqL1xuICAgICAgICBmb3IgKGNvbnN0IHRhZyBpbiB0YWdzKSB7XG4gICAgICAgICAgLy8gdGhpcyBoYW5kbGUgZGlzdC10YWcgcm0gY29tbWFuZFxuICAgICAgICAgIGlmIChfLmlzTnVsbCh0YWdzW3RhZ10pKSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YVtESVNUX1RBR1NdW3RhZ107XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXy5pc05pbChkYXRhLnZlcnNpb25zW3RhZ3NbdGFnXV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IodGhpcy5fZ2V0VmVyc2lvbk5vdEZvdW5kKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2ZXJzaW9uOiBzdHJpbmcgPSB0YWdzW3RhZ107XG4gICAgICAgICAgdGFnVmVyc2lvbihkYXRhLCB2ZXJzaW9uLCB0YWcpO1xuICAgICAgICB9XG4gICAgICAgIGNiKG51bGwpO1xuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdmVyc2lvbiBub3QgZm91bmRcbiAgICogQHJldHVybiB7U3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0VmVyc2lvbk5vdEZvdW5kKCk6IGFueSB7XG4gICAgcmV0dXJuIEVycm9yQ29kZS5nZXROb3RGb3VuZChBUElfRVJST1IuVkVSU0lPTl9OT1RfRVhJU1QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBmaWxlIG5vIGF2YWlsYWJsZVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9nZXRGaWxlTm90QXZhaWxhYmxlKCk6IGFueSB7XG4gICAgcmV0dXJuIEVycm9yQ29kZS5nZXROb3RGb3VuZCgnbm8gc3VjaCBmaWxlIGF2YWlsYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcGFja2FnZSBtZXRhZGF0YSwgdGFncyBhbmQgYXR0YWNobWVudHMgKHRhcmJhbGxzKS5cbiAgICogTm90ZTogQ3VycmVudGx5IHN1cHBvcnRzIHVucHVibGlzaGluZyBhbmQgZGVwcmVjYXRpb24uXG4gICAqIEBwYXJhbSB7Kn0gbmFtZVxuICAgKiBAcGFyYW0geyp9IGluY29taW5nUGtnXG4gICAqIEBwYXJhbSB7Kn0gcmV2aXNpb25cbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VQYWNrYWdlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBpbmNvbWluZ1BrZzogTWFuaWZlc3QsXG4gICAgcmV2aXNpb246IHN0cmluZyB8IHZvaWQsXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrXG4gICk6IHZvaWQge1xuICAgIGlmICghaXNPYmplY3QoaW5jb21pbmdQa2cudmVyc2lvbnMpIHx8ICFpc09iamVjdChpbmNvbWluZ1BrZ1tESVNUX1RBR1NdKSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoeyBuYW1lIH0sIGBjaGFuZ2VQYWNrYWdlIGJhZCBkYXRhIGZvciBAe25hbWV9YCk7XG4gICAgICByZXR1cm4gY2FsbGJhY2soRXJyb3JDb2RlLmdldEJhZERhdGEoKSk7XG4gICAgfVxuICAgIGRlYnVnKCdjaGFuZ2VQYWNrYWdlIHVkYXB0aW5nIHBhY2thZ2UgZm9yICVvJywgbmFtZSk7XG4gICAgdGhpcy5fdXBkYXRlUGFja2FnZShcbiAgICAgIG5hbWUsXG4gICAgICAobG9jYWxEYXRhOiBNYW5pZmVzdCwgY2I6IENhbGxiYWNrKTogdm9pZCA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdmVyc2lvbiBpbiBsb2NhbERhdGEudmVyc2lvbnMpIHtcbiAgICAgICAgICBjb25zdCBpbmNvbWluZ1ZlcnNpb24gPSBpbmNvbWluZ1BrZy52ZXJzaW9uc1t2ZXJzaW9uXTtcbiAgICAgICAgICBpZiAoXy5pc05pbChpbmNvbWluZ1ZlcnNpb24pKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKHsgbmFtZTogbmFtZSwgdmVyc2lvbjogdmVyc2lvbiB9LCAndW5wdWJsaXNoaW5nIEB7bmFtZX1AQHt2ZXJzaW9ufScpO1xuXG4gICAgICAgICAgICAvLyBGSVhNRTogSSBwcmVmZXIgcmV0dXJuIGEgbmV3IG9iamVjdCByYXRoZXIgbXV0YXRlIHRoZSBtZXRhZGF0YVxuICAgICAgICAgICAgZGVsZXRlIGxvY2FsRGF0YS52ZXJzaW9uc1t2ZXJzaW9uXTtcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbERhdGEudGltZSFbdmVyc2lvbl07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBpbiBsb2NhbERhdGEuX2F0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChsb2NhbERhdGEuX2F0dGFjaG1lbnRzW2ZpbGVdLnZlcnNpb24gPT09IHZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxEYXRhLl9hdHRhY2htZW50c1tmaWxlXS52ZXJzaW9uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5jb21pbmdWZXJzaW9uLCAnZGVwcmVjYXRlZCcpKSB7XG4gICAgICAgICAgICBjb25zdCBpbmNvbWluZ0RlcHJlY2F0ZWQgPSBpbmNvbWluZ1ZlcnNpb24uZGVwcmVjYXRlZDtcbiAgICAgICAgICAgIGlmIChpbmNvbWluZ0RlcHJlY2F0ZWQgIT0gbG9jYWxEYXRhLnZlcnNpb25zW3ZlcnNpb25dLmRlcHJlY2F0ZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCFpbmNvbWluZ0RlcHJlY2F0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgeyBuYW1lOiBuYW1lLCB2ZXJzaW9uOiB2ZXJzaW9uIH0sXG4gICAgICAgICAgICAgICAgICAndW5kZXByZWNhdGluZyBAe25hbWV9QEB7dmVyc2lvbn0nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxEYXRhLnZlcnNpb25zW3ZlcnNpb25dLmRlcHJlY2F0ZWQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgIHsgbmFtZTogbmFtZSwgdmVyc2lvbjogdmVyc2lvbiB9LFxuICAgICAgICAgICAgICAgICAgJ2RlcHJlY2F0aW5nIEB7bmFtZX1AQHt2ZXJzaW9ufSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxvY2FsRGF0YS52ZXJzaW9uc1t2ZXJzaW9uXS5kZXByZWNhdGVkID0gaW5jb21pbmdEZXByZWNhdGVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxvY2FsRGF0YS50aW1lIS5tb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbERhdGFbVVNFUlNdID0gaW5jb21pbmdQa2dbVVNFUlNdO1xuICAgICAgICBsb2NhbERhdGFbRElTVF9UQUdTXSA9IGluY29taW5nUGtnW0RJU1RfVEFHU107XG4gICAgICAgIGNiKG51bGwpO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uIChlcnIpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGEgdGFyYmFsbC5cbiAgICogQHBhcmFtIHsqfSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gZmlsZW5hbWVcbiAgICogQHBhcmFtIHsqfSByZXZpc2lvblxuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlVGFyYmFsbChuYW1lOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIHJldmlzaW9uOiBzdHJpbmcsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGFzc2VydCh2YWxpZGF0ZU5hbWUoZmlsZW5hbWUpKTtcblxuICAgIHRoaXMuX3VwZGF0ZVBhY2thZ2UoXG4gICAgICBuYW1lLFxuICAgICAgKGRhdGEsIGNiKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChkYXRhLl9hdHRhY2htZW50c1tmaWxlbmFtZV0pIHtcbiAgICAgICAgICBkZWxldGUgZGF0YS5fYXR0YWNobWVudHNbZmlsZW5hbWVdO1xuICAgICAgICAgIGNiKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNiKHRoaXMuX2dldEZpbGVOb3RBdmFpbGFibGUoKSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UobmFtZSk7XG5cbiAgICAgICAgaWYgKHN0b3JhZ2UpIHtcbiAgICAgICAgICBzdG9yYWdlLmRlbGV0ZVBhY2thZ2UoZmlsZW5hbWUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGFyYmFsbC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHB1YmxpYyBhZGRUYXJiYWxsKG5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGFzc2VydCh2YWxpZGF0ZU5hbWUoZmlsZW5hbWUpKTtcblxuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGNvbnN0IHNoYU9uZUhhc2ggPSBjcmVhdGVUYXJiYWxsSGFzaCgpO1xuICAgIGNvbnN0IHVwbG9hZFN0cmVhbSA9IG5ldyBVcGxvYWRUYXJiYWxsKHt9KTtcbiAgICBjb25zdCBfdHJhbnNmb3JtID0gdXBsb2FkU3RyZWFtLl90cmFuc2Zvcm07XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuX2dldExvY2FsU3RvcmFnZShuYW1lKTtcblxuICAgIHVwbG9hZFN0cmVhbS5hYm9ydCA9IGZ1bmN0aW9uICgpOiB2b2lkIHt9O1xuICAgIHVwbG9hZFN0cmVhbS5kb25lID0gZnVuY3Rpb24gKCk6IHZvaWQge307XG5cbiAgICB1cGxvYWRTdHJlYW0uX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChkYXRhLCAuLi5hcmdzKTogdm9pZCB7XG4gICAgICBzaGFPbmVIYXNoLnVwZGF0ZShkYXRhKTtcbiAgICAgIC8vIG1lYXN1cmUgdGhlIGxlbmd0aCBmb3IgdmFsaWRhdGlvbiByZWFzb25zXG4gICAgICBsZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgICBjb25zdCBhcHBsaWVkRGF0YSA9IFtkYXRhLCAuLi5hcmdzXTtcbiAgICAgIC8vIEZJWE1FOiBub3Qgc3VyZSBhYm91dCB0aGlzIGFwcHJvYWNoLCB0c2MgY29tcGxhaW5zXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBfdHJhbnNmb3JtLmFwcGx5KHVwbG9hZFN0cmVhbSwgYXBwbGllZERhdGEpO1xuICAgIH07XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCk6IHZvaWQgPT4ge1xuICAgICAgICB1cGxvYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0Rm9yYmlkZGVuKCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdXBsb2FkU3RyZWFtO1xuICAgIH1cblxuICAgIGlmICghc3RvcmFnZSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKTogdm9pZCA9PiB7XG4gICAgICAgIHVwbG9hZFN0cmVhbS5lbWl0KCdlcnJvcicsIFwiY2FuJ3QgdXBsb2FkIHRoaXMgcGFja2FnZVwiKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHVwbG9hZFN0cmVhbTtcbiAgICB9XG5cbiAgICBjb25zdCB3cml0ZVN0cmVhbSA9IHN0b3JhZ2Uud3JpdGVUYXJiYWxsKGZpbGVuYW1lKTtcblxuICAgIHdyaXRlU3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gU1RPUkFHRS5GSUxFX0VYSVNUX0VSUk9SIHx8IGVyci5jb2RlID09PSBIVFRQX1NUQVRVUy5DT05GTElDVCkge1xuICAgICAgICB1cGxvYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0Q29uZmxpY3QoKSk7XG4gICAgICAgIHVwbG9hZFN0cmVhbS5hYm9ydCgpO1xuICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gU1RPUkFHRS5OT19TVUNIX0ZJTEVfRVJST1IgfHwgZXJyLmNvZGUgPT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICAvLyBjaGVjayBpZiBwYWNrYWdlIGV4aXN0cyB0byB0aHJvdyBhbiBhcHByb3ByaWF0ZSBtZXNzYWdlXG4gICAgICAgIHRoaXMuZ2V0UGFja2FnZU1ldGFkYXRhKG5hbWUsIGZ1bmN0aW9uIChfZXJyOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoX2Vycikge1xuICAgICAgICAgICAgdXBsb2FkU3RyZWFtLmVtaXQoJ2Vycm9yJywgX2Vycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVwbG9hZFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwbG9hZFN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB3cml0ZVN0cmVhbS5vbignb3BlbicsIGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgIC8vIHJlLWVtaXR0aW5nIG9wZW4gYmVjYXVzZSBpdCdzIGhhbmRsZWQgaW4gc3RvcmFnZS5qc1xuICAgICAgdXBsb2FkU3RyZWFtLmVtaXQoJ29wZW4nKTtcbiAgICB9KTtcblxuICAgIHdyaXRlU3RyZWFtLm9uKCdzdWNjZXNzJywgKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5fdXBkYXRlUGFja2FnZShcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlcihkYXRhLCBjYik6IHZvaWQge1xuICAgICAgICAgIGRhdGEuX2F0dGFjaG1lbnRzW2ZpbGVuYW1lXSA9IHtcbiAgICAgICAgICAgIHNoYXN1bTogc2hhT25lSGFzaC5kaWdlc3QoJ2hleCcpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY2IobnVsbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChlcnIpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICB1cGxvYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGxvYWRTdHJlYW0uZW1pdCgnc3VjY2VzcycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHVwbG9hZFN0cmVhbS5hYm9ydCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgIHdyaXRlU3RyZWFtLmFib3J0KCk7XG4gICAgfTtcblxuICAgIHVwbG9hZFN0cmVhbS5kb25lID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgdXBsb2FkU3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEJhZERhdGEoJ3JlZnVzaW5nIHRvIGFjY2VwdCB6ZXJvLWxlbmd0aCBmaWxlJykpO1xuICAgICAgICB3cml0ZVN0cmVhbS5hYm9ydCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVTdHJlYW0uZG9uZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB1cGxvYWRTdHJlYW0ucGlwZSh3cml0ZVN0cmVhbSk7XG5cbiAgICByZXR1cm4gdXBsb2FkU3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHRhcmJhbGwuXG4gICAqIEBwYXJhbSB7Kn0gbmFtZVxuICAgKiBAcGFyYW0geyp9IGZpbGVuYW1lXG4gICAqIEByZXR1cm4ge1JlYWRUYXJiYWxsfVxuICAgKi9cbiAgcHVibGljIGdldFRhcmJhbGwobmFtZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgYXNzZXJ0KHZhbGlkYXRlTmFtZShmaWxlbmFtZSkpO1xuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuX2dldExvY2FsU3RvcmFnZShuYW1lKTtcblxuICAgIGlmIChfLmlzTmlsKHN0b3JhZ2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlRmFpbHVyZVN0cmVhbVJlc3BvbnNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N0cmVhbVN1Y2Nlc3NSZWFkVGFyQmFsbChzdG9yYWdlLCBmaWxlbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3RyZWFtIHRoYXQgZW1pdHMgYSByZWFkIGZhaWx1cmUuXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm4ge1JlYWRUYXJiYWxsfVxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRmFpbHVyZVN0cmVhbVJlc3BvbnNlKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkVGFyYmFsbCh7fSk7XG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpOiB2b2lkID0+IHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIHRoaXMuX2dldEZpbGVOb3RBdmFpbGFibGUoKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBzdHJlYW0gdGhhdCBlbWl0cyB0aGUgdGFyYmFsbCBkYXRhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdG9yYWdlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHtSZWFkVGFyYmFsbH1cbiAgICovXG4gIHByaXZhdGUgX3N0cmVhbVN1Y2Nlc3NSZWFkVGFyQmFsbChzdG9yYWdlOiBhbnksIGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZFRhcmJhbGwoe30pO1xuICAgIGNvbnN0IHJlYWRUYXJiYWxsU3RyZWFtID0gc3RvcmFnZS5yZWFkVGFyYmFsbChmaWxlbmFtZSk7XG4gICAgY29uc3QgZTQwNCA9IEVycm9yQ29kZS5nZXROb3RGb3VuZDtcblxuICAgIHN0cmVhbS5hYm9ydCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgIGlmIChfLmlzTmlsKHJlYWRUYXJiYWxsU3RyZWFtKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmVhZFRhcmJhbGxTdHJlYW0uYWJvcnQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVhZFRhcmJhbGxTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSBTVE9SQUdFLk5PX1NVQ0hfRklMRV9FUlJPUiB8fCBlcnIuY29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGU0MDQoJ25vIHN1Y2ggZmlsZSBhdmFpbGFibGUnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVhZFRhcmJhbGxTdHJlYW0ub24oJ2NvbnRlbnQtbGVuZ3RoJywgZnVuY3Rpb24gKGNvbnRlbnQpOiB2b2lkIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdjb250ZW50LWxlbmd0aCcsIGNvbnRlbnQpO1xuICAgIH0pO1xuXG4gICAgcmVhZFRhcmJhbGxTdHJlYW0ub24oJ29wZW4nLCBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAvLyByZS1lbWl0dGluZyBvcGVuIGJlY2F1c2UgaXQncyBoYW5kbGVkIGluIHN0b3JhZ2UuanNcbiAgICAgIHN0cmVhbS5lbWl0KCdvcGVuJyk7XG4gICAgICByZWFkVGFyYmFsbFN0cmVhbS5waXBlKHN0cmVhbSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgcGFja2FnZSBieSBuYW1lLlxuICAgKiBAcGFyYW0geyp9IG5hbWVcbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIHB1YmxpYyBnZXRQYWNrYWdlTWV0YWRhdGEobmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7fSk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UobmFtZSk7XG4gICAgaWYgKF8uaXNOaWwoc3RvcmFnZSkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Tm90Rm91bmQoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVhZFBhY2thZ2UobmFtZSwgc3RvcmFnZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBhIGxvY2FsIHBhY2thZ2UuXG4gICAqIEBwYXJhbSB7Kn0gc3RhcnRLZXlcbiAgICogQHBhcmFtIHsqfSBvcHRpb25zXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgcHVibGljIHNlYXJjaChzdGFydEtleTogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcbiAgICBkZWJ1Zygnb3B0aW9ucyBmb3Igc2VhcmNoICVvJywgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRUYXJiYWxsKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuX3NlYXJjaEVhY2hQYWNrYWdlKFxuICAgICAgKGl0ZW06IE1hbmlmZXN0LCBjYjogQ2FsbGJhY2spOiB2b2lkID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoaXRlbS50aW1lID4gcGFyc2VJbnQoc3RhcnRLZXksIDEwKSkge1xuICAgICAgICAgIHRoaXMuZ2V0UGFja2FnZU1ldGFkYXRhKGl0ZW0ubmFtZSwgKGVycjogYW55LCBkYXRhOiBNYW5pZmVzdCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKGl0ZW0udGltZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHByZXBhcmVTZWFyY2hQYWNrYWdlKGRhdGEsIHRpbWUpO1xuICAgICAgICAgICAgaWYgKF8uaXNOaWwocmVzdWx0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgc3RyZWFtLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNiKG51bGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNiKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24gb25FbmQoZXJyKTogdm9pZCB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0uZW5kKCk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSB3cmFwcGVyIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIHBhY2thZ2UgbG9jYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwa2dOYW1lIHBhY2thZ2UgbmFtZS5cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0TG9jYWxTdG9yYWdlKHBrZ05hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VQbHVnaW4uZ2V0UGFja2FnZVN0b3JhZ2UocGtnTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBhIGpzb24gZmlsZSBmcm9tIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdG9yYWdlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBwcml2YXRlIF9yZWFkUGFja2FnZShuYW1lOiBzdHJpbmcsIHN0b3JhZ2U6IGFueSwgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgc3RvcmFnZS5yZWFkUGFja2FnZShuYW1lLCAoZXJyLCByZXN1bHQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSBTVE9SQUdFLk5PX1NVQ0hfRklMRV9FUlJPUiB8fCBlcnIuY29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXROb3RGb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2sodGhpcy5faW50ZXJuYWxFcnJvcihlcnIsIFNUT1JBR0UuUEFDS0FHRV9GSUxFX05BTUUsICdlcnJvciByZWFkaW5nJykpO1xuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayhlcnIsIG5vcm1hbGl6ZVBhY2thZ2UocmVzdWx0KSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2Fsa3MgdGhyb3VnaCBlYWNoIHBhY2thZ2UgYW5kIGNhbGxzIGBvbl9wYWNrYWdlYCBvbiB0aGVtLlxuICAgKiBAcGFyYW0geyp9IG9uUGFja2FnZVxuICAgKiBAcGFyYW0geyp9IG9uRW5kXG4gICAqL1xuICBwcml2YXRlIF9zZWFyY2hFYWNoUGFja2FnZShvblBhY2thZ2U6IG9uU2VhcmNoUGFja2FnZSwgb25FbmQ6IG9uRW5kU2VhcmNoUGFja2FnZSk6IHZvaWQge1xuICAgIC8vIHNhdmUgd2FpdCB3aGV0aGVyIHBsdWdpbiBzdGlsbCBkbyBub3Qgc3VwcG9ydCBzZWFyY2ggZnVuY3Rpb25hbGl0eVxuICAgIGlmIChfLmlzTmlsKHRoaXMuc3RvcmFnZVBsdWdpbi5zZWFyY2gpKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdwbHVnaW4gc2VhcmNoIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICAgIG9uRW5kKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmFnZVBsdWdpbi5zZWFyY2gob25QYWNrYWdlLCBvbkVuZCwgdmFsaWRhdGVOYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZWl0aGVyIGEgcHJldmlvdXMgY3JlYXRlZCBsb2NhbCBwYWNrYWdlIG9yIGEgYm9pbGVycGxhdGUuXG4gICAqIEBwYXJhbSB7Kn0gcGtnTmFtZVxuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVhZENyZWF0ZVBhY2thZ2UocGtnTmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlOiBhbnkgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UocGtnTmFtZSk7XG4gICAgaWYgKF8uaXNOaWwoc3RvcmFnZSkpIHtcbiAgICAgIHRoaXMuX2NyZWF0ZU5ld1BhY2thZ2UocGtnTmFtZSwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0b3JhZ2UucmVhZFBhY2thZ2UocGtnTmFtZSwgKGVyciwgZGF0YSk6IHZvaWQgPT4ge1xuICAgICAgLy8gVE9ETzogcmFjZSBjb25kaXRpb25cbiAgICAgIGlmIChfLmlzTmlsKGVycikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gU1RPUkFHRS5OT19TVUNIX0ZJTEVfRVJST1IgfHwgZXJyLmNvZGUgPT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICAgIGRhdGEgPSBnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZShwa2dOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sodGhpcy5faW50ZXJuYWxFcnJvcihlcnIsIFNUT1JBR0UuUEFDS0FHRV9GSUxFX05BTUUsICdlcnJvciByZWFkaW5nJykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKG51bGwsIG5vcm1hbGl6ZVBhY2thZ2UoZGF0YSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlTmV3UGFja2FnZShuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBDYWxsYmFjayk6IENhbGxiYWNrIHtcbiAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgbm9ybWFsaXplUGFja2FnZShnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZShuYW1lKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBpbnRlcm5hbCBlcnJvclxuICAgKiBAcGFyYW0geyp9IGVyclxuICAgKiBAcGFyYW0geyp9IGZpbGVcbiAgICogQHBhcmFtIHsqfSBtZXNzYWdlXG4gICAqIEByZXR1cm4ge09iamVjdH0gRXJyb3IgaW5zdGFuY2VcbiAgICovXG4gIHByaXZhdGUgX2ludGVybmFsRXJyb3IoZXJyOiBzdHJpbmcsIGZpbGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogYW55IHtcbiAgICB0aGlzLmxvZ2dlci5lcnJvcih7IGVycjogZXJyLCBmaWxlOiBmaWxlIH0sIGAke21lc3NhZ2V9ICBAe2ZpbGV9OiBAeyFlcnIubWVzc2FnZX1gKTtcblxuICAgIHJldHVybiBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gbmFtZSBwYWNrYWdlIG5hbWVcbiAgICogQHBhcmFtIHsqfSB1cGRhdGVIYW5kbGVyIGZ1bmN0aW9uKHBhY2thZ2UsIGNiKSAtIHVwZGF0ZSBmdW5jdGlvblxuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrIGNhbGxiYWNrIHRoYXQgZ2V0cyBpbnZva2VkIGFmdGVyIGl0J3MgYWxsIHVwZGF0ZWRcbiAgICogQHJldHVybiB7RnVuY3Rpb259XG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVQYWNrYWdlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB1cGRhdGVIYW5kbGVyOiBTdG9yYWdlVXBkYXRlQ2FsbGJhY2ssXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UobmFtZSk7XG5cbiAgICBpZiAoIXN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Tm90Rm91bmQoKSk7XG4gICAgfVxuXG4gICAgc3RvcmFnZS51cGRhdGVQYWNrYWdlKFxuICAgICAgbmFtZSxcbiAgICAgIHVwZGF0ZUhhbmRsZXIsXG4gICAgICB0aGlzLl93cml0ZVBhY2thZ2UuYmluZCh0aGlzKSxcbiAgICAgIG5vcm1hbGl6ZVBhY2thZ2UsXG4gICAgICBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByZXZpc2lvbiAoX3Jldikgc3RyaW5nIGZvciBhIHBhY2thZ2UuXG4gICAqIEBwYXJhbSB7Kn0gbmFtZVxuICAgKiBAcGFyYW0geyp9IGpzb25cbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIHByaXZhdGUgX3dyaXRlUGFja2FnZShuYW1lOiBzdHJpbmcsIGpzb246IE1hbmlmZXN0LCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlOiBhbnkgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UobmFtZSk7XG4gICAgaWYgKF8uaXNOaWwoc3RvcmFnZSkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBzdG9yYWdlLnNhdmVQYWNrYWdlKG5hbWUsIHRoaXMuX3NldERlZmF1bHRSZXZpc2lvbihqc29uKSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RGVmYXVsdFJldmlzaW9uKGpzb246IE1hbmlmZXN0KTogTWFuaWZlc3Qge1xuICAgIC8vIGNhbGN1bGF0ZSByZXZpc2lvbiBmcm9tIGNvdWNoIGRiXG4gICAgaWYgKF8uaXNTdHJpbmcoanNvbi5fcmV2KSA9PT0gZmFsc2UpIHtcbiAgICAgIGpzb24uX3JldiA9IFNUT1JBR0UuREVGQVVMVF9SRVZJU0lPTjtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIGludGVuZGVkIGluIGRlYnVnIG1vZGUgd2UgZG8gbm90IHdhbnQgbW9kaWZ5IHRoZSBzdG9yZSByZXZpc2lvblxuICAgIGlmIChfLmlzTmlsKHRoaXMuY29uZmlnLl9kZWJ1ZykpIHtcbiAgICAgIGpzb24uX3JldiA9IGdlbmVyYXRlUmV2aXNpb24oanNvbi5fcmV2KTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHByaXZhdGUgX2RlbGV0ZUF0dGFjaG1lbnRzKHN0b3JhZ2U6IGFueSwgYXR0YWNobWVudHM6IHN0cmluZ1tdLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBkZWJ1ZygnW3N0b3JhZ2UvX2RlbGV0ZUF0dGFjaG1lbnRzXSBkZWxldGUgYXR0YWNobWVudHMgdG90YWw6ICVvJywgYXR0YWNobWVudHM/Lmxlbmd0aCk7XG4gICAgY29uc3QgdW5saW5rTmV4dCA9IGZ1bmN0aW9uIChjYik6IHZvaWQge1xuICAgICAgaWYgKF8uaXNFbXB0eShhdHRhY2htZW50cykpIHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBhdHRhY2htZW50cy5zaGlmdCgpO1xuICAgICAgc3RvcmFnZS5kZWxldGVQYWNrYWdlKGF0dGFjaG1lbnQsIGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgdW5saW5rTmV4dChjYik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdW5saW5rTmV4dChmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAvLyB0cnkgdG8gdW5saW5rIHRoZSBkaXJlY3RvcnksIGJ1dCBpZ25vcmUgZXJyb3JzIGJlY2F1c2UgaXQgY2FuIGZhaWxcbiAgICAgIHN0b3JhZ2UucmVtb3ZlUGFja2FnZShmdW5jdGlvbiAoZXJyKTogdm9pZCB7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgdGhlIGRpc3QgZmlsZSByZW1haW5zIGFzIHRoZSBzYW1lIHByb3RvY29sXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIG1ldGFkYXRhXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB1cExpbmtLZXkgcmVnaXN0cnkga2V5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVVcGxpbmtUb1JlbW90ZVByb3RvY29sKGhhc2g6IERpc3RGaWxlLCB1cExpbmtLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIGlmIHdlIGdvdCB0aGlzIGluZm9ybWF0aW9uIGZyb20gYSBrbm93biByZWdpc3RyeSxcbiAgICAvLyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wgZm9yIHRoZSB0YXJiYWxsXG4gICAgLy9cbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JsaWR3a2Evc2lub3BpYS9pc3N1ZXMvMTY2XG4gICAgY29uc3QgdGFyYmFsbFVybDogYW55ID0gVXJsTm9kZS5wYXJzZShoYXNoLnVybCk7XG4gICAgY29uc3QgdXBsaW5rVXJsOiBhbnkgPSBVcmxOb2RlLnBhcnNlKHRoaXMuY29uZmlnLnVwbGlua3NbdXBMaW5rS2V5XS51cmwpO1xuXG4gICAgaWYgKHVwbGlua1VybC5ob3N0ID09PSB0YXJiYWxsVXJsLmhvc3QpIHtcbiAgICAgIHRhcmJhbGxVcmwucHJvdG9jb2wgPSB1cGxpbmtVcmwucHJvdG9jb2w7XG4gICAgICBoYXNoLnJlZ2lzdHJ5ID0gdXBMaW5rS2V5O1xuICAgICAgaGFzaC51cmwgPSBVcmxOb2RlLmZvcm1hdCh0YXJiYWxsVXJsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2VjcmV0KGNvbmZpZzogQ29uZmlnKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzZWNyZXRLZXkgPSBhd2FpdCB0aGlzLnN0b3JhZ2VQbHVnaW4uZ2V0U2VjcmV0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlUGx1Z2luLnNldFNlY3JldChjb25maWcuY2hlY2tTZWNyZXRLZXkoc2VjcmV0S2V5KSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVRva2VuKHRva2VuOiBUb2tlbik6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih0aGlzLnN0b3JhZ2VQbHVnaW4uc2F2ZVRva2VuKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgRXJyb3JDb2RlLmdldENvZGUoSFRUUF9TVEFUVVMuU0VSVklDRV9VTkFWQUlMQUJMRSwgU1VQUE9SVF9FUlJPUlMuUExVR0lOX01JU1NJTkdfSU5URVJGQUNFKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlUGx1Z2luLnNhdmVUb2tlbih0b2tlbik7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlVG9rZW4odXNlcjogc3RyaW5nLCB0b2tlbktleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHRoaXMuc3RvcmFnZVBsdWdpbi5kZWxldGVUb2tlbikgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLlNFUlZJQ0VfVU5BVkFJTEFCTEUsIFNVUFBPUlRfRVJST1JTLlBMVUdJTl9NSVNTSU5HX0lOVEVSRkFDRSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZVBsdWdpbi5kZWxldGVUb2tlbih1c2VyLCB0b2tlbktleSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZFRva2VucyhmaWx0ZXI6IFRva2VuRmlsdGVyKTogUHJvbWlzZTxUb2tlbltdPiB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih0aGlzLnN0b3JhZ2VQbHVnaW4ucmVhZFRva2VucykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLlNFUlZJQ0VfVU5BVkFJTEFCTEUsIFNVUFBPUlRfRVJST1JTLlBMVUdJTl9NSVNTSU5HX0lOVEVSRkFDRSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZVBsdWdpbi5yZWFkVG9rZW5zKGZpbHRlcik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9jYWxTdG9yYWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFB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
760
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVidWciLCJfbG9kYXNoIiwiX3VybCIsIl9zdHJlYW1zIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9zdG9yYWdlVXRpbHMiLCJfdXRpbHMyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGVidWciLCJidWlsRGVidWciLCJMb2NhbFN0b3JhZ2UiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImxvZ2dlciIsImxvY2FsU3RvcmFnZSIsInN0b3JhZ2VQbHVnaW4iLCJhZGRQYWNrYWdlIiwibmFtZSIsInBrZyIsImNhbGxiYWNrIiwic3RvcmFnZSIsIl9nZXRMb2NhbFN0b3JhZ2UiLCJfIiwiaXNOaWwiLCJFcnJvckNvZGUiLCJnZXROb3RGb3VuZCIsImNyZWF0ZVBhY2thZ2UiLCJnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZSIsImVyciIsImlzTnVsbCIsImNvZGUiLCJTVE9SQUdFIiwiRklMRV9FWElTVF9FUlJPUiIsIkhUVFBfU1RBVFVTIiwiQ09ORkxJQ1QiLCJnZXRDb25mbGljdCIsImxhdGVzdCIsImdldExhdGVzdFZlcnNpb24iLCJ2ZXJzaW9ucyIsInJlbW92ZVBhY2thZ2UiLCJyZWFkUGFja2FnZSIsImRhdGEiLCJOT19TVUNIX0ZJTEVfRVJST1IiLCJOT1RfRk9VTkQiLCJub3JtYWxpemVQYWNrYWdlIiwicmVtb3ZlIiwicmVtb3ZlRmFpbGVkIiwiZXJyb3IiLCJnZXRCYWREYXRhIiwibWVzc2FnZSIsImRlbGV0ZVBhY2thZ2UiLCJQQUNLQUdFX0ZJTEVfTkFNRSIsImF0dGFjaG1lbnRzIiwiT2JqZWN0Iiwia2V5cyIsIl9hdHRhY2htZW50cyIsIl9kZWxldGVBdHRhY2htZW50cyIsInVwZGF0ZVZlcnNpb25zIiwicGFja2FnZUluZm8iLCJfcmVhZENyZWF0ZVBhY2thZ2UiLCJwYWNrYWdlTG9jYWxKc29uIiwiY2hhbmdlIiwicmVhZG1lIiwiZ2V0TGF0ZXN0UmVhZG1lIiwidmVyc2lvbklkIiwidmVyc2lvbiIsImNsZWFuVXBSZWFkbWUiLCJjb250cmlidXRvcnMiLCJub3JtYWxpemVDb250cmlidXRvcnMiLCJkaXN0IiwidGFyYmFsbCIsInVybE9iamVjdCIsIlVybE5vZGUiLCJwYXJzZSIsImZpbGVuYW1lIiwicGF0aG5hbWUiLCJyZXBsYWNlIiwiX2Rpc3RmaWxlcyIsImhhc2giLCJ1cmwiLCJzaGEiLCJzaGFzdW0iLCJ1cExpbmsiLCJTeW1ib2wiLCJmb3IiLCJfdXBkYXRlVXBsaW5rVG9SZW1vdGVQcm90b2NvbCIsInRhZyIsIkRJU1RfVEFHUyIsInVwIiwiX3VwbGlua3MiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJuZWVkX2NoYW5nZSIsImlzT2JqZWN0IiwiZXRhZyIsImZldGNoZWQiLCJpc0VxdWFsIiwidGltZSIsIl93cml0ZVBhY2thZ2UiLCJhZGRWZXJzaW9uIiwibWV0YWRhdGEiLCJfdXBkYXRlUGFja2FnZSIsImNiIiwiaGFzVmVyc2lvbiIsImlzU3RyaW5nIiwiZXJyb3JNZXNzYWdlIiwiZ2V0QmFkUmVxdWVzdCIsImN1cnJlbnREYXRlIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiY3JlYXRlZCIsInRhZ1ZlcnNpb24iLCJhZGQiLCJhZGRGYWlsZWQiLCJtZXJnZVRhZ3MiLCJwa2dOYW1lIiwidGFncyIsIl9nZXRWZXJzaW9uTm90Rm91bmQiLCJBUElfRVJST1IiLCJWRVJTSU9OX05PVF9FWElTVCIsIl9nZXRGaWxlTm90QXZhaWxhYmxlIiwiY2hhbmdlUGFja2FnZSIsImluY29taW5nUGtnIiwicmV2aXNpb24iLCJsb2NhbERhdGEiLCJpbmNvbWluZ1ZlcnNpb24iLCJpbmZvIiwiZmlsZSIsImluY29taW5nRGVwcmVjYXRlZCIsImRlcHJlY2F0ZWQiLCJtb2RpZmllZCIsIlVTRVJTIiwicmVtb3ZlVGFyYmFsbCIsImFzc2VydCIsInZhbGlkYXRlTmFtZSIsImFkZFRhcmJhbGwiLCJsZW5ndGgiLCJzaGFPbmVIYXNoIiwiY3JlYXRlVGFyYmFsbEhhc2giLCJ1cGxvYWRTdHJlYW0iLCJVcGxvYWRUYXJiYWxsIiwiX3RyYW5zZm9ybSIsImFib3J0IiwiZG9uZSIsImFyZ3MiLCJ1cGRhdGUiLCJhcHBsaWVkRGF0YSIsImFwcGx5IiwicHJvY2VzcyIsIm5leHRUaWNrIiwiZW1pdCIsImdldEZvcmJpZGRlbiIsIndyaXRlU3RyZWFtIiwid3JpdGVUYXJiYWxsIiwib24iLCJnZXRQYWNrYWdlTWV0YWRhdGEiLCJfZXJyIiwidXBkYXRlciIsImRpZ2VzdCIsInBpcGUiLCJnZXRUYXJiYWxsIiwiX2NyZWF0ZUZhaWx1cmVTdHJlYW1SZXNwb25zZSIsIl9zdHJlYW1TdWNjZXNzUmVhZFRhckJhbGwiLCJzdHJlYW0iLCJSZWFkVGFyYmFsbCIsInJlYWRUYXJiYWxsU3RyZWFtIiwicmVhZFRhcmJhbGwiLCJlNDA0IiwiY29udGVudCIsIl9yZWFkUGFja2FnZSIsImdldFBhY2thZ2VNZXRhZGF0YUFzeW5jIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1cGRhdGVWZXJzaW9uc0FzeW5jIiwicmVzdWx0Iiwic2VhcmNoIiwic3RhcnRLZXkiLCJvcHRpb25zIiwib2JqZWN0TW9kZSIsIl9zZWFyY2hFYWNoUGFja2FnZSIsIml0ZW0iLCJwYXJzZUludCIsInByZXBhcmVTZWFyY2hQYWNrYWdlIiwicHVzaCIsIm9uRW5kIiwiZW5kIiwiZ2V0UGFja2FnZVN0b3JhZ2UiLCJfaW50ZXJuYWxFcnJvciIsIm9uUGFja2FnZSIsIndhcm4iLCJfY3JlYXRlTmV3UGFja2FnZSIsImdldEludGVybmFsRXJyb3IiLCJ1cGRhdGVIYW5kbGVyIiwidXBkYXRlUGFja2FnZSIsImJpbmQiLCJqc29uIiwic2F2ZVBhY2thZ2UiLCJfc2V0RGVmYXVsdFJldmlzaW9uIiwiX3JldiIsIkRFRkFVTFRfUkVWSVNJT04iLCJnZW5lcmF0ZVJldmlzaW9uIiwidW5saW5rTmV4dCIsImlzRW1wdHkiLCJhdHRhY2htZW50Iiwic2hpZnQiLCJ1cExpbmtLZXkiLCJ0YXJiYWxsVXJsIiwidXBsaW5rVXJsIiwidXBsaW5rcyIsImhvc3QiLCJwcm90b2NvbCIsInJlZ2lzdHJ5IiwiZm9ybWF0IiwiZ2V0U2VjcmV0Iiwic2VjcmV0S2V5Iiwic2V0U2VjcmV0IiwiY2hlY2tTZWNyZXRLZXkiLCJzYXZlVG9rZW4iLCJ0b2tlbiIsImlzRnVuY3Rpb24iLCJnZXRDb2RlIiwiU0VSVklDRV9VTkFWQUlMQUJMRSIsIlNVUFBPUlRfRVJST1JTIiwiUExVR0lOX01JU1NJTkdfSU5URVJGQUNFIiwiZGVsZXRlVG9rZW4iLCJ1c2VyIiwidG9rZW5LZXkiLCJyZWFkVG9rZW5zIiwiZmlsdGVyIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9sb2NhbC1zdG9yYWdlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBidWlsRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBVcmxOb2RlIGZyb20gJ3VybCc7XG5cbmltcG9ydCB7IFJlYWRUYXJiYWxsLCBVcGxvYWRUYXJiYWxsIH0gZnJvbSAnQHZlcmRhY2Npby9zdHJlYW1zJztcbmltcG9ydCB7XG4gIEF1dGhvcixcbiAgQ2FsbGJhY2ssXG4gIENvbmZpZyxcbiAgRGlzdEZpbGUsXG4gIExvZ2dlcixcbiAgTWFuaWZlc3QsXG4gIE1lcmdlVGFncyxcbiAgU3RvcmFnZVVwZGF0ZUNhbGxiYWNrLFxuICBUb2tlbixcbiAgVG9rZW5GaWx0ZXIsXG4gIFZlcnNpb24sXG4gIG9uRW5kU2VhcmNoUGFja2FnZSxcbiAgb25TZWFyY2hQYWNrYWdlLFxufSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVRhcmJhbGxIYXNoLFxuICBnZXRMYXRlc3RWZXJzaW9uLFxuICBub3JtYWxpemVDb250cmlidXRvcnMsXG4gIHZhbGlkYXRlTmFtZSxcbn0gZnJvbSAnQHZlcmRhY2Npby91dGlscyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VQbHVnaW5MZWdhY3kgfSBmcm9tICcuLi8uLi90eXBlcy9jdXN0b20nO1xuaW1wb3J0IHsgU3RyaW5nVmFsdWUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBBUElfRVJST1IsIERJU1RfVEFHUywgSFRUUF9TVEFUVVMsIFNUT1JBR0UsIFNVUFBPUlRfRVJST1JTLCBVU0VSUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIGNsZWFuVXBSZWFkbWUsXG4gIGdlbmVyYXRlUGFja2FnZVRlbXBsYXRlLFxuICBnZW5lcmF0ZVJldmlzaW9uLFxuICBnZXRMYXRlc3RSZWFkbWUsXG4gIG5vcm1hbGl6ZVBhY2thZ2UsXG59IGZyb20gJy4vc3RvcmFnZS11dGlscyc7XG5pbXBvcnQgeyBwcmVwYXJlU2VhcmNoUGFja2FnZSB9IGZyb20gJy4vc3RvcmFnZS11dGlscyc7XG5pbXBvcnQgeyBFcnJvckNvZGUsIGlzT2JqZWN0LCB0YWdWZXJzaW9uIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGRlYnVnID0gYnVpbERlYnVnKCd2ZXJkYWNjaW86bG9jYWwtc3RvcmFnZScpO1xuZXhwb3J0IHR5cGUgU3RvcmFnZVBsdWdpbiA9IFN0b3JhZ2VQbHVnaW5MZWdhY3k8Q29uZmlnPiB8IGFueTtcbi8qKlxuICogSW1wbGVtZW50cyBTdG9yYWdlIGludGVyZmFjZSAoc2FtZSBmb3Igc3RvcmFnZS5qcywgbG9jYWwtc3RvcmFnZS5qcywgdXAtc3RvcmFnZS5qcykuXG4gKi9cbmNsYXNzIExvY2FsU3RvcmFnZSB7XG4gIHB1YmxpYyBjb25maWc6IENvbmZpZztcbiAgcHVibGljIHN0b3JhZ2VQbHVnaW46IFN0b3JhZ2VQbHVnaW47XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcsIGxvZ2dlcjogTG9nZ2VyLCBsb2NhbFN0b3JhZ2U6IFN0b3JhZ2VQbHVnaW4pIHtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnN0b3JhZ2VQbHVnaW4gPSBsb2NhbFN0b3JhZ2U7XG4gIH1cblxuICBwdWJsaWMgYWRkUGFja2FnZShuYW1lOiBzdHJpbmcsIHBrZzogTWFuaWZlc3QsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JhZ2U6IGFueSA9IHRoaXMuX2dldExvY2FsU3RvcmFnZShuYW1lKTtcblxuICAgIGlmIChfLmlzTmlsKHN0b3JhZ2UpKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soRXJyb3JDb2RlLmdldE5vdEZvdW5kKCd0aGlzIHBhY2thZ2UgY2Fubm90IGJlIGFkZGVkJykpO1xuICAgIH1cblxuICAgIHN0b3JhZ2UuY3JlYXRlUGFja2FnZShuYW1lLCBnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZShuYW1lKSwgKGVycikgPT4ge1xuICAgICAgLy8gRklYTUU6IGl0IHdpbGwgYmUgZml4ZWQgaGVyZSBodHRwczovL2dpdGh1Yi5jb20vdmVyZGFjY2lvL3ZlcmRhY2Npby9wdWxsLzEzNjBcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmIChcbiAgICAgICAgXy5pc051bGwoZXJyKSA9PT0gZmFsc2UgJiZcbiAgICAgICAgKGVyci5jb2RlID09PSBTVE9SQUdFLkZJTEVfRVhJU1RfRVJST1IgfHwgZXJyLmNvZGUgPT09IEhUVFBfU1RBVFVTLkNPTkZMSUNUKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Q29uZmxpY3QoKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxhdGVzdCA9IGdldExhdGVzdFZlcnNpb24ocGtnKTtcbiAgICAgIGlmIChfLmlzTmlsKGxhdGVzdCkgPT09IGZhbHNlICYmIHBrZy52ZXJzaW9uc1tsYXRlc3RdKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBwa2cudmVyc2lvbnNbbGF0ZXN0XSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBwYWNrYWdlLlxuICAgKiBAcGFyYW0geyp9IG5hbWVcbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIHB1YmxpYyByZW1vdmVQYWNrYWdlKG5hbWU6IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmFnZTogYW55ID0gdGhpcy5fZ2V0TG9jYWxTdG9yYWdlKG5hbWUpO1xuICAgIGRlYnVnKCdbc3RvcmFnZV0gcmVtb3ZpbmcgcGFja2FnZSAlbycsIG5hbWUpO1xuICAgIGlmIChfLmlzTmlsKHN0b3JhZ2UpKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soRXJyb3JDb2RlLmdldE5vdEZvdW5kKCkpO1xuICAgIH1cblxuICAgIHN0b3JhZ2UucmVhZFBhY2thZ2UobmFtZSwgKGVyciwgZGF0YTogTWFuaWZlc3QpOiB2b2lkID0+IHtcbiAgICAgIGlmIChfLmlzTmlsKGVycikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gU1RPUkFHRS5OT19TVUNIX0ZJTEVfRVJST1IgfHwgZXJyLmNvZGUgPT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Tm90Rm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG5cbiAgICAgIGRhdGEgPSBub3JtYWxpemVQYWNrYWdlKGRhdGEpO1xuICAgICAgdGhpcy5zdG9yYWdlUGx1Z2luLnJlbW92ZShuYW1lLCAocmVtb3ZlRmFpbGVkOiBFcnJvcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAocmVtb3ZlRmFpbGVkKSB7XG4gICAgICAgICAgLy8gVGhpcyB3aWxsIGhhcHBlbiB3aGVuIGRhdGFiYXNlIGlzIGxvY2tlZFxuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgeyBuYW1lIH0sXG4gICAgICAgICAgICBgW3N0b3JhZ2UvcmVtb3ZlUGFja2FnZV0gdGhlIGRhdGFiYXNlIGlzIGxvY2tlZCwgcmVtb3ZlZCBoYXMgZmFpbGVkIGZvciBAe25hbWV9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRCYWREYXRhKHJlbW92ZUZhaWxlZC5tZXNzYWdlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdG9yYWdlLmRlbGV0ZVBhY2thZ2UoU1RPUkFHRS5QQUNLQUdFX0ZJTEVfTkFNRSwgKGVycik6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IE9iamVjdC5rZXlzKGRhdGEuX2F0dGFjaG1lbnRzKTtcblxuICAgICAgICAgIHRoaXMuX2RlbGV0ZUF0dGFjaG1lbnRzKHN0b3JhZ2UsIGF0dGFjaG1lbnRzLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25pemUgcmVtb3RlIHBhY2thZ2UgaW5mbyB3aXRoIHRoZSBsb2NhbCBvbmVcbiAgICogQHBhcmFtIHsqfSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gcGFja2FnZUluZm9cbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZVZlcnNpb25zKG5hbWU6IHN0cmluZywgcGFja2FnZUluZm86IE1hbmlmZXN0LCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLl9yZWFkQ3JlYXRlUGFja2FnZShuYW1lLCAoZXJyLCBwYWNrYWdlTG9jYWxKc29uKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgY2hhbmdlID0gZmFsc2U7XG4gICAgICAvLyB1cGRhdGluZyByZWFkbWVcbiAgICAgIHBhY2thZ2VMb2NhbEpzb24ucmVhZG1lID0gZ2V0TGF0ZXN0UmVhZG1lKHBhY2thZ2VJbmZvKTtcbiAgICAgIGlmIChwYWNrYWdlSW5mby5yZWFkbWUgIT09IHBhY2thZ2VMb2NhbEpzb24ucmVhZG1lKSB7XG4gICAgICAgIGNoYW5nZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHZlcnNpb25JZCBpbiBwYWNrYWdlSW5mby52ZXJzaW9ucykge1xuICAgICAgICBpZiAoXy5pc05pbChwYWNrYWdlTG9jYWxKc29uLnZlcnNpb25zW3ZlcnNpb25JZF0pKSB7XG4gICAgICAgICAgbGV0IHZlcnNpb24gPSBwYWNrYWdlSW5mby52ZXJzaW9uc1t2ZXJzaW9uSWRdO1xuXG4gICAgICAgICAgLy8gd2UgZG9uJ3Qga2VlcCByZWFkbWUgZm9yIHBhY2thZ2UgdmVyc2lvbnMsXG4gICAgICAgICAgLy8gb25seSBvbmUgcmVhZG1lIHBlciBwYWNrYWdlXG4gICAgICAgICAgdmVyc2lvbiA9IGNsZWFuVXBSZWFkbWUodmVyc2lvbik7XG4gICAgICAgICAgdmVyc2lvbi5jb250cmlidXRvcnMgPSBub3JtYWxpemVDb250cmlidXRvcnModmVyc2lvbi5jb250cmlidXRvcnMgYXMgQXV0aG9yW10pO1xuXG4gICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICBwYWNrYWdlTG9jYWxKc29uLnZlcnNpb25zW3ZlcnNpb25JZF0gPSB2ZXJzaW9uO1xuXG4gICAgICAgICAgaWYgKHZlcnNpb24uZGlzdCAmJiB2ZXJzaW9uLmRpc3QudGFyYmFsbCkge1xuICAgICAgICAgICAgY29uc3QgdXJsT2JqZWN0OiBhbnkgPSBVcmxOb2RlLnBhcnNlKHZlcnNpb24uZGlzdC50YXJiYWxsKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gdXJsT2JqZWN0LnBhdGhuYW1lLnJlcGxhY2UoL14uKlxcLy8sICcnKTtcblxuICAgICAgICAgICAgLy8gd2UgZG8gTk9UIG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgcmVjb3Jkc1xuICAgICAgICAgICAgaWYgKF8uaXNOaWwocGFja2FnZUxvY2FsSnNvbi5fZGlzdGZpbGVzW2ZpbGVuYW1lXSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgaGFzaDogRGlzdEZpbGUgPSAocGFja2FnZUxvY2FsSnNvbi5fZGlzdGZpbGVzW2ZpbGVuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICB1cmw6IHZlcnNpb24uZGlzdC50YXJiYWxsLFxuICAgICAgICAgICAgICAgIHNoYTogdmVyc2lvbi5kaXN0LnNoYXN1bSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIC8qIGVzbGludCBzcGFjZWQtY29tbWVudDogMCAqL1xuICAgICAgICAgICAgICBjb25zdCB1cExpbms6IHN0cmluZyA9IHZlcnNpb25bU3ltYm9sLmZvcignX192ZXJkYWNjaW9fdXBsaW5rJyldO1xuXG4gICAgICAgICAgICAgIGlmIChfLmlzTmlsKHVwTGluaykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVXBsaW5rVG9SZW1vdGVQcm90b2NvbChoYXNoLCB1cExpbmspO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgdGFnIGluIHBhY2thZ2VJbmZvW0RJU1RfVEFHU10pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFwYWNrYWdlTG9jYWxKc29uW0RJU1RfVEFHU11bdGFnXSB8fFxuICAgICAgICAgIHBhY2thZ2VMb2NhbEpzb25bRElTVF9UQUdTXVt0YWddICE9PSBwYWNrYWdlSW5mb1tESVNUX1RBR1NdW3RhZ11cbiAgICAgICAgKSB7XG4gICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICBwYWNrYWdlTG9jYWxKc29uW0RJU1RfVEFHU11bdGFnXSA9IHBhY2thZ2VJbmZvW0RJU1RfVEFHU11bdGFnXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHVwIGluIHBhY2thZ2VJbmZvLl91cGxpbmtzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFja2FnZUluZm8uX3VwbGlua3MsIHVwKSkge1xuICAgICAgICAgIGNvbnN0IG5lZWRfY2hhbmdlID1cbiAgICAgICAgICAgICFpc09iamVjdChwYWNrYWdlTG9jYWxKc29uLl91cGxpbmtzW3VwXSkgfHxcbiAgICAgICAgICAgIHBhY2thZ2VJbmZvLl91cGxpbmtzW3VwXS5ldGFnICE9PSBwYWNrYWdlTG9jYWxKc29uLl91cGxpbmtzW3VwXS5ldGFnIHx8XG4gICAgICAgICAgICBwYWNrYWdlSW5mby5fdXBsaW5rc1t1cF0uZmV0Y2hlZCAhPT0gcGFja2FnZUxvY2FsSnNvbi5fdXBsaW5rc1t1cF0uZmV0Y2hlZDtcblxuICAgICAgICAgIGlmIChuZWVkX2NoYW5nZSkge1xuICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHBhY2thZ2VMb2NhbEpzb24uX3VwbGlua3NbdXBdID0gcGFja2FnZUluZm8uX3VwbGlua3NbdXBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoJ3RpbWUnIGluIHBhY2thZ2VJbmZvICYmICFfLmlzRXF1YWwocGFja2FnZUxvY2FsSnNvbi50aW1lLCBwYWNrYWdlSW5mby50aW1lKSkge1xuICAgICAgICBwYWNrYWdlTG9jYWxKc29uLnRpbWUgPSBwYWNrYWdlSW5mby50aW1lO1xuICAgICAgICBjaGFuZ2UgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlKSB7XG4gICAgICAgIGRlYnVnKCd1cGRhdGluZyBwYWNrYWdlICVvIGluZm8nLCBuYW1lKTtcbiAgICAgICAgdGhpcy5fd3JpdGVQYWNrYWdlKG5hbWUsIHBhY2thZ2VMb2NhbEpzb24sIGZ1bmN0aW9uIChlcnIpOiB2b2lkIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIHBhY2thZ2VMb2NhbEpzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHBhY2thZ2VMb2NhbEpzb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyB2ZXJzaW9uIHRvIGEgcHJldmlvdXMgbG9jYWwgcGFja2FnZS5cbiAgICogQHBhcmFtIHsqfSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gdmVyc2lvblxuICAgKiBAcGFyYW0geyp9IG1ldGFkYXRhXG4gICAqIEBwYXJhbSB7Kn0gdGFnXG4gICAqIEBwYXJhbSB7Kn0gY2FsbGJhY2tcbiAgICovXG4gIHB1YmxpYyBhZGRWZXJzaW9uKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgbWV0YWRhdGE6IFZlcnNpb24sXG4gICAgdGFnOiBTdHJpbmdWYWx1ZSxcbiAgICBjYWxsYmFjazogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fdXBkYXRlUGFja2FnZShcbiAgICAgIG5hbWUsXG4gICAgICAoZGF0YSwgY2I6IENhbGxiYWNrKTogdm9pZCA9PiB7XG4gICAgICAgIC8vIGtlZXAgb25seSBvbmUgcmVhZG1lIHBlciBwYWNrYWdlXG4gICAgICAgIGRhdGEucmVhZG1lID0gbWV0YWRhdGEucmVhZG1lO1xuXG4gICAgICAgIC8vIFRPRE86IGxvZGFzaCByZW1vdmVcbiAgICAgICAgbWV0YWRhdGEgPSBjbGVhblVwUmVhZG1lKG1ldGFkYXRhKTtcbiAgICAgICAgbWV0YWRhdGEuY29udHJpYnV0b3JzID0gbm9ybWFsaXplQ29udHJpYnV0b3JzKG1ldGFkYXRhLmNvbnRyaWJ1dG9ycyBhcyBBdXRob3JbXSk7XG5cbiAgICAgICAgY29uc3QgaGFzVmVyc2lvbiA9IGRhdGEudmVyc2lvbnNbdmVyc2lvbl0gIT0gbnVsbDtcbiAgICAgICAgaWYgKGhhc1ZlcnNpb24pIHtcbiAgICAgICAgICByZXR1cm4gY2IoRXJyb3JDb2RlLmdldENvbmZsaWN0KCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdXBsb2FkZWQgdGFyYmFsbCBoYXMgYSBkaWZmZXJlbnQgc2hhc3VtLCBpdCdzIHZlcnkgbGlrZWx5IHRoYXQgd2UgaGF2ZSBzb21lIGtpbmQgb2YgZXJyb3JcbiAgICAgICAgaWYgKGlzT2JqZWN0KG1ldGFkYXRhLmRpc3QpICYmIF8uaXNTdHJpbmcobWV0YWRhdGEuZGlzdC50YXJiYWxsKSkge1xuICAgICAgICAgIGNvbnN0IHRhcmJhbGwgPSBtZXRhZGF0YS5kaXN0LnRhcmJhbGwucmVwbGFjZSgvLipcXC8vLCAnJyk7XG5cbiAgICAgICAgICBpZiAoaXNPYmplY3QoZGF0YS5fYXR0YWNobWVudHNbdGFyYmFsbF0pKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIF8uaXNOaWwoZGF0YS5fYXR0YWNobWVudHNbdGFyYmFsbF0uc2hhc3VtKSA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgXy5pc05pbChtZXRhZGF0YS5kaXN0LnNoYXN1bSkgPT09IGZhbHNlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuX2F0dGFjaG1lbnRzW3RhcmJhbGxdLnNoYXN1bSAhPSBtZXRhZGF0YS5kaXN0LnNoYXN1bSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBzaGFzdW0gZXJyb3IsICR7ZGF0YS5fYXR0YWNobWVudHNbdGFyYmFsbF0uc2hhc3VtfSAhPSAke21ldGFkYXRhLmRpc3Quc2hhc3VtfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNiKEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KGVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICAgICAgICAvLyBzb21lIG9sZCBzdG9yYWdlIGRvIG5vdCBoYXZlIHRoaXMgZmllbGQgIzc0MFxuICAgICAgICAgICAgaWYgKF8uaXNOaWwoZGF0YS50aW1lKSkge1xuICAgICAgICAgICAgICBkYXRhLnRpbWUgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YS50aW1lWydtb2RpZmllZCddID0gY3VycmVudERhdGU7XG5cbiAgICAgICAgICAgIGlmICgnY3JlYXRlZCcgaW4gZGF0YS50aW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBkYXRhLnRpbWUuY3JlYXRlZCA9IGN1cnJlbnREYXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhLnRpbWVbdmVyc2lvbl0gPSBjdXJyZW50RGF0ZTtcbiAgICAgICAgICAgIGRhdGEuX2F0dGFjaG1lbnRzW3RhcmJhbGxdLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEudmVyc2lvbnNbdmVyc2lvbl0gPSBtZXRhZGF0YTtcbiAgICAgICAgdGFnVmVyc2lvbihkYXRhLCB2ZXJzaW9uLCB0YWcpO1xuXG4gICAgICAgIHRoaXMuc3RvcmFnZVBsdWdpbi5hZGQobmFtZSwgKGFkZEZhaWxlZCk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChhZGRGYWlsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYihFcnJvckNvZGUuZ2V0QmFkRGF0YShhZGRGYWlsZWQubWVzc2FnZSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNiKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBhIG5ldyBsaXN0IG9mIHRhZ3MgZm9yIGEgbG9jYWwgcGFja2FnZXMgd2l0aCB0aGUgZXhpc3Rpbmcgb25lLlxuICAgKiBAcGFyYW0geyp9IHBrZ05hbWVcbiAgICogQHBhcmFtIHsqfSB0YWdzXG4gICAqIEBwYXJhbSB7Kn0gY2FsbGJhY2tcbiAgICovXG4gIHB1YmxpYyBtZXJnZVRhZ3MocGtnTmFtZTogc3RyaW5nLCB0YWdzOiBNZXJnZVRhZ3MsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMuX3VwZGF0ZVBhY2thZ2UoXG4gICAgICBwa2dOYW1lLFxuICAgICAgKGRhdGEsIGNiKTogdm9pZCA9PiB7XG4gICAgICAgIC8qIGVzbGludCBndWFyZC1mb3ItaW46IDAgKi9cbiAgICAgICAgZm9yIChjb25zdCB0YWcgaW4gdGFncykge1xuICAgICAgICAgIC8vIHRoaXMgaGFuZGxlIGRpc3QtdGFnIHJtIGNvbW1hbmRcbiAgICAgICAgICBpZiAoXy5pc051bGwodGFnc1t0YWddKSkge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGFbRElTVF9UQUdTXVt0YWddO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF8uaXNOaWwoZGF0YS52ZXJzaW9uc1t0YWdzW3RhZ11dKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNiKHRoaXMuX2dldFZlcnNpb25Ob3RGb3VuZCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmVyc2lvbjogc3RyaW5nID0gdGFnc1t0YWddO1xuICAgICAgICAgIHRhZ1ZlcnNpb24oZGF0YSwgdmVyc2lvbiwgdGFnKTtcbiAgICAgICAgfVxuICAgICAgICBjYihudWxsKTtcbiAgICAgIH0sXG4gICAgICBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHZlcnNpb24gbm90IGZvdW5kXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2dldFZlcnNpb25Ob3RGb3VuZCgpOiBhbnkge1xuICAgIHJldHVybiBFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLlZFUlNJT05fTk9UX0VYSVNUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZmlsZSBubyBhdmFpbGFibGVcbiAgICogQHJldHVybiB7U3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0RmlsZU5vdEF2YWlsYWJsZSgpOiBhbnkge1xuICAgIHJldHVybiBFcnJvckNvZGUuZ2V0Tm90Rm91bmQoJ25vIHN1Y2ggZmlsZSBhdmFpbGFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBhY2thZ2UgbWV0YWRhdGEsIHRhZ3MgYW5kIGF0dGFjaG1lbnRzICh0YXJiYWxscykuXG4gICAqIE5vdGU6IEN1cnJlbnRseSBzdXBwb3J0cyB1bnB1Ymxpc2hpbmcgYW5kIGRlcHJlY2F0aW9uLlxuICAgKiBAcGFyYW0geyp9IG5hbWVcbiAgICogQHBhcmFtIHsqfSBpbmNvbWluZ1BrZ1xuICAgKiBAcGFyYW0geyp9IHJldmlzaW9uXG4gICAqIEBwYXJhbSB7Kn0gY2FsbGJhY2tcbiAgICogQHJldHVybiB7RnVuY3Rpb259XG4gICAqL1xuICBwdWJsaWMgY2hhbmdlUGFja2FnZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaW5jb21pbmdQa2c6IE1hbmlmZXN0LFxuICAgIHJldmlzaW9uOiBzdHJpbmcgfCB2b2lkLFxuICAgIGNhbGxiYWNrOiBDYWxsYmFja1xuICApOiB2b2lkIHtcbiAgICBpZiAoIWlzT2JqZWN0KGluY29taW5nUGtnLnZlcnNpb25zKSB8fCAhaXNPYmplY3QoaW5jb21pbmdQa2dbRElTVF9UQUdTXSkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKHsgbmFtZSB9LCBgY2hhbmdlUGFja2FnZSBiYWQgZGF0YSBmb3IgQHtuYW1lfWApO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRCYWREYXRhKCkpO1xuICAgIH1cbiAgICBkZWJ1ZygnY2hhbmdlUGFja2FnZSB1ZGFwdGluZyBwYWNrYWdlIGZvciAlbycsIG5hbWUpO1xuICAgIHRoaXMuX3VwZGF0ZVBhY2thZ2UoXG4gICAgICBuYW1lLFxuICAgICAgKGxvY2FsRGF0YTogTWFuaWZlc3QsIGNiOiBDYWxsYmFjayk6IHZvaWQgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHZlcnNpb24gaW4gbG9jYWxEYXRhLnZlcnNpb25zKSB7XG4gICAgICAgICAgY29uc3QgaW5jb21pbmdWZXJzaW9uID0gaW5jb21pbmdQa2cudmVyc2lvbnNbdmVyc2lvbl07XG4gICAgICAgICAgaWYgKF8uaXNOaWwoaW5jb21pbmdWZXJzaW9uKSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyh7IG5hbWU6IG5hbWUsIHZlcnNpb246IHZlcnNpb24gfSwgJ3VucHVibGlzaGluZyBAe25hbWV9QEB7dmVyc2lvbn0nKTtcblxuICAgICAgICAgICAgLy8gRklYTUU6IEkgcHJlZmVyIHJldHVybiBhIG5ldyBvYmplY3QgcmF0aGVyIG11dGF0ZSB0aGUgbWV0YWRhdGFcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbERhdGEudmVyc2lvbnNbdmVyc2lvbl07XG4gICAgICAgICAgICBkZWxldGUgbG9jYWxEYXRhLnRpbWUhW3ZlcnNpb25dO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgaW4gbG9jYWxEYXRhLl9hdHRhY2htZW50cykge1xuICAgICAgICAgICAgICBpZiAobG9jYWxEYXRhLl9hdHRhY2htZW50c1tmaWxlXS52ZXJzaW9uID09PSB2ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsRGF0YS5fYXR0YWNobWVudHNbZmlsZV0udmVyc2lvbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluY29taW5nVmVyc2lvbiwgJ2RlcHJlY2F0ZWQnKSkge1xuICAgICAgICAgICAgY29uc3QgaW5jb21pbmdEZXByZWNhdGVkID0gaW5jb21pbmdWZXJzaW9uLmRlcHJlY2F0ZWQ7XG4gICAgICAgICAgICBpZiAoaW5jb21pbmdEZXByZWNhdGVkICE9IGxvY2FsRGF0YS52ZXJzaW9uc1t2ZXJzaW9uXS5kZXByZWNhdGVkKSB7XG4gICAgICAgICAgICAgIGlmICghaW5jb21pbmdEZXByZWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgIHsgbmFtZTogbmFtZSwgdmVyc2lvbjogdmVyc2lvbiB9LFxuICAgICAgICAgICAgICAgICAgJ3VuZGVwcmVjYXRpbmcgQHtuYW1lfUBAe3ZlcnNpb259J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsRGF0YS52ZXJzaW9uc1t2ZXJzaW9uXS5kZXByZWNhdGVkO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICB7IG5hbWU6IG5hbWUsIHZlcnNpb246IHZlcnNpb24gfSxcbiAgICAgICAgICAgICAgICAgICdkZXByZWNhdGluZyBAe25hbWV9QEB7dmVyc2lvbn0nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsb2NhbERhdGEudmVyc2lvbnNbdmVyc2lvbl0uZGVwcmVjYXRlZCA9IGluY29taW5nRGVwcmVjYXRlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsb2NhbERhdGEudGltZSEubW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxEYXRhW1VTRVJTXSA9IGluY29taW5nUGtnW1VTRVJTXTtcbiAgICAgICAgbG9jYWxEYXRhW0RJU1RfVEFHU10gPSBpbmNvbWluZ1BrZ1tESVNUX1RBR1NdO1xuICAgICAgICBjYihudWxsKTtcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbiAoZXJyKTogdm9pZCB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHRhcmJhbGwuXG4gICAqIEBwYXJhbSB7Kn0gbmFtZVxuICAgKiBAcGFyYW0geyp9IGZpbGVuYW1lXG4gICAqIEBwYXJhbSB7Kn0gcmV2aXNpb25cbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIHJlbW92ZVRhcmJhbGwobmFtZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCByZXZpc2lvbjogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBhc3NlcnQodmFsaWRhdGVOYW1lKGZpbGVuYW1lKSk7XG5cbiAgICB0aGlzLl91cGRhdGVQYWNrYWdlKFxuICAgICAgbmFtZSxcbiAgICAgIChkYXRhLCBjYik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoZGF0YS5fYXR0YWNobWVudHNbZmlsZW5hbWVdKSB7XG4gICAgICAgICAgZGVsZXRlIGRhdGEuX2F0dGFjaG1lbnRzW2ZpbGVuYW1lXTtcbiAgICAgICAgICBjYihudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYih0aGlzLl9nZXRGaWxlTm90QXZhaWxhYmxlKCkpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycjogYW55KTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5fZ2V0TG9jYWxTdG9yYWdlKG5hbWUpO1xuXG4gICAgICAgIGlmIChzdG9yYWdlKSB7XG4gICAgICAgICAgc3RvcmFnZS5kZWxldGVQYWNrYWdlKGZpbGVuYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHRhcmJhbGwuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBwdWJsaWMgYWRkVGFyYmFsbChuYW1lOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBhc3NlcnQodmFsaWRhdGVOYW1lKGZpbGVuYW1lKSk7XG5cbiAgICBsZXQgbGVuZ3RoID0gMDtcbiAgICBjb25zdCBzaGFPbmVIYXNoID0gY3JlYXRlVGFyYmFsbEhhc2goKTtcbiAgICBjb25zdCB1cGxvYWRTdHJlYW0gPSBuZXcgVXBsb2FkVGFyYmFsbCh7fSk7XG4gICAgY29uc3QgX3RyYW5zZm9ybSA9IHVwbG9hZFN0cmVhbS5fdHJhbnNmb3JtO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UobmFtZSk7XG5cbiAgICB1cGxvYWRTdHJlYW0uYWJvcnQgPSBmdW5jdGlvbiAoKTogdm9pZCB7fTtcbiAgICB1cGxvYWRTdHJlYW0uZG9uZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHt9O1xuXG4gICAgdXBsb2FkU3RyZWFtLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoZGF0YSwgLi4uYXJncyk6IHZvaWQge1xuICAgICAgc2hhT25lSGFzaC51cGRhdGUoZGF0YSk7XG4gICAgICAvLyBtZWFzdXJlIHRoZSBsZW5ndGggZm9yIHZhbGlkYXRpb24gcmVhc29uc1xuICAgICAgbGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgICAgY29uc3QgYXBwbGllZERhdGEgPSBbZGF0YSwgLi4uYXJnc107XG4gICAgICAvLyBGSVhNRTogbm90IHN1cmUgYWJvdXQgdGhpcyBhcHByb2FjaCwgdHNjIGNvbXBsYWluc1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgX3RyYW5zZm9ybS5hcHBseSh1cGxvYWRTdHJlYW0sIGFwcGxpZWREYXRhKTtcbiAgICB9O1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpOiB2b2lkID0+IHtcbiAgICAgICAgdXBsb2FkU3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEZvcmJpZGRlbigpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHVwbG9hZFN0cmVhbTtcbiAgICB9XG5cbiAgICBpZiAoIXN0b3JhZ2UpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCk6IHZvaWQgPT4ge1xuICAgICAgICB1cGxvYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBcImNhbid0IHVwbG9hZCB0aGlzIHBhY2thZ2VcIik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB1cGxvYWRTdHJlYW07XG4gICAgfVxuXG4gICAgY29uc3Qgd3JpdGVTdHJlYW0gPSBzdG9yYWdlLndyaXRlVGFyYmFsbChmaWxlbmFtZSk7XG5cbiAgICB3cml0ZVN0cmVhbS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09IFNUT1JBR0UuRklMRV9FWElTVF9FUlJPUiB8fCBlcnIuY29kZSA9PT0gSFRUUF9TVEFUVVMuQ09ORkxJQ1QpIHtcbiAgICAgICAgdXBsb2FkU3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldENvbmZsaWN0KCkpO1xuICAgICAgICB1cGxvYWRTdHJlYW0uYWJvcnQoKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09IFNUT1JBR0UuTk9fU1VDSF9GSUxFX0VSUk9SIHx8IGVyci5jb2RlID09PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgcGFja2FnZSBleGlzdHMgdG8gdGhyb3cgYW4gYXBwcm9wcmlhdGUgbWVzc2FnZVxuICAgICAgICB0aGlzLmdldFBhY2thZ2VNZXRhZGF0YShuYW1lLCBmdW5jdGlvbiAoX2VycjogYW55KTogdm9pZCB7XG4gICAgICAgICAgaWYgKF9lcnIpIHtcbiAgICAgICAgICAgIHVwbG9hZFN0cmVhbS5lbWl0KCdlcnJvcicsIF9lcnIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGxvYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGxvYWRTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgd3JpdGVTdHJlYW0ub24oJ29wZW4nLCBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAvLyByZS1lbWl0dGluZyBvcGVuIGJlY2F1c2UgaXQncyBoYW5kbGVkIGluIHN0b3JhZ2UuanNcbiAgICAgIHVwbG9hZFN0cmVhbS5lbWl0KCdvcGVuJyk7XG4gICAgfSk7XG5cbiAgICB3cml0ZVN0cmVhbS5vbignc3VjY2VzcycsICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMuX3VwZGF0ZVBhY2thZ2UoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZXIoZGF0YSwgY2IpOiB2b2lkIHtcbiAgICAgICAgICBkYXRhLl9hdHRhY2htZW50c1tmaWxlbmFtZV0gPSB7XG4gICAgICAgICAgICBzaGFzdW06IHNoYU9uZUhhc2guZGlnZXN0KCdoZXgnKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNiKG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbiAoZXJyKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgdXBsb2FkU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXBsb2FkU3RyZWFtLmVtaXQoJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB1cGxvYWRTdHJlYW0uYWJvcnQgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICB3cml0ZVN0cmVhbS5hYm9ydCgpO1xuICAgIH07XG5cbiAgICB1cGxvYWRTdHJlYW0uZG9uZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHVwbG9hZFN0cmVhbS5lbWl0KCdlcnJvcicsIEVycm9yQ29kZS5nZXRCYWREYXRhKCdyZWZ1c2luZyB0byBhY2NlcHQgemVyby1sZW5ndGggZmlsZScpKTtcbiAgICAgICAgd3JpdGVTdHJlYW0uYWJvcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlU3RyZWFtLmRvbmUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdXBsb2FkU3RyZWFtLnBpcGUod3JpdGVTdHJlYW0pO1xuXG4gICAgcmV0dXJuIHVwbG9hZFN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSB0YXJiYWxsLlxuICAgKiBAcGFyYW0geyp9IG5hbWVcbiAgICogQHBhcmFtIHsqfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJuIHtSZWFkVGFyYmFsbH1cbiAgICovXG4gIHB1YmxpYyBnZXRUYXJiYWxsKG5hbWU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGFzc2VydCh2YWxpZGF0ZU5hbWUoZmlsZW5hbWUpKTtcblxuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UobmFtZSk7XG5cbiAgICBpZiAoXy5pc05pbChzdG9yYWdlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZhaWx1cmVTdHJlYW1SZXNwb25zZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJlYW1TdWNjZXNzUmVhZFRhckJhbGwoc3RvcmFnZSwgZmlsZW5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHN0cmVhbSB0aGF0IGVtaXRzIGEgcmVhZCBmYWlsdXJlLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHtSZWFkVGFyYmFsbH1cbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZUZhaWx1cmVTdHJlYW1SZXNwb25zZSgpIHtcbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZFRhcmJhbGwoe30pO1xuXG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKTogdm9pZCA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCB0aGlzLl9nZXRGaWxlTm90QXZhaWxhYmxlKCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3RyZWFtIHRoYXQgZW1pdHMgdGhlIHRhcmJhbGwgZGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RvcmFnZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZW5hbWVcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybiB7UmVhZFRhcmJhbGx9XG4gICAqL1xuICBwcml2YXRlIF9zdHJlYW1TdWNjZXNzUmVhZFRhckJhbGwoc3RvcmFnZTogYW55LCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRUYXJiYWxsKHt9KTtcbiAgICBjb25zdCByZWFkVGFyYmFsbFN0cmVhbSA9IHN0b3JhZ2UucmVhZFRhcmJhbGwoZmlsZW5hbWUpO1xuICAgIGNvbnN0IGU0MDQgPSBFcnJvckNvZGUuZ2V0Tm90Rm91bmQ7XG5cbiAgICBzdHJlYW0uYWJvcnQgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICBpZiAoXy5pc05pbChyZWFkVGFyYmFsbFN0cmVhbSkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJlYWRUYXJiYWxsU3RyZWFtLmFib3J0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlYWRUYXJiYWxsU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gU1RPUkFHRS5OT19TVUNIX0ZJTEVfRVJST1IgfHwgZXJyLmNvZGUgPT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlNDA0KCdubyBzdWNoIGZpbGUgYXZhaWxhYmxlJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlYWRUYXJiYWxsU3RyZWFtLm9uKCdjb250ZW50LWxlbmd0aCcsIGZ1bmN0aW9uIChjb250ZW50KTogdm9pZCB7XG4gICAgICBzdHJlYW0uZW1pdCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50KTtcbiAgICB9KTtcblxuICAgIHJlYWRUYXJiYWxsU3RyZWFtLm9uKCdvcGVuJywgZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgLy8gcmUtZW1pdHRpbmcgb3BlbiBiZWNhdXNlIGl0J3MgaGFuZGxlZCBpbiBzdG9yYWdlLmpzXG4gICAgICBzdHJlYW0uZW1pdCgnb3BlbicpO1xuICAgICAgcmVhZFRhcmJhbGxTdHJlYW0ucGlwZShzdHJlYW0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHBhY2thZ2UgYnkgbmFtZS5cbiAgICogQHBhcmFtIHsqfSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gY2FsbGJhY2tcbiAgICogQHJldHVybiB7RnVuY3Rpb259XG4gICAqL1xuICBwdWJsaWMgZ2V0UGFja2FnZU1ldGFkYXRhKG5hbWU6IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrID0gKCk6IHZvaWQgPT4ge30pOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5fZ2V0TG9jYWxTdG9yYWdlKG5hbWUpO1xuICAgIGlmIChfLmlzTmlsKHN0b3JhZ2UpKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soRXJyb3JDb2RlLmdldE5vdEZvdW5kKCkpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlYWRQYWNrYWdlKG5hbWUsIHN0b3JhZ2UsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYWNrYWdlTWV0YWRhdGFBc3luYyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1hbmlmZXN0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPE1hbmlmZXN0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdldFBhY2thZ2VNZXRhZGF0YShuYW1lLCAoZXJyOiBhbnksIG1ldGFkYXRhOiBNYW5pZmVzdCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUobWV0YWRhdGEpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlVmVyc2lvbnNBc3luYyhuYW1lOiBzdHJpbmcsIHBhY2thZ2VJbmZvOiBNYW5pZmVzdCk6IFByb21pc2U8TWFuaWZlc3Q+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TWFuaWZlc3Q+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVmVyc2lvbnMobmFtZSwgcGFja2FnZUluZm8sIChlcnI6IGFueSwgcmVzdWx0OiBNYW5pZmVzdCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBhIGxvY2FsIHBhY2thZ2UuXG4gICAqIEBwYXJhbSB7Kn0gc3RhcnRLZXlcbiAgICogQHBhcmFtIHsqfSBvcHRpb25zXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgcHVibGljIHNlYXJjaChzdGFydEtleTogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcbiAgICBkZWJ1Zygnb3B0aW9ucyBmb3Igc2VhcmNoICVvJywgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRUYXJiYWxsKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuX3NlYXJjaEVhY2hQYWNrYWdlKFxuICAgICAgKGl0ZW06IE1hbmlmZXN0LCBjYjogQ2FsbGJhY2spOiB2b2lkID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoaXRlbS50aW1lID4gcGFyc2VJbnQoc3RhcnRLZXksIDEwKSkge1xuICAgICAgICAgIHRoaXMuZ2V0UGFja2FnZU1ldGFkYXRhKGl0ZW0ubmFtZSwgKGVycjogYW55LCBkYXRhOiBNYW5pZmVzdCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKGl0ZW0udGltZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHByZXBhcmVTZWFyY2hQYWNrYWdlKGRhdGEsIHRpbWUpO1xuICAgICAgICAgICAgaWYgKF8uaXNOaWwocmVzdWx0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgc3RyZWFtLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNiKG51bGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNiKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24gb25FbmQoZXJyKTogdm9pZCB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0uZW5kKCk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSB3cmFwcGVyIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIHBhY2thZ2UgbG9jYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwa2dOYW1lIHBhY2thZ2UgbmFtZS5cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0TG9jYWxTdG9yYWdlKHBrZ05hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VQbHVnaW4uZ2V0UGFja2FnZVN0b3JhZ2UocGtnTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBhIGpzb24gZmlsZSBmcm9tIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdG9yYWdlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBwcml2YXRlIF9yZWFkUGFja2FnZShuYW1lOiBzdHJpbmcsIHN0b3JhZ2U6IGFueSwgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgc3RvcmFnZS5yZWFkUGFja2FnZShuYW1lLCAoZXJyLCByZXN1bHQpOiB2b2lkID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSBTVE9SQUdFLk5PX1NVQ0hfRklMRV9FUlJPUiB8fCBlcnIuY29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXROb3RGb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2sodGhpcy5faW50ZXJuYWxFcnJvcihlcnIsIFNUT1JBR0UuUEFDS0FHRV9GSUxFX05BTUUsICdlcnJvciByZWFkaW5nJykpO1xuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayhlcnIsIG5vcm1hbGl6ZVBhY2thZ2UocmVzdWx0KSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2Fsa3MgdGhyb3VnaCBlYWNoIHBhY2thZ2UgYW5kIGNhbGxzIGBvbl9wYWNrYWdlYCBvbiB0aGVtLlxuICAgKiBAcGFyYW0geyp9IG9uUGFja2FnZVxuICAgKiBAcGFyYW0geyp9IG9uRW5kXG4gICAqL1xuICBwcml2YXRlIF9zZWFyY2hFYWNoUGFja2FnZShvblBhY2thZ2U6IG9uU2VhcmNoUGFja2FnZSwgb25FbmQ6IG9uRW5kU2VhcmNoUGFja2FnZSk6IHZvaWQge1xuICAgIC8vIHNhdmUgd2FpdCB3aGV0aGVyIHBsdWdpbiBzdGlsbCBkbyBub3Qgc3VwcG9ydCBzZWFyY2ggZnVuY3Rpb25hbGl0eVxuICAgIGlmIChfLmlzTmlsKHRoaXMuc3RvcmFnZVBsdWdpbi5zZWFyY2gpKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdwbHVnaW4gc2VhcmNoIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICAgIG9uRW5kKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmFnZVBsdWdpbi5zZWFyY2gob25QYWNrYWdlLCBvbkVuZCwgdmFsaWRhdGVOYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZWl0aGVyIGEgcHJldmlvdXMgY3JlYXRlZCBsb2NhbCBwYWNrYWdlIG9yIGEgYm9pbGVycGxhdGUuXG4gICAqIEBwYXJhbSB7Kn0gcGtnTmFtZVxuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVhZENyZWF0ZVBhY2thZ2UocGtnTmFtZTogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlOiBhbnkgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UocGtnTmFtZSk7XG4gICAgaWYgKF8uaXNOaWwoc3RvcmFnZSkpIHtcbiAgICAgIHRoaXMuX2NyZWF0ZU5ld1BhY2thZ2UocGtnTmFtZSwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0b3JhZ2UucmVhZFBhY2thZ2UocGtnTmFtZSwgKGVyciwgZGF0YSk6IHZvaWQgPT4ge1xuICAgICAgLy8gVE9ETzogcmFjZSBjb25kaXRpb25cbiAgICAgIGlmIChfLmlzTmlsKGVycikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gU1RPUkFHRS5OT19TVUNIX0ZJTEVfRVJST1IgfHwgZXJyLmNvZGUgPT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICAgIGRhdGEgPSBnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZShwa2dOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sodGhpcy5faW50ZXJuYWxFcnJvcihlcnIsIFNUT1JBR0UuUEFDS0FHRV9GSUxFX05BTUUsICdlcnJvciByZWFkaW5nJykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKG51bGwsIG5vcm1hbGl6ZVBhY2thZ2UoZGF0YSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlTmV3UGFja2FnZShuYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBDYWxsYmFjayk6IENhbGxiYWNrIHtcbiAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgbm9ybWFsaXplUGFja2FnZShnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZShuYW1lKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBpbnRlcm5hbCBlcnJvclxuICAgKiBAcGFyYW0geyp9IGVyclxuICAgKiBAcGFyYW0geyp9IGZpbGVcbiAgICogQHBhcmFtIHsqfSBtZXNzYWdlXG4gICAqIEByZXR1cm4ge09iamVjdH0gRXJyb3IgaW5zdGFuY2VcbiAgICovXG4gIHByaXZhdGUgX2ludGVybmFsRXJyb3IoZXJyOiBzdHJpbmcsIGZpbGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogYW55IHtcbiAgICB0aGlzLmxvZ2dlci5lcnJvcih7IGVycjogZXJyLCBmaWxlOiBmaWxlIH0sIGAke21lc3NhZ2V9ICBAe2ZpbGV9OiBAeyFlcnIubWVzc2FnZX1gKTtcblxuICAgIHJldHVybiBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gbmFtZSBwYWNrYWdlIG5hbWVcbiAgICogQHBhcmFtIHsqfSB1cGRhdGVIYW5kbGVyIGZ1bmN0aW9uKHBhY2thZ2UsIGNiKSAtIHVwZGF0ZSBmdW5jdGlvblxuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrIGNhbGxiYWNrIHRoYXQgZ2V0cyBpbnZva2VkIGFmdGVyIGl0J3MgYWxsIHVwZGF0ZWRcbiAgICogQHJldHVybiB7RnVuY3Rpb259XG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVQYWNrYWdlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB1cGRhdGVIYW5kbGVyOiBTdG9yYWdlVXBkYXRlQ2FsbGJhY2ssXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UobmFtZSk7XG5cbiAgICBpZiAoIXN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Tm90Rm91bmQoKSk7XG4gICAgfVxuXG4gICAgc3RvcmFnZS51cGRhdGVQYWNrYWdlKFxuICAgICAgbmFtZSxcbiAgICAgIHVwZGF0ZUhhbmRsZXIsXG4gICAgICB0aGlzLl93cml0ZVBhY2thZ2UuYmluZCh0aGlzKSxcbiAgICAgIG5vcm1hbGl6ZVBhY2thZ2UsXG4gICAgICBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByZXZpc2lvbiAoX3Jldikgc3RyaW5nIGZvciBhIHBhY2thZ2UuXG4gICAqIEBwYXJhbSB7Kn0gbmFtZVxuICAgKiBAcGFyYW0geyp9IGpzb25cbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIHByaXZhdGUgX3dyaXRlUGFja2FnZShuYW1lOiBzdHJpbmcsIGpzb246IE1hbmlmZXN0LCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlOiBhbnkgPSB0aGlzLl9nZXRMb2NhbFN0b3JhZ2UobmFtZSk7XG4gICAgaWYgKF8uaXNOaWwoc3RvcmFnZSkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBzdG9yYWdlLnNhdmVQYWNrYWdlKG5hbWUsIHRoaXMuX3NldERlZmF1bHRSZXZpc2lvbihqc29uKSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RGVmYXVsdFJldmlzaW9uKGpzb246IE1hbmlmZXN0KTogTWFuaWZlc3Qge1xuICAgIC8vIGNhbGN1bGF0ZSByZXZpc2lvbiBmcm9tIGNvdWNoIGRiXG4gICAgaWYgKF8uaXNTdHJpbmcoanNvbi5fcmV2KSA9PT0gZmFsc2UpIHtcbiAgICAgIGpzb24uX3JldiA9IFNUT1JBR0UuREVGQVVMVF9SRVZJU0lPTjtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIGludGVuZGVkIGluIGRlYnVnIG1vZGUgd2UgZG8gbm90IHdhbnQgbW9kaWZ5IHRoZSBzdG9yZSByZXZpc2lvblxuICAgIGlmIChfLmlzTmlsKHRoaXMuY29uZmlnLl9kZWJ1ZykpIHtcbiAgICAgIGpzb24uX3JldiA9IGdlbmVyYXRlUmV2aXNpb24oanNvbi5fcmV2KTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHByaXZhdGUgX2RlbGV0ZUF0dGFjaG1lbnRzKHN0b3JhZ2U6IGFueSwgYXR0YWNobWVudHM6IHN0cmluZ1tdLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBkZWJ1ZygnW3N0b3JhZ2UvX2RlbGV0ZUF0dGFjaG1lbnRzXSBkZWxldGUgYXR0YWNobWVudHMgdG90YWw6ICVvJywgYXR0YWNobWVudHM/Lmxlbmd0aCk7XG4gICAgY29uc3QgdW5saW5rTmV4dCA9IGZ1bmN0aW9uIChjYik6IHZvaWQge1xuICAgICAgaWYgKF8uaXNFbXB0eShhdHRhY2htZW50cykpIHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBhdHRhY2htZW50cy5zaGlmdCgpO1xuICAgICAgc3RvcmFnZS5kZWxldGVQYWNrYWdlKGF0dGFjaG1lbnQsIGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgdW5saW5rTmV4dChjYik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdW5saW5rTmV4dChmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAvLyB0cnkgdG8gdW5saW5rIHRoZSBkaXJlY3RvcnksIGJ1dCBpZ25vcmUgZXJyb3JzIGJlY2F1c2UgaXQgY2FuIGZhaWxcbiAgICAgIHN0b3JhZ2UucmVtb3ZlUGFja2FnZShmdW5jdGlvbiAoZXJyKTogdm9pZCB7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgdGhlIGRpc3QgZmlsZSByZW1haW5zIGFzIHRoZSBzYW1lIHByb3RvY29sXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIG1ldGFkYXRhXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB1cExpbmtLZXkgcmVnaXN0cnkga2V5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVVcGxpbmtUb1JlbW90ZVByb3RvY29sKGhhc2g6IERpc3RGaWxlLCB1cExpbmtLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIGlmIHdlIGdvdCB0aGlzIGluZm9ybWF0aW9uIGZyb20gYSBrbm93biByZWdpc3RyeSxcbiAgICAvLyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wgZm9yIHRoZSB0YXJiYWxsXG4gICAgLy9cbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JsaWR3a2Evc2lub3BpYS9pc3N1ZXMvMTY2XG4gICAgY29uc3QgdGFyYmFsbFVybDogYW55ID0gVXJsTm9kZS5wYXJzZShoYXNoLnVybCk7XG4gICAgY29uc3QgdXBsaW5rVXJsOiBhbnkgPSBVcmxOb2RlLnBhcnNlKHRoaXMuY29uZmlnLnVwbGlua3NbdXBMaW5rS2V5XS51cmwpO1xuXG4gICAgaWYgKHVwbGlua1VybC5ob3N0ID09PSB0YXJiYWxsVXJsLmhvc3QpIHtcbiAgICAgIHRhcmJhbGxVcmwucHJvdG9jb2wgPSB1cGxpbmtVcmwucHJvdG9jb2w7XG4gICAgICBoYXNoLnJlZ2lzdHJ5ID0gdXBMaW5rS2V5O1xuICAgICAgaGFzaC51cmwgPSBVcmxOb2RlLmZvcm1hdCh0YXJiYWxsVXJsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2VjcmV0KGNvbmZpZzogQ29uZmlnKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzZWNyZXRLZXkgPSBhd2FpdCB0aGlzLnN0b3JhZ2VQbHVnaW4uZ2V0U2VjcmV0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlUGx1Z2luLnNldFNlY3JldChjb25maWcuY2hlY2tTZWNyZXRLZXkoc2VjcmV0S2V5KSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVRva2VuKHRva2VuOiBUb2tlbik6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih0aGlzLnN0b3JhZ2VQbHVnaW4uc2F2ZVRva2VuKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgRXJyb3JDb2RlLmdldENvZGUoSFRUUF9TVEFUVVMuU0VSVklDRV9VTkFWQUlMQUJMRSwgU1VQUE9SVF9FUlJPUlMuUExVR0lOX01JU1NJTkdfSU5URVJGQUNFKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlUGx1Z2luLnNhdmVUb2tlbih0b2tlbik7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlVG9rZW4odXNlcjogc3RyaW5nLCB0b2tlbktleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHRoaXMuc3RvcmFnZVBsdWdpbi5kZWxldGVUb2tlbikgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLlNFUlZJQ0VfVU5BVkFJTEFCTEUsIFNVUFBPUlRfRVJST1JTLlBMVUdJTl9NSVNTSU5HX0lOVEVSRkFDRSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZVBsdWdpbi5kZWxldGVUb2tlbih1c2VyLCB0b2tlbktleSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZFRva2VucyhmaWx0ZXI6IFRva2VuRmlsdGVyKTogUHJvbWlzZTxUb2tlbltdPiB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih0aGlzLnN0b3JhZ2VQbHVnaW4ucmVhZFRva2VucykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLlNFUlZJQ0VfVU5BVkFJTEFCTEUsIFNVUFBPUlRfRVJST1JTLlBMVUdJTl9NSVNTSU5HX0lOVEVSRkFDRSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZVBsdWdpbi5yZWFkVG9rZW5zKGZpbHRlcik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9jYWxTdG9yYWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxJQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFnQkEsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBU0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sYUFB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
@@ -118,18 +118,18 @@ function cleanUpLinksRef(keepUpLinkData, result) {
118
118
  * @param {*} name
119
119
  * @param {*} localStorage
120
120
  */
121
- function checkPackageLocal(name, localStorage) {
122
- return new Promise((resolve, reject) => {
123
- localStorage.getPackageMetadata(name, (err, results) => {
124
- if (!_lodash.default.isNil(err) && err.status !== _constants.HTTP_STATUS.NOT_FOUND) {
125
- return reject(err);
126
- }
127
- if (results) {
128
- return reject(_utils2.ErrorCode.getConflict(_constants.API_ERROR.PACKAGE_EXIST));
129
- }
130
- return resolve();
131
- });
132
- });
121
+ async function checkPackageLocal(name, localStorage) {
122
+ try {
123
+ const results = await localStorage.getPackageMetadataAsync(name);
124
+ if (results) {
125
+ throw _utils2.ErrorCode.getConflict(_constants.API_ERROR.PACKAGE_EXIST);
126
+ }
127
+ } catch (err) {
128
+ if (err.status === _constants.HTTP_STATUS.NOT_FOUND) {
129
+ return;
130
+ }
131
+ throw err;
132
+ }
133
133
  }
134
134
  function publishPackage(name, metadata, localStorage) {
135
135
  return new Promise((resolve, reject) => {
@@ -279,4 +279,4 @@ function convertAbbreviatedManifest(manifest) {
279
279
  // @ts-ignore
280
280
  return convertedManifest;
281
281
  }
282
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfY29yZSIsIl9zZWFyY2hJbmRleGVyIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJfdXRpbHMyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGVidWciLCJjcmVhdGVEZWJ1ZyIsImdlbmVyYXRlUGFja2FnZVRlbXBsYXRlIiwibmFtZSIsInZlcnNpb25zIiwidGltZSIsIlVTRVJTIiwiRElTVF9UQUdTIiwiX3VwbGlua3MiLCJfZGlzdGZpbGVzIiwiX2F0dGFjaG1lbnRzIiwiX3JldiIsIm5vcm1hbGl6ZVBhY2thZ2UiLCJwa2ciLCJwa2dQcm9wZXJ0aWVzIiwiZm9yRWFjaCIsImtleSIsInBrZ1Byb3AiLCJfIiwiaXNOaWwiLCJpc09iamVjdCIsImlzU3RyaW5nIiwiU1RPUkFHRSIsIkRFRkFVTFRfUkVWSVNJT04iLCJfaWQiLCJub3JtYWxpemVEaXN0VGFncyIsImdlbmVyYXRlUmV2aXNpb24iLCJyZXYiLCJzcGxpdCIsImdlbmVyYXRlUmFuZG9tSGV4U3RyaW5nIiwiZ2V0TGF0ZXN0UmVhZG1lIiwiZGlzdFRhZ3MiLCJsYXRlc3RWZXJzaW9uIiwicmVhZG1lIiwidHJpbSIsInJlYWRtZURpc3RUYWdzUHJpb3JpdHkiLCJtYXAiLCJ0YWciLCJ2ZXJzaW9uIiwiY2xlYW5VcFJlYWRtZSIsIldISVRFTElTVCIsImV4cG9ydHMiLCJjbGVhblVwTGlua3NSZWYiLCJrZWVwVXBMaW5rRGF0YSIsInJlc3VsdCIsInByb3BlcnR5VG9LZWVwIiwicHVzaCIsImkiLCJpbmRleE9mIiwiY2hlY2tQYWNrYWdlTG9jYWwiLCJsb2NhbFN0b3JhZ2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImdldFBhY2thZ2VNZXRhZGF0YSIsImVyciIsInJlc3VsdHMiLCJzdGF0dXMiLCJIVFRQX1NUQVRVUyIsIk5PVF9GT1VORCIsIkVycm9yQ29kZSIsImdldENvbmZsaWN0IiwiQVBJX0VSUk9SIiwiUEFDS0FHRV9FWElTVCIsInB1Ymxpc2hQYWNrYWdlIiwibWV0YWRhdGEiLCJhZGRQYWNrYWdlIiwibGF0ZXN0IiwiaXNOdWxsIiwiaXNVbmRlZmluZWQiLCJTZWFyY2hNZW1vcnlJbmRleGVyIiwiYWRkIiwiY2F0Y2giLCJyZWFzb24iLCJsb2dnZXIiLCJlcnJvciIsImNoZWNrUGFja2FnZVJlbW90ZSIsImlzQWxsb3dQdWJsaXNoT2ZmbGluZSIsInN5bmNNZXRhZGF0YSIsInBhY2thZ2VKc29uTG9jYWwiLCJ1cExpbmtzRXJyb3JzIiwiZXJyb3JJdGVtIiwibGVuZ3RoIiwiZ2V0U2VydmljZVVuYXZhaWxhYmxlIiwiVVBMSU5LX09GRkxJTkVfUFVCTElTSCIsIm1lcmdlVXBsaW5rVGltZUludG9Mb2NhbCIsImNhY2hlTWFuaWZlc3QiLCJyZW1vdGVNYW5pZmVzdCIsInByZXBhcmVTZWFyY2hQYWNrYWdlIiwiZGF0YSIsInBrZ1V0aWxzIiwiZ2V0TGF0ZXN0IiwiZGVzY3JpcHRpb24iLCJtYWludGFpbmVycyIsImF1dGhvciIsImZpbHRlciIsIkJvb2xlYW4iLCJyZXBvc2l0b3J5IiwicmVhZG1lRmlsZW5hbWUiLCJob21lcGFnZSIsImtleXdvcmRzIiwibW9kaWZpZWQiLCJidWdzIiwibGljZW5zZSIsImlzUHVibGlzaGFibGVQYWNrYWdlIiwia2V5cyIsIk9iamVjdCIsImluY2x1ZGVzIiwiaGFzSW5zdGFsbFNjcmlwdCIsInNjcmlwdHMiLCJmaW5kIiwiaXRlbSIsInVuZGVmaW5lZCIsImNvbnZlcnRBYmJyZXZpYXRlZE1hbmlmZXN0IiwibWFuaWZlc3QiLCJhYmJyZXZpYXRlZFZlcnNpb25zIiwicmVkdWNlIiwiYWNjIiwiX3ZlcnNpb24iLCJfdmVyc2lvbl9hYmJyZXZpYXRlZCIsImRlcHJlY2F0ZWQiLCJiaW4iLCJkaXN0IiwiZW5naW5lcyIsImNwdSIsIm9zIiwiZnVuZGluZyIsImRpcmVjdG9yaWVzIiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwZW5kZW5jaWVzIiwicGVlckRlcGVuZGVuY2llcyIsInBlZXJEZXBlbmRlbmNpZXNNZXRhIiwib3B0aW9uYWxEZXBlbmRlbmNpZXMiLCJidW5kbGVEZXBlbmRlbmNpZXMiLCJfaGFzU2hyaW5rd3JhcCIsImNvbnZlcnRlZE1hbmlmZXN0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9zdG9yYWdlLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVEZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBwa2dVdGlscyB9IGZyb20gJ0B2ZXJkYWNjaW8vY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hNZW1vcnlJbmRleGVyIH0gZnJvbSAnQHZlcmRhY2Npby9zZWFyY2gtaW5kZXhlcic7XG5pbXBvcnQgeyBBYmJyZXZpYXRlZE1hbmlmZXN0LCBBYmJyZXZpYXRlZFZlcnNpb25zLCBNYW5pZmVzdCwgVmVyc2lvbiB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb21IZXhTdHJpbmcgfSBmcm9tICdAdmVyZGFjY2lvL3V0aWxzJztcblxuaW1wb3J0IHsgQVBJX0VSUk9SLCBESVNUX1RBR1MsIEhUVFBfU1RBVFVTLCBTVE9SQUdFLCBVU0VSUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBMb2NhbFN0b3JhZ2UgZnJvbSAnLi9sb2NhbC1zdG9yYWdlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEVycm9yQ29kZSwgaXNPYmplY3QsIG5vcm1hbGl6ZURpc3RUYWdzIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGRlYnVnID0gY3JlYXRlRGVidWcoJ3ZlcmRhY2NpbzpzdG9yYWdlLXV0aWxzJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBhY2thZ2VUZW1wbGF0ZShuYW1lOiBzdHJpbmcpOiBNYW5pZmVzdCB7XG4gIHJldHVybiB7XG4gICAgLy8gc3RhbmRhcmQgdGhpbmdzXG4gICAgbmFtZSxcbiAgICB2ZXJzaW9uczoge30sXG4gICAgdGltZToge30sXG4gICAgW1VTRVJTXToge30sXG4gICAgW0RJU1RfVEFHU106IHt9LFxuICAgIF91cGxpbmtzOiB7fSxcbiAgICBfZGlzdGZpbGVzOiB7fSxcbiAgICBfYXR0YWNobWVudHM6IHt9LFxuICAgIF9yZXY6ICcnLFxuICB9O1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBwYWNrYWdlIHByb3BlcnRpZXMsIHRhZ3MsIHJldmlzaW9uIGlkLlxuICogQHBhcmFtIHtPYmplY3R9IHBrZyBwYWNrYWdlIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhY2thZ2UocGtnOiBNYW5pZmVzdCk6IE1hbmlmZXN0IHtcbiAgY29uc3QgcGtnUHJvcGVydGllcyA9IFsndmVyc2lvbnMnLCAnZGlzdC10YWdzJywgJ19kaXN0ZmlsZXMnLCAnX2F0dGFjaG1lbnRzJywgJ191cGxpbmtzJywgJ3RpbWUnXTtcblxuICBwa2dQcm9wZXJ0aWVzLmZvckVhY2goKGtleSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHBrZ1Byb3AgPSBwa2dba2V5XTtcblxuICAgIGlmIChfLmlzTmlsKHBrZ1Byb3ApIHx8IGlzT2JqZWN0KHBrZ1Byb3ApID09PSBmYWxzZSkge1xuICAgICAgcGtnW2tleV0gPSB7fTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChfLmlzU3RyaW5nKHBrZy5fcmV2KSA9PT0gZmFsc2UpIHtcbiAgICBwa2cuX3JldiA9IFNUT1JBR0UuREVGQVVMVF9SRVZJU0lPTjtcbiAgfVxuXG4gIGlmIChfLmlzU3RyaW5nKHBrZy5faWQpID09PSBmYWxzZSkge1xuICAgIHBrZy5faWQgPSBwa2cubmFtZTtcbiAgfVxuXG4gIC8vIG5vcm1hbGl6ZSBkaXN0LXRhZ3NcbiAgbm9ybWFsaXplRGlzdFRhZ3MocGtnKTtcblxuICByZXR1cm4gcGtnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSZXZpc2lvbihyZXY6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IF9yZXYgPSByZXYuc3BsaXQoJy0nKTtcblxuICByZXR1cm4gKCtfcmV2WzBdIHx8IDApICsgMSArICctJyArIGdlbmVyYXRlUmFuZG9tSGV4U3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXRlc3RSZWFkbWUocGtnOiBNYW5pZmVzdCk6IHN0cmluZyB7XG4gIGNvbnN0IHZlcnNpb25zID0gcGtnWyd2ZXJzaW9ucyddIHx8IHt9O1xuICBjb25zdCBkaXN0VGFncyA9IHBrZ1tESVNUX1RBR1NdIHx8IHt9O1xuICAvLyBGSVhNRTogaGVyZSBpcyBhIGJpdCB0cmlja3kgYWRkIHRoZSB0eXBlc1xuICBjb25zdCBsYXRlc3RWZXJzaW9uOiBWZXJzaW9uIHwgYW55ID0gZGlzdFRhZ3NbJ2xhdGVzdCddID8gdmVyc2lvbnNbZGlzdFRhZ3NbJ2xhdGVzdCddXSB8fCB7fSA6IHt9O1xuICBsZXQgcmVhZG1lID0gXy50cmltKHBrZy5yZWFkbWUgfHwgbGF0ZXN0VmVyc2lvbi5yZWFkbWUgfHwgJycpO1xuICBpZiAocmVhZG1lKSB7XG4gICAgcmV0dXJuIHJlYWRtZTtcbiAgfVxuXG4gIC8vIEluIGNhc2Ugb2YgZW1wdHkgcmVhZG1lIC0gdHJ5aW5nIHRvIGdldCBBTlkgcmVhZG1lIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6ICduZXh0JywnYmV0YScsJ2FscGhhJywndGVzdCcsJ2RldicsJ2NhbmFyeSdcbiAgY29uc3QgcmVhZG1lRGlzdFRhZ3NQcmlvcml0eSA9IFsnbmV4dCcsICdiZXRhJywgJ2FscGhhJywgJ3Rlc3QnLCAnZGV2JywgJ2NhbmFyeSddO1xuICByZWFkbWVEaXN0VGFnc1ByaW9yaXR5Lm1hcChmdW5jdGlvbiAodGFnKTogc3RyaW5nIHwgdm9pZCB7XG4gICAgaWYgKHJlYWRtZSkge1xuICAgICAgcmV0dXJuIHJlYWRtZTtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbjogVmVyc2lvbiB8IGFueSA9IGRpc3RUYWdzW3RhZ10gPyB2ZXJzaW9uc1tkaXN0VGFnc1t0YWddXSB8fCB7fSA6IHt9O1xuICAgIHJlYWRtZSA9IF8udHJpbSh2ZXJzaW9uLnJlYWRtZSB8fCByZWFkbWUpO1xuICB9KTtcbiAgcmV0dXJuIHJlYWRtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuVXBSZWFkbWUodmVyc2lvbjogVmVyc2lvbik6IFZlcnNpb24ge1xuICBpZiAoXy5pc05pbCh2ZXJzaW9uKSA9PT0gZmFsc2UpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZGVsZXRlIHZlcnNpb24ucmVhZG1lO1xuICB9XG5cbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbmV4cG9ydCBjb25zdCBXSElURUxJU1QgPSBbXG4gICdfcmV2JyxcbiAgJ25hbWUnLFxuICAndmVyc2lvbnMnLFxuICAnZGlzdC10YWdzJyxcbiAgJ3JlYWRtZScsXG4gICd0aW1lJyxcbiAgJ19pZCcsXG4gICd1c2VycycsXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5VcExpbmtzUmVmKGtlZXBVcExpbmtEYXRhOiBib29sZWFuLCByZXN1bHQ6IE1hbmlmZXN0KTogTWFuaWZlc3Qge1xuICBjb25zdCBwcm9wZXJ0eVRvS2VlcCA9IFsuLi5XSElURUxJU1RdO1xuICBpZiAoa2VlcFVwTGlua0RhdGEgPT09IHRydWUpIHtcbiAgICBwcm9wZXJ0eVRvS2VlcC5wdXNoKCdfdXBsaW5rcycpO1xuICB9XG5cbiAgZm9yIChjb25zdCBpIGluIHJlc3VsdCkge1xuICAgIGlmIChwcm9wZXJ0eVRvS2VlcC5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgLy8gUmVtb3ZlIHNlY3Rpb25zIGxpa2UgJ191cGxpbmtzJyBmcm9tIHJlc3BvbnNlXG4gICAgICBkZWxldGUgcmVzdWx0W2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHBhY2thZ2UgaXQgaXMgYWxyZWFkeSBhIGxvY2FsIHBhY2thZ2VcbiAqIEBwYXJhbSB7Kn0gbmFtZVxuICogQHBhcmFtIHsqfSBsb2NhbFN0b3JhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUGFja2FnZUxvY2FsKG5hbWU6IHN0cmluZywgbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICBsb2NhbFN0b3JhZ2UuZ2V0UGFja2FnZU1ldGFkYXRhKG5hbWUsIChlcnIsIHJlc3VsdHMpOiB2b2lkID0+IHtcbiAgICAgIGlmICghXy5pc05pbChlcnIpICYmIGVyci5zdGF0dXMgIT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICByZXR1cm4gcmVqZWN0KEVycm9yQ29kZS5nZXRDb25mbGljdChBUElfRVJST1IuUEFDS0FHRV9FWElTVCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoUGFja2FnZShcbiAgbmFtZTogc3RyaW5nLFxuICBtZXRhZGF0YTogYW55LFxuICBsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgbG9jYWxTdG9yYWdlLmFkZFBhY2thZ2UobmFtZSwgbWV0YWRhdGEsIChlcnIsIGxhdGVzdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFfLmlzTnVsbChlcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIV8uaXNVbmRlZmluZWQobGF0ZXN0KSkge1xuICAgICAgICBTZWFyY2hNZW1vcnlJbmRleGVyLmFkZChsYXRlc3QpLmNhdGNoKChyZWFzb24pID0+IHtcbiAgICAgICAgICBkZWJ1ZygnaW5kZXhlciBoYXMgZmFpbGVkIG9uIGFkZCBpdGVtICVvJywgcmVhc29uKTtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ2luZGV4ZXIgaGFzIGZhaWxlZCBvbiBhZGQgaXRlbScpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQYWNrYWdlUmVtb3RlKFxuICBuYW1lOiBzdHJpbmcsXG4gIGlzQWxsb3dQdWJsaXNoT2ZmbGluZTogYm9vbGVhbixcbiAgc3luY01ldGFkYXRhOiBhbnlcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgIHN5bmNNZXRhZGF0YShuYW1lLCBudWxsLCB7fSwgKGVyciwgcGFja2FnZUpzb25Mb2NhbCwgdXBMaW5rc0Vycm9ycyk6IHZvaWQgPT4ge1xuICAgICAgLy8gc29tZXRoaW5nIHdlaXJkXG4gICAgICBpZiAoZXJyICYmIGVyci5zdGF0dXMgIT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNraW5nIHBhY2thZ2UgZXhpc3QgYWxyZWFkeVxuICAgICAgaWYgKF8uaXNOaWwocGFja2FnZUpzb25Mb2NhbCkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoRXJyb3JDb2RlLmdldENvbmZsaWN0KEFQSV9FUlJPUi5QQUNLQUdFX0VYSVNUKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGVycm9ySXRlbSA9IDA7IGVycm9ySXRlbSA8IHVwTGlua3NFcnJvcnMubGVuZ3RoOyBlcnJvckl0ZW0rKykge1xuICAgICAgICAvLyBjaGVja2luZyBlcnJvclxuICAgICAgICAvLyBpZiB1cGxpbmsgZmFpbHMgd2l0aCBhIHN0YXR1cyBvdGhlciB0aGFuIDQwNCwgd2UgcmVwb3J0IGZhaWx1cmVcbiAgICAgICAgaWYgKF8uaXNOaWwodXBMaW5rc0Vycm9yc1tlcnJvckl0ZW1dWzBdKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAodXBMaW5rc0Vycm9yc1tlcnJvckl0ZW1dWzBdLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgICBpZiAoaXNBbGxvd1B1Ymxpc2hPZmZsaW5lKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZWplY3QoRXJyb3JDb2RlLmdldFNlcnZpY2VVbmF2YWlsYWJsZShBUElfRVJST1IuVVBMSU5LX09GRkxJTkVfUFVCTElTSCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLy8gdGVzdGVkIG9uIHY2XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsKGNhY2hlTWFuaWZlc3Q6IE1hbmlmZXN0LCByZW1vdGVNYW5pZmVzdDogTWFuaWZlc3QpOiBhbnkge1xuICBpZiAoJ3RpbWUnIGluIHJlbW90ZU1hbmlmZXN0KSB7XG4gICAgLy8gcmVtb3RlIG92ZXJyaWRlIGNhY2hlIHRpbWUgY29uZmxpY3RzXG4gICAgcmV0dXJuIHsgLi4uY2FjaGVNYW5pZmVzdCwgdGltZTogeyAuLi5jYWNoZU1hbmlmZXN0LnRpbWUsIC4uLnJlbW90ZU1hbmlmZXN0LnRpbWUgfSB9O1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlTWFuaWZlc3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU2VhcmNoUGFja2FnZShkYXRhOiBNYW5pZmVzdCwgdGltZTogdW5rbm93bik6IGFueSB7XG4gIGNvbnN0IGxhdGVzdCA9IHBrZ1V0aWxzLmdldExhdGVzdChkYXRhKTtcblxuICBpZiAobGF0ZXN0ICYmIGRhdGEudmVyc2lvbnNbbGF0ZXN0XSkge1xuICAgIGNvbnN0IHZlcnNpb246IFZlcnNpb24gPSBkYXRhLnZlcnNpb25zW2xhdGVzdF07XG4gICAgY29uc3QgdmVyc2lvbnM6IGFueSA9IHsgW2xhdGVzdF06ICdsYXRlc3QnIH07XG4gICAgY29uc3QgcGtnOiBhbnkgPSB7XG4gICAgICBuYW1lOiB2ZXJzaW9uLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdmVyc2lvbi5kZXNjcmlwdGlvbixcbiAgICAgIFtESVNUX1RBR1NdOiB7IGxhdGVzdCB9LFxuICAgICAgbWFpbnRhaW5lcnM6IHZlcnNpb24ubWFpbnRhaW5lcnMgfHwgW3ZlcnNpb24uYXV0aG9yXS5maWx0ZXIoQm9vbGVhbiksXG4gICAgICBhdXRob3I6IHZlcnNpb24uYXV0aG9yLFxuICAgICAgcmVwb3NpdG9yeTogdmVyc2lvbi5yZXBvc2l0b3J5LFxuICAgICAgcmVhZG1lRmlsZW5hbWU6IHZlcnNpb24ucmVhZG1lRmlsZW5hbWUgfHwgJycsXG4gICAgICBob21lcGFnZTogdmVyc2lvbi5ob21lcGFnZSxcbiAgICAgIGtleXdvcmRzOiB2ZXJzaW9uLmtleXdvcmRzLFxuICAgICAgdGltZToge1xuICAgICAgICBtb2RpZmllZDogdGltZSxcbiAgICAgIH0sXG4gICAgICBidWdzOiB2ZXJzaW9uLmJ1Z3MsXG4gICAgICBsaWNlbnNlOiB2ZXJzaW9uLmxpY2Vuc2UsXG4gICAgICB2ZXJzaW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBrZztcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHBhY2thZ2UgbWV0YWR0YSBoYXMgZW5vdWdoIGRhdGEgdG8gYmUgcHVibGlzaGVkXG4gKiBAcGFyYW0gcGtnIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1B1Ymxpc2hhYmxlUGFja2FnZShwa2c6IE1hbmlmZXN0KTogYm9vbGVhbiB7XG4gIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocGtnKTtcblxuICByZXR1cm4ga2V5cy5pbmNsdWRlcygndmVyc2lvbnMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0luc3RhbGxTY3JpcHQodmVyc2lvbjogVmVyc2lvbikge1xuICBpZiAodmVyc2lvbj8uc2NyaXB0cykge1xuICAgIGNvbnN0IHNjcmlwdHMgPSBPYmplY3Qua2V5cyh2ZXJzaW9uLnNjcmlwdHMpO1xuICAgIHJldHVybiAoXG4gICAgICBzY3JpcHRzLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIFsnaW5zdGFsbCcsICdwcmVpbnN0YWxsJywgJ3Bvc3RpbnN0YWxsJ10uaW5jbHVkZXMoaXRlbSk7XG4gICAgICB9KSAhPT0gdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QWJicmV2aWF0ZWRNYW5pZmVzdChtYW5pZmVzdDogTWFuaWZlc3QpOiBBYmJyZXZpYXRlZE1hbmlmZXN0IHtcbiAgY29uc3QgYWJicmV2aWF0ZWRWZXJzaW9ucyA9IE9iamVjdC5rZXlzKG1hbmlmZXN0LnZlcnNpb25zKS5yZWR1Y2UoXG4gICAgKGFjYzogQWJicmV2aWF0ZWRWZXJzaW9ucywgdmVyc2lvbjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBfdmVyc2lvbiA9IG1hbmlmZXN0LnZlcnNpb25zW3ZlcnNpb25dO1xuICAgICAgLy8gVGhpcyBzaG91bGQgYmUgYWxpZ24gd2l0aCB0aGlzIGRvY3VtZW50XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbnBtL3JlZ2lzdHJ5L2Jsb2IvbWFzdGVyL2RvY3MvcmVzcG9uc2VzL3BhY2thZ2UtbWV0YWRhdGEubWQjYWJicmV2aWF0ZWQtdmVyc2lvbi1vYmplY3RcbiAgICAgIGNvbnN0IF92ZXJzaW9uX2FiYnJldmlhdGVkID0ge1xuICAgICAgICBuYW1lOiBfdmVyc2lvbi5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBfdmVyc2lvbi52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogX3ZlcnNpb24uZGVzY3JpcHRpb24sXG4gICAgICAgIGRlcHJlY2F0ZWQ6IF92ZXJzaW9uLmRlcHJlY2F0ZWQsXG4gICAgICAgIGJpbjogX3ZlcnNpb24uYmluLFxuICAgICAgICBkaXN0OiBfdmVyc2lvbi5kaXN0LFxuICAgICAgICBlbmdpbmVzOiBfdmVyc2lvbi5lbmdpbmVzLFxuICAgICAgICBjcHU6IF92ZXJzaW9uLmNwdSxcbiAgICAgICAgb3M6IF92ZXJzaW9uLm9zLFxuICAgICAgICBmdW5kaW5nOiBfdmVyc2lvbi5mdW5kaW5nLFxuICAgICAgICBkaXJlY3RvcmllczogX3ZlcnNpb24uZGlyZWN0b3JpZXMsXG4gICAgICAgIGRlcGVuZGVuY2llczogX3ZlcnNpb24uZGVwZW5kZW5jaWVzLFxuICAgICAgICBkZXZEZXBlbmRlbmNpZXM6IF92ZXJzaW9uLmRldkRlcGVuZGVuY2llcyxcbiAgICAgICAgcGVlckRlcGVuZGVuY2llczogX3ZlcnNpb24ucGVlckRlcGVuZGVuY2llcyxcbiAgICAgICAgcGVlckRlcGVuZGVuY2llc01ldGE6IF92ZXJzaW9uLnBlZXJEZXBlbmRlbmNpZXNNZXRhLFxuICAgICAgICBvcHRpb25hbERlcGVuZGVuY2llczogX3ZlcnNpb24ub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgICAgIGJ1bmRsZURlcGVuZGVuY2llczogX3ZlcnNpb24uYnVuZGxlRGVwZW5kZW5jaWVzLFxuICAgICAgICAvLyBucG0gY2xpIHNwZWNpZmljc1xuICAgICAgICBfaGFzU2hyaW5rd3JhcDogX3ZlcnNpb24uX2hhc1Nocmlua3dyYXAsXG4gICAgICAgIGhhc0luc3RhbGxTY3JpcHQ6IGhhc0luc3RhbGxTY3JpcHQoX3ZlcnNpb24pLFxuICAgICAgfTtcbiAgICAgIGFjY1t2ZXJzaW9uXSA9IF92ZXJzaW9uX2FiYnJldmlhdGVkO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgY29udmVydGVkTWFuaWZlc3QgPSB7XG4gICAgbmFtZTogbWFuaWZlc3RbJ25hbWUnXSxcbiAgICBbRElTVF9UQUdTXTogbWFuaWZlc3RbRElTVF9UQUdTXSxcbiAgICB2ZXJzaW9uczogYWJicmV2aWF0ZWRWZXJzaW9ucyxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbW9kaWZpZWQ6IG1hbmlmZXN0Py50aW1lPy5tb2RpZmllZCxcbiAgICAvLyBOT1RFOiBzcGVjaWFsIGNhc2UgZm9yIHBucG0gaHR0cHM6Ly9naXRodWIuY29tL3BucG0vcmZjcy9wdWxsLzJcbiAgICB0aW1lOiBtYW5pZmVzdD8udGltZSxcbiAgfTtcblxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBjb252ZXJ0ZWRNYW5pZmVzdDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxVQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFBaUUsU0FBQUQsdUJBQUFTLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFakUsTUFBTUcsS0FBSyxHQUFHLElBQUFDLGNBQVcsRUFBQyx5QkFBeUIsQ0FBQztBQUU3QyxTQUFTQyx1QkFBdUJBLENBQUNDLElBQVksRUFBWTtFQUM5RCxPQUFPO0lBQ0w7SUFDQUEsSUFBSTtJQUNKQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ1pDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDUixDQUFDQyxnQkFBSyxH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R0osUUFBUSxDQUFDOUcsUUFBUSxDQUFDa0MsT0FBTyxDQUFDO0lBQzNDO0lBQ0E7SUFDQSxNQUFNaUYsb0JBQW9CLEdBQUc7TUFDM0JwSCxJQUFJLEVBQUVtSCxRQUFRLENBQUNuSCxJQUFJO01BQ25CbUMsT0FBTyxFQUFFZ0YsUUFBUSxDQUFDaEYsT0FBTztNQUN6QnNELFdBQVcsRUFBRTBCLFFBQVEsQ0FBQzFCLFdBQVc7TUFDakM0QixVQUFVLEVBQUVGLFFBQVEsQ0FBQ0UsVUFBVTtNQUMvQkMsR0FBRyxFQUFFSCxRQUFRLENBQUNHLEdBQUc7TUFDakJDLElBQUksRUFBRUosUUFBUSxDQUFDSSxJQUFJO01BQ25CQyxPQUFPLEVBQUVMLFFBQVEsQ0FBQ0ssT0FBTztNQUN6QkMsR0FBRyxFQUFFTixRQUFRLENBQUNNLEdBQUc7TUFDakJDLEVBQUUsRUFBRVAsUUFBUSxDQUFDTyxFQUFFO01BQ2ZDLE9BQU8sRUFBRVIsUUFBUSxDQUFDUSxPQUFPO01BQ3pCQyxXQUFXLEVBQUVULFFBQVEsQ0FBQ1MsV0FBVztNQUNqQ0MsWUFBWSxFQUFFVixRQUFRLENBQUNVLFlBQVk7TUFDbkNDLGVBQWUsRUFBRVgsUUFBUSxDQUFDVyxlQUFlO01BQ3pDQyxnQkFBZ0IsRUFBRVosUUFBUSxDQUFDWSxnQkFBZ0I7TUFDM0NDLG9CQUFvQixFQUFFYixRQUFRLENBQUNhLG9CQUFvQjtNQUNuREMsb0JBQW9CLEVBQUVkLFFBQVEsQ0FBQ2Msb0JBQW9CO01BQ25EQyxrQkFBa0IsRUFBRWYsUUFBUSxDQUFDZSxrQkFBa0I7TUFDL0M7TUFDQUMsY0FBYyxFQUFFaEIsUUFBUSxDQUFDZ0IsY0FBYztNQUN2QzFCLGdCQUFnQixFQUFFQSxnQkFBZ0IsQ0FBQ1UsUUFBUTtJQUM3QyxDQUFDO0lBQ0RELEdBQUcsQ0FBQy9FLE9BQU8sQ0FBQyxHQUFHaUYsb0JBQW9CO0lBQ25DLE9BQU9GLEdBQUc7RUFDWixDQUFDLEVBQ0QsQ0FBQyxDQUNILENBQUM7RUFFRCxNQUFNa0IsaUJBQWlCLEdBQUc7SUFDeEJwSSxJQUFJLEVBQUUrRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3RCLENBQUMzRyxvQkFBUyxHQUFHMkcsUUFBUSxDQUFDM0csb0JBQVMsQ0FBQztJQUNoQ0gsUUFBUSxFQUFFK0csbUJBQW1CO0lBQzdCO0lBQ0FkLFFBQVEsRUFBRWEsUUFBUSxFQUFFN0csSUFBSSxFQUFFZ0csUUFBUTtJQUNsQztJQUNBaEcsSUFBSSxFQUFFNkcsUUFBUSxFQUFFN0c7RUFDbEIsQ0FBQzs7RUFFRDtFQUNBLE9BQU9rSSxpQkFBaUI7QUFDMUIiLCJpZ25vcmVMaXN0IjpbXX0=
282
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfY29yZSIsIl9zZWFyY2hJbmRleGVyIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJfdXRpbHMyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGVidWciLCJjcmVhdGVEZWJ1ZyIsImdlbmVyYXRlUGFja2FnZVRlbXBsYXRlIiwibmFtZSIsInZlcnNpb25zIiwidGltZSIsIlVTRVJTIiwiRElTVF9UQUdTIiwiX3VwbGlua3MiLCJfZGlzdGZpbGVzIiwiX2F0dGFjaG1lbnRzIiwiX3JldiIsIm5vcm1hbGl6ZVBhY2thZ2UiLCJwa2ciLCJwa2dQcm9wZXJ0aWVzIiwiZm9yRWFjaCIsImtleSIsInBrZ1Byb3AiLCJfIiwiaXNOaWwiLCJpc09iamVjdCIsImlzU3RyaW5nIiwiU1RPUkFHRSIsIkRFRkFVTFRfUkVWSVNJT04iLCJfaWQiLCJub3JtYWxpemVEaXN0VGFncyIsImdlbmVyYXRlUmV2aXNpb24iLCJyZXYiLCJzcGxpdCIsImdlbmVyYXRlUmFuZG9tSGV4U3RyaW5nIiwiZ2V0TGF0ZXN0UmVhZG1lIiwiZGlzdFRhZ3MiLCJsYXRlc3RWZXJzaW9uIiwicmVhZG1lIiwidHJpbSIsInJlYWRtZURpc3RUYWdzUHJpb3JpdHkiLCJtYXAiLCJ0YWciLCJ2ZXJzaW9uIiwiY2xlYW5VcFJlYWRtZSIsIldISVRFTElTVCIsImV4cG9ydHMiLCJjbGVhblVwTGlua3NSZWYiLCJrZWVwVXBMaW5rRGF0YSIsInJlc3VsdCIsInByb3BlcnR5VG9LZWVwIiwicHVzaCIsImkiLCJpbmRleE9mIiwiY2hlY2tQYWNrYWdlTG9jYWwiLCJsb2NhbFN0b3JhZ2UiLCJyZXN1bHRzIiwiZ2V0UGFja2FnZU1ldGFkYXRhQXN5bmMiLCJFcnJvckNvZGUiLCJnZXRDb25mbGljdCIsIkFQSV9FUlJPUiIsIlBBQ0tBR0VfRVhJU1QiLCJlcnIiLCJzdGF0dXMiLCJIVFRQX1NUQVRVUyIsIk5PVF9GT1VORCIsInB1Ymxpc2hQYWNrYWdlIiwibWV0YWRhdGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFkZFBhY2thZ2UiLCJsYXRlc3QiLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsIlNlYXJjaE1lbW9yeUluZGV4ZXIiLCJhZGQiLCJjYXRjaCIsInJlYXNvbiIsImxvZ2dlciIsImVycm9yIiwiY2hlY2tQYWNrYWdlUmVtb3RlIiwiaXNBbGxvd1B1Ymxpc2hPZmZsaW5lIiwic3luY01ldGFkYXRhIiwicGFja2FnZUpzb25Mb2NhbCIsInVwTGlua3NFcnJvcnMiLCJlcnJvckl0ZW0iLCJsZW5ndGgiLCJnZXRTZXJ2aWNlVW5hdmFpbGFibGUiLCJVUExJTktfT0ZGTElORV9QVUJMSVNIIiwibWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsIiwiY2FjaGVNYW5pZmVzdCIsInJlbW90ZU1hbmlmZXN0IiwicHJlcGFyZVNlYXJjaFBhY2thZ2UiLCJkYXRhIiwicGtnVXRpbHMiLCJnZXRMYXRlc3QiLCJkZXNjcmlwdGlvbiIsIm1haW50YWluZXJzIiwiYXV0aG9yIiwiZmlsdGVyIiwiQm9vbGVhbiIsInJlcG9zaXRvcnkiLCJyZWFkbWVGaWxlbmFtZSIsImhvbWVwYWdlIiwia2V5d29yZHMiLCJtb2RpZmllZCIsImJ1Z3MiLCJsaWNlbnNlIiwiaXNQdWJsaXNoYWJsZVBhY2thZ2UiLCJrZXlzIiwiT2JqZWN0IiwiaW5jbHVkZXMiLCJoYXNJbnN0YWxsU2NyaXB0Iiwic2NyaXB0cyIsImZpbmQiLCJpdGVtIiwidW5kZWZpbmVkIiwiY29udmVydEFiYnJldmlhdGVkTWFuaWZlc3QiLCJtYW5pZmVzdCIsImFiYnJldmlhdGVkVmVyc2lvbnMiLCJyZWR1Y2UiLCJhY2MiLCJfdmVyc2lvbiIsIl92ZXJzaW9uX2FiYnJldmlhdGVkIiwiZGVwcmVjYXRlZCIsImJpbiIsImRpc3QiLCJlbmdpbmVzIiwiY3B1Iiwib3MiLCJmdW5kaW5nIiwiZGlyZWN0b3JpZXMiLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiLCJwZWVyRGVwZW5kZW5jaWVzIiwicGVlckRlcGVuZGVuY2llc01ldGEiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsImJ1bmRsZURlcGVuZGVuY2llcyIsIl9oYXNTaHJpbmt3cmFwIiwiY29udmVydGVkTWFuaWZlc3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3N0b3JhZ2UtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZURlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IHBrZ1V0aWxzIH0gZnJvbSAnQHZlcmRhY2Npby9jb3JlJztcbmltcG9ydCB7IFNlYXJjaE1lbW9yeUluZGV4ZXIgfSBmcm9tICdAdmVyZGFjY2lvL3NlYXJjaC1pbmRleGVyJztcbmltcG9ydCB7IEFiYnJldmlhdGVkTWFuaWZlc3QsIEFiYnJldmlhdGVkVmVyc2lvbnMsIE1hbmlmZXN0LCBWZXJzaW9uIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUhleFN0cmluZyB9IGZyb20gJ0B2ZXJkYWNjaW8vdXRpbHMnO1xuXG5pbXBvcnQgeyBBUElfRVJST1IsIERJU1RfVEFHUywgSFRUUF9TVEFUVVMsIFNUT1JBR0UsIFVTRVJTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IExvY2FsU3RvcmFnZSBmcm9tICcuL2xvY2FsLXN0b3JhZ2UnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBpc09iamVjdCwgbm9ybWFsaXplRGlzdFRhZ3MgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZGVidWcgPSBjcmVhdGVEZWJ1ZygndmVyZGFjY2lvOnN0b3JhZ2UtdXRpbHMnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGFja2FnZVRlbXBsYXRlKG5hbWU6IHN0cmluZyk6IE1hbmlmZXN0IHtcbiAgcmV0dXJuIHtcbiAgICAvLyBzdGFuZGFyZCB0aGluZ3NcbiAgICBuYW1lLFxuICAgIHZlcnNpb25zOiB7fSxcbiAgICB0aW1lOiB7fSxcbiAgICBbVVNFUlNdOiB7fSxcbiAgICBbRElTVF9UQUdTXToge30sXG4gICAgX3VwbGlua3M6IHt9LFxuICAgIF9kaXN0ZmlsZXM6IHt9LFxuICAgIF9hdHRhY2htZW50czoge30sXG4gICAgX3JldjogJycsXG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHBhY2thZ2UgcHJvcGVydGllcywgdGFncywgcmV2aXNpb24gaWQuXG4gKiBAcGFyYW0ge09iamVjdH0gcGtnIHBhY2thZ2UgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUGFja2FnZShwa2c6IE1hbmlmZXN0KTogTWFuaWZlc3Qge1xuICBjb25zdCBwa2dQcm9wZXJ0aWVzID0gWyd2ZXJzaW9ucycsICdkaXN0LXRhZ3MnLCAnX2Rpc3RmaWxlcycsICdfYXR0YWNobWVudHMnLCAnX3VwbGlua3MnLCAndGltZSddO1xuXG4gIHBrZ1Byb3BlcnRpZXMuZm9yRWFjaCgoa2V5KTogdm9pZCA9PiB7XG4gICAgY29uc3QgcGtnUHJvcCA9IHBrZ1trZXldO1xuXG4gICAgaWYgKF8uaXNOaWwocGtnUHJvcCkgfHwgaXNPYmplY3QocGtnUHJvcCkgPT09IGZhbHNlKSB7XG4gICAgICBwa2dba2V5XSA9IHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKF8uaXNTdHJpbmcocGtnLl9yZXYpID09PSBmYWxzZSkge1xuICAgIHBrZy5fcmV2ID0gU1RPUkFHRS5ERUZBVUxUX1JFVklTSU9OO1xuICB9XG5cbiAgaWYgKF8uaXNTdHJpbmcocGtnLl9pZCkgPT09IGZhbHNlKSB7XG4gICAgcGtnLl9pZCA9IHBrZy5uYW1lO1xuICB9XG5cbiAgLy8gbm9ybWFsaXplIGRpc3QtdGFnc1xuICBub3JtYWxpemVEaXN0VGFncyhwa2cpO1xuXG4gIHJldHVybiBwa2c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJldmlzaW9uKHJldjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgX3JldiA9IHJldi5zcGxpdCgnLScpO1xuXG4gIHJldHVybiAoK19yZXZbMF0gfHwgMCkgKyAxICsgJy0nICsgZ2VuZXJhdGVSYW5kb21IZXhTdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhdGVzdFJlYWRtZShwa2c6IE1hbmlmZXN0KTogc3RyaW5nIHtcbiAgY29uc3QgdmVyc2lvbnMgPSBwa2dbJ3ZlcnNpb25zJ10gfHwge307XG4gIGNvbnN0IGRpc3RUYWdzID0gcGtnW0RJU1RfVEFHU10gfHwge307XG4gIC8vIEZJWE1FOiBoZXJlIGlzIGEgYml0IHRyaWNreSBhZGQgdGhlIHR5cGVzXG4gIGNvbnN0IGxhdGVzdFZlcnNpb246IFZlcnNpb24gfCBhbnkgPSBkaXN0VGFnc1snbGF0ZXN0J10gPyB2ZXJzaW9uc1tkaXN0VGFnc1snbGF0ZXN0J11dIHx8IHt9IDoge307XG4gIGxldCByZWFkbWUgPSBfLnRyaW0ocGtnLnJlYWRtZSB8fCBsYXRlc3RWZXJzaW9uLnJlYWRtZSB8fCAnJyk7XG4gIGlmIChyZWFkbWUpIHtcbiAgICByZXR1cm4gcmVhZG1lO1xuICB9XG5cbiAgLy8gSW4gY2FzZSBvZiBlbXB0eSByZWFkbWUgLSB0cnlpbmcgdG8gZ2V0IEFOWSByZWFkbWUgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogJ25leHQnLCdiZXRhJywnYWxwaGEnLCd0ZXN0JywnZGV2JywnY2FuYXJ5J1xuICBjb25zdCByZWFkbWVEaXN0VGFnc1ByaW9yaXR5ID0gWyduZXh0JywgJ2JldGEnLCAnYWxwaGEnLCAndGVzdCcsICdkZXYnLCAnY2FuYXJ5J107XG4gIHJlYWRtZURpc3RUYWdzUHJpb3JpdHkubWFwKGZ1bmN0aW9uICh0YWcpOiBzdHJpbmcgfCB2b2lkIHtcbiAgICBpZiAocmVhZG1lKSB7XG4gICAgICByZXR1cm4gcmVhZG1lO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uOiBWZXJzaW9uIHwgYW55ID0gZGlzdFRhZ3NbdGFnXSA/IHZlcnNpb25zW2Rpc3RUYWdzW3RhZ11dIHx8IHt9IDoge307XG4gICAgcmVhZG1lID0gXy50cmltKHZlcnNpb24ucmVhZG1lIHx8IHJlYWRtZSk7XG4gIH0pO1xuICByZXR1cm4gcmVhZG1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5VcFJlYWRtZSh2ZXJzaW9uOiBWZXJzaW9uKTogVmVyc2lvbiB7XG4gIGlmIChfLmlzTmlsKHZlcnNpb24pID09PSBmYWxzZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBkZWxldGUgdmVyc2lvbi5yZWFkbWU7XG4gIH1cblxuICByZXR1cm4gdmVyc2lvbjtcbn1cblxuZXhwb3J0IGNvbnN0IFdISVRFTElTVCA9IFtcbiAgJ19yZXYnLFxuICAnbmFtZScsXG4gICd2ZXJzaW9ucycsXG4gICdkaXN0LXRhZ3MnLFxuICAncmVhZG1lJyxcbiAgJ3RpbWUnLFxuICAnX2lkJyxcbiAgJ3VzZXJzJyxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblVwTGlua3NSZWYoa2VlcFVwTGlua0RhdGE6IGJvb2xlYW4sIHJlc3VsdDogTWFuaWZlc3QpOiBNYW5pZmVzdCB7XG4gIGNvbnN0IHByb3BlcnR5VG9LZWVwID0gWy4uLldISVRFTElTVF07XG4gIGlmIChrZWVwVXBMaW5rRGF0YSA9PT0gdHJ1ZSkge1xuICAgIHByb3BlcnR5VG9LZWVwLnB1c2goJ191cGxpbmtzJyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGkgaW4gcmVzdWx0KSB7XG4gICAgaWYgKHByb3BlcnR5VG9LZWVwLmluZGV4T2YoaSkgPT09IC0xKSB7XG4gICAgICAvLyBSZW1vdmUgc2VjdGlvbnMgbGlrZSAnX3VwbGlua3MnIGZyb20gcmVzcG9uc2VcbiAgICAgIGRlbGV0ZSByZXN1bHRbaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgcGFja2FnZSBpdCBpcyBhbHJlYWR5IGEgbG9jYWwgcGFja2FnZVxuICogQHBhcmFtIHsqfSBuYW1lXG4gKiBAcGFyYW0geyp9IGxvY2FsU3RvcmFnZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQYWNrYWdlTG9jYWwobmFtZTogc3RyaW5nLCBsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZSk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBsb2NhbFN0b3JhZ2UuZ2V0UGFja2FnZU1ldGFkYXRhQXN5bmMobmFtZSk7XG4gICAgaWYgKHJlc3VsdHMpIHtcbiAgICAgIHRocm93IEVycm9yQ29kZS5nZXRDb25mbGljdChBUElfRVJST1IuUEFDS0FHRV9FWElTVCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGlmIChlcnIuc3RhdHVzID09PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoUGFja2FnZShcbiAgbmFtZTogc3RyaW5nLFxuICBtZXRhZGF0YTogYW55LFxuICBsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgbG9jYWxTdG9yYWdlLmFkZFBhY2thZ2UobmFtZSwgbWV0YWRhdGEsIChlcnIsIGxhdGVzdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFfLmlzTnVsbChlcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIV8uaXNVbmRlZmluZWQobGF0ZXN0KSkge1xuICAgICAgICBTZWFyY2hNZW1vcnlJbmRleGVyLmFkZChsYXRlc3QpLmNhdGNoKChyZWFzb24pID0+IHtcbiAgICAgICAgICBkZWJ1ZygnaW5kZXhlciBoYXMgZmFpbGVkIG9uIGFkZCBpdGVtICVvJywgcmVhc29uKTtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ2luZGV4ZXIgaGFzIGZhaWxlZCBvbiBhZGQgaXRlbScpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQYWNrYWdlUmVtb3RlKFxuICBuYW1lOiBzdHJpbmcsXG4gIGlzQWxsb3dQdWJsaXNoT2ZmbGluZTogYm9vbGVhbixcbiAgc3luY01ldGFkYXRhOiBhbnlcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgIHN5bmNNZXRhZGF0YShuYW1lLCBudWxsLCB7fSwgKGVyciwgcGFja2FnZUpzb25Mb2NhbCwgdXBMaW5rc0Vycm9ycyk6IHZvaWQgPT4ge1xuICAgICAgLy8gc29tZXRoaW5nIHdlaXJkXG4gICAgICBpZiAoZXJyICYmIGVyci5zdGF0dXMgIT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNraW5nIHBhY2thZ2UgZXhpc3QgYWxyZWFkeVxuICAgICAgaWYgKF8uaXNOaWwocGFja2FnZUpzb25Mb2NhbCkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoRXJyb3JDb2RlLmdldENvbmZsaWN0KEFQSV9FUlJPUi5QQUNLQUdFX0VYSVNUKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGVycm9ySXRlbSA9IDA7IGVycm9ySXRlbSA8IHVwTGlua3NFcnJvcnMubGVuZ3RoOyBlcnJvckl0ZW0rKykge1xuICAgICAgICAvLyBjaGVja2luZyBlcnJvclxuICAgICAgICAvLyBpZiB1cGxpbmsgZmFpbHMgd2l0aCBhIHN0YXR1cyBvdGhlciB0aGFuIDQwNCwgd2UgcmVwb3J0IGZhaWx1cmVcbiAgICAgICAgaWYgKF8uaXNOaWwodXBMaW5rc0Vycm9yc1tlcnJvckl0ZW1dWzBdKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAodXBMaW5rc0Vycm9yc1tlcnJvckl0ZW1dWzBdLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgICBpZiAoaXNBbGxvd1B1Ymxpc2hPZmZsaW5lKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZWplY3QoRXJyb3JDb2RlLmdldFNlcnZpY2VVbmF2YWlsYWJsZShBUElfRVJST1IuVVBMSU5LX09GRkxJTkVfUFVCTElTSCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLy8gdGVzdGVkIG9uIHY2XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsKGNhY2hlTWFuaWZlc3Q6IE1hbmlmZXN0LCByZW1vdGVNYW5pZmVzdDogTWFuaWZlc3QpOiBhbnkge1xuICBpZiAoJ3RpbWUnIGluIHJlbW90ZU1hbmlmZXN0KSB7XG4gICAgLy8gcmVtb3RlIG92ZXJyaWRlIGNhY2hlIHRpbWUgY29uZmxpY3RzXG4gICAgcmV0dXJuIHsgLi4uY2FjaGVNYW5pZmVzdCwgdGltZTogeyAuLi5jYWNoZU1hbmlmZXN0LnRpbWUsIC4uLnJlbW90ZU1hbmlmZXN0LnRpbWUgfSB9O1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlTWFuaWZlc3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU2VhcmNoUGFja2FnZShkYXRhOiBNYW5pZmVzdCwgdGltZTogdW5rbm93bik6IGFueSB7XG4gIGNvbnN0IGxhdGVzdCA9IHBrZ1V0aWxzLmdldExhdGVzdChkYXRhKTtcblxuICBpZiAobGF0ZXN0ICYmIGRhdGEudmVyc2lvbnNbbGF0ZXN0XSkge1xuICAgIGNvbnN0IHZlcnNpb246IFZlcnNpb24gPSBkYXRhLnZlcnNpb25zW2xhdGVzdF07XG4gICAgY29uc3QgdmVyc2lvbnM6IGFueSA9IHsgW2xhdGVzdF06ICdsYXRlc3QnIH07XG4gICAgY29uc3QgcGtnOiBhbnkgPSB7XG4gICAgICBuYW1lOiB2ZXJzaW9uLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdmVyc2lvbi5kZXNjcmlwdGlvbixcbiAgICAgIFtESVNUX1RBR1NdOiB7IGxhdGVzdCB9LFxuICAgICAgbWFpbnRhaW5lcnM6IHZlcnNpb24ubWFpbnRhaW5lcnMgfHwgW3ZlcnNpb24uYXV0aG9yXS5maWx0ZXIoQm9vbGVhbiksXG4gICAgICBhdXRob3I6IHZlcnNpb24uYXV0aG9yLFxuICAgICAgcmVwb3NpdG9yeTogdmVyc2lvbi5yZXBvc2l0b3J5LFxuICAgICAgcmVhZG1lRmlsZW5hbWU6IHZlcnNpb24ucmVhZG1lRmlsZW5hbWUgfHwgJycsXG4gICAgICBob21lcGFnZTogdmVyc2lvbi5ob21lcGFnZSxcbiAgICAgIGtleXdvcmRzOiB2ZXJzaW9uLmtleXdvcmRzLFxuICAgICAgdGltZToge1xuICAgICAgICBtb2RpZmllZDogdGltZSxcbiAgICAgIH0sXG4gICAgICBidWdzOiB2ZXJzaW9uLmJ1Z3MsXG4gICAgICBsaWNlbnNlOiB2ZXJzaW9uLmxpY2Vuc2UsXG4gICAgICB2ZXJzaW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBrZztcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHBhY2thZ2UgbWV0YWR0YSBoYXMgZW5vdWdoIGRhdGEgdG8gYmUgcHVibGlzaGVkXG4gKiBAcGFyYW0gcGtnIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1B1Ymxpc2hhYmxlUGFja2FnZShwa2c6IE1hbmlmZXN0KTogYm9vbGVhbiB7XG4gIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocGtnKTtcblxuICByZXR1cm4ga2V5cy5pbmNsdWRlcygndmVyc2lvbnMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0luc3RhbGxTY3JpcHQodmVyc2lvbjogVmVyc2lvbikge1xuICBpZiAodmVyc2lvbj8uc2NyaXB0cykge1xuICAgIGNvbnN0IHNjcmlwdHMgPSBPYmplY3Qua2V5cyh2ZXJzaW9uLnNjcmlwdHMpO1xuICAgIHJldHVybiAoXG4gICAgICBzY3JpcHRzLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIFsnaW5zdGFsbCcsICdwcmVpbnN0YWxsJywgJ3Bvc3RpbnN0YWxsJ10uaW5jbHVkZXMoaXRlbSk7XG4gICAgICB9KSAhPT0gdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QWJicmV2aWF0ZWRNYW5pZmVzdChtYW5pZmVzdDogTWFuaWZlc3QpOiBBYmJyZXZpYXRlZE1hbmlmZXN0IHtcbiAgY29uc3QgYWJicmV2aWF0ZWRWZXJzaW9ucyA9IE9iamVjdC5rZXlzKG1hbmlmZXN0LnZlcnNpb25zKS5yZWR1Y2UoXG4gICAgKGFjYzogQWJicmV2aWF0ZWRWZXJzaW9ucywgdmVyc2lvbjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBfdmVyc2lvbiA9IG1hbmlmZXN0LnZlcnNpb25zW3ZlcnNpb25dO1xuICAgICAgLy8gVGhpcyBzaG91bGQgYmUgYWxpZ24gd2l0aCB0aGlzIGRvY3VtZW50XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbnBtL3JlZ2lzdHJ5L2Jsb2IvbWFzdGVyL2RvY3MvcmVzcG9uc2VzL3BhY2thZ2UtbWV0YWRhdGEubWQjYWJicmV2aWF0ZWQtdmVyc2lvbi1vYmplY3RcbiAgICAgIGNvbnN0IF92ZXJzaW9uX2FiYnJldmlhdGVkID0ge1xuICAgICAgICBuYW1lOiBfdmVyc2lvbi5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBfdmVyc2lvbi52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogX3ZlcnNpb24uZGVzY3JpcHRpb24sXG4gICAgICAgIGRlcHJlY2F0ZWQ6IF92ZXJzaW9uLmRlcHJlY2F0ZWQsXG4gICAgICAgIGJpbjogX3ZlcnNpb24uYmluLFxuICAgICAgICBkaXN0OiBfdmVyc2lvbi5kaXN0LFxuICAgICAgICBlbmdpbmVzOiBfdmVyc2lvbi5lbmdpbmVzLFxuICAgICAgICBjcHU6IF92ZXJzaW9uLmNwdSxcbiAgICAgICAgb3M6IF92ZXJzaW9uLm9zLFxuICAgICAgICBmdW5kaW5nOiBfdmVyc2lvbi5mdW5kaW5nLFxuICAgICAgICBkaXJlY3RvcmllczogX3ZlcnNpb24uZGlyZWN0b3JpZXMsXG4gICAgICAgIGRlcGVuZGVuY2llczogX3ZlcnNpb24uZGVwZW5kZW5jaWVzLFxuICAgICAgICBkZXZEZXBlbmRlbmNpZXM6IF92ZXJzaW9uLmRldkRlcGVuZGVuY2llcyxcbiAgICAgICAgcGVlckRlcGVuZGVuY2llczogX3ZlcnNpb24ucGVlckRlcGVuZGVuY2llcyxcbiAgICAgICAgcGVlckRlcGVuZGVuY2llc01ldGE6IF92ZXJzaW9uLnBlZXJEZXBlbmRlbmNpZXNNZXRhLFxuICAgICAgICBvcHRpb25hbERlcGVuZGVuY2llczogX3ZlcnNpb24ub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgICAgIGJ1bmRsZURlcGVuZGVuY2llczogX3ZlcnNpb24uYnVuZGxlRGVwZW5kZW5jaWVzLFxuICAgICAgICAvLyBucG0gY2xpIHNwZWNpZmljc1xuICAgICAgICBfaGFzU2hyaW5rd3JhcDogX3ZlcnNpb24uX2hhc1Nocmlua3dyYXAsXG4gICAgICAgIGhhc0luc3RhbGxTY3JpcHQ6IGhhc0luc3RhbGxTY3JpcHQoX3ZlcnNpb24pLFxuICAgICAgfTtcbiAgICAgIGFjY1t2ZXJzaW9uXSA9IF92ZXJzaW9uX2FiYnJldmlhdGVkO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgY29udmVydGVkTWFuaWZlc3QgPSB7XG4gICAgbmFtZTogbWFuaWZlc3RbJ25hbWUnXSxcbiAgICBbRElTVF9UQUdTXTogbWFuaWZlc3RbRElTVF9UQUdTXSxcbiAgICB2ZXJzaW9uczogYWJicmV2aWF0ZWRWZXJzaW9ucyxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbW9kaWZpZWQ6IG1hbmlmZXN0Py50aW1lPy5tb2RpZmllZCxcbiAgICAvLyBOT1RFOiBzcGVjaWFsIGNhc2UgZm9yIHBucG0gaHR0cHM6Ly9naXRodWIuY29tL3BucG0vcmZjcy9wdWxsLzJcbiAgICB0aW1lOiBtYW5pZmVzdD8udGltZSxcbiAgfTtcblxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBjb252ZXJ0ZWRNYW5pZmVzdDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxVQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFBaUUsU0FBQUQsdUJBQUFTLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFakUsTUFBTUcsS0FBSyxHQUFHLElBQUFDLGNBQVcsRUFBQyx5QkFBeUIsQ0FBQztBQUU3QyxTQUFTQyx1QkFBdUJBLENBQUNDLElBQVksRUFBWTtFQUM5RCxPQUFPO0lBQ0w7SUFDQUEsSUFBSTtJQUNKQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ1pDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDUixDQUFDQyxnQkFBSyxHQUFHLENBQUMsQ0FBQztJQUNYLENBQUNDLG9CQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2ZDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFD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
@@ -1,5 +1,5 @@
1
1
  import { ReadTarball } from '@verdaccio/streams';
2
- import { Callback, Config, Logger, Manifest, MergeTags, Package, Version, Versions } from '@verdaccio/types';
2
+ import { Callback, Config, Logger, Manifest, MergeTags, Version, Versions } from '@verdaccio/types';
3
3
  import { Token, TokenFilter } from '@verdaccio/types';
4
4
  import { IPluginFilters, ISyncUplinks, StringValue } from '../types';
5
5
  import LocalStorage from './local-storage';
@@ -40,7 +40,7 @@ declare class Storage {
40
40
  Function changes a package info from local storage and all uplinks with write access./
41
41
  Used storages: local (write)
42
42
  */
43
- changePackage(name: string, metadata: Package, revision: string, callback: Callback): void;
43
+ changePackage(name: string, metadata: Manifest, revision: string, callback: Callback): void;
44
44
  /**
45
45
  * Remove a package from a system
46
46
  Function removes a package from local storage
@@ -102,12 +102,28 @@ declare class Storage {
102
102
  * @param {*} callback
103
103
  */
104
104
  getLocalDatabase(callback: Callback): void;
105
+ /**
106
+ * Read each local package name, apply filters, and collect the latest version.
107
+ */
108
+ private _collectLocalPackages;
105
109
  /**
106
110
  * Function fetches package metadata from uplinks and synchronizes it with local data
107
111
  if package is available locally, it MUST be provided in pkginfo
108
112
  returns callback(err, result, uplink_errors)
109
113
  */
110
114
  _syncUplinksMetadata(name: string, packageInfo: Manifest, options: ISyncUplinks, callback: Callback): void;
115
+ /**
116
+ * Apply all configured filter plugins to a package manifest sequentially.
117
+ * Each filter's output is passed as input to the next filter.
118
+ * Returns the filtered manifest and any errors that occurred.
119
+ */
120
+ private _applyFilters;
121
+ /**
122
+ * Check if a tarball should be served based on filter plugins.
123
+ * Looks up package metadata, applies filters, and verifies the tarball
124
+ * still belongs to an allowed version.
125
+ */
126
+ private _isTarballAllowedByFilters;
111
127
  /**
112
128
  * Set a hidden value for each version.
113
129
  * @param {Array} versions list of version