@bitgo-beta/utxo-staking 1.1.1-beta.8 → 1.1.1-beta.800

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/src/babylon/delegationMessage.d.ts +38 -0
  2. package/dist/src/babylon/delegationMessage.d.ts.map +1 -0
  3. package/dist/src/babylon/delegationMessage.js +285 -0
  4. package/dist/src/babylon/descriptor.d.ts +48 -0
  5. package/dist/src/babylon/descriptor.d.ts.map +1 -0
  6. package/dist/src/babylon/descriptor.js +97 -0
  7. package/dist/src/babylon/index.d.ts +6 -0
  8. package/dist/src/babylon/index.d.ts.map +1 -0
  9. package/dist/src/babylon/index.js +49 -0
  10. package/dist/src/babylon/network.d.ts +7 -0
  11. package/dist/src/babylon/network.d.ts.map +1 -0
  12. package/dist/src/babylon/network.js +66 -0
  13. package/dist/src/babylon/params.mainnet.json +152 -0
  14. package/dist/src/babylon/params.testnet.json +212 -0
  15. package/dist/src/babylon/parseDescriptor.d.ts +26 -0
  16. package/dist/src/babylon/parseDescriptor.d.ts.map +1 -0
  17. package/dist/src/babylon/parseDescriptor.js +159 -0
  18. package/dist/src/babylon/stakingManager.d.ts +6 -0
  19. package/dist/src/babylon/stakingManager.d.ts.map +1 -0
  20. package/dist/src/babylon/stakingManager.js +120 -0
  21. package/dist/src/babylon/stakingParams.d.ts +40 -0
  22. package/dist/src/babylon/stakingParams.d.ts.map +1 -0
  23. package/dist/src/babylon/stakingParams.js +132 -0
  24. package/dist/src/babylon/undelegation/UndelegationResponse.d.ts +24 -0
  25. package/dist/src/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
  26. package/dist/src/babylon/undelegation/UndelegationResponse.js +55 -0
  27. package/dist/src/babylon/undelegation/index.d.ts +3 -0
  28. package/dist/src/babylon/undelegation/index.d.ts.map +1 -0
  29. package/dist/src/babylon/undelegation/index.js +19 -0
  30. package/dist/src/babylon/undelegation/unbonding.d.ts +16 -0
  31. package/dist/src/babylon/undelegation/unbonding.d.ts.map +1 -0
  32. package/dist/src/babylon/undelegation/unbonding.js +111 -0
  33. package/dist/src/coreDao/descriptor.d.ts +4 -4
  34. package/dist/src/coreDao/descriptor.d.ts.map +1 -1
  35. package/dist/src/coreDao/descriptor.js +12 -5
  36. package/dist/src/coreDao/opReturn.d.ts +5 -5
  37. package/dist/src/coreDao/opReturn.d.ts.map +1 -1
  38. package/dist/src/coreDao/opReturn.js +19 -11
  39. package/dist/src/coreDao/transaction.d.ts +15 -8
  40. package/dist/src/coreDao/transaction.d.ts.map +1 -1
  41. package/dist/src/coreDao/transaction.js +13 -6
  42. package/dist/src/index.d.ts +1 -1
  43. package/dist/src/index.d.ts.map +1 -1
  44. package/dist/src/index.js +26 -7
  45. package/package.json +23 -9
  46. package/.eslintignore +0 -5
  47. package/.mocharc.yml +0 -8
  48. package/CHANGELOG.md +0 -24
  49. package/dist/src/transaction.d.ts +0 -34
  50. package/dist/src/transaction.d.ts.map +0 -1
  51. package/dist/src/transaction.js +0 -55
package/package.json CHANGED
@@ -1,24 +1,26 @@
1
1
  {
2
2
  "name": "@bitgo-beta/utxo-staking",
3
- "version": "1.1.1-beta.8",
3
+ "version": "1.1.1-beta.800",
4
4
  "description": "BitGo SDK for build UTXO staking transactions",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
7
+ "files": [
8
+ "dist/src"
9
+ ],
7
10
  "scripts": {
8
11
  "build": "yarn tsc --build --incremental --verbose .",
9
12
  "fmt": "prettier --write .",
10
- "check-fmt": "prettier --check .",
13
+ "check-fmt": "prettier --check '**/*.{ts,js,json}'",
11
14
  "clean": "rm -r ./dist",
12
15
  "lint": "eslint --quiet .",
13
16
  "prepare": "npm run build",
14
- "test": "npm run coverage",
15
17
  "coverage": "nyc -- npm run unit-test",
16
- "unit-test": "mocha"
18
+ "unit-test": "mocha --recursive \"test/**/*.ts\""
17
19
  },
18
20
  "author": "BitGo SDK Team <sdkteam@bitgo.com>",
19
21
  "license": "MIT",
20
22
  "engines": {
21
- "node": ">=18 <21"
23
+ "node": ">=20 <23"
22
24
  },
23
25
  "repository": {
24
26
  "type": "git",
@@ -39,10 +41,22 @@
39
41
  ".ts"
40
42
  ]
41
43
  },
44
+ "type": "commonjs",
42
45
  "dependencies": {
43
- "@bitgo-beta/unspents": "0.13.2-beta.567",
44
- "@bitgo-beta/utxo-lib": "8.0.3-beta.568",
45
- "@bitgo/wasm-miniscript": "^2.0.0-beta.2"
46
+ "@babylonlabs-io/babylon-proto-ts": "1.7.2",
47
+ "@bitgo-beta/babylonlabs-io-btc-staking-ts": "0.4.0-beta.605",
48
+ "@bitgo-beta/utxo-core": "1.8.1-beta.476",
49
+ "@bitgo-beta/utxo-lib": "8.0.3-beta.1360",
50
+ "@bitgo/wasm-miniscript": "2.0.0-beta.7",
51
+ "bip174": "npm:@bitgo-forks/bip174@3.1.0-master.4",
52
+ "bip322-js": "^2.0.0",
53
+ "bitcoinjs-lib": "^6.1.7",
54
+ "fp-ts": "^2.16.2",
55
+ "io-ts": "npm:@bitgo-forks/io-ts@2.1.4",
56
+ "io-ts-types": "^0.5.19"
46
57
  },
47
- "gitHead": "4446d74e924882adcc9ca22b72dcbc69f7879e2c"
58
+ "devDependencies": {
59
+ "yargs": "^17.7.2"
60
+ },
61
+ "gitHead": "04137d02b7d9d6356e42c1c4c3e82695cee7f818"
48
62
  }
package/.eslintignore DELETED
@@ -1,5 +0,0 @@
1
- node_modules
2
- .idea
3
- public
4
- dist
5
-
package/.mocharc.yml DELETED
@@ -1,8 +0,0 @@
1
- require: 'ts-node/register'
2
- timeout: '60000'
3
- reporter: 'min'
4
- reporter-option:
5
- - 'cdn=true'
6
- - 'json=false'
7
- exit: true
8
- spec: ['test/unit/**/*.ts']
package/CHANGELOG.md DELETED
@@ -1,24 +0,0 @@
1
- # Change Log
2
-
3
- All notable changes to this project will be documented in this file.
4
- See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
-
6
- # 1.2.0 (2024-11-14)
7
-
8
- ### Features
9
-
10
- - **utxo-staking:** build staking transaction ([73b33bc](https://github.com/BitGo/BitGoJS/commit/73b33bc93e46934fe5e6002c52c0b1443a3d0d8d))
11
- - **utxo-staking:** create coredao staking outputs ([6b5ca4b](https://github.com/BitGo/BitGoJS/commit/6b5ca4b7c726fb6a4380526391416f6db356e0b7))
12
-
13
- # 1.1.0 (2024-11-01)
14
-
15
- ### Bug Fixes
16
-
17
- - **utxo-coredao:** clarifications from the coredao team ([56157b3](https://github.com/BitGo/BitGoJS/commit/56157b34e6802895489928d8e7a87f8f5c8129ed))
18
- - **utxo-coredao:** fix json encoding to add newline ([bb5be2f](https://github.com/BitGo/BitGoJS/commit/bb5be2f91e0e7f1d59d94a1786fdd2cccc4ebad6))
19
-
20
- ### Features
21
-
22
- - **utxo-coredao:** descriptor for CoreDao ([791f9e4](https://github.com/BitGo/BitGoJS/commit/791f9e47033a8224759d98f0483f5b0bb9bbc524))
23
- - **utxo-coredao:** init repo and op-return ([60fa058](https://github.com/BitGo/BitGoJS/commit/60fa058f693cf722db8d5e7507539a5ec1c8b1a5))
24
- - **utxo-coredao:** parse and verify op-return ([32dc7c4](https://github.com/BitGo/BitGoJS/commit/32dc7c49f0ff5baeb0db4a20853f70745f71c02b))
@@ -1,34 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import * as utxolib from '@bitgo-beta/utxo-lib';
4
- /**
5
- * Build a staking transaction for a wallet that assumes 2-of-3 multisig for the inputs
6
- *
7
- * Given the inputs and the staking outputs, we will create the PSBT with the desired fee rate.
8
- * We always add the change address as the last output.
9
- *
10
- * @param rootWalletKeys
11
- * @param unspents
12
- * @param createStakingOutputs
13
- * @param changeAddressInfo
14
- * @param feeRateSatKB
15
- * @param network
16
- */
17
- export declare function buildFixedWalletStakingPsbt({ rootWalletKeys, unspents, outputs, changeAddressInfo, feeRateSatKB, network, skipNonWitnessUtxo, dustAmount, }: {
18
- rootWalletKeys: utxolib.bitgo.RootWalletKeys;
19
- unspents: utxolib.bitgo.WalletUnspent<bigint>[];
20
- outputs: {
21
- script: Buffer;
22
- value: bigint;
23
- }[];
24
- changeAddressInfo: {
25
- chain: utxolib.bitgo.ChainCode;
26
- index: number;
27
- address: string;
28
- };
29
- feeRateSatKB: number;
30
- network: utxolib.Network;
31
- skipNonWitnessUtxo?: boolean;
32
- dustAmount?: bigint;
33
- }): utxolib.bitgo.UtxoPsbt;
34
- //# sourceMappingURL=transaction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/transaction.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,cAAc,EACd,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,kBAAkB,EAClB,UAAsB,GACvB,EAAE;IACD,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;IAC7C,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;IAChD,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,iBAAiB,EAAE;QACjB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CA0DzB"}
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildFixedWalletStakingPsbt = void 0;
4
- const utxolib = require("@bitgo-beta/utxo-lib");
5
- const unspents_1 = require("@bitgo-beta/unspents");
6
- /**
7
- * Build a staking transaction for a wallet that assumes 2-of-3 multisig for the inputs
8
- *
9
- * Given the inputs and the staking outputs, we will create the PSBT with the desired fee rate.
10
- * We always add the change address as the last output.
11
- *
12
- * @param rootWalletKeys
13
- * @param unspents
14
- * @param createStakingOutputs
15
- * @param changeAddressInfo
16
- * @param feeRateSatKB
17
- * @param network
18
- */
19
- function buildFixedWalletStakingPsbt({ rootWalletKeys, unspents, outputs, changeAddressInfo, feeRateSatKB, network, skipNonWitnessUtxo, dustAmount = BigInt(0), }) {
20
- if (feeRateSatKB < 1000) {
21
- throw new Error('Fee rate must be at least 1 sat/vbyte');
22
- }
23
- if (unspents.length === 0 || outputs.length === 0) {
24
- throw new Error('Must have at least one input and one output');
25
- }
26
- // Check the change address info
27
- const changeScript = utxolib.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(changeAddressInfo.chain, changeAddressInfo.index).publicKeys, utxolib.bitgo.scriptTypeForChain(changeAddressInfo.chain), network).scriptPubKey;
28
- if (!changeScript.equals(utxolib.addressFormat.toOutputScriptTryFormats(changeAddressInfo.address, network))) {
29
- throw new Error('Change address info does not match the derived change script');
30
- }
31
- const psbt = utxolib.bitgo.createPsbtForNetwork({ network });
32
- utxolib.bitgo.addXpubsToPsbt(psbt, rootWalletKeys);
33
- const inputAmount = unspents.reduce((sum, unspent) => sum + unspent.value, BigInt(0));
34
- const outputAmount = outputs.reduce((sum, output) => sum + output.value, BigInt(0));
35
- unspents.forEach((unspent) => utxolib.bitgo.addWalletUnspentToPsbt(psbt, unspent, rootWalletKeys, 'user', 'bitgo', {
36
- isReplaceableByFee: true,
37
- skipNonWitnessUtxo,
38
- }));
39
- outputs.forEach((output) => psbt.addOutput(output));
40
- const fee = Math.ceil((unspents_1.Dimensions.fromPsbt(psbt)
41
- .plus(unspents_1.Dimensions.fromOutput({ script: changeScript }))
42
- .getVSize() *
43
- feeRateSatKB) /
44
- 1000);
45
- const changeAmount = inputAmount - (outputAmount + BigInt(fee));
46
- if (changeAmount < BigInt(0)) {
47
- throw new Error(`Input amount ${inputAmount.toString()} cannot cover the staking amount ${outputAmount} and the fee: ${fee}`);
48
- }
49
- if (changeAmount > dustAmount) {
50
- utxolib.bitgo.addWalletOutputToPsbt(psbt, rootWalletKeys, changeAddressInfo.chain, changeAddressInfo.index, changeAmount);
51
- }
52
- return psbt;
53
- }
54
- exports.buildFixedWalletStakingPsbt = buildFixedWalletStakingPsbt;
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQWdEO0FBQ2hELG1EQUFrRDtBQUVsRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQiwyQkFBMkIsQ0FBQyxFQUMxQyxjQUFjLEVBQ2QsUUFBUSxFQUNSLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLE9BQU8sRUFDUCxrQkFBa0IsRUFDbEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FpQnZCO0lBQ0MsSUFBSSxZQUFZLEdBQUcsSUFBSSxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztLQUMxRDtJQUNELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0tBQ2hFO0lBRUQsZ0NBQWdDO0lBQ2hDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUNyRSxjQUFjLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFDbEcsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFDekQsT0FBTyxDQUNSLENBQUMsWUFBWSxDQUFDO0lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtRQUM1RyxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7S0FDakY7SUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3RCxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFbkQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVwRixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO1FBQ25GLGtCQUFrQixFQUFFLElBQUk7UUFDeEIsa0JBQWtCO0tBQ25CLENBQUMsQ0FDSCxDQUFDO0lBQ0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXBELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ25CLENBQUMscUJBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3ZCLElBQUksQ0FBQyxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQ3JELFFBQVEsRUFBRTtRQUNYLFlBQVksQ0FBQztRQUNiLElBQUksQ0FDUCxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsV0FBVyxHQUFHLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUNiLGdCQUFnQixXQUFXLENBQUMsUUFBUSxFQUFFLG9DQUFvQyxZQUFZLGtCQUFrQixHQUFHLEVBQUUsQ0FDOUcsQ0FBQztLQUNIO0lBRUQsSUFBSSxZQUFZLEdBQUcsVUFBVSxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQ2pDLElBQUksRUFDSixjQUFjLEVBQ2QsaUJBQWlCLENBQUMsS0FBSyxFQUN2QixpQkFBaUIsQ0FBQyxLQUFLLEVBQ3ZCLFlBQVksQ0FDYixDQUFDO0tBQ0g7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFuRkQsa0VBbUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnQGJpdGdvLWJldGEvdW5zcGVudHMnO1xuXG4vKipcbiAqIEJ1aWxkIGEgc3Rha2luZyB0cmFuc2FjdGlvbiBmb3IgYSB3YWxsZXQgdGhhdCBhc3N1bWVzIDItb2YtMyBtdWx0aXNpZyBmb3IgdGhlIGlucHV0c1xuICpcbiAqIEdpdmVuIHRoZSBpbnB1dHMgYW5kIHRoZSBzdGFraW5nIG91dHB1dHMsIHdlIHdpbGwgY3JlYXRlIHRoZSBQU0JUIHdpdGggdGhlIGRlc2lyZWQgZmVlIHJhdGUuXG4gKiBXZSBhbHdheXMgYWRkIHRoZSBjaGFuZ2UgYWRkcmVzcyBhcyB0aGUgbGFzdCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHJvb3RXYWxsZXRLZXlzXG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSBjcmVhdGVTdGFraW5nT3V0cHV0c1xuICogQHBhcmFtIGNoYW5nZUFkZHJlc3NJbmZvXG4gKiBAcGFyYW0gZmVlUmF0ZVNhdEtCXG4gKiBAcGFyYW0gbmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGaXhlZFdhbGxldFN0YWtpbmdQc2J0KHtcbiAgcm9vdFdhbGxldEtleXMsXG4gIHVuc3BlbnRzLFxuICBvdXRwdXRzLFxuICBjaGFuZ2VBZGRyZXNzSW5mbyxcbiAgZmVlUmF0ZVNhdEtCLFxuICBuZXR3b3JrLFxuICBza2lwTm9uV2l0bmVzc1V0eG8sXG4gIGR1c3RBbW91bnQgPSBCaWdJbnQoMCksXG59OiB7XG4gIHJvb3RXYWxsZXRLZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuICB1bnNwZW50czogdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcbiAgb3V0cHV0czoge1xuICAgIHNjcmlwdDogQnVmZmVyO1xuICAgIHZhbHVlOiBiaWdpbnQ7XG4gIH1bXTtcbiAgY2hhbmdlQWRkcmVzc0luZm86IHtcbiAgICBjaGFpbjogdXR4b2xpYi5iaXRnby5DaGFpbkNvZGU7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gIH07XG4gIGZlZVJhdGVTYXRLQjogbnVtYmVyO1xuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG4gIHNraXBOb25XaXRuZXNzVXR4bz86IGJvb2xlYW47XG4gIGR1c3RBbW91bnQ/OiBiaWdpbnQ7XG59KTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGlmIChmZWVSYXRlU2F0S0IgPCAxMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGZWUgcmF0ZSBtdXN0IGJlIGF0IGxlYXN0IDEgc2F0L3ZieXRlJyk7XG4gIH1cbiAgaWYgKHVuc3BlbnRzLmxlbmd0aCA9PT0gMCB8fCBvdXRwdXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCcpO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhlIGNoYW5nZSBhZGRyZXNzIGluZm9cbiAgY29uc3QgY2hhbmdlU2NyaXB0ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFuZ2VBZGRyZXNzSW5mby5jaGFpbiwgY2hhbmdlQWRkcmVzc0luZm8uaW5kZXgpLnB1YmxpY0tleXMsXG4gICAgdXR4b2xpYi5iaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oY2hhbmdlQWRkcmVzc0luZm8uY2hhaW4pLFxuICAgIG5ldHdvcmtcbiAgKS5zY3JpcHRQdWJLZXk7XG4gIGlmICghY2hhbmdlU2NyaXB0LmVxdWFscyh1dHhvbGliLmFkZHJlc3NGb3JtYXQudG9PdXRwdXRTY3JpcHRUcnlGb3JtYXRzKGNoYW5nZUFkZHJlc3NJbmZvLmFkZHJlc3MsIG5ldHdvcmspKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbmdlIGFkZHJlc3MgaW5mbyBkb2VzIG5vdCBtYXRjaCB0aGUgZGVyaXZlZCBjaGFuZ2Ugc2NyaXB0Jyk7XG4gIH1cblxuICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7IG5ldHdvcmsgfSk7XG4gIHV0eG9saWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgcm9vdFdhbGxldEtleXMpO1xuXG4gIGNvbnN0IGlucHV0QW1vdW50ID0gdW5zcGVudHMucmVkdWNlKChzdW0sIHVuc3BlbnQpID0+IHN1bSArIHVuc3BlbnQudmFsdWUsIEJpZ0ludCgwKSk7XG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IG91dHB1dHMucmVkdWNlKChzdW0sIG91dHB1dCkgPT4gc3VtICsgb3V0cHV0LnZhbHVlLCBCaWdJbnQoMCkpO1xuXG4gIHVuc3BlbnRzLmZvckVhY2goKHVuc3BlbnQpID0+XG4gICAgdXR4b2xpYi5iaXRnby5hZGRXYWxsZXRVbnNwZW50VG9Qc2J0KHBzYnQsIHVuc3BlbnQsIHJvb3RXYWxsZXRLZXlzLCAndXNlcicsICdiaXRnbycsIHtcbiAgICAgIGlzUmVwbGFjZWFibGVCeUZlZTogdHJ1ZSxcbiAgICAgIHNraXBOb25XaXRuZXNzVXR4byxcbiAgICB9KVxuICApO1xuICBvdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4gcHNidC5hZGRPdXRwdXQob3V0cHV0KSk7XG5cbiAgY29uc3QgZmVlID0gTWF0aC5jZWlsKFxuICAgIChEaW1lbnNpb25zLmZyb21Qc2J0KHBzYnQpXG4gICAgICAucGx1cyhEaW1lbnNpb25zLmZyb21PdXRwdXQoeyBzY3JpcHQ6IGNoYW5nZVNjcmlwdCB9KSlcbiAgICAgIC5nZXRWU2l6ZSgpICpcbiAgICAgIGZlZVJhdGVTYXRLQikgL1xuICAgICAgMTAwMFxuICApO1xuXG4gIGNvbnN0IGNoYW5nZUFtb3VudCA9IGlucHV0QW1vdW50IC0gKG91dHB1dEFtb3VudCArIEJpZ0ludChmZWUpKTtcbiAgaWYgKGNoYW5nZUFtb3VudCA8IEJpZ0ludCgwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnB1dCBhbW91bnQgJHtpbnB1dEFtb3VudC50b1N0cmluZygpfSBjYW5ub3QgY292ZXIgdGhlIHN0YWtpbmcgYW1vdW50ICR7b3V0cHV0QW1vdW50fSBhbmQgIHRoZSBmZWU6ICR7ZmVlfWBcbiAgICApO1xuICB9XG5cbiAgaWYgKGNoYW5nZUFtb3VudCA+IGR1c3RBbW91bnQpIHtcbiAgICB1dHhvbGliLmJpdGdvLmFkZFdhbGxldE91dHB1dFRvUHNidChcbiAgICAgIHBzYnQsXG4gICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgIGNoYW5nZUFkZHJlc3NJbmZvLmNoYWluLFxuICAgICAgY2hhbmdlQWRkcmVzc0luZm8uaW5kZXgsXG4gICAgICBjaGFuZ2VBbW91bnRcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHBzYnQ7XG59XG4iXX0=