@witnet/sdk 1.0.0-beta.0

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 (149) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -0
  3. package/dist/package.json +72 -0
  4. package/dist/src/bin/helpers.d.ts +91 -0
  5. package/dist/src/bin/helpers.d.ts.map +1 -0
  6. package/dist/src/bin/helpers.js +816 -0
  7. package/dist/src/index.d.ts +5 -0
  8. package/dist/src/index.d.ts.map +1 -0
  9. package/dist/src/index.js +47 -0
  10. package/dist/src/lib/crypto/account.d.ts +32 -0
  11. package/dist/src/lib/crypto/account.d.ts.map +1 -0
  12. package/dist/src/lib/crypto/account.js +106 -0
  13. package/dist/src/lib/crypto/coinbase.d.ts +10 -0
  14. package/dist/src/lib/crypto/coinbase.d.ts.map +1 -0
  15. package/dist/src/lib/crypto/coinbase.js +28 -0
  16. package/dist/src/lib/crypto/index.d.ts +8 -0
  17. package/dist/src/lib/crypto/index.d.ts.map +1 -0
  18. package/dist/src/lib/crypto/index.js +30 -0
  19. package/dist/src/lib/crypto/interfaces.d.ts +85 -0
  20. package/dist/src/lib/crypto/interfaces.d.ts.map +1 -0
  21. package/dist/src/lib/crypto/interfaces.js +3 -0
  22. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +55 -0
  23. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
  24. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +339 -0
  25. package/dist/src/lib/crypto/payloads/StakePayload.d.ts +28 -0
  26. package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
  27. package/dist/src/lib/crypto/payloads/StakePayload.js +142 -0
  28. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +36 -0
  29. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
  30. package/dist/src/lib/crypto/payloads/UnstakePayload.js +154 -0
  31. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +25 -0
  32. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
  33. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +128 -0
  34. package/dist/src/lib/crypto/payloads.d.ts +57 -0
  35. package/dist/src/lib/crypto/payloads.d.ts.map +1 -0
  36. package/dist/src/lib/crypto/payloads.js +170 -0
  37. package/dist/src/lib/crypto/signer.d.ts +33 -0
  38. package/dist/src/lib/crypto/signer.d.ts.map +1 -0
  39. package/dist/src/lib/crypto/signer.js +194 -0
  40. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +15 -0
  41. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
  42. package/dist/src/lib/crypto/transmitters/DataRequests.js +23 -0
  43. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +12 -0
  44. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
  45. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +17 -0
  46. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +18 -0
  47. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
  48. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +53 -0
  49. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +11 -0
  50. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
  51. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +16 -0
  52. package/dist/src/lib/crypto/transmitters.d.ts +47 -0
  53. package/dist/src/lib/crypto/transmitters.d.ts.map +1 -0
  54. package/dist/src/lib/crypto/transmitters.js +416 -0
  55. package/dist/src/lib/crypto/types.d.ts +161 -0
  56. package/dist/src/lib/crypto/types.d.ts.map +1 -0
  57. package/dist/src/lib/crypto/types.js +273 -0
  58. package/dist/src/lib/crypto/utils.d.ts +21 -0
  59. package/dist/src/lib/crypto/utils.d.ts.map +1 -0
  60. package/dist/src/lib/crypto/utils.js +156 -0
  61. package/dist/src/lib/crypto/wallet.d.ts +120 -0
  62. package/dist/src/lib/crypto/wallet.d.ts.map +1 -0
  63. package/dist/src/lib/crypto/wallet.js +258 -0
  64. package/dist/src/lib/index.d.ts +5 -0
  65. package/dist/src/lib/index.d.ts.map +1 -0
  66. package/dist/src/lib/index.js +44 -0
  67. package/dist/src/lib/radon/ccdr/eth.d.ts +160 -0
  68. package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -0
  69. package/dist/src/lib/radon/ccdr/eth.js +272 -0
  70. package/dist/src/lib/radon/ccdr/index.d.ts +14 -0
  71. package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -0
  72. package/dist/src/lib/radon/ccdr/index.js +39 -0
  73. package/dist/src/lib/radon/ccdr/wit.d.ts +23 -0
  74. package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -0
  75. package/dist/src/lib/radon/ccdr/wit.js +35 -0
  76. package/dist/src/lib/radon/filters.d.ts +14 -0
  77. package/dist/src/lib/radon/filters.d.ts.map +1 -0
  78. package/dist/src/lib/radon/filters.js +45 -0
  79. package/dist/src/lib/radon/index.d.ts +296 -0
  80. package/dist/src/lib/radon/index.d.ts.map +1 -0
  81. package/dist/src/lib/radon/index.js +707 -0
  82. package/dist/src/lib/radon/reducers.d.ts +29 -0
  83. package/dist/src/lib/radon/reducers.d.ts.map +1 -0
  84. package/dist/src/lib/radon/reducers.js +66 -0
  85. package/dist/src/lib/radon/types.d.ts +521 -0
  86. package/dist/src/lib/radon/types.d.ts.map +1 -0
  87. package/dist/src/lib/radon/types.js +936 -0
  88. package/dist/src/lib/radon/utils.d.ts +53 -0
  89. package/dist/src/lib/radon/utils.d.ts.map +1 -0
  90. package/dist/src/lib/radon/utils.js +153 -0
  91. package/dist/src/lib/rpc/index.d.ts +3 -0
  92. package/dist/src/lib/rpc/index.d.ts.map +1 -0
  93. package/dist/src/lib/rpc/index.js +19 -0
  94. package/dist/src/lib/rpc/nodes.d.ts +40 -0
  95. package/dist/src/lib/rpc/nodes.d.ts.map +1 -0
  96. package/dist/src/lib/rpc/nodes.js +293 -0
  97. package/dist/src/lib/rpc/provider.d.ts +88 -0
  98. package/dist/src/lib/rpc/provider.d.ts.map +1 -0
  99. package/dist/src/lib/rpc/provider.js +336 -0
  100. package/dist/src/lib/rpc/reporter.d.ts +18 -0
  101. package/dist/src/lib/rpc/reporter.d.ts.map +1 -0
  102. package/dist/src/lib/rpc/reporter.js +30 -0
  103. package/dist/src/lib/rpc/types.d.ts +409 -0
  104. package/dist/src/lib/rpc/types.d.ts.map +1 -0
  105. package/dist/src/lib/rpc/types.js +81 -0
  106. package/dist/src/lib/types.d.ts +18 -0
  107. package/dist/src/lib/types.d.ts.map +1 -0
  108. package/dist/src/lib/types.js +7 -0
  109. package/dist/src/lib/utils.d.ts +13 -0
  110. package/dist/src/lib/utils.d.ts.map +1 -0
  111. package/dist/src/lib/utils.js +97 -0
  112. package/dist/witnet/assets/index.d.ts +30 -0
  113. package/dist/witnet/assets/index.d.ts.map +1 -0
  114. package/dist/witnet/assets/index.js +6 -0
  115. package/dist/witnet/assets/modals/index.d.ts +18 -0
  116. package/dist/witnet/assets/modals/index.d.ts.map +1 -0
  117. package/dist/witnet/assets/modals/index.js +21 -0
  118. package/dist/witnet/assets/modals/web3/eth.d.ts +5 -0
  119. package/dist/witnet/assets/modals/web3/eth.d.ts.map +1 -0
  120. package/dist/witnet/assets/modals/web3/eth.js +26 -0
  121. package/dist/witnet/assets/modals/web3/wit.d.ts +4 -0
  122. package/dist/witnet/assets/modals/web3/wit.d.ts.map +1 -0
  123. package/dist/witnet/assets/modals/web3/wit.js +20 -0
  124. package/dist/witnet/assets/requests.d.ts +11 -0
  125. package/dist/witnet/assets/requests.d.ts.map +1 -0
  126. package/dist/witnet/assets/requests.js +88 -0
  127. package/dist/witnet/witnet.proto.json +1325 -0
  128. package/package.json +72 -0
  129. package/src/bin/cli/history.js +31 -0
  130. package/src/bin/cli/inspect.js +359 -0
  131. package/src/bin/cli/network.js +592 -0
  132. package/src/bin/cli/nodes.js +364 -0
  133. package/src/bin/cli/radon.js +814 -0
  134. package/src/bin/cli/wallet.js +1000 -0
  135. package/src/bin/helpers.js +829 -0
  136. package/src/bin/postinstall.js +9 -0
  137. package/src/bin/toolkit.js +294 -0
  138. package/witnet/assets/_index.js +8 -0
  139. package/witnet/assets/_requests.js +25 -0
  140. package/witnet/assets/_sources.js +36 -0
  141. package/witnet/assets/_templates.js +36 -0
  142. package/witnet/assets/index.js +4 -0
  143. package/witnet/assets/modals/index.js +25 -0
  144. package/witnet/assets/modals/web3/btc.js +0 -0
  145. package/witnet/assets/modals/web3/eth.js +29 -0
  146. package/witnet/assets/modals/web3/sol.js +0 -0
  147. package/witnet/assets/modals/web3/wit.js +23 -0
  148. package/witnet/assets/requests.js +94 -0
  149. package/witnet/witnet.proto.json +1325 -0
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataRequestPayload = void 0;
4
+ const Long = require("long");
5
+ const protobufjs_1 = require("protobufjs");
6
+ const protoRoot = protobufjs_1.Root.fromJSON(require("../../../../witnet/witnet.proto.json"));
7
+ const helpers_1 = require("../../../bin/helpers");
8
+ const radon_1 = require("../../radon");
9
+ const payloads_1 = require("../payloads");
10
+ const types_1 = require("../types");
11
+ const utils_1 = require("../utils");
12
+ const DR_COMMIT_TX_WEIGHT = 400;
13
+ const DR_REVEAL_TX_WEIGHT = 200;
14
+ const DR_TALLY_TX_WEIGHT = 100;
15
+ const DR_TX_WEIGHT_ALPHA = 1;
16
+ const DR_TX_WEIGHT_BETA = 1;
17
+ const TX_WEIGHT_INPUT_SIZE = 133;
18
+ const TX_WEIGHT_OUTPUT_SIZE = 36;
19
+ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
20
+ constructor(protoTypeName, radon, initialTarget) {
21
+ super(protoTypeName, initialTarget);
22
+ if (radon instanceof radon_1.RadonRequest) {
23
+ this._request = radon;
24
+ }
25
+ else if (radon instanceof radon_1.RadonTemplate) {
26
+ this.template = radon;
27
+ }
28
+ else {
29
+ throw new TypeError(`DataRequestPayload: unsupported Radon asset type: ${radon?.constructor.name}`);
30
+ }
31
+ }
32
+ get droHash() {
33
+ const obj = this._toDrOutputProtobuf();
34
+ if (obj) {
35
+ const DataRequestOutput = protoRoot.lookupType("DataRequestOutput");
36
+ const err = DataRequestOutput.verify(obj);
37
+ if (err) {
38
+ throw TypeError(err);
39
+ }
40
+ else {
41
+ // console.log("\ndroHash.obj =>", JSON.stringify(obj))
42
+ const message = DataRequestOutput.fromObject(obj);
43
+ // console.log("\ndroHash.message =>", JSON.stringify(message))
44
+ const bytecode = DataRequestOutput.encode(message).finish();
45
+ // console.log("\ndroHash.bytecode =>", bytecode)
46
+ return (0, helpers_1.toHexString)((0, utils_1.sha256)(bytecode));
47
+ }
48
+ }
49
+ else {
50
+ return undefined;
51
+ }
52
+ }
53
+ get droSLA() {
54
+ if (this._target && this._fees) {
55
+ const minConsensusPercentage = 51;
56
+ const witnesses = (typeof this._target.witnesses === 'object'
57
+ ? Object.keys(this._target.witnesses).length
58
+ : this._target.witnesses || 0);
59
+ const commitAndRevealFee = this._fees2UnitaryCommitRevealReward(this._fees, witnesses);
60
+ const witnessReward = this._fees2UnitaryReward(this._fees);
61
+ const collateral = witnessReward * BigInt(DataRequestPayload.COLLATERAL_RATIO);
62
+ if (collateral > Number.MAX_SAFE_INTEGER)
63
+ throw new TypeError(`${this.constructor.name}: too much witness collateral: ${collateral.toString()} > ${Number.MAX_SAFE_INTEGER}`);
64
+ else if (witnessReward > Number.MAX_SAFE_INTEGER)
65
+ throw new TypeError(`${this.constructor.name}: too much witness reward: ${witnessReward.toString()} > ${Number.MAX_SAFE_INTEGER}`);
66
+ else if (commitAndRevealFee > Number.MAX_SAFE_INTEGER)
67
+ throw new TypeError(`${this.constructor.name}: too much commit/reveal fee: ${commitAndRevealFee.toString()} > ${Number.MAX_SAFE_INTEGER}`);
68
+ return {
69
+ collateral: Number(collateral),
70
+ commitAndRevealFee: Number(commitAndRevealFee),
71
+ minConsensusPercentage,
72
+ witnesses,
73
+ witnessReward: Number(witnessReward),
74
+ };
75
+ }
76
+ else {
77
+ return undefined;
78
+ }
79
+ }
80
+ get hash() {
81
+ const _bytecode = this.bytecode;
82
+ if (_bytecode && this.droHash) {
83
+ return (0, helpers_1.toHexString)((0, utils_1.sha256)(Buffer.concat([
84
+ (0, helpers_1.fromHexString)(this.droHash),
85
+ (0, utils_1.sha256)(_bytecode),
86
+ ])));
87
+ }
88
+ else {
89
+ return undefined;
90
+ }
91
+ }
92
+ get maxWeight() {
93
+ return DataRequestPayload.MAX_WEIGHT;
94
+ }
95
+ get parameterized() {
96
+ return !!this.template;
97
+ }
98
+ get prepared() {
99
+ return (this.covered
100
+ && this._inputs.length > 0
101
+ && !!this._request
102
+ && !!this._target);
103
+ }
104
+ get radArgs() {
105
+ return this.template ? this._target?.args : undefined;
106
+ }
107
+ get radHash() {
108
+ return this.request?.radHash;
109
+ }
110
+ get request() {
111
+ return this._request;
112
+ }
113
+ get value() {
114
+ if (this._target && this._fees) {
115
+ return types_1.Coins.fromPedros(this._fees2Value(this._fees, this._target.witnesses || 0));
116
+ }
117
+ else {
118
+ return types_1.Coins.zero();
119
+ }
120
+ }
121
+ get weight() {
122
+ if (this._request && this._target) {
123
+ const witnesses = typeof this._target.witnesses === 'object' ? Object.keys(this._target.witnesses).length : this._target.witnesses || 0;
124
+ return (DR_TX_WEIGHT_ALPHA * (this._request.weight() + 8 + 2 + 8 + 4 + 8),
125
+ +this._inputs.length * TX_WEIGHT_INPUT_SIZE
126
+ + this._outputs.length * TX_WEIGHT_OUTPUT_SIZE
127
+ + witnesses * (DR_COMMIT_TX_WEIGHT
128
+ + DR_REVEAL_TX_WEIGHT * DR_TX_WEIGHT_BETA
129
+ + TX_WEIGHT_OUTPUT_SIZE // TODO V2.1: typeof this._target.witnesses === 'object' ? TX_WEIGHT_OUTPUT_SIZE : 0
130
+ )
131
+ + Math.max(DR_TALLY_TX_WEIGHT, this._target?.maxResultSize || 0) * DR_TX_WEIGHT_BETA);
132
+ }
133
+ else {
134
+ return 0;
135
+ }
136
+ }
137
+ async consumeUtxos(ledger, reload) {
138
+ if (!this._target) {
139
+ throw new Error(`${this.constructor.name}: internal error: no in-flight params.`);
140
+ }
141
+ else if (this._target?.fees instanceof types_1.Coins) {
142
+ this._fees = this._target.fees.pedros;
143
+ return super.consumeUtxos(ledger, reload);
144
+ }
145
+ if (!this.covered) {
146
+ if (!this._target.witnesses) {
147
+ this._target.witnesses = Math.min(DataRequestPayload.DEFAULT_WITNESSES, await ledger.provider.witnesses());
148
+ if (this._target.witnesses < 3) {
149
+ delete this._target.witnesses;
150
+ throw new Error(`${this.constructor.name}: cannot estimate witnesses: network not ready for witnessing.`);
151
+ }
152
+ else if (this.weight > DataRequestPayload.MAX_WEIGHT * 0.8) {
153
+ const delta = this.weight - DataRequestPayload.MAX_WEIGHT * 0.8;
154
+ this._target.witnesses -= Math.ceil(delta / (DR_COMMIT_TX_WEIGHT + DR_REVEAL_TX_WEIGHT * TX_WEIGHT_OUTPUT_SIZE));
155
+ if (this._target.witnesses < 3) {
156
+ delete this._target.witnesses;
157
+ throw new Error(`${this.constructor.name}: cannot estimate witnesses: radon request too complex: ${this.weight} weight units`);
158
+ }
159
+ }
160
+ }
161
+ const priority = this._target?.fees || types_1.TransactionPriority.Opulent;
162
+ let estimatedFees = await this._estimateNetworkFees(ledger.provider, priority);
163
+ while (this._fees < estimatedFees) {
164
+ this._fees = estimatedFees;
165
+ this._outputs = [];
166
+ this._inputs = [];
167
+ this._covered = 0n;
168
+ // consume utxos as to cover for estimated value and estimated fees
169
+ const value = this._fees2Value(this._fees, this._target.witnesses);
170
+ const utxos = await ledger.selectUtxos({
171
+ value: types_1.Coins.fromPedros(value + this._fees - this._covered),
172
+ reload,
173
+ });
174
+ this._covered += utxos.map(utxo => BigInt(utxo.value)).reduce((prev, curr) => prev + curr, 0n);
175
+ this._inputs.push(...utxos);
176
+ ledger.consumeUtxos(...utxos);
177
+ this._change = this._covered - (value + this._fees);
178
+ if (this._change >= 0) {
179
+ this.prepareOutputs({ value: this._change });
180
+ estimatedFees = await this._estimateNetworkFees(ledger.provider, priority);
181
+ }
182
+ else {
183
+ // insufficient funds ...
184
+ break;
185
+ }
186
+ }
187
+ }
188
+ return this._change;
189
+ }
190
+ intoReceipt(target) {
191
+ return {
192
+ droHash: this.droHash,
193
+ radArgs: this.radArgs,
194
+ radHash: this.radHash,
195
+ witnesses: target.witnesses,
196
+ };
197
+ }
198
+ prepareOutputs(change) {
199
+ if (change?.value) {
200
+ this._outputs.push({
201
+ pkh: this._inputs[0].signer,
202
+ value: change.value,
203
+ time_lock: 0,
204
+ });
205
+ }
206
+ }
207
+ resetTarget(target) {
208
+ this._change = 0n;
209
+ this._covered = 0n;
210
+ this._fees = 0n;
211
+ this._inputs = [];
212
+ this._outputs = [];
213
+ this._target = target;
214
+ if (this.droSLA?.collateral && this.droSLA.collateral < DataRequestPayload.MIN_COLLATERAL) {
215
+ throw new TypeError(`${this.constructor.name}: witnessing collateral below minimum: ${this.droSLA.collateral} < ${DataRequestPayload.MIN_COLLATERAL}`);
216
+ }
217
+ if (this.template) {
218
+ const args = target?.args;
219
+ if (args === undefined) {
220
+ throw new TypeError(`${this.constructor.name}: no template args were passed.`);
221
+ }
222
+ else if (typeof args === 'string') {
223
+ this._request = this.template.buildRadonRequest([args]);
224
+ }
225
+ else {
226
+ this._request = this.template.buildRadonRequest(args);
227
+ }
228
+ }
229
+ delete this._priorities;
230
+ }
231
+ toJSON(humanize = false) {
232
+ const droSLA = this.droSLA;
233
+ return {
234
+ inputs: this.inputs
235
+ .map(utxo => ({ output_pointer: utxo.output_pointer })),
236
+ outputs: this.outputs.map(vto => ({
237
+ pkh: vto.pkh,
238
+ time_lock: vto.time_lock,
239
+ value: vto.value.toString(),
240
+ })),
241
+ dr_output: {
242
+ ...(this._request ? { data_request: this._request.toJSON(humanize) } : {}),
243
+ commit_and_reveal_fee: droSLA?.commitAndRevealFee,
244
+ min_consensus_percentage: droSLA?.minConsensusPercentage,
245
+ witnesses: droSLA?.witnesses,
246
+ witness_reward: droSLA?.witnessReward,
247
+ collateral: droSLA?.collateral
248
+ }
249
+ };
250
+ }
251
+ toProtobuf() {
252
+ if (this.prepared && this._target && this._request) {
253
+ return {
254
+ inputs: this.inputs
255
+ .map(utxo => {
256
+ const transactionId = utxo.output_pointer.split(':')[0];
257
+ const outputIndex = parseInt(utxo.output_pointer.split(':')[1]);
258
+ return {
259
+ outputPointer: {
260
+ transactionId: { SHA256: Array.from((0, helpers_1.fromHexString)(transactionId)) },
261
+ ...(outputIndex > 0 ? { outputIndex } : {}),
262
+ },
263
+ };
264
+ }),
265
+ outputs: this.outputs.map(vto => ({
266
+ pkh: { hash: Array.from(types_1.PublicKeyHash.fromBech32(vto.pkh).toBytes20()), },
267
+ value: Long.fromValue(vto.value),
268
+ ...(vto.time_lock > 0 ? { timeLock: vto.time_lock } : {}),
269
+ })),
270
+ drOutput: this._toDrOutputProtobuf(),
271
+ };
272
+ }
273
+ }
274
+ validateTarget(target) {
275
+ target = this._cleanTargetExtras(target);
276
+ if (target && Object.keys(target).length > 0) {
277
+ if (!(target
278
+ && (!target?.fees
279
+ || (target.fees instanceof types_1.Coins && target.fees.pedros > 0
280
+ || Object.values(types_1.TransactionPriority).includes(target.fees)))
281
+ && (target?.witnesses || target?.witnesses === undefined)
282
+ && (!this.template || target?.args))) {
283
+ throw new TypeError(`${this.constructor.name}: invalid options: ${JSON.stringify(target)}`);
284
+ }
285
+ else if (target?.witnesses) {
286
+ if (typeof target.witnesses === 'object') {
287
+ throw new TypeError(`${this.constructor.name}: explicit witnessing committees not yet supported: ${target.witnesses}`);
288
+ }
289
+ target.witnesses = parseInt(target.witnesses);
290
+ }
291
+ return target;
292
+ }
293
+ else {
294
+ return undefined;
295
+ }
296
+ }
297
+ _cleanTargetExtras(target) {
298
+ if (target) {
299
+ return Object.fromEntries(Object.entries(target).filter(([key,]) => [
300
+ 'args',
301
+ 'fees',
302
+ 'maxResultSize',
303
+ 'witnesses',
304
+ ].includes(key)));
305
+ }
306
+ }
307
+ async _estimateNetworkFees(provider, priority = types_1.TransactionPriority.Medium) {
308
+ if (!this._priorities) {
309
+ this._priorities = await provider.priorities();
310
+ }
311
+ return BigInt(Math.floor(this._priorities[`drt_${priority}`].priority * (this.covered ? this.weight : (this.weight
312
+ // estimate weight of one single output in case there was change to pay back
313
+ + TX_WEIGHT_OUTPUT_SIZE))));
314
+ }
315
+ _fees2UnitaryCommitRevealReward(fees, witnesses) {
316
+ return fees / BigInt(witnesses) || 1n;
317
+ }
318
+ _fees2UnitaryReward(fees) {
319
+ return utils_1.BigMath.max(fees, 1n + DataRequestPayload.MIN_COLLATERAL / BigInt(DataRequestPayload.COLLATERAL_RATIO));
320
+ }
321
+ _fees2Value(fees, witnesses) {
322
+ return (BigInt(witnesses) * (this._fees2UnitaryReward(fees)
323
+ + 2n * this._fees2UnitaryCommitRevealReward(fees, witnesses)));
324
+ }
325
+ _toDrOutputProtobuf() {
326
+ if (this._request) {
327
+ return {
328
+ ...this.droSLA,
329
+ dataRequest: this._request.toProtobuf()
330
+ };
331
+ }
332
+ }
333
+ }
334
+ exports.DataRequestPayload = DataRequestPayload;
335
+ DataRequestPayload.COLLATERAL_RATIO = 125;
336
+ DataRequestPayload.DEFAULT_WITNESSES = 12;
337
+ DataRequestPayload.MAX_WEIGHT = 80000;
338
+ DataRequestPayload.MIN_COLLATERAL = 20000000000n;
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVJlcXVlc3RQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvRGF0YVJlcXVlc3RQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QiwyQ0FBOEM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQTtBQUVyRixrREFBaUU7QUFFakUsdUNBQXlEO0FBSXpELDBDQUF3RDtBQUN4RCxvQ0FBdUY7QUFDdkYsb0NBQTBDO0FBa0IxQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQTtBQUMvQixNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQTtBQUMvQixNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQTtBQUU5QixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQTtBQUM1QixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQTtBQUUzQixNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQTtBQUNoQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQTtBQUVoQyxNQUFhLGtCQUFtQixTQUFRLHFDQUE2QztJQVVqRixZQUFhLGFBQXFCLEVBQUUsS0FBbUMsRUFBRSxhQUFpQztRQUN0RyxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ25DLElBQUksS0FBSyxZQUFZLG9CQUFZLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtRQUN6QixDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVkscUJBQWEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxJQUFJLFNBQVMsQ0FB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LGdEQW9YQztBQWxYaUIsbUNBQWdCLEdBQUcsR0FBRyxDQUFBO0FBQ3RCLG9DQUFpQixHQUFHLEVBQUUsQ0FBQTtBQUN0Qiw2QkFBVSxHQUFHLEtBQU0sQ0FBQTtBQUNuQixpQ0FBYyxHQUFHLFlBQWUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExvbmcgPSByZXF1aXJlKFwibG9uZ1wiKVxyXG5cclxuaW1wb3J0IHsgUm9vdCBhcyBQcm90b1Jvb3QgfSBmcm9tIFwicHJvdG9idWZqc1wiXHJcbmNvbnN0IHByb3RvUm9vdCA9IFByb3RvUm9vdC5mcm9tSlNPTihyZXF1aXJlKFwiLi4vLi4vLi4vLi4vd2l0bmV0L3dpdG5ldC5wcm90by5qc29uXCIpKVxyXG5cclxuaW1wb3J0IHsgZnJvbUhleFN0cmluZywgdG9IZXhTdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vYmluL2hlbHBlcnNcIlxyXG5cclxuaW1wb3J0IHsgUmFkb25SZXF1ZXN0LCBSYWRvblRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL3JhZG9uXCJcclxuaW1wb3J0IHsgSGFzaCwgSGV4U3RyaW5nLCBJSnNvblJwY1Byb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcclxuXHJcbmltcG9ydCB7IElMZWRnZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiXHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnIH0gZnJvbSBcIi4uL3BheWxvYWRzXCJcclxuaW1wb3J0IHsgQ29pbnMsIFB1YmxpY0tleUhhc2gsIFRyYW5zYWN0aW9uUGFyYW1zLCBUcmFuc2FjdGlvblByaW9yaXR5IH0gZnJvbSBcIi4uL3R5cGVzXCJcclxuaW1wb3J0IHsgQmlnTWF0aCwgc2hhMjU2IH0gZnJvbSBcIi4uL3V0aWxzXCJcclxuXHJcbmV4cG9ydCB0eXBlIERhdGFSZXF1ZXN0VGVtcGxhdGVBcmdzID0gYW55IHwgc3RyaW5nIHwgc3RyaW5nW10gfCBzdHJpbmdbXVtdXHJcbiAgICBcclxuZXhwb3J0IHR5cGUgRGF0YVJlcXVlc3RQYXJhbXMgPSBUcmFuc2FjdGlvblBhcmFtcyAmIHtcclxuICAgIGFyZ3M/OiBEYXRhUmVxdWVzdFRlbXBsYXRlQXJncyxcclxuICAgIG1heFJlc3VsdFNpemU/OiBudW1iZXIsXHJcbiAgICB3aXRuZXNzZXM/OiBudW1iZXIsXHJcbn1cclxuXHJcbnR5cGUgRGF0YVJlcXVlc3RPdXRwdXRTTEEgPSB7XHJcbiAgICBjb2xsYXRlcmFsOiBudW1iZXIsXHJcbiAgICBjb21taXRBbmRSZXZlYWxGZWU6IG51bWJlcixcclxuICAgIG1pbkNvbnNlbnN1c1BlcmNlbnRhZ2U6IG51bWJlcixcclxuICAgIHdpdG5lc3NlczogbnVtYmVyLFxyXG4gICAgd2l0bmVzc1Jld2FyZD86IG51bWJlcixcclxufVxyXG5cclxuY29uc3QgRFJfQ09NTUlUX1RYX1dFSUdIVCA9IDQwMFxyXG5jb25zdCBEUl9SRVZFQUxfVFhfV0VJR0hUID0gMjAwXHJcbmNvbnN0IERSX1RBTExZX1RYX1dFSUdIVCA9IDEwMFxyXG5cclxuY29uc3QgRFJfVFhfV0VJR0hUX0FMUEhBID0gMVxyXG5jb25zdCBEUl9UWF9XRUlHSFRfQkVUQSA9IDFcclxuXHJcbmNvbnN0IFRYX1dFSUdIVF9JTlBVVF9TSVpFID0gMTMzXHJcbmNvbnN0IFRYX1dFSUdIVF9PVVRQVVRfU0laRSA9IDM2XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0YVJlcXVlc3RQYXlsb2FkIGV4dGVuZHMgVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWc8RGF0YVJlcXVlc3RQYXJhbXM+IHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIENPTExBVEVSQUxfUkFUSU8gPSAxMjVcclxuICAgIHB1YmxpYyBzdGF0aWMgREVGQVVMVF9XSVRORVNTRVMgPSAxMlxyXG4gICAgcHVibGljIHN0YXRpYyBNQVhfV0VJR0hUID0gODBfMDAwXHJcbiAgICBwdWJsaWMgc3RhdGljIE1JTl9DT0xMQVRFUkFMID0gMjBfMDAwXzAwMF8wMDBuXHJcblxyXG4gICAgcHJvdGVjdGVkIF9yZXF1ZXN0PzogUmFkb25SZXF1ZXN0IFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlPzogUmFkb25UZW1wbGF0ZVxyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvciAocHJvdG9UeXBlTmFtZTogc3RyaW5nLCByYWRvbjogUmFkb25SZXF1ZXN0IHwgUmFkb25UZW1wbGF0ZSwgaW5pdGlhbFRhcmdldD86IERhdGFSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgc3VwZXIocHJvdG9UeXBlTmFtZSwgaW5pdGlhbFRhcmdldClcclxuICAgICAgICBpZiAocmFkb24gaW5zdGFuY2VvZiBSYWRvblJlcXVlc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdCA9IHJhZG9uXHJcbiAgICAgICAgfSBlbHNlIGlmIChyYWRvbiBpbnN0YW5jZW9mIFJhZG9uVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHJhZG9uXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRGF0YVJlcXVlc3RQYXlsb2FkOiB1bnN1cHBvcnRlZCBSYWRvbiBhc3NldCB0eXBlOiAkeyhyYWRvbiBhcyBhbnkpPy5jb25zdHJ1Y3Rvci5uYW1lfWApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZHJvSGFzaCgpOiBIYXNoIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBjb25zdCBvYmogPSB0aGlzLl90b0RyT3V0cHV0UHJvdG9idWYoKVxyXG4gICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgY29uc3QgRGF0YVJlcXVlc3RPdXRwdXQgPSBwcm90b1Jvb3QubG9va3VwVHlwZShcIkRhdGFSZXF1ZXN0T3V0cHV0XCIpXHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IERhdGFSZXF1ZXN0T3V0cHV0LnZlcmlmeShvYmopXHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbmRyb0hhc2gub2JqID0+XCIsIEpTT04uc3RyaW5naWZ5KG9iaikpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gRGF0YVJlcXVlc3RPdXRwdXQuZnJvbU9iamVjdChvYmopXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbmRyb0hhc2gubWVzc2FnZSA9PlwiLCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVjb2RlID0gRGF0YVJlcXVlc3RPdXRwdXQuZW5jb2RlKG1lc3NhZ2UpLmZpbmlzaCgpXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbmRyb0hhc2guYnl0ZWNvZGUgPT5cIiwgYnl0ZWNvZGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoc2hhMjU2KGJ5dGVjb2RlKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkcm9TTEEoKTogRGF0YVJlcXVlc3RPdXRwdXRTTEEgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl90YXJnZXQgJiYgdGhpcy5fZmVlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtaW5Db25zZW5zdXNQZXJjZW50YWdlID0gNTFcclxuICAgICAgICAgICAgY29uc3Qgd2l0bmVzc2VzID0gKFxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPT09ICdvYmplY3QnXHJcbiAgICAgICAgICAgICAgICAgICAgPyBPYmplY3Qua2V5cyh0aGlzLl90YXJnZXQud2l0bmVzc2VzKS5sZW5ndGggXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl90YXJnZXQud2l0bmVzc2VzIHx8IDBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgY29tbWl0QW5kUmV2ZWFsRmVlID0gdGhpcy5fZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKHRoaXMuX2ZlZXMsIHdpdG5lc3NlcylcclxuICAgICAgICAgICAgY29uc3Qgd2l0bmVzc1Jld2FyZCA9IHRoaXMuX2ZlZXMyVW5pdGFyeVJld2FyZCh0aGlzLl9mZWVzKSBcclxuICAgICAgICAgICAgY29uc3QgY29sbGF0ZXJhbCA9IHdpdG5lc3NSZXdhcmQgKiBCaWdJbnQoRGF0YVJlcXVlc3RQYXlsb2FkLkNPTExBVEVSQUxfUkFUSU8pXHJcbiAgICAgICAgICAgIGlmIChjb2xsYXRlcmFsID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIFxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0b28gbXVjaCB3aXRuZXNzIGNvbGxhdGVyYWw6ICR7Y29sbGF0ZXJhbC50b1N0cmluZygpfSA+ICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHdpdG5lc3NSZXdhcmQgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUilcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogdG9vIG11Y2ggd2l0bmVzcyByZXdhcmQ6ICR7d2l0bmVzc1Jld2FyZC50b1N0cmluZygpfSA+ICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1pdEFuZFJldmVhbEZlZSA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0b28gbXVjaCBjb21taXQvcmV2ZWFsIGZlZTogJHtjb21taXRBbmRSZXZlYWxGZWUudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgY29sbGF0ZXJhbDogTnVtYmVyKGNvbGxhdGVyYWwpLFxyXG4gICAgICAgICAgICAgICAgY29tbWl0QW5kUmV2ZWFsRmVlOiBOdW1iZXIoY29tbWl0QW5kUmV2ZWFsRmVlKSxcclxuICAgICAgICAgICAgICAgIG1pbkNvbnNlbnN1c1BlcmNlbnRhZ2UsXHJcbiAgICAgICAgICAgICAgICB3aXRuZXNzZXMsXHJcbiAgICAgICAgICAgICAgICB3aXRuZXNzUmV3YXJkOiBOdW1iZXIod2l0bmVzc1Jld2FyZCksXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGhhc2goKTogSGFzaCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgX2J5dGVjb2RlID0gdGhpcy5ieXRlY29kZVxyXG4gICAgICAgIGlmIChfYnl0ZWNvZGUgJiYgdGhpcy5kcm9IYXNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b0hleFN0cmluZyhzaGEyNTYoQnVmZmVyLmNvbmNhdChbXHJcbiAgICAgICAgICAgICAgICBmcm9tSGV4U3RyaW5nKHRoaXMuZHJvSGFzaCksXHJcbiAgICAgICAgICAgICAgICBzaGEyNTYoX2J5dGVjb2RlKSxcclxuICAgICAgICAgICAgXSkpKSBhcyBIYXNoXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG1heFdlaWdodCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcGFyYW1ldGVyaXplZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnRlbXBsYXRlXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcmVwYXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmNvdmVyZWRcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuX2lucHV0cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAmJiAhIXRoaXMuX3JlcXVlc3RcclxuICAgICAgICAgICAgICAgICYmICEhdGhpcy5fdGFyZ2V0XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmFkQXJncygpOiBEYXRhUmVxdWVzdFRlbXBsYXRlQXJncyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUgPyB0aGlzLl90YXJnZXQ/LmFyZ3MgOiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJhZEhhc2goKTogSGV4U3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0Py5yYWRIYXNoXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByZXF1ZXN0KCk6IFJhZG9uUmVxdWVzdCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IENvaW5zIHtcclxuICAgICAgICBpZiAodGhpcy5fdGFyZ2V0ICYmIHRoaXMuX2ZlZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvaW5zLmZyb21QZWRyb3ModGhpcy5fZmVlczJWYWx1ZSh0aGlzLl9mZWVzLCB0aGlzLl90YXJnZXQud2l0bmVzc2VzIHx8IDApKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb2lucy56ZXJvKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB3ZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCAmJiB0aGlzLl90YXJnZXQpIHtcclxuICAgICAgICAgICAgY29uc3Qgd2l0bmVzc2VzID0gdHlwZW9mIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPT09ICdvYmplY3QnID8gT2JqZWN0LmtleXModGhpcy5fdGFyZ2V0LndpdG5lc3NlcykubGVuZ3RoIDogdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwXHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBEUl9UWF9XRUlHSFRfQUxQSEEgKiAodGhpcy5fcmVxdWVzdC53ZWlnaHQoKSArIDggKyAyICsgOCArIDQgKyA4KSxcclxuICAgICAgICAgICAgICAgICAgICArIHRoaXMuX2lucHV0cy5sZW5ndGggKiBUWF9XRUlHSFRfSU5QVVRfU0laRSBcclxuICAgICAgICAgICAgICAgICAgICArIHRoaXMuX291dHB1dHMubGVuZ3RoICogVFhfV0VJR0hUX09VVFBVVF9TSVpFIFxyXG4gICAgICAgICAgICAgICAgICAgICsgd2l0bmVzc2VzICogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJfQ09NTUlUX1RYX1dFSUdIVFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgRFJfUkVWRUFMX1RYX1dFSUdIVCAqIERSX1RYX1dFSUdIVF9CRVRBICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFRYX1dFSUdIVF9PVVRQVVRfU0laRSAvLyBUT0RPIFYyLjE6IHR5cGVvZiB0aGlzLl90YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0JyA/IFRYX1dFSUdIVF9PVVRQVVRfU0laRSA6IDBcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKyBNYXRoLm1heChEUl9UQUxMWV9UWF9XRUlHSFQsIHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSB8fCAwKSAqIERSX1RYX1dFSUdIVF9CRVRBXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDBcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNvbnN1bWVVdHhvcyhsZWRnZXI6IElMZWRnZXIsIHJlbG9hZD86IGJvb2xlYW4pOiBQcm9taXNlPGJpZ2ludD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnRlcm5hbCBlcnJvcjogbm8gaW4tZmxpZ2h0IHBhcmFtcy5gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX3RhcmdldCBhcyBhbnkpPy5mZWVzIGluc3RhbmNlb2YgQ29pbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5fZmVlcyA9ICh0aGlzLl90YXJnZXQgYXMgYW55KS5mZWVzLnBlZHJvcztcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmNvbnN1bWVVdHhvcyhsZWRnZXIsIHJlbG9hZClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jb3ZlcmVkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fdGFyZ2V0LndpdG5lc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9IE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgICAgIERhdGFSZXF1ZXN0UGF5bG9hZC5ERUZBVUxUX1dJVE5FU1NFUywgXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbGVkZ2VyLnByb3ZpZGVyLndpdG5lc3NlcygpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA8IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGFyZ2V0LndpdG5lc3Nlc1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBjYW5ub3QgZXN0aW1hdGUgd2l0bmVzc2VzOiBuZXR3b3JrIG5vdCByZWFkeSBmb3Igd2l0bmVzc2luZy5gKSAgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLndlaWdodCA+IERhdGFSZXF1ZXN0UGF5bG9hZC5NQVhfV0VJR0hUICogMC44KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLndlaWdodCAtIERhdGFSZXF1ZXN0UGF5bG9hZC5NQVhfV0VJR0hUICogMC44XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyAtPSBNYXRoLmNlaWwoZGVsdGEgLyAoRFJfQ09NTUlUX1RYX1dFSUdIVCArIERSX1JFVkVBTF9UWF9XRUlHSFQgKiBUWF9XRUlHSFRfT1VUUFVUX1NJWkUpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90YXJnZXQud2l0bmVzc2VzIDwgMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGFyZ2V0LndpdG5lc3Nlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogY2Fubm90IGVzdGltYXRlIHdpdG5lc3NlczogcmFkb24gcmVxdWVzdCB0b28gY29tcGxleDogJHt0aGlzLndlaWdodH0gd2VpZ2h0IHVuaXRzYClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcHJpb3JpdHkgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSk/LmZlZXMgYXMgVHJhbnNhY3Rpb25Qcmlvcml0eSB8fCBUcmFuc2FjdGlvblByaW9yaXR5Lk9wdWxlbnRcclxuICAgICAgICAgICAgbGV0IGVzdGltYXRlZEZlZXMgPSBhd2FpdCB0aGlzLl9lc3RpbWF0ZU5ldHdvcmtGZWVzKGxlZGdlci5wcm92aWRlciwgcHJpb3JpdHkpO1xyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5fZmVlcyA8IGVzdGltYXRlZEZlZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZlZXMgPSBlc3RpbWF0ZWRGZWVzXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRzID0gW11cclxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0cyA9IFtdXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkID0gMG5cclxuICAgICAgICAgICAgICAgIC8vIGNvbnN1bWUgdXR4b3MgYXMgdG8gY292ZXIgZm9yIGVzdGltYXRlZCB2YWx1ZSBhbmQgZXN0aW1hdGVkIGZlZXMgXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2ZlZXMyVmFsdWUodGhpcy5fZmVlcywgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcylcclxuICAgICAgICAgICAgICAgIGNvbnN0IHV0eG9zID0gYXdhaXQgbGVkZ2VyLnNlbGVjdFV0eG9zKHsgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IENvaW5zLmZyb21QZWRyb3ModmFsdWUgKyB0aGlzLl9mZWVzIC0gdGhpcy5fY292ZXJlZCksIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbG9hZCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkICs9IHV0eG9zLm1hcCh1dHhvID0+IEJpZ0ludCh1dHhvLnZhbHVlKSkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMucHVzaCguLi51dHhvcylcclxuICAgICAgICAgICAgICAgIGxlZGdlci5jb25zdW1lVXR4b3MoLi4udXR4b3MpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2UgPSB0aGlzLl9jb3ZlcmVkIC0gKHZhbHVlICsgdGhpcy5fZmVlcylcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFuZ2UgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZU91dHB1dHMoeyB2YWx1ZTogdGhpcy5fY2hhbmdlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaW5zdWZmaWNpZW50IGZ1bmRzIC4uLlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbnRvUmVjZWlwdCh0YXJnZXQ6IERhdGFSZXF1ZXN0UGFyYW1zKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkcm9IYXNoOiB0aGlzLmRyb0hhc2gsXHJcbiAgICAgICAgICAgIHJhZEFyZ3M6IHRoaXMucmFkQXJncyxcclxuICAgICAgICAgICAgcmFkSGFzaDogdGhpcy5yYWRIYXNoLFxyXG4gICAgICAgICAgICB3aXRuZXNzZXM6IHRhcmdldC53aXRuZXNzZXMsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmVwYXJlT3V0cHV0cyhjaGFuZ2U/OiB7IHZhbHVlOiBiaWdpbnQgfSk6IGFueSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZT8udmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBraDogdGhpcy5faW5wdXRzWzBdLnNpZ25lcixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBjaGFuZ2UudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0aW1lX2xvY2s6IDAsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFRhcmdldCh0YXJnZXQ6IERhdGFSZXF1ZXN0UGFyYW1zKTogYW55IHtcclxuICAgICAgICB0aGlzLl9jaGFuZ2UgPSAwblxyXG4gICAgICAgIHRoaXMuX2NvdmVyZWQgPSAwblxyXG4gICAgICAgIHRoaXMuX2ZlZXMgPSAwblxyXG4gICAgICAgIHRoaXMuX2lucHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fb3V0cHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvU0xBPy5jb2xsYXRlcmFsICYmIHRoaXMuZHJvU0xBLmNvbGxhdGVyYWwgPCBEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcclxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHdpdG5lc3NpbmcgY29sbGF0ZXJhbCBiZWxvdyBtaW5pbXVtOiAke1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvU0xBLmNvbGxhdGVyYWxcclxuICAgICAgICAgICAgICAgIH0gPCAke1xyXG4gICAgICAgICAgICAgICAgICAgIERhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTFxyXG4gICAgICAgICAgICAgICAgfWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJncyA9IHRhcmdldD8uYXJnc1xyXG4gICAgICAgICAgICBpZiAoYXJncyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IG5vIHRlbXBsYXRlIGFyZ3Mgd2VyZSBwYXNzZWQuYClcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSB0aGlzLnRlbXBsYXRlLmJ1aWxkUmFkb25SZXF1ZXN0KFthcmdzXSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSB0aGlzLnRlbXBsYXRlLmJ1aWxkUmFkb25SZXF1ZXN0KGFyZ3MpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ByaW9yaXRpZXNcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9KU09OKGh1bWFuaXplID0gZmFsc2UpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGRyb1NMQSA9IHRoaXMuZHJvU0xBICAgICAgICBcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpbnB1dHM6IHRoaXMuaW5wdXRzXHJcbiAgICAgICAgICAgICAgICAubWFwKHV0eG8gPT4gKHsgb3V0cHV0X3BvaW50ZXI6IHV0eG8ub3V0cHV0X3BvaW50ZXIgfSkpLFxyXG4gICAgICAgICAgICBvdXRwdXRzOiB0aGlzLm91dHB1dHMubWFwKHZ0byA9PiAoeyBcclxuICAgICAgICAgICAgICAgIHBraDogdnRvLnBraCxcclxuICAgICAgICAgICAgICAgIHRpbWVfbG9jazogdnRvLnRpbWVfbG9jayxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB2dG8udmFsdWUudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBkcl9vdXRwdXQ6IHtcclxuICAgICAgICAgICAgICAgIC4uLih0aGlzLl9yZXF1ZXN0ID8geyBkYXRhX3JlcXVlc3Q6IHRoaXMuX3JlcXVlc3QudG9KU09OKGh1bWFuaXplKSB9IDoge30pLFxyXG4gICAgICAgICAgICAgICAgY29tbWl0X2FuZF9yZXZlYWxfZmVlOiBkcm9TTEE/LmNvbW1pdEFuZFJldmVhbEZlZSxcclxuICAgICAgICAgICAgICAgIG1pbl9jb25zZW5zdXNfcGVyY2VudGFnZTogZHJvU0xBPy5taW5Db25zZW5zdXNQZXJjZW50YWdlLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc2VzOiBkcm9TTEE/LndpdG5lc3NlcyxcclxuICAgICAgICAgICAgICAgIHdpdG5lc3NfcmV3YXJkOiBkcm9TTEE/LndpdG5lc3NSZXdhcmQsXHJcbiAgICAgICAgICAgICAgICBjb2xsYXRlcmFsOiBkcm9TTEE/LmNvbGxhdGVyYWxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuXHJcbiAgICBwdWJsaWMgdG9Qcm90b2J1ZigpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXBhcmVkICYmIHRoaXMuX3RhcmdldCAmJiB0aGlzLl9yZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7ICAgIFxyXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB0aGlzLmlucHV0c1xyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAodXR4byA9PiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbklkID0gdXR4by5vdXRwdXRfcG9pbnRlci5zcGxpdCgnOicpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dEluZGV4ID0gcGFyc2VJbnQodXR4by5vdXRwdXRfcG9pbnRlci5zcGxpdCgnOicpWzFdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UG9pbnRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ6IHsgU0hBMjU2OiBBcnJheS5mcm9tKGZyb21IZXhTdHJpbmcodHJhbnNhY3Rpb25JZCkpIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKG91dHB1dEluZGV4ID4gMCA/IHsgb3V0cHV0SW5kZXggfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIG91dHB1dHM6IHRoaXMub3V0cHV0cy5tYXAodnRvID0+ICh7IFxyXG4gICAgICAgICAgICAgICAgICAgIHBraDogeyBoYXNoOiBBcnJheS5mcm9tKFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih2dG8ucGtoKS50b0J5dGVzMjAoKSksIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IExvbmcuZnJvbVZhbHVlKHZ0by52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKHZ0by50aW1lX2xvY2sgPiAwID8geyB0aW1lTG9jazogdnRvLnRpbWVfbG9jayB9IDoge30pLFxyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICAgICAgZHJPdXRwdXQ6IHRoaXMuX3RvRHJPdXRwdXRQcm90b2J1ZigpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZVRhcmdldCh0YXJnZXQ/OiBhbnkpOiBEYXRhUmVxdWVzdFBhcmFtcyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy5fY2xlYW5UYXJnZXRFeHRyYXModGFyZ2V0KVxyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgT2JqZWN0LmtleXModGFyZ2V0KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICghKFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0XHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGFyZ2V0Py5mZWVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZmVlcyBpbnN0YW5jZW9mIENvaW5zICYmICh0YXJnZXQuZmVlcyBhcyBDb2lucykucGVkcm9zID4gMCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IE9iamVjdC52YWx1ZXMoVHJhbnNhY3Rpb25Qcmlvcml0eSkuaW5jbHVkZXModGFyZ2V0LmZlZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHRhcmdldD8ud2l0bmVzc2VzIHx8IHRhcmdldD8ud2l0bmVzc2VzID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKCF0aGlzLnRlbXBsYXRlIHx8IHRhcmdldD8uYXJncylcclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0KX1gKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldD8ud2l0bmVzc2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldC53aXRuZXNzZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBleHBsaWNpdCB3aXRuZXNzaW5nIGNvbW1pdHRlZXMgbm90IHlldCBzdXBwb3J0ZWQ6ICR7dGFyZ2V0LndpdG5lc3Nlc31gKVxyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIHRhcmdldC53aXRuZXNzZXMgPSBwYXJzZUludCh0YXJnZXQud2l0bmVzc2VzIGFzIHN0cmluZylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0IGFzIERhdGFSZXF1ZXN0UGFyYW1zXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldD86IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGFyZ2V0KS5maWx0ZXIoKFtrZXksXSkgPT4gW1xyXG4gICAgICAgICAgICAgICAgICAgICdhcmdzJyxcclxuICAgICAgICAgICAgICAgICAgICAnZmVlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ21heFJlc3VsdFNpemUnLFxyXG4gICAgICAgICAgICAgICAgICAgICd3aXRuZXNzZXMnLFxyXG4gICAgICAgICAgICAgICAgXS5pbmNsdWRlcyhrZXkpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBfZXN0aW1hdGVOZXR3b3JrRmVlcyhwcm92aWRlcjogSUpzb25ScGNQcm92aWRlciwgcHJpb3JpdHkgPSBUcmFuc2FjdGlvblByaW9yaXR5Lk1lZGl1bSk6IFByb21pc2U8YmlnaW50PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wcmlvcml0aWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByaW9yaXRpZXMgPSBhd2FpdCBwcm92aWRlci5wcmlvcml0aWVzKClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEJpZ0ludChNYXRoLmZsb29yKFxyXG4gICAgICAgICAgICB0aGlzLl9wcmlvcml0aWVzW2BkcnRfJHtwcmlvcml0eX1gXS5wcmlvcml0eSAqIChcclxuICAgICAgICAgICAgICAgIHRoaXMuY292ZXJlZCA/IHRoaXMud2VpZ2h0IDogKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2VpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXN0aW1hdGUgd2VpZ2h0IG9mIG9uZSBzaW5nbGUgb3V0cHV0IGluIGNhc2UgdGhlcmUgd2FzIGNoYW5nZSB0byBwYXkgYmFja1xyXG4gICAgICAgICAgICAgICAgICAgICsgVFhfV0VJR0hUX09VVFBVVF9TSVpFIFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9mZWVzMlVuaXRhcnlDb21taXRSZXZlYWxSZXdhcmQoZmVlczogYmlnaW50LCB3aXRuZXNzZXM6IG51bWJlcik6IGJpZ2ludCB7XHJcbiAgICAgICAgcmV0dXJuIGZlZXMgLyBCaWdJbnQod2l0bmVzc2VzKSB8fCAxblxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5UmV3YXJkKGZlZXM6IGJpZ2ludCk6IGJpZ2ludCB7XHJcbiAgICAgICAgcmV0dXJuIEJpZ01hdGgubWF4KFxyXG4gICAgICAgICAgICBmZWVzLFxyXG4gICAgICAgICAgICAxbiArIERhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTCAvIEJpZ0ludChEYXRhUmVxdWVzdFBheWxvYWQuQ09MTEFURVJBTF9SQVRJTylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9mZWVzMlZhbHVlKGZlZXM6IGJpZ2ludCwgd2l0bmVzc2VzOiBudW1iZXIpOiBiaWdpbnQge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIEJpZ0ludCh3aXRuZXNzZXMpICogKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmVlczJVbml0YXJ5UmV3YXJkKGZlZXMpXHJcbiAgICAgICAgICAgICAgICArIDJuICogdGhpcy5fZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXMsIHdpdG5lc3NlcylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90b0RyT3V0cHV0UHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5kcm9TTEEsXHJcbiAgICAgICAgICAgICAgICBkYXRhUmVxdWVzdDogdGhpcy5fcmVxdWVzdC50b1Byb3RvYnVmKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuIl19
@@ -0,0 +1,28 @@
1
+ import { HexString, IJsonRpcProvider, Network } from "../../types";
2
+ import { TransactionPayloadMultiSig } from "../payloads";
3
+ import { Coins, PublicKeyHashString, TransactionParams, TransactionPriority } from "../types";
4
+ export type StakeDepositParams = TransactionParams & {
5
+ authorization: HexString;
6
+ value: Coins;
7
+ withdrawer: PublicKeyHashString;
8
+ };
9
+ export declare class StakePayload extends TransactionPayloadMultiSig<StakeDepositParams> {
10
+ static MAX_WEIGHT: number;
11
+ static MIN_VALUE: number;
12
+ constructor(protoTypeName: string, specs?: any);
13
+ get maxWeight(): number;
14
+ get prepared(): boolean;
15
+ get value(): Coins;
16
+ get weight(): number;
17
+ intoReceipt(target: StakeDepositParams, network?: Network): {
18
+ authorization: string;
19
+ withdrawer: string;
20
+ validator: string;
21
+ };
22
+ toJSON(_humanize?: boolean, network?: Network): any;
23
+ toProtobuf(): any;
24
+ validateTarget(target?: any): StakeDepositParams | undefined;
25
+ protected _cleanTargetExtras(target?: any): any;
26
+ protected _estimateNetworkFees(provider: IJsonRpcProvider, priority?: TransactionPriority): Promise<bigint>;
27
+ }
28
+ //# sourceMappingURL=StakePayload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StakePayload.d.ts","sourceRoot":"","sources":["../../../../../src/lib/crypto/payloads/StakePayload.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAElE,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EACH,KAAK,EAGL,mBAAmB,EAEnB,iBAAiB,EACjB,mBAAmB,EACtB,MAAM,UAAU,CAAA;AAEjB,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACjD,aAAa,EAAE,SAAS,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,mBAAmB,CAAC;CACnC,CAAA;AAMD,qBAAa,YAAa,SAAQ,0BAA0B,CAAC,kBAAkB,CAAC;IAE5E,OAAc,UAAU,SAAS;IACjC,OAAc,SAAS,SAAmB;gBAE7B,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAI/C,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,QAAQ,IAAI,OAAO,CAM7B;IAED,IAAW,KAAK,IAAI,KAAK,CAExB;IAED,IAAW,MAAM,IAAI,MAAM,CAM1B;IAEM,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,OAAO;;;;;IAQzD,MAAM,CAAC,SAAS,UAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,GAAG;IA6BjD,UAAU,IAAI,GAAG;IAoCjB,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,kBAAkB,GAAG,SAAS;IA2CnE,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG;cAa/B,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,sBAA6B,GAAG,OAAO,CAAC,MAAM,CAAC;CAgB3H"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StakePayload = void 0;
4
+ const Long = require("long");
5
+ const helpers_1 = require("../../../bin/helpers");
6
+ const payloads_1 = require("../payloads");
7
+ const types_1 = require("../types");
8
+ const TX_WEIGHT_BASE = 105;
9
+ const TX_WEIGHT_INPUT_SIZE = 133;
10
+ const TX_WEIGHT_OUTPUT_SIZE = 36;
11
+ class StakePayload extends payloads_1.TransactionPayloadMultiSig {
12
+ constructor(protoTypeName, specs) {
13
+ super(protoTypeName, specs);
14
+ }
15
+ get maxWeight() {
16
+ return StakePayload.MAX_WEIGHT;
17
+ }
18
+ get prepared() {
19
+ return (!!this._target
20
+ && this._covered >= this._target.value.pedros
21
+ && this._inputs.length > 0);
22
+ }
23
+ get value() {
24
+ return this._target?.value || types_1.Coins.zero();
25
+ }
26
+ get weight() {
27
+ return (TX_WEIGHT_BASE
28
+ + this._inputs.length * TX_WEIGHT_INPUT_SIZE
29
+ + this._outputs.length * TX_WEIGHT_OUTPUT_SIZE);
30
+ }
31
+ intoReceipt(target, network) {
32
+ return {
33
+ authorization: target.authorization,
34
+ withdrawer: target.withdrawer,
35
+ validator: types_1.PublicKeyHash.fromHexString(target.authorization.substring(0, 40)).toBech32(network),
36
+ };
37
+ }
38
+ toJSON(_humanize = false, network) {
39
+ return {
40
+ inputs: this.inputs
41
+ .map(utxo => {
42
+ return { output_pointer: utxo.output_pointer };
43
+ }),
44
+ ...(this._target ? { output: {
45
+ authorization: types_1.RecoverableSignature.from(this._target.authorization.substring(40), types_1.PublicKeyHash.fromBech32(this._target.withdrawer).toBytes32()).toKeyedSignature(),
46
+ key: {
47
+ validator: types_1.PublicKeyHash.fromHexString(this._target.authorization.substring(0, 40)).toBech32(network),
48
+ withdrawer: this._target.withdrawer,
49
+ },
50
+ value: this._target.value.pedros.toString(),
51
+ } } : {}),
52
+ ...(this.outputs.length > 0 ? { change: {
53
+ pkh: this.outputs[0].pkh,
54
+ value: this.outputs[0].value.toString(),
55
+ time_lock: 0,
56
+ } } : {}),
57
+ };
58
+ }
59
+ toProtobuf() {
60
+ if (this.prepared && this._target) {
61
+ return {
62
+ inputs: this.inputs
63
+ .map(utxo => {
64
+ const transactionId = utxo.output_pointer.split(':')[0];
65
+ const outputIndex = parseInt(utxo.output_pointer.split(':')[1]);
66
+ return {
67
+ outputPointer: {
68
+ transactionId: { SHA256: Array.from((0, helpers_1.fromHexString)(transactionId)) },
69
+ ...(outputIndex > 0 ? { outputIndex } : {}),
70
+ },
71
+ };
72
+ }),
73
+ output: {
74
+ authorization: types_1.RecoverableSignature.from(this._target.authorization.substring(40), types_1.PublicKeyHash.fromBech32(this._target.withdrawer).toBytes32()).toProtobuf(),
75
+ key: {
76
+ validator: { hash: Array.from(types_1.PublicKeyHash.fromHexString(this._target.authorization.substring(0, 40)).toBytes20()) },
77
+ withdrawer: { hash: Array.from(types_1.PublicKeyHash.fromBech32(this._target.withdrawer).toBytes20()) },
78
+ },
79
+ value: Long.fromValue(this._target.value.pedros),
80
+ },
81
+ ...(this._outputs.length > 0 ? { change: {
82
+ pkh: { hash: Array.from(types_1.PublicKeyHash.fromBech32(this.outputs[0].pkh).toBytes20()) },
83
+ value: Long.fromValue(this.outputs[0].value.toString()),
84
+ // timeLock: 0,
85
+ } } : { change: { pkh: { hash: Array(20).fill(0) } } }),
86
+ };
87
+ }
88
+ }
89
+ validateTarget(target) {
90
+ target = this._cleanTargetExtras(target);
91
+ if (target && Object.keys(target).length > 0) {
92
+ if (!(target
93
+ && target?.authorization
94
+ && (!target?.fees
95
+ || (target.fees instanceof types_1.Coins && target.fees.pedros > 0
96
+ || Object.values(types_1.TransactionPriority).includes(target.fees)))
97
+ && target?.value && target.value.pedros > 0
98
+ && target?.withdrawer)) {
99
+ throw new TypeError(`${this.constructor.name}: invalid options: ${JSON.stringify(target)}`);
100
+ }
101
+ else {
102
+ if (target.value.pedros < StakePayload.MIN_VALUE) {
103
+ throw new TypeError(`${this.constructor.name}: value below minimum stake: ${target.value.wits} < ${types_1.Coins.fromNanowits(BigInt(StakePayload.MIN_VALUE)).wits} $WIT`);
104
+ }
105
+ const pubKey = types_1.PublicKey.recoverFrom(target.authorization.substring(40), types_1.PublicKeyHash.fromBech32(target.withdrawer).toBytes32());
106
+ if (pubKey.hash().toHexString() !== target.authorization.substring(0, 40)) {
107
+ throw new TypeError(`${this.constructor.name}: authorization code not valid for withdrawer ${target.withdrawer}.`);
108
+ }
109
+ return target;
110
+ }
111
+ }
112
+ else {
113
+ return undefined;
114
+ }
115
+ }
116
+ _cleanTargetExtras(target) {
117
+ if (target) {
118
+ return Object.fromEntries(Object.entries(target).filter(([key,]) => [
119
+ 'authorization',
120
+ 'fees',
121
+ 'value',
122
+ 'withdrawer',
123
+ ].includes(key)));
124
+ }
125
+ }
126
+ async _estimateNetworkFees(provider, priority = types_1.TransactionPriority.Medium) {
127
+ if (!this._priorities) {
128
+ this._priorities = await provider.priorities();
129
+ }
130
+ return BigInt(Math.floor(
131
+ // todo: replace `vtt_` for `st_`
132
+ this._priorities[`vtt_${priority}`].priority * (this.covered ? this.weight : this.weight
133
+ // estimate one more input as to cover for network fees
134
+ + TX_WEIGHT_INPUT_SIZE
135
+ // estimate weight of one single output in case there was change to pay back
136
+ + TX_WEIGHT_OUTPUT_SIZE)));
137
+ }
138
+ }
139
+ exports.StakePayload = StakePayload;
140
+ StakePayload.MAX_WEIGHT = 10000; // 10,000
141
+ StakePayload.MIN_VALUE = 10000 * 10 ** 9; // 10,000.00 $WIT
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3Rha2VQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvU3Rha2VQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QixrREFBb0Q7QUFJcEQsMENBQXdEO0FBQ3hELG9DQVFpQjtBQVFqQixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFDM0IsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFFakMsTUFBYSxZQUFhLFNBQVEscUNBQThDO0lBSzVFLFlBQWEsYUFBcUIsRUFBRSxLQUFXO1FBQzNDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELElBQVcsU0FBUztRQUNoQixPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUE7SUFDbEMsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sQ0FDSCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87ZUFDUCxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07ZUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNqQyxDQUFBO0lBQ0wsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksYUFBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzlDLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLENBQ0gsY0FBYztjQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLG9CQUFvQjtjQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FDckQsQ0FBQztJQUNOLENBQUM7SUFFTSxXQUFXLENBQUMsTUFBMEIsRUFBRSxPQUFpQjtRQUM1RCxPQUFPO1lBQ0gsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1lBQ25DLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixTQUFTLEVBQUUscUJBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztTQUNsRyxDQUFBO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxFQUFFLE9BQWlCO1FBQzlDLE9BQU87WUFDSCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07aUJBQ2QsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNSLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1lBQ2xELENBQUMsQ0FBQztZQUNOLEdBQUcsQ0FDQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRTtvQkFDckIsYUFBYSxFQUFFLDRCQUFvQixDQUFDLElBQUksQ0FDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUN4QyxxQkFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUNoRSxDQUFDLGdCQUFnQixFQUFFO29CQUN4QixHQUFHLEVBQUU7d0JBQ0QsU0FBUyxFQUFFLHFCQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO3dCQUNyRyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO3FCQUN0QztvQkFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtpQkFDOUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ1Y7WUFDRCxHQUFHLENBQ0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRTtvQkFDaEMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRztvQkFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtvQkFDdkMsU0FBUyxFQUFFLENBQUM7aUJBQ2YsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ1Y7U0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVNLFVBQVU7UUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLE9BQU87Z0JBQ0gsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO3FCQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDUixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDdkQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7b0JBQy9ELE9BQU87d0JBQ0gsYUFBYSxFQUFFOzRCQUNYLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUEsdUJBQWEsRUFBQyxhQUFhLENBQUMsQ0FBQyxFQUFFOzRCQUNuRSxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUM5QztxQkFDSixDQUFBO2dCQUNMLENBQUMsQ0FBQztnQkFDTixNQUFNLEVBQUU7b0JBQ0osYUFBYSxFQUFFLDRCQUFvQixDQUFDLElBQUksQ0FDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUN4QyxxQkFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUNoRSxDQUFDLFVBQVUsRUFBRTtvQkFDbEIsR0FBRyxFQUFFO3dCQUNELFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFO3dCQUNySCxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7cUJBQ2xHO29CQUNELEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztpQkFDbkQ7Z0JBQ0QsR0FBRyxDQUNDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUc7d0JBQ2xDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTt3QkFDcEYsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3ZELGVBQWU7cUJBQ2xCLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUMsQ0FDdEQ7YUFDSixDQUFBO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBWTtRQUM5QixNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3hDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxDQUNELE1BQU07bUJBQ0MsTUFBTSxFQUFFLGFBQWE7bUJBQ3JCLENBQ0MsQ0FBQyxNQUFNLEVBQUUsSUFBSTt1QkFDVixDQUNDLE1BQU0sQ0FBQyxJQUFJLFlBQVksYUFBSyxJQUFLLE1BQU0sQ0FBQyxJQUFjLENBQUMsTUFBTSxHQUFHLENBQUM7MkJBQzlELE1BQU0sQ0FBQyxNQUFNLENBQUMsMkJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUM5RCxDQUNKO21CQUNFLE1BQU0sRUFBRSxLQUFLLElBQUssTUFBTSxDQUFDLEtBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQzttQkFDbkQsTUFBTSxFQUFFLFVBQVUsQ0FDNUIsRUFBRSxDQUFDO2dCQUNBLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksc0JBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQy9GLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFLLE1BQU0sQ0FBQyxLQUFlLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDMUQsTUFBTSxJQUFJLFNBQVMsQ0FDZixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxnQ0FDbkIsTUFBTSxDQUFDLEtBQWUsQ0FBQyxJQUM1QixNQUNJLGFBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQ3ZELE9BQU8sQ0FDVixDQUFDO2dCQUNOLENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsaUJBQVMsQ0FBQyxXQUFXLENBQ2hDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNsQyxxQkFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQzFELENBQUE7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3hFLE1BQU0sSUFBSSxTQUFTLENBQ2YsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksaURBQWlELE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FDaEcsQ0FBQTtnQkFDTCxDQUFDO2dCQUNELE9BQU8sTUFBNEIsQ0FBQTtZQUN2QyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLFNBQVMsQ0FBQTtRQUNwQixDQUFDO0lBQ0wsQ0FBQztJQUVTLGtCQUFrQixDQUFDLE1BQVk7UUFDckMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDckIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDdEMsZUFBZTtnQkFDZixNQUFNO2dCQUNOLE9BQU87Z0JBQ1AsWUFBWTthQUNmLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ25CLENBQUE7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVTLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxRQUEwQixFQUFFLFFBQVEsR0FBRywyQkFBbUIsQ0FBQyxNQUFNO1FBQ2xHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNsRCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUs7UUFDcEIsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUNwQyx1REFBdUQ7Y0FDckQsb0JBQW9CO1lBQ3RCLDRFQUE0RTtjQUMxRSxxQkFBcUIsQ0FDOUIsQ0FDSixDQUFDLENBQUM7SUFDUCxDQUFDOztBQWhMTCxvQ0FrTEM7QUFoTGlCLHVCQUFVLEdBQUcsS0FBSyxDQUFDLENBQVUsU0FBUztBQUN0QyxzQkFBUyxHQUFHLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTG9uZyA9IHJlcXVpcmUoXCJsb25nXCIpXHJcblxyXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL2Jpbi9oZWxwZXJzXCJcclxuXHJcbmltcG9ydCB7IEhleFN0cmluZywgSUpzb25ScGNQcm92aWRlciwgTmV0d29yayB9IGZyb20gXCIuLi8uLi90eXBlc1wiXHJcblxyXG5pbXBvcnQgeyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZyB9IGZyb20gXCIuLi9wYXlsb2Fkc1wiXHJcbmltcG9ydCB7IFxyXG4gICAgQ29pbnMsXHJcbiAgICBQdWJsaWNLZXksIFxyXG4gICAgUHVibGljS2V5SGFzaCwgXHJcbiAgICBQdWJsaWNLZXlIYXNoU3RyaW5nLCBcclxuICAgIFJlY292ZXJhYmxlU2lnbmF0dXJlLCBcclxuICAgIFRyYW5zYWN0aW9uUGFyYW1zLCBcclxuICAgIFRyYW5zYWN0aW9uUHJpb3JpdHksXHJcbn0gZnJvbSBcIi4uL3R5cGVzXCJcclxuXHJcbmV4cG9ydCB0eXBlIFN0YWtlRGVwb3NpdFBhcmFtcyA9IFRyYW5zYWN0aW9uUGFyYW1zICYge1xyXG4gICAgYXV0aG9yaXphdGlvbjogSGV4U3RyaW5nLFxyXG4gICAgdmFsdWU6IENvaW5zLFxyXG4gICAgd2l0aGRyYXdlcjogUHVibGljS2V5SGFzaFN0cmluZyxcclxufVxyXG5cclxuY29uc3QgVFhfV0VJR0hUX0JBU0UgPSAxMDU7XHJcbmNvbnN0IFRYX1dFSUdIVF9JTlBVVF9TSVpFID0gMTMzO1xyXG5jb25zdCBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgPSAzNjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdGFrZVBheWxvYWQgZXh0ZW5kcyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZzxTdGFrZURlcG9zaXRQYXJhbXM+IHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIE1BWF9XRUlHSFQgPSAxMDAwMDsgICAgICAgICAgLy8gMTAsMDAwXHJcbiAgICBwdWJsaWMgc3RhdGljIE1JTl9WQUxVRSA9IDEwMDAwICogMTAgKiogOTsgLy8gMTAsMDAwLjAwICRXSVRcclxuXHJcbiAgICBjb25zdHJ1Y3RvciAocHJvdG9UeXBlTmFtZTogc3RyaW5nLCBzcGVjcz86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3RvVHlwZU5hbWUsIHNwZWNzKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgbWF4V2VpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIFN0YWtlUGF5bG9hZC5NQVhfV0VJR0hUXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcmVwYXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhIXRoaXMuX3RhcmdldFxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5fY292ZXJlZCA+PSB0aGlzLl90YXJnZXQudmFsdWUucGVkcm9zIFxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5faW5wdXRzLmxlbmd0aCA+IDBcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBDb2lucyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldD8udmFsdWUgfHwgQ29pbnMuemVybygpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB3ZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBUWF9XRUlHSFRfQkFTRVxyXG4gICAgICAgICAgICAgICAgKyB0aGlzLl9pbnB1dHMubGVuZ3RoICogVFhfV0VJR0hUX0lOUFVUX1NJWkUgXHJcbiAgICAgICAgICAgICAgICArIHRoaXMuX291dHB1dHMubGVuZ3RoICogVFhfV0VJR0hUX09VVFBVVF9TSVpFIFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGludG9SZWNlaXB0KHRhcmdldDogU3Rha2VEZXBvc2l0UGFyYW1zLCBuZXR3b3JrPzogTmV0d29yaykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml6YXRpb246IHRhcmdldC5hdXRob3JpemF0aW9uLFxyXG4gICAgICAgICAgICB3aXRoZHJhd2VyOiB0YXJnZXQud2l0aGRyYXdlcixcclxuICAgICAgICAgICAgdmFsaWRhdG9yOiBQdWJsaWNLZXlIYXNoLmZyb21IZXhTdHJpbmcodGFyZ2V0LmF1dGhvcml6YXRpb24uc3Vic3RyaW5nKDAsIDQwKSkudG9CZWNoMzIobmV0d29yayksXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b0pTT04oX2h1bWFuaXplID0gZmFsc2UsIG5ldHdvcms/OiBOZXR3b3JrKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpbnB1dHM6IHRoaXMuaW5wdXRzXHJcbiAgICAgICAgICAgICAgICAubWFwKHV0eG8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG91dHB1dF9wb2ludGVyOiB1dHhvLm91dHB1dF9wb2ludGVyIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAuLi4oXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXQgPyB7IG91dHB1dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IFJlY292ZXJhYmxlU2lnbmF0dXJlLmZyb20oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXQuYXV0aG9yaXphdGlvbi5zdWJzdHJpbmcoNDApLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih0aGlzLl90YXJnZXQud2l0aGRyYXdlcikudG9CeXRlczMyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKS50b0tleWVkU2lnbmF0dXJlKCksXHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogUHVibGljS2V5SGFzaC5mcm9tSGV4U3RyaW5nKHRoaXMuX3RhcmdldC5hdXRob3JpemF0aW9uLnN1YnN0cmluZygwLCA0MCkpLnRvQmVjaDMyKG5ldHdvcmspLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoZHJhd2VyOiB0aGlzLl90YXJnZXQud2l0aGRyYXdlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl90YXJnZXQudmFsdWUucGVkcm9zLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB9fSA6IHt9XHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIC4uLihcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0cy5sZW5ndGggPiAwID8geyBjaGFuZ2U6IHtcclxuICAgICAgICAgICAgICAgICAgICBwa2g6IHRoaXMub3V0cHV0c1swXS5wa2gsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMub3V0cHV0c1swXS52YWx1ZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVfbG9jazogMCxcclxuICAgICAgICAgICAgICAgIH19IDoge31cclxuICAgICAgICAgICAgKSxcclxuICAgICAgICB9XHJcbiAgICB9ICAgXHJcblxyXG4gICAgcHVibGljIHRvUHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5wcmVwYXJlZCAmJiB0aGlzLl90YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgICAgXHJcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHRoaXMuaW5wdXRzXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcCh1dHhvID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSB1dHhvLm91dHB1dF9wb2ludGVyLnNwbGl0KCc6JylbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSBwYXJzZUludCh1dHhvLm91dHB1dF9wb2ludGVyLnNwbGl0KCc6JylbMV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRQb2ludGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25JZDogeyBTSEEyNTY6IEFycmF5LmZyb20oZnJvbUhleFN0cmluZyh0cmFuc2FjdGlvbklkKSkgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4ob3V0cHV0SW5kZXggPiAwID8geyBvdXRwdXRJbmRleCB9IDoge30pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgb3V0cHV0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogUmVjb3ZlcmFibGVTaWduYXR1cmUuZnJvbShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC5hdXRob3JpemF0aW9uLnN1YnN0cmluZyg0MCksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljS2V5SGFzaC5mcm9tQmVjaDMyKHRoaXMuX3RhcmdldC53aXRoZHJhd2VyKS50b0J5dGVzMzIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLnRvUHJvdG9idWYoKSxcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiB7IGhhc2g6IEFycmF5LmZyb20oUHVibGljS2V5SGFzaC5mcm9tSGV4U3RyaW5nKHRoaXMuX3RhcmdldC5hdXRob3JpemF0aW9uLnN1YnN0cmluZygwLCA0MCkpLnRvQnl0ZXMyMCgpKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoZHJhd2VyOiB7IGhhc2g6IEFycmF5LmZyb20oUHVibGljS2V5SGFzaC5mcm9tQmVjaDMyKHRoaXMuX3RhcmdldC53aXRoZHJhd2VyKS50b0J5dGVzMjAoKSkgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBMb25nLmZyb21WYWx1ZSh0aGlzLl90YXJnZXQudmFsdWUucGVkcm9zKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAuLi4oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5sZW5ndGggPiAwID8geyBjaGFuZ2UgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBraDogeyBoYXNoOiBBcnJheS5mcm9tKFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih0aGlzLm91dHB1dHNbMF0ucGtoKS50b0J5dGVzMjAoKSkgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IExvbmcuZnJvbVZhbHVlKHRoaXMub3V0cHV0c1swXS52YWx1ZS50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZUxvY2s6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gOiB7IGNoYW5nZTogeyBwa2g6IHsgaGFzaDogQXJyYXkoMjApLmZpbGwoMCkgfX19XHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZVRhcmdldCh0YXJnZXQ/OiBhbnkpOiBTdGFrZURlcG9zaXRQYXJhbXMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHRhcmdldCA9IHRoaXMuX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldClcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIE9iamVjdC5rZXlzKHRhcmdldCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoIShcclxuICAgICAgICAgICAgICAgIHRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRhcmdldD8uYXV0aG9yaXphdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXRhcmdldD8uZmVlcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZlZXMgaW5zdGFuY2VvZiBDb2lucyAmJiAodGFyZ2V0LmZlZXMgYXMgQ29pbnMpLnBlZHJvcyA+IDAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBPYmplY3QudmFsdWVzKFRyYW5zYWN0aW9uUHJpb3JpdHkpLmluY2x1ZGVzKHRhcmdldC5mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRhcmdldD8udmFsdWUgJiYgKHRhcmdldC52YWx1ZSBhcyBDb2lucykucGVkcm9zID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRhcmdldD8ud2l0aGRyYXdlclxyXG4gICAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXQpfWApXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRhcmdldC52YWx1ZSBhcyBDb2lucykucGVkcm9zIDwgU3Rha2VQYXlsb2FkLk1JTl9WQUxVRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHZhbHVlIGJlbG93IG1pbmltdW0gc3Rha2U6ICR7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0LnZhbHVlIGFzIENvaW5zKS53aXRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPCAke1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29pbnMuZnJvbU5hbm93aXRzKEJpZ0ludChTdGFrZVBheWxvYWQuTUlOX1ZBTFVFKSkud2l0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ICRXSVRgXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHB1YktleSA9IFB1YmxpY0tleS5yZWNvdmVyRnJvbShcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXV0aG9yaXphdGlvbi5zdWJzdHJpbmcoNDApLFxyXG4gICAgICAgICAgICAgICAgICAgIFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih0YXJnZXQud2l0aGRyYXdlcikudG9CeXRlczMyKClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGlmIChwdWJLZXkuaGFzaCgpLnRvSGV4U3RyaW5nKCkgIT09IHRhcmdldC5hdXRob3JpemF0aW9uLnN1YnN0cmluZygwLCA0MCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBhdXRob3JpemF0aW9uIGNvZGUgbm90IHZhbGlkIGZvciB3aXRoZHJhd2VyICR7dGFyZ2V0LndpdGhkcmF3ZXJ9LmBcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0IGFzIFN0YWtlRGVwb3NpdFBhcmFtc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldD86IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGFyZ2V0KS5maWx0ZXIoKFtrZXksXSkgPT4gW1xyXG4gICAgICAgICAgICAgICAgICAgICdhdXRob3JpemF0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICAnZmVlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAnd2l0aGRyYXdlcicsXHJcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKGtleSkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIF9lc3RpbWF0ZU5ldHdvcmtGZWVzKHByb3ZpZGVyOiBJSnNvblJwY1Byb3ZpZGVyLCBwcmlvcml0eSA9IFRyYW5zYWN0aW9uUHJpb3JpdHkuTWVkaXVtKTogUHJvbWlzZTxiaWdpbnQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3ByaW9yaXRpZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJpb3JpdGllcyA9IGF3YWl0IHByb3ZpZGVyLnByaW9yaXRpZXMoKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQmlnSW50KE1hdGguZmxvb3IoXHJcbiAgICAgICAgICAgIC8vIHRvZG86IHJlcGxhY2UgYHZ0dF9gIGZvciBgc3RfYFxyXG4gICAgICAgICAgICB0aGlzLl9wcmlvcml0aWVzW2B2dHRfJHtwcmlvcml0eX1gXS5wcmlvcml0eSAqIChcclxuICAgICAgICAgICAgICAgIHRoaXMuY292ZXJlZCA/IHRoaXMud2VpZ2h0IDogdGhpcy53ZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICAvLyBlc3RpbWF0ZSBvbmUgbW9yZSBpbnB1dCBhcyB0byBjb3ZlciBmb3IgbmV0d29yayBmZWVzXHJcbiAgICAgICAgICAgICAgICAgICAgKyBUWF9XRUlHSFRfSU5QVVRfU0laRSBcclxuICAgICAgICAgICAgICAgICAgICAvLyBlc3RpbWF0ZSB3ZWlnaHQgb2Ygb25lIHNpbmdsZSBvdXRwdXQgaW4gY2FzZSB0aGVyZSB3YXMgY2hhbmdlIHRvIHBheSBiYWNrXHJcbiAgICAgICAgICAgICAgICAgICAgKyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19