@bitgo/sdk-core 37.10.1 → 38.0.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 (71) hide show
  1. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +1 -3
  2. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  3. package/dist/src/bitgo/baseCoin/baseCoin.js +3 -17
  4. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +2 -2
  5. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  6. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  7. package/dist/src/bitgo/bitgoBase.d.ts +3 -6
  8. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
  9. package/dist/src/bitgo/bitgoBase.js +1 -1
  10. package/dist/src/bitgo/environments.d.ts.map +1 -1
  11. package/dist/src/bitgo/environments.js +9 -1
  12. package/dist/src/bitgo/internal/keycard.d.ts +9 -18
  13. package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
  14. package/dist/src/bitgo/internal/keycard.js +8 -56
  15. package/dist/src/bitgo/keychain/decryptKeychain.d.ts +2 -12
  16. package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -1
  17. package/dist/src/bitgo/keychain/decryptKeychain.js +6 -37
  18. package/dist/src/bitgo/keychain/iKeychains.d.ts +1 -2
  19. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  20. package/dist/src/bitgo/keychain/iKeychains.js +1 -1
  21. package/dist/src/bitgo/keychain/keychains.d.ts +1 -12
  22. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  23. package/dist/src/bitgo/keychain/keychains.js +16 -44
  24. package/dist/src/bitgo/recovery/initiate.d.ts +2 -15
  25. package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
  26. package/dist/src/bitgo/recovery/initiate.js +7 -47
  27. package/dist/src/bitgo/trading/tradingAccount.js +2 -2
  28. package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -1
  29. package/dist/src/bitgo/utils/tss/addressVerification.js +3 -10
  30. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  31. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +5 -5
  32. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +7 -7
  33. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +13 -8
  34. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  35. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +78 -103
  36. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +9 -0
  37. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  38. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +61 -18
  39. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +3 -3
  40. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  41. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +30 -46
  42. package/dist/src/bitgo/wallet/iWallet.d.ts +2 -4
  43. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  44. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  45. package/dist/src/bitgo/wallet/iWallets.d.ts +96 -2
  46. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  47. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  48. package/dist/src/bitgo/wallet/wallet.d.ts +8 -21
  49. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  50. package/dist/src/bitgo/wallet/wallet.js +26 -114
  51. package/dist/src/bitgo/wallet/wallets.d.ts +5 -0
  52. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  53. package/dist/src/bitgo/wallet/wallets.js +123 -27
  54. package/dist/src/index.d.ts +1 -0
  55. package/dist/src/index.d.ts.map +1 -1
  56. package/dist/src/index.js +1 -1
  57. package/dist/test/unit/bitgo/recovery/initiate.js +18 -89
  58. package/dist/test/unit/bitgo/trading/tradingAccount.js +5 -5
  59. package/dist/test/unit/bitgo/utils/tss/addressVerification.js +26 -22
  60. package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +14 -14
  61. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +129 -10
  62. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts +2 -0
  63. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts.map +1 -0
  64. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.js +158 -0
  65. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +47 -75
  66. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.js +4 -4
  67. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +16 -16
  68. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +364 -14
  69. package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +2 -5
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/package.json +4 -4
@@ -6,6 +6,7 @@ export * from './bitgojsError';
6
6
  export * as coins from './coins';
7
7
  import { EddsaUtils } from './bitgo/utils/tss/eddsa/eddsa';
8
8
  export { EddsaUtils };
9
+ export type { EcdsaMPCv2KeyGenCallbacks, EcdsaMPCv2KeyGenInitializeCallback, EcdsaMPCv2KeyGenRound2Callback, EcdsaMPCv2KeyGenRound3Callback, EcdsaMPCv2KeyGenFinalizeCallback, EddsaKeyGenCallbacks, EddsaKeyGenInitializeCallback, EddsaKeyGenInitializeResult, EddsaKeyGenFinalizeCallback, EddsaKeyGenFinalizeResult, ExternalSignerKeyShare, ExternalSignerMpcState, } from './bitgo/wallet/iWallets';
9
10
  import { EcdsaUtils } from './bitgo/utils/tss/ecdsa/ecdsa';
10
11
  export { EcdsaUtils };
11
12
  import { EcdsaMPCv2Utils } from './bitgo/utils/tss/ecdsa/ecdsaMPCv2';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC5G,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EACV,yBAAyB,EACzB,kCAAkC,EAClC,8BAA8B,EAC9B,8BAA8B,EAC9B,gCAAgC,EAChC,oBAAoB,EACpB,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC5G,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,CAAC"}
package/dist/src/index.js CHANGED
@@ -58,4 +58,4 @@ const common = __importStar(require("./common"));
58
58
  exports.common = common;
59
59
  __exportStar(require("./units"), exports);
60
60
  __exportStar(require("./lightning"), exports);
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQThCO0FBQzlCLDREQUE0QztBQUM1Qyx3Q0FBc0I7QUFDdEIsMENBQXdCO0FBQ3hCLGlEQUErQjtBQUMvQixpREFBaUM7QUFDakMseURBQTJEO0FBQ2xELDJGQURBLGtCQUFVLE9BQ0E7QUFDbkIseURBQTJEO0FBQ2xELDJGQURBLGtCQUFVLE9BQ0E7QUFDbkIsbUVBQXFFO0FBQzVELGdHQURBLDRCQUFlLE9BQ0E7QUFDeEIsbUVBQXFFO0FBQzVELGdHQURBLDRCQUFlLE9BQ0E7QUFDeEIsNkVBQTRHO0FBQW5HLGtJQUFBLDJCQUEyQixPQUFBO0FBQUUsNkhBQUEsc0JBQXNCLE9BQUE7QUFJNUQsaURBQW1DO0FBRzFCLHdCQUFNO0FBRmYsMENBQXdCO0FBQ3hCLDhDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWNjb3VudC1saWInO1xuZXhwb3J0ICogYXMgYWNjb3VudExpYiBmcm9tICcuL2FjY291bnQtbGliJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vYml0Z28nO1xuZXhwb3J0ICogZnJvbSAnLi9iaXRnb2pzRXJyb3InO1xuZXhwb3J0ICogYXMgY29pbnMgZnJvbSAnLi9jb2lucyc7XG5pbXBvcnQgeyBFZGRzYVV0aWxzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2EnO1xuZXhwb3J0IHsgRWRkc2FVdGlscyB9O1xuaW1wb3J0IHsgRWNkc2FVdGlscyB9IGZyb20gJy4vYml0Z28vdXRpbHMvdHNzL2VjZHNhL2VjZHNhJztcbmV4cG9ydCB7IEVjZHNhVXRpbHMgfTtcbmltcG9ydCB7IEVjZHNhTVBDdjJVdGlscyB9IGZyb20gJy4vYml0Z28vdXRpbHMvdHNzL2VjZHNhL2VjZHNhTVBDdjInO1xuZXhwb3J0IHsgRWNkc2FNUEN2MlV0aWxzIH07XG5pbXBvcnQgeyBFZGRzYU1QQ3YyVXRpbHMgfSBmcm9tICcuL2JpdGdvL3V0aWxzL3Rzcy9lZGRzYS9lZGRzYU1QQ3YyJztcbmV4cG9ydCB7IEVkZHNhTVBDdjJVdGlscyB9O1xuZXhwb3J0IHsgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzLCB2ZXJpZnlNUENXYWxsZXRBZGRyZXNzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvYWRkcmVzc1ZlcmlmaWNhdGlvbic7XG5leHBvcnQgeyBHU2hhcmUsIFNpZ25TaGFyZSwgWVNoYXJlIH0gZnJvbSAnLi9hY2NvdW50LWxpYi9tcGMvdHNzL2VkZHNhL3R5cGVzJztcbmV4cG9ydCB7IFRzc0VjZHNhU3RlcDFSZXR1cm5NZXNzYWdlLCBUc3NFY2RzYVN0ZXAyUmV0dXJuTWVzc2FnZSB9IGZyb20gJy4vYml0Z28vdHNzL3R5cGVzJztcbmV4cG9ydCB7IFNTaGFyZSB9IGZyb20gJy4vYml0Z28vdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCAqIGFzIGNvbW1vbiBmcm9tICcuL2NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL3VuaXRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGlnaHRuaW5nJztcbmV4cG9ydCB7IGNvbW1vbiB9O1xuIl19
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQThCO0FBQzlCLDREQUE0QztBQUM1Qyx3Q0FBc0I7QUFDdEIsMENBQXdCO0FBQ3hCLGlEQUErQjtBQUMvQixpREFBaUM7QUFDakMseURBQTJEO0FBQ2xELDJGQURBLGtCQUFVLE9BQ0E7QUFlbkIseURBQTJEO0FBQ2xELDJGQURBLGtCQUFVLE9BQ0E7QUFDbkIsbUVBQXFFO0FBQzVELGdHQURBLDRCQUFlLE9BQ0E7QUFDeEIsbUVBQXFFO0FBQzVELGdHQURBLDRCQUFlLE9BQ0E7QUFDeEIsNkVBQTRHO0FBQW5HLGtJQUFBLDJCQUEyQixPQUFBO0FBQUUsNkhBQUEsc0JBQXNCLE9BQUE7QUFJNUQsaURBQW1DO0FBRzFCLHdCQUFNO0FBRmYsMENBQXdCO0FBQ3hCLDhDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWNjb3VudC1saWInO1xuZXhwb3J0ICogYXMgYWNjb3VudExpYiBmcm9tICcuL2FjY291bnQtbGliJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vYml0Z28nO1xuZXhwb3J0ICogZnJvbSAnLi9iaXRnb2pzRXJyb3InO1xuZXhwb3J0ICogYXMgY29pbnMgZnJvbSAnLi9jb2lucyc7XG5pbXBvcnQgeyBFZGRzYVV0aWxzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2EnO1xuZXhwb3J0IHsgRWRkc2FVdGlscyB9O1xuZXhwb3J0IHR5cGUge1xuICBFY2RzYU1QQ3YyS2V5R2VuQ2FsbGJhY2tzLFxuICBFY2RzYU1QQ3YyS2V5R2VuSW5pdGlhbGl6ZUNhbGxiYWNrLFxuICBFY2RzYU1QQ3YyS2V5R2VuUm91bmQyQ2FsbGJhY2ssXG4gIEVjZHNhTVBDdjJLZXlHZW5Sb3VuZDNDYWxsYmFjayxcbiAgRWNkc2FNUEN2MktleUdlbkZpbmFsaXplQ2FsbGJhY2ssXG4gIEVkZHNhS2V5R2VuQ2FsbGJhY2tzLFxuICBFZGRzYUtleUdlbkluaXRpYWxpemVDYWxsYmFjayxcbiAgRWRkc2FLZXlHZW5Jbml0aWFsaXplUmVzdWx0LFxuICBFZGRzYUtleUdlbkZpbmFsaXplQ2FsbGJhY2ssXG4gIEVkZHNhS2V5R2VuRmluYWxpemVSZXN1bHQsXG4gIEV4dGVybmFsU2lnbmVyS2V5U2hhcmUsXG4gIEV4dGVybmFsU2lnbmVyTXBjU3RhdGUsXG59IGZyb20gJy4vYml0Z28vd2FsbGV0L2lXYWxsZXRzJztcbmltcG9ydCB7IEVjZHNhVXRpbHMgfSBmcm9tICcuL2JpdGdvL3V0aWxzL3Rzcy9lY2RzYS9lY2RzYSc7XG5leHBvcnQgeyBFY2RzYVV0aWxzIH07XG5pbXBvcnQgeyBFY2RzYU1QQ3YyVXRpbHMgfSBmcm9tICcuL2JpdGdvL3V0aWxzL3Rzcy9lY2RzYS9lY2RzYU1QQ3YyJztcbmV4cG9ydCB7IEVjZHNhTVBDdjJVdGlscyB9O1xuaW1wb3J0IHsgRWRkc2FNUEN2MlV0aWxzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FNUEN2Mic7XG5leHBvcnQgeyBFZGRzYU1QQ3YyVXRpbHMgfTtcbmV4cG9ydCB7IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcywgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyB9IGZyb20gJy4vYml0Z28vdXRpbHMvdHNzL2FkZHJlc3NWZXJpZmljYXRpb24nO1xuZXhwb3J0IHsgR1NoYXJlLCBTaWduU2hhcmUsIFlTaGFyZSB9IGZyb20gJy4vYWNjb3VudC1saWIvbXBjL3Rzcy9lZGRzYS90eXBlcyc7XG5leHBvcnQgeyBUc3NFY2RzYVN0ZXAxUmV0dXJuTWVzc2FnZSwgVHNzRWNkc2FTdGVwMlJldHVybk1lc3NhZ2UgfSBmcm9tICcuL2JpdGdvL3Rzcy90eXBlcyc7XG5leHBvcnQgeyBTU2hhcmUgfSBmcm9tICcuL2JpdGdvL3Rzcy9lY2RzYS90eXBlcyc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnLi9jb21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi91bml0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpZ2h0bmluZyc7XG5leHBvcnQgeyBjb21tb24gfTtcbiJdfQ==
@@ -41,28 +41,26 @@ const initiate_1 = require("../../../../src/bitgo/recovery/initiate");
41
41
  const TEST_XPRV = 'xprv9s21ZrQH143K2fJ91S4BRsupcYrE6mmY96fcX5HkhoTrrwmwjd16Cn87cWinJjByrfpojjx7ezsJLx7TAKLT8m8hM5Kax9YcoxnBeJZ3t2k';
42
42
  const TEST_XPUB = 'xpub661MyMwAqRbcF9Nc7TbBo1rZAagiWEVPWKbDKThNG8zqjk76HAKLkaSbTn6dK2dQPfuD7xjicxCZVWvj67fP5nQ9W7QURmoMVAX8m6jZsGp';
43
43
  /**
44
- * Encrypt plaintext with SJCL (same algorithm as BitGoAPI.encrypt).
44
+ * Encrypt plaintext with SJCL (legacy v1 envelope, matching `encryptionVersion: 1`).
45
45
  */
46
46
  function sjclEncrypt(password, input) {
47
47
  return sjcl.encrypt(password, input);
48
48
  }
49
49
  function makeMockBitGo(decryptImpl) {
50
50
  return {
51
- decrypt: sinon.stub().callsFake(decryptImpl),
52
- decryptAsync: sinon.stub().callsFake(async (params) => decryptImpl(params)),
51
+ decrypt: sinon.stub().callsFake(async (params) => decryptImpl(params)),
53
52
  encrypt: sinon.stub(),
54
- encryptAsync: sinon.stub(),
55
53
  };
56
54
  }
57
55
  describe('validateKey', () => {
58
56
  afterEach(() => {
59
57
  sinon.restore();
60
58
  });
61
- it('returns a BIP32 node directly when key starts with xprv (bypasses decrypt)', () => {
59
+ it('returns a BIP32 node directly when key starts with xprv (bypasses decrypt)', async () => {
62
60
  const bitgo = makeMockBitGo(() => {
63
61
  throw new Error('should not be called');
64
62
  });
65
- const node = (0, initiate_1.validateKey)(bitgo, {
63
+ const node = await (0, initiate_1.validateKey)(bitgo, {
66
64
  key: TEST_XPRV,
67
65
  source: 'user',
68
66
  passphrase: 'secret',
@@ -72,7 +70,7 @@ describe('validateKey', () => {
72
70
  node.toBase58().should.equal(TEST_XPRV);
73
71
  bitgo.decrypt.callCount.should.equal(0);
74
72
  });
75
- it('calls decrypt and returns BIP32 node when key is encrypted (not xprv)', () => {
73
+ it('calls decrypt and returns BIP32 node when key is encrypted (not xprv)', async () => {
76
74
  const passphrase = 'hunter2';
77
75
  const encryptedKey = sjclEncrypt(passphrase, TEST_XPRV);
78
76
  const bitgo = makeMockBitGo(({ password, input }) => {
@@ -80,7 +78,7 @@ describe('validateKey', () => {
80
78
  return TEST_XPRV;
81
79
  throw new Error('unexpected decrypt call');
82
80
  });
83
- const node = (0, initiate_1.validateKey)(bitgo, {
81
+ const node = await (0, initiate_1.validateKey)(bitgo, {
84
82
  key: encryptedKey,
85
83
  source: 'user',
86
84
  passphrase,
@@ -90,60 +88,11 @@ describe('validateKey', () => {
90
88
  node.toBase58().should.equal(TEST_XPRV);
91
89
  bitgo.decrypt.callCount.should.equal(1);
92
90
  });
93
- it('throws with friendly message when decrypt fails (wrong passphrase)', () => {
91
+ it('rejects with friendly message when decrypt fails (wrong passphrase)', async () => {
94
92
  const bitgo = makeMockBitGo(() => {
95
93
  throw new Error('sjcl: ccm: tag does not match');
96
94
  });
97
- (() => (0, initiate_1.validateKey)(bitgo, {
98
- key: 'notAnXprv',
99
- source: 'user',
100
- passphrase: 'wrong',
101
- isUnsignedSweep: false,
102
- isKrsRecovery: false,
103
- })).should.throw('Failed to decrypt user key with passcode - try again!');
104
- });
105
- });
106
- describe('validateKeyAsync', () => {
107
- afterEach(() => {
108
- sinon.restore();
109
- });
110
- it('returns a BIP32 node directly when key starts with xprv (bypasses decryptAsync)', async () => {
111
- const bitgo = makeMockBitGo(() => {
112
- throw new Error('should not be called');
113
- });
114
- const node = await (0, initiate_1.validateKeyAsync)(bitgo, {
115
- key: TEST_XPRV,
116
- source: 'user',
117
- passphrase: 'secret',
118
- isUnsignedSweep: false,
119
- isKrsRecovery: false,
120
- });
121
- node.toBase58().should.equal(TEST_XPRV);
122
- bitgo.decryptAsync.callCount.should.equal(0);
123
- });
124
- it('calls decryptAsync and returns BIP32 node when key is encrypted (not xprv)', async () => {
125
- const passphrase = 'hunter2';
126
- const encryptedKey = sjclEncrypt(passphrase, TEST_XPRV);
127
- const bitgo = makeMockBitGo(({ password, input }) => {
128
- if (input === encryptedKey && password === passphrase)
129
- return TEST_XPRV;
130
- throw new Error('unexpected decrypt call');
131
- });
132
- const node = await (0, initiate_1.validateKeyAsync)(bitgo, {
133
- key: encryptedKey,
134
- source: 'user',
135
- passphrase,
136
- isUnsignedSweep: false,
137
- isKrsRecovery: false,
138
- });
139
- node.toBase58().should.equal(TEST_XPRV);
140
- bitgo.decryptAsync.callCount.should.equal(1);
141
- });
142
- it('rejects with friendly message when decryptAsync fails (wrong passphrase)', async () => {
143
- const bitgo = makeMockBitGo(() => {
144
- throw new Error('sjcl: ccm: tag does not match');
145
- });
146
- await (0, initiate_1.validateKeyAsync)(bitgo, {
95
+ await (0, initiate_1.validateKey)(bitgo, {
147
96
  key: 'notAnXprv',
148
97
  source: 'user',
149
98
  passphrase: 'wrong',
@@ -151,11 +100,11 @@ describe('validateKeyAsync', () => {
151
100
  isKrsRecovery: false,
152
101
  }).should.be.rejectedWith('Failed to decrypt user key with passcode - try again!');
153
102
  });
154
- it('skips decryptAsync for unsigned sweep (isUnsignedSweep = true)', async () => {
103
+ it('skips decrypt for unsigned sweep (isUnsignedSweep = true)', async () => {
155
104
  const bitgo = makeMockBitGo(() => {
156
105
  throw new Error('should not be called');
157
106
  });
158
- const node = await (0, initiate_1.validateKeyAsync)(bitgo, {
107
+ const node = await (0, initiate_1.validateKey)(bitgo, {
159
108
  key: TEST_XPUB,
160
109
  source: 'user',
161
110
  passphrase: 'secret',
@@ -163,30 +112,10 @@ describe('validateKeyAsync', () => {
163
112
  isKrsRecovery: false,
164
113
  });
165
114
  node.neutered().toBase58().should.equal(TEST_XPUB);
166
- bitgo.decryptAsync.callCount.should.equal(0);
115
+ bitgo.decrypt.callCount.should.equal(0);
167
116
  });
168
117
  });
169
118
  describe('getBip32Keys', () => {
170
- afterEach(() => {
171
- sinon.restore();
172
- });
173
- it('returns [userKey, backupKey] when both are provided as xprv', () => {
174
- const bitgo = makeMockBitGo(() => {
175
- throw new Error('should not be called');
176
- });
177
- const keys = (0, initiate_1.getBip32Keys)(bitgo, { userKey: TEST_XPRV, backupKey: TEST_XPRV, recoveryDestination: 'addr' }, { requireBitGoXpub: false });
178
- keys.should.have.length(2);
179
- keys[0].toBase58().should.equal(TEST_XPRV);
180
- keys[1].toBase58().should.equal(TEST_XPRV);
181
- });
182
- it('throws when requireBitGoXpub is true but bitgoKey is missing', () => {
183
- const bitgo = makeMockBitGo(() => {
184
- throw new Error('should not be called');
185
- });
186
- (() => (0, initiate_1.getBip32Keys)(bitgo, { userKey: TEST_XPRV, backupKey: TEST_XPRV, recoveryDestination: 'addr' }, { requireBitGoXpub: true })).should.throw('BitGo xpub required but not provided');
187
- });
188
- });
189
- describe('getBip32KeysAsync', () => {
190
119
  afterEach(() => {
191
120
  sinon.restore();
192
121
  });
@@ -194,7 +123,7 @@ describe('getBip32KeysAsync', () => {
194
123
  const bitgo = makeMockBitGo(() => {
195
124
  throw new Error('should not be called');
196
125
  });
197
- const keys = await (0, initiate_1.getBip32KeysAsync)(bitgo, { userKey: TEST_XPRV, backupKey: TEST_XPRV, recoveryDestination: 'addr' }, { requireBitGoXpub: false });
126
+ const keys = await (0, initiate_1.getBip32Keys)(bitgo, { userKey: TEST_XPRV, backupKey: TEST_XPRV, recoveryDestination: 'addr' }, { requireBitGoXpub: false });
198
127
  keys.should.have.length(2);
199
128
  keys[0].toBase58().should.equal(TEST_XPRV);
200
129
  keys[1].toBase58().should.equal(TEST_XPRV);
@@ -203,11 +132,11 @@ describe('getBip32KeysAsync', () => {
203
132
  const bitgo = makeMockBitGo(() => {
204
133
  throw new Error('should not be called');
205
134
  });
206
- const keys = await (0, initiate_1.getBip32KeysAsync)(bitgo, { userKey: TEST_XPRV, backupKey: TEST_XPRV, bitgoKey: TEST_XPUB, recoveryDestination: 'addr' }, { requireBitGoXpub: true });
135
+ const keys = await (0, initiate_1.getBip32Keys)(bitgo, { userKey: TEST_XPRV, backupKey: TEST_XPRV, bitgoKey: TEST_XPUB, recoveryDestination: 'addr' }, { requireBitGoXpub: true });
207
136
  keys.should.have.length(3);
208
137
  keys[2].neutered().toBase58().should.equal(TEST_XPUB);
209
138
  });
210
- it('calls decryptAsync for encrypted user key', async () => {
139
+ it('calls decrypt for encrypted user key', async () => {
211
140
  const passphrase = 'pass1';
212
141
  const encryptedUserKey = sjclEncrypt(passphrase, TEST_XPRV);
213
142
  const bitgo = makeMockBitGo(({ password, input }) => {
@@ -215,16 +144,16 @@ describe('getBip32KeysAsync', () => {
215
144
  return TEST_XPRV;
216
145
  throw new Error('unexpected decrypt call');
217
146
  });
218
- const keys = await (0, initiate_1.getBip32KeysAsync)(bitgo, { userKey: encryptedUserKey, backupKey: TEST_XPRV, walletPassphrase: passphrase, recoveryDestination: 'addr' }, { requireBitGoXpub: false });
147
+ const keys = await (0, initiate_1.getBip32Keys)(bitgo, { userKey: encryptedUserKey, backupKey: TEST_XPRV, walletPassphrase: passphrase, recoveryDestination: 'addr' }, { requireBitGoXpub: false });
219
148
  keys.should.have.length(2);
220
149
  keys[0].toBase58().should.equal(TEST_XPRV);
221
- bitgo.decryptAsync.callCount.should.equal(1);
150
+ bitgo.decrypt.callCount.should.equal(1);
222
151
  });
223
152
  it('rejects when requireBitGoXpub is true but bitgoKey is missing', async () => {
224
153
  const bitgo = makeMockBitGo(() => {
225
154
  throw new Error('should not be called');
226
155
  });
227
- await (0, initiate_1.getBip32KeysAsync)(bitgo, { userKey: TEST_XPRV, backupKey: TEST_XPRV, recoveryDestination: 'addr' }, { requireBitGoXpub: true }).should.be.rejectedWith('BitGo xpub required but not provided');
156
+ await (0, initiate_1.getBip32Keys)(bitgo, { userKey: TEST_XPRV, backupKey: TEST_XPRV, recoveryDestination: 'addr' }, { requireBitGoXpub: true }).should.be.rejectedWith('BitGo xpub required but not provided');
228
157
  });
229
158
  });
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vcmVjb3ZlcnkvaW5pdGlhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLGtEQUFvQztBQUNwQyxzRUFLaUQ7QUFHakQsOENBQThDO0FBQzlDLE1BQU0sU0FBUyxHQUNiLGlIQUFpSCxDQUFDO0FBQ3BILE1BQU0sU0FBUyxHQUNiLGlIQUFpSCxDQUFDO0FBRXBIOztHQUVHO0FBQ0gsU0FBUyxXQUFXLENBQUMsUUFBZ0IsRUFBRSxLQUFhO0lBQ2xELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFzQixDQUFDO0FBQzVELENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxXQUFxRTtJQUMxRixPQUFPO1FBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQzVDLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUE0QyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakgsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7UUFDckIsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7S0FDSCxDQUFDO0FBQzVCLENBQUM7QUFFRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEdBQUcsRUFBRTtRQUNwRixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsR0FB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QUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxLQUFLLENBQUMsWUFBZ0MsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM3RSxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBQSw0QkFBaUIsRUFDckIsS0FBSyxFQUNMLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxFQUN6RSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUMzQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAqIGFzIHNqY2wgZnJvbSAnQGJpdGdvL3NqY2wnO1xuaW1wb3J0IHtcbiAgdmFsaWRhdGVLZXksXG4gIHZhbGlkYXRlS2V5QXN5bmMsXG4gIGdldEJpcDMyS2V5cyxcbiAgZ2V0QmlwMzJLZXlzQXN5bmMsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9yZWNvdmVyeS9pbml0aWF0ZSc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vYml0Z29CYXNlJztcblxuLy8gQSBkZXRlcm1pbmlzdGljIHhwcnYgdXNlZCBhY3Jvc3MgYWxsIHRlc3RzLlxuY29uc3QgVEVTVF9YUFJWID1cbiAgJ3hwcnY5czIxWnJRSDE0M0syZko5MVM0QlJzdXBjWXJFNm1tWTk2ZmNYNUhraG9UcnJ3bXdqZDE2Q244N2NXaW5KakJ5cmZwb2pqeDdlenNKTHg3VEFLTFQ4bThoTTVLYXg5WWNveG5CZUpaM3Qyayc7XG5jb25zdCBURVNUX1hQVUIgPVxuICAneHB1YjY2MU15TXdBcVJiY0Y5TmM3VGJCbzFyWkFhZ2lXRVZQV0tiREtUaE5HOHpxams3NkhBS0xrYVNiVG42ZEsyZFFQZnVEN3hqaWN4Q1pWV3ZqNjdmUDVuUTlXN1FVUm1vTVZBWDhtNmpac0dwJztcblxuLyoqXG4gKiBFbmNyeXB0IHBsYWludGV4dCB3aXRoIFNKQ0wgKHNhbWUgYWxnb3JpdGhtIGFzIEJpdEdvQVBJLmVuY3J5cHQpLlxuICovXG5mdW5jdGlvbiBzamNsRW5jcnlwdChwYXNzd29yZDogc3RyaW5nLCBpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNqY2wuZW5jcnlwdChwYXNzd29yZCwgaW5wdXQpIGFzIHVua25vd24gYXMgc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBtYWtlTW9ja0JpdEdvKGRlY3J5cHRJbXBsOiAocGFyYW1zOiB7IHBhc3N3b3JkPzogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IHN0cmluZyk6IEJpdEdvQmFzZSB7XG4gIHJldHVybiB7XG4gICAgZGVjcnlwdDogc2lub24uc3R1YigpLmNhbGxzRmFrZShkZWNyeXB0SW1wbCksXG4gICAgZGVjcnlwdEFzeW5jOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IHsgcGFzc3dvcmQ/OiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gZGVjcnlwdEltcGwocGFyYW1zKSksXG4gICAgZW5jcnlwdDogc2lub24uc3R1YigpLFxuICAgIGVuY3J5cHRBc3luYzogc2lub24uc3R1YigpLFxuICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xufVxuXG5kZXNjcmliZSgndmFsaWRhdGVLZXknLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBhIEJJUDMyIG5vZGUgZGlyZWN0bHkgd2hlbiBrZXkgc3RhcnRzIHdpdGggeHBydiAoYnlwYXNzZXMgZGVjcnlwdCknLCAoKSA9PiB7XG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBiZSBjYWxsZWQnKTtcbiAgICB9KTtcbiAgICBjb25zdCBub2RlID0gdmFsaWRhdGVLZXkoYml0Z28sIHtcbiAgICAgIGtleTogVEVTVF9YUFJWLFxuICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICBwYXNzcGhyYXNlOiAnc2VjcmV0JyxcbiAgICAgIGlzVW5zaWduZWRTd2VlcDogZmFsc2UsXG4gICAgICBpc0tyc1JlY292ZXJ5OiBmYWxzZSxcbiAgICB9KTtcbiAgICBub2RlLnRvQmFzZTU4KCkuc2hvdWxkLmVxdWFsKFRFU1RfWFBSVik7XG4gICAgKGJpdGdvLmRlY3J5cHQgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDApO1xuICB9KTtcblxuICBpdCgnY2FsbHMgZGVjcnlwdCBhbmQgcmV0dXJucyBCSVAzMiBub2RlIHdoZW4ga2V5IGlzIGVuY3J5cHRlZCAobm90IHhwcnYpJywgKCkgPT4ge1xuICAgIGNvbnN0IHBhc3NwaHJhc2UgPSAnaHVudGVyMic7XG4gICAgY29uc3QgZW5jcnlwdGVkS2V5ID0gc2pjbEVuY3J5cHQocGFzc3BocmFzZSwgVEVTVF9YUFJWKTtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKHsgcGFzc3dvcmQsIGlucHV0IH0pID0+IHtcbiAgICAgIGlmIChpbnB1dCA9PT0gZW5jcnlwdGVkS2V5ICYmIHBhc3N3b3JkID09PSBwYXNzcGhyYXNlKSByZXR1cm4gVEVTVF9YUFJWO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGRlY3J5cHQgY2FsbCcpO1xuICAgIH0pO1xuICAgIGNvbnN0IG5vZGUgPSB2YWxpZGF0ZUtleShiaXRnbywge1xuICAgICAga2V5OiBlbmNyeXB0ZWRLZXksXG4gICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIHBhc3NwaHJhc2UsXG4gICAgICBpc1Vuc2lnbmVkU3dlZXA6IGZhbHNlLFxuICAgICAgaXNLcnNSZWNvdmVyeTogZmFsc2UsXG4gICAgfSk7XG4gICAgbm9kZS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbChURVNUX1hQUlYpO1xuICAgIChiaXRnby5kZWNyeXB0IGFzIHNpbm9uLlNpbm9uU3R1YikuY2FsbENvdW50LnNob3VsZC5lcXVhbCgxKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aXRoIGZyaWVuZGx5IG1lc3NhZ2Ugd2hlbiBkZWNyeXB0IGZhaWxzICh3cm9uZyBwYXNzcGhyYXNlKScsICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzamNsOiBjY206IHRhZyBkb2VzIG5vdCBtYXRjaCcpO1xuICAgIH0pO1xuICAgICgoKSA9PlxuICAgICAgdmFsaWRhdGVLZXkoYml0Z28sIHtcbiAgICAgICAga2V5OiAnbm90QW5YcHJ2JyxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIHBhc3NwaHJhc2U6ICd3cm9uZycsXG4gICAgICAgIGlzVW5zaWduZWRTd2VlcDogZmFsc2UsXG4gICAgICAgIGlzS3JzUmVjb3Zlcnk6IGZhbHNlLFxuICAgICAgfSkpLnNob3VsZC50aHJvdygnRmFpbGVkIHRvIGRlY3J5cHQgdXNlciBrZXkgd2l0aCBwYXNzY29kZSAtIHRyeSBhZ2FpbiEnKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3ZhbGlkYXRlS2V5QXN5bmMnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBhIEJJUDMyIG5vZGUgZGlyZWN0bHkgd2hlbiBrZXkgc3RhcnRzIHdpdGggeHBydiAoYnlwYXNzZXMgZGVjcnlwdEFzeW5jKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGJlIGNhbGxlZCcpO1xuICAgIH0pO1xuICAgIGNvbnN0IG5vZGUgPSBhd2FpdCB2YWxpZGF0ZUtleUFzeW5jKGJpdGdvLCB7XG4gICAgICBrZXk6IFRFU1RfWFBSVixcbiAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgcGFzc3BocmFzZTogJ3NlY3JldCcsXG4gICAgICBpc1Vuc2lnbmVkU3dlZXA6IGZhbHNlLFxuICAgICAgaXNLcnNSZWNvdmVyeTogZmFsc2UsXG4gICAgfSk7XG4gICAgbm9kZS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbChURVNUX1hQUlYpO1xuICAgIChiaXRnby5kZWNyeXB0QXN5bmMgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDApO1xuICB9KTtcblxuICBpdCgnY2FsbHMgZGVjcnlwdEFzeW5jIGFuZCByZXR1cm5zIEJJUDMyIG5vZGUgd2hlbiBrZXkgaXMgZW5jcnlwdGVkIChub3QgeHBydiknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFzc3BocmFzZSA9ICdodW50ZXIyJztcbiAgICBjb25zdCBlbmNyeXB0ZWRLZXkgPSBzamNsRW5jcnlwdChwYXNzcGhyYXNlLCBURVNUX1hQUlYpO1xuICAgIGNvbnN0IGJpdGdvID0gbWFrZU1vY2tCaXRHbygoeyBwYXNzd29yZCwgaW5wdXQgfSkgPT4ge1xuICAgICAgaWYgKGlucHV0ID09PSBlbmNyeXB0ZWRLZXkgJiYgcGFzc3dvcmQgPT09IHBhc3NwaHJhc2UpIHJldHVybiBURVNUX1hQUlY7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgZGVjcnlwdCBjYWxsJyk7XG4gICAgfSk7XG4gICAgY29uc3Qgbm9kZSA9IGF3YWl0IHZhbGlkYXRlS2V5QXN5bmMoYml0Z28sIHtcbiAgICAgIGtleTogZW5jcnlwdGVkS2V5LFxuICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICBwYXNzcGhyYXNlLFxuICAgICAgaXNVbnNpZ25lZFN3ZWVwOiBmYWxzZSxcbiAgICAgIGlzS3JzUmVjb3Zlcnk6IGZhbHNlLFxuICAgIH0pO1xuICAgIG5vZGUudG9CYXNlNTgoKS5zaG91bGQuZXF1YWwoVEVTVF9YUFJWKTtcbiAgICAoYml0Z28uZGVjcnlwdEFzeW5jIGFzIHNpbm9uLlNpbm9uU3R1YikuY2FsbENvdW50LnNob3VsZC5lcXVhbCgxKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgd2l0aCBmcmllbmRseSBtZXNzYWdlIHdoZW4gZGVjcnlwdEFzeW5jIGZhaWxzICh3cm9uZyBwYXNzcGhyYXNlKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzamNsOiBjY206IHRhZyBkb2VzIG5vdCBtYXRjaCcpO1xuICAgIH0pO1xuICAgIGF3YWl0IHZhbGlkYXRlS2V5QXN5bmMoYml0Z28sIHtcbiAgICAgIGtleTogJ25vdEFuWHBydicsXG4gICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIHBhc3NwaHJhc2U6ICd3cm9uZycsXG4gICAgICBpc1Vuc2lnbmVkU3dlZXA6IGZhbHNlLFxuICAgICAgaXNLcnNSZWNvdmVyeTogZmFsc2UsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRmFpbGVkIHRvIGRlY3J5cHQgdXNlciBrZXkgd2l0aCBwYXNzY29kZSAtIHRyeSBhZ2FpbiEnKTtcbiAgfSk7XG5cbiAgaXQoJ3NraXBzIGRlY3J5cHRBc3luYyBmb3IgdW5zaWduZWQgc3dlZXAgKGlzVW5zaWduZWRTd2VlcCA9IHRydWUpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJpdGdvID0gbWFrZU1vY2tCaXRHbygoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgYmUgY2FsbGVkJyk7XG4gICAgfSk7XG4gICAgY29uc3Qgbm9kZSA9IGF3YWl0IHZhbGlkYXRlS2V5QXN5bmMoYml0Z28sIHtcbiAgICAgIGtleTogVEVTVF9YUFVCLFxuICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICBwYXNzcGhyYXNlOiAnc2VjcmV0JyxcbiAgICAgIGlzVW5zaWduZWRTd2VlcDogdHJ1ZSxcbiAgICAgIGlzS3JzUmVjb3Zlcnk6IGZhbHNlLFxuICAgIH0pO1xuICAgIG5vZGUubmV1dGVyZWQoKS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbChURVNUX1hQVUIpO1xuICAgIChiaXRnby5kZWNyeXB0QXN5bmMgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZ2V0QmlwMzJLZXlzJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgW3VzZXJLZXksIGJhY2t1cEtleV0gd2hlbiBib3RoIGFyZSBwcm92aWRlZCBhcyB4cHJ2JywgKCkgPT4ge1xuICAgIGNvbnN0IGJpdGdvID0gbWFrZU1vY2tCaXRHbygoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgYmUgY2FsbGVkJyk7XG4gICAgfSk7XG4gICAgY29uc3Qga2V5cyA9IGdldEJpcDMyS2V5cyhcbiAgICAgIGJpdGdvLFxuICAgICAgeyB1c2VyS2V5OiBURVNUX1hQUlYsIGJhY2t1cEtleTogVEVTVF9YUFJWLCByZWNvdmVyeURlc3RpbmF0aW9uOiAnYWRkcicgfSxcbiAgICAgIHsgcmVxdWlyZUJpdEdvWHB1YjogZmFsc2UgfVxuICAgICk7XG4gICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAga2V5c1swXS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbChURVNUX1hQUlYpO1xuICAgIGtleXNbMV0udG9CYXNlNTgoKS5zaG91bGQuZXF1YWwoVEVTVF9YUFJWKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIHJlcXVpcmVCaXRHb1hwdWIgaXMgdHJ1ZSBidXQgYml0Z29LZXkgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGJlIGNhbGxlZCcpO1xuICAgIH0pO1xuICAgICgoKSA9PlxuICAgICAgZ2V0QmlwMzJLZXlzKFxuICAgICAgICBiaXRnbyxcbiAgICAgICAgeyB1c2VyS2V5OiBURVNUX1hQUlYsIGJhY2t1cEtleTogVEVTVF9YUFJWLCByZWNvdmVyeURlc3RpbmF0aW9uOiAnYWRkcicgfSxcbiAgICAgICAgeyByZXF1aXJlQml0R29YcHViOiB0cnVlIH1cbiAgICAgICkpLnNob3VsZC50aHJvdygnQml0R28geHB1YiByZXF1aXJlZCBidXQgbm90IHByb3ZpZGVkJyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdnZXRCaXAzMktleXNBc3luYycsICgpID0+IHtcbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIFt1c2VyS2V5LCBiYWNrdXBLZXldIHdoZW4gYm90aCBhcmUgcHJvdmlkZWQgYXMgeHBydicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGJlIGNhbGxlZCcpO1xuICAgIH0pO1xuICAgIGNvbnN0IGtleXMgPSBhd2FpdCBnZXRCaXAzMktleXNBc3luYyhcbiAgICAgIGJpdGdvLFxuICAgICAgeyB1c2VyS2V5OiBURVNUX1hQUlYsIGJhY2t1cEtleTogVEVTVF9YUFJWLCByZWNvdmVyeURlc3RpbmF0aW9uOiAnYWRkcicgfSxcbiAgICAgIHsgcmVxdWlyZUJpdEdvWHB1YjogZmFsc2UgfVxuICAgICk7XG4gICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG4gICAga2V5c1swXS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbChURVNUX1hQUlYpO1xuICAgIGtleXNbMV0udG9CYXNlNTgoKS5zaG91bGQuZXF1YWwoVEVTVF9YUFJWKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgdGhyZWUga2V5cyB3aGVuIHJlcXVpcmVCaXRHb1hwdWIgaXMgdHJ1ZSBhbmQgYml0Z29LZXkgaXMgdmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBiZSBjYWxsZWQnKTtcbiAgICB9KTtcbiAgICBjb25zdCBrZXlzID0gYXdhaXQgZ2V0QmlwMzJLZXlzQXN5bmMoXG4gICAgICBiaXRnbyxcbiAgICAgIHsgdXNlcktleTogVEVTVF9YUFJWLCBiYWNrdXBLZXk6IFRFU1RfWFBSViwgYml0Z29LZXk6IFRFU1RfWFBVQiwgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ2FkZHInIH0sXG4gICAgICB7IHJlcXVpcmVCaXRHb1hwdWI6IHRydWUgfVxuICAgICk7XG4gICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoMyk7XG4gICAga2V5c1syXS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkuc2hvdWxkLmVxdWFsKFRFU1RfWFBVQik7XG4gIH0pO1xuXG4gIGl0KCdjYWxscyBkZWNyeXB0QXN5bmMgZm9yIGVuY3J5cHRlZCB1c2VyIGtleScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXNzcGhyYXNlID0gJ3Bhc3MxJztcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyS2V5ID0gc2pjbEVuY3J5cHQocGFzc3BocmFzZSwgVEVTVF9YUFJWKTtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKHsgcGFzc3dvcmQsIGlucHV0IH0pID0+IHtcbiAgICAgIGlmIChpbnB1dCA9PT0gZW5jcnlwdGVkVXNlcktleSAmJiBwYXNzd29yZCA9PT0gcGFzc3BocmFzZSkgcmV0dXJuIFRFU1RfWFBSVjtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBkZWNyeXB0IGNhbGwnKTtcbiAgICB9KTtcbiAgICBjb25zdCBrZXlzID0gYXdhaXQgZ2V0QmlwMzJLZXlzQXN5bmMoXG4gICAgICBiaXRnbyxcbiAgICAgIHsgdXNlcktleTogZW5jcnlwdGVkVXNlcktleSwgYmFja3VwS2V5OiBURVNUX1hQUlYsIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsIHJlY292ZXJ5RGVzdGluYXRpb246ICdhZGRyJyB9LFxuICAgICAgeyByZXF1aXJlQml0R29YcHViOiBmYWxzZSB9XG4gICAgKTtcbiAgICBrZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICBrZXlzWzBdLnRvQmFzZTU4KCkuc2hvdWxkLmVxdWFsKFRFU1RfWFBSVik7XG4gICAgKGJpdGdvLmRlY3J5cHRBc3luYyBhcyBzaW5vbi5TaW5vblN0dWIpLmNhbGxDb3VudC5zaG91bGQuZXF1YWwoMSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIHdoZW4gcmVxdWlyZUJpdEdvWHB1YiBpcyB0cnVlIGJ1dCBiaXRnb0tleSBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJpdGdvID0gbWFrZU1vY2tCaXRHbygoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgYmUgY2FsbGVkJyk7XG4gICAgfSk7XG4gICAgYXdhaXQgZ2V0QmlwMzJLZXlzQXN5bmMoXG4gICAgICBiaXRnbyxcbiAgICAgIHsgdXNlcktleTogVEVTVF9YUFJWLCBiYWNrdXBLZXk6IFRFU1RfWFBSViwgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ2FkZHInIH0sXG4gICAgICB7IHJlcXVpcmVCaXRHb1hwdWI6IHRydWUgfVxuICAgICkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnQml0R28geHB1YiByZXF1aXJlZCBidXQgbm90IHByb3ZpZGVkJyk7XG4gIH0pO1xufSk7XG4iXX0=
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vcmVjb3ZlcnkvaW5pdGlhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLGtEQUFvQztBQUNwQyxzRUFBb0Y7QUFHcEYsOENBQThDO0FBQzlDLE1BQU0sU0FBUyxHQUNiLGlIQUFpSCxDQUFDO0FBQ3BILE1BQU0sU0FBUyxHQUNiLGlIQUFpSCxDQUFDO0FBRXBIOztHQUVHO0FBQ0gsU0FBUyxXQUFXLENBQUMsUUFBZ0IsRUFBRSxLQUFhO0lBQ2xELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFzQixDQUFDO0FBQzVELENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxXQUFxRTtJQUMxRixPQUFPO1FBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQTRDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtLQUNFLENBQUM7QUFDNUIsQ0FBQztBQUVELFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNEVBQTRFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDMUYsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxN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SSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsS0FBSyxDQUFDLE9BQTJCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDN0UsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUEsdUJBQVksRUFDaEIsS0FBSyxFQUNMLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxFQUN6RSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUMzQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAqIGFzIHNqY2wgZnJvbSAnQGJpdGdvL3NqY2wnO1xuaW1wb3J0IHsgdmFsaWRhdGVLZXksIGdldEJpcDMyS2V5cyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9yZWNvdmVyeS9pbml0aWF0ZSc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vYml0Z29CYXNlJztcblxuLy8gQSBkZXRlcm1pbmlzdGljIHhwcnYgdXNlZCBhY3Jvc3MgYWxsIHRlc3RzLlxuY29uc3QgVEVTVF9YUFJWID1cbiAgJ3hwcnY5czIxWnJRSDE0M0syZko5MVM0QlJzdXBjWXJFNm1tWTk2ZmNYNUhraG9UcnJ3bXdqZDE2Q244N2NXaW5KakJ5cmZwb2pqeDdlenNKTHg3VEFLTFQ4bThoTTVLYXg5WWNveG5CZUpaM3Qyayc7XG5jb25zdCBURVNUX1hQVUIgPVxuICAneHB1YjY2MU15TXdBcVJiY0Y5TmM3VGJCbzFyWkFhZ2lXRVZQV0tiREtUaE5HOHpxams3NkhBS0xrYVNiVG42ZEsyZFFQZnVEN3hqaWN4Q1pWV3ZqNjdmUDVuUTlXN1FVUm1vTVZBWDhtNmpac0dwJztcblxuLyoqXG4gKiBFbmNyeXB0IHBsYWludGV4dCB3aXRoIFNKQ0wgKGxlZ2FjeSB2MSBlbnZlbG9wZSwgbWF0Y2hpbmcgYGVuY3J5cHRpb25WZXJzaW9uOiAxYCkuXG4gKi9cbmZ1bmN0aW9uIHNqY2xFbmNyeXB0KHBhc3N3b3JkOiBzdHJpbmcsIGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhc3N3b3JkLCBpbnB1dCkgYXMgdW5rbm93biBhcyBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIG1ha2VNb2NrQml0R28oZGVjcnlwdEltcGw6IChwYXJhbXM6IHsgcGFzc3dvcmQ/OiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gc3RyaW5nKTogQml0R29CYXNlIHtcbiAgcmV0dXJuIHtcbiAgICBkZWNyeXB0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IHsgcGFzc3dvcmQ/OiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gZGVjcnlwdEltcGwocGFyYW1zKSksXG4gICAgZW5jcnlwdDogc2lub24uc3R1YigpLFxuICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xufVxuXG5kZXNjcmliZSgndmFsaWRhdGVLZXknLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBhIEJJUDMyIG5vZGUgZGlyZWN0bHkgd2hlbiBrZXkgc3RhcnRzIHdpdGggeHBydiAoYnlwYXNzZXMgZGVjcnlwdCknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBiZSBjYWxsZWQnKTtcbiAgICB9KTtcbiAgICBjb25zdCBub2RlID0gYXdhaXQgdmFsaWRhdGVLZXkoYml0Z28sIHtcbiAgICAgIGtleTogVEVTVF9YUFJWLFxuICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICBwYXNzcGhyYXNlOiAnc2VjcmV0JyxcbiAgICAgIGlzVW5zaWduZWRTd2VlcDogZmFsc2UsXG4gICAgICBpc0tyc1JlY292ZXJ5OiBmYWxzZSxcbiAgICB9KTtcbiAgICBub2RlLnRvQmFzZTU4KCkuc2hvdWxkLmVxdWFsKFRFU1RfWFBSVik7XG4gICAgKGJpdGdvLmRlY3J5cHQgYXMgc2lub24uU2lub25TdHViKS5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDApO1xuICB9KTtcblxuICBpdCgnY2FsbHMgZGVjcnlwdCBhbmQgcmV0dXJucyBCSVAzMiBub2RlIHdoZW4ga2V5IGlzIGVuY3J5cHRlZCAobm90IHhwcnYpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhc3NwaHJhc2UgPSAnaHVudGVyMic7XG4gICAgY29uc3QgZW5jcnlwdGVkS2V5ID0gc2pjbEVuY3J5cHQocGFzc3BocmFzZSwgVEVTVF9YUFJWKTtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKHsgcGFzc3dvcmQsIGlucHV0IH0pID0+IHtcbiAgICAgIGlmIChpbnB1dCA9PT0gZW5jcnlwdGVkS2V5ICYmIHBhc3N3b3JkID09PSBwYXNzcGhyYXNlKSByZXR1cm4gVEVTVF9YUFJWO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGRlY3J5cHQgY2FsbCcpO1xuICAgIH0pO1xuICAgIGNvbnN0IG5vZGUgPSBhd2FpdCB2YWxpZGF0ZUtleShiaXRnbywge1xuICAgICAga2V5OiBlbmNyeXB0ZWRLZXksXG4gICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIHBhc3NwaHJhc2UsXG4gICAgICBpc1Vuc2lnbmVkU3dlZXA6IGZhbHNlLFxuICAgICAgaXNLcnNSZWNvdmVyeTogZmFsc2UsXG4gICAgfSk7XG4gICAgbm9kZS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbChURVNUX1hQUlYpO1xuICAgIChiaXRnby5kZWNyeXB0IGFzIHNpbm9uLlNpbm9uU3R1YikuY2FsbENvdW50LnNob3VsZC5lcXVhbCgxKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgd2l0aCBmcmllbmRseSBtZXNzYWdlIHdoZW4gZGVjcnlwdCBmYWlscyAod3JvbmcgcGFzc3BocmFzZSknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2pjbDogY2NtOiB0YWcgZG9lcyBub3QgbWF0Y2gnKTtcbiAgICB9KTtcbiAgICBhd2FpdCB2YWxpZGF0ZUtleShiaXRnbywge1xuICAgICAga2V5OiAnbm90QW5YcHJ2JyxcbiAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgcGFzc3BocmFzZTogJ3dyb25nJyxcbiAgICAgIGlzVW5zaWduZWRTd2VlcDogZmFsc2UsXG4gICAgICBpc0tyc1JlY292ZXJ5OiBmYWxzZSxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdGYWlsZWQgdG8gZGVjcnlwdCB1c2VyIGtleSB3aXRoIHBhc3Njb2RlIC0gdHJ5IGFnYWluIScpO1xuICB9KTtcblxuICBpdCgnc2tpcHMgZGVjcnlwdCBmb3IgdW5zaWduZWQgc3dlZXAgKGlzVW5zaWduZWRTd2VlcCA9IHRydWUpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJpdGdvID0gbWFrZU1vY2tCaXRHbygoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgYmUgY2FsbGVkJyk7XG4gICAgfSk7XG4gICAgY29uc3Qgbm9kZSA9IGF3YWl0IHZhbGlkYXRlS2V5KGJpdGdvLCB7XG4gICAgICBrZXk6IFRFU1RfWFBVQixcbiAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgcGFzc3BocmFzZTogJ3NlY3JldCcsXG4gICAgICBpc1Vuc2lnbmVkU3dlZXA6IHRydWUsXG4gICAgICBpc0tyc1JlY292ZXJ5OiBmYWxzZSxcbiAgICB9KTtcbiAgICBub2RlLm5ldXRlcmVkKCkudG9CYXNlNTgoKS5zaG91bGQuZXF1YWwoVEVTVF9YUFVCKTtcbiAgICAoYml0Z28uZGVjcnlwdCBhcyBzaW5vbi5TaW5vblN0dWIpLmNhbGxDb3VudC5zaG91bGQuZXF1YWwoMCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdnZXRCaXAzMktleXMnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBbdXNlcktleSwgYmFja3VwS2V5XSB3aGVuIGJvdGggYXJlIHByb3ZpZGVkIGFzIHhwcnYnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBiZSBjYWxsZWQnKTtcbiAgICB9KTtcbiAgICBjb25zdCBrZXlzID0gYXdhaXQgZ2V0QmlwMzJLZXlzKFxuICAgICAgYml0Z28sXG4gICAgICB7IHVzZXJLZXk6IFRFU1RfWFBSViwgYmFja3VwS2V5OiBURVNUX1hQUlYsIHJlY292ZXJ5RGVzdGluYXRpb246ICdhZGRyJyB9LFxuICAgICAgeyByZXF1aXJlQml0R29YcHViOiBmYWxzZSB9XG4gICAgKTtcbiAgICBrZXlzLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICBrZXlzWzBdLnRvQmFzZTU4KCkuc2hvdWxkLmVxdWFsKFRFU1RfWFBSVik7XG4gICAga2V5c1sxXS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbChURVNUX1hQUlYpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyB0aHJlZSBrZXlzIHdoZW4gcmVxdWlyZUJpdEdvWHB1YiBpcyB0cnVlIGFuZCBiaXRnb0tleSBpcyB2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiaXRnbyA9IG1ha2VNb2NrQml0R28oKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGJlIGNhbGxlZCcpO1xuICAgIH0pO1xuICAgIGNvbnN0IGtleXMgPSBhd2FpdCBnZXRCaXAzMktleXMoXG4gICAgICBiaXRnbyxcbiAgICAgIHsgdXNlcktleTogVEVTVF9YUFJWLCBiYWNrdXBLZXk6IFRFU1RfWFBSViwgYml0Z29LZXk6IFRFU1RfWFBVQiwgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ2FkZHInIH0sXG4gICAgICB7IHJlcXVpcmVCaXRHb1hwdWI6IHRydWUgfVxuICAgICk7XG4gICAga2V5cy5zaG91bGQuaGF2ZS5sZW5ndGgoMyk7XG4gICAga2V5c1syXS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkuc2hvdWxkLmVxdWFsKFRFU1RfWFBVQik7XG4gIH0pO1xuXG4gIGl0KCdjYWxscyBkZWNyeXB0IGZvciBlbmNyeXB0ZWQgdXNlciBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFzc3BocmFzZSA9ICdwYXNzMSc7XG4gICAgY29uc3QgZW5jcnlwdGVkVXNlcktleSA9IHNqY2xFbmNyeXB0KHBhc3NwaHJhc2UsIFRFU1RfWFBSVik7XG4gICAgY29uc3QgYml0Z28gPSBtYWtlTW9ja0JpdEdvKCh7IHBhc3N3b3JkLCBpbnB1dCB9KSA9PiB7XG4gICAgICBpZiAoaW5wdXQgPT09IGVuY3J5cHRlZFVzZXJLZXkgJiYgcGFzc3dvcmQgPT09IHBhc3NwaHJhc2UpIHJldHVybiBURVNUX1hQUlY7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgZGVjcnlwdCBjYWxsJyk7XG4gICAgfSk7XG4gICAgY29uc3Qga2V5cyA9IGF3YWl0IGdldEJpcDMyS2V5cyhcbiAgICAgIGJpdGdvLFxuICAgICAgeyB1c2VyS2V5OiBlbmNyeXB0ZWRVc2VyS2V5LCBiYWNrdXBLZXk6IFRFU1RfWFBSViwgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSwgcmVjb3ZlcnlEZXN0aW5hdGlvbjogJ2FkZHInIH0sXG4gICAgICB7IHJlcXVpcmVCaXRHb1hwdWI6IGZhbHNlIH1cbiAgICApO1xuICAgIGtleXMuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgIGtleXNbMF0udG9CYXNlNTgoKS5zaG91bGQuZXF1YWwoVEVTVF9YUFJWKTtcbiAgICAoYml0Z28uZGVjcnlwdCBhcyBzaW5vbi5TaW5vblN0dWIpLmNhbGxDb3VudC5zaG91bGQuZXF1YWwoMSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIHdoZW4gcmVxdWlyZUJpdEdvWHB1YiBpcyB0cnVlIGJ1dCBiaXRnb0tleSBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJpdGdvID0gbWFrZU1vY2tCaXRHbygoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgYmUgY2FsbGVkJyk7XG4gICAgfSk7XG4gICAgYXdhaXQgZ2V0QmlwMzJLZXlzKFxuICAgICAgYml0Z28sXG4gICAgICB7IHVzZXJLZXk6IFRFU1RfWFBSViwgYmFja3VwS2V5OiBURVNUX1hQUlYsIHJlY292ZXJ5RGVzdGluYXRpb246ICdhZGRyJyB9LFxuICAgICAgeyByZXF1aXJlQml0R29YcHViOiB0cnVlIH1cbiAgICApLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0JpdEdvIHhwdWIgcmVxdWlyZWQgYnV0IG5vdCBwcm92aWRlZCcpO1xuICB9KTtcbn0pO1xuIl19
@@ -32,7 +32,7 @@ describe('TradingAccount', function () {
32
32
  coin: sinon_1.default.stub().callsFake((coin) => ({
33
33
  url: sinon_1.default.stub().callsFake((url) => `https://app.bitgo-staging.com/api/v2/${coin}${url}`),
34
34
  })),
35
- decryptAsync: sinon_1.default
35
+ decrypt: sinon_1.default
36
36
  .stub()
37
37
  .callsFake(async ({ input, password }) => input === encryptedPrv && password === walletPassphrase ? decryptedPrv : undefined),
38
38
  };
@@ -135,7 +135,7 @@ describe('TradingAccount', function () {
135
135
  it('should decrypt the user key and sign the payload locally', async function () {
136
136
  const result = await tradingAccount.signPayload({ payload, walletPassphrase });
137
137
  mockBaseCoin.keychains().get.calledWith({ id: 'user-key-id' }).should.be.true();
138
- mockBitGo.decryptAsync.calledWith({ input: encryptedPrv, password: walletPassphrase }).should.be.true();
138
+ mockBitGo.decrypt.calledWith({ input: encryptedPrv, password: walletPassphrase }).should.be.true();
139
139
  mockBaseCoin.signMessage.calledOnce.should.be.true();
140
140
  result.should.equal(Buffer.from(signature, 'hex').toString('hex'));
141
141
  });
@@ -153,7 +153,7 @@ describe('TradingAccount', function () {
153
153
  describe('with both walletPassphrase and prv', function () {
154
154
  it('should use prv directly and not call decrypt when both are provided', async function () {
155
155
  await tradingAccount.signPayload({ payload, walletPassphrase, prv: decryptedPrv });
156
- mockBitGo.decryptAsync.called.should.be.false();
156
+ mockBitGo.decrypt.called.should.be.false();
157
157
  mockBaseCoin.keychains.called.should.be.false();
158
158
  const signMessageCall = mockBaseCoin.signMessage.getCall(0);
159
159
  signMessageCall.args[0].should.deepEqual({ prv: decryptedPrv });
@@ -162,7 +162,7 @@ describe('TradingAccount', function () {
162
162
  describe('with prv (local user key signing without decryption)', function () {
163
163
  it('should sign using the provided prv without calling decrypt', async function () {
164
164
  const result = await tradingAccount.signPayload({ payload, prv: decryptedPrv });
165
- mockBitGo.decryptAsync.called.should.be.false();
165
+ mockBitGo.decrypt.called.should.be.false();
166
166
  mockBaseCoin.keychains.called.should.be.false();
167
167
  mockBaseCoin.signMessage.calledOnce.should.be.true();
168
168
  result.should.equal(Buffer.from(signature, 'hex').toString('hex'));
@@ -189,4 +189,4 @@ describe('TradingAccount', function () {
189
189
  });
190
190
  });
191
191
  });
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZGluZ0FjY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdHJhZGluZy90cmFkaW5nQWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztHQUVHO0FBQ0gsa0RBQTBCO0FBQzFCLGtCQUFnQjtBQUNoQixpRkFBOEU7QUFFOUUsUUFBUSxDQUFDLGdCQUFnQixFQUFFO0lBQ3pCLElBQUksY0FBOEIsQ0FBQztJQUNuQyxJQUFJLDZCQUE2QyxDQUFDO0lBQ2xELElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksVUFBZSxDQUFDO0lBQ3BCLElBQUkseUJBQThCLENBQUM7SUFDbkMsSUFBSSxZQUFpQixDQUFDO0lBQ3RCLElBQUksUUFBeUIsQ0FBQztJQUU5QixNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQztJQUMxQyxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO0lBQzNDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztJQUNyQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFOUMsVUFBVSxDQUFDO1FBQ1QsUUFBUSxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4RyxTQUFTLEdBQUc7WUFDVixJQUFJLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUM5QyxJQUFJLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDOUMsR0FBRyxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLHdDQUF3QyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7YUFDbkcsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxFQUFFLGVBQUs7aUJBQ2hCLElBQUksRUFBRTtpQkFDTixTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FDdkMsS0FBSyxLQUFLLFlBQVksSUFBSSxRQUFRLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNuRjtTQUNKLENBQUM7UUFFRixZQUFZLEdBQUc7WUFDYixTQUFTLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQztnQkFDOUIsR0FBRyxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQzthQUM3QyxDQUFDO1lBQ0YsV0FBVyxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQW9CLEVBQUUsRUFBRTtnQkFDakUsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLFlBQVksRUFBRSxDQUFDO29CQUM3QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLENBQUMsQ0FBQztTQUNILENBQUM7UUFFRixVQUFVLEdBQUc7WUFDWCxFQUFFLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztZQUMxQyxNQUFNLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUM3RCxNQUFNLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQztnQkFDM0IsRUFBRSxFQUFFLGdCQUFnQjtnQkFDcEIsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUM7Z0JBQ3RELFlBQVksRUFBRTtvQkFDWixzQkFBc0IsRUFBRSxLQUFLO2lCQUM5QjthQUNGLENBQUM7WUFDRixRQUFRLEVBQUUsWUFBWTtZQUN0QixLQUFLLEVBQUUsU0FBUztTQUNqQixDQUFDO1FBRUYseUJBQXlCLEdBQUc7WUFDMUIsR0FBRyxVQUFVO1lBQ2IsTUFBTSxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQzNCLEVBQUUsRUFBRSxnQkFBZ0I7Z0JBQ3BCLElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDO2dCQUN0RCxZQUFZLEVBQUU7b0JBQ1osc0JBQXNCLEVBQUUsSUFBSTtpQkFDN0I7YUFDRixDQUFDO1NBQ0gsQ0FBQztRQUVGLGNBQWMsR0FBRyxJQUFJLCtCQUFjLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RSw2QkFBNkIsR0FBRyxJQUFJLCtCQUFjLENBQUMsWUFBWSxFQUFFLHlCQUF5QixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pHLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsZUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLElBQUksRUFBRTtRQUNiLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRTtZQUNoQyxjQUFjLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNqRCxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxLQUFLO1lBQ25DLE1BQU0sV0FBVyxHQUFHLHdFQUF3RSxDQUFDO1lBQzdGLE1BQU0sY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDOUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyx3REFBd0QsRUFBRTtZQUNqRSxFQUFFLENBQUMseUVBQXlFLEVBQUUsS0FBSztnQkFDakYsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFFN0QsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0MsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxLQUFLO2dCQUM5RSxNQUFNLE1BQU0sR0FBRyxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztnQkFDNUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLG9HQUFvRyxFQUFFLEtBQUs7Z0JBQzVHLE1BQU0sNkJBQTZCO3FCQUNoQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztxQkFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ3JCLCtKQUErSixDQUNoSyxDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsMEZBQTBGLEVBQUUsS0FBSztnQkFDbEcsTUFBTSw2QkFBNkI7cUJBQ2hDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO3FCQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDckIsK0pBQStKLENBQ2hLLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyx3RkFBd0YsRUFBRSxLQUFLO2dCQUNoRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztvQkFDNUQsRUFBRSxFQUFFLGdCQUFnQjtvQkFDcEIsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUM7b0JBQ3RELFlBQVksRUFBRSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRTtvQkFDL0Msc0JBQXNCLEVBQUUsSUFBSTtpQkFDN0IsQ0FBQyxDQUFDO2dCQUVILE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzdELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHFGQUFxRixFQUFFLEtBQUs7Z0JBQzdGLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDO29CQUM1RCxFQUFFLEVBQUUsZ0JBQWdCO29CQUNwQixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7b0JBQ3JCLFlBQVksRUFBRSxFQUFFO2lCQUNqQixDQUFDLENBQUM7Z0JBRUgsTUFBTSxjQUFjO3FCQUNqQixXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztxQkFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ3JCLHFHQUFxRyxDQUN0RyxDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxnREFBZ0QsRUFBRTtZQUN6RCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSztnQkFDbEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztnQkFFL0UsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoRixTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4RyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyRSxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRSxLQUFLO2dCQUNsRSxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO2dCQUVoRSxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO2dCQUM5RCxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztnQkFFL0UsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLG9DQUFvQyxFQUFFO1lBQzdDLEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxLQUFLO2dCQUM3RSxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBRW5GLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hELFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLHNEQUFzRCxFQUFFO1lBQy9ELEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLO2dCQUNwRSxNQUFNLE1BQU0sR0FBRyxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBRWhGLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hELFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hELFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEtBQUs7Z0JBQ2xFLE1BQU0sY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFFakUsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLO2dCQUNyRCxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBRWpFLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLO2dCQUNuRSxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBRWpFLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEtBQUs7Z0JBQ3BGLE1BQU0sY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBRWhGLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhZGluZ0FjY291bnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vdHJhZGluZy90cmFkaW5nQWNjb3VudCc7XG5cbmRlc2NyaWJlKCdUcmFkaW5nQWNjb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHRyYWRpbmdBY2NvdW50OiBUcmFkaW5nQWNjb3VudDtcbiAgbGV0IHVzZXJLZXlSZXF1aXJlZFRyYWRpbmdBY2NvdW50OiBUcmFkaW5nQWNjb3VudDtcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgbW9ja1dhbGxldDogYW55O1xuICBsZXQgbW9ja1VzZXJLZXlSZXF1aXJlZFdhbGxldDogYW55O1xuICBsZXQgbW9ja0Jhc2VDb2luOiBhbnk7XG4gIGxldCBzZW5kU3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gIGNvbnN0IGVudGVycHJpc2VJZCA9ICd0ZXN0LWVudGVycHJpc2UtaWQnO1xuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3QtcGFzc3BocmFzZSc7XG4gIGNvbnN0IGVuY3J5cHRlZFBydiA9ICdlbmNyeXB0ZWQtcHJ2JztcbiAgY29uc3QgZGVjcnlwdGVkUHJ2ID0gJ2RlY3J5cHRlZC1wcnYnO1xuICBjb25zdCBzaWduYXR1cmUgPSAnYWFiYmNjZGQnO1xuICBjb25zdCBwYXlsb2FkID0geyBkYXRhOiAndGVzdC1wYXlsb2FkJyB9O1xuICBjb25zdCBwYXlsb2FkU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2VuZFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgc2VuZFN0dWIud2l0aEFyZ3MoeyBwYXlsb2FkOiBwYXlsb2FkU3RyaW5nIH0pLnJldHVybnMoeyByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHNpZ25hdHVyZSB9KSB9KTtcblxuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgc2VuZDogc2VuZFN0dWIgfSksXG4gICAgICBjb2luOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKChjb2luOiBzdHJpbmcpID0+ICh7XG4gICAgICAgIHVybDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgodXJsOiBzdHJpbmcpID0+IGBodHRwczovL2FwcC5iaXRnby1zdGFnaW5nLmNvbS9hcGkvdjIvJHtjb2lufSR7dXJsfWApLFxuICAgICAgfSkpLFxuICAgICAgZGVjcnlwdEFzeW5jOiBzaW5vblxuICAgICAgICAuc3R1YigpXG4gICAgICAgIC5jYWxsc0Zha2UoYXN5bmMgKHsgaW5wdXQsIHBhc3N3b3JkIH0pID0+XG4gICAgICAgICAgaW5wdXQgPT09IGVuY3J5cHRlZFBydiAmJiBwYXNzd29yZCA9PT0gd2FsbGV0UGFzc3BocmFzZSA/IGRlY3J5cHRlZFBydiA6IHVuZGVmaW5lZFxuICAgICAgICApLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBlbmNyeXB0ZWRQcnYgfSksXG4gICAgICB9KSxcbiAgICAgIHNpZ25NZXNzYWdlOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChrZXk6IHsgcHJ2OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBpZiAoa2V5LnBydiA9PT0gZGVjcnlwdGVkUHJ2KSB7XG4gICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2lnbk1lc3NhZ2UgY2FsbGVkIHdpdGggdW5leHBlY3RlZCBwcnY6ICR7a2V5LnBydn1gKTtcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBtb2NrV2FsbGV0ID0ge1xuICAgICAgaWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0LXdhbGxldC1pZCcpLFxuICAgICAga2V5SWRzOiBzaW5vbi5zdHViKCkucmV0dXJucyhbJ3VzZXIta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddKSxcbiAgICAgIHRvSlNPTjogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICBpZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICAgICAga2V5czogWyd1c2VyLWtleS1pZCcsICdiYWNrdXAta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgYmFzZUNvaW46IG1vY2tCYXNlQ29pbixcbiAgICAgIGJpdGdvOiBtb2NrQml0R28sXG4gICAgfTtcblxuICAgIG1vY2tVc2VyS2V5UmVxdWlyZWRXYWxsZXQgPSB7XG4gICAgICAuLi5tb2NrV2FsbGV0LFxuICAgICAgdG9KU09OOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgIGlkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgICAgICBrZXlzOiBbJ3VzZXIta2V5LWlkJywgJ2JhY2t1cC1rZXktaWQnLCAnYml0Z28ta2V5LWlkJ10sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgdHJhZGluZ0FjY291bnQgPSBuZXcgVHJhZGluZ0FjY291bnQoZW50ZXJwcmlzZUlkLCBtb2NrV2FsbGV0LCBtb2NrQml0R28pO1xuICAgIHVzZXJLZXlSZXF1aXJlZFRyYWRpbmdBY2NvdW50ID0gbmV3IFRyYWRpbmdBY2NvdW50KGVudGVycHJpc2VJZCwgbW9ja1VzZXJLZXlSZXF1aXJlZFdhbGxldCwgbW9ja0JpdEdvKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgd2FsbGV0IGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgdHJhZGluZ0FjY291bnQuaWQuc2hvdWxkLmVxdWFsKCd0ZXN0LXdhbGxldC1pZCcpO1xuICAgICAgbW9ja1dhbGxldC5pZC5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduUGF5bG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNhbGwgdGhlIHJpZ2h0IHVybCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gYGh0dHBzOi8vYXBwLmJpdGdvLXN0YWdpbmcuY29tL2FwaS92Mi9vZmMvd2FsbGV0L3Rlc3Qtd2FsbGV0LWlkL3R4L3NpZ25gO1xuICAgICAgYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkIH0pO1xuICAgICAgbW9ja0JpdEdvLnBvc3QuY2FsbGVkV2l0aChleHBlY3RlZFVybCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRob3V0IHdhbGxldFBhc3NwaHJhc2Ugb3IgcHJ2IChCaXRHbyByZW1vdGUgc2lnbmluZyknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHNpZ24gdXNpbmcgdGhlIEJpdEdvIGtleSByZW1vdGVseSB3aGVuIG5vIHBhc3NwaHJhc2UgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZCB9KTtcblxuICAgICAgICBtb2NrQml0R28ucG9zdC5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHNlbmRTdHViLmNhbGxlZFdpdGgoeyBwYXlsb2FkOiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHNpZ25hdHVyZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzaWduIGEgc3RyaW5nIHBheWxvYWQgcmVtb3RlbHkgd2hlbiBubyBwYXNzcGhyYXNlIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFkaW5nQWNjb3VudC5zaWduUGF5bG9hZCh7IHBheWxvYWQ6IHBheWxvYWRTdHJpbmcgfSk7XG4gICAgICAgIHNlbmRTdHViLmNhbGxlZFdpdGgoeyBwYXlsb2FkOiBwYXlsb2FkU3RyaW5nIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoc2lnbmF0dXJlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGlmIGNvaW5TcGVjaWZpYy51c2VyS2V5U2lnbmluZ1JlcXVpcmVkIGlzIHRydWUgYW5kIG5vIHBhc3NwaHJhc2UgYW5kIHBydiBhcmUgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHVzZXJLZXlSZXF1aXJlZFRyYWRpbmdBY2NvdW50XG4gICAgICAgICAgLnNpZ25QYXlsb2FkKHsgcGF5bG9hZCB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgJ1dhbGxldCBtdXN0IHVzZSB1c2VyIGtleSB0byBzaWduIG9mYyB0cmFuc2FjdGlvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIHdhbGxldCBwYXNzcGhyYXNlLCB0aGUgcHJpdmF0ZSBrZXksIG9yIHZpc2l0IHlvdXIgd2FsbGV0IHNldHRpbmdzIHBhZ2UgdG8gY29uZmlndXJlIG9uZS4nXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhbGwgYmFjayB0byB0b3AtbGV2ZWwgdXNlcktleVNpZ25pbmdSZXF1aXJlZCB3aGVuIGNvaW5TcGVjaWZpYyBkb2VzIG5vdCBjYXJyeSBpdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdXNlcktleVJlcXVpcmVkVHJhZGluZ0FjY291bnRcbiAgICAgICAgICAuc2lnblBheWxvYWQoeyBwYXlsb2FkIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgICAnV2FsbGV0IG11c3QgdXNlIHVzZXIga2V5IHRvIHNpZ24gb2ZjIHRyYW5zYWN0aW9uLCBwbGVhc2UgcHJvdmlkZSB0aGUgd2FsbGV0IHBhc3NwaHJhc2UsIHRoZSBwcml2YXRlIGtleSwgb3IgdmlzaXQgeW91ciB3YWxsZXQgc2V0dGluZ3MgcGFnZSB0byBjb25maWd1cmUgb25lLidcbiAgICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcHJlZmVyIGNvaW5TcGVjaWZpYy51c2VyS2V5U2lnbmluZ1JlcXVpcmVkIG92ZXIgdG9wLWxldmVsIHdoZW4gYm90aCBhcmUgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja1dhbGxldC50b0pTT04ub25DYWxsKG1vY2tXYWxsZXQudG9KU09OLmNhbGxDb3VudCkucmV0dXJucyh7XG4gICAgICAgICAgaWQ6ICd0ZXN0LXdhbGxldC1pZCcsXG4gICAgICAgICAga2V5czogWyd1c2VyLWtleS1pZCcsICdiYWNrdXAta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzogeyB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICAgIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZCB9KTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChzaWduYXR1cmUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0IGhhcyBmZXdlciB0aGFuIDIga2V5cyBhbmQgbm8gcGFzc3BocmFzZSBhbmQgcHJ2IGFyZSBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja1dhbGxldC50b0pTT04ub25DYWxsKG1vY2tXYWxsZXQudG9KU09OLmNhbGxDb3VudCkucmV0dXJucyh7XG4gICAgICAgICAgaWQ6ICd0ZXN0LXdhbGxldC1pZCcsXG4gICAgICAgICAga2V5czogWyd1c2VyLWtleS1pZCddLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRyYWRpbmdBY2NvdW50XG4gICAgICAgICAgLnNpZ25QYXlsb2FkKHsgcGF5bG9hZCB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgJ1dhbGxldCBkb2VzIG5vdCBzdXBwb3J0IEJpdEdvIHNpZ25pbmcuIFBsZWFzZSByZWFjaCBvdXQgdG8gc3VwcG9ydEBiaXRnby5jb20gdG8gcmVzb2x2ZSB0aGlzIGlzc3VlLidcbiAgICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCB3YWxsZXRQYXNzcGhyYXNlIChsb2NhbCB1c2VyIGtleSBzaWduaW5nKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgZGVjcnlwdCB0aGUgdXNlciBrZXkgYW5kIHNpZ24gdGhlIHBheWxvYWQgbG9jYWxseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMoKS5nZXQuY2FsbGVkV2l0aCh7IGlkOiAndXNlci1rZXktaWQnIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIG1vY2tCaXRHby5kZWNyeXB0QXN5bmMuY2FsbGVkV2l0aCh7IGlucHV0OiBlbmNyeXB0ZWRQcnYsIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIG1vY2tCYXNlQ29pbi5zaWduTWVzc2FnZS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoQnVmZmVyLmZyb20oc2lnbmF0dXJlLCAnaGV4JykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN0cmluZ2lmeSBhIFJlY29yZCBwYXlsb2FkIGJlZm9yZSBzaWduaW5nIGxvY2FsbHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZCwgd2FsbGV0UGFzc3BocmFzZSB9KTtcblxuICAgICAgICBjb25zdCBzaWduTWVzc2FnZUNhbGwgPSBtb2NrQmFzZUNvaW4uc2lnbk1lc3NhZ2UuZ2V0Q2FsbCgwKTtcbiAgICAgICAgc2lnbk1lc3NhZ2VDYWxsLmFyZ3NbMV0uc2hvdWxkLmVxdWFsKEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBhc3MgYSBzdHJpbmcgcGF5bG9hZCBkaXJlY3RseSB0byBzaWduTWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkOiBwYXlsb2FkU3RyaW5nLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlQ2FsbCA9IG1vY2tCYXNlQ29pbi5zaWduTWVzc2FnZS5nZXRDYWxsKDApO1xuICAgICAgICBzaWduTWVzc2FnZUNhbGwuYXJnc1sxXS5zaG91bGQuZXF1YWwocGF5bG9hZFN0cmluZyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIGJvdGggd2FsbGV0UGFzc3BocmFzZSBhbmQgcHJ2JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCB1c2UgcHJ2IGRpcmVjdGx5IGFuZCBub3QgY2FsbCBkZWNyeXB0IHdoZW4gYm90aCBhcmUgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZCwgd2FsbGV0UGFzc3BocmFzZSwgcHJ2OiBkZWNyeXB0ZWRQcnYgfSk7XG5cbiAgICAgICAgbW9ja0JpdEdvLmRlY3J5cHRBc3luYy5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICBjb25zdCBzaWduTWVzc2FnZUNhbGwgPSBtb2NrQmFzZUNvaW4uc2lnbk1lc3NhZ2UuZ2V0Q2FsbCgwKTtcbiAgICAgICAgc2lnbk1lc3NhZ2VDYWxsLmFyZ3NbMF0uc2hvdWxkLmRlZXBFcXVhbCh7IHBydjogZGVjcnlwdGVkUHJ2IH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBwcnYgKGxvY2FsIHVzZXIga2V5IHNpZ25pbmcgd2l0aG91dCBkZWNyeXB0aW9uKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgc2lnbiB1c2luZyB0aGUgcHJvdmlkZWQgcHJ2IHdpdGhvdXQgY2FsbGluZyBkZWNyeXB0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFkaW5nQWNjb3VudC5zaWduUGF5bG9hZCh7IHBheWxvYWQsIHBydjogZGVjcnlwdGVkUHJ2IH0pO1xuXG4gICAgICAgIG1vY2tCaXRHby5kZWNyeXB0QXN5bmMuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICBtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgbW9ja0Jhc2VDb2luLnNpZ25NZXNzYWdlLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKS50b1N0cmluZygnaGV4JykpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IHVzZSBCaXRHbyByZW1vdGUgc2lnbmluZyB3aGVuIHBydiBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkLCBwcnY6IGRlY3J5cHRlZFBydiB9KTtcblxuICAgICAgICBtb2NrQml0R28ucG9zdC5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXNzIHRoZSBwcnYgZGlyZWN0bHkgdG8gc2lnbk1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZCwgcHJ2OiBkZWNyeXB0ZWRQcnYgfSk7XG5cbiAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VDYWxsID0gbW9ja0Jhc2VDb2luLnNpZ25NZXNzYWdlLmdldENhbGwoMCk7XG4gICAgICAgIHNpZ25NZXNzYWdlQ2FsbC5hcmdzWzBdLnNob3VsZC5kZWVwRXF1YWwoeyBwcnY6IGRlY3J5cHRlZFBydiB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN0cmluZ2lmeSBhIFJlY29yZCBwYXlsb2FkIGJlZm9yZSBzaWduaW5nIHdpdGggcHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0cmFkaW5nQWNjb3VudC5zaWduUGF5bG9hZCh7IHBheWxvYWQsIHBydjogZGVjcnlwdGVkUHJ2IH0pO1xuXG4gICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlQ2FsbCA9IG1vY2tCYXNlQ29pbi5zaWduTWVzc2FnZS5nZXRDYWxsKDApO1xuICAgICAgICBzaWduTWVzc2FnZUNhbGwuYXJnc1sxXS5zaG91bGQuZXF1YWwoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFzcyBhIHN0cmluZyBwYXlsb2FkIGRpcmVjdGx5IHRvIHNpZ25NZXNzYWdlIHdoZW4gc2lnbmluZyB3aXRoIHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkOiBwYXlsb2FkU3RyaW5nLCBwcnY6IGRlY3J5cHRlZFBydiB9KTtcblxuICAgICAgICBjb25zdCBzaWduTWVzc2FnZUNhbGwgPSBtb2NrQmFzZUNvaW4uc2lnbk1lc3NhZ2UuZ2V0Q2FsbCgwKTtcbiAgICAgICAgc2lnbk1lc3NhZ2VDYWxsLmFyZ3NbMV0uc2hvdWxkLmVxdWFsKHBheWxvYWRTdHJpbmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhZGluZ0FjY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdHJhZGluZy90cmFkaW5nQWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztHQUVHO0FBQ0gsa0RBQTBCO0FBQzFCLGtCQUFnQjtBQUNoQixpRkFBOEU7QUFFOUUsUUFBUSxDQUFDLGdCQUFnQixFQUFFO0lBQ3pCLElBQUksY0FBOEIsQ0FBQztJQUNuQyxJQUFJLDZCQUE2QyxDQUFDO0lBQ2xELElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksVUFBZSxDQUFDO0lBQ3BCLElBQUkseUJBQThCLENBQUM7SUFDbkMsSUFBSSxZQUFpQixDQUFDO0lBQ3RCLElBQUksUUFBeUIsQ0FBQztJQUU5QixNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQztJQUMxQyxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO0lBQzNDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztJQUNyQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFOUMsVUFBVSxDQUFDO1FBQ1QsUUFBUSxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4RyxTQUFTLEdBQUc7WUFDVixJQUFJLEVBQUUsZUFB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Q0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFkaW5nQWNjb3VudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby90cmFkaW5nL3RyYWRpbmdBY2NvdW50JztcblxuZGVzY3JpYmUoJ1RyYWRpbmdBY2NvdW50JywgZnVuY3Rpb24gKCkge1xuICBsZXQgdHJhZGluZ0FjY291bnQ6IFRyYWRpbmdBY2NvdW50O1xuICBsZXQgdXNlcktleVJlcXVpcmVkVHJhZGluZ0FjY291bnQ6IFRyYWRpbmdBY2NvdW50O1xuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrV2FsbGV0OiBhbnk7XG4gIGxldCBtb2NrVXNlcktleVJlcXVpcmVkV2FsbGV0OiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcbiAgbGV0IHNlbmRTdHViOiBzaW5vbi5TaW5vblN0dWI7XG5cbiAgY29uc3QgZW50ZXJwcmlzZUlkID0gJ3Rlc3QtZW50ZXJwcmlzZS1pZCc7XG4gIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAndGVzdC1wYXNzcGhyYXNlJztcbiAgY29uc3QgZW5jcnlwdGVkUHJ2ID0gJ2VuY3J5cHRlZC1wcnYnO1xuICBjb25zdCBkZWNyeXB0ZWRQcnYgPSAnZGVjcnlwdGVkLXBydic7XG4gIGNvbnN0IHNpZ25hdHVyZSA9ICdhYWJiY2NkZCc7XG4gIGNvbnN0IHBheWxvYWQgPSB7IGRhdGE6ICd0ZXN0LXBheWxvYWQnIH07XG4gIGNvbnN0IHBheWxvYWRTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzZW5kU3R1YiA9IHNpbm9uLnN0dWIoKTtcbiAgICBzZW5kU3R1Yi53aXRoQXJncyh7IHBheWxvYWQ6IHBheWxvYWRTdHJpbmcgfSkucmV0dXJucyh7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2lnbmF0dXJlIH0pIH0pO1xuXG4gICAgbW9ja0JpdEdvID0ge1xuICAgICAgcG9zdDogc2lub24uc3R1YigpLnJldHVybnMoeyBzZW5kOiBzZW5kU3R1YiB9KSxcbiAgICAgIGNvaW46IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKGNvaW46IHN0cmluZykgPT4gKHtcbiAgICAgICAgdXJsOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCh1cmw6IHN0cmluZykgPT4gYGh0dHBzOi8vYXBwLmJpdGdvLXN0YWdpbmcuY29tL2FwaS92Mi8ke2NvaW59JHt1cmx9YCksXG4gICAgICB9KSksXG4gICAgICBkZWNyeXB0OiBzaW5vblxuICAgICAgICAuc3R1YigpXG4gICAgICAgIC5jYWxsc0Zha2UoYXN5bmMgKHsgaW5wdXQsIHBhc3N3b3JkIH0pID0+XG4gICAgICAgICAgaW5wdXQgPT09IGVuY3J5cHRlZFBydiAmJiBwYXNzd29yZCA9PT0gd2FsbGV0UGFzc3BocmFzZSA/IGRlY3J5cHRlZFBydiA6IHVuZGVmaW5lZFxuICAgICAgICApLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBlbmNyeXB0ZWRQcnYgfSksXG4gICAgICB9KSxcbiAgICAgIHNpZ25NZXNzYWdlOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChrZXk6IHsgcHJ2OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBpZiAoa2V5LnBydiA9PT0gZGVjcnlwdGVkUHJ2KSB7XG4gICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2lnbk1lc3NhZ2UgY2FsbGVkIHdpdGggdW5leHBlY3RlZCBwcnY6ICR7a2V5LnBydn1gKTtcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBtb2NrV2FsbGV0ID0ge1xuICAgICAgaWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0LXdhbGxldC1pZCcpLFxuICAgICAga2V5SWRzOiBzaW5vbi5zdHViKCkucmV0dXJucyhbJ3VzZXIta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddKSxcbiAgICAgIHRvSlNPTjogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICBpZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICAgICAga2V5czogWyd1c2VyLWtleS1pZCcsICdiYWNrdXAta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgYmFzZUNvaW46IG1vY2tCYXNlQ29pbixcbiAgICAgIGJpdGdvOiBtb2NrQml0R28sXG4gICAgfTtcblxuICAgIG1vY2tVc2VyS2V5UmVxdWlyZWRXYWxsZXQgPSB7XG4gICAgICAuLi5tb2NrV2FsbGV0LFxuICAgICAgdG9KU09OOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgIGlkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgICAgICBrZXlzOiBbJ3VzZXIta2V5LWlkJywgJ2JhY2t1cC1rZXktaWQnLCAnYml0Z28ta2V5LWlkJ10sXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgdHJhZGluZ0FjY291bnQgPSBuZXcgVHJhZGluZ0FjY291bnQoZW50ZXJwcmlzZUlkLCBtb2NrV2FsbGV0LCBtb2NrQml0R28pO1xuICAgIHVzZXJLZXlSZXF1aXJlZFRyYWRpbmdBY2NvdW50ID0gbmV3IFRyYWRpbmdBY2NvdW50KGVudGVycHJpc2VJZCwgbW9ja1VzZXJLZXlSZXF1aXJlZFdhbGxldCwgbW9ja0JpdEdvKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgd2FsbGV0IGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgdHJhZGluZ0FjY291bnQuaWQuc2hvdWxkLmVxdWFsKCd0ZXN0LXdhbGxldC1pZCcpO1xuICAgICAgbW9ja1dhbGxldC5pZC5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduUGF5bG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNhbGwgdGhlIHJpZ2h0IHVybCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkVXJsID0gYGh0dHBzOi8vYXBwLmJpdGdvLXN0YWdpbmcuY29tL2FwaS92Mi9vZmMvd2FsbGV0L3Rlc3Qtd2FsbGV0LWlkL3R4L3NpZ25gO1xuICAgICAgYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkIH0pO1xuICAgICAgbW9ja0JpdEdvLnBvc3QuY2FsbGVkV2l0aChleHBlY3RlZFVybCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRob3V0IHdhbGxldFBhc3NwaHJhc2Ugb3IgcHJ2IChCaXRHbyByZW1vdGUgc2lnbmluZyknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHNpZ24gdXNpbmcgdGhlIEJpdEdvIGtleSByZW1vdGVseSB3aGVuIG5vIHBhc3NwaHJhc2UgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZCB9KTtcblxuICAgICAgICBtb2NrQml0R28ucG9zdC5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHNlbmRTdHViLmNhbGxlZFdpdGgoeyBwYXlsb2FkOiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHNpZ25hdHVyZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzaWduIGEgc3RyaW5nIHBheWxvYWQgcmVtb3RlbHkgd2hlbiBubyBwYXNzcGhyYXNlIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFkaW5nQWNjb3VudC5zaWduUGF5bG9hZCh7IHBheWxvYWQ6IHBheWxvYWRTdHJpbmcgfSk7XG4gICAgICAgIHNlbmRTdHViLmNhbGxlZFdpdGgoeyBwYXlsb2FkOiBwYXlsb2FkU3RyaW5nIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoc2lnbmF0dXJlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGlmIGNvaW5TcGVjaWZpYy51c2VyS2V5U2lnbmluZ1JlcXVpcmVkIGlzIHRydWUgYW5kIG5vIHBhc3NwaHJhc2UgYW5kIHBydiBhcmUgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHVzZXJLZXlSZXF1aXJlZFRyYWRpbmdBY2NvdW50XG4gICAgICAgICAgLnNpZ25QYXlsb2FkKHsgcGF5bG9hZCB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgJ1dhbGxldCBtdXN0IHVzZSB1c2VyIGtleSB0byBzaWduIG9mYyB0cmFuc2FjdGlvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIHdhbGxldCBwYXNzcGhyYXNlLCB0aGUgcHJpdmF0ZSBrZXksIG9yIHZpc2l0IHlvdXIgd2FsbGV0IHNldHRpbmdzIHBhZ2UgdG8gY29uZmlndXJlIG9uZS4nXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhbGwgYmFjayB0byB0b3AtbGV2ZWwgdXNlcktleVNpZ25pbmdSZXF1aXJlZCB3aGVuIGNvaW5TcGVjaWZpYyBkb2VzIG5vdCBjYXJyeSBpdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdXNlcktleVJlcXVpcmVkVHJhZGluZ0FjY291bnRcbiAgICAgICAgICAuc2lnblBheWxvYWQoeyBwYXlsb2FkIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgICAnV2FsbGV0IG11c3QgdXNlIHVzZXIga2V5IHRvIHNpZ24gb2ZjIHRyYW5zYWN0aW9uLCBwbGVhc2UgcHJvdmlkZSB0aGUgd2FsbGV0IHBhc3NwaHJhc2UsIHRoZSBwcml2YXRlIGtleSwgb3IgdmlzaXQgeW91ciB3YWxsZXQgc2V0dGluZ3MgcGFnZSB0byBjb25maWd1cmUgb25lLidcbiAgICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcHJlZmVyIGNvaW5TcGVjaWZpYy51c2VyS2V5U2lnbmluZ1JlcXVpcmVkIG92ZXIgdG9wLWxldmVsIHdoZW4gYm90aCBhcmUgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja1dhbGxldC50b0pTT04ub25DYWxsKG1vY2tXYWxsZXQudG9KU09OLmNhbGxDb3VudCkucmV0dXJucyh7XG4gICAgICAgICAgaWQ6ICd0ZXN0LXdhbGxldC1pZCcsXG4gICAgICAgICAga2V5czogWyd1c2VyLWtleS1pZCcsICdiYWNrdXAta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzogeyB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICAgIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZCB9KTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChzaWduYXR1cmUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgd2FsbGV0IGhhcyBmZXdlciB0aGFuIDIga2V5cyBhbmQgbm8gcGFzc3BocmFzZSBhbmQgcHJ2IGFyZSBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja1dhbGxldC50b0pTT04ub25DYWxsKG1vY2tXYWxsZXQudG9KU09OLmNhbGxDb3VudCkucmV0dXJucyh7XG4gICAgICAgICAgaWQ6ICd0ZXN0LXdhbGxldC1pZCcsXG4gICAgICAgICAga2V5czogWyd1c2VyLWtleS1pZCddLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRyYWRpbmdBY2NvdW50XG4gICAgICAgICAgLnNpZ25QYXlsb2FkKHsgcGF5bG9hZCB9KVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICAgJ1dhbGxldCBkb2VzIG5vdCBzdXBwb3J0IEJpdEdvIHNpZ25pbmcuIFBsZWFzZSByZWFjaCBvdXQgdG8gc3VwcG9ydEBiaXRnby5jb20gdG8gcmVzb2x2ZSB0aGlzIGlzc3VlLidcbiAgICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCB3YWxsZXRQYXNzcGhyYXNlIChsb2NhbCB1c2VyIGtleSBzaWduaW5nKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgZGVjcnlwdCB0aGUgdXNlciBrZXkgYW5kIHNpZ24gdGhlIHBheWxvYWQgbG9jYWxseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMoKS5nZXQuY2FsbGVkV2l0aCh7IGlkOiAndXNlci1rZXktaWQnIH0pLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIG1vY2tCaXRHby5kZWNyeXB0LmNhbGxlZFdpdGgoeyBpbnB1dDogZW5jcnlwdGVkUHJ2LCBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBtb2NrQmFzZUNvaW4uc2lnbk1lc3NhZ2UuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdHJpbmdpZnkgYSBSZWNvcmQgcGF5bG9hZCBiZWZvcmUgc2lnbmluZyBsb2NhbGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0cmFkaW5nQWNjb3VudC5zaWduUGF5bG9hZCh7IHBheWxvYWQsIHdhbGxldFBhc3NwaHJhc2UgfSk7XG5cbiAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VDYWxsID0gbW9ja0Jhc2VDb2luLnNpZ25NZXNzYWdlLmdldENhbGwoMCk7XG4gICAgICAgIHNpZ25NZXNzYWdlQ2FsbC5hcmdzWzFdLnNob3VsZC5lcXVhbChKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXNzIGEgc3RyaW5nIHBheWxvYWQgZGlyZWN0bHkgdG8gc2lnbk1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZDogcGF5bG9hZFN0cmluZywgd2FsbGV0UGFzc3BocmFzZSB9KTtcblxuICAgICAgICBjb25zdCBzaWduTWVzc2FnZUNhbGwgPSBtb2NrQmFzZUNvaW4uc2lnbk1lc3NhZ2UuZ2V0Q2FsbCgwKTtcbiAgICAgICAgc2lnbk1lc3NhZ2VDYWxsLmFyZ3NbMV0uc2hvdWxkLmVxdWFsKHBheWxvYWRTdHJpbmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBib3RoIHdhbGxldFBhc3NwaHJhc2UgYW5kIHBydicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdXNlIHBydiBkaXJlY3RseSBhbmQgbm90IGNhbGwgZGVjcnlwdCB3aGVuIGJvdGggYXJlIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0cmFkaW5nQWNjb3VudC5zaWduUGF5bG9hZCh7IHBheWxvYWQsIHdhbGxldFBhc3NwaHJhc2UsIHBydjogZGVjcnlwdGVkUHJ2IH0pO1xuXG4gICAgICAgIG1vY2tCaXRHby5kZWNyeXB0LmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgbW9ja0Jhc2VDb2luLmtleWNoYWlucy5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlQ2FsbCA9IG1vY2tCYXNlQ29pbi5zaWduTWVzc2FnZS5nZXRDYWxsKDApO1xuICAgICAgICBzaWduTWVzc2FnZUNhbGwuYXJnc1swXS5zaG91bGQuZGVlcEVxdWFsKHsgcHJ2OiBkZWNyeXB0ZWRQcnYgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIHBydiAobG9jYWwgdXNlciBrZXkgc2lnbmluZyB3aXRob3V0IGRlY3J5cHRpb24pJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBzaWduIHVzaW5nIHRoZSBwcm92aWRlZCBwcnYgd2l0aG91dCBjYWxsaW5nIGRlY3J5cHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZCwgcHJ2OiBkZWNyeXB0ZWRQcnYgfSk7XG5cbiAgICAgICAgbW9ja0JpdEdvLmRlY3J5cHQuY2FsbGVkLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgICBtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zLmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgbW9ja0Jhc2VDb2luLnNpZ25NZXNzYWdlLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbChCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKS50b1N0cmluZygnaGV4JykpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IHVzZSBCaXRHbyByZW1vdGUgc2lnbmluZyB3aGVuIHBydiBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkLCBwcnY6IGRlY3J5cHRlZFBydiB9KTtcblxuICAgICAgICBtb2NrQml0R28ucG9zdC5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXNzIHRoZSBwcnYgZGlyZWN0bHkgdG8gc2lnbk1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IHRyYWRpbmdBY2NvdW50LnNpZ25QYXlsb2FkKHsgcGF5bG9hZCwgcHJ2OiBkZWNyeXB0ZWRQcnYgfSk7XG5cbiAgICAgICAgY29uc3Qgc2lnbk1lc3NhZ2VDYWxsID0gbW9ja0Jhc2VDb2luLnNpZ25NZXNzYWdlLmdldENhbGwoMCk7XG4gICAgICAgIHNpZ25NZXNzYWdlQ2FsbC5hcmdzWzBdLnNob3VsZC5kZWVwRXF1YWwoeyBwcnY6IGRlY3J5cHRlZFBydiB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN0cmluZ2lmeSBhIFJlY29yZCBwYXlsb2FkIGJlZm9yZSBzaWduaW5nIHdpdGggcHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCB0cmFkaW5nQWNjb3VudC5zaWduUGF5bG9hZCh7IHBheWxvYWQsIHBydjogZGVjcnlwdGVkUHJ2IH0pO1xuXG4gICAgICAgIGNvbnN0IHNpZ25NZXNzYWdlQ2FsbCA9IG1vY2tCYXNlQ29pbi5zaWduTWVzc2FnZS5nZXRDYWxsKDApO1xuICAgICAgICBzaWduTWVzc2FnZUNhbGwuYXJnc1sxXS5zaG91bGQuZXF1YWwoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFzcyBhIHN0cmluZyBwYXlsb2FkIGRpcmVjdGx5IHRvIHNpZ25NZXNzYWdlIHdoZW4gc2lnbmluZyB3aXRoIHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgdHJhZGluZ0FjY291bnQuc2lnblBheWxvYWQoeyBwYXlsb2FkOiBwYXlsb2FkU3RyaW5nLCBwcnY6IGRlY3J5cHRlZFBydiB9KTtcblxuICAgICAgICBjb25zdCBzaWduTWVzc2FnZUNhbGwgPSBtb2NrQmFzZUNvaW4uc2lnbk1lc3NhZ2UuZ2V0Q2FsbCgwKTtcbiAgICAgICAgc2lnbk1lc3NhZ2VDYWxsLmFyZ3NbMV0uc2hvdWxkLmVxdWFsKHBheWxvYWRTdHJpbmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=