@bitgo/sdk-core 37.6.0 → 37.7.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 (62) hide show
  1. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +14 -1
  2. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  3. package/dist/src/bitgo/baseCoin/baseCoin.js +16 -1
  4. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +57 -0
  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/defi/defiVault.d.ts +2 -1
  8. package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
  9. package/dist/src/bitgo/defi/defiVault.js +13 -10
  10. package/dist/src/bitgo/keychain/iKeychains.d.ts +2 -0
  11. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  12. package/dist/src/bitgo/keychain/iKeychains.js +1 -1
  13. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  14. package/dist/src/bitgo/utils/mpcUtils.js +8 -3
  15. package/dist/src/bitgo/utils/tss/addressVerification.d.ts +25 -0
  16. package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -1
  17. package/dist/src/bitgo/utils/tss/addressVerification.js +31 -13
  18. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +2 -2
  19. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  20. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +19 -17
  21. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +8 -1
  22. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
  23. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +39 -47
  24. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +1 -1
  25. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  26. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +15 -13
  27. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +16 -1
  28. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  29. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +65 -16
  30. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +5 -0
  31. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
  32. package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
  33. package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
  34. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  35. package/dist/src/bitgo/utils/tss/index.js +2 -1
  36. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts +23 -0
  37. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  38. package/dist/src/bitgo/utils/tss/preHashedSignable.js +26 -0
  39. package/dist/src/bitgo/wallet/iWallets.d.ts +23 -1
  40. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  41. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  42. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  43. package/dist/src/bitgo/wallet/wallet.js +46 -3
  44. package/dist/src/bitgo/wallet/wallets.d.ts +10 -1
  45. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  46. package/dist/src/bitgo/wallet/wallets.js +161 -12
  47. package/dist/test/unit/bitgo/defi/defiVault.js +3 -12
  48. package/dist/test/unit/bitgo/utils/tss/addressVerification.js +45 -1
  49. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +4 -1
  50. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +60 -1
  51. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts +2 -0
  52. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  53. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.js +55 -0
  54. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts +2 -0
  55. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts.map +1 -0
  56. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.js +141 -0
  57. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts +2 -0
  58. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts.map +1 -0
  59. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +320 -0
  60. package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +16 -12
  61. package/dist/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsa.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsa.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAuC,UAAU,EAAoC,MAAM,oBAAoB,CAAC;AAIvH,OAAO,EAAsB,QAAQ,EAAW,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAErG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,yBAAyB,EAEzB,qBAAqB,EACrB,QAAQ,EACT,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,8BAA8B,EAC9B,oCAAoC,EACpC,mCAAmC,EACnC,8BAA8B,EAC9B,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,0BAA0B,EAE1B,6BAA6B,EAE7B,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAiB,MAAM,EAAkB,MAAM,0BAA0B,CAAC;AAElH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAK/C,OAAO,EAEL,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIpE,kBAAkB;AAClB,qBAAa,UAAW,SAAQ,cAAc;IACtC,+BAA+B,CACnC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,QAAQ,EACtB,aAAa,EAAE,QAAQ,EACvB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,4BAA4B,EAAE,GAAG,GAChC,OAAO,CAAC,uBAAuB,CAAC;IA0CnC,kBAAkB;IACZ,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,8BAA8B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACpD,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;KACvC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwDvB,qBAAqB,IAAI,OAAO,CAAC,cAAc,CAAC;IAUtD,kBAAkB,CAAC,EACjB,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,8BAA8B,EAC9B,YAAY,EACZ,iBAAiB,EACjB,UAAU,GACX,EAAE,yBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAqB1C,oBAAoB,CAAC,EACzB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,EAAE,yBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkBhD,kBAAkB;IACZ,mBAAmB,CAAC,EACxB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,iBAAiB,GAClB,EAAE,8BAA8B,GAAG,OAAO,CAAC,QAAQ,CAAC;IA2CrD;;;;;;;;OAQG;IACG,wBAAwB,CAC5B,WAAW,EAAE,cAAc,EAC3B,cAAc,EAAE,MAAM,EACtB,uBAAuB,EAAE,MAAM,EAC/B,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,eAAe,CAAC;IAW3B,kBAAkB;IACZ,yBAAyB,CAC7B,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAC7C,qBAAqB,EAAE,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,EACxD,iBAAiB,EAAE,GAAG,EACtB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,QAAQ,EACtB,cAAc,EAAE,QAAQ,EACxB,aAAa,EAAE,QAAQ,EACvB,UAAU,EAAE,MAAM,EAClB,8BAA8B,CAAC,EAAE,MAAM,EACvC,YAAY,CAAC,EAAE,yBAAyB,EACxC,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC;YAsHN,kCAAkC;YAiFlC,kCAAkC;IAmChD,+BAA+B,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,mBAAmB,EAAE,MAAM,CAAA;KAAE;IAMnF,mBAAmB,CAAC,MAAM,EAAE;QAChC,SAAS,EAAE,SAAS,GAAG,mBAAmB,CAAC;QAC3C,UAAU,EAAE;YACV,mBAAmB,EAAE,UAAU,CAAC,yBAAyB,CAAC;YAC1D,cAAc,EAAE,0BAA0B,CAAC;SAC5C,CAAC;QACF,WAAW,EAAE,WAAW,CAAC;QACzB,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;KACvC,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA2BjC,yBAAyB,CAAC,MAAM,EAAE;QACtC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QACtD,cAAc,EAAE,0BAA0B,CAAC;QAC3C,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;KACvC,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAcjC,mBAAmB,CAAC,MAAM,EAAE;QAChC,SAAS,EAAE,SAAS,GAAG,mBAAmB,CAAC;QAC3C,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,WAAW,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCb,+BAA+B,CACnC,MAAM,EAAE,SAAS,GAAG,mBAAmB,EACvC,WAAW,EAAE,WAAW,EACxB,mCAAmC,EAAE,mCAAmC,EACxE,6BAA6B,EAAE,8BAA8B,EAC7D,mCAAmC,EAAE,oCAAoC,EACzE,6BAA6B,EAAE,8BAA8B,GAC5D,OAAO,CAAC,SAAS,CAAC;IAwFrB;;;;;;OAMG;YACW,eAAe;IAyJ7B;;;;;;;;OAQG;IACG,aAAa,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,SAAS,CAAC;IAK9E;;;;;;OAMG;IACG,uBAAuB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,SAAS,CAAC;IAOrF;;;;;;;;OAQG;IACG,yBAAyB,CAC7B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,EACxB,qBAAqB,EAAE,MAAM,EAC7B,KAAK,SAAI,EACT,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC;QACT,mBAAmB,EAAE,UAAU,CAAC,yBAAyB,CAAC;QAC1D,cAAc,EAAE,0BAA0B,CAAC;KAC5C,CAAC;IA0EF;;;;;;;OAOG;IACG,sBAAsB,CAC1B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,QAAQ,EACvB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,CAAC,GAAG,CAAC,GACnB,OAAO,CAAC,IAAI,CAAC;IA0ChB;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM;IAK9G;;;OAGG;IACH,MAAM,CAAC,6BAA6B,CAAC,SAAS,EAAE,UAAU,CAAC,gBAAgB,GAAG,MAAM;IAIpF;;;OAGG;WACU,qBAAqB,CAAC,eAAe,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB5F;;;OAGG;WACU,oBAAoB,CAAC,cAAc,EAAE,UAAU,CAAC,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB1G;;;OAGG;WACU,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmBjF;;;;;OAKG;WACU,+BAA+B,CAC1C,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,oBAAoB,CAAC;IAWhC;;;;;;OAMG;WACU,mBAAmB,CAC9B,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,yBAAyB,CAAC,EAAE,qBAAqB,GAChD,OAAO,CAAC,oBAAoB,CAAC;IAyBhC;;;;;;;;;;OAUG;WACU,+BAA+B,CAC1C,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,gCAAgC,EAAE,MAAM,EACxC,iCAAiC,EAAE,MAAM,EACzC,YAAY,EAAE,UAAU,EACxB,SAAS,CAAC,EAAE,UAAU,CAAC,4BAA4B,GAClD,OAAO,CAAC,IAAI,CAAC;IAwBhB;;;;;;;;;OASG;WACU,4BAA4B,CACvC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,UAAU,CAAC,gBAAgB,GAAG,UAAU,CAAC,0BAA0B,EACjF,qBAAqB,EAAE,MAAM,EAC7B,0BAA0B,EAAE,MAAM,EAClC,4BAA4B,EAAE,MAAM,GACnC,OAAO,CAAC,IAAI,CAAC;CA6BjB"}
@@ -123,6 +123,7 @@ class EcdsaUtils extends base_1.BaseEcdsaUtils {
123
123
  originalPasscodeEncryptionCode: params.originalPasscodeEncryptionCode,
124
124
  webauthnInfo: params.webauthnInfo,
125
125
  encryptionVersion: params.encryptionVersion,
126
+ enterprise: params.enterprise,
126
127
  });
127
128
  const backupKeychainPromise = this.createBackupKeychain({
128
129
  userGpgKey,
@@ -150,12 +151,12 @@ class EcdsaUtils extends base_1.BaseEcdsaUtils {
150
151
  };
151
152
  return backupKeyShare;
152
153
  }
153
- createUserKeychain({ userGpgKey, backupGpgKey, bitgoPublicGpgKey, userKeyShare, backupKeyShare, bitgoKeychain, passphrase, originalPasscodeEncryptionCode, webauthnInfo, encryptionVersion, }) {
154
+ createUserKeychain({ userGpgKey, backupGpgKey, bitgoPublicGpgKey, userKeyShare, backupKeyShare, bitgoKeychain, passphrase, originalPasscodeEncryptionCode, webauthnInfo, encryptionVersion, enterprise, }) {
154
155
  if (!passphrase) {
155
156
  throw new Error('Please provide a wallet passphrase');
156
157
  }
157
158
  (0, assert_1.default)(backupKeyShare.userHeldKeyShare);
158
- return this.createParticipantKeychain(userGpgKey, backupGpgKey, bitgoPublicGpgKey, 1, userKeyShare, backupKeyShare.userHeldKeyShare, bitgoKeychain, passphrase, originalPasscodeEncryptionCode, webauthnInfo, encryptionVersion);
159
+ return this.createParticipantKeychain(userGpgKey, backupGpgKey, bitgoPublicGpgKey, 1, userKeyShare, backupKeyShare.userHeldKeyShare, bitgoKeychain, passphrase, originalPasscodeEncryptionCode, webauthnInfo, encryptionVersion, enterprise);
159
160
  }
160
161
  async createBackupKeychain({ userGpgKey, userKeyShare, backupGpgKey, backupKeyShare, bitgoKeychain, bitgoPublicGpgKey, passphrase, encryptionVersion, }) {
161
162
  (0, assert_1.default)(backupKeyShare.userHeldKeyShare);
@@ -212,7 +213,7 @@ class EcdsaUtils extends base_1.BaseEcdsaUtils {
212
213
  return backupToRecipientShare;
213
214
  }
214
215
  /** @inheritdoc */
215
- async createParticipantKeychain(userGpgKey, userLocalBackupGpgKey, bitgoPublicGpgKey, recipientIndex, userKeyShare, backupKeyShare, bitgoKeychain, passphrase, originalPasscodeEncryptionCode, webauthnInfo, encryptionVersion) {
216
+ async createParticipantKeychain(userGpgKey, userLocalBackupGpgKey, bitgoPublicGpgKey, recipientIndex, userKeyShare, backupKeyShare, bitgoKeychain, passphrase, originalPasscodeEncryptionCode, webauthnInfo, encryptionVersion, enterprise) {
216
217
  const bitgoKeyShares = bitgoKeychain.keyShares;
217
218
  if (!bitgoKeyShares) {
218
219
  throw new Error('Missing BitGo key shares');
@@ -285,20 +286,21 @@ class EcdsaUtils extends base_1.BaseEcdsaUtils {
285
286
  encryptionVersion,
286
287
  }),
287
288
  originalPasscodeEncryptionCode,
288
- webauthnDevices: webauthnInfo && recipientIndex === types_2.ShareKeyPosition.USER
289
- ? [
290
- {
291
- otpDeviceId: webauthnInfo.otpDeviceId,
292
- prfSalt: webauthnInfo.prfSalt,
293
- encryptedPrv: await this.bitgo.encryptAsync({
294
- input: prv,
295
- password: webauthnInfo.passphrase,
296
- encryptionVersion,
297
- }),
298
- },
299
- ]
300
- : undefined,
301
289
  };
290
+ if (webauthnInfo && recipientIndex === types_2.ShareKeyPosition.USER) {
291
+ // Send the passkey as `webauthnInfo`; the deprecated `webauthnDevices` array is ignored by POST /key.
292
+ (0, assert_1.default)(enterprise, 'enterprise is required to attach a webauthn device to the user keychain');
293
+ recipientKeychainParams.webauthnInfo = {
294
+ otpDeviceId: webauthnInfo.otpDeviceId,
295
+ prfSalt: webauthnInfo.prfSalt,
296
+ encryptedPrv: await this.bitgo.encryptAsync({
297
+ input: prv,
298
+ password: webauthnInfo.passphrase,
299
+ encryptionVersion,
300
+ }),
301
+ enterpriseId: enterprise,
302
+ };
303
+ }
302
304
  const keychains = this.baseCoin.keychains();
303
305
  return recipientIndex === 1
304
306
  ? await keychains.add(recipientKeychainParams)
@@ -883,4 +885,4 @@ class EcdsaUtils extends base_1.BaseEcdsaUtils {
883
885
  }
884
886
  }
885
887
  exports.EcdsaUtils = EcdsaUtils;
886
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBZ0M7QUFDaEMsaURBQW1DO0FBR25DLG9EQUF1SDtBQUN2SCw4Q0FBd0M7QUFFeEMseURBQStEO0FBRS9ELCtEQUFvRTtBQVVwRSw0Q0Flc0I7QUFDdEIsc0NBQTRDO0FBQzVDLG9EQUFrSDtBQUNsSCxxREFBNkY7QUFFN0YsNENBQTBEO0FBQzFELG9EQUFpRTtBQUNqRSx3Q0FBbUY7QUFDbkYsZ0RBQTREO0FBQzVELDhDQUs0QjtBQUM1QixpQ0FBd0M7QUFHeEMsTUFBTSxhQUFhLEdBQUcsZUFBWSxDQUFDLGFBQWEsQ0FBQztBQUVqRCxrQkFBa0I7QUFDbEIsTUFBYSxVQUFXLFNBQVEscUJBQWM7SUFDNUMsS0FBSyxDQUFDLCtCQUErQixDQUNuQyxLQUFhLEVBQ2IsY0FBc0IsRUFDdEIsWUFBc0IsRUFDdEIsYUFBdUIsRUFDdkIsVUFBcUMsRUFDckMsNEJBQWlDO1FBRWpDLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxhQUFhLENBQ3BELFlBQVksRUFDWixDQUFDLEVBQ0QsNEJBQTRCLENBQUMsS0FBSyxFQUFFLEVBQ3BDLFVBQVUsQ0FDWCxDQUFDO1FBQ0YsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FDekQsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUNwRSxDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQUcsZUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxlQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENB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QVMsRUFBRTtvQkFDVCxjQUFjLEVBQUUsMEJBQTBCO2lCQUMzQzthQUNGO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLFNBQVMsRUFBRTtvQkFDVCxjQUFjLEVBQUUsNEJBQTRCO2lCQUM3QzthQUNGO1NBQ0YsQ0FBQztRQUNGLElBQUksYUFBYSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsTUFBTSxLQUFLO2FBQ1IsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxLQUFLLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDVixNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRjtBQTF2Q0QsZ0NBMHZDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgKiBhcyBvcGVucGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBFY2RzYVBhaWxsaWVyUHJvb2YsIEVjZHNhUmFuZ2VQcm9vZiwgRWNkc2FUeXBlcywgaGV4VG9CaWdJbnQsIG1pbk1vZHVsdXNCaXRMZW5ndGggfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgeyBFQ0RTQSwgRWNkc2EgfSBmcm9tICcuLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCB7IEFkZEtleWNoYWluT3B0aW9ucywgS2V5Y2hhaW4sIEtleVR5cGUsIFdlYmF1dGhuS2V5RW5jcnlwdGlvbkluZm8gfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbic7XG5pbXBvcnQgRUNEU0FNZXRob2RzLCB7IEVDRFNBTWV0aG9kVHlwZXMgfSBmcm9tICcuLi8uLi8uLi90c3MvZWNkc2EnO1xuaW1wb3J0IHsgS2V5Y2hhaW5zVHJpcGxldCB9IGZyb20gJy4uLy4uLy4uL2Jhc2VDb2luJztcbmltcG9ydCB7XG4gIEJpdEdvUHJvb2ZTaWduYXR1cmVzLFxuICBDcmVhdGVFY2RzYUJpdEdvS2V5Y2hhaW5QYXJhbXMsXG4gIENyZWF0ZUVjZHNhS2V5Y2hhaW5QYXJhbXMsXG4gIERlY3J5cHRhYmxlTlNoYXJlLFxuICBHZXRCaXRHb0NoYWxsZW5nZXNBcGksXG4gIEtleVNoYXJlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIEJhY2t1cEtleVNoYXJlLFxuICBCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZSxcbiAgQ3VzdG9tS1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21NdURlbHRhU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVBhaWxsaWVyTW9kdWx1c0dldHRlckZ1bmN0aW9uLFxuICBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIFJlcXVlc3RUeXBlLFxuICBUU1NQYXJhbXMsXG4gIFRTU1BhcmFtc0Zvck1lc3NhZ2UsXG4gIFRTU1BhcmFtc0Zvck1lc3NhZ2VXaXRoUHJ2LFxuICBUU1NQYXJhbXNXaXRoUHJ2LFxuICBUc3NTaWduVHhSZXF1ZXN0UGFyYW1zV2l0aFBydixcbiAgVHNzVHhSZWNpcGllbnRTb3VyY2UsXG4gIFR4UmVxdWVzdCxcbn0gZnJvbSAnLi4vYmFzZVR5cGVzJztcbmltcG9ydCB7IGdldFR4UmVxdWVzdCB9IGZyb20gJy4uLy4uLy4uL3Rzcyc7XG5pbXBvcnQgeyBBU2hhcmUsIERTaGFyZSwgRW5jcnlwdGVkTlNoYXJlLCBTZW5kU2hhcmVUeXBlLCBTU2hhcmUsIFdTaGFyZSwgT1NoYXJlIH0gZnJvbSAnLi4vLi4vLi4vdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVNoYXJlUHJvb2YsIGdlbmVyYXRlR1BHS2V5UGFpciwgZ2V0Qml0Z29HcGdQdWJLZXkgfSBmcm9tICcuLi8uLi9vcGVuZ3BnVXRpbHMnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IHZlcmlmeVdhbGxldFNpZ25hdHVyZSB9IGZyb20gJy4uLy4uLy4uL3Rzcy9lY2RzYS9lY2RzYSc7XG5pbXBvcnQgeyBzaWduTWVzc2FnZVdpdGhEZXJpdmVkRWNkaEtleSwgdmVyaWZ5RWNkaFNpZ25hdHVyZSB9IGZyb20gJy4uLy4uLy4uL2VjZGgnO1xuaW1wb3J0IHsgZ2V0VHhSZXF1ZXN0Q2hhbGxlbmdlIH0gZnJvbSAnLi4vLi4vLi4vdHNzL2NvbW1vbic7XG5pbXBvcnQge1xuICBTaGFyZUtleVBvc2l0aW9uLFxuICBUc3NFY2RzYVN0ZXAxUmV0dXJuTWVzc2FnZSxcbiAgVHNzRWNkc2FTdGVwMlJldHVybk1lc3NhZ2UsXG4gIFR4UmVxdWVzdENoYWxsZW5nZVJlc3BvbnNlLFxufSBmcm9tICcuLi8uLi8uLi90c3MvdHlwZXMnO1xuaW1wb3J0IHsgQmFzZUVjZHNhVXRpbHMgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgRW5jcnlwdGlvblZlcnNpb24sIElSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpJztcblxuY29uc3QgZW5jcnlwdE5TaGFyZSA9IEVDRFNBTWV0aG9kcy5lbmNyeXB0TlNoYXJlO1xuXG4vKiogQGluaGVyaXRkb2MgKi9cbmV4cG9ydCBjbGFzcyBFY2RzYVV0aWxzIGV4dGVuZHMgQmFzZUVjZHNhVXRpbHMge1xuICBhc3luYyBmaW5hbGl6ZUJpdGdvSGVsZEJhY2t1cEtleVNoYXJlKFxuICAgIGtleUlkOiBzdHJpbmcsXG4gICAgY29tbW9uS2V5Y2hhaW46IHN0cmluZyxcbiAgICB1c2VyS2V5U2hhcmU6IEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluLFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdGhpcmRQYXJ0eUJhY2t1cFB1YmxpY0dwZ0tleTogS2V5XG4gICk6IFByb21pc2U8Qml0Z29IZWxkQmFja3VwS2V5U2hhcmU+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyVG9CYWNrdXBTaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUoXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAyLFxuICAgICAgdGhpcmRQYXJ0eUJhY2t1cFB1YmxpY0dwZ0tleS5hcm1vcigpLFxuICAgICAgdXNlckdwZ0tleVxuICAgICk7XG4gICAgY29uc3QgYml0Z29Ub0JhY2t1cEtleVNoYXJlID0gYml0Z29LZXljaGFpbi5rZXlTaGFyZXM/LmZpbmQoXG4gICAgICAoa2V5U2hhcmUpID0+IGtleVNoYXJlLmZyb20gPT09ICdiaXRnbycgJiYga2V5U2hhcmUudG8gPT09ICdiYWNrdXAnXG4gICAgKTtcbiAgICBjb25zdCB1c2VyUHVibGljU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5uU2hhcmVzWzJdLnksICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5uU2hhcmVzWzJdLmNoYWluY29kZSwgJ2hleCcpLFxuICAgIF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cEtleVNoYXJlKTtcbiAgICBjb25zdCBrZXlSZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wdXQodGhpcy5iYXNlQ29pbi51cmwoYC9rcnMvYmFja3Vwa2V5cy8ke2tleUlkfWApKVxuICAgICAgLnNlbmQoe1xuICAgICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICAga2V5U2hhcmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJvbTogJ3VzZXInLFxuICAgICAgICAgICAgdG86ICdiYWNrdXAnLFxuICAgICAgICAgICAgcHVibGljU2hhcmU6IHVzZXJQdWJsaWNTaGFyZSxcbiAgICAgICAgICAgIHByaXZhdGVTaGFyZTogZW5jcnlwdGVkVXNlclRvQmFja3VwU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGVuY3J5cHRlZFVzZXJUb0JhY2t1cFNoYXJlLnByaXZhdGVTaGFyZVByb29mLFxuICAgICAgICAgICAgdnNzUHJvb2Y6IGVuY3J5cHRlZFVzZXJUb0JhY2t1cFNoYXJlLnZzc1Byb29mLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYml0Z29Ub0JhY2t1cEtleVNoYXJlLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBpZiAoIWtleVJlc3BvbnNlIHx8ICFrZXlSZXNwb25zZS5jb21tb25LZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgYmFja3VwIGtleSB2ZXJpZmljYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDoga2V5UmVzcG9uc2UuaWQsXG4gICAgICBrZXlTaGFyZXM6IGtleVJlc3BvbnNlLmtleVNoYXJlcyxcbiAgICAgIGNvbW1vbktleWNoYWluOiBrZXlSZXNwb25zZS5jb21tb25LZXljaGFpbixcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGFzeW5jIGNyZWF0ZUtleWNoYWlucyhwYXJhbXM6IHtcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW50ZXJwcmlzZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgd2ViYXV0aG5JbmZvPzogV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbztcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uO1xuICB9KTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG4gICAgY29uc3QgbSA9IDI7XG4gICAgY29uc3QgbiA9IDM7XG5cbiAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBhd2FpdCBNUEMua2V5U2hhcmUoMSwgbSwgbik7XG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG4gICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhY2t1cEtleVNoYXJlcygpO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleSA9IGF3YWl0IHRoaXMuZ2V0QmFja3VwR3BnUHViS2V5KCk7XG5cbiAgICAvLyBHZXQgdGhlIEJpdEdvIHB1YmxpYyBrZXkgYmFzZWQgb24gdXNlci9lbnRlcnByaXNlIGZlYXR1cmUgZmxhZ3NcbiAgICAvLyBJZiBpdCBkb2Vzbid0IHdvcmssIHVzZSB0aGUgZGVmYXVsdCBwdWJsaWMga2V5IGZyb20gdGhlIGNvbnN0YW50c1xuICAgIGNvbnN0IHsgbXBjdjJQdWJsaWNLZXk6IHByaW1hcnlHcGdLZXkgfSA9IGF3YWl0IHRoaXMuZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKHBhcmFtcy5lbnRlcnByaXNlKTtcbiAgICBjb25zdCBiaXRnb1B1YmxpY0dwZ0tleSA9IHByaW1hcnlHcGdLZXkgPz8gdGhpcy5iaXRnb1B1YmxpY0dwZ0tleTtcblxuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBlbnRlcnByaXNlOiBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICB9KTtcbiAgICBjb25zdCB1c2VyS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFzc3BocmFzZTogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICB3ZWJhdXRobkluZm86IHBhcmFtcy53ZWJhdXRobkluZm8sXG4gICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgIH0pO1xuICAgIGNvbnN0IGJhY2t1cEtleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFzc3BocmFzZTogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgIH0pO1xuXG4gICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW3VzZXJLZXljaGFpblByb21pc2UsIGJhY2t1cEtleWNoYWluUHJvbWlzZV0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXJLZXljaGFpbixcbiAgICAgIGJhY2t1cEtleWNoYWluLFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQmFja3VwS2V5U2hhcmVzKCk6IFByb21pc2U8QmFja3VwS2V5U2hhcmU+IHtcbiAgICBjb25zdCBNUEMgPSBuZXcgRWNkc2EoKTtcbiAgICBjb25zdCBtID0gMjtcbiAgICBjb25zdCBuID0gMztcbiAgICBjb25zdCBiYWNrdXBLZXlTaGFyZSA9IHtcbiAgICAgIHVzZXJIZWxkS2V5U2hhcmU6IGF3YWl0IE1QQy5rZXlTaGFyZSgyLCBtLCBuKSxcbiAgICB9O1xuICAgIHJldHVybiBiYWNrdXBLZXlTaGFyZTtcbiAgfVxuXG4gIGNyZWF0ZVVzZXJLZXljaGFpbih7XG4gICAgdXNlckdwZ0tleSxcbiAgICBiYWNrdXBHcGdLZXksXG4gICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgdXNlcktleVNoYXJlLFxuICAgIGJhY2t1cEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZSxcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgd2ViYXV0aG5JbmZvLFxuICAgIGVuY3J5cHRpb25WZXJzaW9uLFxuICB9OiBDcmVhdGVFY2RzYUtleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGlmICghcGFzc3BocmFzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBhIHdhbGxldCBwYXNzcGhyYXNlJyk7XG4gICAgfVxuICAgIGFzc2VydChiYWNrdXBLZXlTaGFyZS51c2VySGVsZEtleVNoYXJlKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSBhcyBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICAxLFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUudXNlckhlbGRLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXNzcGhyYXNlLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgd2ViYXV0aG5JbmZvLFxuICAgICAgZW5jcnlwdGlvblZlcnNpb25cbiAgICApO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQmFja3VwS2V5Y2hhaW4oe1xuICAgIHVzZXJHcGdLZXksXG4gICAgdXNlcktleVNoYXJlLFxuICAgIGJhY2t1cEdwZ0tleSxcbiAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICBiaXRnb0tleWNoYWluLFxuICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgIHBhc3NwaHJhc2UsXG4gICAgZW5jcnlwdGlvblZlcnNpb24sXG4gIH06IENyZWF0ZUVjZHNhS2V5Y2hhaW5QYXJhbXMpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgYXNzZXJ0KGJhY2t1cEtleVNoYXJlLnVzZXJIZWxkS2V5U2hhcmUpO1xuICAgIGFzc2VydChwYXNzcGhyYXNlKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSBhcyBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICAyLFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUudXNlckhlbGRLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXNzcGhyYXNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZW5jcnlwdGlvblZlcnNpb25cbiAgICApO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGFzeW5jIGNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgIHVzZXJHcGdLZXksXG4gICAgYmFja3VwR3BnS2V5LFxuICAgIHVzZXJLZXlTaGFyZSxcbiAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICBlbnRlcnByaXNlLFxuICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICB9OiBDcmVhdGVFY2RzYUJpdEdvS2V5Y2hhaW5QYXJhbXMpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgcmVjaXBpZW50SW5kZXggPSAzO1xuICAgIGNvbnN0IHVzZXJUb0JpdGdvU2hhcmUgPSBhd2FpdCBlbmNyeXB0TlNoYXJlKHVzZXJLZXlTaGFyZSwgcmVjaXBpZW50SW5kZXgsIGJpdGdvUHVibGljR3BnS2V5LmFybW9yKCksIHVzZXJHcGdLZXkpO1xuXG4gICAgY29uc3QgYmFja3VwVG9CaXRnb1NoYXJlID0gYXdhaXQgdGhpcy5nZXRCYWNrdXBFbmNyeXB0ZWROU2hhcmUoXG4gICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIHJlY2lwaWVudEluZGV4LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXkuYXJtb3IoKSxcbiAgICAgIGJhY2t1cEdwZ0tleSBhcyBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+XG4gICAgKTtcblxuICAgIGNvbnN0IGNyZWF0ZUJpdEdvTVBDUGFyYW1zOiBBZGRLZXljaGFpbk9wdGlvbnMgPSB7XG4gICAgICBrZXlUeXBlOiAndHNzJyBhcyBLZXlUeXBlLFxuICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAga2V5U2hhcmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiAndXNlcicsXG4gICAgICAgICAgdG86ICdiaXRnbycsXG4gICAgICAgICAgcHVibGljU2hhcmU6IHVzZXJUb0JpdGdvU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlOiB1c2VyVG9CaXRnb1NoYXJlLmVuY3J5cHRlZFByaXZhdGVTaGFyZSxcbiAgICAgICAgICBuOiB1c2VyVG9CaXRnb1NoYXJlLm4sXG4gICAgICAgICAgdnNzUHJvb2Y6IHVzZXJUb0JpdGdvU2hhcmUudnNzUHJvb2YsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IHVzZXJUb0JpdGdvU2hhcmUucHJpdmF0ZVNoYXJlUHJvb2YsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiAnYmFja3VwJyxcbiAgICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogYmFja3VwVG9CaXRnb1NoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICAgIHByaXZhdGVTaGFyZTogYmFja3VwVG9CaXRnb1NoYXJlLmVuY3J5cHRlZFByaXZhdGVTaGFyZSxcbiAgICAgICAgICBuOiBiYWNrdXBUb0JpdGdvU2hhcmUubixcbiAgICAgICAgICB2c3NQcm9vZjogYmFja3VwVG9CaXRnb1NoYXJlLnZzc1Byb29mLFxuICAgICAgICAgIHByaXZhdGVTaGFyZVByb29mOiBiYWNrdXBUb0JpdGdvU2hhcmUucHJpdmF0ZVNoYXJlUHJvb2YsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdXNlckdQR1B1YmxpY0tleTogdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBiYWNrdXBHUEdQdWJsaWNLZXk6IChiYWNrdXBHcGdLZXkgYXMgU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPikucHVibGljS2V5LFxuICAgICAgZW50ZXJwcmlzZTogZW50ZXJwcmlzZSxcbiAgICAgIGFsZ29Vc2VkOiAnZWNkc2EnLFxuICAgIH07XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKS5hZGQoY3JlYXRlQml0R29NUENQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgYnVpbGRzIHRoZSByZWxldmFudCBiYWNrdXAgZW5jcnlwdGVkTlNoYXJlIGJhc2VkIG9uIHdoZXRoZXIgdGhlXG4gICAqIGJhY2t1cCBrZXkgaXMgdXNlciBvciB0aGlyZCBwYXJ0eSBnZW5lcmF0ZWRcbiAgICogQHBhcmFtIGJhY2t1cFNoYXJlIGNhbiBlaXRoZXIgaGF2ZSBrZXkgc2hhcmVzIGZyb20gdGhlIHVzZXIgb3IgdGhpcmQgcGFydHlcbiAgICogQHBhcmFtIHJlY2lwaWVudEluZGV4IGluZGV4IG9mIHRoZSBwYXJ0eSByZWNlaXZpbmcgdGhlIGJhY2t1cCBzaGFyZXNcbiAgICogQHBhcmFtIHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yIGdwZyBhcm1vciBvZiB0aGUgcGFydHkgcmVjZWl2aW5nIHRoZSBiYWNrdXAgc2hhcmVzXG4gICAqIEBwYXJhbSBiYWNrdXBHcGdLZXkgYmFja3VwIGdwZyBrZXlcbiAgICogQHBhcmFtIGlzVGhpcmRQYXJ0eUJhY2t1cCB3aGV0aGVyIHRoZSBiYWNrdXAgaXMgZ2VuZXJhdGVkIGJ5IHRoaXJkIHBhcnR5XG4gICAqL1xuICBhc3luYyBnZXRCYWNrdXBFbmNyeXB0ZWROU2hhcmUoXG4gICAgYmFja3VwU2hhcmU6IEJhY2t1cEtleVNoYXJlLFxuICAgIHJlY2lwaWVudEluZGV4OiBudW1iZXIsXG4gICAgcmVjaXBpZW50R3BnUHVibGljQXJtb3I6IHN0cmluZyxcbiAgICBiYWNrdXBHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz5cbiAgKTogUHJvbWlzZTxFbmNyeXB0ZWROU2hhcmU+IHtcbiAgICBhc3NlcnQoYmFja3VwU2hhcmUudXNlckhlbGRLZXlTaGFyZSk7XG4gICAgY29uc3QgYmFja3VwVG9SZWNpcGllbnRTaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUoXG4gICAgICBiYWNrdXBTaGFyZS51c2VySGVsZEtleVNoYXJlLFxuICAgICAgcmVjaXBpZW50SW5kZXgsXG4gICAgICByZWNpcGllbnRHcGdQdWJsaWNBcm1vcixcbiAgICAgIGJhY2t1cEdwZ0tleVxuICAgICk7XG4gICAgcmV0dXJuIGJhY2t1cFRvUmVjaXBpZW50U2hhcmU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICB1c2VyR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlckxvY2FsQmFja3VwR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgYml0Z29QdWJsaWNHcGdLZXk6IEtleSxcbiAgICByZWNpcGllbnRJbmRleDogbnVtYmVyLFxuICAgIHVzZXJLZXlTaGFyZTogS2V5U2hhcmUsXG4gICAgYmFja3VwS2V5U2hhcmU6IEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluLFxuICAgIHBhc3NwaHJhc2U6IHN0cmluZyxcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmcsXG4gICAgd2ViYXV0aG5JbmZvPzogV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbyxcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0tleVNoYXJlcyA9IGJpdGdvS2V5Y2hhaW4ua2V5U2hhcmVzO1xuICAgIGlmICghYml0Z29LZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRHbyBrZXkgc2hhcmVzJyk7XG4gICAgfVxuICAgIGlmICghYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGNvbW1vbiBrZXkgY2hhaW46ICR7Yml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbn1gKTtcbiAgICB9XG5cbiAgICBsZXQgcmVjaXBpZW50OiBzdHJpbmc7XG4gICAgbGV0IGtleVNoYXJlOiBLZXlTaGFyZTtcbiAgICBsZXQgb3RoZXJTaGFyZTogS2V5U2hhcmU7XG4gICAgbGV0IHJlY2lwaWVudEdwZ0tleTogb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+O1xuICAgIGxldCBzZW5kZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgICBpZiAocmVjaXBpZW50SW5kZXggPT09IDEpIHtcbiAgICAgIGtleVNoYXJlID0gdXNlcktleVNoYXJlO1xuICAgICAgb3RoZXJTaGFyZSA9IGJhY2t1cEtleVNoYXJlO1xuICAgICAgcmVjaXBpZW50ID0gJ3VzZXInO1xuICAgICAgcmVjaXBpZW50R3BnS2V5ID0gdXNlckdwZ0tleTtcbiAgICAgIHNlbmRlckdwZ0tleSA9IHVzZXJMb2NhbEJhY2t1cEdwZ0tleTtcbiAgICB9IGVsc2UgaWYgKHJlY2lwaWVudEluZGV4ID09PSAyKSB7XG4gICAgICBrZXlTaGFyZSA9IGJhY2t1cEtleVNoYXJlO1xuICAgICAgb3RoZXJTaGFyZSA9IHVzZXJLZXlTaGFyZTtcbiAgICAgIHJlY2lwaWVudCA9ICdiYWNrdXAnO1xuICAgICAgcmVjaXBpZW50R3BnS2V5ID0gdXNlckxvY2FsQmFja3VwR3BnS2V5O1xuICAgICAgc2VuZGVyR3BnS2V5ID0gdXNlckdwZ0tleTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXIgaW5kZXgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvUmVjaXBpZW50U2hhcmUgPSBiaXRnb0tleVNoYXJlcy5maW5kKFxuICAgICAgKGtleVNoYXJlKSA9PiBrZXlTaGFyZS5mcm9tID09PSAnYml0Z28nICYmIGtleVNoYXJlLnRvID09PSByZWNpcGllbnRcbiAgICApO1xuICAgIGlmICghYml0R29Ub1JlY2lwaWVudFNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgQml0R28gdG8gJHtyZWNpcGllbnR9IGtleSBzaGFyZWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY3J5cHRlZFNoYXJlID0gYXdhaXQgdGhpcy5kZWNyeXB0UHJpdmF0ZVNoYXJlKGJpdEdvVG9SZWNpcGllbnRTaGFyZS5wcml2YXRlU2hhcmUsIHJlY2lwaWVudEdwZ0tleSk7XG5cbiAgICBhd2FpdCB0aGlzLnZlcmlmeVdhbGxldFNpZ25hdHVyZXMoXG4gICAgICB1c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIHVzZXJMb2NhbEJhY2t1cEdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgZGVjcnlwdGVkU2hhcmUsXG4gICAgICByZWNpcGllbnRJbmRleFxuICAgICk7XG5cbiAgICBjb25zdCBzZW5kZXJUb1JlY2lwaWVudFNoYXJlID0gYXdhaXQgZW5jcnlwdE5TaGFyZShcbiAgICAgIG90aGVyU2hhcmUsXG4gICAgICByZWNpcGllbnRJbmRleCxcbiAgICAgIHJlY2lwaWVudEdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBzZW5kZXJHcGdLZXlcbiAgICApO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5TaGFyZXM6IERlY3J5cHRhYmxlTlNoYXJlW10gPSBbXG4gICAgICB7XG4gICAgICAgIC8vIHVzZXJUb0JhY2t1cCBvciBiYWNrdXBUb1VzZXJcbiAgICAgICAgblNoYXJlOiBzZW5kZXJUb1JlY2lwaWVudFNoYXJlLFxuICAgICAgICByZWNpcGllbnRQcml2YXRlQXJtb3I6IHJlY2lwaWVudEdwZ0tleS5wcml2YXRlS2V5LFxuICAgICAgICBzZW5kZXJQdWJsaWNBcm1vcjogc2VuZGVyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGJpdGdvVG9SZWNpcGllbnRcbiAgICAgICAgblNoYXJlOiB7XG4gICAgICAgICAgaTogcmVjaXBpZW50SW5kZXgsXG4gICAgICAgICAgajogMyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogYml0R29Ub1JlY2lwaWVudFNoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICAgIGVuY3J5cHRlZFByaXZhdGVTaGFyZTogYml0R29Ub1JlY2lwaWVudFNoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgICBuOiBiaXRHb1RvUmVjaXBpZW50U2hhcmUubiEsXG4gICAgICAgICAgdnNzUHJvb2Y6IGJpdEdvVG9SZWNpcGllbnRTaGFyZS52c3NQcm9vZixcbiAgICAgICAgICBwcml2YXRlU2hhcmVQcm9vZjogYml0R29Ub1JlY2lwaWVudFNoYXJlLnByaXZhdGVTaGFyZVByb29mLFxuICAgICAgICB9LFxuICAgICAgICByZWNpcGllbnRQcml2YXRlQXJtb3I6IHJlY2lwaWVudEdwZ0tleS5wcml2YXRlS2V5LFxuICAgICAgICBzZW5kZXJQdWJsaWNBcm1vcjogYml0Z29QdWJsaWNHcGdLZXkuYXJtb3IoKSxcbiAgICAgICAgaXNiczU4RW5jb2RlZDogZmFsc2UsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCByZWNpcGllbnRDb21iaW5lZEtleSA9IGF3YWl0IEVDRFNBTWV0aG9kcy5jcmVhdGVDb21iaW5lZEtleShcbiAgICAgIGtleVNoYXJlLFxuICAgICAgZW5jcnlwdGVkTlNoYXJlcyxcbiAgICAgIGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW5cbiAgICApO1xuXG4gICAgY29uc3QgcHJ2ID0gSlNPTi5zdHJpbmdpZnkocmVjaXBpZW50Q29tYmluZWRLZXkuc2lnbmluZ01hdGVyaWFsKTtcbiAgICBjb25zdCByZWNpcGllbnRLZXljaGFpblBhcmFtcyA9IHtcbiAgICAgIHNvdXJjZTogcmVjaXBpZW50LFxuICAgICAga2V5VHlwZTogJ3RzcycgYXMgS2V5VHlwZSxcbiAgICAgIGNvbW1vbktleWNoYWluOiBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluLFxuICAgICAgcHJ2OiBwcnYsXG4gICAgICBlbmNyeXB0ZWRQcnY6IGF3YWl0IHRoaXMuYml0Z28uZW5jcnlwdEFzeW5jKHtcbiAgICAgICAgaW5wdXQ6IHBydixcbiAgICAgICAgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsXG4gICAgICAgIGVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgfSksXG4gICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICB3ZWJhdXRobkRldmljZXM6XG4gICAgICAgIHdlYmF1dGhuSW5mbyAmJiByZWNpcGllbnRJbmRleCA9PT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvdHBEZXZpY2VJZDogd2ViYXV0aG5JbmZvLm90cERldmljZUlkLFxuICAgICAgICAgICAgICAgIHByZlNhbHQ6IHdlYmF1dGhuSW5mby5wcmZTYWx0LFxuICAgICAgICAgICAgICAgIGVuY3J5cHRlZFBydjogYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0QXN5bmMoe1xuICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBydixcbiAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiB3ZWJhdXRobkluZm8ucGFzc3BocmFzZSxcbiAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBjb25zdCBrZXljaGFpbnMgPSB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpO1xuICAgIHJldHVybiByZWNpcGllbnRJbmRleCA9PT0gMVxuICAgICAgPyBhd2FpdCBrZXljaGFpbnMuYWRkKHJlY2lwaWVudEtleWNoYWluUGFyYW1zKVxuICAgICAgOiBhd2FpdCBrZXljaGFpbnMuY3JlYXRlQmFja3VwKHJlY2lwaWVudEtleWNoYWluUGFyYW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVHNzRWNkc2FTdGVwMVNpZ25pbmdNYXRlcmlhbChwYXJhbXM6IHtcbiAgICBjaGFsbGVuZ2VzOiB7XG4gICAgICBlbnRlcnByaXNlQ2hhbGxlbmdlOiBFY2RzYVR5cGVzLlNlcmlhbGl6ZWRFY2RzYUNoYWxsZW5nZXM7XG4gICAgICBiaXRnb0NoYWxsZW5nZTogVHhSZXF1ZXN0Q2hhbGxlbmdlUmVzcG9uc2U7XG4gICAgfTtcbiAgICBwcnY6IHN0cmluZztcbiAgICBkZXJpdmF0aW9uUGF0aDogc3RyaW5nO1xuICAgIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gICAgZW5jcnlwdGlvblZlcnNpb24/OiBFbmNyeXB0aW9uVmVyc2lvbjtcbiAgfSk6IFByb21pc2U8VHNzRWNkc2FTdGVwMVJldHVybk1lc3NhZ2U+IHtcbiAgICBjb25zdCB7IGNoYWxsZW5nZXMsIGRlcml2YXRpb25QYXRoLCBwcnYgfSA9IHBhcmFtcztcbiAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsOiBFQ0RTQU1ldGhvZFR5cGVzLlNpZ25pbmdNYXRlcmlhbCA9IEpTT04ucGFyc2UocHJ2KTtcbiAgICBpZiAodXNlclNpZ25pbmdNYXRlcmlhbC5wU2hhcmUuaSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXIga2V5Jyk7XG4gICAgfVxuICAgIGlmICghdXNlclNpZ25pbmdNYXRlcmlhbC5iYWNrdXBOU2hhcmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleSAtIG1pc3NpbmcgYmFja3VwTlNoYXJlJyk7XG4gICAgfVxuICAgIGNvbnN0IE1QQyA9IG5ldyBFY2RzYSgpO1xuICAgIGNvbnN0IHNpZ25pbmdLZXkgPSBNUEMua2V5RGVyaXZlKFxuICAgICAgdXNlclNpZ25pbmdNYXRlcmlhbC5wU2hhcmUsXG4gICAgICBbdXNlclNpZ25pbmdNYXRlcmlhbC5iaXRnb05TaGFyZSwgdXNlclNpZ25pbmdNYXRlcmlhbC5iYWNrdXBOU2hhcmVdLFxuICAgICAgZGVyaXZhdGlvblBhdGhcbiAgICApO1xuXG4gICAgY29uc3QgYml0Z29JbmRleCA9IFNoYXJlS2V5UG9zaXRpb24uQklUR087XG4gICAgY29uc3QgdXNlckluZGV4ID0gdXNlclNpZ25pbmdNYXRlcmlhbC5wU2hhcmUuaTtcblxuICAgIGNvbnN0IHsgbnRpbGRlOiBudGlsZGVhLCBoMTogaDFhLCBoMjogaDJhLCBwOiBwYSB9ID0gY2hhbGxlbmdlcy5lbnRlcnByaXNlQ2hhbGxlbmdlO1xuICAgIGNvbnN0IHsgbnRpbGRlOiBudGlsZGViLCBoMTogaDFiLCBoMjogaDJiLCBwOiBwYiwgbjogbmIgfSA9IGNoYWxsZW5nZXMuYml0Z29DaGFsbGVuZ2U7XG4gICAgY29uc3QgdXNlclhTaGFyZSA9IE1QQy5hcHBlbmRDaGFsbGVuZ2Uoc2lnbmluZ0tleS54U2hhcmUsIHsgbnRpbGRlOiBudGlsZGVhLCBoMTogaDFhLCBoMjogaDJhIH0sIHsgcDogcGEgfSk7XG4gICAgY29uc3QgYml0Z29ZU2hhcmUgPSBNUEMuYXBwZW5kQ2hhbGxlbmdlKFxuICAgICAge1xuICAgICAgICBpOiB1c2VySW5kZXgsXG4gICAgICAgIGo6IGJpdGdvSW5kZXgsXG4gICAgICAgIG46IG5iLFxuICAgICAgfSxcbiAgICAgIHsgbnRpbGRlOiBudGlsZGViLCBoMTogaDFiLCBoMjogaDJiIH0sXG4gICAgICB7IHA6IHBiIH1cbiAgICApO1xuXG4gICAgY29uc3QgdXNlclNpZ25TaGFyZSA9IGF3YWl0IEVDRFNBTWV0aG9kcy5jcmVhdGVVc2VyU2lnblNoYXJlKHVzZXJYU2hhcmUsIGJpdGdvWVNoYXJlKTtcbiAgICBjb25zdCB1ID0gc2lnbmluZ0tleS5uU2hhcmVzW2JpdGdvSW5kZXhdLnU7XG5cbiAgICBsZXQgY2hhaW5jb2RlID0gdXNlclNpZ25pbmdNYXRlcmlhbC5iaXRnb05TaGFyZS5jaGFpbmNvZGU7XG4gICAgd2hpbGUgKGNoYWluY29kZS5sZW5ndGggPCA2NCkge1xuICAgICAgY2hhaW5jb2RlID0gJzAnICsgY2hhaW5jb2RlO1xuICAgIH1cbiAgICBjb25zdCBzaWduZXJTaGFyZSA9IGJpcDMyLmZyb21Qcml2YXRlS2V5KEJ1ZmZlci5mcm9tKHUsICdoZXgnKSwgQnVmZmVyLmZyb20oY2hhaW5jb2RlLCAnaGV4JykpLnRvQmFzZTU4KCk7XG4gICAgY29uc3QgYml0Z29HcGdLZXkgPSAoYXdhaXQgZ2V0Qml0Z29HcGdQdWJLZXkodGhpcy5iaXRnbykpLm1wY1YxO1xuICAgIGNvbnN0IGVuY3J5cHRlZFNpZ25lclNoYXJlID0gKGF3YWl0IG9wZW5wZ3AuZW5jcnlwdCh7XG4gICAgICBtZXNzYWdlOiBhd2FpdCBvcGVucGdwLmNyZWF0ZU1lc3NhZ2Uoe1xuICAgICAgICB0ZXh0OiBzaWduZXJTaGFyZSxcbiAgICAgIH0pLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIHJlamVjdEN1cnZlczogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICAgIGVuY3J5cHRpb25LZXlzOiBbYml0Z29HcGdLZXldLFxuICAgIH0pKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG4gICAgY29uc3QgcHJpdmF0ZVNoYXJlUHJvb2YgPSBhd2FpdCBjcmVhdGVTaGFyZVByb29mKHVzZXJHcGdLZXkucHJpdmF0ZUtleSwgc2lnbmluZ0tleS5uU2hhcmVzW2JpdGdvSW5kZXhdLnUsICdlY2RzYScpO1xuICAgIGNvbnN0IHZzc1Byb29mID0gc2lnbmluZ0tleS5uU2hhcmVzW2JpdGdvSW5kZXhdLnY7XG4gICAgY29uc3QgdXNlclB1YmxpY0dwZ0tleSA9IHVzZXJHcGdLZXkucHVibGljS2V5O1xuICAgIGNvbnN0IHB1YmxpY1NoYXJlID0gc2lnbmluZ0tleS5uU2hhcmVzW2JpdGdvSW5kZXhdLnkgKyBzaWduaW5nS2V5Lm5TaGFyZXNbYml0Z29JbmRleF0uY2hhaW5jb2RlO1xuICAgIHJldHVybiB7XG4gICAgICBwcml2YXRlU2hhcmVQcm9vZjogcHJpdmF0ZVNoYXJlUHJvb2YsXG4gICAgICB2c3NQcm9vZjogdnNzUHJvb2YsXG4gICAgICBwdWJsaWNTaGFyZTogcHVibGljU2hhcmUsXG4gICAgICBlbmNyeXB0ZWRTaWduZXJPZmZzZXRTaGFyZTogZW5jcnlwdGVkU2lnbmVyU2hhcmUsXG4gICAgICB1c2VyUHVibGljR3BnS2V5OiB1c2VyUHVibGljR3BnS2V5LFxuICAgICAga1NoYXJlOiB1c2VyU2lnblNoYXJlLmtTaGFyZSxcbiAgICAgIHdTaGFyZTogcGFyYW1zLndhbGxldFBhc3NwaHJhc2VcbiAgICAgICAgPyBhd2FpdCB0aGlzLmJpdGdvLmVuY3J5cHRBc3luYyh7XG4gICAgICAgICAgICBpbnB1dDogSlNPTi5zdHJpbmdpZnkodXNlclNpZ25TaGFyZS53U2hhcmUpLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbixcbiAgICAgICAgICB9KVxuICAgICAgICA6IHVzZXJTaWduU2hhcmUud1NoYXJlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZVRzc0VjZHNhU3RlcDJTaWduaW5nTWF0ZXJpYWwocGFyYW1zOiB7XG4gICAgYml0Z29DaGFsbGVuZ2U6IFR4UmVxdWVzdENoYWxsZW5nZVJlc3BvbnNlO1xuICAgIHdTaGFyZTogV1NoYXJlO1xuICAgIGFTaGFyZUZyb21CaXRnbzogT21pdDxBU2hhcmUsICdoMScgfCAnaDInIHwgJ250aWxkZSc+O1xuICAgIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gICAgZW5jcnlwdGlvblZlcnNpb24/OiBFbmNyeXB0aW9uVmVyc2lvbjtcbiAgfSk6IFByb21pc2U8VHNzRWNkc2FTdGVwMlJldHVybk1lc3NhZ2U+IHtcbiAgICAvLyBBcHBlbmQgdGhlIEJpdEdvIGNoYWxsZW5nZSB0byB0aGUgQXNoYXJlIHRvIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBwcm9vZnNcbiAgICBjb25zdCBiaXRnb1RvVXNlckFTaGFyZVdpdGhOdGlsZGU6IEFTaGFyZSA9IHtcbiAgICAgIC4uLnBhcmFtcy5hU2hhcmVGcm9tQml0Z28sXG4gICAgICAuLi5wYXJhbXMuYml0Z29DaGFsbGVuZ2UsXG4gICAgfTtcbiAgICBjb25zdCB1c2VyR2FtbWFBbmRNdVNoYXJlcyA9IGF3YWl0IEVDRFNBTWV0aG9kcy5jcmVhdGVVc2VyR2FtbWFBbmRNdVNoYXJlKFxuICAgICAgcGFyYW1zLndTaGFyZSxcbiAgICAgIGJpdGdvVG9Vc2VyQVNoYXJlV2l0aE50aWxkZVxuICAgICk7XG4gICAgY29uc3QgdXNlck9taWNyb25BbmREZWx0YVNoYXJlID0gYXdhaXQgRUNEU0FNZXRob2RzLmNyZWF0ZVVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZShcbiAgICAgIHVzZXJHYW1tYUFuZE11U2hhcmVzLmdTaGFyZSBhcyBFQ0RTQS5HU2hhcmVcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBtdURTaGFyZToge1xuICAgICAgICBtdVNoYXJlOiB1c2VyR2FtbWFBbmRNdVNoYXJlcy5tdVNoYXJlLFxuICAgICAgICBkU2hhcmU6IHVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZS5kU2hhcmUsXG4gICAgICAgIGk6IHVzZXJHYW1tYUFuZE11U2hhcmVzLm11U2hhcmUuaSxcbiAgICAgIH0sXG4gICAgICBvU2hhcmU6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlXG4gICAgICAgID8gYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0QXN5bmMoe1xuICAgICAgICAgICAgaW5wdXQ6IEpTT04uc3RyaW5naWZ5KHVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZS5vU2hhcmUpLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbixcbiAgICAgICAgICB9KVxuICAgICAgICA6IHVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZS5vU2hhcmUsXG4gICAgfTtcbiAgfVxuXG4gIGdldE9mZmxpbmVTaWduZXJQYWlsbGllck1vZHVsdXMocGFyYW1zOiB7IHBydjogc3RyaW5nIH0pOiB7IHVzZXJQYWlsbGllck1vZHVsdXM6IHN0cmluZyB9IHtcbiAgICBhc3NlcnQocGFyYW1zLnBydiwgJ1BhcmFtcyB0byBnZXQgcGFpbGxpZXIgbW9kdWx1cyBhcmUgbWlzc2luZyBwcnYuJyk7XG4gICAgY29uc3QgdXNlclNpZ25pbmdNYXRlcmlhbDogRUNEU0FNZXRob2RUeXBlcy5TaWduaW5nTWF0ZXJpYWwgPSBKU09OLnBhcnNlKHBhcmFtcy5wcnYpO1xuICAgIHJldHVybiB7IHVzZXJQYWlsbGllck1vZHVsdXM6IHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLm4gfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmxpbmVLU2hhcmUocGFyYW1zOiB7XG4gICAgdHNzUGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlO1xuICAgIGNoYWxsZW5nZXM6IHtcbiAgICAgIGVudGVycHJpc2VDaGFsbGVuZ2U6IEVjZHNhVHlwZXMuU2VyaWFsaXplZEVjZHNhQ2hhbGxlbmdlcztcbiAgICAgIGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZTtcbiAgICB9O1xuICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZTtcbiAgICBwcnY6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW5jcnlwdGlvblZlcnNpb24/OiBFbmNyeXB0aW9uVmVyc2lvbjtcbiAgfSk6IFByb21pc2U8VHNzRWNkc2FTdGVwMVJldHVybk1lc3NhZ2U+IHtcbiAgICBjb25zdCB7IHRzc1BhcmFtcywgcHJ2LCByZXF1ZXN0VHlwZSwgY2hhbGxlbmdlcyB9ID0gcGFyYW1zO1xuICAgIGFzc2VydCh0eXBlb2YgdHNzUGFyYW1zLnR4UmVxdWVzdCAhPT0gJ3N0cmluZycsICdJbnZhbGlkIHR4UmVxdWVzdCB0eXBlJyk7XG4gICAgY29uc3QgdHhSZXF1ZXN0OiBUeFJlcXVlc3QgPSB0c3NQYXJhbXMudHhSZXF1ZXN0O1xuICAgIGxldCBkZXJpdmF0aW9uUGF0aDtcblxuICAgIGlmIChyZXF1ZXN0VHlwZSA9PT0gUmVxdWVzdFR5cGUudHgpIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyB8fCAodHhSZXF1ZXN0IGFzIFR4UmVxdWVzdCkudW5zaWduZWRUeHMsXG4gICAgICAgICdVbmFibGUgdG8gZmluZCB0cmFuc2FjdGlvbnMgaW4gdHhSZXF1ZXN0J1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPVxuICAgICAgICB0eFJlcXVlc3QuYXBpVmVyc2lvbiA9PT0gJ2Z1bGwnID8gdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyFbMF0udW5zaWduZWRUeCA6IHR4UmVxdWVzdC51bnNpZ25lZFR4c1swXTtcbiAgICAgIGRlcml2YXRpb25QYXRoID0gdW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aDtcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RUeXBlID09PSBSZXF1ZXN0VHlwZS5tZXNzYWdlKSB7XG4gICAgICAvLyBUT0RPIEJHLTY3Mjk5IE1lc3NhZ2Ugc2lnbmluZyB3aXRoIGRlcml2YXRpb24gcGF0aFxuICAgICAgZGVyaXZhdGlvblBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVHNzRWNkc2FTdGVwMVNpZ25pbmdNYXRlcmlhbCh7XG4gICAgICBwcnY6IHBydixcbiAgICAgIGNoYWxsZW5nZXM6IGNoYWxsZW5nZXMsXG4gICAgICBkZXJpdmF0aW9uUGF0aDogZGVyaXZhdGlvblBhdGgsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZsaW5lTXVEZWx0YVNoYXJlKHBhcmFtczoge1xuICAgIGFTaGFyZUZyb21CaXRnbzogT21pdDxBU2hhcmUsICdudGlsZGUnIHwgJ2gxJyB8ICdoMic+O1xuICAgIGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZTtcbiAgICBlbmNyeXB0ZWRXU2hhcmU6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW5jcnlwdGlvblZlcnNpb24/OiBFbmNyeXB0aW9uVmVyc2lvbjtcbiAgfSk6IFByb21pc2U8VHNzRWNkc2FTdGVwMlJldHVybk1lc3NhZ2U+IHtcbiAgICBjb25zdCBkZWNyeXB0ZWRXU2hhcmUgPSBhd2FpdCB0aGlzLmJpdGdvLmRlY3J5cHRBc3luYyh7XG4gICAgICBpbnB1dDogcGFyYW1zLmVuY3J5cHRlZFdTaGFyZSxcbiAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICB9KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVUc3NFY2RzYVN0ZXAyU2lnbmluZ01hdGVyaWFsKHtcbiAgICAgIGFTaGFyZUZyb21CaXRnbzogcGFyYW1zLmFTaGFyZUZyb21CaXRnbyxcbiAgICAgIGJpdGdvQ2hhbGxlbmdlOiBwYXJhbXMuYml0Z29DaGFsbGVuZ2UsXG4gICAgICB3U2hhcmU6IEpTT04ucGFyc2UoZGVjcnlwdGVkV1NoYXJlKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgZW5jcnlwdGlvblZlcnNpb246IHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbixcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmxpbmVTU2hhcmUocGFyYW1zOiB7XG4gICAgdHNzUGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlO1xuICAgIGRTaGFyZUZyb21CaXRnbzogRFNoYXJlO1xuICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZTtcbiAgICBlbmNyeXB0ZWRPU2hhcmU6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFNTaGFyZT4ge1xuICAgIGNvbnN0IHsgdHNzUGFyYW1zLCByZXF1ZXN0VHlwZSwgZFNoYXJlRnJvbUJpdGdvLCBlbmNyeXB0ZWRPU2hhcmUsIHdhbGxldFBhc3NwaHJhc2UgfSA9IHBhcmFtcztcbiAgICBhc3NlcnQodHlwZW9mIHRzc1BhcmFtcy50eFJlcXVlc3QgIT09ICdzdHJpbmcnLCAnSW52YWxpZCB0eFJlcXVlc3QgdHlwZScpO1xuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0gdHNzUGFyYW1zLnR4UmVxdWVzdDtcbiAgICBsZXQgc2lnbmFibGVQYXlsb2FkO1xuICAgIGlmIChyZXF1ZXN0VHlwZSA9PT0gUmVxdWVzdFR5cGUudHgpIHtcbiAgICAgIGFzc2VydCh0eFJlcXVlc3QudHJhbnNhY3Rpb25zIHx8IHR4UmVxdWVzdC51bnNpZ25lZFR4cywgJ1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QnKTtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPVxuICAgICAgICB0eFJlcXVlc3QuYXBpVmVyc2lvbiA9PT0gJ2Z1bGwnID8gdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyFbMF0udW5zaWduZWRUeCA6IHR4UmVxdWVzdC51bnNpZ25lZFR4c1swXTtcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHVuc2lnbmVkVHguc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RUeXBlID09PSBSZXF1ZXN0VHlwZS5tZXNzYWdlKSB7XG4gICAgICBzaWduYWJsZVBheWxvYWQgPSAocGFyYW1zLnRzc1BhcmFtcyBhcyBUU1NQYXJhbXNGb3JNZXNzYWdlKS5idWZmZXJUb1NpZ247XG4gICAgfVxuICAgIGxldCBoYXNoOiBIYXNoIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBoYXNoID0gdGhpcy5iYXNlQ29pbi5nZXRIYXNoRnVuY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGhhc2ggPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRlY3J5cHRlZE9TaGFyZSA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdEFzeW5jKHsgaW5wdXQ6IGVuY3J5cHRlZE9TaGFyZSwgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UgfSk7XG4gICAgY29uc3QgeyBpLCBSLCBzLCB5IH0gPSBhd2FpdCBFQ0RTQU1ldGhvZHMuY3JlYXRlVXNlclNpZ25hdHVyZVNoYXJlKFxuICAgICAgSlNPTi5wYXJzZShkZWNyeXB0ZWRPU2hhcmUpLFxuICAgICAgZFNoYXJlRnJvbUJpdGdvLFxuICAgICAgc2lnbmFibGVQYXlsb2FkLFxuICAgICAgaGFzaFxuICAgICk7XG4gICAgLy8gcmV0dXJuIG9ubHkgcmVxdWlyZWQgU1NoYXJlIHdpdGhvdXQgYmlnaW50cyBmcm9tIFZBU2hhcmVcbiAgICByZXR1cm4ge1xuICAgICAgaSxcbiAgICAgIFIsXG4gICAgICBzLFxuICAgICAgeSxcbiAgICB9O1xuICB9XG4gIGFzeW5jIHNpZ25FY2RzYVRzc1VzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgcGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlLFxuICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgICBleHRlcm5hbFNpZ25lclBhaWxsaWVyTW9kdWx1c0dldHRlcjogQ3VzdG9tUGFpbGxpZXJNb2R1bHVzR2V0dGVyRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJLU2hhcmVHZW5lcmF0b3I6IEN1c3RvbUtTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lck11RGVsdGFTaGFyZUdlbmVyYXRvcjogQ3VzdG9tTXVEZWx0YVNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyU1NoYXJlR2VuZXJhdG9yOiBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb25cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCB7IHR4UmVxdWVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBlbmRpbmdFY2RzYVRzc0luaXRpYWxpemF0aW9uID0gdGhpcy53YWxsZXQuY29pblNwZWNpZmljKCk/LnBlbmRpbmdFY2RzYVRzc0luaXRpYWxpemF0aW9uO1xuICAgIGlmIChwZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnV2FsbGV0IGlzIG5vdCByZWFkeSBmb3IgVFNTIEVDRFNBIHNpZ25pbmcuIFBsZWFzZSBjb250YWN0IHlvdXIgZW50ZXJwcmlzZSBhZG1pbiB0byBmaW5pc2ggdGhlIGVudGVycHJpc2UgVFNTIGluaXRpYWxpemF0aW9uLidcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHR4UmVxdWVzdE9iajogVHhSZXF1ZXN0ID0gYXdhaXQgZ2V0VHhSZXF1ZXN0KHRoaXMuYml0Z28sIHRoaXMud2FsbGV0LmlkKCksIHR4UmVxdWVzdCBhcyBzdHJpbmcsIHBhcmFtcy5yZXFJZCk7XG4gICAgY29uc3QgeyB1c2VyUGFpbGxpZXJNb2R1bHVzIH0gPSBhd2FpdCBleHRlcm5hbFNpZ25lclBhaWxsaWVyTW9kdWx1c0dldHRlcih7IHR4UmVxdWVzdDogdHhSZXF1ZXN0T2JqIH0pO1xuICAgIGNvbnN0IHsgZW50ZXJwcmlzZUNoYWxsZW5nZSwgYml0Z29DaGFsbGVuZ2UgfSA9IGF3YWl0IHRoaXMuZ2V0RWNkc2FTaWduaW5nQ2hhbGxlbmdlcyhcbiAgICAgIHR4UmVxdWVzdCBhcyBzdHJpbmcsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIHVzZXJQYWlsbGllck1vZHVsdXMsXG4gICAgICAwLFxuICAgICAgcGFyYW1zLnJlcUlkXG4gICAgKTtcbiAgICBjb25zdCBzdGVwMVNpZ25pbmdNYXRlcmlhbCA9IGF3YWl0IGV4dGVybmFsU2lnbmVyS1NoYXJlR2VuZXJhdG9yKHtcbiAgICAgIHRzc1BhcmFtczoge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0T2JqLFxuICAgICAgfSxcbiAgICAgIGNoYWxsZW5nZXM6IHsgZW50ZXJwcmlzZUNoYWxsZW5nZSwgYml0Z29DaGFsbGVuZ2UgfSxcbiAgICAgIHJlcXVlc3RUeXBlOiByZXF1ZXN0VHlwZSxcbiAgICB9KTtcbiAgICAvLyBzaWduaW5nIHN0YWdlIG9uZSB3aXRoIEsgc2hhcmUgc2VuZCB0byBiaXRnbyBhbmQgcmVjZWl2ZXMgQSBzaGFyZVxuICAgIGNvbnN0IGJpdGdvVG9Vc2VyQVNoYXJlID0gKGF3YWl0IEVDRFNBTWV0aG9kcy5zZW5kU2hhcmVUb0JpdGdvKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RPYmoudHhSZXF1ZXN0SWQsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIFNlbmRTaGFyZVR5cGUuS1NoYXJlLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwua1NoYXJlLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwuZW5jcnlwdGVkU2lnbmVyT2Zmc2V0U2hhcmUsXG4gICAgICBzdGVwMVNpZ25pbmdNYXRlcmlhbC52c3NQcm9vZixcbiAgICAgIHN0ZXAxU2lnbmluZ01hdGVyaWFsLnByaXZhdGVTaGFyZVByb29mLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwucHVibGljU2hhcmUsXG4gICAgICBzdGVwMVNpZ25pbmdNYXRlcmlhbC51c2VyUHVibGljR3BnS2V5LFxuICAgICAgcGFyYW1zLnJlcUlkXG4gICAgKSkgYXMgT21pdDxBU2hhcmUsICdudGlsZGUnIHwgJ2gxJyB8ICdoMic+OyAvLyBXUC9IU00gZG9lcyBub3QgcmV0dXJuIHRoZSBpbml0aWFsIGNoYWxsZW5nZVxuICAgIGNvbnN0IHN0ZXAyUmV0dXJuID0gYXdhaXQgZXh0ZXJuYWxTaWduZXJNdURlbHRhU2hhcmVHZW5lcmF0b3Ioe1xuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RPYmosXG4gICAgICBhU2hhcmVGcm9tQml0Z286IGJpdGdvVG9Vc2VyQVNoYXJlLFxuICAgICAgYml0Z29DaGFsbGVuZ2U6IGJpdGdvQ2hhbGxlbmdlLFxuICAgICAgZW5jcnlwdGVkV1NoYXJlOiBzdGVwMVNpZ25pbmdNYXRlcmlhbC53U2hhcmUgYXMgc3RyaW5nLFxuICAgIH0pO1xuICAgIC8vIHNpZ25pbmcgc3RhZ2UgdHdvIHdpdGggbXVTaGFyZSBhbmQgZFNoYXJlIHNlbmQgdG8gYml0Z28gYW5kIHJlY2VpdmVzIEQgc2hhcmVcbiAgICBjb25zdCBiaXRnb1RvVXNlckRTaGFyZSA9IChhd2FpdCBFQ0RTQU1ldGhvZHMuc2VuZFNoYXJlVG9CaXRnbyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0T2JqLnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBTZW5kU2hhcmVUeXBlLk1VU2hhcmUsXG4gICAgICBzdGVwMlJldHVybi5tdURTaGFyZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHBhcmFtcy5yZXFJZFxuICAgICkpIGFzIERTaGFyZTtcbiAgICBjb25zdCB1c2VyU1NoYXJlID0gYXdhaXQgZXh0ZXJuYWxTaWduZXJTU2hhcmVHZW5lcmF0b3Ioe1xuICAgICAgdHNzUGFyYW1zOiB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RPYmosXG4gICAgICB9LFxuICAgICAgZFNoYXJlRnJvbUJpdGdvOiBiaXRnb1RvVXNlckRTaGFyZSxcbiAgICAgIHJlcXVlc3RUeXBlOiByZXF1ZXN0VHlwZSxcbiAgICAgIGVuY3J5cHRlZE9TaGFyZTogc3RlcDJSZXR1cm4ub1NoYXJlIGFzIHN0cmluZyxcbiAgICB9KTtcbiAgICAvLyBzaWduaW5nIHN0YWdlIHRocmVlIHdpdGggU1NoYXJlIHNlbmQgdG8gYml0Z28gYW5kIHJlY2VpdmVzIFNTaGFyZVxuICAgIGF3YWl0IEVDRFNBTWV0aG9kcy5zZW5kU2hhcmVUb0JpdGdvKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RPYmoudHhSZXF1ZXN0SWQsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIFNlbmRTaGFyZVR5cGUuU1NoYXJlLFxuICAgICAgdXNlclNTaGFyZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHBhcmFtcy5yZXFJZFxuICAgICk7XG4gICAgcmV0dXJuIGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RPYmoudHhSZXF1ZXN0SWQsIHBhcmFtcy5yZXFJZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzaWduaW5nIGtleSwgdHhSZXF1ZXN0UmVzb2x2ZWQgYW5kIHR4UmVxdWVzdElkXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCBvYmplY3Qgb3IgaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wcnYgLSBkZWNyeXB0ZWQgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIHsgc3RyaW5nfSBwYXJhbXMucmVxSWQgLSByZXF1ZXN0IGlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNpZ25SZXF1ZXN0QmFzZShcbiAgICBwYXJhbXM6IFRTU1BhcmFtc1dpdGhQcnYgfCBUU1NQYXJhbXNGb3JNZXNzYWdlV2l0aFBydixcbiAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGVcbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCBwZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbiA9IHRoaXMud2FsbGV0LmNvaW5TcGVjaWZpYygpPy5wZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbjtcbiAgICBpZiAocGVuZGluZ0VjZHNhVHNzSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1dhbGxldCBpcyBub3QgcmVhZHkgZm9yIFRTUyBFQ0RTQSBzaWduaW5nLiBQbGVhc2UgY29udGFjdCB5b3VyIGVudGVycHJpc2UgYWRtaW4gdG8gZmluaXNoIHRoZSBlbnRlcnByaXNlIFRTUyBpbml0aWFsaXphdGlvbi4nXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsOiBFQ0RTQU1ldGhvZFR5cGVzLlNpZ25pbmdNYXRlcmlhbCA9IEpTT04ucGFyc2UocGFyYW1zLnBydik7XG4gICAgaWYgKHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLmkgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleScpO1xuICAgIH1cbiAgICBpZiAoIXVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwTlNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgLSBtaXNzaW5nIGJhY2t1cE5TaGFyZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID1cbiAgICAgIHR5cGVvZiBwYXJhbXMudHhSZXF1ZXN0ID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCBwYXJhbXMudHhSZXF1ZXN0LCBwYXJhbXMucmVxSWQpXG4gICAgICAgIDogcGFyYW1zLnR4UmVxdWVzdDtcblxuICAgIGxldCBzaWduYWJsZVBheWxvYWQgPSBuZXcgQnVmZmVyKCcnKTtcbiAgICBsZXQgZGVyaXZhdGlvblBhdGggPSAnJztcblxuICAgIGlmIChyZXF1ZXN0VHlwZSA9PT0gUmVxdWVzdFR5cGUudHgpIHtcbiAgICAgIGFzc2VydCh0eFJlcXVlc3QudHJhbnNhY3Rpb25zIHx8IHR4UmVxdWVzdC51bnNpZ25lZFR4cywgJ1VuYWJsZSB0byBmaW5kIHRyYW5zYWN0aW9ucyBpbiB0eFJlcXVlc3QnKTtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPVxuICAgICAgICB0eFJlcXVlc3QuYXBpVmVyc2lvbiA9PT0gJ2Z1bGwnID8gdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyFbMF0udW5zaWduZWRUeCA6IHR4UmVxdWVzdC51bnNpZ25lZFR4c1swXTtcblxuICAgICAgaWYgKFxuICAgICAgICAncmVjaXBpZW50U291cmNlJyBpbiBwYXJhbXMgJiZcbiAgICAgICAgcGFyYW1zLnJlY2lwaWVudFNvdXJjZSA9PT0gVHNzVHhSZWNpcGllbnRTb3VyY2UuRXhwbGljaXQgJiZcbiAgICAgICAgIXBhcmFtcy50eFBhcmFtcz8ucmVjaXBpZW50cz8ubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICdyZWNpcGllbnRTb3VyY2UgXCJleHBsaWNpdFwiIHJlcXVpcmVzIHR4UGFyYW1zLnJlY2lwaWVudHMgd2l0aCBhdCBsZWFzdCBvbmUgcmVjaXBpZW50LidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIElDUCB0cmFuc2FjdGlvbnMsIHRoZSBIU00gc2lnbnMgdGhlIHNlcmlhbGl6ZWRUeEhleCwgd2hpbGUgdGhlIHVzZXIgc2lnbnMgdGhlIHNpZ25hYmxlSGV4IHNlcGFyYXRlbHkuXG4gICAgICAvLyBWZXJpZmljYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZCBkaXJlY3RseSBvbiB0aGUgc2lnbmFibGVIZXggYWxvbmUuIEhvd2V2ZXIsIHdlIGNhbiBwYXJzZSB0aGUgc2VyaWFsaXplZFR4SGV4XG4gICAgICAvLyB0byByZWdlbmVyYXRlIHRoZSBzaWduYWJsZUhleCBhbmQgY29tcGFyZSBpdCBhZ2FpbnN0IHRoZSBwcm92aWRlZCB2YWx1ZSBmb3IgdmVyaWZpY2F0aW9uLlxuICAgICAgLy8gSW4gY29udHJhc3QsIGZvciBvdGhlciBjb2luIGZhbWlsaWVzLCB2ZXJpZmljYXRpb24gaXMgdHlwaWNhbGx5IGRvbmUgdXNpbmcganVzdCB0aGUgc2lnbmFibGVIZXguXG4gICAgICBpZiAodGhpcy5iYXNlQ29pbi5nZXRDb25maWcoKS5mYW1pbHkgPT09ICdpY3AnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmFzZUNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4LCB0eEluZm86IHVuc2lnbmVkVHguc2lnbmFibGVIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczogcGFyYW1zLnR4UGFyYW1zIHx8IHsgcmVjaXBpZW50czogW10gfSxcbiAgICAgICAgICB3YWxsZXQ6IHRoaXMud2FsbGV0LFxuICAgICAgICAgIHdhbGxldFR5cGU6IHRoaXMud2FsbGV0Lm11bHRpc2lnVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmFzZUNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHVuc2lnbmVkVHguc2lnbmFibGVIZXggfSxcbiAgICAgICAgICB0eFBhcmFtczogcGFyYW1zLnR4UGFyYW1zIHx8IHsgcmVjaXBpZW50czogW10gfSxcbiAgICAgICAgICB3YWxsZXQ6IHRoaXMud2FsbGV0LFxuICAgICAgICAgIHdhbGxldFR5cGU6IHRoaXMud2FsbGV0Lm11bHRpc2lnVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHNpZ25hYmxlUGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHVuc2lnbmVkVHguc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICAgIGRlcml2YXRpb25QYXRoID0gdW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aDtcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RUeXBlID09PSBSZXF1ZXN0VHlwZS5tZXNzYWdlKSB7XG4gICAgICBzaWduYWJsZVBheWxvYWQgPSAocGFyYW1zIGFzIFRTU1BhcmFtc0Zvck1lc3NhZ2UpLmJ1ZmZlclRvU2lnbjtcbiAgICAgIC8vIFRPRE8gQkctNjcyOTkgTWVzc2FnZSBzaWduaW5nIHdpdGggZGVyaXZhdGlvbiBwYXRoXG4gICAgfVxuICAgIGNvbnN0IHBhaWxsaWVyTW9kdWx1cyA9IHRoaXMuZ2V0T2ZmbGluZVNpZ25lclBhaWxsaWVyTW9kdWx1cyh7IHBydjogcGFyYW1zLnBydiB9KTtcbiAgICBjb25zdCBjaGFsbGVuZ2VzID0gYXdhaXQgdGhpcy5nZXRFY2RzYVNpZ25pbmdDaGFsbGVuZ2VzKFxuICAgICAgdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBwYWlsbGllck1vZHVsdXMudXNlclBhaWxsaWVyTW9kdWx1cyxcbiAgICAgIDAsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApO1xuXG4gICAgY29uc3Qgc3RlcDFSZXR1cm4gPSBhd2FpdCB0aGlzLmNyZWF0ZVRzc0VjZHNhU3RlcDFTaWduaW5nTWF0ZXJpYWwoe1xuICAgICAgcHJ2OiBwYXJhbXMucHJ2LFxuICAgICAgY2hhbGxlbmdlczogY2hhbGxlbmdlcyxcbiAgICAgIGRlcml2YXRpb25QYXRoOiBkZXJpdmF0aW9uUGF0aCxcbiAgICB9KTtcblxuICAgIC8vIHNpZ25pbmcgc3RhZ2Ugb25lIHdpdGggSyBzaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBBIHNoYXJlXG4gICAgY29uc3QgYml0Z29Ub1VzZXJBU2hhcmUgPSAoYXdhaXQgRUNEU0FNZXRob2RzLnNlbmRTaGFyZVRvQml0Z28oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgU2VuZFNoYXJlVHlwZS5LU2hhcmUsXG4gICAgICBzdGVwMVJldHVybi5rU2hhcmUsXG4gICAgICBzdGVwMVJldHVybi5lbmNyeXB0ZWRTaWduZXJPZmZzZXRTaGFyZSxcbiAgICAgIHN0ZXAxUmV0dXJuLnZzc1Byb29mLFxuICAgICAgc3RlcDFSZXR1cm4ucHJpdmF0ZVNoYXJlUHJvb2YsXG4gICAgICBzdGVwMVJldHVybi5wdWJsaWNTaGFyZSxcbiAgICAgIHN0ZXAxUmV0dXJuLnVzZXJQdWJsaWNHcGdLZXksXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApKSBhcyBPbWl0PEFTaGFyZSwgJ250aWxkZScgfCAnaDEnIHwgJ2gyJz47IC8vIFdQL0hTTSBkb2VzIG5vdCByZXR1cm4gdGhlIGluaXRpYWwgY2hhbGxlbmdlXG5cbiAgICBjb25zdCBzdGVwMlJldHVybiA9IGF3YWl0IHRoaXMuY3JlYXRlVHNzRWNkc2FTdGVwMlNpZ25pbmdNYXRlcmlhbCh7XG4gICAgICBhU2hhcmVGcm9tQml0Z286IGJpdGdvVG9Vc2VyQVNoYXJlLFxuICAgICAgYml0Z29DaGFsbGVuZ2U6IGNoYWxsZW5nZXMuYml0Z29DaGFsbGVuZ2UsXG4gICAgICB3U2hhcmU6IHN0ZXAxUmV0dXJuLndTaGFyZSBhcyBXU2hhcmUsXG4gICAgfSk7XG5cbiAgICAvLyBzaWduaW5nIHN0YWdlIHR3byB3aXRoIG11U2hhcmUgYW5kIGRTaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBEIHNoYXJlXG4gICAgY29uc3QgYml0Z29Ub1VzZXJEU2hhcmUgPSAoYXdhaXQgRUNEU0FNZXRob2RzLnNlbmRTaGFyZVRvQml0Z28oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgU2VuZFNoYXJlVHlwZS5NVVNoYXJlLFxuICAgICAgc3RlcDJSZXR1cm4ubXVEU2hhcmUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApKSBhcyBEU2hhcmU7XG5cbiAgICAvLyBJZiBvbmx5IHRoZSBnZXRIYXNoRnVuY3Rpb24oKSBpcyBkZWZpbmVkIGZvciB0aGUgY29pbiB1c2UgaXQgb3RoZXJ3aXNlXG4gICAgLy8gcGFzcyB1bmRlZmluZWQgaGFzaCwgZGVmYXVsdCBoYXNoIHdpbGwgYmUgdXNlZCBpbiB0aGF0IGNhc2UuXG4gICAgbGV0IGhhc2g6IEhhc2ggfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGhhc2ggPSB0aGlzLmJhc2VDb2luLmdldEhhc2hGdW5jdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFzaCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyU1NoYXJlID0gYXdhaXQgRUNEU0FNZXRob2RzLmNyZWF0ZVVzZXJTaWduYXR1cmVTaGFyZShcbiAgICAgIHN0ZXAyUmV0dXJuLm9TaGFyZSBhcyBPU2hhcmUsXG4gICAgICBiaXRnb1RvVXNlckRTaGFyZSxcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCxcbiAgICAgIGhhc2hcbiAgICApO1xuXG4gICAgLy8gc2lnbmluZyBzdGFnZSB0aHJlZSB3aXRoIFNTaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBTU2hhcmVcbiAgICBhd2FpdCBFQ0RTQU1ldGhvZHMuc2VuZFNoYXJlVG9CaXRnbyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0LnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBTZW5kU2hhcmVUeXBlLlNTaGFyZSxcbiAgICAgIHVzZXJTU2hhcmUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApO1xuICAgIHJldHVybiBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0LnR4UmVxdWVzdElkLCBwYXJhbXMucmVxSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHRoZSB0cmFuc2FjdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSB0cmFuc2FjdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFR4UmVxdWVzdH0gcGFyYW1zLnR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgb2JqZWN0IG9yIGlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gZGVjcnlwdGVkIHByaXZhdGUga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucmVxSWQgLSByZXF1ZXN0IGlkXG4gICAqIEBwYXJhbSBwYXJhbXMucmVjaXBpZW50U291cmNlIC0gb3B0aW9uYWw7IHVzZSBUc3NUeFJlY2lwaWVudFNvdXJjZS5FeHBsaWNpdCB3aXRoIGEgbm9uLWVtcHR5XG4gICAqICAgdHhQYXJhbXMucmVjaXBpZW50cyBsaXN0IHdoZW4geW91IHdhbnQgVHlwZVNjcmlwdCB0byBlbmZvcmNlIHBhc3NpbmcgcmVjaXBpZW50IGRldGFpbHMgYXQgY29tcGlsZSB0aW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fSBmdWxseSBzaWduZWQgVHhSZXF1ZXN0IG9iamVjdFxuICAgKi9cbiAgYXN5bmMgc2lnblR4UmVxdWVzdChwYXJhbXM6IFRzc1NpZ25UeFJlcXVlc3RQYXJhbXNXaXRoUHJ2KTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocGFyYW1zLnJlcUlkKTtcbiAgICByZXR1cm4gdGhpcy5zaWduUmVxdWVzdEJhc2UocGFyYW1zLCBSZXF1ZXN0VHlwZS50eCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgdGhlIG1lc3NhZ2UgYXNzb2NpYXRlZCB0byB0aGUgdHJhbnNhY3Rpb24gcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBUeFJlcXVlc3R9IHBhcmFtcy50eFJlcXVlc3QgLSB0cmFuc2FjdGlvbiByZXF1ZXN0IG9iamVjdCBvciBpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBydiAtIGRlY3J5cHRlZCBwcml2YXRlIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnJlcUlkIC0gcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fSBmdWxseSBzaWduZWQgVHhSZXF1ZXN0IG9iamVjdFxuICAgKi9cbiAgYXN5bmMgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UocGFyYW1zOiBUU1NQYXJhbXNGb3JNZXNzYWdlV2l0aFBydik6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgaWYgKCFwYXJhbXMubWVzc2FnZVJhdykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSYXcgbWVzc2FnZSByZXF1aXJlZCB0byBzaWduIG1lc3NhZ2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2lnblJlcXVlc3RCYXNlKHBhcmFtcywgUmVxdWVzdFR5cGUubWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjaGFsbGVuZ2UgdmFsdWVzIGZvciBlbnRlcnByaXNlIGFuZCBCaXRHbyBpbiBFQ0RTQSBzaWduaW5nXG4gICAqIE9ubHkgcmV0dXJucyB0aGUgY2hhbGxlbmdlcyBpZiB0aGV5IGFyZSB2ZXJpZmllZCBieSB0aGUgdXNlcidzIGVudGVycHJpc2UgYWRtaW4ncyBlY2RoIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0cmFuc2FjdGlvbiByZXF1ZXN0IGlkXG4gICAqIEBwYXJhbSB7UmVxdWVzdFR5cGV9IHJlcXVlc3RUeXBlIC0gICgwIGZvciB0eCwgMSBmb3IgbWVzc2FnZSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHdhbGxldFBhaWxsaWVyTW9kdWx1cyAtIHBhaWxsaWVyIHB1YmtleSAkbiRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gaW5kZXggb2YgdGhlIHJlcXVlc3RUeXBlXG4gICAqIEBwYXJhbSB7SVJlcXVlc3RUcmFjZXJ9IHJlcUlkIC0gcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKi9cbiAgYXN5bmMgZ2V0RWNkc2FTaWduaW5nQ2hhbGxlbmdlcyhcbiAgICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgICB3YWxsZXRQYWlsbGllck1vZHVsdXM6IHN0cmluZyxcbiAgICBpbmRleCA9IDAsXG4gICAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlclxuICApOiBQcm9taXNlPHtcbiAgICBlbnRlcnByaXNlQ2hhbGxlbmdlOiBFY2RzYVR5cGVzLlNlcmlhbGl6ZWRFY2RzYUNoYWxsZW5nZXM7XG4gICAgYml0Z29DaGFsbGVuZ2U6IFR4UmVxdWVzdENoYWxsZW5nZVJlc3BvbnNlO1xuICB9PiB7XG4gICAgY29uc3QgZW50ZXJwcmlzZUlkID0gdGhpcy53YWxsZXQudG9KU09OKCkuZW50ZXJwcmlzZTtcbiAgICBpZiAoIWVudGVycHJpc2VJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXYWxsZXQgbXVzdCBiZSBhbiBlbnRlcnByaXNlIHdhbGxldC4nKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgQml0R28gcmFuZ2UgcHJvb2YgYW5kIHBhaWxsaWVyIHByb29mIGNoYWxsZW5nZVxuICAgIGNvbnN0IGNyZWF0ZUJpdGdvQ2hhbGxlbmdlUmVzcG9uc2UgPSBhd2FpdCBnZXRUeFJlcXVlc3RDaGFsbGVuZ2UoXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgaW5kZXgudG9TdHJpbmcoKSxcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgd2FsbGV0UGFpbGxpZXJNb2R1bHVzLFxuICAgICAgcmVxSWRcbiAgICApO1xuXG4gICAgY29uc3QgYml0Z29Ub0VudGVycHJpc2VQYWlsbGllckNoYWxsZW5nZSA9IHsgcDogY3JlYXRlQml0Z29DaGFsbGVuZ2VSZXNwb25zZS5wIH07XG4gICAgY29uc3QgZW50ZXJwcmlzZVRvQml0Z29QYWlsbGllckNoYWxsZW5nZSA9IEVjZHNhVHlwZXMuc2VyaWFsaXplUGFpbGxpZXJDaGFsbGVuZ2Uoe1xuICAgICAgcDogYXdhaXQgRWNkc2FQYWlsbGllclByb29mLmdlbmVyYXRlUChoZXhUb0JpZ0ludChjcmVhdGVCaXRnb0NoYWxsZW5nZVJlc3BvbnNlLm4pKSxcbiAgICB9KTtcblxuICAgIC8vIFRPRE8oQkctNzg3NjQpOiBvbmNlIHRoZSBwYWlsbGllciBwcm9vZnMgYXJlIGNvbXBsZXRlLCByZWR1Y2UgY2hhbGxlbmdlIGNyZWF0aW9uIHRvIG9uZSBBUEkgY2FsbFxuICAgIGNvbnN0IHdhbGxldENoYWxsZW5nZXMgPSBhd2FpdCB0aGlzLndhbGxldC5nZXRDaGFsbGVuZ2VzRm9yRWNkc2FTaWduaW5nKCk7XG5cbiAgICBjb25zdCBjaGFsbGVuZ2VWZXJpZmllclVzZXJJZCA9IHdhbGxldENoYWxsZW5nZXMuY3JlYXRlZEJ5O1xuICAgIGNvbnN0IGFkbWluU2lnbmluZ0tleVJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnby5nZXRTaWduaW5nS2V5Rm9yVXNlcihlbnRlcnByaXNlSWQsIGNoYWxsZW5nZVZlcmlmaWVyVXNlcklkKTtcbiAgICBjb25zdCBwdWJrZXlPZkFkbWluRWNkaEtleUhleCA9IGFkbWluU2lnbmluZ0tleVJlc3BvbnNlLmRlcml2ZWRQdWJrZXk7XG5cbiAgICAvLyBWZXJpZnkgZW50ZXJwcmlzZSdzIGNoYWxsZW5nZSBpcyBzaWduZWQgYnkgdGhlIHJlc3BlY3RpdmUgYWRtaW5zIGVjZGgga2V5Y2hhaW5cbiAgICBjb25zdCBlbnRlcnByaXNlUmF3Q2hhbGxlbmdlID0ge1xuICAgICAgbnRpbGRlOiB3YWxsZXRDaGFsbGVuZ2VzLmVudGVycHJpc2VDaGFsbGVuZ2UubnRpbGRlLFxuICAgICAgaDE6IHdhbGxldENoYWxsZW5nZXMuZW50ZXJwcmlzZUNoYWxsZW5nZS5oMSxcbiAgICAgIGgyOiB3YWxsZXRDaGFsbGVuZ2VzLmVudGVycHJpc2VDaGFsbGVuZ2UuaDIsXG4gICAgfTtcbiAgICBjb25zdCBhZG1pblNpZ25hdHVyZU9uRW50Q2hhbGxlbmdlOiBzdHJpbmcgPSB3YWxsZXRDaGFsbGVuZ2VzLmVudGVycHJpc2VDaGFsbGVuZ2UudmVyaWZpZXJzLmFkbWluU2lnbmF0dXJlO1xuICAgIGlmIChcbiAgICAgICF2ZXJpZnlFY2RoU2lnbmF0dXJlKFxuICAgICAgICBFY2RzYVV0aWxzLmdldE1lc3NhZ2VUb1NpZ25Gcm9tQ2hhbGxlbmdlKGVudGVycHJpc2VSYXdDaGFsbGVuZ2UpLFxuICAgICAgICBhZG1pblNpZ25hdHVyZU9uRW50Q2hhbGxlbmdlLFxuICAgICAgICBCdWZmZXIuZnJvbShwdWJrZXlPZkFkbWluRWNkaEtleUhleCwgJ2hleCcpXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFkbWluIHNpZ25hdHVyZSBmb3IgZW50ZXJwcmlzZSBjaGFsbGVuZ2UgaXMgbm90IHZhbGlkLiBQbGVhc2UgY29udGFjdCB5b3VyIGVudGVycHJpc2UgYWRtaW4uYCk7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIEJpdEdvIGNoYWxsZW5nZSdzIFpLIHByb29mcyBoYXZlIGJlZW4gdmVyaWZpZWQgYnkgdGhlIGFkbWluXG4gICAgY29uc3QgYml0Z29DaGFsbGVuZ2U6IFR4UmVxdWVzdENoYWxsZW5nZVJlc3BvbnNlID0ge1xuICAgICAgbnRpbGRlOiB3YWxsZXRDaGFsbGVuZ2VzLmJpdGdvQ2hhbGxlbmdlLm50aWxkZSxcbiAgICAgIGgxOiB3YWxsZXRDaGFsbGVuZ2VzLmJpdGdvQ2hhbGxlbmdlLmgxLFxuICAgICAgaDI6IHdhbGxldENoYWxsZW5nZXMuYml0Z29DaGFsbGVuZ2UuaDIsXG4gICAgICBwOiBiaXRnb1RvRW50ZXJwcmlzZVBhaWxsaWVyQ2hhbGxlbmdlLnAsXG4gICAgICBuOiBjcmVhdGVCaXRnb0NoYWxsZW5nZVJlc3BvbnNlLm4sXG4gICAgfTtcbiAgICBjb25zdCBhZG1pblZlcmlmaWNhdGlvblNpZ25hdHVyZUZvckJpdEdvQ2hhbGxlbmdlID0gd2FsbGV0Q2hhbGxlbmdlcy5iaXRnb0NoYWxsZW5nZS52ZXJpZmllcnMuYWRtaW5TaWduYXR1cmU7XG4gICAgaWYgKFxuICAgICAgIXZlcmlmeUVjZGhTaWduYXR1cmUoXG4gICAgICAgIEVjZHNhVXRpbHMuZ2V0TWVzc2FnZVRvU2lnbkZyb21DaGFsbGVuZ2UoYml0Z29DaGFsbGVuZ2UpLFxuICAgICAgICBhZG1pblZlcmlmaWNhdGlvblNpZ25hdHVyZUZvckJpdEdvQ2hhbGxlbmdlLFxuICAgICAgICBCdWZmZXIuZnJvbShwdWJrZXlPZkFkbWluRWNkaEtleUhleCwgJ2hleCcpXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFkbWluIHNpZ25hdHVyZSBmb3IgQml0R28ncyBjaGFsbGVuZ2UgaXMgbm90IHZhbGlkLiBQbGVhc2UgY29udGFjdCB5b3VyIGVudGVycHJpc2UgYWRtaW4uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVycHJpc2VDaGFsbGVuZ2U6IHtcbiAgICAgICAgLi4uZW50ZXJwcmlzZVJhd0NoYWxsZW5nZSxcbiAgICAgICAgcDogZW50ZXJwcmlzZVRvQml0Z29QYWlsbGllckNoYWxsZW5nZS5wLFxuICAgICAgfSxcbiAgICAgIGJpdGdvQ2hhbGxlbmdlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhlIHUtdmFsdWUgcHJvb2ZzIGFuZCBHUEcga2V5cyB1c2VkIGluIGdlbmVyYXRpbmcgYSBUU1MgRUNEU0Egd2FsbGV0LlxuICAgKiBAcGFyYW0gdXNlckdwZ1B1YiBUaGUgdXNlcidzIHB1YmxpYyBHUEcga2V5IGZvciBlbmNyeXB0aW9uIGJldHdlZW4gdXNlci9zZXJ2ZXJcbiAgICogQHBhcmFtIGJhY2t1cEdwZ1B1YiBUaGUgYmFja3VwJ3MgcHVibGljIEdQRyBrZXkgZm9yIGVuY3J5cHRpb24gYmV0d2VlbiBiYWNrdXAvc2VydmVyXG4gICAqIEBwYXJhbSBiaXRnb0tleWNoYWluIHByZXZpb3VzbHkgY3JlYXRlZCBCaXRHbyBrZXljaGFpbjsgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdXNlciBhbmQgYmFja3VwIGtleSBzaGFyZXNcbiAgICogQHBhcmFtIGRlY3J5cHRlZFNoYXJlIFRoZSBkZWNyeXB0ZWQgYml0Z28tdG8tdXNlci9iYWNrdXAgcHJpdmF0ZSBzaGFyZSByZXRyaWV2ZWQgZnJvbSB0aGUga2V5Y2hhaW5cbiAgICogQHBhcmFtIHZlcmlmaWVySW5kZXggVGhlIGluZGV4IG9mIHRoZSBwYXJ0eSB0byB2ZXJpZnk6IDEgPSB1c2VyLCAyID0gYmFja3VwXG4gICAqL1xuICBhc3luYyB2ZXJpZnlXYWxsZXRTaWduYXR1cmVzKFxuICAgIHVzZXJHcGdQdWI6IHN0cmluZyxcbiAgICBiYWNrdXBHcGdQdWI6IHN0cmluZyxcbiAgICBiaXRnb0tleWNoYWluOiBLZXljaGFpbixcbiAgICBkZWNyeXB0ZWRTaGFyZTogc3RyaW5nLFxuICAgIHZlcmlmaWVySW5kZXg6IDEgfCAyXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGFzc2VydChiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluKTtcbiAgICBhc3NlcnQoYml0Z29LZXljaGFpbi53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzKTtcblxuICAgIGNvbnN0IGJpdGdvR3BnS2V5ID0gKGF3YWl0IGdldEJpdGdvR3BnUHViS2V5KHRoaXMuYml0Z28pKS5tcGNWMTtcbiAgICBjb25zdCB1c2VyS2V5UHViID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ1B1YiB9KTtcbiAgICBjb25zdCB1c2VyS2V5SWQgPSB1c2VyS2V5UHViLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpO1xuICAgIGNvbnN0IGJhY2t1cEtleVB1YiA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IGJhY2t1cEdwZ1B1YiB9KTtcbiAgICBjb25zdCBiYWNrdXBLZXlJZCA9IGJhY2t1cEtleVB1Yi5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKTtcblxuICAgIGNvbnN0IHdhbGxldFNpZ25hdHVyZXMgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXlzKHsgYXJtb3JlZEtleXM6IGJpdGdvS2V5Y2hhaW4ud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyB9KTtcbiAgICBpZiAod2FsbGV0U2lnbmF0dXJlcy5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB3YWxsZXQgc2lnbmF0dXJlcycpO1xuICAgIH1cbiAgICBpZiAodXNlcktleUlkICE9PSB3YWxsZXRTaWduYXR1cmVzWzBdLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZpcnN0IHdhbGxldCBzaWduYXR1cmUncyBmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCBwYXNzZWQgdXNlciBncGcga2V5J3MgZmluZ2VycHJpbnRgKTtcbiAgICB9XG4gICAgaWYgKGJhY2t1cEtleUlkICE9PSB3YWxsZXRTaWduYXR1cmVzWzFdLmtleVBhY2tldC5nZXRGaW5nZXJwcmludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHNlY29uZCB3YWxsZXQgc2lnbmF0dXJlJ3MgZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIGJhY2t1cCBncGcga2V5J3MgZmluZ2VycHJpbnRgKTtcbiAgICB9XG5cbiAgICBhd2FpdCB2ZXJpZnlXYWxsZXRTaWduYXR1cmUoe1xuICAgICAgd2FsbGV0U2lnbmF0dXJlOiB3YWxsZXRTaWduYXR1cmVzWzBdLFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4sXG4gICAgICB1c2VyS2V5SWQsXG4gICAgICBiYWNrdXBLZXlJZCxcbiAgICAgIGJpdGdvUHViOiBiaXRnb0dwZ0tleSxcbiAgICAgIGRlY3J5cHRlZFNoYXJlLFxuICAgICAgdmVyaWZpZXJJbmRleCxcbiAgICB9KTtcblxuICAgIGF3YWl0IHZlcmlmeVdhbGxldFNpZ25hdHVyZSh7XG4gICAgICB3YWxsZXRTaWduYXR1cmU6IHdhbGxldFNpZ25hdHVyZXNbMV0sXG4gICAgICBjb21tb25LZXljaGFpbjogYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbixcbiAgICAgIHVzZXJLZXlJZCxcbiAgICAgIGJhY2t1cEtleUlkLFxuICAgICAgYml0Z29QdWI6IGJpdGdvR3BnS2V5LFxuICAgICAgZGVjcnlwdGVkU2hhcmUsXG4gICAgICB2ZXJpZmllckluZGV4LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIGEgY2hhbGxlbmdlIHdpdGggdGhlIHByb3ZpZGVkIHYxIGVjZGgga2V5IGF0IGEgZGVyaXZlZCBwYXRoXG4gICAqIEBwYXJhbSBjaGFsbGVuZ2UgY2hhbGxlbmdlIHRvIHNpZ25cbiAgICogQHBhcmFtIGVjZGhYcHJ2IHhwcnYgb2YgdGhlIGVjZGgga2V5XG4gICAqIEBwYXJhbSBkZXJpdmF0aW9uUGF0aCB0aGUgZGVyaXZlZCBwYXRoIGF0IHdoaWNoIHRoZSBlY2RoIGtleSB3aWxsIHNpZ25cbiAgICovXG4gIHN0YXRpYyBzaWduQ2hhbGxlbmdlKGNoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlLCBlY2RoWHBydjogc3RyaW5nLCBkZXJpdmF0aW9uUGF0aDogc3RyaW5nKTogQnVmZmVyIHtcbiAgICBjb25zdCBtZXNzYWdlVG9TaWduID0gdGhpcy5nZXRNZXNzYWdlVG9TaWduRnJvbUNoYWxsZW5nZShjaGFsbGVuZ2UpO1xuICAgIHJldHVybiBzaWduTWVzc2FnZVdpdGhEZXJpdmVkRWNkaEtleShtZXNzYWdlVG9TaWduLCBlY2RoWHBydiwgZGVyaXZhdGlvblBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGNoYWxsZW5nZSB0byBhIGNvbW1vbiBtZXNzYWdlIGZvcm1hdCB3aGljaCBjYW4gYmUgc2lnbmVkLlxuICAgKiBAcGFyYW0gY2hhbGxlbmdlXG4gICAqL1xuICBzdGF0aWMgZ2V0TWVzc2FnZVRvU2lnbkZyb21DaGFsbGVuZ2UoY2hhbGxlbmdlOiBFY2RzYVR5cGVzLlNlcmlhbGl6ZWROdGlsZGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBjaGFsbGVuZ2UubnRpbGRlLmNvbmNhdChjaGFsbGVuZ2UuaDEpLmNvbmNhdChjaGFsbGVuZ2UuaDIpO1xuICB9XG5cbiAgLyoqXG4gICBWZXJpZmllcyBaSyBwcm9vZnMgb2YgQml0R28ncyBjaGFsbGVuZ2VzIGZvciBib3RoIG5pdHJvIGFuZCBpbnN0aXR1dGlvbmFsIEhTTXNcbiAgIHdoaWNoIGFyZSBmZXRjaGVkIGZyb20gdGhlIFdQIEFQSS5cbiAgICovXG4gIHN0YXRpYyBhc3luYyB2ZXJpZnlCaXRHb0NoYWxsZW5nZXMoYml0Z29DaGFsbGVuZ2VzOiBHZXRCaXRHb0NoYWxsZW5nZXNBcGkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBWZXJpZnkgaW5zdGl0dXRpb25hbCBoc20gY2hhbGxlbmdlIHByb29mXG4gICAgY29uc3QgaW5zdENoYWxsZW5nZVZlcmlmaWVkID0gYXdhaXQgdGhpcy52ZXJpZnlCaXRHb0NoYWxsZW5nZSh7XG4gICAgICBudGlsZGU6IGJpdGdvQ2hhbGxlbmdlcy5iaXRnb0luc3RpdHV0aW9uYWxIc20ubnRpbGRlLFxuICAgICAgaDE6IGJpdGdvQ2hhbGxlbmdlcy5iaXRnb0luc3RpdHV0aW9uYWxIc20uaDEsXG4gICAgICBoMjogYml0Z29DaGFsbGVuZ2VzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5oMixcbiAgICAgIG50aWxkZVByb29mOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLm50aWxkZVByb29mLFxuICAgIH0pO1xuXG4gICAgLy8gVmVyaWZ5IG5pdHJvIGhzbSBjaGFsbGVuZ2UgcHJvb2ZcbiAgICBjb25zdCBuaXRyb0NoYWxsZW5nZVZlcmlmaWVkID0gYXdhaXQgdGhpcy52ZXJpZnlCaXRHb0NoYWxsZW5nZSh7XG4gICAgICBudGlsZGU6IGJpdGdvQ2hhbGxlbmdlcy5iaXRnb05pdHJvSHNtLm50aWxkZSxcbiAgICAgIGgxOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29OaXRyb0hzbS5oMSxcbiAgICAgIGgyOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29OaXRyb0hzbS5oMixcbiAgICAgIG50aWxkZVByb29mOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29OaXRyb0hzbS5udGlsZGVQcm9vZixcbiAgICB9KTtcblxuICAgIHJldHVybiBpbnN0Q2hhbGxlbmdlVmVyaWZpZWQgJiYgbml0cm9DaGFsbGVuZ2VWZXJpZmllZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBaSyBwcm9vZiBmb3IgYSBzaW5nbGUgQml0R28gY2hhbGxlbmdlXG4gICAqIEBwYXJhbSBiaXRnb0NoYWxsZW5nZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHZlcmlmeUJpdEdvQ2hhbGxlbmdlKGJpdGdvQ2hhbGxlbmdlOiBFY2RzYVR5cGVzLlNlcmlhbGl6ZWROdGlsZGVXaXRoUHJvb2ZzKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZSA9IEVjZHNhVHlwZXMuZGVzZXJpYWxpemVOdGlsZGVXaXRoUHJvb2ZzKGJpdGdvQ2hhbGxlbmdlKTtcbiAgICBjb25zdCBudGlsZGVQcm9vZkgxV3J0SDJWZXJpZmllZCA9IGF3YWl0IEVjZHNhUmFuZ2VQcm9vZi52ZXJpZnlOdGlsZGVQcm9vZihcbiAgICAgIHtcbiAgICAgICAgbnRpbGRlOiBkZXNlcmlhbGl6ZWRJbnN0Q2hhbGxlbmdlLm50aWxkZSxcbiAgICAgICAgaDE6IGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UuaDEsXG4gICAgICAgIGgyOiBkZXNlcmlhbGl6ZWRJbnN0Q2hhbGxlbmdlLmgyLFxuICAgICAgfSxcbiAgICAgIGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDFXcnRIMlxuICAgICk7XG4gICAgY29uc3QgbnRpbGRlUHJvb2ZIMldydEgxVmVyaWZpZWQgPSBhd2FpdCBFY2RzYVJhbmdlUHJvb2YudmVyaWZ5TnRpbGRlUHJvb2YoXG4gICAgICB7XG4gICAgICAgIG50aWxkZTogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5udGlsZGUsXG4gICAgICAgIGgxOiBkZXNlcmlhbGl6ZWRJbnN0Q2hhbGxlbmdlLmgyLFxuICAgICAgICBoMjogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5oMSxcbiAgICAgIH0sXG4gICAgICBkZXNlcmlhbGl6ZWRJbnN0Q2hhbGxlbmdlLm50aWxkZVByb29mLmgyV3J0SDFcbiAgICApO1xuICAgIHJldHVybiBudGlsZGVQcm9vZkgxV3J0SDJWZXJpZmllZCAmJiBudGlsZGVQcm9vZkgyV3J0SDFWZXJpZmllZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBiaXRnbyBjaGFsbGVuZ2VzIGZvciBib3RoIG5pdHJvIGFuZCBpbnN0aXR1dGlvbmFsIEhTTXMgZnJvbSBXUCBBUEkuXG4gICAqIEBwYXJhbSBiaXRnb1xuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldEJpdEdvQ2hhbGxlbmdlcyhiaXRnbzogQml0R29CYXNlKTogUHJvbWlzZTxHZXRCaXRHb0NoYWxsZW5nZXNBcGk+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBiaXRnby5nZXQoYml0Z28udXJsKCcvdHNzL2VjZHNhL2NoYWxsZW5nZXMnLCAyKSkuc2VuZCgpLnJlc3VsdCgpO1xuICAgIGlmIChcbiAgICAgICFyZXMuYml0Z29OaXRyb0hzbSB8fFxuICAgICAgIXJlcy5iaXRnb05pdHJvSHNtLm50aWxkZSB8fFxuICAgICAgIXJlcy5iaXRnb05pdHJvSHNtLmgxIHx8XG4gICAgICAhcmVzLmJpdGdvTml0cm9Ic20uaDIgfHxcbiAgICAgICFyZXMuYml0Z29OaXRyb0hzbS5udGlsZGVQcm9vZiB8fFxuICAgICAgIXJlcy5iaXRnb0luc3RpdHV0aW9uYWxIc20gfHxcbiAgICAgICFyZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLm50aWxkZSB8fFxuICAgICAgIXJlcy5iaXRnb0luc3RpdHV0aW9uYWxIc20uaDEgfHxcbiAgICAgICFyZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLmgyIHx8XG4gICAgICAhcmVzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5udGlsZGVQcm9vZlxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBCaXRHbyBjaGFsbGVuZ2UgcHJvb2YgdG8gYmUgcHJlc2VudC4gQ29udGFjdCBzdXBwb3J0QGJpdGdvLmNvbS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIEJpdEdvJ3MgcHJvb2ZzIGZyb20gQVBJIGFuZCBzaWducyB0aGVtIGlmIHRoZSBwcm9vZnMgYXJlIHZhbGlkLlxuICAgKiBAcGFyYW0gYml0Z29cbiAgICogQHBhcmFtIGVudGVycHJpc2VJZFxuICAgKiBAcGFyYW0gdXNlclBhc3N3b3JkXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0VmVyaWZ5QW5kU2lnbkJpdEdvQ2hhbGxlbmdlcyhcbiAgICBiaXRnbzogQml0R29CYXNlLFxuICAgIGVudGVycHJpc2VJZDogc3RyaW5nLFxuICAgIHVzZXJQYXNzd29yZDogc3RyaW5nXG4gICk6IFByb21pc2U8Qml0R29Qcm9vZlNpZ25hdHVyZXM+IHtcbiAgICAvLyBGZXRjaCBCaXRHbydzIGNoYWxsZW5nZSBhbmQgdmVyaWZ5XG4gICAgY29uc3QgYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcyA9IGF3YWl0IEVjZHNhVXRpbHMuZ2V0Qml0R29DaGFsbGVuZ2VzKGJpdGdvKTtcbiAgICBpZiAoIShhd2FpdCBFY2RzYVV0aWxzLnZlcmlmeUJpdEdvQ2hhbGxlbmdlcyhiaXRnb0NoYWxsZW5nZXNXaXRoUHJvb2ZzKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byB2ZXJpZnkgQml0R28ncyBjaGFsbGVuZ2UgbmVlZGVkIHRvIGVuYWJsZSBFQ0RTQSBzaWduaW5nLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0QGJpdGdvLmNvbWBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBFY2RzYVV0aWxzLnNpZ25CaXRnb0NoYWxsZW5nZXMoYml0Z28sIGVudGVycHJpc2VJZCwgdXNlclBhc3N3b3JkLCBiaXRnb0NoYWxsZW5nZXNXaXRoUHJvb2ZzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIEJpdGdvJ3MgcHJvb2ZzLCB2ZXJpZmljYXRpb24gb2YgcHJvb2ZzIGlzIGxlZnQgdG8gdGhlIGNhbGxlclxuICAgKiBAcGFyYW0gYml0Z29cbiAgICogQHBhcmFtIGVudGVycHJpc2VJZFxuICAgKiBAcGFyYW0gdXNlclBhc3N3b3JkXG4gICAqIEBwYXJhbSBiaXRnb0NoYWxsZW5nZXNXaXRoUHJvb2ZzIE9wdGlvbmFsbHkgcHJvdmlkZSBCaXRnbyBDaGFsbGFlbmdlICYgUHJvb2ZzIGluc3RlYWQgb2YgZmV0Y2hpbmcgZnJvbSBBUElcbiAgICovXG4gIHN0YXRpYyBhc3luYyBzaWduQml0Z29DaGFsbGVuZ2VzKFxuICAgIGJpdGdvOiBCaXRHb0Jhc2UsXG4gICAgZW50ZXJwcmlzZUlkOiBzdHJpbmcsXG4gICAgdXNlclBhc3N3b3JkOiBzdHJpbmcsXG4gICAgYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcz86IEdldEJpdEdvQ2hhbGxlbmdlc0FwaVxuICApOiBQcm9taXNlPEJpdEdvUHJvb2ZTaWduYXR1cmVzPiB7XG4gICAgLy8gZmV0Y2ggY2hhbGxlbmdlICYgcHJvb2YgaWYgbm9uZSBhcmUgcHJvdmlkZWRcbiAgICBjb25zdCBjaGFsbGVuZ2VzV2l0aFByb29mcyA9IGJpdGdvQ2hhbGxlbmdlc1dpdGhQcm9vZnNcbiAgICAgID8gYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mc1xuICAgICAgOiBhd2FpdCBFY2RzYVV0aWxzLmdldEJpdEdvQ2hhbGxlbmdlcyhiaXRnbyk7XG5cbiAgICAvLyBGZXRjaCB1c2VyJ3MgZWNkaCBwdWJsaWMga2V5Y2hhaW4gbmVlZGVkIGZvciBzaWduaW5nIHRoZSBjaGFsbGVuZ2VzXG4gICAgY29uc3QgZWNkaEtleXBhaXIgPSBhd2FpdCBiaXRnby5nZXRFY2RoS2V5cGFpclByaXZhdGUodXNlclBhc3N3b3JkLCBlbnRlcnByaXNlSWQpO1xuXG4gICAgY29uc3Qgc2lnbmVkQml0R29JbnN0Q2hhbGxlbmdlID0gRWNkc2FVdGlscy5zaWduQ2hhbGxlbmdlKFxuICAgICAgY2hhbGxlbmdlc1dpdGhQcm9vZnMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLFxuICAgICAgZWNkaEtleXBhaXIueHBydixcbiAgICAgIGVjZGhLZXlwYWlyLmRlcml2YXRpb25QYXRoXG4gICAgKTtcbiAgICBjb25zdCBzaWduZWRCaXRHb05pdHJvQ2hhbGxlbmdlID0gRWNkc2FVdGlscy5zaWduQ2hhbGxlbmdlKFxuICAgICAgY2hhbGxlbmdlc1dpdGhQcm9vZnMuYml0Z29OaXRyb0hzbSxcbiAgICAgIGVjZGhLZXlwYWlyLnhwcnYsXG4gICAgICBlY2RoS2V5cGFpci5kZXJpdmF0aW9uUGF0aFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJpdGdvSW5zdEhzbUFkbWluU2lnbmF0dXJlOiBzaWduZWRCaXRHb0luc3RDaGFsbGVuZ2UsXG4gICAgICBiaXRnb05pdHJvSHNtQWRtaW5TaWduYXR1cmU6IHNpZ25lZEJpdEdvTml0cm9DaGFsbGVuZ2UsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIG5lZWRlZCB0byBlbmFibGUgZWNkc2Egc2lnbmluZyBvbiB0aGUgZW50ZXJwcmlzZS5cbiAgICogSXQgcmVjZWl2ZXMgdGhlIGVudGVycHJpc2UgY2hhbGxlbmdlIGFuZCBzaWduYXR1cmVzIG9mIHZlcmlmaWVkIGJpdGdvIHByb29mc1xuICAgKiBhbmQgdXBsb2FkcyB0aGVtIG9uIHRoZSBlbnRlcnByaXNlLlxuICAgKiBAcGFyYW0gYml0Z29cbiAgICogQHBhcmFtIGVudElkIC0gZW50ZXJwcmlzZSBpZCB0byBlbmFibGUgZWNkc2Egc2lnbmluZyBvblxuICAgKiBAcGFyYW0gdXNlclBhc3N3b3JkIC0gZW50ZXJwcmlzZSBhZG1pbidzIGxvZ2luIHB3XG4gICAqIEBwYXJhbSBiaXRnb0luc3RDaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZSAtIHNpZ25hdHVyZSBvbiBiaXRnbydzIGluc3RpdHV0aW9uYWwgSFNNIGNoYWxsZW5nZSBhZnRlciB2ZXJpZmljYXRpb25cbiAgICogQHBhcmFtIGJpdGdvTml0cm9DaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZSAtIHNpZ25hdHVyZSBvbiBiaXRnbydzIG5pdHJvIEhTTSBjaGFsbGVuZ2UgYWZ0ZXIgdmVyaWZpY2F0aW9uXG4gICAqIEBwYXJhbSBjaGFsbGVuZ2UgLSBvcHRpb25hbGx5IHVzZSB0aGUgY2hhbGxlbmdlIGZvciBlbnRlcnByaXNlIGNoYWxsZW5nZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluaXRpYXRlQ2hhbGxlbmdlc0ZvckVudGVycHJpc2UoXG4gICAgYml0Z286IEJpdEdvQmFzZSxcbiAgICBlbnRJZDogc3RyaW5nLFxuICAgIHVzZXJQYXNzd29yZDogc3RyaW5nLFxuICAgIGJpdGdvSW5zdENoYWxsZW5nZVByb29mU2lnbmF0dXJlOiBCdWZmZXIsXG4gICAgYml0Z29OaXRyb0NoYWxsZW5nZVByb29mU2lnbmF0dXJlOiBCdWZmZXIsXG4gICAgb3BlblNTTEJ5dGVzOiBVaW50OEFycmF5LFxuICAgIGNoYWxsZW5nZT86IEVjZHNhVHlwZXMuRGVzZXJpYWxpemVkTnRpbGRlV2l0aFByb29mc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBGZXRjaCB1c2VyJ3MgZWNkaCBwdWJsaWMga2V5Y2hhaW4gbmVlZGVkIGZvciBzaWduaW5nIHRoZSBjaGFsbGVuZ2VzXG4gICAgY29uc3QgZWNkaEtleXBhaXIgPSBhd2FpdCBiaXRnby5nZXRFY2RoS2V5cGFpclByaXZhdGUodXNlclBhc3N3b3JkLCBlbnRJZCk7XG5cbiAgICAvLyBHZW5lcmF0ZSBhbmQgc2lnbiBlbnRlcnByaXNlIGNoYWxsZW5nZVxuICAgIGNvbnN0IGVudENoYWxsZW5nZVdpdGhQcm9vZiA9XG4gICAgICBjaGFsbGVuZ2UgPz8gKGF3YWl0IEVjZHNhUmFuZ2VQcm9vZi5nZW5lcmF0ZU50aWxkZShvcGVuU1NMQnl0ZXMsIG1pbk1vZHVsdXNCaXRMZW5ndGgpKTtcbiAgICBjb25zdCBzZXJpYWxpemVkRW50Q2hhbGxlbmdlV2l0aFByb29mID0gRWNkc2FUeXBlcy5zZXJpYWxpemVOdGlsZGVXaXRoUHJvb2ZzKGVudENoYWxsZW5nZVdpdGhQcm9vZik7XG4gICAgY29uc3Qgc2lnbmVkRW50ZXJwcmlzZUNoYWxsZW5nZSA9IEVjZHNhVXRpbHMuc2lnbkNoYWxsZW5nZShcbiAgICAgIHNlcmlhbGl6ZWRFbnRDaGFsbGVuZ2VXaXRoUHJvb2YsXG4gICAgICBlY2RoS2V5cGFpci54cHJ2LFxuICAgICAgZWNkaEtleXBhaXIuZGVyaXZhdGlvblBhdGhcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy51cGxvYWRDaGFsbGVuZ2VzVG9FbnRlcnByaXNlKFxuICAgICAgYml0Z28sXG4gICAgICBlbnRJZCxcbiAgICAgIHNlcmlhbGl6ZWRFbnRDaGFsbGVuZ2VXaXRoUHJvb2YsXG4gICAgICBzaWduZWRFbnRlcnByaXNlQ2hhbGxlbmdlLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIGJpdGdvSW5zdENoYWxsZW5nZVByb29mU2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIGJpdGdvTml0cm9DaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZS50b1N0cmluZygnaGV4JylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZHMgdGhlIHNpZ25lZCBjaGFsbGVuZ2VzIGFuZCB0aGVpciBwcm9vZnMgb24gdGhlIGVudGVycHJpc2UuXG4gICAqIFRoaXMgaW5pdGlhdGVzIGVjZHNhIHNpZ25pbmcgZm9yIHRoZSBlbnRlcnByaXNlIHVzZXJzLlxuICAgKiBAcGFyYW0gYml0Z29cbiAgICogQHBhcmFtIGVudElkIC0gZW50ZXJwcmlzZSB0byBlbmFibGUgZWNkc2Egc2lnbmluZyBvblxuICAgKiBAcGFyYW0gZW50Q2hhbGxlbmdlIC0gY2xpZW50IHNpZGUgZ2VuZXJhdGVkIGVudCBjaGFsbGVuZ2Ugd2l0aCBaSyBwcm9vZnNcbiAgICogQHBhcmFtIGVudENoYWxsZW5nZVNpZ25hdHVyZSAtIHNpZ25hdHVyZSBvbiBlbnRlcnByaXNlIGNoYWxsZW5nZVxuICAgKiBAcGFyYW0gYml0Z29JbnRDaGFsbGVuZ2VTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gQml0R28ncyBpbnN0aXR1dGlvbmFsIEhTTSBjaGFsbGVuZ2VcbiAgICogQHBhcmFtIGJpdGdvTml0cm9DaGFsbGVuZ2VTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gQml0R28ncyBuaXRybyBIU00gY2hhbGxlbmdlXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgdXBsb2FkQ2hhbGxlbmdlc1RvRW50ZXJwcmlzZShcbiAgICBiaXRnbzogQml0R29CYXNlLFxuICAgIGVudElkOiBzdHJpbmcsXG4gICAgZW50Q2hhbGxlbmdlOiBFY2RzYVR5cGVzLlNlcmlhbGl6ZWROdGlsZGUgfCBFY2RzYVR5cGVzLlNlcmlhbGl6ZWROdGlsZGVXaXRoUHJvb2ZzLFxuICAgIGVudENoYWxsZW5nZVNpZ25hdHVyZTogc3RyaW5nLFxuICAgIGJpdGdvSW50Q2hhbGxlbmdlU2lnbmF0dXJlOiBzdHJpbmcsXG4gICAgYml0Z29OaXRyb0NoYWxsZW5nZVNpZ25hdHVyZTogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICBlbnRlcnByaXNlOiB7XG4gICAgICAgIG50aWxkZTogZW50Q2hhbGxlbmdlLm50aWxkZSxcbiAgICAgICAgaDE6IGVudENoYWxsZW5nZS5oMSxcbiAgICAgICAgaDI6IGVudENoYWxsZW5nZS5oMixcbiAgICAgICAgdmVyaWZpZXJzOiB7XG4gICAgICAgICAgYWRtaW5TaWduYXR1cmU6IGVudENoYWxsZW5nZVNpZ25hdHVyZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBiaXRnb0luc3RpdHV0aW9uYWxIc206IHtcbiAgICAgICAgdmVyaWZpZXJzOiB7XG4gICAgICAgICAgYWRtaW5TaWduYXR1cmU6IGJpdGdvSW50Q2hhbGxlbmdlU2lnbmF0dXJlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJpdGdvTml0cm9Ic206IHtcbiAgICAgICAgdmVyaWZpZXJzOiB7XG4gICAgICAgICAgYWRtaW5TaWduYXR1cmU6IGJpdGdvTml0cm9DaGFsbGVuZ2VTaWduYXR1cmUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgaWYgKCdudGlsZGVQcm9vZicgaW4gZW50Q2hhbGxlbmdlKSB7XG4gICAgICBib2R5LmVudGVycHJpc2VbJ250aWxkZVByb29mJ10gPSBlbnRDaGFsbGVuZ2UubnRpbGRlUHJvb2Y7XG4gICAgfVxuICAgIGF3YWl0IGJpdGdvXG4gICAgICAucHV0KGJpdGdvLnVybChgL2VudGVycHJpc2UvJHtlbnRJZH0vdHNzY29uZmlnL2VjZHNhL2NoYWxsZW5nZWAsIDIpKVxuICAgICAgLnNlbmQoYm9keSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxufVxuIl19
888
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VjZHNhL2VjZHNhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBZ0M7QUFDaEMsaURBQW1DO0FBR25DLG9EQUF1SDtBQUN2SCw4Q0FBd0M7QUFFeEMseURBQStEO0FBRS9ELCtEQUFvRTtBQVVwRSw0Q0Flc0I7QUFDdEIsc0NBQTRDO0FBQzVDLG9EQUFrSDtBQUNsSCxxREFBNkY7QUFFN0YsNENBQTBEO0FBQzFELG9EQUFpRTtBQUNqRSx3Q0FBbUY7QUFDbkYsZ0RBQTREO0FBQzVELDhDQUs0QjtBQUM1QixpQ0FBd0M7QUFHeEMsTUFBTSxhQUFhLEdBQUcsZUFBWSxDQUFDLGFBQWEsQ0FBQztBQUVqRCxrQkFBa0I7QUFDbEIsTUFBYSxVQUFXLFNBQVEscUJBQWM7SUFDNUMsS0FBSyxDQUFDLCtCQUErQixDQUNuQyxLQUFhLEVBQ2IsY0FBc0IsRUFDdEIsWUFBc0IsRUFDdEIsYUFBdUIsRUFDdkIsVUFBcUMsRUFDckMsNEJBQWlDO1FBRWpDLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxhQUFhLENBQ3BELFlBQVksRUFDWixDQUFDLEVBQ0QsNEJBQTRCLENBQUMsS0FBSyxFQUFFLEVBQ3BDLFVBQVUsQ0FDWCxDQUFDO1FBQ0YsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FDekQsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUNwRSxDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQUcsZUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxlQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENB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TUFBTTtnQkFDM0IsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUNuQixFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQ25CLFNBQVMsRUFBRTtvQkFDVCxjQUFjLEVBQUUscUJBQXFCO2lCQUN0QzthQUNGO1lBQ0QscUJBQXFCLEVBQUU7Z0JBQ3JCLFNBQVMsRUFBRTtvQkFDVCxjQUFjLEVBQUUsMEJBQTBCO2lCQUMzQzthQUNGO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLFNBQVMsRUFBRTtvQkFDVCxjQUFjLEVBQUUsNEJBQTRCO2lCQUM3QzthQUNGO1NBQ0YsQ0FBQztRQUNGLElBQUksYUFBYSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsTUFBTSxLQUFLO2FBQ1IsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxLQUFLLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDVixNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRjtBQS92Q0QsZ0NBK3ZDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgKiBhcyBvcGVucGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBFY2RzYVBhaWxsaWVyUHJvb2YsIEVjZHNhUmFuZ2VQcm9vZiwgRWNkc2FUeXBlcywgaGV4VG9CaWdJbnQsIG1pbk1vZHVsdXNCaXRMZW5ndGggfSBmcm9tICdAYml0Z28vc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgeyBFQ0RTQSwgRWNkc2EgfSBmcm9tICcuLi8uLi8uLi8uLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCB7IEFkZEtleWNoYWluT3B0aW9ucywgS2V5Y2hhaW4sIEtleVR5cGUsIFdlYmF1dGhuS2V5RW5jcnlwdGlvbkluZm8gfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbic7XG5pbXBvcnQgRUNEU0FNZXRob2RzLCB7IEVDRFNBTWV0aG9kVHlwZXMgfSBmcm9tICcuLi8uLi8uLi90c3MvZWNkc2EnO1xuaW1wb3J0IHsgS2V5Y2hhaW5zVHJpcGxldCB9IGZyb20gJy4uLy4uLy4uL2Jhc2VDb2luJztcbmltcG9ydCB7XG4gIEJpdEdvUHJvb2ZTaWduYXR1cmVzLFxuICBDcmVhdGVFY2RzYUJpdEdvS2V5Y2hhaW5QYXJhbXMsXG4gIENyZWF0ZUVjZHNhS2V5Y2hhaW5QYXJhbXMsXG4gIERlY3J5cHRhYmxlTlNoYXJlLFxuICBHZXRCaXRHb0NoYWxsZW5nZXNBcGksXG4gIEtleVNoYXJlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIEJhY2t1cEtleVNoYXJlLFxuICBCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZSxcbiAgQ3VzdG9tS1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21NdURlbHRhU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVBhaWxsaWVyTW9kdWx1c0dldHRlckZ1bmN0aW9uLFxuICBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIFJlcXVlc3RUeXBlLFxuICBUU1NQYXJhbXMsXG4gIFRTU1BhcmFtc0Zvck1lc3NhZ2UsXG4gIFRTU1BhcmFtc0Zvck1lc3NhZ2VXaXRoUHJ2LFxuICBUU1NQYXJhbXNXaXRoUHJ2LFxuICBUc3NTaWduVHhSZXF1ZXN0UGFyYW1zV2l0aFBydixcbiAgVHNzVHhSZWNpcGllbnRTb3VyY2UsXG4gIFR4UmVxdWVzdCxcbn0gZnJvbSAnLi4vYmFzZVR5cGVzJztcbmltcG9ydCB7IGdldFR4UmVxdWVzdCB9IGZyb20gJy4uLy4uLy4uL3Rzcyc7XG5pbXBvcnQgeyBBU2hhcmUsIERTaGFyZSwgRW5jcnlwdGVkTlNoYXJlLCBTZW5kU2hhcmVUeXBlLCBTU2hhcmUsIFdTaGFyZSwgT1NoYXJlIH0gZnJvbSAnLi4vLi4vLi4vdHNzL2VjZHNhL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVNoYXJlUHJvb2YsIGdlbmVyYXRlR1BHS2V5UGFpciwgZ2V0Qml0Z29HcGdQdWJLZXkgfSBmcm9tICcuLi8uLi9vcGVuZ3BnVXRpbHMnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IHZlcmlmeVdhbGxldFNpZ25hdHVyZSB9IGZyb20gJy4uLy4uLy4uL3Rzcy9lY2RzYS9lY2RzYSc7XG5pbXBvcnQgeyBzaWduTWVzc2FnZVdpdGhEZXJpdmVkRWNkaEtleSwgdmVyaWZ5RWNkaFNpZ25hdHVyZSB9IGZyb20gJy4uLy4uLy4uL2VjZGgnO1xuaW1wb3J0IHsgZ2V0VHhSZXF1ZXN0Q2hhbGxlbmdlIH0gZnJvbSAnLi4vLi4vLi4vdHNzL2NvbW1vbic7XG5pbXBvcnQge1xuICBTaGFyZUtleVBvc2l0aW9uLFxuICBUc3NFY2RzYVN0ZXAxUmV0dXJuTWVzc2FnZSxcbiAgVHNzRWNkc2FTdGVwMlJldHVybk1lc3NhZ2UsXG4gIFR4UmVxdWVzdENoYWxsZW5nZVJlc3BvbnNlLFxufSBmcm9tICcuLi8uLi8uLi90c3MvdHlwZXMnO1xuaW1wb3J0IHsgQmFzZUVjZHNhVXRpbHMgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgRW5jcnlwdGlvblZlcnNpb24sIElSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpJztcblxuY29uc3QgZW5jcnlwdE5TaGFyZSA9IEVDRFNBTWV0aG9kcy5lbmNyeXB0TlNoYXJlO1xuXG4vKiogQGluaGVyaXRkb2MgKi9cbmV4cG9ydCBjbGFzcyBFY2RzYVV0aWxzIGV4dGVuZHMgQmFzZUVjZHNhVXRpbHMge1xuICBhc3luYyBmaW5hbGl6ZUJpdGdvSGVsZEJhY2t1cEtleVNoYXJlKFxuICAgIGtleUlkOiBzdHJpbmcsXG4gICAgY29tbW9uS2V5Y2hhaW46IHN0cmluZyxcbiAgICB1c2VyS2V5U2hhcmU6IEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluLFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdGhpcmRQYXJ0eUJhY2t1cFB1YmxpY0dwZ0tleTogS2V5XG4gICk6IFByb21pc2U8Qml0Z29IZWxkQmFja3VwS2V5U2hhcmU+IHtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyVG9CYWNrdXBTaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUoXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAyLFxuICAgICAgdGhpcmRQYXJ0eUJhY2t1cFB1YmxpY0dwZ0tleS5hcm1vcigpLFxuICAgICAgdXNlckdwZ0tleVxuICAgICk7XG4gICAgY29uc3QgYml0Z29Ub0JhY2t1cEtleVNoYXJlID0gYml0Z29LZXljaGFpbi5rZXlTaGFyZXM/LmZpbmQoXG4gICAgICAoa2V5U2hhcmUpID0+IGtleVNoYXJlLmZyb20gPT09ICdiaXRnbycgJiYga2V5U2hhcmUudG8gPT09ICdiYWNrdXAnXG4gICAgKTtcbiAgICBjb25zdCB1c2VyUHVibGljU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5uU2hhcmVzWzJdLnksICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJLZXlTaGFyZS5uU2hhcmVzWzJdLmNoYWluY29kZSwgJ2hleCcpLFxuICAgIF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cEtleVNoYXJlKTtcbiAgICBjb25zdCBrZXlSZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wdXQodGhpcy5iYXNlQ29pbi51cmwoYC9rcnMvYmFja3Vwa2V5cy8ke2tleUlkfWApKVxuICAgICAgLnNlbmQoe1xuICAgICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICAga2V5U2hhcmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJvbTogJ3VzZXInLFxuICAgICAgICAgICAgdG86ICdiYWNrdXAnLFxuICAgICAgICAgICAgcHVibGljU2hhcmU6IHVzZXJQdWJsaWNTaGFyZSxcbiAgICAgICAgICAgIHByaXZhdGVTaGFyZTogZW5jcnlwdGVkVXNlclRvQmFja3VwU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGVuY3J5cHRlZFVzZXJUb0JhY2t1cFNoYXJlLnByaXZhdGVTaGFyZVByb29mLFxuICAgICAgICAgICAgdnNzUHJvb2Y6IGVuY3J5cHRlZFVzZXJUb0JhY2t1cFNoYXJlLnZzc1Byb29mLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYml0Z29Ub0JhY2t1cEtleVNoYXJlLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBpZiAoIWtleVJlc3BvbnNlIHx8ICFrZXlSZXNwb25zZS5jb21tb25LZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgYmFja3VwIGtleSB2ZXJpZmljYXRpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDoga2V5UmVzcG9uc2UuaWQsXG4gICAgICBrZXlTaGFyZXM6IGtleVJlc3BvbnNlLmtleVNoYXJlcyxcbiAgICAgIGNvbW1vbktleWNoYWluOiBrZXlSZXNwb25zZS5jb21tb25LZXljaGFpbixcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGFzeW5jIGNyZWF0ZUtleWNoYWlucyhwYXJhbXM6IHtcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW50ZXJwcmlzZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgd2ViYXV0aG5JbmZvPzogV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbztcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uO1xuICB9KTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG4gICAgY29uc3QgbSA9IDI7XG4gICAgY29uc3QgbiA9IDM7XG5cbiAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSBhd2FpdCBNUEMua2V5U2hhcmUoMSwgbSwgbik7XG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG4gICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhY2t1cEtleVNoYXJlcygpO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleSA9IGF3YWl0IHRoaXMuZ2V0QmFja3VwR3BnUHViS2V5KCk7XG5cbiAgICAvLyBHZXQgdGhlIEJpdEdvIHB1YmxpYyBrZXkgYmFzZWQgb24gdXNlci9lbnRlcnByaXNlIGZlYXR1cmUgZmxhZ3NcbiAgICAvLyBJZiBpdCBkb2Vzbid0IHdvcmssIHVzZSB0aGUgZGVmYXVsdCBwdWJsaWMga2V5IGZyb20gdGhlIGNvbnN0YW50c1xuICAgIGNvbnN0IHsgbXBjdjJQdWJsaWNLZXk6IHByaW1hcnlHcGdLZXkgfSA9IGF3YWl0IHRoaXMuZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKHBhcmFtcy5lbnRlcnByaXNlKTtcbiAgICBjb25zdCBiaXRnb1B1YmxpY0dwZ0tleSA9IHByaW1hcnlHcGdLZXkgPz8gdGhpcy5iaXRnb1B1YmxpY0dwZ0tleTtcblxuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4oe1xuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBlbnRlcnByaXNlOiBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICB9KTtcbiAgICBjb25zdCB1c2VyS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVVc2VyS2V5Y2hhaW4oe1xuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIGJhY2t1cEdwZ0tleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFzc3BocmFzZTogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICB3ZWJhdXRobkluZm86IHBhcmFtcy53ZWJhdXRobkluZm8sXG4gICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgZW50ZXJwcmlzZTogcGFyYW1zLmVudGVycHJpc2UsXG4gICAgfSk7XG4gICAgY29uc3QgYmFja3VwS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgICB1c2VyR3BnS2V5LFxuICAgICAgYmFja3VwR3BnS2V5LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXNzcGhyYXNlOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgfSk7XG5cbiAgICBjb25zdCBbdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbdXNlcktleWNoYWluUHJvbWlzZSwgYmFja3VwS2V5Y2hhaW5Qcm9taXNlXSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdXNlcktleWNoYWluLFxuICAgICAgYmFja3VwS2V5Y2hhaW4sXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVCYWNrdXBLZXlTaGFyZXMoKTogUHJvbWlzZTxCYWNrdXBLZXlTaGFyZT4ge1xuICAgIGNvbnN0IE1QQyA9IG5ldyBFY2RzYSgpO1xuICAgIGNvbnN0IG0gPSAyO1xuICAgIGNvbnN0IG4gPSAzO1xuICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0ge1xuICAgICAgdXNlckhlbGRLZXlTaGFyZTogYXdhaXQgTVBDLmtleVNoYXJlKDIsIG0sIG4pLFxuICAgIH07XG4gICAgcmV0dXJuIGJhY2t1cEtleVNoYXJlO1xuICB9XG5cbiAgY3JlYXRlVXNlcktleWNoYWluKHtcbiAgICB1c2VyR3BnS2V5LFxuICAgIGJhY2t1cEdwZ0tleSxcbiAgICBiaXRnb1B1YmxpY0dwZ0tleSxcbiAgICB1c2VyS2V5U2hhcmUsXG4gICAgYmFja3VwS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbixcbiAgICBwYXNzcGhyYXNlLFxuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICB3ZWJhdXRobkluZm8sXG4gICAgZW5jcnlwdGlvblZlcnNpb24sXG4gICAgZW50ZXJwcmlzZSxcbiAgfTogQ3JlYXRlRWNkc2FLZXljaGFpblBhcmFtcyk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBpZiAoIXBhc3NwaHJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgYSB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgIH1cbiAgICBhc3NlcnQoYmFja3VwS2V5U2hhcmUudXNlckhlbGRLZXlTaGFyZSk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgIHVzZXJHcGdLZXksXG4gICAgICBiYWNrdXBHcGdLZXkgYXMgU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5LFxuICAgICAgMSxcbiAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLnVzZXJIZWxkS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFzc3BocmFzZSxcbiAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgIHdlYmF1dGhuSW5mbyxcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgZW50ZXJwcmlzZVxuICAgICk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVCYWNrdXBLZXljaGFpbih7XG4gICAgdXNlckdwZ0tleSxcbiAgICB1c2VyS2V5U2hhcmUsXG4gICAgYmFja3VwR3BnS2V5LFxuICAgIGJhY2t1cEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgcGFzc3BocmFzZSxcbiAgICBlbmNyeXB0aW9uVmVyc2lvbixcbiAgfTogQ3JlYXRlRWNkc2FLZXljaGFpblBhcmFtcyk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBhc3NlcnQoYmFja3VwS2V5U2hhcmUudXNlckhlbGRLZXlTaGFyZSk7XG4gICAgYXNzZXJ0KHBhc3NwaHJhc2UpO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVBhcnRpY2lwYW50S2V5Y2hhaW4oXG4gICAgICB1c2VyR3BnS2V5LFxuICAgICAgYmFja3VwR3BnS2V5IGFzIFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleSxcbiAgICAgIDIsXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiYWNrdXBLZXlTaGFyZS51c2VySGVsZEtleVNoYXJlLFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIHBhc3NwaHJhc2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBlbmNyeXB0aW9uVmVyc2lvblxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgY3JlYXRlQml0Z29LZXljaGFpbih7XG4gICAgdXNlckdwZ0tleSxcbiAgICBiYWNrdXBHcGdLZXksXG4gICAgdXNlcktleVNoYXJlLFxuICAgIGJhY2t1cEtleVNoYXJlLFxuICAgIGVudGVycHJpc2UsXG4gICAgYml0Z29QdWJsaWNHcGdLZXksXG4gIH06IENyZWF0ZUVjZHNhQml0R29LZXljaGFpblBhcmFtcyk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCByZWNpcGllbnRJbmRleCA9IDM7XG4gICAgY29uc3QgdXNlclRvQml0Z29TaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUodXNlcktleVNoYXJlLCByZWNpcGllbnRJbmRleCwgYml0Z29QdWJsaWNHcGdLZXkuYXJtb3IoKSwgdXNlckdwZ0tleSk7XG5cbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvU2hhcmUgPSBhd2FpdCB0aGlzLmdldEJhY2t1cEVuY3J5cHRlZE5TaGFyZShcbiAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgcmVjaXBpZW50SW5kZXgsXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleS5hcm1vcigpLFxuICAgICAgYmFja3VwR3BnS2V5IGFzIFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz5cbiAgICApO1xuXG4gICAgY29uc3QgY3JlYXRlQml0R29NUENQYXJhbXM6IEFkZEtleWNoYWluT3B0aW9ucyA9IHtcbiAgICAgIGtleVR5cGU6ICd0c3MnIGFzIEtleVR5cGUsXG4gICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICBrZXlTaGFyZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICd1c2VyJyxcbiAgICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogdXNlclRvQml0Z29TaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICBwcml2YXRlU2hhcmU6IHVzZXJUb0JpdGdvU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgICAgIG46IHVzZXJUb0JpdGdvU2hhcmUubixcbiAgICAgICAgICB2c3NQcm9vZjogdXNlclRvQml0Z29TaGFyZS52c3NQcm9vZixcbiAgICAgICAgICBwcml2YXRlU2hhcmVQcm9vZjogdXNlclRvQml0Z29TaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZyb206ICdiYWNrdXAnLFxuICAgICAgICAgIHRvOiAnYml0Z28nLFxuICAgICAgICAgIHB1YmxpY1NoYXJlOiBiYWNrdXBUb0JpdGdvU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlOiBiYWNrdXBUb0JpdGdvU2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgICAgIG46IGJhY2t1cFRvQml0Z29TaGFyZS5uLFxuICAgICAgICAgIHZzc1Byb29mOiBiYWNrdXBUb0JpdGdvU2hhcmUudnNzUHJvb2YsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGJhY2t1cFRvQml0Z29TaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB1c2VyR1BHUHVibGljS2V5OiB1c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIGJhY2t1cEdQR1B1YmxpY0tleTogKGJhY2t1cEdwZ0tleSBhcyBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+KS5wdWJsaWNLZXksXG4gICAgICBlbnRlcnByaXNlOiBlbnRlcnByaXNlLFxuICAgICAgYWxnb1VzZWQ6ICdlY2RzYScsXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmFkZChjcmVhdGVCaXRHb01QQ1BhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBidWlsZHMgdGhlIHJlbGV2YW50IGJhY2t1cCBlbmNyeXB0ZWROU2hhcmUgYmFzZWQgb24gd2hldGhlciB0aGVcbiAgICogYmFja3VwIGtleSBpcyB1c2VyIG9yIHRoaXJkIHBhcnR5IGdlbmVyYXRlZFxuICAgKiBAcGFyYW0gYmFja3VwU2hhcmUgY2FuIGVpdGhlciBoYXZlIGtleSBzaGFyZXMgZnJvbSB0aGUgdXNlciBvciB0aGlyZCBwYXJ0eVxuICAgKiBAcGFyYW0gcmVjaXBpZW50SW5kZXggaW5kZXggb2YgdGhlIHBhcnR5IHJlY2VpdmluZyB0aGUgYmFja3VwIHNoYXJlc1xuICAgKiBAcGFyYW0gcmVjaXBpZW50R3BnUHVibGljQXJtb3IgZ3BnIGFybW9yIG9mIHRoZSBwYXJ0eSByZWNlaXZpbmcgdGhlIGJhY2t1cCBzaGFyZXNcbiAgICogQHBhcmFtIGJhY2t1cEdwZ0tleSBiYWNrdXAgZ3BnIGtleVxuICAgKiBAcGFyYW0gaXNUaGlyZFBhcnR5QmFja3VwIHdoZXRoZXIgdGhlIGJhY2t1cCBpcyBnZW5lcmF0ZWQgYnkgdGhpcmQgcGFydHlcbiAgICovXG4gIGFzeW5jIGdldEJhY2t1cEVuY3J5cHRlZE5TaGFyZShcbiAgICBiYWNrdXBTaGFyZTogQmFja3VwS2V5U2hhcmUsXG4gICAgcmVjaXBpZW50SW5kZXg6IG51bWJlcixcbiAgICByZWNpcGllbnRHcGdQdWJsaWNBcm1vcjogc3RyaW5nLFxuICAgIGJhY2t1cEdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPlxuICApOiBQcm9taXNlPEVuY3J5cHRlZE5TaGFyZT4ge1xuICAgIGFzc2VydChiYWNrdXBTaGFyZS51c2VySGVsZEtleVNoYXJlKTtcbiAgICBjb25zdCBiYWNrdXBUb1JlY2lwaWVudFNoYXJlID0gYXdhaXQgZW5jcnlwdE5TaGFyZShcbiAgICAgIGJhY2t1cFNoYXJlLnVzZXJIZWxkS2V5U2hhcmUsXG4gICAgICByZWNpcGllbnRJbmRleCxcbiAgICAgIHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yLFxuICAgICAgYmFja3VwR3BnS2V5XG4gICAgKTtcbiAgICByZXR1cm4gYmFja3VwVG9SZWNpcGllbnRTaGFyZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhc3luYyBjcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICB1c2VyTG9jYWxCYWNrdXBHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICBiaXRnb1B1YmxpY0dwZ0tleTogS2V5LFxuICAgIHJlY2lwaWVudEluZGV4OiBudW1iZXIsXG4gICAgdXNlcktleVNoYXJlOiBLZXlTaGFyZSxcbiAgICBiYWNrdXBLZXlTaGFyZTogS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nLFxuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZyxcbiAgICB3ZWJhdXRobkluZm8/OiBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvLFxuICAgIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb24sXG4gICAgZW50ZXJwcmlzZT86IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgYml0Z29LZXlTaGFyZXMgPSBiaXRnb0tleWNoYWluLmtleVNoYXJlcztcbiAgICBpZiAoIWJpdGdvS2V5U2hhcmVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28ga2V5IHNoYXJlcycpO1xuICAgIH1cbiAgICBpZiAoIWJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBjb21tb24ga2V5IGNoYWluOiAke2JpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW59YCk7XG4gICAgfVxuXG4gICAgbGV0IHJlY2lwaWVudDogc3RyaW5nO1xuICAgIGxldCBrZXlTaGFyZTogS2V5U2hhcmU7XG4gICAgbGV0IG90aGVyU2hhcmU6IEtleVNoYXJlO1xuICAgIGxldCByZWNpcGllbnRHcGdLZXk6IG9wZW5wZ3AuU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPjtcbiAgICBsZXQgc2VuZGVyR3BnS2V5OiBvcGVucGdwLlNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz47XG4gICAgaWYgKHJlY2lwaWVudEluZGV4ID09PSAxKSB7XG4gICAgICBrZXlTaGFyZSA9IHVzZXJLZXlTaGFyZTtcbiAgICAgIG90aGVyU2hhcmUgPSBiYWNrdXBLZXlTaGFyZTtcbiAgICAgIHJlY2lwaWVudCA9ICd1c2VyJztcbiAgICAgIHJlY2lwaWVudEdwZ0tleSA9IHVzZXJHcGdLZXk7XG4gICAgICBzZW5kZXJHcGdLZXkgPSB1c2VyTG9jYWxCYWNrdXBHcGdLZXk7XG4gICAgfSBlbHNlIGlmIChyZWNpcGllbnRJbmRleCA9PT0gMikge1xuICAgICAga2V5U2hhcmUgPSBiYWNrdXBLZXlTaGFyZTtcbiAgICAgIG90aGVyU2hhcmUgPSB1c2VyS2V5U2hhcmU7XG4gICAgICByZWNpcGllbnQgPSAnYmFja3VwJztcbiAgICAgIHJlY2lwaWVudEdwZ0tleSA9IHVzZXJMb2NhbEJhY2t1cEdwZ0tleTtcbiAgICAgIHNlbmRlckdwZ0tleSA9IHVzZXJHcGdLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGluZGV4Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub1JlY2lwaWVudFNoYXJlID0gYml0Z29LZXlTaGFyZXMuZmluZChcbiAgICAgIChrZXlTaGFyZSkgPT4ga2V5U2hhcmUuZnJvbSA9PT0gJ2JpdGdvJyAmJiBrZXlTaGFyZS50byA9PT0gcmVjaXBpZW50XG4gICAgKTtcbiAgICBpZiAoIWJpdEdvVG9SZWNpcGllbnRTaGFyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIEJpdEdvIHRvICR7cmVjaXBpZW50fSBrZXkgc2hhcmVgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRTaGFyZSA9IGF3YWl0IHRoaXMuZGVjcnlwdFByaXZhdGVTaGFyZShiaXRHb1RvUmVjaXBpZW50U2hhcmUucHJpdmF0ZVNoYXJlLCByZWNpcGllbnRHcGdLZXkpO1xuXG4gICAgYXdhaXQgdGhpcy52ZXJpZnlXYWxsZXRTaWduYXR1cmVzKFxuICAgICAgdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICB1c2VyTG9jYWxCYWNrdXBHcGdLZXkucHVibGljS2V5LFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIGRlY3J5cHRlZFNoYXJlLFxuICAgICAgcmVjaXBpZW50SW5kZXhcbiAgICApO1xuXG4gICAgY29uc3Qgc2VuZGVyVG9SZWNpcGllbnRTaGFyZSA9IGF3YWl0IGVuY3J5cHROU2hhcmUoXG4gICAgICBvdGhlclNoYXJlLFxuICAgICAgcmVjaXBpZW50SW5kZXgsXG4gICAgICByZWNpcGllbnRHcGdLZXkucHVibGljS2V5LFxuICAgICAgc2VuZGVyR3BnS2V5XG4gICAgKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROU2hhcmVzOiBEZWNyeXB0YWJsZU5TaGFyZVtdID0gW1xuICAgICAge1xuICAgICAgICAvLyB1c2VyVG9CYWNrdXAgb3IgYmFja3VwVG9Vc2VyXG4gICAgICAgIG5TaGFyZTogc2VuZGVyVG9SZWNpcGllbnRTaGFyZSxcbiAgICAgICAgcmVjaXBpZW50UHJpdmF0ZUFybW9yOiByZWNpcGllbnRHcGdLZXkucHJpdmF0ZUtleSxcbiAgICAgICAgc2VuZGVyUHVibGljQXJtb3I6IHNlbmRlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBiaXRnb1RvUmVjaXBpZW50XG4gICAgICAgIG5TaGFyZToge1xuICAgICAgICAgIGk6IHJlY2lwaWVudEluZGV4LFxuICAgICAgICAgIGo6IDMsXG4gICAgICAgICAgcHVibGljU2hhcmU6IGJpdEdvVG9SZWNpcGllbnRTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICBlbmNyeXB0ZWRQcml2YXRlU2hhcmU6IGJpdEdvVG9SZWNpcGllbnRTaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgICAgICAgbjogYml0R29Ub1JlY2lwaWVudFNoYXJlLm4hLFxuICAgICAgICAgIHZzc1Byb29mOiBiaXRHb1RvUmVjaXBpZW50U2hhcmUudnNzUHJvb2YsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IGJpdEdvVG9SZWNpcGllbnRTaGFyZS5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgICAgfSxcbiAgICAgICAgcmVjaXBpZW50UHJpdmF0ZUFybW9yOiByZWNpcGllbnRHcGdLZXkucHJpdmF0ZUtleSxcbiAgICAgICAgc2VuZGVyUHVibGljQXJtb3I6IGJpdGdvUHVibGljR3BnS2V5LmFybW9yKCksXG4gICAgICAgIGlzYnM1OEVuY29kZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgcmVjaXBpZW50Q29tYmluZWRLZXkgPSBhd2FpdCBFQ0RTQU1ldGhvZHMuY3JlYXRlQ29tYmluZWRLZXkoXG4gICAgICBrZXlTaGFyZSxcbiAgICAgIGVuY3J5cHRlZE5TaGFyZXMsXG4gICAgICBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluXG4gICAgKTtcblxuICAgIGNvbnN0IHBydiA9IEpTT04uc3RyaW5naWZ5KHJlY2lwaWVudENvbWJpbmVkS2V5LnNpZ25pbmdNYXRlcmlhbCk7XG4gICAgY29uc3QgcmVjaXBpZW50S2V5Y2hhaW5QYXJhbXM6IEFkZEtleWNoYWluT3B0aW9ucyAmIHsgcHJ2OiBzdHJpbmcgfSA9IHtcbiAgICAgIHNvdXJjZTogcmVjaXBpZW50LFxuICAgICAga2V5VHlwZTogJ3RzcycgYXMgS2V5VHlwZSxcbiAgICAgIGNvbW1vbktleWNoYWluOiBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluLFxuICAgICAgcHJ2OiBwcnYsXG4gICAgICBlbmNyeXB0ZWRQcnY6IGF3YWl0IHRoaXMuYml0Z28uZW5jcnlwdEFzeW5jKHtcbiAgICAgICAgaW5wdXQ6IHBydixcbiAgICAgICAgcGFzc3dvcmQ6IHBhc3NwaHJhc2UsXG4gICAgICAgIGVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgfSksXG4gICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfTtcblxuICAgIGlmICh3ZWJhdXRobkluZm8gJiYgcmVjaXBpZW50SW5kZXggPT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgICAgLy8gU2VuZCB0aGUgcGFzc2tleSBhcyBgd2ViYXV0aG5JbmZvYDsgdGhlIGRlcHJlY2F0ZWQgYHdlYmF1dGhuRGV2aWNlc2AgYXJyYXkgaXMgaWdub3JlZCBieSBQT1NUIC9rZXkuXG4gICAgICBhc3NlcnQoZW50ZXJwcmlzZSwgJ2VudGVycHJpc2UgaXMgcmVxdWlyZWQgdG8gYXR0YWNoIGEgd2ViYXV0aG4gZGV2aWNlIHRvIHRoZSB1c2VyIGtleWNoYWluJyk7XG4gICAgICByZWNpcGllbnRLZXljaGFpblBhcmFtcy53ZWJhdXRobkluZm8gPSB7XG4gICAgICAgIG90cERldmljZUlkOiB3ZWJhdXRobkluZm8ub3RwRGV2aWNlSWQsXG4gICAgICAgIHByZlNhbHQ6IHdlYmF1dGhuSW5mby5wcmZTYWx0LFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGF3YWl0IHRoaXMuYml0Z28uZW5jcnlwdEFzeW5jKHtcbiAgICAgICAgICBpbnB1dDogcHJ2LFxuICAgICAgICAgIHBhc3N3b3JkOiB3ZWJhdXRobkluZm8ucGFzc3BocmFzZSxcbiAgICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbixcbiAgICAgICAgfSksXG4gICAgICAgIGVudGVycHJpc2VJZDogZW50ZXJwcmlzZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qga2V5Y2hhaW5zID0gdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKTtcbiAgICByZXR1cm4gcmVjaXBpZW50SW5kZXggPT09IDFcbiAgICAgID8gYXdhaXQga2V5Y2hhaW5zLmFkZChyZWNpcGllbnRLZXljaGFpblBhcmFtcylcbiAgICAgIDogYXdhaXQga2V5Y2hhaW5zLmNyZWF0ZUJhY2t1cChyZWNpcGllbnRLZXljaGFpblBhcmFtcyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZVRzc0VjZHNhU3RlcDFTaWduaW5nTWF0ZXJpYWwocGFyYW1zOiB7XG4gICAgY2hhbGxlbmdlczoge1xuICAgICAgZW50ZXJwcmlzZUNoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkRWNkc2FDaGFsbGVuZ2VzO1xuICAgICAgYml0Z29DaGFsbGVuZ2U6IFR4UmVxdWVzdENoYWxsZW5nZVJlc3BvbnNlO1xuICAgIH07XG4gICAgcHJ2OiBzdHJpbmc7XG4gICAgZGVyaXZhdGlvblBhdGg6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICAgIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG4gIH0pOiBQcm9taXNlPFRzc0VjZHNhU3RlcDFSZXR1cm5NZXNzYWdlPiB7XG4gICAgY29uc3QgeyBjaGFsbGVuZ2VzLCBkZXJpdmF0aW9uUGF0aCwgcHJ2IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdXNlclNpZ25pbmdNYXRlcmlhbDogRUNEU0FNZXRob2RUeXBlcy5TaWduaW5nTWF0ZXJpYWwgPSBKU09OLnBhcnNlKHBydik7XG4gICAgaWYgKHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLmkgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleScpO1xuICAgIH1cbiAgICBpZiAoIXVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwTlNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgLSBtaXNzaW5nIGJhY2t1cE5TaGFyZScpO1xuICAgIH1cbiAgICBjb25zdCBNUEMgPSBuZXcgRWNkc2EoKTtcbiAgICBjb25zdCBzaWduaW5nS2V5ID0gTVBDLmtleURlcml2ZShcbiAgICAgIHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLFxuICAgICAgW3VzZXJTaWduaW5nTWF0ZXJpYWwuYml0Z29OU2hhcmUsIHVzZXJTaWduaW5nTWF0ZXJpYWwuYmFja3VwTlNoYXJlXSxcbiAgICAgIGRlcml2YXRpb25QYXRoXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvSW5kZXggPSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPO1xuICAgIGNvbnN0IHVzZXJJbmRleCA9IHVzZXJTaWduaW5nTWF0ZXJpYWwucFNoYXJlLmk7XG5cbiAgICBjb25zdCB7IG50aWxkZTogbnRpbGRlYSwgaDE6IGgxYSwgaDI6IGgyYSwgcDogcGEgfSA9IGNoYWxsZW5nZXMuZW50ZXJwcmlzZUNoYWxsZW5nZTtcbiAgICBjb25zdCB7IG50aWxkZTogbnRpbGRlYiwgaDE6IGgxYiwgaDI6IGgyYiwgcDogcGIsIG46IG5iIH0gPSBjaGFsbGVuZ2VzLmJpdGdvQ2hhbGxlbmdlO1xuICAgIGNvbnN0IHVzZXJYU2hhcmUgPSBNUEMuYXBwZW5kQ2hhbGxlbmdlKHNpZ25pbmdLZXkueFNoYXJlLCB7IG50aWxkZTogbnRpbGRlYSwgaDE6IGgxYSwgaDI6IGgyYSB9LCB7IHA6IHBhIH0pO1xuICAgIGNvbnN0IGJpdGdvWVNoYXJlID0gTVBDLmFwcGVuZENoYWxsZW5nZShcbiAgICAgIHtcbiAgICAgICAgaTogdXNlckluZGV4LFxuICAgICAgICBqOiBiaXRnb0luZGV4LFxuICAgICAgICBuOiBuYixcbiAgICAgIH0sXG4gICAgICB7IG50aWxkZTogbnRpbGRlYiwgaDE6IGgxYiwgaDI6IGgyYiB9LFxuICAgICAgeyBwOiBwYiB9XG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJTaWduU2hhcmUgPSBhd2FpdCBFQ0RTQU1ldGhvZHMuY3JlYXRlVXNlclNpZ25TaGFyZSh1c2VyWFNoYXJlLCBiaXRnb1lTaGFyZSk7XG4gICAgY29uc3QgdSA9IHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS51O1xuXG4gICAgbGV0IGNoYWluY29kZSA9IHVzZXJTaWduaW5nTWF0ZXJpYWwuYml0Z29OU2hhcmUuY2hhaW5jb2RlO1xuICAgIHdoaWxlIChjaGFpbmNvZGUubGVuZ3RoIDwgNjQpIHtcbiAgICAgIGNoYWluY29kZSA9ICcwJyArIGNoYWluY29kZTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmVyU2hhcmUgPSBiaXAzMi5mcm9tUHJpdmF0ZUtleShCdWZmZXIuZnJvbSh1LCAnaGV4JyksIEJ1ZmZlci5mcm9tKGNoYWluY29kZSwgJ2hleCcpKS50b0Jhc2U1OCgpO1xuICAgIGNvbnN0IGJpdGdvR3BnS2V5ID0gKGF3YWl0IGdldEJpdGdvR3BnUHViS2V5KHRoaXMuYml0Z28pKS5tcGNWMTtcbiAgICBjb25zdCBlbmNyeXB0ZWRTaWduZXJTaGFyZSA9IChhd2FpdCBvcGVucGdwLmVuY3J5cHQoe1xuICAgICAgbWVzc2FnZTogYXdhaXQgb3BlbnBncC5jcmVhdGVNZXNzYWdlKHtcbiAgICAgICAgdGV4dDogc2lnbmVyU2hhcmUsXG4gICAgICB9KSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICByZWplY3RDdXJ2ZXM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgICBlbmNyeXB0aW9uS2V5czogW2JpdGdvR3BnS2V5XSxcbiAgICB9KSkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ3NlY3AyNTZrMScpO1xuICAgIGNvbnN0IHByaXZhdGVTaGFyZVByb29mID0gYXdhaXQgY3JlYXRlU2hhcmVQcm9vZih1c2VyR3BnS2V5LnByaXZhdGVLZXksIHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS51LCAnZWNkc2EnKTtcbiAgICBjb25zdCB2c3NQcm9vZiA9IHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS52O1xuICAgIGNvbnN0IHVzZXJQdWJsaWNHcGdLZXkgPSB1c2VyR3BnS2V5LnB1YmxpY0tleTtcbiAgICBjb25zdCBwdWJsaWNTaGFyZSA9IHNpZ25pbmdLZXkublNoYXJlc1tiaXRnb0luZGV4XS55ICsgc2lnbmluZ0tleS5uU2hhcmVzW2JpdGdvSW5kZXhdLmNoYWluY29kZTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IHByaXZhdGVTaGFyZVByb29mLFxuICAgICAgdnNzUHJvb2Y6IHZzc1Byb29mLFxuICAgICAgcHVibGljU2hhcmU6IHB1YmxpY1NoYXJlLFxuICAgICAgZW5jcnlwdGVkU2lnbmVyT2Zmc2V0U2hhcmU6IGVuY3J5cHRlZFNpZ25lclNoYXJlLFxuICAgICAgdXNlclB1YmxpY0dwZ0tleTogdXNlclB1YmxpY0dwZ0tleSxcbiAgICAgIGtTaGFyZTogdXNlclNpZ25TaGFyZS5rU2hhcmUsXG4gICAgICB3U2hhcmU6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlXG4gICAgICAgID8gYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0QXN5bmMoe1xuICAgICAgICAgICAgaW5wdXQ6IEpTT04uc3RyaW5naWZ5KHVzZXJTaWduU2hhcmUud1NoYXJlKSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB1c2VyU2lnblNoYXJlLndTaGFyZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVUc3NFY2RzYVN0ZXAyU2lnbmluZ01hdGVyaWFsKHBhcmFtczoge1xuICAgIGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZTtcbiAgICB3U2hhcmU6IFdTaGFyZTtcbiAgICBhU2hhcmVGcm9tQml0Z286IE9taXQ8QVNoYXJlLCAnaDEnIHwgJ2gyJyB8ICdudGlsZGUnPjtcbiAgICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICAgIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG4gIH0pOiBQcm9taXNlPFRzc0VjZHNhU3RlcDJSZXR1cm5NZXNzYWdlPiB7XG4gICAgLy8gQXBwZW5kIHRoZSBCaXRHbyBjaGFsbGVuZ2UgdG8gdGhlIEFzaGFyZSB0byBiZSB1c2VkIGluIHN1YnNlcXVlbnQgcHJvb2ZzXG4gICAgY29uc3QgYml0Z29Ub1VzZXJBU2hhcmVXaXRoTnRpbGRlOiBBU2hhcmUgPSB7XG4gICAgICAuLi5wYXJhbXMuYVNoYXJlRnJvbUJpdGdvLFxuICAgICAgLi4ucGFyYW1zLmJpdGdvQ2hhbGxlbmdlLFxuICAgIH07XG4gICAgY29uc3QgdXNlckdhbW1hQW5kTXVTaGFyZXMgPSBhd2FpdCBFQ0RTQU1ldGhvZHMuY3JlYXRlVXNlckdhbW1hQW5kTXVTaGFyZShcbiAgICAgIHBhcmFtcy53U2hhcmUsXG4gICAgICBiaXRnb1RvVXNlckFTaGFyZVdpdGhOdGlsZGVcbiAgICApO1xuICAgIGNvbnN0IHVzZXJPbWljcm9uQW5kRGVsdGFTaGFyZSA9IGF3YWl0IEVDRFNBTWV0aG9kcy5jcmVhdGVVc2VyT21pY3JvbkFuZERlbHRhU2hhcmUoXG4gICAgICB1c2VyR2FtbWFBbmRNdVNoYXJlcy5nU2hhcmUgYXMgRUNEU0EuR1NoYXJlXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgbXVEU2hhcmU6IHtcbiAgICAgICAgbXVTaGFyZTogdXNlckdhbW1hQW5kTXVTaGFyZXMubXVTaGFyZSxcbiAgICAgICAgZFNoYXJlOiB1c2VyT21pY3JvbkFuZERlbHRhU2hhcmUuZFNoYXJlLFxuICAgICAgICBpOiB1c2VyR2FtbWFBbmRNdVNoYXJlcy5tdVNoYXJlLmksXG4gICAgICB9LFxuICAgICAgb1NoYXJlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZVxuICAgICAgICA/IGF3YWl0IHRoaXMuYml0Z28uZW5jcnlwdEFzeW5jKHtcbiAgICAgICAgICAgIGlucHV0OiBKU09OLnN0cmluZ2lmeSh1c2VyT21pY3JvbkFuZERlbHRhU2hhcmUub1NoYXJlKSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB1c2VyT21pY3JvbkFuZERlbHRhU2hhcmUub1NoYXJlLFxuICAgIH07XG4gIH1cblxuICBnZXRPZmZsaW5lU2lnbmVyUGFpbGxpZXJNb2R1bHVzKHBhcmFtczogeyBwcnY6IHN0cmluZyB9KTogeyB1c2VyUGFpbGxpZXJNb2R1bHVzOiBzdHJpbmcgfSB7XG4gICAgYXNzZXJ0KHBhcmFtcy5wcnYsICdQYXJhbXMgdG8gZ2V0IHBhaWxsaWVyIG1vZHVsdXMgYXJlIG1pc3NpbmcgcHJ2LicpO1xuICAgIGNvbnN0IHVzZXJTaWduaW5nTWF0ZXJpYWw6IEVDRFNBTWV0aG9kVHlwZXMuU2lnbmluZ01hdGVyaWFsID0gSlNPTi5wYXJzZShwYXJhbXMucHJ2KTtcbiAgICByZXR1cm4geyB1c2VyUGFpbGxpZXJNb2R1bHVzOiB1c2VyU2lnbmluZ01hdGVyaWFsLnBTaGFyZS5uIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZsaW5lS1NoYXJlKHBhcmFtczoge1xuICAgIHRzc1BhcmFtczogVFNTUGFyYW1zIHwgVFNTUGFyYW1zRm9yTWVzc2FnZTtcbiAgICBjaGFsbGVuZ2VzOiB7XG4gICAgICBlbnRlcnByaXNlQ2hhbGxlbmdlOiBFY2RzYVR5cGVzLlNlcmlhbGl6ZWRFY2RzYUNoYWxsZW5nZXM7XG4gICAgICBiaXRnb0NoYWxsZW5nZTogVHhSZXF1ZXN0Q2hhbGxlbmdlUmVzcG9uc2U7XG4gICAgfTtcbiAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGU7XG4gICAgcHJ2OiBzdHJpbmc7XG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG4gIH0pOiBQcm9taXNlPFRzc0VjZHNhU3RlcDFSZXR1cm5NZXNzYWdlPiB7XG4gICAgY29uc3QgeyB0c3NQYXJhbXMsIHBydiwgcmVxdWVzdFR5cGUsIGNoYWxsZW5nZXMgfSA9IHBhcmFtcztcbiAgICBhc3NlcnQodHlwZW9mIHRzc1BhcmFtcy50eFJlcXVlc3QgIT09ICdzdHJpbmcnLCAnSW52YWxpZCB0eFJlcXVlc3QgdHlwZScpO1xuICAgIGNvbnN0IHR4UmVxdWVzdDogVHhSZXF1ZXN0ID0gdHNzUGFyYW1zLnR4UmVxdWVzdDtcbiAgICBsZXQgZGVyaXZhdGlvblBhdGg7XG5cbiAgICBpZiAocmVxdWVzdFR5cGUgPT09IFJlcXVlc3RUeXBlLnR4KSB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgIHR4UmVxdWVzdC50cmFuc2FjdGlvbnMgfHwgKHR4UmVxdWVzdCBhcyBUeFJlcXVlc3QpLnVuc2lnbmVkVHhzLFxuICAgICAgICAnVW5hYmxlIHRvIGZpbmQgdHJhbnNhY3Rpb25zIGluIHR4UmVxdWVzdCdcbiAgICAgICk7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID1cbiAgICAgICAgdHhSZXF1ZXN0LmFwaVZlcnNpb24gPT09ICdmdWxsJyA/IHR4UmVxdWVzdC50cmFuc2FjdGlvbnMhWzBdLnVuc2lnbmVkVHggOiB0eFJlcXVlc3QudW5zaWduZWRUeHNbMF07XG4gICAgICBkZXJpdmF0aW9uUGF0aCA9IHVuc2lnbmVkVHguZGVyaXZhdGlvblBhdGg7XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0VHlwZSA9PT0gUmVxdWVzdFR5cGUubWVzc2FnZSkge1xuICAgICAgLy8gVE9ETyBCRy02NzI5OSBNZXNzYWdlIHNpZ25pbmcgd2l0aCBkZXJpdmF0aW9uIHBhdGhcbiAgICAgIGRlcml2YXRpb25QYXRoID0gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVRzc0VjZHNhU3RlcDFTaWduaW5nTWF0ZXJpYWwoe1xuICAgICAgcHJ2OiBwcnYsXG4gICAgICBjaGFsbGVuZ2VzOiBjaGFsbGVuZ2VzLFxuICAgICAgZGVyaXZhdGlvblBhdGg6IGRlcml2YXRpb25QYXRoLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmbGluZU11RGVsdGFTaGFyZShwYXJhbXM6IHtcbiAgICBhU2hhcmVGcm9tQml0Z286IE9taXQ8QVNoYXJlLCAnbnRpbGRlJyB8ICdoMScgfCAnaDInPjtcbiAgICBiaXRnb0NoYWxsZW5nZTogVHhSZXF1ZXN0Q2hhbGxlbmdlUmVzcG9uc2U7XG4gICAgZW5jcnlwdGVkV1NoYXJlOiBzdHJpbmc7XG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG4gIH0pOiBQcm9taXNlPFRzc0VjZHNhU3RlcDJSZXR1cm5NZXNzYWdlPiB7XG4gICAgY29uc3QgZGVjcnlwdGVkV1NoYXJlID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0QXN5bmMoe1xuICAgICAgaW5wdXQ6IHBhcmFtcy5lbmNyeXB0ZWRXU2hhcmUsXG4gICAgICBwYXNzd29yZDogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlVHNzRWNkc2FTdGVwMlNpZ25pbmdNYXRlcmlhbCh7XG4gICAgICBhU2hhcmVGcm9tQml0Z286IHBhcmFtcy5hU2hhcmVGcm9tQml0Z28sXG4gICAgICBiaXRnb0NoYWxsZW5nZTogcGFyYW1zLmJpdGdvQ2hhbGxlbmdlLFxuICAgICAgd1NoYXJlOiBKU09OLnBhcnNlKGRlY3J5cHRlZFdTaGFyZSksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZsaW5lU1NoYXJlKHBhcmFtczoge1xuICAgIHRzc1BhcmFtczogVFNTUGFyYW1zIHwgVFNTUGFyYW1zRm9yTWVzc2FnZTtcbiAgICBkU2hhcmVGcm9tQml0Z286IERTaGFyZTtcbiAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGU7XG4gICAgZW5jcnlwdGVkT1NoYXJlOiBzdHJpbmc7XG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTU2hhcmU+IHtcbiAgICBjb25zdCB7IHRzc1BhcmFtcywgcmVxdWVzdFR5cGUsIGRTaGFyZUZyb21CaXRnbywgZW5jcnlwdGVkT1NoYXJlLCB3YWxsZXRQYXNzcGhyYXNlIH0gPSBwYXJhbXM7XG4gICAgYXNzZXJ0KHR5cGVvZiB0c3NQYXJhbXMudHhSZXF1ZXN0ICE9PSAnc3RyaW5nJywgJ0ludmFsaWQgdHhSZXF1ZXN0IHR5cGUnKTtcbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9IHRzc1BhcmFtcy50eFJlcXVlc3Q7XG4gICAgbGV0IHNpZ25hYmxlUGF5bG9hZDtcbiAgICBpZiAocmVxdWVzdFR5cGUgPT09IFJlcXVlc3RUeXBlLnR4KSB7XG4gICAgICBhc3NlcnQodHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyB8fCB0eFJlcXVlc3QudW5zaWduZWRUeHMsICdVbmFibGUgdG8gZmluZCB0cmFuc2FjdGlvbnMgaW4gdHhSZXF1ZXN0Jyk7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID1cbiAgICAgICAgdHhSZXF1ZXN0LmFwaVZlcnNpb24gPT09ICdmdWxsJyA/IHR4UmVxdWVzdC50cmFuc2FjdGlvbnMhWzBdLnVuc2lnbmVkVHggOiB0eFJlcXVlc3QudW5zaWduZWRUeHNbMF07XG4gICAgICBzaWduYWJsZVBheWxvYWQgPSBCdWZmZXIuZnJvbSh1bnNpZ25lZFR4LnNpZ25hYmxlSGV4LCAnaGV4Jyk7XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0VHlwZSA9PT0gUmVxdWVzdFR5cGUubWVzc2FnZSkge1xuICAgICAgc2lnbmFibGVQYXlsb2FkID0gKHBhcmFtcy50c3NQYXJhbXMgYXMgVFNTUGFyYW1zRm9yTWVzc2FnZSkuYnVmZmVyVG9TaWduO1xuICAgIH1cbiAgICBsZXQgaGFzaDogSGFzaCB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgaGFzaCA9IHRoaXMuYmFzZUNvaW4uZ2V0SGFzaEZ1bmN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoYXNoID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBkZWNyeXB0ZWRPU2hhcmUgPSBhd2FpdCB0aGlzLmJpdGdvLmRlY3J5cHRBc3luYyh7IGlucHV0OiBlbmNyeXB0ZWRPU2hhcmUsIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuICAgIGNvbnN0IHsgaSwgUiwgcywgeSB9ID0gYXdhaXQgRUNEU0FNZXRob2RzLmNyZWF0ZVVzZXJTaWduYXR1cmVTaGFyZShcbiAgICAgIEpTT04ucGFyc2UoZGVjcnlwdGVkT1NoYXJlKSxcbiAgICAgIGRTaGFyZUZyb21CaXRnbyxcbiAgICAgIHNpZ25hYmxlUGF5bG9hZCxcbiAgICAgIGhhc2hcbiAgICApO1xuICAgIC8vIHJldHVybiBvbmx5IHJlcXVpcmVkIFNTaGFyZSB3aXRob3V0IGJpZ2ludHMgZnJvbSBWQVNoYXJlXG4gICAgcmV0dXJuIHtcbiAgICAgIGksXG4gICAgICBSLFxuICAgICAgcyxcbiAgICAgIHksXG4gICAgfTtcbiAgfVxuICBhc3luYyBzaWduRWNkc2FUc3NVc2luZ0V4dGVybmFsU2lnbmVyKFxuICAgIHBhcmFtczogVFNTUGFyYW1zIHwgVFNTUGFyYW1zRm9yTWVzc2FnZSxcbiAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gICAgZXh0ZXJuYWxTaWduZXJQYWlsbGllck1vZHVsdXNHZXR0ZXI6IEN1c3RvbVBhaWxsaWVyTW9kdWx1c0dldHRlckZ1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyS1NoYXJlR2VuZXJhdG9yOiBDdXN0b21LU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJNdURlbHRhU2hhcmVHZW5lcmF0b3I6IEN1c3RvbU11RGVsdGFTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lclNTaGFyZUdlbmVyYXRvcjogQ3VzdG9tU1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgeyB0eFJlcXVlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbiA9IHRoaXMud2FsbGV0LmNvaW5TcGVjaWZpYygpPy5wZW5kaW5nRWNkc2FUc3NJbml0aWFsaXphdGlvbjtcbiAgICBpZiAocGVuZGluZ0VjZHNhVHNzSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1dhbGxldCBpcyBub3QgcmVhZHkgZm9yIFRTUyBFQ0RTQSBzaWduaW5nLiBQbGVhc2UgY29udGFjdCB5b3VyIGVudGVycHJpc2UgYWRtaW4gdG8gZmluaXNoIHRoZSBlbnRlcnByaXNlIFRTUyBpbml0aWFsaXphdGlvbi4nXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB0eFJlcXVlc3RPYmo6IFR4UmVxdWVzdCA9IGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3QgYXMgc3RyaW5nLCBwYXJhbXMucmVxSWQpO1xuICAgIGNvbnN0IHsgdXNlclBhaWxsaWVyTW9kdWx1cyB9ID0gYXdhaXQgZXh0ZXJuYWxTaWduZXJQYWlsbGllck1vZHVsdXNHZXR0ZXIoeyB0eFJlcXVlc3Q6IHR4UmVxdWVzdE9iaiB9KTtcbiAgICBjb25zdCB7IGVudGVycHJpc2VDaGFsbGVuZ2UsIGJpdGdvQ2hhbGxlbmdlIH0gPSBhd2FpdCB0aGlzLmdldEVjZHNhU2lnbmluZ0NoYWxsZW5nZXMoXG4gICAgICB0eFJlcXVlc3QgYXMgc3RyaW5nLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICB1c2VyUGFpbGxpZXJNb2R1bHVzLFxuICAgICAgMCxcbiAgICAgIHBhcmFtcy5yZXFJZFxuICAgICk7XG4gICAgY29uc3Qgc3RlcDFTaWduaW5nTWF0ZXJpYWwgPSBhd2FpdCBleHRlcm5hbFNpZ25lcktTaGFyZUdlbmVyYXRvcih7XG4gICAgICB0c3NQYXJhbXM6IHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdE9iaixcbiAgICAgIH0sXG4gICAgICBjaGFsbGVuZ2VzOiB7IGVudGVycHJpc2VDaGFsbGVuZ2UsIGJpdGdvQ2hhbGxlbmdlIH0sXG4gICAgICByZXF1ZXN0VHlwZTogcmVxdWVzdFR5cGUsXG4gICAgfSk7XG4gICAgLy8gc2lnbmluZyBzdGFnZSBvbmUgd2l0aCBLIHNoYXJlIHNlbmQgdG8gYml0Z28gYW5kIHJlY2VpdmVzIEEgc2hhcmVcbiAgICBjb25zdCBiaXRnb1RvVXNlckFTaGFyZSA9IChhd2FpdCBFQ0RTQU1ldGhvZHMuc2VuZFNoYXJlVG9CaXRnbyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0T2JqLnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBTZW5kU2hhcmVUeXBlLktTaGFyZSxcbiAgICAgIHN0ZXAxU2lnbmluZ01hdGVyaWFsLmtTaGFyZSxcbiAgICAgIHN0ZXAxU2lnbmluZ01hdGVyaWFsLmVuY3J5cHRlZFNpZ25lck9mZnNldFNoYXJlLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwudnNzUHJvb2YsXG4gICAgICBzdGVwMVNpZ25pbmdNYXRlcmlhbC5wcml2YXRlU2hhcmVQcm9vZixcbiAgICAgIHN0ZXAxU2lnbmluZ01hdGVyaWFsLnB1YmxpY1NoYXJlLFxuICAgICAgc3RlcDFTaWduaW5nTWF0ZXJpYWwudXNlclB1YmxpY0dwZ0tleSxcbiAgICAgIHBhcmFtcy5yZXFJZFxuICAgICkpIGFzIE9taXQ8QVNoYXJlLCAnbnRpbGRlJyB8ICdoMScgfCAnaDInPjsgLy8gV1AvSFNNIGRvZXMgbm90IHJldHVybiB0aGUgaW5pdGlhbCBjaGFsbGVuZ2VcbiAgICBjb25zdCBzdGVwMlJldHVybiA9IGF3YWl0IGV4dGVybmFsU2lnbmVyTXVEZWx0YVNoYXJlR2VuZXJhdG9yKHtcbiAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0T2JqLFxuICAgICAgYVNoYXJlRnJvbUJpdGdvOiBiaXRnb1RvVXNlckFTaGFyZSxcbiAgICAgIGJpdGdvQ2hhbGxlbmdlOiBiaXRnb0NoYWxsZW5nZSxcbiAgICAgIGVuY3J5cHRlZFdTaGFyZTogc3RlcDFTaWduaW5nTWF0ZXJpYWwud1NoYXJlIGFzIHN0cmluZyxcbiAgICB9KTtcbiAgICAvLyBzaWduaW5nIHN0YWdlIHR3byB3aXRoIG11U2hhcmUgYW5kIGRTaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBEIHNoYXJlXG4gICAgY29uc3QgYml0Z29Ub1VzZXJEU2hhcmUgPSAoYXdhaXQgRUNEU0FNZXRob2RzLnNlbmRTaGFyZVRvQml0Z28oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHR4UmVxdWVzdE9iai50eFJlcXVlc3RJZCxcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgU2VuZFNoYXJlVHlwZS5NVVNoYXJlLFxuICAgICAgc3RlcDJSZXR1cm4ubXVEU2hhcmUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApKSBhcyBEU2hhcmU7XG4gICAgY29uc3QgdXNlclNTaGFyZSA9IGF3YWl0IGV4dGVybmFsU2lnbmVyU1NoYXJlR2VuZXJhdG9yKHtcbiAgICAgIHRzc1BhcmFtczoge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0T2JqLFxuICAgICAgfSxcbiAgICAgIGRTaGFyZUZyb21CaXRnbzogYml0Z29Ub1VzZXJEU2hhcmUsXG4gICAgICByZXF1ZXN0VHlwZTogcmVxdWVzdFR5cGUsXG4gICAgICBlbmNyeXB0ZWRPU2hhcmU6IHN0ZXAyUmV0dXJuLm9TaGFyZSBhcyBzdHJpbmcsXG4gICAgfSk7XG4gICAgLy8gc2lnbmluZyBzdGFnZSB0aHJlZSB3aXRoIFNTaGFyZSBzZW5kIHRvIGJpdGdvIGFuZCByZWNlaXZlcyBTU2hhcmVcbiAgICBhd2FpdCBFQ0RTQU1ldGhvZHMuc2VuZFNoYXJlVG9CaXRnbyhcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHhSZXF1ZXN0T2JqLnR4UmVxdWVzdElkLFxuICAgICAgcmVxdWVzdFR5cGUsXG4gICAgICBTZW5kU2hhcmVUeXBlLlNTaGFyZSxcbiAgICAgIHVzZXJTU2hhcmUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwYXJhbXMucmVxSWRcbiAgICApO1xuICAgIHJldHVybiBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0T2JqLnR4UmVxdWVzdElkLCBwYXJhbXMucmVxSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgc2lnbmluZyBrZXksIHR4UmVxdWVzdFJlc29sdmVkIGFuZCB0eFJlcXVlc3RJZFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFR4UmVxdWVzdH0gcGFyYW1zLnR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgb2JqZWN0IG9yIGlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gZGVjcnlwdGVkIHByaXZhdGUga2V5XG4gICAqIEBwYXJhbSB7IHN0cmluZ30gcGFyYW1zLnJlcUlkIC0gcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaWduUmVxdWVzdEJhc2UoXG4gICAgcGFyYW1zOiBUU1NQYXJhbXNXaXRoUHJ2IHwgVFNTUGFyYW1zRm9yTWVzc2FnZVdpdGhQcnYsXG4gICAgcmVxdWVzdFR5cGU6IFJlcXVlc3RUeXBlXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgcGVuZGluZ0VjZHNhVHNzSW5pdGlhbGl6YXRpb24gPSB0aGlzLndhbGxldC5jb2luU3BlY2lmaWMoKT8ucGVuZGluZ0VjZHNhVHNzSW5pdGlhbGl6YXRpb247XG4gICAgaWYgKHBlbmRpbmdFY2RzYVRzc0luaXRpYWxpemF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdXYWxsZXQgaXMgbm90IHJlYWR5IGZvciBUU1MgRUNEU0Egc2lnbmluZy4gUGxlYXNlIGNvbnRhY3QgeW91ciBlbnRlcnByaXNlIGFkbWluIHRvIGZpbmlzaCB0aGUgZW50ZXJwcmlzZSBUU1MgaW5pdGlhbGl6YXRpb24uJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgdXNlclNpZ25pbmdNYXRlcmlhbDogRUNEU0FNZXRob2RUeXBlcy5TaWduaW5nTWF0ZXJpYWwgPSBKU09OLnBhcnNlKHBhcmFtcy5wcnYpO1xuICAgIGlmICh1c2VyU2lnbmluZ01hdGVyaWFsLnBTaGFyZS5pICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXknKTtcbiAgICB9XG4gICAgaWYgKCF1c2VyU2lnbmluZ01hdGVyaWFsLmJhY2t1cE5TaGFyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXIga2V5IC0gbWlzc2luZyBiYWNrdXBOU2hhcmUnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eFJlcXVlc3Q6IFR4UmVxdWVzdCA9XG4gICAgICB0eXBlb2YgcGFyYW1zLnR4UmVxdWVzdCA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgcGFyYW1zLnR4UmVxdWVzdCwgcGFyYW1zLnJlcUlkKVxuICAgICAgICA6IHBhcmFtcy50eFJlcXVlc3Q7XG5cbiAgICBsZXQgc2lnbmFibGVQYXlsb2FkID0gbmV3IEJ1ZmZlcignJyk7XG4gICAgbGV0IGRlcml2YXRpb25QYXRoID0gJyc7XG5cbiAgICBpZiAocmVxdWVzdFR5cGUgPT09IFJlcXVlc3RUeXBlLnR4KSB7XG4gICAgICBhc3NlcnQodHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyB8fCB0eFJlcXVlc3QudW5zaWduZWRUeHMsICdVbmFibGUgdG8gZmluZCB0cmFuc2FjdGlvbnMgaW4gdHhSZXF1ZXN0Jyk7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID1cbiAgICAgICAgdHhSZXF1ZXN0LmFwaVZlcnNpb24gPT09ICdmdWxsJyA/IHR4UmVxdWVzdC50cmFuc2FjdGlvbnMhWzBdLnVuc2lnbmVkVHggOiB0eFJlcXVlc3QudW5zaWduZWRUeHNbMF07XG5cbiAgICAgIGlmIChcbiAgICAgICAgJ3JlY2lwaWVudFNvdXJjZScgaW4gcGFyYW1zICYmXG4gICAgICAgIHBhcmFtcy5yZWNpcGllbnRTb3VyY2UgPT09IFRzc1R4UmVjaXBpZW50U291cmNlLkV4cGxpY2l0ICYmXG4gICAgICAgICFwYXJhbXMudHhQYXJhbXM/LnJlY2lwaWVudHM/Lmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICAncmVjaXBpZW50U291cmNlIFwiZXhwbGljaXRcIiByZXF1aXJlcyB0eFBhcmFtcy5yZWNpcGllbnRzIHdpdGggYXQgbGVhc3Qgb25lIHJlY2lwaWVudC4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBJQ1AgdHJhbnNhY3Rpb25zLCB0aGUgSFNNIHNpZ25zIHRoZSBzZXJpYWxpemVkVHhIZXgsIHdoaWxlIHRoZSB1c2VyIHNpZ25zIHRoZSBzaWduYWJsZUhleCBzZXBhcmF0ZWx5LlxuICAgICAgLy8gVmVyaWZpY2F0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgZGlyZWN0bHkgb24gdGhlIHNpZ25hYmxlSGV4IGFsb25lLiBIb3dldmVyLCB3ZSBjYW4gcGFyc2UgdGhlIHNlcmlhbGl6ZWRUeEhleFxuICAgICAgLy8gdG8gcmVnZW5lcmF0ZSB0aGUgc2lnbmFibGVIZXggYW5kIGNvbXBhcmUgaXQgYWdhaW5zdCB0aGUgcHJvdmlkZWQgdmFsdWUgZm9yIHZlcmlmaWNhdGlvbi5cbiAgICAgIC8vIEluIGNvbnRyYXN0LCBmb3Igb3RoZXIgY29pbiBmYW1pbGllcywgdmVyaWZpY2F0aW9uIGlzIHR5cGljYWxseSBkb25lIHVzaW5nIGp1c3QgdGhlIHNpZ25hYmxlSGV4LlxuICAgICAgaWYgKHRoaXMuYmFzZUNvaW4uZ2V0Q29uZmlnKCkuZmFtaWx5ID09PSAnaWNwJykge1xuICAgICAgICBhd2FpdCB0aGlzLmJhc2VDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiB1bnNpZ25lZFR4LnNlcmlhbGl6ZWRUeEhleCwgdHhJbmZvOiB1bnNpZ25lZFR4LnNpZ25hYmxlSGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHBhcmFtcy50eFBhcmFtcyB8fCB7IHJlY2lwaWVudHM6IFtdIH0sXG4gICAgICAgICAgd2FsbGV0OiB0aGlzLndhbGxldCxcbiAgICAgICAgICB3YWxsZXRUeXBlOiB0aGlzLndhbGxldC5tdWx0aXNpZ1R5cGUoKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmJhc2VDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiB1bnNpZ25lZFR4LnNpZ25hYmxlSGV4IH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHBhcmFtcy50eFBhcmFtcyB8fCB7IHJlY2lwaWVudHM6IFtdIH0sXG4gICAgICAgICAgd2FsbGV0OiB0aGlzLndhbGxldCxcbiAgICAgICAgICB3YWxsZXRUeXBlOiB0aGlzLndhbGxldC5tdWx0aXNpZ1R5cGUoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzaWduYWJsZVBheWxvYWQgPSBCdWZmZXIuZnJvbSh1bnNpZ25lZFR4LnNpZ25hYmxlSGV4LCAnaGV4Jyk7XG4gICAgICBkZXJpdmF0aW9uUGF0aCA9IHVuc2lnbmVkVHguZGVyaXZhdGlvblBhdGg7XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0VHlwZSA9PT0gUmVxdWVzdFR5cGUubWVzc2FnZSkge1xuICAgICAgc2lnbmFibGVQYXlsb2FkID0gKHBhcmFtcyBhcyBUU1NQYXJhbXNGb3JNZXNzYWdlKS5idWZmZXJUb1NpZ247XG4gICAgICAvLyBUT0RPIEJHLTY3Mjk5IE1lc3NhZ2Ugc2lnbmluZyB3aXRoIGRlcml2YXRpb24gcGF0aFxuICAgIH1cbiAgICBjb25zdCBwYWlsbGllck1vZHVsdXMgPSB0aGlzLmdldE9mZmxpbmVTaWduZXJQYWlsbGllck1vZHVsdXMoeyBwcnY6IHBhcmFtcy5wcnYgfSk7XG4gICAgY29uc3QgY2hhbGxlbmdlcyA9IGF3YWl0IHRoaXMuZ2V0RWNkc2FTaWduaW5nQ2hhbGxlbmdlcyhcbiAgICAgIHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgcGFpbGxpZXJNb2R1bHVzLnVzZXJQYWlsbGllck1vZHVsdXMsXG4gICAgICAwLFxuICAgICAgcGFyYW1zLnJlcUlkXG4gICAgKTtcblxuICAgIGNvbnN0IHN0ZXAxUmV0dXJuID0gYXdhaXQgdGhpcy5jcmVhdGVUc3NFY2RzYVN0ZXAxU2lnbmluZ01hdGVyaWFsKHtcbiAgICAgIHBydjogcGFyYW1zLnBydixcbiAgICAgIGNoYWxsZW5nZXM6IGNoYWxsZW5nZXMsXG4gICAgICBkZXJpdmF0aW9uUGF0aDogZGVyaXZhdGlvblBhdGgsXG4gICAgfSk7XG5cbiAgICAvLyBzaWduaW5nIHN0YWdlIG9uZSB3aXRoIEsgc2hhcmUgc2VuZCB0byBiaXRnbyBhbmQgcmVjZWl2ZXMgQSBzaGFyZVxuICAgIGNvbnN0IGJpdGdvVG9Vc2VyQVNoYXJlID0gKGF3YWl0IEVDRFNBTWV0aG9kcy5zZW5kU2hhcmVUb0JpdGdvKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIFNlbmRTaGFyZVR5cGUuS1NoYXJlLFxuICAgICAgc3RlcDFSZXR1cm4ua1NoYXJlLFxuICAgICAgc3RlcDFSZXR1cm4uZW5jcnlwdGVkU2lnbmVyT2Zmc2V0U2hhcmUsXG4gICAgICBzdGVwMVJldHVybi52c3NQcm9vZixcbiAgICAgIHN0ZXAxUmV0dXJuLnByaXZhdGVTaGFyZVByb29mLFxuICAgICAgc3RlcDFSZXR1cm4ucHVibGljU2hhcmUsXG4gICAgICBzdGVwMVJldHVybi51c2VyUHVibGljR3BnS2V5LFxuICAgICAgcGFyYW1zLnJlcUlkXG4gICAgKSkgYXMgT21pdDxBU2hhcmUsICdudGlsZGUnIHwgJ2gxJyB8ICdoMic+OyAvLyBXUC9IU00gZG9lcyBub3QgcmV0dXJuIHRoZSBpbml0aWFsIGNoYWxsZW5nZVxuXG4gICAgY29uc3Qgc3RlcDJSZXR1cm4gPSBhd2FpdCB0aGlzLmNyZWF0ZVRzc0VjZHNhU3RlcDJTaWduaW5nTWF0ZXJpYWwoe1xuICAgICAgYVNoYXJlRnJvbUJpdGdvOiBiaXRnb1RvVXNlckFTaGFyZSxcbiAgICAgIGJpdGdvQ2hhbGxlbmdlOiBjaGFsbGVuZ2VzLmJpdGdvQ2hhbGxlbmdlLFxuICAgICAgd1NoYXJlOiBzdGVwMVJldHVybi53U2hhcmUgYXMgV1NoYXJlLFxuICAgIH0pO1xuXG4gICAgLy8gc2lnbmluZyBzdGFnZSB0d28gd2l0aCBtdVNoYXJlIGFuZCBkU2hhcmUgc2VuZCB0byBiaXRnbyBhbmQgcmVjZWl2ZXMgRCBzaGFyZVxuICAgIGNvbnN0IGJpdGdvVG9Vc2VyRFNoYXJlID0gKGF3YWl0IEVDRFNBTWV0aG9kcy5zZW5kU2hhcmVUb0JpdGdvKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3QudHhSZXF1ZXN0SWQsXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIFNlbmRTaGFyZVR5cGUuTVVTaGFyZSxcbiAgICAgIHN0ZXAyUmV0dXJuLm11RFNoYXJlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgcGFyYW1zLnJlcUlkXG4gICAgKSkgYXMgRFNoYXJlO1xuXG4gICAgLy8gSWYgb25seSB0aGUgZ2V0SGFzaEZ1bmN0aW9uKCkgaXMgZGVmaW5lZCBmb3IgdGhlIGNvaW4gdXNlIGl0IG90aGVyd2lzZVxuICAgIC8vIHBhc3MgdW5kZWZpbmVkIGhhc2gsIGRlZmF1bHQgaGFzaCB3aWxsIGJlIHVzZWQgaW4gdGhhdCBjYXNlLlxuICAgIGxldCBoYXNoOiBIYXNoIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBoYXNoID0gdGhpcy5iYXNlQ29pbi5nZXRIYXNoRnVuY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGhhc2ggPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclNTaGFyZSA9IGF3YWl0IEVDRFNBTWV0aG9kcy5jcmVhdGVVc2VyU2lnbmF0dXJlU2hhcmUoXG4gICAgICBzdGVwMlJldHVybi5vU2hhcmUgYXMgT1NoYXJlLFxuICAgICAgYml0Z29Ub1VzZXJEU2hhcmUsXG4gICAgICBzaWduYWJsZVBheWxvYWQsXG4gICAgICBoYXNoXG4gICAgKTtcblxuICAgIC8vIHNpZ25pbmcgc3RhZ2UgdGhyZWUgd2l0aCBTU2hhcmUgc2VuZCB0byBiaXRnbyBhbmQgcmVjZWl2ZXMgU1NoYXJlXG4gICAgYXdhaXQgRUNEU0FNZXRob2RzLnNlbmRTaGFyZVRvQml0Z28oXG4gICAgICB0aGlzLmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHR4UmVxdWVzdC50eFJlcXVlc3RJZCxcbiAgICAgIHJlcXVlc3RUeXBlLFxuICAgICAgU2VuZFNoYXJlVHlwZS5TU2hhcmUsXG4gICAgICB1c2VyU1NoYXJlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgcGFyYW1zLnJlcUlkXG4gICAgKTtcbiAgICByZXR1cm4gYXdhaXQgZ2V0VHhSZXF1ZXN0KHRoaXMuYml0Z28sIHRoaXMud2FsbGV0LmlkKCksIHR4UmVxdWVzdC50eFJlcXVlc3RJZCwgcGFyYW1zLnJlcUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyB0aGUgdHJhbnNhY3Rpb24gYXNzb2NpYXRlZCB0byB0aGUgdHJhbnNhY3Rpb24gcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBUeFJlcXVlc3R9IHBhcmFtcy50eFJlcXVlc3QgLSB0cmFuc2FjdGlvbiByZXF1ZXN0IG9iamVjdCBvciBpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBydiAtIGRlY3J5cHRlZCBwcml2YXRlIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnJlcUlkIC0gcmVxdWVzdCBpZFxuICAgKiBAcGFyYW0gcGFyYW1zLnJlY2lwaWVudFNvdXJjZSAtIG9wdGlvbmFsOyB1c2UgVHNzVHhSZWNpcGllbnRTb3VyY2UuRXhwbGljaXQgd2l0aCBhIG5vbi1lbXB0eVxuICAgKiAgIHR4UGFyYW1zLnJlY2lwaWVudHMgbGlzdCB3aGVuIHlvdSB3YW50IFR5cGVTY3JpcHQgdG8gZW5mb3JjZSBwYXNzaW5nIHJlY2lwaWVudCBkZXRhaWxzIGF0IGNvbXBpbGUgdGltZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gZnVsbHkgc2lnbmVkIFR4UmVxdWVzdCBvYmplY3RcbiAgICovXG4gIGFzeW5jIHNpZ25UeFJlcXVlc3QocGFyYW1zOiBUc3NTaWduVHhSZXF1ZXN0UGFyYW1zV2l0aFBydik6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHBhcmFtcy5yZXFJZCk7XG4gICAgcmV0dXJuIHRoaXMuc2lnblJlcXVlc3RCYXNlKHBhcmFtcywgUmVxdWVzdFR5cGUudHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHRoZSBtZXNzYWdlIGFzc29jaWF0ZWQgdG8gdGhlIHRyYW5zYWN0aW9uIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCBvYmplY3Qgb3IgaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wcnYgLSBkZWNyeXB0ZWQgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5yZXFJZCAtIHJlcXVlc3QgaWRcbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gZnVsbHkgc2lnbmVkIFR4UmVxdWVzdCBvYmplY3RcbiAgICovXG4gIGFzeW5jIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlKHBhcmFtczogVFNTUGFyYW1zRm9yTWVzc2FnZVdpdGhQcnYpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGlmICghcGFyYW1zLm1lc3NhZ2VSYXcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmF3IG1lc3NhZ2UgcmVxdWlyZWQgdG8gc2lnbiBtZXNzYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNpZ25SZXF1ZXN0QmFzZShwYXJhbXMsIFJlcXVlc3RUeXBlLm1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY2hhbGxlbmdlIHZhbHVlcyBmb3IgZW50ZXJwcmlzZSBhbmQgQml0R28gaW4gRUNEU0Egc2lnbmluZ1xuICAgKiBPbmx5IHJldHVybnMgdGhlIGNoYWxsZW5nZXMgaWYgdGhleSBhcmUgdmVyaWZpZWQgYnkgdGhlIHVzZXIncyBlbnRlcnByaXNlIGFkbWluJ3MgZWNkaCBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR4UmVxdWVzdElkIC0gdHJhbnNhY3Rpb24gcmVxdWVzdCBpZFxuICAgKiBAcGFyYW0ge1JlcXVlc3RUeXBlfSByZXF1ZXN0VHlwZSAtICAoMCBmb3IgdHgsIDEgZm9yIG1lc3NhZ2UpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB3YWxsZXRQYWlsbGllck1vZHVsdXMgLSBwYWlsbGllciBwdWJrZXkgJG4kXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIGluZGV4IG9mIHRoZSByZXF1ZXN0VHlwZVxuICAgKiBAcGFyYW0ge0lSZXF1ZXN0VHJhY2VyfSByZXFJZCAtIHJlcXVlc3QgdHJhY2VyIHJlcXVlc3QgaWRcbiAgICovXG4gIGFzeW5jIGdldEVjZHNhU2lnbmluZ0NoYWxsZW5nZXMoXG4gICAgdHhSZXF1ZXN0SWQ6IHN0cmluZyxcbiAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gICAgd2FsbGV0UGFpbGxpZXJNb2R1bHVzOiBzdHJpbmcsXG4gICAgaW5kZXggPSAwLFxuICAgIHJlcUlkPzogSVJlcXVlc3RUcmFjZXJcbiAgKTogUHJvbWlzZTx7XG4gICAgZW50ZXJwcmlzZUNoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkRWNkc2FDaGFsbGVuZ2VzO1xuICAgIGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZTtcbiAgfT4ge1xuICAgIGNvbnN0IGVudGVycHJpc2VJZCA9IHRoaXMud2FsbGV0LnRvSlNPTigpLmVudGVycHJpc2U7XG4gICAgaWYgKCFlbnRlcnByaXNlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2FsbGV0IG11c3QgYmUgYW4gZW50ZXJwcmlzZSB3YWxsZXQuJyk7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIEJpdEdvIHJhbmdlIHByb29mIGFuZCBwYWlsbGllciBwcm9vZiBjaGFsbGVuZ2VcbiAgICBjb25zdCBjcmVhdGVCaXRnb0NoYWxsZW5nZVJlc3BvbnNlID0gYXdhaXQgZ2V0VHhSZXF1ZXN0Q2hhbGxlbmdlKFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0eFJlcXVlc3RJZCxcbiAgICAgIGluZGV4LnRvU3RyaW5nKCksXG4gICAgICByZXF1ZXN0VHlwZSxcbiAgICAgIHdhbGxldFBhaWxsaWVyTW9kdWx1cyxcbiAgICAgIHJlcUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGJpdGdvVG9FbnRlcnByaXNlUGFpbGxpZXJDaGFsbGVuZ2UgPSB7IHA6IGNyZWF0ZUJpdGdvQ2hhbGxlbmdlUmVzcG9uc2UucCB9O1xuICAgIGNvbnN0IGVudGVycHJpc2VUb0JpdGdvUGFpbGxpZXJDaGFsbGVuZ2UgPSBFY2RzYVR5cGVzLnNlcmlhbGl6ZVBhaWxsaWVyQ2hhbGxlbmdlKHtcbiAgICAgIHA6IGF3YWl0IEVjZHNhUGFpbGxpZXJQcm9vZi5nZW5lcmF0ZVAoaGV4VG9CaWdJbnQoY3JlYXRlQml0Z29DaGFsbGVuZ2VSZXNwb25zZS5uKSksXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPKEJHLTc4NzY0KTogb25jZSB0aGUgcGFpbGxpZXIgcHJvb2ZzIGFyZSBjb21wbGV0ZSwgcmVkdWNlIGNoYWxsZW5nZSBjcmVhdGlvbiB0byBvbmUgQVBJIGNhbGxcbiAgICBjb25zdCB3YWxsZXRDaGFsbGVuZ2VzID0gYXdhaXQgdGhpcy53YWxsZXQuZ2V0Q2hhbGxlbmdlc0ZvckVjZHNhU2lnbmluZygpO1xuXG4gICAgY29uc3QgY2hhbGxlbmdlVmVyaWZpZXJVc2VySWQgPSB3YWxsZXRDaGFsbGVuZ2VzLmNyZWF0ZWRCeTtcbiAgICBjb25zdCBhZG1pblNpZ25pbmdLZXlSZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0U2lnbmluZ0tleUZvclVzZXIoZW50ZXJwcmlzZUlkLCBjaGFsbGVuZ2VWZXJpZmllclVzZXJJZCk7XG4gICAgY29uc3QgcHVia2V5T2ZBZG1pbkVjZGhLZXlIZXggPSBhZG1pblNpZ25pbmdLZXlSZXNwb25zZS5kZXJpdmVkUHVia2V5O1xuXG4gICAgLy8gVmVyaWZ5IGVudGVycHJpc2UncyBjaGFsbGVuZ2UgaXMgc2lnbmVkIGJ5IHRoZSByZXNwZWN0aXZlIGFkbWlucyBlY2RoIGtleWNoYWluXG4gICAgY29uc3QgZW50ZXJwcmlzZVJhd0NoYWxsZW5nZSA9IHtcbiAgICAgIG50aWxkZTogd2FsbGV0Q2hhbGxlbmdlcy5lbnRlcnByaXNlQ2hhbGxlbmdlLm50aWxkZSxcbiAgICAgIGgxOiB3YWxsZXRDaGFsbGVuZ2VzLmVudGVycHJpc2VDaGFsbGVuZ2UuaDEsXG4gICAgICBoMjogd2FsbGV0Q2hhbGxlbmdlcy5lbnRlcnByaXNlQ2hhbGxlbmdlLmgyLFxuICAgIH07XG4gICAgY29uc3QgYWRtaW5TaWduYXR1cmVPbkVudENoYWxsZW5nZTogc3RyaW5nID0gd2FsbGV0Q2hhbGxlbmdlcy5lbnRlcnByaXNlQ2hhbGxlbmdlLnZlcmlmaWVycy5hZG1pblNpZ25hdHVyZTtcbiAgICBpZiAoXG4gICAgICAhdmVyaWZ5RWNkaFNpZ25hdHVyZShcbiAgICAgICAgRWNkc2FVdGlscy5nZXRNZXNzYWdlVG9TaWduRnJvbUNoYWxsZW5nZShlbnRlcnByaXNlUmF3Q2hhbGxlbmdlKSxcbiAgICAgICAgYWRtaW5TaWduYXR1cmVPbkVudENoYWxsZW5nZSxcbiAgICAgICAgQnVmZmVyLmZyb20ocHVia2V5T2ZBZG1pbkVjZGhLZXlIZXgsICdoZXgnKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZG1pbiBzaWduYXR1cmUgZm9yIGVudGVycHJpc2UgY2hhbGxlbmdlIGlzIG5vdCB2YWxpZC4gUGxlYXNlIGNvbnRhY3QgeW91ciBlbnRlcnByaXNlIGFkbWluLmApO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBCaXRHbyBjaGFsbGVuZ2UncyBaSyBwcm9vZnMgaGF2ZSBiZWVuIHZlcmlmaWVkIGJ5IHRoZSBhZG1pblxuICAgIGNvbnN0IGJpdGdvQ2hhbGxlbmdlOiBUeFJlcXVlc3RDaGFsbGVuZ2VSZXNwb25zZSA9IHtcbiAgICAgIG50aWxkZTogd2FsbGV0Q2hhbGxlbmdlcy5iaXRnb0NoYWxsZW5nZS5udGlsZGUsXG4gICAgICBoMTogd2FsbGV0Q2hhbGxlbmdlcy5iaXRnb0NoYWxsZW5nZS5oMSxcbiAgICAgIGgyOiB3YWxsZXRDaGFsbGVuZ2VzLmJpdGdvQ2hhbGxlbmdlLmgyLFxuICAgICAgcDogYml0Z29Ub0VudGVycHJpc2VQYWlsbGllckNoYWxsZW5nZS5wLFxuICAgICAgbjogY3JlYXRlQml0Z29DaGFsbGVuZ2VSZXNwb25zZS5uLFxuICAgIH07XG4gICAgY29uc3QgYWRtaW5WZXJpZmljYXRpb25TaWduYXR1cmVGb3JCaXRHb0NoYWxsZW5nZSA9IHdhbGxldENoYWxsZW5nZXMuYml0Z29DaGFsbGVuZ2UudmVyaWZpZXJzLmFkbWluU2lnbmF0dXJlO1xuICAgIGlmIChcbiAgICAgICF2ZXJpZnlFY2RoU2lnbmF0dXJlKFxuICAgICAgICBFY2RzYVV0aWxzLmdldE1lc3NhZ2VUb1NpZ25Gcm9tQ2hhbGxlbmdlKGJpdGdvQ2hhbGxlbmdlKSxcbiAgICAgICAgYWRtaW5WZXJpZmljYXRpb25TaWduYXR1cmVGb3JCaXRHb0NoYWxsZW5nZSxcbiAgICAgICAgQnVmZmVyLmZyb20ocHVia2V5T2ZBZG1pbkVjZGhLZXlIZXgsICdoZXgnKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZG1pbiBzaWduYXR1cmUgZm9yIEJpdEdvJ3MgY2hhbGxlbmdlIGlzIG5vdCB2YWxpZC4gUGxlYXNlIGNvbnRhY3QgeW91ciBlbnRlcnByaXNlIGFkbWluLmApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbnRlcnByaXNlQ2hhbGxlbmdlOiB7XG4gICAgICAgIC4uLmVudGVycHJpc2VSYXdDaGFsbGVuZ2UsXG4gICAgICAgIHA6IGVudGVycHJpc2VUb0JpdGdvUGFpbGxpZXJDaGFsbGVuZ2UucCxcbiAgICAgIH0sXG4gICAgICBiaXRnb0NoYWxsZW5nZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSB1LXZhbHVlIHByb29mcyBhbmQgR1BHIGtleXMgdXNlZCBpbiBnZW5lcmF0aW5nIGEgVFNTIEVDRFNBIHdhbGxldC5cbiAgICogQHBhcmFtIHVzZXJHcGdQdWIgVGhlIHVzZXIncyBwdWJsaWMgR1BHIGtleSBmb3IgZW5jcnlwdGlvbiBiZXR3ZWVuIHVzZXIvc2VydmVyXG4gICAqIEBwYXJhbSBiYWNrdXBHcGdQdWIgVGhlIGJhY2t1cCdzIHB1YmxpYyBHUEcga2V5IGZvciBlbmNyeXB0aW9uIGJldHdlZW4gYmFja3VwL3NlcnZlclxuICAgKiBAcGFyYW0gYml0Z29LZXljaGFpbiBwcmV2aW91c2x5IGNyZWF0ZWQgQml0R28ga2V5Y2hhaW47IG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHVzZXIgYW5kIGJhY2t1cCBrZXkgc2hhcmVzXG4gICAqIEBwYXJhbSBkZWNyeXB0ZWRTaGFyZSBUaGUgZGVjcnlwdGVkIGJpdGdvLXRvLXVzZXIvYmFja3VwIHByaXZhdGUgc2hhcmUgcmV0cmlldmVkIGZyb20gdGhlIGtleWNoYWluXG4gICAqIEBwYXJhbSB2ZXJpZmllckluZGV4IFRoZSBpbmRleCBvZiB0aGUgcGFydHkgdG8gdmVyaWZ5OiAxID0gdXNlciwgMiA9IGJhY2t1cFxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5V2FsbGV0U2lnbmF0dXJlcyhcbiAgICB1c2VyR3BnUHViOiBzdHJpbmcsXG4gICAgYmFja3VwR3BnUHViOiBzdHJpbmcsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgZGVjcnlwdGVkU2hhcmU6IHN0cmluZyxcbiAgICB2ZXJpZmllckluZGV4OiAxIHwgMlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhc3NlcnQoYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbik7XG4gICAgYXNzZXJ0KGJpdGdvS2V5Y2hhaW4ud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyk7XG5cbiAgICBjb25zdCBiaXRnb0dwZ0tleSA9IChhd2FpdCBnZXRCaXRnb0dwZ1B1YktleSh0aGlzLmJpdGdvKSkubXBjVjE7XG4gICAgY29uc3QgdXNlcktleVB1YiA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHVzZXJHcGdQdWIgfSk7XG4gICAgY29uc3QgdXNlcktleUlkID0gdXNlcktleVB1Yi5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKTtcbiAgICBjb25zdCBiYWNrdXBLZXlQdWIgPSBhd2FpdCBvcGVucGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiYWNrdXBHcGdQdWIgfSk7XG4gICAgY29uc3QgYmFja3VwS2V5SWQgPSBiYWNrdXBLZXlQdWIua2V5UGFja2V0LmdldEZpbmdlcnByaW50KCk7XG5cbiAgICBjb25zdCB3YWxsZXRTaWduYXR1cmVzID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5cyh7IGFybW9yZWRLZXlzOiBiaXRnb0tleWNoYWluLndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3MgfSk7XG4gICAgaWYgKHdhbGxldFNpZ25hdHVyZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgd2FsbGV0IHNpZ25hdHVyZXMnKTtcbiAgICB9XG4gICAgaWYgKHVzZXJLZXlJZCAhPT0gd2FsbGV0U2lnbmF0dXJlc1swXS5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmaXJzdCB3YWxsZXQgc2lnbmF0dXJlJ3MgZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggcGFzc2VkIHVzZXIgZ3BnIGtleSdzIGZpbmdlcnByaW50YCk7XG4gICAgfVxuICAgIGlmIChiYWNrdXBLZXlJZCAhPT0gd2FsbGV0U2lnbmF0dXJlc1sxXS5rZXlQYWNrZXQuZ2V0RmluZ2VycHJpbnQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBzZWNvbmQgd2FsbGV0IHNpZ25hdHVyZSdzIGZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIHBhc3NlZCBiYWNrdXAgZ3BnIGtleSdzIGZpbmdlcnByaW50YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdmVyaWZ5V2FsbGV0U2lnbmF0dXJlKHtcbiAgICAgIHdhbGxldFNpZ25hdHVyZTogd2FsbGV0U2lnbmF0dXJlc1swXSxcbiAgICAgIGNvbW1vbktleWNoYWluOiBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluLFxuICAgICAgdXNlcktleUlkLFxuICAgICAgYmFja3VwS2V5SWQsXG4gICAgICBiaXRnb1B1YjogYml0Z29HcGdLZXksXG4gICAgICBkZWNyeXB0ZWRTaGFyZSxcbiAgICAgIHZlcmlmaWVySW5kZXgsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB2ZXJpZnlXYWxsZXRTaWduYXR1cmUoe1xuICAgICAgd2FsbGV0U2lnbmF0dXJlOiB3YWxsZXRTaWduYXR1cmVzWzFdLFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4sXG4gICAgICB1c2VyS2V5SWQsXG4gICAgICBiYWNrdXBLZXlJZCxcbiAgICAgIGJpdGdvUHViOiBiaXRnb0dwZ0tleSxcbiAgICAgIGRlY3J5cHRlZFNoYXJlLFxuICAgICAgdmVyaWZpZXJJbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyBhIGNoYWxsZW5nZSB3aXRoIHRoZSBwcm92aWRlZCB2MSBlY2RoIGtleSBhdCBhIGRlcml2ZWQgcGF0aFxuICAgKiBAcGFyYW0gY2hhbGxlbmdlIGNoYWxsZW5nZSB0byBzaWduXG4gICAqIEBwYXJhbSBlY2RoWHBydiB4cHJ2IG9mIHRoZSBlY2RoIGtleVxuICAgKiBAcGFyYW0gZGVyaXZhdGlvblBhdGggdGhlIGRlcml2ZWQgcGF0aCBhdCB3aGljaCB0aGUgZWNkaCBrZXkgd2lsbCBzaWduXG4gICAqL1xuICBzdGF0aWMgc2lnbkNoYWxsZW5nZShjaGFsbGVuZ2U6IEVjZHNhVHlwZXMuU2VyaWFsaXplZE50aWxkZSwgZWNkaFhwcnY6IHN0cmluZywgZGVyaXZhdGlvblBhdGg6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IHRoaXMuZ2V0TWVzc2FnZVRvU2lnbkZyb21DaGFsbGVuZ2UoY2hhbGxlbmdlKTtcbiAgICByZXR1cm4gc2lnbk1lc3NhZ2VXaXRoRGVyaXZlZEVjZGhLZXkobWVzc2FnZVRvU2lnbiwgZWNkaFhwcnYsIGRlcml2YXRpb25QYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBjaGFsbGVuZ2UgdG8gYSBjb21tb24gbWVzc2FnZSBmb3JtYXQgd2hpY2ggY2FuIGJlIHNpZ25lZC5cbiAgICogQHBhcmFtIGNoYWxsZW5nZVxuICAgKi9cbiAgc3RhdGljIGdldE1lc3NhZ2VUb1NpZ25Gcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2hhbGxlbmdlLm50aWxkZS5jb25jYXQoY2hhbGxlbmdlLmgxKS5jb25jYXQoY2hhbGxlbmdlLmgyKTtcbiAgfVxuXG4gIC8qKlxuICAgVmVyaWZpZXMgWksgcHJvb2ZzIG9mIEJpdEdvJ3MgY2hhbGxlbmdlcyBmb3IgYm90aCBuaXRybyBhbmQgaW5zdGl0dXRpb25hbCBIU01zXG4gICB3aGljaCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBXUCBBUEkuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgdmVyaWZ5Qml0R29DaGFsbGVuZ2VzKGJpdGdvQ2hhbGxlbmdlczogR2V0Qml0R29DaGFsbGVuZ2VzQXBpKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gVmVyaWZ5IGluc3RpdHV0aW9uYWwgaHNtIGNoYWxsZW5nZSBwcm9vZlxuICAgIGNvbnN0IGluc3RDaGFsbGVuZ2VWZXJpZmllZCA9IGF3YWl0IHRoaXMudmVyaWZ5Qml0R29DaGFsbGVuZ2Uoe1xuICAgICAgbnRpbGRlOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLm50aWxkZSxcbiAgICAgIGgxOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLmgxLFxuICAgICAgaDI6IGJpdGdvQ2hhbGxlbmdlcy5iaXRnb0luc3RpdHV0aW9uYWxIc20uaDIsXG4gICAgICBudGlsZGVQcm9vZjogYml0Z29DaGFsbGVuZ2VzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5udGlsZGVQcm9vZixcbiAgICB9KTtcblxuICAgIC8vIFZlcmlmeSBuaXRybyBoc20gY2hhbGxlbmdlIHByb29mXG4gICAgY29uc3Qgbml0cm9DaGFsbGVuZ2VWZXJpZmllZCA9IGF3YWl0IHRoaXMudmVyaWZ5Qml0R29DaGFsbGVuZ2Uoe1xuICAgICAgbnRpbGRlOiBiaXRnb0NoYWxsZW5nZXMuYml0Z29OaXRyb0hzbS5udGlsZGUsXG4gICAgICBoMTogYml0Z29DaGFsbGVuZ2VzLmJpdGdvTml0cm9Ic20uaDEsXG4gICAgICBoMjogYml0Z29DaGFsbGVuZ2VzLmJpdGdvTml0cm9Ic20uaDIsXG4gICAgICBudGlsZGVQcm9vZjogYml0Z29DaGFsbGVuZ2VzLmJpdGdvTml0cm9Ic20ubnRpbGRlUHJvb2YsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5zdENoYWxsZW5nZVZlcmlmaWVkICYmIG5pdHJvQ2hhbGxlbmdlVmVyaWZpZWQ7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgWksgcHJvb2YgZm9yIGEgc2luZ2xlIEJpdEdvIGNoYWxsZW5nZVxuICAgKiBAcGFyYW0gYml0Z29DaGFsbGVuZ2VcbiAgICovXG4gIHN0YXRpYyBhc3luYyB2ZXJpZnlCaXRHb0NoYWxsZW5nZShiaXRnb0NoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlV2l0aFByb29mcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UgPSBFY2RzYVR5cGVzLmRlc2VyaWFsaXplTnRpbGRlV2l0aFByb29mcyhiaXRnb0NoYWxsZW5nZSk7XG4gICAgY29uc3QgbnRpbGRlUHJvb2ZIMVdydEgyVmVyaWZpZWQgPSBhd2FpdCBFY2RzYVJhbmdlUHJvb2YudmVyaWZ5TnRpbGRlUHJvb2YoXG4gICAgICB7XG4gICAgICAgIG50aWxkZTogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5udGlsZGUsXG4gICAgICAgIGgxOiBkZXNlcmlhbGl6ZWRJbnN0Q2hhbGxlbmdlLmgxLFxuICAgICAgICBoMjogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5oMixcbiAgICAgIH0sXG4gICAgICBkZXNlcmlhbGl6ZWRJbnN0Q2hhbGxlbmdlLm50aWxkZVByb29mLmgxV3J0SDJcbiAgICApO1xuICAgIGNvbnN0IG50aWxkZVByb29mSDJXcnRIMVZlcmlmaWVkID0gYXdhaXQgRWNkc2FSYW5nZVByb29mLnZlcmlmeU50aWxkZVByb29mKFxuICAgICAge1xuICAgICAgICBudGlsZGU6IGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UubnRpbGRlLFxuICAgICAgICBoMTogZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5oMixcbiAgICAgICAgaDI6IGRlc2VyaWFsaXplZEluc3RDaGFsbGVuZ2UuaDEsXG4gICAgICB9LFxuICAgICAgZGVzZXJpYWxpemVkSW5zdENoYWxsZW5nZS5udGlsZGVQcm9vZi5oMldydEgxXG4gICAgKTtcbiAgICByZXR1cm4gbnRpbGRlUHJvb2ZIMVdydEgyVmVyaWZpZWQgJiYgbnRpbGRlUHJvb2ZIMldydEgxVmVyaWZpZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYml0Z28gY2hhbGxlbmdlcyBmb3IgYm90aCBuaXRybyBhbmQgaW5zdGl0dXRpb25hbCBIU01zIGZyb20gV1AgQVBJLlxuICAgKiBAcGFyYW0gYml0Z29cbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRCaXRHb0NoYWxsZW5nZXMoYml0Z286IEJpdEdvQmFzZSk6IFByb21pc2U8R2V0Qml0R29DaGFsbGVuZ2VzQXBpPiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYml0Z28uZ2V0KGJpdGdvLnVybCgnL3Rzcy9lY2RzYS9jaGFsbGVuZ2VzJywgMikpLnNlbmQoKS5yZXN1bHQoKTtcbiAgICBpZiAoXG4gICAgICAhcmVzLmJpdGdvTml0cm9Ic20gfHxcbiAgICAgICFyZXMuYml0Z29OaXRyb0hzbS5udGlsZGUgfHxcbiAgICAgICFyZXMuYml0Z29OaXRyb0hzbS5oMSB8fFxuICAgICAgIXJlcy5iaXRnb05pdHJvSHNtLmgyIHx8XG4gICAgICAhcmVzLmJpdGdvTml0cm9Ic20ubnRpbGRlUHJvb2YgfHxcbiAgICAgICFyZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtIHx8XG4gICAgICAhcmVzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5udGlsZGUgfHxcbiAgICAgICFyZXMuYml0Z29JbnN0aXR1dGlvbmFsSHNtLmgxIHx8XG4gICAgICAhcmVzLmJpdGdvSW5zdGl0dXRpb25hbEhzbS5oMiB8fFxuICAgICAgIXJlcy5iaXRnb0luc3RpdHV0aW9uYWxIc20ubnRpbGRlUHJvb2ZcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgQml0R28gY2hhbGxlbmdlIHByb29mIHRvIGJlIHByZXNlbnQuIENvbnRhY3Qgc3VwcG9ydEBiaXRnby5jb20uJyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBCaXRHbydzIHByb29mcyBmcm9tIEFQSSBhbmQgc2lnbnMgdGhlbSBpZiB0aGUgcHJvb2ZzIGFyZSB2YWxpZC5cbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRlcnByaXNlSWRcbiAgICogQHBhcmFtIHVzZXJQYXNzd29yZFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldFZlcmlmeUFuZFNpZ25CaXRHb0NoYWxsZW5nZXMoXG4gICAgYml0Z286IEJpdEdvQmFzZSxcbiAgICBlbnRlcnByaXNlSWQ6IHN0cmluZyxcbiAgICB1c2VyUGFzc3dvcmQ6IHN0cmluZ1xuICApOiBQcm9taXNlPEJpdEdvUHJvb2ZTaWduYXR1cmVzPiB7XG4gICAgLy8gRmV0Y2ggQml0R28ncyBjaGFsbGVuZ2UgYW5kIHZlcmlmeVxuICAgIGNvbnN0IGJpdGdvQ2hhbGxlbmdlc1dpdGhQcm9vZnMgPSBhd2FpdCBFY2RzYVV0aWxzLmdldEJpdEdvQ2hhbGxlbmdlcyhiaXRnbyk7XG4gICAgaWYgKCEoYXdhaXQgRWNkc2FVdGlscy52ZXJpZnlCaXRHb0NoYWxsZW5nZXMoYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcykpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gdmVyaWZ5IEJpdEdvJ3MgY2hhbGxlbmdlIG5lZWRlZCB0byBlbmFibGUgRUNEU0Egc2lnbmluZy4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBiaXRnby5jb21gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgRWNkc2FVdGlscy5zaWduQml0Z29DaGFsbGVuZ2VzKGJpdGdvLCBlbnRlcnByaXNlSWQsIHVzZXJQYXNzd29yZCwgYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBCaXRnbydzIHByb29mcywgdmVyaWZpY2F0aW9uIG9mIHByb29mcyBpcyBsZWZ0IHRvIHRoZSBjYWxsZXJcbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRlcnByaXNlSWRcbiAgICogQHBhcmFtIHVzZXJQYXNzd29yZFxuICAgKiBAcGFyYW0gYml0Z29DaGFsbGVuZ2VzV2l0aFByb29mcyBPcHRpb25hbGx5IHByb3ZpZGUgQml0Z28gQ2hhbGxhZW5nZSAmIFByb29mcyBpbnN0ZWFkIG9mIGZldGNoaW5nIGZyb20gQVBJXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc2lnbkJpdGdvQ2hhbGxlbmdlcyhcbiAgICBiaXRnbzogQml0R29CYXNlLFxuICAgIGVudGVycHJpc2VJZDogc3RyaW5nLFxuICAgIHVzZXJQYXNzd29yZDogc3RyaW5nLFxuICAgIGJpdGdvQ2hhbGxlbmdlc1dpdGhQcm9vZnM/OiBHZXRCaXRHb0NoYWxsZW5nZXNBcGlcbiAgKTogUHJvbWlzZTxCaXRHb1Byb29mU2lnbmF0dXJlcz4ge1xuICAgIC8vIGZldGNoIGNoYWxsZW5nZSAmIHByb29mIGlmIG5vbmUgYXJlIHByb3ZpZGVkXG4gICAgY29uc3QgY2hhbGxlbmdlc1dpdGhQcm9vZnMgPSBiaXRnb0NoYWxsZW5nZXNXaXRoUHJvb2ZzXG4gICAgICA/IGJpdGdvQ2hhbGxlbmdlc1dpdGhQcm9vZnNcbiAgICAgIDogYXdhaXQgRWNkc2FVdGlscy5nZXRCaXRHb0NoYWxsZW5nZXMoYml0Z28pO1xuXG4gICAgLy8gRmV0Y2ggdXNlcidzIGVjZGggcHVibGljIGtleWNoYWluIG5lZWRlZCBmb3Igc2lnbmluZyB0aGUgY2hhbGxlbmdlc1xuICAgIGNvbnN0IGVjZGhLZXlwYWlyID0gYXdhaXQgYml0Z28uZ2V0RWNkaEtleXBhaXJQcml2YXRlKHVzZXJQYXNzd29yZCwgZW50ZXJwcmlzZUlkKTtcblxuICAgIGNvbnN0IHNpZ25lZEJpdEdvSW5zdENoYWxsZW5nZSA9IEVjZHNhVXRpbHMuc2lnbkNoYWxsZW5nZShcbiAgICAgIGNoYWxsZW5nZXNXaXRoUHJvb2ZzLmJpdGdvSW5zdGl0dXRpb25hbEhzbSxcbiAgICAgIGVjZGhLZXlwYWlyLnhwcnYsXG4gICAgICBlY2RoS2V5cGFpci5kZXJpdmF0aW9uUGF0aFxuICAgICk7XG4gICAgY29uc3Qgc2lnbmVkQml0R29OaXRyb0NoYWxsZW5nZSA9IEVjZHNhVXRpbHMuc2lnbkNoYWxsZW5nZShcbiAgICAgIGNoYWxsZW5nZXNXaXRoUHJvb2ZzLmJpdGdvTml0cm9Ic20sXG4gICAgICBlY2RoS2V5cGFpci54cHJ2LFxuICAgICAgZWNkaEtleXBhaXIuZGVyaXZhdGlvblBhdGhcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBiaXRnb0luc3RIc21BZG1pblNpZ25hdHVyZTogc2lnbmVkQml0R29JbnN0Q2hhbGxlbmdlLFxuICAgICAgYml0Z29OaXRyb0hzbUFkbWluU2lnbmF0dXJlOiBzaWduZWRCaXRHb05pdHJvQ2hhbGxlbmdlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBuZWVkZWQgdG8gZW5hYmxlIGVjZHNhIHNpZ25pbmcgb24gdGhlIGVudGVycHJpc2UuXG4gICAqIEl0IHJlY2VpdmVzIHRoZSBlbnRlcnByaXNlIGNoYWxsZW5nZSBhbmQgc2lnbmF0dXJlcyBvZiB2ZXJpZmllZCBiaXRnbyBwcm9vZnNcbiAgICogYW5kIHVwbG9hZHMgdGhlbSBvbiB0aGUgZW50ZXJwcmlzZS5cbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRJZCAtIGVudGVycHJpc2UgaWQgdG8gZW5hYmxlIGVjZHNhIHNpZ25pbmcgb25cbiAgICogQHBhcmFtIHVzZXJQYXNzd29yZCAtIGVudGVycHJpc2UgYWRtaW4ncyBsb2dpbiBwd1xuICAgKiBAcGFyYW0gYml0Z29JbnN0Q2hhbGxlbmdlUHJvb2ZTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gYml0Z28ncyBpbnN0aXR1dGlvbmFsIEhTTSBjaGFsbGVuZ2UgYWZ0ZXIgdmVyaWZpY2F0aW9uXG4gICAqIEBwYXJhbSBiaXRnb05pdHJvQ2hhbGxlbmdlUHJvb2ZTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gYml0Z28ncyBuaXRybyBIU00gY2hhbGxlbmdlIGFmdGVyIHZlcmlmaWNhdGlvblxuICAgKiBAcGFyYW0gY2hhbGxlbmdlIC0gb3B0aW9uYWxseSB1c2UgdGhlIGNoYWxsZW5nZSBmb3IgZW50ZXJwcmlzZSBjaGFsbGVuZ2VcbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbml0aWF0ZUNoYWxsZW5nZXNGb3JFbnRlcnByaXNlKFxuICAgIGJpdGdvOiBCaXRHb0Jhc2UsXG4gICAgZW50SWQ6IHN0cmluZyxcbiAgICB1c2VyUGFzc3dvcmQ6IHN0cmluZyxcbiAgICBiaXRnb0luc3RDaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZTogQnVmZmVyLFxuICAgIGJpdGdvTml0cm9DaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZTogQnVmZmVyLFxuICAgIG9wZW5TU0xCeXRlczogVWludDhBcnJheSxcbiAgICBjaGFsbGVuZ2U/OiBFY2RzYVR5cGVzLkRlc2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRmV0Y2ggdXNlcidzIGVjZGggcHVibGljIGtleWNoYWluIG5lZWRlZCBmb3Igc2lnbmluZyB0aGUgY2hhbGxlbmdlc1xuICAgIGNvbnN0IGVjZGhLZXlwYWlyID0gYXdhaXQgYml0Z28uZ2V0RWNkaEtleXBhaXJQcml2YXRlKHVzZXJQYXNzd29yZCwgZW50SWQpO1xuXG4gICAgLy8gR2VuZXJhdGUgYW5kIHNpZ24gZW50ZXJwcmlzZSBjaGFsbGVuZ2VcbiAgICBjb25zdCBlbnRDaGFsbGVuZ2VXaXRoUHJvb2YgPVxuICAgICAgY2hhbGxlbmdlID8/IChhd2FpdCBFY2RzYVJhbmdlUHJvb2YuZ2VuZXJhdGVOdGlsZGUob3BlblNTTEJ5dGVzLCBtaW5Nb2R1bHVzQml0TGVuZ3RoKSk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEVudENoYWxsZW5nZVdpdGhQcm9vZiA9IEVjZHNhVHlwZXMuc2VyaWFsaXplTnRpbGRlV2l0aFByb29mcyhlbnRDaGFsbGVuZ2VXaXRoUHJvb2YpO1xuICAgIGNvbnN0IHNpZ25lZEVudGVycHJpc2VDaGFsbGVuZ2UgPSBFY2RzYVV0aWxzLnNpZ25DaGFsbGVuZ2UoXG4gICAgICBzZXJpYWxpemVkRW50Q2hhbGxlbmdlV2l0aFByb29mLFxuICAgICAgZWNkaEtleXBhaXIueHBydixcbiAgICAgIGVjZGhLZXlwYWlyLmRlcml2YXRpb25QYXRoXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMudXBsb2FkQ2hhbGxlbmdlc1RvRW50ZXJwcmlzZShcbiAgICAgIGJpdGdvLFxuICAgICAgZW50SWQsXG4gICAgICBzZXJpYWxpemVkRW50Q2hhbGxlbmdlV2l0aFByb29mLFxuICAgICAgc2lnbmVkRW50ZXJwcmlzZUNoYWxsZW5nZS50b1N0cmluZygnaGV4JyksXG4gICAgICBiaXRnb0luc3RDaGFsbGVuZ2VQcm9vZlNpZ25hdHVyZS50b1N0cmluZygnaGV4JyksXG4gICAgICBiaXRnb05pdHJvQ2hhbGxlbmdlUHJvb2ZTaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIHRoZSBzaWduZWQgY2hhbGxlbmdlcyBhbmQgdGhlaXIgcHJvb2ZzIG9uIHRoZSBlbnRlcnByaXNlLlxuICAgKiBUaGlzIGluaXRpYXRlcyBlY2RzYSBzaWduaW5nIGZvciB0aGUgZW50ZXJwcmlzZSB1c2Vycy5cbiAgICogQHBhcmFtIGJpdGdvXG4gICAqIEBwYXJhbSBlbnRJZCAtIGVudGVycHJpc2UgdG8gZW5hYmxlIGVjZHNhIHNpZ25pbmcgb25cbiAgICogQHBhcmFtIGVudENoYWxsZW5nZSAtIGNsaWVudCBzaWRlIGdlbmVyYXRlZCBlbnQgY2hhbGxlbmdlIHdpdGggWksgcHJvb2ZzXG4gICAqIEBwYXJhbSBlbnRDaGFsbGVuZ2VTaWduYXR1cmUgLSBzaWduYXR1cmUgb24gZW50ZXJwcmlzZSBjaGFsbGVuZ2VcbiAgICogQHBhcmFtIGJpdGdvSW50Q2hhbGxlbmdlU2lnbmF0dXJlIC0gc2lnbmF0dXJlIG9uIEJpdEdvJ3MgaW5zdGl0dXRpb25hbCBIU00gY2hhbGxlbmdlXG4gICAqIEBwYXJhbSBiaXRnb05pdHJvQ2hhbGxlbmdlU2lnbmF0dXJlIC0gc2lnbmF0dXJlIG9uIEJpdEdvJ3Mgbml0cm8gSFNNIGNoYWxsZW5nZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHVwbG9hZENoYWxsZW5nZXNUb0VudGVycHJpc2UoXG4gICAgYml0Z286IEJpdEdvQmFzZSxcbiAgICBlbnRJZDogc3RyaW5nLFxuICAgIGVudENoYWxsZW5nZTogRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlIHwgRWNkc2FUeXBlcy5TZXJpYWxpemVkTnRpbGRlV2l0aFByb29mcyxcbiAgICBlbnRDaGFsbGVuZ2VTaWduYXR1cmU6IHN0cmluZyxcbiAgICBiaXRnb0ludENoYWxsZW5nZVNpZ25hdHVyZTogc3RyaW5nLFxuICAgIGJpdGdvTml0cm9DaGFsbGVuZ2VTaWduYXR1cmU6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgZW50ZXJwcmlzZToge1xuICAgICAgICBudGlsZGU6IGVudENoYWxsZW5nZS5udGlsZGUsXG4gICAgICAgIGgxOiBlbnRDaGFsbGVuZ2UuaDEsXG4gICAgICAgIGgyOiBlbnRDaGFsbGVuZ2UuaDIsXG4gICAgICAgIHZlcmlmaWVyczoge1xuICAgICAgICAgIGFkbWluU2lnbmF0dXJlOiBlbnRDaGFsbGVuZ2VTaWduYXR1cmUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYml0Z29JbnN0aXR1dGlvbmFsSHNtOiB7XG4gICAgICAgIHZlcmlmaWVyczoge1xuICAgICAgICAgIGFkbWluU2lnbmF0dXJlOiBiaXRnb0ludENoYWxsZW5nZVNpZ25hdHVyZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBiaXRnb05pdHJvSHNtOiB7XG4gICAgICAgIHZlcmlmaWVyczoge1xuICAgICAgICAgIGFkbWluU2lnbmF0dXJlOiBiaXRnb05pdHJvQ2hhbGxlbmdlU2lnbmF0dXJlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGlmICgnbnRpbGRlUHJvb2YnIGluIGVudENoYWxsZW5nZSkge1xuICAgICAgYm9keS5lbnRlcnByaXNlWydudGlsZGVQcm9vZiddID0gZW50Q2hhbGxlbmdlLm50aWxkZVByb29mO1xuICAgIH1cbiAgICBhd2FpdCBiaXRnb1xuICAgICAgLnB1dChiaXRnby51cmwoYC9lbnRlcnByaXNlLyR7ZW50SWR9L3Rzc2NvbmZpZy9lY2RzYS9jaGFsbGVuZ2VgLCAyKSlcbiAgICAgIC5zZW5kKGJvZHkpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cbn1cbiJdfQ==