@bitgo-beta/sdk-core 8.2.1-beta.61 → 8.2.1-beta.610
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2444 -0
- package/dist/src/account-lib/baseCoin/baseTransaction.d.ts +0 -1
- package/dist/src/account-lib/baseCoin/baseTransaction.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts +0 -1
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.js +1 -1
- package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +0 -1
- package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/blsKeyPair.js +43 -29
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts +1 -0
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +38 -23
- package/dist/src/account-lib/baseCoin/enum.d.ts +13 -2
- package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/enum.js +25 -5
- package/dist/src/account-lib/baseCoin/errors.js +1 -1
- package/dist/src/account-lib/baseCoin/iface.d.ts +18 -15
- package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/iface.js +10 -7
- package/dist/src/account-lib/baseCoin/index.js +6 -2
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +0 -1
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +31 -17
- package/dist/src/account-lib/index.js +23 -9
- package/dist/src/account-lib/mpc/curves/ed25519.d.ts +4 -18
- package/dist/src/account-lib/mpc/curves/ed25519.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/curves/ed25519.js +6 -60
- package/dist/src/account-lib/mpc/index.d.ts +4 -4
- package/dist/src/account-lib/mpc/index.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/index.js +11 -7
- package/dist/src/account-lib/mpc/shamir.d.ts +5 -37
- package/dist/src/account-lib/mpc/shamir.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/shamir.js +6 -130
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +38 -9
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +495 -347
- package/dist/src/account-lib/mpc/tss/ecdsa/index.js +23 -9
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +2 -2
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +3 -3
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +73 -52
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +1 -2
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +65 -67
- package/dist/src/account-lib/mpc/tss/eddsa/index.js +23 -9
- package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/types.js +1 -1
- package/dist/src/account-lib/mpc/tss/index.js +23 -9
- package/dist/src/account-lib/mpc/util.d.ts +7 -1
- package/dist/src/account-lib/mpc/util.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/util.js +20 -1
- package/dist/src/account-lib/staking/index.js +6 -2
- package/dist/src/account-lib/staking/utils.js +3 -3
- package/dist/src/account-lib/util/crypto.d.ts +8 -2
- package/dist/src/account-lib/util/crypto.d.ts.map +1 -1
- package/dist/src/account-lib/util/crypto.js +61 -31
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +2 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +1 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.js +5 -3
- package/dist/src/api/bip32path.js +2 -3
- package/dist/src/api/index.js +6 -2
- package/dist/src/api/types.d.ts +1 -0
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/api/types.js +1 -1
- package/dist/src/bitgo/address-book/address-book.d.ts +61 -0
- package/dist/src/bitgo/address-book/address-book.d.ts.map +1 -0
- package/dist/src/bitgo/address-book/address-book.js +142 -0
- package/dist/src/bitgo/address-book/index.d.ts +3 -0
- package/dist/src/bitgo/address-book/index.d.ts.map +1 -0
- package/dist/src/bitgo/address-book/index.js +19 -0
- package/dist/src/bitgo/address-book/types.d.ts +170 -0
- package/dist/src/bitgo/address-book/types.d.ts.map +1 -0
- package/dist/src/bitgo/address-book/types.js +3 -0
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts +57 -4
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.js +96 -10
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +77 -19
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +2 -2
- package/dist/src/bitgo/baseCoin/index.js +6 -2
- package/dist/src/bitgo/bip32util.d.ts +0 -1
- package/dist/src/bitgo/bip32util.d.ts.map +1 -1
- package/dist/src/bitgo/bip32util.js +25 -12
- package/dist/src/bitgo/bitcoin.d.ts +0 -1
- package/dist/src/bitgo/bitcoin.d.ts.map +1 -1
- package/dist/src/bitgo/bitcoin.js +26 -13
- package/dist/src/bitgo/bitgoBase.d.ts +4 -1
- package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
- package/dist/src/bitgo/bitgoBase.js +1 -1
- package/dist/src/bitgo/coinFactory.d.ts +1 -1
- package/dist/src/bitgo/coinFactory.d.ts.map +1 -1
- package/dist/src/bitgo/coinFactory.js +1 -1
- package/dist/src/bitgo/config.d.ts +49 -25
- package/dist/src/bitgo/config.d.ts.map +1 -1
- package/dist/src/bitgo/config.js +25 -11
- package/dist/src/bitgo/ecdh.d.ts +0 -1
- package/dist/src/bitgo/ecdh.d.ts.map +1 -1
- package/dist/src/bitgo/ecdh.js +26 -13
- package/dist/src/bitgo/enterprise/enterprise.d.ts +16 -14
- package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
- package/dist/src/bitgo/enterprise/enterprise.js +62 -28
- package/dist/src/bitgo/enterprise/enterprises.d.ts +6 -0
- package/dist/src/bitgo/enterprise/enterprises.d.ts.map +1 -1
- package/dist/src/bitgo/enterprise/enterprises.js +48 -9
- package/dist/src/bitgo/enterprise/iEnterprise.d.ts +6 -7
- package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
- package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
- package/dist/src/bitgo/enterprise/iEnterprises.d.ts +2 -0
- package/dist/src/bitgo/enterprise/iEnterprises.d.ts.map +1 -1
- package/dist/src/bitgo/enterprise/iEnterprises.js +1 -1
- package/dist/src/bitgo/enterprise/index.js +6 -2
- package/dist/src/bitgo/environments.d.ts +26 -5
- package/dist/src/bitgo/environments.d.ts.map +1 -1
- package/dist/src/bitgo/environments.js +44 -15
- package/dist/src/bitgo/errors.d.ts +3 -0
- package/dist/src/bitgo/errors.d.ts.map +1 -1
- package/dist/src/bitgo/errors.js +8 -2
- package/dist/src/bitgo/index.d.ts +1 -0
- package/dist/src/bitgo/index.d.ts.map +1 -1
- package/dist/src/bitgo/index.js +24 -9
- package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts +3 -3
- package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts.map +1 -1
- package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.js +1 -1
- package/dist/src/bitgo/inscriptionBuilder/index.js +6 -2
- package/dist/src/bitgo/internal/index.js +6 -2
- package/dist/src/bitgo/internal/internal.js +5 -6
- package/dist/src/bitgo/internal/keycard.js +6 -7
- package/dist/src/bitgo/keychain/decryptKeychain.d.ts +13 -0
- package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -0
- package/dist/src/bitgo/keychain/decryptKeychain.js +36 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts +62 -4
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +2 -2
- package/dist/src/bitgo/keychain/index.d.ts +1 -0
- package/dist/src/bitgo/keychain/index.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/index.js +7 -2
- package/dist/src/bitgo/keychain/keychains.d.ts +13 -3
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +124 -23
- package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts +63 -33
- package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/ovcJsonCodec.js +35 -16
- package/dist/src/bitgo/legacyBitcoin.d.ts +0 -1
- package/dist/src/bitgo/legacyBitcoin.d.ts.map +1 -1
- package/dist/src/bitgo/legacyBitcoin.js +27 -13
- package/dist/src/bitgo/lightning/codecs.d.ts +143 -0
- package/dist/src/bitgo/lightning/codecs.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/codecs.js +85 -0
- package/dist/src/bitgo/lightning/{iLightning.d.ts → custodial/iLightning.d.ts} +12 -12
- package/dist/src/bitgo/lightning/custodial/iLightning.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/custodial/iLightning.js +120 -0
- package/dist/src/bitgo/lightning/custodial/index.d.ts +5 -0
- package/dist/src/bitgo/lightning/custodial/index.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/custodial/index.js +21 -0
- package/dist/src/bitgo/lightning/{lightning.d.ts → custodial/lightning.d.ts} +2 -2
- package/dist/src/bitgo/lightning/custodial/lightning.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/custodial/lightning.js +111 -0
- package/dist/src/bitgo/lightning/custodial/lightningUtils.d.ts +46 -0
- package/dist/src/bitgo/lightning/custodial/lightningUtils.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/custodial/lightningUtils.js +146 -0
- package/dist/src/bitgo/lightning/custodial/lnurlCodec.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/custodial/lnurlCodec.js +27 -0
- package/dist/src/bitgo/lightning/index.d.ts +4 -3
- package/dist/src/bitgo/lightning/index.d.ts.map +1 -1
- package/dist/src/bitgo/lightning/index.js +10 -5
- package/dist/src/bitgo/lightning/lightningUtils.d.ts +58 -45
- package/dist/src/bitgo/lightning/lightningUtils.d.ts.map +1 -1
- package/dist/src/bitgo/lightning/lightningUtils.js +190 -99
- package/dist/src/bitgo/lightning/lightningWallet.d.ts +18 -0
- package/dist/src/bitgo/lightning/lightningWallet.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/lightningWallet.js +66 -0
- package/dist/src/bitgo/lightning/signableJson.d.ts +17 -0
- package/dist/src/bitgo/lightning/signableJson.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/signableJson.js +29 -0
- package/dist/src/bitgo/lightning/signature.d.ts +22 -0
- package/dist/src/bitgo/lightning/signature.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/signature.js +69 -0
- package/dist/src/bitgo/market/iMarkets.d.ts +2 -2
- package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -1
- package/dist/src/bitgo/market/index.js +6 -2
- package/dist/src/bitgo/market/markets.js +23 -9
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +2 -0
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.js +4 -4
- package/dist/src/bitgo/pendingApproval/index.js +6 -2
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +20 -8
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.js +204 -107
- package/dist/src/bitgo/pendingApproval/pendingApprovals.js +23 -9
- package/dist/src/bitgo/recovery/index.js +6 -2
- package/dist/src/bitgo/recovery/initiate.d.ts +8 -2
- package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
- package/dist/src/bitgo/recovery/initiate.js +7 -8
- package/dist/src/bitgo/staking/iStakingWallet.d.ts +89 -5
- package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/iStakingWallet.js +2 -2
- package/dist/src/bitgo/staking/index.js +6 -2
- package/dist/src/bitgo/staking/stakingWallet.d.ts +13 -2
- package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/stakingWallet.js +38 -2
- package/dist/src/bitgo/trading/iTradingAccount.d.ts +2 -32
- package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -1
- package/dist/src/bitgo/trading/iTradingAccount.js +1 -1
- package/dist/src/bitgo/trading/index.d.ts +1 -15
- package/dist/src/bitgo/trading/index.d.ts.map +1 -1
- package/dist/src/bitgo/trading/index.js +7 -17
- package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts +8 -0
- package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/decrypt-aes-gcm.js +31 -0
- package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts +8 -0
- package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/decrypt-rsa.js +23 -0
- package/dist/src/bitgo/trading/network/decrypt.d.ts +14 -0
- package/dist/src/bitgo/trading/network/decrypt.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/decrypt.js +23 -0
- package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts +8 -0
- package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt-aes-gcm.js +25 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts +8 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa-browser.js +65 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts +8 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa.js +23 -0
- package/dist/src/bitgo/trading/network/encrypt.d.ts +37 -0
- package/dist/src/bitgo/trading/network/encrypt.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt.js +58 -0
- package/dist/src/bitgo/trading/network/index.d.ts +5 -0
- package/dist/src/bitgo/trading/network/index.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/index.js +21 -0
- package/dist/src/bitgo/trading/network/network.d.ts +36 -0
- package/dist/src/bitgo/trading/network/network.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/network.js +101 -0
- package/dist/src/bitgo/trading/network/types.d.ts +277 -0
- package/dist/src/bitgo/trading/network/types.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/types.js +3 -0
- package/dist/src/bitgo/trading/network/utils.d.ts +20 -0
- package/dist/src/bitgo/trading/network/utils.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/utils.js +54 -0
- package/dist/src/bitgo/trading/tradingAccount.d.ts +11 -35
- package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -1
- package/dist/src/bitgo/trading/tradingAccount.js +9 -96
- package/dist/src/bitgo/tss/bitgoPubKeys.d.ts +27 -0
- package/dist/src/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
- package/dist/src/bitgo/tss/bitgoPubKeys.js +61 -0
- package/dist/src/bitgo/tss/common.d.ts +37 -5
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +83 -17
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +6 -4
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/ecdsa.js +75 -59
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts +15 -0
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.js +152 -0
- package/dist/src/bitgo/tss/ecdsa/index.d.ts +1 -0
- package/dist/src/bitgo/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/index.js +25 -10
- package/dist/src/bitgo/tss/ecdsa/types.d.ts +27 -27
- package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/types.js +3 -3
- package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +11 -8
- package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/eddsa/eddsa.js +38 -38
- package/dist/src/bitgo/tss/eddsa/index.js +23 -9
- package/dist/src/bitgo/tss/eddsa/types.d.ts +4 -4
- package/dist/src/bitgo/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/index.d.ts +3 -2
- package/dist/src/bitgo/tss/index.d.ts.map +1 -1
- package/dist/src/bitgo/tss/index.js +26 -10
- package/dist/src/bitgo/tss/types.d.ts +16 -1
- package/dist/src/bitgo/tss/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/types.js +2 -2
- package/dist/src/bitgo/types.d.ts +3 -3
- package/dist/src/bitgo/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +11 -0
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -1
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +66 -10
- package/dist/src/bitgo/utils/blsUtils.js +5 -5
- package/dist/src/bitgo/utils/codecProps.d.ts +7 -0
- package/dist/src/bitgo/utils/codecProps.d.ts.map +1 -0
- package/dist/src/bitgo/utils/codecProps.js +54 -0
- package/dist/src/bitgo/utils/decode.d.ts.map +1 -1
- package/dist/src/bitgo/utils/decode.js +30 -16
- package/dist/src/bitgo/utils/index.d.ts +2 -0
- package/dist/src/bitgo/utils/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/index.js +25 -9
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +15 -12
- package/dist/src/bitgo/utils/notEmpty.d.ts +2 -0
- package/dist/src/bitgo/utils/notEmpty.d.ts.map +1 -0
- package/dist/src/bitgo/utils/notEmpty.js +7 -0
- package/dist/src/bitgo/utils/opengpgUtils.d.ts +11 -4
- package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/opengpgUtils.js +67 -54
- package/dist/src/bitgo/utils/postWithCodec.d.ts +18 -0
- package/dist/src/bitgo/utils/postWithCodec.d.ts.map +1 -0
- package/dist/src/bitgo/utils/postWithCodec.js +25 -0
- package/dist/src/bitgo/utils/promise-utils.d.ts +1 -1
- package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/promise-utils.js +2 -3
- package/dist/src/bitgo/utils/triple.d.ts +1 -1
- package/dist/src/bitgo/utils/triple.d.ts.map +1 -1
- package/dist/src/bitgo/utils/triple.js +2 -3
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +53 -8
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +169 -22
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +225 -20
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +26 -7
- package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts +23 -0
- package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.js +157 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts +30 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.js +51 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +48 -32
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +269 -163
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +199 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +935 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +8 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +13 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +4 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/index.js +10 -2
- package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +15 -7
- package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +107 -0
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +55 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +5 -3
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +68 -53
- package/dist/src/bitgo/utils/tss/eddsa/index.js +23 -9
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +7 -7
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/index.js +23 -9
- package/dist/src/bitgo/utils/util.js +24 -10
- package/dist/src/bitgo/utils/wallet.d.ts +7 -0
- package/dist/src/bitgo/utils/wallet.d.ts.map +1 -0
- package/dist/src/bitgo/utils/wallet.js +48 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts +119 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/BuildParams.js +140 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts +183 -14
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts +61 -13
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +42 -2
- package/dist/src/bitgo/wallet/index.js +6 -2
- package/dist/src/bitgo/wallet/wallet.d.ts +164 -16
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +817 -286
- package/dist/src/bitgo/wallet/wallets.d.ts +66 -8
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +604 -189
- package/dist/src/bitgo/webhook/index.js +6 -2
- package/dist/src/bitgo/webhook/webhooks.js +23 -9
- package/dist/src/coins/fiateur.d.ts +0 -1
- package/dist/src/coins/fiateur.d.ts.map +1 -1
- package/dist/src/coins/fiatgbp.d.ts +0 -1
- package/dist/src/coins/fiatgbp.d.ts.map +1 -1
- package/dist/src/coins/fiatusd.d.ts +0 -1
- package/dist/src/coins/fiatusd.d.ts.map +1 -1
- package/dist/src/coins/index.js +6 -2
- package/dist/src/coins/ofc.d.ts +0 -1
- package/dist/src/coins/ofc.d.ts.map +1 -1
- package/dist/src/coins/ofc.js +2 -2
- package/dist/src/coins/ofcToken.js +2 -2
- package/dist/src/coins/susd.d.ts +0 -1
- package/dist/src/coins/susd.d.ts.map +1 -1
- package/dist/src/common.js +27 -13
- package/dist/src/index.d.ts +6 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +28 -11
- package/dist/src/units.js +5 -6
- package/dist/test/node.utils.d.ts +2 -0
- package/dist/test/node.utils.d.ts.map +1 -0
- package/dist/test/node.utils.js +5 -0
- package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +2 -0
- package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -0
- package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.js +233 -0
- package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.d.ts +3 -0
- package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.d.ts.map +1 -0
- package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.js +24 -0
- package/dist/test/unit/bitgo/lightning/codecs.d.ts +2 -0
- package/dist/test/unit/bitgo/lightning/codecs.d.ts.map +1 -0
- package/dist/test/unit/bitgo/lightning/codecs.js +147 -0
- package/dist/test/unit/bitgo/lightning/createWatchOnlyFixture.d.ts +4 -0
- package/dist/test/unit/bitgo/lightning/createWatchOnlyFixture.d.ts.map +1 -0
- package/dist/test/unit/bitgo/lightning/createWatchOnlyFixture.js +1562 -0
- package/dist/test/unit/bitgo/lightning/lightningUtils.d.ts +2 -0
- package/dist/test/unit/bitgo/lightning/lightningUtils.d.ts.map +1 -0
- package/dist/test/unit/bitgo/lightning/lightningUtils.js +104 -0
- package/dist/test/unit/bitgo/lightning/signableJson.d.ts +2 -0
- package/dist/test/unit/bitgo/lightning/signableJson.d.ts.map +1 -0
- package/dist/test/unit/bitgo/lightning/signableJson.js +52 -0
- package/dist/test/unit/bitgo/lightning/signature.d.ts +2 -0
- package/dist/test/unit/bitgo/lightning/signature.d.ts.map +1 -0
- package/dist/test/unit/bitgo/lightning/signature.js +91 -0
- package/dist/test/unit/bitgo/trading/network/encrypt.d.ts +2 -0
- package/dist/test/unit/bitgo/trading/network/encrypt.d.ts.map +1 -0
- package/dist/test/unit/bitgo/trading/network/encrypt.js +71 -0
- package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.js +45 -0
- package/dist/test/unit/bitgo/utils/notEmpty.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/notEmpty.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/notEmpty.js +15 -0
- package/dist/test/unit/bitgo/utils/postWithCodec.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/postWithCodec.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/postWithCodec.js +73 -0
- package/dist/test/unit/bitgo/wallet/BuildParams.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/BuildParams.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/BuildParams.js +68 -0
- package/dist/test/unit/bitgo/wallet/SendTransactionRequest.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/SendTransactionRequest.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/SendTransactionRequest.js +58 -0
- package/dist/test/unit/units.d.ts +2 -0
- package/dist/test/unit/units.d.ts.map +1 -0
- package/dist/test/unit/units.js +98 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +28 -17
- package/dist/src/account-lib/mpc/hdTree.d.ts +0 -31
- package/dist/src/account-lib/mpc/hdTree.d.ts.map +0 -1
- package/dist/src/account-lib/mpc/hdTree.js +0 -141
- package/dist/src/account-lib/mpc/types.d.ts +0 -5
- package/dist/src/account-lib/mpc/types.d.ts.map +0 -1
- package/dist/src/account-lib/mpc/types.js +0 -3
- package/dist/src/bitgo/lightning/iLightning.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/iLightning.js +0 -106
- package/dist/src/bitgo/lightning/lightning.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/lightning.js +0 -111
- package/dist/src/bitgo/lightning/lnurlCodec.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/lnurlCodec.js +0 -28
- package/dist/src/bitgo/trading/affirmation.d.ts +0 -35
- package/dist/src/bitgo/trading/affirmation.d.ts.map +0 -1
- package/dist/src/bitgo/trading/affirmation.js +0 -53
- package/dist/src/bitgo/trading/affirmations.d.ts +0 -23
- package/dist/src/bitgo/trading/affirmations.d.ts.map +0 -1
- package/dist/src/bitgo/trading/affirmations.js +0 -45
- package/dist/src/bitgo/trading/iAffirmation.d.ts +0 -15
- package/dist/src/bitgo/trading/iAffirmation.d.ts.map +0 -1
- package/dist/src/bitgo/trading/iAffirmation.js +0 -13
- package/dist/src/bitgo/trading/iAffirmations.d.ts +0 -10
- package/dist/src/bitgo/trading/iAffirmations.d.ts.map +0 -1
- package/dist/src/bitgo/trading/iAffirmations.js +0 -3
- package/dist/src/bitgo/trading/iSettlement.d.ts +0 -25
- package/dist/src/bitgo/trading/iSettlement.d.ts.map +0 -1
- package/dist/src/bitgo/trading/iSettlement.js +0 -17
- package/dist/src/bitgo/trading/iSettlements.d.ts +0 -19
- package/dist/src/bitgo/trading/iSettlements.d.ts.map +0 -1
- package/dist/src/bitgo/trading/iSettlements.js +0 -3
- package/dist/src/bitgo/trading/iTradingPartner.d.ts +0 -14
- package/dist/src/bitgo/trading/iTradingPartner.d.ts.map +0 -1
- package/dist/src/bitgo/trading/iTradingPartner.js +0 -17
- package/dist/src/bitgo/trading/iTradingPartners.d.ts +0 -15
- package/dist/src/bitgo/trading/iTradingPartners.d.ts.map +0 -1
- package/dist/src/bitgo/trading/iTradingPartners.js +0 -9
- package/dist/src/bitgo/trading/lock.d.ts +0 -16
- package/dist/src/bitgo/trading/lock.d.ts.map +0 -1
- package/dist/src/bitgo/trading/lock.js +0 -12
- package/dist/src/bitgo/trading/payload.d.ts +0 -22
- package/dist/src/bitgo/trading/payload.d.ts.map +0 -1
- package/dist/src/bitgo/trading/payload.js +0 -3
- package/dist/src/bitgo/trading/settlement.d.ts +0 -16
- package/dist/src/bitgo/trading/settlement.d.ts.map +0 -1
- package/dist/src/bitgo/trading/settlement.js +0 -21
- package/dist/src/bitgo/trading/settlements.d.ts +0 -32
- package/dist/src/bitgo/trading/settlements.d.ts.map +0 -1
- package/dist/src/bitgo/trading/settlements.js +0 -61
- package/dist/src/bitgo/trading/trade.d.ts +0 -29
- package/dist/src/bitgo/trading/trade.d.ts.map +0 -1
- package/dist/src/bitgo/trading/trade.js +0 -11
- package/dist/src/bitgo/trading/tradingPartner.d.ts +0 -26
- package/dist/src/bitgo/trading/tradingPartner.d.ts.map +0 -1
- package/dist/src/bitgo/trading/tradingPartner.js +0 -31
- package/dist/src/bitgo/trading/tradingPartners.d.ts +0 -24
- package/dist/src/bitgo/trading/tradingPartners.d.ts.map +0 -1
- package/dist/src/bitgo/trading/tradingPartners.js +0 -32
- package/dist/src/openssl/index.d.ts +0 -5
- package/dist/src/openssl/index.d.ts.map +0 -1
- package/dist/src/openssl/index.js +0 -9
- /package/dist/src/bitgo/lightning/{lnurlCodec.d.ts → custodial/lnurlCodec.d.ts} +0 -0
|
@@ -5,15 +5,22 @@ import { BitGoBase } from '../../bitgoBase';
|
|
|
5
5
|
import { Keychain } from '../../keychain';
|
|
6
6
|
import { IWallet, BackupProvider } from '../../wallet';
|
|
7
7
|
import { MpcUtils } from '../mpcUtils';
|
|
8
|
-
import { BitgoHeldBackupKeyShare, CustomGShareGeneratingFunction, CustomRShareGeneratingFunction, ITssUtils, PrebuildTransactionWithIntentOptions, SignatureShareRecord, TSSParams, TxRequest, TxRequestVersion, CreateKeychainParamsBase, IntentOptionsForMessage, IntentOptionsForTypedData, CreateBitGoKeychainParamsBase, CommitmentShareRecord, EncryptedSignerShareRecord, CustomCommitmentGeneratingFunction } from './baseTypes';
|
|
8
|
+
import { BitgoHeldBackupKeyShare, CustomGShareGeneratingFunction, CustomRShareGeneratingFunction, ITssUtils, PrebuildTransactionWithIntentOptions, SignatureShareRecord, TSSParams, TxRequest, TxRequestVersion, CreateKeychainParamsBase, IntentOptionsForMessage, IntentOptionsForTypedData, CreateBitGoKeychainParamsBase, CommitmentShareRecord, EncryptedSignerShareRecord, CustomCommitmentGeneratingFunction, TSSParamsForMessage, RequestType, CustomPaillierModulusGetterFunction, CustomKShareGeneratingFunction, CustomMuDeltaShareGeneratingFunction, CustomSShareGeneratingFunction, CustomMPCv2SigningRound1GeneratingFunction, CustomMPCv2SigningRound2GeneratingFunction, CustomMPCv2SigningRound3GeneratingFunction, TSSParamsWithPrv } from './baseTypes';
|
|
9
9
|
import { GShare, SignShare } from '../../../account-lib/mpc/tss';
|
|
10
|
+
import * as openpgp from 'openpgp';
|
|
10
11
|
/**
|
|
11
12
|
* BaseTssUtil class which different signature schemes have to extend
|
|
12
13
|
*/
|
|
13
14
|
export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtils<KeyShare> {
|
|
14
15
|
private _wallet?;
|
|
16
|
+
protected bitgoPublicGpgKey: openpgp.Key;
|
|
17
|
+
protected bitgoMPCv2PublicGpgKey: openpgp.Key | undefined;
|
|
15
18
|
constructor(bitgo: BitGoBase, baseCoin: IBaseCoin, wallet?: IWallet);
|
|
16
19
|
get wallet(): IWallet;
|
|
20
|
+
protected setBitgoGpgPubKey(bitgo: any): Promise<void>;
|
|
21
|
+
protected pickBitgoPubGpgKeyForSigning(isMpcv2: boolean, reqId?: IRequestTracer, enterpriseId?: string): Promise<openpgp.Key>;
|
|
22
|
+
getBitgoPublicGpgKey(): Promise<openpgp.Key>;
|
|
23
|
+
getBitgoMpcv2PublicGpgKey(): Promise<openpgp.Key>;
|
|
17
24
|
createBitgoHeldBackupKeyShare(userGpgKey: SerializedKeyPair<string>, enterprise: string | undefined): Promise<BitgoHeldBackupKeyShare>;
|
|
18
25
|
finalizeBitgoHeldBackupKeyShare(keyId: string, commonKeychain: string, userKeyShare: KeyShare, bitgoKeychain: Keychain, userGpgKey: SerializedKeyPair<string>, backupGpgKey: Key): Promise<BitgoHeldBackupKeyShare>;
|
|
19
26
|
createUserKeychain(params: CreateKeychainParamsBase): Promise<Keychain>;
|
|
@@ -26,8 +33,8 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
|
|
|
26
33
|
isThirdPartyBackup?: boolean;
|
|
27
34
|
backupProvider?: BackupProvider;
|
|
28
35
|
}): Promise<KeychainsTriplet>;
|
|
29
|
-
signTxRequest(params:
|
|
30
|
-
signTxRequestForMessage(params:
|
|
36
|
+
signTxRequest(params: TSSParamsWithPrv): Promise<TxRequest>;
|
|
37
|
+
signTxRequestForMessage(params: TSSParamsForMessage): Promise<TxRequest>;
|
|
31
38
|
/**
|
|
32
39
|
* Signs a transaction using TSS for EdDSA and through utilization of custom share generators
|
|
33
40
|
*
|
|
@@ -36,7 +43,29 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
|
|
|
36
43
|
* @param {CustomGShareGeneratingFunction} externalSignerGShareGenerator a function that creates G shares in the EdDSA TSS flow
|
|
37
44
|
* @returns {Promise<TxRequest>} - a signed tx request
|
|
38
45
|
*/
|
|
39
|
-
|
|
46
|
+
signEddsaTssUsingExternalSigner(txRequest: string | TxRequest, externalSignerCommitmentGenerator: CustomCommitmentGeneratingFunction, externalSignerRShareGenerator: CustomRShareGeneratingFunction, externalSignerGShareGenerator: CustomGShareGeneratingFunction): Promise<TxRequest>;
|
|
47
|
+
/**
|
|
48
|
+
* Signs a transaction using TSS for ECDSA and through utilization of custom share generators
|
|
49
|
+
*
|
|
50
|
+
* @param {params: TSSParams | TSSParamsForMessage} params - params object that represents parameters to sign a transaction or a message.
|
|
51
|
+
* @param {RequestType} requestType - the type of the request to sign (transaction or message).
|
|
52
|
+
* @param {CustomPaillierModulusGetterFunction} externalSignerPaillierModulusGetter a function that creates Paillier Modulus shares in the ECDSA TSS flow.
|
|
53
|
+
* @param {CustomKShareGeneratingFunction} externalSignerKShareGenerator a function that creates K shares in the ECDSA TSS flow.
|
|
54
|
+
* @param {CustomMuDeltaShareGeneratingFunction} externalSignerMuDeltaShareGenerator a function that creates Mu and Delta shares in the ECDSA TSS flow.
|
|
55
|
+
* @param {CustomSShareGeneratingFunction} externalSignerSShareGenerator a function that creates S shares in the ECDSA TSS flow.
|
|
56
|
+
*/
|
|
57
|
+
signEcdsaTssUsingExternalSigner(params: TSSParams | TSSParamsForMessage, requestType: RequestType, externalSignerPaillierModulusGetter: CustomPaillierModulusGetterFunction, externalSignerKShareGenerator: CustomKShareGeneratingFunction, externalSignerMuDeltaShareGenerator: CustomMuDeltaShareGeneratingFunction, externalSignerSShareGenerator: CustomSShareGeneratingFunction): Promise<TxRequest>;
|
|
58
|
+
/**
|
|
59
|
+
* Signs a transaction using TSS MPCv2 for ECDSA and through utilization of custom share generators
|
|
60
|
+
*
|
|
61
|
+
* @param {TSSParams | TSSParamsForMessage} params - params object that represents parameters to sign a transaction or a message.
|
|
62
|
+
* @param {CustomMPCv2SigningRound1GeneratingFunction} externalSignerMPCv2SigningRound1Generator - a function that creates MPCv2 Round 1 shares in the ECDSA TSS MPCv2 flow.
|
|
63
|
+
* @param {CustomMPCv2SigningRound2GeneratingFunction} externalSignerMPCv2SigningRound2Generator - a function that creates MPCv2 Round 2 shares in the ECDSA TSS MPCv2 flow.
|
|
64
|
+
* @param {CustomMPCv2SigningRound3GeneratingFunction} externalSignerMPCv2SigningRound3Generator - a function that creates MPCv2 Round 3 shares in the ECDSA TSS MPCv2 flow.
|
|
65
|
+
* @param {RequestType} requestType - the type of the request to sign (transaction or message).
|
|
66
|
+
* @returns {Promise<TxRequest>} - a signed tx request
|
|
67
|
+
*/
|
|
68
|
+
signEcdsaMPCv2TssUsingExternalSigner(params: TSSParams | TSSParamsForMessage, externalSignerMPCv2SigningRound1Generator: CustomMPCv2SigningRound1GeneratingFunction, externalSignerMPCv2SigningRound2Generator: CustomMPCv2SigningRound2GeneratingFunction, externalSignerMPCv2SigningRound3Generator: CustomMPCv2SigningRound3GeneratingFunction, requestType?: RequestType): Promise<TxRequest>;
|
|
40
69
|
/**
|
|
41
70
|
* Create an Commitment (User to BitGo) share from an unsigned transaction and private user signing material
|
|
42
71
|
* EDDSA only
|
|
@@ -52,6 +81,7 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
|
|
|
52
81
|
txRequest: TxRequest;
|
|
53
82
|
prv: string;
|
|
54
83
|
walletPassphrase: string;
|
|
84
|
+
bitgoGpgPubKey: string;
|
|
55
85
|
}): Promise<{
|
|
56
86
|
userToBitgoCommitment: CommitmentShareRecord;
|
|
57
87
|
encryptedSignerShare: EncryptedSignerShareRecord;
|
|
@@ -127,16 +157,18 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
|
|
|
127
157
|
* Call delete signature shares for a txRequest, the endpoint delete the signatures and return them
|
|
128
158
|
*
|
|
129
159
|
* @param {string} txRequestId tx id reference to delete signature shares
|
|
160
|
+
* @param {IRequestTracer} reqId - the request tracer request id
|
|
130
161
|
* @returns {SignatureShareRecord[]}
|
|
131
162
|
*/
|
|
132
|
-
deleteSignatureShares(txRequestId: string): Promise<SignatureShareRecord[]>;
|
|
163
|
+
deleteSignatureShares(txRequestId: string, reqId?: IRequestTracer): Promise<SignatureShareRecord[]>;
|
|
133
164
|
/**
|
|
134
165
|
* Initialize the send procedure once Bitgo has the User To Bitgo GShare
|
|
135
166
|
*
|
|
136
167
|
* @param {String} txRequestId - the txRequest Id
|
|
168
|
+
* @param {IRequestTracer} reqId - the request tracer request id
|
|
137
169
|
* @returns {Promise<any>}
|
|
138
170
|
*/
|
|
139
|
-
sendTxRequest(txRequestId: string): Promise<any>;
|
|
171
|
+
sendTxRequest(txRequestId: string, reqId?: IRequestTracer): Promise<any>;
|
|
140
172
|
/**
|
|
141
173
|
* Delete signature shares, get the tx request without them from the db and sign it to finally send it.
|
|
142
174
|
*
|
|
@@ -152,9 +184,10 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
|
|
|
152
184
|
* Gets the latest Tx Request by id
|
|
153
185
|
*
|
|
154
186
|
* @param {String} txRequestId - the txRequest Id
|
|
187
|
+
* @param {IRequestTracer} reqId - request tracer request id
|
|
155
188
|
* @returns {Promise<TxRequest>}
|
|
156
189
|
*/
|
|
157
|
-
getTxRequest(txRequestId: string): Promise<TxRequest>;
|
|
190
|
+
getTxRequest(txRequestId: string, reqId?: IRequestTracer): Promise<TxRequest>;
|
|
158
191
|
/**
|
|
159
192
|
* Checks whether the third party backup provider is valid/supported
|
|
160
193
|
* @param backupProvider - the backup provider client selected
|
|
@@ -164,7 +197,19 @@ export default class BaseTssUtils<KeyShare> extends MpcUtils implements ITssUtil
|
|
|
164
197
|
* It gets the appropriate BitGo GPG public key for key creation based on a
|
|
165
198
|
* combination of coin and the feature flags on the user and their enterprise if set.
|
|
166
199
|
* @param enterpriseId - enterprise under which user wants to create the wallet
|
|
200
|
+
* @param isMPCv2 - true to get the MPCv2 GPG public key, defaults to false
|
|
201
|
+
* @param reqId - request tracer request id
|
|
202
|
+
*/
|
|
203
|
+
getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId: string | undefined, isMPCv2?: boolean, reqId?: IRequestTracer): Promise<Key>;
|
|
204
|
+
/**
|
|
205
|
+
* Returns supported TxRequest versions for this wallet
|
|
206
|
+
*/
|
|
207
|
+
supportedTxRequestVersions(): TxRequestVersion[];
|
|
208
|
+
/**
|
|
209
|
+
* Returns true if the txRequest is using apiVersion == full and is pending approval
|
|
210
|
+
* @param txRequest
|
|
211
|
+
* @returns boolean
|
|
167
212
|
*/
|
|
168
|
-
|
|
213
|
+
isPendingApprovalTxRequestFull(txRequest: TxRequest): boolean;
|
|
169
214
|
}
|
|
170
215
|
//# sourceMappingURL=baseTSSUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseTSSUtils.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/utils/tss/baseTSSUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAW,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"baseTSSUtils.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/utils/tss/baseTSSUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -11,18 +15,33 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
11
15
|
}) : function(o, v) {
|
|
12
16
|
o["default"] = v;
|
|
13
17
|
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
21
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
36
|
const openpgp_1 = require("openpgp");
|
|
37
|
+
const keychain_1 = require("../../keychain");
|
|
23
38
|
const tss_1 = require("../../tss");
|
|
24
39
|
const mpcUtils_1 = require("../mpcUtils");
|
|
25
40
|
const _ = __importStar(require("lodash"));
|
|
41
|
+
const util_1 = require("../util");
|
|
42
|
+
const openpgp = __importStar(require("openpgp"));
|
|
43
|
+
const bitgoPubKeys_1 = require("../../tss/bitgoPubKeys");
|
|
44
|
+
const opengpgUtils_1 = require("../opengpgUtils");
|
|
26
45
|
/**
|
|
27
46
|
* BaseTssUtil class which different signature schemes have to extend
|
|
28
47
|
*/
|
|
@@ -37,6 +56,62 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
|
|
|
37
56
|
}
|
|
38
57
|
return this._wallet;
|
|
39
58
|
}
|
|
59
|
+
async setBitgoGpgPubKey(bitgo) {
|
|
60
|
+
const { mpcV1, mpcV2 } = await (0, opengpgUtils_1.getBitgoGpgPubKey)(bitgo);
|
|
61
|
+
// Do not unset the MPCv1 key if it is already set. This is to avoid unsetting if extra constants api calls fail.
|
|
62
|
+
if (mpcV1 !== undefined) {
|
|
63
|
+
this.bitgoPublicGpgKey = mpcV1;
|
|
64
|
+
}
|
|
65
|
+
// Do not unset the MPCv2 key if it is already set
|
|
66
|
+
if (mpcV2 !== undefined) {
|
|
67
|
+
this.bitgoMPCv2PublicGpgKey = mpcV2;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async pickBitgoPubGpgKeyForSigning(isMpcv2, reqId, enterpriseId) {
|
|
71
|
+
let bitgoGpgPubKey;
|
|
72
|
+
try {
|
|
73
|
+
const bitgoKeyChain = await this.baseCoin.keychains().get({ id: this.wallet.keyIds()[keychain_1.KeyIndices.BITGO], reqId });
|
|
74
|
+
if (!bitgoKeyChain || !bitgoKeyChain.hsmType) {
|
|
75
|
+
throw new Error('Missing Bitgo GPG Pub Key Type.');
|
|
76
|
+
}
|
|
77
|
+
bitgoGpgPubKey = await openpgp.readKey({
|
|
78
|
+
armoredKey: (0, bitgoPubKeys_1.getBitgoMpcGpgPubKey)(this.bitgo.getEnv(), bitgoKeyChain.hsmType === 'nitro' ? 'nitro' : 'onprem', isMpcv2 ? 'mpcv2' : 'mpcv1'),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
if (!(0, bitgoPubKeys_1.envRequiresBitgoPubGpgKeyConfig)(this.bitgo.getEnv())) {
|
|
83
|
+
console.warn(`Unable to get BitGo GPG key based on key data with error: ${e}. Fetching BitGo GPG key based on feature flags.`);
|
|
84
|
+
// First try to get the key based on feature flags, if that fails, fallback to the default key from constants api.
|
|
85
|
+
bitgoGpgPubKey = await this.getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId, isMpcv2, reqId)
|
|
86
|
+
.then(async (pubKey) => pubKey !== null && pubKey !== void 0 ? pubKey : (isMpcv2 ? await this.getBitgoMpcv2PublicGpgKey() : await this.getBitgoPublicGpgKey()))
|
|
87
|
+
.catch(async (e) => (isMpcv2 ? await this.getBitgoMpcv2PublicGpgKey() : await this.getBitgoPublicGpgKey()));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
throw new Error(`Environment "${this.bitgo.getEnv()}" requires a BitGo GPG Pub Key Config in BitGoJS for TSS. Error thrown while getting the key from config: ${e}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return bitgoGpgPubKey;
|
|
94
|
+
}
|
|
95
|
+
async getBitgoPublicGpgKey() {
|
|
96
|
+
if (!this.bitgoPublicGpgKey) {
|
|
97
|
+
// retry getting bitgo's gpg key
|
|
98
|
+
await this.setBitgoGpgPubKey(this.bitgo);
|
|
99
|
+
if (!this.bitgoPublicGpgKey) {
|
|
100
|
+
throw new Error("Failed to get Bitgo's gpg key");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return this.bitgoPublicGpgKey;
|
|
104
|
+
}
|
|
105
|
+
async getBitgoMpcv2PublicGpgKey() {
|
|
106
|
+
if (!this.bitgoMPCv2PublicGpgKey) {
|
|
107
|
+
// retry getting bitgo's gpg key
|
|
108
|
+
await this.setBitgoGpgPubKey(this.bitgo);
|
|
109
|
+
if (!this.bitgoMPCv2PublicGpgKey) {
|
|
110
|
+
throw new Error("Failed to get Bitgo's gpg key");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return this.bitgoMPCv2PublicGpgKey;
|
|
114
|
+
}
|
|
40
115
|
async createBitgoHeldBackupKeyShare(userGpgKey, enterprise) {
|
|
41
116
|
const keyResponse = await this.bitgo
|
|
42
117
|
.post(this.baseCoin.url('/krs/backupkeys'))
|
|
@@ -82,7 +157,33 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
|
|
|
82
157
|
* @param {CustomGShareGeneratingFunction} externalSignerGShareGenerator a function that creates G shares in the EdDSA TSS flow
|
|
83
158
|
* @returns {Promise<TxRequest>} - a signed tx request
|
|
84
159
|
*/
|
|
85
|
-
|
|
160
|
+
signEddsaTssUsingExternalSigner(txRequest, externalSignerCommitmentGenerator, externalSignerRShareGenerator, externalSignerGShareGenerator) {
|
|
161
|
+
throw new Error('Method not implemented.');
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Signs a transaction using TSS for ECDSA and through utilization of custom share generators
|
|
165
|
+
*
|
|
166
|
+
* @param {params: TSSParams | TSSParamsForMessage} params - params object that represents parameters to sign a transaction or a message.
|
|
167
|
+
* @param {RequestType} requestType - the type of the request to sign (transaction or message).
|
|
168
|
+
* @param {CustomPaillierModulusGetterFunction} externalSignerPaillierModulusGetter a function that creates Paillier Modulus shares in the ECDSA TSS flow.
|
|
169
|
+
* @param {CustomKShareGeneratingFunction} externalSignerKShareGenerator a function that creates K shares in the ECDSA TSS flow.
|
|
170
|
+
* @param {CustomMuDeltaShareGeneratingFunction} externalSignerMuDeltaShareGenerator a function that creates Mu and Delta shares in the ECDSA TSS flow.
|
|
171
|
+
* @param {CustomSShareGeneratingFunction} externalSignerSShareGenerator a function that creates S shares in the ECDSA TSS flow.
|
|
172
|
+
*/
|
|
173
|
+
signEcdsaTssUsingExternalSigner(params, requestType, externalSignerPaillierModulusGetter, externalSignerKShareGenerator, externalSignerMuDeltaShareGenerator, externalSignerSShareGenerator) {
|
|
174
|
+
throw new Error('Method not implemented.');
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Signs a transaction using TSS MPCv2 for ECDSA and through utilization of custom share generators
|
|
178
|
+
*
|
|
179
|
+
* @param {TSSParams | TSSParamsForMessage} params - params object that represents parameters to sign a transaction or a message.
|
|
180
|
+
* @param {CustomMPCv2SigningRound1GeneratingFunction} externalSignerMPCv2SigningRound1Generator - a function that creates MPCv2 Round 1 shares in the ECDSA TSS MPCv2 flow.
|
|
181
|
+
* @param {CustomMPCv2SigningRound2GeneratingFunction} externalSignerMPCv2SigningRound2Generator - a function that creates MPCv2 Round 2 shares in the ECDSA TSS MPCv2 flow.
|
|
182
|
+
* @param {CustomMPCv2SigningRound3GeneratingFunction} externalSignerMPCv2SigningRound3Generator - a function that creates MPCv2 Round 3 shares in the ECDSA TSS MPCv2 flow.
|
|
183
|
+
* @param {RequestType} requestType - the type of the request to sign (transaction or message).
|
|
184
|
+
* @returns {Promise<TxRequest>} - a signed tx request
|
|
185
|
+
*/
|
|
186
|
+
signEcdsaMPCv2TssUsingExternalSigner(params, externalSignerMPCv2SigningRound1Generator, externalSignerMPCv2SigningRound2Generator, externalSignerMPCv2SigningRound3Generator, requestType) {
|
|
86
187
|
throw new Error('Method not implemented.');
|
|
87
188
|
}
|
|
88
189
|
/**
|
|
@@ -143,6 +244,8 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
|
|
|
143
244
|
apiVersion: apiVersion,
|
|
144
245
|
preview,
|
|
145
246
|
};
|
|
247
|
+
const reqTracer = params.reqId || new util_1.RequestTracer();
|
|
248
|
+
this.bitgo.setRequestTracer(reqTracer);
|
|
146
249
|
const unsignedTx = (await this.bitgo
|
|
147
250
|
.post(this.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests', 2))
|
|
148
251
|
.send(whitelistedParams)
|
|
@@ -168,7 +271,7 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
|
|
|
168
271
|
messageRaw: params.messageRaw,
|
|
169
272
|
messageEncoded: (_b = params.messageEncoded) !== null && _b !== void 0 ? _b : '',
|
|
170
273
|
};
|
|
171
|
-
return this.createTxRequestBase(intentOptions, apiVersion, preview);
|
|
274
|
+
return this.createTxRequestBase(intentOptions, apiVersion, preview, params.reqId);
|
|
172
275
|
}
|
|
173
276
|
/**
|
|
174
277
|
* Create a tx request from params for type data signing
|
|
@@ -189,14 +292,14 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
|
|
|
189
292
|
messageRaw: params.typedDataRaw,
|
|
190
293
|
messageEncoded: (_b = params.typedDataEncoded) !== null && _b !== void 0 ? _b : '',
|
|
191
294
|
};
|
|
192
|
-
return this.createTxRequestBase(intentOptions, apiVersion, preview);
|
|
295
|
+
return this.createTxRequestBase(intentOptions, apiVersion, preview, params.reqId);
|
|
193
296
|
}
|
|
194
297
|
/**
|
|
195
298
|
* Calls Bitgo API to create tx request.
|
|
196
299
|
*
|
|
197
300
|
* @private
|
|
198
301
|
*/
|
|
199
|
-
async createTxRequestBase(intentOptions, apiVersion, preview) {
|
|
302
|
+
async createTxRequestBase(intentOptions, apiVersion, preview, reqId) {
|
|
200
303
|
const whitelistedParams = {
|
|
201
304
|
intent: {
|
|
202
305
|
...intentOptions,
|
|
@@ -204,6 +307,8 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
|
|
|
204
307
|
apiVersion,
|
|
205
308
|
preview,
|
|
206
309
|
};
|
|
310
|
+
const reqTracer = reqId || new util_1.RequestTracer();
|
|
311
|
+
this.bitgo.setRequestTracer(reqTracer);
|
|
207
312
|
return this.bitgo
|
|
208
313
|
.post(this.bitgo.url(`/wallet/${this.wallet.id()}/txrequests`, 2))
|
|
209
314
|
.send(whitelistedParams)
|
|
@@ -213,9 +318,12 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
|
|
|
213
318
|
* Call delete signature shares for a txRequest, the endpoint delete the signatures and return them
|
|
214
319
|
*
|
|
215
320
|
* @param {string} txRequestId tx id reference to delete signature shares
|
|
321
|
+
* @param {IRequestTracer} reqId - the request tracer request id
|
|
216
322
|
* @returns {SignatureShareRecord[]}
|
|
217
323
|
*/
|
|
218
|
-
async deleteSignatureShares(txRequestId) {
|
|
324
|
+
async deleteSignatureShares(txRequestId, reqId) {
|
|
325
|
+
const reqTracer = reqId || new util_1.RequestTracer();
|
|
326
|
+
this.bitgo.setRequestTracer(reqTracer);
|
|
219
327
|
return this.bitgo
|
|
220
328
|
.del(this.bitgo.url(`/wallet/${this.wallet.id()}/txrequests/${txRequestId}/signatureshares`, 2))
|
|
221
329
|
.send()
|
|
@@ -225,10 +333,13 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
|
|
|
225
333
|
* Initialize the send procedure once Bitgo has the User To Bitgo GShare
|
|
226
334
|
*
|
|
227
335
|
* @param {String} txRequestId - the txRequest Id
|
|
336
|
+
* @param {IRequestTracer} reqId - the request tracer request id
|
|
228
337
|
* @returns {Promise<any>}
|
|
229
338
|
*/
|
|
230
339
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
231
|
-
async sendTxRequest(txRequestId) {
|
|
340
|
+
async sendTxRequest(txRequestId, reqId) {
|
|
341
|
+
const reqTracer = reqId || new util_1.RequestTracer();
|
|
342
|
+
this.bitgo.setRequestTracer(reqTracer);
|
|
232
343
|
return this.bitgo
|
|
233
344
|
.post(this.baseCoin.url('/wallet/' + this.wallet.id() + '/tx/send'))
|
|
234
345
|
.send({ txRequestId })
|
|
@@ -245,19 +356,20 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
|
|
|
245
356
|
* @returns {Promise<any>}
|
|
246
357
|
*/
|
|
247
358
|
async recreateTxRequest(txRequestId, decryptedPrv, reqId) {
|
|
248
|
-
await this.deleteSignatureShares(txRequestId);
|
|
359
|
+
await this.deleteSignatureShares(txRequestId, reqId);
|
|
249
360
|
// after delete signatures shares get the tx without them
|
|
250
|
-
const txRequest = await tss_1.getTxRequest(this.bitgo, this.wallet.id(), txRequestId);
|
|
361
|
+
const txRequest = await (0, tss_1.getTxRequest)(this.bitgo, this.wallet.id(), txRequestId, reqId);
|
|
251
362
|
return await this.signTxRequest({ txRequest, prv: decryptedPrv, reqId });
|
|
252
363
|
}
|
|
253
364
|
/**
|
|
254
365
|
* Gets the latest Tx Request by id
|
|
255
366
|
*
|
|
256
367
|
* @param {String} txRequestId - the txRequest Id
|
|
368
|
+
* @param {IRequestTracer} reqId - request tracer request id
|
|
257
369
|
* @returns {Promise<TxRequest>}
|
|
258
370
|
*/
|
|
259
|
-
async getTxRequest(txRequestId) {
|
|
260
|
-
return tss_1.getTxRequest(this.bitgo, this.wallet.id(), txRequestId);
|
|
371
|
+
async getTxRequest(txRequestId, reqId) {
|
|
372
|
+
return (0, tss_1.getTxRequest)(this.bitgo, this.wallet.id(), txRequestId, reqId);
|
|
261
373
|
}
|
|
262
374
|
/**
|
|
263
375
|
* Checks whether the third party backup provider is valid/supported
|
|
@@ -271,15 +383,50 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
|
|
|
271
383
|
* It gets the appropriate BitGo GPG public key for key creation based on a
|
|
272
384
|
* combination of coin and the feature flags on the user and their enterprise if set.
|
|
273
385
|
* @param enterpriseId - enterprise under which user wants to create the wallet
|
|
386
|
+
* @param isMPCv2 - true to get the MPCv2 GPG public key, defaults to false
|
|
387
|
+
* @param reqId - request tracer request id
|
|
274
388
|
*/
|
|
275
|
-
async getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId) {
|
|
389
|
+
async getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId, isMPCv2 = false, reqId) {
|
|
390
|
+
const reqTracer = reqId || new util_1.RequestTracer();
|
|
391
|
+
this.bitgo.setRequestTracer(reqTracer);
|
|
276
392
|
const response = await this.bitgo
|
|
277
393
|
.get(this.baseCoin.url('/tss/pubkey'))
|
|
278
394
|
.query({ enterpriseId })
|
|
395
|
+
.retry(3)
|
|
279
396
|
.result();
|
|
280
|
-
const bitgoPublicKeyStr = response.publicKey;
|
|
281
|
-
return openpgp_1.readKey({ armoredKey: bitgoPublicKeyStr });
|
|
397
|
+
const bitgoPublicKeyStr = isMPCv2 ? response.mpcv2PublicKey : response.publicKey;
|
|
398
|
+
return (0, openpgp_1.readKey)({ armoredKey: bitgoPublicKeyStr });
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Returns supported TxRequest versions for this wallet
|
|
402
|
+
*/
|
|
403
|
+
supportedTxRequestVersions() {
|
|
404
|
+
var _a, _b, _c, _d;
|
|
405
|
+
const walletType = (_a = this._wallet) === null || _a === void 0 ? void 0 : _a.type();
|
|
406
|
+
const supportedWalletTypes = ['custodial', 'cold', 'hot'];
|
|
407
|
+
if (!walletType || ((_b = this._wallet) === null || _b === void 0 ? void 0 : _b.multisigType()) !== 'tss' || !supportedWalletTypes.includes(walletType)) {
|
|
408
|
+
return [];
|
|
409
|
+
}
|
|
410
|
+
else if (((_c = this._wallet) === null || _c === void 0 ? void 0 : _c.baseCoin.getMPCAlgorithm()) === 'ecdsa') {
|
|
411
|
+
return ['full'];
|
|
412
|
+
}
|
|
413
|
+
else if (walletType === 'custodial' || walletType === 'cold') {
|
|
414
|
+
return ['full'];
|
|
415
|
+
}
|
|
416
|
+
else if (((_d = this._wallet) === null || _d === void 0 ? void 0 : _d.baseCoin.getMPCAlgorithm()) === 'eddsa' && walletType === 'hot') {
|
|
417
|
+
return ['lite', 'full'];
|
|
418
|
+
}
|
|
419
|
+
return [];
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Returns true if the txRequest is using apiVersion == full and is pending approval
|
|
423
|
+
* @param txRequest
|
|
424
|
+
* @returns boolean
|
|
425
|
+
*/
|
|
426
|
+
isPendingApprovalTxRequestFull(txRequest) {
|
|
427
|
+
const { apiVersion, state } = txRequest;
|
|
428
|
+
return apiVersion === 'full' && 'pendingApproval' === state;
|
|
282
429
|
}
|
|
283
430
|
}
|
|
284
431
|
exports.default = BaseTssUtils;
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVRTU1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EscUNBQTBEO0FBSTFELG1DQUF5QztBQUV6QywwQ0FBdUM7QUFDdkMsMENBQTRCO0FBd0I1Qjs7R0FFRztBQUNILE1BQXFCLFlBQXVCLFNBQVEsbUJBQVE7SUFHMUQsWUFBWSxLQUFnQixFQUFFLFFBQW1CLEVBQUUsTUFBZ0I7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyw2QkFBNkIsQ0FDakMsVUFBcUMsRUFDckMsVUFBOEI7UUFFOUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSzthQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUMxQyxJQUFJLENBQUM7WUFDSixVQUFVO1lBQ1YsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLFNBQVM7U0FDdkMsQ0FBQzthQUNELE1BQU0sRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsT0FBTztZQUNMLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRTtZQUNsQixTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVM7U0FDakMsQ0FBQztJQUNKLENBQUM7SUFFTSwrQkFBK0IsQ0FDcEMsS0FBYSxFQUNiLGNBQXNCLEVBQ3RCLFlBQXNCLEVBQ3RCLGFBQXVCLEVBQ3ZCLFVBQXFDLEVBQ3JDLFlBQWlCO1FBRWpCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBZ0M7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFnQztRQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQXFDO1FBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BTWY7UUFDQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFpQjtRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELHVCQUF1QixDQUFDLE1BQWlCO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHVCQUF1QixDQUNyQixTQUE2QixFQUM3QixpQ0FBcUUsRUFDckUsNkJBQTZELEVBQzdELDZCQUE2RDtRQUU3RCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxrQ0FBa0MsQ0FBQyxNQUF1RTtRQUt4RyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILHlCQUF5QixDQUFDLE1BSXpCO1FBQ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gseUJBQXlCLENBQUMsTUFNekI7UUFDQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQ3hCLE1BQTRDLEVBQzVDLGFBQStCLE1BQU0sRUFDckMsT0FBaUI7UUFFakIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWpFLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsTUFBTSxFQUFFO2dCQUNOLEdBQUcsYUFBYTthQUNqQjtZQUNELFVBQVUsRUFBRSxVQUFVO1lBQ3RCLE9BQU87U0FDUixDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLO2FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQ3ZCLE1BQU0sRUFBRSxDQUFjLENBQUM7UUFFMUIsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQywwQ0FBMEMsQ0FDOUMsTUFBK0IsRUFDL0IsYUFBK0IsTUFBTSxFQUNyQyxPQUFpQjs7UUFFakIsTUFBTSxhQUFhLEdBQXFDO1lBQ3RELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0I7WUFDN0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsSUFBSSxFQUFFLE1BQUEsTUFBTSxDQUFDLElBQUksMENBQUUsS0FBSztZQUN4QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLGNBQWMsRUFBRSxNQUFBLE1BQU0sQ0FBQyxjQUFjLG1DQUFJLEVBQUU7U0FDNUMsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyw0Q0FBNEMsQ0FDaEQsTUFBaUMsRUFDakMsYUFBK0IsTUFBTSxFQUNyQyxPQUFpQjs7UUFFakIsTUFBTSxhQUFhLEdBQXVDO1lBQ3hELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0I7WUFDN0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsSUFBSSxFQUFFLE1BQUEsTUFBTSxDQUFDLElBQUksMENBQUUsS0FBSztZQUN4QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQy9CLGNBQWMsRUFBRSxNQUFBLE1BQU0sQ0FBQyxnQkFBZ0IsbUNBQUksRUFBRTtTQUM5QyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyxtQkFBbUIsQ0FDL0IsYUFBb0YsRUFDcEYsVUFBNEIsRUFDNUIsT0FBaUI7UUFFakIsTUFBTSxpQkFBaUIsR0FBRztZQUN4QixNQUFNLEVBQUU7Z0JBQ04sR0FBRyxhQUFhO2FBQ2pCO1lBQ0QsVUFBVTtZQUNWLE9BQU87U0FDUixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNqRSxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDdkIsTUFBTSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBbUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsV0FBVyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMvRixJQUFJLEVBQUU7YUFDTixNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDhEQUE4RDtJQUM5RCxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQW1CO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLEtBQUs7YUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7YUFDbkUsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUM7YUFDckIsTUFBTSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQW1CLEVBQUUsWUFBb0IsRUFBRSxLQUFxQjtRQUN0RixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5Qyx5REFBeUQ7UUFDekQsTUFBTSxTQUFTLEdBQUcsTUFBTSxrQkFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNoRixPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFtQjtRQUNwQyxPQUFPLGtCQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7O09BR0c7SUFDSCwrQkFBK0IsQ0FDN0IsY0FBbUQ7UUFFbkQsOERBQThEO1FBQzlELE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLGNBQWMsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLFlBQWdDO1FBQ2hGLE1BQU0sUUFBUSxHQUFzQixNQUFNLElBQUksQ0FBQyxLQUFLO2FBQ2pELEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNyQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQzthQUN2QixNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLFNBQW1CLENBQUM7UUFDdkQsT0FBTyxpQkFBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFoVkQsK0JBZ1ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi8uLi8uLi9hcGknO1xuaW1wb3J0IHsgS2V5LCByZWFkS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEtleWNoYWluIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZ2V0VHhSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHNzJztcbmltcG9ydCB7IElXYWxsZXQsIEJhY2t1cFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vd2FsbGV0JztcbmltcG9ydCB7IE1wY1V0aWxzIH0gZnJvbSAnLi4vbXBjVXRpbHMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQml0Z29HUEdQdWJsaWNLZXksXG4gIEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlLFxuICBDdXN0b21HU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVJTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgSVRzc1V0aWxzLFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICBUU1NQYXJhbXMsXG4gIFR4UmVxdWVzdCxcbiAgVHhSZXF1ZXN0VmVyc2lvbixcbiAgQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlLFxuICBJbnRlbnRPcHRpb25zRm9yTWVzc2FnZSxcbiAgUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcsXG4gIEludGVudE9wdGlvbnNGb3JUeXBlZERhdGEsXG4gIFBvcHVsYXRlZEludGVudEZvclR5cGVkRGF0YVNpZ25pbmcsXG4gIENyZWF0ZUJpdEdvS2V5Y2hhaW5QYXJhbXNCYXNlLFxuICBDb21taXRtZW50U2hhcmVSZWNvcmQsXG4gIEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkLFxuICBDdXN0b21Db21taXRtZW50R2VuZXJhdGluZ0Z1bmN0aW9uLFxufSBmcm9tICcuL2Jhc2VUeXBlcyc7XG5pbXBvcnQgeyBHU2hhcmUsIFNpZ25TaGFyZSB9IGZyb20gJy4uLy4uLy4uL2FjY291bnQtbGliL21wYy90c3MnO1xuXG4vKipcbiAqIEJhc2VUc3NVdGlsIGNsYXNzIHdoaWNoIGRpZmZlcmVudCBzaWduYXR1cmUgc2NoZW1lcyBoYXZlIHRvIGV4dGVuZFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlVHNzVXRpbHM8S2V5U2hhcmU+IGV4dGVuZHMgTXBjVXRpbHMgaW1wbGVtZW50cyBJVHNzVXRpbHM8S2V5U2hhcmU+IHtcbiAgcHJpdmF0ZSBfd2FsbGV0PzogSVdhbGxldDtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luLCB3YWxsZXQ/OiBJV2FsbGV0KSB7XG4gICAgc3VwZXIoYml0Z28sIGJhc2VDb2luKTtcbiAgICB0aGlzLl93YWxsZXQgPSB3YWxsZXQ7XG4gIH1cblxuICBnZXQgd2FsbGV0KCk6IElXYWxsZXQge1xuICAgIGlmIChfLmlzTmlsKHRoaXMuX3dhbGxldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2FsbGV0IG5vdCBkZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl93YWxsZXQ7XG4gIH1cblxuICBhc3luYyBjcmVhdGVCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZShcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIGVudGVycHJpc2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlPiB7XG4gICAgY29uc3Qga2V5UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJhc2VDb2luLnVybCgnL2tycy9iYWNrdXBrZXlzJykpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIGVudGVycHJpc2UsXG4gICAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IHVzZXJHcGdLZXkucHVibGljS2V5LFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBpZiAoIWtleVJlc3BvbnNlIHx8ICFrZXlSZXNwb25zZS5rZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBiYWNrdXAgc2hhcmVzIGZyb20gQml0R28uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDoga2V5UmVzcG9uc2UuaWQsXG4gICAgICBrZXlTaGFyZXM6IGtleVJlc3BvbnNlLmtleVNoYXJlcyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGZpbmFsaXplQml0Z29IZWxkQmFja3VwS2V5U2hhcmUoXG4gICAga2V5SWQ6IHN0cmluZyxcbiAgICBjb21tb25LZXljaGFpbjogc3RyaW5nLFxuICAgIHVzZXJLZXlTaGFyZTogS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICBiYWNrdXBHcGdLZXk6IEtleVxuICApOiBQcm9taXNlPEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgY3JlYXRlVXNlcktleWNoYWluKHBhcmFtczogQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGNyZWF0ZUJhY2t1cEtleWNoYWluKHBhcmFtczogQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGNyZWF0ZUJpdGdvS2V5Y2hhaW4ocGFyYW1zOiBDcmVhdGVCaXRHb0tleWNoYWluUGFyYW1zQmFzZSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBjcmVhdGVLZXljaGFpbnMocGFyYW1zOiB7XG4gICAgcGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVudGVycHJpc2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzVGhpcmRQYXJ0eUJhY2t1cD86IGJvb2xlYW47XG4gICAgYmFja3VwUHJvdmlkZXI/OiBCYWNrdXBQcm92aWRlcjtcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHNpZ25UeFJlcXVlc3QocGFyYW1zOiBUU1NQYXJhbXMpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlKHBhcmFtczogVFNTUGFyYW1zKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgYSB0cmFuc2FjdGlvbiB1c2luZyBUU1MgZm9yIEVkRFNBIGFuZCB0aHJvdWdoIHV0aWxpemF0aW9uIG9mIGN1c3RvbSBzaGFyZSBnZW5lcmF0b3JzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVHhSZXF1ZXN0fSB0eFJlcXVlc3QgLSB0cmFuc2FjdGlvbiByZXF1ZXN0IHdpdGggdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb259IGV4dGVybmFsU2lnbmVyUlNoYXJlR2VuZXJhdG9yIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIFIgc2hhcmVzIGluIHRoZSBFZERTQSBUU1MgZmxvd1xuICAgKiBAcGFyYW0ge0N1c3RvbUdTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJHU2hhcmVHZW5lcmF0b3IgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgRyBzaGFyZXMgaW4gdGhlIEVkRFNBIFRTUyBmbG93XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59IC0gYSBzaWduZWQgdHggcmVxdWVzdFxuICAgKi9cbiAgc2lnblVzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgdHhSZXF1ZXN0OiBzdHJpbmcgfCBUeFJlcXVlc3QsXG4gICAgZXh0ZXJuYWxTaWduZXJDb21taXRtZW50R2VuZXJhdG9yOiBDdXN0b21Db21taXRtZW50R2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyUlNoYXJlR2VuZXJhdG9yOiBDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJHU2hhcmVHZW5lcmF0b3I6IEN1c3RvbUdTaGFyZUdlbmVyYXRpbmdGdW5jdGlvblxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQ29tbWl0bWVudCAoVXNlciB0byBCaXRHbykgc2hhcmUgZnJvbSBhbiB1bnNpZ25lZCB0cmFuc2FjdGlvbiBhbmQgcHJpdmF0ZSB1c2VyIHNpZ25pbmcgbWF0ZXJpYWxcbiAgICogRUREU0Egb25seVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdFxuICAgKiBAcGFyYW0ge1R4UmVxdWVzdH0gcGFyYW1zLnR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgd2l0aCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBydiAtIHVzZXIgc2lnbmluZyBtYXRlcmlhbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHVzZXJUb0JpdGdvQ29tbWl0bWVudDogQ29tbWl0bWVudFNoYXJlUmVjb3IsIGVuY3J5cHRlZFNpZ25lclNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZCB9Pn0gLSBDb21taXRtZW50IFNoYXJlIGFuZCB0aGUgRW5jcnlwdGVkIFNpZ25lciBTaGFyZSB0byBCaXRHb1xuICAgKi9cbiAgY3JlYXRlQ29tbWl0bWVudFNoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHsgdHhSZXF1ZXN0OiBUeFJlcXVlc3Q7IHBydjogc3RyaW5nOyB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmcgfSk6IFByb21pc2U8e1xuICAgIHVzZXJUb0JpdGdvQ29tbWl0bWVudDogQ29tbWl0bWVudFNoYXJlUmVjb3JkO1xuICAgIGVuY3J5cHRlZFNpZ25lclNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZDtcbiAgICBlbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQ7XG4gIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFIgKFVzZXIgdG8gQml0R28pIHNoYXJlIGZyb20gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByaXZhdGUgdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCB3aXRoIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLndhbGxldFBhc3NwaHJhc2VdIC0gd2FsbGV0IHBhc3NwaHJhc2VcbiAgICogQHBhcmFtIHtFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZH0gW3BhcmFtcy5lbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZV0gLSBlbmNyeXB0ZWQgdXNlciB0byBiaXRnbyBSIHNoYXJlIGdlbmVyYXRlZCBpbiB0aGUgY29tbWl0bWVudCBwaGFzZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHJTaGFyZTogU2lnblNoYXJlIH0+fSAtIFIgU2hhcmUgdG8gQml0R29cbiAgICovXG4gIGNyZWF0ZVJTaGFyZUZyb21UeFJlcXVlc3QocGFyYW1zOiB7XG4gICAgdHhSZXF1ZXN0OiBUeFJlcXVlc3Q7XG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZDtcbiAgfSk6IFByb21pc2U8eyByU2hhcmU6IFNpZ25TaGFyZSB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEcgKFVzZXIgdG8gQml0R28pIHNoYXJlIGZyb20gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByaXZhdGUgdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCB3aXRoIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqIEBwYXJhbSB7U2lnbmF0dXJlU2hhcmVSZWNvcmR9IHBhcmFtcy5iaXRnb1RvVXNlclJTaGFyZSAtIEJpdEdvIHRvIFVzZXIgUiBTaGFyZVxuICAgKiBAcGFyYW0ge1NpZ25TaGFyZX0gcGFyYW1zLnVzZXJUb0JpdGdvUlNoYXJlIC0gVXNlciB0byBCaXRHbyBSIFNoYXJlXG4gICAqIEBwYXJhbSB7Q29tbWl0bWVudFNoYXJlUmVjb3JkfSBwYXJhbXMuYml0Z29Ub1VzZXJDb21taXRtZW50IC0gQml0R28gdG8gVXNlciBDb21taXRtZW50XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEdTaGFyZT59IC0gR1NoYXJlIGZyb20gVXNlciB0byBCaXRHb1xuICAgKi9cbiAgY3JlYXRlR1NoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHtcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdDtcbiAgICBwcnY6IHN0cmluZztcbiAgICBiaXRnb1RvVXNlclJTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gICAgdXNlclRvQml0Z29SU2hhcmU6IFNpZ25TaGFyZTtcbiAgICBiaXRnb1RvVXNlckNvbW1pdG1lbnQ6IENvbW1pdG1lbnRTaGFyZVJlY29yZDtcbiAgfSk6IFByb21pc2U8R1NoYXJlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgYW5kIHZlcmlmeSBpdFxuICAgKlxuICAgKiBAcGFyYW0ge1ByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9uc30gcGFyYW1zIC0gcGFyYW1ldGVycyB0byBidWlsZCB0aGUgdHhcbiAgICogQHBhcmFtIHtUeFJlcXVlc3RWZXJzaW9ufSBhcGlWZXJzaW9uIGxpdGUgb3IgZnVsbFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXZpZXcgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgaXMgdG8gcHJldmlldyBhIHR4IHJlcXVlc3QsIHdoaWNoIHdpbGwgbm90IGluaXRpYXRlIHBvbGljeSBjaGVja3Mgb3IgcGVuZGluZyBhcHByb3ZhbHNcbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gLSBhIGJ1aWx0IHR4IHJlcXVlc3RcbiAgICovXG4gIGFzeW5jIHByZWJ1aWxkVHhXaXRoSW50ZW50KFxuICAgIHBhcmFtczogUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zLFxuICAgIGFwaVZlcnNpb246IFR4UmVxdWVzdFZlcnNpb24gPSAnbGl0ZScsXG4gICAgcHJldmlldz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCBpbnRlbnRPcHRpb25zID0gdGhpcy5wb3B1bGF0ZUludGVudCh0aGlzLmJhc2VDb2luLCBwYXJhbXMpO1xuXG4gICAgY29uc3Qgd2hpdGVsaXN0ZWRQYXJhbXMgPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgLi4uaW50ZW50T3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uOiBhcGlWZXJzaW9uLFxuICAgICAgcHJldmlldyxcbiAgICB9O1xuXG4gICAgY29uc3QgdW5zaWduZWRUeCA9IChhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLnVybCgnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHhyZXF1ZXN0cycsIDIpKVxuICAgICAgLnNlbmQod2hpdGVsaXN0ZWRQYXJhbXMpXG4gICAgICAucmVzdWx0KCkpIGFzIFR4UmVxdWVzdDtcblxuICAgIHJldHVybiB1bnNpZ25lZFR4O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgZm9yIG1lc3NhZ2Ugc2lnbmluZ1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBhcGlWZXJzaW9uXG4gICAqIEBwYXJhbSBwcmV2aWV3XG4gICAqL1xuICBhc3luYyBjcmVhdGVUeFJlcXVlc3RXaXRoSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcoXG4gICAgcGFyYW1zOiBJbnRlbnRPcHRpb25zRm9yTWVzc2FnZSxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uID0gJ2Z1bGwnLFxuICAgIHByZXZpZXc/OiBib29sZWFuXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgaW50ZW50T3B0aW9uczogUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcgPSB7XG4gICAgICBjdXN0b2RpYW5NZXNzYWdlSWQ6IHBhcmFtcy5jdXN0b2RpYW5NZXNzYWdlSWQsXG4gICAgICBpbnRlbnRUeXBlOiBwYXJhbXMuaW50ZW50VHlwZSxcbiAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICBtZW1vOiBwYXJhbXMubWVtbz8udmFsdWUsXG4gICAgICBpc1RzczogcGFyYW1zLmlzVHNzLFxuICAgICAgbWVzc2FnZVJhdzogcGFyYW1zLm1lc3NhZ2VSYXcsXG4gICAgICBtZXNzYWdlRW5jb2RlZDogcGFyYW1zLm1lc3NhZ2VFbmNvZGVkID8/ICcnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUeFJlcXVlc3RCYXNlKGludGVudE9wdGlvbnMsIGFwaVZlcnNpb24sIHByZXZpZXcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgZm9yIHR5cGUgZGF0YSBzaWduaW5nXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIGFwaVZlcnNpb25cbiAgICogQHBhcmFtIHByZXZpZXdcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVR4UmVxdWVzdFdpdGhJbnRlbnRGb3JUeXBlZERhdGFTaWduaW5nKFxuICAgIHBhcmFtczogSW50ZW50T3B0aW9uc0ZvclR5cGVkRGF0YSxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uID0gJ2Z1bGwnLFxuICAgIHByZXZpZXc/OiBib29sZWFuXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgaW50ZW50T3B0aW9uczogUG9wdWxhdGVkSW50ZW50Rm9yVHlwZWREYXRhU2lnbmluZyA9IHtcbiAgICAgIGN1c3RvZGlhbk1lc3NhZ2VJZDogcGFyYW1zLmN1c3RvZGlhbk1lc3NhZ2VJZCxcbiAgICAgIGludGVudFR5cGU6IHBhcmFtcy5pbnRlbnRUeXBlLFxuICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgICBjb21tZW50OiBwYXJhbXMuY29tbWVudCxcbiAgICAgIG1lbW86IHBhcmFtcy5tZW1vPy52YWx1ZSxcbiAgICAgIGlzVHNzOiBwYXJhbXMuaXNUc3MsXG4gICAgICBtZXNzYWdlUmF3OiBwYXJhbXMudHlwZWREYXRhUmF3LFxuICAgICAgbWVzc2FnZUVuY29kZWQ6IHBhcmFtcy50eXBlZERhdGFFbmNvZGVkID8/ICcnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUeFJlcXVlc3RCYXNlKGludGVudE9wdGlvbnMsIGFwaVZlcnNpb24sIHByZXZpZXcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIEJpdGdvIEFQSSB0byBjcmVhdGUgdHggcmVxdWVzdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVHhSZXF1ZXN0QmFzZShcbiAgICBpbnRlbnRPcHRpb25zOiBQb3B1bGF0ZWRJbnRlbnRGb3JUeXBlZERhdGFTaWduaW5nIHwgUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcsXG4gICAgYXBpVmVyc2lvbjogVHhSZXF1ZXN0VmVyc2lvbixcbiAgICBwcmV2aWV3PzogYm9vbGVhblxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGNvbnN0IHdoaXRlbGlzdGVkUGFyYW1zID0ge1xuICAgICAgaW50ZW50OiB7XG4gICAgICAgIC4uLmludGVudE9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHByZXZpZXcsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L3R4cmVxdWVzdHNgLCAyKSlcbiAgICAgIC5zZW5kKHdoaXRlbGlzdGVkUGFyYW1zKVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgZGVsZXRlIHNpZ25hdHVyZSBzaGFyZXMgZm9yIGEgdHhSZXF1ZXN0LCB0aGUgZW5kcG9pbnQgZGVsZXRlIHRoZSBzaWduYXR1cmVzIGFuZCByZXR1cm4gdGhlbVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHhSZXF1ZXN0SWQgdHggaWQgcmVmZXJlbmNlIHRvIGRlbGV0ZSBzaWduYXR1cmUgc2hhcmVzXG4gICAqIEByZXR1cm5zIHtTaWduYXR1cmVTaGFyZVJlY29yZFtdfVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlU2lnbmF0dXJlU2hhcmVzKHR4UmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFNpZ25hdHVyZVNoYXJlUmVjb3JkW10+IHtcbiAgICByZXR1cm4gdGhpcy5iaXRnb1xuICAgICAgLmRlbCh0aGlzLmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L3R4cmVxdWVzdHMvJHt0eFJlcXVlc3RJZH0vc2lnbmF0dXJlc2hhcmVzYCwgMikpXG4gICAgICAuc2VuZCgpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgc2VuZCBwcm9jZWR1cmUgb25jZSBCaXRnbyBoYXMgdGhlIFVzZXIgVG8gQml0Z28gR1NoYXJlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGFzeW5jIHNlbmRUeFJlcXVlc3QodHhSZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYmFzZUNvaW4udXJsKCcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eC9zZW5kJykpXG4gICAgICAuc2VuZCh7IHR4UmVxdWVzdElkIH0pXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHNpZ25hdHVyZSBzaGFyZXMsIGdldCB0aGUgdHggcmVxdWVzdCB3aXRob3V0IHRoZW0gZnJvbSB0aGUgZGIgYW5kIHNpZ24gaXQgdG8gZmluYWxseSBzZW5kIGl0LlxuICAgKlxuICAgKiBOb3RlIDogVGhpcyBjYW4gYmUgcGVyZm9ybWVkIGluIG9yZGVyIHRvIHJlYWNoIGxhdGVzdCBuZXR3b3JrIGNvbmRpdGlvbnMgcmVxdWlyZWQgb24gcGVuZGluZyBhcHByb3ZhbCBmbG93LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkIHRvIG1ha2UgdGhlIHJlcXVlc3RzLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZGVjcnlwdGVkUHJ2IC0gZGVjcnlwdGVkIHBydiB0byBzaWduIHRoZSB0eCByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge1JlcXVlc3RUcmFjZXJ9IHJlcUlkIGlkIHRyYWNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIGFzeW5jIHJlY3JlYXRlVHhSZXF1ZXN0KHR4UmVxdWVzdElkOiBzdHJpbmcsIGRlY3J5cHRlZFBydjogc3RyaW5nLCByZXFJZDogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGF3YWl0IHRoaXMuZGVsZXRlU2lnbmF0dXJlU2hhcmVzKHR4UmVxdWVzdElkKTtcbiAgICAvLyBhZnRlciBkZWxldGUgc2lnbmF0dXJlcyBzaGFyZXMgZ2V0IHRoZSB0eCB3aXRob3V0IHRoZW1cbiAgICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnNpZ25UeFJlcXVlc3QoeyB0eFJlcXVlc3QsIHBydjogZGVjcnlwdGVkUHJ2LCByZXFJZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYXRlc3QgVHggUmVxdWVzdCBieSBpZFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59XG4gICAqL1xuICBhc3luYyBnZXRUeFJlcXVlc3QodHhSZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHRoaXJkIHBhcnR5IGJhY2t1cCBwcm92aWRlciBpcyB2YWxpZC9zdXBwb3J0ZWRcbiAgICogQHBhcmFtIGJhY2t1cFByb3ZpZGVyIC0gdGhlIGJhY2t1cCBwcm92aWRlciBjbGllbnQgc2VsZWN0ZWRcbiAgICovXG4gIGlzVmFsaWRUaGlyZFBhcnR5QmFja3VwUHJvdmlkZXIoXG4gICAgYmFja3VwUHJvdmlkZXI6IEJhY2t1cFByb3ZpZGVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IGJhY2t1cFByb3ZpZGVyIGlzIEJhY2t1cFByb3ZpZGVyIHtcbiAgICAvLyBBcyBvZiBub3csIEJpdEdvIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBLUlMgcHJvdmlkZXIgZm9yIFRTU1xuICAgIHJldHVybiAhIShiYWNrdXBQcm92aWRlciAmJiBiYWNrdXBQcm92aWRlciA9PT0gJ0JpdEdvVHJ1c3RBc0tycycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGdldHMgdGhlIGFwcHJvcHJpYXRlIEJpdEdvIEdQRyBwdWJsaWMga2V5IGZvciBrZXkgY3JlYXRpb24gYmFzZWQgb24gYVxuICAgKiBjb21iaW5hdGlvbiBvZiBjb2luIGFuZCB0aGUgZmVhdHVyZSBmbGFncyBvbiB0aGUgdXNlciBhbmQgdGhlaXIgZW50ZXJwcmlzZSBpZiBzZXQuXG4gICAqIEBwYXJhbSBlbnRlcnByaXNlSWQgLSBlbnRlcnByaXNlIHVuZGVyIHdoaWNoIHVzZXIgd2FudHMgdG8gY3JlYXRlIHRoZSB3YWxsZXRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCaXRnb0dwZ1B1YmtleUJhc2VkT25GZWF0dXJlRmxhZ3MoZW50ZXJwcmlzZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPEtleT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBCaXRnb0dQR1B1YmxpY0tleSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5nZXQodGhpcy5iYXNlQ29pbi51cmwoJy90c3MvcHVia2V5JykpXG4gICAgICAucXVlcnkoeyBlbnRlcnByaXNlSWQgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBjb25zdCBiaXRnb1B1YmxpY0tleVN0ciA9IHJlc3BvbnNlLnB1YmxpY0tleSBhcyBzdHJpbmc7XG4gICAgcmV0dXJuIHJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb1B1YmxpY0tleVN0ciB9KTtcbiAgfVxufVxuIl19
|
|
432
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVRTU1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxQ0FBMEQ7QUFHMUQsNkNBQXNEO0FBQ3RELG1DQUF5QztBQUV6QywwQ0FBdUM7QUFDdkMsMENBQTRCO0FBaUM1QixrQ0FBd0M7QUFDeEMsaURBQW1DO0FBQ25DLHlEQUErRjtBQUMvRixrREFBb0Q7QUFFcEQ7O0dBRUc7QUFDSCxNQUFxQixZQUF1QixTQUFRLG1CQUFRO0lBSzFELFlBQVksS0FBZ0IsRUFBRSxRQUFtQixFQUFFLE1BQWdCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRVMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUs7UUFDckMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUEsZ0NBQWlCLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsaUhBQWlIO1FBQ2pILElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDakMsQ0FBQztRQUNELGtEQUFrRDtRQUNsRCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixJQUFJLENB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QUFPLDBDQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsTUFBSyxPQUFPLEVBQUUsQ0FBQztZQUNoRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEIsQ0FBQzthQUFNLElBQUksVUFBVSxLQUFLLFdBQVcsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDL0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxRQUFRLENBQUMsZUFBZSxFQUFFLE1BQUssT0FBTyxJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN4RixPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsOEJBQThCLENBQUMsU0FBb0I7UUFDakQsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDeEMsT0FBTyxVQUFVLEtBQUssTUFBTSxJQUFJLGlCQUFpQixLQUFLLEtBQUssQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUE1ZkQsK0JBNGZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi8uLi8uLi9hcGknO1xuaW1wb3J0IHsgS2V5LCByZWFkS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEtleWNoYWluLCBLZXlJbmRpY2VzIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZ2V0VHhSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHNzJztcbmltcG9ydCB7IElXYWxsZXQsIEJhY2t1cFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vd2FsbGV0JztcbmltcG9ydCB7IE1wY1V0aWxzIH0gZnJvbSAnLi4vbXBjVXRpbHMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQml0Z29HUEdQdWJsaWNLZXksXG4gIEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlLFxuICBDdXN0b21HU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVJTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgSVRzc1V0aWxzLFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICBUU1NQYXJhbXMsXG4gIFR4UmVxdWVzdCxcbiAgVHhSZXF1ZXN0VmVyc2lvbixcbiAgQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlLFxuICBJbnRlbnRPcHRpb25zRm9yTWVzc2FnZSxcbiAgUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcsXG4gIEludGVudE9wdGlvbnNGb3JUeXBlZERhdGEsXG4gIFBvcHVsYXRlZEludGVudEZvclR5cGVkRGF0YVNpZ25pbmcsXG4gIENyZWF0ZUJpdEdvS2V5Y2hhaW5QYXJhbXNCYXNlLFxuICBDb21taXRtZW50U2hhcmVSZWNvcmQsXG4gIEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkLFxuICBDdXN0b21Db21taXRtZW50R2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBUU1NQYXJhbXNGb3JNZXNzYWdlLFxuICBSZXF1ZXN0VHlwZSxcbiAgQ3VzdG9tUGFpbGxpZXJNb2R1bHVzR2V0dGVyRnVuY3Rpb24sXG4gIEN1c3RvbUtTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tTXVEZWx0YVNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbU1QQ3YyU2lnbmluZ1JvdW5kMUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21NUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIFRTU1BhcmFtc1dpdGhQcnYsXG59IGZyb20gJy4vYmFzZVR5cGVzJztcbmltcG9ydCB7IEdTaGFyZSwgU2lnblNoYXJlIH0gZnJvbSAnLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcyc7XG5pbXBvcnQgeyBSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgKiBhcyBvcGVucGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZywgZ2V0Qml0Z29NcGNHcGdQdWJLZXkgfSBmcm9tICcuLi8uLi90c3MvYml0Z29QdWJLZXlzJztcbmltcG9ydCB7IGdldEJpdGdvR3BnUHViS2V5IH0gZnJvbSAnLi4vb3BlbmdwZ1V0aWxzJztcblxuLyoqXG4gKiBCYXNlVHNzVXRpbCBjbGFzcyB3aGljaCBkaWZmZXJlbnQgc2lnbmF0dXJlIHNjaGVtZXMgaGF2ZSB0byBleHRlbmRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZVRzc1V0aWxzPEtleVNoYXJlPiBleHRlbmRzIE1wY1V0aWxzIGltcGxlbWVudHMgSVRzc1V0aWxzPEtleVNoYXJlPiB7XG4gIHByaXZhdGUgX3dhbGxldD86IElXYWxsZXQ7XG4gIHByb3RlY3RlZCBiaXRnb1B1YmxpY0dwZ0tleTogb3BlbnBncC5LZXk7XG4gIHByb3RlY3RlZCBiaXRnb01QQ3YyUHVibGljR3BnS2V5OiBvcGVucGdwLktleSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luLCB3YWxsZXQ/OiBJV2FsbGV0KSB7XG4gICAgc3VwZXIoYml0Z28sIGJhc2VDb2luKTtcbiAgICB0aGlzLl93YWxsZXQgPSB3YWxsZXQ7XG4gIH1cblxuICBnZXQgd2FsbGV0KCk6IElXYWxsZXQge1xuICAgIGlmIChfLmlzTmlsKHRoaXMuX3dhbGxldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2FsbGV0IG5vdCBkZWZpbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl93YWxsZXQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2V0Qml0Z29HcGdQdWJLZXkoYml0Z28pIHtcbiAgICBjb25zdCB7IG1wY1YxLCBtcGNWMiB9ID0gYXdhaXQgZ2V0Qml0Z29HcGdQdWJLZXkoYml0Z28pO1xuICAgIC8vIERvIG5vdCB1bnNldCB0aGUgTVBDdjEga2V5IGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIGlzIHRvIGF2b2lkIHVuc2V0dGluZyBpZiBleHRyYSBjb25zdGFudHMgYXBpIGNhbGxzIGZhaWwuXG4gICAgaWYgKG1wY1YxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYml0Z29QdWJsaWNHcGdLZXkgPSBtcGNWMTtcbiAgICB9XG4gICAgLy8gRG8gbm90IHVuc2V0IHRoZSBNUEN2MiBrZXkgaWYgaXQgaXMgYWxyZWFkeSBzZXRcbiAgICBpZiAobXBjVjIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iaXRnb01QQ3YyUHVibGljR3BnS2V5ID0gbXBjVjI7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHBpY2tCaXRnb1B1YkdwZ0tleUZvclNpZ25pbmcoXG4gICAgaXNNcGN2MjogYm9vbGVhbixcbiAgICByZXFJZD86IElSZXF1ZXN0VHJhY2VyLFxuICAgIGVudGVycHJpc2VJZD86IHN0cmluZ1xuICApOiBQcm9taXNlPG9wZW5wZ3AuS2V5PiB7XG4gICAgbGV0IGJpdGdvR3BnUHViS2V5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiaXRnb0tleUNoYWluID0gYXdhaXQgdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKS5nZXQoeyBpZDogdGhpcy53YWxsZXQua2V5SWRzKClbS2V5SW5kaWNlcy5CSVRHT10sIHJlcUlkIH0pO1xuICAgICAgaWYgKCFiaXRnb0tleUNoYWluIHx8ICFiaXRnb0tleUNoYWluLmhzbVR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdGdvIEdQRyBQdWIgS2V5IFR5cGUuJyk7XG4gICAgICB9XG4gICAgICBiaXRnb0dwZ1B1YktleSA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7XG4gICAgICAgIGFybW9yZWRLZXk6IGdldEJpdGdvTXBjR3BnUHViS2V5KFxuICAgICAgICAgIHRoaXMuYml0Z28uZ2V0RW52KCksXG4gICAgICAgICAgYml0Z29LZXlDaGFpbi5oc21UeXBlID09PSAnbml0cm8nID8gJ25pdHJvJyA6ICdvbnByZW0nLFxuICAgICAgICAgIGlzTXBjdjIgPyAnbXBjdjInIDogJ21wY3YxJ1xuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCFlbnZSZXF1aXJlc0JpdGdvUHViR3BnS2V5Q29uZmlnKHRoaXMuYml0Z28uZ2V0RW52KCkpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgVW5hYmxlIHRvIGdldCBCaXRHbyBHUEcga2V5IGJhc2VkIG9uIGtleSBkYXRhIHdpdGggZXJyb3I6ICR7ZX0uIEZldGNoaW5nIEJpdEdvIEdQRyBrZXkgYmFzZWQgb24gZmVhdHVyZSBmbGFncy5gXG4gICAgICAgICk7XG4gICAgICAgIC8vIEZpcnN0IHRyeSB0byBnZXQgdGhlIGtleSBiYXNlZCBvbiBmZWF0dXJlIGZsYWdzLCBpZiB0aGF0IGZhaWxzLCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBrZXkgZnJvbSBjb25zdGFudHMgYXBpLlxuICAgICAgICBiaXRnb0dwZ1B1YktleSA9IGF3YWl0IHRoaXMuZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKGVudGVycHJpc2VJZCwgaXNNcGN2MiwgcmVxSWQpXG4gICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICBhc3luYyAocHViS2V5KSA9PlxuICAgICAgICAgICAgICBwdWJLZXkgPz8gKGlzTXBjdjIgPyBhd2FpdCB0aGlzLmdldEJpdGdvTXBjdjJQdWJsaWNHcGdLZXkoKSA6IGF3YWl0IHRoaXMuZ2V0Qml0Z29QdWJsaWNHcGdLZXkoKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLmNhdGNoKGFzeW5jIChlKSA9PiAoaXNNcGN2MiA/IGF3YWl0IHRoaXMuZ2V0Qml0Z29NcGN2MlB1YmxpY0dwZ0tleSgpIDogYXdhaXQgdGhpcy5nZXRCaXRnb1B1YmxpY0dwZ0tleSgpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEVudmlyb25tZW50IFwiJHt0aGlzLmJpdGdvLmdldEVudigpfVwiIHJlcXVpcmVzIGEgQml0R28gR1BHIFB1YiBLZXkgQ29uZmlnIGluIEJpdEdvSlMgZm9yIFRTUy4gRXJyb3IgdGhyb3duIHdoaWxlIGdldHRpbmcgdGhlIGtleSBmcm9tIGNvbmZpZzogJHtlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJpdGdvR3BnUHViS2V5O1xuICB9XG5cbiAgYXN5bmMgZ2V0Qml0Z29QdWJsaWNHcGdLZXkoKTogUHJvbWlzZTxvcGVucGdwLktleT4ge1xuICAgIGlmICghdGhpcy5iaXRnb1B1YmxpY0dwZ0tleSkge1xuICAgICAgLy8gcmV0cnkgZ2V0dGluZyBiaXRnbydzIGdwZyBrZXlcbiAgICAgIGF3YWl0IHRoaXMuc2V0Qml0Z29HcGdQdWJLZXkodGhpcy5iaXRnbyk7XG4gICAgICBpZiAoIXRoaXMuYml0Z29QdWJsaWNHcGdLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBCaXRnbydzIGdwZyBrZXlcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYml0Z29QdWJsaWNHcGdLZXk7XG4gIH1cblxuICBhc3luYyBnZXRCaXRnb01wY3YyUHVibGljR3BnS2V5KCk6IFByb21pc2U8b3BlbnBncC5LZXk+IHtcbiAgICBpZiAoIXRoaXMuYml0Z29NUEN2MlB1YmxpY0dwZ0tleSkge1xuICAgICAgLy8gcmV0cnkgZ2V0dGluZyBiaXRnbydzIGdwZyBrZXlcbiAgICAgIGF3YWl0IHRoaXMuc2V0Qml0Z29HcGdQdWJLZXkodGhpcy5iaXRnbyk7XG4gICAgICBpZiAoIXRoaXMuYml0Z29NUEN2MlB1YmxpY0dwZ0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IEJpdGdvJ3MgZ3BnIGtleVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iaXRnb01QQ3YyUHVibGljR3BnS2V5O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQml0Z29IZWxkQmFja3VwS2V5U2hhcmUoXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICBlbnRlcnByaXNlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZT4ge1xuICAgIGNvbnN0IGtleVJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iYXNlQ29pbi51cmwoJy9rcnMvYmFja3Vwa2V5cycpKVxuICAgICAgLnNlbmQoe1xuICAgICAgICBlbnRlcnByaXNlLFxuICAgICAgICB1c2VyR1BHUHVibGljS2V5OiB1c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KCk7XG4gICAgaWYgKCFrZXlSZXNwb25zZSB8fCAha2V5UmVzcG9uc2Uua2V5U2hhcmVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgYmFja3VwIHNoYXJlcyBmcm9tIEJpdEdvLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGtleVJlc3BvbnNlLmlkLFxuICAgICAga2V5U2hhcmVzOiBrZXlSZXNwb25zZS5rZXlTaGFyZXMsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5hbGl6ZUJpdGdvSGVsZEJhY2t1cEtleVNoYXJlKFxuICAgIGtleUlkOiBzdHJpbmcsXG4gICAgY29tbW9uS2V5Y2hhaW46IHN0cmluZyxcbiAgICB1c2VyS2V5U2hhcmU6IEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluLFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgYmFja3VwR3BnS2V5OiBLZXlcbiAgKTogUHJvbWlzZTxCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGNyZWF0ZVVzZXJLZXljaGFpbihwYXJhbXM6IENyZWF0ZUtleWNoYWluUGFyYW1zQmFzZSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBjcmVhdGVCYWNrdXBLZXljaGFpbihwYXJhbXM6IENyZWF0ZUtleWNoYWluUGFyYW1zQmFzZSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBjcmVhdGVCaXRnb0tleWNoYWluKHBhcmFtczogQ3JlYXRlQml0R29LZXljaGFpblBhcmFtc0Jhc2UpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1RoaXJkUGFydHlCYWNrdXA/OiBib29sZWFuO1xuICAgIGJhY2t1cFByb3ZpZGVyPzogQmFja3VwUHJvdmlkZXI7XG4gIH0pOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBzaWduVHhSZXF1ZXN0KHBhcmFtczogVFNTUGFyYW1zV2l0aFBydik6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UocGFyYW1zOiBUU1NQYXJhbXNGb3JNZXNzYWdlKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgYSB0cmFuc2FjdGlvbiB1c2luZyBUU1MgZm9yIEVkRFNBIGFuZCB0aHJvdWdoIHV0aWxpemF0aW9uIG9mIGN1c3RvbSBzaGFyZSBnZW5lcmF0b3JzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVHhSZXF1ZXN0fSB0eFJlcXVlc3QgLSB0cmFuc2FjdGlvbiByZXF1ZXN0IHdpdGggdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb259IGV4dGVybmFsU2lnbmVyUlNoYXJlR2VuZXJhdG9yIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIFIgc2hhcmVzIGluIHRoZSBFZERTQSBUU1MgZmxvd1xuICAgKiBAcGFyYW0ge0N1c3RvbUdTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJHU2hhcmVHZW5lcmF0b3IgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgRyBzaGFyZXMgaW4gdGhlIEVkRFNBIFRTUyBmbG93XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59IC0gYSBzaWduZWQgdHggcmVxdWVzdFxuICAgKi9cbiAgc2lnbkVkZHNhVHNzVXNpbmdFeHRlcm5hbFNpZ25lcihcbiAgICB0eFJlcXVlc3Q6IHN0cmluZyB8IFR4UmVxdWVzdCxcbiAgICBleHRlcm5hbFNpZ25lckNvbW1pdG1lbnRHZW5lcmF0b3I6IEN1c3RvbUNvbW1pdG1lbnRHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJSU2hhcmVHZW5lcmF0b3I6IEN1c3RvbVJTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lckdTaGFyZUdlbmVyYXRvcjogQ3VzdG9tR1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIGEgdHJhbnNhY3Rpb24gdXNpbmcgVFNTIGZvciBFQ0RTQSBhbmQgdGhyb3VnaCB1dGlsaXphdGlvbiBvZiBjdXN0b20gc2hhcmUgZ2VuZXJhdG9yc1xuICAgKlxuICAgKiBAcGFyYW0ge3BhcmFtczogVFNTUGFyYW1zIHwgVFNTUGFyYW1zRm9yTWVzc2FnZX0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgcGFyYW1ldGVycyB0byBzaWduIGEgdHJhbnNhY3Rpb24gb3IgYSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge1JlcXVlc3RUeXBlfSByZXF1ZXN0VHlwZSAtIHRoZSB0eXBlIG9mIHRoZSByZXF1ZXN0IHRvIHNpZ24gKHRyYW5zYWN0aW9uIG9yIG1lc3NhZ2UpLlxuICAgKiBAcGFyYW0ge0N1c3RvbVBhaWxsaWVyTW9kdWx1c0dldHRlckZ1bmN0aW9ufSBleHRlcm5hbFNpZ25lclBhaWxsaWVyTW9kdWx1c0dldHRlciBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBQYWlsbGllciBNb2R1bHVzIHNoYXJlcyBpbiB0aGUgRUNEU0EgVFNTIGZsb3cuXG4gICAqIEBwYXJhbSB7Q3VzdG9tS1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9ufSBleHRlcm5hbFNpZ25lcktTaGFyZUdlbmVyYXRvciBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBLIHNoYXJlcyBpbiB0aGUgRUNEU0EgVFNTIGZsb3cuXG4gICAqIEBwYXJhbSB7Q3VzdG9tTXVEZWx0YVNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9ufSBleHRlcm5hbFNpZ25lck11RGVsdGFTaGFyZUdlbmVyYXRvciBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBNdSBhbmQgRGVsdGEgc2hhcmVzIGluIHRoZSBFQ0RTQSBUU1MgZmxvdy5cbiAgICogQHBhcmFtIHtDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb259IGV4dGVybmFsU2lnbmVyU1NoYXJlR2VuZXJhdG9yIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIFMgc2hhcmVzIGluIHRoZSBFQ0RTQSBUU1MgZmxvdy5cbiAgICovXG4gIHNpZ25FY2RzYVRzc1VzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgcGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlLFxuICAgIHJlcXVlc3RUeXBlOiBSZXF1ZXN0VHlwZSxcbiAgICBleHRlcm5hbFNpZ25lclBhaWxsaWVyTW9kdWx1c0dldHRlcjogQ3VzdG9tUGFpbGxpZXJNb2R1bHVzR2V0dGVyRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJLU2hhcmVHZW5lcmF0b3I6IEN1c3RvbUtTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lck11RGVsdGFTaGFyZUdlbmVyYXRvcjogQ3VzdG9tTXVEZWx0YVNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyU1NoYXJlR2VuZXJhdG9yOiBDdXN0b21TU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb25cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgYSB0cmFuc2FjdGlvbiB1c2luZyBUU1MgTVBDdjIgZm9yIEVDRFNBIGFuZCB0aHJvdWdoIHV0aWxpemF0aW9uIG9mIGN1c3RvbSBzaGFyZSBnZW5lcmF0b3JzXG4gICAqXG4gICAqIEBwYXJhbSB7VFNTUGFyYW1zIHwgVFNTUGFyYW1zRm9yTWVzc2FnZX0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgcGFyYW1ldGVycyB0byBzaWduIGEgdHJhbnNhY3Rpb24gb3IgYSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge0N1c3RvbU1QQ3YyU2lnbmluZ1JvdW5kMUdlbmVyYXRpbmdGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJNUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0b3IgLSBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBNUEN2MiBSb3VuZCAxIHNoYXJlcyBpbiB0aGUgRUNEU0EgVFNTIE1QQ3YyIGZsb3cuXG4gICAqIEBwYXJhbSB7Q3VzdG9tTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9ufSBleHRlcm5hbFNpZ25lck1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRvciAtIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIE1QQ3YyIFJvdW5kIDIgc2hhcmVzIGluIHRoZSBFQ0RTQSBUU1MgTVBDdjIgZmxvdy5cbiAgICogQHBhcmFtIHtDdXN0b21NUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0aW5nRnVuY3Rpb259IGV4dGVybmFsU2lnbmVyTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdG9yIC0gYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgTVBDdjIgUm91bmQgMyBzaGFyZXMgaW4gdGhlIEVDRFNBIFRTUyBNUEN2MiBmbG93LlxuICAgKiBAcGFyYW0ge1JlcXVlc3RUeXBlfSByZXF1ZXN0VHlwZSAtIHRoZSB0eXBlIG9mIHRoZSByZXF1ZXN0IHRvIHNpZ24gKHRyYW5zYWN0aW9uIG9yIG1lc3NhZ2UpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fSAtIGEgc2lnbmVkIHR4IHJlcXVlc3RcbiAgICovXG4gIHNpZ25FY2RzYU1QQ3YyVHNzVXNpbmdFeHRlcm5hbFNpZ25lcihcbiAgICBwYXJhbXM6IFRTU1BhcmFtcyB8IFRTU1BhcmFtc0Zvck1lc3NhZ2UsXG4gICAgZXh0ZXJuYWxTaWduZXJNUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0b3I6IEN1c3RvbU1QQ3YyU2lnbmluZ1JvdW5kMUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lck1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRvcjogQ3VzdG9tTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdG9yOiBDdXN0b21NUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgcmVxdWVzdFR5cGU/OiBSZXF1ZXN0VHlwZVxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQ29tbWl0bWVudCAoVXNlciB0byBCaXRHbykgc2hhcmUgZnJvbSBhbiB1bnNpZ25lZCB0cmFuc2FjdGlvbiBhbmQgcHJpdmF0ZSB1c2VyIHNpZ25pbmcgbWF0ZXJpYWxcbiAgICogRUREU0Egb25seVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdFxuICAgKiBAcGFyYW0ge1R4UmVxdWVzdH0gcGFyYW1zLnR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgd2l0aCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBydiAtIHVzZXIgc2lnbmluZyBtYXRlcmlhbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLndhbGxldFBhc3NwaHJhc2UgLSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHVzZXJUb0JpdGdvQ29tbWl0bWVudDogQ29tbWl0bWVudFNoYXJlUmVjb3IsIGVuY3J5cHRlZFNpZ25lclNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZCB9Pn0gLSBDb21taXRtZW50IFNoYXJlIGFuZCB0aGUgRW5jcnlwdGVkIFNpZ25lciBTaGFyZSB0byBCaXRHb1xuICAgKi9cbiAgY3JlYXRlQ29tbWl0bWVudFNoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHtcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdDtcbiAgICBwcnY6IHN0cmluZztcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgYml0Z29HcGdQdWJLZXk6IHN0cmluZztcbiAgfSk6IFByb21pc2U8e1xuICAgIHVzZXJUb0JpdGdvQ29tbWl0bWVudDogQ29tbWl0bWVudFNoYXJlUmVjb3JkO1xuICAgIGVuY3J5cHRlZFNpZ25lclNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZDtcbiAgICBlbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQ7XG4gIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFIgKFVzZXIgdG8gQml0R28pIHNoYXJlIGZyb20gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByaXZhdGUgdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCB3aXRoIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLndhbGxldFBhc3NwaHJhc2VdIC0gd2FsbGV0IHBhc3NwaHJhc2VcbiAgICogQHBhcmFtIHtFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZH0gW3BhcmFtcy5lbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZV0gLSBlbmNyeXB0ZWQgdXNlciB0byBiaXRnbyBSIHNoYXJlIGdlbmVyYXRlZCBpbiB0aGUgY29tbWl0bWVudCBwaGFzZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHJTaGFyZTogU2lnblNoYXJlIH0+fSAtIFIgU2hhcmUgdG8gQml0R29cbiAgICovXG4gIGNyZWF0ZVJTaGFyZUZyb21UeFJlcXVlc3QocGFyYW1zOiB7XG4gICAgdHhSZXF1ZXN0OiBUeFJlcXVlc3Q7XG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVuY3J5cHRlZFVzZXJUb0JpdGdvUlNoYXJlOiBFbmNyeXB0ZWRTaWduZXJTaGFyZVJlY29yZDtcbiAgfSk6IFByb21pc2U8eyByU2hhcmU6IFNpZ25TaGFyZSB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEcgKFVzZXIgdG8gQml0R28pIHNoYXJlIGZyb20gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByaXZhdGUgdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0fSBwYXJhbXMudHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCB3aXRoIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucHJ2IC0gdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqIEBwYXJhbSB7U2lnbmF0dXJlU2hhcmVSZWNvcmR9IHBhcmFtcy5iaXRnb1RvVXNlclJTaGFyZSAtIEJpdEdvIHRvIFVzZXIgUiBTaGFyZVxuICAgKiBAcGFyYW0ge1NpZ25TaGFyZX0gcGFyYW1zLnVzZXJUb0JpdGdvUlNoYXJlIC0gVXNlciB0byBCaXRHbyBSIFNoYXJlXG4gICAqIEBwYXJhbSB7Q29tbWl0bWVudFNoYXJlUmVjb3JkfSBwYXJhbXMuYml0Z29Ub1VzZXJDb21taXRtZW50IC0gQml0R28gdG8gVXNlciBDb21taXRtZW50XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEdTaGFyZT59IC0gR1NoYXJlIGZyb20gVXNlciB0byBCaXRHb1xuICAgKi9cbiAgY3JlYXRlR1NoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHtcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdDtcbiAgICBwcnY6IHN0cmluZztcbiAgICBiaXRnb1RvVXNlclJTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQ7XG4gICAgdXNlclRvQml0Z29SU2hhcmU6IFNpZ25TaGFyZTtcbiAgICBiaXRnb1RvVXNlckNvbW1pdG1lbnQ6IENvbW1pdG1lbnRTaGFyZVJlY29yZDtcbiAgfSk6IFByb21pc2U8R1NoYXJlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgYW5kIHZlcmlmeSBpdFxuICAgKlxuICAgKiBAcGFyYW0ge1ByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9uc30gcGFyYW1zIC0gcGFyYW1ldGVycyB0byBidWlsZCB0aGUgdHhcbiAgICogQHBhcmFtIHtUeFJlcXVlc3RWZXJzaW9ufSBhcGlWZXJzaW9uIGxpdGUgb3IgZnVsbFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXZpZXcgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoaXMgaXMgdG8gcHJldmlldyBhIHR4IHJlcXVlc3QsIHdoaWNoIHdpbGwgbm90IGluaXRpYXRlIHBvbGljeSBjaGVja3Mgb3IgcGVuZGluZyBhcHByb3ZhbHNcbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gLSBhIGJ1aWx0IHR4IHJlcXVlc3RcbiAgICovXG4gIGFzeW5jIHByZWJ1aWxkVHhXaXRoSW50ZW50KFxuICAgIHBhcmFtczogUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zLFxuICAgIGFwaVZlcnNpb246IFR4UmVxdWVzdFZlcnNpb24gPSAnbGl0ZScsXG4gICAgcHJldmlldz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCBpbnRlbnRPcHRpb25zID0gdGhpcy5wb3B1bGF0ZUludGVudCh0aGlzLmJhc2VDb2luLCBwYXJhbXMpO1xuXG4gICAgY29uc3Qgd2hpdGVsaXN0ZWRQYXJhbXMgPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgLi4uaW50ZW50T3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uOiBhcGlWZXJzaW9uLFxuICAgICAgcHJldmlldyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVxVHJhY2VyID0gcGFyYW1zLnJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gICAgY29uc3QgdW5zaWduZWRUeCA9IChhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLnVybCgnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHhyZXF1ZXN0cycsIDIpKVxuICAgICAgLnNlbmQod2hpdGVsaXN0ZWRQYXJhbXMpXG4gICAgICAucmVzdWx0KCkpIGFzIFR4UmVxdWVzdDtcblxuICAgIHJldHVybiB1bnNpZ25lZFR4O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgZm9yIG1lc3NhZ2Ugc2lnbmluZ1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBhcGlWZXJzaW9uXG4gICAqIEBwYXJhbSBwcmV2aWV3XG4gICAqL1xuICBhc3luYyBjcmVhdGVUeFJlcXVlc3RXaXRoSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcoXG4gICAgcGFyYW1zOiBJbnRlbnRPcHRpb25zRm9yTWVzc2FnZSxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uID0gJ2Z1bGwnLFxuICAgIHByZXZpZXc/OiBib29sZWFuXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgaW50ZW50T3B0aW9uczogUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcgPSB7XG4gICAgICBjdXN0b2RpYW5NZXNzYWdlSWQ6IHBhcmFtcy5jdXN0b2RpYW5NZXNzYWdlSWQsXG4gICAgICBpbnRlbnRUeXBlOiBwYXJhbXMuaW50ZW50VHlwZSxcbiAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICBtZW1vOiBwYXJhbXMubWVtbz8udmFsdWUsXG4gICAgICBpc1RzczogcGFyYW1zLmlzVHNzLFxuICAgICAgbWVzc2FnZVJhdzogcGFyYW1zLm1lc3NhZ2VSYXcsXG4gICAgICBtZXNzYWdlRW5jb2RlZDogcGFyYW1zLm1lc3NhZ2VFbmNvZGVkID8/ICcnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUeFJlcXVlc3RCYXNlKGludGVudE9wdGlvbnMsIGFwaVZlcnNpb24sIHByZXZpZXcsIHBhcmFtcy5yZXFJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgdHggcmVxdWVzdCBmcm9tIHBhcmFtcyBmb3IgdHlwZSBkYXRhIHNpZ25pbmdcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gYXBpVmVyc2lvblxuICAgKiBAcGFyYW0gcHJldmlld1xuICAgKi9cbiAgYXN5bmMgY3JlYXRlVHhSZXF1ZXN0V2l0aEludGVudEZvclR5cGVkRGF0YVNpZ25pbmcoXG4gICAgcGFyYW1zOiBJbnRlbnRPcHRpb25zRm9yVHlwZWREYXRhLFxuICAgIGFwaVZlcnNpb246IFR4UmVxdWVzdFZlcnNpb24gPSAnZnVsbCcsXG4gICAgcHJldmlldz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCBpbnRlbnRPcHRpb25zOiBQb3B1bGF0ZWRJbnRlbnRGb3JUeXBlZERhdGFTaWduaW5nID0ge1xuICAgICAgY3VzdG9kaWFuTWVzc2FnZUlkOiBwYXJhbXMuY3VzdG9kaWFuTWVzc2FnZUlkLFxuICAgICAgaW50ZW50VHlwZTogcGFyYW1zLmludGVudFR5cGUsXG4gICAgICBzZXF1ZW5jZUlkOiBwYXJhbXMuc2VxdWVuY2VJZCxcbiAgICAgIGNvbW1lbnQ6IHBhcmFtcy5jb21tZW50LFxuICAgICAgbWVtbzogcGFyYW1zLm1lbW8/LnZhbHVlLFxuICAgICAgaXNUc3M6IHBhcmFtcy5pc1RzcyxcbiAgICAgIG1lc3NhZ2VSYXc6IHBhcmFtcy50eXBlZERhdGFSYXcsXG4gICAgICBtZXNzYWdlRW5jb2RlZDogcGFyYW1zLnR5cGVkRGF0YUVuY29kZWQgPz8gJycsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVR4UmVxdWVzdEJhc2UoaW50ZW50T3B0aW9ucywgYXBpVmVyc2lvbiwgcHJldmlldywgcGFyYW1zLnJlcUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBCaXRnbyBBUEkgdG8gY3JlYXRlIHR4IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNyZWF0ZVR4UmVxdWVzdEJhc2UoXG4gICAgaW50ZW50T3B0aW9uczogUG9wdWxhdGVkSW50ZW50Rm9yVHlwZWREYXRhU2lnbmluZyB8IFBvcHVsYXRlZEludGVudEZvck1lc3NhZ2VTaWduaW5nLFxuICAgIGFwaVZlcnNpb246IFR4UmVxdWVzdFZlcnNpb24sXG4gICAgcHJldmlldz86IGJvb2xlYW4sXG4gICAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlclxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGNvbnN0IHdoaXRlbGlzdGVkUGFyYW1zID0ge1xuICAgICAgaW50ZW50OiB7XG4gICAgICAgIC4uLmludGVudE9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHByZXZpZXcsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlcVRyYWNlciA9IHJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gICAgcmV0dXJuIHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vdHhyZXF1ZXN0c2AsIDIpKVxuICAgICAgLnNlbmQod2hpdGVsaXN0ZWRQYXJhbXMpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBkZWxldGUgc2lnbmF0dXJlIHNoYXJlcyBmb3IgYSB0eFJlcXVlc3QsIHRoZSBlbmRwb2ludCBkZWxldGUgdGhlIHNpZ25hdHVyZXMgYW5kIHJldHVybiB0aGVtXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eFJlcXVlc3RJZCB0eCBpZCByZWZlcmVuY2UgdG8gZGVsZXRlIHNpZ25hdHVyZSBzaGFyZXNcbiAgICogQHBhcmFtIHtJUmVxdWVzdFRyYWNlcn0gcmVxSWQgLSB0aGUgcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7U2lnbmF0dXJlU2hhcmVSZWNvcmRbXX1cbiAgICovXG4gIGFzeW5jIGRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3RJZDogc3RyaW5nLCByZXFJZD86IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZFtdPiB7XG4gICAgY29uc3QgcmVxVHJhY2VyID0gcmVxSWQgfHwgbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxVHJhY2VyKTtcbiAgICByZXR1cm4gdGhpcy5iaXRnb1xuICAgICAgLmRlbCh0aGlzLmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L3R4cmVxdWVzdHMvJHt0eFJlcXVlc3RJZH0vc2lnbmF0dXJlc2hhcmVzYCwgMikpXG4gICAgICAuc2VuZCgpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgc2VuZCBwcm9jZWR1cmUgb25jZSBCaXRnbyBoYXMgdGhlIFVzZXIgVG8gQml0Z28gR1NoYXJlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAgICogQHBhcmFtIHtJUmVxdWVzdFRyYWNlcn0gcmVxSWQgLSB0aGUgcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgYXN5bmMgc2VuZFR4UmVxdWVzdCh0eFJlcXVlc3RJZDogc3RyaW5nLCByZXFJZD86IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFUcmFjZXIpO1xuICAgIHJldHVybiB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJhc2VDb2luLnVybCgnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHgvc2VuZCcpKVxuICAgICAgLnNlbmQoeyB0eFJlcXVlc3RJZCB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBzaWduYXR1cmUgc2hhcmVzLCBnZXQgdGhlIHR4IHJlcXVlc3Qgd2l0aG91dCB0aGVtIGZyb20gdGhlIGRiIGFuZCBzaWduIGl0IHRvIGZpbmFsbHkgc2VuZCBpdC5cbiAgICpcbiAgICogTm90ZSA6IFRoaXMgY2FuIGJlIHBlcmZvcm1lZCBpbiBvcmRlciB0byByZWFjaCBsYXRlc3QgbmV0d29yayBjb25kaXRpb25zIHJlcXVpcmVkIG9uIHBlbmRpbmcgYXBwcm92YWwgZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZCB0byBtYWtlIHRoZSByZXF1ZXN0cy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGRlY3J5cHRlZFBydiAtIGRlY3J5cHRlZCBwcnYgdG8gc2lnbiB0aGUgdHggcmVxdWVzdC5cbiAgICogQHBhcmFtIHtSZXF1ZXN0VHJhY2VyfSByZXFJZCBpZCB0cmFjZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyByZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZDogc3RyaW5nLCBkZWNyeXB0ZWRQcnY6IHN0cmluZywgcmVxSWQ6IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3RJZCwgcmVxSWQpO1xuICAgIC8vIGFmdGVyIGRlbGV0ZSBzaWduYXR1cmVzIHNoYXJlcyBnZXQgdGhlIHR4IHdpdGhvdXQgdGhlbVxuICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RJZCwgcmVxSWQpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnNpZ25UeFJlcXVlc3QoeyB0eFJlcXVlc3QsIHBydjogZGVjcnlwdGVkUHJ2LCByZXFJZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYXRlc3QgVHggUmVxdWVzdCBieSBpZFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gICAqIEBwYXJhbSB7SVJlcXVlc3RUcmFjZXJ9IHJlcUlkIC0gcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fVxuICAgKi9cbiAgYXN5bmMgZ2V0VHhSZXF1ZXN0KHR4UmVxdWVzdElkOiBzdHJpbmcsIHJlcUlkPzogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHJldHVybiBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQsIHJlcUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgdGhpcmQgcGFydHkgYmFja3VwIHByb3ZpZGVyIGlzIHZhbGlkL3N1cHBvcnRlZFxuICAgKiBAcGFyYW0gYmFja3VwUHJvdmlkZXIgLSB0aGUgYmFja3VwIHByb3ZpZGVyIGNsaWVudCBzZWxlY3RlZFxuICAgKi9cbiAgaXNWYWxpZFRoaXJkUGFydHlCYWNrdXBQcm92aWRlcihcbiAgICBiYWNrdXBQcm92aWRlcjogQmFja3VwUHJvdmlkZXIgfCBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogYmFja3VwUHJvdmlkZXIgaXMgQmFja3VwUHJvdmlkZXIge1xuICAgIC8vIEFzIG9mIG5vdywgQml0R28gaXMgdGhlIG9ubHkgc3VwcG9ydGVkIEtSUyBwcm92aWRlciBmb3IgVFNTXG4gICAgcmV0dXJuICEhKGJhY2t1cFByb3ZpZGVyICYmIGJhY2t1cFByb3ZpZGVyID09PSAnQml0R29UcnVzdEFzS3JzJyk7XG4gIH1cblxuICAvKipcbiAgICogSXQgZ2V0cyB0aGUgYXBwcm9wcmlhdGUgQml0R28gR1BHIHB1YmxpYyBrZXkgZm9yIGtleSBjcmVhdGlvbiBiYXNlZCBvbiBhXG4gICAqIGNvbWJpbmF0aW9uIG9mIGNvaW4gYW5kIHRoZSBmZWF0dXJlIGZsYWdzIG9uIHRoZSB1c2VyIGFuZCB0aGVpciBlbnRlcnByaXNlIGlmIHNldC5cbiAgICogQHBhcmFtIGVudGVycHJpc2VJZCAtIGVudGVycHJpc2UgdW5kZXIgd2hpY2ggdXNlciB3YW50cyB0byBjcmVhdGUgdGhlIHdhbGxldFxuICAgKiBAcGFyYW0gaXNNUEN2MiAtIHRydWUgdG8gZ2V0IHRoZSBNUEN2MiBHUEcgcHVibGljIGtleSwgZGVmYXVsdHMgdG8gZmFsc2VcbiAgICogQHBhcmFtIHJlcUlkIC0gcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncyhcbiAgICBlbnRlcnByaXNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBpc01QQ3YyID0gZmFsc2UsXG4gICAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlclxuICApOiBQcm9taXNlPEtleT4ge1xuICAgIGNvbnN0IHJlcVRyYWNlciA9IHJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gICAgY29uc3QgcmVzcG9uc2U6IEJpdGdvR1BHUHVibGljS2V5ID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLmdldCh0aGlzLmJhc2VDb2luLnVybCgnL3Rzcy9wdWJrZXknKSlcbiAgICAgIC5xdWVyeSh7IGVudGVycHJpc2VJZCB9KVxuICAgICAgLnJldHJ5KDMpXG4gICAgICAucmVzdWx0KCk7XG4gICAgY29uc3QgYml0Z29QdWJsaWNLZXlTdHIgPSBpc01QQ3YyID8gcmVzcG9uc2UubXBjdjJQdWJsaWNLZXkgOiByZXNwb25zZS5wdWJsaWNLZXk7XG4gICAgcmV0dXJuIHJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb1B1YmxpY0tleVN0ciBhcyBzdHJpbmcgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBzdXBwb3J0ZWQgVHhSZXF1ZXN0IHZlcnNpb25zIGZvciB0aGlzIHdhbGxldFxuICAgKi9cbiAgcHVibGljIHN1cHBvcnRlZFR4UmVxdWVzdFZlcnNpb25zKCk6IFR4UmVxdWVzdFZlcnNpb25bXSB7XG4gICAgY29uc3Qgd2FsbGV0VHlwZSA9IHRoaXMuX3dhbGxldD8udHlwZSgpO1xuICAgIGNvbnN0IHN1cHBvcnRlZFdhbGxldFR5cGVzID0gWydjdXN0b2RpYWwnLCAnY29sZCcsICdob3QnXTtcbiAgICBpZiAoIXdhbGxldFR5cGUgfHwgdGhpcy5fd2FsbGV0Py5tdWx0aXNpZ1R5cGUoKSAhPT0gJ3RzcycgfHwgIXN1cHBvcnRlZFdhbGxldFR5cGVzLmluY2x1ZGVzKHdhbGxldFR5cGUpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIGlmICh0aGlzLl93YWxsZXQ/LmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpID09PSAnZWNkc2EnKSB7XG4gICAgICByZXR1cm4gWydmdWxsJ107XG4gICAgfSBlbHNlIGlmICh3YWxsZXRUeXBlID09PSAnY3VzdG9kaWFsJyB8fCB3YWxsZXRUeXBlID09PSAnY29sZCcpIHtcbiAgICAgIHJldHVybiBbJ2Z1bGwnXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3dhbGxldD8uYmFzZUNvaW4uZ2V0TVBDQWxnb3JpdGhtKCkgPT09ICdlZGRzYScgJiYgd2FsbGV0VHlwZSA9PT0gJ2hvdCcpIHtcbiAgICAgIHJldHVybiBbJ2xpdGUnLCAnZnVsbCddO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0eFJlcXVlc3QgaXMgdXNpbmcgYXBpVmVyc2lvbiA9PSBmdWxsIGFuZCBpcyBwZW5kaW5nIGFwcHJvdmFsXG4gICAqIEBwYXJhbSB0eFJlcXVlc3RcbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgaXNQZW5kaW5nQXBwcm92YWxUeFJlcXVlc3RGdWxsKHR4UmVxdWVzdDogVHhSZXF1ZXN0KTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBhcGlWZXJzaW9uLCBzdGF0ZSB9ID0gdHhSZXF1ZXN0O1xuICAgIHJldHVybiBhcGlWZXJzaW9uID09PSAnZnVsbCcgJiYgJ3BlbmRpbmdBcHByb3ZhbCcgPT09IHN0YXRlO1xuICB9XG59XG4iXX0=
|