@bitgo-beta/sdk-coin-trx 1.2.3-alpha.43 → 1.2.3-alpha.431

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 (132) hide show
  1. package/dist/resources/protobuf/Contract.proto +32 -0
  2. package/dist/resources/protobuf/tron.d.ts +1478 -214
  3. package/dist/resources/protobuf/tron.js +6312 -2600
  4. package/dist/resources/protobuf/tron.proto +6 -0
  5. package/dist/src/index.js +6 -2
  6. package/dist/src/lib/constants.d.ts +3 -0
  7. package/dist/src/lib/constants.d.ts.map +1 -0
  8. package/dist/src/lib/constants.js +6 -0
  9. package/dist/src/lib/contractCallBuilder.d.ts +1 -35
  10. package/dist/src/lib/contractCallBuilder.d.ts.map +1 -1
  11. package/dist/src/lib/contractCallBuilder.js +12 -75
  12. package/dist/src/lib/delegateResourceTxBuilder.d.ts +27 -0
  13. package/dist/src/lib/delegateResourceTxBuilder.d.ts.map +1 -0
  14. package/dist/src/lib/delegateResourceTxBuilder.js +98 -0
  15. package/dist/src/lib/enum.d.ts +36 -1
  16. package/dist/src/lib/enum.d.ts.map +1 -1
  17. package/dist/src/lib/enum.js +40 -4
  18. package/dist/src/lib/freezeBalanceTxBuilder.d.ts +71 -0
  19. package/dist/src/lib/freezeBalanceTxBuilder.d.ts.map +1 -0
  20. package/dist/src/lib/freezeBalanceTxBuilder.js +211 -0
  21. package/dist/src/lib/iface.d.ts +220 -2
  22. package/dist/src/lib/iface.d.ts.map +1 -1
  23. package/dist/src/lib/iface.js +1 -1
  24. package/dist/src/lib/index.js +23 -9
  25. package/dist/src/lib/keyPair.d.ts +0 -1
  26. package/dist/src/lib/keyPair.d.ts.map +1 -1
  27. package/dist/src/lib/keyPair.js +31 -18
  28. package/dist/src/lib/resourceManagementTxBuilder.d.ts +72 -0
  29. package/dist/src/lib/resourceManagementTxBuilder.d.ts.map +1 -0
  30. package/dist/src/lib/resourceManagementTxBuilder.js +150 -0
  31. package/dist/src/lib/tokenTransferBuilder.d.ts +1 -1
  32. package/dist/src/lib/tokenTransferBuilder.js +3 -3
  33. package/dist/src/lib/transaction.d.ts.map +1 -1
  34. package/dist/src/lib/transaction.js +92 -6
  35. package/dist/src/lib/transactionBuilder.d.ts +50 -5
  36. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  37. package/dist/src/lib/transactionBuilder.js +110 -21
  38. package/dist/src/lib/undelegateResourceTxBuilder.d.ts +27 -0
  39. package/dist/src/lib/undelegateResourceTxBuilder.d.ts.map +1 -0
  40. package/dist/src/lib/undelegateResourceTxBuilder.js +98 -0
  41. package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts +65 -0
  42. package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts.map +1 -0
  43. package/dist/src/lib/unfreezeBalanceTxBuilder.js +204 -0
  44. package/dist/src/lib/utils.d.ts +85 -4
  45. package/dist/src/lib/utils.d.ts.map +1 -1
  46. package/dist/src/lib/utils.js +445 -47
  47. package/dist/src/lib/voteWitnessTxBuilder.d.ts +62 -0
  48. package/dist/src/lib/voteWitnessTxBuilder.d.ts.map +1 -0
  49. package/dist/src/lib/voteWitnessTxBuilder.js +219 -0
  50. package/dist/src/lib/withdrawBuilder.d.ts +49 -0
  51. package/dist/src/lib/withdrawBuilder.d.ts.map +1 -0
  52. package/dist/src/lib/withdrawBuilder.js +167 -0
  53. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts +49 -0
  54. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
  55. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.js +167 -0
  56. package/dist/src/lib/wrappedBuilder.d.ts +56 -0
  57. package/dist/src/lib/wrappedBuilder.d.ts.map +1 -1
  58. package/dist/src/lib/wrappedBuilder.js +86 -2
  59. package/dist/src/trx.d.ts +78 -4
  60. package/dist/src/trx.d.ts.map +1 -1
  61. package/dist/src/trx.js +436 -147
  62. package/dist/src/trxToken.d.ts +2 -2
  63. package/dist/src/trxToken.d.ts.map +1 -1
  64. package/dist/src/trxToken.js +5 -5
  65. package/dist/test/fixtures.d.ts +40 -0
  66. package/dist/test/fixtures.d.ts.map +1 -0
  67. package/dist/test/fixtures.js +46 -0
  68. package/dist/test/resources.d.ts +586 -0
  69. package/dist/test/resources.d.ts.map +1 -0
  70. package/dist/test/resources.js +746 -0
  71. package/dist/test/unit/index.d.ts +2 -0
  72. package/dist/test/unit/index.d.ts.map +1 -0
  73. package/dist/test/unit/index.js +19 -0
  74. package/dist/test/unit/keyPair.d.ts +2 -0
  75. package/dist/test/unit/keyPair.d.ts.map +1 -0
  76. package/dist/test/unit/keyPair.js +163 -0
  77. package/dist/test/unit/transaction.d.ts +2 -0
  78. package/dist/test/unit/transaction.d.ts.map +1 -0
  79. package/dist/test/unit/transaction.js +38 -0
  80. package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts +2 -0
  81. package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts.map +1 -0
  82. package/dist/test/unit/transactionBuilder/contractCallBuilder.js +315 -0
  83. package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts +2 -0
  84. package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts.map +1 -0
  85. package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.js +255 -0
  86. package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts +2 -0
  87. package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts.map +1 -0
  88. package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.js +285 -0
  89. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  90. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  91. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +42 -0
  92. package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts +2 -0
  93. package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts.map +1 -0
  94. package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.js +255 -0
  95. package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts +2 -0
  96. package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts.map +1 -0
  97. package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.js +256 -0
  98. package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts +2 -0
  99. package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts.map +1 -0
  100. package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.js +277 -0
  101. package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts +2 -0
  102. package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts.map +1 -0
  103. package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.js +213 -0
  104. package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts +2 -0
  105. package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
  106. package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.js +213 -0
  107. package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts +2 -0
  108. package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts.map +1 -0
  109. package/dist/test/unit/transactionBuilder/wrappedBuilder.js +50 -0
  110. package/dist/test/unit/transactionBuilder.d.ts +2 -0
  111. package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
  112. package/dist/test/unit/transactionBuilder.js +178 -0
  113. package/dist/test/unit/trx.d.ts +2 -0
  114. package/dist/test/unit/trx.d.ts.map +1 -0
  115. package/dist/test/unit/trx.js +639 -0
  116. package/dist/test/unit/util.d.ts +2 -0
  117. package/dist/test/unit/util.d.ts.map +1 -0
  118. package/dist/test/unit/util.js +141 -0
  119. package/dist/test/unit/verifyTransaction.d.ts +2 -0
  120. package/dist/test/unit/verifyTransaction.d.ts.map +1 -0
  121. package/dist/test/unit/verifyTransaction.js +378 -0
  122. package/dist/tsconfig.tsbuildinfo +1 -0
  123. package/package.json +20 -15
  124. package/.eslintignore +0 -5
  125. package/.mocharc.yml +0 -8
  126. package/CHANGELOG.md +0 -118
  127. package/resources/README.md +0 -31
  128. package/resources/protobuf/Contract.proto +0 -256
  129. package/resources/protobuf/Discover.proto +0 -44
  130. package/resources/protobuf/tron.d.ts +0 -11205
  131. package/resources/protobuf/tron.js +0 -33480
  132. package/resources/protobuf/tron.proto +0 -677
@@ -28,7 +28,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
28
28
  }
29
29
  this._id = rawTransaction.txID;
30
30
  this._transaction = rawTransaction;
31
- this._decodedRawDataHex = utils_1.decodeTransaction(rawTransaction.raw_data_hex);
31
+ this._decodedRawDataHex = (0, utils_1.decodeTransaction)(rawTransaction.raw_data_hex);
32
32
  // Destination depends on the contract type
33
33
  this.recordRawDataFields(this._decodedRawDataHex);
34
34
  }
@@ -77,8 +77,8 @@ class Transaction extends sdk_core_1.BaseTransaction {
77
77
  // this is then a token smart contract transaction and the data must be decoded
78
78
  const types = ['address', 'uint256'];
79
79
  const data = Buffer.from(contractCallValues.data, 'base64').toString('hex');
80
- const decodedData = utils_1.decodeDataParams(types, data);
81
- const recipient_address = utils_1.getBase58AddressFromHex(decodedData[0]);
80
+ const decodedData = (0, utils_1.decodeDataParams)(types, data);
81
+ const recipient_address = (0, utils_1.getBase58AddressFromHex)(decodedData[0]);
82
82
  const value = decodedData[1].toString();
83
83
  output = {
84
84
  address: recipient_address,
@@ -103,6 +103,92 @@ class Transaction extends sdk_core_1.BaseTransaction {
103
103
  value: '0',
104
104
  };
105
105
  break;
106
+ case enum_1.ContractType.FreezeBalanceV2:
107
+ this._type = sdk_core_1.TransactionType.StakingActivate;
108
+ const freezeValue = rawData.contract[0].parameter.value;
109
+ output = {
110
+ address: freezeValue.owner_address,
111
+ value: freezeValue.frozen_balance.toString(),
112
+ };
113
+ input = {
114
+ address: freezeValue.owner_address,
115
+ value: freezeValue.frozen_balance.toString(),
116
+ };
117
+ break;
118
+ case enum_1.ContractType.VoteWitness:
119
+ this._type = sdk_core_1.TransactionType.StakingVote;
120
+ const voteValues = rawData.contract[0].parameter.value;
121
+ // Calculate total vote count
122
+ const totalVoteCount = voteValues.votes.reduce((sum, vote) => sum + vote.vote_count, 0);
123
+ output = {
124
+ address: voteValues.owner_address,
125
+ value: totalVoteCount.toString(),
126
+ };
127
+ input = {
128
+ address: voteValues.owner_address,
129
+ value: totalVoteCount.toString(),
130
+ };
131
+ break;
132
+ case enum_1.ContractType.UnfreezeBalanceV2:
133
+ this._type = sdk_core_1.TransactionType.StakingDeactivate;
134
+ const unfreezeValues = rawData.contract[0].parameter.value;
135
+ output = {
136
+ address: unfreezeValues.owner_address,
137
+ value: unfreezeValues.unfreeze_balance.toString(),
138
+ };
139
+ input = {
140
+ address: unfreezeValues.owner_address,
141
+ value: unfreezeValues.unfreeze_balance.toString(),
142
+ };
143
+ break;
144
+ case enum_1.ContractType.WithdrawExpireUnfreeze:
145
+ this._type = sdk_core_1.TransactionType.StakingWithdraw;
146
+ const withdrawValues = rawData.contract[0].parameter.value;
147
+ output = {
148
+ address: withdrawValues.owner_address,
149
+ value: '0', // no value field
150
+ };
151
+ input = {
152
+ address: withdrawValues.owner_address,
153
+ value: '0',
154
+ };
155
+ break;
156
+ case enum_1.ContractType.WithdrawBalance:
157
+ this._type = sdk_core_1.TransactionType.StakingClaim;
158
+ const withdrawBalanceValue = rawData.contract[0].parameter.value;
159
+ output = {
160
+ address: withdrawBalanceValue.owner_address,
161
+ value: '0', // no value field
162
+ };
163
+ input = {
164
+ address: withdrawBalanceValue.owner_address,
165
+ value: '0',
166
+ };
167
+ break;
168
+ case enum_1.ContractType.DelegateResourceContract:
169
+ this._type = sdk_core_1.TransactionType.DelegateResource;
170
+ const delegateValue = rawData.contract[0].parameter.value;
171
+ output = {
172
+ address: delegateValue.receiver_address,
173
+ value: delegateValue.balance.toString(),
174
+ };
175
+ input = {
176
+ address: delegateValue.owner_address,
177
+ value: delegateValue.balance.toString(),
178
+ };
179
+ break;
180
+ case enum_1.ContractType.UnDelegateResourceContract:
181
+ this._type = sdk_core_1.TransactionType.UnDelegateResource;
182
+ const undelegateValue = rawData.contract[0].parameter.value;
183
+ output = {
184
+ address: undelegateValue.receiver_address,
185
+ value: undelegateValue.balance.toString(),
186
+ };
187
+ input = {
188
+ address: undelegateValue.owner_address,
189
+ value: undelegateValue.balance.toString(),
190
+ };
191
+ break;
106
192
  default:
107
193
  throw new sdk_core_1.ParseTransactionError('Unsupported contract type');
108
194
  }
@@ -118,7 +204,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
118
204
  throw new sdk_core_1.ParseTransactionError('Empty transaction');
119
205
  }
120
206
  const hexBuffer = Buffer.from(this._transaction.raw_data_hex, 'hex');
121
- const newTxid = crypto_1.createHash('sha256').update(hexBuffer).digest('hex');
207
+ const newTxid = (0, crypto_1.createHash)('sha256').update(hexBuffer).digest('hex');
122
208
  this._transaction.txID = newTxid;
123
209
  this._id = newTxid;
124
210
  }
@@ -148,7 +234,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
148
234
  // Set the internal variables to account for the new expiration date
149
235
  this._transaction.raw_data_hex = newRawDataHex;
150
236
  this._transaction.raw_data.expiration = newExpiration;
151
- this._decodedRawDataHex = utils_1.decodeTransaction(newRawDataHex);
237
+ this._decodedRawDataHex = (0, utils_1.decodeTransaction)(newRawDataHex);
152
238
  this.recordRawDataFields(this._decodedRawDataHex);
153
239
  this.updateId();
154
240
  }
@@ -223,4 +309,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
223
309
  }
224
310
  }
225
311
  exports.Transaction = Transaction;
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1DQUFvQztBQUVwQyxnRUFBcUM7QUFDckMsd0RBQXlEO0FBQ3pELG1EQU04QjtBQUM5QixpQ0FBc0M7QUFDdEMsbUNBTWlCO0FBR2pCOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFVOUM7Ozs7O09BS0c7SUFDSCxZQUFZLFVBQWdDLEVBQUUsY0FBbUM7UUFDL0UsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO2dCQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUMxRDtZQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztZQUNuQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcseUJBQWlCLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXpFLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG1CQUFtQixDQUFDLE9BQWdCO1FBQzFDLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBRW5DLElBQUksTUFBcUIsRUFBRSxLQUFvQixDQUFDO1FBQ2hELDJCQUEyQjtRQUMzQixRQUFRLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDNUIsS0FBSyxtQkFBWSxDQUFDLFFBQVE7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c2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvcHJvdG9idWYvdHJvbic7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBDb250cmFjdFR5cGUgfSBmcm9tICcuL2VudW0nO1xuaW1wb3J0IHtcbiAgZGVjb2RlVHJhbnNhY3Rpb24sXG4gIGRlY29kZURhdGFQYXJhbXMsXG4gIGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4LFxuICB0b2tlbk1haW5uZXRDb250cmFjdEFkZHJlc3NlcyxcbiAgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgQ29udHJhY3RFbnRyeSwgUmF3RGF0YSwgVHJhbnNhY3Rpb25SZWNlaXB0LCBUcmFuc2ZlckNvbnRyYWN0LCBUcmlnZ2VyU21hcnRDb250cmFjdCB9IGZyb20gJy4vaWZhY2UnO1xuXG4vKipcbiAqIFRyb24gdHJhbnNhY3Rpb24gbW9kZWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIC8vIFRyb24gc3BlY2lmaWMgZmllbGRzXG4gIHByb3RlY3RlZCBfdmFsaWRGcm9tOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfdmFsaWRUbzogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2lucHV0czogQ29udHJhY3RFbnRyeVtdO1xuICBwcm90ZWN0ZWQgX291dHB1dHM6IENvbnRyYWN0RW50cnlbXTtcblxuICBwcml2YXRlIF9kZWNvZGVkUmF3RGF0YUhleDogUmF3RGF0YTtcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvblJlY2VpcHQ7XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPiwgcmF3VHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvblJlY2VpcHQpIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICBpZiAocmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIGlmICghcmF3VHJhbnNhY3Rpb24udHhJRCkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm8gaWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lkID0gcmF3VHJhbnNhY3Rpb24udHhJRDtcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247XG4gICAgICB0aGlzLl9kZWNvZGVkUmF3RGF0YUhleCA9IGRlY29kZVRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uLnJhd19kYXRhX2hleCk7XG5cbiAgICAgIC8vIERlc3RpbmF0aW9uIGRlcGVuZHMgb24gdGhlIGNvbnRyYWN0IHR5cGVcbiAgICAgIHRoaXMucmVjb3JkUmF3RGF0YUZpZWxkcyh0aGlzLl9kZWNvZGVkUmF3RGF0YUhleCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSB0cmFuc2FjdGlvbiByYXcgZGF0YSBhbmQgcmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMuXG4gICAqXG4gICAqIEBwYXJhbSByYXdEYXRhIE9iamVjdCBmcm9tIGEgdHJvbiB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZWNvcmRSYXdEYXRhRmllbGRzKHJhd0RhdGE6IFJhd0RhdGEpIHtcbiAgICAvLyBDb250cmFjdC1hZ25vc3RpYyBmaWVsZHNcbiAgICB0aGlzLl92YWxpZEZyb20gPSByYXdEYXRhLnRpbWVzdGFtcDtcbiAgICB0aGlzLl92YWxpZFRvID0gcmF3RGF0YS5leHBpcmF0aW9uO1xuXG4gICAgbGV0IG91dHB1dDogQ29udHJhY3RFbnRyeSwgaW5wdXQ6IENvbnRyYWN0RW50cnk7XG4gICAgLy8gQ29udHJhY3Qtc3BlY2lmaWMgZmllbGRzXG4gICAgc3dpdGNoIChyYXdEYXRhLmNvbnRyYWN0VHlwZSkge1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuVHJhbnNmZXI6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgQmlnTnVtYmVyKChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFRyYW5zZmVyQ29udHJhY3QpLnBhcmFtZXRlci52YWx1ZS5hbW91bnQpLnRvRml4ZWQoMCk7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiAocmF3RGF0YS5jb250cmFjdFswXSBhcyBUcmFuc2ZlckNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWUudG9fYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVHJhbnNmZXJDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuQWNjb3VudFBlcm1pc3Npb25VcGRhdGU6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb247XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiAocmF3RGF0YS5jb250cmFjdCBhcyBhbnkpLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgfTtcbiAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogKHJhd0RhdGEuY29udHJhY3QgYXMgYW55KS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuVHJpZ2dlclNtYXJ0Q29udHJhY3Q6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsO1xuICAgICAgICBjb25zdCBjb250cmFjdENhbGxWYWx1ZXMgPSAocmF3RGF0YS5jb250cmFjdFswXSBhcyBUcmlnZ2VyU21hcnRDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgICBjb25zdCBjb250cmFjdEFkZHJlc3MgPSBjb250cmFjdENhbGxWYWx1ZXMuY29udHJhY3RfYWRkcmVzcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRva2VuTWFpbm5ldENvbnRyYWN0QWRkcmVzc2VzLmluY2x1ZGVzKGNvbnRyYWN0QWRkcmVzcykgfHxcbiAgICAgICAgICB0b2tlblRlc3RuZXRDb250cmFjdEFkZHJlc3Nlcy5pbmNsdWRlcyhjb250cmFjdEFkZHJlc3MpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHRoaXMgaXMgdGhlbiBhIHRva2VuIHNtYXJ0IGNvbnRyYWN0IHRyYW5zYWN0aW9uIGFuZCB0aGUgZGF0YSBtdXN0IGJlIGRlY29kZWRcbiAgICAgICAgICBjb25zdCB0eXBlcyA9IFsnYWRkcmVzcycsICd1aW50MjU2J107XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5mcm9tKGNvbnRyYWN0Q2FsbFZhbHVlcy5kYXRhLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gZGVjb2RlRGF0YVBhcmFtcyh0eXBlcywgZGF0YSk7XG4gICAgICAgICAgY29uc3QgcmVjaXBpZW50X2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUhleChkZWNvZGVkRGF0YVswXSk7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBkZWNvZGVkRGF0YVsxXS50b1N0cmluZygpO1xuICAgICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudF9hZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0Q2FsbFZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgICAgY29udHJhY3RBZGRyZXNzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0Q2FsbFZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgIH07XG4gICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGNvbnRyYWN0Q2FsbFZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgICBkYXRhOiBjb250cmFjdENhbGxWYWx1ZXMuZGF0YSxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbnRyYWN0IHR5cGUnKTtcbiAgICB9XG4gICAgdGhpcy5faW5wdXRzID0gW2lucHV0XTtcbiAgICB0aGlzLl9vdXRwdXRzID0gW291dHB1dF07XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGUgYW5kIHVwZGF0ZSB0aGUgdHJhbnNhY3Rpb24gaWQuIFRoaXMgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgY2hhbmdpbmcgYW55IHRyYW5zYWN0aW9uXG4gICAqIGZpZWxkIHNpbmNlIHRoZSB0aGUgaWQgaXMgYSBoYXNoIG9mIHRoZSB0cmFuc2FjdGlvbiBib2R5LlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVJZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBoZXhCdWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLl90cmFuc2FjdGlvbi5yYXdfZGF0YV9oZXgsICdoZXgnKTtcbiAgICBjb25zdCBuZXdUeGlkID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhleEJ1ZmZlcikuZGlnZXN0KCdoZXgnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi50eElEID0gbmV3VHhpZDtcbiAgICB0aGlzLl9pZCA9IG5ld1R4aWQ7XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIHRoZSBleHBpcmF0aW9uIGRhdGUgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIEBwYXJhbSBleHRlbnNpb25NcyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBleHRlbmQgdGhlIGV4cGlyYXRpb24gYnlcbiAgICovXG4gIGV4dGVuZEV4cGlyYXRpb24oZXh0ZW5zaW9uTXM6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChleHRlbnNpb25NcyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFeHRlbmRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGV4dGVuc2lvbiByYW5nZS4gTXVzdCBiZSBwb3NpdGl2ZSBhIGludGVnZXInKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlICYmIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignQ2Fubm90IGV4dGVuZCBhIHNpZ25lZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd0RhdGFIZXggPSB0aGlzLl90cmFuc2FjdGlvbi5yYXdfZGF0YV9oZXg7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbShyYXdEYXRhSGV4LCAnaGV4Jyk7XG4gICAgbGV0IHJhdztcbiAgICB0cnkge1xuICAgICAgcmF3ID0gcHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmRlY29kZShieXRlcyk7XG4gICAgICBjb25zdCBuZXdFeHBpcmF0aW9uID0gbmV3IEJpZ051bWJlcihyYXcuZXhwaXJhdGlvbikucGx1cyhleHRlbnNpb25NcykudG9OdW1iZXIoKTtcbiAgICAgIHJhdy5leHBpcmF0aW9uID0gbmV3RXhwaXJhdGlvbjtcbiAgICAgIGNvbnN0IG5ld1Jhd0RhdGFIZXggPSBCdWZmZXIuZnJvbShwcm90b2NvbC5UcmFuc2FjdGlvbi5yYXcuZW5jb2RlKHJhdykuZmluaXNoKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIC8vIFNldCB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGFjY291bnQgZm9yIHRoZSBuZXcgZXhwaXJhdGlvbiBkYXRlXG4gICAgICB0aGlzLl90cmFuc2FjdGlvbi5yYXdfZGF0YV9oZXggPSBuZXdSYXdEYXRhSGV4O1xuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24ucmF3X2RhdGEuZXhwaXJhdGlvbiA9IG5ld0V4cGlyYXRpb247XG4gICAgICB0aGlzLl9kZWNvZGVkUmF3RGF0YUhleCA9IGRlY29kZVRyYW5zYWN0aW9uKG5ld1Jhd0RhdGFIZXgpO1xuICAgICAgdGhpcy5yZWNvcmRSYXdEYXRhRmllbGRzKHRoaXMuX2RlY29kZWRSYXdEYXRhSGV4KTtcbiAgICAgIHRoaXMudXBkYXRlSWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSBpbml0aWFsIHJhd19kYXRhX2hleCBmcm9tIHRoZSBzZXJpYWxpemVkIHR4LicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpZ25hdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBnZXQgc2lnbmF0dXJlKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb24gJiYgdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhpcyB0cmFuc2FjdGlvbiBiZWNvbWVzIHZhbGlkIGFuZCBjYW4gYmUgYnJvYWRjYXN0ZWQgdG8gdGhlXG4gICAqIG5ldHdvcmsuXG4gICAqL1xuICBnZXQgdmFsaWRGcm9tKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkRnJvbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4cGlyYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICBnZXQgdmFsaWRUbygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92YWxpZFRvO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldCBvdXRwdXRzKCk6IENvbnRyYWN0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dHM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0IGlucHV0cygpOiBDb250cmFjdEVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dHM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICAvLyBUcm9uIHRyYW5zYWN0aW9uIGRvIG5vdCBjb250YWluIHRoZSBvd25lcnMgYWNjb3VudCBhZGRyZXNzIHNvIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjaGVjayB0aGVcbiAgICAvLyBwcml2YXRlIGtleSB3aXRoIGFueSBidXQgdGhlIGFjY291bnQgbWFpbiBhZGRyZXNzLiBUaGlzIGlzIG5vdCBlbm91Z2ggdG8gZmFpbCB0aGlzIGNoZWNrLCBzb1xuICAgIC8vIGl0IGlzIGEgbm8tb3AuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRyYW5zYWN0aW9uXG4gICAqL1xuICBzZXRUcmFuc2FjdGlvblJlY2VpcHQodHg6IFRyYW5zYWN0aW9uUmVjZWlwdCkge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgdGhpcy51cGRhdGVJZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldFxuICAgKi9cbiAgc2V0VHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHJhbnNhY3Rpb25SZWNlaXB0IHtcbiAgICBpZiAoIXRoaXMuX3RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogYW55IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pzb24oKSk7XG4gIH1cbn1cbiJdfQ==
312
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1DQUFvQztBQUVwQyxnRUFBcUM7QUFDckMsd0RBQXlEO0FBQ3pELG1EQU04QjtBQUM5QixpQ0FBc0M7QUFDdEMsbUNBTWlCO0FBZWpCOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFVOUM7Ozs7O09BS0c7SUFDSCxZQUFZLFVBQWdDLEVBQUUsY0FBbUM7UUFDL0UsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztZQUNuQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBQSx5QkFBaUIsRUFBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFekUsMkNBQTJDO1lBQzNDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQkFBbUIsQ0FBQyxPQUFnQjtRQUMxQywyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUVuQyxJQUFJLE1BQXFCLEVBQUUsS0FBb0IsQ0FBQztRQUNoRCwyQkFBMkI7UUFDM0IsUUFBUSxPQUFPLENBQUMsWUFBWSxFQUFFLENB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QztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBblVELGtDQW1VQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvcHJvdG9idWYvdHJvbic7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBDb250cmFjdFR5cGUgfSBmcm9tICcuL2VudW0nO1xuaW1wb3J0IHtcbiAgZGVjb2RlVHJhbnNhY3Rpb24sXG4gIGRlY29kZURhdGFQYXJhbXMsXG4gIGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4LFxuICB0b2tlbk1haW5uZXRDb250cmFjdEFkZHJlc3NlcyxcbiAgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ29udHJhY3RFbnRyeSxcbiAgRnJlZXplQmFsYW5jZVYyQ29udHJhY3QsXG4gIFJhd0RhdGEsXG4gIFRyYW5zYWN0aW9uUmVjZWlwdCxcbiAgVHJhbnNmZXJDb250cmFjdCxcbiAgVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG4gIFZvdGVXaXRuZXNzQ29udHJhY3QsXG4gIFVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QsXG4gIFdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCxcbiAgUmVzb3VyY2VNYW5hZ2VtZW50Q29udHJhY3QsXG4gIFdpdGhkcmF3QmFsYW5jZUNvbnRyYWN0LFxufSBmcm9tICcuL2lmYWNlJztcblxuLyoqXG4gKiBUcm9uIHRyYW5zYWN0aW9uIG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICAvLyBUcm9uIHNwZWNpZmljIGZpZWxkc1xuICBwcm90ZWN0ZWQgX3ZhbGlkRnJvbTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX3ZhbGlkVG86IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9pbnB1dHM6IENvbnRyYWN0RW50cnlbXTtcbiAgcHJvdGVjdGVkIF9vdXRwdXRzOiBDb250cmFjdEVudHJ5W107XG5cbiAgcHJpdmF0ZSBfZGVjb2RlZFJhd0RhdGFIZXg6IFJhd0RhdGE7XG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb25SZWNlaXB0O1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBjb2luQ29uZmlnXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4sIHJhd1RyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb25SZWNlaXB0KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgaWYgKHJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICBpZiAoIXJhd1RyYW5zYWN0aW9uLnR4SUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIGlkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pZCA9IHJhd1RyYW5zYWN0aW9uLnR4SUQ7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uO1xuICAgICAgdGhpcy5fZGVjb2RlZFJhd0RhdGFIZXggPSBkZWNvZGVUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbi5yYXdfZGF0YV9oZXgpO1xuXG4gICAgICAvLyBEZXN0aW5hdGlvbiBkZXBlbmRzIG9uIHRoZSBjb250cmFjdCB0eXBlXG4gICAgICB0aGlzLnJlY29yZFJhd0RhdGFGaWVsZHModGhpcy5fZGVjb2RlZFJhd0RhdGFIZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgdHJhbnNhY3Rpb24gcmF3IGRhdGEgYW5kIHJlY29yZCB0aGUgbW9zdCBpbXBvcnRhbnQgZmllbGRzLlxuICAgKlxuICAgKiBAcGFyYW0gcmF3RGF0YSBPYmplY3QgZnJvbSBhIHRyb24gdHJhbnNhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgcmVjb3JkUmF3RGF0YUZpZWxkcyhyYXdEYXRhOiBSYXdEYXRhKSB7XG4gICAgLy8gQ29udHJhY3QtYWdub3N0aWMgZmllbGRzXG4gICAgdGhpcy5fdmFsaWRGcm9tID0gcmF3RGF0YS50aW1lc3RhbXA7XG4gICAgdGhpcy5fdmFsaWRUbyA9IHJhd0RhdGEuZXhwaXJhdGlvbjtcblxuICAgIGxldCBvdXRwdXQ6IENvbnRyYWN0RW50cnksIGlucHV0OiBDb250cmFjdEVudHJ5O1xuICAgIC8vIENvbnRyYWN0LXNwZWNpZmljIGZpZWxkc1xuICAgIHN3aXRjaCAocmF3RGF0YS5jb250cmFjdFR5cGUpIHtcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlRyYW5zZmVyOlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbmV3IEJpZ051bWJlcigocmF3RGF0YS5jb250cmFjdFswXSBhcyBUcmFuc2ZlckNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWUuYW1vdW50KS50b0ZpeGVkKDApO1xuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVHJhbnNmZXJDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlLnRvX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH07XG4gICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFRyYW5zZmVyQ29udHJhY3QpLnBhcmFtZXRlci52YWx1ZS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlOlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uO1xuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogKHJhd0RhdGEuY29udHJhY3QgYXMgYW55KS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgIH07XG4gICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IChyYXdEYXRhLmNvbnRyYWN0IGFzIGFueSkub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlRyaWdnZXJTbWFydENvbnRyYWN0OlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbDtcbiAgICAgICAgY29uc3QgY29udHJhY3RDYWxsVmFsdWVzID0gKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVHJpZ2dlclNtYXJ0Q29udHJhY3QpLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgICAgY29uc3QgY29udHJhY3RBZGRyZXNzID0gY29udHJhY3RDYWxsVmFsdWVzLmNvbnRyYWN0X2FkZHJlc3M7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0b2tlbk1haW5uZXRDb250cmFjdEFkZHJlc3Nlcy5pbmNsdWRlcyhjb250cmFjdEFkZHJlc3MpIHx8XG4gICAgICAgICAgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMuaW5jbHVkZXMoY29udHJhY3RBZGRyZXNzKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIHRoZW4gYSB0b2tlbiBzbWFydCBjb250cmFjdCB0cmFuc2FjdGlvbiBhbmQgdGhlIGRhdGEgbXVzdCBiZSBkZWNvZGVkXG4gICAgICAgICAgY29uc3QgdHlwZXMgPSBbJ2FkZHJlc3MnLCAndWludDI1NiddO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuZnJvbShjb250cmFjdENhbGxWYWx1ZXMuZGF0YSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IGRlY29kZURhdGFQYXJhbXModHlwZXMsIGRhdGEpO1xuICAgICAgICAgIGNvbnN0IHJlY2lwaWVudF9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgoZGVjb2RlZERhdGFbMF0pO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGVjb2RlZERhdGFbMV0udG9TdHJpbmcoKTtcbiAgICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnRfYWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaW5wdXQgPSB7XG4gICAgICAgICAgICBhZGRyZXNzOiBjb250cmFjdENhbGxWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICAgIGNvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBjb250cmFjdENhbGxWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBjb250cmFjdENhbGxWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3MsXG4gICAgICAgICAgZGF0YTogY29udHJhY3RDYWxsVmFsdWVzLmRhdGEsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5GcmVlemVCYWxhbmNlVjI6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlO1xuICAgICAgICBjb25zdCBmcmVlemVWYWx1ZSA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIEZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBmcmVlemVWYWx1ZS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiBmcmVlemVWYWx1ZS5mcm96ZW5fYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBmcmVlemVWYWx1ZS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiBmcmVlemVWYWx1ZS5mcm96ZW5fYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlZvdGVXaXRuZXNzOlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdWb3RlO1xuICAgICAgICBjb25zdCB2b3RlVmFsdWVzID0gKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVm90ZVdpdG5lc3NDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0b3RhbCB2b3RlIGNvdW50XG4gICAgICAgIGNvbnN0IHRvdGFsVm90ZUNvdW50ID0gdm90ZVZhbHVlcy52b3Rlcy5yZWR1Y2UoKHN1bSwgdm90ZSkgPT4gc3VtICsgdm90ZS52b3RlX2NvdW50LCAwKTtcblxuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogdm90ZVZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiB0b3RhbFZvdGVDb3VudC50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB2b3RlVmFsdWVzLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IHRvdGFsVm90ZUNvdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuVW5mcmVlemVCYWxhbmNlVjI6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU7XG4gICAgICAgIGNvbnN0IHVuZnJlZXplVmFsdWVzID0gKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdCkucGFyYW1ldGVyLnZhbHVlO1xuICAgICAgICBvdXRwdXQgPSB7XG4gICAgICAgICAgYWRkcmVzczogdW5mcmVlemVWYWx1ZXMub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogdW5mcmVlemVWYWx1ZXMudW5mcmVlemVfYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB1bmZyZWV6ZVZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiB1bmZyZWV6ZVZhbHVlcy51bmZyZWV6ZV9iYWxhbmNlLnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb250cmFjdFR5cGUuV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZTpcbiAgICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3VmFsdWVzID0gKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB3aXRoZHJhd1ZhbHVlcy5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsIC8vIG5vIHZhbHVlIGZpZWxkXG4gICAgICAgIH07XG4gICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IHdpdGhkcmF3VmFsdWVzLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5XaXRoZHJhd0JhbGFuY2U6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltO1xuICAgICAgICBjb25zdCB3aXRoZHJhd0JhbGFuY2VWYWx1ZSA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFdpdGhkcmF3QmFsYW5jZUNvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB3aXRoZHJhd0JhbGFuY2VWYWx1ZS5vd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiAnMCcsIC8vIG5vIHZhbHVlIGZpZWxkXG4gICAgICAgIH07XG4gICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IHdpdGhkcmF3QmFsYW5jZVZhbHVlLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbnRyYWN0VHlwZS5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Q6XG4gICAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuRGVsZWdhdGVSZXNvdXJjZTtcbiAgICAgICAgY29uc3QgZGVsZWdhdGVWYWx1ZSA9IChyYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFJlc291cmNlTWFuYWdlbWVudENvbnRyYWN0KS5wYXJhbWV0ZXIudmFsdWU7XG4gICAgICAgIG91dHB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZVZhbHVlLnJlY2VpdmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IGRlbGVnYXRlVmFsdWUuYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZVZhbHVlLm93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IGRlbGVnYXRlVmFsdWUuYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29udHJhY3RUeXBlLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0OlxuICAgICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlVuRGVsZWdhdGVSZXNvdXJjZTtcbiAgICAgICAgY29uc3QgdW5kZWxlZ2F0ZVZhbHVlID0gKHJhd0RhdGEuY29udHJhY3RbMF0gYXMgUmVzb3VyY2VNYW5hZ2VtZW50Q29udHJhY3QpLnBhcmFtZXRlci52YWx1ZTtcbiAgICAgICAgb3V0cHV0ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IHVuZGVsZWdhdGVWYWx1ZS5yZWNlaXZlcl9hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiB1bmRlbGVnYXRlVmFsdWUuYmFsYW5jZS50b1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpbnB1dCA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB1bmRlbGVnYXRlVmFsdWUub3duZXJfYWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogdW5kZWxlZ2F0ZVZhbHVlLmJhbGFuY2UudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdVbnN1cHBvcnRlZCBjb250cmFjdCB0eXBlJyk7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0cyA9IFtpbnB1dF07XG4gICAgdGhpcy5fb3V0cHV0cyA9IFtvdXRwdXRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY2FsY3VsYXRlIGFuZCB1cGRhdGUgdGhlIHRyYW5zYWN0aW9uIGlkLiBUaGlzIHNob3VsZCBiZSBkb25lIGFmdGVyIGNoYW5naW5nIGFueSB0cmFuc2FjdGlvblxuICAgKiBmaWVsZCBzaW5jZSB0aGUgdGhlIGlkIGlzIGEgaGFzaCBvZiB0aGUgdHJhbnNhY3Rpb24gYm9keS5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlSWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgaGV4QnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5fdHJhbnNhY3Rpb24ucmF3X2RhdGFfaGV4LCAnaGV4Jyk7XG4gICAgY29uc3QgbmV3VHhpZCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoZXhCdWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24udHhJRCA9IG5ld1R4aWQ7XG4gICAgdGhpcy5faWQgPSBuZXdUeGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVuZCB0aGUgZXhwaXJhdGlvbiBkYXRlIGJ5IHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gZXh0ZW5zaW9uTXMgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZXh0ZW5kIHRoZSBleHBpcmF0aW9uIGJ5XG4gICAqL1xuICBleHRlbmRFeHBpcmF0aW9uKGV4dGVuc2lvbk1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZXh0ZW5zaW9uTXMgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBleHRlbnNpb24gcmFuZ2UuIE11c3QgYmUgcG9zaXRpdmUgYSBpbnRlZ2VyJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZSAmJiB0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0Nhbm5vdCBleHRlbmQgYSBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCByYXdEYXRhSGV4ID0gdGhpcy5fdHJhbnNhY3Rpb24ucmF3X2RhdGFfaGV4O1xuICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmZyb20ocmF3RGF0YUhleCwgJ2hleCcpO1xuICAgIGxldCByYXc7XG4gICAgdHJ5IHtcbiAgICAgIHJhdyA9IHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5kZWNvZGUoYnl0ZXMpO1xuICAgICAgY29uc3QgbmV3RXhwaXJhdGlvbiA9IG5ldyBCaWdOdW1iZXIocmF3LmV4cGlyYXRpb24pLnBsdXMoZXh0ZW5zaW9uTXMpLnRvTnVtYmVyKCk7XG4gICAgICByYXcuZXhwaXJhdGlvbiA9IG5ld0V4cGlyYXRpb247XG4gICAgICBjb25zdCBuZXdSYXdEYXRhSGV4ID0gQnVmZmVyLmZyb20ocHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmVuY29kZShyYXcpLmZpbmlzaCgpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAvLyBTZXQgdGhlIGludGVybmFsIHZhcmlhYmxlcyB0byBhY2NvdW50IGZvciB0aGUgbmV3IGV4cGlyYXRpb24gZGF0ZVxuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24ucmF3X2RhdGFfaGV4ID0gbmV3UmF3RGF0YUhleDtcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uLnJhd19kYXRhLmV4cGlyYXRpb24gPSBuZXdFeHBpcmF0aW9uO1xuICAgICAgdGhpcy5fZGVjb2RlZFJhd0RhdGFIZXggPSBkZWNvZGVUcmFuc2FjdGlvbihuZXdSYXdEYXRhSGV4KTtcbiAgICAgIHRoaXMucmVjb3JkUmF3RGF0YUZpZWxkcyh0aGlzLl9kZWNvZGVkUmF3RGF0YUhleCk7XG4gICAgICB0aGlzLnVwZGF0ZUlkKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgaW5pdGlhbCByYXdfZGF0YV9oZXggZnJvbSB0aGUgc2VyaWFsaXplZCB0eC4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzaWduYXR1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgZ2V0IHNpZ25hdHVyZSgpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uICYmIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25hdHVyZTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRoaXMgdHJhbnNhY3Rpb24gYmVjb21lcyB2YWxpZCBhbmQgY2FuIGJlIGJyb2FkY2FzdGVkIHRvIHRoZVxuICAgKiBuZXR3b3JrLlxuICAgKi9cbiAgZ2V0IHZhbGlkRnJvbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92YWxpZEZyb207XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHBpcmF0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgZ2V0IHZhbGlkVG8oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRUbztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXQgb3V0cHV0cygpOiBDb250cmFjdEVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldCBpbnB1dHMoKTogQ29udHJhY3RFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgLy8gVHJvbiB0cmFuc2FjdGlvbiBkbyBub3QgY29udGFpbiB0aGUgb3duZXJzIGFjY291bnQgYWRkcmVzcyBzbyBpdCBpcyBub3QgcG9zc2libGUgdG8gY2hlY2sgdGhlXG4gICAgLy8gcHJpdmF0ZSBrZXkgd2l0aCBhbnkgYnV0IHRoZSBhY2NvdW50IG1haW4gYWRkcmVzcy4gVGhpcyBpcyBub3QgZW5vdWdoIHRvIGZhaWwgdGhpcyBjaGVjaywgc29cbiAgICAvLyBpdCBpcyBhIG5vLW9wLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0eCB0cmFuc2FjdGlvblxuICAgKi9cbiAgc2V0VHJhbnNhY3Rpb25SZWNlaXB0KHR4OiBUcmFuc2FjdGlvblJlY2VpcHQpIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4O1xuICAgIHRoaXMudXBkYXRlSWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXRcbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFRyYW5zYWN0aW9uUmVjZWlwdCB7XG4gICAgaWYgKCF0aGlzLl90cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IGFueSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9Kc29uKCkpO1xuICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import BigNumber from 'bignumber.js';
2
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
3
  import { BaseKey, BaseTransactionBuilder } from '@bitgo-beta/sdk-core';
4
- import { TransactionReceipt } from './iface';
4
+ import { TransactionReceipt, Block } from './iface';
5
5
  import { Address } from './address';
6
6
  import { Transaction } from './transaction';
7
7
  /**
@@ -9,12 +9,49 @@ import { Transaction } from './transaction';
9
9
  */
10
10
  export declare class TransactionBuilder extends BaseTransactionBuilder {
11
11
  private _transaction;
12
+ protected _ownerAddress: string;
13
+ protected _refBlockBytes: string;
14
+ protected _refBlockHash: string;
15
+ protected _expiration: number;
16
+ protected _timestamp: number;
12
17
  /**
13
18
  * Public constructor.
14
19
  *
15
20
  * @param {CoinConfig} _coinConfig Configuration object
16
21
  */
17
22
  constructor(_coinConfig: Readonly<CoinConfig>);
23
+ /** @inheritdoc */
24
+ protected get transaction(): Transaction;
25
+ /** @inheritdoc */
26
+ protected set transaction(transaction: Transaction);
27
+ /**
28
+ * Set the source address for the transaction
29
+ *
30
+ * @param {Address} address The source address
31
+ * @returns the builder with the new parameter set
32
+ */
33
+ source(address: Address): this;
34
+ /**
35
+ * Set the timestamp for the transaction
36
+ *
37
+ * @param {number} time the timestamp in milliseconds
38
+ * @returns the builder with the new parameter set
39
+ */
40
+ timestamp(time: number): this;
41
+ /**
42
+ * Set the block values,
43
+ *
44
+ * @param {Block} block the object containing number and hash of the block
45
+ * @returns the builder with the new parameter set
46
+ */
47
+ block(block: Block): this;
48
+ /**
49
+ * Set the expiration time for the transaction, set timestamp if it was not set previously
50
+ *
51
+ * @param {number} time the expiration time in milliseconds
52
+ * @returns the builder with the new parameter set
53
+ */
54
+ expiration(time: number): this;
18
55
  /**
19
56
  * Parse transaction takes in raw JSON directly from the node.
20
57
  *
@@ -39,6 +76,11 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
39
76
  validateValue(value: BigNumber): void;
40
77
  /** @inheritdoc */
41
78
  validateAddress(address: Address): void;
79
+ /**
80
+ * Helper method to validate the resource type
81
+ * @param resource The resource type to be validated
82
+ */
83
+ validateResource(resource: string): void;
42
84
  /** @inheritdoc */
43
85
  validateKey(key: BaseKey): void;
44
86
  /**
@@ -57,9 +99,12 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
57
99
  validateRawTransaction(rawTransaction: TransactionReceipt | string): void;
58
100
  /** @inheritdoc */
59
101
  validateTransaction(transaction: Transaction): void;
60
- /** @inheritdoc */
61
- protected get transaction(): Transaction;
62
- /** @inheritdoc */
63
- protected set transaction(transaction: Transaction);
102
+ /**
103
+ * Validate the expiration time of the transaction
104
+ *
105
+ * @param {number} value The expiration time in milliseconds
106
+ * @throws {InvalidParameterValueError} If the expiration time is invalid
107
+ */
108
+ validateExpirationTime(value: number): void;
64
109
  }
65
110
  //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,sBAAsB,EAKvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAE5D,OAAO,CAAC,YAAY,CAAc;IAClC;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,WAAW;IAWtF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAWvD,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAuBnD,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM;IAI3C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAWrC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOvC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IA2CzE,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQnD,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;CACF"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,sBAAsB,EAOvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAE5D,OAAO,CAAC,YAAY,CAAc;IAClC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IASzB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU9B;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,WAAW;IAWtF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAWvD,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAuBnD,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM;IAI3C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAWrC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOvC;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IA2CzE,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQnD;;;;;OAKG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAa5C"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
22
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
37
  };
@@ -42,6 +56,63 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
42
56
  constructor(_coinConfig) {
43
57
  super(_coinConfig);
44
58
  }
59
+ /** @inheritdoc */
60
+ get transaction() {
61
+ return this._transaction;
62
+ }
63
+ /** @inheritdoc */
64
+ set transaction(transaction) {
65
+ this._transaction = transaction;
66
+ }
67
+ /**
68
+ * Set the source address for the transaction
69
+ *
70
+ * @param {Address} address The source address
71
+ * @returns the builder with the new parameter set
72
+ */
73
+ source(address) {
74
+ this.validateAddress(address);
75
+ this._ownerAddress = (0, utils_1.getHexAddressFromBase58Address)(address.address);
76
+ return this;
77
+ }
78
+ /**
79
+ * Set the timestamp for the transaction
80
+ *
81
+ * @param {number} time the timestamp in milliseconds
82
+ * @returns the builder with the new parameter set
83
+ */
84
+ timestamp(time) {
85
+ this._timestamp = time;
86
+ return this;
87
+ }
88
+ /**
89
+ * Set the block values,
90
+ *
91
+ * @param {Block} block the object containing number and hash of the block
92
+ * @returns the builder with the new parameter set
93
+ */
94
+ block(block) {
95
+ const blockBytes = Buffer.alloc(8);
96
+ blockBytes.writeInt32BE(block.number, 4);
97
+ this._refBlockBytes = blockBytes.slice(6, 8).toString('hex');
98
+ this._refBlockHash = Buffer.from(block.hash, 'hex').slice(8, 16).toString('hex');
99
+ return this;
100
+ }
101
+ /**
102
+ * Set the expiration time for the transaction, set timestamp if it was not set previously
103
+ *
104
+ * @param {number} time the expiration time in milliseconds
105
+ * @returns the builder with the new parameter set
106
+ */
107
+ expiration(time) {
108
+ if (this.transaction.id) {
109
+ throw new sdk_core_1.ExtendTransactionError('Expiration is already set, it can only be extended');
110
+ }
111
+ this._timestamp = this._timestamp || Date.now();
112
+ this.validateExpirationTime(time);
113
+ this._expiration = time;
114
+ return this;
115
+ }
45
116
  /**
46
117
  * Parse transaction takes in raw JSON directly from the node.
47
118
  *
@@ -79,7 +150,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
79
150
  const keyPair = new keyPair_1.KeyPair({ prv: key.key });
80
151
  // Since the key pair was generated using a private key, it will always have a prv attribute,
81
152
  // hence it is safe to use non-null operator
82
- signedTransaction = utils_1.signTransaction(keyPair.getKeys().prv, this.transaction.toJson());
153
+ signedTransaction = (0, utils_1.signTransaction)(keyPair.getKeys().prv, this.transaction.toJson());
83
154
  }
84
155
  catch (e) {
85
156
  throw new sdk_core_1.SigningError('Failed to sign transaction via helper.');
@@ -123,10 +194,19 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
123
194
  /** @inheritdoc */
124
195
  validateAddress(address) {
125
196
  // assumes a base 58 address for our addresses
126
- if (!utils_1.isBase58Address(address.address)) {
197
+ if (!(0, utils_1.isBase58Address)(address.address)) {
127
198
  throw new Error(address.address + ' is not a valid base58 address.');
128
199
  }
129
200
  }
201
+ /**
202
+ * Helper method to validate the resource type
203
+ * @param resource The resource type to be validated
204
+ */
205
+ validateResource(resource) {
206
+ if (!utils_1.VALID_RESOURCE_TYPES.includes(resource)) {
207
+ throw new Error(resource + ' is not a valid resource type.');
208
+ }
209
+ }
130
210
  /** @inheritdoc */
131
211
  validateKey(key) {
132
212
  try {
@@ -171,13 +251,13 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
171
251
  else {
172
252
  throw new sdk_core_1.InvalidTransactionError('Transaction is not an object or stringified json');
173
253
  }
174
- const decodedRawDataHex = utils_1.decodeTransaction(currTransaction.raw_data_hex);
254
+ const decodedRawDataHex = (0, utils_1.decodeTransaction)(currTransaction.raw_data_hex);
175
255
  if (!currTransaction.txID) {
176
256
  throw new sdk_core_1.InvalidTransactionError('Transaction ID is empty');
177
257
  }
178
258
  // Validate the transaction ID from the raw data hex
179
259
  const hexBuffer = Buffer.from(currTransaction.raw_data_hex, 'hex');
180
- const currTxID = crypto_1.createHash('sha256').update(hexBuffer).digest('hex');
260
+ const currTxID = (0, crypto_1.createHash)('sha256').update(hexBuffer).digest('hex');
181
261
  if (currTransaction.txID !== currTxID) {
182
262
  throw new sdk_core_1.InvalidTransactionError('Transaction has not have a valid id');
183
263
  }
@@ -197,19 +277,28 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
197
277
  /** @inheritdoc */
198
278
  validateTransaction(transaction) {
199
279
  const hexBuffer = Buffer.from(transaction.toJson().raw_data_hex, 'hex');
200
- const txId = crypto_1.createHash('sha256').update(hexBuffer).digest('hex');
280
+ const txId = (0, crypto_1.createHash)('sha256').update(hexBuffer).digest('hex');
201
281
  if (transaction.id !== txId) {
202
282
  throw new sdk_core_1.InvalidTransactionError(transaction.id + ' is not a valid transaction id. Expecting: ' + txId);
203
283
  }
204
284
  }
205
- /** @inheritdoc */
206
- get transaction() {
207
- return this._transaction;
208
- }
209
- /** @inheritdoc */
210
- set transaction(transaction) {
211
- this._transaction = transaction;
285
+ /**
286
+ * Validate the expiration time of the transaction
287
+ *
288
+ * @param {number} value The expiration time in milliseconds
289
+ * @throws {InvalidParameterValueError} If the expiration time is invalid
290
+ */
291
+ validateExpirationTime(value) {
292
+ if (value < this._timestamp) {
293
+ throw new sdk_core_1.InvalidParameterValueError('Expiration must be greater than timestamp');
294
+ }
295
+ if (value < Date.now()) {
296
+ throw new sdk_core_1.InvalidParameterValueError('Expiration must be greater than current time');
297
+ }
298
+ if (value - this._timestamp > utils_1.TRANSACTION_MAX_EXPIRATION) {
299
+ throw new sdk_core_1.InvalidParameterValueError('Expiration must not be greater than one day');
300
+ }
212
301
  }
213
302
  }
214
303
  exports.TransactionBuilder = TransactionBuilder;
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFvQztBQUNwQywwQ0FBNEI7QUFDNUIsZ0VBQXFDO0FBRXJDLG1EQU84QjtBQUc5QixtQ0FBOEU7QUFDOUUsK0NBQTRDO0FBQzVDLHVDQUFvQztBQUVwQzs7R0FFRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsaUNBQXNCO0lBRzVEOzs7O09BSUc7SUFDSCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxrQkFBa0IsQ0FBQyxjQUEyQztRQUN0RSxJQUFJLEVBQUUsQ0FBQztRQUNQLElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxFQUFFO1lBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0MsRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3JEO2FBQU07WUFDTCxFQUFFLEdBQUcsSUFBSSx5QkFBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDeEQ7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxHQUFZO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUM1QixNQUFNLElBQUksdUJBQVksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQzdCLE1BQU0sSUFBSSx1QkFBWSxDQUFDLDZCQUE2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V0FBVyxDQUFDLFdBQXdCO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQTlMRCxnREE4TEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgU2lnbmluZ0Vycm9yLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblJlY2VpcHQgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MnO1xuaW1wb3J0IHsgc2lnblRyYW5zYWN0aW9uLCBpc0Jhc2U1OEFkZHJlc3MsIGRlY29kZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5cbi8qKlxuICogVHJvbiB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIC8vIHRyYW5zYWN0aW9uIGJlaW5nIGJ1aWx0XG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgLyoqXG4gICAqIFB1YmxpYyBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtDb2luQ29uZmlnfSBfY29pbkNvbmZpZyBDb25maWd1cmF0aW9uIG9iamVjdFxuICAgKi9cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRyYW5zYWN0aW9uIHRha2VzIGluIHJhdyBKU09OIGRpcmVjdGx5IGZyb20gdGhlIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25SZWNlaXB0fSByYXdUcmFuc2FjdGlvbiBUaGUgVHJvbiB0cmFuc2FjdGlvbiBpbiBKU09OIGZvcm1hdCBhcyByZXR1cm5lZCBieSB0aGUgVHJvbiBsaWIgb3IgYSBzdHJpbmdpZnllZCB2ZXJzaW9uIG9mIHN1Y2ggSlNPTi5cbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9ufSBUcm9uIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgbGV0IHR4O1xuICAgIGlmICh0eXBlb2YgcmF3VHJhbnNhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICAgICAgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdHJhbnNhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eCA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnLCByYXdUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uaW5wdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm8gc2VuZGVyJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLm91dHB1dHMpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBubyByZWNlaXZlcicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hcHBseVNpZ25hdHVyZShrZXkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwcGx5U2lnbmF0dXJlKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBvbGRUcmFuc2FjdGlvbiA9IHRoaXMudHJhbnNhY3Rpb24udG9Kc29uKCk7XG4gICAgLy8gU3RvcmUgdGhlIG9yaWdpbmFsIHNpZ25hdHVyZXMgdG8gY29tcGFyZSB0aGVtIHdpdGggdGhlIG5ldyBvbmVzIGluIGEgbGF0ZXIgc3RlcC4gU2lnbmF0dXJlc1xuICAgIC8vIGNhbiBiZSB1bmRlZmluZWQgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgdHJhbnNhY3Rpb24gaXMgYmVpbmcgc2lnbmVkXG4gICAgY29uc3Qgb2xkU2lnbmF0dXJlQ291bnQgPSBvbGRUcmFuc2FjdGlvbi5zaWduYXR1cmUgPyBvbGRUcmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoIDogMDtcbiAgICBsZXQgc2lnbmVkVHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pO1xuICAgICAgLy8gU2luY2UgdGhlIGtleSBwYWlyIHdhcyBnZW5lcmF0ZWQgdXNpbmcgYSBwcml2YXRlIGtleSwgaXQgd2lsbCBhbHdheXMgaGF2ZSBhIHBydiBhdHRyaWJ1dGUsXG4gICAgICAvLyBoZW5jZSBpdCBpcyBzYWZlIHRvIHVzZSBub24tbnVsbCBvcGVyYXRvclxuICAgICAgc2lnbmVkVHJhbnNhY3Rpb24gPSBzaWduVHJhbnNhY3Rpb24oa2V5UGFpci5nZXRLZXlzKCkucHJ2ISwgdGhpcy50cmFuc2FjdGlvbi50b0pzb24oKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignRmFpbGVkIHRvIHNpZ24gdHJhbnNhY3Rpb24gdmlhIGhlbHBlci4nKTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIG1vcmUgc2lnbmF0dXJlcyB0aGFuIHdoYXQgd2Ugc3RhcnRlZCB3aXRoXG4gICAgaWYgKCFzaWduZWRUcmFuc2FjdGlvbi5zaWduYXR1cmUgfHwgb2xkU2lnbmF0dXJlQ291bnQgPj0gc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignVHJhbnNhY3Rpb24gc2lnbmluZyBkaWQgbm90IHJldHVybiBhbiBhZGRpdGlvbmFsIHNpZ25hdHVyZS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcsIHNpZ25lZFRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgLy8gVGhpcyBpcyBhIG5vLW9wIHNpbmNlIFRyb24gdHJhbnNhY3Rpb25zIGFyZSBidWlsdCBmcm9tXG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBIHZhbGlkIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBhbiBpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMudHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZykge1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0aGlzLmZyb21JbXBsZW1lbnRhdGlvbih0eCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIHRoZSB2YWxpZGl0eSBvZiB0aGlzIHRyYW5zYWN0aW9uIGJ5IHRoZSBnaXZlbiBhbW91bnQgb2YgdGltZVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZXh0ZW5zaW9uTXMgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZXh0ZW5kIHRoZSB2YWxpZFRvIHRpbWVcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGV4dGVuZFZhbGlkVG8oZXh0ZW5zaW9uTXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZXh0ZW5kRXhwaXJhdGlvbihleHRlbnNpb25Ncyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgY2Fubm90IGJlIGJlbG93IHplcm8uJyk7XG4gICAgfVxuXG4gICAgLy8gbWF4IGxvbmcgaW4gSmF2YSAtIGFzc3VtZWQgdXBwZXIgbGltaXQgZm9yIGEgVFJYIHRyYW5zYWN0aW9uXG4gICAgaWYgKHZhbHVlLmlzR3JlYXRlclRoYW4obmV3IEJpZ051bWJlcignOTIyMzM3MjAzNjg1NDc3NTgwNycpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIGhhbmRsZWQgYnkgdGhlIGphdmF0cm9uIG5vZGUuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogdm9pZCB7XG4gICAgLy8gYXNzdW1lcyBhIGJhc2UgNTggYWRkcmVzcyBmb3Igb3VyIGFkZHJlc3Nlc1xuICAgIGlmICghaXNCYXNlNThBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihhZGRyZXNzLmFkZHJlc3MgKyAnIGlzIG5vdCBhIHZhbGlkIGJhc2U1OCBhZGRyZXNzLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgbm90IHZhbGlkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBjb250ZW50cyBvZiBhIHJhdyB0cmFuc2FjdGlvbi4gVGhlIHZhbGlkYXRpb25cbiAgICogcGhhc2UgaXMgdG8gY29tcGFyZSB0aGUgcmF3LWRhdGEtaGV4IHRvIHRoZSByYXctZGF0YSBvZiB0aGVcbiAgICogdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZSBjb250ZW50cyB0byBiZSB2YWxpZGF0ZWQgYXJlXG4gICAqIDEuIFRoZSB0cmFuc2FjdGlvbiBpZFxuICAgKiAyLiBUaGUgZXhwaXJhdGlvbiBkYXRlXG4gICAqIDMuIFRoZSB0aW1lc3RhbXBcbiAgICogNC4gVGhlIGNvbnRyYWN0XG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nfSByYXdUcmFuc2FjdGlvbiBUaGUgcmF3IHRyYW5zYWN0aW9uIHRvIGJlIHZhbGlkYXRlZFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVE9ETzogVmFsaWRhdGlvbiBvZiBzaWduYXR1cmVcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBlbXB0eScpO1xuICAgIH1cbiAgICBsZXQgY3VyclRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQ7XG4gICAgLy8gcmF3VHJhbnNhY3Rpb24gY2FuIGJlIGVpdGhlciBTdHJpbmdpZmllZCBKU09OIE9SXG4gICAgLy8gaXQgY2FuIGJlIGEgcmVndWxhciBKU09OIG9iamVjdCAobm90IHN0cmluZ2lmaWVkKS5cbiAgICBpZiAodHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3VyclRyYW5zYWN0aW9uID0gSlNPTi5wYXJzZShyYXdUcmFuc2FjdGlvbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1RoZXJlIHdhcyBlcnJvciBpbiBwYXJzaW5nIHRoZSBKU09OIHN0cmluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChyYXdUcmFuc2FjdGlvbikpIHtcbiAgICAgIGN1cnJUcmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGlzIG5vdCBhbiBvYmplY3Qgb3Igc3RyaW5naWZpZWQganNvbicpO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkUmF3RGF0YUhleCA9IGRlY29kZVRyYW5zYWN0aW9uKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YV9oZXgpO1xuICAgIGlmICghY3VyclRyYW5zYWN0aW9uLnR4SUQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gSUQgaXMgZW1wdHknKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgdGhlIHRyYW5zYWN0aW9uIElEIGZyb20gdGhlIHJhdyBkYXRhIGhleFxuICAgIGNvbnN0IGhleEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YV9oZXgsICdoZXgnKTtcbiAgICBjb25zdCBjdXJyVHhJRCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoZXhCdWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgaWYgKGN1cnJUcmFuc2FjdGlvbi50eElEICE9PSBjdXJyVHhJRCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm90IGhhdmUgYSB2YWxpZCBpZCcpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSB0aGUgZXhwaXJhdGlvbiB0aW1lIGZyb20gdGhlIHJhdy1kYXRhLWhleFxuICAgIGlmIChjdXJyVHJhbnNhY3Rpb24ucmF3X2RhdGEuZXhwaXJhdGlvbiAhPT0gZGVjb2RlZFJhd0RhdGFIZXguZXhwaXJhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm90IGhhdmUgYSB2YWxpZCBleHBpcmF0aW9uJyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIHRoZSB0aW1lc3RhbXAgZnJvbSB0aGUgcmF3LWRhdGEtaGV4XG4gICAgaWYgKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YS50aW1lc3RhbXAgIT09IGRlY29kZWRSYXdEYXRhSGV4LnRpbWVzdGFtcCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm90IGhhdmUgYSB2YWxpZCB0aW1ldGFtcCcpO1xuICAgIH1cbiAgICAvLyBUcmFuc2FjdGlvbiBjb250cmFjdCBtdXN0IGV4aXN0XG4gICAgaWYgKCFjdXJyVHJhbnNhY3Rpb24ucmF3X2RhdGEuY29udHJhY3QpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY29udHJhY3RzIGFyZSBlbXB0eScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGhleEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLnRvSnNvbigpLnJhd19kYXRhX2hleCwgJ2hleCcpO1xuICAgIGNvbnN0IHR4SWQgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoaGV4QnVmZmVyKS5kaWdlc3QoJ2hleCcpO1xuICAgIGlmICh0cmFuc2FjdGlvbi5pZCAhPT0gdHhJZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKHRyYW5zYWN0aW9uLmlkICsgJyBpcyBub3QgYSB2YWxpZCB0cmFuc2FjdGlvbiBpZC4gRXhwZWN0aW5nOiAnICsgdHhJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gIH1cbn1cbiJdfQ==
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQW9DO0FBQ3BDLDBDQUE0QjtBQUM1QixnRUFBcUM7QUFFckMsbURBUzhCO0FBRzlCLG1DQU9pQjtBQUNqQiwrQ0FBNEM7QUFDNUMsdUNBQW9DO0FBRXBDOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxpQ0FBc0I7SUFTNUQ7Ozs7T0FJRztJQUNILFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVyxDQUFDLFdBQXdCO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFnQjtRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBQSxzQ0FBOEIsRUFBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxLQUFZO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7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QUFDLFVBQVUsR0FBRyxrQ0FBMEIsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxxQ0FBMEIsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF4UkQsZ0RBd1JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFNpZ25pbmdFcnJvcixcbiAgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcixcbiAgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uUmVjZWlwdCwgQmxvY2sgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MnO1xuaW1wb3J0IHtcbiAgc2lnblRyYW5zYWN0aW9uLFxuICBpc0Jhc2U1OEFkZHJlc3MsXG4gIGRlY29kZVRyYW5zYWN0aW9uLFxuICBWQUxJRF9SRVNPVVJDRV9UWVBFUyxcbiAgZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzLFxuICBUUkFOU0FDVElPTl9NQVhfRVhQSVJBVElPTixcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5cbi8qKlxuICogVHJvbiB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIC8vIHRyYW5zYWN0aW9uIGJlaW5nIGJ1aWx0XG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9vd25lckFkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9yZWZCbG9ja0J5dGVzOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcmVmQmxvY2tIYXNoOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZXhwaXJhdGlvbjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX3RpbWVzdGFtcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gX2NvaW5Db25maWcgQ29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc291cmNlIGFkZHJlc3MgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FkZHJlc3N9IGFkZHJlc3MgVGhlIHNvdXJjZSBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHRoZSBidWlsZGVyIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgc2V0XG4gICAqL1xuICBzb3VyY2UoYWRkcmVzczogQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKGFkZHJlc3MpO1xuICAgIHRoaXMuX293bmVyQWRkcmVzcyA9IGdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdGltZXN0YW1wIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbiAgICogQHJldHVybnMgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIHRpbWVzdGFtcCh0aW1lOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl90aW1lc3RhbXAgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgYmxvY2sgdmFsdWVzLFxuICAgKlxuICAgKiBAcGFyYW0ge0Jsb2NrfSBibG9jayB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgbnVtYmVyIGFuZCBoYXNoIG9mIHRoZSBibG9ja1xuICAgKiBAcmV0dXJucyB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgYmxvY2soYmxvY2s6IEJsb2NrKTogdGhpcyB7XG4gICAgY29uc3QgYmxvY2tCeXRlcyA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICBibG9ja0J5dGVzLndyaXRlSW50MzJCRShibG9jay5udW1iZXIsIDQpO1xuICAgIHRoaXMuX3JlZkJsb2NrQnl0ZXMgPSBibG9ja0J5dGVzLnNsaWNlKDYsIDgpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB0aGlzLl9yZWZCbG9ja0hhc2ggPSBCdWZmZXIuZnJvbShibG9jay5oYXNoLCAnaGV4Jykuc2xpY2UoOCwgMTYpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgdHJhbnNhY3Rpb24sIHNldCB0aW1lc3RhbXAgaWYgaXQgd2FzIG5vdCBzZXQgcHJldmlvdXNseVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSB0aGUgZXhwaXJhdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAcmV0dXJucyB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgZXhwaXJhdGlvbih0aW1lOiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5pZCkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0V4cGlyYXRpb24gaXMgYWxyZWFkeSBzZXQsIGl0IGNhbiBvbmx5IGJlIGV4dGVuZGVkJyk7XG4gICAgfVxuICAgIHRoaXMuX3RpbWVzdGFtcCA9IHRoaXMuX3RpbWVzdGFtcCB8fCBEYXRlLm5vdygpO1xuICAgIHRoaXMudmFsaWRhdGVFeHBpcmF0aW9uVGltZSh0aW1lKTtcbiAgICB0aGlzLl9leHBpcmF0aW9uID0gdGltZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0cmFuc2FjdGlvbiB0YWtlcyBpbiByYXcgSlNPTiBkaXJlY3RseSBmcm9tIHRoZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uUmVjZWlwdH0gcmF3VHJhbnNhY3Rpb24gVGhlIFRyb24gdHJhbnNhY3Rpb24gaW4gSlNPTiBmb3JtYXQgYXMgcmV0dXJuZWQgYnkgdGhlIFRyb24gbGliIG9yIGEgc3RyaW5naWZ5ZWQgdmVyc2lvbiBvZiBzdWNoIEpTT04uXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0gVHJvbiB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGxldCB0eDtcbiAgICBpZiAodHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcsIHRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgcmF3VHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmlucHV0cykge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIHNlbmRlcicpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5vdXRwdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm8gcmVjZWl2ZXInKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlTaWduYXR1cmUoa2V5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcHBseVNpZ25hdHVyZShrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qgb2xkVHJhbnNhY3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uLnRvSnNvbigpO1xuICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBzaWduYXR1cmVzIHRvIGNvbXBhcmUgdGhlbSB3aXRoIHRoZSBuZXcgb25lcyBpbiBhIGxhdGVyIHN0ZXAuIFNpZ25hdHVyZXNcbiAgICAvLyBjYW4gYmUgdW5kZWZpbmVkIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHRyYW5zYWN0aW9uIGlzIGJlaW5nIHNpZ25lZFxuICAgIGNvbnN0IG9sZFNpZ25hdHVyZUNvdW50ID0gb2xkVHJhbnNhY3Rpb24uc2lnbmF0dXJlID8gb2xkVHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA6IDA7XG4gICAgbGV0IHNpZ25lZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICAgIC8vIFNpbmNlIHRoZSBrZXkgcGFpciB3YXMgZ2VuZXJhdGVkIHVzaW5nIGEgcHJpdmF0ZSBrZXksIGl0IHdpbGwgYWx3YXlzIGhhdmUgYSBwcnYgYXR0cmlidXRlLFxuICAgICAgLy8gaGVuY2UgaXQgaXMgc2FmZSB0byB1c2Ugbm9uLW51bGwgb3BlcmF0b3JcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gc2lnblRyYW5zYWN0aW9uKGtleVBhaXIuZ2V0S2V5cygpLnBydiEsIHRoaXMudHJhbnNhY3Rpb24udG9Kc29uKCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0ZhaWxlZCB0byBzaWduIHRyYW5zYWN0aW9uIHZpYSBoZWxwZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBtb3JlIHNpZ25hdHVyZXMgdGhhbiB3aGF0IHdlIHN0YXJ0ZWQgd2l0aFxuICAgIGlmICghc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmF0dXJlIHx8IG9sZFNpZ25hdHVyZUNvdW50ID49IHNpZ25lZFRyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1RyYW5zYWN0aW9uIHNpZ25pbmcgZGlkIG5vdCByZXR1cm4gYW4gYWRkaXRpb25hbCBzaWduYXR1cmUuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnLCBzaWduZWRUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIC8vIFRoaXMgaXMgYSBuby1vcCBzaW5jZSBUcm9uIHRyYW5zYWN0aW9ucyBhcmUgYnVpbHQgZnJvbVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5pZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQSB2YWxpZCB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gdGhpcy5mcm9tSW1wbGVtZW50YXRpb24odHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVuZCB0aGUgdmFsaWRpdHkgb2YgdGhpcyB0cmFuc2FjdGlvbiBieSB0aGUgZ2l2ZW4gYW1vdW50IG9mIHRpbWVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV4dGVuc2lvbk1zIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGV4dGVuZCB0aGUgdmFsaWRUbyB0aW1lXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBleHRlbmRWYWxpZFRvKGV4dGVuc2lvbk1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmV4dGVuZEV4cGlyYXRpb24oZXh0ZW5zaW9uTXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuT3JFcXVhbFRvKDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBiZWxvdyB6ZXJvLicpO1xuICAgIH1cblxuICAgIC8vIG1heCBsb25nIGluIEphdmEgLSBhc3N1bWVkIHVwcGVyIGxpbWl0IGZvciBhIFRSWCB0cmFuc2FjdGlvblxuICAgIGlmICh2YWx1ZS5pc0dyZWF0ZXJUaGFuKG5ldyBCaWdOdW1iZXIoJzkyMjMzNzIwMzY4NTQ3NzU4MDcnKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBoYW5kbGVkIGJ5IHRoZSBqYXZhdHJvbiBub2RlLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAgIC8vIGFzc3VtZXMgYSBiYXNlIDU4IGFkZHJlc3MgZm9yIG91ciBhZGRyZXNzZXNcbiAgICBpZiAoIWlzQmFzZTU4QWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYWRkcmVzcy5hZGRyZXNzICsgJyBpcyBub3QgYSB2YWxpZCBiYXNlNTggYWRkcmVzcy4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzb3VyY2UgdHlwZVxuICAgKiBAcGFyYW0gcmVzb3VyY2UgVGhlIHJlc291cmNlIHR5cGUgdG8gYmUgdmFsaWRhdGVkXG4gICAqL1xuICB2YWxpZGF0ZVJlc291cmNlKHJlc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIVZBTElEX1JFU09VUkNFX1RZUEVTLmluY2x1ZGVzKHJlc291cmNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc291cmNlICsgJyBpcyBub3QgYSB2YWxpZCByZXNvdXJjZSB0eXBlLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgbm90IHZhbGlkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBjb250ZW50cyBvZiBhIHJhdyB0cmFuc2FjdGlvbi4gVGhlIHZhbGlkYXRpb25cbiAgICogcGhhc2UgaXMgdG8gY29tcGFyZSB0aGUgcmF3LWRhdGEtaGV4IHRvIHRoZSByYXctZGF0YSBvZiB0aGVcbiAgICogdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZSBjb250ZW50cyB0byBiZSB2YWxpZGF0ZWQgYXJlXG4gICAqIDEuIFRoZSB0cmFuc2FjdGlvbiBpZFxuICAgKiAyLiBUaGUgZXhwaXJhdGlvbiBkYXRlXG4gICAqIDMuIFRoZSB0aW1lc3RhbXBcbiAgICogNC4gVGhlIGNvbnRyYWN0XG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nfSByYXdUcmFuc2FjdGlvbiBUaGUgcmF3IHRyYW5zYWN0aW9uIHRvIGJlIHZhbGlkYXRlZFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVE9ETzogVmFsaWRhdGlvbiBvZiBzaWduYXR1cmVcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBlbXB0eScpO1xuICAgIH1cbiAgICBsZXQgY3VyclRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQ7XG4gICAgLy8gcmF3VHJhbnNhY3Rpb24gY2FuIGJlIGVpdGhlciBTdHJpbmdpZmllZCBKU09OIE9SXG4gICAgLy8gaXQgY2FuIGJlIGEgcmVndWxhciBKU09OIG9iamVjdCAobm90IHN0cmluZ2lmaWVkKS5cbiAgICBpZiAodHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3VyclRyYW5zYWN0aW9uID0gSlNPTi5wYXJzZShyYXdUcmFuc2FjdGlvbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1RoZXJlIHdhcyBlcnJvciBpbiBwYXJzaW5nIHRoZSBKU09OIHN0cmluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChyYXdUcmFuc2FjdGlvbikpIHtcbiAgICAgIGN1cnJUcmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGlzIG5vdCBhbiBvYmplY3Qgb3Igc3RyaW5naWZpZWQganNvbicpO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkUmF3RGF0YUhleCA9IGRlY29kZVRyYW5zYWN0aW9uKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YV9oZXgpO1xuICAgIGlmICghY3VyclRyYW5zYWN0aW9uLnR4SUQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gSUQgaXMgZW1wdHknKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgdGhlIHRyYW5zYWN0aW9uIElEIGZyb20gdGhlIHJhdyBkYXRhIGhleFxuICAgIGNvbnN0IGhleEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YV9oZXgsICdoZXgnKTtcbiAgICBjb25zdCBjdXJyVHhJRCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoZXhCdWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgaWYgKGN1cnJUcmFuc2FjdGlvbi50eElEICE9PSBjdXJyVHhJRCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm90IGhhdmUgYSB2YWxpZCBpZCcpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSB0aGUgZXhwaXJhdGlvbiB0aW1lIGZyb20gdGhlIHJhdy1kYXRhLWhleFxuICAgIGlmIChjdXJyVHJhbnNhY3Rpb24ucmF3X2RhdGEuZXhwaXJhdGlvbiAhPT0gZGVjb2RlZFJhd0RhdGFIZXguZXhwaXJhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm90IGhhdmUgYSB2YWxpZCBleHBpcmF0aW9uJyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIHRoZSB0aW1lc3RhbXAgZnJvbSB0aGUgcmF3LWRhdGEtaGV4XG4gICAgaWYgKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YS50aW1lc3RhbXAgIT09IGRlY29kZWRSYXdEYXRhSGV4LnRpbWVzdGFtcCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm90IGhhdmUgYSB2YWxpZCB0aW1ldGFtcCcpO1xuICAgIH1cbiAgICAvLyBUcmFuc2FjdGlvbiBjb250cmFjdCBtdXN0IGV4aXN0XG4gICAgaWYgKCFjdXJyVHJhbnNhY3Rpb24ucmF3X2RhdGEuY29udHJhY3QpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY29udHJhY3RzIGFyZSBlbXB0eScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGhleEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLnRvSnNvbigpLnJhd19kYXRhX2hleCwgJ2hleCcpO1xuICAgIGNvbnN0IHR4SWQgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoaGV4QnVmZmVyKS5kaWdlc3QoJ2hleCcpO1xuICAgIGlmICh0cmFuc2FjdGlvbi5pZCAhPT0gdHhJZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKHRyYW5zYWN0aW9uLmlkICsgJyBpcyBub3QgYSB2YWxpZCB0cmFuc2FjdGlvbiBpZC4gRXhwZWN0aW5nOiAnICsgdHhJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBleHBpcmF0aW9uIHRpbWUgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgZXhwaXJhdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcn0gSWYgdGhlIGV4cGlyYXRpb24gdGltZSBpcyBpbnZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZUV4cGlyYXRpb25UaW1lKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPCB0aGlzLl90aW1lc3RhbXApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignRXhwaXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aW1lc3RhbXAnKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPCBEYXRlLm5vdygpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0V4cGlyYXRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gY3VycmVudCB0aW1lJyk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIC0gdGhpcy5fdGltZXN0YW1wID4gVFJBTlNBQ1RJT05fTUFYX0VYUElSQVRJT04pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignRXhwaXJhdGlvbiBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gb25lIGRheScpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,27 @@
1
+ import { TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { TransactionReceipt } from './iface';
4
+ import { ResourceManagementTxBuilder } from './resourceManagementTxBuilder';
5
+ export declare class UndelegateResourceTxBuilder extends ResourceManagementTxBuilder {
6
+ constructor(_coinConfig: Readonly<CoinConfig>);
7
+ /** @inheritdoc */
8
+ protected get transactionType(): TransactionType;
9
+ /**
10
+ * Initialize the transaction builder fields using the transaction data
11
+ *
12
+ * @param {TransactionReceipt | string} rawTransaction the transaction data in a string or JSON format
13
+ * @returns {DelegateResourceTxBuilder} the builder with the transaction data set
14
+ */
15
+ initBuilder(rawTransaction: TransactionReceipt | string): this;
16
+ /**
17
+ * Helper method to create the undelegate resource transaction
18
+ */
19
+ protected createResourceManagementTransaction(): void;
20
+ /**
21
+ * Helper method to get the undelegate resource transaction raw data hex
22
+ *
23
+ * @returns {string} the undelegate resource transaction raw data hex
24
+ */
25
+ protected getResourceManagementTxRawDataHex(): string;
26
+ }
27
+ //# sourceMappingURL=undelegateResourceTxBuilder.d.ts.map