@bitgo-beta/sdk-coin-sui 3.0.3-beta.182 → 3.0.3-beta.1821
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 +7 -2
- package/dist/src/lib/compareTransactionBlocks.js +2 -3
- package/dist/src/lib/constants.d.ts +9 -2
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +18 -2
- package/dist/src/lib/customTransaction.js +3 -3
- package/dist/src/lib/customTransactionBuilder.js +5 -5
- package/dist/src/lib/iface.d.ts +80 -12
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +34 -5
- package/dist/src/lib/index.d.ts +6 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +36 -10
- package/dist/src/lib/keyPair.js +24 -10
- package/dist/src/lib/mystenlab/builder/Inputs.d.ts +64 -11
- package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/Inputs.js +63 -19
- package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +88 -355
- package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/TransactionBlock.js +44 -25
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts +152 -77
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +54 -44
- package/dist/src/lib/mystenlab/builder/Transactions.d.ts +133 -188
- package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/Transactions.js +52 -53
- package/dist/src/lib/mystenlab/builder/bcs.d.ts +1 -1
- package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/bcs.js +2 -2
- package/dist/src/lib/mystenlab/builder/index.js +6 -2
- package/dist/src/lib/mystenlab/builder/serializer.js +6 -8
- package/dist/src/lib/mystenlab/builder/utils.d.ts +1 -1
- package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/utils.js +4 -4
- package/dist/src/lib/mystenlab/cryptography/hash.js +3 -4
- package/dist/src/lib/mystenlab/framework/framework.d.ts +6 -6
- package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/framework/framework.js +22 -25
- package/dist/src/lib/mystenlab/framework/index.js +6 -2
- package/dist/src/lib/mystenlab/framework/sui-system-state.js +2 -2
- package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +2 -2
- package/dist/src/lib/mystenlab/types/coin.d.ts +13 -11
- package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/coin.js +20 -19
- package/dist/src/lib/mystenlab/types/common.d.ts +8 -8
- package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/common.js +22 -22
- package/dist/src/lib/mystenlab/types/events.d.ts +15 -15
- package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/events.js +17 -17
- package/dist/src/lib/mystenlab/types/index.js +6 -2
- package/dist/src/lib/mystenlab/types/normalized.d.ts +21 -21
- package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/normalized.js +41 -41
- package/dist/src/lib/mystenlab/types/objects.d.ts +51 -51
- package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/objects.js +96 -106
- package/dist/src/lib/mystenlab/types/option.d.ts +1 -1
- package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/option.js +2 -3
- package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +55 -29
- package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/sui-bcs.js +29 -5
- package/dist/src/lib/mystenlab/types/transactions.d.ts +625 -625
- package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/transactions.js +178 -194
- package/dist/src/lib/mystenlab/types/validator.d.ts +13 -13
- package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/validator.js +124 -124
- package/dist/src/lib/resources/walrusConfig.d.ts +22 -0
- package/dist/src/lib/resources/walrusConfig.d.ts.map +1 -0
- package/dist/src/lib/resources/walrusConfig.js +37 -0
- package/dist/src/lib/rpcClient.d.ts +5 -0
- package/dist/src/lib/rpcClient.d.ts.map +1 -0
- package/dist/src/lib/rpcClient.js +74 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
- package/dist/src/lib/stakingBuilder.js +23 -7
- package/dist/src/lib/stakingTransaction.d.ts +0 -1
- package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
- package/dist/src/lib/stakingTransaction.js +26 -15
- package/dist/src/lib/tokenTransferBuilder.d.ts +66 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +202 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts +59 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferTransaction.js +272 -0
- package/dist/src/lib/transaction.d.ts +21 -4
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +129 -17
- package/dist/src/lib/transactionBuilder.d.ts +13 -4
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +34 -4
- package/dist/src/lib/transactionBuilderFactory.d.ts +11 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +32 -1
- package/dist/src/lib/transferBuilder.d.ts +58 -1
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +310 -24
- package/dist/src/lib/transferTransaction.d.ts +6 -1
- package/dist/src/lib/transferTransaction.d.ts.map +1 -1
- package/dist/src/lib/transferTransaction.js +129 -12
- package/dist/src/lib/unstakingBuilder.js +6 -6
- package/dist/src/lib/unstakingTransaction.d.ts +0 -1
- package/dist/src/lib/unstakingTransaction.d.ts.map +1 -1
- package/dist/src/lib/unstakingTransaction.js +31 -17
- package/dist/src/lib/utils.d.ts +24 -3
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +254 -21
- package/dist/src/lib/walrusStakingBuilder.d.ts +66 -0
- package/dist/src/lib/walrusStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/walrusStakingBuilder.js +200 -0
- package/dist/src/lib/walrusStakingTransaction.d.ts +52 -0
- package/dist/src/lib/walrusStakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/walrusStakingTransaction.js +269 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts +36 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts.map +1 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.js +173 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts +21 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts.map +1 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.js +190 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/sui.d.ts +46 -8
- package/dist/src/sui.d.ts.map +1 -1
- package/dist/src/sui.js +525 -37
- package/dist/src/suiToken.d.ts +22 -0
- package/dist/src/suiToken.d.ts.map +1 -0
- package/dist/src/suiToken.js +61 -0
- package/dist/src/tsui.js +1 -1
- package/dist/test/integration/index.d.ts +1 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +1 -0
- package/dist/test/local_fullnode/RpcClient.d.ts +60 -0
- package/dist/test/local_fullnode/RpcClient.d.ts.map +1 -0
- package/dist/test/local_fullnode/RpcClient.js +111 -0
- package/dist/test/local_fullnode/faucet.d.ts +6 -0
- package/dist/test/local_fullnode/faucet.d.ts.map +1 -0
- package/dist/test/local_fullnode/faucet.js +17 -0
- package/dist/test/local_fullnode/transactions.d.ts +2 -0
- package/dist/test/local_fullnode/transactions.d.ts.map +1 -0
- package/dist/test/local_fullnode/transactions.js +190 -0
- package/dist/test/resources/sui.d.ts +458 -0
- package/dist/test/resources/sui.d.ts.map +1 -0
- package/dist/test/resources/sui.js +632 -0
- package/dist/test/unit/compareTransactionBlocks.d.ts +2 -0
- package/dist/test/unit/compareTransactionBlocks.d.ts.map +1 -0
- package/dist/test/unit/compareTransactionBlocks.js +64 -0
- package/dist/test/unit/getBuilderFactory.d.ts +3 -0
- package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/getBuilderFactory.js +10 -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 +72 -0
- package/dist/test/unit/sui.d.ts +2 -0
- package/dist/test/unit/sui.d.ts.map +1 -0
- package/dist/test/unit/sui.js +2423 -0
- package/dist/test/unit/suiToken.d.ts +2 -0
- package/dist/test/unit/suiToken.d.ts.map +1 -0
- package/dist/test/unit/suiToken.js +39 -0
- package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/customTransactionBuilder.js +106 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.js +152 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +255 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +639 -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 +1055 -0
- package/dist/test/unit/transactionBuilder/unstakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unstakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unstakingBuilder.js +115 -0
- package/dist/test/unit/transactionBuilder/walrusStakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/walrusStakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/walrusStakingBuilder.js +162 -0
- package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.js +181 -0
- package/dist/test/unit/transferTransaction.d.ts +2 -0
- package/dist/test/unit/transferTransaction.d.ts.map +1 -0
- package/dist/test/unit/transferTransaction.js +94 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +186 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +16 -12
- package/.eslintignore +0 -6
- package/.mocharc.yml +0 -7
- package/CHANGELOG.md +0 -420
|
@@ -11,9 +11,19 @@ const transferTransaction_1 = require("./transferTransaction");
|
|
|
11
11
|
const assert_1 = __importDefault(require("assert"));
|
|
12
12
|
const builder_1 = require("./mystenlab/builder");
|
|
13
13
|
const utils_1 = __importDefault(require("./utils"));
|
|
14
|
+
const constants_1 = require("./constants");
|
|
15
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
14
16
|
class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
15
17
|
constructor(_coinConfig) {
|
|
16
18
|
super(_coinConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Balance held in the Sui address balance system (not in coin objects).
|
|
21
|
+
* When set, this amount is included in the total available balance for transfer.
|
|
22
|
+
* Note: Sui does NOT automatically merge address balance into the gas coin when
|
|
23
|
+
* gasData.payment is non-empty. Path 2c explicitly redeems it via redeem_funds
|
|
24
|
+
* and merges it into the gas coin before splitting.
|
|
25
|
+
*/
|
|
26
|
+
this._fundsInAddressBalance = new bignumber_js_1.default(0);
|
|
17
27
|
this._transaction = new transferTransaction_1.TransferTransaction(_coinConfig);
|
|
18
28
|
}
|
|
19
29
|
get transactionType() {
|
|
@@ -24,6 +34,26 @@ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
24
34
|
this._recipients = recipients;
|
|
25
35
|
return this;
|
|
26
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Set the amount of funds held in the Sui address balance system for this sender.
|
|
39
|
+
* This is the `fundsInAddressBalance` value from the `suix_getBalance` RPC response.
|
|
40
|
+
* It is added to the coin object balances when computing total available funds.
|
|
41
|
+
*
|
|
42
|
+
* @param {string} amount - amount in MIST held in address balance
|
|
43
|
+
*/
|
|
44
|
+
fundsInAddressBalance(amount) {
|
|
45
|
+
this._fundsInAddressBalance = new bignumber_js_1.default(amount);
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns the total available balance: sum of all gas payment coin object
|
|
50
|
+
* balances plus any funds held in the address balance system.
|
|
51
|
+
*
|
|
52
|
+
* @param {BigNumber} coinObjectsBalance - sum of balances from gasData.payment coin objects
|
|
53
|
+
*/
|
|
54
|
+
totalAvailableBalance(coinObjectsBalance) {
|
|
55
|
+
return coinObjectsBalance.plus(this._fundsInAddressBalance);
|
|
56
|
+
}
|
|
27
57
|
/** @inheritdoc */
|
|
28
58
|
validateTransaction(transaction) {
|
|
29
59
|
if (!transaction.suiTransaction) {
|
|
@@ -71,6 +101,21 @@ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
71
101
|
this.type(iface_1.SuiTransactionType.Transfer);
|
|
72
102
|
this.sender(txData.sender);
|
|
73
103
|
this.gasData(txData.gasData);
|
|
104
|
+
if (txData.expiration && !('None' in txData.expiration)) {
|
|
105
|
+
this._expiration = txData.expiration;
|
|
106
|
+
}
|
|
107
|
+
if (txData.inputObjects) {
|
|
108
|
+
this.inputObjects(txData.inputObjects);
|
|
109
|
+
}
|
|
110
|
+
// Reconstruct fundsInAddressBalance from BalanceWithdrawal input if present.
|
|
111
|
+
// After BCS deserialization inputs are CallArg format: { BalanceWithdrawal: {...} }
|
|
112
|
+
// During building they are TransactionBlockInput format: { kind:'Input', value: { BalanceWithdrawal: {...} } }
|
|
113
|
+
const withdrawalInput = tx.suiTransaction?.tx?.inputs?.find((input) => (input !== null && typeof input === 'object' && 'BalanceWithdrawal' in input) ||
|
|
114
|
+
(input?.value !== null && typeof input?.value === 'object' && 'BalanceWithdrawal' in (input.value ?? {})));
|
|
115
|
+
if (withdrawalInput) {
|
|
116
|
+
const bw = withdrawalInput.BalanceWithdrawal ?? withdrawalInput.value?.BalanceWithdrawal;
|
|
117
|
+
this._fundsInAddressBalance = new bignumber_js_1.default(String(bw.reservation?.MaxAmountU64 ?? bw.amount));
|
|
118
|
+
}
|
|
74
119
|
const recipients = utils_1.default.getRecipients(tx.suiTransaction);
|
|
75
120
|
this.send(recipients);
|
|
76
121
|
}
|
|
@@ -78,39 +123,280 @@ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
78
123
|
* Validates all fields are defined
|
|
79
124
|
*/
|
|
80
125
|
validateTransactionFields() {
|
|
81
|
-
assert_1.default(this._type, new sdk_core_1.BuildTransactionError('type is required before building'));
|
|
82
|
-
assert_1.default(this._sender, new sdk_core_1.BuildTransactionError('sender is required before building'));
|
|
83
|
-
assert_1.default(this._recipients && this._recipients.length > 0, new sdk_core_1.BuildTransactionError('at least one recipient is required before building'));
|
|
84
|
-
assert_1.default(this._gasData, new sdk_core_1.BuildTransactionError('gasData is required before building'));
|
|
126
|
+
(0, assert_1.default)(this._type, new sdk_core_1.BuildTransactionError('type is required before building'));
|
|
127
|
+
(0, assert_1.default)(this._sender, new sdk_core_1.BuildTransactionError('sender is required before building'));
|
|
128
|
+
(0, assert_1.default)(this._recipients && this._recipients.length > 0, new sdk_core_1.BuildTransactionError('at least one recipient is required before building'));
|
|
129
|
+
(0, assert_1.default)(this._gasData, new sdk_core_1.BuildTransactionError('gasData is required before building'));
|
|
85
130
|
this.validateGasData(this._gasData);
|
|
131
|
+
// If inputObjects are provided, validate them
|
|
132
|
+
if (this._inputObjects && this._inputObjects.length > 0) {
|
|
133
|
+
this.validateInputObjectsBase(this._inputObjects);
|
|
134
|
+
}
|
|
135
|
+
// When fundsInAddressBalance is set, validate that total recipient amount
|
|
136
|
+
// does not exceed available address balance. Coin object balances are not
|
|
137
|
+
// stored in the builder (gasData.payment holds only ObjectRefs), so only
|
|
138
|
+
// the address balance portion can be cross-checked here.
|
|
139
|
+
if (this._fundsInAddressBalance.gt(0)) {
|
|
140
|
+
const totalRecipientAmount = this._recipients.reduce((acc, r) => acc.plus(new bignumber_js_1.default(r.amount)), new bignumber_js_1.default(0));
|
|
141
|
+
(0, assert_1.default)(totalRecipientAmount.gt(0), new sdk_core_1.BuildTransactionError('total recipient amount must be greater than 0'));
|
|
142
|
+
}
|
|
86
143
|
}
|
|
87
144
|
/**
|
|
88
|
-
* Build transfer programmable transaction
|
|
145
|
+
* Build transfer programmable transaction.
|
|
146
|
+
*
|
|
147
|
+
* Four build paths:
|
|
148
|
+
*
|
|
149
|
+
* Path 1a — Sponsored with coin objects (sender ≠ gasData.owner, inputObjects provided):
|
|
150
|
+
* [optional withdrawal(fundsInAddressBalance) → redeem_funds → Coin<SUI>]
|
|
151
|
+
* MergeCoins(inputObject[0], [inputObject[1..], addrCoin?])
|
|
152
|
+
* SplitCoins(mergedObject, [amount]) → TransferObjects
|
|
153
|
+
* Handles Cases 4 (coins only), 6 (coins, sponsor addr-bal gas), 8 (coins+addr-bal).
|
|
154
|
+
*
|
|
155
|
+
* Path 1b — Sponsored, address balance only (sender ≠ gasData.owner, no inputObjects):
|
|
156
|
+
* withdrawal(fundsInAddressBalance) → redeem_funds → Coin<SUI>
|
|
157
|
+
* SplitCoins(addrCoin, [amount]) → TransferObjects
|
|
158
|
+
* Handles Case 5 (sponsor coin-object gas) and Case 7/Phase-4b (sponsor addr-bal gas).
|
|
159
|
+
* Caller must set ValidDuring expiration when gasData.payment = [] (Cases 7, 9).
|
|
160
|
+
*
|
|
161
|
+
* Path 2a — Self-pay, coin objects only (sender === gasData.owner, payment non-empty, fundsInAddressBalance==0):
|
|
162
|
+
* SplitCoins(GasCoin, [amount]) → TransferObjects
|
|
163
|
+
* Handles Case 1 (coins only).
|
|
164
|
+
*
|
|
165
|
+
* Path 2b — Self-pay, address-balance only (sender === gasData.owner, payment==[], fundsInAddressBalance>0):
|
|
166
|
+
* withdrawal(totalRecipientAmount) → redeem_funds → Coin<SUI>
|
|
167
|
+
* SplitCoins(addrCoin, [amount]) → TransferObjects
|
|
168
|
+
* MergeCoins(GasCoin, [addrCoin]) ← destroys 0-balance addrCoin; gas paid from accumulator remainder
|
|
169
|
+
* Handles Case 2 (addr-bal only, caller sets ValidDuring).
|
|
170
|
+
* NOTE: SplitCoins(GasCoin, [amount]) does NOT work here — with payment=[], GasCoin only
|
|
171
|
+
* carries up to gas-budget-worth of balance for PTB operations, not the full address balance.
|
|
172
|
+
*
|
|
173
|
+
* Path 2c — Self-pay, mixed (sender === gasData.owner, gasData.payment non-empty AND fundsInAddressBalance > 0):
|
|
174
|
+
* Sui does NOT automatically merge address balance into gas coin when payment is non-empty.
|
|
175
|
+
* withdrawal(fundsInAddressBalance) → redeem_funds → Coin<SUI>
|
|
176
|
+
* MergeCoins(GasCoin, [addrCoin])
|
|
177
|
+
* SplitCoins(GasCoin, [amount]) → TransferObjects
|
|
178
|
+
* Handles Case 3 (mixed funds — coin objects + address balance, self-pay).
|
|
89
179
|
*
|
|
90
180
|
* @protected
|
|
91
181
|
*/
|
|
92
182
|
buildSuiTransaction() {
|
|
93
183
|
this.validateTransactionFields();
|
|
94
184
|
const programmableTxBuilder = new builder_1.TransactionBlock();
|
|
95
|
-
this.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
185
|
+
if (this._sender !== this._gasData.owner && this._inputObjects && this._inputObjects.length > 0) {
|
|
186
|
+
// Path 1: sponsored transaction.
|
|
187
|
+
// The fee payer (gasData.owner) pays gas. The sender's funds come from:
|
|
188
|
+
// - coin objects (inputObjects)
|
|
189
|
+
// - address balance via tx.withdrawal() + 0x2::coin::redeem_funds
|
|
190
|
+
const inputObjects = this._inputObjects.map((object) => programmableTxBuilder.object(builder_1.Inputs.ObjectRef(object)));
|
|
191
|
+
// If the sender also has address balance, withdraw it as a Coin<SUI> and
|
|
192
|
+
// merge it into the coin-object pool before splitting for recipients.
|
|
193
|
+
if (this._fundsInAddressBalance.gt(0)) {
|
|
194
|
+
const [addrCoin] = programmableTxBuilder.moveCall({
|
|
195
|
+
target: '0x2::coin::redeem_funds',
|
|
196
|
+
typeArguments: ['0x2::sui::SUI'],
|
|
197
|
+
arguments: [programmableTxBuilder.withdrawal({ amount: BigInt(this._fundsInAddressBalance.toFixed()) })],
|
|
198
|
+
});
|
|
199
|
+
inputObjects.push(addrCoin);
|
|
200
|
+
}
|
|
201
|
+
const mergedObject = inputObjects.shift();
|
|
202
|
+
if (inputObjects.length > 0) {
|
|
203
|
+
programmableTxBuilder.mergeCoins(mergedObject, inputObjects);
|
|
204
|
+
}
|
|
205
|
+
this._recipients.forEach((recipient) => {
|
|
206
|
+
const splitObject = programmableTxBuilder.splitCoins(mergedObject, [
|
|
207
|
+
programmableTxBuilder.pure(BigInt(recipient.amount)),
|
|
208
|
+
]);
|
|
209
|
+
programmableTxBuilder.transferObjects([splitObject], programmableTxBuilder.object(recipient.address));
|
|
210
|
+
});
|
|
211
|
+
const txData = programmableTxBuilder.blockData;
|
|
212
|
+
return {
|
|
213
|
+
type: this._type,
|
|
214
|
+
sender: this._sender,
|
|
215
|
+
tx: {
|
|
216
|
+
inputs: [...txData.inputs],
|
|
217
|
+
transactions: [...txData.transactions],
|
|
218
|
+
},
|
|
219
|
+
gasData: {
|
|
220
|
+
...this._gasData,
|
|
221
|
+
},
|
|
222
|
+
expiration: this._expiration,
|
|
223
|
+
fundsInAddressBalance: this._fundsInAddressBalance.gt(0) ? this._fundsInAddressBalance.toFixed() : undefined,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
else if (this._sender !== this._gasData.owner && this._fundsInAddressBalance.gt(0)) {
|
|
227
|
+
// Path 1b: sponsored, address balance only — no coin inputObjects.
|
|
228
|
+
// Sender's funds come entirely from address balance; gas is paid by the sponsor.
|
|
229
|
+
// withdrawal(fundsInAddressBalance) → redeem_funds → Coin<SUI> → SplitCoins → TransferObjects
|
|
230
|
+
const [addrCoin] = programmableTxBuilder.moveCall({
|
|
231
|
+
target: '0x2::coin::redeem_funds',
|
|
232
|
+
typeArguments: ['0x2::sui::SUI'],
|
|
233
|
+
arguments: [programmableTxBuilder.withdrawal({ amount: BigInt(this._fundsInAddressBalance.toFixed()) })],
|
|
234
|
+
});
|
|
235
|
+
// addrCoin is a command result (from redeem_funds) and must be explicitly consumed.
|
|
236
|
+
// Split for every recipient — keeps a 1:1 SplitCoins↔TransferObjects structure for the
|
|
237
|
+
// transaction parser. After all splits, consume the source coin explicitly:
|
|
238
|
+
// - If there is change (fundsInAddressBalance > total recipient amount): return addrCoin
|
|
239
|
+
// to sender via TransferObjects.
|
|
240
|
+
// - If send-all (no change): addrCoin has 0 balance; destroy it by merging into the
|
|
241
|
+
// sponsor's gas coin (a 0-value merge is valid in Sui and deletes the source object).
|
|
242
|
+
const totalRecipientAmount = this._recipients.reduce((sum, r) => sum.plus(r.amount), new bignumber_js_1.default(0));
|
|
243
|
+
const hasChange = this._fundsInAddressBalance.gt(totalRecipientAmount);
|
|
244
|
+
this._recipients.forEach((recipient) => {
|
|
245
|
+
const splitObject = programmableTxBuilder.splitCoins(addrCoin, [
|
|
246
|
+
programmableTxBuilder.pure(BigInt(recipient.amount)),
|
|
247
|
+
]);
|
|
248
|
+
programmableTxBuilder.transferObjects([splitObject], programmableTxBuilder.object(recipient.address));
|
|
249
|
+
});
|
|
250
|
+
if (hasChange) {
|
|
251
|
+
// Return the remaining balance (change) to the sender.
|
|
252
|
+
programmableTxBuilder.transferObjects([addrCoin], programmableTxBuilder.object(this._sender));
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
// Send-all: addrCoin has 0 balance after all splits. Merge it into the sponsor's gas
|
|
256
|
+
// coin to destroy the zero-balance object (coin::join accepts a 0-value source).
|
|
257
|
+
programmableTxBuilder.mergeCoins(programmableTxBuilder.gas, [addrCoin]);
|
|
258
|
+
}
|
|
259
|
+
const txData1b = programmableTxBuilder.blockData;
|
|
260
|
+
return {
|
|
261
|
+
type: this._type,
|
|
262
|
+
sender: this._sender,
|
|
263
|
+
tx: {
|
|
264
|
+
inputs: [...txData1b.inputs],
|
|
265
|
+
transactions: [...txData1b.transactions],
|
|
266
|
+
},
|
|
267
|
+
gasData: {
|
|
268
|
+
...this._gasData,
|
|
269
|
+
},
|
|
270
|
+
expiration: this._expiration,
|
|
271
|
+
fundsInAddressBalance: this._fundsInAddressBalance.toFixed(),
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
// Path 2c: self-pay, mixed — coin objects (gasData.payment) AND address balance both present.
|
|
276
|
+
// Sui does NOT automatically merge fundsInAddressBalance into the gas coin when
|
|
277
|
+
// gasData.payment is non-empty. We must explicitly redeem the address balance as a
|
|
278
|
+
// Coin<SUI> and merge it into the gas coin before splitting for recipients.
|
|
279
|
+
if (this._fundsInAddressBalance.gt(0) && this._gasData.payment.length > 0) {
|
|
280
|
+
// Merge excess gas payment objects first (same overflow logic as Path 2a/2b below).
|
|
281
|
+
if (this._gasData.payment.length >= constants_1.MAX_GAS_OBJECTS) {
|
|
282
|
+
const gasPaymentObjects = this._gasData.payment
|
|
283
|
+
.slice(constants_1.MAX_GAS_OBJECTS - 1)
|
|
284
|
+
.map((object) => builder_1.Inputs.ObjectRef(object));
|
|
285
|
+
while (gasPaymentObjects.length > 0) {
|
|
286
|
+
programmableTxBuilder.mergeCoins(programmableTxBuilder.gas, gasPaymentObjects.splice(0, constants_1.MAX_COMMAND_ARGS - 1).map((object) => programmableTxBuilder.object(object)));
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Redeem address balance as Coin<SUI> and merge into the gas coin so that
|
|
290
|
+
// SplitCoins(GasCoin, [amount]) can draw from the full available balance:
|
|
291
|
+
// gas coin = sum(coinObjects) + fundsInAddressBalance
|
|
292
|
+
const [addrCoin] = programmableTxBuilder.moveCall({
|
|
293
|
+
target: '0x2::coin::redeem_funds',
|
|
294
|
+
typeArguments: ['0x2::sui::SUI'],
|
|
295
|
+
arguments: [programmableTxBuilder.withdrawal({ amount: BigInt(this._fundsInAddressBalance.toFixed()) })],
|
|
296
|
+
});
|
|
297
|
+
programmableTxBuilder.mergeCoins(programmableTxBuilder.gas, [addrCoin]);
|
|
298
|
+
this._recipients.forEach((recipient) => {
|
|
299
|
+
const coin = programmableTxBuilder.add(builder_1.Transactions.SplitCoins(programmableTxBuilder.gas, [
|
|
300
|
+
programmableTxBuilder.pure(BigInt(recipient.amount)),
|
|
301
|
+
]));
|
|
302
|
+
programmableTxBuilder.add(builder_1.Transactions.TransferObjects([coin], programmableTxBuilder.object(recipient.address)));
|
|
303
|
+
});
|
|
304
|
+
const txData2c = programmableTxBuilder.blockData;
|
|
305
|
+
return {
|
|
306
|
+
type: this._type,
|
|
307
|
+
sender: this._sender,
|
|
308
|
+
tx: {
|
|
309
|
+
inputs: [...txData2c.inputs],
|
|
310
|
+
transactions: [...txData2c.transactions],
|
|
311
|
+
},
|
|
312
|
+
gasData: {
|
|
313
|
+
...this._gasData,
|
|
314
|
+
payment: this._gasData.payment.slice(0, constants_1.MAX_GAS_OBJECTS - 1),
|
|
315
|
+
},
|
|
316
|
+
expiration: this._expiration,
|
|
317
|
+
fundsInAddressBalance: this._fundsInAddressBalance.toFixed(),
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
// Path 2b: self-pay, address-balance only (payment=[], fundsInAddressBalance>0).
|
|
321
|
+
// With payment=[], GasCoin is backed by the address accumulator only for gas reservation;
|
|
322
|
+
// it does NOT expose the full address balance for SplitCoins. Attempting
|
|
323
|
+
// SplitCoins(GasCoin, [large_amount]) with payment=[] always fails with
|
|
324
|
+
// InsufficientCoinBalance in command 0 because GasCoin only carries up to
|
|
325
|
+
// gas-budget-worth of balance for PTB operations.
|
|
326
|
+
// Fix: use withdrawal+redeem_funds to materialise the transfer amount as a coin
|
|
327
|
+
// object, split from that coin, then merge the 0-balance remainder into GasCoin
|
|
328
|
+
// (destroying it). The accumulator retains the gas budget for gas settlement.
|
|
329
|
+
if (this._fundsInAddressBalance.gt(0) && this._gasData.payment.length === 0) {
|
|
330
|
+
const totalRecipientAmount = this._recipients.reduce((acc, r) => acc.plus(new bignumber_js_1.default(r.amount)), new bignumber_js_1.default(0));
|
|
331
|
+
// Withdraw exactly the total transfer amount. The difference
|
|
332
|
+
// (fundsInAddressBalance - totalRecipientAmount ≈ gasBudget) remains in the
|
|
333
|
+
// accumulator and is consumed by the empty-payment gas mechanism.
|
|
334
|
+
const [addrCoin] = programmableTxBuilder.moveCall({
|
|
335
|
+
target: '0x2::coin::redeem_funds',
|
|
336
|
+
typeArguments: ['0x2::sui::SUI'],
|
|
337
|
+
arguments: [programmableTxBuilder.withdrawal({ amount: BigInt(totalRecipientAmount.toFixed()) })],
|
|
338
|
+
});
|
|
339
|
+
this._recipients.forEach((recipient) => {
|
|
340
|
+
const splitObject = programmableTxBuilder.splitCoins(addrCoin, [
|
|
341
|
+
programmableTxBuilder.pure(BigInt(recipient.amount)),
|
|
342
|
+
]);
|
|
343
|
+
programmableTxBuilder.transferObjects([splitObject], programmableTxBuilder.object(recipient.address));
|
|
344
|
+
});
|
|
345
|
+
// addrCoin has 0 balance after all splits; merge into GasCoin to delete it.
|
|
346
|
+
programmableTxBuilder.mergeCoins(programmableTxBuilder.gas, [addrCoin]);
|
|
347
|
+
const txData2b = programmableTxBuilder.blockData;
|
|
348
|
+
return {
|
|
349
|
+
type: this._type,
|
|
350
|
+
sender: this._sender,
|
|
351
|
+
tx: {
|
|
352
|
+
inputs: [...txData2b.inputs],
|
|
353
|
+
transactions: [...txData2b.transactions],
|
|
354
|
+
},
|
|
355
|
+
gasData: {
|
|
356
|
+
...this._gasData,
|
|
357
|
+
},
|
|
358
|
+
expiration: this._expiration,
|
|
359
|
+
fundsInAddressBalance: this._fundsInAddressBalance.toFixed(),
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
// Path 2a: self-pay, coin objects only (payment non-empty, fundsInAddressBalance==0).
|
|
363
|
+
// number of objects passed as gas payment should be strictly less than `MAX_GAS_OBJECTS`. When the transaction
|
|
364
|
+
// requires a larger number of inputs we use the merge command to merge the rest of the objects into the gasCoin
|
|
365
|
+
if (this._gasData.payment.length >= constants_1.MAX_GAS_OBJECTS) {
|
|
366
|
+
const gasPaymentObjects = this._gasData.payment
|
|
367
|
+
.slice(constants_1.MAX_GAS_OBJECTS - 1)
|
|
368
|
+
.map((object) => builder_1.Inputs.ObjectRef(object));
|
|
369
|
+
// limit for total number of `args: CallArg[]` for a single command is MAX_COMMAND_ARGS so the max length of
|
|
370
|
+
// `sources[]` for a `mergeCoins(destination, sources[])` command is MAX_COMMAND_ARGS - 1 (1 used up for
|
|
371
|
+
// `destination`). We need to create a total of `gasPaymentObjects/(MAX_COMMAND_ARGS - 1)` merge commands to
|
|
372
|
+
// merge all the objects
|
|
373
|
+
while (gasPaymentObjects.length > 0) {
|
|
374
|
+
programmableTxBuilder.mergeCoins(programmableTxBuilder.gas, gasPaymentObjects.splice(0, constants_1.MAX_COMMAND_ARGS - 1).map((object) => programmableTxBuilder.object(object)));
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
this._recipients.forEach((recipient) => {
|
|
378
|
+
const coin = programmableTxBuilder.add(builder_1.Transactions.SplitCoins(programmableTxBuilder.gas, [
|
|
379
|
+
programmableTxBuilder.pure(BigInt(recipient.amount)),
|
|
380
|
+
]));
|
|
381
|
+
programmableTxBuilder.add(builder_1.Transactions.TransferObjects([coin], programmableTxBuilder.object(recipient.address)));
|
|
382
|
+
});
|
|
383
|
+
const txData = programmableTxBuilder.blockData;
|
|
384
|
+
return {
|
|
385
|
+
type: this._type,
|
|
386
|
+
sender: this._sender,
|
|
387
|
+
tx: {
|
|
388
|
+
inputs: [...txData.inputs],
|
|
389
|
+
transactions: [...txData.transactions],
|
|
390
|
+
},
|
|
391
|
+
gasData: {
|
|
392
|
+
...this._gasData,
|
|
393
|
+
payment: this._gasData.payment.slice(0, constants_1.MAX_GAS_OBJECTS - 1),
|
|
394
|
+
},
|
|
395
|
+
expiration: this._expiration,
|
|
396
|
+
fundsInAddressBalance: this._fundsInAddressBalance.gt(0) ? this._fundsInAddressBalance.toFixed() : undefined,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
113
399
|
}
|
|
114
400
|
}
|
|
115
401
|
exports.TransferBuilder = TransferBuilder;
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkRBQTBEO0FBRTFELG1EQUFrRztBQUNsRyxtQ0FBOEY7QUFFOUYsK0RBQTREO0FBQzVELG9EQUE0QjtBQUM1QixpREFHNkI7QUFDN0Isb0RBQTRCO0FBRTVCLE1BQWEsZUFBZ0IsU0FBUSx1Q0FBbUQ7SUFHdEYsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlDQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxDQUFDLFVBQXVCO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbUJBQW1CLENBQUMsV0FBZ0M7UUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7WUFDL0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBWTtRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUMvRCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxjQUFzQjtRQUNqRCxNQUFNLEVBQUUsR0FB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TyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDckMsTUFBTSxJQUFJLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUNwQyxzQkFBdUIsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUM1RCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyRCxDQUFDLENBQ0gsQ0FBQztZQUNGLHFCQUFxQixDQUFDLEdBQUcsQ0FDdkIsc0JBQXVCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUNqRyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7UUFDL0MsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztZQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsRUFBRSxFQUFFO2dCQUNGLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDMUIsWUFBWSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO2FBQ3ZDO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEdBQUcsSUFBSSxDQUFDLFFBQVE7YUFDakI7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBNUhELDBDQTRIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJhc2VLZXksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgUmVjaXBpZW50LCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBTdWlUcmFuc2FjdGlvbiwgU3VpVHJhbnNhY3Rpb25UeXBlLCBUcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNmZXJUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNmZXJUcmFuc2FjdGlvbic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbnMgYXMgVHJhbnNhY3Rpb25zQ29uc3RydWN0b3IsXG4gIFRyYW5zYWN0aW9uQmxvY2sgYXMgUHJvZ3JhbW1pbmdUcmFuc2FjdGlvbkJsb2NrQnVpbGRlcixcbn0gZnJvbSAnLi9teXN0ZW5sYWIvYnVpbGRlcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXI8VHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICBwcm90ZWN0ZWQgX3JlY2lwaWVudHM6IFJlY2lwaWVudFtdO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2ZlclRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICB9XG5cbiAgc2VuZChyZWNpcGllbnRzOiBSZWNpcGllbnRbXSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVSZWNpcGllbnRzKHJlY2lwaWVudHMpO1xuICAgIHRoaXMuX3JlY2lwaWVudHMgPSByZWNpcGllbnRzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zZmVyVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uLnN1aVRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVUcmFuc2FjdGlvbkZpZWxkcygpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHNpZ24oa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRTdWlUcmFuc2FjdGlvbih0aGlzLmJ1aWxkU3VpVHJhbnNhY3Rpb24oKSk7XG4gICAgc3VwZXIuc2lnbihrZXkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uPFRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2ZlclRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPFRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+PiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRTdWlUcmFuc2FjdGlvbih0aGlzLmJ1aWxkU3VpVHJhbnNhY3Rpb24oKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi50cmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuXG4gICAgaWYgKHRoaXMuX3NpZ25lcikge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5zaWduKHRoaXMuX3NpZ25lcik7XG4gICAgfVxuXG4gICAgdGhpcy5fc2lnbmF0dXJlcy5mb3JFYWNoKChzaWduYXR1cmUpID0+IHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uYWRkU2lnbmF0dXJlKHNpZ25hdHVyZS5wdWJsaWNLZXksIHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2ZlclRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcblxuICAgIGlmICh0eC5zaWduYXR1cmUgJiYgdHguc2lnbmF0dXJlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbdHguc3VpU2lnbmF0dXJlXTtcbiAgICB9XG5cbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0aGlzLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyKTtcbiAgICB0aGlzLnNlbmRlcih0eERhdGEuc2VuZGVyKTtcbiAgICB0aGlzLmdhc0RhdGEodHhEYXRhLmdhc0RhdGEpO1xuXG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHV0aWxzLmdldFJlY2lwaWVudHModHguc3VpVHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuc2VuZChyZWNpcGllbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWxsIGZpZWxkcyBhcmUgZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRyYW5zYWN0aW9uRmllbGRzKCk6IHZvaWQge1xuICAgIGFzc2VydCh0aGlzLl90eXBlLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0eXBlIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQodGhpcy5fc2VuZGVyLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdzZW5kZXIgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydChcbiAgICAgIHRoaXMuX3JlY2lwaWVudHMgJiYgdGhpcy5fcmVjaXBpZW50cy5sZW5ndGggPiAwLFxuICAgICAgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignYXQgbGVhc3Qgb25lIHJlY2lwaWVudCBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKVxuICAgICk7XG4gICAgYXNzZXJ0KHRoaXMuX2dhc0RhdGEsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2dhc0RhdGEgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIHRoaXMudmFsaWRhdGVHYXNEYXRhKHRoaXMuX2dhc0RhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRyYW5zZmVyIHByb2dyYW1tYWJsZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRTdWlUcmFuc2FjdGlvbigpOiBTdWlUcmFuc2FjdGlvbjxUcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy52YWxpZGF0ZVRyYW5zYWN0aW9uRmllbGRzKCk7XG4gICAgY29uc3QgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyID0gbmV3IFByb2dyYW1taW5nVHJhbnNhY3Rpb25CbG9ja0J1aWxkZXIoKTtcbiAgICB0aGlzLl9yZWNpcGllbnRzLmZvckVhY2goKHJlY2lwaWVudCkgPT4ge1xuICAgICAgY29uc3QgY29pbiA9IHByb2dyYW1tYWJsZVR4QnVpbGRlci5hZGQoXG4gICAgICAgIFRyYW5zYWN0aW9uc0NvbnN0cnVjdG9yLlNwbGl0Q29pbnMocHJvZ3JhbW1hYmxlVHhCdWlsZGVyLmdhcywgW1xuICAgICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5wdXJlKE51bWJlcihyZWNpcGllbnQuYW1vdW50KSksXG4gICAgICAgIF0pXG4gICAgICApO1xuICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLmFkZChcbiAgICAgICAgVHJhbnNhY3Rpb25zQ29uc3RydWN0b3IuVHJhbnNmZXJPYmplY3RzKFtjb2luXSwgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm9iamVjdChyZWNpcGllbnQuYWRkcmVzcykpXG4gICAgICApO1xuICAgIH0pO1xuICAgIGNvbnN0IHR4RGF0YSA9IHByb2dyYW1tYWJsZVR4QnVpbGRlci5ibG9ja0RhdGE7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMuX3R5cGUsXG4gICAgICBzZW5kZXI6IHRoaXMuX3NlbmRlcixcbiAgICAgIHR4OiB7XG4gICAgICAgIGlucHV0czogWy4uLnR4RGF0YS5pbnB1dHNdLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFsuLi50eERhdGEudHJhbnNhY3Rpb25zXSxcbiAgICAgIH0sXG4gICAgICBnYXNEYXRhOiB7XG4gICAgICAgIC4uLnRoaXMuX2dhc0RhdGEsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
402
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkRBQTBEO0FBRTFELG1EQUFrRztBQUNsRyxtQ0FBOEY7QUFFOUYsK0RBQTREO0FBQzVELG9EQUE0QjtBQUM1QixpREFLNkI7QUFDN0Isb0RBQTRCO0FBQzVCLDJDQUFnRTtBQUNoRSxnRUFBcUM7QUFFckMsTUFBYSxlQUFnQixTQUFRLHVDQUFtRDtJQVd0RixZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQVZyQjs7Ozs7O1dBTUc7UUFDTywyQkFBc0IsR0FBYyxJQUFJLHNCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFJN0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlDQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxDQUFDLFVBQXVCO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQkFBcUIsQ0FBQyxNQUFjO1FBQ2xDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLHNCQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQkFBcUIsQ0FBQyxrQkFBNkI7UUFDakQsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUFnQztRQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBWTtRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUMvRCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxjQUFzQjtRQUNqRCxNQUFNLEVBQUUsR0FBRyxJQUFJLHlDQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0I7SUFDUixLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdkQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUF1QjtRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUV2QixJQUFJLEVBQUUsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0IsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsNkVBQTZFO1FBQzdFLG9GQUFvRjtRQUNwRiwrR0FBK0c7UUFDL0csTUFBTSxlQUFlLEdBQUksRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsTUFBZ0IsRUFBRSxJQUFJLENBQ3BFLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FDYixDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLG1CQUFtQixJQUFJLEtBQUssQ0FBQztZQUM3RSxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxFQUFFLEtBQUssS0FBSyxRQUFRLElBQUksbUJBQW1CLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQzVHLENBQUM7UUFDRixJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxpQkFBaUIsSUFBSSxlQUFlLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDO1lBQ3pGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLHNCQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsWUFBWSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNLLHlCQUF5QjtRQUMvQixJQUFBLGdCQUFNLEVBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLGdDQUFxQixDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFBLGdCQUFNLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLGdDQUFxQixDQUFDLG9DQUFvQyxDQUFDLENBQUMsQ0FBQztRQUN0RixJQUFBLGdCQUFNLEVBQ0osSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQy9DLElBQUksZ0NBQXFCLENBQUMsb0RBQW9ELENBQUMsQ0FDaEYsQ0FBQztRQUNGLElBQUEsZ0JBQU0sRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLDhDQUE4QztRQUM5QyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsMEVBQTBFO1FBQzFFLDBFQUEwRTtRQUMxRSx5RUFBeUU7UUFDekUseURBQXlEO1FBQ3pELElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQ2xELENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLHNCQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQzdDLElBQUksc0JBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQztZQUNGLElBQUEsZ0JBQU0sRUFBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxnQ0FBcUIsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLENBQUM7UUFDakgsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFDRztJQUNPLG1CQUFtQjtRQUMzQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQyxNQUFNLHFCQUFxQixHQUFHLElBQUksMEJBQWtDLEVBQUUsQ0FBQztRQUV2RSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoRyxpQ0FBaUM7WUFDakMsd0VBQXdFO1lBQ3hFLGtDQUFrQztZQUNsQyxvRUFBb0U7WUFDcEUsTUFBTSxZQUFZLEdBQTBCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDNUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3ZELENBQUM7WUFFRix5RUFBeUU7WUFDekUsc0VBQXNFO1lBQ3RFLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDO29CQUNoRCxNQUFNLEVBQUUseUJBQXlCO29CQUNqQyxhQUFhLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQ2hDLFNBQVMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN6RyxDQUFDLENBQUM7Z0JBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBeUIsQ0FBQztZQUNqRSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUU7b0JBQ2pFLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyRCxDQUFDLENBQUM7Z0JBQ0gscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDO1lBQy9DLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3BCLEVBQUUsRUFBRTtvQkFDRixNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBQzFCLFlBQVksRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztpQkFDdkM7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLEdBQUcsSUFBSSxDQUFDLFFBQVE7aUJBQ2pCO2dCQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDNUIscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQzdHLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRixtRUFBbUU7WUFDbkUsaUZBQWlGO1lBQ2pGLDhGQUE4RjtZQUM5RixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxNQUFNLEVBQUUseUJBQXlCO2dCQUNqQyxhQUFhLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBQ2hDLFNBQVMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3pHLENBQUMsQ0FBQztZQUNILG9GQUFvRjtZQUNwRix1RkFBdUY7WUFDdkYsNkVBQTZFO1lBQzdFLDJGQUEyRjtZQUMzRixxQ0FBcUM7WUFDckMsc0ZBQXNGO1lBQ3RGLDBGQUEwRjtZQUMxRixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxzQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBRXZFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQzdELHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyRCxDQUFDLENBQUM7Z0JBQ0gscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCx1REFBdUQ7Z0JBQ3ZELHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNoRyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sc0ZBQXNGO2dCQUN0RixpRkFBaUY7Z0JBQ2pGLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7WUFDakQsT0FBTztnQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDcEIsRUFBRSxFQUFFO29CQUNGLE1BQU0sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDNUIsWUFBWSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO2lCQUN6QztnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsR0FBRyxJQUFJLENBQUMsUUFBUTtpQkFDakI7Z0JBQ0QsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM1QixxQkFBcUIsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFO2FBQzdELENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLDhGQUE4RjtZQUM5RixnRkFBZ0Y7WUFDaEYsbUZBQW1GO1lBQ25GLDRFQUE0RTtZQUM1RSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxRSxvRkFBb0Y7Z0JBQ3BGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLDJCQUFlLEVBQUUsQ0FBQztvQkFDcEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87eUJBQzVDLEtBQUssQ0FBQywyQkFBZSxHQUFHLENBQUMsQ0FBQzt5QkFDMUIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUU3QyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDcEMscUJBQXFCLENBQUMsVUFBVSxDQUM5QixxQkFBcUIsQ0FBQyxHQUFHLEVBQ3pCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsNEJBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDeEcsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7Z0JBRUQsMEVBQTBFO2dCQUMxRSwwRUFBMEU7Z0JBQzFFLHdEQUF3RDtnQkFDeEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztvQkFDaEQsTUFBTSxFQUFFLHlCQUF5QjtvQkFDakMsYUFBYSxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUNoQyxTQUFTLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDekcsQ0FBQyxDQUFDO2dCQUNILHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUV4RSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUNyQyxNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQ3BDLHNCQUF1QixDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7d0JBQzVELHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNyRCxDQUFDLENBQ0gsQ0FBQztvQkFDRixxQkFBcUIsQ0FBQyxHQUFHLENBQ3ZCLHNCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDakcsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7Z0JBQ2pELE9BQU87b0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3BCLEVBQUUsRUFBRTt3QkFDRixNQUFNLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7d0JBQzVCLFlBQVksRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztxQkFDekM7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsSUFBSSxDQUFDLFFBQVE7d0JBQ2hCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLDJCQUFlLEdBQUcsQ0FBQyxDQUFDO3FCQUM3RDtvQkFDRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzVCLHFCQUFxQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUU7aUJBQzdELENBQUM7WUFDSixDQUFDO1lBRUQsaUZBQWlGO1lBQ2pGLDBGQUEwRjtZQUMxRix5RUFBeUU7WUFDekUsd0VBQXdFO1lBQ3hFLDBFQUEwRTtZQUMxRSxrREFBa0Q7WUFDbEQsZ0ZBQWdGO1lBQ2hGLGdGQUFnRjtZQUNoRiw4RUFBOEU7WUFDOUUsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDNUUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FDbEQsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksc0JBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDN0MsSUFBSSxzQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUNqQixDQUFDO2dCQUNGLDZEQUE2RDtnQkFDN0QsNEVBQTRFO2dCQUM1RSxrRUFBa0U7Z0JBQ2xFLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7b0JBQ2hELE1BQU0sRUFBRSx5QkFBeUI7b0JBQ2pDLGFBQWEsRUFBRSxDQUFDLGVBQWUsQ0FBQztvQkFDaEMsU0FBUyxFQUFFLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDbEcsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7b0JBQ3JDLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7d0JBQzdELHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNyRCxDQUFDLENBQUM7b0JBQ0gscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN4RyxDQUFDLENBQUMsQ0FBQztnQkFDSCw0RUFBNEU7Z0JBQzVFLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7Z0JBQ2pELE9BQU87b0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3BCLEVBQUUsRUFBRTt3QkFDRixNQUFNLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7d0JBQzVCLFlBQVksRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztxQkFDekM7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEdBQUcsSUFBSSxDQUFDLFFBQVE7cUJBQ2pCO29CQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDNUIscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRTtpQkFDN0QsQ0FBQztZQUNKLENBQUM7WUFFRCxzRkFBc0Y7WUFDdEYsK0dBQStHO1lBQy9HLGdIQUFnSDtZQUNoSCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSwyQkFBZSxFQUFFLENBQUM7Z0JBQ3BELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO3FCQUM1QyxLQUFLLENBQUMsMkJBQWUsR0FBRyxDQUFDLENBQUM7cUJBQzFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFFN0MsNEdBQTRHO2dCQUM1Ryx3R0FBd0c7Z0JBQ3hHLDRHQUE0RztnQkFDNUcsd0JBQXdCO2dCQUN4QixPQUFPLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDcEMscUJBQXFCLENBQUMsVUFBVSxDQUM5QixxQkFBcUIsQ0FBQyxHQUFHLEVBQ3pCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsNEJBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDeEcsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FDcEMsc0JBQXVCLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtvQkFDNUQscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3JELENBQUMsQ0FDSCxDQUFDO2dCQUNGLHFCQUFxQixDQUFDLEdBQUcsQ0FDdkIsc0JBQXVCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUNqRyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7WUFDL0MsT0FBTztnQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDcEIsRUFBRSxFQUFFO29CQUNGLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztvQkFDMUIsWUFBWSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO2lCQUN2QztnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsR0FBRyxJQUFJLENBQUMsUUFBUTtvQkFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsMkJBQWUsR0FBRyxDQUFDLENBQUM7aUJBQzdEO2dCQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDNUIscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQzdHLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBN2JELDBDQTZiQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJhc2VLZXksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgUmVjaXBpZW50LCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBTdWlUcmFuc2FjdGlvbiwgU3VpVHJhbnNhY3Rpb25UeXBlLCBUcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNmZXJUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNmZXJUcmFuc2FjdGlvbic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBJbnB1dHMsXG4gIFRyYW5zYWN0aW9ucyBhcyBUcmFuc2FjdGlvbnNDb25zdHJ1Y3RvcixcbiAgVHJhbnNhY3Rpb25CbG9jayBhcyBQcm9ncmFtbWluZ1RyYW5zYWN0aW9uQmxvY2tCdWlsZGVyLFxuICBUcmFuc2FjdGlvbkFyZ3VtZW50LFxufSBmcm9tICcuL215c3RlbmxhYi9idWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IE1BWF9DT01NQU5EX0FSR1MsIE1BWF9HQVNfT0JKRUNUUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcjxUcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gIHByb3RlY3RlZCBfcmVjaXBpZW50czogUmVjaXBpZW50W107XG4gIC8qKlxuICAgKiBCYWxhbmNlIGhlbGQgaW4gdGhlIFN1aSBhZGRyZXNzIGJhbGFuY2Ugc3lzdGVtIChub3QgaW4gY29pbiBvYmplY3RzKS5cbiAgICogV2hlbiBzZXQsIHRoaXMgYW1vdW50IGlzIGluY2x1ZGVkIGluIHRoZSB0b3RhbCBhdmFpbGFibGUgYmFsYW5jZSBmb3IgdHJhbnNmZXIuXG4gICAqIE5vdGU6IFN1aSBkb2VzIE5PVCBhdXRvbWF0aWNhbGx5IG1lcmdlIGFkZHJlc3MgYmFsYW5jZSBpbnRvIHRoZSBnYXMgY29pbiB3aGVuXG4gICAqIGdhc0RhdGEucGF5bWVudCBpcyBub24tZW1wdHkuIFBhdGggMmMgZXhwbGljaXRseSByZWRlZW1zIGl0IHZpYSByZWRlZW1fZnVuZHNcbiAgICogYW5kIG1lcmdlcyBpdCBpbnRvIHRoZSBnYXMgY29pbiBiZWZvcmUgc3BsaXR0aW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9mdW5kc0luQWRkcmVzc0JhbGFuY2U6IEJpZ051bWJlciA9IG5ldyBCaWdOdW1iZXIoMCk7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zZmVyVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gIH1cblxuICBzZW5kKHJlY2lwaWVudHM6IFJlY2lwaWVudFtdKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVJlY2lwaWVudHMocmVjaXBpZW50cyk7XG4gICAgdGhpcy5fcmVjaXBpZW50cyA9IHJlY2lwaWVudHM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBhbW91bnQgb2YgZnVuZHMgaGVsZCBpbiB0aGUgU3VpIGFkZHJlc3MgYmFsYW5jZSBzeXN0ZW0gZm9yIHRoaXMgc2VuZGVyLlxuICAgKiBUaGlzIGlzIHRoZSBgZnVuZHNJbkFkZHJlc3NCYWxhbmNlYCB2YWx1ZSBmcm9tIHRoZSBgc3VpeF9nZXRCYWxhbmNlYCBSUEMgcmVzcG9uc2UuXG4gICAqIEl0IGlzIGFkZGVkIHRvIHRoZSBjb2luIG9iamVjdCBiYWxhbmNlcyB3aGVuIGNvbXB1dGluZyB0b3RhbCBhdmFpbGFibGUgZnVuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgLSBhbW91bnQgaW4gTUlTVCBoZWxkIGluIGFkZHJlc3MgYmFsYW5jZVxuICAgKi9cbiAgZnVuZHNJbkFkZHJlc3NCYWxhbmNlKGFtb3VudDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlID0gbmV3IEJpZ051bWJlcihhbW91bnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRvdGFsIGF2YWlsYWJsZSBiYWxhbmNlOiBzdW0gb2YgYWxsIGdhcyBwYXltZW50IGNvaW4gb2JqZWN0XG4gICAqIGJhbGFuY2VzIHBsdXMgYW55IGZ1bmRzIGhlbGQgaW4gdGhlIGFkZHJlc3MgYmFsYW5jZSBzeXN0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBjb2luT2JqZWN0c0JhbGFuY2UgLSBzdW0gb2YgYmFsYW5jZXMgZnJvbSBnYXNEYXRhLnBheW1lbnQgY29pbiBvYmplY3RzXG4gICAqL1xuICB0b3RhbEF2YWlsYWJsZUJhbGFuY2UoY29pbk9iamVjdHNCYWxhbmNlOiBCaWdOdW1iZXIpOiBCaWdOdW1iZXIge1xuICAgIHJldHVybiBjb2luT2JqZWN0c0JhbGFuY2UucGx1cyh0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zZmVyVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uLnN1aVRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVUcmFuc2FjdGlvbkZpZWxkcygpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHNpZ24oa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRTdWlUcmFuc2FjdGlvbih0aGlzLmJ1aWxkU3VpVHJhbnNhY3Rpb24oKSk7XG4gICAgc3VwZXIuc2lnbihrZXkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uPFRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2ZlclRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPFRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+PiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRTdWlUcmFuc2FjdGlvbih0aGlzLmJ1aWxkU3VpVHJhbnNhY3Rpb24oKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi50cmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuXG4gICAgaWYgKHRoaXMuX3NpZ25lcikge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5zaWduKHRoaXMuX3NpZ25lcik7XG4gICAgfVxuXG4gICAgdGhpcy5fc2lnbmF0dXJlcy5mb3JFYWNoKChzaWduYXR1cmUpID0+IHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uYWRkU2lnbmF0dXJlKHNpZ25hdHVyZS5wdWJsaWNLZXksIHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2ZlclRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcblxuICAgIGlmICh0eC5zaWduYXR1cmUgJiYgdHguc2lnbmF0dXJlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbdHguc3VpU2lnbmF0dXJlXTtcbiAgICB9XG5cbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0aGlzLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyKTtcbiAgICB0aGlzLnNlbmRlcih0eERhdGEuc2VuZGVyKTtcbiAgICB0aGlzLmdhc0RhdGEodHhEYXRhLmdhc0RhdGEpO1xuXG4gICAgaWYgKHR4RGF0YS5leHBpcmF0aW9uICYmICEoJ05vbmUnIGluIHR4RGF0YS5leHBpcmF0aW9uKSkge1xuICAgICAgdGhpcy5fZXhwaXJhdGlvbiA9IHR4RGF0YS5leHBpcmF0aW9uO1xuICAgIH1cblxuICAgIGlmICh0eERhdGEuaW5wdXRPYmplY3RzKSB7XG4gICAgICB0aGlzLmlucHV0T2JqZWN0cyh0eERhdGEuaW5wdXRPYmplY3RzKTtcbiAgICB9XG5cbiAgICAvLyBSZWNvbnN0cnVjdCBmdW5kc0luQWRkcmVzc0JhbGFuY2UgZnJvbSBCYWxhbmNlV2l0aGRyYXdhbCBpbnB1dCBpZiBwcmVzZW50LlxuICAgIC8vIEFmdGVyIEJDUyBkZXNlcmlhbGl6YXRpb24gaW5wdXRzIGFyZSBDYWxsQXJnIGZvcm1hdDogeyBCYWxhbmNlV2l0aGRyYXdhbDogey4uLn0gfVxuICAgIC8vIER1cmluZyBidWlsZGluZyB0aGV5IGFyZSBUcmFuc2FjdGlvbkJsb2NrSW5wdXQgZm9ybWF0OiB7IGtpbmQ6J0lucHV0JywgdmFsdWU6IHsgQmFsYW5jZVdpdGhkcmF3YWw6IHsuLi59IH0gfVxuICAgIGNvbnN0IHdpdGhkcmF3YWxJbnB1dCA9ICh0eC5zdWlUcmFuc2FjdGlvbj8udHg/LmlucHV0cyBhcyBhbnlbXSk/LmZpbmQoXG4gICAgICAoaW5wdXQ6IGFueSkgPT5cbiAgICAgICAgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgJ0JhbGFuY2VXaXRoZHJhd2FsJyBpbiBpbnB1dCkgfHxcbiAgICAgICAgKGlucHV0Py52YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQ/LnZhbHVlID09PSAnb2JqZWN0JyAmJiAnQmFsYW5jZVdpdGhkcmF3YWwnIGluIChpbnB1dC52YWx1ZSA/PyB7fSkpXG4gICAgKTtcbiAgICBpZiAod2l0aGRyYXdhbElucHV0KSB7XG4gICAgICBjb25zdCBidyA9IHdpdGhkcmF3YWxJbnB1dC5CYWxhbmNlV2l0aGRyYXdhbCA/PyB3aXRoZHJhd2FsSW5wdXQudmFsdWU/LkJhbGFuY2VXaXRoZHJhd2FsO1xuICAgICAgdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlID0gbmV3IEJpZ051bWJlcihTdHJpbmcoYncucmVzZXJ2YXRpb24/Lk1heEFtb3VudFU2NCA/PyBidy5hbW91bnQpKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGllbnRzID0gdXRpbHMuZ2V0UmVjaXBpZW50cyh0eC5zdWlUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5zZW5kKHJlY2lwaWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbGwgZmllbGRzIGFyZSBkZWZpbmVkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVHJhbnNhY3Rpb25GaWVsZHMoKTogdm9pZCB7XG4gICAgYXNzZXJ0KHRoaXMuX3R5cGUsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3R5cGUgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl9zZW5kZXIsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3NlbmRlciBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgYXNzZXJ0KFxuICAgICAgdGhpcy5fcmVjaXBpZW50cyAmJiB0aGlzLl9yZWNpcGllbnRzLmxlbmd0aCA+IDAsXG4gICAgICBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdhdCBsZWFzdCBvbmUgcmVjaXBpZW50IGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpXG4gICAgKTtcbiAgICBhc3NlcnQodGhpcy5fZ2FzRGF0YSwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignZ2FzRGF0YSBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgdGhpcy52YWxpZGF0ZUdhc0RhdGEodGhpcy5fZ2FzRGF0YSk7XG5cbiAgICAvLyBJZiBpbnB1dE9iamVjdHMgYXJlIHByb3ZpZGVkLCB2YWxpZGF0ZSB0aGVtXG4gICAgaWYgKHRoaXMuX2lucHV0T2JqZWN0cyAmJiB0aGlzLl9pbnB1dE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52YWxpZGF0ZUlucHV0T2JqZWN0c0Jhc2UodGhpcy5faW5wdXRPYmplY3RzKTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGZ1bmRzSW5BZGRyZXNzQmFsYW5jZSBpcyBzZXQsIHZhbGlkYXRlIHRoYXQgdG90YWwgcmVjaXBpZW50IGFtb3VudFxuICAgIC8vIGRvZXMgbm90IGV4Y2VlZCBhdmFpbGFibGUgYWRkcmVzcyBiYWxhbmNlLiBDb2luIG9iamVjdCBiYWxhbmNlcyBhcmUgbm90XG4gICAgLy8gc3RvcmVkIGluIHRoZSBidWlsZGVyIChnYXNEYXRhLnBheW1lbnQgaG9sZHMgb25seSBPYmplY3RSZWZzKSwgc28gb25seVxuICAgIC8vIHRoZSBhZGRyZXNzIGJhbGFuY2UgcG9ydGlvbiBjYW4gYmUgY3Jvc3MtY2hlY2tlZCBoZXJlLlxuICAgIGlmICh0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UuZ3QoMCkpIHtcbiAgICAgIGNvbnN0IHRvdGFsUmVjaXBpZW50QW1vdW50ID0gdGhpcy5fcmVjaXBpZW50cy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHIpID0+IGFjYy5wbHVzKG5ldyBCaWdOdW1iZXIoci5hbW91bnQpKSxcbiAgICAgICAgbmV3IEJpZ051bWJlcigwKVxuICAgICAgKTtcbiAgICAgIGFzc2VydCh0b3RhbFJlY2lwaWVudEFtb3VudC5ndCgwKSwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcigndG90YWwgcmVjaXBpZW50IGFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0cmFuc2ZlciBwcm9ncmFtbWFibGUgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEZvdXIgYnVpbGQgcGF0aHM6XG4gICAqXG4gICAqIFBhdGggMWEg4oCUIFNwb25zb3JlZCB3aXRoIGNvaW4gb2JqZWN0cyAoc2VuZGVyIOKJoCBnYXNEYXRhLm93bmVyLCBpbnB1dE9iamVjdHMgcHJvdmlkZWQpOlxuICAgKiAgIFtvcHRpb25hbCB3aXRoZHJhd2FsKGZ1bmRzSW5BZGRyZXNzQmFsYW5jZSkg4oaSIHJlZGVlbV9mdW5kcyDihpIgQ29pbjxTVUk+XVxuICAgKiAgIE1lcmdlQ29pbnMoaW5wdXRPYmplY3RbMF0sIFtpbnB1dE9iamVjdFsxLi5dLCBhZGRyQ29pbj9dKVxuICAgKiAgIFNwbGl0Q29pbnMobWVyZ2VkT2JqZWN0LCBbYW1vdW50XSkg4oaSIFRyYW5zZmVyT2JqZWN0c1xuICAgKiAgIEhhbmRsZXMgQ2FzZXMgNCAoY29pbnMgb25seSksIDYgKGNvaW5zLCBzcG9uc29yIGFkZHItYmFsIGdhcyksIDggKGNvaW5zK2FkZHItYmFsKS5cbiAgICpcbiAgICogUGF0aCAxYiDigJQgU3BvbnNvcmVkLCBhZGRyZXNzIGJhbGFuY2Ugb25seSAoc2VuZGVyIOKJoCBnYXNEYXRhLm93bmVyLCBubyBpbnB1dE9iamVjdHMpOlxuICAgKiAgIHdpdGhkcmF3YWwoZnVuZHNJbkFkZHJlc3NCYWxhbmNlKSDihpIgcmVkZWVtX2Z1bmRzIOKGkiBDb2luPFNVST5cbiAgICogICBTcGxpdENvaW5zKGFkZHJDb2luLCBbYW1vdW50XSkg4oaSIFRyYW5zZmVyT2JqZWN0c1xuICAgKiAgIEhhbmRsZXMgQ2FzZSA1IChzcG9uc29yIGNvaW4tb2JqZWN0IGdhcykgYW5kIENhc2UgNy9QaGFzZS00YiAoc3BvbnNvciBhZGRyLWJhbCBnYXMpLlxuICAgKiAgIENhbGxlciBtdXN0IHNldCBWYWxpZER1cmluZyBleHBpcmF0aW9uIHdoZW4gZ2FzRGF0YS5wYXltZW50ID0gW10gKENhc2VzIDcsIDkpLlxuICAgKlxuICAgKiBQYXRoIDJhIOKAlCBTZWxmLXBheSwgY29pbiBvYmplY3RzIG9ubHkgKHNlbmRlciA9PT0gZ2FzRGF0YS5vd25lciwgcGF5bWVudCBub24tZW1wdHksIGZ1bmRzSW5BZGRyZXNzQmFsYW5jZT09MCk6XG4gICAqICAgU3BsaXRDb2lucyhHYXNDb2luLCBbYW1vdW50XSkg4oaSIFRyYW5zZmVyT2JqZWN0c1xuICAgKiAgIEhhbmRsZXMgQ2FzZSAxIChjb2lucyBvbmx5KS5cbiAgICpcbiAgICogUGF0aCAyYiDigJQgU2VsZi1wYXksIGFkZHJlc3MtYmFsYW5jZSBvbmx5IChzZW5kZXIgPT09IGdhc0RhdGEub3duZXIsIHBheW1lbnQ9PVtdLCBmdW5kc0luQWRkcmVzc0JhbGFuY2U+MCk6XG4gICAqICAgd2l0aGRyYXdhbCh0b3RhbFJlY2lwaWVudEFtb3VudCkg4oaSIHJlZGVlbV9mdW5kcyDihpIgQ29pbjxTVUk+XG4gICAqICAgU3BsaXRDb2lucyhhZGRyQ29pbiwgW2Ftb3VudF0pIOKGkiBUcmFuc2Zlck9iamVjdHNcbiAgICogICBNZXJnZUNvaW5zKEdhc0NvaW4sIFthZGRyQ29pbl0pICAg4oaQIGRlc3Ryb3lzIDAtYmFsYW5jZSBhZGRyQ29pbjsgZ2FzIHBhaWQgZnJvbSBhY2N1bXVsYXRvciByZW1haW5kZXJcbiAgICogICBIYW5kbGVzIENhc2UgMiAoYWRkci1iYWwgb25seSwgY2FsbGVyIHNldHMgVmFsaWREdXJpbmcpLlxuICAgKiAgIE5PVEU6IFNwbGl0Q29pbnMoR2FzQ29pbiwgW2Ftb3VudF0pIGRvZXMgTk9UIHdvcmsgaGVyZSDigJQgd2l0aCBwYXltZW50PVtdLCBHYXNDb2luIG9ubHlcbiAgICogICBjYXJyaWVzIHVwIHRvIGdhcy1idWRnZXQtd29ydGggb2YgYmFsYW5jZSBmb3IgUFRCIG9wZXJhdGlvbnMsIG5vdCB0aGUgZnVsbCBhZGRyZXNzIGJhbGFuY2UuXG4gICAqXG4gICAqIFBhdGggMmMg4oCUIFNlbGYtcGF5LCBtaXhlZCAoc2VuZGVyID09PSBnYXNEYXRhLm93bmVyLCBnYXNEYXRhLnBheW1lbnQgbm9uLWVtcHR5IEFORCBmdW5kc0luQWRkcmVzc0JhbGFuY2UgPiAwKTpcbiAgICogICBTdWkgZG9lcyBOT1QgYXV0b21hdGljYWxseSBtZXJnZSBhZGRyZXNzIGJhbGFuY2UgaW50byBnYXMgY29pbiB3aGVuIHBheW1lbnQgaXMgbm9uLWVtcHR5LlxuICAgKiAgIHdpdGhkcmF3YWwoZnVuZHNJbkFkZHJlc3NCYWxhbmNlKSDihpIgcmVkZWVtX2Z1bmRzIOKGkiBDb2luPFNVST5cbiAgICogICBNZXJnZUNvaW5zKEdhc0NvaW4sIFthZGRyQ29pbl0pXG4gICAqICAgU3BsaXRDb2lucyhHYXNDb2luLCBbYW1vdW50XSkg4oaSIFRyYW5zZmVyT2JqZWN0c1xuICAgKiAgIEhhbmRsZXMgQ2FzZSAzIChtaXhlZCBmdW5kcyDigJQgY29pbiBvYmplY3RzICsgYWRkcmVzcyBiYWxhbmNlLCBzZWxmLXBheSkuXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZFN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPFRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLnZhbGlkYXRlVHJhbnNhY3Rpb25GaWVsZHMoKTtcbiAgICBjb25zdCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIgPSBuZXcgUHJvZ3JhbW1pbmdUcmFuc2FjdGlvbkJsb2NrQnVpbGRlcigpO1xuXG4gICAgaWYgKHRoaXMuX3NlbmRlciAhPT0gdGhpcy5fZ2FzRGF0YS5vd25lciAmJiB0aGlzLl9pbnB1dE9iamVjdHMgJiYgdGhpcy5faW5wdXRPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFBhdGggMTogc3BvbnNvcmVkIHRyYW5zYWN0aW9uLlxuICAgICAgLy8gVGhlIGZlZSBwYXllciAoZ2FzRGF0YS5vd25lcikgcGF5cyBnYXMuIFRoZSBzZW5kZXIncyBmdW5kcyBjb21lIGZyb206XG4gICAgICAvLyAgIC0gY29pbiBvYmplY3RzIChpbnB1dE9iamVjdHMpXG4gICAgICAvLyAgIC0gYWRkcmVzcyBiYWxhbmNlIHZpYSB0eC53aXRoZHJhd2FsKCkgKyAweDI6OmNvaW46OnJlZGVlbV9mdW5kc1xuICAgICAgY29uc3QgaW5wdXRPYmplY3RzOiBUcmFuc2FjdGlvbkFyZ3VtZW50W10gPSB0aGlzLl9pbnB1dE9iamVjdHMubWFwKChvYmplY3QpID0+XG4gICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5vYmplY3QoSW5wdXRzLk9iamVjdFJlZihvYmplY3QpKVxuICAgICAgKTtcblxuICAgICAgLy8gSWYgdGhlIHNlbmRlciBhbHNvIGhhcyBhZGRyZXNzIGJhbGFuY2UsIHdpdGhkcmF3IGl0IGFzIGEgQ29pbjxTVUk+IGFuZFxuICAgICAgLy8gbWVyZ2UgaXQgaW50byB0aGUgY29pbi1vYmplY3QgcG9vbCBiZWZvcmUgc3BsaXR0aW5nIGZvciByZWNpcGllbnRzLlxuICAgICAgaWYgKHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS5ndCgwKSkge1xuICAgICAgICBjb25zdCBbYWRkckNvaW5dID0gcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm1vdmVDYWxsKHtcbiAgICAgICAgICB0YXJnZXQ6ICcweDI6OmNvaW46OnJlZGVlbV9mdW5kcycsXG4gICAgICAgICAgdHlwZUFyZ3VtZW50czogWycweDI6OnN1aTo6U1VJJ10sXG4gICAgICAgICAgYXJndW1lbnRzOiBbcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLndpdGhkcmF3YWwoeyBhbW91bnQ6IEJpZ0ludCh0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UudG9GaXhlZCgpKSB9KV0sXG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dE9iamVjdHMucHVzaChhZGRyQ29pbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lcmdlZE9iamVjdCA9IGlucHV0T2JqZWN0cy5zaGlmdCgpIGFzIFRyYW5zYWN0aW9uQXJndW1lbnQ7XG4gICAgICBpZiAoaW5wdXRPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm1lcmdlQ29pbnMobWVyZ2VkT2JqZWN0LCBpbnB1dE9iamVjdHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5fcmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc3BsaXRPYmplY3QgPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuc3BsaXRDb2lucyhtZXJnZWRPYmplY3QsIFtcbiAgICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIucHVyZShCaWdJbnQocmVjaXBpZW50LmFtb3VudCkpLFxuICAgICAgICBdKTtcbiAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnRyYW5zZmVyT2JqZWN0cyhbc3BsaXRPYmplY3RdLCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KHJlY2lwaWVudC5hZGRyZXNzKSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4RGF0YSA9IHByb2dyYW1tYWJsZVR4QnVpbGRlci5ibG9ja0RhdGE7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0aGlzLl90eXBlLFxuICAgICAgICBzZW5kZXI6IHRoaXMuX3NlbmRlcixcbiAgICAgICAgdHg6IHtcbiAgICAgICAgICBpbnB1dHM6IFsuLi50eERhdGEuaW5wdXRzXSxcbiAgICAgICAgICB0cmFuc2FjdGlvbnM6IFsuLi50eERhdGEudHJhbnNhY3Rpb25zXSxcbiAgICAgICAgfSxcbiAgICAgICAgZ2FzRGF0YToge1xuICAgICAgICAgIC4uLnRoaXMuX2dhc0RhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIGV4cGlyYXRpb246IHRoaXMuX2V4cGlyYXRpb24sXG4gICAgICAgIGZ1bmRzSW5BZGRyZXNzQmFsYW5jZTogdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLmd0KDApID8gdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLnRvRml4ZWQoKSA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLl9zZW5kZXIgIT09IHRoaXMuX2dhc0RhdGEub3duZXIgJiYgdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLmd0KDApKSB7XG4gICAgICAvLyBQYXRoIDFiOiBzcG9uc29yZWQsIGFkZHJlc3MgYmFsYW5jZSBvbmx5IOKAlCBubyBjb2luIGlucHV0T2JqZWN0cy5cbiAgICAgIC8vIFNlbmRlcidzIGZ1bmRzIGNvbWUgZW50aXJlbHkgZnJvbSBhZGRyZXNzIGJhbGFuY2U7IGdhcyBpcyBwYWlkIGJ5IHRoZSBzcG9uc29yLlxuICAgICAgLy8gd2l0aGRyYXdhbChmdW5kc0luQWRkcmVzc0JhbGFuY2UpIOKGkiByZWRlZW1fZnVuZHMg4oaSIENvaW48U1VJPiDihpIgU3BsaXRDb2lucyDihpIgVHJhbnNmZXJPYmplY3RzXG4gICAgICBjb25zdCBbYWRkckNvaW5dID0gcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm1vdmVDYWxsKHtcbiAgICAgICAgdGFyZ2V0OiAnMHgyOjpjb2luOjpyZWRlZW1fZnVuZHMnLFxuICAgICAgICB0eXBlQXJndW1lbnRzOiBbJzB4Mjo6c3VpOjpTVUknXSxcbiAgICAgICAgYXJndW1lbnRzOiBbcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLndpdGhkcmF3YWwoeyBhbW91bnQ6IEJpZ0ludCh0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UudG9GaXhlZCgpKSB9KV0sXG4gICAgICB9KTtcbiAgICAgIC8vIGFkZHJDb2luIGlzIGEgY29tbWFuZCByZXN1bHQgKGZyb20gcmVkZWVtX2Z1bmRzKSBhbmQgbXVzdCBiZSBleHBsaWNpdGx5IGNvbnN1bWVkLlxuICAgICAgLy8gU3BsaXQgZm9yIGV2ZXJ5IHJlY2lwaWVudCDigJQga2VlcHMgYSAxOjEgU3BsaXRDb2luc+KGlFRyYW5zZmVyT2JqZWN0cyBzdHJ1Y3R1cmUgZm9yIHRoZVxuICAgICAgLy8gdHJhbnNhY3Rpb24gcGFyc2VyLiAgQWZ0ZXIgYWxsIHNwbGl0cywgY29uc3VtZSB0aGUgc291cmNlIGNvaW4gZXhwbGljaXRseTpcbiAgICAgIC8vICAgLSBJZiB0aGVyZSBpcyBjaGFuZ2UgKGZ1bmRzSW5BZGRyZXNzQmFsYW5jZSA+IHRvdGFsIHJlY2lwaWVudCBhbW91bnQpOiByZXR1cm4gYWRkckNvaW5cbiAgICAgIC8vICAgICB0byBzZW5kZXIgdmlhIFRyYW5zZmVyT2JqZWN0cy5cbiAgICAgIC8vICAgLSBJZiBzZW5kLWFsbCAobm8gY2hhbmdlKTogYWRkckNvaW4gaGFzIDAgYmFsYW5jZTsgZGVzdHJveSBpdCBieSBtZXJnaW5nIGludG8gdGhlXG4gICAgICAvLyAgICAgc3BvbnNvcidzIGdhcyBjb2luIChhIDAtdmFsdWUgbWVyZ2UgaXMgdmFsaWQgaW4gU3VpIGFuZCBkZWxldGVzIHRoZSBzb3VyY2Ugb2JqZWN0KS5cbiAgICAgIGNvbnN0IHRvdGFsUmVjaXBpZW50QW1vdW50ID0gdGhpcy5fcmVjaXBpZW50cy5yZWR1Y2UoKHN1bSwgcikgPT4gc3VtLnBsdXMoci5hbW91bnQpLCBuZXcgQmlnTnVtYmVyKDApKTtcbiAgICAgIGNvbnN0IGhhc0NoYW5nZSA9IHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS5ndCh0b3RhbFJlY2lwaWVudEFtb3VudCk7XG5cbiAgICAgIHRoaXMuX3JlY2lwaWVudHMuZm9yRWFjaCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHNwbGl0T2JqZWN0ID0gcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnNwbGl0Q29pbnMoYWRkckNvaW4sIFtcbiAgICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIucHVyZShCaWdJbnQocmVjaXBpZW50LmFtb3VudCkpLFxuICAgICAgICBdKTtcbiAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnRyYW5zZmVyT2JqZWN0cyhbc3BsaXRPYmplY3RdLCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KHJlY2lwaWVudC5hZGRyZXNzKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhc0NoYW5nZSkge1xuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlbWFpbmluZyBiYWxhbmNlIChjaGFuZ2UpIHRvIHRoZSBzZW5kZXIuXG4gICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci50cmFuc2Zlck9iamVjdHMoW2FkZHJDb2luXSwgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm9iamVjdCh0aGlzLl9zZW5kZXIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNlbmQtYWxsOiBhZGRyQ29pbiBoYXMgMCBiYWxhbmNlIGFmdGVyIGFsbCBzcGxpdHMuICBNZXJnZSBpdCBpbnRvIHRoZSBzcG9uc29yJ3MgZ2FzXG4gICAgICAgIC8vIGNvaW4gdG8gZGVzdHJveSB0aGUgemVyby1iYWxhbmNlIG9iamVjdCAoY29pbjo6am9pbiBhY2NlcHRzIGEgMC12YWx1ZSBzb3VyY2UpLlxuICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIubWVyZ2VDb2lucyhwcm9ncmFtbWFibGVUeEJ1aWxkZXIuZ2FzLCBbYWRkckNvaW5dKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR4RGF0YTFiID0gcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLmJsb2NrRGF0YTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHRoaXMuX3R5cGUsXG4gICAgICAgIHNlbmRlcjogdGhpcy5fc2VuZGVyLFxuICAgICAgICB0eDoge1xuICAgICAgICAgIGlucHV0czogWy4uLnR4RGF0YTFiLmlucHV0c10sXG4gICAgICAgICAgdHJhbnNhY3Rpb25zOiBbLi4udHhEYXRhMWIudHJhbnNhY3Rpb25zXSxcbiAgICAgICAgfSxcbiAgICAgICAgZ2FzRGF0YToge1xuICAgICAgICAgIC4uLnRoaXMuX2dhc0RhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIGV4cGlyYXRpb246IHRoaXMuX2V4cGlyYXRpb24sXG4gICAgICAgIGZ1bmRzSW5BZGRyZXNzQmFsYW5jZTogdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLnRvRml4ZWQoKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhdGggMmM6IHNlbGYtcGF5LCBtaXhlZCDigJQgY29pbiBvYmplY3RzIChnYXNEYXRhLnBheW1lbnQpIEFORCBhZGRyZXNzIGJhbGFuY2UgYm90aCBwcmVzZW50LlxuICAgICAgLy8gU3VpIGRvZXMgTk9UIGF1dG9tYXRpY2FsbHkgbWVyZ2UgZnVuZHNJbkFkZHJlc3NCYWxhbmNlIGludG8gdGhlIGdhcyBjb2luIHdoZW5cbiAgICAgIC8vIGdhc0RhdGEucGF5bWVudCBpcyBub24tZW1wdHkuIFdlIG11c3QgZXhwbGljaXRseSByZWRlZW0gdGhlIGFkZHJlc3MgYmFsYW5jZSBhcyBhXG4gICAgICAvLyBDb2luPFNVST4gYW5kIG1lcmdlIGl0IGludG8gdGhlIGdhcyBjb2luIGJlZm9yZSBzcGxpdHRpbmcgZm9yIHJlY2lwaWVudHMuXG4gICAgICBpZiAodGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLmd0KDApICYmIHRoaXMuX2dhc0RhdGEucGF5bWVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIE1lcmdlIGV4Y2VzcyBnYXMgcGF5bWVudCBvYmplY3RzIGZpcnN0IChzYW1lIG92ZXJmbG93IGxvZ2ljIGFzIFBhdGggMmEvMmIgYmVsb3cpLlxuICAgICAgICBpZiAodGhpcy5fZ2FzRGF0YS5wYXltZW50Lmxlbmd0aCA+PSBNQVhfR0FTX09CSkVDVFMpIHtcbiAgICAgICAgICBjb25zdCBnYXNQYXltZW50T2JqZWN0cyA9IHRoaXMuX2dhc0RhdGEucGF5bWVudFxuICAgICAgICAgICAgLnNsaWNlKE1BWF9HQVNfT0JKRUNUUyAtIDEpXG4gICAgICAgICAgICAubWFwKChvYmplY3QpID0+IElucHV0cy5PYmplY3RSZWYob2JqZWN0KSk7XG5cbiAgICAgICAgICB3aGlsZSAoZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm1lcmdlQ29pbnMoXG4gICAgICAgICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5nYXMsXG4gICAgICAgICAgICAgIGdhc1BheW1lbnRPYmplY3RzLnNwbGljZSgwLCBNQVhfQ09NTUFORF9BUkdTIC0gMSkubWFwKChvYmplY3QpID0+IHByb2dyYW1tYWJsZVR4QnVpbGRlci5vYmplY3Qob2JqZWN0KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVkZWVtIGFkZHJlc3MgYmFsYW5jZSBhcyBDb2luPFNVST4gYW5kIG1lcmdlIGludG8gdGhlIGdhcyBjb2luIHNvIHRoYXRcbiAgICAgICAgLy8gU3BsaXRDb2lucyhHYXNDb2luLCBbYW1vdW50XSkgY2FuIGRyYXcgZnJvbSB0aGUgZnVsbCBhdmFpbGFibGUgYmFsYW5jZTpcbiAgICAgICAgLy8gICBnYXMgY29pbiA9IHN1bShjb2luT2JqZWN0cykgKyBmdW5kc0luQWRkcmVzc0JhbGFuY2VcbiAgICAgICAgY29uc3QgW2FkZHJDb2luXSA9IHByb2dyYW1tYWJsZVR4QnVpbGRlci5tb3ZlQ2FsbCh7XG4gICAgICAgICAgdGFyZ2V0OiAnMHgyOjpjb2luOjpyZWRlZW1fZnVuZHMnLFxuICAgICAgICAgIHR5cGVBcmd1bWVudHM6IFsnMHgyOjpzdWk6OlNVSSddLFxuICAgICAgICAgIGFyZ3VtZW50czogW3Byb2dyYW1tYWJsZVR4QnVpbGRlci53aXRoZHJhd2FsKHsgYW1vdW50OiBCaWdJbnQodGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLnRvRml4ZWQoKSkgfSldLFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm1lcmdlQ29pbnMocHJvZ3JhbW1hYmxlVHhCdWlsZGVyLmdhcywgW2FkZHJDb2luXSk7XG5cbiAgICAgICAgdGhpcy5fcmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2luID0gcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLmFkZChcbiAgICAgICAgICAgIFRyYW5zYWN0aW9uc0NvbnN0cnVjdG9yLlNwbGl0Q29pbnMocHJvZ3JhbW1hYmxlVHhCdWlsZGVyLmdhcywgW1xuICAgICAgICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIucHVyZShCaWdJbnQocmVjaXBpZW50LmFtb3VudCkpLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5hZGQoXG4gICAgICAgICAgICBUcmFuc2FjdGlvbnNDb25zdHJ1Y3Rvci5UcmFuc2Zlck9iamVjdHMoW2NvaW5dLCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KHJlY2lwaWVudC5hZGRyZXNzKSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdHhEYXRhMmMgPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuYmxvY2tEYXRhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IHRoaXMuX3R5cGUsXG4gICAgICAgICAgc2VuZGVyOiB0aGlzLl9zZW5kZXIsXG4gICAgICAgICAgdHg6IHtcbiAgICAgICAgICAgIGlucHV0czogWy4uLnR4RGF0YTJjLmlucHV0c10sXG4gICAgICAgICAgICB0cmFuc2FjdGlvbnM6IFsuLi50eERhdGEyYy50cmFuc2FjdGlvbnNdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2FzRGF0YToge1xuICAgICAgICAgICAgLi4udGhpcy5fZ2FzRGF0YSxcbiAgICAgICAgICAgIHBheW1lbnQ6IHRoaXMuX2dhc0RhdGEucGF5bWVudC5zbGljZSgwLCBNQVhfR0FTX09CSkVDVFMgLSAxKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cGlyYXRpb246IHRoaXMuX2V4cGlyYXRpb24sXG4gICAgICAgICAgZnVuZHNJbkFkZHJlc3NCYWxhbmNlOiB0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UudG9GaXhlZCgpLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBQYXRoIDJiOiBzZWxmLXBheSwgYWRkcmVzcy1iYWxhbmNlIG9ubHkgKHBheW1lbnQ9W10sIGZ1bmRzSW5BZGRyZXNzQmFsYW5jZT4wKS5cbiAgICAgIC8vIFdpdGggcGF5bWVudD1bXSwgR2FzQ29pbiBpcyBiYWNrZWQgYnkgdGhlIGFkZHJlc3MgYWNjdW11bGF0b3Igb25seSBmb3IgZ2FzIHJlc2VydmF0aW9uO1xuICAgICAgLy8gaXQgZG9lcyBOT1QgZXhwb3NlIHRoZSBmdWxsIGFkZHJlc3MgYmFsYW5jZSBmb3IgU3BsaXRDb2lucy4gQXR0ZW1wdGluZ1xuICAgICAgLy8gU3BsaXRDb2lucyhHYXNDb2luLCBbbGFyZ2VfYW1vdW50XSkgd2l0aCBwYXltZW50PVtdIGFsd2F5cyBmYWlscyB3aXRoXG4gICAgICAvLyBJbnN1ZmZpY2llbnRDb2luQmFsYW5jZSBpbiBjb21tYW5kIDAgYmVjYXVzZSBHYXNDb2luIG9ubHkgY2FycmllcyB1cCB0b1xuICAgICAgLy8gZ2FzLWJ1ZGdldC13b3J0aCBvZiBiYWxhbmNlIGZvciBQVEIgb3BlcmF0aW9ucy5cbiAgICAgIC8vIEZpeDogdXNlIHdpdGhkcmF3YWwrcmVkZWVtX2Z1bmRzIHRvIG1hdGVyaWFsaXNlIHRoZSB0cmFuc2ZlciBhbW91bnQgYXMgYSBjb2luXG4gICAgICAvLyBvYmplY3QsIHNwbGl0IGZyb20gdGhhdCBjb2luLCB0aGVuIG1lcmdlIHRoZSAwLWJhbGFuY2UgcmVtYWluZGVyIGludG8gR2FzQ29pblxuICAgICAgLy8gKGRlc3Ryb3lpbmcgaXQpLiBUaGUgYWNjdW11bGF0b3IgcmV0YWlucyB0aGUgZ2FzIGJ1ZGdldCBmb3IgZ2FzIHNldHRsZW1lbnQuXG4gICAgICBpZiAodGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLmd0KDApICYmIHRoaXMuX2dhc0RhdGEucGF5bWVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3QgdG90YWxSZWNpcGllbnRBbW91bnQgPSB0aGlzLl9yZWNpcGllbnRzLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCByKSA9PiBhY2MucGx1cyhuZXcgQmlnTnVtYmVyKHIuYW1vdW50KSksXG4gICAgICAgICAgbmV3IEJpZ051bWJlcigwKVxuICAgICAgICApO1xuICAgICAgICAvLyBXaXRoZHJhdyBleGFjdGx5IHRoZSB0b3RhbCB0cmFuc2ZlciBhbW91bnQuIFRoZSBkaWZmZXJlbmNlXG4gICAgICAgIC8vIChmdW5kc0luQWRkcmVzc0JhbGFuY2UgLSB0b3RhbFJlY2lwaWVudEFtb3VudCDiiYggZ2FzQnVkZ2V0KSByZW1haW5zIGluIHRoZVxuICAgICAgICAvLyBhY2N1bXVsYXRvciBhbmQgaXMgY29uc3VtZWQgYnkgdGhlIGVtcHR5LXBheW1lbnQgZ2FzIG1lY2hhbmlzbS5cbiAgICAgICAgY29uc3QgW2FkZHJDb2luXSA9IHByb2dyYW1tYWJsZVR4QnVpbGRlci5tb3ZlQ2FsbCh7XG4gICAgICAgICAgdGFyZ2V0OiAnMHgyOjpjb2luOjpyZWRlZW1fZnVuZHMnLFxuICAgICAgICAgIHR5cGVBcmd1bWVudHM6IFsnMHgyOjpzdWk6OlNVSSddLFxuICAgICAgICAgIGFyZ3VtZW50czogW3Byb2dyYW1tYWJsZVR4QnVpbGRlci53aXRoZHJhd2FsKHsgYW1vdW50OiBCaWdJbnQodG90YWxSZWNpcGllbnRBbW91bnQudG9GaXhlZCgpKSB9KV0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZWNpcGllbnRzLmZvckVhY2goKHJlY2lwaWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNwbGl0T2JqZWN0ID0gcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnNwbGl0Q29pbnMoYWRkckNvaW4sIFtcbiAgICAgICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5wdXJlKEJpZ0ludChyZWNpcGllbnQuYW1vdW50KSksXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnRyYW5zZmVyT2JqZWN0cyhbc3BsaXRPYmplY3RdLCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KHJlY2lwaWVudC5hZGRyZXNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhZGRyQ29pbiBoYXMgMCBiYWxhbmNlIGFmdGVyIGFsbCBzcGxpdHM7IG1lcmdlIGludG8gR2FzQ29pbiB0byBkZWxldGUgaXQuXG4gICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5tZXJnZUNvaW5zKHByb2dyYW1tYWJsZVR4QnVpbGRlci5nYXMsIFthZGRyQ29pbl0pO1xuICAgICAgICBjb25zdCB0eERhdGEyYiA9IHByb2dyYW1tYWJsZVR4QnVpbGRlci5ibG9ja0RhdGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgICAgICBzZW5kZXI6IHRoaXMuX3NlbmRlcixcbiAgICAgICAgICB0eDoge1xuICAgICAgICAgICAgaW5wdXRzOiBbLi4udHhEYXRhMmIuaW5wdXRzXSxcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uczogWy4uLnR4RGF0YTJiLnRyYW5zYWN0aW9uc10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnYXNEYXRhOiB7XG4gICAgICAgICAgICAuLi50aGlzLl9nYXNEYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhwaXJhdGlvbjogdGhpcy5fZXhwaXJhdGlvbixcbiAgICAgICAgICBmdW5kc0luQWRkcmVzc0JhbGFuY2U6IHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS50b0ZpeGVkKCksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFBhdGggMmE6IHNlbGYtcGF5LCBjb2luIG9iamVjdHMgb25seSAocGF5bWVudCBub24tZW1wdHksIGZ1bmRzSW5BZGRyZXNzQmFsYW5jZT09MCkuXG4gICAgICAvLyBudW1iZXIgb2Ygb2JqZWN0cyBwYXNzZWQgYXMgZ2FzIHBheW1lbnQgc2hvdWxkIGJlIHN0cmljdGx5IGxlc3MgdGhhbiBgTUFYX0dBU19PQkpFQ1RTYC4gV2hlbiB0aGUgdHJhbnNhY3Rpb25cbiAgICAgIC8vIHJlcXVpcmVzIGEgbGFyZ2VyIG51bWJlciBvZiBpbnB1dHMgd2UgdXNlIHRoZSBtZXJnZSBjb21tYW5kIHRvIG1lcmdlIHRoZSByZXN0IG9mIHRoZSBvYmplY3RzIGludG8gdGhlIGdhc0NvaW5cbiAgICAgIGlmICh0aGlzLl9nYXNEYXRhLnBheW1lbnQubGVuZ3RoID49IE1BWF9HQVNfT0JKRUNUUykge1xuICAgICAgICBjb25zdCBnYXNQYXltZW50T2JqZWN0cyA9IHRoaXMuX2dhc0RhdGEucGF5bWVudFxuICAgICAgICAgIC5zbGljZShNQVhfR0FTX09CSkVDVFMgLSAxKVxuICAgICAgICAgIC5tYXAoKG9iamVjdCkgPT4gSW5wdXRzLk9iamVjdFJlZihvYmplY3QpKTtcblxuICAgICAgICAvLyBsaW1pdCBmb3IgdG90YWwgbnVtYmVyIG9mIGBhcmdzOiBDYWxsQXJnW11gIGZvciBhIHNpbmdsZSBjb21tYW5kIGlzIE1BWF9DT01NQU5EX0FSR1Mgc28gdGhlIG1heCBsZW5ndGggb2ZcbiAgICAgICAgLy8gYHNvdXJjZXNbXWAgZm9yIGEgYG1lcmdlQ29pbnMoZGVzdGluYXRpb24sIHNvdXJjZXNbXSlgIGNvbW1hbmQgaXMgTUFYX0NPTU1BTkRfQVJHUyAtIDEgKDEgdXNlZCB1cCBmb3JcbiAgICAgICAgLy8gYGRlc3RpbmF0aW9uYCkuIFdlIG5lZWQgdG8gY3JlYXRlIGEgdG90YWwgb2YgYGdhc1BheW1lbnRPYmplY3RzLyhNQVhfQ09NTUFORF9BUkdTIC0gMSlgIG1lcmdlIGNvbW1hbmRzIHRvXG4gICAgICAgIC8vIG1lcmdlIGFsbCB0aGUgb2JqZWN0c1xuICAgICAgICB3aGlsZSAoZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5tZXJnZUNvaW5zKFxuICAgICAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLmdhcyxcbiAgICAgICAgICAgIGdhc1BheW1lbnRPYmplY3RzLnNwbGljZSgwLCBNQVhfQ09NTUFORF9BUkdTIC0gMSkubWFwKChvYmplY3QpID0+IHByb2dyYW1tYWJsZVR4QnVpbGRlci5vYmplY3Qob2JqZWN0KSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlY2lwaWVudHMuZm9yRWFjaCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvaW4gPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuYWRkKFxuICAgICAgICAgIFRyYW5zYWN0aW9uc0NvbnN0cnVjdG9yLlNwbGl0Q29pbnMocHJvZ3JhbW1hYmxlVHhCdWlsZGVyLmdhcywgW1xuICAgICAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnB1cmUoQmlnSW50KHJlY2lwaWVudC5hbW91bnQpKSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuYWRkKFxuICAgICAgICAgIFRyYW5zYWN0aW9uc0NvbnN0cnVjdG9yLlRyYW5zZmVyT2JqZWN0cyhbY29pbl0sIHByb2dyYW1tYWJsZVR4QnVpbGRlci5vYmplY3QocmVjaXBpZW50LmFkZHJlc3MpKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB0eERhdGEgPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuYmxvY2tEYXRhO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgICAgc2VuZGVyOiB0aGlzLl9zZW5kZXIsXG4gICAgICAgIHR4OiB7XG4gICAgICAgICAgaW5wdXRzOiBbLi4udHhEYXRhLmlucHV0c10sXG4gICAgICAgICAgdHJhbnNhY3Rpb25zOiBbLi4udHhEYXRhLnRyYW5zYWN0aW9uc10sXG4gICAgICAgIH0sXG4gICAgICAgIGdhc0RhdGE6IHtcbiAgICAgICAgICAuLi50aGlzLl9nYXNEYXRhLFxuICAgICAgICAgIHBheW1lbnQ6IHRoaXMuX2dhc0RhdGEucGF5bWVudC5zbGljZSgwLCBNQVhfR0FTX09CSkVDVFMgLSAxKSxcbiAgICAgICAgfSxcbiAgICAgICAgZXhwaXJhdGlvbjogdGhpcy5fZXhwaXJhdGlvbixcbiAgICAgICAgZnVuZHNJbkFkZHJlc3NCYWxhbmNlOiB0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UuZ3QoMCkgPyB0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UudG9GaXhlZCgpIDogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { BaseKey, PublicKey as BasePublicKey, Signature, TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
2
|
import { SuiTransaction, TransactionExplanation, TransferProgrammableTransaction, TxData } from './iface';
|
|
4
3
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
@@ -51,5 +50,11 @@ export declare class TransferTransaction extends Transaction<TransferProgrammabl
|
|
|
51
50
|
* @returns {TransactionExplanation}
|
|
52
51
|
*/
|
|
53
52
|
explainTransferTransaction(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
|
|
53
|
+
/**
|
|
54
|
+
* Extracts the objects that were provided as inputs while building the transaction
|
|
55
|
+
* @param tx
|
|
56
|
+
* @returns {SuiObjectRef[]} Objects that are inputs for the transaction
|
|
57
|
+
*/
|
|
58
|
+
private getInputObjectsFromTx;
|
|
54
59
|
}
|
|
55
60
|
//# sourceMappingURL=transferTransaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferTransaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transferTransaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transferTransaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transferTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAGP,SAAS,IAAI,aAAa,EAC1B,SAAS,EAET,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1G,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAW,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AAY/E,qBAAa,mBAAoB,SAAQ,WAAW,CAAC,+BAA+B,CAAC;gBACvE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,IAAI,cAAc,IAAI,cAAc,CAAC,+BAA+B,CAAC,CAEpE;IAED,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,+BAA+B,CAAC,GAAG,IAAI;IAI5E,mBAAmB;IACnB,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,aAAa,IAAI,YAAY,EAAE;IAI/B,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IA6BhB,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAwB5C;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAIvD;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAuB5B;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAchD;;;;OAIG;IACI,SAAS,IAAI,MAAM;IA6D1B;;;;;OAKG;IACH,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;IAiB3G;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;CA+B9B"}
|