@witnet/sdk 1.1.3 → 1.2.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 (192) hide show
  1. package/.env_witnet +13 -1
  2. package/dist/package.json +31 -24
  3. package/dist/src/bin/helpers.d.ts +59 -49
  4. package/dist/src/bin/helpers.d.ts.map +1 -1
  5. package/dist/src/bin/helpers.js +228 -229
  6. package/dist/src/index.d.ts +3 -4
  7. package/dist/src/index.d.ts.map +1 -1
  8. package/dist/src/index.js +4 -47
  9. package/dist/src/lib/crypto/account.d.ts +3 -3
  10. package/dist/src/lib/crypto/account.d.ts.map +1 -1
  11. package/dist/src/lib/crypto/account.js +31 -25
  12. package/dist/src/lib/crypto/coinbase.d.ts +4 -4
  13. package/dist/src/lib/crypto/coinbase.d.ts.map +1 -1
  14. package/dist/src/lib/crypto/coinbase.js +8 -13
  15. package/dist/src/lib/crypto/index.d.ts +7 -7
  16. package/dist/src/lib/crypto/index.d.ts.map +1 -1
  17. package/dist/src/lib/crypto/index.js +7 -30
  18. package/dist/src/lib/crypto/interfaces.d.ts +5 -5
  19. package/dist/src/lib/crypto/interfaces.d.ts.map +1 -1
  20. package/dist/src/lib/crypto/interfaces.js +2 -3
  21. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +5 -5
  22. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -1
  23. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +107 -95
  24. package/dist/src/lib/crypto/payloads/StakePayload.d.ts +3 -4
  25. package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -1
  26. package/dist/src/lib/crypto/payloads/StakePayload.js +81 -71
  27. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +4 -5
  28. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -1
  29. package/dist/src/lib/crypto/payloads/UnstakePayload.js +36 -43
  30. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +3 -4
  31. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -1
  32. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +46 -48
  33. package/dist/src/lib/crypto/payloads.d.ts +5 -5
  34. package/dist/src/lib/crypto/payloads.d.ts.map +1 -1
  35. package/dist/src/lib/crypto/payloads.js +44 -45
  36. package/dist/src/lib/crypto/signer.d.ts +3 -3
  37. package/dist/src/lib/crypto/signer.d.ts.map +1 -1
  38. package/dist/src/lib/crypto/signer.js +45 -88
  39. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +6 -6
  40. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -1
  41. package/dist/src/lib/crypto/transmitters/DataRequests.js +6 -10
  42. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +5 -5
  43. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -1
  44. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +7 -11
  45. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +6 -7
  46. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -1
  47. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +9 -13
  48. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +5 -5
  49. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -1
  50. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +6 -10
  51. package/dist/src/lib/crypto/transmitters.d.ts +6 -6
  52. package/dist/src/lib/crypto/transmitters.d.ts.map +1 -1
  53. package/dist/src/lib/crypto/transmitters.js +88 -76
  54. package/dist/src/lib/crypto/types.d.ts +1 -2
  55. package/dist/src/lib/crypto/types.d.ts.map +1 -1
  56. package/dist/src/lib/crypto/types.js +71 -67
  57. package/dist/src/lib/crypto/utils.d.ts +5 -5
  58. package/dist/src/lib/crypto/utils.d.ts.map +1 -1
  59. package/dist/src/lib/crypto/utils.js +48 -66
  60. package/dist/src/lib/crypto/wallet.d.ts +3 -3
  61. package/dist/src/lib/crypto/wallet.d.ts.map +1 -1
  62. package/dist/src/lib/crypto/wallet.js +72 -89
  63. package/dist/src/lib/index.d.ts +5 -4
  64. package/dist/src/lib/index.d.ts.map +1 -1
  65. package/dist/src/lib/index.js +6 -44
  66. package/dist/src/lib/radon/ccdr/eth.d.ts +1 -1
  67. package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -1
  68. package/dist/src/lib/radon/ccdr/eth.js +95 -83
  69. package/dist/src/lib/radon/ccdr/index.d.ts +2 -2
  70. package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -1
  71. package/dist/src/lib/radon/ccdr/index.js +3 -39
  72. package/dist/src/lib/radon/ccdr/wit.d.ts +2 -2
  73. package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -1
  74. package/dist/src/lib/radon/ccdr/wit.js +17 -19
  75. package/dist/src/lib/radon/filters.d.ts.map +1 -1
  76. package/dist/src/lib/radon/filters.js +23 -19
  77. package/dist/src/lib/radon/index.d.ts +10 -11
  78. package/dist/src/lib/radon/index.d.ts.map +1 -1
  79. package/dist/src/lib/radon/index.js +205 -187
  80. package/dist/src/lib/radon/reducers.d.ts +2 -2
  81. package/dist/src/lib/radon/reducers.d.ts.map +1 -1
  82. package/dist/src/lib/radon/reducers.js +48 -34
  83. package/dist/src/lib/radon/types.d.ts +2 -2
  84. package/dist/src/lib/radon/types.d.ts.map +1 -1
  85. package/dist/src/lib/radon/types.js +80 -110
  86. package/dist/src/lib/radon/utils.d.ts +3 -3
  87. package/dist/src/lib/radon/utils.d.ts.map +1 -1
  88. package/dist/src/lib/radon/utils.js +49 -52
  89. package/dist/src/lib/rest/kermit.d.ts +20 -0
  90. package/dist/src/lib/rest/kermit.d.ts.map +1 -0
  91. package/dist/src/lib/rest/kermit.js +68 -0
  92. package/dist/src/lib/rest/types.d.ts +5 -0
  93. package/dist/src/lib/rest/types.d.ts.map +1 -0
  94. package/dist/src/lib/rest/types.js +2 -0
  95. package/dist/src/lib/rpc/index.d.ts +2 -2
  96. package/dist/src/lib/rpc/index.d.ts.map +1 -1
  97. package/dist/src/lib/rpc/index.js +3 -19
  98. package/dist/src/lib/rpc/nodes.d.ts +13 -13
  99. package/dist/src/lib/rpc/nodes.d.ts.map +1 -1
  100. package/dist/src/lib/rpc/nodes.js +69 -98
  101. package/dist/src/lib/rpc/provider.d.ts +4 -4
  102. package/dist/src/lib/rpc/provider.d.ts.map +1 -1
  103. package/dist/src/lib/rpc/provider.js +111 -125
  104. package/dist/src/lib/rpc/types.d.ts +2 -2
  105. package/dist/src/lib/rpc/types.d.ts.map +1 -1
  106. package/dist/src/lib/rpc/types.js +13 -16
  107. package/dist/src/lib/types.d.ts +5 -4
  108. package/dist/src/lib/types.d.ts.map +1 -1
  109. package/dist/src/lib/types.js +3 -9
  110. package/dist/src/lib/utils.d.ts +5 -5
  111. package/dist/src/lib/utils.d.ts.map +1 -1
  112. package/dist/src/lib/utils.js +40 -99
  113. package/dist/witnet/assets/index.cjs +6 -0
  114. package/dist/witnet/assets/index.d.cts +29 -0
  115. package/dist/witnet/assets/index.d.cts.map +1 -0
  116. package/dist/witnet/assets/modals/index.cjs +9 -0
  117. package/dist/witnet/assets/modals/index.d.cts +16 -0
  118. package/dist/witnet/assets/modals/index.d.cts.map +1 -0
  119. package/dist/witnet/assets/modals/web3/eth.cjs +23 -0
  120. package/dist/witnet/assets/modals/web3/eth.d.cts +4 -0
  121. package/dist/witnet/assets/modals/web3/eth.d.cts.map +1 -0
  122. package/dist/witnet/assets/modals/web3/ipfs.cjs +18 -0
  123. package/dist/witnet/assets/modals/web3/ipfs.d.cts +3 -0
  124. package/dist/witnet/assets/modals/web3/ipfs.d.cts.map +1 -0
  125. package/dist/witnet/assets/modals/web3/wit.cjs +24 -0
  126. package/dist/witnet/assets/modals/web3/wit.d.cts +3 -0
  127. package/dist/witnet/assets/modals/web3/wit.d.cts.map +1 -0
  128. package/dist/witnet/assets/requests.cjs +43 -0
  129. package/dist/witnet/assets/requests.d.cts +10 -0
  130. package/dist/witnet/assets/requests.d.cts.map +1 -0
  131. package/package.json +31 -24
  132. package/src/bin/bots/watcher.cjs +354 -0
  133. package/src/bin/cli/history.cjs +31 -0
  134. package/src/bin/cli/inspect.js +545 -471
  135. package/src/bin/cli/network.js +658 -557
  136. package/src/bin/cli/nodes.js +392 -332
  137. package/src/bin/cli/radon.js +1071 -844
  138. package/src/bin/cli/wallet.js +1317 -1074
  139. package/src/bin/helpers.js +969 -868
  140. package/src/bin/index.js +329 -0
  141. package/witnet/assets/_index.cjs +5 -0
  142. package/witnet/assets/_requests.cjs +25 -0
  143. package/witnet/assets/_sources.cjs +36 -0
  144. package/witnet/assets/_templates.cjs +36 -0
  145. package/witnet/assets/index.cjs +4 -0
  146. package/witnet/assets/modals/index.cjs +7 -0
  147. package/witnet/assets/modals/web3/eth.cjs +27 -0
  148. package/witnet/assets/modals/web3/ipfs.cjs +22 -0
  149. package/witnet/assets/modals/web3/wit.cjs +28 -0
  150. package/witnet/assets/requests.cjs +49 -0
  151. package/witnet/witnet copy.proto +457 -0
  152. package/witnet/witnet.proto +456 -0
  153. package/witnet/witnet_toolkit-1.6.7-x86_64-pc-windows-msvc.exe +0 -0
  154. package/witnet/witnet_toolkit-1.7.1-x86_64-pc-windows-msvc.exe +0 -0
  155. package/witnet/witnet_toolkit-2.0.0-rc.7-x86_64-pc-windows-msvc.exe +0 -0
  156. package/witnet/witnet_toolkit-2.0.2-x86_64-pc-windows-msvc.exe +0 -0
  157. package/witnet/witnet_toolkit-2.0.21-x86_64-pc-windows-msvc.exe +0 -0
  158. package/witnet/witnet_toolkit-2.0.7-x86_64-pc-windows-msvc.exe +0 -0
  159. package/witnet/witnet_toolkit-2.0.8-x86_64-pc-windows-msvc.exe +0 -0
  160. package/dist/witnet/assets/index.d.ts +0 -29
  161. package/dist/witnet/assets/index.d.ts.map +0 -1
  162. package/dist/witnet/assets/index.js +0 -6
  163. package/dist/witnet/assets/modals/index.d.ts +0 -16
  164. package/dist/witnet/assets/modals/index.d.ts.map +0 -1
  165. package/dist/witnet/assets/modals/index.js +0 -11
  166. package/dist/witnet/assets/modals/web3/eth.d.ts +0 -5
  167. package/dist/witnet/assets/modals/web3/eth.d.ts.map +0 -1
  168. package/dist/witnet/assets/modals/web3/eth.js +0 -26
  169. package/dist/witnet/assets/modals/web3/ipfs.d.ts +0 -4
  170. package/dist/witnet/assets/modals/web3/ipfs.d.ts.map +0 -1
  171. package/dist/witnet/assets/modals/web3/ipfs.js +0 -18
  172. package/dist/witnet/assets/modals/web3/wit.d.ts +0 -4
  173. package/dist/witnet/assets/modals/web3/wit.d.ts.map +0 -1
  174. package/dist/witnet/assets/modals/web3/wit.js +0 -17
  175. package/dist/witnet/assets/requests.d.ts +0 -11
  176. package/dist/witnet/assets/requests.d.ts.map +0 -1
  177. package/dist/witnet/assets/requests.js +0 -43
  178. package/src/bin/cli/history.js +0 -31
  179. package/src/bin/postinstall.js +0 -9
  180. package/src/bin/toolkit.js +0 -290
  181. package/witnet/assets/_index.js +0 -8
  182. package/witnet/assets/_requests.js +0 -25
  183. package/witnet/assets/_sources.js +0 -36
  184. package/witnet/assets/_templates.js +0 -36
  185. package/witnet/assets/index.js +0 -4
  186. package/witnet/assets/modals/index.js +0 -9
  187. package/witnet/assets/modals/web3/eth.js +0 -29
  188. package/witnet/assets/modals/web3/ipfs.js +0 -22
  189. package/witnet/assets/modals/web3/wit.js +0 -21
  190. package/witnet/assets/requests.js +0 -49
  191. /package/witnet/assets/modals/web3/{btc.js → btc.cjs} +0 -0
  192. /package/witnet/assets/modals/web3/{sol.js → sol.cjs} +0 -0
@@ -1,14 +1,14 @@
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");
1
+ import { createRequire } from "node:module";
2
+ import Long from "long";
3
+ const require = createRequire(import.meta.url);
4
+ import protobuf from "protobufjs";
5
+ const { Root: ProtoRoot } = protobuf;
6
+ const protoRoot = ProtoRoot.fromJSON(require("../../../../witnet/witnet.proto.json"));
7
+ import { fromHexString, toHexString } from "../../../bin/helpers.js";
8
+ import { RadonRequest, RadonTemplate } from "../../radon/index.js";
9
+ import { TransactionPayloadMultiSig } from "../payloads.js";
10
+ import { Coins, PublicKeyHash, TransactionPriority, } from "../types.js";
11
+ import { BigMath, sha256 } from "../utils.js";
12
12
  const COLLATERAL_RATIO = 100n;
13
13
  // const RADON_ERROR_MAX_BYTES = 9;
14
14
  const DR_COMMIT_TX_WEIGHT = 400;
@@ -18,13 +18,19 @@ const DR_TX_WEIGHT_ALPHA = 1;
18
18
  const DR_TX_WEIGHT_BETA = 1;
19
19
  const TX_WEIGHT_INPUT_SIZE = 133;
20
20
  const TX_WEIGHT_OUTPUT_SIZE = 36;
21
- class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
21
+ export class DataRequestPayload extends TransactionPayloadMultiSig {
22
+ static DEFAULT_MAX_RESULT_SIZE = 256;
23
+ static DEFAULT_WITNESSES = 12;
24
+ static MAX_WEIGHT = 80_000;
25
+ static MIN_COLLATERAL = 20000000000n;
26
+ _request;
27
+ template;
22
28
  constructor(protoTypeName, radon, initialTarget) {
23
29
  super(protoTypeName, initialTarget);
24
- if (radon instanceof radon_1.RadonRequest) {
30
+ if (radon instanceof RadonRequest) {
25
31
  this._request = radon;
26
32
  }
27
- else if (radon instanceof radon_1.RadonTemplate) {
33
+ else if (radon instanceof RadonTemplate) {
28
34
  this.template = radon;
29
35
  }
30
36
  else {
@@ -45,7 +51,7 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
45
51
  // console.log("\ndroHash.message =>", JSON.stringify(message))
46
52
  const bytecode = DataRequestOutput.encode(message).finish();
47
53
  // console.log("\ndroHash.bytecode =>", bytecode)
48
- return (0, helpers_1.toHexString)((0, utils_1.sha256)(bytecode));
54
+ return toHexString(sha256(bytecode));
49
55
  }
50
56
  }
51
57
  else {
@@ -55,9 +61,9 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
55
61
  get droSLA() {
56
62
  if (this._target && this._fees) {
57
63
  const minConsensusPercentage = this._target.majorityType === "qualified" ? 66 : 51;
58
- const witnesses = (typeof this._target.witnesses === 'object'
64
+ const witnesses = typeof this._target.witnesses === "object"
59
65
  ? Object.keys(this._target.witnesses).length
60
- : this._target.witnesses || 0);
66
+ : this._target.witnesses || 0;
61
67
  const witnessReward = this._fees2UnitaryReward(this._fees, witnesses);
62
68
  const commitAndRevealFee = this._fees2UnitaryCommitRevealReward(this._fees, witnesses); //Math.floor(Number(witnessReward / BigInt(witnesses))) // TODO: zerofy if protocol >= V2_1
63
69
  const collateral = witnessReward * COLLATERAL_RATIO; // TODO: zerofy if protocol >= V2_1
@@ -111,10 +117,7 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
111
117
  get hash() {
112
118
  const _bytecode = this.bytecode;
113
119
  if (_bytecode && this.droHash) {
114
- return (0, helpers_1.toHexString)((0, utils_1.sha256)(Buffer.concat([
115
- (0, helpers_1.fromHexString)(this.droHash),
116
- (0, utils_1.sha256)(_bytecode),
117
- ])));
120
+ return toHexString(sha256(Buffer.concat([fromHexString(this.droHash), sha256(_bytecode)])));
118
121
  }
119
122
  else {
120
123
  return undefined;
@@ -127,10 +130,10 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
127
130
  return !!this.template;
128
131
  }
129
132
  get prepared() {
130
- return (this.covered
131
- && this._inputs.length > 0
132
- && !!this._request
133
- && !!this._target);
133
+ return (this.covered &&
134
+ this._inputs.length > 0 &&
135
+ !!this._request &&
136
+ !!this._target);
134
137
  }
135
138
  get radArgs() {
136
139
  return this.template ? this._target?.args : undefined;
@@ -143,23 +146,26 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
143
146
  }
144
147
  get value() {
145
148
  if (this._target && this._fees) {
146
- return types_1.Coins.fromPedros(this._fees2Value(this._fees, this._target.witnesses || 0));
149
+ return Coins.fromPedros(this._fees2Value(this._fees, this._target.witnesses || 0));
147
150
  }
148
151
  else {
149
- return types_1.Coins.zero();
152
+ return Coins.zero();
150
153
  }
151
154
  }
152
155
  get weight() {
153
156
  if (this._request && this._target) {
154
- const witnesses = typeof this._target.witnesses === 'object' ? Object.keys(this._target.witnesses).length : this._target.witnesses || 0;
157
+ const witnesses = typeof this._target.witnesses === "object"
158
+ ? Object.keys(this._target.witnesses).length
159
+ : this._target.witnesses || 0;
155
160
  return (DR_TX_WEIGHT_ALPHA * (this._request.weight() + 8 + 2 + 8 + 4 + 8),
156
- +this._inputs.length * TX_WEIGHT_INPUT_SIZE
157
- + this._outputs.length * TX_WEIGHT_OUTPUT_SIZE
158
- + witnesses * (DR_COMMIT_TX_WEIGHT
159
- + DR_REVEAL_TX_WEIGHT * DR_TX_WEIGHT_BETA
160
- + TX_WEIGHT_OUTPUT_SIZE // TODO V2.1: typeof this._target.witnesses === 'object' ? TX_WEIGHT_OUTPUT_SIZE : 0
161
- )
162
- + Math.max(DR_TALLY_TX_WEIGHT, this._target?.maxResultSize || 0) * DR_TX_WEIGHT_BETA);
161
+ +this._inputs.length * TX_WEIGHT_INPUT_SIZE +
162
+ this._outputs.length * TX_WEIGHT_OUTPUT_SIZE +
163
+ witnesses *
164
+ (DR_COMMIT_TX_WEIGHT +
165
+ DR_REVEAL_TX_WEIGHT * DR_TX_WEIGHT_BETA +
166
+ TX_WEIGHT_OUTPUT_SIZE) + // TODO V2.1: typeof this._target.witnesses === 'object' ? TX_WEIGHT_OUTPUT_SIZE : 0
167
+ Math.max(DR_TALLY_TX_WEIGHT, this._target?.maxResultSize || 0) *
168
+ DR_TX_WEIGHT_BETA);
163
169
  }
164
170
  else {
165
171
  return 0;
@@ -169,7 +175,7 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
169
175
  if (!this._target) {
170
176
  throw new Error(`${this.constructor.name}: internal error: no in-flight params.`);
171
177
  }
172
- else if (this._target?.fees instanceof types_1.Coins) {
178
+ else if (this._target?.fees instanceof Coins) {
173
179
  this._fees = this._target.fees.pedros;
174
180
  return super.consumeUtxos(ledger, reload);
175
181
  }
@@ -182,29 +188,35 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
182
188
  }
183
189
  else if (this.weight > DataRequestPayload.MAX_WEIGHT * 0.8) {
184
190
  const delta = this.weight - DataRequestPayload.MAX_WEIGHT * 0.8;
185
- this._target.witnesses -= Math.ceil(delta / (DR_COMMIT_TX_WEIGHT + DR_REVEAL_TX_WEIGHT * TX_WEIGHT_OUTPUT_SIZE));
191
+ this._target.witnesses -= Math.ceil(delta /
192
+ (DR_COMMIT_TX_WEIGHT +
193
+ DR_REVEAL_TX_WEIGHT * TX_WEIGHT_OUTPUT_SIZE));
186
194
  if (this._target.witnesses < 3) {
187
195
  delete this._target.witnesses;
188
196
  throw new Error(`${this.constructor.name}: cannot estimate witnesses: radon request too heavy: ${this.weight} weight units`);
189
197
  }
190
198
  }
191
199
  }
192
- const priority = this._target?.fees || types_1.TransactionPriority.Opulent;
200
+ const priority = this._target?.fees ||
201
+ TransactionPriority.Opulent;
193
202
  let estimatedFees = await this._estimateNetworkFees(ledger.provider, priority);
194
203
  while (this._fees < estimatedFees && this._change >= 0) {
195
204
  this._fees = estimatedFees;
196
205
  this._outputs = [];
197
- this._inputs = [];
198
- this._covered = 0n;
199
- // consume utxos as to cover for estimated value and estimated fees
206
+ // consume utxos as to cover for estimated value and estimated fees
200
207
  const value = this._fees2Value(this._fees, this._target.witnesses);
201
- const utxos = await ledger.selectUtxos({
202
- value: types_1.Coins.fromPedros(value + this._fees - this._covered),
203
- reload,
204
- });
205
- this._covered += utxos.map(utxo => BigInt(utxo.value)).reduce((prev, curr) => prev + curr, 0n);
206
- this._inputs.push(...utxos);
207
- ledger.consumeUtxos(...utxos);
208
+ if (this._covered < this.value.pedros + this._fees) {
209
+ const utxos = await ledger.selectUtxos({
210
+ value: Coins.fromPedros(value + this._fees - this._covered),
211
+ reload,
212
+ });
213
+ const extra = utxos
214
+ .map((utxo) => BigInt(utxo.value))
215
+ .reduce((prev, curr) => prev + curr, 0n);
216
+ this._covered += extra;
217
+ this._inputs.push(...utxos);
218
+ ledger.consumeUtxos(...utxos);
219
+ }
208
220
  this._change = this._covered - (value + this._fees);
209
221
  if (this._change >= 0) {
210
222
  this.prepareOutputs({ value: this._change });
@@ -238,7 +250,8 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
238
250
  this._inputs = [];
239
251
  this._outputs = [];
240
252
  this._target = target;
241
- if (this.droSLA?.collateral && this.droSLA.collateral < DataRequestPayload.MIN_COLLATERAL) {
253
+ if (this.droSLA?.collateral &&
254
+ this.droSLA.collateral < DataRequestPayload.MIN_COLLATERAL) {
242
255
  throw new TypeError(`${this.constructor.name}: witnessing collateral below minimum: ${this.droSLA.collateral} < ${DataRequestPayload.MIN_COLLATERAL}`);
243
256
  }
244
257
  if (this.template) {
@@ -246,7 +259,7 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
246
259
  if (args === undefined) {
247
260
  throw new TypeError(`${this.constructor.name}: no template args were passed.`);
248
261
  }
249
- else if (typeof args === 'string') {
262
+ else if (typeof args === "string") {
250
263
  this._request = this.template.buildRadonRequest([args]);
251
264
  }
252
265
  else {
@@ -258,39 +271,45 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
258
271
  toJSON(humanize = false) {
259
272
  const droSLA = this.droSLA;
260
273
  return {
261
- inputs: this.inputs
262
- .map(utxo => ({ output_pointer: utxo.output_pointer })),
263
- outputs: this.outputs.map(vto => ({
274
+ inputs: this.inputs.map((utxo) => ({
275
+ output_pointer: utxo.output_pointer,
276
+ })),
277
+ outputs: this.outputs.map((vto) => ({
264
278
  pkh: vto.pkh,
265
279
  time_lock: vto.time_lock,
266
280
  value: vto.value.toString(),
267
281
  })),
268
282
  dr_output: {
269
- ...(this._request ? { data_request: this._request.toJSON(humanize) } : {}),
283
+ ...(this._request
284
+ ? { data_request: this._request.toJSON(humanize) }
285
+ : {}),
270
286
  commit_and_reveal_fee: droSLA?.commitAndRevealFee,
271
287
  min_consensus_percentage: droSLA?.minConsensusPercentage,
272
288
  witnesses: droSLA?.witnesses,
273
289
  witness_reward: droSLA?.witnessReward,
274
- collateral: droSLA?.collateral
275
- }
290
+ collateral: droSLA?.collateral,
291
+ },
276
292
  };
277
293
  }
278
294
  toProtobuf() {
279
295
  if (this.prepared && this._target && this._request) {
280
296
  return {
281
- inputs: this.inputs
282
- .map(utxo => {
283
- const transactionId = utxo.output_pointer.split(':')[0];
284
- const outputIndex = parseInt(utxo.output_pointer.split(':')[1]);
297
+ inputs: this.inputs.map((utxo) => {
298
+ const transactionId = utxo.output_pointer.split(":")[0];
299
+ const outputIndex = parseInt(utxo.output_pointer.split(":")[1], 10);
285
300
  return {
286
301
  outputPointer: {
287
- transactionId: { SHA256: Array.from((0, helpers_1.fromHexString)(transactionId)) },
302
+ transactionId: {
303
+ SHA256: Array.from(fromHexString(transactionId)),
304
+ },
288
305
  ...(outputIndex > 0 ? { outputIndex } : {}),
289
306
  },
290
307
  };
291
308
  }),
292
- outputs: this.outputs.map(vto => ({
293
- pkh: { hash: Array.from(types_1.PublicKeyHash.fromBech32(vto.pkh).toBytes20()), },
309
+ outputs: this.outputs.map((vto) => ({
310
+ pkh: {
311
+ hash: Array.from(PublicKeyHash.fromBech32(vto.pkh).toBytes20()),
312
+ },
294
313
  value: Long.fromValue(vto.value),
295
314
  ...(vto.time_lock > 0 ? { timeLock: vto.time_lock } : {}),
296
315
  })),
@@ -301,19 +320,20 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
301
320
  validateTarget(target) {
302
321
  target = this._cleanTargetExtras(target);
303
322
  if (target && Object.keys(target).length > 0) {
304
- if (!(target
305
- && (!target?.fees
306
- || (target.fees instanceof types_1.Coins && target.fees.pedros > 0
307
- || Object.values(types_1.TransactionPriority).includes(target.fees)))
308
- && (target?.witnesses || target?.witnesses === undefined)
309
- && (!this.template || target?.args))) {
323
+ if (!(target &&
324
+ (!target?.fees ||
325
+ (target.fees instanceof Coins &&
326
+ target.fees.pedros > 0) ||
327
+ Object.values(TransactionPriority).includes(target.fees)) &&
328
+ (target?.witnesses || target?.witnesses === undefined) &&
329
+ (!this.template || target?.args))) {
310
330
  throw new TypeError(`${this.constructor.name}: invalid options: ${JSON.stringify(target)}`);
311
331
  }
312
332
  else if (target?.witnesses) {
313
- if (typeof target.witnesses === 'object') {
333
+ if (typeof target.witnesses === "object") {
314
334
  throw new TypeError(`${this.constructor.name}: explicit witnessing committees not yet supported: ${target.witnesses}`);
315
335
  }
316
- target.witnesses = parseInt(target.witnesses);
336
+ target.witnesses = parseInt(target.witnesses, 10);
317
337
  }
318
338
  return target;
319
339
  }
@@ -323,44 +343,36 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
323
343
  }
324
344
  _cleanTargetExtras(target) {
325
345
  if (target) {
326
- return Object.fromEntries(Object.entries(target).filter(([key,]) => [
327
- 'args',
328
- 'fees',
329
- 'maxResultSize',
330
- 'witnesses',
331
- ].includes(key)));
346
+ return Object.fromEntries(Object.entries(target).filter(([key]) => ["args", "fees", "maxResultSize", "witnesses"].includes(key)));
332
347
  }
333
348
  }
334
- async _estimateNetworkFees(provider, priority = types_1.TransactionPriority.Medium) {
335
- if (!this._priorities) {
336
- this._priorities = await provider.priorities();
337
- }
338
- return BigInt(Math.floor(this._priorities[`drt_${priority}`].priority * (this.covered ? this.weight : (this.weight
339
- // estimate weight of one single output in case there was change to pay back
340
- + TX_WEIGHT_OUTPUT_SIZE))));
349
+ async _estimateNetworkFees(provider, priority = TransactionPriority.Medium) {
350
+ this._priorities = await provider.priorities();
351
+ return BigInt(Math.floor(this._priorities[`drt_${priority}`].priority *
352
+ (this.covered
353
+ ? this.weight
354
+ : this.weight +
355
+ // estimate weight of one single output in case there was change to pay back
356
+ TX_WEIGHT_OUTPUT_SIZE)));
341
357
  }
342
358
  _fees2UnitaryCommitRevealReward(fees, witnesses) {
343
- return (fees / BigInt(witnesses)) || 1n;
359
+ return fees / BigInt(witnesses) || 1n;
344
360
  }
345
361
  _fees2UnitaryReward(fees, _witnesses) {
346
- return utils_1.BigMath.max(fees, BigInt(Math.ceil(Number(DataRequestPayload.MIN_COLLATERAL / COLLATERAL_RATIO))));
362
+ return BigMath.max(fees, BigInt(Math.ceil(Number(DataRequestPayload.MIN_COLLATERAL / COLLATERAL_RATIO))));
347
363
  }
348
364
  _fees2Value(fees, witnesses) {
349
- return (BigInt(witnesses) * (this._fees2UnitaryReward(fees, witnesses)
350
- + 2n * this._fees2UnitaryCommitRevealReward(fees, witnesses)));
365
+ return (BigInt(witnesses) *
366
+ (this._fees2UnitaryReward(fees, witnesses) +
367
+ 2n * this._fees2UnitaryCommitRevealReward(fees, witnesses)));
351
368
  }
352
369
  _toDrOutputProtobuf() {
353
370
  if (this._request) {
354
371
  return {
355
372
  ...this.droSLA,
356
- dataRequest: this._request.toProtobuf()
373
+ dataRequest: this._request.toProtobuf(),
357
374
  };
358
375
  }
359
376
  }
360
377
  }
361
- exports.DataRequestPayload = DataRequestPayload;
362
- DataRequestPayload.DEFAULT_MAX_RESULT_SIZE = 256;
363
- DataRequestPayload.DEFAULT_WITNESSES = 12;
364
- DataRequestPayload.MAX_WEIGHT = 80000;
365
- DataRequestPayload.MIN_COLLATERAL = 20000000000n;
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVJlcXVlc3RQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvRGF0YVJlcXVlc3RQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QiwyQ0FBOEM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQTtBQUVyRixrREFBaUU7QUFFakUsdUNBQXlEO0FBSXpELDBDQUF3RDtBQUN4RCxvQ0FBdUY7QUFDdkYsb0NBQTBDO0FBdUIxQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUM5QixtQ0FBbUM7QUFFbkMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUE7QUFDL0IsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUE7QUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUE7QUFFOUIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUE7QUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUE7QUFFM0IsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUE7QUFDaEMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUE7QUFFaEMsTUFBYSxrQkFBbUIsU0FBUSxxQ0FBNkM7SUFVakYsWUFBYSxhQUFxQixFQUFFLEtBQW1DLEVBQUUsYUFBaUM7UUFDdEcsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUNuQyxJQUFJLEtBQUssWUFBWSxvQkFBWSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFDekIsQ0FBQzthQUFNLElBQUksS0FBSyxZQUFZLHFCQUFhLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FB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UUFDMUQsT0FBTyxlQUFPLENBQUMsR0FBRyxDQUNkLElBQUksRUFDSixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUNsRixDQUFDO0lBQ04sQ0FBQztJQUNTLFdBQVcsQ0FBQyxJQUFZLEVBQUUsU0FBaUI7UUFDakQsT0FBTyxDQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztjQUN2QyxFQUFFLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FDL0QsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVTLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPO2dCQUNILEdBQUcsSUFBSSxDQUFDLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO2FBQzFDLENBQUE7UUFDTCxDQUFDO0lBQ0wsQ0FBQzs7QUE3WUwsZ0RBOFlDO0FBNVlpQiwwQ0FBdUIsR0FBRyxHQUFHLENBQUM7QUFDOUIsb0NBQWlCLEdBQUcsRUFBRSxDQUFBO0FBQ3RCLDZCQUFVLEdBQUcsS0FBTSxDQUFBO0FBQ25CLGlDQUFjLEdBQUcsWUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTG9uZyA9IHJlcXVpcmUoXCJsb25nXCIpXHJcblxyXG5pbXBvcnQgeyBSb290IGFzIFByb3RvUm9vdCB9IGZyb20gXCJwcm90b2J1ZmpzXCJcclxuY29uc3QgcHJvdG9Sb290ID0gUHJvdG9Sb290LmZyb21KU09OKHJlcXVpcmUoXCIuLi8uLi8uLi8uLi93aXRuZXQvd2l0bmV0LnByb3RvLmpzb25cIikpXHJcblxyXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nLCB0b0hleFN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi9iaW4vaGVscGVyc1wiXHJcblxyXG5pbXBvcnQgeyBSYWRvblJlcXVlc3QsIFJhZG9uVGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vcmFkb25cIlxyXG5pbXBvcnQgeyBIYXNoLCBIZXhTdHJpbmcsIElKc29uUnBjUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxyXG5cclxuaW1wb3J0IHsgSUxlZGdlciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCJcclxuaW1wb3J0IHsgVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWcgfSBmcm9tIFwiLi4vcGF5bG9hZHNcIlxyXG5pbXBvcnQgeyBDb2lucywgUHVibGljS2V5SGFzaCwgVHJhbnNhY3Rpb25QYXJhbXMsIFRyYW5zYWN0aW9uUHJpb3JpdHkgfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5pbXBvcnQgeyBCaWdNYXRoLCBzaGEyNTYgfSBmcm9tIFwiLi4vdXRpbHNcIlxyXG4vLyBpbXBvcnQgeyBPcGNvZGVzIH0gZnJvbSBcInNyYy9saWIvcmFkb24vcmVkdWNlcnNcIlxyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MgPSBhbnkgfCBzdHJpbmcgfCBzdHJpbmdbXSB8IHN0cmluZ1tdW11cclxuXHJcbmV4cG9ydCB0eXBlIERhdGFSZXF1ZXN0TWFqb3JpdHkgPSBcInNpbXBsZVwiIHwgXCJxdWFsaWZpZWRcIjtcclxuICAgIFxyXG5leHBvcnQgdHlwZSBEYXRhUmVxdWVzdFBhcmFtcyA9IFRyYW5zYWN0aW9uUGFyYW1zICYge1xyXG4gICAgYXJncz86IERhdGFSZXF1ZXN0VGVtcGxhdGVBcmdzLFxyXG4gICAgbWFqb3JpdHlUeXBlPzogRGF0YVJlcXVlc3RNYWpvcml0eSxcclxuICAgIG1heFJlc3VsdFNpemU/OiBudW1iZXIsXHJcbiAgICB3aXRuZXNzZXM/OiBudW1iZXIsIFxyXG59XHJcblxyXG50eXBlIERhdGFSZXF1ZXN0T3V0cHV0U0xBID0ge1xyXG4gICAgY29sbGF0ZXJhbD86IG51bWJlcixcclxuICAgIGNvbW1pdEFuZFJldmVhbEZlZT86IG51bWJlcixcclxuICAgIG1pbkNvbnNlbnN1c1BlcmNlbnRhZ2U6IG51bWJlcixcclxuICAgIHdpdG5lc3NlczogbnVtYmVyLFxyXG4gICAgd2l0bmVzc1Jld2FyZDogbnVtYmVyLFxyXG4gICAgbWF4UmVzdWx0U2l6ZT86IG51bWJlcixcclxufVxyXG5cclxuY29uc3QgQ09MTEFURVJBTF9SQVRJTyA9IDEwMG47XHJcbi8vIGNvbnN0IFJBRE9OX0VSUk9SX01BWF9CWVRFUyA9IDk7XHJcblxyXG5jb25zdCBEUl9DT01NSVRfVFhfV0VJR0hUID0gNDAwXHJcbmNvbnN0IERSX1JFVkVBTF9UWF9XRUlHSFQgPSAyMDBcclxuY29uc3QgRFJfVEFMTFlfVFhfV0VJR0hUID0gMTAwXHJcblxyXG5jb25zdCBEUl9UWF9XRUlHSFRfQUxQSEEgPSAxXHJcbmNvbnN0IERSX1RYX1dFSUdIVF9CRVRBID0gMVxyXG5cclxuY29uc3QgVFhfV0VJR0hUX0lOUFVUX1NJWkUgPSAxMzNcclxuY29uc3QgVFhfV0VJR0hUX09VVFBVVF9TSVpFID0gMzZcclxuXHJcbmV4cG9ydCBjbGFzcyBEYXRhUmVxdWVzdFBheWxvYWQgZXh0ZW5kcyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZzxEYXRhUmVxdWVzdFBhcmFtcz4ge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgREVGQVVMVF9NQVhfUkVTVUxUX1NJWkUgPSAyNTY7XHJcbiAgICBwdWJsaWMgc3RhdGljIERFRkFVTFRfV0lUTkVTU0VTID0gMTJcclxuICAgIHB1YmxpYyBzdGF0aWMgTUFYX1dFSUdIVCA9IDgwXzAwMFxyXG4gICAgcHVibGljIHN0YXRpYyBNSU5fQ09MTEFURVJBTCA9IDIwXzAwMF8wMDBfMDAwblxyXG5cclxuICAgIHByb3RlY3RlZCBfcmVxdWVzdD86IFJhZG9uUmVxdWVzdCBcclxuICAgIHB1YmxpYyByZWFkb25seSB0ZW1wbGF0ZT86IFJhZG9uVGVtcGxhdGVcclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IgKHByb3RvVHlwZU5hbWU6IHN0cmluZywgcmFkb246IFJhZG9uUmVxdWVzdCB8IFJhZG9uVGVtcGxhdGUsIGluaXRpYWxUYXJnZXQ/OiBEYXRhUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgIHN1cGVyKHByb3RvVHlwZU5hbWUsIGluaXRpYWxUYXJnZXQpXHJcbiAgICAgICAgaWYgKHJhZG9uIGluc3RhbmNlb2YgUmFkb25SZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSByYWRvblxyXG4gICAgICAgIH0gZWxzZSBpZiAocmFkb24gaW5zdGFuY2VvZiBSYWRvblRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUgPSByYWRvblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYERhdGFSZXF1ZXN0UGF5bG9hZDogdW5zdXBwb3J0ZWQgUmFkb24gYXNzZXQgdHlwZTogJHsocmFkb24gYXMgYW55KT8uY29uc3RydWN0b3IubmFtZX1gKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRyb0hhc2goKTogSGFzaCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5fdG9Eck91dHB1dFByb3RvYnVmKClcclxuICAgICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IERhdGFSZXF1ZXN0T3V0cHV0ID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUoXCJEYXRhUmVxdWVzdE91dHB1dFwiKVxyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBEYXRhUmVxdWVzdE91dHB1dC52ZXJpZnkob2JqKVxyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLm9iaiA9PlwiLCBKU09OLnN0cmluZ2lmeShvYmopKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IERhdGFSZXF1ZXN0T3V0cHV0LmZyb21PYmplY3Qob2JqKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLm1lc3NhZ2UgPT5cIiwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlY29kZSA9IERhdGFSZXF1ZXN0T3V0cHV0LmVuY29kZShtZXNzYWdlKS5maW5pc2goKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLmJ5dGVjb2RlID0+XCIsIGJ5dGVjb2RlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKHNoYTI1NihieXRlY29kZSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZHJvU0xBKCk6IERhdGFSZXF1ZXN0T3V0cHV0U0xBIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5fdGFyZ2V0ICYmIHRoaXMuX2ZlZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWluQ29uc2Vuc3VzUGVyY2VudGFnZSA9IHRoaXMuX3RhcmdldC5tYWpvcml0eVR5cGUgPT09IFwicXVhbGlmaWVkXCIgPyA2NiA6IDUxO1xyXG4gICAgICAgICAgICBjb25zdCB3aXRuZXNzZXMgPSAoXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gJ29iamVjdCdcclxuICAgICAgICAgICAgICAgICAgICA/IE9iamVjdC5rZXlzKHRoaXMuX3RhcmdldC53aXRuZXNzZXMpLmxlbmd0aCBcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3RhcmdldC53aXRuZXNzZXMgfHwgMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB3aXRuZXNzUmV3YXJkID0gdGhpcy5fZmVlczJVbml0YXJ5UmV3YXJkKHRoaXMuX2ZlZXMsIHdpdG5lc3NlcykgXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1pdEFuZFJldmVhbEZlZSA9IHRoaXMuX2ZlZXMyVW5pdGFyeUNvbW1pdFJldmVhbFJld2FyZCh0aGlzLl9mZWVzLCB3aXRuZXNzZXMpIC8vTWF0aC5mbG9vcihOdW1iZXIod2l0bmVzc1Jld2FyZCAvIEJpZ0ludCh3aXRuZXNzZXMpKSkgLy8gVE9ETzogemVyb2Z5IGlmIHByb3RvY29sID49IFYyXzFcclxuICAgICAgICAgICAgY29uc3QgY29sbGF0ZXJhbCA9IHdpdG5lc3NSZXdhcmQgKiBDT0xMQVRFUkFMX1JBVElPIC8vIFRPRE86IHplcm9meSBpZiBwcm90b2NvbCA+PSBWMl8xXHJcbiAgICAgICAgICAgIGlmIChjb2xsYXRlcmFsID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIFxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBleGNlc3NpdmUgd2l0bmVzcyBjb2xsYXRlcmFsOiAke2NvbGxhdGVyYWwudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh3aXRuZXNzUmV3YXJkID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSB3aXRuZXNzIHJld2FyZDogJHt3aXRuZXNzUmV3YXJkLnRvU3RyaW5nKCl9ID4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tbWl0QW5kUmV2ZWFsRmVlID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSBjb21taXQvcmV2ZWFsIGZlZTogJHtjb21taXRBbmRSZXZlYWxGZWUudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICAvLyBUT0RPOiBvbmx5IHdoZW4gcHJvdG9jb2wgPj0gVjJfMVxyXG4gICAgICAgICAgICAvLyBsZXQgbWF4UmVzdWx0U2l6ZVxyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5yZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIC8vICAgICBpZiAodGhpcy5yZXF1ZXN0LndpdG5lc3NSZWR1Y2VyLm9wY29kZSA9PT0gT3Bjb2Rlcy5Db25jYXRlbmF0ZUFuZEhhc2gpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICYmIHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSAhPT0gMzQpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG1heCByZXN1bHQgc2l6ZSAoJHt0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemV9KSBmb3IgYSBjb25jYXRlbmF0ZS1hbmQtaGFzaCBvdXRwdXQuYClcclxuICAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHN3aXRjaCAodGhpcy5yZXF1ZXN0LmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNhc2UgXCJSYWRvbkJvb2xlYW5cIjpcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2FzZSBcIlJhZG9uSW50ZWdlclwiOlxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjYXNlIFwiUmFkb25GbG9hdFwiOlxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSAmJiB0aGlzLl90YXJnZXQubWF4UmVzdWx0U2l6ZSAhPT0gUkFET05fRVJST1JfTUFYX0JZVEVTKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG1heCByZXN1bHQgc2l6ZSAoJHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0Lm1heFJlc3VsdFNpemVcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSBieXRlcykgZm9yIGV4cGVjdGVkIHJlc3VsdCB0eXBlICgke3RoaXMucmVxdWVzdC5kYXRhVHlwZX0pYClcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSAmJiB0aGlzLl90YXJnZXQubWF4UmVzdWx0U2l6ZSA8IFJBRE9OX0VSUk9SX01BWF9CWVRFUykge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW52YWxpZCBtYXggcmVzdWx0IHNpemUgKCR7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC5tYXhSZXN1bHRTaXplXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0gYnl0ZXMpIGZvciB2YXJpYW50IHJlc3VsdCB0eXBlICgke3RoaXMucmVxdWVzdC5kYXRhVHlwZX0pYClcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG1heFJlc3VsdFNpemUgPSB0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgfHwgRGF0YVJlcXVlc3RQYXlsb2FkLkRFRkFVTFRfTUFYX1JFU1VMVF9TSVpFXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBjb2xsYXRlcmFsOiBOdW1iZXIoY29sbGF0ZXJhbCksXHJcbiAgICAgICAgICAgICAgICBjb21taXRBbmRSZXZlYWxGZWU6IE51bWJlcihjb21taXRBbmRSZXZlYWxGZWUpLFxyXG4gICAgICAgICAgICAgICAgLy8gbWF4UmVzdWx0U2l6ZSwgVE9ETzogb25seSBpZiBwcm90b2NvbCA+PSBWMl8xXHJcbiAgICAgICAgICAgICAgICBtaW5Db25zZW5zdXNQZXJjZW50YWdlLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc2VzLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc1Jld2FyZDogTnVtYmVyKHdpdG5lc3NSZXdhcmQpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBoYXNoKCk6IEhhc2ggfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IF9ieXRlY29kZSA9IHRoaXMuYnl0ZWNvZGVcclxuICAgICAgICBpZiAoX2J5dGVjb2RlICYmIHRoaXMuZHJvSGFzaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoc2hhMjU2KEJ1ZmZlci5jb25jYXQoW1xyXG4gICAgICAgICAgICAgICAgZnJvbUhleFN0cmluZyh0aGlzLmRyb0hhc2gpLFxyXG4gICAgICAgICAgICAgICAgc2hhMjU2KF9ieXRlY29kZSksXHJcbiAgICAgICAgICAgIF0pKSkgYXMgSGFzaFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtYXhXZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gRGF0YVJlcXVlc3RQYXlsb2FkLk1BWF9XRUlHSFRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHBhcmFtZXRlcml6ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy50ZW1wbGF0ZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJlcGFyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5jb3ZlcmVkXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9pbnB1dHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLl9yZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICAmJiAhIXRoaXMuX3RhcmdldFxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJhZEFyZ3MoKTogRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlID8gdGhpcy5fdGFyZ2V0Py5hcmdzIDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByYWRIYXNoKCk6IEhleFN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdD8ucmFkSGFzaFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVxdWVzdCgpOiBSYWRvblJlcXVlc3QgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBDb2lucyB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RhcmdldCAmJiB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb2lucy5mcm9tUGVkcm9zKHRoaXMuX2ZlZXMyVmFsdWUodGhpcy5fZmVlcywgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29pbnMuemVybygpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgd2VpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QgJiYgdGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3NlcyA9IHR5cGVvZiB0aGlzLl90YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0JyA/IE9iamVjdC5rZXlzKHRoaXMuX3RhcmdldC53aXRuZXNzZXMpLmxlbmd0aCA6IHRoaXMuX3RhcmdldC53aXRuZXNzZXMgfHwgMFxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgRFJfVFhfV0VJR0hUX0FMUEhBICogKHRoaXMuX3JlcXVlc3Qud2VpZ2h0KCkgKyA4ICsgMiArIDggKyA0ICsgOCksXHJcbiAgICAgICAgICAgICAgICAgICAgKyB0aGlzLl9pbnB1dHMubGVuZ3RoICogVFhfV0VJR0hUX0lOUFVUX1NJWkUgXHJcbiAgICAgICAgICAgICAgICAgICAgKyB0aGlzLl9vdXRwdXRzLmxlbmd0aCAqIFRYX1dFSUdIVF9PVVRQVVRfU0laRSBcclxuICAgICAgICAgICAgICAgICAgICArIHdpdG5lc3NlcyAqIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSX0NPTU1JVF9UWF9XRUlHSFRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIERSX1JFVkVBTF9UWF9XRUlHSFQgKiBEUl9UWF9XRUlHSFRfQkVUQSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgLy8gVE9ETyBWMi4xOiB0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gJ29iamVjdCcgPyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICsgTWF0aC5tYXgoRFJfVEFMTFlfVFhfV0VJR0hULCB0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgfHwgMCkgKiBEUl9UWF9XRUlHSFRfQkVUQVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBjb25zdW1lVXR4b3MobGVkZ2VyOiBJTGVkZ2VyLCByZWxvYWQ/OiBib29sZWFuKTogUHJvbWlzZTxiaWdpbnQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3RhcmdldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IG5vIGluLWZsaWdodCBwYXJhbXMuYClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl90YXJnZXQgYXMgYW55KT8uZmVlcyBpbnN0YW5jZW9mIENvaW5zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZlZXMgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSkuZmVlcy5wZWRyb3M7XHJcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5jb25zdW1lVXR4b3MobGVkZ2VyLCByZWxvYWQpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY292ZXJlZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RhcmdldC53aXRuZXNzZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgICBEYXRhUmVxdWVzdFBheWxvYWQuREVGQVVMVF9XSVRORVNTRVMsIFxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGxlZGdlci5wcm92aWRlci53aXRuZXNzZXMoKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPCAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXNcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogY2Fubm90IGVzdGltYXRlIHdpdG5lc3NlczogbmV0d29yayBub3QgcmVhZHkgZm9yIHdpdG5lc3NpbmcuYCkgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy53ZWlnaHQgPiBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVCAqIDAuOCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy53ZWlnaHQgLSBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVCAqIDAuOFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgLT0gTWF0aC5jZWlsKGRlbHRhIC8gKERSX0NPTU1JVF9UWF9XRUlHSFQgKyBEUl9SRVZFQUxfVFhfV0VJR0hUICogVFhfV0VJR0hUX09VVFBVVF9TSVpFKSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA8IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBlc3RpbWF0ZSB3aXRuZXNzZXM6IHJhZG9uIHJlcXVlc3QgdG9vIGhlYXZ5OiAke3RoaXMud2VpZ2h0fSB3ZWlnaHQgdW5pdHNgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwcmlvcml0eSA9ICh0aGlzLl90YXJnZXQgYXMgYW55KT8uZmVlcyBhcyBUcmFuc2FjdGlvblByaW9yaXR5IHx8IFRyYW5zYWN0aW9uUHJpb3JpdHkuT3B1bGVudFxyXG4gICAgICAgICAgICBsZXQgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSk7XHJcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLl9mZWVzIDwgZXN0aW1hdGVkRmVlcyAmJiB0aGlzLl9jaGFuZ2UgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmVlcyA9IGVzdGltYXRlZEZlZXNcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRzID0gW11cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgPSAwblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc3VtZSB1dHhvcyBhcyB0byBjb3ZlciBmb3IgZXN0aW1hdGVkIHZhbHVlIGFuZCBlc3RpbWF0ZWQgZmVlcyBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZmVlczJWYWx1ZSh0aGlzLl9mZWVzLCB0aGlzLl90YXJnZXQud2l0bmVzc2VzKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXR4b3MgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQ29pbnMuZnJvbVBlZHJvcyh2YWx1ZSArIHRoaXMuX2ZlZXMgLSB0aGlzLl9jb3ZlcmVkKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsb2FkLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgKz0gdXR4b3MubWFwKHV0eG8gPT4gQmlnSW50KHV0eG8udmFsdWUpKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwbilcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0cy5wdXNoKC4uLnV0eG9zKVxyXG4gICAgICAgICAgICAgICAgbGVkZ2VyLmNvbnN1bWVVdHhvcyguLi51dHhvcylcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZSA9IHRoaXMuX2NvdmVyZWQgLSAodmFsdWUgKyB0aGlzLl9mZWVzKVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5nZSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlT3V0cHV0cyh7IHZhbHVlOiB0aGlzLl9jaGFuZ2UgfSlcclxuICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRGZWVzID0gYXdhaXQgdGhpcy5fZXN0aW1hdGVOZXR3b3JrRmVlcyhsZWRnZXIucHJvdmlkZXIsIHByaW9yaXR5KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2VcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW50b1JlY2VpcHQodGFyZ2V0OiBEYXRhUmVxdWVzdFBhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZHJvSGFzaDogdGhpcy5kcm9IYXNoLFxyXG4gICAgICAgICAgICByYWRBcmdzOiB0aGlzLnJhZEFyZ3MsXHJcbiAgICAgICAgICAgIHJhZEhhc2g6IHRoaXMucmFkSGFzaCxcclxuICAgICAgICAgICAgd2l0bmVzc2VzOiB0YXJnZXQud2l0bmVzc2VzLFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlcGFyZU91dHB1dHMoY2hhbmdlPzogeyB2YWx1ZTogYmlnaW50IH0pOiBhbnkge1xyXG4gICAgICAgIGlmIChjaGFuZ2U/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwa2g6IHRoaXMuX2lucHV0c1swXS5zaWduZXIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2hhbmdlLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgdGltZV9sb2NrOiAwLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRUYXJnZXQodGFyZ2V0OiBEYXRhUmVxdWVzdFBhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlID0gMG5cclxuICAgICAgICB0aGlzLl9jb3ZlcmVkID0gMG5cclxuICAgICAgICB0aGlzLl9mZWVzID0gMG5cclxuICAgICAgICB0aGlzLl9pbnB1dHMgPSBbXVxyXG4gICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldFxyXG4gICAgICAgIGlmICh0aGlzLmRyb1NMQT8uY29sbGF0ZXJhbCAmJiB0aGlzLmRyb1NMQS5jb2xsYXRlcmFsIDwgRGF0YVJlcXVlc3RQYXlsb2FkLk1JTl9DT0xMQVRFUkFMKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB3aXRuZXNzaW5nIGNvbGxhdGVyYWwgYmVsb3cgbWluaW11bTogJHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb1NMQS5jb2xsYXRlcmFsXHJcbiAgICAgICAgICAgICAgICB9IDwgJHtcclxuICAgICAgICAgICAgICAgICAgICBEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUxcclxuICAgICAgICAgICAgICAgIH1gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0YXJnZXQ/LmFyZ3NcclxuICAgICAgICAgICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBubyB0ZW1wbGF0ZSBhcmdzIHdlcmUgcGFzc2VkLmApXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3MgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gdGhpcy50ZW1wbGF0ZS5idWlsZFJhZG9uUmVxdWVzdChbYXJnc10pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gdGhpcy50ZW1wbGF0ZS5idWlsZFJhZG9uUmVxdWVzdChhcmdzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9wcmlvcml0aWVzXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvSlNPTihodW1hbml6ZSA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICBjb25zdCBkcm9TTEEgPSB0aGlzLmRyb1NMQSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaW5wdXRzOiB0aGlzLmlucHV0c1xyXG4gICAgICAgICAgICAgICAgLm1hcCh1dHhvID0+ICh7IG91dHB1dF9wb2ludGVyOiB1dHhvLm91dHB1dF9wb2ludGVyIH0pKSxcclxuICAgICAgICAgICAgb3V0cHV0czogdGhpcy5vdXRwdXRzLm1hcCh2dG8gPT4gKHsgXHJcbiAgICAgICAgICAgICAgICBwa2g6IHZ0by5wa2gsXHJcbiAgICAgICAgICAgICAgICB0aW1lX2xvY2s6IHZ0by50aW1lX2xvY2ssXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdnRvLnZhbHVlLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgZHJfb3V0cHV0OiB7XHJcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5fcmVxdWVzdCA/IHsgZGF0YV9yZXF1ZXN0OiB0aGlzLl9yZXF1ZXN0LnRvSlNPTihodW1hbml6ZSkgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgIGNvbW1pdF9hbmRfcmV2ZWFsX2ZlZTogZHJvU0xBPy5jb21taXRBbmRSZXZlYWxGZWUsXHJcbiAgICAgICAgICAgICAgICBtaW5fY29uc2Vuc3VzX3BlcmNlbnRhZ2U6IGRyb1NMQT8ubWluQ29uc2Vuc3VzUGVyY2VudGFnZSxcclxuICAgICAgICAgICAgICAgIHdpdG5lc3NlczogZHJvU0xBPy53aXRuZXNzZXMsXHJcbiAgICAgICAgICAgICAgICB3aXRuZXNzX3Jld2FyZDogZHJvU0xBPy53aXRuZXNzUmV3YXJkLFxyXG4gICAgICAgICAgICAgICAgY29sbGF0ZXJhbDogZHJvU0xBPy5jb2xsYXRlcmFsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9ICAgXHJcblxyXG4gICAgcHVibGljIHRvUHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5wcmVwYXJlZCAmJiB0aGlzLl90YXJnZXQgJiYgdGhpcy5fcmVxdWVzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyAgICBcclxuICAgICAgICAgICAgICAgIGlucHV0czogdGhpcy5pbnB1dHNcclxuICAgICAgICAgICAgICAgICAgICAubWFwKHV0eG8gPT4geyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IHV0eG8ub3V0cHV0X3BvaW50ZXIuc3BsaXQoJzonKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IHBhcnNlSW50KHV0eG8ub3V0cHV0X3BvaW50ZXIuc3BsaXQoJzonKVsxXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFBvaW50ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkOiB7IFNIQTI1NjogQXJyYXkuZnJvbShmcm9tSGV4U3RyaW5nKHRyYW5zYWN0aW9uSWQpKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihvdXRwdXRJbmRleCA+IDAgPyB7IG91dHB1dEluZGV4IH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzOiB0aGlzLm91dHB1dHMubWFwKHZ0byA9PiAoeyBcclxuICAgICAgICAgICAgICAgICAgICBwa2g6IHsgaGFzaDogQXJyYXkuZnJvbShQdWJsaWNLZXlIYXNoLmZyb21CZWNoMzIodnRvLnBraCkudG9CeXRlczIwKCkpLCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBMb25nLmZyb21WYWx1ZSh2dG8udmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLih2dG8udGltZV9sb2NrID4gMCA/IHsgdGltZUxvY2s6IHZ0by50aW1lX2xvY2sgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgIGRyT3V0cHV0OiB0aGlzLl90b0RyT3V0cHV0UHJvdG9idWYoKSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhdGVUYXJnZXQodGFyZ2V0PzogYW55KTogRGF0YVJlcXVlc3RQYXJhbXMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHRhcmdldCA9IHRoaXMuX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldClcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIE9iamVjdC5rZXlzKHRhcmdldCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoIShcclxuICAgICAgICAgICAgICAgIHRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXRhcmdldD8uZmVlcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZlZXMgaW5zdGFuY2VvZiBDb2lucyAmJiAodGFyZ2V0LmZlZXMgYXMgQ29pbnMpLnBlZHJvcyA+IDAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBPYmplY3QudmFsdWVzKFRyYW5zYWN0aW9uUHJpb3JpdHkpLmluY2x1ZGVzKHRhcmdldC5mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICYmICh0YXJnZXQ/LndpdG5lc3NlcyB8fCB0YXJnZXQ/LndpdG5lc3NlcyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICYmICghdGhpcy50ZW1wbGF0ZSB8fCB0YXJnZXQ/LmFyZ3MpXHJcbiAgICAgICAgICAgICkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW52YWxpZCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KHRhcmdldCl9YClcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQ/LndpdG5lc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogZXhwbGljaXQgd2l0bmVzc2luZyBjb21taXR0ZWVzIG5vdCB5ZXQgc3VwcG9ydGVkOiAke3RhcmdldC53aXRuZXNzZXN9YClcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICB0YXJnZXQud2l0bmVzc2VzID0gcGFyc2VJbnQodGFyZ2V0LndpdG5lc3NlcyBhcyBzdHJpbmcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldCBhcyBEYXRhUmVxdWVzdFBhcmFtc1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jbGVhblRhcmdldEV4dHJhcyh0YXJnZXQ/OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRhcmdldCkuZmlsdGVyKChba2V5LF0pID0+IFtcclxuICAgICAgICAgICAgICAgICAgICAnYXJncycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICdtYXhSZXN1bHRTaXplJyxcclxuICAgICAgICAgICAgICAgICAgICAnd2l0bmVzc2VzJyxcclxuICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoa2V5KSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgX2VzdGltYXRlTmV0d29ya0ZlZXMocHJvdmlkZXI6IElKc29uUnBjUHJvdmlkZXIsIHByaW9yaXR5ID0gVHJhbnNhY3Rpb25Qcmlvcml0eS5NZWRpdW0pOiBQcm9taXNlPGJpZ2ludD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fcHJpb3JpdGllcykge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmlvcml0aWVzID0gYXdhaXQgcHJvdmlkZXIucHJpb3JpdGllcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBCaWdJbnQoTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgdGhpcy5fcHJpb3JpdGllc1tgZHJ0XyR7cHJpb3JpdHl9YF0ucHJpb3JpdHkgKiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdmVyZWQgPyB0aGlzLndlaWdodCA6IChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndlaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzdGltYXRlIHdlaWdodCBvZiBvbmUgc2luZ2xlIG91dHB1dCBpbiBjYXNlIHRoZXJlIHdhcyBjaGFuZ2UgdG8gcGF5IGJhY2tcclxuICAgICAgICAgICAgICAgICAgICArIFRYX1dFSUdIVF9PVVRQVVRfU0laRSBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXM6IGJpZ2ludCwgd2l0bmVzc2VzOiBudW1iZXIpOiBiaWdpbnQge1xyXG4gICAgICAgIHJldHVybiAoZmVlcyAvIEJpZ0ludCh3aXRuZXNzZXMpKSB8fCAxblxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5UmV3YXJkKGZlZXM6IGJpZ2ludCwgX3dpdG5lc3NlczogbnVtYmVyKTogYmlnaW50IHtcclxuICAgICAgICByZXR1cm4gQmlnTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIGZlZXMsXHJcbiAgICAgICAgICAgIEJpZ0ludChNYXRoLmNlaWwoTnVtYmVyKERhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTCAvIENPTExBVEVSQUxfUkFUSU8pKSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZmVlczJWYWx1ZShmZWVzOiBiaWdpbnQsIHdpdG5lc3NlczogbnVtYmVyKTogYmlnaW50IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBCaWdJbnQod2l0bmVzc2VzKSAqIChcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZlZXMyVW5pdGFyeVJld2FyZChmZWVzLCB3aXRuZXNzZXMpXHJcbiAgICAgICAgICAgICAgICArIDJuICogdGhpcy5fZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXMsIHdpdG5lc3NlcylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90b0RyT3V0cHV0UHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5kcm9TTEEsXHJcbiAgICAgICAgICAgICAgICBkYXRhUmVxdWVzdDogdGhpcy5fcmVxdWVzdC50b1Byb3RvYnVmKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuIl19
378
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVJlcXVlc3RQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvRGF0YVJlcXVlc3RQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLE9BQU8sUUFBUSxNQUFNLFlBQVksQ0FBQztBQUVsQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQztBQUNyQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUNuQyxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FDL0MsQ0FBQztBQUVGLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUluRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQ04sS0FBSyxFQUNMLGFBQWEsRUFFYixtQkFBbUIsR0FDbkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFzQjlDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQzlCLG1DQUFtQztBQUVuQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUUvQixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUM3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QyxDQUM1RCxDQUFDO0lBQ0gsQ0FBQztJQUVTLG1CQUFtQjtRQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixPQUFPO2dCQUNOLEdBQUcsSUFBSSxDQUFDLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO2FBQ3ZDLENBQUM7UUFDSCxDQUFDO0lBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcclxuaW1wb3J0IExvbmcgZnJvbSBcImxvbmdcIjtcclxuXHJcbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XHJcblxyXG5pbXBvcnQgcHJvdG9idWYgZnJvbSBcInByb3RvYnVmanNcIjtcclxuXHJcbmNvbnN0IHsgUm9vdDogUHJvdG9Sb290IH0gPSBwcm90b2J1ZjtcclxuY29uc3QgcHJvdG9Sb290ID0gUHJvdG9Sb290LmZyb21KU09OKFxyXG5cdHJlcXVpcmUoXCIuLi8uLi8uLi8uLi93aXRuZXQvd2l0bmV0LnByb3RvLmpzb25cIiksXHJcbik7XHJcblxyXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nLCB0b0hleFN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi9iaW4vaGVscGVycy5qc1wiO1xyXG5cclxuaW1wb3J0IHsgUmFkb25SZXF1ZXN0LCBSYWRvblRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL3JhZG9uL2luZGV4LmpzXCI7XHJcbmltcG9ydCB0eXBlIHsgSGFzaCwgSGV4U3RyaW5nLCBJSnNvblJwY1Byb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XHJcblxyXG5pbXBvcnQgdHlwZSB7IElMZWRnZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy5qc1wiO1xyXG5pbXBvcnQgeyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZyB9IGZyb20gXCIuLi9wYXlsb2Fkcy5qc1wiO1xyXG5pbXBvcnQge1xyXG5cdENvaW5zLFxyXG5cdFB1YmxpY0tleUhhc2gsXHJcblx0dHlwZSBUcmFuc2FjdGlvblBhcmFtcyxcclxuXHRUcmFuc2FjdGlvblByaW9yaXR5LFxyXG59IGZyb20gXCIuLi90eXBlcy5qc1wiO1xyXG5pbXBvcnQgeyBCaWdNYXRoLCBzaGEyNTYgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcclxuXHJcbmV4cG9ydCB0eXBlIERhdGFSZXF1ZXN0VGVtcGxhdGVBcmdzID0gYW55IHwgc3RyaW5nIHwgc3RyaW5nW10gfCBzdHJpbmdbXVtdO1xyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVJlcXVlc3RNYWpvcml0eSA9IFwic2ltcGxlXCIgfCBcInF1YWxpZmllZFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVJlcXVlc3RQYXJhbXMgPSBUcmFuc2FjdGlvblBhcmFtcyAmIHtcclxuXHRhcmdzPzogRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3M7XHJcblx0bWFqb3JpdHlUeXBlPzogRGF0YVJlcXVlc3RNYWpvcml0eTtcclxuXHRtYXhSZXN1bHRTaXplPzogbnVtYmVyO1xyXG5cdHdpdG5lc3Nlcz86IG51bWJlcjtcclxufTtcclxuXHJcbnR5cGUgRGF0YVJlcXVlc3RPdXRwdXRTTEEgPSB7XHJcblx0Y29sbGF0ZXJhbD86IG51bWJlcjtcclxuXHRjb21taXRBbmRSZXZlYWxGZWU/OiBudW1iZXI7XHJcblx0bWluQ29uc2Vuc3VzUGVyY2VudGFnZTogbnVtYmVyO1xyXG5cdHdpdG5lc3NlczogbnVtYmVyO1xyXG5cdHdpdG5lc3NSZXdhcmQ6IG51bWJlcjtcclxuXHRtYXhSZXN1bHRTaXplPzogbnVtYmVyO1xyXG59O1xyXG5cclxuY29uc3QgQ09MTEFURVJBTF9SQVRJTyA9IDEwMG47XHJcbi8vIGNvbnN0IFJBRE9OX0VSUk9SX01BWF9CWVRFUyA9IDk7XHJcblxyXG5jb25zdCBEUl9DT01NSVRfVFhfV0VJR0hUID0gNDAwO1xyXG5jb25zdCBEUl9SRVZFQUxfVFhfV0VJR0hUID0gMjAwO1xyXG5jb25zdCBEUl9UQUxMWV9UWF9XRUlHSFQgPSAxMDA7XHJcblxyXG5jb25zdCBEUl9UWF9XRUlHSFRfQUxQSEEgPSAxO1xyXG5jb25zdCBEUl9UWF9XRUlHSFRfQkVUQSA9IDE7XHJcblxyXG5jb25zdCBUWF9XRUlHSFRfSU5QVVRfU0laRSA9IDEzMztcclxuY29uc3QgVFhfV0VJR0hUX09VVFBVVF9TSVpFID0gMzY7XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0YVJlcXVlc3RQYXlsb2FkIGV4dGVuZHMgVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWc8RGF0YVJlcXVlc3RQYXJhbXM+IHtcclxuXHRwdWJsaWMgc3RhdGljIERFRkFVTFRfTUFYX1JFU1VMVF9TSVpFID0gMjU2O1xyXG5cdHB1YmxpYyBzdGF0aWMgREVGQVVMVF9XSVRORVNTRVMgPSAxMjtcclxuXHRwdWJsaWMgc3RhdGljIE1BWF9XRUlHSFQgPSA4MF8wMDA7XHJcblx0cHVibGljIHN0YXRpYyBNSU5fQ09MTEFURVJBTCA9IDIwXzAwMF8wMDBfMDAwbjtcclxuXHJcblx0cHJvdGVjdGVkIF9yZXF1ZXN0PzogUmFkb25SZXF1ZXN0O1xyXG5cdHB1YmxpYyByZWFkb25seSB0ZW1wbGF0ZT86IFJhZG9uVGVtcGxhdGU7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJvdG9UeXBlTmFtZTogc3RyaW5nLFxyXG5cdFx0cmFkb246IFJhZG9uUmVxdWVzdCB8IFJhZG9uVGVtcGxhdGUsXHJcblx0XHRpbml0aWFsVGFyZ2V0PzogRGF0YVJlcXVlc3RQYXJhbXMsXHJcblx0KSB7XHJcblx0XHRzdXBlcihwcm90b1R5cGVOYW1lLCBpbml0aWFsVGFyZ2V0KTtcclxuXHRcdGlmIChyYWRvbiBpbnN0YW5jZW9mIFJhZG9uUmVxdWVzdCkge1xyXG5cdFx0XHR0aGlzLl9yZXF1ZXN0ID0gcmFkb247XHJcblx0XHR9IGVsc2UgaWYgKHJhZG9uIGluc3RhbmNlb2YgUmFkb25UZW1wbGF0ZSkge1xyXG5cdFx0XHR0aGlzLnRlbXBsYXRlID0gcmFkb247XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxyXG5cdFx0XHRcdGBEYXRhUmVxdWVzdFBheWxvYWQ6IHVuc3VwcG9ydGVkIFJhZG9uIGFzc2V0IHR5cGU6ICR7KHJhZG9uIGFzIGFueSk/LmNvbnN0cnVjdG9yLm5hbWV9YCxcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXQgZHJvSGFzaCgpOiBIYXNoIHwgdW5kZWZpbmVkIHtcclxuXHRcdGNvbnN0IG9iaiA9IHRoaXMuX3RvRHJPdXRwdXRQcm90b2J1ZigpO1xyXG5cdFx0aWYgKG9iaikge1xyXG5cdFx0XHRjb25zdCBEYXRhUmVxdWVzdE91dHB1dCA9IHByb3RvUm9vdC5sb29rdXBUeXBlKFwiRGF0YVJlcXVlc3RPdXRwdXRcIik7XHJcblx0XHRcdGNvbnN0IGVyciA9IERhdGFSZXF1ZXN0T3V0cHV0LnZlcmlmeShvYmopO1xyXG5cdFx0XHRpZiAoZXJyKSB7XHJcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKGVycik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLm9iaiA9PlwiLCBKU09OLnN0cmluZ2lmeShvYmopKVxyXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBEYXRhUmVxdWVzdE91dHB1dC5mcm9tT2JqZWN0KG9iaik7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLm1lc3NhZ2UgPT5cIiwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpXHJcblx0XHRcdFx0Y29uc3QgYnl0ZWNvZGUgPSBEYXRhUmVxdWVzdE91dHB1dC5lbmNvZGUobWVzc2FnZSkuZmluaXNoKCk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLmJ5dGVjb2RlID0+XCIsIGJ5dGVjb2RlKVxyXG5cdFx0XHRcdHJldHVybiB0b0hleFN0cmluZyhzaGEyNTYoYnl0ZWNvZGUpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXQgZHJvU0xBKCk6IERhdGFSZXF1ZXN0T3V0cHV0U0xBIHwgdW5kZWZpbmVkIHtcclxuXHRcdGlmICh0aGlzLl90YXJnZXQgJiYgdGhpcy5fZmVlcykge1xyXG5cdFx0XHRjb25zdCBtaW5Db25zZW5zdXNQZXJjZW50YWdlID1cclxuXHRcdFx0XHR0aGlzLl90YXJnZXQubWFqb3JpdHlUeXBlID09PSBcInF1YWxpZmllZFwiID8gNjYgOiA1MTtcclxuXHRcdFx0Y29uc3Qgd2l0bmVzc2VzID1cclxuXHRcdFx0XHR0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gXCJvYmplY3RcIlxyXG5cdFx0XHRcdFx0PyBPYmplY3Qua2V5cyh0aGlzLl90YXJnZXQud2l0bmVzc2VzKS5sZW5ndGhcclxuXHRcdFx0XHRcdDogdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwO1xyXG5cdFx0XHRjb25zdCB3aXRuZXNzUmV3YXJkID0gdGhpcy5fZmVlczJVbml0YXJ5UmV3YXJkKHRoaXMuX2ZlZXMsIHdpdG5lc3Nlcyk7XHJcblx0XHRcdGNvbnN0IGNvbW1pdEFuZFJldmVhbEZlZSA9IHRoaXMuX2ZlZXMyVW5pdGFyeUNvbW1pdFJldmVhbFJld2FyZChcclxuXHRcdFx0XHR0aGlzLl9mZWVzLFxyXG5cdFx0XHRcdHdpdG5lc3NlcyxcclxuXHRcdFx0KTsgLy9NYXRoLmZsb29yKE51bWJlcih3aXRuZXNzUmV3YXJkIC8gQmlnSW50KHdpdG5lc3NlcykpKSAvLyBUT0RPOiB6ZXJvZnkgaWYgcHJvdG9jb2wgPj0gVjJfMVxyXG5cdFx0XHRjb25zdCBjb2xsYXRlcmFsID0gd2l0bmVzc1Jld2FyZCAqIENPTExBVEVSQUxfUkFUSU87IC8vIFRPRE86IHplcm9meSBpZiBwcm90b2NvbCA+PSBWMl8xXHJcblx0XHRcdGlmIChjb2xsYXRlcmFsID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcclxuXHRcdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSB3aXRuZXNzIGNvbGxhdGVyYWw6ICR7Y29sbGF0ZXJhbC50b1N0cmluZygpfSA+ICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCxcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRlbHNlIGlmICh3aXRuZXNzUmV3YXJkID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcclxuXHRcdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSB3aXRuZXNzIHJld2FyZDogJHt3aXRuZXNzUmV3YXJkLnRvU3RyaW5nKCl9ID4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gLFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGVsc2UgaWYgKGNvbW1pdEFuZFJldmVhbEZlZSA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKVxyXG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXHJcblx0XHRcdFx0XHRgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBleGNlc3NpdmUgY29tbWl0L3JldmVhbCBmZWU6ICR7Y29tbWl0QW5kUmV2ZWFsRmVlLnRvU3RyaW5nKCl9ID4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gLFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdC8vIFRPRE86IG9ubHkgd2hlbiBwcm90b2NvbCA+PSBWMl8xXHJcblx0XHRcdC8vIGxldCBtYXhSZXN1bHRTaXplXHJcblx0XHRcdC8vIGlmICh0aGlzLnJlcXVlc3QpIHtcclxuXHRcdFx0Ly8gICAgIGlmICh0aGlzLnJlcXVlc3Qud2l0bmVzc1JlZHVjZXIub3Bjb2RlID09PSBPcGNvZGVzLkNvbmNhdGVuYXRlQW5kSGFzaCkge1xyXG5cdFx0XHQvLyAgICAgICAgIGlmICh0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgJiYgdGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICE9PSAzNCkge1xyXG5cdFx0XHQvLyAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgbWF4IHJlc3VsdCBzaXplICgke3RoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZX0pIGZvciBhIGNvbmNhdGVuYXRlLWFuZC1oYXNoIG91dHB1dC5gKVxyXG5cdFx0XHQvLyAgICAgICAgIH1cclxuXHRcdFx0Ly8gICAgIH0gZWxzZSB7XHJcblx0XHRcdC8vICAgICAgICAgc3dpdGNoICh0aGlzLnJlcXVlc3QuZGF0YVR5cGUpIHtcclxuXHRcdFx0Ly8gICAgICAgICAgICAgY2FzZSBcIlJhZG9uQm9vbGVhblwiOlxyXG5cdFx0XHQvLyAgICAgICAgICAgICBjYXNlIFwiUmFkb25JbnRlZ2VyXCI6XHJcblx0XHRcdC8vICAgICAgICAgICAgIGNhc2UgXCJSYWRvbkZsb2F0XCI6XHJcblx0XHRcdC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICYmIHRoaXMuX3RhcmdldC5tYXhSZXN1bHRTaXplICE9PSBSQURPTl9FUlJPUl9NQVhfQllURVMpIHtcclxuXHRcdFx0Ly8gICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgbWF4IHJlc3VsdCBzaXplICgke1xyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXQubWF4UmVzdWx0U2l6ZVxyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgICAgICAgICB9IGJ5dGVzKSBmb3IgZXhwZWN0ZWQgcmVzdWx0IHR5cGUgKCR7dGhpcy5yZXF1ZXN0LmRhdGFUeXBlfSlgKVxyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgfVxyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblx0XHRcdC8vICAgICAgICAgICAgIGRlZmF1bHQ6XHJcblx0XHRcdC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICYmIHRoaXMuX3RhcmdldC5tYXhSZXN1bHRTaXplIDwgUkFET05fRVJST1JfTUFYX0JZVEVTKSB7XHJcblx0XHRcdC8vICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG1heCByZXN1bHQgc2l6ZSAoJHtcclxuXHRcdFx0Ly8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0Lm1heFJlc3VsdFNpemVcclxuXHRcdFx0Ly8gICAgICAgICAgICAgICAgICAgICAgICAgfSBieXRlcykgZm9yIHZhcmlhbnQgcmVzdWx0IHR5cGUgKCR7dGhpcy5yZXF1ZXN0LmRhdGFUeXBlfSlgKVxyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgfVxyXG5cdFx0XHQvLyAgICAgICAgICAgICAgICAgbWF4UmVzdWx0U2l6ZSA9IHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSB8fCBEYXRhUmVxdWVzdFBheWxvYWQuREVGQVVMVF9NQVhfUkVTVUxUX1NJWkVcclxuXHRcdFx0Ly8gICAgICAgICB9XHJcblx0XHRcdC8vICAgICB9XHJcblx0XHRcdC8vIH1cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRjb2xsYXRlcmFsOiBOdW1iZXIoY29sbGF0ZXJhbCksXHJcblx0XHRcdFx0Y29tbWl0QW5kUmV2ZWFsRmVlOiBOdW1iZXIoY29tbWl0QW5kUmV2ZWFsRmVlKSxcclxuXHRcdFx0XHQvLyBtYXhSZXN1bHRTaXplLCBUT0RPOiBvbmx5IGlmIHByb3RvY29sID49IFYyXzFcclxuXHRcdFx0XHRtaW5Db25zZW5zdXNQZXJjZW50YWdlLFxyXG5cdFx0XHRcdHdpdG5lc3NlcyxcclxuXHRcdFx0XHR3aXRuZXNzUmV3YXJkOiBOdW1iZXIod2l0bmVzc1Jld2FyZCksXHJcblx0XHRcdH07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGdldCBoYXNoKCk6IEhhc2ggfCB1bmRlZmluZWQge1xyXG5cdFx0Y29uc3QgX2J5dGVjb2RlID0gdGhpcy5ieXRlY29kZTtcclxuXHRcdGlmIChfYnl0ZWNvZGUgJiYgdGhpcy5kcm9IYXNoKSB7XHJcblx0XHRcdHJldHVybiB0b0hleFN0cmluZyhcclxuXHRcdFx0XHRzaGEyNTYoQnVmZmVyLmNvbmNhdChbZnJvbUhleFN0cmluZyh0aGlzLmRyb0hhc2gpLCBzaGEyNTYoX2J5dGVjb2RlKV0pKSxcclxuXHRcdFx0KSBhcyBIYXNoO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXQgbWF4V2VpZ2h0KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gRGF0YVJlcXVlc3RQYXlsb2FkLk1BWF9XRUlHSFQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0IHBhcmFtZXRlcml6ZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gISF0aGlzLnRlbXBsYXRlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldCBwcmVwYXJlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdHRoaXMuY292ZXJlZCAmJlxyXG5cdFx0XHR0aGlzLl9pbnB1dHMubGVuZ3RoID4gMCAmJlxyXG5cdFx0XHQhIXRoaXMuX3JlcXVlc3QgJiZcclxuXHRcdFx0ISF0aGlzLl90YXJnZXRcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0IHJhZEFyZ3MoKTogRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MgfCB1bmRlZmluZWQge1xyXG5cdFx0cmV0dXJuIHRoaXMudGVtcGxhdGUgPyB0aGlzLl90YXJnZXQ/LmFyZ3MgOiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0IHJhZEhhc2goKTogSGV4U3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3Q/LnJhZEhhc2g7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0IHJlcXVlc3QoKTogUmFkb25SZXF1ZXN0IHwgdW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzLl9yZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldCB2YWx1ZSgpOiBDb2lucyB7XHJcblx0XHRpZiAodGhpcy5fdGFyZ2V0ICYmIHRoaXMuX2ZlZXMpIHtcclxuXHRcdFx0cmV0dXJuIENvaW5zLmZyb21QZWRyb3MoXHJcblx0XHRcdFx0dGhpcy5fZmVlczJWYWx1ZSh0aGlzLl9mZWVzLCB0aGlzLl90YXJnZXQud2l0bmVzc2VzIHx8IDApLFxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIENvaW5zLnplcm8oKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXQgd2VpZ2h0KCk6IG51bWJlciB7XHJcblx0XHRpZiAodGhpcy5fcmVxdWVzdCAmJiB0aGlzLl90YXJnZXQpIHtcclxuXHRcdFx0Y29uc3Qgd2l0bmVzc2VzID1cclxuXHRcdFx0XHR0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gXCJvYmplY3RcIlxyXG5cdFx0XHRcdFx0PyBPYmplY3Qua2V5cyh0aGlzLl90YXJnZXQud2l0bmVzc2VzKS5sZW5ndGhcclxuXHRcdFx0XHRcdDogdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwO1xyXG5cdFx0XHRyZXR1cm4gKFxyXG5cdFx0XHRcdERSX1RYX1dFSUdIVF9BTFBIQSAqICh0aGlzLl9yZXF1ZXN0LndlaWdodCgpICsgOCArIDIgKyA4ICsgNCArIDgpLFxyXG5cdFx0XHRcdCt0aGlzLl9pbnB1dHMubGVuZ3RoICogVFhfV0VJR0hUX0lOUFVUX1NJWkUgK1xyXG5cdFx0XHRcdFx0dGhpcy5fb3V0cHV0cy5sZW5ndGggKiBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgK1xyXG5cdFx0XHRcdFx0d2l0bmVzc2VzICpcclxuXHRcdFx0XHRcdFx0KERSX0NPTU1JVF9UWF9XRUlHSFQgK1xyXG5cdFx0XHRcdFx0XHRcdERSX1JFVkVBTF9UWF9XRUlHSFQgKiBEUl9UWF9XRUlHSFRfQkVUQSArXHJcblx0XHRcdFx0XHRcdFx0VFhfV0VJR0hUX09VVFBVVF9TSVpFKSArIC8vIFRPRE8gVjIuMTogdHlwZW9mIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPT09ICdvYmplY3QnID8gVFhfV0VJR0hUX09VVFBVVF9TSVpFIDogMFxyXG5cdFx0XHRcdFx0TWF0aC5tYXgoRFJfVEFMTFlfVFhfV0VJR0hULCB0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgfHwgMCkgKlxyXG5cdFx0XHRcdFx0XHREUl9UWF9XRUlHSFRfQkVUQVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgY29uc3VtZVV0eG9zKFxyXG5cdFx0bGVkZ2VyOiBJTGVkZ2VyLFxyXG5cdFx0cmVsb2FkPzogYm9vbGVhbixcclxuXHQpOiBQcm9taXNlPGJpZ2ludD4ge1xyXG5cdFx0aWYgKCF0aGlzLl90YXJnZXQpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxyXG5cdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludGVybmFsIGVycm9yOiBubyBpbi1mbGlnaHQgcGFyYW1zLmAsXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2UgaWYgKCh0aGlzLl90YXJnZXQgYXMgYW55KT8uZmVlcyBpbnN0YW5jZW9mIENvaW5zKSB7XHJcblx0XHRcdHRoaXMuX2ZlZXMgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSkuZmVlcy5wZWRyb3M7XHJcblx0XHRcdHJldHVybiBzdXBlci5jb25zdW1lVXR4b3MobGVkZ2VyLCByZWxvYWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGhpcy5jb3ZlcmVkKSB7XHJcblx0XHRcdGlmICghdGhpcy5fdGFyZ2V0LndpdG5lc3Nlcykge1xyXG5cdFx0XHRcdHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPSBNYXRoLm1pbihcclxuXHRcdFx0XHRcdERhdGFSZXF1ZXN0UGF5bG9hZC5ERUZBVUxUX1dJVE5FU1NFUyxcclxuXHRcdFx0XHRcdGF3YWl0IGxlZGdlci5wcm92aWRlci53aXRuZXNzZXMoKSxcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmICh0aGlzLl90YXJnZXQud2l0bmVzc2VzIDwgMykge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXM7XHJcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXHJcblx0XHRcdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBlc3RpbWF0ZSB3aXRuZXNzZXM6IG5ldHdvcmsgbm90IHJlYWR5IGZvciB3aXRuZXNzaW5nLmAsXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy53ZWlnaHQgPiBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVCAqIDAuOCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGVsdGEgPSB0aGlzLndlaWdodCAtIERhdGFSZXF1ZXN0UGF5bG9hZC5NQVhfV0VJR0hUICogMC44O1xyXG5cdFx0XHRcdFx0dGhpcy5fdGFyZ2V0LndpdG5lc3NlcyAtPSBNYXRoLmNlaWwoXHJcblx0XHRcdFx0XHRcdGRlbHRhIC9cclxuXHRcdFx0XHRcdFx0XHQoRFJfQ09NTUlUX1RYX1dFSUdIVCArXHJcblx0XHRcdFx0XHRcdFx0XHREUl9SRVZFQUxfVFhfV0VJR0hUICogVFhfV0VJR0hUX09VVFBVVF9TSVpFKSxcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA8IDMpIHtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXM7XHJcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcclxuXHRcdFx0XHRcdFx0XHRgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBjYW5ub3QgZXN0aW1hdGUgd2l0bmVzc2VzOiByYWRvbiByZXF1ZXN0IHRvbyBoZWF2eTogJHt0aGlzLndlaWdodH0gd2VpZ2h0IHVuaXRzYCxcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgcHJpb3JpdHkgPVxyXG5cdFx0XHRcdCgodGhpcy5fdGFyZ2V0IGFzIGFueSk/LmZlZXMgYXMgVHJhbnNhY3Rpb25Qcmlvcml0eSkgfHxcclxuXHRcdFx0XHRUcmFuc2FjdGlvblByaW9yaXR5Lk9wdWxlbnQ7XHJcblx0XHRcdGxldCBlc3RpbWF0ZWRGZWVzID0gYXdhaXQgdGhpcy5fZXN0aW1hdGVOZXR3b3JrRmVlcyhcclxuXHRcdFx0XHRsZWRnZXIucHJvdmlkZXIsXHJcblx0XHRcdFx0cHJpb3JpdHksXHJcblx0XHRcdCk7XHJcblx0XHRcdHdoaWxlICh0aGlzLl9mZWVzIDwgZXN0aW1hdGVkRmVlcyAmJiB0aGlzLl9jaGFuZ2UgPj0gMCkge1xyXG5cdFx0XHRcdHRoaXMuX2ZlZXMgPSBlc3RpbWF0ZWRGZWVzO1xyXG5cdFx0XHRcdHRoaXMuX291dHB1dHMgPSBbXTtcclxuXHRcdFx0XHQvLyBjb25zdW1lIHV0eG9zIGFzIHRvIGNvdmVyIGZvciBlc3RpbWF0ZWQgdmFsdWUgYW5kIGVzdGltYXRlZCBmZWVzXHJcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLl9mZWVzMlZhbHVlKHRoaXMuX2ZlZXMsIHRoaXMuX3RhcmdldC53aXRuZXNzZXMpO1xyXG5cdFx0XHRcdGlmICh0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKSB7XHJcblx0XHRcdFx0XHRjb25zdCB1dHhvcyA9IGF3YWl0IGxlZGdlci5zZWxlY3RVdHhvcyh7XHJcblx0XHRcdFx0XHRcdHZhbHVlOiBDb2lucy5mcm9tUGVkcm9zKHZhbHVlICsgdGhpcy5fZmVlcyAtIHRoaXMuX2NvdmVyZWQpLFxyXG5cdFx0XHRcdFx0XHRyZWxvYWQsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGNvbnN0IGV4dHJhID0gdXR4b3NcclxuXHRcdFx0XHRcdFx0Lm1hcCgodXR4bykgPT4gQmlnSW50KHV0eG8udmFsdWUpKVxyXG5cdFx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMG4pO1xyXG5cdFx0XHRcdFx0dGhpcy5fY292ZXJlZCArPSBleHRyYTtcclxuXHRcdFx0XHRcdHRoaXMuX2lucHV0cy5wdXNoKC4uLnV0eG9zKTtcclxuXHRcdFx0XHRcdGxlZGdlci5jb25zdW1lVXR4b3MoLi4udXR4b3MpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLl9jaGFuZ2UgPSB0aGlzLl9jb3ZlcmVkIC0gKHZhbHVlICsgdGhpcy5fZmVlcyk7XHJcblx0XHRcdFx0aWYgKHRoaXMuX2NoYW5nZSA+PSAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLnByZXBhcmVPdXRwdXRzKHsgdmFsdWU6IHRoaXMuX2NoYW5nZSB9KTtcclxuXHRcdFx0XHRcdGVzdGltYXRlZEZlZXMgPSBhd2FpdCB0aGlzLl9lc3RpbWF0ZU5ldHdvcmtGZWVzKFxyXG5cdFx0XHRcdFx0XHRsZWRnZXIucHJvdmlkZXIsXHJcblx0XHRcdFx0XHRcdHByaW9yaXR5LFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLl9jaGFuZ2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgaW50b1JlY2VpcHQodGFyZ2V0OiBEYXRhUmVxdWVzdFBhcmFtcyk6IGFueSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRkcm9IYXNoOiB0aGlzLmRyb0hhc2gsXHJcblx0XHRcdHJhZEFyZ3M6IHRoaXMucmFkQXJncyxcclxuXHRcdFx0cmFkSGFzaDogdGhpcy5yYWRIYXNoLFxyXG5cdFx0XHR3aXRuZXNzZXM6IHRhcmdldC53aXRuZXNzZXMsXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHVibGljIHByZXBhcmVPdXRwdXRzKGNoYW5nZT86IHsgdmFsdWU6IGJpZ2ludCB9KTogYW55IHtcclxuXHRcdGlmIChjaGFuZ2U/LnZhbHVlKSB7XHJcblx0XHRcdHRoaXMuX291dHB1dHMucHVzaCh7XHJcblx0XHRcdFx0cGtoOiB0aGlzLl9pbnB1dHNbMF0uc2lnbmVyLFxyXG5cdFx0XHRcdHZhbHVlOiBjaGFuZ2UudmFsdWUsXHJcblx0XHRcdFx0dGltZV9sb2NrOiAwLFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyByZXNldFRhcmdldCh0YXJnZXQ6IERhdGFSZXF1ZXN0UGFyYW1zKTogYW55IHtcclxuXHRcdHRoaXMuX2NoYW5nZSA9IDBuO1xyXG5cdFx0dGhpcy5fY292ZXJlZCA9IDBuO1xyXG5cdFx0dGhpcy5fZmVlcyA9IDBuO1xyXG5cdFx0dGhpcy5faW5wdXRzID0gW107XHJcblx0XHR0aGlzLl9vdXRwdXRzID0gW107XHJcblx0XHR0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuZHJvU0xBPy5jb2xsYXRlcmFsICYmXHJcblx0XHRcdHRoaXMuZHJvU0xBLmNvbGxhdGVyYWwgPCBEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUxcclxuXHRcdCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxyXG5cdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHdpdG5lc3NpbmcgY29sbGF0ZXJhbCBiZWxvdyBtaW5pbXVtOiAke1xyXG5cdFx0XHRcdFx0dGhpcy5kcm9TTEEuY29sbGF0ZXJhbFxyXG5cdFx0XHRcdH0gPCAke0RhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTH1gLFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMudGVtcGxhdGUpIHtcclxuXHRcdFx0Y29uc3QgYXJncyA9IHRhcmdldD8uYXJncztcclxuXHRcdFx0aWYgKGFyZ3MgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXHJcblx0XHRcdFx0XHRgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBubyB0ZW1wbGF0ZSBhcmdzIHdlcmUgcGFzc2VkLmAsXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gXCJzdHJpbmdcIikge1xyXG5cdFx0XHRcdHRoaXMuX3JlcXVlc3QgPSB0aGlzLnRlbXBsYXRlLmJ1aWxkUmFkb25SZXF1ZXN0KFthcmdzXSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5fcmVxdWVzdCA9IHRoaXMudGVtcGxhdGUuYnVpbGRSYWRvblJlcXVlc3QoYXJncyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGRlbGV0ZSB0aGlzLl9wcmlvcml0aWVzO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHRvSlNPTihodW1hbml6ZSA9IGZhbHNlKTogYW55IHtcclxuXHRcdGNvbnN0IGRyb1NMQSA9IHRoaXMuZHJvU0xBO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aW5wdXRzOiB0aGlzLmlucHV0cy5tYXAoKHV0eG8pID0+ICh7XHJcblx0XHRcdFx0b3V0cHV0X3BvaW50ZXI6IHV0eG8ub3V0cHV0X3BvaW50ZXIsXHJcblx0XHRcdH0pKSxcclxuXHRcdFx0b3V0cHV0czogdGhpcy5vdXRwdXRzLm1hcCgodnRvKSA9PiAoe1xyXG5cdFx0XHRcdHBraDogdnRvLnBraCxcclxuXHRcdFx0XHR0aW1lX2xvY2s6IHZ0by50aW1lX2xvY2ssXHJcblx0XHRcdFx0dmFsdWU6IHZ0by52YWx1ZS50b1N0cmluZygpLFxyXG5cdFx0XHR9KSksXHJcblx0XHRcdGRyX291dHB1dDoge1xyXG5cdFx0XHRcdC4uLih0aGlzLl9yZXF1ZXN0XHJcblx0XHRcdFx0XHQ/IHsgZGF0YV9yZXF1ZXN0OiB0aGlzLl9yZXF1ZXN0LnRvSlNPTihodW1hbml6ZSkgfVxyXG5cdFx0XHRcdFx0OiB7fSksXHJcblx0XHRcdFx0Y29tbWl0X2FuZF9yZXZlYWxfZmVlOiBkcm9TTEE/LmNvbW1pdEFuZFJldmVhbEZlZSxcclxuXHRcdFx0XHRtaW5fY29uc2Vuc3VzX3BlcmNlbnRhZ2U6IGRyb1NMQT8ubWluQ29uc2Vuc3VzUGVyY2VudGFnZSxcclxuXHRcdFx0XHR3aXRuZXNzZXM6IGRyb1NMQT8ud2l0bmVzc2VzLFxyXG5cdFx0XHRcdHdpdG5lc3NfcmV3YXJkOiBkcm9TTEE/LndpdG5lc3NSZXdhcmQsXHJcblx0XHRcdFx0Y29sbGF0ZXJhbDogZHJvU0xBPy5jb2xsYXRlcmFsLFxyXG5cdFx0XHR9LFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB0b1Byb3RvYnVmKCk6IGFueSB7XHJcblx0XHRpZiAodGhpcy5wcmVwYXJlZCAmJiB0aGlzLl90YXJnZXQgJiYgdGhpcy5fcmVxdWVzdCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdGlucHV0czogdGhpcy5pbnB1dHMubWFwKCh1dHhvKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB0cmFuc2FjdGlvbklkID0gdXR4by5vdXRwdXRfcG9pbnRlci5zcGxpdChcIjpcIilbMF07XHJcblx0XHRcdFx0XHRjb25zdCBvdXRwdXRJbmRleCA9IHBhcnNlSW50KHV0eG8ub3V0cHV0X3BvaW50ZXIuc3BsaXQoXCI6XCIpWzFdLCAxMCk7XHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRvdXRwdXRQb2ludGVyOiB7XHJcblx0XHRcdFx0XHRcdFx0dHJhbnNhY3Rpb25JZDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0U0hBMjU2OiBBcnJheS5mcm9tKGZyb21IZXhTdHJpbmcodHJhbnNhY3Rpb25JZCkpLFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0Li4uKG91dHB1dEluZGV4ID4gMCA/IHsgb3V0cHV0SW5kZXggfSA6IHt9KSxcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fSksXHJcblx0XHRcdFx0b3V0cHV0czogdGhpcy5vdXRwdXRzLm1hcCgodnRvKSA9PiAoe1xyXG5cdFx0XHRcdFx0cGtoOiB7XHJcblx0XHRcdFx0XHRcdGhhc2g6IEFycmF5LmZyb20oUHVibGljS2V5SGFzaC5mcm9tQmVjaDMyKHZ0by5wa2gpLnRvQnl0ZXMyMCgpKSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR2YWx1ZTogTG9uZy5mcm9tVmFsdWUodnRvLnZhbHVlKSxcclxuXHRcdFx0XHRcdC4uLih2dG8udGltZV9sb2NrID4gMCA/IHsgdGltZUxvY2s6IHZ0by50aW1lX2xvY2sgfSA6IHt9KSxcclxuXHRcdFx0XHR9KSksXHJcblx0XHRcdFx0ZHJPdXRwdXQ6IHRoaXMuX3RvRHJPdXRwdXRQcm90b2J1ZigpLFxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlVGFyZ2V0KHRhcmdldD86IGFueSk6IERhdGFSZXF1ZXN0UGFyYW1zIHwgdW5kZWZpbmVkIHtcclxuXHRcdHRhcmdldCA9IHRoaXMuX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldCk7XHJcblx0XHRpZiAodGFyZ2V0ICYmIE9iamVjdC5rZXlzKHRhcmdldCkubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0IShcclxuXHRcdFx0XHRcdHRhcmdldCAmJlxyXG5cdFx0XHRcdFx0KCF0YXJnZXQ/LmZlZXMgfHxcclxuXHRcdFx0XHRcdFx0KHRhcmdldC5mZWVzIGluc3RhbmNlb2YgQ29pbnMgJiZcclxuXHRcdFx0XHRcdFx0XHQodGFyZ2V0LmZlZXMgYXMgQ29pbnMpLnBlZHJvcyA+IDApIHx8XHJcblx0XHRcdFx0XHRcdE9iamVjdC52YWx1ZXMoVHJhbnNhY3Rpb25Qcmlvcml0eSkuaW5jbHVkZXModGFyZ2V0LmZlZXMpKSAmJlxyXG5cdFx0XHRcdFx0KHRhcmdldD8ud2l0bmVzc2VzIHx8IHRhcmdldD8ud2l0bmVzc2VzID09PSB1bmRlZmluZWQpICYmXHJcblx0XHRcdFx0XHQoIXRoaXMudGVtcGxhdGUgfHwgdGFyZ2V0Py5hcmdzKVxyXG5cdFx0XHRcdClcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcclxuXHRcdFx0XHRcdGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXQpfWAsXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXQ/LndpdG5lc3Nlcykge1xyXG5cdFx0XHRcdGlmICh0eXBlb2YgdGFyZ2V0LndpdG5lc3NlcyA9PT0gXCJvYmplY3RcIikge1xyXG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcclxuXHRcdFx0XHRcdFx0YCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogZXhwbGljaXQgd2l0bmVzc2luZyBjb21taXR0ZWVzIG5vdCB5ZXQgc3VwcG9ydGVkOiAke3RhcmdldC53aXRuZXNzZXN9YCxcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRhcmdldC53aXRuZXNzZXMgPSBwYXJzZUludCh0YXJnZXQud2l0bmVzc2VzIGFzIHN0cmluZywgMTApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0YXJnZXQgYXMgRGF0YVJlcXVlc3RQYXJhbXM7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIF9jbGVhblRhcmdldEV4dHJhcyh0YXJnZXQ/OiBhbnkpOiBhbnkge1xyXG5cdFx0aWYgKHRhcmdldCkge1xyXG5cdFx0XHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG5cdFx0XHRcdE9iamVjdC5lbnRyaWVzKHRhcmdldCkuZmlsdGVyKChba2V5XSkgPT5cclxuXHRcdFx0XHRcdFtcImFyZ3NcIiwgXCJmZWVzXCIsIFwibWF4UmVzdWx0U2l6ZVwiLCBcIndpdG5lc3Nlc1wiXS5pbmNsdWRlcyhrZXkpLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgYXN5bmMgX2VzdGltYXRlTmV0d29ya0ZlZXMoXHJcblx0XHRwcm92aWRlcjogSUpzb25ScGNQcm92aWRlcixcclxuXHRcdHByaW9yaXR5ID0gVHJhbnNhY3Rpb25Qcmlvcml0eS5NZWRpdW0sXHJcblx0KTogUHJvbWlzZTxiaWdpbnQ+IHtcclxuXHRcdHRoaXMuX3ByaW9yaXRpZXMgPSBhd2FpdCBwcm92aWRlci5wcmlvcml0aWVzKCk7XHJcblx0XHRyZXR1cm4gQmlnSW50KFxyXG5cdFx0XHRNYXRoLmZsb29yKFxyXG5cdFx0XHRcdHRoaXMuX3ByaW9yaXRpZXNbYGRydF8ke3ByaW9yaXR5fWBdLnByaW9yaXR5ICpcclxuXHRcdFx0XHRcdCh0aGlzLmNvdmVyZWRcclxuXHRcdFx0XHRcdFx0PyB0aGlzLndlaWdodFxyXG5cdFx0XHRcdFx0XHQ6IHRoaXMud2VpZ2h0ICtcclxuXHRcdFx0XHRcdFx0XHQvLyBlc3RpbWF0ZSB3ZWlnaHQgb2Ygb25lIHNpbmdsZSBvdXRwdXQgaW4gY2FzZSB0aGVyZSB3YXMgY2hhbmdlIHRvIHBheSBiYWNrXHJcblx0XHRcdFx0XHRcdFx0VFhfV0VJR0hUX09VVFBVVF9TSVpFKSxcclxuXHRcdFx0KSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgX2ZlZXMyVW5pdGFyeUNvbW1pdFJldmVhbFJld2FyZChcclxuXHRcdGZlZXM6IGJpZ2ludCxcclxuXHRcdHdpdG5lc3NlczogbnVtYmVyLFxyXG5cdCk6IGJpZ2ludCB7XHJcblx0XHRyZXR1cm4gZmVlcyAvIEJpZ0ludCh3aXRuZXNzZXMpIHx8IDFuO1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIF9mZWVzMlVuaXRhcnlSZXdhcmQoZmVlczogYmlnaW50LCBfd2l0bmVzc2VzOiBudW1iZXIpOiBiaWdpbnQge1xyXG5cdFx0cmV0dXJuIEJpZ01hdGgubWF4KFxyXG5cdFx0XHRmZWVzLFxyXG5cdFx0XHRCaWdJbnQoXHJcblx0XHRcdFx0TWF0aC5jZWlsKE51bWJlcihEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUwgLyBDT0xMQVRFUkFMX1JBVElPKSksXHJcblx0XHRcdCksXHJcblx0XHQpO1xyXG5cdH1cclxuXHRwcm90ZWN0ZWQgX2ZlZXMyVmFsdWUoZmVlczogYmlnaW50LCB3aXRuZXNzZXM6IG51bWJlcik6IGJpZ2ludCB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRCaWdJbnQod2l0bmVzc2VzKSAqXHJcblx0XHRcdCh0aGlzLl9mZWVzMlVuaXRhcnlSZXdhcmQoZmVlcywgd2l0bmVzc2VzKSArXHJcblx0XHRcdFx0Mm4gKiB0aGlzLl9mZWVzMlVuaXRhcnlDb21taXRSZXZlYWxSZXdhcmQoZmVlcywgd2l0bmVzc2VzKSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgX3RvRHJPdXRwdXRQcm90b2J1ZigpOiBhbnkge1xyXG5cdFx0aWYgKHRoaXMuX3JlcXVlc3QpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHQuLi50aGlzLmRyb1NMQSxcclxuXHRcdFx0XHRkYXRhUmVxdWVzdDogdGhpcy5fcmVxdWVzdC50b1Byb3RvYnVmKCksXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdfQ==
@@ -1,6 +1,6 @@
1
- import { HexString, IJsonRpcProvider, Network } from "../../types";
2
- import { TransactionPayloadMultiSig } from "../payloads";
3
- import { Coins, PublicKeyHashString, TransactionParams, TransactionPriority } from "../types";
1
+ import type { HexString, IJsonRpcProvider, Network } from "../../types.js";
2
+ import { TransactionPayloadMultiSig } from "../payloads.js";
3
+ import { Coins, type PublicKeyHashString, type TransactionParams, TransactionPriority } from "../types.js";
4
4
  export type StakeDepositParams = TransactionParams & {
5
5
  authorization: HexString;
6
6
  value: Coins;
@@ -9,7 +9,6 @@ export type StakeDepositParams = TransactionParams & {
9
9
  export declare class StakePayload extends TransactionPayloadMultiSig<StakeDepositParams> {
10
10
  static MAX_WEIGHT: number;
11
11
  static MIN_VALUE: number;
12
- constructor(protoTypeName: string, specs?: any);
13
12
  get maxWeight(): number;
14
13
  get prepared(): boolean;
15
14
  get value(): Coins;
@@ -1 +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"}
1
+ {"version":3,"file":"StakePayload.d.ts","sourceRoot":"","sources":["../../../../../src/lib/crypto/payloads/StakePayload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACN,KAAK,EAGL,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EACtB,mBAAmB,EACnB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACpD,aAAa,EAAE,SAAS,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,mBAAmB,CAAC;CAChC,CAAC;AAMF,qBAAa,YAAa,SAAQ,0BAA0B,CAAC,kBAAkB,CAAC;IAC/E,OAAc,UAAU,SAAS;IACjC,OAAc,SAAS,SAAmB;IAE1C,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;;;;;IAUzD,MAAM,CAAC,SAAS,UAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,GAAG;IAkCjD,UAAU,IAAI,GAAG;IAqDjB,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,kBAAkB,GAAG,SAAS;IA8CnE,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG;cAU/B,oBAAoB,CACnC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,sBAA6B,GACnC,OAAO,CAAC,MAAM,CAAC;CAkBlB"}