@bitgo/sdk-core 38.0.0 → 38.3.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 (100) hide show
  1. package/dist/src/account-lib/baseCoin/enum.d.ts +23 -22
  2. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
  3. package/dist/src/account-lib/baseCoin/enum.js +27 -23
  4. package/dist/src/bitgo/defi/defiVault.d.ts +39 -9
  5. package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
  6. package/dist/src/bitgo/defi/defiVault.js +137 -8
  7. package/dist/src/bitgo/defi/iDefiVault.d.ts +24 -3
  8. package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -1
  9. package/dist/src/bitgo/defi/iDefiVault.js +1 -1
  10. package/dist/src/bitgo/enterprise/enterprise.d.ts +6 -0
  11. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
  12. package/dist/src/bitgo/enterprise/enterprise.js +9 -1
  13. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +3 -0
  14. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
  15. package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
  16. package/dist/src/bitgo/index.d.ts +1 -0
  17. package/dist/src/bitgo/index.d.ts.map +1 -1
  18. package/dist/src/bitgo/index.js +2 -1
  19. package/dist/src/bitgo/keychain/iKeychains.d.ts +12 -0
  20. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  21. package/dist/src/bitgo/keychain/iKeychains.js +1 -1
  22. package/dist/src/bitgo/keychain/keychains.d.ts +15 -3
  23. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  24. package/dist/src/bitgo/keychain/keychains.js +32 -14
  25. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
  26. package/dist/src/bitgo/pendingApproval/pendingApproval.js +1 -1
  27. package/dist/src/bitgo/safe/iSafe.d.ts +85 -0
  28. package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -0
  29. package/dist/src/bitgo/safe/iSafe.js +3 -0
  30. package/dist/src/bitgo/safe/iSafes.d.ts +86 -0
  31. package/dist/src/bitgo/safe/iSafes.d.ts.map +1 -0
  32. package/dist/src/bitgo/safe/iSafes.js +3 -0
  33. package/dist/src/bitgo/safe/index.d.ts +5 -0
  34. package/dist/src/bitgo/safe/index.d.ts.map +1 -0
  35. package/dist/src/bitgo/safe/index.js +21 -0
  36. package/dist/src/bitgo/safe/safe.d.ts +66 -0
  37. package/dist/src/bitgo/safe/safe.d.ts.map +1 -0
  38. package/dist/src/bitgo/safe/safe.js +96 -0
  39. package/dist/src/bitgo/safe/safes.d.ts +104 -0
  40. package/dist/src/bitgo/safe/safes.d.ts.map +1 -0
  41. package/dist/src/bitgo/safe/safes.js +294 -0
  42. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  43. package/dist/src/bitgo/tss/common.js +3 -1
  44. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  45. package/dist/src/bitgo/utils/mpcUtils.js +13 -6
  46. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  47. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +3 -1
  48. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +5 -2
  49. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  50. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  51. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +1 -0
  52. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  53. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +1 -1
  54. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +3 -2
  55. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  56. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +15 -14
  57. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +1 -1
  58. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -1
  59. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +6 -3
  60. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +1 -0
  61. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  62. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +1 -1
  63. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +21 -2
  64. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  65. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +108 -14
  66. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts +1 -1
  67. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts.map +1 -1
  68. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.js +6 -3
  69. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
  70. package/dist/src/bitgo/utils/tss/recipientUtils.js +2 -1
  71. package/dist/src/bitgo/wallet/BuildParams.d.ts +30 -0
  72. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
  73. package/dist/src/bitgo/wallet/BuildParams.js +27 -2
  74. package/dist/src/bitgo/wallet/iWallet.d.ts +54 -0
  75. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  76. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  77. package/dist/src/bitgo/wallet/iWallets.d.ts +48 -1
  78. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  79. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  80. package/dist/src/bitgo/wallet/wallet.d.ts +24 -1
  81. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  82. package/dist/src/bitgo/wallet/wallet.js +218 -3
  83. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  84. package/dist/src/bitgo/wallet/wallets.js +3 -1
  85. package/dist/src/index.d.ts +1 -1
  86. package/dist/src/index.d.ts.map +1 -1
  87. package/dist/src/index.js +1 -1
  88. package/dist/test/unit/bitgo/defi/defiVault.js +336 -132
  89. package/dist/test/unit/bitgo/safe/safe.d.ts +2 -0
  90. package/dist/test/unit/bitgo/safe/safe.d.ts.map +1 -0
  91. package/dist/test/unit/bitgo/safe/safe.js +134 -0
  92. package/dist/test/unit/bitgo/safe/safes.d.ts +2 -0
  93. package/dist/test/unit/bitgo/safe/safes.d.ts.map +1 -0
  94. package/dist/test/unit/bitgo/safe/safes.js +297 -0
  95. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +246 -1
  96. package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +2 -1
  97. package/dist/test/unit/bitgo/wallet/BuildParams.js +28 -1
  98. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.js +8 -1
  99. package/dist/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +4 -4
@@ -155,24 +155,26 @@ class Keychains {
155
155
  return changedKeys;
156
156
  }
157
157
  /**
158
- * Helper function to determine the encryption version of a ciphertext by parsing it as JSON and checking the "v" field.
159
- * Return undefined if the ciphertext is not a valid JSON or does not contain a supported "v" field.
158
+ * Determine the encryption version of a ciphertext by inspecting its "v" field.
159
+ * - v1 (SJCL / PBKDF2-SHA256 + AES-256-CCM): "v" absent or explicitly 1
160
+ * - v2 (Argon2id + AES-256-GCM): "v" === 2
161
+ * Throws on unrecognized values so callers cannot silently mis-handle unknown envelopes.
160
162
  */
161
163
  getEncryptionVersion(ciphertext) {
164
+ let envelope;
162
165
  try {
163
- const envelope = JSON.parse(ciphertext);
164
- switch (envelope.v) {
165
- case 1:
166
- return 1;
167
- case 2:
168
- return 2;
169
- default:
170
- return undefined;
171
- }
166
+ envelope = JSON.parse(ciphertext);
167
+ }
168
+ catch (e) {
169
+ throw new Error(`Failed to parse ciphertext envelope: ${e.message}`);
170
+ }
171
+ if (envelope.v === 2) {
172
+ return 2;
172
173
  }
173
- catch (_) {
174
- return undefined;
174
+ if (envelope.v === undefined || envelope.v === 1) {
175
+ return 1;
175
176
  }
177
+ throw new Error(`Unrecognized encryption version: ${String(envelope.v)}`);
176
178
  }
177
179
  /**
178
180
  * Update the password used to decrypt a single keychain, with support for v2 (Argon2id) envelopes.
@@ -210,6 +212,19 @@ class Keychains {
210
212
  throw new Error(`failed to update keychain password: ${errorDetail}`);
211
213
  }
212
214
  }
215
+ /**
216
+ * Decrypt an encrypted private key with `passphrase` and re-encrypt it as a v2
217
+ * (Argon2id + AES-256-GCM) envelope with the same passphrase.
218
+ *
219
+ * Used to upgrade legacy v1 (SJCL) envelopes to v2 without changing the passphrase.
220
+ * Callers that need to try a fallback passphrase (e.g. an original passphrase from
221
+ * before a password rotation) should handle that themselves — this primitive does one
222
+ * thing and lets decryption errors surface directly.
223
+ */
224
+ async reencryptAsV2(encryptedPrv, passphrase) {
225
+ const prv = await this.bitgo.decrypt({ input: encryptedPrv, password: passphrase });
226
+ return this.bitgo.encrypt({ input: prv, password: passphrase, encryptionVersion: 2 });
227
+ }
213
228
  /**
214
229
  * Create a public/private key pair
215
230
  * @param params - optional params
@@ -238,6 +253,7 @@ class Keychains {
238
253
  'originalPasscodeEncryptionCode',
239
254
  'enterprise',
240
255
  'derivedFromParentWithSeed',
256
+ 'safeId',
241
257
  ]);
242
258
  if (!_.isUndefined(params.disableKRSEmail)) {
243
259
  if (!_.isBoolean(params.disableKRSEmail)) {
@@ -272,6 +288,7 @@ class Keychains {
272
288
  coinSpecific: params.coinSpecific,
273
289
  webauthnDevices: params.webauthnDevices,
274
290
  webauthnInfo: params.webauthnInfo,
291
+ safeId: params.safeId,
275
292
  })
276
293
  .result();
277
294
  }
@@ -350,6 +367,7 @@ class Keychains {
350
367
  retrofit: params.retrofit,
351
368
  webauthnInfo: params.webauthnInfo,
352
369
  encryptionVersion: params.encryptionVersion,
370
+ safeId: params.safeId,
353
371
  });
354
372
  }
355
373
  async recreateMpc(params) {
@@ -563,4 +581,4 @@ class Keychains {
563
581
  }
564
582
  }
565
583
  exports.Keychains = Keychains;
566
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2tleWNoYWluL2tleWNoYWlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxvREFBNEI7QUFDNUIsMENBQTRCO0FBQzVCLHFEQUF1QztBQUd2QyxvQ0FBdUc7QUFtQnZHLGlEQUF1RjtBQUd2RixNQUFhLFNBQVM7SUFJcEIsWUFBWSxLQUFnQixFQUFFLFFBQW1CO1FBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUEwQjtRQUNsQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1RixD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QztZQUNOLDRDQUE0QztZQUM1QyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixNQUFNLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2IsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQ3RDLEtBQUssRUFBRSxNQUFNO2dCQUNiLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjthQUM1QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzNDLElBQUksQ0FBQztZQUNKLFlBQVk7WUFDWixHQUFHO1lBQ0gsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1NBQ3BCLENBQUM7YUFDRCxNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQWtCO1FBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRjtBQXhrQkQsOEJBd2tCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRzc1NldHRpbmdzIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IElCYXNlQ29pbiwgS2V5Y2hhaW5zVHJpcGxldCwgS2V5UGFpciB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBkZWNvZGVPckVsc2UsIEVDRFNBVXRpbHMsIEVERFNBVXRpbHMsIGdlbmVyYXRlUmFuZG9tUGFzc3dvcmQsIFJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBBZGRLZXljaGFpbk9wdGlvbnMsXG4gIEFwaUtleVNoYXJlLFxuICBDaGFuZ2VkS2V5Y2hhaW5zLFxuICBDcmVhdGVCYWNrdXBPcHRpb25zLFxuICBDcmVhdGVCaXRHb09wdGlvbnMsXG4gIENyZWF0ZU1wY09wdGlvbnMsXG4gIEdldEtleWNoYWluT3B0aW9ucyxcbiAgR2V0S2V5c0ZvclNpZ25pbmdPcHRpb25zLFxuICBJS2V5Y2hhaW5zLFxuICBLZXljaGFpbixcbiAgTGlzdEtleWNoYWluT3B0aW9ucyxcbiAgTGlzdEtleWNoYWluc1Jlc3VsdCxcbiAgUmVjcmVhdGVNcGNPcHRpb25zLFxuICBSb3RhdGVLZXljaGFpbk9wdGlvbnMsXG4gIFVwZGF0ZVBhc3N3b3JkT3B0aW9ucyxcbiAgVXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZE9wdGlvbnMsXG59IGZyb20gJy4vaUtleWNoYWlucyc7XG5pbXBvcnQgeyBCaXRHb0tleUZyb21PdmNTaGFyZXMsIEJpdEdvVG9PdmNKU09OLCBPdmNUb0JpdEdvSlNPTiB9IGZyb20gJy4vb3ZjSnNvbkNvZGVjJztcbmltcG9ydCB7IEVuY3J5cHRpb25WZXJzaW9uIH0gZnJvbSAnLi4vLi4vYXBpJztcblxuZXhwb3J0IGNsYXNzIEtleWNoYWlucyBpbXBsZW1lbnRzIElLZXljaGFpbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUNvaW46IElCYXNlQ29pbjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luKSB7XG4gICAgdGhpcy5iaXRnbyA9IGJpdGdvO1xuICAgIHRoaXMuYmFzZUNvaW4gPSBiYXNlQ29pbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBrZXljaGFpbiBieSBJRFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMuaWRcbiAgICogQHBhcmFtIHBhcmFtcy54cHViIChvcHRpb25hbClcbiAgICogQHBhcmFtIHBhcmFtcy5ldGhBZGRyZXNzIChvcHRpb25hbClcbiAgICogQHBhcmFtIHBhcmFtcy5yZXFJZCAob3B0aW9uYWwpXG4gICAqL1xuICBhc3luYyBnZXQocGFyYW1zOiBHZXRLZXljaGFpbk9wdGlvbnMpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFsneHB1YicsICdldGhBZGRyZXNzJ10pO1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLmlkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpZCBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHBhcmFtcy5pZDtcbiAgICBpZiAocGFyYW1zLnJlcUlkKSB7XG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocGFyYW1zLnJlcUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYmFzZUNvaW4udXJsKCcva2V5LycgKyBlbmNvZGVVUklDb21wb25lbnQoaWQpKSkucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogbGlzdCB0aGUgdXNlcnMga2V5Y2hhaW5zXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5saW1pdCAtIE1heCBudW1iZXIgb2YgcmVzdWx0cyBpbiBhIHNpbmdsZSBjYWxsLlxuICAgKiBAcGFyYW0gcGFyYW1zLnByZXZJZCAtIENvbnRpbnVlIGl0ZXJhdGluZyAocHJvdmlkZWQgYnkgbmV4dEJhdGNoUHJldklkIGluIHRoZSBwcmV2aW91cyBsaXN0KVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIGxpc3QocGFyYW1zOiBMaXN0S2V5Y2hhaW5PcHRpb25zID0ge30pOiBQcm9taXNlPExpc3RLZXljaGFpbnNSZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeU9iamVjdDogYW55ID0ge307XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zLmxpbWl0KSkge1xuICAgICAgaWYgKCFfLmlzTnVtYmVyKHBhcmFtcy5saW1pdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGxpbWl0IGFyZ3VtZW50LCBleHBlY3RpbmcgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBxdWVyeU9iamVjdC5saW1pdCA9IHBhcmFtcy5saW1pdDtcbiAgICB9XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5wcmV2SWQpKSB7XG4gICAgICBpZiAoIV8uaXNTdHJpbmcocGFyYW1zLnByZXZJZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHByZXZJZCBhcmd1bWVudCwgZXhwZWN0aW5nIHN0cmluZycpO1xuICAgICAgfVxuICAgICAgcXVlcnlPYmplY3QucHJldklkID0gcGFyYW1zLnByZXZJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iaXRnby5nZXQodGhpcy5iYXNlQ29pbi51cmwoJy9rZXknKSkucXVlcnkocXVlcnlPYmplY3QpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgZGVjcnlwdGlvbiBwYXNzd29yZCBmb3IgYWxsIHBvc3NpYmxlIGtleWNoYWlucyBhc3NvY2lhdGVkIHdpdGggYSB1c2VyLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggYWxsIGtleXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLCBkZWNyeXB0c1xuICAgKiB0aGVtIHdpdGggdGhlIG9sZCBwYXNzd29yZCBhbmQgcmUtZW5jcnlwdHMgdGhlbSB3aXRoIHRoZSBuZXcgcGFzc3dvcmQuXG4gICAqXG4gICAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgdXNlciBjaGFuZ2VzIHRoZWlyIGxvZ2luIHBhc3N3b3JkLCBhbmQgYXJlIGV4cGVjdGluZ1xuICAgKiB0aGF0IHRoZWlyIHdhbGxldCBwYXNzd29yZHMgYXJlIGNoYW5nZWQgdG8gbWF0Y2ggdGhlIG5ldyBsb2dpbiBwYXNzd29yZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLm9sZFBhc3N3b3JkIC0gVGhlIG9sZCBwYXNzd29yZCB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAgICogQHBhcmFtIHBhcmFtcy5uZXdQYXNzd29yZCAtIFRoZSBuZXcgcGFzc3dvcmQgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGluZyB0aGUga2V5XG4gICAqIEByZXR1cm5zIGNoYW5nZWRLZXlzIE9iamVjdCAtIGUuZy46XG4gICAqICB7XG4gICAqICAgIHhwdWIxOiBlbmNyeXB0ZWRQcnYsXG4gICAqICAgIC4uLlxuICAgKiAgfVxuICAgKi9cbiAgYXN5bmMgdXBkYXRlUGFzc3dvcmQocGFyYW1zOiBVcGRhdGVQYXNzd29yZE9wdGlvbnMpOiBQcm9taXNlPENoYW5nZWRLZXljaGFpbnM+IHtcbiAgICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ29sZFBhc3N3b3JkJywgJ25ld1Bhc3N3b3JkJ10sIFtdKTtcbiAgICBjb25zdCBjaGFuZ2VkS2V5czogQ2hhbmdlZEtleWNoYWlucyA9IHt9O1xuICAgIGxldCBwcmV2SWQ7XG4gICAgbGV0IGtleXNMZWZ0ID0gdHJ1ZTtcbiAgICB3aGlsZSAoa2V5c0xlZnQpIHtcbiAgICAgIGNvbnN0IHJlc3VsdDogTGlzdEtleWNoYWluc1Jlc3VsdCA9IGF3YWl0IHRoaXMubGlzdCh7IGxpbWl0OiA1MDAsIHByZXZJZCB9KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc3VsdC5rZXlzKSB7XG4gICAgICAgIGNvbnN0IG9sZEVuY3J5cHRlZFBydiA9IGtleS5lbmNyeXB0ZWRQcnY7XG4gICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKG9sZEVuY3J5cHRlZFBydikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRLZXljaGFpbiA9IGF3YWl0IHRoaXMudXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZCh7XG4gICAgICAgICAgICBrZXljaGFpbjoga2V5LFxuICAgICAgICAgICAgb2xkUGFzc3dvcmQ6IHBhcmFtcy5vbGRQYXNzd29yZCxcbiAgICAgICAgICAgIG5ld1Bhc3N3b3JkOiBwYXJhbXMubmV3UGFzc3dvcmQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHVwZGF0ZWRLZXljaGFpbi5lbmNyeXB0ZWRQcnYpIHtcbiAgICAgICAgICAgIC8vIEJvdGggVFNTIGFuZCBtdWx0aS11c2VyLW9mYyBrZXlzIGhhdmUgbXVsdGlwbGUgcHVibGljIGtleXMgaW4gdGhlaXIga2V5IGRvY3VtZW50IGFuZCB0aHVzIG5lZWQgdG8gdXNlIG9iamVjdElEXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkS2V5SWRlbnRpZmllciA9XG4gICAgICAgICAgICAgIHVwZGF0ZWRLZXljaGFpbi50eXBlID09PSAndHNzJyB8fCBLZXljaGFpbnMuaXNNdWx0aVVzZXJLZXkodXBkYXRlZEtleWNoYWluKVxuICAgICAgICAgICAgICAgID8gdXBkYXRlZEtleWNoYWluLmlkXG4gICAgICAgICAgICAgICAgOiB1cGRhdGVkS2V5Y2hhaW4ucHViO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWRLZXlJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIGNoYW5nZWRLZXlzW2NoYW5nZWRLZXlJZGVudGlmaWVyXSA9IHVwZGF0ZWRLZXljaGFpbi5lbmNyeXB0ZWRQcnY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWYgdGhlIHBhc3N3b3JkIHdhcyBpbmNvcnJlY3QsIHNpbGVuY2UgdGhlIGVycm9yLCB0aHJvdyBvdGhlcndpc2UuXG4gICAgICAgICAgLy8gdXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZCB3cmFwcyBhIHdyb25nLXBhc3N3b3JkIChvciBjb3JydXB0IGlucHV0KSBmYWlsdXJlIGFzXG4gICAgICAgICAgLy8gJ2ZhaWxlZCB0byB1cGRhdGUga2V5Y2hhaW4gcGFzc3dvcmQ6IC4uLicsIHNvIHRyZWF0IHRoYXQgYXMgYSBza2lwLWFibGUgZXJyb3IuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWUubWVzc2FnZS5pbmNsdWRlcygncHJpdmF0ZSBrZXkgaXMgaW5jb3JyZWN0JykgJiZcbiAgICAgICAgICAgICFlLm1lc3NhZ2UuaW5jbHVkZXMoJ2ZhaWxlZCB0byB1cGRhdGUga2V5Y2hhaW4gcGFzc3dvcmQnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQubmV4dEJhdGNoUHJldklkKSB7XG4gICAgICAgIHByZXZJZCA9IHJlc3VsdC5uZXh0QmF0Y2hQcmV2SWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzTGVmdCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZEtleXM7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgZW5jcnlwdGlvbiB2ZXJzaW9uIG9mIGEgY2lwaGVydGV4dCBieSBwYXJzaW5nIGl0IGFzIEpTT04gYW5kIGNoZWNraW5nIHRoZSBcInZcIiBmaWVsZC5cbiAgICogUmV0dXJuIHVuZGVmaW5lZCBpZiB0aGUgY2lwaGVydGV4dCBpcyBub3QgYSB2YWxpZCBKU09OIG9yIGRvZXMgbm90IGNvbnRhaW4gYSBzdXBwb3J0ZWQgXCJ2XCIgZmllbGQuXG4gICAqL1xuICBwcml2YXRlIGdldEVuY3J5cHRpb25WZXJzaW9uKGNpcGhlcnRleHQ6IHN0cmluZyk6IEVuY3J5cHRpb25WZXJzaW9uIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW52ZWxvcGUgPSBKU09OLnBhcnNlKGNpcGhlcnRleHQpO1xuICAgICAgc3dpdGNoIChlbnZlbG9wZS52KSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBwYXNzd29yZCB1c2VkIHRvIGRlY3J5cHQgYSBzaW5nbGUga2V5Y2hhaW4sIHdpdGggc3VwcG9ydCBmb3IgdjIgKEFyZ29uMmlkKSBlbnZlbG9wZXMuXG4gICAqIEF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBhbmQgcHJlc2VydmVzIHRoZSBlbnZlbG9wZSB2ZXJzaW9uIOKAlCBhIHYyLWVuY3J5cHRlZCBrZXkgc3RheXMgdjIgYWZ0ZXIgdGhlIHBhc3N3b3JkIGNoYW5nZS5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLmtleWNoYWluIC0gVGhlIGtleWNoYWluIHdob3NlIHBhc3N3b3JkIHNob3VsZCBiZSB1cGRhdGVkXG4gICAqIEBwYXJhbSBwYXJhbXMub2xkUGFzc3dvcmQgLSBUaGUgb2xkIHBhc3N3b3JkIHVzZWQgZm9yIGVuY3J5cHRpbmcgdGhlIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zLm5ld1Bhc3N3b3JkIC0gVGhlIG5ldyBwYXNzd29yZCB0byBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAgICogQHJldHVybnMge1Byb21pc2U8S2V5Y2hhaW4+fVxuICAgKi9cbiAgYXN5bmMgdXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZChwYXJhbXM6IFVwZGF0ZVNpbmdsZUtleWNoYWluUGFzc3dvcmRPcHRpb25zID0ge30pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKHBhcmFtcy5vbGRQYXNzd29yZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgb2xkIHBhc3N3b3JkIHRvIGJlIGEgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKHBhcmFtcy5uZXdQYXNzd29yZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgbmV3IHBhc3N3b3JkIHRvIGJlIGEgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzT2JqZWN0KHBhcmFtcy5rZXljaGFpbikgfHwgIV8uaXNTdHJpbmcocGFyYW1zLmtleWNoYWluLmVuY3J5cHRlZFBydikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQga2V5Y2hhaW4gdG8gYmUgYW4gb2JqZWN0IHdpdGggYW4gZW5jcnlwdGVkUHJ2IHByb3BlcnR5Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2xkRW5jcnlwdGVkUHJ2ID0gcGFyYW1zLmtleWNoYWluLmVuY3J5cHRlZFBydjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjcnlwdGVkUHJ2ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHsgaW5wdXQ6IG9sZEVuY3J5cHRlZFBydiwgcGFzc3dvcmQ6IHBhcmFtcy5vbGRQYXNzd29yZCB9KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRpb25WZXJzaW9uID0gdGhpcy5nZXRFbmNyeXB0aW9uVmVyc2lvbihvbGRFbmNyeXB0ZWRQcnYpO1xuICAgICAgY29uc3QgbmV3RW5jcnlwdGVkUHJ2ID0gYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IGRlY3J5cHRlZFBydixcbiAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5uZXdQYXNzd29yZCxcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfLmFzc2lnbih7fSwgcGFyYW1zLmtleWNoYWluLCB7IGVuY3J5cHRlZFBydjogbmV3RW5jcnlwdGVkUHJ2IH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGNhdGNoaW5nIGFuIGVycm9yIGhlcmUgbWVhbnMgdGhhdCB0aGUgcGFzc3dvcmQgd2FzIGluY29ycmVjdCBvciwgbGVzcyBsaWtlbHksIHRoZSBpbnB1dCB0byBkZWNyeXB0IGlzIGNvcnJ1cHRlZFxuICAgICAgY29uc3QgZXJyb3JEZXRhaWwgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB1cGRhdGUga2V5Y2hhaW4gcGFzc3dvcmQ6ICR7ZXJyb3JEZXRhaWx9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHB1YmxpYy9wcml2YXRlIGtleSBwYWlyXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBvcHRpb25hbCBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5zZWVkIG9wdGlvbmFsIC0gc2VlZCB0byB1c2UgZm9yIGtleXBhaXIgZ2VuZXJhdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zLmlzUm9vdEtleSBvcHRpb25hbCAtIHdoZXRoZXIgdGhlIHJlc3VsdGluZyBrZXlwYWlyIHNob3VsZCBiZSBhIHJvb3Qga2V5XG4gICAqIEByZXR1cm5zIHtLZXlQYWlyfSAtIHRoZSBnZW5lcmF0ZWQga2V5cGFpclxuICAgKi9cbiAgY3JlYXRlKHBhcmFtczogeyBzZWVkPzogQnVmZmVyOyBpc1Jvb3RLZXk/OiBib29sZWFuIH0gPSB7fSk6IEtleVBhaXIge1xuICAgIGlmIChwYXJhbXM/LmlzUm9vdEtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuYmFzZUNvaW4uZ2VuZXJhdGVSb290S2V5UGFpcihwYXJhbXMuc2VlZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJhc2VDb2luLmdlbmVyYXRlS2V5UGFpcihwYXJhbXMuc2VlZCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEga2V5Y2hhaW4gdG8gQml0R28ncyByZWNvcmRzXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGFkZChwYXJhbXM6IEFkZEtleWNoYWluT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICBjb21tb24udmFsaWRhdGVQYXJhbXMoXG4gICAgICBwYXJhbXMsXG4gICAgICBbXSxcbiAgICAgIFtcbiAgICAgICAgJ3B1YicsXG4gICAgICAgICdlbmNyeXB0ZWRQcnYnLFxuICAgICAgICAna2V5VHlwZScsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3NvdXJjZScsXG4gICAgICAgICdvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUnLFxuICAgICAgICAnZW50ZXJwcmlzZScsXG4gICAgICAgICdkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkJyxcbiAgICAgIF1cbiAgICApO1xuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5kaXNhYmxlS1JTRW1haWwpKSB7XG4gICAgICBpZiAoIV8uaXNCb29sZWFuKHBhcmFtcy5kaXNhYmxlS1JTRW1haWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkaXNhYmxlS1JTRW1haWwgYXJndW1lbnQsIGV4cGVjdGluZyBib29sZWFuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5yZXFJZCkge1xuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHBhcmFtcy5yZXFJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYmFzZUNvaW4udXJsKCcva2V5JykpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIHB1YjogcGFyYW1zLnB1YixcbiAgICAgICAgY29tbW9uUHViOiBwYXJhbXMuY29tbW9uUHViLFxuICAgICAgICBjb21tb25LZXljaGFpbjogcGFyYW1zLmNvbW1vbktleWNoYWluLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IHBhcmFtcy5lbmNyeXB0ZWRQcnYsXG4gICAgICAgIHR5cGU6IHBhcmFtcy50eXBlLFxuICAgICAgICBrZXlUeXBlOiBwYXJhbXMua2V5VHlwZSxcbiAgICAgICAgc291cmNlOiBwYXJhbXMuc291cmNlLFxuICAgICAgICBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICAgIGVudGVycHJpc2U6IHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiBwYXJhbXMuZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCxcbiAgICAgICAgZGlzYWJsZUtSU0VtYWlsOiBwYXJhbXMuZGlzYWJsZUtSU0VtYWlsLFxuICAgICAgICBrcnNTcGVjaWZpYzogcGFyYW1zLmtyc1NwZWNpZmljLFxuICAgICAgICBrZXlTaGFyZXM6IHBhcmFtcy5rZXlTaGFyZXMsXG4gICAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IHBhcmFtcy51c2VyR1BHUHVibGljS2V5LFxuICAgICAgICBiYWNrdXBHUEdQdWJsaWNLZXk6IHBhcmFtcy5iYWNrdXBHUEdQdWJsaWNLZXksXG4gICAgICAgIGFsZ29Vc2VkOiBwYXJhbXMuYWxnb1VzZWQsXG4gICAgICAgIGlzRGlzdHJpYnV0ZWRDdXN0b2R5OiBwYXJhbXMuaXNEaXN0cmlidXRlZEN1c3RvZHksXG4gICAgICAgIGlzTVBDdjI6IHBhcmFtcy5pc01QQ3YyLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHBhcmFtcy5jb2luU3BlY2lmaWMsXG4gICAgICAgIHdlYmF1dGhuRGV2aWNlczogcGFyYW1zLndlYmF1dGhuRGV2aWNlcyxcbiAgICAgICAgd2ViYXV0aG5JbmZvOiBwYXJhbXMud2ViYXV0aG5JbmZvLFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBCaXRHbyBrZXlcbiAgICogQHBhcmFtIHBhcmFtcyAoZW1wdHkpXG4gICAqL1xuICBhc3luYyBjcmVhdGVCaXRHbyhwYXJhbXM6IENyZWF0ZUJpdEdvT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHBhcmFtcy5zb3VyY2UgPSAnYml0Z28nO1xuXG4gICAgdGhpcy5iYXNlQ29pbi5wcmVDcmVhdGVCaXRHbyhwYXJhbXMgYXMgYW55KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hZGQocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBiYWNrdXAga2V5XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5wcm92aWRlciAob3B0aW9uYWwpXG4gICAqL1xuICBhc3luYyBjcmVhdGVCYWNrdXAocGFyYW1zOiBDcmVhdGVCYWNrdXBPcHRpb25zID0ge30pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgcGFyYW1zLnNvdXJjZSA9ICdiYWNrdXAnO1xuXG4gICAgY29uc3QgaXNUc3NCYWNrdXBLZXkgPSBwYXJhbXMucHJ2ICYmIChwYXJhbXMuY29tbW9uS2V5Y2hhaW4gfHwgcGFyYW1zLmNvbW1vblB1Yik7XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMucHJvdmlkZXIpICYmICFpc1Rzc0JhY2t1cEtleSkge1xuICAgICAgLy8gaWYgdGhlIHByb3ZpZGVyIGlzIHVuZGVmaW5lZCwgd2UgZ2VuZXJhdGUgYSBsb2NhbCBrZXkgYW5kIGFkZCB0aGUgc291cmNlIGRldGFpbHNcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICBfLmV4dGVuZChwYXJhbXMsIGtleSk7XG4gICAgICBpZiAocGFyYW1zLnBhc3NwaHJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBfLmV4dGVuZChwYXJhbXMsIHtcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGF3YWl0IHRoaXMuYml0Z28uZW5jcnlwdCh7XG4gICAgICAgICAgICBpbnB1dDoga2V5LnBydixcbiAgICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNlcnZlclJlc3BvbnNlID0gYXdhaXQgdGhpcy5hZGQocGFyYW1zKTtcbiAgICByZXR1cm4gXy5leHRlbmQoe30sIHNlcnZlclJlc3BvbnNlLCBfLnBpY2socGFyYW1zLCBbJ3BydicsICdlbmNyeXB0ZWRQcnYnLCAncHJvdmlkZXInLCAnc291cmNlJ10pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGtleXMgZm9yIHNpZ25pbmcgZnJvbSBhIHdhbGxldFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEtleWNoYWluW10+fVxuICAgKi9cbiAgYXN5bmMgZ2V0S2V5c0ZvclNpZ25pbmcocGFyYW1zOiBHZXRLZXlzRm9yU2lnbmluZ09wdGlvbnMgPSB7fSk6IFByb21pc2U8S2V5Y2hhaW5bXT4ge1xuICAgIGlmICghXy5pc09iamVjdChwYXJhbXMud2FsbGV0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIHdhbGxldCcpO1xuICAgIH1cbiAgICBjb25zdCB3YWxsZXQgPSBwYXJhbXMud2FsbGV0O1xuICAgIGNvbnN0IHJlcUlkID0gcGFyYW1zLnJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgY29uc3QgaWRzID0gd2FsbGV0LmJhc2VDb2luLmtleUlkc0ZvclNpZ25pbmcoKTtcbiAgICBjb25zdCBrZXljaGFpblF1ZXJpZXNCbHVlYmlyZHMgPSBpZHMubWFwKChpZCkgPT4gdGhpcy5nZXQoeyBpZDogd2FsbGV0LmtleUlkcygpW2lkXSwgcmVxSWQgfSkpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChrZXljaGFpblF1ZXJpZXNCbHVlYmlyZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbmQgc3RvcmUgTVBDIGtleWNoYWlucyB3aXRoIEJpdEdvLlxuICAgKiBAcGFyYW0gcGFyYW1zIHBhc3NwaHJhc2UgdXNlZCB0byBlbmNyeXB0IHNlY3JldCBtYXRlcmlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0Pn0gbmV3bHkgY3JlYXRlZCBVc2VyLCBCYWNrdXAsIGFuZCBCaXRHbyBrZXlzXG4gICAqL1xuICBhc3luYyBjcmVhdGVNcGMocGFyYW1zOiBDcmVhdGVNcGNPcHRpb25zKTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgaWYgKHBhcmFtcy5tdWx0aXNpZ1R5cGUgIT09ICd0c3MnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG11bHRpLXNpZyB0eXBlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHNzU2V0dGluZ3M6IFRzc1NldHRpbmdzID0gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKCcvYXBpL3YyL3Rzcy9zZXR0aW5ncycpKS5yZXN1bHQoKTtcbiAgICBjb25zdCBtdWx0aXNpZ1R5cGVWZXJzaW9uID1cbiAgICAgIHRzc1NldHRpbmdzLmNvaW5TZXR0aW5nc1t0aGlzLmJhc2VDb2luLmdldEZhbWlseSgpXT8ud2FsbGV0Q3JlYXRpb25TZXR0aW5ncz8ubXVsdGlTaWdUeXBlVmVyc2lvbjtcblxuICAgIGxldCBNcGNVdGlscztcbiAgICBpZiAodGhpcy5iYXNlQ29pbi5nZXRNUENBbGdvcml0aG0oKSA9PT0gJ2VkZHNhJykge1xuICAgICAgTXBjVXRpbHMgPSBtdWx0aXNpZ1R5cGVWZXJzaW9uID09PSAnTVBDdjInID8gRUREU0FVdGlscy5FZGRzYU1QQ3YyVXRpbHMgOiBFRERTQVV0aWxzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIE1wY1V0aWxzID0gbXVsdGlzaWdUeXBlVmVyc2lvbiA9PT0gJ01QQ3YyJyA/IEVDRFNBVXRpbHMuRWNkc2FNUEN2MlV0aWxzIDogRUNEU0FVdGlscy5FY2RzYVV0aWxzO1xuICAgIH1cblxuICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IE1wY1V0aWxzKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4pO1xuICAgIHJldHVybiBhd2FpdCBtcGNVdGlscy5jcmVhdGVLZXljaGFpbnMoe1xuICAgICAgcGFzc3BocmFzZTogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBlbnRlcnByaXNlOiBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgIHJldHJvZml0OiBwYXJhbXMucmV0cm9maXQsXG4gICAgICB3ZWJhdXRobkluZm86IHBhcmFtcy53ZWJhdXRobkluZm8sXG4gICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVjcmVhdGVNcGMocGFyYW1zOiBSZWNyZWF0ZU1wY09wdGlvbnMpOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBhc3NlcnQocGFyYW1zLmNvaW4sIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBjb2luJykpO1xuICAgIGFzc2VydChwYXJhbXMud2FsbGV0SWQsIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSB3YWxsZXRJZCcpKTtcbiAgICBhc3NlcnQocGFyYW1zLm90cCwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIG90cCcpKTtcbiAgICBhc3NlcnQocGFyYW1zLnBhc3NwaHJhc2UsIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBwYXNzcGhyYXNlJykpO1xuXG4gICAgYXNzZXJ0KFxuICAgICAgcGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZFdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gZW5jcnlwdGVkV2FsbGV0UGFzc3BocmFzZScpXG4gICAgKTtcbiAgICBhc3NlcnQocGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZFVzZXJLZXksIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBlbmNyeXB0ZWRVc2VyS2V5JykpO1xuICAgIGFzc2VydChwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkQmFja3VwS2V5LCBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gZW5jcnlwdGVkQmFja3VwS2V5JykpO1xuXG4gICAgYXdhaXQgdGhpcy5iaXRnby5wb3N0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCgnL2FwaS92MS91c2VyL3VubG9jaycpKS5zZW5kKHsgb3RwOiBwYXJhbXMub3RwIH0pLnJlc3VsdCgpO1xuICAgIGNvbnN0IHsgcmVjb3ZlcnlJbmZvIH0gPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLm1pY3Jvc2VydmljZXNVcmwoYC9hcGkvdjIvJHtwYXJhbXMuY29pbn0vd2FsbGV0LyR7cGFyYW1zLndhbGxldElkfS9wYXNzY29kZXJlY292ZXJ5YCkpXG4gICAgICAucmVzdWx0KCk7XG5cbiAgICBpZiAoIXJlY292ZXJ5SW5mbyB8fCAhKCdwYXNzY29kZUVuY3J5cHRpb25Db2RlJyBpbiByZWNvdmVyeUluZm8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBnZXQgcmVjb3ZlcnkgaW5mbycpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY3J5cHRlZFdhbGxldFBhc3NwaHJhc2UgPSBhd2FpdCB0aGlzLmJpdGdvLmRlY3J5cHQoe1xuICAgICAgaW5wdXQ6IHBhcmFtcy5lbmNyeXB0ZWRNYXRlcmlhbC5lbmNyeXB0ZWRXYWxsZXRQYXNzcGhyYXNlLFxuICAgICAgcGFzc3dvcmQ6IHJlY292ZXJ5SW5mby5wYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkVXNlcktleSA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICBpbnB1dDogcGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZFVzZXJLZXksXG4gICAgICBwYXNzd29yZDogZGVjcnlwdGVkV2FsbGV0UGFzc3BocmFzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlY3J5cHRlZEJhY2t1cEtleSA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICBpbnB1dDogcGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZEJhY2t1cEtleSxcbiAgICAgIHBhc3N3b3JkOiBkZWNyeXB0ZWRXYWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTXBjKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICByZXRyb2ZpdDoge1xuICAgICAgICBkZWNyeXB0ZWRVc2VyS2V5LFxuICAgICAgICBkZWNyeXB0ZWRCYWNrdXBLZXksXG4gICAgICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHBhcnNlcyB0aGUgSlNPTiBkb3dubG9hZGVkIGZyb20gdGhlIE9WQyBmb3IgcGxhdGZvcm0gKEJpdEdvKSxcbiAgICogYW5kIGNyZWF0ZXMgYSBjb3JyZXNwb25kaW5nIFRTUyBCaXRHbyBrZXkuIEl0IGFsc28gcmV0dXJucyB0aGUgSlNPTiB0aGF0IG5lZWRzXG4gICAqIHRvIGJlIHVwbG9hZGVkIGJhY2sgdG8gdGhlIE9WQ3MgY29udGFpbmluZyB0aGUgQml0R28gLT4gT1ZDIHNoYXJlcy5cbiAgICogQHBhcmFtIG92Y091dHB1dEpzb24gSlNPTiBmb3JtYXQgb2YgdGhlIGZpbGUgZG93bmxvYWRlZCBmcm9tIHRoZSBPVkMgZm9yIHBsYXRmb3JtXG4gICAqIEBwYXJhbSBlbnRlcnByaXNlIE9wdGlvbmFsIGVudGVycHJpc2UgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXlcbiAgICogQHJldHVybnMge0JpdEdvS2V5RnJvbU92Y1NoYXJlc31cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVRzc0JpdEdvS2V5RnJvbU92Y1NoYXJlcyhvdmNPdXRwdXRKc29uOiB1bmtub3duLCBlbnRlcnByaXNlPzogc3RyaW5nKTogUHJvbWlzZTxCaXRHb0tleUZyb21PdmNTaGFyZXM+IHtcbiAgICBjb25zdCBkZWNvZGVkT3ZjT3V0cHV0ID0gZGVjb2RlT3JFbHNlKE92Y1RvQml0R29KU09OLm5hbWUsIE92Y1RvQml0R29KU09OLCBvdmNPdXRwdXRKc29uLCAoZXJyb3JzKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yKHMpIHBhcnNpbmcgT1ZDIEpTT046ICR7ZXJyb3JzfWApO1xuICAgIH0pO1xuXG4gICAgaWYgKGRlY29kZWRPdmNPdXRwdXQuc3RhdGUgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3RhdGUgZXhwZWN0ZWQgdG8gYmUgXCIxXCIuIFBsZWFzZSBjb21wbGV0ZSB0aGUgZmlyc3QgdHdvIE9WQyBvcGVyYXRpb25zJyk7XG4gICAgfVxuXG4gICAgLy8gT1ZDLTEgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBVc2VyIGtleVxuICAgIGNvbnN0IG92YzEgPSBkZWNvZGVkT3ZjT3V0cHV0Lm92Y1sxXTtcbiAgICAvLyBPVkMtMiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIEJhY2t1cCBrZXlcbiAgICBjb25zdCBvdmMyID0gZGVjb2RlZE92Y091dHB1dC5vdmNbMl07XG5cbiAgICBjb25zdCBrZXlTaGFyZXM6IEFwaUtleVNoYXJlW10gPSBbXG4gICAgICB7XG4gICAgICAgIGZyb206ICd1c2VyJyxcbiAgICAgICAgdG86ICdiaXRnbycsXG4gICAgICAgIHB1YmxpY1NoYXJlOiBvdmMxLm92Y1RvQml0Z29TaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgcHJpdmF0ZVNoYXJlOiBvdmMxLm92Y1RvQml0Z29TaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgICAgIHByaXZhdGVTaGFyZVByb29mOiBvdmMxLm92Y1RvQml0Z29TaGFyZS51U2lnLnRvU3RyaW5nKCkgPz8gJycsXG4gICAgICAgIHZzc1Byb29mOiBvdmMxLm92Y1RvQml0Z29TaGFyZS52c3NQcm9vZiA/PyAnJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZyb206ICdiYWNrdXAnLFxuICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgcHVibGljU2hhcmU6IG92YzIub3ZjVG9CaXRnb1NoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICBwcml2YXRlU2hhcmU6IG92YzIub3ZjVG9CaXRnb1NoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IG92YzIub3ZjVG9CaXRnb1NoYXJlLnVTaWcudG9TdHJpbmcoKSA/PyAnJyxcbiAgICAgICAgdnNzUHJvb2Y6IG92YzIub3ZjVG9CaXRnb1NoYXJlLnZzc1Byb29mID8/ICcnLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKS5hZGQoe1xuICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAga2V5U2hhcmVzLFxuICAgICAga2V5VHlwZTogJ3RzcycsXG4gICAgICB1c2VyR1BHUHVibGljS2V5OiBvdmMxLmdwZ1B1YktleSxcbiAgICAgIGJhY2t1cEdQR1B1YmxpY0tleTogb3ZjMi5ncGdQdWJLZXksXG4gICAgICBlbnRlcnByaXNlLFxuICAgIH0pO1xuICAgIGFzc2VydChrZXkua2V5U2hhcmVzKTtcbiAgICBhc3NlcnQoa2V5LmNvbW1vbktleWNoYWluKTtcbiAgICBhc3NlcnQoa2V5LndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3MpO1xuXG4gICAgY29uc3QgYml0Z29Ub1VzZXJTaGFyZSA9IGtleS5rZXlTaGFyZXMuZmluZChcbiAgICAgICh2YWx1ZTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSkgPT4gdmFsdWUuZnJvbSA9PT0gJ2JpdGdvJyAmJiB2YWx1ZS50byA9PT0gJ3VzZXInXG4gICAgKTtcbiAgICBhc3NlcnQoYml0Z29Ub1VzZXJTaGFyZSk7XG4gICAgYXNzZXJ0KGJpdGdvVG9Vc2VyU2hhcmUudnNzUHJvb2YpO1xuICAgIGFzc2VydChiaXRnb1RvVXNlclNoYXJlLnBhaWxsaWVyUHVibGljS2V5KTtcbiAgICBjb25zdCBiaXRnb1RvQmFja3VwU2hhcmUgPSBrZXkua2V5U2hhcmVzLmZpbmQoXG4gICAgICAodmFsdWU6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0pID0+IHZhbHVlLmZyb20gPT09ICdiaXRnbycgJiYgdmFsdWUudG8gPT09ICdiYWNrdXAnXG4gICAgKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cFNoYXJlKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cFNoYXJlLnZzc1Byb29mKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cFNoYXJlLnBhaWxsaWVyUHVibGljS2V5KTtcblxuICAgIC8vIENyZWF0ZSBKU09OIGRhdGEgd2l0aCBwbGF0Zm9ybSBzaGFyZXMgZm9yIE9WQy0xIGFuZCBPVkMtMlxuICAgIGNvbnN0IGJpdGdvVG9PdmNPdXRwdXQ6IEJpdEdvVG9PdmNKU09OID0ge1xuICAgICAgd2FsbGV0OiB7XG4gICAgICAgIC4uLmRlY29kZWRPdmNPdXRwdXQsXG4gICAgICAgIHBsYXRmb3JtOiB7XG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGtleS5jb21tb25LZXljaGFpbixcbiAgICAgICAgICB3YWxsZXRHcGdQdWJLZXlTaWdzOiBrZXkud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyxcbiAgICAgICAgICBvdmM6IHtcbiAgICAgICAgICAgIC8vIEJpdEdvIHRvIFVzZXIgKE9WQy0xKVxuICAgICAgICAgICAgMToge1xuICAgICAgICAgICAgICBiaXRnb1RvT3ZjU2hhcmU6IHtcbiAgICAgICAgICAgICAgICBpOiAxLFxuICAgICAgICAgICAgICAgIGo6IDMsXG4gICAgICAgICAgICAgICAgcHVibGljU2hhcmU6IGJpdGdvVG9Vc2VyU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZVNoYXJlOiBiaXRnb1RvVXNlclNoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgICAgICAgICBwYWlsbGllclB1YmxpY0tleTogYml0Z29Ub1VzZXJTaGFyZS5wYWlsbGllclB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICB2c3NQcm9vZjogYml0Z29Ub1VzZXJTaGFyZS52c3NQcm9vZixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBCaXRHbyB0byBCYWNrdXAgKE9WQy0yKVxuICAgICAgICAgICAgMjoge1xuICAgICAgICAgICAgICBiaXRnb1RvT3ZjU2hhcmU6IHtcbiAgICAgICAgICAgICAgICBpOiAyLFxuICAgICAgICAgICAgICAgIGo6IDMsXG4gICAgICAgICAgICAgICAgcHVibGljU2hhcmU6IGJpdGdvVG9CYWNrdXBTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlU2hhcmU6IGJpdGdvVG9CYWNrdXBTaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgICAgICAgICAgICAgcGFpbGxpZXJQdWJsaWNLZXk6IGJpdGdvVG9CYWNrdXBTaGFyZS5wYWlsbGllclB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICB2c3NQcm9vZjogYml0Z29Ub0JhY2t1cFNoYXJlLnZzc1Byb29mLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gTWFyayBpdCByZWFkeSBmb3IgbmV4dCBvcGVyYXRpb24sIHNob3VsZCBiZSAyXG4gICAgYml0Z29Ub092Y091dHB1dC53YWxsZXQuc3RhdGUgKz0gMTtcblxuICAgIGNvbnN0IG91dHB1dDogQml0R29LZXlGcm9tT3ZjU2hhcmVzID0ge1xuICAgICAgYml0R29LZXlJZDoga2V5LmlkLFxuICAgICAgYml0R29PdXRwdXRKc29uRm9yT3ZjOiBiaXRnb1RvT3ZjT3V0cHV0LFxuICAgIH07XG5cbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKEJpdEdvS2V5RnJvbU92Y1NoYXJlcy5uYW1lLCBCaXRHb0tleUZyb21PdmNTaGFyZXMsIG91dHB1dCwgKGVycm9ycykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBwcm9kdWNpbmcgdGhlIG91dHB1dDogJHtlcnJvcnN9YCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHVzZXIga2V5Y2hhaW4sIGVuY3J5cHQgdGhlIHByaXZhdGUga2V5IHdpdGggdGhlIHdhbGxldCBwYXNzcGhyYXNlIGFuZCBzdG9yZSBpdCBpbiBCaXRHby5cbiAgICogQHBhcmFtIHdhbGxldFBhc3NwaHJhc2VcbiAgICogQHJldHVybnMgS2V5Y2hhaW4gaW5jbHVkaW5nIHRoZSBkZWNyeXB0ZWQgcHJpdmF0ZSBrZXlcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVVzZXJLZXljaGFpbih3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmcsIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb24pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3Qga2V5Y2hhaW5zID0gdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKTtcbiAgICBjb25zdCBuZXdLZXljaGFpbiA9IGtleWNoYWlucy5jcmVhdGUoKTtcbiAgICBjb25zdCBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUgPSBnZW5lcmF0ZVJhbmRvbVBhc3N3b3JkKDUpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkUHJ2ID0gYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgaW5wdXQ6IG5ld0tleWNoYWluLnBydixcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihhd2FpdCBrZXljaGFpbnMuYWRkKHtcbiAgICAgICAgZW5jcnlwdGVkUHJ2LFxuICAgICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICAgIHB1YjogbmV3S2V5Y2hhaW4ucHViLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIH0pKSxcbiAgICAgIHBydjogbmV3S2V5Y2hhaW4ucHJ2LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUm90YXRlIGFuIG9mYyBtdWx0aS11c2VyLWtleWNoYWluIGJ5IHJlY3JlYXRpbmcgYSBuZXcga2V5cGFpciwgZW5jcnlwdCBpdCB1c2luZyB0aGUgdXNlciBwYXNzd29yZCBhbmQgc2VudCBpdCB0byBXUFxuICAgKiBUaGlzIGlzIG9ubHkgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IG9mYyBtdWx0aS11c2VyLXdhbGxldCdzIGtleSwgYW5kIHdpbGwgdGhyb3cgaWYgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBSZXF1aXJlcyAyZmEgYXV0aCBiZWZvcmUgY2FsbGluZy4gQ2FsbCB0aGUgYml0Z28udW5sb2NrKCkgU0RLIG1ldGhvZCB0byB1bmxvY2sgdGhlIHNlc3Npb24gZmlyc3QuXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVycyBmb3IgdGhlIHJvdGF0ZSBrZXljaGFpbiBtZXRob2RcbiAgICogQHJldHVybiByb3RhdGVkS2V5Y2hhaW5cbiAgICovXG4gIGFzeW5jIHJvdGF0ZUtleWNoYWluKHBhcmFtczogUm90YXRlS2V5Y2hhaW5PcHRpb25zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IGtleUNoYWluID0gYXdhaXQgdGhpcy5nZXQoeyBpZDogcGFyYW1zLmlkIH0pO1xuICAgIGlmICghS2V5Y2hhaW5zLmlzTXVsdGlVc2VyS2V5KGtleUNoYWluKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGByb3RhdGVLZXljaGFpbiBpcyBvbmx5IHBlcm1pdHRlZCBmb3Igb2ZjIG11bHRpLXVzZXIta2V5IHdhbGxldGApO1xuICAgIH1cblxuICAgIGxldCBwdWI6IHN0cmluZywgZW5jcnlwdGVkUHJ2OiBzdHJpbmc7XG4gICAgaWYgKCdlbmNyeXB0ZWRQcnYnIGluIHBhcmFtcykge1xuICAgICAgLy8gY2xpZW50IHBhc3NlZCBpbiBwdWIgYW5kIGVuY3J5cHRlZFBydiBkaXJlY3RseVxuICAgICAgcHViID0gcGFyYW1zLnB1YjtcbiAgICAgIGVuY3J5cHRlZFBydiA9IHBhcmFtcy5lbmNyeXB0ZWRQcnY7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGJpdGdvIGdlbmVyYXRlIHB1YiBhbmQgcHJ2IGFuZCBlbmNyeXB0IGl0XG4gICAgICBjb25zdCB7IHB1Yjoga2V5UHViLCBwcnY6IGtleVBydiB9ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgIGlmICgha2V5UHViKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdFeHBlY3RlZCBhIHB1YmxpYyBrZXkgdG8gYmUgZ2VuZXJhdGVkJyk7XG4gICAgICB9XG4gICAgICBwdWIgPSBrZXlQdWI7XG4gICAgICBlbmNyeXB0ZWRQcnYgPSBhd2FpdCB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDoga2V5UHJ2LFxuICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3N3b3JkLFxuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYml0Z29cbiAgICAgIC5wdXQodGhpcy5iYXNlQ29pbi51cmwoYC9rZXkvJHtwYXJhbXMuaWR9YCkpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIGVuY3J5cHRlZFBydixcbiAgICAgICAgcHViLFxuICAgICAgICByZXFJZDogcGFyYW1zLnJlcUlkLFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgaGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgYSBrZXljaGFpbiBpcyBhIG9mYyBtdWx0aS11c2VyLWtleVxuICAgKiBAcGFyYW0ga2V5Y2hhaW5cbiAgICovXG4gIHN0YXRpYyBpc011bHRpVXNlcktleShrZXljaGFpbjogS2V5Y2hhaW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGtleWNoYWluLmNvaW5TcGVjaWZpYz8ub2ZjPy5bJ2ZlYXR1cmVzJ10gPz8gW10pLmluY2x1ZGVzKCdtdWx0aS11c2VyLWtleScpO1xuICB9XG59XG4iXX0=
584
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2tleWNoYWluL2tleWNoYWlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxvREFBNEI7QUFDNUIsMENBQTRCO0FBQzVCLHFEQUF1QztBQUd2QyxvQ0FBdUc7QUFtQnZHLGlEQUF1RjtBQUd2RixNQUFhLFNBQVM7SUFJcEIsWUFBWSxLQUFnQixFQUFFLFFBQW1CO1FBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUEwQjtRQUNsQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1RixD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QUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUs7YUFDZCxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUMzQyxJQUFJLENBQUM7WUFDSixZQUFZO1lBQ1osR0FBRztZQUNILEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztTQUNwQixDQUFDO2FBQ0QsTUFBTSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFrQjtRQUN0QyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0Y7QUEzbEJELDhCQTJsQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUc3NTZXR0aW5ncyB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgY29tbW9uIGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBJQmFzZUNvaW4sIEtleWNoYWluc1RyaXBsZXQsIEtleVBhaXIgfSBmcm9tICcuLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgZGVjb2RlT3JFbHNlLCBFQ0RTQVV0aWxzLCBFRERTQVV0aWxzLCBnZW5lcmF0ZVJhbmRvbVBhc3N3b3JkLCBSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgQWRkS2V5Y2hhaW5PcHRpb25zLFxuICBBcGlLZXlTaGFyZSxcbiAgQ2hhbmdlZEtleWNoYWlucyxcbiAgQ3JlYXRlQmFja3VwT3B0aW9ucyxcbiAgQ3JlYXRlQml0R29PcHRpb25zLFxuICBDcmVhdGVNcGNPcHRpb25zLFxuICBHZXRLZXljaGFpbk9wdGlvbnMsXG4gIEdldEtleXNGb3JTaWduaW5nT3B0aW9ucyxcbiAgSUtleWNoYWlucyxcbiAgS2V5Y2hhaW4sXG4gIExpc3RLZXljaGFpbk9wdGlvbnMsXG4gIExpc3RLZXljaGFpbnNSZXN1bHQsXG4gIFJlY3JlYXRlTXBjT3B0aW9ucyxcbiAgUm90YXRlS2V5Y2hhaW5PcHRpb25zLFxuICBVcGRhdGVQYXNzd29yZE9wdGlvbnMsXG4gIFVwZGF0ZVNpbmdsZUtleWNoYWluUGFzc3dvcmRPcHRpb25zLFxufSBmcm9tICcuL2lLZXljaGFpbnMnO1xuaW1wb3J0IHsgQml0R29LZXlGcm9tT3ZjU2hhcmVzLCBCaXRHb1RvT3ZjSlNPTiwgT3ZjVG9CaXRHb0pTT04gfSBmcm9tICcuL292Y0pzb25Db2RlYyc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uVmVyc2lvbiB9IGZyb20gJy4uLy4uL2FwaSc7XG5cbmV4cG9ydCBjbGFzcyBLZXljaGFpbnMgaW1wbGVtZW50cyBJS2V5Y2hhaW5zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBiaXRnbzogQml0R29CYXNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VDb2luOiBJQmFzZUNvaW47XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgYmFzZUNvaW46IElCYXNlQ29pbikge1xuICAgIHRoaXMuYml0Z28gPSBiaXRnbztcbiAgICB0aGlzLmJhc2VDb2luID0gYmFzZUNvaW47XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEga2V5Y2hhaW4gYnkgSURcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLmlkXG4gICAqIEBwYXJhbSBwYXJhbXMueHB1YiAob3B0aW9uYWwpXG4gICAqIEBwYXJhbSBwYXJhbXMuZXRoQWRkcmVzcyAob3B0aW9uYWwpXG4gICAqIEBwYXJhbSBwYXJhbXMucmVxSWQgKG9wdGlvbmFsKVxuICAgKi9cbiAgYXN5bmMgZ2V0KHBhcmFtczogR2V0S2V5Y2hhaW5PcHRpb25zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFtdLCBbJ3hwdWInLCAnZXRoQWRkcmVzcyddKTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy5pZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaWQgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSBwYXJhbXMuaWQ7XG4gICAgaWYgKHBhcmFtcy5yZXFJZCkge1xuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHBhcmFtcy5yZXFJZCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLmJhc2VDb2luLnVybCgnL2tleS8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGlkKSkpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxpc3QgdGhlIHVzZXJzIGtleWNoYWluc1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMubGltaXQgLSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgaW4gYSBzaW5nbGUgY2FsbC5cbiAgICogQHBhcmFtIHBhcmFtcy5wcmV2SWQgLSBDb250aW51ZSBpdGVyYXRpbmcgKHByb3ZpZGVkIGJ5IG5leHRCYXRjaFByZXZJZCBpbiB0aGUgcHJldmlvdXMgbGlzdClcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBhc3luYyBsaXN0KHBhcmFtczogTGlzdEtleWNoYWluT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxMaXN0S2V5Y2hhaW5zUmVzdWx0PiB7XG4gICAgY29uc3QgcXVlcnlPYmplY3Q6IGFueSA9IHt9O1xuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5saW1pdCkpIHtcbiAgICAgIGlmICghXy5pc051bWJlcihwYXJhbXMubGltaXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBsaW1pdCBhcmd1bWVudCwgZXhwZWN0aW5nIG51bWJlcicpO1xuICAgICAgfVxuICAgICAgcXVlcnlPYmplY3QubGltaXQgPSBwYXJhbXMubGltaXQ7XG4gICAgfVxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXJhbXMucHJldklkKSkge1xuICAgICAgaWYgKCFfLmlzU3RyaW5nKHBhcmFtcy5wcmV2SWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwcmV2SWQgYXJndW1lbnQsIGV4cGVjdGluZyBzdHJpbmcnKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5T2JqZWN0LnByZXZJZCA9IHBhcmFtcy5wcmV2SWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYml0Z28uZ2V0KHRoaXMuYmFzZUNvaW4udXJsKCcva2V5JykpLnF1ZXJ5KHF1ZXJ5T2JqZWN0KS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2UgdGhlIGRlY3J5cHRpb24gcGFzc3dvcmQgZm9yIGFsbCBwb3NzaWJsZSBrZXljaGFpbnMgYXNzb2NpYXRlZCB3aXRoIGEgdXNlci5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIGFsbCBrZXlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXNlciwgZGVjcnlwdHNcbiAgICogdGhlbSB3aXRoIHRoZSBvbGQgcGFzc3dvcmQgYW5kIHJlLWVuY3J5cHRzIHRoZW0gd2l0aCB0aGUgbmV3IHBhc3N3b3JkLlxuICAgKlxuICAgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIHVzZXIgY2hhbmdlcyB0aGVpciBsb2dpbiBwYXNzd29yZCwgYW5kIGFyZSBleHBlY3RpbmdcbiAgICogdGhhdCB0aGVpciB3YWxsZXQgcGFzc3dvcmRzIGFyZSBjaGFuZ2VkIHRvIG1hdGNoIHRoZSBuZXcgbG9naW4gcGFzc3dvcmQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5vbGRQYXNzd29yZCAtIFRoZSBvbGQgcGFzc3dvcmQgdXNlZCBmb3IgZW5jcnlwdGluZyB0aGUga2V5XG4gICAqIEBwYXJhbSBwYXJhbXMubmV3UGFzc3dvcmQgLSBUaGUgbmV3IHBhc3N3b3JkIHRvIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgdGhlIGtleVxuICAgKiBAcmV0dXJucyBjaGFuZ2VkS2V5cyBPYmplY3QgLSBlLmcuOlxuICAgKiAge1xuICAgKiAgICB4cHViMTogZW5jcnlwdGVkUHJ2LFxuICAgKiAgICAuLi5cbiAgICogIH1cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVBhc3N3b3JkKHBhcmFtczogVXBkYXRlUGFzc3dvcmRPcHRpb25zKTogUHJvbWlzZTxDaGFuZ2VkS2V5Y2hhaW5zPiB7XG4gICAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgWydvbGRQYXNzd29yZCcsICduZXdQYXNzd29yZCddLCBbXSk7XG4gICAgY29uc3QgY2hhbmdlZEtleXM6IENoYW5nZWRLZXljaGFpbnMgPSB7fTtcbiAgICBsZXQgcHJldklkO1xuICAgIGxldCBrZXlzTGVmdCA9IHRydWU7XG4gICAgd2hpbGUgKGtleXNMZWZ0KSB7XG4gICAgICBjb25zdCByZXN1bHQ6IExpc3RLZXljaGFpbnNSZXN1bHQgPSBhd2FpdCB0aGlzLmxpc3QoeyBsaW1pdDogNTAwLCBwcmV2SWQgfSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiByZXN1bHQua2V5cykge1xuICAgICAgICBjb25zdCBvbGRFbmNyeXB0ZWRQcnYgPSBrZXkuZW5jcnlwdGVkUHJ2O1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChvbGRFbmNyeXB0ZWRQcnYpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkS2V5Y2hhaW4gPSBhd2FpdCB0aGlzLnVwZGF0ZVNpbmdsZUtleWNoYWluUGFzc3dvcmQoe1xuICAgICAgICAgICAga2V5Y2hhaW46IGtleSxcbiAgICAgICAgICAgIG9sZFBhc3N3b3JkOiBwYXJhbXMub2xkUGFzc3dvcmQsXG4gICAgICAgICAgICBuZXdQYXNzd29yZDogcGFyYW1zLm5ld1Bhc3N3b3JkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh1cGRhdGVkS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KSB7XG4gICAgICAgICAgICAvLyBCb3RoIFRTUyBhbmQgbXVsdGktdXNlci1vZmMga2V5cyBoYXZlIG11bHRpcGxlIHB1YmxpYyBrZXlzIGluIHRoZWlyIGtleSBkb2N1bWVudCBhbmQgdGh1cyBuZWVkIHRvIHVzZSBvYmplY3RJRFxuICAgICAgICAgICAgY29uc3QgY2hhbmdlZEtleUlkZW50aWZpZXIgPVxuICAgICAgICAgICAgICB1cGRhdGVkS2V5Y2hhaW4udHlwZSA9PT0gJ3RzcycgfHwgS2V5Y2hhaW5zLmlzTXVsdGlVc2VyS2V5KHVwZGF0ZWRLZXljaGFpbilcbiAgICAgICAgICAgICAgICA/IHVwZGF0ZWRLZXljaGFpbi5pZFxuICAgICAgICAgICAgICAgIDogdXBkYXRlZEtleWNoYWluLnB1YjtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VkS2V5SWRlbnRpZmllcikge1xuICAgICAgICAgICAgICBjaGFuZ2VkS2V5c1tjaGFuZ2VkS2V5SWRlbnRpZmllcl0gPSB1cGRhdGVkS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlmIHRoZSBwYXNzd29yZCB3YXMgaW5jb3JyZWN0LCBzaWxlbmNlIHRoZSBlcnJvciwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgICAgICAgIC8vIHVwZGF0ZVNpbmdsZUtleWNoYWluUGFzc3dvcmQgd3JhcHMgYSB3cm9uZy1wYXNzd29yZCAob3IgY29ycnVwdCBpbnB1dCkgZmFpbHVyZSBhc1xuICAgICAgICAgIC8vICdmYWlsZWQgdG8gdXBkYXRlIGtleWNoYWluIHBhc3N3b3JkOiAuLi4nLCBzbyB0cmVhdCB0aGF0IGFzIGEgc2tpcC1hYmxlIGVycm9yLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFlLm1lc3NhZ2UuaW5jbHVkZXMoJ3ByaXZhdGUga2V5IGlzIGluY29ycmVjdCcpICYmXG4gICAgICAgICAgICAhZS5tZXNzYWdlLmluY2x1ZGVzKCdmYWlsZWQgdG8gdXBkYXRlIGtleWNoYWluIHBhc3N3b3JkJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0Lm5leHRCYXRjaFByZXZJZCkge1xuICAgICAgICBwcmV2SWQgPSByZXN1bHQubmV4dEJhdGNoUHJldklkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5c0xlZnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZWRLZXlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgZW5jcnlwdGlvbiB2ZXJzaW9uIG9mIGEgY2lwaGVydGV4dCBieSBpbnNwZWN0aW5nIGl0cyBcInZcIiBmaWVsZC5cbiAgICogICAtIHYxIChTSkNMIC8gUEJLREYyLVNIQTI1NiArIEFFUy0yNTYtQ0NNKTogXCJ2XCIgYWJzZW50IG9yIGV4cGxpY2l0bHkgMVxuICAgKiAgIC0gdjIgKEFyZ29uMmlkICsgQUVTLTI1Ni1HQ00pOiBcInZcIiA9PT0gMlxuICAgKiBUaHJvd3Mgb24gdW5yZWNvZ25pemVkIHZhbHVlcyBzbyBjYWxsZXJzIGNhbm5vdCBzaWxlbnRseSBtaXMtaGFuZGxlIHVua25vd24gZW52ZWxvcGVzLlxuICAgKi9cbiAgZ2V0RW5jcnlwdGlvblZlcnNpb24oY2lwaGVydGV4dDogc3RyaW5nKTogRW5jcnlwdGlvblZlcnNpb24ge1xuICAgIGxldCBlbnZlbG9wZTogeyB2PzogdW5rbm93biB9O1xuICAgIHRyeSB7XG4gICAgICBlbnZlbG9wZSA9IEpTT04ucGFyc2UoY2lwaGVydGV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgY2lwaGVydGV4dCBlbnZlbG9wZTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKGVudmVsb3BlLnYgPT09IDIpIHtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBpZiAoZW52ZWxvcGUudiA9PT0gdW5kZWZpbmVkIHx8IGVudmVsb3BlLnYgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBlbmNyeXB0aW9uIHZlcnNpb246ICR7U3RyaW5nKGVudmVsb3BlLnYpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcGFzc3dvcmQgdXNlZCB0byBkZWNyeXB0IGEgc2luZ2xlIGtleWNoYWluLCB3aXRoIHN1cHBvcnQgZm9yIHYyIChBcmdvbjJpZCkgZW52ZWxvcGVzLlxuICAgKiBBdXRvbWF0aWNhbGx5IGRldGVjdHMgYW5kIHByZXNlcnZlcyB0aGUgZW52ZWxvcGUgdmVyc2lvbiDigJQgYSB2Mi1lbmNyeXB0ZWQga2V5IHN0YXlzIHYyIGFmdGVyIHRoZSBwYXNzd29yZCBjaGFuZ2UuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbiAtIFRoZSBrZXljaGFpbiB3aG9zZSBwYXNzd29yZCBzaG91bGQgYmUgdXBkYXRlZFxuICAgKiBAcGFyYW0gcGFyYW1zLm9sZFBhc3N3b3JkIC0gVGhlIG9sZCBwYXNzd29yZCB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAgICogQHBhcmFtIHBhcmFtcy5uZXdQYXNzd29yZCAtIFRoZSBuZXcgcGFzc3dvcmQgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGluZyB0aGUga2V5XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEtleWNoYWluPn1cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVNpbmdsZUtleWNoYWluUGFzc3dvcmQocGFyYW1zOiBVcGRhdGVTaW5nbGVLZXljaGFpblBhc3N3b3JkT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGlmICghXy5pc1N0cmluZyhwYXJhbXMub2xkUGFzc3dvcmQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIG9sZCBwYXNzd29yZCB0byBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhwYXJhbXMubmV3UGFzc3dvcmQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIG5ldyBwYXNzd29yZCB0byBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICghXy5pc09iamVjdChwYXJhbXMua2V5Y2hhaW4pIHx8ICFfLmlzU3RyaW5nKHBhcmFtcy5rZXljaGFpbi5lbmNyeXB0ZWRQcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGtleWNoYWluIHRvIGJlIGFuIG9iamVjdCB3aXRoIGFuIGVuY3J5cHRlZFBydiBwcm9wZXJ0eScpO1xuICAgIH1cblxuICAgIGNvbnN0IG9sZEVuY3J5cHRlZFBydiA9IHBhcmFtcy5rZXljaGFpbi5lbmNyeXB0ZWRQcnY7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY3J5cHRlZFBydiA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7IGlucHV0OiBvbGRFbmNyeXB0ZWRQcnYsIHBhc3N3b3JkOiBwYXJhbXMub2xkUGFzc3dvcmQgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0aW9uVmVyc2lvbiA9IHRoaXMuZ2V0RW5jcnlwdGlvblZlcnNpb24ob2xkRW5jcnlwdGVkUHJ2KTtcbiAgICAgIGNvbnN0IG5ld0VuY3J5cHRlZFBydiA9IGF3YWl0IHRoaXMuYml0Z28uZW5jcnlwdCh7XG4gICAgICAgIGlucHV0OiBkZWNyeXB0ZWRQcnYsXG4gICAgICAgIHBhc3N3b3JkOiBwYXJhbXMubmV3UGFzc3dvcmQsXG4gICAgICAgIGVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gXy5hc3NpZ24oe30sIHBhcmFtcy5rZXljaGFpbiwgeyBlbmNyeXB0ZWRQcnY6IG5ld0VuY3J5cHRlZFBydiB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBjYXRjaGluZyBhbiBlcnJvciBoZXJlIG1lYW5zIHRoYXQgdGhlIHBhc3N3b3JkIHdhcyBpbmNvcnJlY3Qgb3IsIGxlc3MgbGlrZWx5LCB0aGUgaW5wdXQgdG8gZGVjcnlwdCBpcyBjb3JydXB0ZWRcbiAgICAgIGNvbnN0IGVycm9yRGV0YWlsID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gdXBkYXRlIGtleWNoYWluIHBhc3N3b3JkOiAke2Vycm9yRGV0YWlsfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNyeXB0IGFuIGVuY3J5cHRlZCBwcml2YXRlIGtleSB3aXRoIGBwYXNzcGhyYXNlYCBhbmQgcmUtZW5jcnlwdCBpdCBhcyBhIHYyXG4gICAqIChBcmdvbjJpZCArIEFFUy0yNTYtR0NNKSBlbnZlbG9wZSB3aXRoIHRoZSBzYW1lIHBhc3NwaHJhc2UuXG4gICAqXG4gICAqIFVzZWQgdG8gdXBncmFkZSBsZWdhY3kgdjEgKFNKQ0wpIGVudmVsb3BlcyB0byB2MiB3aXRob3V0IGNoYW5naW5nIHRoZSBwYXNzcGhyYXNlLlxuICAgKiBDYWxsZXJzIHRoYXQgbmVlZCB0byB0cnkgYSBmYWxsYmFjayBwYXNzcGhyYXNlIChlLmcuIGFuIG9yaWdpbmFsIHBhc3NwaHJhc2UgZnJvbVxuICAgKiBiZWZvcmUgYSBwYXNzd29yZCByb3RhdGlvbikgc2hvdWxkIGhhbmRsZSB0aGF0IHRoZW1zZWx2ZXMg4oCUIHRoaXMgcHJpbWl0aXZlIGRvZXMgb25lXG4gICAqIHRoaW5nIGFuZCBsZXRzIGRlY3J5cHRpb24gZXJyb3JzIHN1cmZhY2UgZGlyZWN0bHkuXG4gICAqL1xuICBhc3luYyByZWVuY3J5cHRBc1YyKGVuY3J5cHRlZFBydjogc3RyaW5nLCBwYXNzcGhyYXNlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHBydiA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7IGlucHV0OiBlbmNyeXB0ZWRQcnYsIHBhc3N3b3JkOiBwYXNzcGhyYXNlIH0pO1xuICAgIHJldHVybiB0aGlzLmJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJ2LCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDIgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgcHVibGljL3ByaXZhdGUga2V5IHBhaXJcbiAgICogQHBhcmFtIHBhcmFtcyAtIG9wdGlvbmFsIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnNlZWQgb3B0aW9uYWwgLSBzZWVkIHRvIHVzZSBmb3Iga2V5cGFpciBnZW5lcmF0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMuaXNSb290S2V5IG9wdGlvbmFsIC0gd2hldGhlciB0aGUgcmVzdWx0aW5nIGtleXBhaXIgc2hvdWxkIGJlIGEgcm9vdCBrZXlcbiAgICogQHJldHVybnMge0tleVBhaXJ9IC0gdGhlIGdlbmVyYXRlZCBrZXlwYWlyXG4gICAqL1xuICBjcmVhdGUocGFyYW1zOiB7IHNlZWQ/OiBCdWZmZXI7IGlzUm9vdEtleT86IGJvb2xlYW4gfSA9IHt9KTogS2V5UGFpciB7XG4gICAgaWYgKHBhcmFtcz8uaXNSb290S2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5iYXNlQ29pbi5nZW5lcmF0ZVJvb3RLZXlQYWlyKHBhcmFtcy5zZWVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYmFzZUNvaW4uZ2VuZXJhdGVLZXlQYWlyKHBhcmFtcy5zZWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBrZXljaGFpbiB0byBCaXRHbydzIHJlY29yZHNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgYWRkKHBhcmFtczogQWRkS2V5Y2hhaW5PcHRpb25zID0ge30pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhcbiAgICAgIHBhcmFtcyxcbiAgICAgIFtdLFxuICAgICAgW1xuICAgICAgICAncHViJyxcbiAgICAgICAgJ2VuY3J5cHRlZFBydicsXG4gICAgICAgICdrZXlUeXBlJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAnc291cmNlJyxcbiAgICAgICAgJ29yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZScsXG4gICAgICAgICdlbnRlcnByaXNlJyxcbiAgICAgICAgJ2Rlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQnLFxuICAgICAgICAnc2FmZUlkJyxcbiAgICAgIF1cbiAgICApO1xuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5kaXNhYmxlS1JTRW1haWwpKSB7XG4gICAgICBpZiAoIV8uaXNCb29sZWFuKHBhcmFtcy5kaXNhYmxlS1JTRW1haWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkaXNhYmxlS1JTRW1haWwgYXJndW1lbnQsIGV4cGVjdGluZyBib29sZWFuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5yZXFJZCkge1xuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHBhcmFtcy5yZXFJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYmFzZUNvaW4udXJsKCcva2V5JykpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIHB1YjogcGFyYW1zLnB1YixcbiAgICAgICAgY29tbW9uUHViOiBwYXJhbXMuY29tbW9uUHViLFxuICAgICAgICBjb21tb25LZXljaGFpbjogcGFyYW1zLmNvbW1vbktleWNoYWluLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IHBhcmFtcy5lbmNyeXB0ZWRQcnYsXG4gICAgICAgIHR5cGU6IHBhcmFtcy50eXBlLFxuICAgICAgICBrZXlUeXBlOiBwYXJhbXMua2V5VHlwZSxcbiAgICAgICAgc291cmNlOiBwYXJhbXMuc291cmNlLFxuICAgICAgICBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICAgIGVudGVycHJpc2U6IHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiBwYXJhbXMuZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCxcbiAgICAgICAgZGlzYWJsZUtSU0VtYWlsOiBwYXJhbXMuZGlzYWJsZUtSU0VtYWlsLFxuICAgICAgICBrcnNTcGVjaWZpYzogcGFyYW1zLmtyc1NwZWNpZmljLFxuICAgICAgICBrZXlTaGFyZXM6IHBhcmFtcy5rZXlTaGFyZXMsXG4gICAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IHBhcmFtcy51c2VyR1BHUHVibGljS2V5LFxuICAgICAgICBiYWNrdXBHUEdQdWJsaWNLZXk6IHBhcmFtcy5iYWNrdXBHUEdQdWJsaWNLZXksXG4gICAgICAgIGFsZ29Vc2VkOiBwYXJhbXMuYWxnb1VzZWQsXG4gICAgICAgIGlzRGlzdHJpYnV0ZWRDdXN0b2R5OiBwYXJhbXMuaXNEaXN0cmlidXRlZEN1c3RvZHksXG4gICAgICAgIGlzTVBDdjI6IHBhcmFtcy5pc01QQ3YyLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHBhcmFtcy5jb2luU3BlY2lmaWMsXG4gICAgICAgIHdlYmF1dGhuRGV2aWNlczogcGFyYW1zLndlYmF1dGhuRGV2aWNlcyxcbiAgICAgICAgd2ViYXV0aG5JbmZvOiBwYXJhbXMud2ViYXV0aG5JbmZvLFxuICAgICAgICBzYWZlSWQ6IHBhcmFtcy5zYWZlSWQsXG4gICAgICB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEJpdEdvIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zIChlbXB0eSlcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJpdEdvKHBhcmFtczogQ3JlYXRlQml0R29PcHRpb25zID0ge30pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgcGFyYW1zLnNvdXJjZSA9ICdiaXRnbyc7XG5cbiAgICB0aGlzLmJhc2VDb2luLnByZUNyZWF0ZUJpdEdvKHBhcmFtcyBhcyBhbnkpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmFkZChwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGJhY2t1cCBrZXlcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnByb3ZpZGVyIChvcHRpb25hbClcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cChwYXJhbXM6IENyZWF0ZUJhY2t1cE9wdGlvbnMgPSB7fSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBwYXJhbXMuc291cmNlID0gJ2JhY2t1cCc7XG5cbiAgICBjb25zdCBpc1Rzc0JhY2t1cEtleSA9IHBhcmFtcy5wcnYgJiYgKHBhcmFtcy5jb21tb25LZXljaGFpbiB8fCBwYXJhbXMuY29tbW9uUHViKTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy5wcm92aWRlcikgJiYgIWlzVHNzQmFja3VwS2V5KSB7XG4gICAgICAvLyBpZiB0aGUgcHJvdmlkZXIgaXMgdW5kZWZpbmVkLCB3ZSBnZW5lcmF0ZSBhIGxvY2FsIGtleSBhbmQgYWRkIHRoZSBzb3VyY2UgZGV0YWlsc1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgIF8uZXh0ZW5kKHBhcmFtcywga2V5KTtcbiAgICAgIGlmIChwYXJhbXMucGFzc3BocmFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIF8uZXh0ZW5kKHBhcmFtcywge1xuICAgICAgICAgIGVuY3J5cHRlZFBydjogYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgICAgICAgIGlucHV0OiBrZXkucHJ2LFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmVyUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFkZChwYXJhbXMpO1xuICAgIHJldHVybiBfLmV4dGVuZCh7fSwgc2VydmVyUmVzcG9uc2UsIF8ucGljayhwYXJhbXMsIFsncHJ2JywgJ2VuY3J5cHRlZFBydicsICdwcm92aWRlcicsICdzb3VyY2UnXSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMga2V5cyBmb3Igc2lnbmluZyBmcm9tIGEgd2FsbGV0XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8S2V5Y2hhaW5bXT59XG4gICAqL1xuICBhc3luYyBnZXRLZXlzRm9yU2lnbmluZyhwYXJhbXM6IEdldEtleXNGb3JTaWduaW5nT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxLZXljaGFpbltdPiB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHBhcmFtcy53YWxsZXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gd2FsbGV0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHdhbGxldCA9IHBhcmFtcy53YWxsZXQ7XG4gICAgY29uc3QgcmVxSWQgPSBwYXJhbXMucmVxSWQgfHwgbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICBjb25zdCBpZHMgPSB3YWxsZXQuYmFzZUNvaW4ua2V5SWRzRm9yU2lnbmluZygpO1xuICAgIGNvbnN0IGtleWNoYWluUXVlcmllc0JsdWViaXJkcyA9IGlkcy5tYXAoKGlkKSA9PiB0aGlzLmdldCh7IGlkOiB3YWxsZXQua2V5SWRzKClbaWRdLCByZXFJZCB9KSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGtleWNoYWluUXVlcmllc0JsdWViaXJkcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCBzdG9yZSBNUEMga2V5Y2hhaW5zIHdpdGggQml0R28uXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgc2VjcmV0IG1hdGVyaWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+fSBuZXdseSBjcmVhdGVkIFVzZXIsIEJhY2t1cCwgYW5kIEJpdEdvIGtleXNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZU1wYyhwYXJhbXM6IENyZWF0ZU1wY09wdGlvbnMpOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBpZiAocGFyYW1zLm11bHRpc2lnVHlwZSAhPT0gJ3RzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbXVsdGktc2lnIHR5cGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0c3NTZXR0aW5nczogVHNzU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLmJpdGdvLm1pY3Jvc2VydmljZXNVcmwoJy9hcGkvdjIvdHNzL3NldHRpbmdzJykpLnJlc3VsdCgpO1xuICAgIGNvbnN0IG11bHRpc2lnVHlwZVZlcnNpb24gPVxuICAgICAgdHNzU2V0dGluZ3MuY29pblNldHRpbmdzW3RoaXMuYmFzZUNvaW4uZ2V0RmFtaWx5KCldPy53YWxsZXRDcmVhdGlvblNldHRpbmdzPy5tdWx0aVNpZ1R5cGVWZXJzaW9uO1xuXG4gICAgbGV0IE1wY1V0aWxzO1xuICAgIGlmICh0aGlzLmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpID09PSAnZWRkc2EnKSB7XG4gICAgICBNcGNVdGlscyA9IG11bHRpc2lnVHlwZVZlcnNpb24gPT09ICdNUEN2MicgPyBFRERTQVV0aWxzLkVkZHNhTVBDdjJVdGlscyA6IEVERFNBVXRpbHMuZGVmYXVsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgTXBjVXRpbHMgPSBtdWx0aXNpZ1R5cGVWZXJzaW9uID09PSAnTVBDdjInID8gRUNEU0FVdGlscy5FY2RzYU1QQ3YyVXRpbHMgOiBFQ0RTQVV0aWxzLkVjZHNhVXRpbHM7XG4gICAgfVxuXG4gICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgTXBjVXRpbHModGhpcy5iaXRnbywgdGhpcy5iYXNlQ29pbik7XG4gICAgcmV0dXJuIGF3YWl0IG1wY1V0aWxzLmNyZWF0ZUtleWNoYWlucyh7XG4gICAgICBwYXNzcGhyYXNlOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIGVudGVycHJpc2U6IHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlOiBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgcmV0cm9maXQ6IHBhcmFtcy5yZXRyb2ZpdCxcbiAgICAgIHdlYmF1dGhuSW5mbzogcGFyYW1zLndlYmF1dGhuSW5mbyxcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICBzYWZlSWQ6IHBhcmFtcy5zYWZlSWQsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWNyZWF0ZU1wYyhwYXJhbXM6IFJlY3JlYXRlTXBjT3B0aW9ucyk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGFzc2VydChwYXJhbXMuY29pbiwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGNvaW4nKSk7XG4gICAgYXNzZXJ0KHBhcmFtcy53YWxsZXRJZCwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIHdhbGxldElkJykpO1xuICAgIGFzc2VydChwYXJhbXMub3RwLCBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gb3RwJykpO1xuICAgIGFzc2VydChwYXJhbXMucGFzc3BocmFzZSwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIHBhc3NwaHJhc2UnKSk7XG5cbiAgICBhc3NlcnQoXG4gICAgICBwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkV2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBlbmNyeXB0ZWRXYWxsZXRQYXNzcGhyYXNlJylcbiAgICApO1xuICAgIGFzc2VydChwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkVXNlcktleSwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGVuY3J5cHRlZFVzZXJLZXknKSk7XG4gICAgYXNzZXJ0KHBhcmFtcy5lbmNyeXB0ZWRNYXRlcmlhbC5lbmNyeXB0ZWRCYWNrdXBLZXksIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBlbmNyeXB0ZWRCYWNrdXBLZXknKSk7XG5cbiAgICBhd2FpdCB0aGlzLmJpdGdvLnBvc3QodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKCcvYXBpL3YxL3VzZXIvdW5sb2NrJykpLnNlbmQoeyBvdHA6IHBhcmFtcy5vdHAgfSkucmVzdWx0KCk7XG4gICAgY29uc3QgeyByZWNvdmVyeUluZm8gfSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybChgL2FwaS92Mi8ke3BhcmFtcy5jb2lufS93YWxsZXQvJHtwYXJhbXMud2FsbGV0SWR9L3Bhc3Njb2RlcmVjb3ZlcnlgKSlcbiAgICAgIC5yZXN1bHQoKTtcblxuICAgIGlmICghcmVjb3ZlcnlJbmZvIHx8ICEoJ3Bhc3Njb2RlRW5jcnlwdGlvbkNvZGUnIGluIHJlY292ZXJ5SW5mbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGdldCByZWNvdmVyeSBpbmZvJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjcnlwdGVkV2FsbGV0UGFzc3BocmFzZSA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICBpbnB1dDogcGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZFdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBwYXNzd29yZDogcmVjb3ZlcnlJbmZvLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRVc2VyS2V5ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgIGlucHV0OiBwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkVXNlcktleSxcbiAgICAgIHBhc3N3b3JkOiBkZWNyeXB0ZWRXYWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkQmFja3VwS2V5ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgIGlucHV0OiBwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkQmFja3VwS2V5LFxuICAgICAgcGFzc3dvcmQ6IGRlY3J5cHRlZFdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNcGMoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIHJldHJvZml0OiB7XG4gICAgICAgIGRlY3J5cHRlZFVzZXJLZXksXG4gICAgICAgIGRlY3J5cHRlZEJhY2t1cEtleSxcbiAgICAgICAgd2FsbGV0SWQ6IHBhcmFtcy53YWxsZXRJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgcGFyc2VzIHRoZSBKU09OIGRvd25sb2FkZWQgZnJvbSB0aGUgT1ZDIGZvciBwbGF0Zm9ybSAoQml0R28pLFxuICAgKiBhbmQgY3JlYXRlcyBhIGNvcnJlc3BvbmRpbmcgVFNTIEJpdEdvIGtleS4gSXQgYWxzbyByZXR1cm5zIHRoZSBKU09OIHRoYXQgbmVlZHNcbiAgICogdG8gYmUgdXBsb2FkZWQgYmFjayB0byB0aGUgT1ZDcyBjb250YWluaW5nIHRoZSBCaXRHbyAtPiBPVkMgc2hhcmVzLlxuICAgKiBAcGFyYW0gb3ZjT3V0cHV0SnNvbiBKU09OIGZvcm1hdCBvZiB0aGUgZmlsZSBkb3dubG9hZGVkIGZyb20gdGhlIE9WQyBmb3IgcGxhdGZvcm1cbiAgICogQHBhcmFtIGVudGVycHJpc2UgT3B0aW9uYWwgZW50ZXJwcmlzZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGtleVxuICAgKiBAcmV0dXJucyB7Qml0R29LZXlGcm9tT3ZjU2hhcmVzfVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVHNzQml0R29LZXlGcm9tT3ZjU2hhcmVzKG92Y091dHB1dEpzb246IHVua25vd24sIGVudGVycHJpc2U/OiBzdHJpbmcpOiBQcm9taXNlPEJpdEdvS2V5RnJvbU92Y1NoYXJlcz4ge1xuICAgIGNvbnN0IGRlY29kZWRPdmNPdXRwdXQgPSBkZWNvZGVPckVsc2UoT3ZjVG9CaXRHb0pTT04ubmFtZSwgT3ZjVG9CaXRHb0pTT04sIG92Y091dHB1dEpzb24sIChlcnJvcnMpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IocykgcGFyc2luZyBPVkMgSlNPTjogJHtlcnJvcnN9YCk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVjb2RlZE92Y091dHB1dC5zdGF0ZSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGF0ZSBleHBlY3RlZCB0byBiZSBcIjFcIi4gUGxlYXNlIGNvbXBsZXRlIHRoZSBmaXJzdCB0d28gT1ZDIG9wZXJhdGlvbnMnKTtcbiAgICB9XG5cbiAgICAvLyBPVkMtMSBpcyByZXNwb25zaWJsZSBmb3IgdGhlIFVzZXIga2V5XG4gICAgY29uc3Qgb3ZjMSA9IGRlY29kZWRPdmNPdXRwdXQub3ZjWzFdO1xuICAgIC8vIE9WQy0yIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgQmFja3VwIGtleVxuICAgIGNvbnN0IG92YzIgPSBkZWNvZGVkT3ZjT3V0cHV0Lm92Y1syXTtcblxuICAgIGNvbnN0IGtleVNoYXJlczogQXBpS2V5U2hhcmVbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgZnJvbTogJ3VzZXInLFxuICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgcHVibGljU2hhcmU6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICBwcml2YXRlU2hhcmU6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnVTaWcudG9TdHJpbmcoKSA/PyAnJyxcbiAgICAgICAgdnNzUHJvb2Y6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnZzc1Byb29mID8/ICcnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZnJvbTogJ2JhY2t1cCcsXG4gICAgICAgIHRvOiAnYml0Z28nLFxuICAgICAgICBwdWJsaWNTaGFyZTogb3ZjMi5vdmNUb0JpdGdvU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgIHByaXZhdGVTaGFyZTogb3ZjMi5vdmNUb0JpdGdvU2hhcmUucHJpdmF0ZVNoYXJlLFxuICAgICAgICBwcml2YXRlU2hhcmVQcm9vZjogb3ZjMi5vdmNUb0JpdGdvU2hhcmUudVNpZy50b1N0cmluZygpID8/ICcnLFxuICAgICAgICB2c3NQcm9vZjogb3ZjMi5vdmNUb0JpdGdvU2hhcmUudnNzUHJvb2YgPz8gJycsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmFkZCh7XG4gICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICBrZXlTaGFyZXMsXG4gICAgICBrZXlUeXBlOiAndHNzJyxcbiAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IG92YzEuZ3BnUHViS2V5LFxuICAgICAgYmFja3VwR1BHUHVibGljS2V5OiBvdmMyLmdwZ1B1YktleSxcbiAgICAgIGVudGVycHJpc2UsXG4gICAgfSk7XG4gICAgYXNzZXJ0KGtleS5rZXlTaGFyZXMpO1xuICAgIGFzc2VydChrZXkuY29tbW9uS2V5Y2hhaW4pO1xuICAgIGFzc2VydChrZXkud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyk7XG5cbiAgICBjb25zdCBiaXRnb1RvVXNlclNoYXJlID0ga2V5LmtleVNoYXJlcy5maW5kKFxuICAgICAgKHZhbHVlOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9KSA9PiB2YWx1ZS5mcm9tID09PSAnYml0Z28nICYmIHZhbHVlLnRvID09PSAndXNlcidcbiAgICApO1xuICAgIGFzc2VydChiaXRnb1RvVXNlclNoYXJlKTtcbiAgICBhc3NlcnQoYml0Z29Ub1VzZXJTaGFyZS52c3NQcm9vZik7XG4gICAgYXNzZXJ0KGJpdGdvVG9Vc2VyU2hhcmUucGFpbGxpZXJQdWJsaWNLZXkpO1xuICAgIGNvbnN0IGJpdGdvVG9CYWNrdXBTaGFyZSA9IGtleS5rZXlTaGFyZXMuZmluZChcbiAgICAgICh2YWx1ZTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSkgPT4gdmFsdWUuZnJvbSA9PT0gJ2JpdGdvJyAmJiB2YWx1ZS50byA9PT0gJ2JhY2t1cCdcbiAgICApO1xuICAgIGFzc2VydChiaXRnb1RvQmFja3VwU2hhcmUpO1xuICAgIGFzc2VydChiaXRnb1RvQmFja3VwU2hhcmUudnNzUHJvb2YpO1xuICAgIGFzc2VydChiaXRnb1RvQmFja3VwU2hhcmUucGFpbGxpZXJQdWJsaWNLZXkpO1xuXG4gICAgLy8gQ3JlYXRlIEpTT04gZGF0YSB3aXRoIHBsYXRmb3JtIHNoYXJlcyBmb3IgT1ZDLTEgYW5kIE9WQy0yXG4gICAgY29uc3QgYml0Z29Ub092Y091dHB1dDogQml0R29Ub092Y0pTT04gPSB7XG4gICAgICB3YWxsZXQ6IHtcbiAgICAgICAgLi4uZGVjb2RlZE92Y091dHB1dCxcbiAgICAgICAgcGxhdGZvcm06IHtcbiAgICAgICAgICBjb21tb25LZXljaGFpbjoga2V5LmNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHdhbGxldEdwZ1B1YktleVNpZ3M6IGtleS53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzLFxuICAgICAgICAgIG92Yzoge1xuICAgICAgICAgICAgLy8gQml0R28gdG8gVXNlciAoT1ZDLTEpXG4gICAgICAgICAgICAxOiB7XG4gICAgICAgICAgICAgIGJpdGdvVG9PdmNTaGFyZToge1xuICAgICAgICAgICAgICAgIGk6IDEsXG4gICAgICAgICAgICAgICAgajogMyxcbiAgICAgICAgICAgICAgICBwdWJsaWNTaGFyZTogYml0Z29Ub1VzZXJTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlU2hhcmU6IGJpdGdvVG9Vc2VyU2hhcmUucHJpdmF0ZVNoYXJlLFxuICAgICAgICAgICAgICAgIHBhaWxsaWVyUHVibGljS2V5OiBiaXRnb1RvVXNlclNoYXJlLnBhaWxsaWVyUHVibGljS2V5LFxuICAgICAgICAgICAgICAgIHZzc1Byb29mOiBiaXRnb1RvVXNlclNoYXJlLnZzc1Byb29mLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIEJpdEdvIHRvIEJhY2t1cCAoT1ZDLTIpXG4gICAgICAgICAgICAyOiB7XG4gICAgICAgICAgICAgIGJpdGdvVG9PdmNTaGFyZToge1xuICAgICAgICAgICAgICAgIGk6IDIsXG4gICAgICAgICAgICAgICAgajogMyxcbiAgICAgICAgICAgICAgICBwdWJsaWNTaGFyZTogYml0Z29Ub0JhY2t1cFNoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICAgICAgICAgIHByaXZhdGVTaGFyZTogYml0Z29Ub0JhY2t1cFNoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgICAgICAgICBwYWlsbGllclB1YmxpY0tleTogYml0Z29Ub0JhY2t1cFNoYXJlLnBhaWxsaWVyUHVibGljS2V5LFxuICAgICAgICAgICAgICAgIHZzc1Byb29mOiBiaXRnb1RvQmFja3VwU2hhcmUudnNzUHJvb2YsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBNYXJrIGl0IHJlYWR5IGZvciBuZXh0IG9wZXJhdGlvbiwgc2hvdWxkIGJlIDJcbiAgICBiaXRnb1RvT3ZjT3V0cHV0LndhbGxldC5zdGF0ZSArPSAxO1xuXG4gICAgY29uc3Qgb3V0cHV0OiBCaXRHb0tleUZyb21PdmNTaGFyZXMgPSB7XG4gICAgICBiaXRHb0tleUlkOiBrZXkuaWQsXG4gICAgICBiaXRHb091dHB1dEpzb25Gb3JPdmM6IGJpdGdvVG9PdmNPdXRwdXQsXG4gICAgfTtcblxuICAgIHJldHVybiBkZWNvZGVPckVsc2UoQml0R29LZXlGcm9tT3ZjU2hhcmVzLm5hbWUsIEJpdEdvS2V5RnJvbU92Y1NoYXJlcywgb3V0cHV0LCAoZXJyb3JzKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHByb2R1Y2luZyB0aGUgb3V0cHV0OiAke2Vycm9yc31gKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdXNlciBrZXljaGFpbiwgZW5jcnlwdCB0aGUgcHJpdmF0ZSBrZXkgd2l0aCB0aGUgd2FsbGV0IHBhc3NwaHJhc2UgYW5kIHN0b3JlIGl0IGluIEJpdEdvLlxuICAgKiBAcGFyYW0gd2FsbGV0UGFzc3BocmFzZVxuICAgKiBAcmV0dXJucyBLZXljaGFpbiBpbmNsdWRpbmcgdGhlIGRlY3J5cHRlZCBwcml2YXRlIGtleVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVXNlcktleWNoYWluKHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZywgZW5jcnlwdGlvblZlcnNpb24/OiBFbmNyeXB0aW9uVmVyc2lvbik6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBrZXljaGFpbnMgPSB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpO1xuICAgIGNvbnN0IG5ld0tleWNoYWluID0ga2V5Y2hhaW5zLmNyZWF0ZSgpO1xuICAgIGNvbnN0IG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSA9IGdlbmVyYXRlUmFuZG9tUGFzc3dvcmQoNSk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRQcnYgPSBhd2FpdCB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBpbnB1dDogbmV3S2V5Y2hhaW4ucHJ2LFxuICAgICAgZW5jcnlwdGlvblZlcnNpb24sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGF3YWl0IGtleWNoYWlucy5hZGQoe1xuICAgICAgICBlbmNyeXB0ZWRQcnYsXG4gICAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgICAgcHViOiBuZXdLZXljaGFpbi5wdWIsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgfSkpLFxuICAgICAgcHJ2OiBuZXdLZXljaGFpbi5wcnYsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3RhdGUgYW4gb2ZjIG11bHRpLXVzZXIta2V5Y2hhaW4gYnkgcmVjcmVhdGluZyBhIG5ldyBrZXlwYWlyLCBlbmNyeXB0IGl0IHVzaW5nIHRoZSB1c2VyIHBhc3N3b3JkIGFuZCBzZW50IGl0IHRvIFdQXG4gICAqIFRoaXMgaXMgb25seSBtZWFudCB0byBiZSBjYWxsZWQgYnkgb2ZjIG11bHRpLXVzZXItd2FsbGV0J3Mga2V5LCBhbmQgd2lsbCB0aHJvdyBpZiBvdGhlcndpc2UuXG4gICAqXG4gICAqIFJlcXVpcmVzIDJmYSBhdXRoIGJlZm9yZSBjYWxsaW5nLiBDYWxsIHRoZSBiaXRnby51bmxvY2soKSBTREsgbWV0aG9kIHRvIHVubG9jayB0aGUgc2Vzc2lvbiBmaXJzdC5cbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzIGZvciB0aGUgcm90YXRlIGtleWNoYWluIG1ldGhvZFxuICAgKiBAcmV0dXJuIHJvdGF0ZWRLZXljaGFpblxuICAgKi9cbiAgYXN5bmMgcm90YXRlS2V5Y2hhaW4ocGFyYW1zOiBSb3RhdGVLZXljaGFpbk9wdGlvbnMpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3Qga2V5Q2hhaW4gPSBhd2FpdCB0aGlzLmdldCh7IGlkOiBwYXJhbXMuaWQgfSk7XG4gICAgaWYgKCFLZXljaGFpbnMuaXNNdWx0aVVzZXJLZXkoa2V5Q2hhaW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJvdGF0ZUtleWNoYWluIGlzIG9ubHkgcGVybWl0dGVkIGZvciBvZmMgbXVsdGktdXNlci1rZXkgd2FsbGV0YCk7XG4gICAgfVxuXG4gICAgbGV0IHB1Yjogc3RyaW5nLCBlbmNyeXB0ZWRQcnY6IHN0cmluZztcbiAgICBpZiAoJ2VuY3J5cHRlZFBydicgaW4gcGFyYW1zKSB7XG4gICAgICAvLyBjbGllbnQgcGFzc2VkIGluIHB1YiBhbmQgZW5jcnlwdGVkUHJ2IGRpcmVjdGx5XG4gICAgICBwdWIgPSBwYXJhbXMucHViO1xuICAgICAgZW5jcnlwdGVkUHJ2ID0gcGFyYW1zLmVuY3J5cHRlZFBydjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYml0Z28gZ2VuZXJhdGUgcHViIGFuZCBwcnYgYW5kIGVuY3J5cHQgaXRcbiAgICAgIGNvbnN0IHsgcHViOiBrZXlQdWIsIHBydjoga2V5UHJ2IH0gPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgaWYgKCFrZXlQdWIpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0V4cGVjdGVkIGEgcHVibGljIGtleSB0byBiZSBnZW5lcmF0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHB1YiA9IGtleVB1YjtcbiAgICAgIGVuY3J5cHRlZFBydiA9IGF3YWl0IHRoaXMuYml0Z28uZW5jcnlwdCh7XG4gICAgICAgIGlucHV0OiBrZXlQcnYsXG4gICAgICAgIHBhc3N3b3JkOiBwYXJhbXMucGFzc3dvcmQsXG4gICAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iaXRnb1xuICAgICAgLnB1dCh0aGlzLmJhc2VDb2luLnVybChgL2tleS8ke3BhcmFtcy5pZH1gKSlcbiAgICAgIC5zZW5kKHtcbiAgICAgICAgZW5jcnlwdGVkUHJ2LFxuICAgICAgICBwdWIsXG4gICAgICAgIHJlcUlkOiBwYXJhbXMucmVxSWQsXG4gICAgICB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBoZWxwZXIgbWV0aG9kIHRvIGRldGVybWluZSBpZiBhIGtleWNoYWluIGlzIGEgb2ZjIG11bHRpLXVzZXIta2V5XG4gICAqIEBwYXJhbSBrZXljaGFpblxuICAgKi9cbiAgc3RhdGljIGlzTXVsdGlVc2VyS2V5KGtleWNoYWluOiBLZXljaGFpbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoa2V5Y2hhaW4uY29pblNwZWNpZmljPy5vZmM/LlsnZmVhdHVyZXMnXSA/PyBbXSkuaW5jbHVkZXMoJ211bHRpLXVzZXIta2V5Jyk7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"pendingApproval.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/pendingApproval/pendingApproval.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,EACL,IAAI,EACL,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAoB3C,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,CAA8C;IAC/D,OAAO,CAAC,MAAM,CAAC,CAAU;IACzB,OAAO,CAAC,gBAAgB,CAAsB;gBAElC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,OAAO;IAwB7G;;OAEG;IACH,EAAE,IAAI,MAAM;IAIZ,MAAM,IAAI,mBAAmB;IAI7B;;;;;OAKG;IACH,SAAS,IAAI,SAAS;IAUtB;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,SAAS;IAI9B;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC;;OAEG;IACH,KAAK,IAAI,KAAK;IAId;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,IAAI,IAAI,mBAAmB;IAI3B;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;OAGG;IACH,GAAG,CAAC,KAAK,SAAK,GAAG,MAAM;IAIvB;;;;;OAKG;IACG,GAAG,CAAC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAKvE;;OAEG;IACG,OAAO,CAAC,MAAM,GAAE,cAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAuCxD;;;OAGG;IACG,MAAM,CAAC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAI9D;;;;;OAKG;IACG,MAAM,CAAC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAI9D;;;;OAIG;IACG,6BAA6B,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAmC9G;;;;OAIG;IACG,0BAA0B,CAAC,MAAM,GAAE,GAAQ,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IA6ExF,OAAO,CAAC,sBAAsB;YAgChB,UAAU;IAyCxB;;;;;;OAMG;YACW,WAAW;IAkCzB;;OAEG;YACW,cAAc;CAqC7B"}
1
+ {"version":3,"file":"pendingApproval.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/pendingApproval/pendingApproval.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,EACL,IAAI,EACL,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAsB3C,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,CAA8C;IAC/D,OAAO,CAAC,MAAM,CAAC,CAAU;IACzB,OAAO,CAAC,gBAAgB,CAAsB;gBAElC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,OAAO;IAwB7G;;OAEG;IACH,EAAE,IAAI,MAAM;IAIZ,MAAM,IAAI,mBAAmB;IAI7B;;;;;OAKG;IACH,SAAS,IAAI,SAAS;IAUtB;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,SAAS;IAI9B;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC;;OAEG;IACH,KAAK,IAAI,KAAK;IAId;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,IAAI,IAAI,mBAAmB;IAI3B;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;OAGG;IACH,GAAG,CAAC,KAAK,SAAK,GAAG,MAAM;IAIvB;;;;;OAKG;IACG,GAAG,CAAC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAKvE;;OAEG;IACG,OAAO,CAAC,MAAM,GAAE,cAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAuCxD;;;OAGG;IACG,MAAM,CAAC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAI9D;;;;;OAKG;IACG,MAAM,CAAC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAI9D;;;;OAIG;IACG,6BAA6B,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAmC9G;;;;OAIG;IACG,0BAA0B,CAAC,MAAM,GAAE,GAAQ,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IA6ExF,OAAO,CAAC,sBAAsB;YAgChB,UAAU;IAyCxB;;;;;;OAMG;YACW,WAAW;IAkCzB;;OAEG;YACW,cAAc;CAqC7B"}
@@ -448,4 +448,4 @@ class PendingApproval {
448
448
  }
449
449
  }
450
450
  exports.PendingApproval = PendingApproval;
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ0FwcHJvdmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3BlbmRpbmdBcHByb3ZhbC9wZW5kaW5nQXBwcm92YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwwQ0FBNEI7QUFDNUIseURBQTJDO0FBRzNDLHdEQVE0QjtBQUM1QixvQ0FBc0Q7QUFFdEQsdURBQW9EO0FBR3BELDREQUFpRTtBQUNqRSw4Q0FBaUU7QUFHakUsMENBQThDO0FBQzlDLG9EQUE0QjtBQWE1QixNQUFhLGVBQWU7SUFPMUIsWUFBWSxLQUFnQixFQUFFLFFBQW1CLEVBQUUsbUJBQXdDLEVBQUUsTUFBZ0I7UUFDM0csSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHVCQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGtCQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO1lB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QyxzREFBc0QsQ0FBQyxDQUFDO2dCQUMxRSxDQUFDO2dCQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO2dCQUU1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxzQkFBSSxDQUFDLHdCQUF3QjtnQkFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO2dCQUN6RixDQUFDO2dCQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7Z0JBQ3BGLENBQUM7Z0JBQ0QsTUFBTTtRQUNWLENBQUM7UUFDRCxPQUFPO0lBQ1QsQ0FBQztDQUNGO0FBbmRELDBDQW1kQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IElCYXNlQ29pbiB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQge1xuICBBcHByb3ZlT3B0aW9ucyxcbiAgSVBlbmRpbmdBcHByb3ZhbCxcbiAgT3duZXJUeXBlLFxuICBQZW5kaW5nQXBwcm92YWxEYXRhLFxuICBQZW5kaW5nQXBwcm92YWxJbmZvLFxuICBTdGF0ZSxcbiAgVHlwZSxcbn0gZnJvbSAnLi4vcGVuZGluZ0FwcHJvdmFsJztcbmltcG9ydCB7IFJlcXVlc3RUcmFjZXIsIFJlcXVlc3RUeXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgSVdhbGxldCB9IGZyb20gJy4uL3dhbGxldCc7XG5pbXBvcnQgeyBCdWlsZFBhcmFtcyB9IGZyb20gJy4uL3dhbGxldC9CdWlsZFBhcmFtcyc7XG5pbXBvcnQgeyBJUmVxdWVzdFRyYWNlciB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgQmFzZVRzc1V0aWxzIGZyb20gJy4uL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMnO1xuaW1wb3J0IEVkZHNhVXRpbHMsIHsgRWRkc2FNUEN2MlV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdHNzL2VkZHNhJztcbmltcG9ydCB7IEVjZHNhTVBDdjJVdGlscywgRWNkc2FVdGlscyB9IGZyb20gJy4uL3V0aWxzL3Rzcy9lY2RzYSc7XG5pbXBvcnQgeyBLZXlTaGFyZSBhcyBFY2RzYUtleVNoYXJlIH0gZnJvbSAnLi4vdXRpbHMvdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IEtleVNoYXJlIGFzIEVkZHNhS2V5U2hhcmUgfSBmcm9tICcuLi91dGlscy90c3MvZWRkc2EvdHlwZXMnO1xuaW1wb3J0IHsgc2VuZFR4UmVxdWVzdCB9IGZyb20gJy4uL3Rzcy9jb21tb24nO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG50eXBlIFByZUFwcHJvdmVSZXN1bHQgPSB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiBzdHJpbmc7XG59O1xuXG50eXBlIEFwcHJvdmVQZW5kaW5nQXBwcm92YWxSZXF1ZXN0Qm9keSA9IHtcbiAgc3RhdGU6ICdhcHByb3ZlZCc7XG4gIG90cDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYWxmU2lnbmVkPzogc3RyaW5nIHwgT21pdDxQcmVBcHByb3ZlUmVzdWx0LCAnaGFsZlNpZ25lZCc+O1xufTtcblxuZXhwb3J0IGNsYXNzIFBlbmRpbmdBcHByb3ZhbCBpbXBsZW1lbnRzIElQZW5kaW5nQXBwcm92YWwge1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUNvaW46IElCYXNlQ29pbjtcbiAgcHJpdmF0ZSB0c3NVdGlscz86IEJhc2VUc3NVdGlsczxFY2RzYUtleVNoYXJlIHwgRWRkc2FLZXlTaGFyZT47XG4gIHByaXZhdGUgd2FsbGV0PzogSVdhbGxldDtcbiAgcHJpdmF0ZSBfcGVuZGluZ0FwcHJvdmFsOiBQZW5kaW5nQXBwcm92YWxEYXRhO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGJhc2VDb2luOiBJQmFzZUNvaW4sIHBlbmRpbmdBcHByb3ZhbERhdGE6IFBlbmRpbmdBcHByb3ZhbERhdGEsIHdhbGxldD86IElXYWxsZXQpIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5iYXNlQ29pbiA9IGJhc2VDb2luO1xuICAgIHRoaXMud2FsbGV0ID0gd2FsbGV0O1xuXG4gICAgaWYgKHRoaXMuYmFzZUNvaW4uc3VwcG9ydHNUc3MoKSkge1xuICAgICAgaWYgKHRoaXMuYmFzZUNvaW4uZ2V0TVBDQWxnb3JpdGhtKCkgPT09ICdlY2RzYScpIHtcbiAgICAgICAgaWYgKHRoaXMud2FsbGV0Py5tdWx0aXNpZ1R5cGVWZXJzaW9uKCkgPT09ICdNUEN2MicpIHtcbiAgICAgICAgICB0aGlzLnRzc1V0aWxzID0gbmV3IEVjZHNhTVBDdjJVdGlscyh0aGlzLmJpdGdvLCB0aGlzLmJhc2VDb2luLCB3YWxsZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudHNzVXRpbHMgPSBuZXcgRWNkc2FVdGlscyh0aGlzLmJpdGdvLCB0aGlzLmJhc2VDb2luLCB3YWxsZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy53YWxsZXQ/Lm11bHRpc2lnVHlwZVZlcnNpb24oKSA9PT0gJ01QQ3YyJykge1xuICAgICAgICAgIHRoaXMudHNzVXRpbHMgPSBuZXcgRWRkc2FNUEN2MlV0aWxzKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4sIHdhbGxldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50c3NVdGlscyA9IG5ldyBFZGRzYVV0aWxzKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4sIHdhbGxldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wZW5kaW5nQXBwcm92YWwgPSBwZW5kaW5nQXBwcm92YWxEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaWQgZm9yIHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuaWQ7XG4gIH1cblxuICB0b0pTT04oKTogUGVuZGluZ0FwcHJvdmFsRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG93bmVyIHR5cGUgKHdhbGxldCBvciBlbnRlcnByaXNlKVxuICAgKiBQZW5kaW5nIGFwcHJvdmFscyBjYW4gYmUgYXBwcm92ZWQgb3IgbW9kaWZpZWQgYnkgZGlmZmVyZW50IHNjb3BlcyAoZGVwZW5kaW5nIG9uIGhvdyB0aGV5IHdlcmUgY3JlYXRlZClcbiAgICogSWYgYSBwZW5kaW5nIGFwcHJvdmFsIGlzIG93bmVkIGJ5IGEgd2FsbGV0LCB0aGVuIGl0IGNhbiBiZSBhcHByb3ZlZCBieSBhZG1pbmlzdHJhdG9ycyBvZiB0aGUgd2FsbGV0XG4gICAqIElmIGEgcGVuZGluZyBhcHByb3ZhbCBpcyBvd25lZCBieSBhbiBlbnRlcnByaXNlLCB0aGVuIGl0IGNhbiBiZSBhcHByb3ZlZCBieSBhZG1pbmlzdHJhdG9ycyBvZiB0aGUgZW50ZXJwcmlzZVxuICAgKi9cbiAgb3duZXJUeXBlKCk6IE93bmVyVHlwZSB7XG4gICAgaWYgKHRoaXMuX3BlbmRpbmdBcHByb3ZhbC53YWxsZXQpIHtcbiAgICAgIHJldHVybiBPd25lclR5cGUuV0FMTEVUO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGVuZGluZ0FwcHJvdmFsLmVudGVycHJpc2UpIHtcbiAgICAgIHJldHVybiBPd25lclR5cGUuRU5URVJQUklTRTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHBlbmRpbmcgYXBwcm92YWwgb3duZXI6IG5laXRoZXIgd2FsbGV0IG5vciBlbnRlcnByaXNlIHdhcyBwcmVzZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaWQgb2YgdGhlIHdhbGxldCB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIHdhbGxldElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC53YWxsZXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBlbnRlcnByaXNlIElEIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICBlbnRlcnByaXNlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmVudGVycHJpc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGF0ZSBvZiB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgc3RhdGUoKTogU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpZCBvZiB0aGUgdXNlciB0aGF0IHBlcmZvcm1lZCB0aGUgYWN0aW9uIHJlc3VsdGluZyBpbiB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgY3JlYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuY3JlYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHR5cGUgb2YgdGhlIHBlbmRpbmcgYXBwcm92YWwgKHdoYXQgaXQgYXBwcm92ZXMpXG4gICAqL1xuICB0eXBlKCk6IFR5cGUge1xuICAgIGlmICghdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGVuZGluZyBhcHByb3ZhbCBpbmZvIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmluZm8udHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIGluZm8oKTogUGVuZGluZ0FwcHJvdmFsSW5mbyB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5pbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGFwcHJvdmFscyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgdGhpcyBQZW5kaW5nQXBwcm92YWwgdG8gYmUgYXBwcm92ZWQuXG4gICAqIERlZmF1bHRzIHRvIDEgaWYgYXBwcm92YWxzUmVxdWlyZWQgZG9lc24ndCBleGlzdCBvbiB0aGUgb2JqZWN0XG4gICAqL1xuICBhcHByb3ZhbHNSZXF1aXJlZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuYXBwcm92YWxzUmVxdWlyZWQgfHwgMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHVybCBmb3IgdGhpcyBQZW5kaW5nQXBwcm92YWwgZm9yIG1ha2luZyByZXF1ZXN0cyB0byB0aGUgc2VydmVyLlxuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIHVybChleHRyYSA9ICcnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlQ29pbi51cmwoJy9wZW5kaW5nYXBwcm92YWxzLycgKyB0aGlzLmlkKCkgKyBleHRyYSk7XG4gIH1cblxuICAvKipcbiAgICogUmVmZXRjaGVzIHRoaXMgUGVuZGluZ0FwcHJvdmFsIGZyb20gdGhlIHNlcnZlciBhbmQgcmV0dXJucyBpdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgbXV0YXRlcyB0aGUgUGVuZGluZ0FwcHJvdmFsIG9iamVjdCBpbiBwbGFjZS5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZ2V0KHBhcmFtczogUmVjb3JkPHN0cmluZywgbmV2ZXI+ID0ge30pOiBQcm9taXNlPFBlbmRpbmdBcHByb3ZhbD4ge1xuICAgIHRoaXMuX3BlbmRpbmdBcHByb3ZhbCA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCkpLnJlc3VsdCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyBQZW5kaW5nQXBwcm92YWwgdG8gYW4gYXBwcm92ZWQgc3RhdGVcbiAgICovXG4gIGFzeW5jIGFwcHJvdmUocGFyYW1zOiBBcHByb3ZlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBwYXJhbXMucHJldmlld1BlbmRpbmdUeHMgPSB0cnVlO1xuICAgIHBhcmFtcy5wZW5kaW5nQXBwcm92YWxJZCA9IHRoaXMuaWQoKTtcbiAgICBjb25zdCBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gdGhpcy5jYW5SZWNyZWF0ZVRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG4gICAgYXdhaXQgdGhpcy5wb3B1bGF0ZVdhbGxldCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5wcmVBcHByb3ZlKHBhcmFtcywgcmVxSWQpO1xuXG4gICAgICBjb25zdCBhcHByb3ZhbFBhcmFtczogQXBwcm92ZVBlbmRpbmdBcHByb3ZhbFJlcXVlc3RCb2R5ID0geyBzdGF0ZTogJ2FwcHJvdmVkJywgb3RwOiBwYXJhbXMub3RwIH07XG4gICAgICBpZiAodHJhbnNhY3Rpb24pIHtcbiAgICAgICAgLy8gaWYgdGhlIHRyYW5zYWN0aW9uIGFscmVhZHkgaGFzIGEgaGFsZiBzaWduZWQgcHJvcGVydHksIHdlIHRha2UgdGhhdCBkaXJlY3RseVxuICAgICAgICBhcHByb3ZhbFBhcmFtcy5oYWxmU2lnbmVkID0gdHJhbnNhY3Rpb24uaGFsZlNpZ25lZCB8fCB0cmFuc2FjdGlvbjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5wdXQodGhpcy51cmwoKSkuc2VuZChhcHByb3ZhbFBhcmFtcykucmVzdWx0KCk7XG5cbiAgICAgIC8vIGlmIHRoZSByZXNwb25zZSBjb21lcyB3aXRoIGFuIGVycm9yLCBtZWFucyB0aGF0IHRoZSB0cmFuc2FjdGlvbiB0cmlnZ2VyZWQgYW5vdGhlciBjb25kaXRpb25cbiAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgncGVuZGluZ0FwcHJvdmFsJykpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wZW5kaW5nQXBwcm92YWwgPSByZXNwb25zZTtcbiAgICAgIGF3YWl0IHRoaXMucG9zdEFwcHJvdmUocGFyYW1zLCByZXFJZCk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhY2FuUmVjcmVhdGVUcmFuc2FjdGlvbiAmJlxuICAgICAgICAoZS5tZXNzYWdlLmluZGV4T2YoJ2NvdWxkIG5vdCBmaW5kIHVuc3BlbnQgb3V0cHV0IGZvciBpbnB1dCcpICE9PSAtMSB8fFxuICAgICAgICAgIGUubWVzc2FnZS5pbmRleE9mKCd0cmFuc2FjdGlvbiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyB0cmFuc2FjdGlvbiBpbiB0aGUgc2VuZCBxdWV1ZScpICE9PSAtMSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3BlbnRzIGV4cGlyZWQsIHdhbGxldCBwYXNzcGhyYXNlIG9yIHhwcnYgcmVxdWlyZWQgdG8gcmVjcmVhdGUgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyBQZW5kaW5nQXBwcm92YWwgdG8gYSByZWplY3RlZCBzdGF0ZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyByZWplY3QocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28ucHV0KHRoaXMudXJsKCkpLnNlbmQoeyBzdGF0ZTogJ3JlamVjdGVkJyB9KS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGlhcyBmb3IgUGVuZGluZ0FwcHJvdmFsLnJlamVjdCgpXG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGNhbmNlbChwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPiA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWplY3QocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZSBhbmQgc2lnbiBUU1MgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtBcHByb3ZlT3B0aW9uc30gcGFyYW1zIG5lZWRlZCB0byBnZXQgdHhzIGFuZCB1c2UgdGhlIHdhbGxldFBhc3NwaHJhc2UgdG8gdHNzIHNpZ25cbiAgICogQHBhcmFtIHtSZXF1ZXN0VHJhY2VyfSByZXFJZCBpZCB0cmFjZXIuXG4gICAqL1xuICBhc3luYyByZWNyZWF0ZUFuZFNpZ25UU1NUcmFuc2FjdGlvbihwYXJhbXM6IEFwcHJvdmVPcHRpb25zLCByZXFJZDogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPHsgdHhIZXg6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgeyB3YWxsZXRQYXNzcGhyYXNlIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSB0aGlzLl9wZW5kaW5nQXBwcm92YWwudHhSZXF1ZXN0SWQ7XG5cbiAgICBpZiAoIXRoaXMud2FsbGV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dhbGxldCBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXdhbGxldFBhc3NwaHJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd2FsbGV0UGFzc3BocmFzZSBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXR4UmVxdWVzdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4UmVxdWVzdElkIG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY3J5cHRlZFBydiA9IGF3YWl0IHRoaXMud2FsbGV0LmdldFBydih7IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgY29uc3QgdHhSZXF1ZXN0ID0gYXdhaXQgdGhpcy50c3NVdGlscyEucmVjcmVhdGVUeFJlcXVlc3QodHhSZXF1ZXN0SWQsIGRlY3J5cHRlZFBydiwgcmVxSWQpO1xuICAgIGlmICh0eFJlcXVlc3QuYXBpVmVyc2lvbiA9PT0gJ2xpdGUnKSB7XG4gICAgICBpZiAoIXR4UmVxdWVzdC51bnNpZ25lZFR4cyB8fCB0eFJlcXVlc3QudW5zaWduZWRUeHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBlcnJvciwgbm8gdHJhbnNhY3Rpb25zIGZvdW5kIGluIHR4UmVxdWVzdC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4SGV4OiB0eFJlcXVlc3QudW5zaWduZWRUeHNbMF0uc2VyaWFsaXplZFR4SGV4LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0eFJlcXVlc3QudHJhbnNhY3Rpb25zIHx8IHR4UmVxdWVzdC50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBlcnJvciwgbm8gdHJhbnNhY3Rpb25zIGZvdW5kIGluIHR4UmVxdWVzdC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4SGV4OiB0eFJlcXVlc3QudHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGUgYSB0cmFuc2FjdGlvbiBmb3IgYSBwZW5kaW5nIGFwcHJvdmFsIHRvIHJlc3BvbmQgdG8gdXBkYXRlZCBuZXR3b3JrIGNvbmRpdGlvbnNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcmVxSWRcbiAgICovXG4gIGFzeW5jIHJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtczogYW55ID0ge30sIHJlcUlkPzogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIHRoaXMgbWV0aG9kIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBleGlzdGluZyB0cmFuc2FjdGlvbiByZXF1ZXN0c1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdCA9IHRoaXMuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdDtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0cmFuc2FjdGlvblJlcXVlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCByZWNyZWF0ZSB0cmFuc2FjdGlvbiB3aXRob3V0IHRyYW5zYWN0aW9uIHJlcXVlc3QnKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLndhbGxldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHJlY3JlYXRlIHRyYW5zYWN0aW9uIHdpdGhvdXQgd2FsbGV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxQcmVidWlsZCA9IHRyYW5zYWN0aW9uUmVxdWVzdC5jb2luU3BlY2lmaWNbdGhpcy5iYXNlQ29pbi50eXBlXTtcblxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0cmFuc2FjdGlvblJlcXVlc3QucmVjaXBpZW50cztcbiAgICBsZXQgcHJlYnVpbGRQYXJhbXMgPSBfLmV4dGVuZCh7fSwgcGFyYW1zLCB7IHJlY2lwaWVudHM6IHJlY2lwaWVudHMgfSwgdHJhbnNhY3Rpb25SZXF1ZXN0LmJ1aWxkUGFyYW1zKTtcblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChvcmlnaW5hbFByZWJ1aWxkLmhvcFRyYW5zYWN0aW9uKSkge1xuICAgICAgcHJlYnVpbGRQYXJhbXMuaG9wID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIGlmICh0cmFuc2FjdGlvblJlcXVlc3QuYnVpbGRQYXJhbXMgJiYgdHJhbnNhY3Rpb25SZXF1ZXN0LmJ1aWxkUGFyYW1zLnR5cGUgPT09ICdjb25zb2xpZGF0ZScpIHtcbiAgICAgIC8vIGNvbnNvbGlkYXRlIHRhZyBpcyBpbiB0aGUgYnVpbGQgcGFyYW1zIC0gdGhpcyBpcyBhIGNvbnNvbGlkYXRpb24gdHJhbnNhY3Rpb24sIHNvXG4gICAgICAvLyBpdCBuZWVkcyB0byBiZSByZWJ1aWx0IHVzaW5nIHRoZSBzcGVjaWFsIGNvbnNvbGlkYXRpb24gYnVpbGQgcm91dGVcbiAgICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFUcmFjZXIpO1xuICAgICAgcHJlYnVpbGRQYXJhbXMucHJlYnVpbGRUeCA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgICAgLnBvc3QodGhpcy53YWxsZXQudXJsKGAvY29uc29saWRhdGVVbnNwZW50c2ApKVxuICAgICAgICAuc2VuZChCdWlsZFBhcmFtcy5lbmNvZGUocHJlYnVpbGRQYXJhbXMpKVxuICAgICAgICAucmVzdWx0KCk7XG4gICAgICBkZWxldGUgcHJlYnVpbGRQYXJhbXMucmVjaXBpZW50cztcbiAgICB9XG5cbiAgICBwcmVidWlsZFBhcmFtcyA9IF8uZXh0ZW5kKHt9LCBwcmVidWlsZFBhcmFtcywgeyByZXFJZDogcmVxSWQgfSk7XG4gICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLndhbGxldC5wcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbihwcmVidWlsZFBhcmFtcyk7XG4gICAgLy8gY29tcGFyZSBQQVlHbyBmZWVzXG4gICAgY29uc3Qgb3JpZ2luYWxQYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuYmFzZUNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogcHJlYnVpbGRQYXJhbXMsXG4gICAgICB3YWxsZXQ6IHRoaXMud2FsbGV0LFxuICAgICAgdHhQcmVidWlsZDogb3JpZ2luYWxQcmVidWlsZCxcbiAgICB9KTtcbiAgICBjb25zdCByZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuYmFzZUNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogcHJlYnVpbGRQYXJhbXMsXG4gICAgICB3YWxsZXQ6IHRoaXMud2FsbGV0LFxuICAgICAgdHhQcmVidWlsZDogc2lnbmVkVHJhbnNhY3Rpb24sXG4gICAgfSk7XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChyZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpKSB7XG4gICAgICByZXR1cm4gc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHJlY3JlYXRlZFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCAhPT0gJ2JpZ2ludCcgJiZcbiAgICAgICFfLmlzRmluaXRlKHJlY3JlYXRlZFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICFfLmlzVW5kZWZpbmVkKG9yaWdpbmFsUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSAmJlxuICAgICAgcmVjcmVhdGVkUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50ID4gb3JpZ2luYWxQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncmVjcmVhdGVkIHRyYW5zYWN0aW9uIGlzIHVzaW5nIGEgaGlnaGVyIHBheS1hcy15b3UtZ28tZmVlJyk7XG4gICAgfVxuICAgIHJldHVybiBzaWduZWRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qXG4gICAqIENvbGQgd2FsbGV0cyBjYW5ub3QgcmVjcmVhdGUgdHJhbnNhY3Rpb25zIGlmIHRoZSBvbmx5IHRoaW5nIHByb3ZpZGVkIGlzIHRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKlxuICAgKiBUaGUgdHJhbnNhY3Rpb24gY2FuIGJlIHJlY3JlYXRlZCBpZiBlaXRoZXJcbiAgICog4oCTIHRoZXJlIGlzIGFuIHhwcnZcbiAgICog4oCTIHRoZXJlIGlzIGEgd2FsbGV0UGFzc3BocmFzZSBhbmQgdGhlIHdhbGxldCBpcyBub3QgY29sZCAoYmVjYXVzZSBpZiBpdCdzIGNvbGQsIHRoZSBwYXNzcGhyYXNlIGlzIG9mIGxpdHRsZSB1c2UpXG4gICAqXG4gICAqIFRoZXJlZm9yZSwgaWYgbmVpdGhlciBvZiB0aGVzZSBpcyB0cnVlLCB0aGUgdHJhbnNhY3Rpb24gY2Fubm90IGJlIHJlY3JlYXRlZCwgd2hpY2ggaXMgcmVmbGVjdGVkIGluIHRoZSBpZlxuICAgKiBzdGF0ZW1lbnQgYmVsb3cuXG4gICAqXG4gICAqIExpZ2h0bmluZyB0cmFuc2FjdGlvbnMgY2Fubm90IGJlIHJlY3JlYXRlZC5cbiAgICovXG4gIHByaXZhdGUgY2FuUmVjcmVhdGVUcmFuc2FjdGlvbihwYXJhbXM6IEFwcHJvdmVPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNDb2xkV2FsbGV0ID0gISFfLmdldCh0aGlzLndhbGxldCwgJ193YWxsZXQuaXNDb2xkJyk7XG4gICAgY29uc3QgaXNPRkNXYWxsZXQgPSB0aGlzLmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnb2ZjJzsgLy8gT2ZmLWNoYWluIHRyYW5zYWN0aW9ucyBkb24ndCBuZWVkIHRvIGJlIHJlYnVpbHRcbiAgICBjb25zdCBpc0xpZ2h0bmluZ1dhbGxldCA9IHRoaXMuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdsbmJ0Yyc7XG4gICAgaWYgKGlzTGlnaHRuaW5nV2FsbGV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJhbXMueHBydiAmJiAhKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlICYmICFpc0NvbGRXYWxsZXQgJiYgIWlzT0ZDV2FsbGV0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGFyZSBubyByZWNpcGllbnRzLCB0aGVuIHRoZSB0cmFuc2FjdGlvbiBjYW5ub3QgYmUgcmVjcmVhdGVkXG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHRoaXMuaW5mbygpPy50cmFuc2FjdGlvblJlcXVlc3Q/LmJ1aWxkUGFyYW1zPy5yZWNpcGllbnRzIHx8IFtdO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmluZm8oKT8udHJhbnNhY3Rpb25SZXF1ZXN0Py5idWlsZFBhcmFtcz8udHlwZTtcblxuICAgIC8vIFdlIG9ubHkgd2FudCB0byBub3QgcmVjcmVhdGUgdHJhbnNhY3Rpb25zIHdpdGggbm8gcmVjaXBpZW50cyBpZiBpdCBpcyBhIFVUWE8gY29pbi5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJldHVybiAhKFxuICAgICAgdXR4b2xpYi5pc1ZhbGlkTmV0d29yaygodGhpcy5iYXNlQ29pbiBhcyBhbnkpLm5ldHdvcmspICYmXG4gICAgICByZWNpcGllbnRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgdHlwZSAhPT0gJ2NvbnNvbGlkYXRlJ1xuICAgICk7XG4gIH1cblxuICAvKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIHdoaWNoIGlzIGJlaW5nIGFwcHJvdmVkLlxuICAgKiBJZiB0aGlzIFBBIGlzIG9mIHR5cGUgJ3RyYW5zYWN0aW9uUmVxdWVzdCcgdGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byByZWJ1aWxkIGFuZCByZXNpZ24gdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7QXBwcm92ZU9wdGlvbnN9IHBhcmFtc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhblJlY3JlYXRlVHJhbnNhY3Rpb24gLVxuICAgKiBAcGFyYW0ge1JlcXVlc3RUcmFjZXJ9IHJlcUlkIGlkIHRyYWNlclxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcmVBcHByb3ZlKHBhcmFtczogQXBwcm92ZU9wdGlvbnMgPSB7fSwgcmVxSWQ6IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxQcmVBcHByb3ZlUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gVHJhbnNhY3Rpb25SZXF1ZXN0TGl0ZSBvciBNdWx0aXNpZyB0eCdzIG11c3Qgc2lnbiBiZWZvcmUgcGVuZGluZyBhcHByb3ZhbCBpcyBhcHByb3ZlZFxuICAgIC8vIFJlLXNpZ25lZCB0eCBpcyBwcm92aWRlZCB0byB0aGUgcGVuZGluZyBhcHByb3ZhbCBhcGlcbiAgICBpZiAodGhpcy50eXBlKCkgPT09IFR5cGUuVFJBTlNBQ1RJT05fUkVRVUVTVCkge1xuICAgICAgLypcbiAgICAgICAqIElmIHRoaXMgaXMgYSByZXF1ZXN0IGZvciBhcHByb3ZpbmcgYSB0cmFuc2FjdGlvbiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyB1c2VyIGhhcyBhIHByaXZhdGUga2V5IHRvIHRoZSB3YWxsZXRcbiAgICAgICAqIChzb21lIGFkbWlucyBtYXkgbm90IGhhdmUgdGhlIHNwZW5kIHBlcm1pc3Npb24pLCB0aGUgdHJhbnNhY3Rpb24gY291bGQgZWl0aGVyIGJlIHJlYnJvYWRjYXN0IGFzIGlzLCBvciBpdCBjb3VsZFxuICAgICAgICogYmUgcmVjb25zdHJ1Y3RlZC4gSXQgaXMgcHJlZmVyYWJsZSB0byByZWNvbnN0cnVjdCBhIHR4IGluIG9yZGVyIHRvIGFkaGVyZSB0byB0aGUgbGF0ZXN0IG5ldHdvcmsgY29uZGl0aW9uc1xuICAgICAgICogc3VjaCBhcyBuZXdlciB1bnNwZW50cywgZGlmZmVyZW50IGZlZXMsIG9yIGEgaGlnaGVyIHNlcXVlbmNlIGlkXG4gICAgICAgKi9cbiAgICAgIGlmIChwYXJhbXMudHgpIHtcbiAgICAgICAgLy8gdGhlIGFwcHJvdmFsIHR4IHdhcyByZWNvbnN0cnVjdGVkIGFuZCBleHBsaWNpdGx5IHNwZWNpZmllZCAtIHBhc3MgaXQgdGhyb3VnaFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR4SGV4OiBwYXJhbXMudHgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMgdXNlciBtYXkgbm90IGhhdmUgc3BlbmRpbmcgcHJpdmlsZWdlcyBvciBhIHBhc3NwaHJhc2UgbWF5IG5vdCBoYXZlIGJlZW4gcGFzc2VkIGluXG4gICAgICBpZiAoIXRoaXMuY2FuUmVjcmVhdGVUcmFuc2FjdGlvbihwYXJhbXMpKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBUcmFuc2FjdGlvblJlcXVlc3QsIHRoZW4gdGhlIHR4UmVxdWVzdCBhbHJlYWR5IGhhcyB0aGUgdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIE11bHRpU2lnLCB0aGVuIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIGhhbGYgc2lnbmVkIHR4IHRvIHByb3BhZ2F0ZSB0byB0aGUgYXBwcm92YWwgQVBJXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gXy5nZXQoXG4gICAgICAgICAgdGhpcy5pbmZvKCksXG4gICAgICAgICAgYHRyYW5zYWN0aW9uUmVxdWVzdC5jb2luU3BlY2lmaWMuJHt0aGlzLmJhc2VDb2luLnR5cGV9YFxuICAgICAgICApIGFzIFByZUFwcHJvdmVSZXN1bHQ7XG4gICAgICAgIGlmICghXy5pc09iamVjdCh0cmFuc2FjdGlvbikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZXJlIGlzIG5laXRoZXIgYW4gb3JpZ2luYWwgdHJhbnNhY3Rpb24gb2JqZWN0IG5vciBjYW4gYSBuZXcgb25lIGJlIHJlY3JlYXRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWNyZWF0ZUFuZFNpZ25UU1NUcmFuc2FjdGlvbihwYXJhbXMsIHJlcUlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtcywgcmVxSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSBhbnkgcG9zdC1hcHByb3ZhbCBhY3Rpb25zLlxuICAgKiBJZiB0eXBlIGlzICd0cmFuc2FjdGlvblJlcXVlc3RGdWxsJywgdGhpcyB3aWxsIHNpZ24gdGhlIHR4UmVxdWVzdEZ1bGwgaWYgcG9zc2libGVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcmVxSWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcG9zdEFwcHJvdmUocGFyYW1zOiBBcHByb3ZlT3B0aW9ucyA9IHt9LCByZXFJZDogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSgpKSB7XG4gICAgICBjYXNlIFR5cGUuVFJBTlNBQ1RJT05fUkVRVUVTVF9GVUxMOlxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0FwcHJvdmFsLnN0YXRlID09PSBTdGF0ZS5BUFBST1ZFRCkge1xuICAgICAgICAgIC8vIEFmdGVyIHdlIGFwcHJvdmUgYSBsaWdodG5pbmcgdHJhbnNhY3Rpb24sIHdlIHNob3VsZCBwcm9jZWVkIHdpdGggc3VibWl0dGluZyB0aGUgcGF5bWVudFxuICAgICAgICAgIGlmICh0aGlzLmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnbG5idGMnKSB7XG4gICAgICAgICAgICBhc3NlcnQodGhpcy5fcGVuZGluZ0FwcHJvdmFsLnR4UmVxdWVzdElkLCAnTWlzc2luZyB0eFJlcXVlc3RJZCcpO1xuICAgICAgICAgICAgLy8gdGhpcy5wb3B1bGF0ZVdhbGxldCBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgc28gd2Ugc2hvdWxkIGJlIGdvb2QgaGVyZVxuICAgICAgICAgICAgYXNzZXJ0KHRoaXMud2FsbGV0Py5pZCgpLCAnTWlzc2luZyB3YWxsZXQgaWQnKTtcbiAgICAgICAgICAgIC8vIHRvZG86IGFkZCB0ZXN0IGNhc2UgZm9yIHRoaXNcbiAgICAgICAgICAgIC8vIGFkZCBuZXcgdHJhbnNmZXIgYmVmb3JlIHNlbmRpbmcgdHhcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgICAgICAgICAgLnBvc3QoXG4gICAgICAgICAgICAgICAgdGhpcy5iaXRnby51cmwoXG4gICAgICAgICAgICAgICAgICAnL3dhbGxldC8nICsgdGhpcy53YWxsZXQ/LmlkKCkgKyAnL3R4cmVxdWVzdHMvJyArIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZCArICcvdHJhbnNmZXJzJyxcbiAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnNlbmQoKVxuICAgICAgICAgICAgICAucmVzdWx0KCk7XG4gICAgICAgICAgICBhd2FpdCBzZW5kVHhSZXF1ZXN0KFxuICAgICAgICAgICAgICB0aGlzLmJpdGdvLFxuICAgICAgICAgICAgICB0aGlzLndhbGxldD8uaWQoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgUmVxdWVzdFR5cGUudHgsXG4gICAgICAgICAgICAgIHJlcUlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYW5SZWNyZWF0ZVRyYW5zYWN0aW9uKHBhcmFtcykgJiYgdGhpcy5iYXNlQ29pbi5zdXBwb3J0c1RzcygpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uKHBhcmFtcywgcmVxSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgc2VsZi53YWxsZXQgaXMgc2V0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBvcHVsYXRlV2FsbGV0KCk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMud2FsbGV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRPRE8oV1AtMTM0MSk6IGNvbnNvbGlkYXRlL3NpbXBsaWZ5IHRoaXMgbG9naWNcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSgpKSB7XG4gICAgICBjYXNlIFR5cGUuVFJBTlNBQ1RJT05fUkVRVUVTVDpcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0ID0gdGhpcy5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0O1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh0cmFuc2FjdGlvblJlcXVlc3QpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBwcm9wZXJ0eSB0cmFuc2FjdGlvblJlcXVlc3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRXYWxsZXQ6IElXYWxsZXQgPSBhd2FpdCB0aGlzLmJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogdHJhbnNhY3Rpb25SZXF1ZXN0LnNvdXJjZVdhbGxldCB9KTtcblxuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh1cGRhdGVkV2FsbGV0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCAtIHVuYWJsZSB0byBnZXQgd2FsbGV0IHVzaW5nIHNvdXJjZXdhbGxldCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53YWxsZXQgPSB1cGRhdGVkV2FsbGV0O1xuXG4gICAgICAgIGlmICh0aGlzLndhbGxldC5pZCgpICE9PSB0cmFuc2FjdGlvblJlcXVlc3Quc291cmNlV2FsbGV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHNvdXJjZSB3YWxsZXQgZm9yIHBlbmRpbmcgYXBwcm92YWwnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHlwZS5UUkFOU0FDVElPTl9SRVFVRVNUX0ZVTEw6XG4gICAgICAgIGNvbnN0IHdhbGxldElkID0gdGhpcy53YWxsZXRJZCgpO1xuICAgICAgICBpZiAoIXdhbGxldElkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVycm9yLCBwZW5kaW5nQXBwcm92YWwud2FsbGV0IGlzIGV4cGVjdGVkIHRvIGJlIGRlZmluZWQhJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53YWxsZXQgPSBhd2FpdCB0aGlzLmJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogdGhpcy53YWxsZXRJZCgpIH0pO1xuICAgICAgICBpZiAoIXRoaXMud2FsbGV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIC0gdW5hYmxlIHRvIGdldCB3YWxsZXQgdXNpbmcgcGVuZGluZ0FwcHJvdmFsLndhbGxldCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbn1cbiJdfQ==
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ0FwcHJvdmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3BlbmRpbmdBcHByb3ZhbC9wZW5kaW5nQXBwcm92YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwwQ0FBNEI7QUFDNUIseURBQTJDO0FBRzNDLHdEQVE0QjtBQUM1QixvQ0FBc0Q7QUFFdEQsdURBQW9EO0FBR3BELDREQUFpRTtBQUNqRSw4Q0FBaUU7QUFHakUsMENBQThDO0FBQzlDLG9EQUE0QjtBQWU1QixNQUFhLGVBQWU7SUFPMUIsWUFBWSxLQUFnQixFQUFFLFFBQW1CLEVBQUUsbUJBQXdDLEVBQUUsTUFBZ0I7UUFDM0csSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHVCQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGtCQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO1lB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QyxzREFBc0QsQ0FBQyxDQUFDO2dCQUMxRSxDQUFDO2dCQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO2dCQUU1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxzQkFBSSxDQUFDLHdCQUF3QjtnQkFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO2dCQUN6RixDQUFDO2dCQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7Z0JBQ3BGLENBQUM7Z0JBQ0QsTUFBTTtRQUNWLENBQUM7UUFDRCxPQUFPO0lBQ1QsQ0FBQztDQUNGO0FBbmRELDBDQW1kQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IElCYXNlQ29pbiB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQge1xuICBBcHByb3ZlT3B0aW9ucyxcbiAgSVBlbmRpbmdBcHByb3ZhbCxcbiAgT3duZXJUeXBlLFxuICBQZW5kaW5nQXBwcm92YWxEYXRhLFxuICBQZW5kaW5nQXBwcm92YWxJbmZvLFxuICBTdGF0ZSxcbiAgVHlwZSxcbn0gZnJvbSAnLi4vcGVuZGluZ0FwcHJvdmFsJztcbmltcG9ydCB7IFJlcXVlc3RUcmFjZXIsIFJlcXVlc3RUeXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgSVdhbGxldCB9IGZyb20gJy4uL3dhbGxldCc7XG5pbXBvcnQgeyBCdWlsZFBhcmFtcyB9IGZyb20gJy4uL3dhbGxldC9CdWlsZFBhcmFtcyc7XG5pbXBvcnQgeyBJUmVxdWVzdFRyYWNlciB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgQmFzZVRzc1V0aWxzIGZyb20gJy4uL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMnO1xuaW1wb3J0IEVkZHNhVXRpbHMsIHsgRWRkc2FNUEN2MlV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdHNzL2VkZHNhJztcbmltcG9ydCB7IEVjZHNhTVBDdjJVdGlscywgRWNkc2FVdGlscyB9IGZyb20gJy4uL3V0aWxzL3Rzcy9lY2RzYSc7XG5pbXBvcnQgeyBLZXlTaGFyZSBhcyBFY2RzYUtleVNoYXJlIH0gZnJvbSAnLi4vdXRpbHMvdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IEtleVNoYXJlIGFzIEVkZHNhS2V5U2hhcmUgfSBmcm9tICcuLi91dGlscy90c3MvZWRkc2EvdHlwZXMnO1xuaW1wb3J0IHsgc2VuZFR4UmVxdWVzdCB9IGZyb20gJy4uL3Rzcy9jb21tb24nO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG50eXBlIFByZUFwcHJvdmVSZXN1bHQgPSB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiBzdHJpbmc7XG59O1xuXG4vLyBUT0RPKFdDTi01NDEpOiBhZGQgb3B0aW9uYWwgYXR0ZXN0YXRpb24gcGFzcy10aHJvdWdoIGZvciBQVVQgL3BlbmRpbmdhcHByb3ZhbHMvOmlkIChkZWZlcnJlZFxuLy8gdW50aWwgbXVsdGlzaWcgYXR0ZXN0YXRpb24sIFdDTi01MzksIGlzIHZlcmlmaWVkIGVuZC10by1lbmQgb24gc3RhZ2luZykuXG50eXBlIEFwcHJvdmVQZW5kaW5nQXBwcm92YWxSZXF1ZXN0Qm9keSA9IHtcbiAgc3RhdGU6ICdhcHByb3ZlZCc7XG4gIG90cDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYWxmU2lnbmVkPzogc3RyaW5nIHwgT21pdDxQcmVBcHByb3ZlUmVzdWx0LCAnaGFsZlNpZ25lZCc+O1xufTtcblxuZXhwb3J0IGNsYXNzIFBlbmRpbmdBcHByb3ZhbCBpbXBsZW1lbnRzIElQZW5kaW5nQXBwcm92YWwge1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUNvaW46IElCYXNlQ29pbjtcbiAgcHJpdmF0ZSB0c3NVdGlscz86IEJhc2VUc3NVdGlsczxFY2RzYUtleVNoYXJlIHwgRWRkc2FLZXlTaGFyZT47XG4gIHByaXZhdGUgd2FsbGV0PzogSVdhbGxldDtcbiAgcHJpdmF0ZSBfcGVuZGluZ0FwcHJvdmFsOiBQZW5kaW5nQXBwcm92YWxEYXRhO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGJhc2VDb2luOiBJQmFzZUNvaW4sIHBlbmRpbmdBcHByb3ZhbERhdGE6IFBlbmRpbmdBcHByb3ZhbERhdGEsIHdhbGxldD86IElXYWxsZXQpIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5iYXNlQ29pbiA9IGJhc2VDb2luO1xuICAgIHRoaXMud2FsbGV0ID0gd2FsbGV0O1xuXG4gICAgaWYgKHRoaXMuYmFzZUNvaW4uc3VwcG9ydHNUc3MoKSkge1xuICAgICAgaWYgKHRoaXMuYmFzZUNvaW4uZ2V0TVBDQWxnb3JpdGhtKCkgPT09ICdlY2RzYScpIHtcbiAgICAgICAgaWYgKHRoaXMud2FsbGV0Py5tdWx0aXNpZ1R5cGVWZXJzaW9uKCkgPT09ICdNUEN2MicpIHtcbiAgICAgICAgICB0aGlzLnRzc1V0aWxzID0gbmV3IEVjZHNhTVBDdjJVdGlscyh0aGlzLmJpdGdvLCB0aGlzLmJhc2VDb2luLCB3YWxsZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudHNzVXRpbHMgPSBuZXcgRWNkc2FVdGlscyh0aGlzLmJpdGdvLCB0aGlzLmJhc2VDb2luLCB3YWxsZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy53YWxsZXQ/Lm11bHRpc2lnVHlwZVZlcnNpb24oKSA9PT0gJ01QQ3YyJykge1xuICAgICAgICAgIHRoaXMudHNzVXRpbHMgPSBuZXcgRWRkc2FNUEN2MlV0aWxzKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4sIHdhbGxldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50c3NVdGlscyA9IG5ldyBFZGRzYVV0aWxzKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4sIHdhbGxldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wZW5kaW5nQXBwcm92YWwgPSBwZW5kaW5nQXBwcm92YWxEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaWQgZm9yIHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuaWQ7XG4gIH1cblxuICB0b0pTT04oKTogUGVuZGluZ0FwcHJvdmFsRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG93bmVyIHR5cGUgKHdhbGxldCBvciBlbnRlcnByaXNlKVxuICAgKiBQZW5kaW5nIGFwcHJvdmFscyBjYW4gYmUgYXBwcm92ZWQgb3IgbW9kaWZpZWQgYnkgZGlmZmVyZW50IHNjb3BlcyAoZGVwZW5kaW5nIG9uIGhvdyB0aGV5IHdlcmUgY3JlYXRlZClcbiAgICogSWYgYSBwZW5kaW5nIGFwcHJvdmFsIGlzIG93bmVkIGJ5IGEgd2FsbGV0LCB0aGVuIGl0IGNhbiBiZSBhcHByb3ZlZCBieSBhZG1pbmlzdHJhdG9ycyBvZiB0aGUgd2FsbGV0XG4gICAqIElmIGEgcGVuZGluZyBhcHByb3ZhbCBpcyBvd25lZCBieSBhbiBlbnRlcnByaXNlLCB0aGVuIGl0IGNhbiBiZSBhcHByb3ZlZCBieSBhZG1pbmlzdHJhdG9ycyBvZiB0aGUgZW50ZXJwcmlzZVxuICAgKi9cbiAgb3duZXJUeXBlKCk6IE93bmVyVHlwZSB7XG4gICAgaWYgKHRoaXMuX3BlbmRpbmdBcHByb3ZhbC53YWxsZXQpIHtcbiAgICAgIHJldHVybiBPd25lclR5cGUuV0FMTEVUO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGVuZGluZ0FwcHJvdmFsLmVudGVycHJpc2UpIHtcbiAgICAgIHJldHVybiBPd25lclR5cGUuRU5URVJQUklTRTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHBlbmRpbmcgYXBwcm92YWwgb3duZXI6IG5laXRoZXIgd2FsbGV0IG5vciBlbnRlcnByaXNlIHdhcyBwcmVzZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaWQgb2YgdGhlIHdhbGxldCB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIHdhbGxldElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC53YWxsZXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBlbnRlcnByaXNlIElEIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICBlbnRlcnByaXNlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmVudGVycHJpc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGF0ZSBvZiB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgc3RhdGUoKTogU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpZCBvZiB0aGUgdXNlciB0aGF0IHBlcmZvcm1lZCB0aGUgYWN0aW9uIHJlc3VsdGluZyBpbiB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgY3JlYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuY3JlYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHR5cGUgb2YgdGhlIHBlbmRpbmcgYXBwcm92YWwgKHdoYXQgaXQgYXBwcm92ZXMpXG4gICAqL1xuICB0eXBlKCk6IFR5cGUge1xuICAgIGlmICghdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGVuZGluZyBhcHByb3ZhbCBpbmZvIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmluZm8udHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIGluZm8oKTogUGVuZGluZ0FwcHJvdmFsSW5mbyB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5pbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGFwcHJvdmFscyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgdGhpcyBQZW5kaW5nQXBwcm92YWwgdG8gYmUgYXBwcm92ZWQuXG4gICAqIERlZmF1bHRzIHRvIDEgaWYgYXBwcm92YWxzUmVxdWlyZWQgZG9lc24ndCBleGlzdCBvbiB0aGUgb2JqZWN0XG4gICAqL1xuICBhcHByb3ZhbHNSZXF1aXJlZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuYXBwcm92YWxzUmVxdWlyZWQgfHwgMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHVybCBmb3IgdGhpcyBQZW5kaW5nQXBwcm92YWwgZm9yIG1ha2luZyByZXF1ZXN0cyB0byB0aGUgc2VydmVyLlxuICAgKiBAcGFyYW0gZXh0cmFcbiAgICovXG4gIHVybChleHRyYSA9ICcnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlQ29pbi51cmwoJy9wZW5kaW5nYXBwcm92YWxzLycgKyB0aGlzLmlkKCkgKyBleHRyYSk7XG4gIH1cblxuICAvKipcbiAgICogUmVmZXRjaGVzIHRoaXMgUGVuZGluZ0FwcHJvdmFsIGZyb20gdGhlIHNlcnZlciBhbmQgcmV0dXJucyBpdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgbXV0YXRlcyB0aGUgUGVuZGluZ0FwcHJvdmFsIG9iamVjdCBpbiBwbGFjZS5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZ2V0KHBhcmFtczogUmVjb3JkPHN0cmluZywgbmV2ZXI+ID0ge30pOiBQcm9taXNlPFBlbmRpbmdBcHByb3ZhbD4ge1xuICAgIHRoaXMuX3BlbmRpbmdBcHByb3ZhbCA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCkpLnJlc3VsdCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyBQZW5kaW5nQXBwcm92YWwgdG8gYW4gYXBwcm92ZWQgc3RhdGVcbiAgICovXG4gIGFzeW5jIGFwcHJvdmUocGFyYW1zOiBBcHByb3ZlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBwYXJhbXMucHJldmlld1BlbmRpbmdUeHMgPSB0cnVlO1xuICAgIHBhcmFtcy5wZW5kaW5nQXBwcm92YWxJZCA9IHRoaXMuaWQoKTtcbiAgICBjb25zdCBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gdGhpcy5jYW5SZWNyZWF0ZVRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG4gICAgYXdhaXQgdGhpcy5wb3B1bGF0ZVdhbGxldCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5wcmVBcHByb3ZlKHBhcmFtcywgcmVxSWQpO1xuXG4gICAgICBjb25zdCBhcHByb3ZhbFBhcmFtczogQXBwcm92ZVBlbmRpbmdBcHByb3ZhbFJlcXVlc3RCb2R5ID0geyBzdGF0ZTogJ2FwcHJvdmVkJywgb3RwOiBwYXJhbXMub3RwIH07XG4gICAgICBpZiAodHJhbnNhY3Rpb24pIHtcbiAgICAgICAgLy8gaWYgdGhlIHRyYW5zYWN0aW9uIGFscmVhZHkgaGFzIGEgaGFsZiBzaWduZWQgcHJvcGVydHksIHdlIHRha2UgdGhhdCBkaXJlY3RseVxuICAgICAgICBhcHByb3ZhbFBhcmFtcy5oYWxmU2lnbmVkID0gdHJhbnNhY3Rpb24uaGFsZlNpZ25lZCB8fCB0cmFuc2FjdGlvbjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5wdXQodGhpcy51cmwoKSkuc2VuZChhcHByb3ZhbFBhcmFtcykucmVzdWx0KCk7XG5cbiAgICAgIC8vIGlmIHRoZSByZXNwb25zZSBjb21lcyB3aXRoIGFuIGVycm9yLCBtZWFucyB0aGF0IHRoZSB0cmFuc2FjdGlvbiB0cmlnZ2VyZWQgYW5vdGhlciBjb25kaXRpb25cbiAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgncGVuZGluZ0FwcHJvdmFsJykpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wZW5kaW5nQXBwcm92YWwgPSByZXNwb25zZTtcbiAgICAgIGF3YWl0IHRoaXMucG9zdEFwcHJvdmUocGFyYW1zLCByZXFJZCk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhY2FuUmVjcmVhdGVUcmFuc2FjdGlvbiAmJlxuICAgICAgICAoZS5tZXNzYWdlLmluZGV4T2YoJ2NvdWxkIG5vdCBmaW5kIHVuc3BlbnQgb3V0cHV0IGZvciBpbnB1dCcpICE9PSAtMSB8fFxuICAgICAgICAgIGUubWVzc2FnZS5pbmRleE9mKCd0cmFuc2FjdGlvbiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyB0cmFuc2FjdGlvbiBpbiB0aGUgc2VuZCBxdWV1ZScpICE9PSAtMSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3BlbnRzIGV4cGlyZWQsIHdhbGxldCBwYXNzcGhyYXNlIG9yIHhwcnYgcmVxdWlyZWQgdG8gcmVjcmVhdGUgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyBQZW5kaW5nQXBwcm92YWwgdG8gYSByZWplY3RlZCBzdGF0ZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyByZWplY3QocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28ucHV0KHRoaXMudXJsKCkpLnNlbmQoeyBzdGF0ZTogJ3JlamVjdGVkJyB9KS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGlhcyBmb3IgUGVuZGluZ0FwcHJvdmFsLnJlamVjdCgpXG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGNhbmNlbChwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPiA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWplY3QocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZSBhbmQgc2lnbiBUU1MgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtBcHByb3ZlT3B0aW9uc30gcGFyYW1zIG5lZWRlZCB0byBnZXQgdHhzIGFuZCB1c2UgdGhlIHdhbGxldFBhc3NwaHJhc2UgdG8gdHNzIHNpZ25cbiAgICogQHBhcmFtIHtSZXF1ZXN0VHJhY2VyfSByZXFJZCBpZCB0cmFjZXIuXG4gICAqL1xuICBhc3luYyByZWNyZWF0ZUFuZFNpZ25UU1NUcmFuc2FjdGlvbihwYXJhbXM6IEFwcHJvdmVPcHRpb25zLCByZXFJZDogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPHsgdHhIZXg6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgeyB3YWxsZXRQYXNzcGhyYXNlIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSB0aGlzLl9wZW5kaW5nQXBwcm92YWwudHhSZXF1ZXN0SWQ7XG5cbiAgICBpZiAoIXRoaXMud2FsbGV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dhbGxldCBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXdhbGxldFBhc3NwaHJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd2FsbGV0UGFzc3BocmFzZSBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXR4UmVxdWVzdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4UmVxdWVzdElkIG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY3J5cHRlZFBydiA9IGF3YWl0IHRoaXMud2FsbGV0LmdldFBydih7IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgY29uc3QgdHhSZXF1ZXN0ID0gYXdhaXQgdGhpcy50c3NVdGlscyEucmVjcmVhdGVUeFJlcXVlc3QodHhSZXF1ZXN0SWQsIGRlY3J5cHRlZFBydiwgcmVxSWQpO1xuICAgIGlmICh0eFJlcXVlc3QuYXBpVmVyc2lvbiA9PT0gJ2xpdGUnKSB7XG4gICAgICBpZiAoIXR4UmVxdWVzdC51bnNpZ25lZFR4cyB8fCB0eFJlcXVlc3QudW5zaWduZWRUeHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBlcnJvciwgbm8gdHJhbnNhY3Rpb25zIGZvdW5kIGluIHR4UmVxdWVzdC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4SGV4OiB0eFJlcXVlc3QudW5zaWduZWRUeHNbMF0uc2VyaWFsaXplZFR4SGV4LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0eFJlcXVlc3QudHJhbnNhY3Rpb25zIHx8IHR4UmVxdWVzdC50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBlcnJvciwgbm8gdHJhbnNhY3Rpb25zIGZvdW5kIGluIHR4UmVxdWVzdC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4SGV4OiB0eFJlcXVlc3QudHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGUgYSB0cmFuc2FjdGlvbiBmb3IgYSBwZW5kaW5nIGFwcHJvdmFsIHRvIHJlc3BvbmQgdG8gdXBkYXRlZCBuZXR3b3JrIGNvbmRpdGlvbnNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcmVxSWRcbiAgICovXG4gIGFzeW5jIHJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtczogYW55ID0ge30sIHJlcUlkPzogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIHRoaXMgbWV0aG9kIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBleGlzdGluZyB0cmFuc2FjdGlvbiByZXF1ZXN0c1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdCA9IHRoaXMuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdDtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0cmFuc2FjdGlvblJlcXVlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCByZWNyZWF0ZSB0cmFuc2FjdGlvbiB3aXRob3V0IHRyYW5zYWN0aW9uIHJlcXVlc3QnKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLndhbGxldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHJlY3JlYXRlIHRyYW5zYWN0aW9uIHdpdGhvdXQgd2FsbGV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxQcmVidWlsZCA9IHRyYW5zYWN0aW9uUmVxdWVzdC5jb2luU3BlY2lmaWNbdGhpcy5iYXNlQ29pbi50eXBlXTtcblxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0cmFuc2FjdGlvblJlcXVlc3QucmVjaXBpZW50cztcbiAgICBsZXQgcHJlYnVpbGRQYXJhbXMgPSBfLmV4dGVuZCh7fSwgcGFyYW1zLCB7IHJlY2lwaWVudHM6IHJlY2lwaWVudHMgfSwgdHJhbnNhY3Rpb25SZXF1ZXN0LmJ1aWxkUGFyYW1zKTtcblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChvcmlnaW5hbFByZWJ1aWxkLmhvcFRyYW5zYWN0aW9uKSkge1xuICAgICAgcHJlYnVpbGRQYXJhbXMuaG9wID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIGlmICh0cmFuc2FjdGlvblJlcXVlc3QuYnVpbGRQYXJhbXMgJiYgdHJhbnNhY3Rpb25SZXF1ZXN0LmJ1aWxkUGFyYW1zLnR5cGUgPT09ICdjb25zb2xpZGF0ZScpIHtcbiAgICAgIC8vIGNvbnNvbGlkYXRlIHRhZyBpcyBpbiB0aGUgYnVpbGQgcGFyYW1zIC0gdGhpcyBpcyBhIGNvbnNvbGlkYXRpb24gdHJhbnNhY3Rpb24sIHNvXG4gICAgICAvLyBpdCBuZWVkcyB0byBiZSByZWJ1aWx0IHVzaW5nIHRoZSBzcGVjaWFsIGNvbnNvbGlkYXRpb24gYnVpbGQgcm91dGVcbiAgICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFUcmFjZXIpO1xuICAgICAgcHJlYnVpbGRQYXJhbXMucHJlYnVpbGRUeCA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgICAgLnBvc3QodGhpcy53YWxsZXQudXJsKGAvY29uc29saWRhdGVVbnNwZW50c2ApKVxuICAgICAgICAuc2VuZChCdWlsZFBhcmFtcy5lbmNvZGUocHJlYnVpbGRQYXJhbXMpKVxuICAgICAgICAucmVzdWx0KCk7XG4gICAgICBkZWxldGUgcHJlYnVpbGRQYXJhbXMucmVjaXBpZW50cztcbiAgICB9XG5cbiAgICBwcmVidWlsZFBhcmFtcyA9IF8uZXh0ZW5kKHt9LCBwcmVidWlsZFBhcmFtcywgeyByZXFJZDogcmVxSWQgfSk7XG4gICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLndhbGxldC5wcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbihwcmVidWlsZFBhcmFtcyk7XG4gICAgLy8gY29tcGFyZSBQQVlHbyBmZWVzXG4gICAgY29uc3Qgb3JpZ2luYWxQYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuYmFzZUNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogcHJlYnVpbGRQYXJhbXMsXG4gICAgICB3YWxsZXQ6IHRoaXMud2FsbGV0LFxuICAgICAgdHhQcmVidWlsZDogb3JpZ2luYWxQcmVidWlsZCxcbiAgICB9KTtcbiAgICBjb25zdCByZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuYmFzZUNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogcHJlYnVpbGRQYXJhbXMsXG4gICAgICB3YWxsZXQ6IHRoaXMud2FsbGV0LFxuICAgICAgdHhQcmVidWlsZDogc2lnbmVkVHJhbnNhY3Rpb24sXG4gICAgfSk7XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChyZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpKSB7XG4gICAgICByZXR1cm4gc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHJlY3JlYXRlZFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCAhPT0gJ2JpZ2ludCcgJiZcbiAgICAgICFfLmlzRmluaXRlKHJlY3JlYXRlZFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICFfLmlzVW5kZWZpbmVkKG9yaWdpbmFsUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSAmJlxuICAgICAgcmVjcmVhdGVkUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50ID4gb3JpZ2luYWxQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncmVjcmVhdGVkIHRyYW5zYWN0aW9uIGlzIHVzaW5nIGEgaGlnaGVyIHBheS1hcy15b3UtZ28tZmVlJyk7XG4gICAgfVxuICAgIHJldHVybiBzaWduZWRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qXG4gICAqIENvbGQgd2FsbGV0cyBjYW5ub3QgcmVjcmVhdGUgdHJhbnNhY3Rpb25zIGlmIHRoZSBvbmx5IHRoaW5nIHByb3ZpZGVkIGlzIHRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKlxuICAgKiBUaGUgdHJhbnNhY3Rpb24gY2FuIGJlIHJlY3JlYXRlZCBpZiBlaXRoZXJcbiAgICog4oCTIHRoZXJlIGlzIGFuIHhwcnZcbiAgICog4oCTIHRoZXJlIGlzIGEgd2FsbGV0UGFzc3BocmFzZSBhbmQgdGhlIHdhbGxldCBpcyBub3QgY29sZCAoYmVjYXVzZSBpZiBpdCdzIGNvbGQsIHRoZSBwYXNzcGhyYXNlIGlzIG9mIGxpdHRsZSB1c2UpXG4gICAqXG4gICAqIFRoZXJlZm9yZSwgaWYgbmVpdGhlciBvZiB0aGVzZSBpcyB0cnVlLCB0aGUgdHJhbnNhY3Rpb24gY2Fubm90IGJlIHJlY3JlYXRlZCwgd2hpY2ggaXMgcmVmbGVjdGVkIGluIHRoZSBpZlxuICAgKiBzdGF0ZW1lbnQgYmVsb3cuXG4gICAqXG4gICAqIExpZ2h0bmluZyB0cmFuc2FjdGlvbnMgY2Fubm90IGJlIHJlY3JlYXRlZC5cbiAgICovXG4gIHByaXZhdGUgY2FuUmVjcmVhdGVUcmFuc2FjdGlvbihwYXJhbXM6IEFwcHJvdmVPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNDb2xkV2FsbGV0ID0gISFfLmdldCh0aGlzLndhbGxldCwgJ193YWxsZXQuaXNDb2xkJyk7XG4gICAgY29uc3QgaXNPRkNXYWxsZXQgPSB0aGlzLmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnb2ZjJzsgLy8gT2ZmLWNoYWluIHRyYW5zYWN0aW9ucyBkb24ndCBuZWVkIHRvIGJlIHJlYnVpbHRcbiAgICBjb25zdCBpc0xpZ2h0bmluZ1dhbGxldCA9IHRoaXMuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdsbmJ0Yyc7XG4gICAgaWYgKGlzTGlnaHRuaW5nV2FsbGV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJhbXMueHBydiAmJiAhKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlICYmICFpc0NvbGRXYWxsZXQgJiYgIWlzT0ZDV2FsbGV0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGFyZSBubyByZWNpcGllbnRzLCB0aGVuIHRoZSB0cmFuc2FjdGlvbiBjYW5ub3QgYmUgcmVjcmVhdGVkXG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHRoaXMuaW5mbygpPy50cmFuc2FjdGlvblJlcXVlc3Q/LmJ1aWxkUGFyYW1zPy5yZWNpcGllbnRzIHx8IFtdO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmluZm8oKT8udHJhbnNhY3Rpb25SZXF1ZXN0Py5idWlsZFBhcmFtcz8udHlwZTtcblxuICAgIC8vIFdlIG9ubHkgd2FudCB0byBub3QgcmVjcmVhdGUgdHJhbnNhY3Rpb25zIHdpdGggbm8gcmVjaXBpZW50cyBpZiBpdCBpcyBhIFVUWE8gY29pbi5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJldHVybiAhKFxuICAgICAgdXR4b2xpYi5pc1ZhbGlkTmV0d29yaygodGhpcy5iYXNlQ29pbiBhcyBhbnkpLm5ldHdvcmspICYmXG4gICAgICByZWNpcGllbnRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgdHlwZSAhPT0gJ2NvbnNvbGlkYXRlJ1xuICAgICk7XG4gIH1cblxuICAvKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIHdoaWNoIGlzIGJlaW5nIGFwcHJvdmVkLlxuICAgKiBJZiB0aGlzIFBBIGlzIG9mIHR5cGUgJ3RyYW5zYWN0aW9uUmVxdWVzdCcgdGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byByZWJ1aWxkIGFuZCByZXNpZ24gdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7QXBwcm92ZU9wdGlvbnN9IHBhcmFtc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhblJlY3JlYXRlVHJhbnNhY3Rpb24gLVxuICAgKiBAcGFyYW0ge1JlcXVlc3RUcmFjZXJ9IHJlcUlkIGlkIHRyYWNlclxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcmVBcHByb3ZlKHBhcmFtczogQXBwcm92ZU9wdGlvbnMgPSB7fSwgcmVxSWQ6IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxQcmVBcHByb3ZlUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gVHJhbnNhY3Rpb25SZXF1ZXN0TGl0ZSBvciBNdWx0aXNpZyB0eCdzIG11c3Qgc2lnbiBiZWZvcmUgcGVuZGluZyBhcHByb3ZhbCBpcyBhcHByb3ZlZFxuICAgIC8vIFJlLXNpZ25lZCB0eCBpcyBwcm92aWRlZCB0byB0aGUgcGVuZGluZyBhcHByb3ZhbCBhcGlcbiAgICBpZiAodGhpcy50eXBlKCkgPT09IFR5cGUuVFJBTlNBQ1RJT05fUkVRVUVTVCkge1xuICAgICAgLypcbiAgICAgICAqIElmIHRoaXMgaXMgYSByZXF1ZXN0IGZvciBhcHByb3ZpbmcgYSB0cmFuc2FjdGlvbiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyB1c2VyIGhhcyBhIHByaXZhdGUga2V5IHRvIHRoZSB3YWxsZXRcbiAgICAgICAqIChzb21lIGFkbWlucyBtYXkgbm90IGhhdmUgdGhlIHNwZW5kIHBlcm1pc3Npb24pLCB0aGUgdHJhbnNhY3Rpb24gY291bGQgZWl0aGVyIGJlIHJlYnJvYWRjYXN0IGFzIGlzLCBvciBpdCBjb3VsZFxuICAgICAgICogYmUgcmVjb25zdHJ1Y3RlZC4gSXQgaXMgcHJlZmVyYWJsZSB0byByZWNvbnN0cnVjdCBhIHR4IGluIG9yZGVyIHRvIGFkaGVyZSB0byB0aGUgbGF0ZXN0IG5ldHdvcmsgY29uZGl0aW9uc1xuICAgICAgICogc3VjaCBhcyBuZXdlciB1bnNwZW50cywgZGlmZmVyZW50IGZlZXMsIG9yIGEgaGlnaGVyIHNlcXVlbmNlIGlkXG4gICAgICAgKi9cbiAgICAgIGlmIChwYXJhbXMudHgpIHtcbiAgICAgICAgLy8gdGhlIGFwcHJvdmFsIHR4IHdhcyByZWNvbnN0cnVjdGVkIGFuZCBleHBsaWNpdGx5IHNwZWNpZmllZCAtIHBhc3MgaXQgdGhyb3VnaFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR4SGV4OiBwYXJhbXMudHgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMgdXNlciBtYXkgbm90IGhhdmUgc3BlbmRpbmcgcHJpdmlsZWdlcyBvciBhIHBhc3NwaHJhc2UgbWF5IG5vdCBoYXZlIGJlZW4gcGFzc2VkIGluXG4gICAgICBpZiAoIXRoaXMuY2FuUmVjcmVhdGVUcmFuc2FjdGlvbihwYXJhbXMpKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBUcmFuc2FjdGlvblJlcXVlc3QsIHRoZW4gdGhlIHR4UmVxdWVzdCBhbHJlYWR5IGhhcyB0aGUgdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIE11bHRpU2lnLCB0aGVuIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIGhhbGYgc2lnbmVkIHR4IHRvIHByb3BhZ2F0ZSB0byB0aGUgYXBwcm92YWwgQVBJXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gXy5nZXQoXG4gICAgICAgICAgdGhpcy5pbmZvKCksXG4gICAgICAgICAgYHRyYW5zYWN0aW9uUmVxdWVzdC5jb2luU3BlY2lmaWMuJHt0aGlzLmJhc2VDb2luLnR5cGV9YFxuICAgICAgICApIGFzIFByZUFwcHJvdmVSZXN1bHQ7XG4gICAgICAgIGlmICghXy5pc09iamVjdCh0cmFuc2FjdGlvbikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZXJlIGlzIG5laXRoZXIgYW4gb3JpZ2luYWwgdHJhbnNhY3Rpb24gb2JqZWN0IG5vciBjYW4gYSBuZXcgb25lIGJlIHJlY3JlYXRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWNyZWF0ZUFuZFNpZ25UU1NUcmFuc2FjdGlvbihwYXJhbXMsIHJlcUlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtcywgcmVxSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSBhbnkgcG9zdC1hcHByb3ZhbCBhY3Rpb25zLlxuICAgKiBJZiB0eXBlIGlzICd0cmFuc2FjdGlvblJlcXVlc3RGdWxsJywgdGhpcyB3aWxsIHNpZ24gdGhlIHR4UmVxdWVzdEZ1bGwgaWYgcG9zc2libGVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcmVxSWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcG9zdEFwcHJvdmUocGFyYW1zOiBBcHByb3ZlT3B0aW9ucyA9IHt9LCByZXFJZDogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSgpKSB7XG4gICAgICBjYXNlIFR5cGUuVFJBTlNBQ1RJT05fUkVRVUVTVF9GVUxMOlxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0FwcHJvdmFsLnN0YXRlID09PSBTdGF0ZS5BUFBST1ZFRCkge1xuICAgICAgICAgIC8vIEFmdGVyIHdlIGFwcHJvdmUgYSBsaWdodG5pbmcgdHJhbnNhY3Rpb24sIHdlIHNob3VsZCBwcm9jZWVkIHdpdGggc3VibWl0dGluZyB0aGUgcGF5bWVudFxuICAgICAgICAgIGlmICh0aGlzLmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnbG5idGMnKSB7XG4gICAgICAgICAgICBhc3NlcnQodGhpcy5fcGVuZGluZ0FwcHJvdmFsLnR4UmVxdWVzdElkLCAnTWlzc2luZyB0eFJlcXVlc3RJZCcpO1xuICAgICAgICAgICAgLy8gdGhpcy5wb3B1bGF0ZVdhbGxldCBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgc28gd2Ugc2hvdWxkIGJlIGdvb2QgaGVyZVxuICAgICAgICAgICAgYXNzZXJ0KHRoaXMud2FsbGV0Py5pZCgpLCAnTWlzc2luZyB3YWxsZXQgaWQnKTtcbiAgICAgICAgICAgIC8vIHRvZG86IGFkZCB0ZXN0IGNhc2UgZm9yIHRoaXNcbiAgICAgICAgICAgIC8vIGFkZCBuZXcgdHJhbnNmZXIgYmVmb3JlIHNlbmRpbmcgdHhcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgICAgICAgICAgLnBvc3QoXG4gICAgICAgICAgICAgICAgdGhpcy5iaXRnby51cmwoXG4gICAgICAgICAgICAgICAgICAnL3dhbGxldC8nICsgdGhpcy53YWxsZXQ/LmlkKCkgKyAnL3R4cmVxdWVzdHMvJyArIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZCArICcvdHJhbnNmZXJzJyxcbiAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnNlbmQoKVxuICAgICAgICAgICAgICAucmVzdWx0KCk7XG4gICAgICAgICAgICBhd2FpdCBzZW5kVHhSZXF1ZXN0KFxuICAgICAgICAgICAgICB0aGlzLmJpdGdvLFxuICAgICAgICAgICAgICB0aGlzLndhbGxldD8uaWQoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgUmVxdWVzdFR5cGUudHgsXG4gICAgICAgICAgICAgIHJlcUlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYW5SZWNyZWF0ZVRyYW5zYWN0aW9uKHBhcmFtcykgJiYgdGhpcy5iYXNlQ29pbi5zdXBwb3J0c1RzcygpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uKHBhcmFtcywgcmVxSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgc2VsZi53YWxsZXQgaXMgc2V0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBvcHVsYXRlV2FsbGV0KCk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMud2FsbGV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRPRE8oV1AtMTM0MSk6IGNvbnNvbGlkYXRlL3NpbXBsaWZ5IHRoaXMgbG9naWNcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSgpKSB7XG4gICAgICBjYXNlIFR5cGUuVFJBTlNBQ1RJT05fUkVRVUVTVDpcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0ID0gdGhpcy5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0O1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh0cmFuc2FjdGlvblJlcXVlc3QpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCBwcm9wZXJ0eSB0cmFuc2FjdGlvblJlcXVlc3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRXYWxsZXQ6IElXYWxsZXQgPSBhd2FpdCB0aGlzLmJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogdHJhbnNhY3Rpb25SZXF1ZXN0LnNvdXJjZVdhbGxldCB9KTtcblxuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh1cGRhdGVkV2FsbGV0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCAtIHVuYWJsZSB0byBnZXQgd2FsbGV0IHVzaW5nIHNvdXJjZXdhbGxldCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53YWxsZXQgPSB1cGRhdGVkV2FsbGV0O1xuXG4gICAgICAgIGlmICh0aGlzLndhbGxldC5pZCgpICE9PSB0cmFuc2FjdGlvblJlcXVlc3Quc291cmNlV2FsbGV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHNvdXJjZSB3YWxsZXQgZm9yIHBlbmRpbmcgYXBwcm92YWwnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHlwZS5UUkFOU0FDVElPTl9SRVFVRVNUX0ZVTEw6XG4gICAgICAgIGNvbnN0IHdhbGxldElkID0gdGhpcy53YWxsZXRJZCgpO1xuICAgICAgICBpZiAoIXdhbGxldElkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVycm9yLCBwZW5kaW5nQXBwcm92YWwud2FsbGV0IGlzIGV4cGVjdGVkIHRvIGJlIGRlZmluZWQhJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53YWxsZXQgPSBhd2FpdCB0aGlzLmJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogdGhpcy53YWxsZXRJZCgpIH0pO1xuICAgICAgICBpZiAoIXRoaXMud2FsbGV0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIC0gdW5hYmxlIHRvIGdldCB3YWxsZXQgdXNpbmcgcGVuZGluZ0FwcHJvdmFsLndhbGxldCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @prettier
3
+ *
4
+ * @experimental The safe client surface is experimental and may change (including breaking
5
+ * changes) before the public release.
6
+ */
7
+ import type { FreezeSafeBody, SafeData, SafePermission, SafeRootKeys, SafeShareData, SafeShareKeychain, SafeShareState } from '@bitgo/public-types';
8
+ import type { Wallet, WalletShare } from '../wallet';
9
+ /** @experimental */
10
+ export interface InitializeSafeOptions {
11
+ label: string;
12
+ }
13
+ /**
14
+ * Phase 3 — the client hands back the 12 key ids it created in Phase 2.
15
+ * @experimental
16
+ */
17
+ export interface FinalizeSafeOptions {
18
+ rootKeys: SafeRootKeys;
19
+ }
20
+ /**
21
+ * Sharing ONE safe wallet with a non-member rides the existing wallet-share handshake (FR-13),
22
+ * so the result is the existing WalletShare shape.
23
+ */
24
+ export type WalletShareData = WalletShare;
25
+ export interface CreateSafeWalletOptions {
26
+ coin: string;
27
+ label: string;
28
+ type?: string;
29
+ multisigTypeVersion?: string;
30
+ }
31
+ interface AddSafeMemberBase {
32
+ permissions: SafePermission[];
33
+ /** required when 'spend' is included — the 4 root user keys ECDH-re-encrypted to the invitee */
34
+ keychains?: SafeShareKeychain[];
35
+ message?: string;
36
+ /** when true, suppress the invitation email that would otherwise be sent to `email` */
37
+ disableEmail?: boolean;
38
+ }
39
+ /** Add a member by either `userId` or `email` — exactly one is required. */
40
+ export type AddSafeMemberOptions = (AddSafeMemberBase & {
41
+ userId: string;
42
+ email?: never;
43
+ }) | (AddSafeMemberBase & {
44
+ email: string;
45
+ userId?: never;
46
+ });
47
+ export interface AddSafeWalletMemberOptions {
48
+ walletId: string;
49
+ /** required — sharing re-encrypts the user key, which needs hardened derivation from the passphrase */
50
+ walletPassphrase: string;
51
+ email?: string;
52
+ permissions?: string[];
53
+ message?: string;
54
+ }
55
+ export type AcceptSafeShareAsSpenderOptions = {
56
+ safeShareId: string;
57
+ userPassword: string;
58
+ newWalletPassphrase?: string;
59
+ };
60
+ export type AcceptSafeShareAsNonSpenderOptions = {
61
+ safeShareId: string;
62
+ };
63
+ export type AcceptSafeShareOptions = AcceptSafeShareAsSpenderOptions | AcceptSafeShareAsNonSpenderOptions;
64
+ /**
65
+ * @experimental
66
+ */
67
+ export interface ISafe {
68
+ id(): string;
69
+ enterpriseId(): string;
70
+ label(): string;
71
+ status(): SafeData['status'];
72
+ url(extra?: string): string;
73
+ createWallet(params: CreateSafeWalletOptions): Promise<Wallet>;
74
+ addMember(params: AddSafeMemberOptions): Promise<SafeData>;
75
+ addMemberToWallet(params: AddSafeWalletMemberOptions): Promise<WalletShareData>;
76
+ listShares(params?: {
77
+ state?: SafeShareState;
78
+ }): Promise<SafeShareData[]>;
79
+ acceptShare(params: AcceptSafeShareOptions): Promise<SafeShareData>;
80
+ freeze(params?: FreezeSafeBody): Promise<SafeData>;
81
+ archive(): Promise<SafeData>;
82
+ toJSON(): SafeData;
83
+ }
84
+ export {};
85
+ //# sourceMappingURL=iSafe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iSafe.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/iSafe.ts"],"names":[],"mappings":"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"}