@bitgo/sdk-coin-icp 1.24.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/src/icp.d.ts CHANGED
@@ -51,6 +51,7 @@ export declare class Icp extends BaseCoin {
51
51
  getDefaultMultisigType(): MultisigType;
52
52
  /** @inheritDoc */
53
53
  getMPCAlgorithm(): MPCAlgorithm;
54
+ allowsAccountConsolidations(): boolean;
54
55
  /** @inheritDoc **/
55
56
  getHashFunction(): Hash;
56
57
  private getAddressFromPublicKey;
@@ -1 +1 @@
1
- {"version":3,"file":"icp.d.ts","sourceRoot":"","sources":["../../src/icp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"icp.d.ts","sourceRoot":"","sources":["../../src/icp.ts"],"names":[],"mappings":"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"}
package/dist/src/icp.js CHANGED
@@ -211,6 +211,9 @@ class Icp extends sdk_core_1.BaseCoin {
211
211
  getMPCAlgorithm() {
212
212
  return 'ecdsa';
213
213
  }
214
+ allowsAccountConsolidations() {
215
+ return true; // platform enforces V2-only (CECHO-2443)
216
+ }
214
217
  /** @inheritDoc **/
215
218
  getHashFunction() {
216
219
  return (0, crypto_1.createHash)('sha256');
@@ -418,4 +421,4 @@ class Icp extends sdk_core_1.BaseCoin {
418
421
  }
419
422
  }
420
423
  exports.Icp = Icp;
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsOENBd0J5QjtBQUN6Qiw0Q0FBaUY7QUFDakYsa0RBQStDO0FBQy9DLGtEQUEwQjtBQUMxQixnRUFBcUM7QUFDckMsbUNBQTBDO0FBQzFDLHdEQUEwQztBQUUxQyx1Q0FnQnFCO0FBQ3JCLCtFQUE0RTtBQUM1RSx3REFBZ0M7QUFDaEMsb0RBQTBEO0FBQzFELDZDQUEwQztBQUUxQzs7Ozs7O0dBTUc7QUFDSCxNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUUvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFB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QUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sb0JBQW9CLEdBQXdCO2dCQUNoRCxFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsZ0JBQWdCO2FBQ3JCLENBQUM7WUFDRixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksZ0NBQXFCLElBQUksS0FBSyxZQUFZLGdDQUFxQixFQUFFLENBQUM7Z0JBQ3JGLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUEyQjtRQUN6RSxJQUFJLFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUEsa0NBQW9CLEVBQUMsR0FBYSxFQUFFLFNBQW1CLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0Y7QUFuY0Qsa0JBbWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMsXG4gIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdCxcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgRWNkc2EsXG4gIEVDRFNBVXRpbHMsXG4gIEVudmlyb25tZW50cyxcbiAgRXJyb3JOb0lucHV0VG9SZWNvdmVyLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBLZXlQYWlyLFxuICBNUENBbGdvcml0aG0sXG4gIE11bHRpc2lnVHlwZSxcbiAgbXVsdGlzaWdUeXBlcyxcbiAgUGFyc2VkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBSZWNvdmVyeVByb3ZpZGVyRXJyb3IsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBTaWduaW5nRXJyb3IsXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyxcbiAgVW5leHBlY3RlZEFkZHJlc3NFcnJvcixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGNvaW5zLCBOZXR3b3JrVHlwZSwgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgUHJpbmNpcGFsIH0gZnJvbSAnQGRmaW5pdHkvcHJpbmNpcGFsJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoLCBIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIG1wYyBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuXG5pbXBvcnQge1xuICBDdXJ2ZVR5cGUsXG4gIExFREdFUl9DQU5JU1RFUl9JRCxcbiAgVEVTVE5FVF9MRURHRVJfQ0FOSVNURVJfSUQsXG4gIFBheWxvYWRzRGF0YSxcbiAgUFVCTElDX05PREVfUkVRVUVTVF9FTkRQT0lOVCxcbiAgUHVibGljTm9kZVN1Ym1pdFJlc3BvbnNlLFxuICBSZWNvdmVyeU9wdGlvbnMsXG4gIFJlY292ZXJ5VHJhbnNhY3Rpb24sXG4gIFJPT1RfUEFUSCxcbiAgU2lnbmF0dXJlcyxcbiAgU2lnbmluZ1BheWxvYWQsXG4gIEljcFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFRyYW5zYWN0aW9uSGV4UGFyYW1zLFxuICBUc3NWZXJpZnlJY3BBZGRyZXNzT3B0aW9ucyxcbiAgVW5zaWduZWRTd2VlcFJlY292ZXJ5VHJhbnNhY3Rpb24sXG59IGZyb20gJy4vbGliL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5JztcbmltcG9ydCB1dGlscyBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQgeyBhdWRpdEVjZHNhUHJpdmF0ZUtleSB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBJY3BBZ2VudCB9IGZyb20gJy4vbGliL2ljcEFnZW50JztcblxuLyoqXG4gKiBDbGFzcyByZXByZXNlbnRpbmcgdGhlIEludGVybmV0IENvbXB1dGVyIChJQ1ApIGNvaW4uXG4gKiBFeHRlbmRzIHRoZSBCYXNlQ29pbiBjbGFzcyBhbmQgcHJvdmlkZXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGZvciBJQ1AuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9pbnRlcm5ldGNvbXB1dGVyLm9yZy99XG4gKiBAc2VlIHtAbGluayBodHRwczovL2ludGVybmV0Y29tcHV0ZXIub3JnL2RvY3MvY3VycmVudC9kZXZlbG9wZXItZG9jcy9kZWZpL3Jvc2V0dGEvaWNwX3Jvc2V0dGEvZGF0YV9hcGkvfVxuICovXG5leHBvcnQgY2xhc3MgSWNwIGV4dGVuZHMgQmFzZUNvaW4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuXG4gICAgaWYgKCFzdGF0aWNzQ29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgSWNwKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnaWNwJztcbiAgfVxuXG4gIGdldEJhc2VDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnaWNwJztcbiAgfVxuXG4gIGdldEZhbWlseSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mYW1pbHk7XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnSW50ZXJuZXQgQ29tcHV0ZXInO1xuICB9XG5cbiAgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhdGljc0NvaW4uZGVjaW1hbFBsYWNlcyk7XG4gIH1cblxuICBhc3luYyBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBUcmFuc2FjdGlvbkhleFBhcmFtcyk6IFByb21pc2U8SWNwVHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXJGYWN0b3J5KCk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gYXdhaXQgZmFjdG9yeS5mcm9tKHBhcmFtcy50cmFuc2FjdGlvbkhleCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBpZiAocGFyYW1zLnNpZ25hYmxlSGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlZFNpZ25hYmxlSGV4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YS5wYXlsb2Fkc1swXS5oZXhfYnl0ZXM7XG4gICAgICBpZiAoZ2VuZXJhdGVkU2lnbmFibGVIZXggIT09IHBhcmFtcy5zaWduYWJsZUhleCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlbmVyYXRlZCBzaWduYWJsZUhleCBpcyBub3QgZXF1YWwgdG8gcGFyYW1zLnNpZ25hYmxlSGV4Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbi5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHR4SGV4ID0gdHhQcmVidWlsZD8udHhIZXg7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBjb25zdCB0eEhleFBhcmFtczogVHJhbnNhY3Rpb25IZXhQYXJhbXMgPSB7XG4gICAgICB0cmFuc2FjdGlvbkhleDogdHhIZXgsXG4gICAgfTtcblxuICAgIGlmICh0eFByZWJ1aWxkLnR4SW5mbyAmJiB0eFByZWJ1aWxkLnR4SW5mbyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0eFByZWJ1aWxkLnR4SW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHR4SGV4UGFyYW1zLnNpZ25hYmxlSGV4ID0gdHhQcmVidWlsZC50eEluZm87XG4gICAgfVxuXG4gICAgY29uc3QgZXhwbGFpbmVkVHggPSBhd2FpdCB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbih0eEhleFBhcmFtcyk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0eFBhcmFtcy5yZWNpcGllbnRzKSAmJiB0eFBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eFBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAke3RoaXMuZ2V0Q2hhaW4oKX0gZG9lc24ndCBzdXBwb3J0IHNlbmRpbmcgdG8gbW9yZSB0aGFuIDEgZGVzdGluYXRpb24gYWRkcmVzcyB3aXRoaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uIFRyeSBhZ2FpbiwgdXNpbmcgb25seSBhIHNpbmdsZSByZWNpcGllbnQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXNzZXJ0KGV4cGxhaW5lZFR4Lm91dHB1dHMubGVuZ3RoID09PSAxLCAnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcblxuICAgICAgY29uc3Qgb3V0cHV0ID0gZXhwbGFpbmVkVHgub3V0cHV0c1swXTtcbiAgICAgIGNvbnN0IHJlY2lwaWVudCA9IHR4UGFyYW1zLnJlY2lwaWVudHNbMF07XG4gICAgICBjb25zdCByZWNpcGllbnRSb290QWRkcmVzcyA9XG4gICAgICAgIHR5cGVvZiByZWNpcGllbnQuYWRkcmVzcyA9PT0gJ3N0cmluZycgPyB1dGlscy52YWxpZGF0ZU1lbW9BbmRSZXR1cm5Sb290QWRkcmVzcyhyZWNpcGllbnQuYWRkcmVzcykgOiB1bmRlZmluZWQ7XG4gICAgICBhc3NlcnQoXG4gICAgICAgIHJlY2lwaWVudFJvb3RBZGRyZXNzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0eXBlb2Ygb3V0cHV0LmFkZHJlc3MgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgb3V0cHV0LmFkZHJlc3MgPT09IHJlY2lwaWVudFJvb3RBZGRyZXNzICYmXG4gICAgICAgICAgQmlnTnVtYmVyKG91dHB1dC5hbW91bnQpLmVxKEJpZ051bWJlcihyZWNpcGllbnQuYW1vdW50KSksXG4gICAgICAgICdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cydcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGFuIGFkZHJlc3MgYmVsb25ncyB0byB0aGlzIHdhbGxldC5cbiAgICpcbiAgICogQHBhcmFtIHtUc3NWZXJpZnlJY3BBZGRyZXNzT3B0aW9uc30gcGFyYW1zIC0gVmVyaWZpY2F0aW9uIHBhcmFtZXRlcnNcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFRydWUgaWYgYWRkcmVzcyBiZWxvbmdzIHRvIHdhbGxldFxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Vycm9yfSBJZiBhZGRyZXNzIGZvcm1hdCBpcyBpbnZhbGlkIG9yIGRvZXNuJ3QgbWF0Y2ggZGVyaXZlZCBhZGRyZXNzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpbnZhbGlkIHdhbGxldCB2ZXJzaW9uIG9yIG1pc3NpbmcgcGFyYW1ldGVyc1xuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVHNzVmVyaWZ5SWNwQWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIHJvb3RBZGRyZXNzLCB3YWxsZXRWZXJzaW9uIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBsZXQgYWRkcmVzc1RvVmVyaWZ5ID0gYWRkcmVzcztcbiAgICBpZiAod2FsbGV0VmVyc2lvbiA9PT0gMSkge1xuICAgICAgaWYgKCFyb290QWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvb3RBZGRyZXNzIGlzIHJlcXVpcmVkIGZvciB3YWxsZXQgdmVyc2lvbiAxJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBleHRyYWN0ZWRSb290QWRkcmVzcyA9IHV0aWxzLnZhbGlkYXRlTWVtb0FuZFJldHVyblJvb3RBZGRyZXNzKGFkZHJlc3MpO1xuICAgICAgaWYgKCFleHRyYWN0ZWRSb290QWRkcmVzcyB8fCBleHRyYWN0ZWRSb290QWRkcmVzcyA9PT0gYWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21lbW9JZCBpcyByZXF1aXJlZCBmb3Igd2FsbGV0IHZlcnNpb24gMSBhZGRyZXNzZXMnKTtcbiAgICAgIH1cbiAgICAgIC8vIEluIHRoZSB3YWxsZXQuY3JlYXRlQWRkcmVzcygpIHZlcmlmaWNhdGlvbiBmbG93LCByb290QWRkcmVzcyBpcyB0aGUgd2FsbGV0J3NcbiAgICAgIC8vIG1lbW8tc3VmZml4ZWQgcmVjZWl2ZUFkZHJlc3MgKGUuZy4gJ3Jvb3Q/bWVtb0lkPTMnKSBmb3IgbWVtby1iYXNlZCAod2FsbGV0VmVyc2lvbiAxKVxuICAgICAgLy8gd2FsbGV0cy4gU3RyaXAgdGhlIG1lbW8gc28gYmFyZSByb290cyBhcmUgY29tcGFyZWQgYW5kIHRoZSBiYXJlIHJvb3QgaXNcbiAgICAgIC8vIHdoYXQgZ2V0cyBrZXktdmVyaWZpZWQgYnkgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcy5cbiAgICAgIGNvbnN0IHdhbGxldFJvb3RBZGRyZXNzID0gdXRpbHMudmFsaWRhdGVNZW1vQW5kUmV0dXJuUm9vdEFkZHJlc3Mocm9vdEFkZHJlc3MpO1xuICAgICAgaWYgKCF3YWxsZXRSb290QWRkcmVzcyB8fCBleHRyYWN0ZWRSb290QWRkcmVzcy50b0xvd2VyQ2FzZSgpICE9PSB3YWxsZXRSb290QWRkcmVzcy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKFxuICAgICAgICAgIGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogZXhwZWN0ZWQgJHt3YWxsZXRSb290QWRkcmVzc30gYnV0IGdvdCAke2V4dHJhY3RlZFJvb3RBZGRyZXNzfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFkZHJlc3NUb1ZlcmlmeSA9IHdhbGxldFJvb3RBZGRyZXNzO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4VG9WZXJpZnkgPSB3YWxsZXRWZXJzaW9uID09PSAxID8gMCA6IHBhcmFtcy5pbmRleDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2ZXJpZnlNUENXYWxsZXRBZGRyZXNzKFxuICAgICAgeyAuLi5wYXJhbXMsIGFkZHJlc3M6IGFkZHJlc3NUb1ZlcmlmeSwgaW5kZXg6IGluZGV4VG9WZXJpZnksIGtleUN1cnZlOiAnc2VjcDI1NmsxJyB9LFxuICAgICAgdGhpcy5pc1ZhbGlkQWRkcmVzcy5iaW5kKHRoaXMpLFxuICAgICAgKHB1YktleSkgPT4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHViS2V5KVxuICAgICk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoXG4gICAgICAgIGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogYWRkcmVzcyAke2FkZHJlc3NUb1ZlcmlmeX0gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG5ldyBrZXlwYWlyIGZvciB0aGlzIGNvaW4uXG4gICAqIEBwYXJhbSBzZWVkIFNlZWQgZnJvbSB3aGljaCB0aGUgbmV3IGtleXBhaXIgc2hvdWxkIGJlIGdlbmVyYXRlZCwgb3RoZXJ3aXNlIGEgcmFuZG9tIHNlZWQgaXMgdXNlZFxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgcmV0dXJuIHV0aWxzLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcbiAgfVxuXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihcbiAgICBwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgJiB7IHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHN0cmluZyB9OyBwcnY6IHN0cmluZyB9XG4gICk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcz8udHhQcmVidWlsZD8udHhIZXg7XG4gICAgY29uc3QgcHJpdmF0ZUtleSA9IHBhcmFtcz8ucHJ2O1xuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHhQcmVidWlsZCBwYXJhbWV0ZXI6IHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4Jyk7XG4gICAgfVxuICAgIGlmICghcHJpdmF0ZUtleSkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignbWlzc2luZyByZXF1aXJlZCBwcnYgcGFyYW1ldGVyOiBwYXJhbXMucHJ2Jyk7XG4gICAgfVxuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXJGYWN0b3J5KCk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gYXdhaXQgZmFjdG9yeS5mcm9tKHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4KTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogcGFyYW1zLnBydiB9KTtcbiAgICB0eEJ1aWxkZXIuY29tYmluZSgpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eEhleDogc2VyaWFsaXplZFR4LFxuICAgIH07XG4gIH1cblxuICBpc1ZhbGlkUHViKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoa2V5KTtcbiAgfVxuXG4gIGlzVmFsaWRQcnYoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoa2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy50c3M7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlY2RzYSc7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldEhhc2hGdW5jdGlvbigpOiBIYXNoIHtcbiAgICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2Jyk7XG4gIH1cblxuICBwcml2YXRlIGdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBwcm90ZWN0ZWQgZ2V0UHVibGljTm9kZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBFbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0uaWNwTm9kZVVybDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgLy8gdGhpcyBtZXRob2QgY2FsbHMgdGhlIHB1YmxpYyBub2RlIHRvIGJyb2FkY2FzdCB0aGUgdHJhbnNhY3Rpb24gYW5kIG5vdCB0aGUgcm9zZXR0YSBub2RlXG4gIHB1YmxpYyBhc3luYyBicm9hZGNhc3RUcmFuc2FjdGlvbihwYXlsb2FkOiBCYXNlQnJvYWRjYXN0VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxCYXNlQnJvYWRjYXN0VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuZ2V0UHVibGljTm9kZUJyb2FkY2FzdEVuZHBvaW50KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYm9keUJ5dGVzID0gdXRpbHMuYmxvYkZyb21IZXgocGF5bG9hZC5zZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24pO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KGVuZHBvaW50LCBib2R5Qnl0ZXMsIHtcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2Nib3InIH0sXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJywgLy8gVGhpcyBlbnN1cmVzIHlvdSBnZXQgYSBCdWZmZXIsIG5vdCBhIHN0cmluZ1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyYW5zYWN0aW9uIGJyb2FkY2FzdCBmYWlsZWQgd2l0aCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfSAtICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVjb2RlZFJlc3BvbnNlID0gdXRpbHMuY2JvckRlY29kZShyZXNwb25zZS5kYXRhKSBhcyBQdWJsaWNOb2RlU3VibWl0UmVzcG9uc2U7XG5cbiAgICAgIGlmIChkZWNvZGVkUmVzcG9uc2Uuc3RhdHVzID09PSAncmVwbGllZCcpIHtcbiAgICAgICAgLy8gaXQgaXMgY29uc2lkZXJlZCBhIHN1Y2Nlc3MgYmVjYXVzZSBJQ1AgcmV0dXJucyByZXNwb25zZSBpbiBhIENCT1IgbWFwIHdpdGggYSBzdGF0dXMgb2YgJ3JlcGxpZWQnXG4gICAgICAgIHJldHVybiB7fTsgLy8gcmV0dXJuZWQgZW1wdHkgb2JqZWN0IGFzIElDUCBkb2VzIG5vdCByZXR1cm4gYSB0eGlkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgcmVzcG9uc2Ugc3RhdHVzIGZyb20gbm9kZTogJHtkZWNvZGVkUmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyYW5zYWN0aW9uIGJyb2FkY2FzdCBlcnJvcjogJHtlcnJvcj8ubWVzc2FnZSB8fCBKU09OLnN0cmluZ2lmeShlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQdWJsaWNOb2RlQnJvYWRjYXN0RW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub2RlVXJsID0gdGhpcy5nZXRQdWJsaWNOb2RlVXJsKCk7XG4gICAgY29uc3QgbGVkZ2VyQ2FuaXN0ZXJJZCA9XG4gICAgICB0aGlzLl9zdGF0aWNzQ29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLlRFU1RORVQgPyBURVNUTkVUX0xFREdFUl9DQU5JU1RFUl9JRCA6IExFREdFUl9DQU5JU1RFUl9JRDtcbiAgICBjb25zdCBwcmluY2lwYWwgPSBQcmluY2lwYWwuZnJvbVVpbnQ4QXJyYXkobGVkZ2VyQ2FuaXN0ZXJJZCk7XG4gICAgY29uc3QgY2FuaXN0ZXJJZEhleCA9IHByaW5jaXBhbC50b1RleHQoKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke25vZGVVcmx9JHtQVUJMSUNfTk9ERV9SRVFVRVNUX0VORFBPSU5UfSR7Y2FuaXN0ZXJJZEhleH0vY2FsbGA7XG4gICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGFjY291bnQgYmFsYW5jZSBmb3IgYSBnaXZlbiBwdWJsaWMga2V5LlxuICAgKiBAcGFyYW0gcHVibGljS2V5SGV4IC0gSGV4LWVuY29kZWQgcHVibGljIGtleSBvZiB0aGUgYWNjb3VudC5cbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGFjY291bnQgYmFsYW5jZSBhcyBhIHN0cmluZy5cbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgYmFsYW5jZSBjb3VsZCBub3QgYmUgZmV0Y2hlZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRBY2NvdW50QmFsYW5jZShwdWJsaWNLZXlIZXg6IHN0cmluZyk6IFByb21pc2U8QmlnTnVtYmVyPiB7XG4gICAgY29uc3QgcHJpbmNpcGFsSWQgPSB1dGlscy5nZXRQcmluY2lwYWxJZEZyb21QdWJsaWNLZXkocHVibGljS2V5SGV4KS50b1RleHQoKTtcbiAgICBjb25zdCBhZ2VudCA9IG5ldyBJY3BBZ2VudCh0aGlzLmdldFB1YmxpY05vZGVVcmwoKSwgdGhpcy5fc3RhdGljc0NvaW4pO1xuICAgIHJldHVybiBhZ2VudC5nZXRCYWxhbmNlKHByaW5jaXBhbElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gZmVlIGRhdGEgZnJvbSB0aGUgSUNQIHB1YmxpYyBub2RlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIGBJY3BBZ2VudGAgdXNpbmcgdGhlIHB1YmxpYyBub2RlIFVSTCxcbiAgICogdGhlbiBxdWVyaWVzIHRoZSBub2RlIGZvciB0aGUgY3VycmVudCBmZWUgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYEJpZ051bWJlcmAgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGZlZS5cbiAgICogQHRocm93cyBXaWxsIHByb3BhZ2F0ZSBhbnkgZXJyb3JzIGVuY291bnRlcmVkIHdoaWxlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgSUNQIG5vZGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0RmVlRGF0YSgpOiBQcm9taXNlPEJpZ051bWJlcj4ge1xuICAgIGNvbnN0IGFnZW50ID0gbmV3IEljcEFnZW50KHRoaXMuZ2V0UHVibGljTm9kZVVybCgpLCB0aGlzLl9zdGF0aWNzQ29pbik7XG4gICAgcmV0dXJuIGF3YWl0IGFnZW50LmdldEZlZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZGVyRmFjdG9yeSgpOiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0QmFzZUNoYWluKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gYXJyYXkgb2Ygc2lnbmF0dXJlcyBmb3IgdGhlIHByb3ZpZGVkIHBheWxvYWRzIHVzaW5nIE1QQ1xuICAgKlxuICAgKiBAcGFyYW0gcGF5bG9hZHNEYXRhIC0gVGhlIGRhdGEgY29udGFpbmluZyB0aGUgcGF5bG9hZHMgdG8gYmUgc2lnbmVkLlxuICAgKiBAcGFyYW0gc2VuZGVyUHVibGljS2V5IC0gVGhlIHB1YmxpYyBrZXkgb2YgdGhlIHNlbmRlciBpbiBoZXhhZGVjaW1hbCBmb3JtYXQuXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSBUaGUgdXNlcidzIGtleSBzaGFyZSBhcyBhIEJ1ZmZlci5cbiAgICogQHBhcmFtIGJhY2t1cEtleVNoYXJlIC0gVGhlIGJhY2t1cCBrZXkgc2hhcmUgYXMgYSBCdWZmZXIuXG4gICAqIEBwYXJhbSBjb21tb25LZXlDaGFpbiAtIFRoZSBjb21tb24ga2V5IGNoYWluIGlkZW50aWZpZXIgdXNlZCBmb3IgTVBDIHNpZ25pbmcuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIGBTaWduYXR1cmVzYCBvYmplY3RzLCBlYWNoIGNvbnRhaW5pbmcgdGhlIHNpZ25pbmcgcGF5bG9hZCxcbiAgICogICAgICAgICAgc2lnbmF0dXJlIHR5cGUsIHB1YmxpYyBrZXksIGFuZCB0aGUgZ2VuZXJhdGVkIHNpZ25hdHVyZSBpbiBoZXhhZGVjaW1hbCBmb3JtYXQuXG4gICAqL1xuICBhc3luYyBzaWduYXR1cmVzKFxuICAgIHBheWxvYWRzRGF0YTogUGF5bG9hZHNEYXRhLFxuICAgIHNlbmRlclB1YmxpY0tleTogc3RyaW5nLFxuICAgIHVzZXJLZXlTaGFyZTogQnVmZmVyPEFycmF5QnVmZmVyTGlrZT4sXG4gICAgYmFja3VwS2V5U2hhcmU6IEJ1ZmZlcjxBcnJheUJ1ZmZlckxpa2U+LFxuICAgIGNvbW1vbktleUNoYWluOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxTaWduYXR1cmVzW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHBheWxvYWRzRGF0YS5wYXlsb2Fkc1swXSBhcyBTaWduaW5nUGF5bG9hZDtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbShwYXlsb2FkLmhleF9ieXRlcywgJ2hleCcpO1xuICAgICAgY29uc3QgbWVzc2FnZUhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUobWVzc2FnZSkuZGlnZXN0KCk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBFQ0RTQVV0aWxzLnNpZ25SZWNvdmVyeU1wY1YyKG1lc3NhZ2VIYXNoLCB1c2VyS2V5U2hhcmUsIGJhY2t1cEtleVNoYXJlLCBjb21tb25LZXlDaGFpbik7XG4gICAgICBjb25zdCBzaWduYXR1cmVQYXlsb2FkOiBTaWduYXR1cmVzID0ge1xuICAgICAgICBzaWduaW5nX3BheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgIHNpZ25hdHVyZV90eXBlOiBwYXlsb2FkLnNpZ25hdHVyZV90eXBlLFxuICAgICAgICBwdWJsaWNfa2V5OiB7XG4gICAgICAgICAgaGV4X2J5dGVzOiBzZW5kZXJQdWJsaWNLZXksXG4gICAgICAgICAgY3VydmVfdHlwZTogQ3VydmVUeXBlLlNFQ1AyNTZLMSxcbiAgICAgICAgfSxcbiAgICAgICAgaGV4X2J5dGVzOiBzaWduYXR1cmUuciArIHNpZ25hdHVyZS5zLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFtzaWduYXR1cmVQYXlsb2FkXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBnZW5lcmF0aW5nIHNpZ25hdHVyZXM6ICR7ZXJyb3IubWVzc2FnZSB8fCBlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeVRyYW5zYWN0aW9uIHwgVW5zaWduZWRTd2VlcFJlY292ZXJ5VHJhbnNhY3Rpb24+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiB8fCAhdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJlY292ZXJ5RGVzdGluYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gIXBhcmFtcy51c2VyS2V5ICYmICFwYXJhbXMuYmFja3VwS2V5ICYmICFwYXJhbXMud2FsbGV0UGFzc3BocmFzZTtcblxuICAgICAgbGV0IHB1YmxpY0tleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHVzZXJLZXlTaGFyZSwgYmFja3VwS2V5U2hhcmUsIGNvbW1vbktleUNoYWluO1xuICAgICAgY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG5cbiAgICAgIGlmICghaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICAgIGlmICghcGFyYW1zLnVzZXJLZXkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdXNlcktleScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXJhbXMuYmFja3VwS2V5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGJhY2t1cEtleScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXJhbXMud2FsbGV0UGFzc3BocmFzZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXNlcktleSA9IHBhcmFtcy51c2VyS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgIGNvbnN0IGJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXkucmVwbGFjZSgvXFxzL2csICcnKTtcblxuICAgICAgICAoeyB1c2VyS2V5U2hhcmUsIGJhY2t1cEtleVNoYXJlLCBjb21tb25LZXlDaGFpbiB9ID0gYXdhaXQgRUNEU0FVdGlscy5nZXRNcGNWMlJlY292ZXJ5S2V5U2hhcmVzKFxuICAgICAgICAgIHVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5LFxuICAgICAgICAgIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIHRoaXMuYml0Z29cbiAgICAgICAgKSk7XG4gICAgICAgIHB1YmxpY0tleSA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleUNoYWluLCBST09UX1BBVEgpLnNsaWNlKDAsIDY2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJpdGdvS2V5ID0gcGFyYW1zLmJpdGdvS2V5O1xuICAgICAgICBpZiAoIWJpdGdvS2V5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGJpdGdvS2V5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoZFRyZWUgPSBuZXcgbXBjLlNlY3AyNTZrMUJpcDMySGRUcmVlKCk7XG4gICAgICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gJ20vMCc7XG4gICAgICAgIGNvbnN0IGRlcml2ZWRQdWIgPSBoZFRyZWUucHVibGljRGVyaXZlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBrOiBtcGMuYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGJpdGdvS2V5LnNsaWNlKDAsIDY2KSwgJ2hleCcpKSxcbiAgICAgICAgICAgIGNoYWluY29kZTogbXBjLmJpZ0ludEZyb21CdWZmZXJCRShCdWZmZXIuZnJvbShiaXRnb0tleS5zbGljZSg2NiksICdoZXgnKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXJpdmF0aW9uUGF0aFxuICAgICAgICApO1xuXG4gICAgICAgIHB1YmxpY0tleSA9IG1wYy5iaWdJbnRUb0J1ZmZlckJFKGRlcml2ZWRQdWIucGspLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwdWJsaWNLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gZGVyaXZlIHB1YmxpYyBrZXknKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9IHRoaXMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICAgIGNvbnN0IGJhbGFuY2UgPSBhd2FpdCB0aGlzLmdldEFjY291bnRCYWxhbmNlKHB1YmxpY0tleSk7XG4gICAgICBjb25zdCBmZWVEYXRhID0gYXdhaXQgdGhpcy5nZXRGZWVEYXRhKCk7XG4gICAgICBpZiAoYmFsYW5jZS5pc0xlc3NUaGFuT3JFcXVhbFRvKDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvck5vSW5wdXRUb1JlY292ZXIoJ0RpZCBub3QgaGF2ZSBlbm91Z2ggZnVuZHMgdG8gcmVjb3ZlcicpO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0dWFsQmFsYW5jZSA9IGJhbGFuY2UubWludXMoZmVlRGF0YSk7XG4gICAgICBpZiAoYWN0dWFsQmFsYW5jZS5pc0xlc3NUaGFuT3JFcXVhbFRvKDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBoYXZlIGVub3VnaCBmdW5kcyB0byByZWNvdmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXJGYWN0b3J5KCk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcihzZW5kZXJBZGRyZXNzLCBwdWJsaWNLZXkgYXMgc3RyaW5nKTtcbiAgICAgIHR4QnVpbGRlci5yZWNlaXZlcklkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnQoYWN0dWFsQmFsYW5jZS50b1N0cmluZygpKTtcbiAgICAgIGlmIChwYXJhbXMubWVtbyAhPT0gdW5kZWZpbmVkICYmIHV0aWxzLnZhbGlkYXRlTWVtbyhwYXJhbXMubWVtbykpIHtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oTnVtYmVyKHBhcmFtcy5tZW1vKSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGlmICh0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhLnBheWxvYWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcGF5bG9hZHMgdG8gZ2VuZXJhdGUgc2lnbmF0dXJlcycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHhIZXg6IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uLFxuICAgICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IGF3YWl0IHRoaXMuc2lnbmF0dXJlcyhcbiAgICAgICAgdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBjb21tb25LZXlDaGFpblxuICAgICAgKTtcbiAgICAgIGlmICghc2lnbmF0dXJlcyB8fCBzaWduYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBzaWduYXR1cmVzJyk7XG4gICAgICB9XG4gICAgICB0eEJ1aWxkZXIudHJhbnNhY3Rpb24uYWRkU2lnbmF0dXJlKHNpZ25hdHVyZXMpO1xuICAgICAgdHhCdWlsZGVyLmNvbWJpbmUoKTtcbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJvYWRjYXN0VHJhbnNhY3Rpb24oeyBzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb246IGJyb2FkY2FzdGFibGVUeG4gfSk7XG4gICAgICBjb25zdCB0eElkID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLmlkO1xuICAgICAgY29uc3QgcmVjb3ZlcmVkVHJhbnNhY3Rpb246IFJlY292ZXJ5VHJhbnNhY3Rpb24gPSB7XG4gICAgICAgIGlkOiB0eElkLFxuICAgICAgICB0eDogYnJvYWRjYXN0YWJsZVR4bixcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVjb3ZlcmVkVHJhbnNhY3Rpb247XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFJlY292ZXJ5UHJvdmlkZXJFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIEVycm9yTm9JbnB1dFRvUmVjb3Zlcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZHVyaW5nIElDUCByZWNvdmVyeTogJHtlcnJvci5tZXNzYWdlIHx8IGVycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7IG11bHRpU2lnVHlwZSwgcHJ2LCBwdWJsaWNLZXkgfTogQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMpIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlICE9PSAndHNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBtdWx0aXNpZ3R5cGUgJyk7XG4gICAgfVxuICAgIGF1ZGl0RWNkc2FQcml2YXRlS2V5KHBydiBhcyBzdHJpbmcsIHB1YmxpY0tleSBhcyBzdHJpbmcpO1xuICB9XG59XG4iXX0=
424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsOENBd0J5QjtBQUN6Qiw0Q0FBaUY7QUFDakYsa0RBQStDO0FBQy9DLGtEQUEwQjtBQUMxQixnRUFBcUM7QUFDckMsbUNBQTBDO0FBQzFDLHdEQUEwQztBQUUxQyx1Q0FnQnFCO0FBQ3JCLCtFQUE0RTtBQUM1RSx3REFBZ0M7QUFDaEMsb0RBQTBEO0FBQzFELDZDQUEwQztBQUUxQzs7Ozs7O0dBTUc7QUFDSCxNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUUvQixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFB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Z0IsRUFBRSxDQUFDLENBQUM7WUFDbkYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxvQkFBb0IsR0FBd0I7Z0JBQ2hELEVBQUUsRUFBRSxJQUFJO2dCQUNSLEVBQUUsRUFBRSxnQkFBZ0I7YUFDckIsQ0FBQztZQUNGLE9BQU8sb0JBQW9CLENBQUM7UUFDOUIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSxnQ0FBcUIsSUFBSSxLQUFLLFlBQVksZ0NBQXFCLEVBQUUsQ0FBQztnQkFDckYsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQTJCO1FBQ3pFLElBQUksWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsSUFBQSxrQ0FBb0IsRUFBQyxHQUFhLEVBQUUsU0FBbUIsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRjtBQXZjRCxrQkF1Y0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyxcbiAgQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uUmVzdWx0LFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBFY2RzYSxcbiAgRUNEU0FVdGlscyxcbiAgRW52aXJvbm1lbnRzLFxuICBFcnJvck5vSW5wdXRUb1JlY292ZXIsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIEtleVBhaXIsXG4gIE1QQ0FsZ29yaXRobSxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFJlY292ZXJ5UHJvdmlkZXJFcnJvcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25pbmdFcnJvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICB2ZXJpZnlNUENXYWxsZXRBZGRyZXNzLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMsIE5ldHdvcmtUeXBlLCBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4gfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBQcmluY2lwYWwgfSBmcm9tICdAZGZpbml0eS9wcmluY2lwYWwnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IGNyZWF0ZUhhc2gsIEhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgbXBjIGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5cbmltcG9ydCB7XG4gIEN1cnZlVHlwZSxcbiAgTEVER0VSX0NBTklTVEVSX0lELFxuICBURVNUTkVUX0xFREdFUl9DQU5JU1RFUl9JRCxcbiAgUGF5bG9hZHNEYXRhLFxuICBQVUJMSUNfTk9ERV9SRVFVRVNUX0VORFBPSU5ULFxuICBQdWJsaWNOb2RlU3VibWl0UmVzcG9uc2UsXG4gIFJlY292ZXJ5T3B0aW9ucyxcbiAgUmVjb3ZlcnlUcmFuc2FjdGlvbixcbiAgUk9PVF9QQVRILFxuICBTaWduYXR1cmVzLFxuICBTaWduaW5nUGF5bG9hZCxcbiAgSWNwVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVHJhbnNhY3Rpb25IZXhQYXJhbXMsXG4gIFRzc1ZlcmlmeUljcEFkZHJlc3NPcHRpb25zLFxuICBVbnNpZ25lZFN3ZWVwUmVjb3ZlcnlUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi9saWIvaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7IGF1ZGl0RWNkc2FQcml2YXRlS2V5IH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7IEljcEFnZW50IH0gZnJvbSAnLi9saWIvaWNwQWdlbnQnO1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyB0aGUgSW50ZXJuZXQgQ29tcHV0ZXIgKElDUCkgY29pbi5cbiAqIEV4dGVuZHMgdGhlIEJhc2VDb2luIGNsYXNzIGFuZCBwcm92aWRlcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgZm9yIElDUC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2ludGVybmV0Y29tcHV0ZXIub3JnL31cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaW50ZXJuZXRjb21wdXRlci5vcmcvZG9jcy9jdXJyZW50L2RldmVsb3Blci1kb2NzL2RlZmkvcm9zZXR0YS9pY3Bfcm9zZXR0YS9kYXRhX2FwaS99XG4gKi9cbmV4cG9ydCBjbGFzcyBJY3AgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBJY3AoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdpY3AnO1xuICB9XG5cbiAgZ2V0QmFzZUNoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdpY3AnO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdJbnRlcm5ldCBDb21wdXRlcic7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IFRyYW5zYWN0aW9uSGV4UGFyYW1zKTogUHJvbWlzZTxJY3BUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlckZhY3RvcnkoKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBhd2FpdCBmYWN0b3J5LmZyb20ocGFyYW1zLnRyYW5zYWN0aW9uSGV4KTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGlmIChwYXJhbXMuc2lnbmFibGVIZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVkU2lnbmFibGVIZXggPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhLnBheWxvYWRzWzBdLmhleF9ieXRlcztcbiAgICAgIGlmIChnZW5lcmF0ZWRTaWduYWJsZUhleCAhPT0gcGFyYW1zLnNpZ25hYmxlSGV4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2VuZXJhdGVkIHNpZ25hYmxlSGV4IGlzIG5vdCBlcXVhbCB0byBwYXJhbXMuc2lnbmFibGVIZXgnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdHhIZXggPSB0eFByZWJ1aWxkPy50eEhleDtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHR4SGV4UGFyYW1zOiBUcmFuc2FjdGlvbkhleFBhcmFtcyA9IHtcbiAgICAgIHRyYW5zYWN0aW9uSGV4OiB0eEhleCxcbiAgICB9O1xuXG4gICAgaWYgKHR4UHJlYnVpbGQudHhJbmZvICYmIHR4UHJlYnVpbGQudHhJbmZvICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHR4UHJlYnVpbGQudHhJbmZvID09PSAnc3RyaW5nJykge1xuICAgICAgdHhIZXhQYXJhbXMuc2lnbmFibGVIZXggPSB0eFByZWJ1aWxkLnR4SW5mbztcbiAgICB9XG5cbiAgICBjb25zdCBleHBsYWluZWRUeCA9IGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHR4SGV4UGFyYW1zKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHR4UGFyYW1zLnJlY2lwaWVudHMpICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5nZXRDaGFpbigpfSBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyB0byBtb3JlIHRoYW4gMSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVHJ5IGFnYWluLCB1c2luZyBvbmx5IGEgc2luZ2xlIHJlY2lwaWVudC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhc3NlcnQoZXhwbGFpbmVkVHgub3V0cHV0cy5sZW5ndGggPT09IDEsICdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBleHBsYWluZWRUeC5vdXRwdXRzWzBdO1xuICAgICAgY29uc3QgcmVjaXBpZW50ID0gdHhQYXJhbXMucmVjaXBpZW50c1swXTtcbiAgICAgIGNvbnN0IHJlY2lwaWVudFJvb3RBZGRyZXNzID1cbiAgICAgICAgdHlwZW9mIHJlY2lwaWVudC5hZGRyZXNzID09PSAnc3RyaW5nJyA/IHV0aWxzLnZhbGlkYXRlTWVtb0FuZFJldHVyblJvb3RBZGRyZXNzKHJlY2lwaWVudC5hZGRyZXNzKSA6IHVuZGVmaW5lZDtcbiAgICAgIGFzc2VydChcbiAgICAgICAgcmVjaXBpZW50Um9vdEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHR5cGVvZiBvdXRwdXQuYWRkcmVzcyA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvdXRwdXQuYWRkcmVzcyA9PT0gcmVjaXBpZW50Um9vdEFkZHJlc3MgJiZcbiAgICAgICAgICBCaWdOdW1iZXIob3V0cHV0LmFtb3VudCkuZXEoQmlnTnVtYmVyKHJlY2lwaWVudC5hbW91bnQpKSxcbiAgICAgICAgJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYW4gYWRkcmVzcyBiZWxvbmdzIHRvIHRoaXMgd2FsbGV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1Rzc1ZlcmlmeUljcEFkZHJlc3NPcHRpb25zfSBwYXJhbXMgLSBWZXJpZmljYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gVHJ1ZSBpZiBhZGRyZXNzIGJlbG9uZ3MgdG8gd2FsbGV0XG4gICAqIEB0aHJvd3Mge0ludmFsaWRBZGRyZXNzRXJyb3J9IElmIGFkZHJlc3MgZm9ybWF0IGlzIGludmFsaWQgb3IgZG9lc24ndCBtYXRjaCBkZXJpdmVkIGFkZHJlc3NcbiAgICogQHRocm93cyB7RXJyb3J9IElmIGludmFsaWQgd2FsbGV0IHZlcnNpb24gb3IgbWlzc2luZyBwYXJhbWV0ZXJzXG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBUc3NWZXJpZnlJY3BBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywgcm9vdEFkZHJlc3MsIHdhbGxldFZlcnNpb24gfSA9IHBhcmFtcztcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGxldCBhZGRyZXNzVG9WZXJpZnkgPSBhZGRyZXNzO1xuICAgIGlmICh3YWxsZXRWZXJzaW9uID09PSAxKSB7XG4gICAgICBpZiAoIXJvb3RBZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncm9vdEFkZHJlc3MgaXMgcmVxdWlyZWQgZm9yIHdhbGxldCB2ZXJzaW9uIDEnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4dHJhY3RlZFJvb3RBZGRyZXNzID0gdXRpbHMudmFsaWRhdGVNZW1vQW5kUmV0dXJuUm9vdEFkZHJlc3MoYWRkcmVzcyk7XG4gICAgICBpZiAoIWV4dHJhY3RlZFJvb3RBZGRyZXNzIHx8IGV4dHJhY3RlZFJvb3RBZGRyZXNzID09PSBhZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbWVtb0lkIGlzIHJlcXVpcmVkIGZvciB3YWxsZXQgdmVyc2lvbiAxIGFkZHJlc3NlcycpO1xuICAgICAgfVxuICAgICAgLy8gSW4gdGhlIHdhbGxldC5jcmVhdGVBZGRyZXNzKCkgdmVyaWZpY2F0aW9uIGZsb3csIHJvb3RBZGRyZXNzIGlzIHRoZSB3YWxsZXQnc1xuICAgICAgLy8gbWVtby1zdWZmaXhlZCByZWNlaXZlQWRkcmVzcyAoZS5nLiAncm9vdD9tZW1vSWQ9MycpIGZvciBtZW1vLWJhc2VkICh3YWxsZXRWZXJzaW9uIDEpXG4gICAgICAvLyB3YWxsZXRzLiBTdHJpcCB0aGUgbWVtbyBzbyBiYXJlIHJvb3RzIGFyZSBjb21wYXJlZCBhbmQgdGhlIGJhcmUgcm9vdCBpc1xuICAgICAgLy8gd2hhdCBnZXRzIGtleS12ZXJpZmllZCBieSB2ZXJpZnlNUENXYWxsZXRBZGRyZXNzLlxuICAgICAgY29uc3Qgd2FsbGV0Um9vdEFkZHJlc3MgPSB1dGlscy52YWxpZGF0ZU1lbW9BbmRSZXR1cm5Sb290QWRkcmVzcyhyb290QWRkcmVzcyk7XG4gICAgICBpZiAoIXdhbGxldFJvb3RBZGRyZXNzIHx8IGV4dHJhY3RlZFJvb3RBZGRyZXNzLnRvTG93ZXJDYXNlKCkgIT09IHdhbGxldFJvb3RBZGRyZXNzLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoXG4gICAgICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBleHBlY3RlZCAke3dhbGxldFJvb3RBZGRyZXNzfSBidXQgZ290ICR7ZXh0cmFjdGVkUm9vdEFkZHJlc3N9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYWRkcmVzc1RvVmVyaWZ5ID0gd2FsbGV0Um9vdEFkZHJlc3M7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXhUb1ZlcmlmeSA9IHdhbGxldFZlcnNpb24gPT09IDEgPyAwIDogcGFyYW1zLmluZGV4O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeU1QQ1dhbGxldEFkZHJlc3MoXG4gICAgICB7IC4uLnBhcmFtcywgYWRkcmVzczogYWRkcmVzc1RvVmVyaWZ5LCBpbmRleDogaW5kZXhUb1ZlcmlmeSwga2V5Q3VydmU6ICdzZWNwMjU2azEnIH0sXG4gICAgICB0aGlzLmlzVmFsaWRBZGRyZXNzLmJpbmQodGhpcyksXG4gICAgICAocHViS2V5KSA9PiB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJLZXkpXG4gICAgKTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihcbiAgICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBhZGRyZXNzICR7YWRkcmVzc1RvVmVyaWZ5fSBpcyBub3QgYSB3YWxsZXQgYWRkcmVzc2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IGtleXBhaXIgZm9yIHRoaXMgY29pbi5cbiAgICogQHBhcmFtIHNlZWQgU2VlZCBmcm9tIHdoaWNoIHRoZSBuZXcga2V5cGFpciBzaG91bGQgYmUgZ2VuZXJhdGVkLCBvdGhlcndpc2UgYSByYW5kb20gc2VlZCBpcyB1c2VkXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICByZXR1cm4gdXRpbHMuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICB9XG5cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKFxuICAgIHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9ucyAmIHsgdHhQcmVidWlsZDogeyB0eEhleDogc3RyaW5nIH07IHBydjogc3RyaW5nIH1cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gcGFyYW1zPy50eFByZWJ1aWxkPy50eEhleDtcbiAgICBjb25zdCBwcml2YXRlS2V5ID0gcGFyYW1zPy5wcnY7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eFByZWJ1aWxkIHBhcmFtZXRlcjogcGFyYW1zLnR4UHJlYnVpbGQudHhIZXgnKTtcbiAgICB9XG4gICAgaWYgKCFwcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBydiBwYXJhbWV0ZXI6IHBhcmFtcy5wcnYnKTtcbiAgICB9XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlckZhY3RvcnkoKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBhd2FpdCBmYWN0b3J5LmZyb20ocGFyYW1zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBwYXJhbXMucHJ2IH0pO1xuICAgIHR4QnVpbGRlci5jb21iaW5lKCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFR4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHgsXG4gICAgfTtcbiAgfVxuXG4gIGlzVmFsaWRQdWIoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZFB1YmxpY0tleShrZXkpO1xuICB9XG5cbiAgaXNWYWxpZFBydihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShrZXkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLnRzcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ2VjZHNhJztcbiAgfVxuXG4gIGFsbG93c0FjY291bnRDb25zb2xpZGF0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gcGxhdGZvcm0gZW5mb3JjZXMgVjItb25seSAoQ0VDSE8tMjQ0MylcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgZ2V0SGFzaEZ1bmN0aW9uKCk6IEhhc2gge1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIHByb3RlY3RlZCBnZXRQdWJsaWNOb2RlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5pY3BOb2RlVXJsO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICAvLyB0aGlzIG1ldGhvZCBjYWxscyB0aGUgcHVibGljIG5vZGUgdG8gYnJvYWRjYXN0IHRoZSB0cmFuc2FjdGlvbiBhbmQgbm90IHRoZSByb3NldHRhIG5vZGVcbiAgcHVibGljIGFzeW5jIGJyb2FkY2FzdFRyYW5zYWN0aW9uKHBheWxvYWQ6IEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5nZXRQdWJsaWNOb2RlQnJvYWRjYXN0RW5kcG9pbnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBib2R5Qnl0ZXMgPSB1dGlscy5ibG9iRnJvbUhleChwYXlsb2FkLnNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbik7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoZW5kcG9pbnQsIGJvZHlCeXRlcywge1xuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vY2JvcicgfSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLCAvLyBUaGlzIGVuc3VyZXMgeW91IGdldCBhIEJ1ZmZlciwgbm90IGEgc3RyaW5nXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNhY3Rpb24gYnJvYWRjYXN0IGZhaWxlZCB3aXRoIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9IC0gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWNvZGVkUmVzcG9uc2UgPSB1dGlscy5jYm9yRGVjb2RlKHJlc3BvbnNlLmRhdGEpIGFzIFB1YmxpY05vZGVTdWJtaXRSZXNwb25zZTtcblxuICAgICAgaWYgKGRlY29kZWRSZXNwb25zZS5zdGF0dXMgPT09ICdyZXBsaWVkJykge1xuICAgICAgICAvLyBpdCBpcyBjb25zaWRlcmVkIGEgc3VjY2VzcyBiZWNhdXNlIElDUCByZXR1cm5zIHJlc3BvbnNlIGluIGEgQ0JPUiBtYXAgd2l0aCBhIHN0YXR1cyBvZiAncmVwbGllZCdcbiAgICAgICAgcmV0dXJuIHt9OyAvLyByZXR1cm5lZCBlbXB0eSBvYmplY3QgYXMgSUNQIGRvZXMgbm90IHJldHVybiBhIHR4aWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCByZXNwb25zZSBzdGF0dXMgZnJvbSBub2RlOiAke2RlY29kZWRSZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNhY3Rpb24gYnJvYWRjYXN0IGVycm9yOiAke2Vycm9yPy5tZXNzYWdlIHx8IEpTT04uc3RyaW5naWZ5KGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFB1YmxpY05vZGVCcm9hZGNhc3RFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vZGVVcmwgPSB0aGlzLmdldFB1YmxpY05vZGVVcmwoKTtcbiAgICBjb25zdCBsZWRnZXJDYW5pc3RlcklkID1cbiAgICAgIHRoaXMuX3N0YXRpY3NDb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuVEVTVE5FVCA/IFRFU1RORVRfTEVER0VSX0NBTklTVEVSX0lEIDogTEVER0VSX0NBTklTVEVSX0lEO1xuICAgIGNvbnN0IHByaW5jaXBhbCA9IFByaW5jaXBhbC5mcm9tVWludDhBcnJheShsZWRnZXJDYW5pc3RlcklkKTtcbiAgICBjb25zdCBjYW5pc3RlcklkSGV4ID0gcHJpbmNpcGFsLnRvVGV4dCgpO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7bm9kZVVybH0ke1BVQkxJQ19OT0RFX1JFUVVFU1RfRU5EUE9JTlR9JHtjYW5pc3RlcklkSGV4fS9jYWxsYDtcbiAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgYWNjb3VudCBiYWxhbmNlIGZvciBhIGdpdmVuIHB1YmxpYyBrZXkuXG4gICAqIEBwYXJhbSBwdWJsaWNLZXlIZXggLSBIZXgtZW5jb2RlZCBwdWJsaWMga2V5IG9mIHRoZSBhY2NvdW50LlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgYWNjb3VudCBiYWxhbmNlIGFzIGEgc3RyaW5nLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBiYWxhbmNlIGNvdWxkIG5vdCBiZSBmZXRjaGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFjY291bnRCYWxhbmNlKHB1YmxpY0tleUhleDogc3RyaW5nKTogUHJvbWlzZTxCaWdOdW1iZXI+IHtcbiAgICBjb25zdCBwcmluY2lwYWxJZCA9IHV0aWxzLmdldFByaW5jaXBhbElkRnJvbVB1YmxpY0tleShwdWJsaWNLZXlIZXgpLnRvVGV4dCgpO1xuICAgIGNvbnN0IGFnZW50ID0gbmV3IEljcEFnZW50KHRoaXMuZ2V0UHVibGljTm9kZVVybCgpLCB0aGlzLl9zdGF0aWNzQ29pbik7XG4gICAgcmV0dXJuIGFnZW50LmdldEJhbGFuY2UocHJpbmNpcGFsSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBmZWUgZGF0YSBmcm9tIHRoZSBJQ1AgcHVibGljIG5vZGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYEljcEFnZW50YCB1c2luZyB0aGUgcHVibGljIG5vZGUgVVJMLFxuICAgKiB0aGVuIHF1ZXJpZXMgdGhlIG5vZGUgZm9yIHRoZSBjdXJyZW50IGZlZSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBgQmlnTnVtYmVyYCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gZmVlLlxuICAgKiBAdGhyb3dzIFdpbGwgcHJvcGFnYXRlIGFueSBlcnJvcnMgZW5jb3VudGVyZWQgd2hpbGUgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBJQ1Agbm9kZS5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRGZWVEYXRhKCk6IFByb21pc2U8QmlnTnVtYmVyPiB7XG4gICAgY29uc3QgYWdlbnQgPSBuZXcgSWNwQWdlbnQodGhpcy5nZXRQdWJsaWNOb2RlVXJsKCksIHRoaXMuX3N0YXRpY3NDb2luKTtcbiAgICByZXR1cm4gYXdhaXQgYWdlbnQuZ2V0RmVlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1aWxkZXJGYWN0b3J5KCk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiBzaWduYXR1cmVzIGZvciB0aGUgcHJvdmlkZWQgcGF5bG9hZHMgdXNpbmcgTVBDXG4gICAqXG4gICAqIEBwYXJhbSBwYXlsb2Fkc0RhdGEgLSBUaGUgZGF0YSBjb250YWluaW5nIHRoZSBwYXlsb2FkcyB0byBiZSBzaWduZWQuXG4gICAqIEBwYXJhbSBzZW5kZXJQdWJsaWNLZXkgLSBUaGUgcHVibGljIGtleSBvZiB0aGUgc2VuZGVyIGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICogQHBhcmFtIHVzZXJLZXlTaGFyZSAtIFRoZSB1c2VyJ3Mga2V5IHNoYXJlIGFzIGEgQnVmZmVyLlxuICAgKiBAcGFyYW0gYmFja3VwS2V5U2hhcmUgLSBUaGUgYmFja3VwIGtleSBzaGFyZSBhcyBhIEJ1ZmZlci5cbiAgICogQHBhcmFtIGNvbW1vbktleUNoYWluIC0gVGhlIGNvbW1vbiBrZXkgY2hhaW4gaWRlbnRpZmllciB1c2VkIGZvciBNUEMgc2lnbmluZy5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2YgYFNpZ25hdHVyZXNgIG9iamVjdHMsIGVhY2ggY29udGFpbmluZyB0aGUgc2lnbmluZyBwYXlsb2FkLFxuICAgKiAgICAgICAgICBzaWduYXR1cmUgdHlwZSwgcHVibGljIGtleSwgYW5kIHRoZSBnZW5lcmF0ZWQgc2lnbmF0dXJlIGluIGhleGFkZWNpbWFsIGZvcm1hdC5cbiAgICovXG4gIGFzeW5jIHNpZ25hdHVyZXMoXG4gICAgcGF5bG9hZHNEYXRhOiBQYXlsb2Fkc0RhdGEsXG4gICAgc2VuZGVyUHVibGljS2V5OiBzdHJpbmcsXG4gICAgdXNlcktleVNoYXJlOiBCdWZmZXI8QXJyYXlCdWZmZXJMaWtlPixcbiAgICBiYWNrdXBLZXlTaGFyZTogQnVmZmVyPEFycmF5QnVmZmVyTGlrZT4sXG4gICAgY29tbW9uS2V5Q2hhaW46IHN0cmluZ1xuICApOiBQcm9taXNlPFNpZ25hdHVyZXNbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gcGF5bG9hZHNEYXRhLnBheWxvYWRzWzBdIGFzIFNpZ25pbmdQYXlsb2FkO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IEJ1ZmZlci5mcm9tKHBheWxvYWQuaGV4X2J5dGVzLCAnaGV4Jyk7XG4gICAgICBjb25zdCBtZXNzYWdlSGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoKTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IEVDRFNBVXRpbHMuc2lnblJlY292ZXJ5TXBjVjIobWVzc2FnZUhhc2gsIHVzZXJLZXlTaGFyZSwgYmFja3VwS2V5U2hhcmUsIGNvbW1vbktleUNoYWluKTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZVBheWxvYWQ6IFNpZ25hdHVyZXMgPSB7XG4gICAgICAgIHNpZ25pbmdfcGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgc2lnbmF0dXJlX3R5cGU6IHBheWxvYWQuc2lnbmF0dXJlX3R5cGUsXG4gICAgICAgIHB1YmxpY19rZXk6IHtcbiAgICAgICAgICBoZXhfYnl0ZXM6IHNlbmRlclB1YmxpY0tleSxcbiAgICAgICAgICBjdXJ2ZV90eXBlOiBDdXJ2ZVR5cGUuU0VDUDI1NksxLFxuICAgICAgICB9LFxuICAgICAgICBoZXhfYnl0ZXM6IHNpZ25hdHVyZS5yICsgc2lnbmF0dXJlLnMsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gW3NpZ25hdHVyZVBheWxvYWRdO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGdlbmVyYXRpbmcgc2lnbmF0dXJlczogJHtlcnJvci5tZXNzYWdlIHx8IGVycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyeU9wdGlvbnMpOiBQcm9taXNlPFJlY292ZXJ5VHJhbnNhY3Rpb24gfCBVbnNpZ25lZFN3ZWVwUmVjb3ZlcnlUcmFuc2FjdGlvbj4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uIHx8ICF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1Vuc2lnbmVkU3dlZXAgPSAhcGFyYW1zLnVzZXJLZXkgJiYgIXBhcmFtcy5iYWNrdXBLZXkgJiYgIXBhcmFtcy53YWxsZXRQYXNzcGhyYXNlO1xuXG4gICAgICBsZXQgcHVibGljS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgdXNlcktleVNoYXJlLCBiYWNrdXBLZXlTaGFyZSwgY29tbW9uS2V5Q2hhaW47XG4gICAgICBjb25zdCBNUEMgPSBuZXcgRWNkc2EoKTtcblxuICAgICAgaWYgKCFpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgICAgaWYgKCFwYXJhbXMudXNlcktleSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB1c2VyS2V5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhcmFtcy5iYWNrdXBLZXkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgYmFja3VwS2V5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhcmFtcy53YWxsZXRQYXNzcGhyYXNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHdhbGxldCBwYXNzcGhyYXNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1c2VyS2V5ID0gcGFyYW1zLnVzZXJLZXkucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICAgICAgY29uc3QgYmFja3VwS2V5ID0gcGFyYW1zLmJhY2t1cEtleS5yZXBsYWNlKC9cXHMvZywgJycpO1xuXG4gICAgICAgICh7IHVzZXJLZXlTaGFyZSwgYmFja3VwS2V5U2hhcmUsIGNvbW1vbktleUNoYWluIH0gPSBhd2FpdCBFQ0RTQVV0aWxzLmdldE1wY1YyUmVjb3ZlcnlLZXlTaGFyZXMoXG4gICAgICAgICAgdXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXksXG4gICAgICAgICAgcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgdGhpcy5iaXRnb1xuICAgICAgICApKTtcbiAgICAgICAgcHVibGljS2V5ID0gTVBDLmRlcml2ZVVuaGFyZGVuZWQoY29tbW9uS2V5Q2hhaW4sIFJPT1RfUEFUSCkuc2xpY2UoMCwgNjYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYml0Z29LZXkgPSBwYXJhbXMuYml0Z29LZXk7XG4gICAgICAgIGlmICghYml0Z29LZXkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgYml0Z29LZXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhkVHJlZSA9IG5ldyBtcGMuU2VjcDI1NmsxQmlwMzJIZFRyZWUoKTtcbiAgICAgICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcbiAgICAgICAgY29uc3QgZGVyaXZlZFB1YiA9IGhkVHJlZS5wdWJsaWNEZXJpdmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGs6IG1wYy5iaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYml0Z29LZXkuc2xpY2UoMCwgNjYpLCAnaGV4JykpLFxuICAgICAgICAgICAgY2hhaW5jb2RlOiBtcGMuYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGJpdGdvS2V5LnNsaWNlKDY2KSwgJ2hleCcpKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoXG4gICAgICAgICk7XG5cbiAgICAgICAgcHVibGljS2V5ID0gbXBjLmJpZ0ludFRvQnVmZmVyQkUoZGVyaXZlZFB1Yi5waykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXB1YmxpY0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBkZXJpdmUgcHVibGljIGtleScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZW5kZXJBZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXkpO1xuICAgICAgY29uc3QgYmFsYW5jZSA9IGF3YWl0IHRoaXMuZ2V0QWNjb3VudEJhbGFuY2UocHVibGljS2V5KTtcbiAgICAgIGNvbnN0IGZlZURhdGEgPSBhd2FpdCB0aGlzLmdldEZlZURhdGEoKTtcbiAgICAgIGlmIChiYWxhbmNlLmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yTm9JbnB1dFRvUmVjb3ZlcignRGlkIG5vdCBoYXZlIGVub3VnaCBmdW5kcyB0byByZWNvdmVyJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWxCYWxhbmNlID0gYmFsYW5jZS5taW51cyhmZWVEYXRhKTtcbiAgICAgIGlmIChhY3R1YWxCYWxhbmNlLmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWQgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvIHJlY292ZXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlckZhY3RvcnkoKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHNlbmRlckFkZHJlc3MsIHB1YmxpY0tleSBhcyBzdHJpbmcpO1xuICAgICAgdHhCdWlsZGVyLnJlY2VpdmVySWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgICAgdHhCdWlsZGVyLmFtb3VudChhY3R1YWxCYWxhbmNlLnRvU3RyaW5nKCkpO1xuICAgICAgaWYgKHBhcmFtcy5tZW1vICE9PSB1bmRlZmluZWQgJiYgdXRpbHMudmFsaWRhdGVNZW1vKHBhcmFtcy5tZW1vKSkge1xuICAgICAgICB0eEJ1aWxkZXIubWVtbyhOdW1iZXIocGFyYW1zLm1lbW8pKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgaWYgKHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGEucGF5bG9hZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwYXlsb2FkcyB0byBnZW5lcmF0ZSBzaWduYXR1cmVzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eEhleDogdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnVuc2lnbmVkVHJhbnNhY3Rpb24sXG4gICAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzaWduYXR1cmVzID0gYXdhaXQgdGhpcy5zaWduYXR1cmVzKFxuICAgICAgICB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhLFxuICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGNvbW1vbktleUNoYWluXG4gICAgICApO1xuICAgICAgaWYgKCFzaWduYXR1cmVzIHx8IHNpZ25hdHVyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIHNpZ25hdHVyZXMnKTtcbiAgICAgIH1cbiAgICAgIHR4QnVpbGRlci50cmFuc2FjdGlvbi5hZGRTaWduYXR1cmUoc2lnbmF0dXJlcyk7XG4gICAgICB0eEJ1aWxkZXIuY29tYmluZSgpO1xuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZVR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3RUcmFuc2FjdGlvbih7IHNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbjogYnJvYWRjYXN0YWJsZVR4biB9KTtcbiAgICAgIGNvbnN0IHR4SWQgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24uaWQ7XG4gICAgICBjb25zdCByZWNvdmVyZWRUcmFuc2FjdGlvbjogUmVjb3ZlcnlUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgaWQ6IHR4SWQsXG4gICAgICAgIHR4OiBicm9hZGNhc3RhYmxlVHhuLFxuICAgICAgfTtcbiAgICAgIHJldHVybiByZWNvdmVyZWRUcmFuc2FjdGlvbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUmVjb3ZlcnlQcm92aWRlckVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgRXJyb3JOb0lucHV0VG9SZWNvdmVyKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBkdXJpbmcgSUNQIHJlY292ZXJ5OiAke2Vycm9yLm1lc3NhZ2UgfHwgZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHsgbXVsdGlTaWdUeXBlLCBwcnYsIHB1YmxpY0tleSB9OiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcykge1xuICAgIGlmIChtdWx0aVNpZ1R5cGUgIT09ICd0c3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG11bHRpc2lndHlwZSAnKTtcbiAgICB9XG4gICAgYXVkaXRFY2RzYVByaXZhdGVLZXkocHJ2IGFzIHN0cmluZywgcHVibGljS2V5IGFzIHN0cmluZyk7XG4gIH1cbn1cbiJdfQ==
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  const sdk_test_1 = require("@bitgo/sdk-test");
40
40
  const sdk_api_1 = require("@bitgo/sdk-api");
41
+ const sdk_core_1 = require("@bitgo/sdk-core");
41
42
  const utils_1 = __importDefault(require("../../src/lib/utils"));
42
43
  const getBuilderFactory_1 = require("./getBuilderFactory");
43
44
  const index_1 = require("../../src/index");
@@ -405,14 +406,19 @@ describe('Internet computer', function () {
405
406
  .should.be.rejectedWith(`address validation failure: address ${invalidRootAddress} is not a wallet address`);
406
407
  });
407
408
  });
408
- describe('Wallet VersionKey 2+', () => {
409
+ describe('V2 non-memoId wallets', () => {
409
410
  let keychains;
411
+ let derivedAddressAtIndex1;
410
412
  before(function () {
411
413
  keychains = [
412
414
  { commonKeychain: addressVerificationData.commonKeychain },
413
415
  { commonKeychain: addressVerificationData.commonKeychain },
414
416
  { commonKeychain: addressVerificationData.commonKeychain },
415
417
  ];
418
+ // Mirror addressVerification.ts:88-97: secp256k1 path m/{index}, first 33 bytes.
419
+ derivedAddressAtIndex1 = utils_1.default.getAddressFromPublicKey(Buffer.from(new sdk_core_1.Ecdsa().deriveUnhardened(addressVerificationData.commonKeychain, 'm/1'), 'hex')
420
+ .subarray(0, 33)
421
+ .toString('hex'));
416
422
  });
417
423
  it('should verify a valid TSS root address (index 0)', async function () {
418
424
  const params = {
@@ -425,6 +431,42 @@ describe('Internet computer', function () {
425
431
  const result = await basecoin.isWalletAddress(params);
426
432
  result.should.equal(true);
427
433
  });
434
+ it('should verify a derived address at index 1', async function () {
435
+ const params = {
436
+ address: derivedAddressAtIndex1,
437
+ rootAddress: addressVerificationData.rootAddress,
438
+ keychains: keychains,
439
+ index: 1,
440
+ walletVersion: 2,
441
+ };
442
+ const result = await basecoin.isWalletAddress(params);
443
+ result.should.equal(true);
444
+ });
445
+ it('should reject when derived index-1 address is verified at index 0', async function () {
446
+ const params = {
447
+ address: derivedAddressAtIndex1,
448
+ rootAddress: addressVerificationData.rootAddress,
449
+ keychains: keychains,
450
+ index: 0,
451
+ walletVersion: 2,
452
+ };
453
+ await basecoin
454
+ .isWalletAddress(params)
455
+ .should.be.rejectedWith(`address validation failure: address ${derivedAddressAtIndex1} is not a wallet address`);
456
+ });
457
+ it('should reject memo-suffixed addresses for V2 wallets', async function () {
458
+ const addressWithMemo = `${addressVerificationData.rootAddress}?memoId=5`;
459
+ const params = {
460
+ address: addressWithMemo,
461
+ rootAddress: addressVerificationData.rootAddress,
462
+ keychains: keychains,
463
+ index: 0,
464
+ walletVersion: 2,
465
+ };
466
+ await basecoin
467
+ .isWalletAddress(params)
468
+ .should.be.rejectedWith(`address validation failure: address ${addressWithMemo} is not a wallet address`);
469
+ });
428
470
  it('should throw error for invalid TSS address', async function () {
429
471
  const invalidAddress = testData.Accounts.account2.address;
430
472
  const params = {
@@ -472,4 +514,4 @@ describe('Internet computer', function () {
472
514
  });
473
515
  });
474
516
  });
475
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFDMUMsZ0VBQXdDO0FBQ3hDLDJEQUF3RDtBQUV4RCwyQ0FBNEM7QUFDNUMsZ0RBQXdCO0FBQ3hCLDJEQUE2QztBQUM3QyxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGNBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBRXhCLE1BQU0sS0FBSyxHQUFpQixvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTlDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxJQUFJLFNBQWMsQ0FBQztJQUVuQixNQUFNLENBQUMsS0FBSztRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vZ2V0QnVpbGRlckZhY3RvcnknO1xuXG5pbXBvcnQgeyBJY3AsIFRpY3AgfSBmcm9tICcuLi8uLi9zcmMvaW5kZXgnO1xuaW1wb3J0IG5vY2sgZnJvbSAnbm9jayc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMvaWNwJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbm5vY2suZW5hYmxlTmV0Q29ubmVjdCgpO1xuXG5jb25zdCBiaXRnbzogVGVzdEJpdEdvQVBJID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuYml0Z28uc2FmZVJlZ2lzdGVyKCdpY3AnLCBJY3AuY3JlYXRlSW5zdGFuY2UpO1xuXG5kZXNjcmliZSgnSW50ZXJuZXQgY29tcHV0ZXInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbztcbiAgbGV0IGJhc2Vjb2luO1xuICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoJ2ljcCcpO1xuICBsZXQgdHhCdWlsZGVyOiBhbnk7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ2ljcCcsIEljcC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0aWNwJywgVGljcC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCdpY3AnKTtcblxuICAgIHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLCB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpO1xuICAgIHR4QnVpbGRlci5yZWNlaXZlcklkKHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5hbW91bnQoJzEwJyk7XG4gICAgdHhCdWlsZGVyLm1lbW8odGVzdERhdGEuTWV0YURhdGFXaXRoTWVtby5tZW1vKTtcblxuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9KTtcblxuICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgbm9jay5wZW5kaW5nTW9ja3MoKS5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICBub2NrLmNsZWFuQWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIHRoZSByaWdodCBpbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGljcCA9IGJpdGdvLmNvaW4oJ2ljcCcpO1xuICAgIGNvbnN0IHRpY3AgPSBiaXRnby5jb2luKCd0aWNwJyk7XG5cbiAgICBpY3AuZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ2ljcCcpO1xuICAgIGljcC5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2ljcCcpO1xuICAgIGljcC5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnSW50ZXJuZXQgQ29tcHV0ZXInKTtcbiAgICBpY3AuZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTgpO1xuICAgIGljcC5zdXBwb3J0c1RzcygpLnNob3VsZC5lcXVhbCh0cnVlKTtcblxuICAgIHRpY3AuZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3RpY3AnKTtcbiAgICB0aWNwLmdldEZhbWlseSgpLnNob3VsZC5lcXVhbCgnaWNwJyk7XG4gICAgdGljcC5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVGVzdG5ldCBJbnRlcm5ldCBDb21wdXRlcicpO1xuICAgIHRpY3AuZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTgpO1xuICAgIGljcC5zdXBwb3J0c1RzcygpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgY3JlYXRpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgaGV4RW5jb2RlZFB1YmxpY0tleSA9XG4gICAgICAnMDQ3YTgzZTM3ODA1M2Y4N2I0OWFlYWU1M2IzZWQyNzRjOGIyZmZiZTU5ZDlhNTFlM2M0ZDg1MGNhOGFjMTY4NGY3MTMxYjc3ODMxN2MwZGIwNGRlNjYxYzdkMDgzMjFkNjBjMDUwNzg2OGFmNDFmZTMxNTBkMjFiM2M2Yzc1NzM2Nyc7XG4gICAgY29uc3QgaGV4RW5jb2RlZFB1YmxpY0tleTIgPSAnMDJhZDAxMGNlNjhiNzUyNjZjNzIzYmYyNWZiZTNhMGM0OGViMjlmMTRiMjU5MjViMDZiN2Y1MDI2YTBmMTI3MDJlJztcbiAgICBjb25zdCBpbnZhbGlkUHVibGljS2V5ID0gJ2ludmFsaWQtcHVibGljLWtleSc7XG4gICAgY29uc3QgdmFsaWRBY2NvdW50SUQgPSAnOGI4NGMzYTM1MjlkMDJhOWRlY2I1YjFhMjdlN2M4ZDg4NmUxN2UwN2VhMGE1MzgyNjk2OTdlZjA5YzJhMjdiNCc7XG4gICAgY29uc3QgdmFsaWRBY2NvdW50SUQyID0gJzJiOWI4OTYwNDM2MmUxODU1NDRjOGJiYTc2Y2FkZmYxYTNhZjI2ZTE0NjdlODUzMGQxMzc0M2EwOGE1MmRkN2InO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSBoZXggZW5jb2RlZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihoZXhFbmNvZGVkUHVibGljS2V5KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsaWRhdGluZyBhIGhleCBlbmNvZGVkIHB1YmxpYyBrZXkgd2l0aCAzMyBieXRlcyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGhleEVuY29kZWRQdWJsaWNLZXkyKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbGlkYXRpbmcgYSBpbnZhbGlkIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGludmFsaWRQdWJsaWNLZXkpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB2YWxpZCBhZGRyZXNzIGZyb20gYSB2YWxpZCBoZXggZW5jb2RlZCBwdWJsaWMga2V5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWNjb3VudElEID0gYXdhaXQgYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleSk7XG4gICAgICBhY2NvdW50SUQuc2hvdWxkLmRlZXBFcXVhbCh2YWxpZEFjY291bnRJRCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB2YWxpZCBhZGRyZXNzIGZyb20gYSB2YWxpZCBoZXggZW5jb2RlZCBwdWJsaWMga2V5IHdpdGggMzMgYnl0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhY2NvdW50SUQgPSBhd2FpdCBiYXNlY29pbi5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5Mik7XG4gICAgICBhY2NvdW50SUQuc2hvdWxkLmRlZXBFcXVhbCh2YWxpZEFjY291bnRJRDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIGludmFsaWQgcHVibGljIGtleSBpcyBwcm92aWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiBiYXNlY29pbi5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShpbnZhbGlkUHVibGljS2V5KSkuc2hvdWxkLnRocm93KCdJbnZhbGlkIGhleC1lbmNvZGVkIHB1YmxpYyBrZXkgZm9ybWF0LicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFjY291bnRJRCA9IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXkpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIGludmFsaWQgcHVibGljIGtleSBpcyBwcm92aWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShpbnZhbGlkUHVibGljS2V5KSkuc2hvdWxkLnRocm93KCdJbnZhbGlkIGhleC1lbmNvZGVkIHB1YmxpYyBrZXkgZm9ybWF0LicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnR2VuZXJhdGUgd2FsbGV0IGtleSBwYWlyOiAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBrZXkgcGFpcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGtwID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGtwLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihrcC5wcnYpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUga2V5IHBhaXIgZnJvbSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKCc5ZDYxYjE5ZGVmZmQ1YTYwYmE4NDRhZjQ5MmVjMmNjNDQ0NDljNTY5N2IzMjY5MTk3MDNiYWMwMzFjYWU3ZjYwJywgJ2hleCcpO1xuICAgICAgY29uc3Qga3AgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGtwLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihrcC5wcnYpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpZ24gYSByYXcgdHhuIHdpdGggYSBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gYSByYXcgdHhuIHdpdGggYSBwcml2YXRlIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHhuID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnVuc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgICB1bnNpZ25lZFR4bi5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHBheWxvYWRzRGF0YSA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGE7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhGb3JtYXQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeEhleDogcGF5bG9hZHNEYXRhLFxuICAgICAgICBwdWJsaWNLZXk6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVHhGb3JtYXQpLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBzaWduZWRUeG4gPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXksXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4bi5zaG91bGQuYmUuYS5zdHJpbmc7XG4gICAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGZhY3RvcnkucGFyc2VUcmFuc2FjdGlvbihzaWduZWRUeG4udHhIZXgsIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMF0uYWNjb3VudC5hZGRyZXNzLCB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzFdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1syXS5hY2NvdW50LmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMF0uYW1vdW50LnZhbHVlLCAnLTEwJyk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkVHJhbnNhY3Rpb24uYWNjb3VudF9pZGVudGlmaWVyX3NpZ25lcnNbMF0uYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgYSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSB2ZXJpZnkgYSB0cmFuc2FjdGlvbiB3aXRoIHNpZ25hYmxlIEhleCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHhuID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnVuc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgICB1bnNpZ25lZFR4bi5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHBheWxvYWRzRGF0YSA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGE7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhGb3JtYXQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeEhleDogcGF5bG9hZHNEYXRhLFxuICAgICAgICBwdWJsaWNLZXk6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzaWduYWJsZUhleCA9IHBheWxvYWRzRGF0YS5wYXlsb2Fkc1swXS5oZXhfYnl0ZXM7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVHhGb3JtYXQpLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgICAgdHhJbmZvOiBzaWduYWJsZUhleCxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQocmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aG91dCBzaWduYWJsZSBIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICB9LFxuICAgICAgICB0eFBhcmFtczogdHhQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydChyZXNwb25zZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBzaWduYWJsZSBIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3cm9uZ1NpZ25hYmxlSGV4VmFsdWVzID1cbiAgICAgICAgJzBhNjk2MzJkNzI2NTcxNzU2NTczNzQ1MjNkZTNjN2M1YjQ2MTMxNTViNzRlZGUyZTU0NDkzZjZhY2JlOGJmNmQ5MTAxNTRmYmJiM2E5OGJhM2UwMDk4JztcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgICAgdHhJbmZvOiB3cm9uZ1NpZ25hYmxlSGV4VmFsdWVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnZ2VuZXJhdGVkIHNpZ25hYmxlSGV4IGlzIG5vdCBlcXVhbCB0byBwYXJhbXMuc2lnbmFibGVIZXgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIHRyYW5zYWN0aW9uIHdpdGggYSBtZW1vLXRhZ2dlZCByZWNpcGllbnQgYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1lbW9UYWdnZWRUeEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgbWVtb1RhZ2dlZFR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICAgIG1lbW9UYWdnZWRUeEJ1aWxkZXIucmVjZWl2ZXJJZCh0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Ni5hZGRyZXNzKTtcbiAgICAgIG1lbW9UYWdnZWRUeEJ1aWxkZXIuYW1vdW50KCcxMCcpO1xuICAgICAgbWVtb1RhZ2dlZFR4QnVpbGRlci5tZW1vKE51bWJlcih0ZXN0RGF0YS5NZXRhRGF0YVdpdGhNZW1vLm1lbW8pKTtcbiAgICAgIGF3YWl0IG1lbW9UYWdnZWRUeEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgY29uc3QgcGF5bG9hZHNEYXRhID0gbWVtb1RhZ2dlZFR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGE7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhGb3JtYXQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeEhleDogcGF5bG9hZHNEYXRhLFxuICAgICAgICBwdWJsaWNLZXk6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVHhGb3JtYXQpLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQ2LmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0KHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgVmVyaWZpY2F0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhID0ge1xuICAgICAgY29tbW9uS2V5Y2hhaW46XG4gICAgICAgICcwMzZiMzhjYTVlNjNlOTgwMGI1MDQwYWY0OThlYjZlOWE5Yzc3ZTI0NGFjMjg1OGVkYWZhNGJkMDkyNmE2MzU3MzFjM2ZhYmRlOTAwN2E1NzcxZTkzNjIxZDlmY2IxYzg3OTY2MDIwOGRjNzljYzYwOWZlOGRkZDE4OWY3YTk1NWFiJyxcbiAgICAgIHJvb3RBZGRyZXNzOiAnZmQzZWFlZDNlMjA2NGJkMzBhYjQ5N2UyMmU4YWM1YTBkY2FkZDgxZmE1MzUzODc5ZGJhYjY0ZTI1OWVjNzBjMCcsXG4gICAgfTtcblxuICAgIGRlc2NyaWJlKCdXYWxsZXQgVmVyc2lvbktleSAxJywgKCkgPT4ge1xuICAgICAgbGV0IGtleWNoYWlucztcblxuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAga2V5Y2hhaW5zID0gW1xuICAgICAgICAgIHsgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICAgICAgeyBjb21tb25LZXljaGFpbjogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgICAgICB7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgICAgICBdO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgbWVtby1iYXNlZCBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290QWRkcmVzcyA9IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtyb290QWRkcmVzc30/bWVtb0lkPTEyM2A7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NXaXRoTWVtbyxcbiAgICAgICAgICByb290QWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMSxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBhZGRyZXNzIHdpdGggbWVtb0lkPTAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NXaXRoTWVtbyA9IGAke3Jvb3RBZGRyZXNzfT9tZW1vSWQ9MGA7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NXaXRoTWVtbyxcbiAgICAgICAgICByb290QWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMSxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBleHRyYWN0ZWQgcm9vdCBkb2VzIG5vdCBtYXRjaCBwcm92aWRlZCByb290QWRkcmVzcyBwYXJhbScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcbiAgICAgICAgY29uc3QgZGlmZmVyZW50QWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NXaXRoTWVtbyA9IGAke2RpZmZlcmVudEFkZHJlc3N9P21lbW9JZD0xMjNgO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aE1lbW8sXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVGhlIGV4dHJhY3RlZCByb290IChkaWZmZXJlbnRBZGRyZXNzKSBkb2Vzbid0IG1hdGNoIHByb3ZpZGVkIHJvb3RBZGRyZXNzXG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBleHBlY3RlZCAke3Jvb3RBZGRyZXNzfSBidXQgZ290ICR7ZGlmZmVyZW50QWRkcmVzc31gKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gcm9vdEFkZHJlc3MgaXMgbWlzc2luZyBmb3Igd2FsbGV0IHZlcnNpb24gMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IGAke2FkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzfT9tZW1vSWQ9MTIzYDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAxLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3Jvb3RBZGRyZXNzIGlzIHJlcXVpcmVkIGZvciB3YWxsZXQgdmVyc2lvbiAxJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIG1lbW9JZCBpcyBtaXNzaW5nIGZvciB3YWxsZXQgdmVyc2lvbiAxJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290QWRkcmVzcyA9IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgICByb290QWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMSxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtZW1vSWQgaXMgcmVxdWlyZWQgZm9yIHdhbGxldCB2ZXJzaW9uIDEgYWRkcmVzc2VzJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbGFyZ2UgbWVtb0lkIHZhbHVlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcbiAgICAgICAgY29uc3QgbGFyZ2VNZW1vSWQgPSAnOTAwNzE5OTI1NDc0MDk5MSc7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NXaXRoTWVtbyA9IGAke3Jvb3RBZGRyZXNzfT9tZW1vSWQ9JHtsYXJnZU1lbW9JZH1gO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aE1lbW8sXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBtZW1vLWJhc2VkIGFkZHJlc3Mgd2hlbiByb290QWRkcmVzcyBwYXJhbSBpcyB0aGUgbWVtby1zdWZmaXhlZCB3YWxsZXQgcmVjZWl2ZUFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3M7XG5cbiAgICAgICAgLy8gUHJvZHVjdGlvbiBzaGFwZSBmcm9tIHdhbGxldC5jcmVhdGVBZGRyZXNzKCkgdmVyaWZpY2F0aW9uOlxuICAgICAgICAvLyByb290QWRkcmVzcyBwYXJhbSA9IHdhbGxldC5yZWNlaXZlQWRkcmVzcy5hZGRyZXNzIChtZW1vLXN1ZmZpeGVkKS5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGAke3Jvb3RBZGRyZXNzfT9tZW1vSWQ9NGAsXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IGAke3Jvb3RBZGRyZXNzfT9tZW1vSWQ9M2AsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMSxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIHRoZSBtZW1vLXN1ZmZpeGVkIHJvb3RBZGRyZXNzIHBhcmFtIGhhcyBhIGRpZmZlcmVudCByb290JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290QWRkcmVzcyA9IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzO1xuICAgICAgICBjb25zdCBkaWZmZXJlbnRBZGRyZXNzID0gdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcztcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYCR7ZGlmZmVyZW50QWRkcmVzc30/bWVtb0lkPTEyM2AsXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IGAke3Jvb3RBZGRyZXNzfT9tZW1vSWQ9M2AsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMSxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogZXhwZWN0ZWQgJHtyb290QWRkcmVzc30gYnV0IGdvdCAke2RpZmZlcmVudEFkZHJlc3N9YCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gcm9vdEFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggY29tbW9uS2V5Y2hhaW4gZGVyaXZhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gVXNlIGEgcm9vdEFkZHJlc3MgdGhhdCBkb2Vzbid0IG1hdGNoIHdoYXQncyBkZXJpdmVkIGZyb20gY29tbW9uS2V5Y2hhaW5cbiAgICAgICAgY29uc3QgaW52YWxpZFJvb3RBZGRyZXNzID0gdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcztcbiAgICAgICAgY29uc3QgYWRkcmVzc1dpdGhNZW1vID0gYCR7aW52YWxpZFJvb3RBZGRyZXNzfT9tZW1vSWQ9MTIzYDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc1dpdGhNZW1vLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiBpbnZhbGlkUm9vdEFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMSxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyByb290QWRkcmVzcyBpcyBjcnlwdG9ncmFwaGljYWxseSB2ZXJpZmllZCBhZ2FpbnN0IGNvbW1vbktleWNoYWluXG4gICAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgICAgLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBhZGRyZXNzICR7aW52YWxpZFJvb3RBZGRyZXNzfSBpcyBub3QgYSB3YWxsZXQgYWRkcmVzc2ApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnV2FsbGV0IFZlcnNpb25LZXkgMisnLCAoKSA9PiB7XG4gICAgICBsZXQga2V5Y2hhaW5zO1xuXG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBrZXljaGFpbnMgPSBbXG4gICAgICAgICAgeyBjb21tb25LZXljaGFpbjogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgICAgICB7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgICAgICAgIHsgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICAgIF07XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBUU1Mgcm9vdCBhZGRyZXNzIChpbmRleCAwKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAyLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGludmFsaWQgVFNTIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGludmFsaWRBZGRyZXNzID0gdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcztcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogaW52YWxpZEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogYWRkcmVzcyAke2ludmFsaWRBZGRyZXNzfSBpcyBub3QgYSB3YWxsZXQgYWRkcmVzc2ApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBrZXljaGFpbnMgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWluczogW10sXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHN0cmluZyBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogJzAnLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdBZGRyZXNzIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGFkZHJlc3MgZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9ICdpbnZhbGlkLWFkZHJlc3MnO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBpbnZhbGlkQWRkcmVzcyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAyLFxuICAgICAgICAgIGtleWNoYWluczogW3sgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH1dLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYGludmFsaWQgYWRkcmVzczogJHtpbnZhbGlkQWRkcmVzc31gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFDMUMsOENBQXdDO0FBQ3hDLGdFQUF3QztBQUN4QywyREFBd0Q7QUFFeEQsMkNBQTRDO0FBQzVDLGdEQUF3QjtBQUN4QiwyREFBNkM7QUFDN0Msb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixjQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUV4QixNQUFNLEtBQUssR0FBaUIsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUU5QyxRQUFRLENBQUMsbUJBQW1CLEVBQUU7SUFDNUIsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLFFBQVEsQ0FBQztJQUNiLE1BQU0sT0FBTyxHQUFHLElBQUEscUNBQWlCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsSUFBSSxTQUFjLENBQUM7SUFFbkIsTUFBTSxDQUFDLEtBQUs7UUFDVixLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxD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Q3ZELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDO2dCQUV6QyxNQUFNLE1BQU0sR0FBRztvQkFDYixPQUFPLEVBQUUsY0FBYztvQkFDdkIsYUFBYSxFQUFFLENBQUM7b0JBQ2hCLFNBQVMsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2RSxLQUFLLEVBQUUsQ0FBQztpQkFDVCxDQUFDO2dCQUVGLE1BQU0sUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUN0RyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgRWNkc2EgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2dldEJ1aWxkZXJGYWN0b3J5JztcblxuaW1wb3J0IHsgSWNwLCBUaWNwIH0gZnJvbSAnLi4vLi4vc3JjL2luZGV4JztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2ljcCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5ub2NrLmVuYWJsZU5ldENvbm5lY3QoKTtcblxuY29uc3QgYml0Z286IFRlc3RCaXRHb0FQSSA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbmJpdGdvLnNhZmVSZWdpc3RlcignaWNwJywgSWNwLmNyZWF0ZUluc3RhbmNlKTtcblxuZGVzY3JpYmUoJ0ludGVybmV0IGNvbXB1dGVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z287XG4gIGxldCBiYXNlY29pbjtcbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdpY3AnKTtcbiAgbGV0IHR4QnVpbGRlcjogYW55O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdpY3AnLCBJY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGljcCcsIFRpY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbignaWNwJyk7XG5cbiAgICB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIucmVjZWl2ZXJJZCh0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KCcxMCcpO1xuICAgIHR4QnVpbGRlci5tZW1vKHRlc3REYXRhLk1ldGFEYXRhV2l0aE1lbW8ubWVtbyk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIG5vY2sucGVuZGluZ01vY2tzKCkuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgcmlnaHQgaW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpY3AgPSBiaXRnby5jb2luKCdpY3AnKTtcbiAgICBjb25zdCB0aWNwID0gYml0Z28uY29pbigndGljcCcpO1xuXG4gICAgaWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0ludGVybmV0IENvbXB1dGVyJyk7XG4gICAgaWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG5cbiAgICB0aWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0aWNwJyk7XG4gICAgdGljcC5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2ljcCcpO1xuICAgIHRpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgSW50ZXJuZXQgQ29tcHV0ZXInKTtcbiAgICB0aWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIGNyZWF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkgPVxuICAgICAgJzA0N2E4M2UzNzgwNTNmODdiNDlhZWFlNTNiM2VkMjc0YzhiMmZmYmU1OWQ5YTUxZTNjNGQ4NTBjYThhYzE2ODRmNzEzMWI3NzgzMTdjMGRiMDRkZTY2MWM3ZDA4MzIxZDYwYzA1MDc4NjhhZjQxZmUzMTUwZDIxYjNjNmM3NTczNjcnO1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkyID0gJzAyYWQwMTBjZTY4Yjc1MjY2YzcyM2JmMjVmYmUzYTBjNDhlYjI5ZjE0YjI1OTI1YjA2YjdmNTAyNmEwZjEyNzAyZSc7XG4gICAgY29uc3QgaW52YWxpZFB1YmxpY0tleSA9ICdpbnZhbGlkLXB1YmxpYy1rZXknO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEID0gJzhiODRjM2EzNTI5ZDAyYTlkZWNiNWIxYTI3ZTdjOGQ4ODZlMTdlMDdlYTBhNTM4MjY5Njk3ZWYwOWMyYTI3YjQnO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEMiA9ICcyYjliODk2MDQzNjJlMTg1NTQ0YzhiYmE3NmNhZGZmMWEzYWYyNmUxNDY3ZTg1MzBkMTM3NDNhMDhhNTJkZDdiJztcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWxpZGF0aW5nIGEgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoaGV4RW5jb2RlZFB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSBoZXggZW5jb2RlZCBwdWJsaWMga2V5IHdpdGggMzMgYnl0ZXMgJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihoZXhFbmNvZGVkUHVibGljS2V5Mikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWxpZGF0aW5nIGEgaW52YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihpbnZhbGlkUHVibGljS2V5KS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFjY291bnRJRCA9IGF3YWl0IGJhc2Vjb2luLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXkpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleSB3aXRoIDMzIGJ5dGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWNjb3VudElEID0gYXdhaXQgYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleTIpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnZhbGlkIHB1YmxpYyBrZXkgaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaW52YWxpZFB1YmxpY0tleSkpLnNob3VsZC50aHJvdygnSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHZhbGlkIGFkZHJlc3MgZnJvbSBhIHZhbGlkIGhleCBlbmNvZGVkIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhY2NvdW50SUQgPSB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5KTtcbiAgICAgIGFjY291bnRJRC5zaG91bGQuZGVlcEVxdWFsKHZhbGlkQWNjb3VudElEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnZhbGlkIHB1YmxpYyBrZXkgaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaW52YWxpZFB1YmxpY0tleSkpLnNob3VsZC50aHJvdygnSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0dlbmVyYXRlIHdhbGxldCBrZXkgcGFpcjogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUga2V5IHBhaXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBrcCA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrcC5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa3AucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGtleSBwYWlyIGZyb20gc2VlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbSgnOWQ2MWIxOWRlZmZkNWE2MGJhODQ0YWY0OTJlYzJjYzQ0NDQ5YzU2OTdiMzI2OTE5NzAzYmFjMDMxY2FlN2Y2MCcsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtwID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrcC5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa3AucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIGEgcmF3IHR4biB3aXRoIGEgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzaWduIGEgcmF3IHR4biB3aXRoIGEgcHJpdmF0ZSBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3Qgc2lnbmVkVHhuID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuc2VjcmV0S2V5LFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeG4uc2hvdWxkLmJlLmEuc3RyaW5nO1xuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBmYWN0b3J5LnBhcnNlVHJhbnNhY3Rpb24oc2lnbmVkVHhuLnR4SGV4LCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzBdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1sxXS5hY2NvdW50LmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMl0uYWNjb3VudC5hZGRyZXNzLCB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzBdLmFtb3VudC52YWx1ZSwgJy0xMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLmFjY291bnRfaWRlbnRpZmllcl9zaWduZXJzWzBdLmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aCBzaWduYWJsZSBIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2lnbmFibGVIZXggPSBwYXlsb2Fkc0RhdGEucGF5bG9hZHNbMF0uaGV4X2J5dGVzO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgIHR4SW5mbzogc2lnbmFibGVIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0KHJlc3BvbnNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgc2lnbmFibGUgSGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdW5zaWduZWRUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udW5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIHVuc2lnbmVkVHhuLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgY29uc3QgcGF5bG9hZHNEYXRhID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEZvcm1hdCA9IHtcbiAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBwYXlsb2Fkc0RhdGEsXG4gICAgICAgIHB1YmxpY0tleTogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRUeEZvcm1hdCksICd1dGYtOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQocmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSBhIHRyYW5zYWN0aW9uIHdpdGggd3Jvbmcgc2lnbmFibGUgSGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdW5zaWduZWRUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udW5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIHVuc2lnbmVkVHhuLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgY29uc3QgcGF5bG9hZHNEYXRhID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEZvcm1hdCA9IHtcbiAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBwYXlsb2Fkc0RhdGEsXG4gICAgICAgIHB1YmxpY0tleTogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRUeEZvcm1hdCksICd1dGYtOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgd3JvbmdTaWduYWJsZUhleFZhbHVlcyA9XG4gICAgICAgICcwYTY5NjMyZDcyNjU3MTc1NjU3Mzc0NTIzZGUzYzdjNWI0NjEzMTU1Yjc0ZWRlMmU1NDQ5M2Y2YWNiZThiZjZkOTEwMTU0ZmJiYjNhOThiYTNlMDA5OCc7XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgICAgIHR4SW5mbzogd3JvbmdTaWduYWJsZUhleFZhbHVlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ2dlbmVyYXRlZCBzaWduYWJsZUhleCBpcyBub3QgZXF1YWwgdG8gcGFyYW1zLnNpZ25hYmxlSGV4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSB2ZXJpZnkgYSB0cmFuc2FjdGlvbiB3aXRoIGEgbWVtby10YWdnZWQgcmVjaXBpZW50IGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtZW1vVGFnZ2VkVHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIG1lbW9UYWdnZWRUeEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICBtZW1vVGFnZ2VkVHhCdWlsZGVyLnJlY2VpdmVySWQodGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDYuYWRkcmVzcyk7XG4gICAgICBtZW1vVGFnZ2VkVHhCdWlsZGVyLmFtb3VudCgnMTAnKTtcbiAgICAgIG1lbW9UYWdnZWRUeEJ1aWxkZXIubWVtbyhOdW1iZXIodGVzdERhdGEuTWV0YURhdGFXaXRoTWVtby5tZW1vKSk7XG4gICAgICBhd2FpdCBtZW1vVGFnZ2VkVHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWRzRGF0YSA9IG1lbW9UYWdnZWRUeEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Ni5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICB9LFxuICAgICAgICB0eFBhcmFtczogdHhQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydChyZXNwb25zZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZlcmlmaWNhdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YSA9IHtcbiAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAnMDM2YjM4Y2E1ZTYzZTk4MDBiNTA0MGFmNDk4ZWI2ZTlhOWM3N2UyNDRhYzI4NThlZGFmYTRiZDA5MjZhNjM1NzMxYzNmYWJkZTkwMDdhNTc3MWU5MzYyMWQ5ZmNiMWM4Nzk2NjAyMDhkYzc5Y2M2MDlmZThkZGQxODlmN2E5NTVhYicsXG4gICAgICByb290QWRkcmVzczogJ2ZkM2VhZWQzZTIwNjRiZDMwYWI0OTdlMjJlOGFjNWEwZGNhZGQ4MWZhNTM1Mzg3OWRiYWI2NGUyNTllYzcwYzAnLFxuICAgIH07XG5cbiAgICBkZXNjcmliZSgnV2FsbGV0IFZlcnNpb25LZXkgMScsICgpID0+IHtcbiAgICAgIGxldCBrZXljaGFpbnM7XG5cbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGtleWNoYWlucyA9IFtcbiAgICAgICAgICB7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgICAgICAgIHsgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICAgICAgeyBjb21tb25LZXljaGFpbjogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIG1lbW8tYmFzZWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcbiAgICAgICAgY29uc3QgYWRkcmVzc1dpdGhNZW1vID0gYCR7cm9vdEFkZHJlc3N9P21lbW9JZD0xMjNgO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aE1lbW8sXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYWRkcmVzcyB3aXRoIG1lbW9JZD0wJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290QWRkcmVzcyA9IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtyb290QWRkcmVzc30/bWVtb0lkPTBgO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aE1lbW8sXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gZXh0cmFjdGVkIHJvb3QgZG9lcyBub3QgbWF0Y2ggcHJvdmlkZWQgcm9vdEFkZHJlc3MgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGRpZmZlcmVudEFkZHJlc3MgPSB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtkaWZmZXJlbnRBZGRyZXNzfT9tZW1vSWQ9MTIzYDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc1dpdGhNZW1vLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAxLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFRoZSBleHRyYWN0ZWQgcm9vdCAoZGlmZmVyZW50QWRkcmVzcykgZG9lc24ndCBtYXRjaCBwcm92aWRlZCByb290QWRkcmVzc1xuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogZXhwZWN0ZWQgJHtyb290QWRkcmVzc30gYnV0IGdvdCAke2RpZmZlcmVudEFkZHJlc3N9YCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHJvb3RBZGRyZXNzIGlzIG1pc3NpbmcgZm9yIHdhbGxldCB2ZXJzaW9uIDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBgJHthZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzc30/bWVtb0lkPTEyM2A7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMSxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdyb290QWRkcmVzcyBpcyByZXF1aXJlZCBmb3Igd2FsbGV0IHZlcnNpb24gMScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBtZW1vSWQgaXMgbWlzc2luZyBmb3Igd2FsbGV0IHZlcnNpb24gMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWVtb0lkIGlzIHJlcXVpcmVkIGZvciB3YWxsZXQgdmVyc2lvbiAxIGFkZHJlc3NlcycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGxhcmdlIG1lbW9JZCB2YWx1ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGxhcmdlTWVtb0lkID0gJzkwMDcxOTkyNTQ3NDA5OTEnO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtyb290QWRkcmVzc30/bWVtb0lkPSR7bGFyZ2VNZW1vSWR9YDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc1dpdGhNZW1vLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAxLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgbWVtby1iYXNlZCBhZGRyZXNzIHdoZW4gcm9vdEFkZHJlc3MgcGFyYW0gaXMgdGhlIG1lbW8tc3VmZml4ZWQgd2FsbGV0IHJlY2VpdmVBZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290QWRkcmVzcyA9IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzO1xuXG4gICAgICAgIC8vIFByb2R1Y3Rpb24gc2hhcGUgZnJvbSB3YWxsZXQuY3JlYXRlQWRkcmVzcygpIHZlcmlmaWNhdGlvbjpcbiAgICAgICAgLy8gcm9vdEFkZHJlc3MgcGFyYW0gPSB3YWxsZXQucmVjZWl2ZUFkZHJlc3MuYWRkcmVzcyAobWVtby1zdWZmaXhlZCkuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBgJHtyb290QWRkcmVzc30/bWVtb0lkPTRgLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiBgJHtyb290QWRkcmVzc30/bWVtb0lkPTNgLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiB0aGUgbWVtby1zdWZmaXhlZCByb290QWRkcmVzcyBwYXJhbSBoYXMgYSBkaWZmZXJlbnQgcm9vdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcbiAgICAgICAgY29uc3QgZGlmZmVyZW50QWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3M7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGAke2RpZmZlcmVudEFkZHJlc3N9P21lbW9JZD0xMjNgLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiBgJHtyb290QWRkcmVzc30/bWVtb0lkPTNgLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGV4cGVjdGVkICR7cm9vdEFkZHJlc3N9IGJ1dCBnb3QgJHtkaWZmZXJlbnRBZGRyZXNzfWApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIHJvb3RBZGRyZXNzIGRvZXMgbm90IG1hdGNoIGNvbW1vbktleWNoYWluIGRlcml2YXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFVzZSBhIHJvb3RBZGRyZXNzIHRoYXQgZG9lc24ndCBtYXRjaCB3aGF0J3MgZGVyaXZlZCBmcm9tIGNvbW1vbktleWNoYWluXG4gICAgICAgIGNvbnN0IGludmFsaWRSb290QWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NXaXRoTWVtbyA9IGAke2ludmFsaWRSb290QWRkcmVzc30/bWVtb0lkPTEyM2A7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NXaXRoTWVtbyxcbiAgICAgICAgICByb290QWRkcmVzczogaW52YWxpZFJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcm9vdEFkZHJlc3MgaXMgY3J5cHRvZ3JhcGhpY2FsbHkgdmVyaWZpZWQgYWdhaW5zdCBjb21tb25LZXljaGFpblxuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogYWRkcmVzcyAke2ludmFsaWRSb290QWRkcmVzc30gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1YyIG5vbi1tZW1vSWQgd2FsbGV0cycsICgpID0+IHtcbiAgICAgIGxldCBrZXljaGFpbnM7XG4gICAgICBsZXQgZGVyaXZlZEFkZHJlc3NBdEluZGV4MTogc3RyaW5nO1xuXG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBrZXljaGFpbnMgPSBbXG4gICAgICAgICAgeyBjb21tb25LZXljaGFpbjogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgICAgICB7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgICAgICAgIHsgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICAgIF07XG4gICAgICAgIC8vIE1pcnJvciBhZGRyZXNzVmVyaWZpY2F0aW9uLnRzOjg4LTk3OiBzZWNwMjU2azEgcGF0aCBtL3tpbmRleH0sIGZpcnN0IDMzIGJ5dGVzLlxuICAgICAgICBkZXJpdmVkQWRkcmVzc0F0SW5kZXgxID0gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoXG4gICAgICAgICAgQnVmZmVyLmZyb20obmV3IEVjZHNhKCkuZGVyaXZlVW5oYXJkZW5lZChhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiwgJ20vMScpLCAnaGV4JylcbiAgICAgICAgICAgIC5zdWJhcnJheSgwLCAzMylcbiAgICAgICAgICAgIC50b1N0cmluZygnaGV4JylcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIFRTUyByb290IGFkZHJlc3MgKGluZGV4IDApJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSBkZXJpdmVkIGFkZHJlc3MgYXQgaW5kZXggMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGRlcml2ZWRBZGRyZXNzQXRJbmRleDEsXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiBkZXJpdmVkIGluZGV4LTEgYWRkcmVzcyBpcyB2ZXJpZmllZCBhdCBpbmRleCAwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogZGVyaXZlZEFkZHJlc3NBdEluZGV4MSxcbiAgICAgICAgICByb290QWRkcmVzczogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBhZGRyZXNzICR7ZGVyaXZlZEFkZHJlc3NBdEluZGV4MX0gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBtZW1vLXN1ZmZpeGVkIGFkZHJlc3NlcyBmb3IgVjIgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYWRkcmVzc1dpdGhNZW1vID0gYCR7YWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3N9P21lbW9JZD01YDtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NXaXRoTWVtbyxcbiAgICAgICAgICByb290QWRkcmVzczogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogYWRkcmVzcyAke2FkZHJlc3NXaXRoTWVtb30gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIFRTUyBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3M7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGludmFsaWRBZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGFkZHJlc3MgJHtpbnZhbGlkQWRkcmVzc30gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4ga2V5Y2hhaW5zIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IFtdLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzdHJpbmcgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICByb290QWRkcmVzczogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6ICcwJyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAyLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQWRkcmVzcyB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBhZGRyZXNzIGZvcm1hdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSAnaW52YWxpZC1hZGRyZXNzJztcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogaW52YWxpZEFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgICBrZXljaGFpbnM6IFt7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9XSxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBpbnZhbGlkIGFkZHJlc3M6ICR7aW52YWxpZEFkZHJlc3N9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -83,6 +83,20 @@ describe('ICP Transaction', () => {
83
83
  payloadsData.payloads.should.be.an.Array();
84
84
  payloadsData.payloads.length.should.equal(1);
85
85
  });
86
+ it('should preserve memo suffix on receiver address when building a transfer', async () => {
87
+ const txn = new src_1.Transaction(config);
88
+ txn.icpTransactionData = testData.IcpTransactionData;
89
+ const factory = (0, getBuilderFactory_1.getBuilderFactory)('ticp');
90
+ const txBuilder = factory.getTransferBuilder();
91
+ txBuilder.initBuilder(txn);
92
+ txBuilder.sender(testData.Accounts.account1.address, testData.Accounts.account1.publicKey);
93
+ txBuilder.receiverId(testData.Accounts.account6.address);
94
+ txBuilder.amount('10');
95
+ txBuilder.memo(Number(testData.MetaDataWithMemo.memo));
96
+ await txBuilder.build();
97
+ const icpTransaction = txBuilder.transaction.icpTransaction;
98
+ should_1.default.equal(icpTransaction.operations[1].account.address, testData.Accounts.account6.address);
99
+ });
86
100
  it('build a json transaction from raw hex', async () => {
87
101
  await tx.fromRawTransaction(serializedTxHex);
88
102
  const json = tx.toJson();
@@ -106,4 +120,4 @@ describe('ICP Transaction', () => {
106
120
  }
107
121
  });
108
122
  });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBd0M7QUFDeEMsNENBQXVDO0FBQ3ZDLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsZ0VBQXdDO0FBQ3hDLDhDQUEwRDtBQUMxRCwyREFBNkM7QUFDN0MsMkRBQXdEO0FBQ3hELGtEQUEwQjtBQUUxQixRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLElBQUksRUFBZSxDQUFDO0lBQ3BCLElBQUksZUFBb0IsQ0FBQztJQUN6QixNQUFNLE1BQU0sR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxFQUFFLEdBQUcsSUFBSSxpQkFBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLE1BQU0sa0JBQWtCLEdBQUc7WUFDekIsZUFBZSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ3RDLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1NBQ2hELENBQUM7UUFDRixlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNGLGVBQUssQ0FBQyxJQUFJLENBQUMsZUFBSyxFQUFFLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLGVBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUs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QyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2ljcCc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vZ2V0QnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcblxuZGVzY3JpYmUoJ0lDUCBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgbGV0IHR4OiBUcmFuc2FjdGlvbjtcbiAgbGV0IHNlcmlhbGl6ZWRUeEhleDogYW55O1xuICBjb25zdCBjb25maWcgPSBjb2lucy5nZXQoJ3RpY3AnKTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb25maWcpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEZvcm1hdCA9IHtcbiAgICAgIHNlcmlhbGl6ZWRUeEhleDogdGVzdERhdGEuUGF5bG9hZHNEYXRhLFxuICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgfTtcbiAgICBzZXJpYWxpemVkVHhIZXggPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVHhGb3JtYXQpLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgc2lub24uc3R1Yih1dGlscywgJ3ZhbGlkYXRlRXhwaXJlVGltZScpLnJldHVybnModHJ1ZSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGFuIGVtcHR5IHRyYW5zYWN0aW9uIGVycm9yJywgKCkgPT4ge1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgKGVycikgPT4gZXJyIGluc3RhbmNlb2YgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IgJiYgZXJyLm1lc3NhZ2UgPT09ICdFbXB0eSB0cmFuc2FjdGlvbicsXG4gICAgICAnRXhwZWN0ZWQgYW4gSW52YWxpZFRyYW5zYWN0aW9uRXJyb3Igd2l0aCBtZXNzYWdlIFwiRW1wdHkgdHJhbnNhY3Rpb25cIidcbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiB0eC50b0pzb24oKSxcbiAgICAgIChlcnIpID0+IGVyciBpbnN0YW5jZW9mIEludmFsaWRUcmFuc2FjdGlvbkVycm9yICYmIGVyci5tZXNzYWdlID09PSAnRW1wdHkgdHJhbnNhY3Rpb24nLFxuICAgICAgJ0V4cGVjdGVkIGFuIEludmFsaWRUcmFuc2FjdGlvbkVycm9yIHdpdGggbWVzc2FnZSBcIkVtcHR5IHRyYW5zYWN0aW9uXCInXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3N0YXJ0IGFuZCBidWlsZCBhIHR4biB3aXRoIGJ1aWxkZXIgaW5pdCBtZXRob2QnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhuID0gbmV3IFRyYW5zYWN0aW9uKGNvbmZpZyk7XG4gICAgdHhuLmljcFRyYW5zYWN0aW9uRGF0YSA9IHRlc3REYXRhLkljcFRyYW5zYWN0aW9uRGF0YTtcbiAgICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoJ3RpY3AnKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcih0eG4pO1xuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgY29uc3QgaWNwVHJhbnNhY3Rpb24gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24uaWNwVHJhbnNhY3Rpb247XG4gICAgY29uc3QgcGF5bG9hZHNEYXRhID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YTtcbiAgICBzaG91bGQuZXF1YWwoaWNwVHJhbnNhY3Rpb24ubWV0YWRhdGEubWVtbywgdGVzdERhdGEuSWNwVHJhbnNhY3Rpb25EYXRhLm1lbW8pO1xuICAgIHNob3VsZC5lcXVhbChpY3BUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzBdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuSWNwVHJhbnNhY3Rpb25EYXRhLnNlbmRlckFkZHJlc3MpO1xuICAgIHNob3VsZC5lcXVhbChpY3BUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzFdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuSWNwVHJhbnNhY3Rpb25EYXRhLnJlY2VpdmVyQWRkcmVzcyk7XG4gICAgc2hvdWxkLmVxdWFsKGljcFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMV0uYW1vdW50LnZhbHVlLCB0ZXN0RGF0YS5JY3BUcmFuc2FjdGlvbkRhdGEuYW1vdW50KTtcbiAgICBzaG91bGQuZXF1YWwoaWNwVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1syXS5hbW91bnQudmFsdWUsIHRlc3REYXRhLkljcFRyYW5zYWN0aW9uRGF0YS5mZWUpO1xuICAgIHNob3VsZC5lcXVhbChpY3BUcmFuc2FjdGlvbi5wdWJsaWNfa2V5c1swXS5oZXhfYnl0ZXMsIHRlc3REYXRhLkljcFRyYW5zYWN0aW9uRGF0YS5zZW5kZXJQdWJsaWNLZXlIZXgpO1xuICAgIHBheWxvYWRzRGF0YS5wYXlsb2Fkcy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICBwYXlsb2Fkc0RhdGEucGF5bG9hZHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkIGEganNvbiB0cmFuc2FjdGlvbiBmcm9tIHJhdyBoZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHNlcmlhbGl6ZWRUeEhleCk7XG4gICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuICAgIHNob3VsZC5lcXVhbChqc29uLm1lbW8sIHRlc3REYXRhLlBhcnNlZFJhd1RyYW5zYWN0aW9uLm1ldGFkYXRhLm1lbW8pO1xuICAgIHNob3VsZC5lcXVhbChqc29uLmZlZUFtb3VudCwgdGVzdERhdGEuUGFyc2VkUmF3VHJhbnNhY3Rpb24ub3BlcmF0aW9uc1syXS5hbW91bnQudmFsdWUpO1xuICAgIHNob3VsZC5lcXVhbChqc29uLnNlbmRlciwgdGVzdERhdGEuUGFyc2VkUmF3VHJhbnNhY3Rpb24ub3BlcmF0aW9uc1swXS5hY2NvdW50LmFkZHJlc3MpO1xuICAgIHNob3VsZC5lcXVhbChqc29uLnJlY2lwaWVudCwgdGVzdERhdGEuUGFyc2VkUmF3VHJhbnNhY3Rpb24ub3BlcmF0aW9uc1sxXS5hY2NvdW50LmFkZHJlc3MpO1xuICAgIHNob3VsZC5lcXVhbChqc29uLnNlbmRlclB1YmxpY0tleSwgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICBzaG91bGQuZXF1YWwoanNvbi5pZCwgdGVzdERhdGEuT25DaGFpblRyYW5zYWN0aW9uSGFzaCk7XG4gIH0pO1xuXG4gIGl0KCdleHBsYWluIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHR4LmZyb21SYXdUcmFuc2FjdGlvbihzZXJpYWxpemVkVHhIZXgpO1xuICAgIGNvbnN0IGV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcblxuICAgIGV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgnMTAnKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTAnKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgZXhwbGFpbi5mZWUuZmVlLnNob3VsZC5lcXVhbCgnLTEwMDAwJyk7XG4gICAgZXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgaWYgKGV4cGxhaW4uZGlzcGxheU9yZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4cGxhaW4uZGlzcGxheU9yZGVyLnNob3VsZC5kZWVwRXF1YWwoWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnXSk7XG4gICAgfVxuICB9KTtcbn0pO1xuIl19
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBd0M7QUFDeEMsNENBQXVDO0FBQ3ZDLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsZ0VBQXdDO0FBQ3hDLDhDQUEwRDtBQUMxRCwyREFBNkM7QUFDN0MsMkRBQXdEO0FBQ3hELGtEQUEwQjtBQUUxQixRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLElBQUksRUFBZSxDQUFDO0lBQ3BCLElBQUksZUFBb0IsQ0FBQztJQUN6QixNQUFNLE1BQU0sR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxFQUFFLEdBQUcsSUFBSSxpQkFBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLE1BQU0sa0JBQWtCLEdBQUc7WUFDekIsZUFBZSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ3RDLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1NBQ2hELENBQUM7UUFDRixlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNGLGVBQUssQ0FBQyxJQUFJLENBQUMsZUFBSyxFQUFFLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLGVBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUs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UUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2ljcCc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vZ2V0QnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcblxuZGVzY3JpYmUoJ0lDUCBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgbGV0IHR4OiBUcmFuc2FjdGlvbjtcbiAgbGV0IHNlcmlhbGl6ZWRUeEhleDogYW55O1xuICBjb25zdCBjb25maWcgPSBjb2lucy5nZXQoJ3RpY3AnKTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb25maWcpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEZvcm1hdCA9IHtcbiAgICAgIHNlcmlhbGl6ZWRUeEhleDogdGVzdERhdGEuUGF5bG9hZHNEYXRhLFxuICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgfTtcbiAgICBzZXJpYWxpemVkVHhIZXggPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVHhGb3JtYXQpLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgc2lub24uc3R1Yih1dGlscywgJ3ZhbGlkYXRlRXhwaXJlVGltZScpLnJldHVybnModHJ1ZSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGFuIGVtcHR5IHRyYW5zYWN0aW9uIGVycm9yJywgKCkgPT4ge1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgKGVycikgPT4gZXJyIGluc3RhbmNlb2YgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IgJiYgZXJyLm1lc3NhZ2UgPT09ICdFbXB0eSB0cmFuc2FjdGlvbicsXG4gICAgICAnRXhwZWN0ZWQgYW4gSW52YWxpZFRyYW5zYWN0aW9uRXJyb3Igd2l0aCBtZXNzYWdlIFwiRW1wdHkgdHJhbnNhY3Rpb25cIidcbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiB0eC50b0pzb24oKSxcbiAgICAgIChlcnIpID0+IGVyciBpbnN0YW5jZW9mIEludmFsaWRUcmFuc2FjdGlvbkVycm9yICYmIGVyci5tZXNzYWdlID09PSAnRW1wdHkgdHJhbnNhY3Rpb24nLFxuICAgICAgJ0V4cGVjdGVkIGFuIEludmFsaWRUcmFuc2FjdGlvbkVycm9yIHdpdGggbWVzc2FnZSBcIkVtcHR5IHRyYW5zYWN0aW9uXCInXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3N0YXJ0IGFuZCBidWlsZCBhIHR4biB3aXRoIGJ1aWxkZXIgaW5pdCBtZXRob2QnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhuID0gbmV3IFRyYW5zYWN0aW9uKGNvbmZpZyk7XG4gICAgdHhuLmljcFRyYW5zYWN0aW9uRGF0YSA9IHRlc3REYXRhLkljcFRyYW5zYWN0aW9uRGF0YTtcbiAgICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoJ3RpY3AnKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcih0eG4pO1xuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgY29uc3QgaWNwVHJhbnNhY3Rpb24gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24uaWNwVHJhbnNhY3Rpb247XG4gICAgY29uc3QgcGF5bG9hZHNEYXRhID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YTtcbiAgICBzaG91bGQuZXF1YWwoaWNwVHJhbnNhY3Rpb24ubWV0YWRhdGEubWVtbywgdGVzdERhdGEuSWNwVHJhbnNhY3Rpb25EYXRhLm1lbW8pO1xuICAgIHNob3VsZC5lcXVhbChpY3BUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzBdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuSWNwVHJhbnNhY3Rpb25EYXRhLnNlbmRlckFkZHJlc3MpO1xuICAgIHNob3VsZC5lcXVhbChpY3BUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzFdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuSWNwVHJhbnNhY3Rpb25EYXRhLnJlY2VpdmVyQWRkcmVzcyk7XG4gICAgc2hvdWxkLmVxdWFsKGljcFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMV0uYW1vdW50LnZhbHVlLCB0ZXN0RGF0YS5JY3BUcmFuc2FjdGlvbkRhdGEuYW1vdW50KTtcbiAgICBzaG91bGQuZXF1YWwoaWNwVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1syXS5hbW91bnQudmFsdWUsIHRlc3REYXRhLkljcFRyYW5zYWN0aW9uRGF0YS5mZWUpO1xuICAgIHNob3VsZC5lcXVhbChpY3BUcmFuc2FjdGlvbi5wdWJsaWNfa2V5c1swXS5oZXhfYnl0ZXMsIHRlc3REYXRhLkljcFRyYW5zYWN0aW9uRGF0YS5zZW5kZXJQdWJsaWNLZXlIZXgpO1xuICAgIHBheWxvYWRzRGF0YS5wYXlsb2Fkcy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICBwYXlsb2Fkc0RhdGEucGF5bG9hZHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSBtZW1vIHN1ZmZpeCBvbiByZWNlaXZlciBhZGRyZXNzIHdoZW4gYnVpbGRpbmcgYSB0cmFuc2ZlcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eG4gPSBuZXcgVHJhbnNhY3Rpb24oY29uZmlnKTtcbiAgICB0eG4uaWNwVHJhbnNhY3Rpb25EYXRhID0gdGVzdERhdGEuSWNwVHJhbnNhY3Rpb25EYXRhO1xuICAgIGNvbnN0IGZhY3RvcnkgPSBnZXRCdWlsZGVyRmFjdG9yeSgndGljcCcpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKHR4bik7XG4gICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLCB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpO1xuICAgIHR4QnVpbGRlci5yZWNlaXZlcklkKHRlc3REYXRhLkFjY291bnRzLmFjY291bnQ2LmFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5hbW91bnQoJzEwJyk7XG4gICAgdHhCdWlsZGVyLm1lbW8oTnVtYmVyKHRlc3REYXRhLk1ldGFEYXRhV2l0aE1lbW8ubWVtbykpO1xuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgY29uc3QgaWNwVHJhbnNhY3Rpb24gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24uaWNwVHJhbnNhY3Rpb247XG4gICAgc2hvdWxkLmVxdWFsKGljcFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMV0uYWNjb3VudC5hZGRyZXNzLCB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Ni5hZGRyZXNzKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkIGEganNvbiB0cmFuc2FjdGlvbiBmcm9tIHJhdyBoZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHNlcmlhbGl6ZWRUeEhleCk7XG4gICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuICAgIHNob3VsZC5lcXVhbChqc29uLm1lbW8sIHRlc3REYXRhLlBhcnNlZFJhd1RyYW5zYWN0aW9uLm1ldGFkYXRhLm1lbW8pO1xuICAgIHNob3VsZC5lcXVhbChqc29uLmZlZUFtb3VudCwgdGVzdERhdGEuUGFyc2VkUmF3VHJhbnNhY3Rpb24ub3BlcmF0aW9uc1syXS5hbW91bnQudmFsdWUpO1xuICAgIHNob3VsZC5lcXVhbChqc29uLnNlbmRlciwgdGVzdERhdGEuUGFyc2VkUmF3VHJhbnNhY3Rpb24ub3BlcmF0aW9uc1swXS5hY2NvdW50LmFkZHJlc3MpO1xuICAgIHNob3VsZC5lcXVhbChqc29uLnJlY2lwaWVudCwgdGVzdERhdGEuUGFyc2VkUmF3VHJhbnNhY3Rpb24ub3BlcmF0aW9uc1sxXS5hY2NvdW50LmFkZHJlc3MpO1xuICAgIHNob3VsZC5lcXVhbChqc29uLnNlbmRlclB1YmxpY0tleSwgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICBzaG91bGQuZXF1YWwoanNvbi5pZCwgdGVzdERhdGEuT25DaGFpblRyYW5zYWN0aW9uSGFzaCk7XG4gIH0pO1xuXG4gIGl0KCdleHBsYWluIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHR4LmZyb21SYXdUcmFuc2FjdGlvbihzZXJpYWxpemVkVHhIZXgpO1xuICAgIGNvbnN0IGV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcblxuICAgIGV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgnMTAnKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTAnKTtcbiAgICBleHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgZXhwbGFpbi5mZWUuZmVlLnNob3VsZC5lcXVhbCgnLTEwMDAwJyk7XG4gICAgZXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgaWYgKGV4cGxhaW4uZGlzcGxheU9yZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4cGxhaW4uZGlzcGxheU9yZGVyLnNob3VsZC5kZWVwRXF1YWwoWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnXSk7XG4gICAgfVxuICB9KTtcbn0pO1xuIl19