@bitgo/abstract-utxo 11.4.0 → 11.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +4 -1
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +3 -3
  4. package/dist/cjs/src/recovery/backupKeyRecovery.js +4 -4
  5. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  6. package/dist/cjs/src/recovery/crossChainRecovery.js +3 -3
  7. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  8. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +11 -1
  9. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  10. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +28 -2
  11. package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.d.ts +2 -0
  12. package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.d.ts.map +1 -0
  13. package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.js +102 -0
  14. package/dist/cjs/test/unit/verifyTransaction.js +230 -1
  15. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  16. package/dist/esm/abstractUtxoCoin.d.ts +4 -1
  17. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  18. package/dist/esm/abstractUtxoCoin.js +3 -3
  19. package/dist/esm/recovery/backupKeyRecovery.js +5 -5
  20. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  21. package/dist/esm/recovery/crossChainRecovery.js +3 -3
  22. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  23. package/dist/esm/transaction/descriptor/verifyTransaction.js +11 -1
  24. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  25. package/dist/esm/transaction/fixedScript/verifyTransaction.js +28 -2
  26. package/package.json +10 -10
@@ -270,8 +270,8 @@ function formatBackupKeyRecoveryResult(coin, psbt, params) {
270
270
  }
271
271
  return txInfo;
272
272
  }
273
- function getBip32Keys(bitgo, params) {
274
- const keys = (0, sdk_core_1.getBip32Keys)(bitgo, params, { requireBitGoXpub: true });
273
+ async function getBip32Keys(bitgo, params) {
274
+ const keys = await (0, sdk_core_1.getBip32KeysAsync)(bitgo, params, { requireBitGoXpub: true });
275
275
  if (!(0, sdk_core_1.isTriple)(keys)) {
276
276
  throw new Error(`expected key triple`);
277
277
  }
@@ -317,7 +317,7 @@ async function backupKeyRecovery(coin, bitgo, params) {
317
317
  throw new Error('feeRate must be a positive number');
318
318
  }
319
319
  // check whether key material and password authenticate the users and return parent keys of all three keys of the wallet
320
- const keys = getBip32Keys(bitgo, params);
320
+ const keys = await getBip32Keys(bitgo, params);
321
321
  const walletKeys = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from({
322
322
  triple: keys,
323
323
  derivationPrefixes: [params.userKeyPath || 'm/0/0', 'm/0/0', 'm/0/0'],
@@ -408,4 +408,4 @@ async function v1Sweep(coin, bitgo, params) {
408
408
  feeRate: recoveryFeePerByte,
409
409
  });
410
410
  }
411
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBNFJBLGtGQXVDQztBQWtDRCxzRUFxREM7QUFnQ0QsOENBMEhDO0FBcUJELGtEQW9CQztBQUVELDBCQTRCQztBQTNuQkQsb0RBQXVCO0FBQ3ZCLDhDQVF5QjtBQUN6QixnREFBNEQ7QUFHNUQsZ0ZBQStFO0FBQy9FLHdDQUE4RDtBQUM5RCxrREFBMEQ7QUFDMUQsa0ZBQXlGO0FBQ3pGLG9DQUE0RDtBQUM1RCx3Q0FBMkU7QUFFM0UseURBQStEO0FBQy9ELDZDQUEwQztBQUMxQyxpREFBOEM7QUFDOUMsaUNBQXdFO0FBUXhFLDBEQUEwRDtBQUM3QyxRQUFBLHFDQUFxQyxHQUFHLEVBQUUsQ0FBQztBQUV4RCw2SEFBNkg7QUFDaEgsUUFBQSwyQ0FBMkMsR0FBRyxHQUFHLENBQUM7QUFFL0Qsa0ZBQWtGO0FBQ3JFLFFBQUEscUNBQXFDLEdBQUcsRUFBRSxDQUFDO0FBVXhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxLQUFLLFVBQVUsc0JBQXNCLENBQUMsSUFBc0I7SUFDMUQsT0FBTyxNQUFNLElBQUksMkJBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsS0FBSyxVQUFVLGtCQUFrQixDQUFDLElBQXNCLEVBQUUsTUFBNEI7SUFDcEYsTUFBTSxXQUFXLEdBQUcsdUJBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELElBQUksV0FB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e1xuICBCaXRHb0Jhc2UsXG4gIEVycm9yTm9JbnB1dFRvUmVjb3ZlcixcbiAgZ2V0S3JzUHJvdmlkZXIsXG4gIGdldEJpcDMyS2V5cyBhcyBnZXRCaXAzMktleXNGcm9tU2RrQ29yZSxcbiAgaXNUcmlwbGUsXG4gIGtyc1Byb3ZpZGVycyxcbiAgVHJpcGxlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQklQMzIsIGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4gfSBmcm9tICcuLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IHNpZ25BbmRWZXJpZnlQc2J0IH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IGdlbmVyYXRlQWRkcmVzc1dpdGhDaGFpbkFuZEluZGV4IH0gZnJvbSAnLi4vYWRkcmVzcyc7XG5pbXBvcnQgeyBlbmNvZGVUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL2RlY29kZSc7XG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3JlcGxheVByb3RlY3Rpb24nO1xuaW1wb3J0IHsgZ2V0TWFpbm5ldENvaW5OYW1lLCBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi9uYW1lcyc7XG5pbXBvcnQgeyBwYXJzZU91dHB1dElkLCB1bnNwZW50U3VtLCB0eXBlIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi91bnNwZW50JztcblxuaW1wb3J0IHsgZm9yQ29pbiwgUmVjb3ZlcnlQcm92aWRlciB9IGZyb20gJy4vUmVjb3ZlcnlQcm92aWRlcic7XG5pbXBvcnQgeyBNZW1wb29sQXBpIH0gZnJvbSAnLi9tZW1wb29sQXBpJztcbmltcG9ydCB7IENvaW5nZWNrb0FwaSB9IGZyb20gJy4vY29pbmdlY2tvQXBpJztcbmltcG9ydCB7IGNyZWF0ZUJhY2t1cEtleVJlY292ZXJ5UHNidCwgZ2V0UmVjb3ZlcnlBbW91bnQgfSBmcm9tICcuL3BzYnQnO1xuXG50eXBlIFNjcmlwdFR5cGUyT2YzID0gZml4ZWRTY3JpcHRXYWxsZXQuT3V0cHV0U2NyaXB0VHlwZTtcbnR5cGUgQ2hhaW5Db2RlID0gZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlO1xudHlwZSBXYWxsZXRVbnNwZW50SlNPTiA9IFdhbGxldFVuc3BlbnQgJiB7XG4gIHZhbHVlU3RyaW5nOiBzdHJpbmc7XG59O1xuXG4vLyBWMSBvbmx5IGRlYWxzIHdpdGggQlRDLiA1MCBzYXQvdmJ5dGUgaXMgdmVyeSBhcmJpdHJhcnkuXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMSA9IDUwO1xuXG4vLyBGSVhNRShCVEMtMjY5MSk6IGl0IGlzIHVuY2xlYXIgd2h5IHN3ZWVwcyBoYXZlIGEgZGlmZmVyZW50IGRlZmF1bHQgdGhhbiByZWd1bGFyIHJlY292ZXJ5LiAxMDAgc2F0L3ZieXRlIGlzIGV4dHJlbWVseSBoaWdoLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjFfU1dFRVAgPSAxMDA7XG5cbi8vIEZJWE1FKEJUQy0yNjkxKTogaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIGhhdmUgYSBzaW5nbGUgZGVmYXVsdCBmb3IgZXZlcnkgY29pbi5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YyID0gNTA7XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB7XG4gIHR4SW5mbzoge1xuICAgIHVuc3BlbnRzPzogV2FsbGV0VW5zcGVudEpTT05bXTtcbiAgfTtcbiAgdHhIZXg6IHN0cmluZztcbiAgZmVlSW5mbzogUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuICBjb2luOiBzdHJpbmc7XG59XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IG1hcmtldCBwcmljZSBmcm9tIGEgdGhpcmQgcGFydHkgdG8gYmUgdXNlZCBmb3IgcmVjb3ZlcnlcbiAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBpbnRlbmRlZCBmb3Igbm9uLWJpdGdvIHJlY292ZXJ5IHRyYW5zYWN0aW9ucywgd2hlbiBpdCBpcyBuZWNlc3NhcnlcbiAqIHRvIGNhbGN1bGF0ZSB0aGUgcm91Z2ggZmVlIG5lZWRlZCB0byBwYXkgdG8gS2V5dGVybmFsLiBXZSBhcmUgb2theSB3aXRoIGFwcHJveGltYXRpbmcsXG4gKiBiZWNhdXNlIHRoZSByZXN1bHRpbmcgcHJpY2Ugb2YgdGhpcyBmdW5jdGlvbiBvbmx5IGhhcyBsZXNzIHRoYW4gMSBkb2xsYXIgaW5mbHVlbmNlIG9uIHRoZVxuICogZmVlIHRoYXQgbmVlZHMgdG8gYmUgcGFpZCB0byBLZXl0ZXJuYWwuXG4gKlxuICogU2VlIGNhbGN1bGF0ZUZlZUFtb3VudCBmdW5jdGlvbjogIHJldHVybiBNYXRoLnJvdW5kKGZlZUFtb3VudFVzZCAvIGN1cnJlbnRQcmljZSAqIHNlbGYuZ2V0QmFzZUZhY3RvcigpKTtcbiAqXG4gKiBUaGlzIGVuZCBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgYXMgYW4gYWNjdXJhdGUgZW5kcG9pbnQsIHNpbmNlIHNvbWUgY29pbnMnIHByaWNlcyBhcmUgbWlzc2luZyBmcm9tIHRoZSBwcm92aWRlclxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRSZWNvdmVyeU1hcmtldFByaWNlKGNvaW46IEFic3RyYWN0VXR4b0NvaW4pOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gYXdhaXQgbmV3IENvaW5nZWNrb0FwaSgpLmdldFVTRFByaWNlKGNvaW4uZ2V0RmFtaWx5KCkpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFtb3VudCAoaW4gYmFzZSB1bml0cykgdG8gcGF5IGEgS1JTIHByb3ZpZGVyIHdoZW4gYnVpbGRpbmcgYSByZWNvdmVyeSB0cmFuc2FjdGlvblxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSBwYXJhbXNcbiAqIEBwYXJhbSBwYXJhbXMucHJvdmlkZXIge1N0cmluZ30gdGhlIEtSUyBwcm92aWRlciB0aGF0IGhvbGRzIHRoZSBiYWNrdXAga2V5XG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FsY3VsYXRlRmVlQW1vdW50KGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHBhcmFtczogeyBwcm92aWRlcjogc3RyaW5nIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBrcnNQcm92aWRlciA9IGtyc1Byb3ZpZGVyc1twYXJhbXMucHJvdmlkZXJdO1xuXG4gIGlmIChrcnNQcm92aWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBmZWUgc3RydWN0dXJlIHNwZWNpZmllZCBmb3IgcHJvdmlkZXIgJHtwYXJhbXMucHJvdmlkZXJ9YCk7XG4gIH1cblxuICBpZiAoa3JzUHJvdmlkZXIuZmVlVHlwZSA9PT0gJ2ZsYXRVc2QnKSB7XG4gICAgY29uc3QgZmVlQW1vdW50VXNkID0ga3JzUHJvdmlkZXIuZmVlQW1vdW50O1xuICAgIGNvbnN0IGN1cnJlbnRQcmljZTogbnVtYmVyID0gYXdhaXQgZ2V0UmVjb3ZlcnlNYXJrZXRQcmljZShjb2luKTtcblxuICAgIHJldHVybiBNYXRoLnJvdW5kKChmZWVBbW91bnRVc2QgLyBjdXJyZW50UHJpY2UpICogY29pbi5nZXRCYXNlRmFjdG9yKCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIHdlIGNhbiBhZGQgbW9yZSBmZWUgc3RydWN0dXJlcyBoZXJlIGFzIG5lZWRlZCBmb3IgZGlmZmVyZW50IHByb3ZpZGVycywgc3VjaCBhcyBwZXJjZW50YWdlIG9mIHJlY292ZXJ5IGFtb3VudFxuICAgIHRocm93IG5ldyBFcnJvcignRmVlIHN0cnVjdHVyZSBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJQYXJhbXMge1xuICBzY2FuPzogbnVtYmVyO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICBiaXRnb0tleTogc3RyaW5nO1xuICByZWNvdmVyeURlc3RpbmF0aW9uOiBzdHJpbmc7XG4gIGtyc1Byb3ZpZGVyPzogc3RyaW5nO1xuICBpZ25vcmVBZGRyZXNzVHlwZXM6IFNjcmlwdFR5cGUyT2YzW107XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIGFwaUtleT86IHN0cmluZztcbiAgdXNlcktleVBhdGg/OiBzdHJpbmc7XG4gIHJlY292ZXJ5UHJvdmlkZXI/OiBSZWNvdmVyeVByb3ZpZGVyO1xuICAvKiogU2F0b3NoaSBwZXIgYnl0ZSAqL1xuICBmZWVSYXRlPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGFuIGFkZHJlc3MgYW5kIGZvcm1hdCBpdCBmb3IgQVBJIHF1ZXJpZXNcbiAqIEBwYXJhbSBjb2luIC0gVGhlIGNvaW4gaW5zdGFuY2VcbiAqIEBwYXJhbSBjb2luTmFtZSAtIFRoZSBjb2luIG5hbWVcbiAqIEBwYXJhbSB3YWxsZXRLZXlzIC0gVGhlIHdhbGxldCBrZXlzXG4gKiBAcGFyYW0gY2hhaW4gLSBUaGUgY2hhaW4gY29kZVxuICogQHBhcmFtIGFkZHJJbmRleCAtIFRoZSBhZGRyZXNzIGluZGV4XG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGFkZHJlc3MgKHdpdGggY2FzaGFkZHIgcHJlZml4IHN0cmlwcGVkIGZvciBCQ0gvQkNIQSlcbiAqL1xuZnVuY3Rpb24gZ2V0Rm9ybWF0dGVkQWRkcmVzcyhcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgd2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMsXG4gIGNoYWluOiBDaGFpbkNvZGUsXG4gIGFkZHJJbmRleDogbnVtYmVyXG4pOiBzdHJpbmcge1xuICBjb25zdCBmb3JtYXQgPSBjb2luLmdldENoYWluKCkgPT09ICdiY2gnIHx8IGNvaW4uZ2V0Q2hhaW4oKSA9PT0gJ2JjaGEnID8gJ2Nhc2hhZGRyJyA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYWRkcmVzcyA9IGdlbmVyYXRlQWRkcmVzc1dpdGhDaGFpbkFuZEluZGV4KGNvaW5OYW1lLCB3YWxsZXRLZXlzLCBjaGFpbiwgYWRkckluZGV4LCBmb3JtYXQpO1xuXG4gIC8vIEJsb2NrY2hhaXIgdXNlcyBjYXNoYWRkciBmb3JtYXQgd2hlbiBxdWVyeWluZyB0aGUgQVBJIGZvciBhZGRyZXNzIGluZm9ybWF0aW9uLiBTdHJpcCB0aGUgcHJlZml4IGZvciBCQ0gvQkNIQS5cbiAgcmV0dXJuIGZvcm1hdCA9PT0gJ2Nhc2hhZGRyJyA/IGFkZHJlc3Muc3BsaXQoJzonKVsxXSA6IGFkZHJlc3M7XG59XG5cbmZ1bmN0aW9uIGhhc1dpdG5lc3NEYXRhKHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUyT2YzKTogYm9vbGVhbiB7XG4gIHJldHVybiBzY3JpcHRUeXBlICE9PSAncDJzaCc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QmxvY2tjaGFpblVuc3BlbnRzUGF0aChcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBSZWNvdmVyUGFyYW1zLFxuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgY2hhaW46IENoYWluQ29kZVxuKTogUHJvbWlzZTxXYWxsZXRVbnNwZW50PGJpZ2ludD5bXT4ge1xuICBjb25zdCBzY3JpcHRUeXBlID0gZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnNjcmlwdFR5cGUoY2hhaW4pO1xuICBjb25zdCBmZXRjaFByZXZUeCA9ICFoYXNXaXRuZXNzRGF0YShzY3JpcHRUeXBlKSAmJiBnZXRNYWlubmV0Q29pbk5hbWUoY29pbi5uYW1lKSAhPT0gJ3plYyc7XG4gIGNvbnN0IHJlY292ZXJ5UHJvdmlkZXIgPSBwYXJhbXMucmVjb3ZlcnlQcm92aWRlciA/PyBmb3JDb2luKGNvaW4uZ2V0Q2hhaW4oKSwgcGFyYW1zLmFwaUtleSk7XG4gIGNvbnN0IE1BWF9TRVFVRU5USUFMX0FERFJFU1NFU19XSVRIT1VUX1RYUyA9IHBhcmFtcy5zY2FuIHx8IDIwO1xuICBsZXQgbnVtU2VxdWVudGlhbEFkZHJlc3Nlc1dpdGhvdXRUeHMgPSAwO1xuICBjb25zdCBwcmV2VHhDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0UHJldlR4KHR4aWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHByZXZUeEhleCA9IHByZXZUeENhY2hlLmdldCh0eGlkKTtcbiAgICBpZiAoIXByZXZUeEhleCkge1xuICAgICAgcHJldlR4SGV4ID0gYXdhaXQgcmVjb3ZlcnlQcm92aWRlci5nZXRUcmFuc2FjdGlvbkhleCh0eGlkKTtcbiAgICAgIHByZXZUeENhY2hlLnNldCh0eGlkLCBwcmV2VHhIZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcHJldlR4SGV4O1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2F0aGVyVW5zcGVudHMoYWRkckluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWRBZGRyZXNzID0gZ2V0Rm9ybWF0dGVkQWRkcmVzcyhjb2luLCBjb2luLm5hbWUsIHdhbGxldEtleXMsIGNoYWluLCBhZGRySW5kZXgpO1xuICAgIGNvbnN0IGFkZHJJbmZvID0gYXdhaXQgcmVjb3ZlcnlQcm92aWRlci5nZXRBZGRyZXNzSW5mbyhmb3JtYXR0ZWRBZGRyZXNzKTtcbiAgICAvLyB3ZSB1c2UgdHhDb3VudCBoZXJlIGJlY2F1c2UgaXQgaW1wbGllcyB1c2FnZSAtIGhhdmluZyB0eCdlcyBtZWFucyB0aGUgYWRkciB3YXMgZ2VuZXJhdGVkIGFuZCB1c2VkXG4gICAgaWYgKGFkZHJJbmZvLnR4Q291bnQgPT09IDApIHtcbiAgICAgIG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzID0gMDtcblxuICAgICAgaWYgKGFkZHJJbmZvLmJhbGFuY2UgPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCBhbiBhZGRyZXNzIHdpdGggYmFsYW5jZTogJHtmb3JtYXR0ZWRBZGRyZXNzfSB3aXRoIGJhbGFuY2UgJHthZGRySW5mby5iYWxhbmNlfWApO1xuICAgICAgICBjb25zdCBhZGRyZXNzVW5zcGVudHMgPSBhd2FpdCByZWNvdmVyeVByb3ZpZGVyLmdldFVuc3BlbnRzRm9yQWRkcmVzc2VzKFtmb3JtYXR0ZWRBZGRyZXNzXSk7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZFVuc3BlbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgYWRkcmVzc1Vuc3BlbnRzLm1hcChhc3luYyAodSk6IFByb21pc2U8V2FsbGV0VW5zcGVudDxiaWdpbnQ+PiA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHR4aWQsIHZvdXQgfSA9IHBhcnNlT3V0cHV0SWQodS5pZCk7XG4gICAgICAgICAgICBsZXQgdmFsID0gQmlnSW50KHUudmFsdWUpO1xuICAgICAgICAgICAgaWYgKGNvaW4uYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgICAgICAgLy8gYmxvY2tjaGFpciByZXR1cm5zIHRoZSBudW1iZXIgd2l0aCB0aGUgY29ycmVjdCBwcmVjaXNpb24sIGJ1dCBpbiBudW1iZXIgZm9ybWF0XG4gICAgICAgICAgICAgIC8vIGpzb24gcGFyc2Ugd29uJ3QgcGFyc2UgaXQgY29ycmVjdGx5LCBzbyB3ZSByZXF1ZXJ5IHRoZSB0eGlkIGZvciB0aGUgdHggaGV4IHRvIGRlY29kZSBoZXJlXG4gICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGdldFByZXZUeCh0eGlkKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eCA9IGNvaW4uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4PGJpZ2ludD4odHhIZXgpO1xuICAgICAgICAgICAgICAgIHZhbCA9IHR4Lm91dHNbdm91dF0udmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoZSBhcGkgbWF5IHJldHVybiBjYXNoYWRkcidzIGluc3RlYWQgb2YgbGVnYWN5IGZvciBCQ0ggYW5kIEJDSEFcbiAgICAgICAgICAgIC8vIGRvd25zdHJlYW0gcHJvY2Vzc2VzJ3Mgb25seSBleHBlY3QgbGVnYWN5IGFkZHJlc3Nlc1xuICAgICAgICAgICAgdSA9IHsgLi4udSwgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKHUuYWRkcmVzcykgfTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnUsXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgIGNoYWluOiBjaGFpbixcbiAgICAgICAgICAgICAgaW5kZXg6IGFkZHJJbmRleCxcbiAgICAgICAgICAgICAgcHJldlR4OiBmZXRjaFByZXZUeCA/IEJ1ZmZlci5mcm9tKGF3YWl0IGdldFByZXZUeCh0eGlkKSwgJ2hleCcpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSBhcyBXYWxsZXRVbnNwZW50PGJpZ2ludD47XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB3YWxsZXRVbnNwZW50cy5wdXNoKC4uLnByb2Nlc3NlZFVuc3BlbnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobnVtU2VxdWVudGlhbEFkZHJlc3Nlc1dpdGhvdXRUeHMgPj0gTUFYX1NFUVVFTlRJQUxfQUREUkVTU0VTX1dJVEhPVVRfVFhTKSB7XG4gICAgICAvLyBzdG9wIHNlYXJjaGluZyBmb3IgYWRkcmVzc2VzIHdpdGggdW5zcGVudHMgaW4gdGhlbSwgd2UndmUgZm91bmQgJHtNQVhfU0VRVUVOVElBTF9BRERSRVNTRVNfV0lUSE9VVF9UWFN9IGluIGEgcm93IHdpdGggbm9uZVxuICAgICAgLy8gd2UgYXJlIGRvbmVcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2F0aGVyVW5zcGVudHMoYWRkckluZGV4ICsgMSk7XG4gIH1cblxuICAvLyBnZXQgdW5zcGVudHMgZm9yIHRoZXNlIGFkZHJlc3Nlc1xuXG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSA9IFtdO1xuICAvLyBUaGlzIHdpbGwgcG9wdWxhdGUgd2FsbGV0QWRkcmVzc2VzXG4gIGF3YWl0IGdhdGhlclVuc3BlbnRzKDApO1xuXG4gIGlmICh3YWxsZXRVbnNwZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBDb3VsZG4ndCBmaW5kIGFueSBhZGRyZXNzZXMgd2l0aCBmdW5kc1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiB3YWxsZXRVbnNwZW50cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgeyBkZWZhdWx0VmFsdWUgfTogeyBkZWZhdWx0VmFsdWU6IG51bWJlciB9XG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBpZiAoY29pbi5nZXRGYW1pbHkoKSA9PT0gJ2RvZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RvZ2Vjb2luL2RvZ2Vjb2luL2Jsb2IvbWFzdGVyL2RvYy9mZWUtcmVjb21tZW5kYXRpb24ubWRcbiAgICAvLyAwLjAxIERPR0UgcGVyIEtCXG4gICAgcmV0dXJuIDEwMDA7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBNZW1wb29sQXBpLmZvckNvaW4oY29pbi5nZXRDaGFpbigpKS5nZXRSZWNvdmVyeUZlZVBlckJ5dGVzKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmRpcihlKTtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gPSB7XG4gIGlucHV0cz86IFdhbGxldFVuc3BlbnRKU09OW107XG4gIHRyYW5zYWN0aW9uSGV4OiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIHJlY292ZXJ5QW1vdW50OiBudW1iZXI7XG4gIHJlY292ZXJ5QW1vdW50U3RyaW5nOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIGJhY2t1cCBrZXkgcmVjb3ZlcnkgUFNCVCBjcmVhdGlvbi5cbiAqIEFsbCBmaWVsZHMgYXJlIHByZS12YWxpZGF0ZWQgYW5kIGRlcml2ZWQgLSBubyBzdHJpbmcga2V5IHBhcnNpbmcgbmVlZGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJXaXRoVW5zcGVudHNQYXJhbXMge1xuICAvKiogUHJlLWRlcml2ZWQgd2FsbGV0IGtleXMgKi9cbiAgd2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM7XG4gIC8qKiBQcmUtZGVyaXZlZCBrZXkgdHJpcGxlICh1c2VyLCBiYWNrdXAsIGJpdGdvKS4gQ2hlY2sgcHJpdmF0ZUtleSB0byBkZXRlcm1pbmUgc2lnbmluZyBjYXBhYmlsaXR5LiAqL1xuICBrZXlzOiBUcmlwbGU8QklQMzI+O1xuICAvKiogVmFsaWRhdGVkIHJlY292ZXJ5IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICAvKiogRmVlIHJhdGUgaW4gc2F0b3NoaSBwZXIgdmJ5dGUgKi9cbiAgZmVlUmF0ZVNhdFZCOiBudW1iZXI7XG4gIC8qKiBLUlMgZmVlIGFtb3VudCBpbiBzYXRvc2hpcyAoMCBpZiBub3QgS1JTIHJlY292ZXJ5KSAqL1xuICBrcnNGZWU/OiBiaWdpbnQ7XG4gIC8qKiBLUlMgZmVlIGFkZHJlc3MgKHJlcXVpcmVkIGlmIGtyc0ZlZSA+IDApICovXG4gIGtyc0ZlZUFkZHJlc3M/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGhhc1ByaXZhdGVLZXkoa2V5OiBCSVAzMik6IGJvb2xlYW4ge1xuICByZXR1cm4ga2V5LnByaXZhdGVLZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSBQU0JUIHdpdGhvdXQgQml0R28sIHVzaW5nIHByb3ZpZGVkIHVuc3BlbnRzLlxuICpcbiAqIFRoaXMgaXMgdGhlIGNvcmUgdHJhbnNhY3Rpb24gYnVpbGRpbmcgbG9naWMsIHNlcGFyYXRlZCBmcm9tIHVuc3BlbnQgZ2F0aGVyaW5nXG4gKiBhbmQgb3V0cHV0IGZvcm1hdHRpbmcuIFJldHVybnMgYSBQU0JUIGF0IHRoZSBhcHByb3ByaWF0ZSBzaWduaW5nIHN0YWdlLlxuICpcbiAqIFNpZ25pbmcgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUga2V5czpcbiAqIC0gSWYgdXNlciBrZXkgaGFzIG5vIHByaXZhdGUga2V5OiB1bnNpZ25lZCBQU0JUXG4gKiAtIElmIHVzZXIga2V5IGhhcyBwcml2YXRlIGtleSBidXQgYmFja3VwIGRvZXNuJ3Q6IGhhbGYtc2lnbmVkIFBTQlQgKHVzZXIgc2lnbmF0dXJlIG9ubHkpXG4gKiAtIElmIGJvdGggdXNlciBhbmQgYmFja3VwIGtleXMgaGF2ZSBwcml2YXRlIGtleXM6IGZ1bGx5IHNpZ25lZCBQU0JUIChub3QgZmluYWxpemVkKVxuICpcbiAqIEBwYXJhbSBjb2luTmFtZSAtIFRoZSBjb2luIG5hbWUgZm9yIHRoZSBQU0JUXG4gKiBAcGFyYW0gcGFyYW1zIC0gUmVjb3ZlcnkgcGFyYW1ldGVycyB3aXRoIHByZS1kZXJpdmVkIGtleXNcbiAqIEBwYXJhbSB1bnNwZW50cyAtIFRoZSB3YWxsZXQgdW5zcGVudHMgdG8gcmVjb3ZlciAobXVzdCBiZSBub24tZW1wdHkpXG4gKiBAcmV0dXJucyBUaGUgUFNCVCBhdCB0aGUgYXBwcm9wcmlhdGUgc2lnbmluZyBzdGFnZSAobmV2ZXIgZmluYWxpemVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUsXG4gIHBhcmFtczogUmVjb3ZlcldpdGhVbnNwZW50c1BhcmFtcyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdXG4pOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICBjb25zdCB7IHdhbGxldEtleXMsIGtleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiwga3JzRmVlLCBrcnNGZWVBZGRyZXNzIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IHVuc3BlbnRTdW0odW5zcGVudHMpO1xuICBpZiAodG90YWxJbnB1dEFtb3VudCA8PSBCaWdJbnQoMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3JOb0lucHV0VG9SZWNvdmVyKCk7XG4gIH1cblxuICBsZXQgcHNidCA9IGNyZWF0ZUJhY2t1cEtleVJlY292ZXJ5UHNidChjb2luTmFtZSwgd2FsbGV0S2V5cywgdW5zcGVudHMsIHtcbiAgICBmZWVSYXRlU2F0VkI6IGZlZVJhdGVTYXRWQixcbiAgICByZWNvdmVyeURlc3RpbmF0aW9uOiByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgIGtleVJlY292ZXJ5U2VydmljZUZlZToga3JzRmVlID8/IEJpZ0ludCgwKSxcbiAgICBrZXlSZWNvdmVyeVNlcnZpY2VGZWVBZGRyZXNzOiBrcnNGZWVBZGRyZXNzLFxuICB9KTtcblxuICBjb25zdCB1c2VySGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1swXSk7XG4gIGNvbnN0IGJhY2t1cEhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMV0pO1xuXG4gIGlmICghdXNlckhhc1ByaXZhdGVLZXkpIHtcbiAgICAvLyBVbnNpZ25lZCBzd2VlcCAtIHJldHVybiB1bnNpZ25lZCBQU0JUXG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBjb25zdCByZXBsYXlQcm90ZWN0aW9uID0geyBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luTmFtZSkgfTtcblxuICAvLyBTaWduIHdpdGggdXNlciBrZXlcbiAgcHNidCA9IHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIGtleXNbMF0sIHdhbGxldEtleXMsIHJlcGxheVByb3RlY3Rpb24pO1xuXG4gIGlmIChiYWNrdXBIYXNQcml2YXRlS2V5KSB7XG4gICAgLy8gRnVsbCByZWNvdmVyeSAtIHNpZ24gd2l0aCBiYWNrdXAga2V5IHRvb1xuICAgIHBzYnQgPSBzaWduQW5kVmVyaWZ5UHNidChwc2J0LCBrZXlzWzFdLCB3YWxsZXRLZXlzLCByZXBsYXlQcm90ZWN0aW9uKTtcbiAgfVxuXG4gIC8vIFJldHVybiBQU0JUIChub3QgZmluYWxpemVkIC0gbGV0IGNhbGxlciBkZWNpZGUgaG93IHRvIGZvcm1hdClcbiAgcmV0dXJuIHBzYnQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgZm9ybWF0dGluZyBhIGJhY2t1cCBrZXkgcmVjb3ZlcnkgcmVzdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UGFyYW1zIHtcbiAgLyoqIFByZS1kZXJpdmVkIHdhbGxldCBrZXlzICovXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzO1xuICAvKiogUHJlLWRlcml2ZWQga2V5IHRyaXBsZSAodXNlciwgYmFja3VwLCBiaXRnbykuIENoZWNrIHByaXZhdGVLZXkgdG8gZGV0ZXJtaW5lIHNpZ25pbmcgY2FwYWJpbGl0eS4gKi9cbiAga2V5czogVHJpcGxlPEJJUDMyPjtcbiAgLyoqIFJlY292ZXJ5IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICAvKiogS1JTIHByb3ZpZGVyIG5hbWUgKGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlMpICovXG4gIGtyc1Byb3ZpZGVyPzogc3RyaW5nO1xuICAvKiogT3JpZ2luYWwgYmFja3VwIGtleSBzdHJpbmcgKG5lZWRlZCBmb3IgS1JTIHJlY292ZXJ5IHJlc3BvbnNlKSAqL1xuICBiYWNrdXBLZXk/OiBzdHJpbmc7XG4gIC8qKiBUaGUgd2FsbGV0IHVuc3BlbnRzIChuZWVkZWQgZm9yIGlucHV0cyBhcnJheSBpbiByZXNwb25zZSkgKi9cbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYSBiYWNrdXAga2V5IHJlY292ZXJ5IFBTQlQgaW50byB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2UgZm9ybWF0LlxuICpcbiAqIE91dHB1dCBmb3JtYXQgZGVwZW5kcyBvbiBzaWduaW5nIHN0YXRlIGFuZCBLUlMgcHJvdmlkZXI6XG4gKiAtIFVuc2lnbmVkIHN3ZWVwOiBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8gd2l0aCBQU0JUIGhleFxuICogLSBLUlMga2V5dGVybmFsOiBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggbGVnYWN5IGhhbGYtc2lnbmVkIHR4IGhleFxuICogLSBLUlMgb3RoZXI6IEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBQU0JUIGhleFxuICogLSBGdWxsIHJlY292ZXJ5OiBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggZmluYWxpemVkIHR4IGhleFxuICpcbiAqIEBwYXJhbSBjb2luIC0gVGhlIGNvaW4gaW5zdGFuY2VcbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgdG8gZm9ybWF0IChhdCBhcHByb3ByaWF0ZSBzaWduaW5nIHN0YWdlKVxuICogQHBhcmFtIHBhcmFtcyAtIEZvcm1hdHRpbmcgcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCByZWNvdmVyeSByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIHBhcmFtczogRm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlQYXJhbXNcbik6IEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gfCBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8ge1xuICBjb25zdCB7IHdhbGxldEtleXMsIGtleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGtyc1Byb3ZpZGVyLCBiYWNrdXBLZXksIHVuc3BlbnRzIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgdXNlckhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMF0pO1xuICBjb25zdCBiYWNrdXBIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzFdKTtcblxuICBjb25zdCBpc1Vuc2lnbmVkU3dlZXAgPSAhdXNlckhhc1ByaXZhdGVLZXkgJiYgIWJhY2t1cEhhc1ByaXZhdGVLZXk7XG4gIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBrcnNQcm92aWRlciAhPT0gdW5kZWZpbmVkICYmIHVzZXJIYXNQcml2YXRlS2V5ICYmICFiYWNrdXBIYXNQcml2YXRlS2V5O1xuICBjb25zdCBpc0Z1bGxSZWNvdmVyeSA9IHVzZXJIYXNQcml2YXRlS2V5ICYmIGJhY2t1cEhhc1ByaXZhdGVLZXk7XG5cbiAgLy8gVW5zaWduZWQgc3dlZXAgLSByZXR1cm4gRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvXG4gIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHR4SW5mbzoge30sXG4gICAgICBmZWVJbmZvOiB7fSxcbiAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2VUeEZvcm1hdCA9ICFpc0tyc1JlY292ZXJ5IHx8IGtyc1Byb3ZpZGVyID09PSAna2V5dGVybmFsJyA/ICdsZWdhY3knIDogJ3BzYnQnO1xuICBjb25zdCB0eEluZm8gPSB7fSBhcyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uO1xuXG4gIC8vIEluY2x1ZGUgaW5wdXRzIGFycmF5IGZvciBsZWdhY3kgZm9ybWF0IHJlc3BvbnNlc1xuICB0eEluZm8uaW5wdXRzID1cbiAgICByZXNwb25zZVR4Rm9ybWF0ID09PSAnbGVnYWN5J1xuICAgICAgPyB1bnNwZW50cy5tYXAoKHUpID0+ICh7IC4uLnUsIHZhbHVlOiBOdW1iZXIodS52YWx1ZSksIHZhbHVlU3RyaW5nOiB1LnZhbHVlLnRvU3RyaW5nKCksIHByZXZUeDogdW5kZWZpbmVkIH0pKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAvLyBLUlMgcmVjb3ZlcnkgLSBoYWxmLXNpZ25lZFxuICAgIC8vIGtleXRlcm5hbCB1c2VzIGxlZ2FjeSBmb3JtYXQsIG90aGVyIEtSUyBwcm92aWRlcnMgdXNlIFBTQlQgZm9ybWF0XG4gICAgdHhJbmZvLnRyYW5zYWN0aW9uSGV4ID1cbiAgICAgIGtyc1Byb3ZpZGVyID09PSAna2V5dGVybmFsJ1xuICAgICAgICA/IEJ1ZmZlci5mcm9tKHBzYnQuZ2V0SGFsZlNpZ25lZExlZ2FjeUZvcm1hdCgpKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgOiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICB0eEluZm8uY29pbiA9IGNvaW4uZ2V0Q2hhaW4oKTtcbiAgICB0eEluZm8uYmFja3VwS2V5ID0gYmFja3VwS2V5ID8/ICcnO1xuICAgIGNvbnN0IHJlY292ZXJ5QW1vdW50ID0gZ2V0UmVjb3ZlcnlBbW91bnQocHNidCwgd2FsbGV0S2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gICAgdHhJbmZvLnJlY292ZXJ5QW1vdW50ID0gTnVtYmVyKHJlY292ZXJ5QW1vdW50KTtcbiAgICB0eEluZm8ucmVjb3ZlcnlBbW91bnRTdHJpbmcgPSByZWNvdmVyeUFtb3VudC50b1N0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzRnVsbFJlY292ZXJ5KSB7XG4gICAgLy8gRnVsbCByZWNvdmVyeSAtIGZpbmFsaXplIGFuZCBleHRyYWN0IHRyYW5zYWN0aW9uXG4gICAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgIHR4SW5mby50cmFuc2FjdGlvbkhleCA9IEJ1ZmZlci5mcm9tKHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCkudG9CeXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICByZXR1cm4gdHhJbmZvO1xufVxuXG5mdW5jdGlvbiBnZXRCaXAzMktleXMoYml0Z286IEJpdEdvQmFzZSwgcGFyYW1zOiBSZWNvdmVyUGFyYW1zKTogVHJpcGxlPEJJUDMyPiB7XG4gIGNvbnN0IGtleXMgPSBnZXRCaXAzMktleXNGcm9tU2RrQ29yZShiaXRnbywgcGFyYW1zLCB7IHJlcXVpcmVCaXRHb1hwdWI6IHRydWUgfSk7XG4gIGlmICghaXNUcmlwbGUoa2V5cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGtleSB0cmlwbGVgKTtcbiAgfVxuICByZXR1cm4ga2V5cy5tYXAoKGspID0+IEJJUDMyLmZyb20oay50b0Jhc2U1OCgpKSkgYXMgVHJpcGxlPEJJUDMyPjtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvLlxuICpcbiAqIFJldHVybnMgdHJhbnNhY3Rpb24gaGV4IGluIGxlZ2FjeSBmb3JtYXQgZm9yIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uLCBoYWxmIHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aCBLUlMgcHJvdmlkZXIgKG9ubHkga2V5dGVybmFsKSxcbiAqIGZ1bGx5IHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBhIEtSUyBwcm92aWRlci5cbiAqXG4gKiBSZXR1cm5zIFBTQlQgaGV4IGZvciBoYWxmIHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aCBLUlMgcHJvdmlkZXIgKGV4Y2x1ZGluZyBrZXl0ZXJuYWwpXG4gKiBGb3IgUFNCVCBoZXggY2FzZXMsIFVuc3BlbnRzIGFyZSBub3QgcmVxdWlyZWQgaW4gcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSBiaXRnb1xuICogQHBhcmFtIHBhcmFtc1xuICogLSB1c2VyS2V5OiBbZW5jcnlwdGVkXSB4cHJ2LCBvciB4cHViXG4gKiAtIGJhY2t1cEtleTogW2VuY3J5cHRlZF0geHBydiwgb3IgeHB1YiBpZiB0aGUgeHBydiBpcyBoZWxkIGJ5IGEgS1JTIHByb3ZpZGVyXG4gKiAtIHdhbGxldFBhc3NwaHJhc2U6IG5lY2Vzc2FyeSBpZiBvbmUgb2YgdGhlIHhwcnZzIGlzIGVuY3J5cHRlZFxuICogLSBiaXRnb0tleTogeHB1YlxuICogLSBrcnNQcm92aWRlcjogbmVjZXNzYXJ5IGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlNcbiAqIC0gcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGFyZ2V0IGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAqIC0gc2NhbjogdGhlIGFtb3VudCBvZiBjb25zZWN1dGl2ZSBhZGRyZXNzZXMgd2l0aG91dCB1bnNwZW50cyB0byBzY2FuIHRocm91Z2ggYmVmb3JlIHN0b3BwaW5nXG4gKiAtIGlnbm9yZUFkZHJlc3NUeXBlczogKG9wdGlvbmFsKSBzY3JpcHRzIHRvIGlnbm9yZVxuICogICAgICAgIGZvciBleGFtcGxlOiBbJ3Ayc2hQMndzaCcsICdwMndzaCddIHdpbGwgcHJldmVudCBjb2RlIGZyb20gY2hlY2tpbmcgZm9yIHdyYXBwZWQtc2Vnd2l0IGFuZCBuYXRpdmUtc2Vnd2l0IGNoYWlucyBvbiB0aGUgcHVibGljIGJsb2NrIGV4cGxvcmVyc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmFja3VwS2V5UmVjb3ZlcnkoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogUmVjb3ZlclBhcmFtc1xuKTogUHJvbWlzZTxCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHwgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvPiB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy51c2VyS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB1c2VyS2V5Jyk7XG4gIH1cblxuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMuYmFja3VwS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBiYWNrdXBLZXknKTtcbiAgfVxuXG4gIGlmIChcbiAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSB8fFxuICAgICFjb2luLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCB7IGFueUZvcm1hdDogdHJ1ZSB9KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICB9XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5zY2FuKSAmJiAoIV8uaXNJbnRlZ2VyKHBhcmFtcy5zY2FuKSB8fCBwYXJhbXMuc2NhbiA8IDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzY2FuIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gIH1cblxuICBpZiAocGFyYW1zLmZlZVJhdGUgIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc0Zpbml0ZShwYXJhbXMuZmVlUmF0ZSkgfHwgcGFyYW1zLmZlZVJhdGUgPD0gMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZlZVJhdGUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB9XG5cbiAgLy8gY2hlY2sgd2hldGhlciBrZXkgbWF0ZXJpYWwgYW5kIHBhc3N3b3JkIGF1dGhlbnRpY2F0ZSB0aGUgdXNlcnMgYW5kIHJldHVybiBwYXJlbnQga2V5cyBvZiBhbGwgdGhyZWUga2V5cyBvZiB0aGUgd2FsbGV0XG4gIGNvbnN0IGtleXMgPSBnZXRCaXAzMktleXMoYml0Z28sIHBhcmFtcyk7XG4gIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHtcbiAgICB0cmlwbGU6IGtleXMsXG4gICAgZGVyaXZhdGlvblByZWZpeGVzOiBbcGFyYW1zLnVzZXJLZXlQYXRoIHx8ICdtLzAvMCcsICdtLzAvMCcsICdtLzAvMCddLFxuICB9KTtcblxuICBjb25zdCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W10gPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaXhlZFNjcmlwdFdhbGxldC5vdXRwdXRTY3JpcHRUeXBlc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChhZGRyZXNzVHlwZSkgPT5cbiAgICAgICAgICAgIGZpeGVkU2NyaXB0V2FsbGV0LnN1cHBvcnRzU2NyaXB0VHlwZShjb2luLm5hbWUsIGFkZHJlc3NUeXBlKSAmJlxuICAgICAgICAgICAgIXBhcmFtcy5pZ25vcmVBZGRyZXNzVHlwZXM/LmluY2x1ZGVzKGFkZHJlc3NUeXBlKVxuICAgICAgICApXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKHF1ZXJpZXMsIGFkZHJlc3NUeXBlKSA9PiBbXG4gICAgICAgICAgICAuLi5xdWVyaWVzLFxuICAgICAgICAgICAgcXVlcnlCbG9ja2NoYWluVW5zcGVudHNQYXRoKFxuICAgICAgICAgICAgICBjb2luLFxuICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgIHdhbGxldEtleXMsXG4gICAgICAgICAgICAgIGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZS52YWx1ZShhZGRyZXNzVHlwZSwgJ2V4dGVybmFsJylcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBxdWVyeUJsb2NrY2hhaW5VbnNwZW50c1BhdGgoXG4gICAgICAgICAgICAgIGNvaW4sXG4gICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgd2FsbGV0S2V5cyxcbiAgICAgICAgICAgICAgZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnZhbHVlKGFkZHJlc3NUeXBlLCAnaW50ZXJuYWwnKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIFtdIGFzIFByb21pc2U8V2FsbGV0VW5zcGVudDxiaWdpbnQ+W10+W11cbiAgICAgICAgKVxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmVlUmF0ZVNhdFZCID1cbiAgICBwYXJhbXMuZmVlUmF0ZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHBhcmFtcy5mZWVSYXRlXG4gICAgICA6IGF3YWl0IGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoY29pbiwgeyBkZWZhdWx0VmFsdWU6IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjIgfSk7XG5cbiAgLy8gQ2FsY3VsYXRlIEtSUyBmZWUgaWYgbmVlZGVkXG4gIGNvbnN0IHVzZXJIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzBdKTtcbiAgY29uc3QgYmFja3VwSGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1sxXSk7XG4gIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBwYXJhbXMua3JzUHJvdmlkZXIgIT09IHVuZGVmaW5lZCAmJiB1c2VySGFzUHJpdmF0ZUtleSAmJiAhYmFja3VwSGFzUHJpdmF0ZUtleTtcblxuICBsZXQga3JzRmVlID0gQmlnSW50KDApO1xuICBsZXQga3JzRmVlQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChpc0tyc1JlY292ZXJ5ICYmIHBhcmFtcy5rcnNQcm92aWRlcikge1xuICAgIHRyeSB7XG4gICAgICBrcnNGZWUgPSBCaWdJbnQoYXdhaXQgY2FsY3VsYXRlRmVlQW1vdW50KGNvaW4sIHsgcHJvdmlkZXI6IHBhcmFtcy5rcnNQcm92aWRlciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBEb24ndCBsZXQgdGhpcyBlcnJvciBibG9jayB0aGUgcmVjb3ZlcnkgLVxuICAgICAgY29uc29sZS5kaXIoZXJyKTtcbiAgICB9XG5cbiAgICBpZiAoa3JzRmVlID4gQmlnSW50KDApKSB7XG4gICAgICBjb25zdCBrcnNQcm92aWRlckNvbmZpZyA9IGdldEtyc1Byb3ZpZGVyKGNvaW4sIHBhcmFtcy5rcnNQcm92aWRlcik7XG4gICAgICBpZiAoIWtyc1Byb3ZpZGVyQ29uZmlnLmZlZUFkZHJlc3Nlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVByb3ZpZGVyIG11c3QgZGVmaW5lIGZlZUFkZHJlc3Nlc2ApO1xuICAgICAgfVxuXG4gICAgICBrcnNGZWVBZGRyZXNzID0ga3JzUHJvdmlkZXJDb25maWcuZmVlQWRkcmVzc2VzW2NvaW4uZ2V0Q2hhaW4oKV07XG5cbiAgICAgIGlmICgha3JzRmVlQWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgS1JTIHByb3ZpZGVyIGhhcyBub3QgY29uZmlndXJlZCB0aGVpciBmZWUgc3RydWN0dXJlIHlldCAtIHJlY292ZXJ5IGNhbm5vdCBiZSBjb21wbGV0ZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBCdWlsZCBhbmQgc2lnbiBQU0JUXG4gIGNvbnN0IHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICBjb2luLm5hbWUsXG4gICAge1xuICAgICAgd2FsbGV0S2V5cyxcbiAgICAgIGtleXMsXG4gICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIGZlZVJhdGVTYXRWQixcbiAgICAgIGtyc0ZlZSxcbiAgICAgIGtyc0ZlZUFkZHJlc3MsXG4gICAgfSxcbiAgICB1bnNwZW50c1xuICApO1xuXG4gIC8vIEZvcm1hdCB0aGUgcmVzdWx0XG4gIHJldHVybiBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBwc2J0LCB7XG4gICAgd2FsbGV0S2V5cyxcbiAgICBrZXlzLFxuICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgIGtyc1Byb3ZpZGVyOiBwYXJhbXMua3JzUHJvdmlkZXIsXG4gICAgYmFja3VwS2V5OiBwYXJhbXMuYmFja3VwS2V5LFxuICAgIHVuc3BlbnRzLFxuICB9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaXRHb1YxVW5zcGVudCB7XG4gIHR4X2hhc2g6IHN0cmluZztcbiAgdHhfb3V0cHV0X246IG51bWJlcjtcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWMVN3ZWVwUGFyYW1zIHtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICB1bnNwZW50czogQml0R29WMVVuc3BlbnRbXTtcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIG90cDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFYxUmVjb3ZlclBhcmFtcyBleHRlbmRzIE9taXQ8VjFTd2VlcFBhcmFtcywgJ290cCc+IHtcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2MUJhY2t1cEtleVJlY292ZXJ5KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFYxUmVjb3ZlclBhcmFtc1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKFxuICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pIHx8XG4gICAgIWNvaW4uaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sIHsgYW55Rm9ybWF0OiB0cnVlIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gIH1cblxuICBjb25zdCByZWNvdmVyeUZlZVBlckJ5dGUgPSBhd2FpdCBnZXRSZWNvdmVyeUZlZVBlckJ5dGVzKGNvaW4sIHtcbiAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjEsXG4gIH0pO1xuICBjb25zdCB2MXdhbGxldCA9IGF3YWl0IGJpdGdvLndhbGxldHMoKS5nZXQoeyBpZDogcGFyYW1zLndhbGxldElkIH0pO1xuICByZXR1cm4gYXdhaXQgdjF3YWxsZXQucmVjb3Zlcih7XG4gICAgLi4ucGFyYW1zLFxuICAgIGZlZVJhdGU6IHJlY292ZXJ5RmVlUGVyQnl0ZSxcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2MVN3ZWVwKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFYxU3dlZXBQYXJhbXNcbik6IFByb21pc2U8e1xuICB0eDogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xufT4ge1xuICBpZiAoXG4gICAgXy5pc1VuZGVmaW5lZChwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikgfHxcbiAgICAhY29pbi5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiwgeyBhbnlGb3JtYXQ6IHRydWUgfSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJlY292ZXJ5RGVzdGluYXRpb24nKTtcbiAgfVxuXG4gIGxldCByZWNvdmVyeUZlZVBlckJ5dGUgPSAxMDA7XG4gIGlmIChiaXRnby5lbnYgPT09ICdwcm9kJykge1xuICAgIHJlY292ZXJ5RmVlUGVyQnl0ZSA9IGF3YWl0IGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoY29pbiwge1xuICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YxX1NXRUVQLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgdjF3YWxsZXQgPSBhd2FpdCBiaXRnby53YWxsZXRzKCkuZ2V0KHsgaWQ6IHBhcmFtcy53YWxsZXRJZCB9KTtcbiAgcmV0dXJuIGF3YWl0IHYxd2FsbGV0LnN3ZWVwKHtcbiAgICAuLi5wYXJhbXMsXG4gICAgZmVlUmF0ZTogcmVjb3ZlcnlGZWVQZXJCeXRlLFxuICB9KTtcbn1cbiJdfQ==
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBNFJBLGtGQXVDQztBQWtDRCxzRUFxREM7QUFnQ0QsOENBMEhDO0FBcUJELGtEQW9CQztBQUVELDBCQTRCQztBQTNuQkQsb0RBQXVCO0FBQ3ZCLDhDQVF5QjtBQUN6QixnREFBNEQ7QUFHNUQsZ0ZBQStFO0FBQy9FLHdDQUE4RDtBQUM5RCxrREFBMEQ7QUFDMUQsa0ZBQXlGO0FBQ3pGLG9DQUE0RDtBQUM1RCx3Q0FBMkU7QUFFM0UseURBQStEO0FBQy9ELDZDQUEwQztBQUMxQyxpREFBOEM7QUFDOUMsaUNBQXdFO0FBUXhFLDBEQUEwRDtBQUM3QyxRQUFBLHFDQUFxQyxHQUFHLEVBQUUsQ0FBQztBQUV4RCw2SEFBNkg7QUFDaEgsUUFBQSwyQ0FBMkMsR0FBRyxHQUFHLENBQUM7QUFFL0Qsa0ZBQWtGO0FBQ3JFLFFBQUEscUNBQXFDLEdBQUcsRUFBRSxDQUFDO0FBVXhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxLQUFLLFVBQVUsc0JBQXNCLENBQUMsSUFBc0I7SUFDMUQsT0FBTyxNQUFNLElBQUksMkJBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsS0FBSyxVQUFVLGtCQUFrQixDQUFDLElBQXNCLEVBQUUsTUFBNEI7SUFDcEYsTUFBTSxXQUFXLEdBQUcsdUJBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELElBQUksV0FB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ZGFzaCc7XG5pbXBvcnQge1xuICBCaXRHb0Jhc2UsXG4gIEVycm9yTm9JbnB1dFRvUmVjb3ZlcixcbiAgZ2V0S3JzUHJvdmlkZXIsXG4gIGdldEJpcDMyS2V5c0FzeW5jIGFzIGdldEJpcDMyS2V5c0Zyb21TZGtDb3JlLFxuICBpc1RyaXBsZSxcbiAga3JzUHJvdmlkZXJzLFxuICBUcmlwbGUsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCSVAzMiwgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgc2lnbkFuZFZlcmlmeVBzYnQgfSBmcm9tICcuLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZ2VuZXJhdGVBZGRyZXNzV2l0aENoYWluQW5kSW5kZXggfSBmcm9tICcuLi9hZGRyZXNzJztcbmltcG9ydCB7IGVuY29kZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgeyBnZXRNYWlubmV0Q29pbk5hbWUsIFV0eG9Db2luTmFtZSB9IGZyb20gJy4uL25hbWVzJztcbmltcG9ydCB7IHBhcnNlT3V0cHV0SWQsIHVuc3BlbnRTdW0sIHR5cGUgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uL3Vuc3BlbnQnO1xuXG5pbXBvcnQgeyBmb3JDb2luLCBSZWNvdmVyeVByb3ZpZGVyIH0gZnJvbSAnLi9SZWNvdmVyeVByb3ZpZGVyJztcbmltcG9ydCB7IE1lbXBvb2xBcGkgfSBmcm9tICcuL21lbXBvb2xBcGknO1xuaW1wb3J0IHsgQ29pbmdlY2tvQXBpIH0gZnJvbSAnLi9jb2luZ2Vja29BcGknO1xuaW1wb3J0IHsgY3JlYXRlQmFja3VwS2V5UmVjb3ZlcnlQc2J0LCBnZXRSZWNvdmVyeUFtb3VudCB9IGZyb20gJy4vcHNidCc7XG5cbnR5cGUgU2NyaXB0VHlwZTJPZjMgPSBmaXhlZFNjcmlwdFdhbGxldC5PdXRwdXRTY3JpcHRUeXBlO1xudHlwZSBDaGFpbkNvZGUgPSBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGU7XG50eXBlIFdhbGxldFVuc3BlbnRKU09OID0gV2FsbGV0VW5zcGVudCAmIHtcbiAgdmFsdWVTdHJpbmc6IHN0cmluZztcbn07XG5cbi8vIFYxIG9ubHkgZGVhbHMgd2l0aCBCVEMuIDUwIHNhdC92Ynl0ZSBpcyB2ZXJ5IGFyYml0cmFyeS5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFQ09WRVJZX0ZFRVJBVEVfU0FUX1ZCWVRFX1YxID0gNTA7XG5cbi8vIEZJWE1FKEJUQy0yNjkxKTogaXQgaXMgdW5jbGVhciB3aHkgc3dlZXBzIGhhdmUgYSBkaWZmZXJlbnQgZGVmYXVsdCB0aGFuIHJlZ3VsYXIgcmVjb3ZlcnkuIDEwMCBzYXQvdmJ5dGUgaXMgZXh0cmVtZWx5IGhpZ2guXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMV9TV0VFUCA9IDEwMDtcblxuLy8gRklYTUUoQlRDLTI2OTEpOiBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gaGF2ZSBhIHNpbmdsZSBkZWZhdWx0IGZvciBldmVyeSBjb2luLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjIgPSA1MDtcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvIHtcbiAgdHhJbmZvOiB7XG4gICAgdW5zcGVudHM/OiBXYWxsZXRVbnNwZW50SlNPTltdO1xuICB9O1xuICB0eEhleDogc3RyaW5nO1xuICBmZWVJbmZvOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG4gIGNvaW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnQgbWFya2V0IHByaWNlIGZyb20gYSB0aGlyZCBwYXJ0eSB0byBiZSB1c2VkIGZvciByZWNvdmVyeVxuICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGludGVuZGVkIGZvciBub24tYml0Z28gcmVjb3ZlcnkgdHJhbnNhY3Rpb25zLCB3aGVuIGl0IGlzIG5lY2Vzc2FyeVxuICogdG8gY2FsY3VsYXRlIHRoZSByb3VnaCBmZWUgbmVlZGVkIHRvIHBheSB0byBLZXl0ZXJuYWwuIFdlIGFyZSBva2F5IHdpdGggYXBwcm94aW1hdGluZyxcbiAqIGJlY2F1c2UgdGhlIHJlc3VsdGluZyBwcmljZSBvZiB0aGlzIGZ1bmN0aW9uIG9ubHkgaGFzIGxlc3MgdGhhbiAxIGRvbGxhciBpbmZsdWVuY2Ugb24gdGhlXG4gKiBmZWUgdGhhdCBuZWVkcyB0byBiZSBwYWlkIHRvIEtleXRlcm5hbC5cbiAqXG4gKiBTZWUgY2FsY3VsYXRlRmVlQW1vdW50IGZ1bmN0aW9uOiAgcmV0dXJuIE1hdGgucm91bmQoZmVlQW1vdW50VXNkIC8gY3VycmVudFByaWNlICogc2VsZi5nZXRCYXNlRmFjdG9yKCkpO1xuICpcbiAqIFRoaXMgZW5kIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBhcyBhbiBhY2N1cmF0ZSBlbmRwb2ludCwgc2luY2Ugc29tZSBjb2lucycgcHJpY2VzIGFyZSBtaXNzaW5nIGZyb20gdGhlIHByb3ZpZGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFJlY292ZXJ5TWFya2V0UHJpY2UoY29pbjogQWJzdHJhY3RVdHhvQ29pbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIHJldHVybiBhd2FpdCBuZXcgQ29pbmdlY2tvQXBpKCkuZ2V0VVNEUHJpY2UoY29pbi5nZXRGYW1pbHkoKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYW1vdW50IChpbiBiYXNlIHVuaXRzKSB0byBwYXkgYSBLUlMgcHJvdmlkZXIgd2hlbiBidWlsZGluZyBhIHJlY292ZXJ5IHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIHBhcmFtcy5wcm92aWRlciB7U3RyaW5nfSB0aGUgS1JTIHByb3ZpZGVyIHRoYXQgaG9sZHMgdGhlIGJhY2t1cCBrZXlcbiAqIEByZXR1cm5zIHsqfVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVGZWVBbW91bnQoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgcGFyYW1zOiB7IHByb3ZpZGVyOiBzdHJpbmcgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IGtyc1Byb3ZpZGVyID0ga3JzUHJvdmlkZXJzW3BhcmFtcy5wcm92aWRlcl07XG5cbiAgaWYgKGtyc1Byb3ZpZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGZlZSBzdHJ1Y3R1cmUgc3BlY2lmaWVkIGZvciBwcm92aWRlciAke3BhcmFtcy5wcm92aWRlcn1gKTtcbiAgfVxuXG4gIGlmIChrcnNQcm92aWRlci5mZWVUeXBlID09PSAnZmxhdFVzZCcpIHtcbiAgICBjb25zdCBmZWVBbW91bnRVc2QgPSBrcnNQcm92aWRlci5mZWVBbW91bnQ7XG4gICAgY29uc3QgY3VycmVudFByaWNlOiBudW1iZXIgPSBhd2FpdCBnZXRSZWNvdmVyeU1hcmtldFByaWNlKGNvaW4pO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQoKGZlZUFtb3VudFVzZCAvIGN1cnJlbnRQcmljZSkgKiBjb2luLmdldEJhc2VGYWN0b3IoKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gd2UgY2FuIGFkZCBtb3JlIGZlZSBzdHJ1Y3R1cmVzIGhlcmUgYXMgbmVlZGVkIGZvciBkaWZmZXJlbnQgcHJvdmlkZXJzLCBzdWNoIGFzIHBlcmNlbnRhZ2Ugb2YgcmVjb3ZlcnkgYW1vdW50XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGZWUgc3RydWN0dXJlIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlclBhcmFtcyB7XG4gIHNjYW4/OiBudW1iZXI7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIGJpdGdvS2V5OiBzdHJpbmc7XG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG4gIGlnbm9yZUFkZHJlc3NUeXBlczogU2NyaXB0VHlwZTJPZjNbXTtcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICB1c2VyS2V5UGF0aD86IHN0cmluZztcbiAgcmVjb3ZlcnlQcm92aWRlcj86IFJlY292ZXJ5UHJvdmlkZXI7XG4gIC8qKiBTYXRvc2hpIHBlciBieXRlICovXG4gIGZlZVJhdGU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYW4gYWRkcmVzcyBhbmQgZm9ybWF0IGl0IGZvciBBUEkgcXVlcmllc1xuICogQHBhcmFtIGNvaW4gLSBUaGUgY29pbiBpbnN0YW5jZVxuICogQHBhcmFtIGNvaW5OYW1lIC0gVGhlIGNvaW4gbmFtZVxuICogQHBhcmFtIHdhbGxldEtleXMgLSBUaGUgd2FsbGV0IGtleXNcbiAqIEBwYXJhbSBjaGFpbiAtIFRoZSBjaGFpbiBjb2RlXG4gKiBAcGFyYW0gYWRkckluZGV4IC0gVGhlIGFkZHJlc3MgaW5kZXhcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgYWRkcmVzcyAod2l0aCBjYXNoYWRkciBwcmVmaXggc3RyaXBwZWQgZm9yIEJDSC9CQ0hBKVxuICovXG5mdW5jdGlvbiBnZXRGb3JtYXR0ZWRBZGRyZXNzKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgY2hhaW46IENoYWluQ29kZSxcbiAgYWRkckluZGV4OiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IGZvcm1hdCA9IGNvaW4uZ2V0Q2hhaW4oKSA9PT0gJ2JjaCcgfHwgY29pbi5nZXRDaGFpbigpID09PSAnYmNoYScgPyAnY2FzaGFkZHInIDogdW5kZWZpbmVkO1xuICBjb25zdCBhZGRyZXNzID0gZ2VuZXJhdGVBZGRyZXNzV2l0aENoYWluQW5kSW5kZXgoY29pbk5hbWUsIHdhbGxldEtleXMsIGNoYWluLCBhZGRySW5kZXgsIGZvcm1hdCk7XG5cbiAgLy8gQmxvY2tjaGFpciB1c2VzIGNhc2hhZGRyIGZvcm1hdCB3aGVuIHF1ZXJ5aW5nIHRoZSBBUEkgZm9yIGFkZHJlc3MgaW5mb3JtYXRpb24uIFN0cmlwIHRoZSBwcmVmaXggZm9yIEJDSC9CQ0hBLlxuICByZXR1cm4gZm9ybWF0ID09PSAnY2FzaGFkZHInID8gYWRkcmVzcy5zcGxpdCgnOicpWzFdIDogYWRkcmVzcztcbn1cblxuZnVuY3Rpb24gaGFzV2l0bmVzc0RhdGEoc2NyaXB0VHlwZTogU2NyaXB0VHlwZTJPZjMpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNjcmlwdFR5cGUgIT09ICdwMnNoJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcXVlcnlCbG9ja2NoYWluVW5zcGVudHNQYXRoKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwYXJhbXM6IFJlY292ZXJQYXJhbXMsXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlXG4pOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8YmlnaW50PltdPiB7XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUuc2NyaXB0VHlwZShjaGFpbik7XG4gIGNvbnN0IGZldGNoUHJldlR4ID0gIWhhc1dpdG5lc3NEYXRhKHNjcmlwdFR5cGUpICYmIGdldE1haW5uZXRDb2luTmFtZShjb2luLm5hbWUpICE9PSAnemVjJztcbiAgY29uc3QgcmVjb3ZlcnlQcm92aWRlciA9IHBhcmFtcy5yZWNvdmVyeVByb3ZpZGVyID8/IGZvckNvaW4oY29pbi5nZXRDaGFpbigpLCBwYXJhbXMuYXBpS2V5KTtcbiAgY29uc3QgTUFYX1NFUVVFTlRJQUxfQUREUkVTU0VTX1dJVEhPVVRfVFhTID0gcGFyYW1zLnNjYW4gfHwgMjA7XG4gIGxldCBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cyA9IDA7XG4gIGNvbnN0IHByZXZUeENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBhc3luYyBmdW5jdGlvbiBnZXRQcmV2VHgodHhpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgcHJldlR4SGV4ID0gcHJldlR4Q2FjaGUuZ2V0KHR4aWQpO1xuICAgIGlmICghcHJldlR4SGV4KSB7XG4gICAgICBwcmV2VHhIZXggPSBhd2FpdCByZWNvdmVyeVByb3ZpZGVyLmdldFRyYW5zYWN0aW9uSGV4KHR4aWQpO1xuICAgICAgcHJldlR4Q2FjaGUuc2V0KHR4aWQsIHByZXZUeEhleCk7XG4gICAgfVxuICAgIHJldHVybiBwcmV2VHhIZXg7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnYXRoZXJVbnNwZW50cyhhZGRySW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGZvcm1hdHRlZEFkZHJlc3MgPSBnZXRGb3JtYXR0ZWRBZGRyZXNzKGNvaW4sIGNvaW4ubmFtZSwgd2FsbGV0S2V5cywgY2hhaW4sIGFkZHJJbmRleCk7XG4gICAgY29uc3QgYWRkckluZm8gPSBhd2FpdCByZWNvdmVyeVByb3ZpZGVyLmdldEFkZHJlc3NJbmZvKGZvcm1hdHRlZEFkZHJlc3MpO1xuICAgIC8vIHdlIHVzZSB0eENvdW50IGhlcmUgYmVjYXVzZSBpdCBpbXBsaWVzIHVzYWdlIC0gaGF2aW5nIHR4J2VzIG1lYW5zIHRoZSBhZGRyIHdhcyBnZW5lcmF0ZWQgYW5kIHVzZWRcbiAgICBpZiAoYWRkckluZm8udHhDb3VudCA9PT0gMCkge1xuICAgICAgbnVtU2VxdWVudGlhbEFkZHJlc3Nlc1dpdGhvdXRUeHMrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbnVtU2VxdWVudGlhbEFkZHJlc3Nlc1dpdGhvdXRUeHMgPSAwO1xuXG4gICAgICBpZiAoYWRkckluZm8uYmFsYW5jZSA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coYEZvdW5kIGFuIGFkZHJlc3Mgd2l0aCBiYWxhbmNlOiAke2Zvcm1hdHRlZEFkZHJlc3N9IHdpdGggYmFsYW5jZSAke2FkZHJJbmZvLmJhbGFuY2V9YCk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NVbnNwZW50cyA9IGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0VW5zcGVudHNGb3JBZGRyZXNzZXMoW2Zvcm1hdHRlZEFkZHJlc3NdKTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkVW5zcGVudHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBhZGRyZXNzVW5zcGVudHMubWFwKGFzeW5jICh1KTogUHJvbWlzZTxXYWxsZXRVbnNwZW50PGJpZ2ludD4+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHhpZCwgdm91dCB9ID0gcGFyc2VPdXRwdXRJZCh1LmlkKTtcbiAgICAgICAgICAgIGxldCB2YWwgPSBCaWdJbnQodS52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY29pbi5hbW91bnRUeXBlID09PSAnYmlnaW50Jykge1xuICAgICAgICAgICAgICAvLyBibG9ja2NoYWlyIHJldHVybnMgdGhlIG51bWJlciB3aXRoIHRoZSBjb3JyZWN0IHByZWNpc2lvbiwgYnV0IGluIG51bWJlciBmb3JtYXRcbiAgICAgICAgICAgICAgLy8ganNvbiBwYXJzZSB3b24ndCBwYXJzZSBpdCBjb3JyZWN0bHksIHNvIHdlIHJlcXVlcnkgdGhlIHR4aWQgZm9yIHRoZSB0eCBoZXggdG8gZGVjb2RlIGhlcmVcbiAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih1LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgZ2V0UHJldlR4KHR4aWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR4ID0gY29pbi5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXg8YmlnaW50Pih0eEhleCk7XG4gICAgICAgICAgICAgICAgdmFsID0gdHgub3V0c1t2b3V0XS52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhlIGFwaSBtYXkgcmV0dXJuIGNhc2hhZGRyJ3MgaW5zdGVhZCBvZiBsZWdhY3kgZm9yIEJDSCBhbmQgQkNIQVxuICAgICAgICAgICAgLy8gZG93bnN0cmVhbSBwcm9jZXNzZXMncyBvbmx5IGV4cGVjdCBsZWdhY3kgYWRkcmVzc2VzXG4gICAgICAgICAgICB1ID0geyAuLi51LCBhZGRyZXNzOiBjb2luLmNhbm9uaWNhbEFkZHJlc3ModS5hZGRyZXNzKSB9O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4udSxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgICAgICAgICAgY2hhaW46IGNoYWluLFxuICAgICAgICAgICAgICBpbmRleDogYWRkckluZGV4LFxuICAgICAgICAgICAgICBwcmV2VHg6IGZldGNoUHJldlR4ID8gQnVmZmVyLmZyb20oYXdhaXQgZ2V0UHJldlR4KHR4aWQpLCAnaGV4JykgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9IGFzIFdhbGxldFVuc3BlbnQ8YmlnaW50PjtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHdhbGxldFVuc3BlbnRzLnB1c2goLi4ucHJvY2Vzc2VkVW5zcGVudHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cyA+PSBNQVhfU0VRVUVOVElBTF9BRERSRVNTRVNfV0lUSE9VVF9UWFMpIHtcbiAgICAgIC8vIHN0b3Agc2VhcmNoaW5nIGZvciBhZGRyZXNzZXMgd2l0aCB1bnNwZW50cyBpbiB0aGVtLCB3ZSd2ZSBmb3VuZCAke01BWF9TRVFVRU5USUFMX0FERFJFU1NFU19XSVRIT1VUX1RYU30gaW4gYSByb3cgd2l0aCBub25lXG4gICAgICAvLyB3ZSBhcmUgZG9uZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBnYXRoZXJVbnNwZW50cyhhZGRySW5kZXggKyAxKTtcbiAgfVxuXG4gIC8vIGdldCB1bnNwZW50cyBmb3IgdGhlc2UgYWRkcmVzc2VzXG5cbiAgY29uc3Qgd2FsbGV0VW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdID0gW107XG4gIC8vIFRoaXMgd2lsbCBwb3B1bGF0ZSB3YWxsZXRBZGRyZXNzZXNcbiAgYXdhaXQgZ2F0aGVyVW5zcGVudHMoMCk7XG5cbiAgaWYgKHdhbGxldFVuc3BlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIENvdWxkbid0IGZpbmQgYW55IGFkZHJlc3NlcyB3aXRoIGZ1bmRzXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHdhbGxldFVuc3BlbnRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZWNvdmVyeUZlZVBlckJ5dGVzKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB7IGRlZmF1bHRWYWx1ZSB9OiB7IGRlZmF1bHRWYWx1ZTogbnVtYmVyIH1cbik6IFByb21pc2U8bnVtYmVyPiB7XG4gIGlmIChjb2luLmdldEZhbWlseSgpID09PSAnZG9nZScpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZG9nZWNvaW4vZG9nZWNvaW4vYmxvYi9tYXN0ZXIvZG9jL2ZlZS1yZWNvbW1lbmRhdGlvbi5tZFxuICAgIC8vIDAuMDEgRE9HRSBwZXIgS0JcbiAgICByZXR1cm4gMTAwMDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IE1lbXBvb2xBcGkuZm9yQ29pbihjb2luLmdldENoYWluKCkpLmdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZGlyKGUpO1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiA9IHtcbiAgaW5wdXRzPzogV2FsbGV0VW5zcGVudEpTT05bXTtcbiAgdHJhbnNhY3Rpb25IZXg6IHN0cmluZztcbiAgY29pbjogc3RyaW5nO1xuICBiYWNrdXBLZXk6IHN0cmluZztcbiAgcmVjb3ZlcnlBbW91bnQ6IG51bWJlcjtcbiAgcmVjb3ZlcnlBbW91bnRTdHJpbmc6IHN0cmluZztcbn07XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgYmFja3VwIGtleSByZWNvdmVyeSBQU0JUIGNyZWF0aW9uLlxuICogQWxsIGZpZWxkcyBhcmUgcHJlLXZhbGlkYXRlZCBhbmQgZGVyaXZlZCAtIG5vIHN0cmluZyBrZXkgcGFyc2luZyBuZWVkZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlcldpdGhVbnNwZW50c1BhcmFtcyB7XG4gIC8qKiBQcmUtZGVyaXZlZCB3YWxsZXQga2V5cyAqL1xuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cztcbiAgLyoqIFByZS1kZXJpdmVkIGtleSB0cmlwbGUgKHVzZXIsIGJhY2t1cCwgYml0Z28pLiBDaGVjayBwcml2YXRlS2V5IHRvIGRldGVybWluZSBzaWduaW5nIGNhcGFiaWxpdHkuICovXG4gIGtleXM6IFRyaXBsZTxCSVAzMj47XG4gIC8qKiBWYWxpZGF0ZWQgcmVjb3ZlcnkgZGVzdGluYXRpb24gYWRkcmVzcyAqL1xuICByZWNvdmVyeURlc3RpbmF0aW9uOiBzdHJpbmc7XG4gIC8qKiBGZWUgcmF0ZSBpbiBzYXRvc2hpIHBlciB2Ynl0ZSAqL1xuICBmZWVSYXRlU2F0VkI6IG51bWJlcjtcbiAgLyoqIEtSUyBmZWUgYW1vdW50IGluIHNhdG9zaGlzICgwIGlmIG5vdCBLUlMgcmVjb3ZlcnkpICovXG4gIGtyc0ZlZT86IGJpZ2ludDtcbiAgLyoqIEtSUyBmZWUgYWRkcmVzcyAocmVxdWlyZWQgaWYga3JzRmVlID4gMCkgKi9cbiAga3JzRmVlQWRkcmVzcz86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gaGFzUHJpdmF0ZUtleShrZXk6IEJJUDMyKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkucHJpdmF0ZUtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IFBTQlQgd2l0aG91dCBCaXRHbywgdXNpbmcgcHJvdmlkZWQgdW5zcGVudHMuXG4gKlxuICogVGhpcyBpcyB0aGUgY29yZSB0cmFuc2FjdGlvbiBidWlsZGluZyBsb2dpYywgc2VwYXJhdGVkIGZyb20gdW5zcGVudCBnYXRoZXJpbmdcbiAqIGFuZCBvdXRwdXQgZm9ybWF0dGluZy4gUmV0dXJucyBhIFBTQlQgYXQgdGhlIGFwcHJvcHJpYXRlIHNpZ25pbmcgc3RhZ2UuXG4gKlxuICogU2lnbmluZyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBrZXlzOlxuICogLSBJZiB1c2VyIGtleSBoYXMgbm8gcHJpdmF0ZSBrZXk6IHVuc2lnbmVkIFBTQlRcbiAqIC0gSWYgdXNlciBrZXkgaGFzIHByaXZhdGUga2V5IGJ1dCBiYWNrdXAgZG9lc24ndDogaGFsZi1zaWduZWQgUFNCVCAodXNlciBzaWduYXR1cmUgb25seSlcbiAqIC0gSWYgYm90aCB1c2VyIGFuZCBiYWNrdXAga2V5cyBoYXZlIHByaXZhdGUga2V5czogZnVsbHkgc2lnbmVkIFBTQlQgKG5vdCBmaW5hbGl6ZWQpXG4gKlxuICogQHBhcmFtIGNvaW5OYW1lIC0gVGhlIGNvaW4gbmFtZSBmb3IgdGhlIFBTQlRcbiAqIEBwYXJhbSBwYXJhbXMgLSBSZWNvdmVyeSBwYXJhbWV0ZXJzIHdpdGggcHJlLWRlcml2ZWQga2V5c1xuICogQHBhcmFtIHVuc3BlbnRzIC0gVGhlIHdhbGxldCB1bnNwZW50cyB0byByZWNvdmVyIChtdXN0IGJlIG5vbi1lbXB0eSlcbiAqIEByZXR1cm5zIFRoZSBQU0JUIGF0IHRoZSBhcHByb3ByaWF0ZSBzaWduaW5nIHN0YWdlIChuZXZlciBmaW5hbGl6ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgcGFyYW1zOiBSZWNvdmVyV2l0aFVuc3BlbnRzUGFyYW1zLFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W11cbik6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gIGNvbnN0IHsgd2FsbGV0S2V5cywga2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCLCBrcnNGZWUsIGtyc0ZlZUFkZHJlc3MgfSA9IHBhcmFtcztcblxuICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gdW5zcGVudFN1bSh1bnNwZW50cyk7XG4gIGlmICh0b3RhbElucHV0QW1vdW50IDw9IEJpZ0ludCgwKSkge1xuICAgIHRocm93IG5ldyBFcnJvck5vSW5wdXRUb1JlY292ZXIoKTtcbiAgfVxuXG4gIGxldCBwc2J0ID0gY3JlYXRlQmFja3VwS2V5UmVjb3ZlcnlQc2J0KGNvaW5OYW1lLCB3YWxsZXRLZXlzLCB1bnNwZW50cywge1xuICAgIGZlZVJhdGVTYXRWQjogZmVlUmF0ZVNhdFZCLFxuICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAga2V5UmVjb3ZlcnlTZXJ2aWNlRmVlOiBrcnNGZWUgPz8gQmlnSW50KDApLFxuICAgIGtleVJlY292ZXJ5U2VydmljZUZlZUFkZHJlc3M6IGtyc0ZlZUFkZHJlc3MsXG4gIH0pO1xuXG4gIGNvbnN0IHVzZXJIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzBdKTtcbiAgY29uc3QgYmFja3VwSGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1sxXSk7XG5cbiAgaWYgKCF1c2VySGFzUHJpdmF0ZUtleSkge1xuICAgIC8vIFVuc2lnbmVkIHN3ZWVwIC0gcmV0dXJuIHVuc2lnbmVkIFBTQlRcbiAgICByZXR1cm4gcHNidDtcbiAgfVxuXG4gIGNvbnN0IHJlcGxheVByb3RlY3Rpb24gPSB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW5OYW1lKSB9O1xuXG4gIC8vIFNpZ24gd2l0aCB1c2VyIGtleVxuICBwc2J0ID0gc2lnbkFuZFZlcmlmeVBzYnQocHNidCwga2V5c1swXSwgd2FsbGV0S2V5cywgcmVwbGF5UHJvdGVjdGlvbik7XG5cbiAgaWYgKGJhY2t1cEhhc1ByaXZhdGVLZXkpIHtcbiAgICAvLyBGdWxsIHJlY292ZXJ5IC0gc2lnbiB3aXRoIGJhY2t1cCBrZXkgdG9vXG4gICAgcHNidCA9IHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIGtleXNbMV0sIHdhbGxldEtleXMsIHJlcGxheVByb3RlY3Rpb24pO1xuICB9XG5cbiAgLy8gUmV0dXJuIFBTQlQgKG5vdCBmaW5hbGl6ZWQgLSBsZXQgY2FsbGVyIGRlY2lkZSBob3cgdG8gZm9ybWF0KVxuICByZXR1cm4gcHNidDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBmb3JtYXR0aW5nIGEgYmFja3VwIGtleSByZWNvdmVyeSByZXN1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlQYXJhbXMge1xuICAvKiogUHJlLWRlcml2ZWQgd2FsbGV0IGtleXMgKi9cbiAgd2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXM7XG4gIC8qKiBQcmUtZGVyaXZlZCBrZXkgdHJpcGxlICh1c2VyLCBiYWNrdXAsIGJpdGdvKS4gQ2hlY2sgcHJpdmF0ZUtleSB0byBkZXRlcm1pbmUgc2lnbmluZyBjYXBhYmlsaXR5LiAqL1xuICBrZXlzOiBUcmlwbGU8QklQMzI+O1xuICAvKiogUmVjb3ZlcnkgZGVzdGluYXRpb24gYWRkcmVzcyAqL1xuICByZWNvdmVyeURlc3RpbmF0aW9uOiBzdHJpbmc7XG4gIC8qKiBLUlMgcHJvdmlkZXIgbmFtZSAoaWYgYmFja3VwIGtleSBpcyBoZWxkIGJ5IEtSUykgKi9cbiAga3JzUHJvdmlkZXI/OiBzdHJpbmc7XG4gIC8qKiBPcmlnaW5hbCBiYWNrdXAga2V5IHN0cmluZyAobmVlZGVkIGZvciBLUlMgcmVjb3ZlcnkgcmVzcG9uc2UpICovXG4gIGJhY2t1cEtleT86IHN0cmluZztcbiAgLyoqIFRoZSB3YWxsZXQgdW5zcGVudHMgKG5lZWRlZCBmb3IgaW5wdXRzIGFycmF5IGluIHJlc3BvbnNlKSAqL1xuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W107XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIGJhY2t1cCBrZXkgcmVjb3ZlcnkgUFNCVCBpbnRvIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZSBmb3JtYXQuXG4gKlxuICogT3V0cHV0IGZvcm1hdCBkZXBlbmRzIG9uIHNpZ25pbmcgc3RhdGUgYW5kIEtSUyBwcm92aWRlcjpcbiAqIC0gVW5zaWduZWQgc3dlZXA6IEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB3aXRoIFBTQlQgaGV4XG4gKiAtIEtSUyBrZXl0ZXJuYWw6IEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBsZWdhY3kgaGFsZi1zaWduZWQgdHggaGV4XG4gKiAtIEtSUyBvdGhlcjogQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIFBTQlQgaGV4XG4gKiAtIEZ1bGwgcmVjb3Zlcnk6IEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBmaW5hbGl6ZWQgdHggaGV4XG4gKlxuICogQHBhcmFtIGNvaW4gLSBUaGUgY29pbiBpbnN0YW5jZVxuICogQHBhcmFtIHBzYnQgLSBUaGUgUFNCVCB0byBmb3JtYXQgKGF0IGFwcHJvcHJpYXRlIHNpZ25pbmcgc3RhZ2UpXG4gKiBAcGFyYW0gcGFyYW1zIC0gRm9ybWF0dGluZyBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHJlY292ZXJ5IHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCxcbiAgcGFyYW1zOiBGb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVBhcmFtc1xuKTogQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB8IEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB7XG4gIGNvbnN0IHsgd2FsbGV0S2V5cywga2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwga3JzUHJvdmlkZXIsIGJhY2t1cEtleSwgdW5zcGVudHMgfSA9IHBhcmFtcztcblxuICBjb25zdCB1c2VySGFzUHJpdmF0ZUtleSA9IGhhc1ByaXZhdGVLZXkoa2V5c1swXSk7XG4gIGNvbnN0IGJhY2t1cEhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMV0pO1xuXG4gIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9ICF1c2VySGFzUHJpdmF0ZUtleSAmJiAhYmFja3VwSGFzUHJpdmF0ZUtleTtcbiAgY29uc3QgaXNLcnNSZWNvdmVyeSA9IGtyc1Byb3ZpZGVyICE9PSB1bmRlZmluZWQgJiYgdXNlckhhc1ByaXZhdGVLZXkgJiYgIWJhY2t1cEhhc1ByaXZhdGVLZXk7XG4gIGNvbnN0IGlzRnVsbFJlY292ZXJ5ID0gdXNlckhhc1ByaXZhdGVLZXkgJiYgYmFja3VwSGFzUHJpdmF0ZUtleTtcblxuICAvLyBVbnNpZ25lZCBzd2VlcCAtIHJldHVybiBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm9cbiAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eEhleDogZW5jb2RlVHJhbnNhY3Rpb24ocHNidCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIGZlZUluZm86IHt9LFxuICAgICAgY29pbjogY29pbi5nZXRDaGFpbigpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZXNwb25zZVR4Rm9ybWF0ID0gIWlzS3JzUmVjb3ZlcnkgfHwga3JzUHJvdmlkZXIgPT09ICdrZXl0ZXJuYWwnID8gJ2xlZ2FjeScgOiAncHNidCc7XG4gIGNvbnN0IHR4SW5mbyA9IHt9IGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgLy8gSW5jbHVkZSBpbnB1dHMgYXJyYXkgZm9yIGxlZ2FjeSBmb3JtYXQgcmVzcG9uc2VzXG4gIHR4SW5mby5pbnB1dHMgPVxuICAgIHJlc3BvbnNlVHhGb3JtYXQgPT09ICdsZWdhY3knXG4gICAgICA/IHVuc3BlbnRzLm1hcCgodSkgPT4gKHsgLi4udSwgdmFsdWU6IE51bWJlcih1LnZhbHVlKSwgdmFsdWVTdHJpbmc6IHUudmFsdWUudG9TdHJpbmcoKSwgcHJldlR4OiB1bmRlZmluZWQgfSkpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgIC8vIEtSUyByZWNvdmVyeSAtIGhhbGYtc2lnbmVkXG4gICAgLy8ga2V5dGVybmFsIHVzZXMgbGVnYWN5IGZvcm1hdCwgb3RoZXIgS1JTIHByb3ZpZGVycyB1c2UgUFNCVCBmb3JtYXRcbiAgICB0eEluZm8udHJhbnNhY3Rpb25IZXggPVxuICAgICAga3JzUHJvdmlkZXIgPT09ICdrZXl0ZXJuYWwnXG4gICAgICAgID8gQnVmZmVyLmZyb20ocHNidC5nZXRIYWxmU2lnbmVkTGVnYWN5Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICA6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIHR4SW5mby5jb2luID0gY29pbi5nZXRDaGFpbigpO1xuICAgIHR4SW5mby5iYWNrdXBLZXkgPSBiYWNrdXBLZXkgPz8gJyc7XG4gICAgY29uc3QgcmVjb3ZlcnlBbW91bnQgPSBnZXRSZWNvdmVyeUFtb3VudChwc2J0LCB3YWxsZXRLZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICB0eEluZm8ucmVjb3ZlcnlBbW91bnQgPSBOdW1iZXIocmVjb3ZlcnlBbW91bnQpO1xuICAgIHR4SW5mby5yZWNvdmVyeUFtb3VudFN0cmluZyA9IHJlY292ZXJ5QW1vdW50LnRvU3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAoaXNGdWxsUmVjb3ZlcnkpIHtcbiAgICAvLyBGdWxsIHJlY292ZXJ5IC0gZmluYWxpemUgYW5kIGV4dHJhY3QgdHJhbnNhY3Rpb25cbiAgICBwc2J0LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gICAgdHhJbmZvLnRyYW5zYWN0aW9uSGV4ID0gQnVmZmVyLmZyb20ocHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKS50b0J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIHJldHVybiB0eEluZm87XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJpcDMyS2V5cyhiaXRnbzogQml0R29CYXNlLCBwYXJhbXM6IFJlY292ZXJQYXJhbXMpOiBQcm9taXNlPFRyaXBsZTxCSVAzMj4+IHtcbiAgY29uc3Qga2V5cyA9IGF3YWl0IGdldEJpcDMyS2V5c0Zyb21TZGtDb3JlKGJpdGdvLCBwYXJhbXMsIHsgcmVxdWlyZUJpdEdvWHB1YjogdHJ1ZSB9KTtcbiAgaWYgKCFpc1RyaXBsZShrZXlzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQga2V5IHRyaXBsZWApO1xuICB9XG4gIHJldHVybiBrZXlzLm1hcCgoaykgPT4gQklQMzIuZnJvbShrLnRvQmFzZTU4KCkpKSBhcyBUcmlwbGU8QklQMzI+O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R28uXG4gKlxuICogUmV0dXJucyB0cmFuc2FjdGlvbiBoZXggaW4gbGVnYWN5IGZvcm1hdCBmb3IgdW5zaWduZWQgc3dlZXAgdHJhbnNhY3Rpb24sIGhhbGYgc2lnbmVkIGJhY2t1cCByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRoIEtSUyBwcm92aWRlciAob25seSBrZXl0ZXJuYWwpLFxuICogZnVsbHkgc2lnbmVkIGJhY2t1cCByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IGEgS1JTIHByb3ZpZGVyLlxuICpcbiAqIFJldHVybnMgUFNCVCBoZXggZm9yIGhhbGYgc2lnbmVkIGJhY2t1cCByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRoIEtSUyBwcm92aWRlciAoZXhjbHVkaW5nIGtleXRlcm5hbClcbiAqIEZvciBQU0JUIGhleCBjYXNlcywgVW5zcGVudHMgYXJlIG5vdCByZXF1aXJlZCBpbiByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIGJpdGdvXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiAtIHVzZXJLZXk6IFtlbmNyeXB0ZWRdIHhwcnYsIG9yIHhwdWJcbiAqIC0gYmFja3VwS2V5OiBbZW5jcnlwdGVkXSB4cHJ2LCBvciB4cHViIGlmIHRoZSB4cHJ2IGlzIGhlbGQgYnkgYSBLUlMgcHJvdmlkZXJcbiAqIC0gd2FsbGV0UGFzc3BocmFzZTogbmVjZXNzYXJ5IGlmIG9uZSBvZiB0aGUgeHBydnMgaXMgZW5jcnlwdGVkXG4gKiAtIGJpdGdvS2V5OiB4cHViXG4gKiAtIGtyc1Byb3ZpZGVyOiBuZWNlc3NhcnkgaWYgYmFja3VwIGtleSBpcyBoZWxkIGJ5IEtSU1xuICogLSByZWNvdmVyeURlc3RpbmF0aW9uOiB0YXJnZXQgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICogLSBzY2FuOiB0aGUgYW1vdW50IG9mIGNvbnNlY3V0aXZlIGFkZHJlc3NlcyB3aXRob3V0IHVuc3BlbnRzIHRvIHNjYW4gdGhyb3VnaCBiZWZvcmUgc3RvcHBpbmdcbiAqIC0gaWdub3JlQWRkcmVzc1R5cGVzOiAob3B0aW9uYWwpIHNjcmlwdHMgdG8gaWdub3JlXG4gKiAgICAgICAgZm9yIGV4YW1wbGU6IFsncDJzaFAyd3NoJywgJ3Ayd3NoJ10gd2lsbCBwcmV2ZW50IGNvZGUgZnJvbSBjaGVja2luZyBmb3Igd3JhcHBlZC1zZWd3aXQgYW5kIG5hdGl2ZS1zZWd3aXQgY2hhaW5zIG9uIHRoZSBwdWJsaWMgYmxvY2sgZXhwbG9yZXJzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBiYWNrdXBLZXlSZWNvdmVyeShcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBSZWNvdmVyUGFyYW1zXG4pOiBQcm9taXNlPEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gfCBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8+IHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLnVzZXJLZXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgfVxuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy5iYWNrdXBLZXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGJhY2t1cEtleScpO1xuICB9XG5cbiAgaWYgKFxuICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pIHx8XG4gICAgIWNvaW4uaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sIHsgYW55Rm9ybWF0OiB0cnVlIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gIH1cblxuICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zLnNjYW4pICYmICghXy5pc0ludGVnZXIocGFyYW1zLnNjYW4pIHx8IHBhcmFtcy5zY2FuIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjYW4gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuZmVlUmF0ZSAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzRmluaXRlKHBhcmFtcy5mZWVSYXRlKSB8fCBwYXJhbXMuZmVlUmF0ZSA8PSAwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZmVlUmF0ZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIH1cblxuICAvLyBjaGVjayB3aGV0aGVyIGtleSBtYXRlcmlhbCBhbmQgcGFzc3dvcmQgYXV0aGVudGljYXRlIHRoZSB1c2VycyBhbmQgcmV0dXJuIHBhcmVudCBrZXlzIG9mIGFsbCB0aHJlZSBrZXlzIG9mIHRoZSB3YWxsZXRcbiAgY29uc3Qga2V5cyA9IGF3YWl0IGdldEJpcDMyS2V5cyhiaXRnbywgcGFyYW1zKTtcbiAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oe1xuICAgIHRyaXBsZToga2V5cyxcbiAgICBkZXJpdmF0aW9uUHJlZml4ZXM6IFtwYXJhbXMudXNlcktleVBhdGggfHwgJ20vMC8wJywgJ20vMC8wJywgJ20vMC8wJ10sXG4gIH0pO1xuXG4gIGNvbnN0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpeGVkU2NyaXB0V2FsbGV0Lm91dHB1dFNjcmlwdFR5cGVzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGFkZHJlc3NUeXBlKSA9PlxuICAgICAgICAgICAgZml4ZWRTY3JpcHRXYWxsZXQuc3VwcG9ydHNTY3JpcHRUeXBlKGNvaW4ubmFtZSwgYWRkcmVzc1R5cGUpICYmXG4gICAgICAgICAgICAhcGFyYW1zLmlnbm9yZUFkZHJlc3NUeXBlcz8uaW5jbHVkZXMoYWRkcmVzc1R5cGUpXG4gICAgICAgIClcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAocXVlcmllcywgYWRkcmVzc1R5cGUpID0+IFtcbiAgICAgICAgICAgIC4uLnF1ZXJpZXMsXG4gICAgICAgICAgICBxdWVyeUJsb2NrY2hhaW5VbnNwZW50c1BhdGgoXG4gICAgICAgICAgICAgIGNvaW4sXG4gICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgd2FsbGV0S2V5cyxcbiAgICAgICAgICAgICAgZml4ZWRTY3JpcHRXYWxsZXQuQ2hhaW5Db2RlLnZhbHVlKGFkZHJlc3NUeXBlLCAnZXh0ZXJuYWwnKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHF1ZXJ5QmxvY2tjaGFpblVuc3BlbnRzUGF0aChcbiAgICAgICAgICAgICAgY29pbixcbiAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICB3YWxsZXRLZXlzLFxuICAgICAgICAgICAgICBmaXhlZFNjcmlwdFdhbGxldC5DaGFpbkNvZGUudmFsdWUoYWRkcmVzc1R5cGUsICdpbnRlcm5hbCcpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgW10gYXMgUHJvbWlzZTxXYWxsZXRVbnNwZW50PGJpZ2ludD5bXT5bXVxuICAgICAgICApXG4gICAgKVxuICApLmZsYXQoKTtcblxuICBjb25zdCBmZWVSYXRlU2F0VkIgPVxuICAgIHBhcmFtcy5mZWVSYXRlICE9PSB1bmRlZmluZWRcbiAgICAgID8gcGFyYW1zLmZlZVJhdGVcbiAgICAgIDogYXdhaXQgZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhjb2luLCB7IGRlZmF1bHRWYWx1ZTogREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMiB9KTtcblxuICAvLyBDYWxjdWxhdGUgS1JTIGZlZSBpZiBuZWVkZWRcbiAgY29uc3QgdXNlckhhc1ByaXZhdGVLZXkgPSBoYXNQcml2YXRlS2V5KGtleXNbMF0pO1xuICBjb25zdCBiYWNrdXBIYXNQcml2YXRlS2V5ID0gaGFzUHJpdmF0ZUtleShrZXlzWzFdKTtcbiAgY29uc3QgaXNLcnNSZWNvdmVyeSA9IHBhcmFtcy5rcnNQcm92aWRlciAhPT0gdW5kZWZpbmVkICYmIHVzZXJIYXNQcml2YXRlS2V5ICYmICFiYWNrdXBIYXNQcml2YXRlS2V5O1xuXG4gIGxldCBrcnNGZWUgPSBCaWdJbnQoMCk7XG4gIGxldCBrcnNGZWVBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKGlzS3JzUmVjb3ZlcnkgJiYgcGFyYW1zLmtyc1Byb3ZpZGVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGtyc0ZlZSA9IEJpZ0ludChhd2FpdCBjYWxjdWxhdGVGZWVBbW91bnQoY29pbiwgeyBwcm92aWRlcjogcGFyYW1zLmtyc1Byb3ZpZGVyIH0pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIERvbid0IGxldCB0aGlzIGVycm9yIGJsb2NrIHRoZSByZWNvdmVyeSAtXG4gICAgICBjb25zb2xlLmRpcihlcnIpO1xuICAgIH1cblxuICAgIGlmIChrcnNGZWUgPiBCaWdJbnQoMCkpIHtcbiAgICAgIGNvbnN0IGtyc1Byb3ZpZGVyQ29uZmlnID0gZ2V0S3JzUHJvdmlkZXIoY29pbiwgcGFyYW1zLmtyc1Byb3ZpZGVyKTtcbiAgICAgIGlmICgha3JzUHJvdmlkZXJDb25maWcuZmVlQWRkcmVzc2VzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5UHJvdmlkZXIgbXVzdCBkZWZpbmUgZmVlQWRkcmVzc2VzYCk7XG4gICAgICB9XG5cbiAgICAgIGtyc0ZlZUFkZHJlc3MgPSBrcnNQcm92aWRlckNvbmZpZy5mZWVBZGRyZXNzZXNbY29pbi5nZXRDaGFpbigpXTtcblxuICAgICAgaWYgKCFrcnNGZWVBZGRyZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBLUlMgcHJvdmlkZXIgaGFzIG5vdCBjb25maWd1cmVkIHRoZWlyIGZlZSBzdHJ1Y3R1cmUgeWV0IC0gcmVjb3ZlcnkgY2Fubm90IGJlIGNvbXBsZXRlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEJ1aWxkIGFuZCBzaWduIFBTQlRcbiAgY29uc3QgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgIGNvaW4ubmFtZSxcbiAgICB7XG4gICAgICB3YWxsZXRLZXlzLFxuICAgICAga2V5cyxcbiAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgZmVlUmF0ZVNhdFZCLFxuICAgICAga3JzRmVlLFxuICAgICAga3JzRmVlQWRkcmVzcyxcbiAgICB9LFxuICAgIHVuc3BlbnRzXG4gICk7XG5cbiAgLy8gRm9ybWF0IHRoZSByZXN1bHRcbiAgcmV0dXJuIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIHBzYnQsIHtcbiAgICB3YWxsZXRLZXlzLFxuICAgIGtleXMsXG4gICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAga3JzUHJvdmlkZXI6IHBhcmFtcy5rcnNQcm92aWRlcixcbiAgICBiYWNrdXBLZXk6IHBhcmFtcy5iYWNrdXBLZXksXG4gICAgdW5zcGVudHMsXG4gIH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpdEdvVjFVbnNwZW50IHtcbiAgdHhfaGFzaDogc3RyaW5nO1xuICB0eF9vdXRwdXRfbjogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFYxU3dlZXBQYXJhbXMge1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIHVuc3BlbnRzOiBCaXRHb1YxVW5zcGVudFtdO1xuICByZWNvdmVyeURlc3RpbmF0aW9uOiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgb3RwOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVjFSZWNvdmVyUGFyYW1zIGV4dGVuZHMgT21pdDxWMVN3ZWVwUGFyYW1zLCAnb3RwJz4ge1xuICBiYWNrdXBLZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHYxQmFja3VwS2V5UmVjb3ZlcnkoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogVjFSZWNvdmVyUGFyYW1zXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoXG4gICAgXy5pc1VuZGVmaW5lZChwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikgfHxcbiAgICAhY29pbi5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiwgeyBhbnlGb3JtYXQ6IHRydWUgfSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJlY292ZXJ5RGVzdGluYXRpb24nKTtcbiAgfVxuXG4gIGNvbnN0IHJlY292ZXJ5RmVlUGVyQnl0ZSA9IGF3YWl0IGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoY29pbiwge1xuICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9SRUNPVkVSWV9GRUVSQVRFX1NBVF9WQllURV9WMSxcbiAgfSk7XG4gIGNvbnN0IHYxd2FsbGV0ID0gYXdhaXQgYml0Z28ud2FsbGV0cygpLmdldCh7IGlkOiBwYXJhbXMud2FsbGV0SWQgfSk7XG4gIHJldHVybiBhd2FpdCB2MXdhbGxldC5yZWNvdmVyKHtcbiAgICAuLi5wYXJhbXMsXG4gICAgZmVlUmF0ZTogcmVjb3ZlcnlGZWVQZXJCeXRlLFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHYxU3dlZXAoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogVjFTd2VlcFBhcmFtc1xuKTogUHJvbWlzZTx7XG4gIHR4OiBzdHJpbmc7XG4gIGhhc2g6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG59PiB7XG4gIGlmIChcbiAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSB8fFxuICAgICFjb2luLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCB7IGFueUZvcm1hdDogdHJ1ZSB9KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICB9XG5cbiAgbGV0IHJlY292ZXJ5RmVlUGVyQnl0ZSA9IDEwMDtcbiAgaWYgKGJpdGdvLmVudiA9PT0gJ3Byb2QnKSB7XG4gICAgcmVjb3ZlcnlGZWVQZXJCeXRlID0gYXdhaXQgZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhjb2luLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfUkVDT1ZFUllfRkVFUkFURV9TQVRfVkJZVEVfVjFfU1dFRVAsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB2MXdhbGxldCA9IGF3YWl0IGJpdGdvLndhbGxldHMoKS5nZXQoeyBpZDogcGFyYW1zLndhbGxldElkIH0pO1xuICByZXR1cm4gYXdhaXQgdjF3YWxsZXQuc3dlZXAoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBmZWVSYXRlOiByZWNvdmVyeUZlZVBlckJ5dGUsXG4gIH0pO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"crossChainRecovery.d.ts","sourceRoot":"","sources":["../../../../src/recovery/crossChainRecovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crossChainRecovery.d.ts","sourceRoot":"","sources":["../../../../src/recovery/crossChainRecovery.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@ exports.isWalletAddress = isWalletAddress;
6
6
  exports.convertLtcAddressToLegacyFormat = convertLtcAddressToLegacyFormat;
7
7
  exports.recoverCrossChain = recoverCrossChain;
8
8
  const wasm_utxo_1 = require("@bitgo/wasm-utxo");
9
- const sdk_core_1 = require("@bitgo/sdk-core");
10
9
  const sdk_api_1 = require("@bitgo/sdk-api");
10
+ const sdk_core_1 = require("@bitgo/sdk-core");
11
11
  const signTransaction_1 = require("../transaction/fixedScript/signTransaction");
12
12
  const decode_1 = require("../transaction/decode");
13
13
  const replayProtection_1 = require("../transaction/fixedScript/replayProtection");
@@ -229,7 +229,7 @@ async function getPrv(xprv, passphrase, wallet) {
229
229
  else {
230
230
  encryptedPrv = (await wallet.getEncryptedUserKeychain()).encryptedXprv;
231
231
  }
232
- return getPrv((0, sdk_api_1.decrypt)(passphrase, encryptedPrv));
232
+ return getPrv(await (0, sdk_api_1.decryptAsync)(passphrase, encryptedPrv));
233
233
  }
234
234
  /**
235
235
  * Create a sweep transaction for cross-chain recovery using wasm-utxo
@@ -296,4 +296,4 @@ async function recoverCrossChain(bitgo, params) {
296
296
  recoveryAmount: (0, tnumber_1.toTNumber)((0, psbt_1.getRecoveryAmount)(psbt, walletKeys, params.recoveryAddress), params.sourceCoin.amountType),
297
297
  };
298
298
  }
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFEQSw4QkFvQkM7QUFPRCxzQ0FpQkM7QUFFRCwwQ0FhQztBQVlELDBFQWNDO0FBb1BELDhDQXFEQztBQW5iRCxnREFBOEY7QUFDOUYsOENBQStFO0FBQy9FLDRDQUF5QztBQUd6QyxnRkFBK0U7QUFFL0Usa0RBQTBEO0FBQzFELGtGQUF5RjtBQUN6Rix3Q0FBdUM7QUFDdkMsd0NBQTBFO0FBRTFFLGlDQUFnSDtBQXlDekcsS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBZ0IsRUFDaEIsSUFBc0IsRUFDdEIsUUFBZ0I7SUFFaEIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLCtDQUErQztRQUMvQyxrSkFBa0o7UUFDbEosSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsUUFBUSxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsYUFBYSxD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b250ZW50IjpbImltcG9ydCB7IEJJUDMyLCBDb2luTmFtZSwgZml4ZWRTY3JpcHRXYWxsZXQsIGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IEJpdEdvQmFzZSwgSVdhbGxldCwgS2V5Y2hhaW4sIFRyaXBsZSwgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGRlY3J5cHQgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFRyYW5zYWN0aW9uSW5mbyB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgc2lnbkFuZFZlcmlmeVBzYnQgfSBmcm9tICcuLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vbmFtZXMnO1xuaW1wb3J0IHsgZW5jb2RlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi9kZWNvZGUnO1xuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcbmltcG9ydCB7IHRvVE51bWJlciB9IGZyb20gJy4uL3RudW1iZXInO1xuaW1wb3J0IHsgdW5zcGVudFN1bSwgdHlwZSBVbnNwZW50LCB0eXBlIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi91bnNwZW50JztcblxuaW1wb3J0IHsgY3JlYXRlRW1wdHlXYXNtUHNidCwgYWRkV2FsbGV0SW5wdXRzVG9XYXNtUHNidCwgYWRkT3V0cHV0VG9XYXNtUHNidCwgZ2V0UmVjb3ZlcnlBbW91bnQgfSBmcm9tICcuL3BzYnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkUmVjb3ZlcnlUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB3YWxsZXQ6IHN0cmluZztcbiAgZmF1bHR5VHhJZDogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M6IHN0cmluZztcbn1cblxudHlwZSBGZWVJbmZvID0ge1xuICBzaXplOiBudW1iZXI7XG4gIGZlZVJhdGU6IG51bWJlcjtcbiAgZmVlOiBudW1iZXI7XG4gIHBheUdvRmVlOiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICBmZWVJbmZvPzogRmVlSW5mbztcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgdmVyc2lvbjogMSB8IDI7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgc291cmNlQ29pbjogc3RyaW5nO1xuICByZWNvdmVyeUNvaW46IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzPzogc3RyaW5nO1xuICByZWNvdmVyeUFtb3VudD86IFROdW1iZXI7XG59XG5cbnR5cGUgV2FsbGV0VjEgPSB7XG4gIGtleWNoYWluczogeyB4cHViOiBzdHJpbmcgfVtdO1xuICBhZGRyZXNzKHsgYWRkcmVzcyB9OiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTx7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfT47XG4gIGdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpOiBQcm9taXNlPHsgZW5jcnlwdGVkWHBydjogc3RyaW5nIH0+O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdhbGxldChcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgd2FsbGV0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxJV2FsbGV0IHwgV2FsbGV0VjE+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgY29pbi53YWxsZXRzKCkuZ2V0KHsgaWQ6IHdhbGxldElkIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVE9ETzogQkctNDYzNjQgaGFuZGxlIGVycm9ycyBtb3JlIGdyYWNlZnVsbHlcbiAgICAvLyBUaGUgdjIgZW5kcG9pbnQgY29pbi53YWxsZXRzKCkuZ2V0KCkgbWF5IHRocm93IDQwNCBvciA0MDAgZXJyb3JzLCBidXQgdGhpcyBzaG91bGQgbm90IHByZXZlbnQgdXMgZnJvbSBzZWFyY2hpbmcgZm9yIHRoZSB3YWxsZXRJZCBpbiB2MSB3YWxsZXRzLlxuICAgIGlmIChlLnN0YXR1cyA+PSA1MDApIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgYml0Z28ud2FsbGV0cygpLmdldCh7IGlkOiB3YWxsZXRJZCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IGdldCB3YWxsZXQgJHt3YWxsZXRJZH0gZnJvbSB2MSBvciB2MjogJHtlLnRvU3RyaW5nKCl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjb3ZlcnlDb2luXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcmV0dXJuIHdhbGxldCBwdWJrZXlzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXYWxsZXRLZXlzKFxuICByZWNvdmVyeUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxXG4pOiBQcm9taXNlPGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzPiB7XG4gIGxldCB4cHViczogVHJpcGxlPHN0cmluZz47XG5cbiAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IChhd2FpdCByZWNvdmVyeUNvaW4ua2V5Y2hhaW5zKCkuZ2V0S2V5c0ZvclNpZ25pbmcoeyB3YWxsZXQgfSkpIGFzIHVua25vd24gYXMgS2V5Y2hhaW5bXTtcbiAgICBpZiAoa2V5Y2hhaW5zLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCB0cmlwbGUgZ290ICR7a2V5Y2hhaW5zLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgeHB1YnMgPSBrZXljaGFpbnMubWFwKChrKSA9PiBrLnB1YikgYXMgVHJpcGxlPHN0cmluZz47XG4gIH0gZWxzZSB7XG4gICAgeHB1YnMgPSAod2FsbGV0IGFzIFdhbGxldFYxKS5rZXljaGFpbnMubWFwKChrKSA9PiBrLnhwdWIpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICB9XG5cbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNXYWxsZXRBZGRyZXNzKHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxLCBhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBsZXQgYWRkcmVzc0RhdGE7XG4gICAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgICAgYWRkcmVzc0RhdGEgPSBhd2FpdCB3YWxsZXQuZ2V0QWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgKHdhbGxldCBhcyBXYWxsZXRWMSkuYWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZHJlc3NEYXRhICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgTGl0ZWNvaW4gUDJTSCBhZGRyZXNzIGZyb20gTS4uLiBmb3JtYXQgKHNjcmlwdEhhc2ggMHgzMikgdG8gdGhlIGxlZ2FjeSAzLi4uIGZvcm1hdCAoc2NyaXB0SGFzaCAweDA1KVxuICogYW5kIFEuLi4gZm9ybWF0IChzY3JpcHRIYXNoIDB4MzIpIHRvIHRoZSBsZWdhY3kgMi4uLiBmb3JtYXQgKHNjcmlwdEhhc2ggMHgwNSkuXG4gKiBUaGlzIGlzIG5lZWRlZCBmb3IgY3Jvc3MtY2hhaW4gcmVjb3Zlcnkgd2hlbiAoVClMVEMgd2FzIHNlbnQgdG8gYSAoVClCVEMgYWRkcmVzcywgYmVjYXVzZSB0aGUgKFQpQlRDIHdhbGxldFxuICogc3RvcmVzIGFkZHJlc3NlcyBpbiB0aGUgMy4uLiBmb3JtYXQgd2hpbGUgdGhlIExUQyBibG9ja2NoYWluIHJldHVybnMgYWRkcmVzc2VzIGluIE0uLi4gZm9ybWF0LlxuICpcbiAqIEBwYXJhbSBhZGRyZXNzIC0gTFRDIGFkZHJlc3MgdG8gY29udmVydFxuICogQHBhcmFtIGNvaW5OYW1lIC0gVGhlIGNvaW4gbmFtZSAoZS5nLiAnbHRjJywgJ3RsdGMnKVxuICogQHJldHVybnMgVGhlIGFkZHJlc3MgaW4gbGVnYWN5IDMuLi4gZm9ybWF0LCBvciB0aGUgb3JpZ2luYWwgYWRkcmVzcyBpZiBpdCdzIG5vdCBhIFAyU0ggYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChhZGRyZXNzOiBzdHJpbmcsIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBzdHJpbmcge1xuICBpZiAoY29pbk5hbWUgIT09ICdsdGMnICYmIGNvaW5OYW1lICE9PSAndGx0YycpIHtcbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuXG4gIC8vIG9ubHkgY29uc2lkZXIgYWRkcmVzc2VzIHRoYXQgc3RhcnQgd2l0aCBNIG9yIFEgKG1vZGVybiBsdGMgcDJzaCBwcmVmaXhlcylcbiAgaWYgKCFhZGRyZXNzLnN0YXJ0c1dpdGgoJ00nKSAmJiAhYWRkcmVzcy5zdGFydHNXaXRoKCdRJykpIHtcbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdFB1YktleSA9IHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4oYWRkcmVzcywgY29pbk5hbWUpO1xuICBjb25zdCBkc3RDb2luID0gY29pbk5hbWUgPT09ICdsdGMnID8gJ2J0YycgOiAndGJ0Yyc7XG4gIGNvbnN0IGRzdEFkZHJlc3MgPSB3YXNtQWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0V2l0aENvaW4oc2NyaXB0UHViS2V5LCBkc3RDb2luKTtcbiAgcmV0dXJuIGRzdEFkZHJlc3M7XG59XG5cbi8qKlxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSB0eGlkXG4gKiBAcGFyYW0gYW1vdW50VHlwZVxuICogQHBhcmFtIHdhbGxldFxuICogQHBhcmFtIGFwaUtleSAtIGEgYmxvY2tjaGFpciBhcGkga2V5XG4gKiBAcmV0dXJuIGFsbCB1bnNwZW50cyBmb3IgdHJhbnNhY3Rpb24gb3V0cHV0cywgaW5jbHVkaW5nIG91dHB1dHMgZnJvbSBvdGhlciB0cmFuc2FjdGlvbnNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QWxsUmVjb3ZlcnlPdXRwdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB0eGlkOiBzdHJpbmcsXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJyxcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjEsXG4gIGFwaUtleT86IHN0cmluZ1xuKTogUHJvbWlzZTxVbnNwZW50PFROdW1iZXI+W10+IHtcbiAgY29uc3QgYXBpID0gY29pbi5nZXRSZWNvdmVyeVByb3ZpZGVyKGFwaUtleSk7XG4gIGNvbnN0IHR4ID0gYXdhaXQgYXBpLmdldFRyYW5zYWN0aW9uSU8odHhpZCk7XG4gIGNvbnN0IHdhbGxldEFkZHJlc3NlcyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHR4Lm91dHB1dHMubWFwKGFzeW5jIChvdXRwdXQpID0+IHtcbiAgICAgICAgLy8gRm9yIHNvbWUgY29pbnMgKGJjaCkgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBhZGRyZXNzIHRvIGxlZ2FjeSBmb3JtYXQgc2luY2UgdGhlIGFwaSByZXR1cm5zIHRoZSBhZGRyZXNzXG4gICAgICAgIC8vIGluIG5vbiBsZWdhY3kgZm9ybWF0LiBIb3dldmVyLCB3ZSB3YW50IHRvIGtlZXAgdGhlIGFkZHJlc3MgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSByZXNwb25zZSBzaW5jZSB3ZVxuICAgICAgICAvLyBhcmUgZ29pbmcgdG8gaGl0IHRoZSBBUEkgYWdhaW4gdG8gZmV0Y2ggYWRkcmVzcyB1bnNwZW50cy5cbiAgICAgICAgY29uc3QgY2Fub25pY2FsQWRkcmVzcyA9IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhvdXRwdXQuYWRkcmVzcyk7XG4gICAgICAgIGxldCBpc1dhbGxldE93bmVkID0gYXdhaXQgaXNXYWxsZXRBZGRyZXNzKHdhbGxldCwgY2Fub25pY2FsQWRkcmVzcyk7XG5cbiAgICAgICAgLy8gRm9yIExUQyBjcm9zcy1jaGFpbiByZWNvdmVyeTogaWYgdGhlIGFkZHJlc3MgaXNuJ3QgZm91bmQsIHRyeSB0aGUgbGVnYWN5IGZvcm1hdC5cbiAgICAgICAgLy8gV2hlbiBMVEMgaXMgc2VudCB0byBhIEJUQyBhZGRyZXNzLCB0aGUgTFRDIGJsb2NrY2hhaW4gcmV0dXJucyBNLi4uIGFkZHJlc3Nlc1xuICAgICAgICAvLyBidXQgdGhlIEJUQyB3YWxsZXQgc3RvcmVzIGFkZHJlc3NlcyBpbiAzLi4uIGZvcm1hdC5cbiAgICAgICAgaWYgKCFpc1dhbGxldE93bmVkICYmIGNvaW4uZ2V0RmFtaWx5KCkgPT09ICdsdGMnKSB7XG4gICAgICAgICAgY29uc3QgbGVnYWN5QWRkcmVzcyA9IGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQob3V0cHV0LmFkZHJlc3MsIGNvaW4ubmFtZSk7XG4gICAgICAgICAgaWYgKGxlZ2FjeUFkZHJlc3MgIT09IG91dHB1dC5hZGRyZXNzKSB7XG4gICAgICAgICAgICBpc1dhbGxldE93bmVkID0gYXdhaXQgaXNXYWxsZXRBZGRyZXNzKHdhbGxldCwgbGVnYWN5QWRkcmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzV2FsbGV0T3duZWQgPyBvdXRwdXQuYWRkcmVzcyA6IG51bGw7XG4gICAgICB9KVxuICAgIClcbiAgKS5maWx0ZXIoKGFkZHJlc3MpID0+IGFkZHJlc3MgIT09IG51bGwpO1xuXG4gIGNvbnN0IHVuc3BlbnRzID0gYXdhaXQgYXBpLmdldFVuc3BlbnRzRm9yQWRkcmVzc2VzKHdhbGxldEFkZHJlc3NlcyBhcyBzdHJpbmdbXSk7XG4gIGlmICh1bnNwZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlY292ZXJ5IHVuc3BlbnRzIGZvdW5kLmApO1xuICB9XG4gIC8vIHRoZSBhcGkgbWF5IHJldHVybiBjYXNoYWRkcidzIGluc3RlYWQgb2YgbGVnYWN5IGZvciBCQ0ggYW5kIEJDSEFcbiAgLy8gZG93bnN0cmVhbSBwcm9jZXNzZXMncyBvbmx5IGV4cGVjdCBsZWdhY3kgYWRkcmVzc2VzXG4gIHJldHVybiB1bnNwZW50cy5tYXAoKHJlY292ZXJ5T3V0cHV0KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlY292ZXJ5T3V0cHV0LFxuICAgICAgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKHJlY292ZXJ5T3V0cHV0LmFkZHJlc3MpLFxuICAgICAgdmFsdWU6IHRvVE51bWJlcihCaWdJbnQocmVjb3ZlcnlPdXRwdXQudmFsdWUpLCBhbW91bnRUeXBlKSBhcyBUTnVtYmVyLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIERhdGEgcmVxdWlyZWQgZm9yIGFkZHJlc3MgYW5kIHNpZ25hdHVyZSBkZXJpdmF0aW9uXG4gKi9cbnR5cGUgU2NyaXB0SWQgPSB7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRTY3JpcHRJZChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSwgc2NyaXB0OiBVaW50OEFycmF5KTogUHJvbWlzZTxTY3JpcHRJZD4ge1xuICBjb25zdCBhZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdCwgY29pbi5uYW1lKTtcbiAgbGV0IGFkZHJlc3NEYXRhOiB7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfTtcbiAgaWYgKHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCkge1xuICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgd2FsbGV0LmdldEFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICB9IGVsc2Uge1xuICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgKHdhbGxldCBhcyBXYWxsZXRWMSkuYWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBhZGRyZXNzRGF0YS5jaGFpbiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGFkZHJlc3NEYXRhLmluZGV4ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB7IGNoYWluOiBhZGRyZXNzRGF0YS5jaGFpbiwgaW5kZXg6IGFkZHJlc3NEYXRhLmluZGV4IH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYWRkcmVzcyBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGFkZHJlc3NEYXRhKX1gKTtcbn1cblxuLyoqXG4gKiBMb29rdXAgYWRkcmVzcyBkYXRhIGZyb20gdW5zcGVudHMgb24gc291cmNlQ29pbiBpbiBhZGRyZXNzIGRhdGFiYXNlIG9mIHJlY292ZXJ5Q29pbi5cbiAqIFJldHVybiBmdWxsIHdhbGxldFVuc3BlbnRzIGluY2x1ZGluZyBzY3JpcHRJZCBpbiBzb3VyY2VDb2luIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gc291cmNlQ29pblxuICogQHBhcmFtIHJlY292ZXJ5Q29pblxuICogQHBhcmFtIHVuc3BlbnRzXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcmV0dXJuIHdhbGxldFVuc3BlbnRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvV2FsbGV0VW5zcGVudHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjFcbik6IFByb21pc2U8V2FsbGV0VW5zcGVudDxUTnVtYmVyPltdPiB7XG4gIGNvbnN0IGFkZHJlc3NlcyA9IG5ldyBTZXQodW5zcGVudHMubWFwKCh1KSA9PiB1LmFkZHJlc3MpKTtcbiAgY29uc3Qgd2FsbGV0VW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYWRkcmVzcyBvZiBhZGRyZXNzZXMpIHtcbiAgICBsZXQgc2NyaXB0SWQ7XG4gICAgdHJ5IHtcbiAgICAgIHNjcmlwdElkID0gYXdhaXQgZ2V0U2NyaXB0SWQocmVjb3ZlcnlDb2luLCB3YWxsZXQsIHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4oYWRkcmVzcywgc291cmNlQ29pbi5uYW1lKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgZXJyb3IgZ2V0dGluZyBzY3JpcHRJZCBmb3IgJHthZGRyZXNzfTpgLCBlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJlZFVuc3BlbnRzID0gdW5zcGVudHNcbiAgICAgIC5maWx0ZXIoKHUpID0+IHUuYWRkcmVzcyA9PT0gYWRkcmVzcylcbiAgICAgIC5tYXAoKHUpID0+ICh7XG4gICAgICAgIC4uLnUsXG4gICAgICAgIC4uLnNjcmlwdElkLFxuICAgICAgfSkpO1xuICAgIHdhbGxldFVuc3BlbnRzLnB1c2goLi4uZmlsdGVyZWRVbnNwZW50cyk7XG4gIH1cblxuICByZXR1cm4gd2FsbGV0VW5zcGVudHM7XG59XG5cbi8qKlxuICogQHBhcmFtIGNvaW5cbiAqIEByZXR1cm4gZmVlUmF0ZSBmb3IgdHJhbnNhY3Rpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RmVlUmF0ZVNhdFZCKGNvaW46IEFic3RyYWN0VXR4b0NvaW4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAvLyBUT0RPOiB1c2UgZmVlUmF0ZSBBUElcbiAgY29uc3QgZmVlUmF0ZSA9IHtcbiAgICBiY2g6IDIwLFxuICAgIHRiY2g6IDIwLFxuICAgIGJjaGE6IDIwLFxuICAgIHRiY2hhOiAyMCxcbiAgICBic3Y6IDIwLFxuICAgIHRic3Y6IDIwLFxuICAgIGJ0YzogODAsXG4gICAgdGJ0YzogODAsXG4gICAgdGJ0Y3NpZzogODAsXG4gICAgdGJ0YzQ6IDgwLFxuICAgIHRidGNiZ3NpZzogODAsXG4gICAgbHRjOiAxMDAsXG4gICAgdGx0YzogMTAwLFxuICAgIGRvZ2U6IDEwMDAsXG4gICAgdGRvZ2U6IDEwMDAsXG4gIH1bY29pbi5nZXRDaGFpbigpXTtcblxuICBpZiAoIWZlZVJhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGZlZVJhdGUgZm9yICR7Y29pbi5nZXRDaGFpbigpfWApO1xuICB9XG5cbiAgcmV0dXJuIGZlZVJhdGU7XG59XG5cbi8qKlxuICogQHBhcmFtIHhwcnZcbiAqIEBwYXJhbSBwYXNzcGhyYXNlXG4gKiBAcGFyYW0gd2FsbGV0XG4gKiBAcmV0dXJuIHNpZ25pbmcga2V5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBydih4cHJ2Pzogc3RyaW5nLCBwYXNzcGhyYXNlPzogc3RyaW5nLCB3YWxsZXQ/OiBJV2FsbGV0IHwgV2FsbGV0VjEpOiBQcm9taXNlPEJJUDMyPiB7XG4gIGlmICh4cHJ2KSB7XG4gICAgY29uc3Qga2V5ID0gQklQMzIuZnJvbUJhc2U1OCh4cHJ2KTtcbiAgICBpZiAoa2V5LmlzTmV1dGVyZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3QgYSBwcml2YXRlIGtleWApO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgaWYgKCF3YWxsZXQgfHwgIXBhc3NwaHJhc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHhwcnYgZ2l2ZW46IG5lZWQgd2FsbGV0IGFuZCBwYXNzcGhyYXNlIHRvIGNvbnRpbnVlYCk7XG4gIH1cblxuICBsZXQgZW5jcnlwdGVkUHJ2OiBzdHJpbmc7XG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBlbmNyeXB0ZWRQcnYgPSAoYXdhaXQgd2FsbGV0LmdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpKS5lbmNyeXB0ZWRQcnY7XG4gIH0gZWxzZSB7XG4gICAgZW5jcnlwdGVkUHJ2ID0gKGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmdldEVuY3J5cHRlZFVzZXJLZXljaGFpbigpKS5lbmNyeXB0ZWRYcHJ2O1xuICB9XG5cbiAgcmV0dXJuIGdldFBydihkZWNyeXB0KHBhc3NwaHJhc2UsIGVuY3J5cHRlZFBydikpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN3ZWVwIHRyYW5zYWN0aW9uIGZvciBjcm9zcy1jaGFpbiByZWNvdmVyeSB1c2luZyB3YXNtLXV0eG9cbiAqIEBwYXJhbSBjb2luTmFtZSAtIEJpdEdvIGNvaW4gbmFtZSAoZS5nLiAnYnRjJywgJ3RidGMnLCAnbHRjJylcbiAqIEBwYXJhbSB3YWxsZXRLZXlzXG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSB0YXJnZXRBZGRyZXNzXG4gKiBAcGFyYW0gZmVlUmF0ZVNhdFZCXG4gKiBAcmV0dXJuIHVuc2lnbmVkIFBTQlRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3dlZXBUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbk5hbWU6IENvaW5OYW1lLFxuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgdGFyZ2V0QWRkcmVzczogc3RyaW5nLFxuICBmZWVSYXRlU2F0VkI6IG51bWJlclxuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgY29uc3QgaW5wdXRWYWx1ZSA9IHVuc3BlbnRTdW0odW5zcGVudHMpO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHdpdGggd2FzbS11dHhvIGFuZCBhZGQgd2FsbGV0IGlucHV0cyB1c2luZyBzaGFyZWQgdXRpbGl0aWVzXG4gIGNvbnN0IHVuc3BlbnRzQmlnaW50ID0gdW5zcGVudHMubWFwKCh1KSA9PiAoeyAuLi51LCB2YWx1ZTogQmlnSW50KHUudmFsdWUpIH0pKTtcbiAgY29uc3Qgd2FzbVBzYnQgPSBjcmVhdGVFbXB0eVdhc21Qc2J0KGNvaW5OYW1lLCB3YWxsZXRLZXlzKTtcbiAgYWRkV2FsbGV0SW5wdXRzVG9XYXNtUHNidCh3YXNtUHNidCwgdW5zcGVudHNCaWdpbnQsIHdhbGxldEtleXMpO1xuXG4gIC8vIENhbGN1bGF0ZSBkaW1lbnNpb25zIHVzaW5nIHdhc20tdXR4byBEaW1lbnNpb25zXG4gIGNvbnN0IHZzaXplID0gZml4ZWRTY3JpcHRXYWxsZXQuRGltZW5zaW9ucy5mcm9tUHNidCh3YXNtUHNidClcbiAgICAucGx1cyhmaXhlZFNjcmlwdFdhbGxldC5EaW1lbnNpb25zLmZyb21PdXRwdXQodGFyZ2V0QWRkcmVzcywgY29pbk5hbWUpKVxuICAgIC5nZXRWU2l6ZSgpO1xuICBjb25zdCBmZWUgPSBCaWdJbnQoTWF0aC5yb3VuZCh2c2l6ZSAqIGZlZVJhdGVTYXRWQikpO1xuXG4gIC8vIEFkZCBvdXRwdXQgdG8gd2FzbSBQU0JUXG4gIGFkZE91dHB1dFRvV2FzbVBzYnQod2FzbVBzYnQsIHRhcmdldEFkZHJlc3MsIGlucHV0VmFsdWUgLSBmZWUsIGNvaW5OYW1lKTtcblxuICByZXR1cm4gd2FzbVBzYnQ7XG59XG5cbnR5cGUgUmVjb3ZlclBhcmFtcyA9IHtcbiAgLyoqIFdhbGxldCBJRCAoY2FuIGJlIHYxIHdhbGxldCBvciB2MiB3YWxsZXQpICovXG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIC8qKiBDb2luIHRvIGNyZWF0ZSB0aGUgdHJhbnNhY3Rpb24gZm9yICovXG4gIHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW47XG4gIC8qKiBDb2luIHRoYXQgd2FsbGV0IGtleXMgd2VyZSBzZXQgdXAgZm9yICovXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbjtcbiAgLyoqIFNvdXJjZSBjb2luIHRyYW5zYWN0aW9uIHRvIHJlY292ZXIgb3V0cHV0cyBmcm9tIChzb3VyY2VDb2luKSAqL1xuICB0eGlkOiBzdHJpbmc7XG4gIC8qKiBTb3VyY2UgY29pbiBhZGRyZXNzIHRvIHNlbmQgdGhlIGZ1bmRzIHRvICovXG4gIHJlY292ZXJ5QWRkcmVzczogc3RyaW5nO1xuICAvKiogSWYgc2V0LCBkZWNyeXB0cyBwcml2YXRlIGtleSBhbmQgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgLyoqIElmIHNldCwgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgeHBydj86IHN0cmluZztcbiAgLyoqIGZvciB1dHhvIGNvaW5zIG90aGVyIHRoYW4gW0JUQyxUQlRDXSB0aGlzIGlzIGEgQmxvY2sgQ2hhaXIgYXBpIGtleSAqKi9cbiAgYXBpS2V5Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZWNvdmVyIHdhbGxldCBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgb24gdGhlIHdyb25nIGJsb2NrY2hhaW5cbiAqIChmb3IgaW5zdGFuY2UgYml0Y29pbiBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgZm9yIGEgbGl0ZWNvaW4gd2FsbGV0KS5cbiAqXG4gKiBGZXRjaGVzIHRoZSB1bnNwZW50IGRhdGEgZnJvbSBCaXRHbydzIHB1YmxpYyBibG9ja2NoYWluIEFQSSBhbmQgdGhlIHNjcmlwdCBkYXRhIGZyb20gdGhlIHVzZXInc1xuICogd2FsbGV0LlxuICpcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnb1xuICogQHBhcmFtIHtSZWNvdmVyUGFyYW1zfSBwYXJhbXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFJlY292ZXJQYXJhbXNcbik6IFByb21pc2U8Q3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj4+IHtcbiAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgZ2V0V2FsbGV0KGJpdGdvLCBwYXJhbXMucmVjb3ZlcnlDb2luLCBwYXJhbXMud2FsbGV0SWQpO1xuICBjb25zdCB1bnNwZW50cyA9IGF3YWl0IGdldEFsbFJlY292ZXJ5T3V0cHV0czxUTnVtYmVyPihcbiAgICBwYXJhbXMuc291cmNlQ29pbixcbiAgICBwYXJhbXMudHhpZCxcbiAgICBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlLFxuICAgIHdhbGxldCxcbiAgICBwYXJhbXMuYXBpS2V5XG4gICk7XG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzID0gYXdhaXQgdG9XYWxsZXRVbnNwZW50czxUTnVtYmVyPihwYXJhbXMuc291cmNlQ29pbiwgcGFyYW1zLnJlY292ZXJ5Q29pbiwgdW5zcGVudHMsIHdhbGxldCk7XG4gIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKGF3YWl0IGdldFdhbGxldEtleXMocGFyYW1zLnJlY292ZXJ5Q29pbiwgd2FsbGV0KSk7XG4gIGNvbnN0IHBydiA9XG4gICAgcGFyYW1zLnhwcnYgfHwgcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgPyBhd2FpdCBnZXRQcnYocGFyYW1zLnhwcnYsIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLCB3YWxsZXQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBmZWVSYXRlU2F0VkIgPSBhd2FpdCBnZXRGZWVSYXRlU2F0VkIocGFyYW1zLnNvdXJjZUNvaW4pO1xuXG4gIC8vIENyZWF0ZSBQU0JUIGZvciBib3RoIHNpZ25lZCBhbmQgdW5zaWduZWQgcmVjb3ZlcnlcbiAgbGV0IHBzYnQgPSBjcmVhdGVTd2VlcFRyYW5zYWN0aW9uPFROdW1iZXI+KFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgd2FsbGV0S2V5cyxcbiAgICB3YWxsZXRVbnNwZW50cyxcbiAgICBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzLFxuICAgIGZlZVJhdGVTYXRWQlxuICApO1xuXG4gIC8vIEZvciB1bnNpZ25lZCByZWNvdmVyeSwgcmV0dXJuIHVuc2lnbmVkIFBTQlQgaGV4XG4gIGlmICghcHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR4SGV4OiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4JyksXG4gICAgICB3YWxsZXRJZDogcGFyYW1zLndhbGxldElkLFxuICAgICAgYWRkcmVzczogcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyxcbiAgICAgIGNvaW46IHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZvciBzaWduZWQgcmVjb3ZlcnksIHNpZ24gdGhlIFBTQlQgd2l0aCB1c2VyIGtleSBhbmQgcmV0dXJuIGhhbGYtc2lnbmVkIFBTQlRcbiAgcHNidCA9IHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIHBydiwgd2FsbGV0S2V5cywge1xuICAgIHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKHBhcmFtcy5zb3VyY2VDb2luLm5hbWUpLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb246IHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCA/IDIgOiAxLFxuICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICBzb3VyY2VDb2luOiBwYXJhbXMuc291cmNlQ29pbi5nZXRDaGFpbigpLFxuICAgIHJlY292ZXJ5Q29pbjogcGFyYW1zLnJlY292ZXJ5Q29pbi5nZXRDaGFpbigpLFxuICAgIHJlY292ZXJ5QW1vdW50OiB0b1ROdW1iZXIoXG4gICAgICBnZXRSZWNvdmVyeUFtb3VudChwc2J0LCB3YWxsZXRLZXlzLCBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzKSxcbiAgICAgIHBhcmFtcy5zb3VyY2VDb2luLmFtb3VudFR5cGVcbiAgICApIGFzIFROdW1iZXIsXG4gIH07XG59XG4iXX0=
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFEQSw4QkFvQkM7QUFPRCxzQ0FpQkM7QUFFRCwwQ0FhQztBQVlELDBFQWNDO0FBb1BELDhDQXFEQztBQW5iRCxnREFBOEY7QUFDOUYsNENBQThDO0FBQzlDLDhDQUErRTtBQUcvRSxnRkFBK0U7QUFFL0Usa0RBQTBEO0FBQzFELGtGQUF5RjtBQUN6Rix3Q0FBdUM7QUFDdkMsd0NBQTBFO0FBRTFFLGlDQUFnSDtBQXlDekcsS0FBSyxVQUFVLFNBQVMsQ0FDN0IsS0FBZ0IsRUFDaEIsSUFBc0IsRUFDdEIsUUFBZ0I7SUFFaEIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLCtDQUErQztRQUMvQyxrSkFBa0o7UUFDbEosSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsUUFBUSxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsYUFBYSxD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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQklQMzIsIENvaW5OYW1lLCBmaXhlZFNjcmlwdFdhbGxldCwgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHsgZGVjcnlwdEFzeW5jIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgQml0R29CYXNlLCBJV2FsbGV0LCBLZXljaGFpbiwgVHJpcGxlLCBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBUcmFuc2FjdGlvbkluZm8gfSBmcm9tICcuLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IHNpZ25BbmRWZXJpZnlQc2J0IH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uL25hbWVzJztcbmltcG9ydCB7IGVuY29kZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgeyB0b1ROdW1iZXIgfSBmcm9tICcuLi90bnVtYmVyJztcbmltcG9ydCB7IHVuc3BlbnRTdW0sIHR5cGUgVW5zcGVudCwgdHlwZSBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vdW5zcGVudCc7XG5cbmltcG9ydCB7IGNyZWF0ZUVtcHR5V2FzbVBzYnQsIGFkZFdhbGxldElucHV0c1RvV2FzbVBzYnQsIGFkZE91dHB1dFRvV2FzbVBzYnQsIGdldFJlY292ZXJ5QW1vdW50IH0gZnJvbSAnLi9wc2J0JztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFJlY292ZXJ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgd2FsbGV0OiBzdHJpbmc7XG4gIGZhdWx0eVR4SWQ6IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG59XG5cbnR5cGUgRmVlSW5mbyA9IHtcbiAgc2l6ZTogbnVtYmVyO1xuICBmZWVSYXRlOiBudW1iZXI7XG4gIGZlZTogbnVtYmVyO1xuICBwYXlHb0ZlZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgZmVlSW5mbz86IEZlZUluZm87XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29pbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiB7XG4gIHZlcnNpb246IDEgfCAyO1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIHNvdXJjZUNvaW46IHN0cmluZztcbiAgcmVjb3ZlcnlDb2luOiBzdHJpbmc7XG4gIHJlY292ZXJ5QWRkcmVzcz86IHN0cmluZztcbiAgcmVjb3ZlcnlBbW91bnQ/OiBUTnVtYmVyO1xufVxuXG50eXBlIFdhbGxldFYxID0ge1xuICBrZXljaGFpbnM6IHsgeHB1Yjogc3RyaW5nIH1bXTtcbiAgYWRkcmVzcyh7IGFkZHJlc3MgfTogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IFByb21pc2U8eyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH0+O1xuICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKTogUHJvbWlzZTx7IGVuY3J5cHRlZFhwcnY6IHN0cmluZyB9Pjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXYWxsZXQoXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHdhbGxldElkOiBzdHJpbmdcbik6IFByb21pc2U8SVdhbGxldCB8IFdhbGxldFYxPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB3YWxsZXRJZCB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE86IEJHLTQ2MzY0IGhhbmRsZSBlcnJvcnMgbW9yZSBncmFjZWZ1bGx5XG4gICAgLy8gVGhlIHYyIGVuZHBvaW50IGNvaW4ud2FsbGV0cygpLmdldCgpIG1heSB0aHJvdyA0MDQgb3IgNDAwIGVycm9ycywgYnV0IHRoaXMgc2hvdWxkIG5vdCBwcmV2ZW50IHVzIGZyb20gc2VhcmNoaW5nIGZvciB0aGUgd2FsbGV0SWQgaW4gdjEgd2FsbGV0cy5cbiAgICBpZiAoZS5zdGF0dXMgPj0gNTAwKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGJpdGdvLndhbGxldHMoKS5nZXQoeyBpZDogd2FsbGV0SWQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBnZXQgd2FsbGV0ICR7d2FsbGV0SWR9IGZyb20gdjEgb3IgdjI6ICR7ZS50b1N0cmluZygpfWApO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY292ZXJ5Q29pblxuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiB3YWxsZXQgcHVia2V5c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V2FsbGV0S2V5cyhcbiAgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMVxuKTogUHJvbWlzZTxmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cz4ge1xuICBsZXQgeHB1YnM6IFRyaXBsZTxzdHJpbmc+O1xuXG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBjb25zdCBrZXljaGFpbnMgPSAoYXdhaXQgcmVjb3ZlcnlDb2luLmtleWNoYWlucygpLmdldEtleXNGb3JTaWduaW5nKHsgd2FsbGV0IH0pKSBhcyB1bmtub3duIGFzIEtleWNoYWluW107XG4gICAgaWYgKGtleWNoYWlucy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgdHJpcGxlIGdvdCAke2tleWNoYWlucy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHhwdWJzID0ga2V5Y2hhaW5zLm1hcCgoaykgPT4gay5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICB9IGVsc2Uge1xuICAgIHhwdWJzID0gKHdhbGxldCBhcyBXYWxsZXRWMSkua2V5Y2hhaW5zLm1hcCgoaykgPT4gay54cHViKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgfVxuXG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKHhwdWJzKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzV2FsbGV0QWRkcmVzcyh3YWxsZXQ6IElXYWxsZXQgfCBXYWxsZXRWMSwgYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgbGV0IGFkZHJlc3NEYXRhO1xuICAgIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICAgIGFkZHJlc3NEYXRhID0gYXdhaXQgd2FsbGV0LmdldEFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzRGF0YSA9IGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRyZXNzRGF0YSAhPT0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIExpdGVjb2luIFAyU0ggYWRkcmVzcyBmcm9tIE0uLi4gZm9ybWF0IChzY3JpcHRIYXNoIDB4MzIpIHRvIHRoZSBsZWdhY3kgMy4uLiBmb3JtYXQgKHNjcmlwdEhhc2ggMHgwNSlcbiAqIGFuZCBRLi4uIGZvcm1hdCAoc2NyaXB0SGFzaCAweDMyKSB0byB0aGUgbGVnYWN5IDIuLi4gZm9ybWF0IChzY3JpcHRIYXNoIDB4MDUpLlxuICogVGhpcyBpcyBuZWVkZWQgZm9yIGNyb3NzLWNoYWluIHJlY292ZXJ5IHdoZW4gKFQpTFRDIHdhcyBzZW50IHRvIGEgKFQpQlRDIGFkZHJlc3MsIGJlY2F1c2UgdGhlIChUKUJUQyB3YWxsZXRcbiAqIHN0b3JlcyBhZGRyZXNzZXMgaW4gdGhlIDMuLi4gZm9ybWF0IHdoaWxlIHRoZSBMVEMgYmxvY2tjaGFpbiByZXR1cm5zIGFkZHJlc3NlcyBpbiBNLi4uIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gYWRkcmVzcyAtIExUQyBhZGRyZXNzIHRvIGNvbnZlcnRcbiAqIEBwYXJhbSBjb2luTmFtZSAtIFRoZSBjb2luIG5hbWUgKGUuZy4gJ2x0YycsICd0bHRjJylcbiAqIEByZXR1cm5zIFRoZSBhZGRyZXNzIGluIGxlZ2FjeSAzLi4uIGZvcm1hdCwgb3IgdGhlIG9yaWdpbmFsIGFkZHJlc3MgaWYgaXQncyBub3QgYSBQMlNIIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQoYWRkcmVzczogc3RyaW5nLCBjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogc3RyaW5nIHtcbiAgaWYgKGNvaW5OYW1lICE9PSAnbHRjJyAmJiBjb2luTmFtZSAhPT0gJ3RsdGMnKSB7XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICAvLyBvbmx5IGNvbnNpZGVyIGFkZHJlc3NlcyB0aGF0IHN0YXJ0IHdpdGggTSBvciBRIChtb2Rlcm4gbHRjIHAyc2ggcHJlZml4ZXMpXG4gIGlmICghYWRkcmVzcy5zdGFydHNXaXRoKCdNJykgJiYgIWFkZHJlc3Muc3RhcnRzV2l0aCgnUScpKSB7XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICBjb25zdCBzY3JpcHRQdWJLZXkgPSB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIGNvaW5OYW1lKTtcbiAgY29uc3QgZHN0Q29pbiA9IGNvaW5OYW1lID09PSAnbHRjJyA/ICdidGMnIDogJ3RidGMnO1xuICBjb25zdCBkc3RBZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdFB1YktleSwgZHN0Q29pbik7XG4gIHJldHVybiBkc3RBZGRyZXNzO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb2luXG4gKiBAcGFyYW0gdHhpZFxuICogQHBhcmFtIGFtb3VudFR5cGVcbiAqIEBwYXJhbSB3YWxsZXRcbiAqIEBwYXJhbSBhcGlLZXkgLSBhIGJsb2NrY2hhaXIgYXBpIGtleVxuICogQHJldHVybiBhbGwgdW5zcGVudHMgZm9yIHRyYW5zYWN0aW9uIG91dHB1dHMsIGluY2x1ZGluZyBvdXRwdXRzIGZyb20gb3RoZXIgdHJhbnNhY3Rpb25zXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFsbFJlY292ZXJ5T3V0cHV0czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgdHhpZDogc3RyaW5nLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcicsXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxLFxuICBhcGlLZXk/OiBzdHJpbmdcbik6IFByb21pc2U8VW5zcGVudDxUTnVtYmVyPltdPiB7XG4gIGNvbnN0IGFwaSA9IGNvaW4uZ2V0UmVjb3ZlcnlQcm92aWRlcihhcGlLZXkpO1xuICBjb25zdCB0eCA9IGF3YWl0IGFwaS5nZXRUcmFuc2FjdGlvbklPKHR4aWQpO1xuICBjb25zdCB3YWxsZXRBZGRyZXNzZXMgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0eC5vdXRwdXRzLm1hcChhc3luYyAob3V0cHV0KSA9PiB7XG4gICAgICAgIC8vIEZvciBzb21lIGNvaW5zIChiY2gpIHdlIG5lZWQgdG8gY29udmVydCB0aGUgYWRkcmVzcyB0byBsZWdhY3kgZm9ybWF0IHNpbmNlIHRoZSBhcGkgcmV0dXJucyB0aGUgYWRkcmVzc1xuICAgICAgICAvLyBpbiBub24gbGVnYWN5IGZvcm1hdC4gSG93ZXZlciwgd2Ugd2FudCB0byBrZWVwIHRoZSBhZGRyZXNzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgcmVzcG9uc2Ugc2luY2Ugd2VcbiAgICAgICAgLy8gYXJlIGdvaW5nIHRvIGhpdCB0aGUgQVBJIGFnYWluIHRvIGZldGNoIGFkZHJlc3MgdW5zcGVudHMuXG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbEFkZHJlc3MgPSBjb2luLmNhbm9uaWNhbEFkZHJlc3Mob3V0cHV0LmFkZHJlc3MpO1xuICAgICAgICBsZXQgaXNXYWxsZXRPd25lZCA9IGF3YWl0IGlzV2FsbGV0QWRkcmVzcyh3YWxsZXQsIGNhbm9uaWNhbEFkZHJlc3MpO1xuXG4gICAgICAgIC8vIEZvciBMVEMgY3Jvc3MtY2hhaW4gcmVjb3Zlcnk6IGlmIHRoZSBhZGRyZXNzIGlzbid0IGZvdW5kLCB0cnkgdGhlIGxlZ2FjeSBmb3JtYXQuXG4gICAgICAgIC8vIFdoZW4gTFRDIGlzIHNlbnQgdG8gYSBCVEMgYWRkcmVzcywgdGhlIExUQyBibG9ja2NoYWluIHJldHVybnMgTS4uLiBhZGRyZXNzZXNcbiAgICAgICAgLy8gYnV0IHRoZSBCVEMgd2FsbGV0IHN0b3JlcyBhZGRyZXNzZXMgaW4gMy4uLiBmb3JtYXQuXG4gICAgICAgIGlmICghaXNXYWxsZXRPd25lZCAmJiBjb2luLmdldEZhbWlseSgpID09PSAnbHRjJykge1xuICAgICAgICAgIGNvbnN0IGxlZ2FjeUFkZHJlc3MgPSBjb252ZXJ0THRjQWRkcmVzc1RvTGVnYWN5Rm9ybWF0KG91dHB1dC5hZGRyZXNzLCBjb2luLm5hbWUpO1xuICAgICAgICAgIGlmIChsZWdhY3lBZGRyZXNzICE9PSBvdXRwdXQuYWRkcmVzcykge1xuICAgICAgICAgICAgaXNXYWxsZXRPd25lZCA9IGF3YWl0IGlzV2FsbGV0QWRkcmVzcyh3YWxsZXQsIGxlZ2FjeUFkZHJlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc1dhbGxldE93bmVkID8gb3V0cHV0LmFkZHJlc3MgOiBudWxsO1xuICAgICAgfSlcbiAgICApXG4gICkuZmlsdGVyKChhZGRyZXNzKSA9PiBhZGRyZXNzICE9PSBudWxsKTtcblxuICBjb25zdCB1bnNwZW50cyA9IGF3YWl0IGFwaS5nZXRVbnNwZW50c0ZvckFkZHJlc3Nlcyh3YWxsZXRBZGRyZXNzZXMgYXMgc3RyaW5nW10pO1xuICBpZiAodW5zcGVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyByZWNvdmVyeSB1bnNwZW50cyBmb3VuZC5gKTtcbiAgfVxuICAvLyB0aGUgYXBpIG1heSByZXR1cm4gY2FzaGFkZHIncyBpbnN0ZWFkIG9mIGxlZ2FjeSBmb3IgQkNIIGFuZCBCQ0hBXG4gIC8vIGRvd25zdHJlYW0gcHJvY2Vzc2VzJ3Mgb25seSBleHBlY3QgbGVnYWN5IGFkZHJlc3Nlc1xuICByZXR1cm4gdW5zcGVudHMubWFwKChyZWNvdmVyeU91dHB1dCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZWNvdmVyeU91dHB1dCxcbiAgICAgIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyhyZWNvdmVyeU91dHB1dC5hZGRyZXNzKSxcbiAgICAgIHZhbHVlOiB0b1ROdW1iZXIoQmlnSW50KHJlY292ZXJ5T3V0cHV0LnZhbHVlKSwgYW1vdW50VHlwZSkgYXMgVE51bWJlcixcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBEYXRhIHJlcXVpcmVkIGZvciBhZGRyZXNzIGFuZCBzaWduYXR1cmUgZGVyaXZhdGlvblxuICovXG50eXBlIFNjcmlwdElkID0ge1xuICBjaGFpbjogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0U2NyaXB0SWQoY29pbjogQWJzdHJhY3RVdHhvQ29pbiwgd2FsbGV0OiBJV2FsbGV0IHwgV2FsbGV0VjEsIHNjcmlwdDogVWludDhBcnJheSk6IFByb21pc2U8U2NyaXB0SWQ+IHtcbiAgY29uc3QgYWRkcmVzcyA9IHdhc21BZGRyZXNzLmZyb21PdXRwdXRTY3JpcHRXaXRoQ29pbihzY3JpcHQsIGNvaW4ubmFtZSk7XG4gIGxldCBhZGRyZXNzRGF0YTogeyBjaGFpbjogbnVtYmVyOyBpbmRleDogbnVtYmVyIH07XG4gIGlmICh3YWxsZXQgaW5zdGFuY2VvZiBXYWxsZXQpIHtcbiAgICBhZGRyZXNzRGF0YSA9IGF3YWl0IHdhbGxldC5nZXRBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgfSBlbHNlIHtcbiAgICBhZGRyZXNzRGF0YSA9IGF3YWl0ICh3YWxsZXQgYXMgV2FsbGV0VjEpLmFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICB9XG4gIGlmICh0eXBlb2YgYWRkcmVzc0RhdGEuY2hhaW4gPT09ICdudW1iZXInICYmIHR5cGVvZiBhZGRyZXNzRGF0YS5pbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4geyBjaGFpbjogYWRkcmVzc0RhdGEuY2hhaW4sIGluZGV4OiBhZGRyZXNzRGF0YS5pbmRleCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFkZHJlc3MgZGF0YTogJHtKU09OLnN0cmluZ2lmeShhZGRyZXNzRGF0YSl9YCk7XG59XG5cbi8qKlxuICogTG9va3VwIGFkZHJlc3MgZGF0YSBmcm9tIHVuc3BlbnRzIG9uIHNvdXJjZUNvaW4gaW4gYWRkcmVzcyBkYXRhYmFzZSBvZiByZWNvdmVyeUNvaW4uXG4gKiBSZXR1cm4gZnVsbCB3YWxsZXRVbnNwZW50cyBpbmNsdWRpbmcgc2NyaXB0SWQgaW4gc291cmNlQ29pbiBmb3JtYXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZUNvaW5cbiAqIEBwYXJhbSByZWNvdmVyeUNvaW5cbiAqIEBwYXJhbSB1bnNwZW50c1xuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiB3YWxsZXRVbnNwZW50c1xuICovXG5hc3luYyBmdW5jdGlvbiB0b1dhbGxldFVuc3BlbnRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBzb3VyY2VDb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICByZWNvdmVyeUNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gIHdhbGxldDogSVdhbGxldCB8IFdhbGxldFYxXG4pOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXT4ge1xuICBjb25zdCBhZGRyZXNzZXMgPSBuZXcgU2V0KHVuc3BlbnRzLm1hcCgodSkgPT4gdS5hZGRyZXNzKSk7XG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PFROdW1iZXI+W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgYWRkcmVzc2VzKSB7XG4gICAgbGV0IHNjcmlwdElkO1xuICAgIHRyeSB7XG4gICAgICBzY3JpcHRJZCA9IGF3YWl0IGdldFNjcmlwdElkKHJlY292ZXJ5Q29pbiwgd2FsbGV0LCB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIHNvdXJjZUNvaW4ubmFtZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYGVycm9yIGdldHRpbmcgc2NyaXB0SWQgZm9yICR7YWRkcmVzc306YCwgZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyZWRVbnNwZW50cyA9IHVuc3BlbnRzXG4gICAgICAuZmlsdGVyKCh1KSA9PiB1LmFkZHJlc3MgPT09IGFkZHJlc3MpXG4gICAgICAubWFwKCh1KSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICAuLi5zY3JpcHRJZCxcbiAgICAgIH0pKTtcbiAgICB3YWxsZXRVbnNwZW50cy5wdXNoKC4uLmZpbHRlcmVkVW5zcGVudHMpO1xuICB9XG5cbiAgcmV0dXJuIHdhbGxldFVuc3BlbnRzO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb2luXG4gKiBAcmV0dXJuIGZlZVJhdGUgZm9yIHRyYW5zYWN0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEZlZVJhdGVTYXRWQihjb2luOiBBYnN0cmFjdFV0eG9Db2luKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgLy8gVE9ETzogdXNlIGZlZVJhdGUgQVBJXG4gIGNvbnN0IGZlZVJhdGUgPSB7XG4gICAgYmNoOiAyMCxcbiAgICB0YmNoOiAyMCxcbiAgICBiY2hhOiAyMCxcbiAgICB0YmNoYTogMjAsXG4gICAgYnN2OiAyMCxcbiAgICB0YnN2OiAyMCxcbiAgICBidGM6IDgwLFxuICAgIHRidGM6IDgwLFxuICAgIHRidGNzaWc6IDgwLFxuICAgIHRidGM0OiA4MCxcbiAgICB0YnRjYmdzaWc6IDgwLFxuICAgIGx0YzogMTAwLFxuICAgIHRsdGM6IDEwMCxcbiAgICBkb2dlOiAxMDAwLFxuICAgIHRkb2dlOiAxMDAwLFxuICB9W2NvaW4uZ2V0Q2hhaW4oKV07XG5cbiAgaWYgKCFmZWVSYXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBmZWVSYXRlIGZvciAke2NvaW4uZ2V0Q2hhaW4oKX1gKTtcbiAgfVxuXG4gIHJldHVybiBmZWVSYXRlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB4cHJ2XG4gKiBAcGFyYW0gcGFzc3BocmFzZVxuICogQHBhcmFtIHdhbGxldFxuICogQHJldHVybiBzaWduaW5nIGtleVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQcnYoeHBydj86IHN0cmluZywgcGFzc3BocmFzZT86IHN0cmluZywgd2FsbGV0PzogSVdhbGxldCB8IFdhbGxldFYxKTogUHJvbWlzZTxCSVAzMj4ge1xuICBpZiAoeHBydikge1xuICAgIGNvbnN0IGtleSA9IEJJUDMyLmZyb21CYXNlNTgoeHBydik7XG4gICAgaWYgKGtleS5pc05ldXRlcmVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IGEgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIGlmICghd2FsbGV0IHx8ICFwYXNzcGhyYXNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyB4cHJ2IGdpdmVuOiBuZWVkIHdhbGxldCBhbmQgcGFzc3BocmFzZSB0byBjb250aW51ZWApO1xuICB9XG5cbiAgbGV0IGVuY3J5cHRlZFBydjogc3RyaW5nO1xuICBpZiAod2FsbGV0IGluc3RhbmNlb2YgV2FsbGV0KSB7XG4gICAgZW5jcnlwdGVkUHJ2ID0gKGF3YWl0IHdhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKSkuZW5jcnlwdGVkUHJ2O1xuICB9IGVsc2Uge1xuICAgIGVuY3J5cHRlZFBydiA9IChhd2FpdCAod2FsbGV0IGFzIFdhbGxldFYxKS5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKSkuZW5jcnlwdGVkWHBydjtcbiAgfVxuXG4gIHJldHVybiBnZXRQcnYoYXdhaXQgZGVjcnlwdEFzeW5jKHBhc3NwaHJhc2UsIGVuY3J5cHRlZFBydikpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN3ZWVwIHRyYW5zYWN0aW9uIGZvciBjcm9zcy1jaGFpbiByZWNvdmVyeSB1c2luZyB3YXNtLXV0eG9cbiAqIEBwYXJhbSBjb2luTmFtZSAtIEJpdEdvIGNvaW4gbmFtZSAoZS5nLiAnYnRjJywgJ3RidGMnLCAnbHRjJylcbiAqIEBwYXJhbSB3YWxsZXRLZXlzXG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSB0YXJnZXRBZGRyZXNzXG4gKiBAcGFyYW0gZmVlUmF0ZVNhdFZCXG4gKiBAcmV0dXJuIHVuc2lnbmVkIFBTQlRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3dlZXBUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbk5hbWU6IENvaW5OYW1lLFxuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgdGFyZ2V0QWRkcmVzczogc3RyaW5nLFxuICBmZWVSYXRlU2F0VkI6IG51bWJlclxuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgY29uc3QgaW5wdXRWYWx1ZSA9IHVuc3BlbnRTdW0odW5zcGVudHMpO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHdpdGggd2FzbS11dHhvIGFuZCBhZGQgd2FsbGV0IGlucHV0cyB1c2luZyBzaGFyZWQgdXRpbGl0aWVzXG4gIGNvbnN0IHVuc3BlbnRzQmlnaW50ID0gdW5zcGVudHMubWFwKCh1KSA9PiAoeyAuLi51LCB2YWx1ZTogQmlnSW50KHUudmFsdWUpIH0pKTtcbiAgY29uc3Qgd2FzbVBzYnQgPSBjcmVhdGVFbXB0eVdhc21Qc2J0KGNvaW5OYW1lLCB3YWxsZXRLZXlzKTtcbiAgYWRkV2FsbGV0SW5wdXRzVG9XYXNtUHNidCh3YXNtUHNidCwgdW5zcGVudHNCaWdpbnQsIHdhbGxldEtleXMpO1xuXG4gIC8vIENhbGN1bGF0ZSBkaW1lbnNpb25zIHVzaW5nIHdhc20tdXR4byBEaW1lbnNpb25zXG4gIGNvbnN0IHZzaXplID0gZml4ZWRTY3JpcHRXYWxsZXQuRGltZW5zaW9ucy5mcm9tUHNidCh3YXNtUHNidClcbiAgICAucGx1cyhmaXhlZFNjcmlwdFdhbGxldC5EaW1lbnNpb25zLmZyb21PdXRwdXQodGFyZ2V0QWRkcmVzcywgY29pbk5hbWUpKVxuICAgIC5nZXRWU2l6ZSgpO1xuICBjb25zdCBmZWUgPSBCaWdJbnQoTWF0aC5yb3VuZCh2c2l6ZSAqIGZlZVJhdGVTYXRWQikpO1xuXG4gIC8vIEFkZCBvdXRwdXQgdG8gd2FzbSBQU0JUXG4gIGFkZE91dHB1dFRvV2FzbVBzYnQod2FzbVBzYnQsIHRhcmdldEFkZHJlc3MsIGlucHV0VmFsdWUgLSBmZWUsIGNvaW5OYW1lKTtcblxuICByZXR1cm4gd2FzbVBzYnQ7XG59XG5cbnR5cGUgUmVjb3ZlclBhcmFtcyA9IHtcbiAgLyoqIFdhbGxldCBJRCAoY2FuIGJlIHYxIHdhbGxldCBvciB2MiB3YWxsZXQpICovXG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIC8qKiBDb2luIHRvIGNyZWF0ZSB0aGUgdHJhbnNhY3Rpb24gZm9yICovXG4gIHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW47XG4gIC8qKiBDb2luIHRoYXQgd2FsbGV0IGtleXMgd2VyZSBzZXQgdXAgZm9yICovXG4gIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbjtcbiAgLyoqIFNvdXJjZSBjb2luIHRyYW5zYWN0aW9uIHRvIHJlY292ZXIgb3V0cHV0cyBmcm9tIChzb3VyY2VDb2luKSAqL1xuICB0eGlkOiBzdHJpbmc7XG4gIC8qKiBTb3VyY2UgY29pbiBhZGRyZXNzIHRvIHNlbmQgdGhlIGZ1bmRzIHRvICovXG4gIHJlY292ZXJ5QWRkcmVzczogc3RyaW5nO1xuICAvKiogSWYgc2V0LCBkZWNyeXB0cyBwcml2YXRlIGtleSBhbmQgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgLyoqIElmIHNldCwgc2lnbnMgdHJhbnNhY3Rpb24gKi9cbiAgeHBydj86IHN0cmluZztcbiAgLyoqIGZvciB1dHhvIGNvaW5zIG90aGVyIHRoYW4gW0JUQyxUQlRDXSB0aGlzIGlzIGEgQmxvY2sgQ2hhaXIgYXBpIGtleSAqKi9cbiAgYXBpS2V5Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZWNvdmVyIHdhbGxldCBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgb24gdGhlIHdyb25nIGJsb2NrY2hhaW5cbiAqIChmb3IgaW5zdGFuY2UgYml0Y29pbiBkZXBvc2l0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgZm9yIGEgbGl0ZWNvaW4gd2FsbGV0KS5cbiAqXG4gKiBGZXRjaGVzIHRoZSB1bnNwZW50IGRhdGEgZnJvbSBCaXRHbydzIHB1YmxpYyBibG9ja2NoYWluIEFQSSBhbmQgdGhlIHNjcmlwdCBkYXRhIGZyb20gdGhlIHVzZXInc1xuICogd2FsbGV0LlxuICpcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnb1xuICogQHBhcmFtIHtSZWNvdmVyUGFyYW1zfSBwYXJhbXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFJlY292ZXJQYXJhbXNcbik6IFByb21pc2U8Q3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj4+IHtcbiAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgZ2V0V2FsbGV0KGJpdGdvLCBwYXJhbXMucmVjb3ZlcnlDb2luLCBwYXJhbXMud2FsbGV0SWQpO1xuICBjb25zdCB1bnNwZW50cyA9IGF3YWl0IGdldEFsbFJlY292ZXJ5T3V0cHV0czxUTnVtYmVyPihcbiAgICBwYXJhbXMuc291cmNlQ29pbixcbiAgICBwYXJhbXMudHhpZCxcbiAgICBwYXJhbXMuc291cmNlQ29pbi5hbW91bnRUeXBlLFxuICAgIHdhbGxldCxcbiAgICBwYXJhbXMuYXBpS2V5XG4gICk7XG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzID0gYXdhaXQgdG9XYWxsZXRVbnNwZW50czxUTnVtYmVyPihwYXJhbXMuc291cmNlQ29pbiwgcGFyYW1zLnJlY292ZXJ5Q29pbiwgdW5zcGVudHMsIHdhbGxldCk7XG4gIGNvbnN0IHdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKGF3YWl0IGdldFdhbGxldEtleXMocGFyYW1zLnJlY292ZXJ5Q29pbiwgd2FsbGV0KSk7XG4gIGNvbnN0IHBydiA9XG4gICAgcGFyYW1zLnhwcnYgfHwgcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgPyBhd2FpdCBnZXRQcnYocGFyYW1zLnhwcnYsIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLCB3YWxsZXQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBmZWVSYXRlU2F0VkIgPSBhd2FpdCBnZXRGZWVSYXRlU2F0VkIocGFyYW1zLnNvdXJjZUNvaW4pO1xuXG4gIC8vIENyZWF0ZSBQU0JUIGZvciBib3RoIHNpZ25lZCBhbmQgdW5zaWduZWQgcmVjb3ZlcnlcbiAgbGV0IHBzYnQgPSBjcmVhdGVTd2VlcFRyYW5zYWN0aW9uPFROdW1iZXI+KFxuICAgIHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgd2FsbGV0S2V5cyxcbiAgICB3YWxsZXRVbnNwZW50cyxcbiAgICBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzLFxuICAgIGZlZVJhdGVTYXRWQlxuICApO1xuXG4gIC8vIEZvciB1bnNpZ25lZCByZWNvdmVyeSwgcmV0dXJuIHVuc2lnbmVkIFBTQlQgaGV4XG4gIGlmICghcHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR4SGV4OiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4JyksXG4gICAgICB3YWxsZXRJZDogcGFyYW1zLndhbGxldElkLFxuICAgICAgYWRkcmVzczogcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyxcbiAgICAgIGNvaW46IHBhcmFtcy5zb3VyY2VDb2luLmdldENoYWluKCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZvciBzaWduZWQgcmVjb3ZlcnksIHNpZ24gdGhlIFBTQlQgd2l0aCB1c2VyIGtleSBhbmQgcmV0dXJuIGhhbGYtc2lnbmVkIFBTQlRcbiAgcHNidCA9IHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIHBydiwgd2FsbGV0S2V5cywge1xuICAgIHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKHBhcmFtcy5zb3VyY2VDb2luLm5hbWUpLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb246IHdhbGxldCBpbnN0YW5jZW9mIFdhbGxldCA/IDIgOiAxLFxuICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICBzb3VyY2VDb2luOiBwYXJhbXMuc291cmNlQ29pbi5nZXRDaGFpbigpLFxuICAgIHJlY292ZXJ5Q29pbjogcGFyYW1zLnJlY292ZXJ5Q29pbi5nZXRDaGFpbigpLFxuICAgIHJlY292ZXJ5QW1vdW50OiB0b1ROdW1iZXIoXG4gICAgICBnZXRSZWNvdmVyeUFtb3VudChwc2J0LCB3YWxsZXRLZXlzLCBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzKSxcbiAgICAgIHBhcmFtcy5zb3VyY2VDb2luLmFtb3VudFR5cGVcbiAgICApIGFzIFROdW1iZXIsXG4gIH07XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/descriptor/verifyTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAoC,MAAM,iBAAiB,CAAC;AAC1F,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,mBAAoB,SAAQ,eAAe;IACnC,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;gBAA5C,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;CAGhE;AAED,qBAAa,4BAA6B,SAAQ,eAAe;IAC5C,uBAAuB,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;gBAArD,uBAAuB,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;CAGzE;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IACxC,MAAM,EAAE,eAAe,EAAE;gBAAzB,MAAM,EAAE,eAAe,EAAE;CAG7C;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,GAC9E,IAAI,CAcN;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,GAAG,UAAU,EACvB,WAAW,EAAE,gBAAgB,CAAC,aAAa,EAC3C,UAAU,EAAE,qBAAqB,EAAE,EACnC,QAAQ,EAAE,YAAY,GACrB,IAAI,CAEN;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrE,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,EACzC,aAAa,EAAE,gBAAgB,CAAC,aAAa,GAC5C,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
1
+ {"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/descriptor/verifyTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAoC,MAAM,iBAAiB,CAAC;AAC1F,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,mBAAoB,SAAQ,eAAe;IACnC,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;gBAA5C,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;CAGhE;AAED,qBAAa,4BAA6B,SAAQ,eAAe;IAC5C,uBAAuB,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;gBAArD,uBAAuB,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE;CAGzE;AAED,qBAAa,wBAAyB,SAAQ,eAAe;IACxC,MAAM,EAAE,eAAe,EAAE;gBAAzB,MAAM,EAAE,eAAe,EAAE;CAG7C;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,GAC9E,IAAI,CAcN;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,GAAG,UAAU,EACvB,WAAW,EAAE,gBAAgB,CAAC,aAAa,EAC3C,UAAU,EAAE,qBAAqB,EAAE,EACnC,QAAQ,EAAE,YAAY,GACrB,IAAI,CAEN;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrE,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,EACzC,aAAa,EAAE,gBAAgB,CAAC,aAAa,GAC5C,OAAO,CAAC,OAAO,CAAC,CAiDlB"}
@@ -75,6 +75,16 @@ async function verifyTransaction(coin, params, descriptorMap) {
75
75
  throw new sdk_core_1.TxIntentMismatchError(`unexpected transaction type: ${errorDetail}`, params.reqId, [params.txParams], params.txPrebuild.txHex, txExplanation);
76
76
  }
77
77
  assertValidTransaction(psbt, descriptorMap, params.txParams.recipients ?? [], coin.name);
78
+ const parsedOutputs = (0, parse_1.toBaseParsedTransactionOutputsFromPsbt)(psbt, descriptorMap, params.txParams.recipients ?? [], coin.name);
79
+ if (params.txParams.qr) {
80
+ const allExternalOutputs = [...parsedOutputs.explicitExternalOutputs, ...parsedOutputs.implicitExternalOutputs];
81
+ if (allExternalOutputs.length > 0) {
82
+ const txExplanation = await sdk_core_1.TxIntentMismatchError.tryGetTxExplanation(coin, params.txPrebuild);
83
+ throw new sdk_core_1.TxIntentMismatchError('quantum-resistant sweep transactions must only contain wallet-internal outputs', params.reqId, [params.txParams], params.txPrebuild.txHex, txExplanation);
84
+ }
85
+ return true;
86
+ }
87
+ assertExpectedOutputDifference(parsedOutputs);
78
88
  return true;
79
89
  }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrQ0Esd0VBZ0JDO0FBRUQsd0RBT0M7QUFjRCw4Q0EwQkM7QUFuR0QsOENBQTBGO0FBTTFGLHNDQUFpRDtBQUVqRCxtQ0FBaUU7QUFFakUsTUFBYSxlQUFnQixTQUFRLEtBQUs7SUFDeEMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFKRCwwQ0FJQztBQUVELE1BQWEsbUJBQW9CLFNBQVEsZUFBZTtJQUN0RCxZQUFtQixjQUE0QztRQUM3RCxLQUFLLENBQUMsMEJBQTBCLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRHpDLG1CQUFjLEdBQWQsY0FBYyxDQUE4QjtJQUUvRCxDQUFDO0NBQ0Y7QUFKRCxrREFJQztBQUVELE1BQWEsNEJBQTZCLFNBQVEsZUFBZTtJQUMvRCxZQUFtQix1QkFBcUQ7UUFDdEUsS0FBSyxDQUFDLCtDQUErQyx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRHZFLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBOEI7SUFFeEUsQ0FBQztDQUNGO0FBSkQsb0VBSUM7QUFFRCxNQUFhLHdCQUF5QixTQUFRLGVBQWU7SUFDM0QsWUFBbUIsTUFBeUI7UUFDMUMsS0FBSyxDQUFDLHFDQUFxQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUQ1QyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtJQUU1QyxDQUFDO0NBQ0Y7QUFKRCw0REFJQztBQUVELFNBQWdCLDhCQUE4QixDQUM1QyxhQUErRTtJQUUvRSxNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBQ3JDLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxJQUFJLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckQsc0RBQXNEO1FBQ3RELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsaUNBQWlDO1FBQ2pDLG9DQUFvQztRQUNwQyxNQUFNLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FDcEMsSUFBdUIsRUFDdkIsV0FBMkMsRUFDM0MsVUFBbUMsRUFDbkMsUUFBc0I7SUFFdEIsOEJBQThCLENBQUMsSUFBQSw4Q0FBc0MsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ2xILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsSUFBc0IsRUFDdEIsTUFBeUMsRUFDekMsYUFBNkM7SUFFN0MsSUFBSSxJQUFVLENBQUM7SUFDZixJQUFJLENBQUM7UUFDSCxJQUFJLEdBQUcsSUFBQSw2QkFBb0IsRUFBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLGFBQWEsR0FBRyxNQUFNLGdDQUFxQixDQUFDLG1CQUFtQixDQUNuRSxJQUE0QixFQUM1QixNQUFNLENBQUMsVUFBVSxDQUNsQixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sSUFBSSxnQ0FBcUIsQ0FDN0IsZ0NBQWdDLFdBQVcsRUFBRSxFQUM3QyxNQUFNLENBQUMsS0FBSyxFQUNaLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUNqQixNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFDdkIsYUFBYSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUcmFuc2FjdGlvblJlY2lwaWVudCwgVHhJbnRlbnRNaXNtYXRjaEVycm9yLCBJQmFzZUNvaW4gfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQc2J0LCBkZXNjcmlwdG9yV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgQmFzZU91dHB1dCwgQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0cyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcbmltcG9ydCB7IGRlY29kZURlc2NyaXB0b3JQc2J0IH0gZnJvbSAnLi4vZGVjb2RlJztcblxuaW1wb3J0IHsgdG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzRnJvbVBzYnQgfSBmcm9tICcuL3BhcnNlJztcblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVycm9yTWlzc2luZ091dHB1dHMgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbWlzc2luZ091dHB1dHM6IEJhc2VPdXRwdXQ8YmlnaW50IHwgJ21heCc+W10pIHtcbiAgICBzdXBlcihgbWlzc2luZyBvdXRwdXRzIChjb3VudD0ke21pc3NpbmdPdXRwdXRzLmxlbmd0aH0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW1wbGljaXRFeHRlcm5hbE91dHB1dHM6IEJhc2VPdXRwdXQ8YmlnaW50IHwgJ21heCc+W10pIHtcbiAgICBzdXBlcihgdW5leHBlY3RlZCBpbXBsaWNpdCBleHRlcm5hbCBvdXRwdXRzIChjb3VudD0ke2ltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLmxlbmd0aH0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvciBleHRlbmRzIFZhbGlkYXRpb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdKSB7XG4gICAgc3VwZXIoYGFnZ3JlZ2F0ZSB2YWxpZGF0aW9uIGVycm9yIChjb3VudD0ke2Vycm9ycy5sZW5ndGh9KWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFeHBlY3RlZE91dHB1dERpZmZlcmVuY2UoXG4gIHBhcnNlZE91dHB1dHM6IEJhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHM8YmlnaW50LCBCYXNlT3V0cHV0PGJpZ2ludCB8ICdtYXgnPj5cbik6IHZvaWQge1xuICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gIGlmIChwYXJzZWRPdXRwdXRzLm1pc3NpbmdPdXRwdXRzLmxlbmd0aCA+IDApIHtcbiAgICBlcnJvcnMucHVzaChuZXcgRXJyb3JNaXNzaW5nT3V0cHV0cyhwYXJzZWRPdXRwdXRzLm1pc3NpbmdPdXRwdXRzKSk7XG4gIH1cbiAgaWYgKHBhcnNlZE91dHB1dHMuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMubGVuZ3RoID4gMCkge1xuICAgIC8vIEZJWE1FOiBmb3IgcGF5Z28gd2UgbmVlZCB0byByZWxheCB0aGlzIGEgbGl0dGxlIGJpdFxuICAgIGVycm9ycy5wdXNoKG5ldyBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKHBhcnNlZE91dHB1dHMuaW1wbGljaXRFeHRlcm5hbE91dHB1dHMpKTtcbiAgfVxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBGSVhNRShCVEMtMTY4OCk6IGVuYWJsZSBFUzIwMjFcbiAgICAvLyB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiAgICB0aHJvdyBuZXcgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKGVycm9ycyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkVHJhbnNhY3Rpb24oXG4gIHBzYnQ6IFBzYnQgfCBVaW50OEFycmF5LFxuICBkZXNjcmlwdG9yczogZGVzY3JpcHRvcldhbGxldC5EZXNjcmlwdG9yTWFwLFxuICByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXSxcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZVxuKTogdm9pZCB7XG4gIGFzc2VydEV4cGVjdGVkT3V0cHV0RGlmZmVyZW5jZSh0b0Jhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHNGcm9tUHNidChwc2J0LCBkZXNjcmlwdG9ycywgcmVjaXBpZW50cywgY29pbk5hbWUpKTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uIHRoYXQgcmV0dXJucyBhIGJvb2xlYW4gaW5zdGVhZCBvZiB0aHJvd2luZy5cbiAqXG4gKiBXZSBmb2xsb3cgdGhlIEFic3RyYWN0VXR4b0NvaW4gaW50ZXJmYWNlIGhlcmUgd2hpY2ggaXMgYSBiaXQgY29uZnVzZWQgLSB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgYm9vbGVhbiBidXQgd2VcbiAqIGFsc28gdGhyb3cgZXJyb3JzIChiZWNhdXNlIHdlIGFjdHVhbGx5IHdhbnQgdG8ga25vdyB3aGF0IHdlbnQgd3JvbmcpLlxuICpcbiAqIEBwYXJhbSBjb2luXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gZGVzY3JpcHRvck1hcFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmVyaWZpY2F0aW9uIHBhc3Nlc1xuICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaEVycm9yfSBpZiB0cmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4sXG4gIGRlc2NyaXB0b3JNYXA6IGRlc2NyaXB0b3JXYWxsZXQuRGVzY3JpcHRvck1hcFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGxldCBwc2J0OiBQc2J0O1xuICB0cnkge1xuICAgIHBzYnQgPSBkZWNvZGVEZXNjcmlwdG9yUHNidChwYXJhbXMudHhQcmVidWlsZCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB0eEV4cGxhbmF0aW9uID0gYXdhaXQgVHhJbnRlbnRNaXNtYXRjaEVycm9yLnRyeUdldFR4RXhwbGFuYXRpb24oXG4gICAgICBjb2luIGFzIHVua25vd24gYXMgSUJhc2VDb2luLFxuICAgICAgcGFyYW1zLnR4UHJlYnVpbGRcbiAgICApO1xuICAgIGNvbnN0IGVycm9yRGV0YWlsID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgIHRocm93IG5ldyBUeEludGVudE1pc21hdGNoRXJyb3IoXG4gICAgICBgdW5leHBlY3RlZCB0cmFuc2FjdGlvbiB0eXBlOiAke2Vycm9yRGV0YWlsfWAsXG4gICAgICBwYXJhbXMucmVxSWQsXG4gICAgICBbcGFyYW1zLnR4UGFyYW1zXSxcbiAgICAgIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgdHhFeHBsYW5hdGlvblxuICAgICk7XG4gIH1cblxuICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uKHBzYnQsIGRlc2NyaXB0b3JNYXAsIHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzID8/IFtdLCBjb2luLm5hbWUpO1xuXG4gIHJldHVybiB0cnVlO1xufVxuIl19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrQ0Esd0VBZ0JDO0FBRUQsd0RBT0M7QUFjRCw4Q0FxREM7QUE5SEQsOENBQTBGO0FBTTFGLHNDQUFpRDtBQUVqRCxtQ0FBaUU7QUFFakUsTUFBYSxlQUFnQixTQUFRLEtBQUs7SUFDeEMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFKRCwwQ0FJQztBQUVELE1BQWEsbUJBQW9CLFNBQVEsZUFBZTtJQUN0RCxZQUFtQixjQUE0QztRQUM3RCxLQUFLLENBQUMsMEJBQTBCLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRHpDLG1CQUFjLEdBQWQsY0FBYyxDQUE4QjtJQUUvRCxDQUFDO0NBQ0Y7QUFKRCxrREFJQztBQUVELE1BQWEsNEJBQTZCLFNBQVEsZUFBZTtJQUMvRCxZQUFtQix1QkFBcUQ7UUFDdEUsS0FBSyxDQUFDLCtDQUErQyx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRHZFLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBOEI7SUFFeEUsQ0FBQztDQUNGO0FBSkQsb0VBSUM7QUFFRCxNQUFhLHdCQUF5QixTQUFRLGVBQWU7SUFDM0QsWUFBbUIsTUFBeUI7UUFDMUMsS0FBSyxDQUFDLHFDQUFxQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUQ1QyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtJQUU1QyxDQUFDO0NBQ0Y7QUFKRCw0REFJQztBQUVELFNBQWdCLDhCQUE4QixDQUM1QyxhQUErRTtJQUUvRSxNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBQ3JDLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFN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OEIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUU5QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVHJhbnNhY3Rpb25SZWNpcGllbnQsIFR4SW50ZW50TWlzbWF0Y2hFcnJvciwgSUJhc2VDb2luIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB0eXBlIHsgUHNidCwgZGVzY3JpcHRvcldhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IEJhc2VPdXRwdXQsIEJhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi9uYW1lcyc7XG5pbXBvcnQgeyBkZWNvZGVEZXNjcmlwdG9yUHNidCB9IGZyb20gJy4uL2RlY29kZSc7XG5cbmltcG9ydCB7IHRvQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0c0Zyb21Qc2J0IH0gZnJvbSAnLi9wYXJzZSc7XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvck1pc3NpbmdPdXRwdXRzIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIG1pc3NpbmdPdXRwdXRzOiBCYXNlT3V0cHV0PGJpZ2ludCB8ICdtYXgnPltdKSB7XG4gICAgc3VwZXIoYG1pc3Npbmcgb3V0cHV0cyAoY291bnQ9JHttaXNzaW5nT3V0cHV0cy5sZW5ndGh9KWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzIGV4dGVuZHMgVmFsaWRhdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIGltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzOiBCYXNlT3V0cHV0PGJpZ2ludCB8ICdtYXgnPltdKSB7XG4gICAgc3VwZXIoYHVuZXhwZWN0ZWQgaW1wbGljaXQgZXh0ZXJuYWwgb3V0cHV0cyAoY291bnQ9JHtpbXBsaWNpdEV4dGVybmFsT3V0cHV0cy5sZW5ndGh9KWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JbXSkge1xuICAgIHN1cGVyKGBhZ2dyZWdhdGUgdmFsaWRhdGlvbiBlcnJvciAoY291bnQ9JHtlcnJvcnMubGVuZ3RofSlgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RXhwZWN0ZWRPdXRwdXREaWZmZXJlbmNlKFxuICBwYXJzZWRPdXRwdXRzOiBCYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzPGJpZ2ludCwgQmFzZU91dHB1dDxiaWdpbnQgfCAnbWF4Jz4+XG4pOiB2b2lkIHtcbiAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICBpZiAocGFyc2VkT3V0cHV0cy5taXNzaW5nT3V0cHV0cy5sZW5ndGggPiAwKSB7XG4gICAgZXJyb3JzLnB1c2gobmV3IEVycm9yTWlzc2luZ091dHB1dHMocGFyc2VkT3V0cHV0cy5taXNzaW5nT3V0cHV0cykpO1xuICB9XG4gIGlmIChwYXJzZWRPdXRwdXRzLmltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBGSVhNRTogZm9yIHBheWdvIHdlIG5lZWQgdG8gcmVsYXggdGhpcyBhIGxpdHRsZSBiaXRcbiAgICBlcnJvcnMucHVzaChuZXcgRXJyb3JJbXBsaWNpdEV4dGVybmFsT3V0cHV0cyhwYXJzZWRPdXRwdXRzLmltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzKSk7XG4gIH1cbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gRklYTUUoQlRDLTE2ODgpOiBlbmFibGUgRVMyMDIxXG4gICAgLy8gdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcihlcnJvcnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uKFxuICBwc2J0OiBQc2J0IHwgVWludDhBcnJheSxcbiAgZGVzY3JpcHRvcnM6IGRlc2NyaXB0b3JXYWxsZXQuRGVzY3JpcHRvck1hcCxcbiAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W10sXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWVcbik6IHZvaWQge1xuICBhc3NlcnRFeHBlY3RlZE91dHB1dERpZmZlcmVuY2UodG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzRnJvbVBzYnQocHNidCwgZGVzY3JpcHRvcnMsIHJlY2lwaWVudHMsIGNvaW5OYW1lKSk7XG59XG5cbi8qKlxuICogV3JhcHBlciBhcm91bmQgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvbiB0aGF0IHJldHVybnMgYSBib29sZWFuIGluc3RlYWQgb2YgdGhyb3dpbmcuXG4gKlxuICogV2UgZm9sbG93IHRoZSBBYnN0cmFjdFV0eG9Db2luIGludGVyZmFjZSBoZXJlIHdoaWNoIGlzIGEgYml0IGNvbmZ1c2VkIC0gdGhlIHJldHVybiB2YWx1ZSBpcyBhIGJvb2xlYW4gYnV0IHdlXG4gKiBhbHNvIHRocm93IGVycm9ycyAoYmVjYXVzZSB3ZSBhY3R1YWxseSB3YW50IHRvIGtub3cgd2hhdCB3ZW50IHdyb25nKS5cbiAqXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIGRlc2NyaXB0b3JNYXBcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBwYXNzZXNcbiAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hFcnJvcn0gaWYgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICBkZXNjcmlwdG9yTWFwOiBkZXNjcmlwdG9yV2FsbGV0LkRlc2NyaXB0b3JNYXBcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBsZXQgcHNidDogUHNidDtcbiAgdHJ5IHtcbiAgICBwc2J0ID0gZGVjb2RlRGVzY3JpcHRvclBzYnQocGFyYW1zLnR4UHJlYnVpbGQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgdHhFeHBsYW5hdGlvbiA9IGF3YWl0IFR4SW50ZW50TWlzbWF0Y2hFcnJvci50cnlHZXRUeEV4cGxhbmF0aW9uKFxuICAgICAgY29pbiBhcyB1bmtub3duIGFzIElCYXNlQ29pbixcbiAgICAgIHBhcmFtcy50eFByZWJ1aWxkXG4gICAgKTtcbiAgICBjb25zdCBlcnJvckRldGFpbCA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICB0aHJvdyBuZXcgVHhJbnRlbnRNaXNtYXRjaEVycm9yKFxuICAgICAgYHVuZXhwZWN0ZWQgdHJhbnNhY3Rpb24gdHlwZTogJHtlcnJvckRldGFpbH1gLFxuICAgICAgcGFyYW1zLnJlcUlkLFxuICAgICAgW3BhcmFtcy50eFBhcmFtc10sXG4gICAgICBwYXJhbXMudHhQcmVidWlsZC50eEhleCxcbiAgICAgIHR4RXhwbGFuYXRpb25cbiAgICApO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvbihwc2J0LCBkZXNjcmlwdG9yTWFwLCBwYXJhbXMudHhQYXJhbXMucmVjaXBpZW50cyA/PyBbXSwgY29pbi5uYW1lKTtcblxuICBjb25zdCBwYXJzZWRPdXRwdXRzID0gdG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzRnJvbVBzYnQoXG4gICAgcHNidCxcbiAgICBkZXNjcmlwdG9yTWFwLFxuICAgIHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzID8/IFtdLFxuICAgIGNvaW4ubmFtZVxuICApO1xuXG4gIGlmIChwYXJhbXMudHhQYXJhbXMucXIpIHtcbiAgICBjb25zdCBhbGxFeHRlcm5hbE91dHB1dHMgPSBbLi4ucGFyc2VkT3V0cHV0cy5leHBsaWNpdEV4dGVybmFsT3V0cHV0cywgLi4ucGFyc2VkT3V0cHV0cy5pbXBsaWNpdEV4dGVybmFsT3V0cHV0c107XG4gICAgaWYgKGFsbEV4dGVybmFsT3V0cHV0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0eEV4cGxhbmF0aW9uID0gYXdhaXQgVHhJbnRlbnRNaXNtYXRjaEVycm9yLnRyeUdldFR4RXhwbGFuYXRpb24oXG4gICAgICAgIGNvaW4gYXMgdW5rbm93biBhcyBJQmFzZUNvaW4sXG4gICAgICAgIHBhcmFtcy50eFByZWJ1aWxkXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IFR4SW50ZW50TWlzbWF0Y2hFcnJvcihcbiAgICAgICAgJ3F1YW50dW0tcmVzaXN0YW50IHN3ZWVwIHRyYW5zYWN0aW9ucyBtdXN0IG9ubHkgY29udGFpbiB3YWxsZXQtaW50ZXJuYWwgb3V0cHV0cycsXG4gICAgICAgIHBhcmFtcy5yZXFJZCxcbiAgICAgICAgW3BhcmFtcy50eFBhcmFtc10sXG4gICAgICAgIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgICB0eEV4cGxhbmF0aW9uXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzc2VydEV4cGVjdGVkT3V0cHV0RGlmZmVyZW5jZShwYXJzZWRPdXRwdXRzKTtcblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/verifyTransaction.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAoC,MAAM,iBAAiB,CAAC;AAG9E,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAsBpF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrE,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACxC,OAAO,CAAC,OAAO,CAAC,CAuJlB"}
1
+ {"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/transaction/fixedScript/verifyTransaction.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAoC,MAAM,iBAAiB,CAAC;AAG9E,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAsBpF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrE,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACxC,OAAO,CAAC,OAAO,CAAC,CAiLlB"}