@bitgo-beta/sdk-coin-stx 1.1.1-beta.202 → 1.1.1-beta.2021
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/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +24 -9
- package/dist/src/lib/abstractContractBuilder.js +2 -2
- package/dist/src/lib/btcAddressUtils.d.ts +30 -0
- package/dist/src/lib/btcAddressUtils.d.ts.map +1 -0
- package/dist/src/lib/btcAddressUtils.js +134 -0
- package/dist/src/lib/constants.d.ts +4 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +8 -3
- package/dist/src/lib/contractBuilder.js +10 -10
- package/dist/src/lib/fungibleTokenTransferBuilder.d.ts +62 -0
- package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/fungibleTokenTransferBuilder.js +131 -0
- package/dist/src/lib/iface.d.ts +61 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +24 -9
- package/dist/src/lib/keyPair.js +18 -19
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts +27 -0
- package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -0
- package/dist/src/lib/sbtcWithdrawBuilder.js +124 -0
- package/dist/src/lib/sendmanyBuilder.js +11 -11
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +31 -15
- package/dist/src/lib/transactionBuilder.js +12 -12
- package/dist/src/lib/transactionBuilderFactory.d.ts +4 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +16 -2
- package/dist/src/lib/transferBuilder.js +4 -4
- package/dist/src/lib/utils.d.ts +40 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +171 -63
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/sip10Token.d.ts +22 -0
- package/dist/src/sip10Token.d.ts.map +1 -0
- package/dist/src/sip10Token.js +128 -0
- package/dist/src/stx.d.ts +146 -2
- package/dist/src/stx.d.ts.map +1 -1
- package/dist/src/stx.js +420 -11
- package/dist/src/tstx.js +1 -1
- package/dist/test/fixtures.d.ts +119 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +147 -0
- package/dist/test/unit/btcAddressUtils.d.ts +2 -0
- package/dist/test/unit/btcAddressUtils.d.ts.map +1 -0
- package/dist/test/unit/btcAddressUtils.js +82 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +144 -0
- package/dist/test/unit/resources.d.ts +97 -0
- package/dist/test/unit/resources.d.ts.map +1 -0
- package/dist/test/unit/resources.js +144 -0
- package/dist/test/unit/sip10Token.d.ts +2 -0
- package/dist/test/unit/sip10Token.d.ts.map +1 -0
- package/dist/test/unit/sip10Token.js +374 -0
- package/dist/test/unit/stx.d.ts +2 -0
- package/dist/test/unit/stx.d.ts.map +1 -0
- package/dist/test/unit/stx.js +470 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +83 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.js +421 -0
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +187 -0
- package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.js +306 -0
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +140 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +347 -0
- package/dist/test/unit/util.d.ts +2 -0
- package/dist/test/unit/util.d.ts.map +1 -0
- package/dist/test/unit/util.js +340 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +16 -12
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -107
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
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);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
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
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
40
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
41
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
42
|
+
const transactions_1 = require("@stacks/transactions");
|
|
43
|
+
const should_1 = __importDefault(require("should"));
|
|
44
|
+
const network_1 = require("@stacks/network");
|
|
45
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
46
|
+
const assert_1 = __importDefault(require("assert"));
|
|
47
|
+
const src_1 = require("../../../src");
|
|
48
|
+
const testData = __importStar(require("../resources"));
|
|
49
|
+
describe('Stacks: Fungible Token Transfer Builder', () => {
|
|
50
|
+
const coinName = 'stx:sbtc';
|
|
51
|
+
const coinNameTest = 'tstx:tsip6dp';
|
|
52
|
+
let bitgo;
|
|
53
|
+
before(function () {
|
|
54
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, {
|
|
55
|
+
env: 'mock',
|
|
56
|
+
});
|
|
57
|
+
bitgo.initializeTestVars();
|
|
58
|
+
bitgo.safeRegister('tstx:tsip6dp', src_1.Sip10Token.createInstance);
|
|
59
|
+
});
|
|
60
|
+
describe('Sip10 fungible token transfer builder', function () {
|
|
61
|
+
const factory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get(coinNameTest));
|
|
62
|
+
const factoryProd = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get(coinName));
|
|
63
|
+
const initTxBuilder = () => {
|
|
64
|
+
const txBuilder = factory.getFungibleTokenTransferBuilder();
|
|
65
|
+
txBuilder.fee({ fee: '180' });
|
|
66
|
+
txBuilder.nonce(0);
|
|
67
|
+
txBuilder.contractAddress(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_ADDRESS);
|
|
68
|
+
txBuilder.contractName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_NAME);
|
|
69
|
+
txBuilder.functionName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.FUNCTION_NAME);
|
|
70
|
+
txBuilder.tokenName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.TOKEN_NAME);
|
|
71
|
+
return txBuilder;
|
|
72
|
+
};
|
|
73
|
+
describe('fungible token builder environment', function () {
|
|
74
|
+
it('should select the right network', function () {
|
|
75
|
+
should_1.default.equal(factory.getFungibleTokenTransferBuilder().coinName(), 'tstx:tsip6dp');
|
|
76
|
+
should_1.default.equal(factoryProd.getFungibleTokenTransferBuilder().coinName(), 'stx:sbtc');
|
|
77
|
+
// used type any to access protected properties
|
|
78
|
+
const txBuilder = factory.getFungibleTokenTransferBuilder();
|
|
79
|
+
const txBuilderProd = factoryProd.getFungibleTokenTransferBuilder();
|
|
80
|
+
txBuilder._network.should.deepEqual(new network_1.StacksTestnet());
|
|
81
|
+
txBuilderProd._network.should.deepEqual(new network_1.StacksMainnet());
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
describe('should build', function () {
|
|
85
|
+
it('an unsigned fungible token transfer transaction', async () => {
|
|
86
|
+
const builder = initTxBuilder();
|
|
87
|
+
builder.functionArgs([
|
|
88
|
+
(0, transactions_1.uintCV)('10000'),
|
|
89
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
|
|
90
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
|
|
91
|
+
(0, transactions_1.someCV)((0, transactions_1.bufferCVFromString)('1')),
|
|
92
|
+
]);
|
|
93
|
+
builder.fromPubKey(testData.TX_SENDER.pub);
|
|
94
|
+
builder.numberSignatures(1);
|
|
95
|
+
const tx = await builder.build();
|
|
96
|
+
const stacksTxn = tx;
|
|
97
|
+
should_1.default.deepEqual(stacksTxn.stxTransaction.postConditions.values.length, 1);
|
|
98
|
+
const txJson = tx.toJson();
|
|
99
|
+
should_1.default.deepEqual(txJson.payload.contractAddress, testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_ADDRESS);
|
|
100
|
+
should_1.default.deepEqual(txJson.payload.contractName, 'tsip6dp-token');
|
|
101
|
+
should_1.default.deepEqual(txJson.payload.functionName, 'transfer');
|
|
102
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
103
|
+
should_1.default.deepEqual(txJson.fee.toString(), '180');
|
|
104
|
+
should_1.default.deepEqual(tx.toBroadcastFormat(), testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.UNSIGNED_SINGLE_SIG_TX);
|
|
105
|
+
tx.type.should.equal(sdk_core_1.TransactionType.Send);
|
|
106
|
+
tx.outputs.length.should.equal(1);
|
|
107
|
+
tx.outputs[0].address.should.equal(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS);
|
|
108
|
+
tx.outputs[0].value.should.equal('10000');
|
|
109
|
+
tx.inputs.length.should.equal(1);
|
|
110
|
+
tx.inputs[0].address.should.equal(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS);
|
|
111
|
+
tx.inputs[0].value.should.equal('10000');
|
|
112
|
+
});
|
|
113
|
+
it('an unsigned fungible token transfer transaction without memo', async () => {
|
|
114
|
+
const builder = initTxBuilder();
|
|
115
|
+
builder.functionArgs([
|
|
116
|
+
(0, transactions_1.uintCV)('10000'),
|
|
117
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
|
|
118
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
|
|
119
|
+
]);
|
|
120
|
+
builder.fromPubKey(testData.TX_SENDER.pub);
|
|
121
|
+
builder.numberSignatures(1);
|
|
122
|
+
const tx = await builder.build();
|
|
123
|
+
const txJson = tx.toJson();
|
|
124
|
+
should_1.default.deepEqual(txJson.payload.contractAddress, testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_ADDRESS);
|
|
125
|
+
should_1.default.deepEqual(txJson.payload.contractName, 'tsip6dp-token');
|
|
126
|
+
should_1.default.deepEqual(txJson.payload.functionName, 'transfer');
|
|
127
|
+
should_1.default.deepEqual(txJson.nonce, 0);
|
|
128
|
+
should_1.default.deepEqual(txJson.fee.toString(), '180');
|
|
129
|
+
should_1.default.deepEqual(tx.toBroadcastFormat(), testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.UNSIGNED_SINGLE_SIG_TX_WITHOUT_MEMO);
|
|
130
|
+
tx.type.should.equal(sdk_core_1.TransactionType.Send);
|
|
131
|
+
tx.outputs.length.should.equal(1);
|
|
132
|
+
tx.outputs[0].address.should.equal(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS);
|
|
133
|
+
tx.outputs[0].value.should.equal('10000');
|
|
134
|
+
tx.inputs.length.should.equal(1);
|
|
135
|
+
tx.inputs[0].address.should.equal(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS);
|
|
136
|
+
tx.inputs[0].value.should.equal('10000');
|
|
137
|
+
});
|
|
138
|
+
it('a multisig fungible token transfer transaction with memo', async () => {
|
|
139
|
+
const builder = initTxBuilder();
|
|
140
|
+
builder.functionArgs([
|
|
141
|
+
(0, transactions_1.uintCV)('10000'),
|
|
142
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
|
|
143
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
|
|
144
|
+
(0, transactions_1.someCV)((0, transactions_1.bufferCVFromString)('1')),
|
|
145
|
+
]);
|
|
146
|
+
builder.sign({ key: testData.prv1 });
|
|
147
|
+
builder.sign({ key: testData.prv2 });
|
|
148
|
+
builder.fromPubKey([testData.pub1, testData.pub2, testData.pub3]);
|
|
149
|
+
builder.numberSignatures(2);
|
|
150
|
+
const tx = await builder.build();
|
|
151
|
+
JSON.stringify(tx.toJson());
|
|
152
|
+
should_1.default.deepEqual(tx.toBroadcastFormat(), testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SIGNED_MULTI_SIG_TX);
|
|
153
|
+
});
|
|
154
|
+
it('a multisig fungible token transfer transaction without memo', async () => {
|
|
155
|
+
const builder = initTxBuilder();
|
|
156
|
+
builder.functionArgs([
|
|
157
|
+
(0, transactions_1.uintCV)('10000'),
|
|
158
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
|
|
159
|
+
(0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
|
|
160
|
+
(0, transactions_1.noneCV)(),
|
|
161
|
+
]);
|
|
162
|
+
builder.sign({ key: testData.prv1 });
|
|
163
|
+
builder.sign({ key: testData.prv2 });
|
|
164
|
+
builder.fromPubKey([testData.pub1, testData.pub2, testData.pub3]);
|
|
165
|
+
builder.numberSignatures(2);
|
|
166
|
+
const tx = await builder.build();
|
|
167
|
+
JSON.stringify(tx.toJson());
|
|
168
|
+
should_1.default.deepEqual(tx.toBroadcastFormat(), testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SIGNED_MULTI_SIG_TX_WITHOUT_MEMO);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
describe('should fail', () => {
|
|
172
|
+
it('a fungible token transfer builder with an invalid key', () => {
|
|
173
|
+
const builder = initTxBuilder();
|
|
174
|
+
assert_1.default.throws(() => builder.sign({ key: 'invalidKey' }), /Unsupported private key/);
|
|
175
|
+
});
|
|
176
|
+
it('a fungible token transfer builder with an invalid contract address', () => {
|
|
177
|
+
const builder = initTxBuilder();
|
|
178
|
+
assert_1.default.throws(() => builder.contractAddress('invalidContractAddress'), /Invalid address/);
|
|
179
|
+
});
|
|
180
|
+
it('a fungible token transfer builder with an invalid contract function name', () => {
|
|
181
|
+
const builder = initTxBuilder();
|
|
182
|
+
assert_1.default.throws(() => builder.functionName('test-function'), new RegExp('test-function is not supported contract function name'));
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUErRDtBQUMvRCxpREFBK0M7QUFDL0MsaURBQTRDO0FBQzVDLHVEQUF1RztBQUN2RyxvREFBNEI7QUFDNUIsNkNBQStEO0FBQy9ELG1EQUF1RDtBQUN2RCxvREFBNEI7QUFFNUIsc0NBQWtEO0FBRWxELHVEQUF5QztBQUV6QyxRQUFRLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM1QixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7SUFDcEMsSUFBSSxLQUFtQixDQUFDO0lBRXhCLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsZ0JBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRTtRQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFNLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTlFLE1BQU0sYUFB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O2dCQUM1RSxNQUFNLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDNUYsQ0FBQyxDQUFDLENBQUM7WUFDSCxFQUFFLENBQUMsMEVBQTBFLEVBQUUsR0FBRyxFQUFFO2dCQUNsRixNQUFNLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFDM0MsSUFBSSxNQUFNLENBQUMsdURBQXVELENBQUMsQ0FDcEUsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IGJ1ZmZlckNWRnJvbVN0cmluZywgbm9uZUNWLCBzb21lQ1YsIHN0YW5kYXJkUHJpbmNpcGFsQ1YsIHVpbnRDViB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFN0YWNrc01haW5uZXQsIFN0YWNrc1Rlc3RuZXQgfSBmcm9tICdAc3RhY2tzL25ldHdvcmsnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBTaXAxMFRva2VuLCBTdHhMaWIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdTdGFja3M6IEZ1bmdpYmxlIFRva2VuIFRyYW5zZmVyIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGNvaW5OYW1lID0gJ3N0eDpzYnRjJztcbiAgY29uc3QgY29pbk5hbWVUZXN0ID0gJ3RzdHg6dHNpcDZkcCc7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHtcbiAgICAgIGVudjogJ21vY2snLFxuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndHN0eDp0c2lwNmRwJywgU2lwMTBUb2tlbi5jcmVhdGVJbnN0YW5jZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaXAxMCBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lVGVzdCkpO1xuICAgIGNvbnN0IGZhY3RvcnlQcm9kID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZSkpO1xuXG4gICAgY29uc3QgaW5pdFR4QnVpbGRlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoMCk7XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3RBZGRyZXNzKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdE5hbWUodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX05BTUUpO1xuICAgICAgdHhCdWlsZGVyLmZ1bmN0aW9uTmFtZSh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuRlVOQ1RJT05fTkFNRSk7XG4gICAgICB0eEJ1aWxkZXIudG9rZW5OYW1lKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5UT0tFTl9OQU1FKTtcbiAgICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gICAgfTtcblxuICAgIGRlc2NyaWJlKCdmdW5naWJsZSB0b2tlbiBidWlsZGVyIGVudmlyb25tZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBzZWxlY3QgdGhlIHJpZ2h0IG5ldHdvcmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChmYWN0b3J5LmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKS5jb2luTmFtZSgpLCAndHN0eDp0c2lwNmRwJyk7XG4gICAgICAgIHNob3VsZC5lcXVhbChmYWN0b3J5UHJvZC5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCkuY29pbk5hbWUoKSwgJ3N0eDpzYnRjJyk7XG4gICAgICAgIC8vIHVzZWQgdHlwZSBhbnkgdG8gYWNjZXNzIHByb3RlY3RlZCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHR4QnVpbGRlcjogYW55ID0gZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlclByb2Q6IGFueSA9IGZhY3RvcnlQcm9kLmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcblxuICAgICAgICB0eEJ1aWxkZXIuX25ldHdvcmsuc2hvdWxkLmRlZXBFcXVhbChuZXcgU3RhY2tzVGVzdG5ldCgpKTtcbiAgICAgICAgdHhCdWlsZGVyUHJvZC5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKG5ldyBTdGFja3NNYWlubmV0KCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2hvdWxkIGJ1aWxkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ2FuIHVuc2lnbmVkIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgdWludENWKCcxMDAwMCcpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKSxcbiAgICAgICAgICBzb21lQ1YoYnVmZmVyQ1ZGcm9tU3RyaW5nKCcxJykpLFxuICAgICAgICBdKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCBzdGFja3NUeG4gPSB0eCBhcyBUcmFuc2FjdGlvbjtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChzdGFja3NUeG4uc3R4VHJhbnNhY3Rpb24ucG9zdENvbmRpdGlvbnMudmFsdWVzLmxlbmd0aCwgMSk7XG5cbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzLCB0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLCAndHNpcDZkcC10b2tlbicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uTmFtZSwgJ3RyYW5zZmVyJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmVlLnRvU3RyaW5nKCksICcxODAnKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuVU5TSUdORURfU0lOR0xFX1NJR19UWCk7XG5cbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMTAwMDAnKTtcbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpO1xuICAgICAgICB0eC5pbnB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcxMDAwMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhbiB1bnNpZ25lZCBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRob3V0IG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICB1aW50Q1YoJzEwMDAwJyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpLFxuICAgICAgICBdKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSwgJ3RzaXA2ZHAtdG9rZW4nKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsICd0cmFuc2ZlcicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCAnMTgwJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgICB0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuVU5TSUdORURfU0lOR0xFX1NJR19UWF9XSVRIT1VUX01FTU9cbiAgICAgICAgKTtcblxuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcxMDAwMCcpO1xuICAgICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyk7XG4gICAgICAgIHR4LmlucHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzEwMDAwJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2EgbXVsdGlzaWcgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgdWludENWKCcxMDAwMCcpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKSxcbiAgICAgICAgICBzb21lQ1YoYnVmZmVyQ1ZGcm9tU3RyaW5nKCcxJykpLFxuICAgICAgICBdKTtcblxuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydjEgfSk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2MiB9KTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KFt0ZXN0RGF0YS5wdWIxLCB0ZXN0RGF0YS5wdWIyLCB0ZXN0RGF0YS5wdWIzXSk7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygyKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHR4LnRvSnNvbigpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0lHTkVEX01VTFRJX1NJR19UWCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2EgbXVsdGlzaWcgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aG91dCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgdWludENWKCcxMDAwMCcpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKSxcbiAgICAgICAgICBub25lQ1YoKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYxIH0pO1xuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydjIgfSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleShbdGVzdERhdGEucHViMSwgdGVzdERhdGEucHViMiwgdGVzdERhdGEucHViM10pO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBKU09OLnN0cmluZ2lmeSh0eC50b0pzb24oKSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgICB0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0lHTkVEX01VTFRJX1NJR19UWF9XSVRIT1VUX01FTU9cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBmYWlsJywgKCkgPT4ge1xuICAgICAgaXQoJ2EgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgYnVpbGRlciB3aXRoIGFuIGludmFsaWQga2V5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuc2lnbih7IGtleTogJ2ludmFsaWRLZXknIH0pLCAvVW5zdXBwb3J0ZWQgcHJpdmF0ZSBrZXkvKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ2EgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgYnVpbGRlciB3aXRoIGFuIGludmFsaWQgY29udHJhY3QgYWRkcmVzcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmNvbnRyYWN0QWRkcmVzcygnaW52YWxpZENvbnRyYWN0QWRkcmVzcycpLCAvSW52YWxpZCBhZGRyZXNzLyk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdhIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXIgd2l0aCBhbiBpbnZhbGlkIGNvbnRyYWN0IGZ1bmN0aW9uIG5hbWUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4gYnVpbGRlci5mdW5jdGlvbk5hbWUoJ3Rlc3QtZnVuY3Rpb24nKSxcbiAgICAgICAgICBuZXcgUmVnRXhwKCd0ZXN0LWZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgY29udHJhY3QgZnVuY3Rpb24gbmFtZScpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sbtcWithdrawBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/sbtcWithdrawBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
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);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
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
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const should_1 = __importDefault(require("should"));
|
|
40
|
+
const transactions_1 = require("@stacks/transactions");
|
|
41
|
+
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
42
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
43
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
44
|
+
const src_1 = require("../../../src");
|
|
45
|
+
const testData = __importStar(require("../resources"));
|
|
46
|
+
describe('Stacks: sBTC Withdraw Builder', function () {
|
|
47
|
+
const coinNameTest = 'tstx';
|
|
48
|
+
let bitgo;
|
|
49
|
+
before(function () {
|
|
50
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, {
|
|
51
|
+
env: 'mock',
|
|
52
|
+
});
|
|
53
|
+
bitgo.initializeTestVars();
|
|
54
|
+
bitgo.safeRegister('stx', src_1.Stx.createInstance);
|
|
55
|
+
bitgo.safeRegister('tstx', src_1.Tstx.createInstance);
|
|
56
|
+
});
|
|
57
|
+
describe('sBTC Withdraw Builder', () => {
|
|
58
|
+
const factory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get(coinNameTest));
|
|
59
|
+
const initTxBuilder = () => {
|
|
60
|
+
const txBuilder = factory.getSbtcWithdrawBuilder();
|
|
61
|
+
txBuilder.fee({ fee: '1000' });
|
|
62
|
+
txBuilder.nonce(1);
|
|
63
|
+
return txBuilder;
|
|
64
|
+
};
|
|
65
|
+
describe('should build', function () {
|
|
66
|
+
it('a withdrawal with P2PKH address', async () => {
|
|
67
|
+
const builder = initTxBuilder();
|
|
68
|
+
const pubKeys = testData.prvKeysString.map(transactions_1.pubKeyfromPrivKey);
|
|
69
|
+
const pubKeyStrings = pubKeys.map(transactions_1.publicKeyToString);
|
|
70
|
+
builder.fromPubKey(pubKeyStrings);
|
|
71
|
+
builder.numberSignatures(2);
|
|
72
|
+
builder.withdraw({
|
|
73
|
+
amount: '100000',
|
|
74
|
+
btcAddress: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2',
|
|
75
|
+
maxFee: '5000',
|
|
76
|
+
});
|
|
77
|
+
builder.sign({ key: testData.prvKeysString[0] });
|
|
78
|
+
builder.sign({ key: testData.prvKeysString[1] });
|
|
79
|
+
const tx = await builder.build();
|
|
80
|
+
const txJson = tx.toJson();
|
|
81
|
+
txJson.fee.should.equal('1000');
|
|
82
|
+
txJson.nonce.should.equal(1);
|
|
83
|
+
should_1.default.exist(txJson.payload);
|
|
84
|
+
txJson.payload.should.have.property('contractName', 'sbtc-withdrawal');
|
|
85
|
+
txJson.payload.should.have.property('functionName', 'initiate-withdrawal-request');
|
|
86
|
+
// Verify hashbytes is 20 bytes for P2PKH
|
|
87
|
+
const payload = tx.stxTransaction.payload;
|
|
88
|
+
const recipientTuple = payload.functionArgs[1];
|
|
89
|
+
should_1.default.equal(recipientTuple.type, transactions_1.ClarityType.Tuple);
|
|
90
|
+
if (recipientTuple.type === transactions_1.ClarityType.Tuple) {
|
|
91
|
+
const hashbytes = recipientTuple.data['hashbytes'];
|
|
92
|
+
should_1.default.equal(hashbytes.type, transactions_1.ClarityType.Buffer);
|
|
93
|
+
if (hashbytes.type === transactions_1.ClarityType.Buffer) {
|
|
94
|
+
hashbytes.buffer.length.should.equal(20);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
it('a withdrawal with P2SH address', async () => {
|
|
99
|
+
const builder = initTxBuilder();
|
|
100
|
+
const pubKeys = testData.prvKeysString.map(transactions_1.pubKeyfromPrivKey);
|
|
101
|
+
const pubKeyStrings = pubKeys.map(transactions_1.publicKeyToString);
|
|
102
|
+
builder.fromPubKey(pubKeyStrings);
|
|
103
|
+
builder.numberSignatures(2);
|
|
104
|
+
builder.withdraw({
|
|
105
|
+
amount: '200000',
|
|
106
|
+
btcAddress: '3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy',
|
|
107
|
+
maxFee: '3000',
|
|
108
|
+
});
|
|
109
|
+
const tx = await builder.build();
|
|
110
|
+
const txJson = tx.toJson();
|
|
111
|
+
txJson.payload.should.have.property('functionName', 'initiate-withdrawal-request');
|
|
112
|
+
// Verify hashbytes is 20 bytes for P2SH
|
|
113
|
+
const payload = tx.stxTransaction.payload;
|
|
114
|
+
const recipientTuple = payload.functionArgs[1];
|
|
115
|
+
if (recipientTuple.type === transactions_1.ClarityType.Tuple) {
|
|
116
|
+
const hashbytes = recipientTuple.data['hashbytes'];
|
|
117
|
+
if (hashbytes.type === transactions_1.ClarityType.Buffer) {
|
|
118
|
+
hashbytes.buffer.length.should.equal(20);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
it('a withdrawal with P2WPKH (bech32) address', async () => {
|
|
123
|
+
const builder = initTxBuilder();
|
|
124
|
+
const pubKeys = testData.prvKeysString.map(transactions_1.pubKeyfromPrivKey);
|
|
125
|
+
const pubKeyStrings = pubKeys.map(transactions_1.publicKeyToString);
|
|
126
|
+
builder.fromPubKey(pubKeyStrings);
|
|
127
|
+
builder.numberSignatures(2);
|
|
128
|
+
builder.withdraw({
|
|
129
|
+
amount: '50000',
|
|
130
|
+
btcAddress: 'bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4',
|
|
131
|
+
maxFee: '2000',
|
|
132
|
+
});
|
|
133
|
+
const tx = await builder.build();
|
|
134
|
+
const txJson = tx.toJson();
|
|
135
|
+
txJson.payload.should.have.property('functionName', 'initiate-withdrawal-request');
|
|
136
|
+
// Verify hashbytes is 20 bytes for P2WPKH
|
|
137
|
+
const payload = tx.stxTransaction.payload;
|
|
138
|
+
const recipientTuple = payload.functionArgs[1];
|
|
139
|
+
if (recipientTuple.type === transactions_1.ClarityType.Tuple) {
|
|
140
|
+
const hashbytes = recipientTuple.data['hashbytes'];
|
|
141
|
+
if (hashbytes.type === transactions_1.ClarityType.Buffer) {
|
|
142
|
+
hashbytes.buffer.length.should.equal(20);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
it('a withdrawal with P2WSH (bech32) address', async () => {
|
|
147
|
+
const builder = initTxBuilder();
|
|
148
|
+
const pubKeys = testData.prvKeysString.map(transactions_1.pubKeyfromPrivKey);
|
|
149
|
+
const pubKeyStrings = pubKeys.map(transactions_1.publicKeyToString);
|
|
150
|
+
builder.fromPubKey(pubKeyStrings);
|
|
151
|
+
builder.numberSignatures(2);
|
|
152
|
+
builder.withdraw({
|
|
153
|
+
amount: '75000',
|
|
154
|
+
btcAddress: 'bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3',
|
|
155
|
+
maxFee: '4000',
|
|
156
|
+
});
|
|
157
|
+
const tx = await builder.build();
|
|
158
|
+
const txJson = tx.toJson();
|
|
159
|
+
txJson.payload.should.have.property('functionName', 'initiate-withdrawal-request');
|
|
160
|
+
// Verify hashbytes is 32 bytes for P2WSH
|
|
161
|
+
const payload = tx.stxTransaction.payload;
|
|
162
|
+
const recipientTuple = payload.functionArgs[1];
|
|
163
|
+
if (recipientTuple.type === transactions_1.ClarityType.Tuple) {
|
|
164
|
+
const hashbytes = recipientTuple.data['hashbytes'];
|
|
165
|
+
if (hashbytes.type === transactions_1.ClarityType.Buffer) {
|
|
166
|
+
hashbytes.buffer.length.should.equal(32);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
it('a withdrawal with P2TR (bech32m) address', async () => {
|
|
171
|
+
const builder = initTxBuilder();
|
|
172
|
+
const pubKeys = testData.prvKeysString.map(transactions_1.pubKeyfromPrivKey);
|
|
173
|
+
const pubKeyStrings = pubKeys.map(transactions_1.publicKeyToString);
|
|
174
|
+
builder.fromPubKey(pubKeyStrings);
|
|
175
|
+
builder.numberSignatures(2);
|
|
176
|
+
builder.withdraw({
|
|
177
|
+
amount: '300000',
|
|
178
|
+
btcAddress: 'bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0',
|
|
179
|
+
maxFee: '10000',
|
|
180
|
+
});
|
|
181
|
+
const tx = await builder.build();
|
|
182
|
+
const txJson = tx.toJson();
|
|
183
|
+
txJson.payload.should.have.property('functionName', 'initiate-withdrawal-request');
|
|
184
|
+
// Verify hashbytes is 32 bytes for P2TR
|
|
185
|
+
const payload = tx.stxTransaction.payload;
|
|
186
|
+
const recipientTuple = payload.functionArgs[1];
|
|
187
|
+
if (recipientTuple.type === transactions_1.ClarityType.Tuple) {
|
|
188
|
+
const hashbytes = recipientTuple.data['hashbytes'];
|
|
189
|
+
if (hashbytes.type === transactions_1.ClarityType.Buffer) {
|
|
190
|
+
hashbytes.buffer.length.should.equal(32);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
describe('round-trip: serialize → deserialize → rebuild', function () {
|
|
196
|
+
it('should rebuild a signed withdrawal transaction from raw hex', async () => {
|
|
197
|
+
const builder = initTxBuilder();
|
|
198
|
+
const pubKeys = testData.prvKeysString.map(transactions_1.pubKeyfromPrivKey);
|
|
199
|
+
const pubKeyStrings = pubKeys.map(transactions_1.publicKeyToString);
|
|
200
|
+
builder.fromPubKey(pubKeyStrings);
|
|
201
|
+
builder.numberSignatures(2);
|
|
202
|
+
builder.withdraw({
|
|
203
|
+
amount: '100000',
|
|
204
|
+
btcAddress: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2',
|
|
205
|
+
maxFee: '5000',
|
|
206
|
+
});
|
|
207
|
+
builder.sign({ key: testData.prvKeysString[0] });
|
|
208
|
+
builder.sign({ key: testData.prvKeysString[1] });
|
|
209
|
+
const tx = await builder.build();
|
|
210
|
+
const rawHex = tx.toBroadcastFormat();
|
|
211
|
+
should_1.default.exist(rawHex);
|
|
212
|
+
// Deserialize
|
|
213
|
+
const rebuilder = factory.from(rawHex);
|
|
214
|
+
const tx2 = await rebuilder.build();
|
|
215
|
+
tx2.toBroadcastFormat().should.equal(rawHex);
|
|
216
|
+
});
|
|
217
|
+
it('should rebuild an unsigned withdrawal transaction from raw hex', async () => {
|
|
218
|
+
const builder = initTxBuilder();
|
|
219
|
+
const pubKeys = testData.prvKeysString.map(transactions_1.pubKeyfromPrivKey);
|
|
220
|
+
const pubKeyStrings = pubKeys.map(transactions_1.publicKeyToString);
|
|
221
|
+
builder.fromPubKey(pubKeyStrings);
|
|
222
|
+
builder.numberSignatures(2);
|
|
223
|
+
builder.withdraw({
|
|
224
|
+
amount: '100000',
|
|
225
|
+
btcAddress: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2',
|
|
226
|
+
maxFee: '5000',
|
|
227
|
+
});
|
|
228
|
+
const tx = await builder.build();
|
|
229
|
+
const rawHex = tx.toBroadcastFormat();
|
|
230
|
+
// Deserialize and sign
|
|
231
|
+
const rebuilder = factory.from(rawHex);
|
|
232
|
+
rebuilder.sign({ key: testData.prvKeysString[0] });
|
|
233
|
+
rebuilder.sign({ key: testData.prvKeysString[1] });
|
|
234
|
+
const tx2 = await rebuilder.build();
|
|
235
|
+
should_1.default.exist(tx2.toBroadcastFormat());
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
describe('validation', function () {
|
|
239
|
+
it('should reject invalid amount', function () {
|
|
240
|
+
const builder = initTxBuilder();
|
|
241
|
+
should_1.default.throws(() => builder.withdraw({
|
|
242
|
+
amount: '-1',
|
|
243
|
+
btcAddress: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2',
|
|
244
|
+
maxFee: '5000',
|
|
245
|
+
}), /Invalid or missing amount/);
|
|
246
|
+
});
|
|
247
|
+
it('should reject zero amount', function () {
|
|
248
|
+
const builder = initTxBuilder();
|
|
249
|
+
should_1.default.throws(() => builder.withdraw({
|
|
250
|
+
amount: '0',
|
|
251
|
+
btcAddress: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2',
|
|
252
|
+
maxFee: '5000',
|
|
253
|
+
}), /Invalid or missing amount/);
|
|
254
|
+
});
|
|
255
|
+
it('should reject empty amount', function () {
|
|
256
|
+
const builder = initTxBuilder();
|
|
257
|
+
should_1.default.throws(() => builder.withdraw({
|
|
258
|
+
amount: '',
|
|
259
|
+
btcAddress: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2',
|
|
260
|
+
maxFee: '5000',
|
|
261
|
+
}), /Invalid or missing amount/);
|
|
262
|
+
});
|
|
263
|
+
it('should reject invalid BTC address', function () {
|
|
264
|
+
const builder = initTxBuilder();
|
|
265
|
+
should_1.default.throws(() => builder.withdraw({
|
|
266
|
+
amount: '100000',
|
|
267
|
+
btcAddress: 'invalidaddress',
|
|
268
|
+
maxFee: '5000',
|
|
269
|
+
}), /Invalid or missing btcAddress/);
|
|
270
|
+
});
|
|
271
|
+
it('should reject invalid maxFee', function () {
|
|
272
|
+
const builder = initTxBuilder();
|
|
273
|
+
should_1.default.throws(() => builder.withdraw({
|
|
274
|
+
amount: '100000',
|
|
275
|
+
btcAddress: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2',
|
|
276
|
+
maxFee: '-100',
|
|
277
|
+
}), /Invalid or missing maxFee/);
|
|
278
|
+
});
|
|
279
|
+
it('should reject zero maxFee', function () {
|
|
280
|
+
const builder = initTxBuilder();
|
|
281
|
+
should_1.default.throws(() => builder.withdraw({
|
|
282
|
+
amount: '100000',
|
|
283
|
+
btcAddress: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2',
|
|
284
|
+
maxFee: '0',
|
|
285
|
+
}), /Invalid or missing maxFee/);
|
|
286
|
+
});
|
|
287
|
+
it('should reject empty maxFee', function () {
|
|
288
|
+
const builder = initTxBuilder();
|
|
289
|
+
should_1.default.throws(() => builder.withdraw({
|
|
290
|
+
amount: '100000',
|
|
291
|
+
btcAddress: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2',
|
|
292
|
+
maxFee: '',
|
|
293
|
+
}), /Invalid or missing maxFee/);
|
|
294
|
+
});
|
|
295
|
+
it('should fail to build without withdraw params', async () => {
|
|
296
|
+
const builder = initTxBuilder();
|
|
297
|
+
const pubKeys = testData.prvKeysString.map(transactions_1.pubKeyfromPrivKey);
|
|
298
|
+
const pubKeyStrings = pubKeys.map(transactions_1.publicKeyToString);
|
|
299
|
+
builder.fromPubKey(pubKeyStrings);
|
|
300
|
+
builder.numberSignatures(2);
|
|
301
|
+
await builder.build().should.be.rejectedWith(/Withdrawal params are not set/);
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2J0Y1dpdGhkcmF3QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc2J0Y1dpdGhkcmF3QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qix1REFBeUY7QUFHekYsbURBQStEO0FBQy9ELGlEQUErQztBQUMvQyxpREFBNEM7QUFFNUMsc0NBQWlEO0FBQ2pELHVEQUF5QztBQUV6QyxRQUFRLENBQUMsK0JBQStCLEVBQUU7SUFDeEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQzVCLElBQUksS0FBbUIsQ0FBQztJQUV4QixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRTtZQUNuQyxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBTSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUU5RSxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUU7WUFDekIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUs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b0JBQ2hELE1BQU0sRUFBRSxHQUFHO2lCQUNaLENBQUMsRUFDSiwyQkFBMkIsQ0FDNUIsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDRCQUE0QixFQUFFO2dCQUMvQixNQUFNLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQ0gsT0FBTyxDQUFDLFFBQVEsQ0FBQztvQkFDZixNQUFNLEVBQUUsUUFBUTtvQkFDaEIsVUFBVSxFQUFFLG9DQUFvQztvQkFDaEQsTUFBTSxFQUFFLEVBQUU7aUJBQ1gsQ0FBQyxFQUNKLDJCQUEyQixDQUM1QixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQzVELE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxnQ0FBaUIsQ0FBQyxDQUFDO2dCQUM5RCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFpQixDQUFDLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUNoRixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IENsYXJpdHlUeXBlLCBwdWJLZXlmcm9tUHJpdktleSwgcHVibGljS2V5VG9TdHJpbmcgfSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBDb250cmFjdENhbGxQYXlsb2FkIH0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMvZGlzdC9wYXlsb2FkJztcblxuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuaW1wb3J0IHsgU3R4LCBUc3R4LCBTdHhMaWIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ1N0YWNrczogc0JUQyBXaXRoZHJhdyBCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luTmFtZVRlc3QgPSAndHN0eCc7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHtcbiAgICAgIGVudjogJ21vY2snLFxuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcignc3R4JywgU3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RzdHgnLCBUc3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NCVEMgV2l0aGRyYXcgQnVpbGRlcicsICgpID0+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZVRlc3QpKTtcblxuICAgIGNvbnN0IGluaXRUeEJ1aWxkZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFNidGNXaXRoZHJhd0J1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcxMDAwJyB9KTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgxKTtcbiAgICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gICAgfTtcblxuICAgIGRlc2NyaWJlKCdzaG91bGQgYnVpbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnYSB3aXRoZHJhd2FsIHdpdGggUDJQS0ggYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgcHViS2V5cyA9IHRlc3REYXRhLnBydktleXNTdHJpbmcubWFwKHB1YktleWZyb21Qcml2S2V5KTtcbiAgICAgICAgY29uc3QgcHViS2V5U3RyaW5ncyA9IHB1YktleXMubWFwKHB1YmxpY0tleVRvU3RyaW5nKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHB1YktleVN0cmluZ3MpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICAgIGJ1aWxkZXIud2l0aGRyYXcoe1xuICAgICAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICAgICAgYnRjQWRkcmVzczogJzFCdkJNU0VZc3RXZXRxVEZuNUF1NG00R0ZnN3hKYU5WTjInLFxuICAgICAgICAgIG1heEZlZTogJzUwMDAnLFxuICAgICAgICB9KTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnZLZXlzU3RyaW5nWzBdIH0pO1xuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydktleXNTdHJpbmdbMV0gfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgdHhKc29uLmZlZS5zaG91bGQuZXF1YWwoJzEwMDAnKTtcbiAgICAgICAgdHhKc29uLm5vbmNlLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5wYXlsb2FkKTtcbiAgICAgICAgdHhKc29uLnBheWxvYWQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2NvbnRyYWN0TmFtZScsICdzYnRjLXdpdGhkcmF3YWwnKTtcbiAgICAgICAgdHhKc29uLnBheWxvYWQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Z1bmN0aW9uTmFtZScsICdpbml0aWF0ZS13aXRoZHJhd2FsLXJlcXVlc3QnKTtcblxuICAgICAgICAvLyBWZXJpZnkgaGFzaGJ5dGVzIGlzIDIwIGJ5dGVzIGZvciBQMlBLSFxuICAgICAgICBjb25zdCBwYXlsb2FkID0gKHR4IGFzIFN0eExpYi5UcmFuc2FjdGlvbikuc3R4VHJhbnNhY3Rpb24ucGF5bG9hZCBhcyBDb250cmFjdENhbGxQYXlsb2FkO1xuICAgICAgICBjb25zdCByZWNpcGllbnRUdXBsZSA9IHBheWxvYWQuZnVuY3Rpb25BcmdzWzFdO1xuICAgICAgICBzaG91bGQuZXF1YWwocmVjaXBpZW50VHVwbGUudHlwZSwgQ2xhcml0eVR5cGUuVHVwbGUpO1xuICAgICAgICBpZiAocmVjaXBpZW50VHVwbGUudHlwZSA9PT0gQ2xhcml0eVR5cGUuVHVwbGUpIHtcbiAgICAgICAgICBjb25zdCBoYXNoYnl0ZXMgPSByZWNpcGllbnRUdXBsZS5kYXRhWydoYXNoYnl0ZXMnXTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwoaGFzaGJ5dGVzLnR5cGUsIENsYXJpdHlUeXBlLkJ1ZmZlcik7XG4gICAgICAgICAgaWYgKGhhc2hieXRlcy50eXBlID09PSBDbGFyaXR5VHlwZS5CdWZmZXIpIHtcbiAgICAgICAgICAgIGhhc2hieXRlcy5idWZmZXIubGVuZ3RoLnNob3VsZC5lcXVhbCgyMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Egd2l0aGRyYXdhbCB3aXRoIFAyU0ggYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgcHViS2V5cyA9IHRlc3REYXRhLnBydktleXNTdHJpbmcubWFwKHB1YktleWZyb21Qcml2S2V5KTtcbiAgICAgICAgY29uc3QgcHViS2V5U3RyaW5ncyA9IHB1YktleXMubWFwKHB1YmxpY0tleVRvU3RyaW5nKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHB1YktleVN0cmluZ3MpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICAgIGJ1aWxkZXIud2l0aGRyYXcoe1xuICAgICAgICAgIGFtb3VudDogJzIwMDAwMCcsXG4gICAgICAgICAgYnRjQWRkcmVzczogJzNKOTh0MVdwRVo3M0NObVF2aWVjcm55aVdybnFSaFdOTHknLFxuICAgICAgICAgIG1heEZlZTogJzMwMDAnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICB0eEpzb24ucGF5bG9hZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZnVuY3Rpb25OYW1lJywgJ2luaXRpYXRlLXdpdGhkcmF3YWwtcmVxdWVzdCcpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBoYXNoYnl0ZXMgaXMgMjAgYnl0ZXMgZm9yIFAyU0hcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9ICh0eCBhcyBTdHhMaWIuVHJhbnNhY3Rpb24pLnN0eFRyYW5zYWN0aW9uLnBheWxvYWQgYXMgQ29udHJhY3RDYWxsUGF5bG9hZDtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50VHVwbGUgPSBwYXlsb2FkLmZ1bmN0aW9uQXJnc1sxXTtcbiAgICAgICAgaWYgKHJlY2lwaWVudFR1cGxlLnR5cGUgPT09IENsYXJpdHlUeXBlLlR1cGxlKSB7XG4gICAgICAgICAgY29uc3QgaGFzaGJ5dGVzID0gcmVjaXBpZW50VHVwbGUuZGF0YVsnaGFzaGJ5dGVzJ107XG4gICAgICAgICAgaWYgKGhhc2hieXRlcy50eXBlID09PSBDbGFyaXR5VHlwZS5CdWZmZXIpIHtcbiAgICAgICAgICAgIGhhc2hieXRlcy5idWZmZXIubGVuZ3RoLnNob3VsZC5lcXVhbCgyMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Egd2l0aGRyYXdhbCB3aXRoIFAyV1BLSCAoYmVjaDMyKSBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBjb25zdCBwdWJLZXlzID0gdGVzdERhdGEucHJ2S2V5c1N0cmluZy5tYXAocHViS2V5ZnJvbVByaXZLZXkpO1xuICAgICAgICBjb25zdCBwdWJLZXlTdHJpbmdzID0gcHViS2V5cy5tYXAocHVibGljS2V5VG9TdHJpbmcpO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkocHViS2V5U3RyaW5ncyk7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygyKTtcbiAgICAgICAgYnVpbGRlci53aXRoZHJhdyh7XG4gICAgICAgICAgYW1vdW50OiAnNTAwMDAnLFxuICAgICAgICAgIGJ0Y0FkZHJlc3M6ICdiYzFxdzUwOGQ2cWVqeHRkZzR5NXIzemFydmFyeTBjNXh3N2t2OGYzdDQnLFxuICAgICAgICAgIG1heEZlZTogJzIwMDAnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICB0eEpzb24ucGF5bG9hZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZnVuY3Rpb25OYW1lJywgJ2luaXRpYXRlLXdpdGhkcmF3YWwtcmVxdWVzdCcpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBoYXNoYnl0ZXMgaXMgMjAgYnl0ZXMgZm9yIFAyV1BLSFxuICAgICAgICBjb25zdCBwYXlsb2FkID0gKHR4IGFzIFN0eExpYi5UcmFuc2FjdGlvbikuc3R4VHJhbnNhY3Rpb24ucGF5bG9hZCBhcyBDb250cmFjdENhbGxQYXlsb2FkO1xuICAgICAgICBjb25zdCByZWNpcGllbnRUdXBsZSA9IHBheWxvYWQuZnVuY3Rpb25BcmdzWzFdO1xuICAgICAgICBpZiAocmVjaXBpZW50VHVwbGUudHlwZSA9PT0gQ2xhcml0eVR5cGUuVHVwbGUpIHtcbiAgICAgICAgICBjb25zdCBoYXNoYnl0ZXMgPSByZWNpcGllbnRUdXBsZS5kYXRhWydoYXNoYnl0ZXMnXTtcbiAgICAgICAgICBpZiAoaGFzaGJ5dGVzLnR5cGUgPT09IENsYXJpdHlUeXBlLkJ1ZmZlcikge1xuICAgICAgICAgICAgaGFzaGJ5dGVzLmJ1ZmZlci5sZW5ndGguc2hvdWxkLmVxdWFsKDIwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSB3aXRoZHJhd2FsIHdpdGggUDJXU0ggKGJlY2gzMikgYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgcHViS2V5cyA9IHRlc3REYXRhLnBydktleXNTdHJpbmcubWFwKHB1YktleWZyb21Qcml2S2V5KTtcbiAgICAgICAgY29uc3QgcHViS2V5U3RyaW5ncyA9IHB1YktleXMubWFwKHB1YmxpY0tleVRvU3RyaW5nKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHB1YktleVN0cmluZ3MpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICAgIGJ1aWxkZXIud2l0aGRyYXcoe1xuICAgICAgICAgIGFtb3VudDogJzc1MDAwJyxcbiAgICAgICAgICBidGNBZGRyZXNzOiAnYmMxcXJwMzNnMHE1YzV0eHNwOWFyeXNyeDRrNnpka2ZzNG5jZTR4ajBnZGNjY2VmdnB5c3hmM3FjY2ZtdjMnLFxuICAgICAgICAgIG1heEZlZTogJzQwMDAnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICB0eEpzb24ucGF5bG9hZC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZnVuY3Rpb25OYW1lJywgJ2luaXRpYXRlLXdpdGhkcmF3YWwtcmVxdWVzdCcpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBoYXNoYnl0ZXMgaXMgMzIgYnl0ZXMgZm9yIFAyV1NIXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSAodHggYXMgU3R4TGliLlRyYW5zYWN0aW9uKS5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIENvbnRyYWN0Q2FsbFBheWxvYWQ7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudFR1cGxlID0gcGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV07XG4gICAgICAgIGlmIChyZWNpcGllbnRUdXBsZS50eXBlID09PSBDbGFyaXR5VHlwZS5UdXBsZSkge1xuICAgICAgICAgIGNvbnN0IGhhc2hieXRlcyA9IHJlY2lwaWVudFR1cGxlLmRhdGFbJ2hhc2hieXRlcyddO1xuICAgICAgICAgIGlmIChoYXNoYnl0ZXMudHlwZSA9PT0gQ2xhcml0eVR5cGUuQnVmZmVyKSB7XG4gICAgICAgICAgICBoYXNoYnl0ZXMuYnVmZmVyLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIHdpdGhkcmF3YWwgd2l0aCBQMlRSIChiZWNoMzJtKSBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBjb25zdCBwdWJLZXlzID0gdGVzdERhdGEucHJ2S2V5c1N0cmluZy5tYXAocHViS2V5ZnJvbVByaXZLZXkpO1xuICAgICAgICBjb25zdCBwdWJLZXlTdHJpbmdzID0gcHViS2V5cy5tYXAocHVibGljS2V5VG9TdHJpbmcpO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkocHViS2V5U3RyaW5ncyk7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygyKTtcbiAgICAgICAgYnVpbGRlci53aXRoZHJhdyh7XG4gICAgICAgICAgYW1vdW50OiAnMzAwMDAwJyxcbiAgICAgICAgICBidGNBZGRyZXNzOiAnYmMxcDB4bHh2bGhlbWphNmM0ZHF2MjJ1YXBjdHF1cGZobHhtOWg4ejNrMmU3MnE0azloY3o3dnF6azVqajAnLFxuICAgICAgICAgIG1heEZlZTogJzEwMDAwJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgdHhKc29uLnBheWxvYWQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Z1bmN0aW9uTmFtZScsICdpbml0aWF0ZS13aXRoZHJhd2FsLXJlcXVlc3QnKTtcblxuICAgICAgICAvLyBWZXJpZnkgaGFzaGJ5dGVzIGlzIDMyIGJ5dGVzIGZvciBQMlRSXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSAodHggYXMgU3R4TGliLlRyYW5zYWN0aW9uKS5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIENvbnRyYWN0Q2FsbFBheWxvYWQ7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudFR1cGxlID0gcGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV07XG4gICAgICAgIGlmIChyZWNpcGllbnRUdXBsZS50eXBlID09PSBDbGFyaXR5VHlwZS5UdXBsZSkge1xuICAgICAgICAgIGNvbnN0IGhhc2hieXRlcyA9IHJlY2lwaWVudFR1cGxlLmRhdGFbJ2hhc2hieXRlcyddO1xuICAgICAgICAgIGlmIChoYXNoYnl0ZXMudHlwZSA9PT0gQ2xhcml0eVR5cGUuQnVmZmVyKSB7XG4gICAgICAgICAgICBoYXNoYnl0ZXMuYnVmZmVyLmxlbmd0aC5zaG91bGQuZXF1YWwoMzIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncm91bmQtdHJpcDogc2VyaWFsaXplIOKGkiBkZXNlcmlhbGl6ZSDihpIgcmVidWlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgcmVidWlsZCBhIHNpZ25lZCB3aXRoZHJhd2FsIHRyYW5zYWN0aW9uIGZyb20gcmF3IGhleCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgcHViS2V5cyA9IHRlc3REYXRhLnBydktleXNTdHJpbmcubWFwKHB1YktleWZyb21Qcml2S2V5KTtcbiAgICAgICAgY29uc3QgcHViS2V5U3RyaW5ncyA9IHB1YktleXMubWFwKHB1YmxpY0tleVRvU3RyaW5nKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHB1YktleVN0cmluZ3MpO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICAgIGJ1aWxkZXIud2l0aGRyYXcoe1xuICAgICAgICAgIGFtb3VudDogJzEwMDAwMCcsXG4gICAgICAgICAgYnRjQWRkcmVzczogJzFCdkJNU0VZc3RXZXRxVEZuNUF1NG00R0ZnN3hKYU5WTjInLFxuICAgICAgICAgIG1heEZlZTogJzUwMDAnLFxuICAgICAgICB9KTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnZLZXlzU3RyaW5nWzBdIH0pO1xuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydktleXNTdHJpbmdbMV0gfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIGNvbnN0IHJhd0hleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5leGlzdChyYXdIZXgpO1xuXG4gICAgICAgIC8vIERlc2VyaWFsaXplXG4gICAgICAgIGNvbnN0IHJlYnVpbGRlciA9IGZhY3RvcnkuZnJvbShyYXdIZXgpO1xuICAgICAgICBjb25zdCB0eDIgPSBhd2FpdCByZWJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgdHgyLnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHJhd0hleCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWJ1aWxkIGFuIHVuc2lnbmVkIHdpdGhkcmF3YWwgdHJhbnNhY3Rpb24gZnJvbSByYXcgaGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBjb25zdCBwdWJLZXlzID0gdGVzdERhdGEucHJ2S2V5c1N0cmluZy5tYXAocHViS2V5ZnJvbVByaXZLZXkpO1xuICAgICAgICBjb25zdCBwdWJLZXlTdHJpbmdzID0gcHViS2V5cy5tYXAocHVibGljS2V5VG9TdHJpbmcpO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkocHViS2V5U3RyaW5ncyk7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygyKTtcbiAgICAgICAgYnVpbGRlci53aXRoZHJhdyh7XG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwJyxcbiAgICAgICAgICBidGNBZGRyZXNzOiAnMUJ2Qk1TRVlzdFdldHFURm41QXU0bTRHRmc3eEphTlZOMicsXG4gICAgICAgICAgbWF4RmVlOiAnNTAwMCcsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICBjb25zdCByYXdIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIC8vIERlc2VyaWFsaXplIGFuZCBzaWduXG4gICAgICAgIGNvbnN0IHJlYnVpbGRlciA9IGZhY3RvcnkuZnJvbShyYXdIZXgpO1xuICAgICAgICByZWJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2S2V5c1N0cmluZ1swXSB9KTtcbiAgICAgICAgcmVidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydktleXNTdHJpbmdbMV0gfSk7XG4gICAgICAgIGNvbnN0IHR4MiA9IGF3YWl0IHJlYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBzaG91bGQuZXhpc3QodHgyLnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgcmVqZWN0IGludmFsaWQgYW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICBidWlsZGVyLndpdGhkcmF3KHtcbiAgICAgICAgICAgICAgYW1vdW50OiAnLTEnLFxuICAgICAgICAgICAgICBidGNBZGRyZXNzOiAnMUJ2Qk1TRVlzdFdldHFURm41QXU0bTRHRmc3eEphTlZOMicsXG4gICAgICAgICAgICAgIG1heEZlZTogJzUwMDAnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgL0ludmFsaWQgb3IgbWlzc2luZyBhbW91bnQvXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgemVybyBhbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGJ1aWxkZXIud2l0aGRyYXcoe1xuICAgICAgICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgICAgICAgYnRjQWRkcmVzczogJzFCdkJNU0VZc3RXZXRxVEZuNUF1NG00R0ZnN3hKYU5WTjInLFxuICAgICAgICAgICAgICBtYXhGZWU6ICc1MDAwJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIC9JbnZhbGlkIG9yIG1pc3NpbmcgYW1vdW50L1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVqZWN0IGVtcHR5IGFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgc2hvdWxkLnRocm93cyhcbiAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgYnVpbGRlci53aXRoZHJhdyh7XG4gICAgICAgICAgICAgIGFtb3VudDogJycsXG4gICAgICAgICAgICAgIGJ0Y0FkZHJlc3M6ICcxQnZCTVNFWXN0V2V0cVRGbjVBdTRtNEdGZzd4SmFOVk4yJyxcbiAgICAgICAgICAgICAgbWF4RmVlOiAnNTAwMCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAvSW52YWxpZCBvciBtaXNzaW5nIGFtb3VudC9cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBpbnZhbGlkIEJUQyBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICBidWlsZGVyLndpdGhkcmF3KHtcbiAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwJyxcbiAgICAgICAgICAgICAgYnRjQWRkcmVzczogJ2ludmFsaWRhZGRyZXNzJyxcbiAgICAgICAgICAgICAgbWF4RmVlOiAnNTAwMCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAvSW52YWxpZCBvciBtaXNzaW5nIGJ0Y0FkZHJlc3MvXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgaW52YWxpZCBtYXhGZWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGJ1aWxkZXIud2l0aGRyYXcoe1xuICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAnLFxuICAgICAgICAgICAgICBidGNBZGRyZXNzOiAnMUJ2Qk1TRVlzdFdldHFURm41QXU0bTRHRmc3eEphTlZOMicsXG4gICAgICAgICAgICAgIG1heEZlZTogJy0xMDAnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgL0ludmFsaWQgb3IgbWlzc2luZyBtYXhGZWUvXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgemVybyBtYXhGZWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGJ1aWxkZXIud2l0aGRyYXcoe1xuICAgICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAnLFxuICAgICAgICAgICAgICBidGNBZGRyZXNzOiAnMUJ2Qk1TRVlzdFdldHFURm41QXU0bTRHRmc3eEphTlZOMicsXG4gICAgICAgICAgICAgIG1heEZlZTogJzAnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgL0ludmFsaWQgb3IgbWlzc2luZyBtYXhGZWUvXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgZW1wdHkgbWF4RmVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICBidWlsZGVyLndpdGhkcmF3KHtcbiAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwJyxcbiAgICAgICAgICAgICAgYnRjQWRkcmVzczogJzFCdkJNU0VZc3RXZXRxVEZuNUF1NG00R0ZnN3hKYU5WTjInLFxuICAgICAgICAgICAgICBtYXhGZWU6ICcnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgL0ludmFsaWQgb3IgbWlzc2luZyBtYXhGZWUvXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGJ1aWxkIHdpdGhvdXQgd2l0aGRyYXcgcGFyYW1zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBjb25zdCBwdWJLZXlzID0gdGVzdERhdGEucHJ2S2V5c1N0cmluZy5tYXAocHViS2V5ZnJvbVByaXZLZXkpO1xuICAgICAgICBjb25zdCBwdWJLZXlTdHJpbmdzID0gcHViS2V5cy5tYXAocHVibGljS2V5VG9TdHJpbmcpO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkocHViS2V5U3RyaW5ncyk7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygyKTtcbiAgICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL1dpdGhkcmF3YWwgcGFyYW1zIGFyZSBub3Qgc2V0Lyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendmanyBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/sendmanyBuilder.ts"],"names":[],"mappings":""}
|