@bitgo/sdk-coin-sui 2.0.1 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/.eslintignore +1 -0
  2. package/CHANGELOG.md +37 -0
  3. package/dist/src/lib/constants.d.ts +3 -15
  4. package/dist/src/lib/constants.d.ts.map +1 -1
  5. package/dist/src/lib/constants.js +7 -20
  6. package/dist/src/lib/iface.d.ts +35 -181
  7. package/dist/src/lib/iface.d.ts.map +1 -1
  8. package/dist/src/lib/iface.js +11 -38
  9. package/dist/src/lib/index.d.ts +2 -0
  10. package/dist/src/lib/index.d.ts.map +1 -1
  11. package/dist/src/lib/index.js +6 -2
  12. package/dist/src/lib/keyPair.d.ts +4 -0
  13. package/dist/src/lib/keyPair.d.ts.map +1 -1
  14. package/dist/src/lib/keyPair.js +7 -10
  15. package/dist/src/lib/mystenlab/builder/Inputs.d.ts +66 -0
  16. package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -0
  17. package/dist/src/lib/mystenlab/builder/Inputs.js +56 -0
  18. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +616 -0
  19. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -0
  20. package/dist/src/lib/mystenlab/builder/TransactionBlock.js +260 -0
  21. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts +566 -0
  22. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -0
  23. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +171 -0
  24. package/dist/src/lib/mystenlab/builder/Transactions.d.ts +992 -0
  25. package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -0
  26. package/dist/src/lib/mystenlab/builder/Transactions.js +119 -0
  27. package/dist/src/lib/mystenlab/builder/bcs.d.ts +25 -0
  28. package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -0
  29. package/dist/src/lib/mystenlab/builder/bcs.js +141 -0
  30. package/dist/src/lib/mystenlab/builder/index.d.ts +5 -0
  31. package/dist/src/lib/mystenlab/builder/index.d.ts.map +1 -0
  32. package/dist/src/lib/mystenlab/builder/index.js +17 -0
  33. package/dist/src/lib/mystenlab/builder/serializer.d.ts +4 -0
  34. package/dist/src/lib/mystenlab/builder/serializer.d.ts.map +1 -0
  35. package/dist/src/lib/mystenlab/builder/serializer.js +101 -0
  36. package/dist/src/lib/mystenlab/builder/utils.d.ts +10 -0
  37. package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -0
  38. package/dist/src/lib/mystenlab/builder/utils.js +10 -0
  39. package/dist/src/lib/mystenlab/cryptography/hash.d.ts +8 -0
  40. package/dist/src/lib/mystenlab/cryptography/hash.d.ts.map +1 -0
  41. package/dist/src/lib/mystenlab/cryptography/hash.js +22 -0
  42. package/dist/src/lib/mystenlab/framework/framework.d.ts +93 -0
  43. package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -0
  44. package/dist/src/lib/mystenlab/framework/framework.js +138 -0
  45. package/dist/src/lib/mystenlab/framework/index.d.ts +3 -0
  46. package/dist/src/lib/mystenlab/framework/index.d.ts.map +1 -0
  47. package/dist/src/lib/mystenlab/framework/index.js +15 -0
  48. package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts +12 -0
  49. package/dist/src/lib/mystenlab/framework/sui-system-state.d.ts.map +1 -0
  50. package/dist/src/lib/mystenlab/framework/sui-system-state.js +19 -0
  51. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.d.ts +7 -0
  52. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.d.ts.map +1 -0
  53. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +119 -0
  54. package/dist/src/lib/mystenlab/types/coin.d.ts +89 -0
  55. package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -0
  56. package/dist/src/lib/mystenlab/types/coin.js +32 -0
  57. package/dist/src/lib/mystenlab/types/common.d.ts +45 -0
  58. package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -0
  59. package/dist/src/lib/mystenlab/types/common.js +84 -0
  60. package/dist/src/lib/mystenlab/types/events.d.ts +198 -0
  61. package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -0
  62. package/dist/src/lib/mystenlab/types/events.js +46 -0
  63. package/dist/src/lib/mystenlab/types/index.d.ts +9 -0
  64. package/dist/src/lib/mystenlab/types/index.d.ts.map +1 -0
  65. package/dist/src/lib/mystenlab/types/index.js +21 -0
  66. package/dist/src/lib/mystenlab/types/normalized.d.ts +254 -0
  67. package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -0
  68. package/dist/src/lib/mystenlab/types/normalized.js +111 -0
  69. package/dist/src/lib/mystenlab/types/objects.d.ts +806 -0
  70. package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -0
  71. package/dist/src/lib/mystenlab/types/objects.js +302 -0
  72. package/dist/src/lib/mystenlab/types/option.d.ts +8 -0
  73. package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -0
  74. package/dist/src/lib/mystenlab/types/option.js +14 -0
  75. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +111 -0
  76. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -0
  77. package/dist/src/lib/mystenlab/types/sui-bcs.js +107 -0
  78. package/dist/src/lib/mystenlab/types/transactions.d.ts +6703 -0
  79. package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -0
  80. package/dist/src/lib/mystenlab/types/transactions.js +405 -0
  81. package/dist/src/lib/mystenlab/types/validator.d.ts +641 -0
  82. package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -0
  83. package/dist/src/lib/mystenlab/types/validator.js +156 -0
  84. package/dist/src/lib/stakingBuilder.d.ts +24 -35
  85. package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
  86. package/dist/src/lib/stakingBuilder.js +93 -129
  87. package/dist/src/lib/stakingTransaction.d.ts +5 -21
  88. package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
  89. package/dist/src/lib/stakingTransaction.js +77 -219
  90. package/dist/src/lib/transaction.d.ts +8 -6
  91. package/dist/src/lib/transaction.d.ts.map +1 -1
  92. package/dist/src/lib/transaction.js +74 -124
  93. package/dist/src/lib/transactionBuilder.d.ts +9 -9
  94. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  95. package/dist/src/lib/transactionBuilder.js +27 -16
  96. package/dist/src/lib/transactionBuilderFactory.d.ts +8 -5
  97. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  98. package/dist/src/lib/transactionBuilderFactory.js +17 -11
  99. package/dist/src/lib/transferBuilder.d.ts +15 -10
  100. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  101. package/dist/src/lib/transferBuilder.js +38 -101
  102. package/dist/src/lib/transferTransaction.d.ts +5 -4
  103. package/dist/src/lib/transferTransaction.d.ts.map +1 -1
  104. package/dist/src/lib/transferTransaction.js +45 -96
  105. package/dist/src/lib/unstakingBuilder.d.ts +55 -0
  106. package/dist/src/lib/unstakingBuilder.d.ts.map +1 -0
  107. package/dist/src/lib/unstakingBuilder.js +148 -0
  108. package/dist/src/lib/unstakingTransaction.d.ts +51 -0
  109. package/dist/src/lib/unstakingTransaction.d.ts.map +1 -0
  110. package/dist/src/lib/unstakingTransaction.js +206 -0
  111. package/dist/src/lib/utils.d.ts +30 -92
  112. package/dist/src/lib/utils.d.ts.map +1 -1
  113. package/dist/src/lib/utils.js +115 -177
  114. package/dist/src/sui.d.ts.map +1 -1
  115. package/dist/src/sui.js +23 -13
  116. package/package.json +9 -9
  117. package/dist/src/lib/bcs.d.ts +0 -3
  118. package/dist/src/lib/bcs.d.ts.map +0 -1
  119. package/dist/src/lib/bcs.js +0 -109
  120. package/dist/src/lib/txnSchema.d.ts +0 -7
  121. package/dist/src/lib/txnSchema.d.ts.map +0 -1
  122. package/dist/src/lib/txnSchema.js +0 -81
@@ -7,11 +7,12 @@ exports.StakingBuilder = void 0;
7
7
  const sdk_core_1 = require("@bitgo/sdk-core");
8
8
  const iface_1 = require("./iface");
9
9
  const transactionBuilder_1 = require("./transactionBuilder");
10
- const constants_1 = require("./constants");
11
- const txnSchema_1 = require("./txnSchema");
12
- const stakingTransaction_1 = require("./stakingTransaction");
13
- const bignumber_js_1 = __importDefault(require("bignumber.js"));
14
10
  const utils_1 = __importDefault(require("./utils"));
11
+ const assert_1 = __importDefault(require("assert"));
12
+ const stakingTransaction_1 = require("./stakingTransaction");
13
+ const builder_1 = require("./mystenlab/builder");
14
+ const framework_1 = require("./mystenlab/framework");
15
+ const bcs_1 = require("@mysten/bcs");
15
16
  class StakingBuilder extends transactionBuilder_1.TransactionBuilder {
16
17
  constructor(_coinConfig) {
17
18
  super(_coinConfig);
@@ -20,18 +21,17 @@ class StakingBuilder extends transactionBuilder_1.TransactionBuilder {
20
21
  /**
21
22
  * Build a MoveCall transaction ready to be signed and executed.
22
23
  *
23
- * @returns {SuiTransaction} an unsigned Sui transaction
24
- *
25
- * @see https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/docs/sui_system.md#function-request_add_delegation_mul_coin
24
+ * @returns {BitGoSuiTransaction} an unsigned Sui transaction
26
25
  */
27
26
  buildStakeTransaction() {
28
27
  return {
29
- type: iface_1.SuiTransactionType.AddDelegation,
28
+ type: iface_1.SuiTransactionType.AddStake,
30
29
  sender: this._sender,
31
- tx: this._moveCallTx,
32
- gasBudget: this._gasBudget,
33
- gasPrice: this._gasPrice,
34
- gasPayment: this._gasPayment,
30
+ tx: {
31
+ inputs: [],
32
+ transactions: [],
33
+ },
34
+ gasData: this._gasData,
35
35
  };
36
36
  }
37
37
  /**
@@ -41,69 +41,42 @@ class StakingBuilder extends transactionBuilder_1.TransactionBuilder {
41
41
  * @protected
42
42
  */
43
43
  get transactionType() {
44
- return utils_1.default.getTransactionType(this._moveCallTx.function);
44
+ return sdk_core_1.TransactionType.StakingAdd;
45
45
  }
46
- /**
47
- * Create a new transaction for delegating coins ready to be signed and executed.
48
- *
49
- * @param {RequestAddDelegation} addDelegation
50
- */
51
- requestAddDelegation(addDelegation) {
52
- this.validateAddress({ address: addDelegation.validatorAddress });
53
- this.validateValue(bignumber_js_1.default(addDelegation.amount));
54
- for (const coin of addDelegation.coins) {
55
- this.validateSuiObjectRef(coin, 'addDelegation.coins');
46
+ /** @inheritdoc */
47
+ validateTransaction(transaction) {
48
+ if (!transaction.suiTransaction) {
49
+ return;
56
50
  }
57
- this._addDelegationTx = addDelegation;
58
- this._moveCallTx = {
59
- package: constants_1.SUI_PACKAGE,
60
- module: iface_1.ModulesNames.SuiSystem,
61
- function: iface_1.MethodNames.RequestAddDelegationMulCoin,
62
- typeArguments: [],
63
- arguments: [constants_1.SUI_SYSTEM_STATE_OBJECT, addDelegation.coins, addDelegation.amount, addDelegation.validatorAddress],
64
- };
65
- return this;
51
+ this.validateTransactionFields();
52
+ }
53
+ /** @inheritdoc */
54
+ sign(key) {
55
+ this.transaction.setSuiTransaction(this.buildSuiTransaction());
56
+ super.sign(key);
66
57
  }
67
58
  /**
68
- * Create a new transaction for withdrawing coins ready to be signed
59
+ * Create a new transaction for staking coins ready to be signed and executed.
69
60
  *
70
- * @param {RequestWithdrawDelegation} addDelegationTx
61
+ * @param {RequestAddStake} request
71
62
  */
72
- requestWithdrawDelegation(withdrawDelegation) {
73
- this.validateSuiObjectRef(withdrawDelegation.delegation, 'withdrawDelegation.delegation');
74
- this.validateSuiObjectRef(withdrawDelegation.stakedCoinId, 'withdrawDelegation.stakedCoinId');
75
- this._withdrawDelegation = withdrawDelegation;
76
- this._moveCallTx = {
77
- package: constants_1.SUI_PACKAGE,
78
- module: iface_1.ModulesNames.SuiSystem,
79
- function: iface_1.MethodNames.RequestWithdrawDelegation,
80
- typeArguments: [],
81
- arguments: [constants_1.SUI_SYSTEM_STATE_OBJECT, withdrawDelegation.delegation, withdrawDelegation.stakedCoinId],
82
- };
63
+ stake(request) {
64
+ utils_1.default.validateAddress(request.validatorAddress, 'validatorAddress');
65
+ assert_1.default(utils_1.default.isValidAmount(request.amount), 'Invalid recipient amount');
66
+ if (this._sender === request.validatorAddress) {
67
+ throw new sdk_core_1.BuildTransactionError('Sender address cannot be the same as the Staking address');
68
+ }
69
+ this._addStakeTx = request;
83
70
  return this;
84
71
  }
85
72
  /**
86
- * Create a new transaction for switching delegation ready to be signed
73
+ * Create a new transaction for withdrawing coins ready to be signed
87
74
  *
88
- * @param {switchDelegation} switchDelegation
75
+ * @param {RequestWithdrawStakedSui} request
89
76
  */
90
- requestSwitchDelegation(switchDelegation) {
91
- this.validateSuiObjectRef(switchDelegation.delegation, 'switchDelegation.delegation');
92
- this.validateSuiObjectRef(switchDelegation.stakedCoinId, 'switchDelegation.stakedCoinId');
93
- this.validateAddress({ address: switchDelegation.newValidatorAddress });
94
- this._switchDelegation = switchDelegation;
95
- this._moveCallTx = {
96
- package: constants_1.SUI_PACKAGE,
97
- module: iface_1.ModulesNames.SuiSystem,
98
- function: iface_1.MethodNames.RequestSwitchDelegation,
99
- typeArguments: [],
100
- arguments: [
101
- constants_1.SUI_SYSTEM_STATE_OBJECT,
102
- switchDelegation.delegation,
103
- switchDelegation.stakedCoinId,
104
- switchDelegation.newValidatorAddress,
105
- ],
106
- };
77
+ unstake(request) {
78
+ this.validateSuiObjectRef(request.stakedSui, 'stakedSui');
79
+ this._withdrawDelegation = request;
107
80
  return this;
108
81
  }
109
82
  /** @inheritdoc */
@@ -133,91 +106,82 @@ class StakingBuilder extends transactionBuilder_1.TransactionBuilder {
133
106
  * @param {StakingTransaction} tx the transaction data
134
107
  */
135
108
  initBuilder(tx) {
136
- var _a, _b;
137
109
  this._transaction = tx;
138
110
  if (tx.signature && tx.signature.length > 0) {
139
111
  this._signatures = [tx.suiSignature];
140
112
  }
141
113
  const txData = tx.toJson();
142
- this.gasBudget(txData.gasBudget);
114
+ this.type(iface_1.SuiTransactionType.AddStake);
143
115
  this.sender(txData.sender);
144
- this.gasPayment(txData.gasPayment);
145
- const txDetails = txData.kind.Single;
146
- if (txDetails.hasOwnProperty('Call')) {
147
- switch (txDetails.Call.function) {
148
- case iface_1.MethodNames.RequestAddDelegationMulCoin:
149
- this.type(iface_1.SuiTransactionType.AddDelegation);
150
- this.requestAddDelegation({
151
- coins: txDetails.Call.arguments[1],
152
- amount: Number(txDetails.Call.arguments[2]),
153
- validatorAddress: txDetails.Call.arguments[3].toString(),
154
- });
155
- break;
156
- case iface_1.MethodNames.RequestWithdrawDelegation:
157
- this.type(iface_1.SuiTransactionType.WithdrawDelegation);
158
- this.requestWithdrawDelegation({
159
- delegation: txDetails.Call.arguments[1],
160
- stakedCoinId: txDetails.Call.arguments[2],
161
- amount: ((_a = this._withdrawDelegation) === null || _a === void 0 ? void 0 : _a.amount) || 0,
162
- });
163
- break;
164
- case iface_1.MethodNames.RequestSwitchDelegation:
165
- this.type(iface_1.SuiTransactionType.SwitchDelegation);
166
- this.requestSwitchDelegation({
167
- delegation: txDetails.Call.arguments[1],
168
- stakedCoinId: txDetails.Call.arguments[2],
169
- newValidatorAddress: txDetails.Call.arguments[3].toString(),
170
- amount: ((_b = this._withdrawDelegation) === null || _b === void 0 ? void 0 : _b.amount) || 0,
171
- });
172
- break;
173
- default:
174
- throw new sdk_core_1.NotSupported(`${txDetails.Call.function} not supported`);
175
- }
176
- }
177
- else {
178
- throw new Error('Transaction type not supported: ' + txDetails);
179
- }
180
- }
181
- /** @inheritdoc */
182
- validateTransaction(tx) {
183
- this.validateSchema({
184
- type: this._type,
185
- sender: this._sender,
186
- tx: this._moveCallTx,
187
- gasPrice: this._gasPrice,
188
- gasBudget: this._gasBudget,
189
- gasPayment: this._gasPayment,
190
- });
116
+ this.gasData(txData.gasData);
117
+ const amountInputIdx = txData.kind.ProgrammableTransaction.transactions[1].arguments[1].index;
118
+ const amount = utils_1.default.getAmount(txData.kind.ProgrammableTransaction.inputs[amountInputIdx]);
119
+ const validatorAddressInputIdx = txData.kind.ProgrammableTransaction.transactions[1].arguments[2].index;
120
+ const validatorAddress = utils_1.default.getAddress(txData.kind.ProgrammableTransaction.inputs[validatorAddressInputIdx]);
121
+ this.stake({ amount, validatorAddress });
191
122
  }
192
123
  /**
193
- * Validate transaction schema
194
- *
195
- * @param {SuiTransaction<MoveCallTx>} tx
196
- * @private
124
+ * Validates all fields are defined
197
125
  */
198
- validateSchema(tx) {
199
- const validationResult = txnSchema_1.SuiMoveCallTransactionSchema.validate(tx);
200
- if (validationResult.error) {
201
- throw new sdk_core_1.InvalidTransactionError(`Stake Builder Transaction validation failed: ${validationResult.error.message}`);
202
- }
126
+ validateTransactionFields() {
127
+ assert_1.default(this._type, new sdk_core_1.BuildTransactionError('type is required before building'));
128
+ assert_1.default(this._sender, new sdk_core_1.BuildTransactionError('sender is required before building'));
129
+ assert_1.default(this._addStakeTx.validatorAddress, new sdk_core_1.BuildTransactionError('validator address is required before building'));
130
+ assert_1.default(this._addStakeTx.amount, new sdk_core_1.BuildTransactionError('staking amount is required before building'));
131
+ assert_1.default(this._gasData, new sdk_core_1.BuildTransactionError('gasData is required before building'));
132
+ this.validateGasData(this._gasData);
203
133
  }
204
134
  /**
205
135
  * Build SuiTransaction
206
136
  *
207
- * @return {SuiTransaction<MoveCallTx>}
137
+ * @return {BitGoSuiTransaction<MoveCallTx>}
208
138
  * @protected
209
139
  */
210
140
  buildSuiTransaction() {
211
- this.validateTransaction(this._transaction);
141
+ this.validateTransactionFields();
142
+ const programmableTxBuilder = new builder_1.TransactionBlock();
143
+ switch (this._type) {
144
+ case iface_1.SuiTransactionType.AddStake:
145
+ // Create a new coin with staking balance, based on the coins used as gas payment.
146
+ const coin = programmableTxBuilder.splitCoins(programmableTxBuilder.gas, [
147
+ programmableTxBuilder.pure(this._addStakeTx.amount),
148
+ ]);
149
+ // Stake the split coin to a specific validator address.
150
+ programmableTxBuilder.moveCall({
151
+ target: `${framework_1.SUI_SYSTEM_ADDRESS}::${framework_1.SUI_SYSTEM_MODULE_NAME}::${framework_1.ADD_STAKE_FUN_NAME}`,
152
+ arguments: [
153
+ programmableTxBuilder.object(builder_1.Inputs.SharedObjectRef(framework_1.SUI_SYSTEM_STATE_OBJECT)),
154
+ coin,
155
+ programmableTxBuilder.pure(builder_1.Inputs.Pure(this._addStakeTx.validatorAddress, bcs_1.BCS.ADDRESS)),
156
+ ],
157
+ });
158
+ break;
159
+ case iface_1.SuiTransactionType.WithdrawStake:
160
+ // Unstake staked object.
161
+ programmableTxBuilder.moveCall({
162
+ target: `${framework_1.SUI_SYSTEM_ADDRESS}::${framework_1.SUI_SYSTEM_MODULE_NAME}::${framework_1.WITHDRAW_STAKE_FUN_NAME}`,
163
+ arguments: [
164
+ programmableTxBuilder.object(builder_1.Inputs.SharedObjectRef(framework_1.SUI_SYSTEM_STATE_OBJECT)),
165
+ programmableTxBuilder.pure(builder_1.Inputs.ObjectRef(this._withdrawDelegation.stakedSui)),
166
+ ],
167
+ });
168
+ break;
169
+ default:
170
+ throw new sdk_core_1.InvalidTransactionError(`unsupported target method`);
171
+ }
172
+ const txData = programmableTxBuilder.blockData;
212
173
  return {
213
174
  type: this._type,
214
175
  sender: this._sender,
215
- tx: this._moveCallTx,
216
- gasBudget: this._gasBudget,
217
- gasPrice: this._gasPrice,
218
- gasPayment: this._gasPayment,
176
+ tx: {
177
+ inputs: [...txData.inputs],
178
+ transactions: [...txData.transactions],
179
+ },
180
+ gasData: {
181
+ ...this._gasData,
182
+ },
219
183
  };
220
184
  }
221
185
  }
222
186
  exports.StakingBuilder = StakingBuilder;
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3N0YWtpbmdCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDhDQUF5RjtBQUN6RixtQ0FXaUI7QUFDakIsNkRBQTBEO0FBQzFELDJDQUFtRTtBQUNuRSwyQ0FBMkQ7QUFDM0QsNkRBQTBEO0FBRTFELGdFQUFxQztBQUNyQyxvREFBNEI7QUFFNUIsTUFBYSxjQUFlLFNBQVEsdUNBQThCO0lBTWhFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08scUJBQXFCO1FBQzdCLE9BQU87WUFDTCxJQUFJLEVBQUUsMEJBQWtCLENBQUMsYUFBYTtZQUN0QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFjLGVBQWU7UUFDM0IsT0FBTyxlQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9CQUFvQixDQUFDLGFBQW1DO1FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FB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RUQ7Ozs7O09BS0c7SUFDTyxtQkFBbUI7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNwQixFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN4QixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDN0IsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRPRCx3Q0FzT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIE1ldGhvZE5hbWVzLFxuICBNb2R1bGVzTmFtZXMsXG4gIE1vdmVDYWxsVHgsXG4gIE1vdmVDYWxsVHhEZXRhaWxzLFxuICBSZXF1ZXN0QWRkRGVsZWdhdGlvbixcbiAgUmVxdWVzdFN3aXRjaERlbGVnYXRpb24sXG4gIFJlcXVlc3RXaXRoZHJhd0RlbGVnYXRpb24sXG4gIFN1aU9iamVjdFJlZixcbiAgU3VpVHJhbnNhY3Rpb24sXG4gIFN1aVRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBTVUlfUEFDS0FHRSwgU1VJX1NZU1RFTV9TVEFURV9PQkpFQ1QgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTdWlNb3ZlQ2FsbFRyYW5zYWN0aW9uU2NoZW1hIH0gZnJvbSAnLi90eG5TY2hlbWEnO1xuaW1wb3J0IHsgU3Rha2luZ1RyYW5zYWN0aW9uIH0gZnJvbSAnLi9zdGFraW5nVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIFN0YWtpbmdCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyPE1vdmVDYWxsVHg+IHtcbiAgcHJvdGVjdGVkIF9tb3ZlQ2FsbFR4OiBNb3ZlQ2FsbFR4O1xuICBwcm90ZWN0ZWQgX2FkZERlbGVnYXRpb25UeDogUmVxdWVzdEFkZERlbGVnYXRpb247XG4gIHByb3RlY3RlZCBfd2l0aGRyYXdEZWxlZ2F0aW9uOiBSZXF1ZXN0V2l0aGRyYXdEZWxlZ2F0aW9uO1xuICBwcm90ZWN0ZWQgX3N3aXRjaERlbGVnYXRpb246IFJlcXVlc3RTd2l0Y2hEZWxlZ2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBTdGFraW5nVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgTW92ZUNhbGwgdHJhbnNhY3Rpb24gcmVhZHkgdG8gYmUgc2lnbmVkIGFuZCBleGVjdXRlZC5cbiAgICpcbiAgICogQHJldHVybnMge1N1aVRyYW5zYWN0aW9ufSBhbiB1bnNpZ25lZCBTdWkgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vTXlzdGVuTGFicy9zdWkvYmxvYi9tYWluL2NyYXRlcy9zdWktZnJhbWV3b3JrL2RvY3Mvc3VpX3N5c3RlbS5tZCNmdW5jdGlvbi1yZXF1ZXN0X2FkZF9kZWxlZ2F0aW9uX211bF9jb2luXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRTdGFrZVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPE1vdmVDYWxsVHg+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogU3VpVHJhbnNhY3Rpb25UeXBlLkFkZERlbGVnYXRpb24sXG4gICAgICBzZW5kZXI6IHRoaXMuX3NlbmRlcixcbiAgICAgIHR4OiB0aGlzLl9tb3ZlQ2FsbFR4LFxuICAgICAgZ2FzQnVkZ2V0OiB0aGlzLl9nYXNCdWRnZXQsXG4gICAgICBnYXNQcmljZTogdGhpcy5fZ2FzUHJpY2UsXG4gICAgICBnYXNQYXltZW50OiB0aGlzLl9nYXNQYXltZW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YWtpbmcgdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcmV0dXJuIHtUcmFuc2FjdGlvblR5cGV9XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIHV0aWxzLmdldFRyYW5zYWN0aW9uVHlwZSh0aGlzLl9tb3ZlQ2FsbFR4LmZ1bmN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gZm9yIGRlbGVnYXRpbmcgY29pbnMgcmVhZHkgdG8gYmUgc2lnbmVkIGFuZCBleGVjdXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZXF1ZXN0QWRkRGVsZWdhdGlvbn0gYWRkRGVsZWdhdGlvblxuICAgKi9cbiAgcmVxdWVzdEFkZERlbGVnYXRpb24oYWRkRGVsZWdhdGlvbjogUmVxdWVzdEFkZERlbGVnYXRpb24pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IGFkZERlbGVnYXRpb24udmFsaWRhdG9yQWRkcmVzcyB9KTtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUoQmlnTnVtYmVyKGFkZERlbGVnYXRpb24uYW1vdW50KSk7XG4gICAgZm9yIChjb25zdCBjb2luIG9mIGFkZERlbGVnYXRpb24uY29pbnMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVTdWlPYmplY3RSZWYoY29pbiwgJ2FkZERlbGVnYXRpb24uY29pbnMnKTtcbiAgICB9XG4gICAgdGhpcy5fYWRkRGVsZWdhdGlvblR4ID0gYWRkRGVsZWdhdGlvbjtcbiAgICB0aGlzLl9tb3ZlQ2FsbFR4ID0ge1xuICAgICAgcGFja2FnZTogU1VJX1BBQ0tBR0UsXG4gICAgICBtb2R1bGU6IE1vZHVsZXNOYW1lcy5TdWlTeXN0ZW0sXG4gICAgICBmdW5jdGlvbjogTWV0aG9kTmFtZXMuUmVxdWVzdEFkZERlbGVnYXRpb25NdWxDb2luLFxuICAgICAgdHlwZUFyZ3VtZW50czogW10sXG4gICAgICBhcmd1bWVudHM6IFtTVUlfU1lTVEVNX1NUQVRFX09CSkVDVCwgYWRkRGVsZWdhdGlvbi5jb2lucywgYWRkRGVsZWdhdGlvbi5hbW91bnQsIGFkZERlbGVnYXRpb24udmFsaWRhdG9yQWRkcmVzc10sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gZm9yIHdpdGhkcmF3aW5nIGNvaW5zIHJlYWR5IHRvIGJlIHNpZ25lZFxuICAgKlxuICAgKiBAcGFyYW0ge1JlcXVlc3RXaXRoZHJhd0RlbGVnYXRpb259IGFkZERlbGVnYXRpb25UeFxuICAgKi9cbiAgcmVxdWVzdFdpdGhkcmF3RGVsZWdhdGlvbih3aXRoZHJhd0RlbGVnYXRpb246IFJlcXVlc3RXaXRoZHJhd0RlbGVnYXRpb24pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlU3VpT2JqZWN0UmVmKHdpdGhkcmF3RGVsZWdhdGlvbi5kZWxlZ2F0aW9uLCAnd2l0aGRyYXdEZWxlZ2F0aW9uLmRlbGVnYXRpb24nKTtcbiAgICB0aGlzLnZhbGlkYXRlU3VpT2JqZWN0UmVmKHdpdGhkcmF3RGVsZWdhdGlvbi5zdGFrZWRDb2luSWQsICd3aXRoZHJhd0RlbGVnYXRpb24uc3Rha2VkQ29pbklkJyk7XG5cbiAgICB0aGlzLl93aXRoZHJhd0RlbGVnYXRpb24gPSB3aXRoZHJhd0RlbGVnYXRpb247XG4gICAgdGhpcy5fbW92ZUNhbGxUeCA9IHtcbiAgICAgIHBhY2thZ2U6IFNVSV9QQUNLQUdFLFxuICAgICAgbW9kdWxlOiBNb2R1bGVzTmFtZXMuU3VpU3lzdGVtLFxuICAgICAgZnVuY3Rpb246IE1ldGhvZE5hbWVzLlJlcXVlc3RXaXRoZHJhd0RlbGVnYXRpb24sXG4gICAgICB0eXBlQXJndW1lbnRzOiBbXSxcbiAgICAgIGFyZ3VtZW50czogW1NVSV9TWVNURU1fU1RBVEVfT0JKRUNULCB3aXRoZHJhd0RlbGVnYXRpb24uZGVsZWdhdGlvbiwgd2l0aGRyYXdEZWxlZ2F0aW9uLnN0YWtlZENvaW5JZF0sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gZm9yIHN3aXRjaGluZyBkZWxlZ2F0aW9uIHJlYWR5IHRvIGJlIHNpZ25lZFxuICAgKlxuICAgKiBAcGFyYW0ge3N3aXRjaERlbGVnYXRpb259IHN3aXRjaERlbGVnYXRpb25cbiAgICovXG4gIHJlcXVlc3RTd2l0Y2hEZWxlZ2F0aW9uKHN3aXRjaERlbGVnYXRpb246IFJlcXVlc3RTd2l0Y2hEZWxlZ2F0aW9uKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVN1aU9iamVjdFJlZihzd2l0Y2hEZWxlZ2F0aW9uLmRlbGVnYXRpb24sICdzd2l0Y2hEZWxlZ2F0aW9uLmRlbGVnYXRpb24nKTtcbiAgICB0aGlzLnZhbGlkYXRlU3VpT2JqZWN0UmVmKHN3aXRjaERlbGVnYXRpb24uc3Rha2VkQ29pbklkLCAnc3dpdGNoRGVsZWdhdGlvbi5zdGFrZWRDb2luSWQnKTtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IHN3aXRjaERlbGVnYXRpb24ubmV3VmFsaWRhdG9yQWRkcmVzcyB9KTtcblxuICAgIHRoaXMuX3N3aXRjaERlbGVnYXRpb24gPSBzd2l0Y2hEZWxlZ2F0aW9uO1xuICAgIHRoaXMuX21vdmVDYWxsVHggPSB7XG4gICAgICBwYWNrYWdlOiBTVUlfUEFDS0FHRSxcbiAgICAgIG1vZHVsZTogTW9kdWxlc05hbWVzLlN1aVN5c3RlbSxcbiAgICAgIGZ1bmN0aW9uOiBNZXRob2ROYW1lcy5SZXF1ZXN0U3dpdGNoRGVsZWdhdGlvbixcbiAgICAgIHR5cGVBcmd1bWVudHM6IFtdLFxuICAgICAgYXJndW1lbnRzOiBbXG4gICAgICAgIFNVSV9TWVNURU1fU1RBVEVfT0JKRUNULFxuICAgICAgICBzd2l0Y2hEZWxlZ2F0aW9uLmRlbGVnYXRpb24sXG4gICAgICAgIHN3aXRjaERlbGVnYXRpb24uc3Rha2VkQ29pbklkLFxuICAgICAgICBzd2l0Y2hEZWxlZ2F0aW9uLm5ld1ZhbGlkYXRvckFkZHJlc3MsXG4gICAgICBdLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb248TW92ZUNhbGxUeD4ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFN0YWtpbmdUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICB0aGlzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbjxNb3ZlQ2FsbFR4Pj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0U3VpVHJhbnNhY3Rpb24odGhpcy5idWlsZFN1aVRyYW5zYWN0aW9uKCkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24udHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcblxuICAgIGlmICh0aGlzLl9zaWduZXIpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uc2lnbih0aGlzLl9zaWduZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hdHVyZXMuZm9yRWFjaCgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShzaWduYXR1cmUucHVibGljS2V5LCBzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICB9KTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24ubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7U3Rha2luZ1RyYW5zYWN0aW9ufSB0eCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFN0YWtpbmdUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG5cbiAgICBpZiAodHguc2lnbmF0dXJlICYmIHR4LnNpZ25hdHVyZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzID0gW3R4LnN1aVNpZ25hdHVyZV07XG4gICAgfVxuXG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgdGhpcy5nYXNCdWRnZXQodHhEYXRhLmdhc0J1ZGdldCk7XG4gICAgdGhpcy5zZW5kZXIodHhEYXRhLnNlbmRlcik7XG4gICAgdGhpcy5nYXNQYXltZW50KHR4RGF0YS5nYXNQYXltZW50KTtcblxuICAgIGNvbnN0IHR4RGV0YWlscyA9IHR4RGF0YS5raW5kLlNpbmdsZSBhcyBNb3ZlQ2FsbFR4RGV0YWlscztcbiAgICBpZiAodHhEZXRhaWxzLmhhc093blByb3BlcnR5KCdDYWxsJykpIHtcbiAgICAgIHN3aXRjaCAodHhEZXRhaWxzLkNhbGwuZnVuY3Rpb24pIHtcbiAgICAgICAgY2FzZSBNZXRob2ROYW1lcy5SZXF1ZXN0QWRkRGVsZWdhdGlvbk11bENvaW46XG4gICAgICAgICAgdGhpcy50eXBlKFN1aVRyYW5zYWN0aW9uVHlwZS5BZGREZWxlZ2F0aW9uKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RBZGREZWxlZ2F0aW9uKHtcbiAgICAgICAgICAgIGNvaW5zOiB0eERldGFpbHMuQ2FsbC5hcmd1bWVudHNbMV0gYXMgU3VpT2JqZWN0UmVmW10sXG4gICAgICAgICAgICBhbW91bnQ6IE51bWJlcih0eERldGFpbHMuQ2FsbC5hcmd1bWVudHNbMl0pLFxuICAgICAgICAgICAgdmFsaWRhdG9yQWRkcmVzczogdHhEZXRhaWxzLkNhbGwuYXJndW1lbnRzWzNdLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTWV0aG9kTmFtZXMuUmVxdWVzdFdpdGhkcmF3RGVsZWdhdGlvbjpcbiAgICAgICAgICB0aGlzLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLldpdGhkcmF3RGVsZWdhdGlvbik7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0V2l0aGRyYXdEZWxlZ2F0aW9uKHtcbiAgICAgICAgICAgIGRlbGVnYXRpb246IHR4RGV0YWlscy5DYWxsLmFyZ3VtZW50c1sxXSBhcyBTdWlPYmplY3RSZWYsXG4gICAgICAgICAgICBzdGFrZWRDb2luSWQ6IHR4RGV0YWlscy5DYWxsLmFyZ3VtZW50c1syXSBhcyBTdWlPYmplY3RSZWYsXG4gICAgICAgICAgICBhbW91bnQ6IHRoaXMuX3dpdGhkcmF3RGVsZWdhdGlvbj8uYW1vdW50IHx8IDAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTWV0aG9kTmFtZXMuUmVxdWVzdFN3aXRjaERlbGVnYXRpb246XG4gICAgICAgICAgdGhpcy50eXBlKFN1aVRyYW5zYWN0aW9uVHlwZS5Td2l0Y2hEZWxlZ2F0aW9uKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RTd2l0Y2hEZWxlZ2F0aW9uKHtcbiAgICAgICAgICAgIGRlbGVnYXRpb246IHR4RGV0YWlscy5DYWxsLmFyZ3VtZW50c1sxXSBhcyBTdWlPYmplY3RSZWYsXG4gICAgICAgICAgICBzdGFrZWRDb2luSWQ6IHR4RGV0YWlscy5DYWxsLmFyZ3VtZW50c1syXSBhcyBTdWlPYmplY3RSZWYsXG4gICAgICAgICAgICBuZXdWYWxpZGF0b3JBZGRyZXNzOiB0eERldGFpbHMuQ2FsbC5hcmd1bWVudHNbM10udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogdGhpcy5fd2l0aGRyYXdEZWxlZ2F0aW9uPy5hbW91bnQgfHwgMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKGAke3R4RGV0YWlscy5DYWxsLmZ1bmN0aW9ufSBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiAnICsgdHhEZXRhaWxzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0eDogVHJhbnNhY3Rpb248TW92ZUNhbGxUeD4pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKHtcbiAgICAgIHR5cGU6IHRoaXMuX3R5cGUsXG4gICAgICBzZW5kZXI6IHRoaXMuX3NlbmRlcixcbiAgICAgIHR4OiB0aGlzLl9tb3ZlQ2FsbFR4LFxuICAgICAgZ2FzUHJpY2U6IHRoaXMuX2dhc1ByaWNlLFxuICAgICAgZ2FzQnVkZ2V0OiB0aGlzLl9nYXNCdWRnZXQsXG4gICAgICBnYXNQYXltZW50OiB0aGlzLl9nYXNQYXltZW50LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRyYW5zYWN0aW9uIHNjaGVtYVxuICAgKlxuICAgKiBAcGFyYW0ge1N1aVRyYW5zYWN0aW9uPE1vdmVDYWxsVHg+fSB0eFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNjaGVtYSh0eDogU3VpVHJhbnNhY3Rpb248TW92ZUNhbGxUeD4pOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gU3VpTW92ZUNhbGxUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh0eCk7XG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYFN0YWtlIEJ1aWxkZXIgVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIFN1aVRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEByZXR1cm4ge1N1aVRyYW5zYWN0aW9uPE1vdmVDYWxsVHg+fVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRTdWlUcmFuc2FjdGlvbigpOiBTdWlUcmFuc2FjdGlvbjxNb3ZlQ2FsbFR4PiB7XG4gICAgdGhpcy52YWxpZGF0ZVRyYW5zYWN0aW9uKHRoaXMuX3RyYW5zYWN0aW9uKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIHNlbmRlcjogdGhpcy5fc2VuZGVyLFxuICAgICAgdHg6IHRoaXMuX21vdmVDYWxsVHgsXG4gICAgICBnYXNCdWRnZXQ6IHRoaXMuX2dhc0J1ZGdldCxcbiAgICAgIGdhc1ByaWNlOiB0aGlzLl9nYXNQcmljZSxcbiAgICAgIGdhc1BheW1lbnQ6IHRoaXMuX2dhc1BheW1lbnQsXG4gICAgfTtcbiAgfVxufVxuIl19
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3N0YWtpbmdCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDhDQUEyRztBQUMzRyxtQ0FNaUI7QUFDakIsNkRBQTBEO0FBRTFELG9EQUE0QjtBQUM1QixvREFBNEI7QUFFNUIsNkRBQTBEO0FBQzFELGlEQUs2QjtBQUM3QixxREFNK0I7QUFDL0IscUNBQWtDO0FBRWxDLE1BQWEsY0FBZSxTQUFRLHVDQUFrRDtJQUlwRixZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksdUNBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxxQkFBcUI7UUFDN0IsT0FBTztZQUNMLElBQUksRUFBRSwwQkFBa0IsQ0FBQyxRQUFRO1lBQ2pDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNwQixFQUFFLEVBQUU7Z0JBQ0YsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsWUFBWSxFQUFFLEVBQUU7YUFDakI7WUFDRCxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsVUFBVSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbUJBQW1CLENBQUMsV0FBZ0M7UUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7WUFDL0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBWTtRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixF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LGVBQWUsQ0FBQyxtQ0FBdUIsQ0FBQyxDQUFDO3dCQUM3RSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUNqRjtpQkFDcUIsQ0FBQyxDQUFDO2dCQUMxQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDJCQUEyQixDQUFDLENBQUM7U0FDbEU7UUFFRCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7UUFDL0MsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztZQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsRUFBRSxFQUFFO2dCQUNGLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDMUIsWUFBWSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO2FBQ3ZDO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEdBQUcsSUFBSSxDQUFDLFFBQVE7YUFDakI7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBNU1ELHdDQTRNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlS2V5LCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgU3VpVHJhbnNhY3Rpb24sXG4gIFJlcXVlc3RBZGRTdGFrZSxcbiAgUmVxdWVzdFdpdGhkcmF3U3Rha2VkU3VpLFxuICBTdWlUcmFuc2FjdGlvblR5cGUsXG4gIFN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgVHJhbnNmZXJUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNmZXJUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBTdGFraW5nVHJhbnNhY3Rpb24gfSBmcm9tICcuL3N0YWtpbmdUcmFuc2FjdGlvbic7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbkJsb2NrIGFzIFByb2dyYW1taW5nVHJhbnNhY3Rpb25CbG9ja0J1aWxkZXIsXG4gIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCxcbiAgTW92ZUNhbGxUcmFuc2FjdGlvbixcbiAgSW5wdXRzLFxufSBmcm9tICcuL215c3RlbmxhYi9idWlsZGVyJztcbmltcG9ydCB7XG4gIEFERF9TVEFLRV9GVU5fTkFNRSxcbiAgU1VJX1NZU1RFTV9BRERSRVNTLFxuICBTVUlfU1lTVEVNX01PRFVMRV9OQU1FLFxuICBTVUlfU1lTVEVNX1NUQVRFX09CSkVDVCxcbiAgV0lUSERSQVdfU1RBS0VfRlVOX05BTUUsXG59IGZyb20gJy4vbXlzdGVubGFiL2ZyYW1ld29yayc7XG5pbXBvcnQgeyBCQ1MgfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5cbmV4cG9ydCBjbGFzcyBTdGFraW5nQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcjxTdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgcHJvdGVjdGVkIF9hZGRTdGFrZVR4OiBSZXF1ZXN0QWRkU3Rha2U7XG4gIHByb3RlY3RlZCBfd2l0aGRyYXdEZWxlZ2F0aW9uOiBSZXF1ZXN0V2l0aGRyYXdTdGFrZWRTdWk7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFN0YWtpbmdUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBNb3ZlQ2FsbCB0cmFuc2FjdGlvbiByZWFkeSB0byBiZSBzaWduZWQgYW5kIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Qml0R29TdWlUcmFuc2FjdGlvbn0gYW4gdW5zaWduZWQgU3VpIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRTdGFrZVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPFN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBTdWlUcmFuc2FjdGlvblR5cGUuQWRkU3Rha2UsXG4gICAgICBzZW5kZXI6IHRoaXMuX3NlbmRlcixcbiAgICAgIHR4OiB7XG4gICAgICAgIGlucHV0czogW10sXG4gICAgICAgIHRyYW5zYWN0aW9uczogW10sXG4gICAgICB9LFxuICAgICAgZ2FzRGF0YTogdGhpcy5fZ2FzRGF0YSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdGFraW5nIHRyYW5zYWN0aW9uIHR5cGVcbiAgICpcbiAgICogQHJldHVybiB7VHJhbnNhY3Rpb25UeXBlfVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FkZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2ZlclRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbi5zdWlUcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlVHJhbnNhY3Rpb25GaWVsZHMoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBzaWduKGtleTogQmFzZUtleSkge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0U3VpVHJhbnNhY3Rpb24odGhpcy5idWlsZFN1aVRyYW5zYWN0aW9uKCkpO1xuICAgIHN1cGVyLnNpZ24oa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gZm9yIHN0YWtpbmcgY29pbnMgcmVhZHkgdG8gYmUgc2lnbmVkIGFuZCBleGVjdXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZXF1ZXN0QWRkU3Rha2V9IHJlcXVlc3RcbiAgICovXG4gIHN0YWtlKHJlcXVlc3Q6IFJlcXVlc3RBZGRTdGFrZSk6IHRoaXMge1xuICAgIHV0aWxzLnZhbGlkYXRlQWRkcmVzcyhyZXF1ZXN0LnZhbGlkYXRvckFkZHJlc3MsICd2YWxpZGF0b3JBZGRyZXNzJyk7XG4gICAgYXNzZXJ0KHV0aWxzLmlzVmFsaWRBbW91bnQocmVxdWVzdC5hbW91bnQpLCAnSW52YWxpZCByZWNpcGllbnQgYW1vdW50Jyk7XG5cbiAgICBpZiAodGhpcy5fc2VuZGVyID09PSByZXF1ZXN0LnZhbGlkYXRvckFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1NlbmRlciBhZGRyZXNzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgU3Rha2luZyBhZGRyZXNzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fYWRkU3Rha2VUeCA9IHJlcXVlc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHRyYW5zYWN0aW9uIGZvciB3aXRoZHJhd2luZyBjb2lucyByZWFkeSB0byBiZSBzaWduZWRcbiAgICpcbiAgICogQHBhcmFtIHtSZXF1ZXN0V2l0aGRyYXdTdGFrZWRTdWl9IHJlcXVlc3RcbiAgICovXG4gIHVuc3Rha2UocmVxdWVzdDogUmVxdWVzdFdpdGhkcmF3U3Rha2VkU3VpKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVN1aU9iamVjdFJlZihyZXF1ZXN0LnN0YWtlZFN1aSwgJ3N0YWtlZFN1aScpO1xuICAgIHRoaXMuX3dpdGhkcmF3RGVsZWdhdGlvbiA9IHJlcXVlc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb248U3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHggPSBuZXcgU3Rha2luZ1RyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPFN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFN1aVRyYW5zYWN0aW9uKHRoaXMuYnVpbGRTdWlUcmFuc2FjdGlvbigpKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uVHlwZSh0aGlzLnRyYW5zYWN0aW9uVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fc2lnbmVyKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLnNpZ24odGhpcy5fc2lnbmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaWduYXR1cmVzLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5hZGRTaWduYXR1cmUoc2lnbmF0dXJlLnB1YmxpY0tleSwgc2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1N0YWtpbmdUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbjxTdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+KTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcblxuICAgIGlmICh0eC5zaWduYXR1cmUgJiYgdHguc2lnbmF0dXJlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbdHguc3VpU2lnbmF0dXJlXTtcbiAgICB9XG5cbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0aGlzLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLkFkZFN0YWtlKTtcbiAgICB0aGlzLnNlbmRlcih0eERhdGEuc2VuZGVyKTtcbiAgICB0aGlzLmdhc0RhdGEodHhEYXRhLmdhc0RhdGEpO1xuXG4gICAgY29uc3QgYW1vdW50SW5wdXRJZHggPSAoXG4gICAgICAodHhEYXRhLmtpbmQuUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24udHJhbnNhY3Rpb25zWzFdIGFzIE1vdmVDYWxsVHJhbnNhY3Rpb24pLmFyZ3VtZW50c1sxXSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXRcbiAgICApLmluZGV4O1xuICAgIGNvbnN0IGFtb3VudCA9IHV0aWxzLmdldEFtb3VudCh0eERhdGEua2luZC5Qcm9ncmFtbWFibGVUcmFuc2FjdGlvbi5pbnB1dHNbYW1vdW50SW5wdXRJZHhdIGFzIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCk7XG5cbiAgICBjb25zdCB2YWxpZGF0b3JBZGRyZXNzSW5wdXRJZHggPSAoXG4gICAgICAodHhEYXRhLmtpbmQuUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24udHJhbnNhY3Rpb25zWzFdIGFzIE1vdmVDYWxsVHJhbnNhY3Rpb24pLmFyZ3VtZW50c1syXSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXRcbiAgICApLmluZGV4O1xuICAgIGNvbnN0IHZhbGlkYXRvckFkZHJlc3MgPSB1dGlscy5nZXRBZGRyZXNzKFxuICAgICAgdHhEYXRhLmtpbmQuUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24uaW5wdXRzW3ZhbGlkYXRvckFkZHJlc3NJbnB1dElkeF0gYXMgVHJhbnNhY3Rpb25CbG9ja0lucHV0XG4gICAgKTtcblxuICAgIHRoaXMuc3Rha2UoeyBhbW91bnQsIHZhbGlkYXRvckFkZHJlc3MgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFsbCBmaWVsZHMgYXJlIGRlZmluZWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVUcmFuc2FjdGlvbkZpZWxkcygpOiB2b2lkIHtcbiAgICBhc3NlcnQodGhpcy5fdHlwZSwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcigndHlwZSBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgYXNzZXJ0KHRoaXMuX3NlbmRlciwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignc2VuZGVyIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQoXG4gICAgICB0aGlzLl9hZGRTdGFrZVR4LnZhbGlkYXRvckFkZHJlc3MsXG4gICAgICBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd2YWxpZGF0b3IgYWRkcmVzcyBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKVxuICAgICk7XG4gICAgYXNzZXJ0KHRoaXMuX2FkZFN0YWtlVHguYW1vdW50LCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdzdGFraW5nIGFtb3VudCBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgYXNzZXJ0KHRoaXMuX2dhc0RhdGEsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2dhc0RhdGEgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIHRoaXMudmFsaWRhdGVHYXNEYXRhKHRoaXMuX2dhc0RhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIFN1aVRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEByZXR1cm4ge0JpdEdvU3VpVHJhbnNhY3Rpb248TW92ZUNhbGxUeD59XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZFN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPFN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMudmFsaWRhdGVUcmFuc2FjdGlvbkZpZWxkcygpO1xuXG4gICAgY29uc3QgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyID0gbmV3IFByb2dyYW1taW5nVHJhbnNhY3Rpb25CbG9ja0J1aWxkZXIoKTtcbiAgICBzd2l0Y2ggKHRoaXMuX3R5cGUpIHtcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLkFkZFN0YWtlOlxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgY29pbiB3aXRoIHN0YWtpbmcgYmFsYW5jZSwgYmFzZWQgb24gdGhlIGNvaW5zIHVzZWQgYXMgZ2FzIHBheW1lbnQuXG4gICAgICAgIGNvbnN0IGNvaW4gPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuc3BsaXRDb2lucyhwcm9ncmFtbWFibGVUeEJ1aWxkZXIuZ2FzLCBbXG4gICAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnB1cmUodGhpcy5fYWRkU3Rha2VUeC5hbW91bnQpLFxuICAgICAgICBdKTtcbiAgICAgICAgLy8gU3Rha2UgdGhlIHNwbGl0IGNvaW4gdG8gYSBzcGVjaWZpYyB2YWxpZGF0b3IgYWRkcmVzcy5cbiAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm1vdmVDYWxsKHtcbiAgICAgICAgICB0YXJnZXQ6IGAke1NVSV9TWVNURU1fQUREUkVTU306OiR7U1VJX1NZU1RFTV9NT0RVTEVfTkFNRX06OiR7QUREX1NUQUtFX0ZVTl9OQU1FfWAsXG4gICAgICAgICAgYXJndW1lbnRzOiBbXG4gICAgICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KElucHV0cy5TaGFyZWRPYmplY3RSZWYoU1VJX1NZU1RFTV9TVEFURV9PQkpFQ1QpKSxcbiAgICAgICAgICAgIGNvaW4sXG4gICAgICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIucHVyZShJbnB1dHMuUHVyZSh0aGlzLl9hZGRTdGFrZVR4LnZhbGlkYXRvckFkZHJlc3MsIEJDUy5BRERSRVNTKSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSBhcyBNb3ZlQ2FsbFRyYW5zYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5XaXRoZHJhd1N0YWtlOlxuICAgICAgICAvLyBVbnN0YWtlIHN0YWtlZCBvYmplY3QuXG4gICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5tb3ZlQ2FsbCh7XG4gICAgICAgICAgdGFyZ2V0OiBgJHtTVUlfU1lTVEVNX0FERFJFU1N9Ojoke1NVSV9TWVNURU1fTU9EVUxFX05BTUV9Ojoke1dJVEhEUkFXX1NUQUtFX0ZVTl9OQU1FfWAsXG4gICAgICAgICAgYXJndW1lbnRzOiBbXG4gICAgICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KElucHV0cy5TaGFyZWRPYmplY3RSZWYoU1VJX1NZU1RFTV9TVEFURV9PQkpFQ1QpKSxcbiAgICAgICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5wdXJlKElucHV0cy5PYmplY3RSZWYodGhpcy5fd2l0aGRyYXdEZWxlZ2F0aW9uLnN0YWtlZFN1aSkpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0gYXMgTW92ZUNhbGxUcmFuc2FjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGB1bnN1cHBvcnRlZCB0YXJnZXQgbWV0aG9kYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHhEYXRhID0gcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLmJsb2NrRGF0YTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIHNlbmRlcjogdGhpcy5fc2VuZGVyLFxuICAgICAgdHg6IHtcbiAgICAgICAgaW5wdXRzOiBbLi4udHhEYXRhLmlucHV0c10sXG4gICAgICAgIHRyYW5zYWN0aW9uczogWy4uLnR4RGF0YS50cmFuc2FjdGlvbnNdLFxuICAgICAgfSxcbiAgICAgIGdhc0RhdGE6IHtcbiAgICAgICAgLi4udGhpcy5fZ2FzRGF0YSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,12 +1,12 @@
1
1
  /// <reference types="node" />
2
2
  import { BaseKey, PublicKey as BasePublicKey, Signature, TransactionType } from '@bitgo/sdk-core';
3
- import { MoveCallTx, SuiTransaction, TransactionExplanation, TxData } from './iface';
3
+ import { StakingProgrammableTransaction, SuiTransaction, TransactionExplanation, TxData } from './iface';
4
4
  import { BaseCoin as CoinConfig } from '@bitgo/statics';
5
5
  import { Transaction } from './transaction';
6
- export declare class StakingTransaction extends Transaction<MoveCallTx> {
6
+ export declare class StakingTransaction extends Transaction<StakingProgrammableTransaction> {
7
7
  constructor(_coinConfig: Readonly<CoinConfig>);
8
- get suiTransaction(): SuiTransaction<MoveCallTx>;
9
- setSuiTransaction(tx: SuiTransaction<MoveCallTx>): void;
8
+ get suiTransaction(): SuiTransaction<StakingProgrammableTransaction>;
9
+ setSuiTransaction(tx: SuiTransaction<StakingProgrammableTransaction>): void;
10
10
  addSignature(publicKey: BasePublicKey, signature: Buffer): void;
11
11
  get suiSignature(): Signature;
12
12
  /** @inheritdoc */
@@ -40,28 +40,12 @@ export declare class StakingTransaction extends Transaction<MoveCallTx> {
40
40
  */
41
41
  getTxData(): TxData;
42
42
  /**
43
- * Returns a complete explanation for a transfer transaction
43
+ * Returns a complete explanation for a staking transaction
44
44
  *
45
45
  * @param {TxData} json The transaction data in json format
46
46
  * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
47
47
  * @returns {TransactionExplanation}
48
48
  */
49
49
  explainAddDelegationTransaction(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
50
- /**
51
- * Returns a complete explanation for a withdraw delegation transaction
52
- *
53
- * @param {TxData} json The transaction data in json format
54
- * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
55
- * @returns {TransactionExplanation}
56
- */
57
- explainWithdrawDelegationTransaction(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
58
- /**
59
- * Returns a complete explanation for a switch delegation transaction
60
- *
61
- * @param {TxData} json The transaction data in json format
62
- * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
63
- * @returns {TransactionExplanation}
64
- */
65
- explainSwitchDelegationTransaction(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
66
50
  }
67
51
  //# sourceMappingURL=stakingTransaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stakingTransaction.d.ts","sourceRoot":"","sources":["../../../src/lib/stakingTransaction.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EAGP,SAAS,IAAI,aAAa,EAC1B,SAAS,EAET,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAGL,UAAU,EAGV,cAAc,EAEd,sBAAsB,EACtB,MAAM,EAEP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,kBAAmB,SAAQ,WAAW,CAAC,UAAU,CAAC;gBACjD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,IAAI,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,CAE/C;IAED,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI;IAIvD,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAsDhB,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAuC5C;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAIvD;;OAEG;IACH,oBAAoB,IAAI,IAAI;IA2D5B;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAWhD;;;;OAIG;IACH,SAAS,IAAI,MAAM;IAiEnB;;;;;;OAMG;IACH,+BAA+B,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;IAkBhH;;;;;;OAMG;IACH,oCAAoC,CAClC,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,sBAAsB,GACxC,sBAAsB;IAgBzB;;;;;;OAMG;IACH,kCAAkC,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;CAepH"}
1
+ {"version":3,"file":"stakingTransaction.d.ts","sourceRoot":"","sources":["../../../src/lib/stakingTransaction.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EAGP,SAAS,IAAI,aAAa,EAC1B,SAAS,EAET,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,8BAA8B,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACzG,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAY5C,qBAAa,kBAAmB,SAAQ,WAAW,CAAC,8BAA8B,CAAC;gBACrE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,IAAI,cAAc,IAAI,cAAc,CAAC,8BAA8B,CAAC,CAEnE;IAED,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,8BAA8B,CAAC,GAAG,IAAI;IAI3E,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAehB,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAmC5C;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAIvD;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAiC5B;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAchD;;;;OAIG;IACH,SAAS,IAAI,MAAM;IA0CnB;;;;;;OAMG;IACH,+BAA+B,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;CA2BjH"}