@keep-network/tbtc-v2 0.1.1-dev.40 → 0.1.1-dev.43

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 (49) hide show
  1. package/artifacts/TBTC.json +3 -3
  2. package/artifacts/TBTCToken.json +3 -3
  3. package/artifacts/VendingMachine.json +10 -10
  4. package/artifacts/solcInputs/{f1a50b67569d88ee54efa3e22c6b484e.json → f2c15d3cf1bd9566483f595c5ed30ccc.json} +25 -25
  5. package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
  6. package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
  7. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
  8. package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.json +2 -2
  9. package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  10. package/build/contracts/bridge/Bridge.sol/Bridge.json +191 -331
  11. package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
  12. package/build/contracts/bridge/BridgeState.sol/BridgeState.json +35 -3
  13. package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
  14. package/build/contracts/bridge/Deposit.sol/Deposit.json +2 -2
  15. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
  16. package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.json +2 -2
  17. package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +4 -0
  18. package/build/contracts/bridge/Fraud.sol/Fraud.json +86 -0
  19. package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
  20. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
  21. package/build/contracts/bridge/MovingFunds.sol/MovingFunds.json +4 -22
  22. package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +4 -0
  23. package/build/contracts/bridge/{Redeem.sol → Redemption.sol}/OutboundTx.json +3 -3
  24. package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +4 -0
  25. package/build/contracts/bridge/Redemption.sol/Redemption.json +92 -0
  26. package/build/contracts/bridge/Sweep.sol/Sweep.dbg.json +1 -1
  27. package/build/contracts/bridge/Sweep.sol/Sweep.json +2 -2
  28. package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
  29. package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
  30. package/build/contracts/bridge/Wallets.sol/Wallets.json +2 -47
  31. package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
  32. package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
  33. package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
  34. package/contracts/bridge/BitcoinTx.sol +19 -26
  35. package/contracts/bridge/Bridge.sol +476 -534
  36. package/contracts/bridge/BridgeState.sol +190 -129
  37. package/contracts/bridge/Deposit.sol +23 -4
  38. package/contracts/bridge/EcdsaLib.sol +15 -0
  39. package/contracts/bridge/{Frauds.sol → Fraud.sol} +75 -146
  40. package/contracts/bridge/MovingFunds.sol +15 -9
  41. package/contracts/bridge/{Redeem.sol → Redemption.sol} +19 -17
  42. package/contracts/bridge/Sweep.sol +16 -9
  43. package/contracts/bridge/Wallets.sol +40 -121
  44. package/package.json +1 -1
  45. package/build/contracts/bridge/Frauds.sol/Frauds.dbg.json +0 -4
  46. package/build/contracts/bridge/Frauds.sol/Frauds.json +0 -138
  47. package/build/contracts/bridge/Redeem.sol/OutboundTx.dbg.json +0 -4
  48. package/build/contracts/bridge/Redeem.sol/Redeem.dbg.json +0 -4
  49. package/build/contracts/bridge/Redeem.sol/Redeem.json +0 -110
@@ -21,6 +21,7 @@ import {EcdsaDkg} from "@keep-network/ecdsa/contracts/libraries/EcdsaDkg.sol";
21
21
 
22
22
  import "./BitcoinTx.sol";
23
23
  import "./EcdsaLib.sol";
24
+ import "./BridgeState.sol";
24
25
 
25
26
  /// @title Wallet library
26
27
  /// @notice Library responsible for handling integration between Bridge
@@ -28,32 +29,6 @@ import "./EcdsaLib.sol";
28
29
  library Wallets {
29
30
  using BTCUtils for bytes;
30
31
 
31
- /// @notice Struct that groups the state managed by the library.
32
- struct Data {
33
- // ECDSA Wallet Registry contract handle.
34
- EcdsaWalletRegistry registry;
35
- // Determines how frequently a new wallet creation can be requested.
36
- // Value in seconds.
37
- uint32 creationPeriod;
38
- // The minimum BTC threshold in satoshi that is used to decide about
39
- // wallet creation or closing.
40
- uint64 minBtcBalance;
41
- // The maximum BTC threshold in satoshi that is used to decide about
42
- // wallet creation.
43
- uint64 maxBtcBalance;
44
- // The maximum age of a wallet in seconds, after which the wallet
45
- // moving funds process can be requested.
46
- uint32 maxAge;
47
- // 20-byte wallet public key hash being reference to the currently
48
- // active wallet. Can be unset to the zero value under certain
49
- // circumstances.
50
- bytes20 activeWalletPubKeyHash;
51
- // Maps the 20-byte wallet public key hash (computed using Bitcoin
52
- // HASH160 over the compressed ECDSA public key) to the basic wallet
53
- // information like state and pending redemptions value.
54
- mapping(bytes20 => Wallet) registeredWallets;
55
- }
56
-
57
32
  /// @notice Represents wallet state:
58
33
  enum WalletState {
59
34
  /// @dev The wallet is unknown to the Bridge.
@@ -101,15 +76,6 @@ library Wallets {
101
76
  bytes32 movingFundsTargetWalletsCommitmentHash;
102
77
  }
103
78
 
104
- event WalletCreationPeriodUpdated(uint32 newCreationPeriod);
105
-
106
- event WalletBtcBalanceRangeUpdated(
107
- uint64 newMinBtcBalance,
108
- uint64 newMaxBtcBalance
109
- );
110
-
111
- event WalletMaxAgeUpdated(uint32 newMaxAge);
112
-
113
79
  event NewWalletRequested();
114
80
 
115
81
  event NewWalletRegistered(
@@ -132,64 +98,6 @@ library Wallets {
132
98
  bytes20 indexed walletPubKeyHash
133
99
  );
134
100
 
135
- /// @notice Initializes state invariants.
136
- /// @param registry ECDSA Wallet Registry reference
137
- /// @dev Requirements:
138
- /// - ECDSA Wallet Registry address must not be initialized
139
- function init(Data storage self, address registry) external {
140
- require(
141
- registry != address(0),
142
- "ECDSA Wallet Registry address cannot be zero"
143
- );
144
- require(
145
- address(self.registry) == address(0),
146
- "ECDSA Wallet Registry address already set"
147
- );
148
-
149
- self.registry = EcdsaWalletRegistry(registry);
150
- }
151
-
152
- /// @notice Sets the wallet creation period.
153
- /// @param creationPeriod New value of the wallet creation period
154
- function setCreationPeriod(Data storage self, uint32 creationPeriod)
155
- external
156
- {
157
- self.creationPeriod = creationPeriod;
158
-
159
- emit WalletCreationPeriodUpdated(creationPeriod);
160
- }
161
-
162
- /// @notice Sets the minimum and maximum BTC balance parameters.
163
- /// @param minBtcBalance New value of the minimum BTC balance
164
- /// @param maxBtcBalance New value of the maximum BTC balance
165
- /// @dev Requirements:
166
- /// - Minimum BTC balance must be greater than zero
167
- /// - Maximum BTC balance must be greater than minimum BTC balance
168
- function setBtcBalanceRange(
169
- Data storage self,
170
- uint64 minBtcBalance,
171
- uint64 maxBtcBalance
172
- ) external {
173
- require(minBtcBalance > 0, "Minimum must be greater than zero");
174
- require(
175
- maxBtcBalance > minBtcBalance,
176
- "Maximum must be greater than the minimum"
177
- );
178
-
179
- self.minBtcBalance = minBtcBalance;
180
- self.maxBtcBalance = maxBtcBalance;
181
-
182
- emit WalletBtcBalanceRangeUpdated(minBtcBalance, maxBtcBalance);
183
- }
184
-
185
- /// @notice Sets the wallet maximum age.
186
- /// @param maxAge New value of the wallet maximum age
187
- function setMaxAge(Data storage self, uint32 maxAge) external {
188
- self.maxAge = maxAge;
189
-
190
- emit WalletMaxAgeUpdated(maxAge);
191
- }
192
-
193
101
  /// @notice Requests creation of a new wallet. This function just
194
102
  /// forms a request and the creation process is performed
195
103
  /// asynchronously. Outcome of that process should be delivered
@@ -210,11 +118,12 @@ library Wallets {
210
118
  /// was elapsed since its creation time
211
119
  /// - The active wallet BTC balance is above the maximum threshold
212
120
  function requestNewWallet(
213
- Data storage self,
121
+ BridgeState.Storage storage self,
214
122
  BitcoinTx.UTXO calldata activeWalletMainUtxo
215
123
  ) external {
216
124
  require(
217
- self.registry.getWalletCreationState() == EcdsaDkg.State.IDLE,
125
+ self.ecdsaWalletRegistry.getWalletCreationState() ==
126
+ EcdsaDkg.State.IDLE,
218
127
  "Wallet creation already in progress"
219
128
  );
220
129
 
@@ -235,19 +144,19 @@ library Wallets {
235
144
  .createdAt;
236
145
  /* solhint-disable-next-line not-rely-on-time */
237
146
  bool activeWalletOldEnough = block.timestamp >=
238
- activeWalletCreatedAt + self.creationPeriod;
147
+ activeWalletCreatedAt + self.walletCreationPeriod;
239
148
 
240
149
  require(
241
150
  (activeWalletOldEnough &&
242
- activeWalletBtcBalance >= self.minBtcBalance) ||
243
- activeWalletBtcBalance >= self.maxBtcBalance,
151
+ activeWalletBtcBalance >= self.walletMinBtcBalance) ||
152
+ activeWalletBtcBalance >= self.walletMaxBtcBalance,
244
153
  "Wallet creation conditions are not met"
245
154
  );
246
155
  }
247
156
 
248
157
  emit NewWalletRequested();
249
158
 
250
- self.registry.requestNewWallet();
159
+ self.ecdsaWalletRegistry.requestNewWallet();
251
160
  }
252
161
 
253
162
  /// @notice Gets BTC balance for given the wallet.
@@ -261,7 +170,7 @@ library Wallets {
261
170
  /// If the wallet has no main UTXO, this parameter can be empty as it
262
171
  /// is ignored.
263
172
  function getWalletBtcBalance(
264
- Data storage self,
173
+ BridgeState.Storage storage self,
265
174
  bytes20 walletPubKeyHash,
266
175
  BitcoinTx.UTXO calldata walletMainUtxo
267
176
  ) internal view returns (uint64 walletBtcBalance) {
@@ -300,13 +209,13 @@ library Wallets {
300
209
  /// - The only caller authorized to call this function is `registry`
301
210
  /// - Given wallet data must not belong to an already registered wallet
302
211
  function registerNewWallet(
303
- Data storage self,
212
+ BridgeState.Storage storage self,
304
213
  bytes32 ecdsaWalletID,
305
214
  bytes32 publicKeyX,
306
215
  bytes32 publicKeyY
307
216
  ) external {
308
217
  require(
309
- msg.sender == address(self.registry),
218
+ msg.sender == address(self.ecdsaWalletRegistry),
310
219
  "Caller is not the ECDSA Wallet Registry"
311
220
  );
312
221
 
@@ -339,12 +248,12 @@ library Wallets {
339
248
  /// - The only caller authorized to call this function is `registry`
340
249
  /// - Wallet must be in Live state
341
250
  function notifyWalletHeartbeatFailed(
342
- Data storage self,
251
+ BridgeState.Storage storage self,
343
252
  bytes32 publicKeyX,
344
253
  bytes32 publicKeyY
345
254
  ) external {
346
255
  require(
347
- msg.sender == address(self.registry),
256
+ msg.sender == address(self.ecdsaWalletRegistry),
348
257
  "Caller is not the ECDSA Wallet Registry"
349
258
  );
350
259
 
@@ -370,10 +279,10 @@ library Wallets {
370
279
  /// @param walletPubKeyHash 20-byte public key hash of the wallet
371
280
  /// @dev Requirements:
372
281
  /// - The wallet must be in the `Live` or `MovingFunds` state
373
- function notifyRedemptionTimedOut(
374
- Data storage self,
282
+ function notifyWalletTimedOutRedemption(
283
+ BridgeState.Storage storage self,
375
284
  bytes20 walletPubKeyHash
376
- ) external {
285
+ ) internal {
377
286
  WalletState walletState = self
378
287
  .registeredWallets[walletPubKeyHash]
379
288
  .state;
@@ -408,7 +317,7 @@ library Wallets {
408
317
  /// assumed to be zero.
409
318
  /// - Wallet must be in Live state
410
319
  function notifyCloseableWallet(
411
- Data storage self,
320
+ BridgeState.Storage storage self,
412
321
  bytes20 walletPubKeyHash,
413
322
  BitcoinTx.UTXO calldata walletMainUtxo
414
323
  ) external {
@@ -425,12 +334,12 @@ library Wallets {
425
334
 
426
335
  /* solhint-disable-next-line not-rely-on-time */
427
336
  bool walletOldEnough = block.timestamp >=
428
- wallet.createdAt + self.maxAge;
337
+ wallet.createdAt + self.walletMaxAge;
429
338
 
430
339
  require(
431
340
  walletOldEnough ||
432
341
  getWalletBtcBalance(self, walletPubKeyHash, walletMainUtxo) <
433
- self.minBtcBalance,
342
+ self.walletMinBtcBalance,
434
343
  "Wallet needs to be old enough or have too few satoshis"
435
344
  );
436
345
 
@@ -446,7 +355,10 @@ library Wallets {
446
355
  /// @param walletPubKeyHash 20-byte public key hash of the wallet
447
356
  /// @dev Requirements:
448
357
  /// - The caller must make sure that the wallet is in the Live state
449
- function moveFunds(Data storage self, bytes20 walletPubKeyHash) internal {
358
+ function moveFunds(
359
+ BridgeState.Storage storage self,
360
+ bytes20 walletPubKeyHash
361
+ ) internal {
450
362
  Wallet storage wallet = self.registeredWallets[walletPubKeyHash];
451
363
 
452
364
  if (wallet.mainUtxoHash == bytes32(0)) {
@@ -476,14 +388,17 @@ library Wallets {
476
388
  /// @dev Requirements:
477
389
  /// - The caller must make sure that the wallet is in the
478
390
  /// Live or MovingFunds state.
479
- function closeWallet(Data storage self, bytes20 walletPubKeyHash) internal {
391
+ function closeWallet(
392
+ BridgeState.Storage storage self,
393
+ bytes20 walletPubKeyHash
394
+ ) internal {
480
395
  Wallet storage wallet = self.registeredWallets[walletPubKeyHash];
481
396
 
482
397
  wallet.state = WalletState.Closed;
483
398
 
484
399
  emit WalletClosed(wallet.ecdsaWalletID, walletPubKeyHash);
485
400
 
486
- self.registry.closeWallet(wallet.ecdsaWalletID);
401
+ self.ecdsaWalletRegistry.closeWallet(wallet.ecdsaWalletID);
487
402
  }
488
403
 
489
404
  /// @notice Reports about a fraud committed by the given wallet. This
@@ -493,7 +408,10 @@ library Wallets {
493
408
  /// @param walletPubKeyHash 20-byte public key hash of the wallet
494
409
  /// @dev Requirements:
495
410
  /// - Wallet must be in Live or MovingFunds state
496
- function notifyFraud(Data storage self, bytes20 walletPubKeyHash) external {
411
+ function notifyWalletFraud(
412
+ BridgeState.Storage storage self,
413
+ bytes20 walletPubKeyHash
414
+ ) internal {
497
415
  WalletState walletState = self
498
416
  .registeredWallets[walletPubKeyHash]
499
417
  .state;
@@ -518,9 +436,10 @@ library Wallets {
518
436
  /// @dev Requirements:
519
437
  /// - The caller must make sure that the wallet is in the
520
438
  /// Live or MovingFunds state.
521
- function terminateWallet(Data storage self, bytes20 walletPubKeyHash)
522
- internal
523
- {
439
+ function terminateWallet(
440
+ BridgeState.Storage storage self,
441
+ bytes20 walletPubKeyHash
442
+ ) internal {
524
443
  Wallet storage wallet = self.registeredWallets[walletPubKeyHash];
525
444
 
526
445
  wallet.state = WalletState.Terminated;
@@ -534,7 +453,7 @@ library Wallets {
534
453
  delete self.activeWalletPubKeyHash;
535
454
  }
536
455
 
537
- self.registry.closeWallet(wallet.ecdsaWalletID);
456
+ self.ecdsaWalletRegistry.closeWallet(wallet.ecdsaWalletID);
538
457
  }
539
458
 
540
459
  /// @notice Notifies that the wallet completed the moving funds process
@@ -553,11 +472,11 @@ library Wallets {
553
472
  /// wallet.
554
473
  /// - The actual target wallets used in the moving funds transaction
555
474
  /// must be exactly the same as the target wallets commitment.
556
- function notifyFundsMoved(
557
- Data storage self,
475
+ function notifyWalletFundsMoved(
476
+ BridgeState.Storage storage self,
558
477
  bytes20 walletPubKeyHash,
559
478
  bytes32 targetWalletsHash
560
- ) external {
479
+ ) internal {
561
480
  Wallet storage wallet = self.registeredWallets[walletPubKeyHash];
562
481
  // Check that the wallet is in the MovingFunds state but don't check
563
482
  // if the moving funds timeout is exceeded. That should give a
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keep-network/tbtc-v2",
3
- "version": "0.1.1-dev.40+main.9a5b599fb35eae76fbce4bc68292febc3c8fcb2f",
3
+ "version": "0.1.1-dev.43+main.5c95ed5c36e440c9aca25ec4f2694f9d8966f84f",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "artifacts/",
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2fd33b4cd2b603ef68afefbc37f08651.json"
4
- }
@@ -1,138 +0,0 @@
1
- {
2
- "_format": "hh-sol-artifact-1",
3
- "contractName": "Frauds",
4
- "sourceName": "contracts/bridge/Frauds.sol",
5
- "abi": [
6
- {
7
- "anonymous": false,
8
- "inputs": [
9
- {
10
- "indexed": false,
11
- "internalType": "bytes20",
12
- "name": "walletPublicKeyHash",
13
- "type": "bytes20"
14
- },
15
- {
16
- "indexed": false,
17
- "internalType": "bytes32",
18
- "name": "sighash",
19
- "type": "bytes32"
20
- }
21
- ],
22
- "name": "FraudChallengeDefeatTimedOut",
23
- "type": "event"
24
- },
25
- {
26
- "anonymous": false,
27
- "inputs": [
28
- {
29
- "indexed": false,
30
- "internalType": "uint256",
31
- "name": "newFraudChallengeDefeatTimeout",
32
- "type": "uint256"
33
- }
34
- ],
35
- "name": "FraudChallengeDefeatTimeoutUpdated",
36
- "type": "event"
37
- },
38
- {
39
- "anonymous": false,
40
- "inputs": [
41
- {
42
- "indexed": false,
43
- "internalType": "bytes20",
44
- "name": "walletPublicKeyHash",
45
- "type": "bytes20"
46
- },
47
- {
48
- "indexed": false,
49
- "internalType": "bytes32",
50
- "name": "sighash",
51
- "type": "bytes32"
52
- }
53
- ],
54
- "name": "FraudChallengeDefeated",
55
- "type": "event"
56
- },
57
- {
58
- "anonymous": false,
59
- "inputs": [
60
- {
61
- "indexed": false,
62
- "internalType": "uint256",
63
- "name": "newFraudChallengeDepositAmount",
64
- "type": "uint256"
65
- }
66
- ],
67
- "name": "FraudChallengeDepositAmountUpdated",
68
- "type": "event"
69
- },
70
- {
71
- "anonymous": false,
72
- "inputs": [
73
- {
74
- "indexed": false,
75
- "internalType": "bytes20",
76
- "name": "walletPublicKeyHash",
77
- "type": "bytes20"
78
- },
79
- {
80
- "indexed": false,
81
- "internalType": "bytes32",
82
- "name": "sighash",
83
- "type": "bytes32"
84
- },
85
- {
86
- "indexed": false,
87
- "internalType": "uint8",
88
- "name": "v",
89
- "type": "uint8"
90
- },
91
- {
92
- "indexed": false,
93
- "internalType": "bytes32",
94
- "name": "r",
95
- "type": "bytes32"
96
- },
97
- {
98
- "indexed": false,
99
- "internalType": "bytes32",
100
- "name": "s",
101
- "type": "bytes32"
102
- }
103
- ],
104
- "name": "FraudChallengeSubmitted",
105
- "type": "event"
106
- },
107
- {
108
- "anonymous": false,
109
- "inputs": [
110
- {
111
- "indexed": false,
112
- "internalType": "uint256",
113
- "name": "newFraudNotifierRewardMultiplier",
114
- "type": "uint256"
115
- }
116
- ],
117
- "name": "FraudNotifierRewardMultiplierUpdated",
118
- "type": "event"
119
- },
120
- {
121
- "anonymous": false,
122
- "inputs": [
123
- {
124
- "indexed": false,
125
- "internalType": "uint256",
126
- "name": "newFraudSlashingAmount",
127
- "type": "uint256"
128
- }
129
- ],
130
- "name": "FraudSlashingAmountUpdated",
131
- "type": "event"
132
- }
133
- ],
134
- "bytecode": "0x611aad61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c8063545227871161006557806354522787146101195780639a08b74014610139578063c945968614610159578063e6d20d451461018b57600080fd5b80632123f1c41461009757806321e76ee8146100b95780633f31f49f146100d957806340399403146100f9575b600080fd5b8180156100a357600080fd5b506100b76100b23660046116bd565b6101ab565b005b8180156100c557600080fd5b506100b76100d4366004611721565b6101e6565b8180156100e557600080fd5b506100b76100f4366004611774565b6104f3565b81801561010557600080fd5b506100b76101143660046116bd565b6106e4565b81801561012557600080fd5b506100b76101343660046116bd565b61077e565b81801561014557600080fd5b506100b7610154366004611819565b61082c565b81801561016557600080fd5b506101796101743660046118ae565b610a9c565b60405190815260200160405180910390f35b81801561019757600080fd5b506100b76101a63660046116bd565b610c72565b8082556040518181527fdf25ccd778c4ac0298894525a8bd99ba018936d0c6ea0b6fc212507531c0adb7906020015b60405180910390a15050565b60008383836040516020016101fd93929190611931565b60408051601f198184030181529181528151602092830120600081815260048901909352912060028101549192509063ffffffff166102835760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f74206578697374000060448201526064015b60405180910390fd5b6002810154640100000000900460ff16156102f25760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b6002808701549082015461030c919063ffffffff16611959565b4210156103815760405162461bcd60e51b815260206004820152603260248201527f4672617564206368616c6c656e67652064656665617420706572696f6420646960448201527f64206e6f742074696d65206f7574207965740000000000000000000000000000606482015260840161027a565b60028101805464ff0000000019166401000000001790558054600182015460405173ffffffffffffffffffffffffffffffffffffffff90921691620186a091906000818181858888f193505050503d80600081146103fb576040519150601f19603f3d011682016040523d82523d6000602084013e610400565b606091505b505050600061049061044c600088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8a0181900481028201810190925288815261048b91908a8a808385018382808284376000920191909152509293925050610d0c9050565b610d14565b9050600061049d82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f635230b60143449f10a365568e2bd95e3e8aaed03855631722941c2bad634b7791015b60405180910390a15050505050505050565b600061053484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b9050600086868360405160200161054d93929190611931565b60408051601f198184030181528282528051602091820120600081815260048d0190925291902060028101805464ff00000000191664010000000017905560018101549193509173ffffffffffffffffffffffffffffffffffffffff861691620186a091600060405180830381858888f193505050503d80600081146105ef576040519150601f19603f3d011682016040523d82523d6000602084013e6105f4565b606091505b505050600061067f61064060008b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8d018190048102820181019092528b815261048b91908d8d808385018382808284376000920191909152509293925050610d0c9050565b9050600061068c82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f6ff720470ffad78f316655e2c7fc77a76763c13de0e19ee52149916ba7e44d3b910160405180910390a15050505050505050505050565b600081116107475760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d6044820152690757374206265203e20360b41b606482015260840161027a565b600282018190556040518181527f1e833ee8be2754de7dae1749a8438b691fda5b0695db2b2b8311b23270406d5a906020016101da565b60648111156107f55760405162461bcd60e51b815260206004820152602f60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d757374206265203c3d203130300000000000000000000000000000000000606482015260840161027a565b600182018190556040518181527feddb2abfc2e3aa166fbafa0dbaa077f0ec7663ddc8a535253bb35ed4ab70c877906020016101da565b85600301543410156108a65760405162461bcd60e51b815260206004820152602660248201527f54686520616d6f756e74206f6620455448206465706f7369746564206973207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161027a565b6108fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506108f29150506060850160408601611971565b84356020860135610ea5565b61094a5760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520766572696669636174696f6e206661696c7572650000604482015260640161027a565b600085858460405160200161096193929190611931565b60408051601f198184030181529181528151602092830120600081815260048b01909352912060028101549192509063ffffffff16156109e35760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520616c7265616479206578697374730000604482015260640161027a565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317815534600182015560028101805464ffffffffff191663ffffffff42161790557ff4aa58d09ba5de017eac597806dfcfc2cad287816cb1eb7729a032c82680c94d8585610a5c6060870160408801611971565b604080516bffffffffffffffffffffffff19909416845260208085019390935260ff9091169083015285356060830152850135608082015260a0016104e1565b600080610ade85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b90506000878783604051602001610af793929190611931565b60408051601f198184030181529181528151602092830120600081815260048d01909352912060028101549192509063ffffffff16610b785760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f742065786973740000604482015260640161027a565b6002810154640100000000900460ff1615610be75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b610bf18787610fb5565b63ffffffff16600114610c465760405162461bcd60e51b815260206004820152601260248201527f57726f6e67207369676861736820747970650000000000000000000000000000604482015260640161027a565b84610c5a57610c558787611035565b610c64565b610c648787611279565b9a9950505050505050505050565b60008111610cd55760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465706f73697420616d6f756e74206d6044820152690757374206265203e20360b41b606482015260840161027a565b600382018190556040518181527fac6cc6a5e862456c7f1a3827f078d9a355cb82eef2353c4167e872673b48570c906020016101da565b016020015190565b60606000610d23600284611994565b610d4e57507f0200000000000000000000000000000000000000000000000000000000000000610d71565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff0000000000000000000000000000000000000000000000000000000000000082166020820152602181018590526041016040516020818303038152906040529150505b92915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b600060028083604051610df991906119b6565b602060405180830381855afa158015610e16573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e3991906119f1565b604051602001610e4b91815260200190565b60408051601f1981840301815290829052610e65916119b6565b602060405180830381855afa158015610e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610db991906119f1565b60008551604014610f1e5760405162461bcd60e51b815260206004820152602760248201527f526571756972657320756e636f6d7072657373656420756e707265666978656460448201527f207075626b657900000000000000000000000000000000000000000000000000606482015260840161027a565b6000610f298761136f565b604080516000808252602082018084528a905260ff89169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610f81573d6000803e3d6000fd5b5050604051601f19015173ffffffffffffffffffffffffffffffffffffffff90811693169290921498975050505050505050565b600080611005610fc6600485611a0a565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060e081901c60d882901c63ff00ff001662ff00ff60e884901c1617601081811b91901c175b95945050505050565b600080600061107e600486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061140a9050565b90925090506000611090836005611959565b905060005b8281101561126f5760006110e28389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115889050565b90506000611129848a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115d39050565b915050801561124e576000611177858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060006111e76111c1878d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9050818160405160200161122a92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c98505050505061126f565b6112588285611959565b93505050808061126790611a21565b915050611095565b5050505092915050565b6000806112c0604485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b9050600061130b6111c1604487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b9050818160405160200161134e92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60408051601f19818403018152919052805160209091012095945050505050565b600081516040146113e85760405162461bcd60e51b815260206004820152602d60248201527f5075626b6579206d7573742062652036342d62797465207261772c20756e636f60448201527f6d70726573736564206b65792e00000000000000000000000000000000000000606482015260840161027a565b50805160209091012090565b60006114038383016020015190565b9392505050565b60008060006114198585611631565b905060ff811661144b57600085858151811061143757611437611a3c565b016020015190935060f81c91506115819050565b83611457826001611a52565b60ff166114649190611959565b8551101561147b5760001960009250925050611581565b60008160ff16600214156114c0576114b56114a161149a876001611959565b88906113f4565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611577565b8160ff16600414156114ea576114dd6111c161149a876001611959565b63ffffffff169050611577565b8160ff16600814156115775761156a61150761149a876001611959565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080600061159785856115d3565b90925090506000198214156115b25760001992505050610db9565b806115be836025611959565b6115c89190611959565b61102c906004611959565b6000806115e1836025611959565b845110156115f6575060001990506000611581565b60008061160d86611608876024611959565b61140a565b9097909650945050505050565b600061140361162a836020611959565b84906113f4565b600082828151811061164557611645611a3c565b60209101015160f81c60ff141561165e57506008610db9565b82828151811061167057611670611a3c565b60209101015160f81c60fe141561168957506004610db9565b82828151811061169b5761169b611a3c565b60209101015160f81c60fd14156116b457506002610db9565b50600092915050565b600080604083850312156116d057600080fd5b50508035926020909101359150565b60008083601f8401126116f157600080fd5b50813567ffffffffffffffff81111561170957600080fd5b60208301915083602082850101111561158157600080fd5b6000806000806060858703121561173757600080fd5b84359350602085013567ffffffffffffffff81111561175557600080fd5b611761878288016116df565b9598909750949560400135949350505050565b6000806000806000806080878903121561178d57600080fd5b86359550602087013567ffffffffffffffff808211156117ac57600080fd5b6117b88a838b016116df565b909750955060408901359150808211156117d157600080fd5b506117de89828a016116df565b909450925050606087013573ffffffffffffffffffffffffffffffffffffffff8116811461180b57600080fd5b809150509295509295509295565b60008060008060008086880360e081121561183357600080fd5b87359650602088013567ffffffffffffffff81111561185157600080fd5b61185d8a828b016116df565b90975095505060408801356bffffffffffffffffffffffff198116811461188357600080fd5b93506060888101359350607f198201121561189d57600080fd5b506080870190509295509295509295565b600080600080600080608087890312156118c757600080fd5b86359550602087013567ffffffffffffffff808211156118e657600080fd5b6118f28a838b016116df565b9097509550604089013591508082111561190b57600080fd5b5061191889828a016116df565b9094509250506060870135801515811461180b57600080fd5b82848237909101908152602001919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561196c5761196c611943565b500190565b60006020828403121561198357600080fd5b813560ff8116811461140357600080fd5b6000826119b157634e487b7160e01b600052601260045260246000fd5b500690565b6000825160005b818110156119d757602081860181015185830152016119bd565b818111156119e6576000828501525b509190910192915050565b600060208284031215611a0357600080fd5b5051919050565b600082821015611a1c57611a1c611943565b500390565b6000600019821415611a3557611a35611943565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115611a6f57611a6f611943565b01939250505056fea2646970667358221220a7852305a50b8d90eec1ab9ee1801ea51a07a1ee5abc1ae4beb865d85e9cf0fa64736f6c63430008090033",
135
- "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100925760003560e01c8063545227871161006557806354522787146101195780639a08b74014610139578063c945968614610159578063e6d20d451461018b57600080fd5b80632123f1c41461009757806321e76ee8146100b95780633f31f49f146100d957806340399403146100f9575b600080fd5b8180156100a357600080fd5b506100b76100b23660046116bd565b6101ab565b005b8180156100c557600080fd5b506100b76100d4366004611721565b6101e6565b8180156100e557600080fd5b506100b76100f4366004611774565b6104f3565b81801561010557600080fd5b506100b76101143660046116bd565b6106e4565b81801561012557600080fd5b506100b76101343660046116bd565b61077e565b81801561014557600080fd5b506100b7610154366004611819565b61082c565b81801561016557600080fd5b506101796101743660046118ae565b610a9c565b60405190815260200160405180910390f35b81801561019757600080fd5b506100b76101a63660046116bd565b610c72565b8082556040518181527fdf25ccd778c4ac0298894525a8bd99ba018936d0c6ea0b6fc212507531c0adb7906020015b60405180910390a15050565b60008383836040516020016101fd93929190611931565b60408051601f198184030181529181528151602092830120600081815260048901909352912060028101549192509063ffffffff166102835760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f74206578697374000060448201526064015b60405180910390fd5b6002810154640100000000900460ff16156102f25760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b6002808701549082015461030c919063ffffffff16611959565b4210156103815760405162461bcd60e51b815260206004820152603260248201527f4672617564206368616c6c656e67652064656665617420706572696f6420646960448201527f64206e6f742074696d65206f7574207965740000000000000000000000000000606482015260840161027a565b60028101805464ff0000000019166401000000001790558054600182015460405173ffffffffffffffffffffffffffffffffffffffff90921691620186a091906000818181858888f193505050503d80600081146103fb576040519150601f19603f3d011682016040523d82523d6000602084013e610400565b606091505b505050600061049061044c600088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8a0181900481028201810190925288815261048b91908a8a808385018382808284376000920191909152509293925050610d0c9050565b610d14565b9050600061049d82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f635230b60143449f10a365568e2bd95e3e8aaed03855631722941c2bad634b7791015b60405180910390a15050505050505050565b600061053484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b9050600086868360405160200161054d93929190611931565b60408051601f198184030181528282528051602091820120600081815260048d0190925291902060028101805464ff00000000191664010000000017905560018101549193509173ffffffffffffffffffffffffffffffffffffffff861691620186a091600060405180830381858888f193505050503d80600081146105ef576040519150601f19603f3d011682016040523d82523d6000602084013e6105f4565b606091505b505050600061067f61064060008b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050610d0c9050565b604080516020601f8d018190048102820181019092528b815261048b91908d8d808385018382808284376000920191909152509293925050610d0c9050565b9050600061068c82610dbf565b604080516bffffffffffffffffffffffff1983168152602081018890529192507f6ff720470ffad78f316655e2c7fc77a76763c13de0e19ee52149916ba7e44d3b910160405180910390a15050505050505050505050565b600081116107475760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d6044820152690757374206265203e20360b41b606482015260840161027a565b600282018190556040518181527f1e833ee8be2754de7dae1749a8438b691fda5b0695db2b2b8311b23270406d5a906020016101da565b60648111156107f55760405162461bcd60e51b815260206004820152602f60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d757374206265203c3d203130300000000000000000000000000000000000606482015260840161027a565b600182018190556040518181527feddb2abfc2e3aa166fbafa0dbaa077f0ec7663ddc8a535253bb35ed4ab70c877906020016101da565b85600301543410156108a65760405162461bcd60e51b815260206004820152602660248201527f54686520616d6f756e74206f6620455448206465706f7369746564206973207460448201527f6f6f206c6f770000000000000000000000000000000000000000000000000000606482015260840161027a565b6108fe85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506108f29150506060850160408601611971565b84356020860135610ea5565b61094a5760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520766572696669636174696f6e206661696c7572650000604482015260640161027a565b600085858460405160200161096193929190611931565b60408051601f198184030181529181528151602092830120600081815260048b01909352912060028101549192509063ffffffff16156109e35760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520616c7265616479206578697374730000604482015260640161027a565b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317815534600182015560028101805464ffffffffff191663ffffffff42161790557ff4aa58d09ba5de017eac597806dfcfc2cad287816cb1eb7729a032c82680c94d8585610a5c6060870160408801611971565b604080516bffffffffffffffffffffffff19909416845260208085019390935260ff9091169083015285356060830152850135608082015260a0016104e1565b600080610ade85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610de692505050565b90506000878783604051602001610af793929190611931565b60408051601f198184030181529181528151602092830120600081815260048d01909352912060028101549192509063ffffffff16610b785760405162461bcd60e51b815260206004820152601e60248201527f4672617564206368616c6c656e676520646f6573206e6f742065786973740000604482015260640161027a565b6002810154640100000000900460ff1615610be75760405162461bcd60e51b815260206004820152602960248201527f4672617564206368616c6c656e67652068617320616c7265616479206265656e604482015268081c995cdbdb1d995960ba1b606482015260840161027a565b610bf18787610fb5565b63ffffffff16600114610c465760405162461bcd60e51b815260206004820152601260248201527f57726f6e67207369676861736820747970650000000000000000000000000000604482015260640161027a565b84610c5a57610c558787611035565b610c64565b610c648787611279565b9a9950505050505050505050565b60008111610cd55760405162461bcd60e51b815260206004820152602a60248201527f4672617564206368616c6c656e6765206465706f73697420616d6f756e74206d6044820152690757374206265203e20360b41b606482015260840161027a565b600382018190556040518181527fac6cc6a5e862456c7f1a3827f078d9a355cb82eef2353c4167e872673b48570c906020016101da565b016020015190565b60606000610d23600284611994565b610d4e57507f0200000000000000000000000000000000000000000000000000000000000000610d71565b507f03000000000000000000000000000000000000000000000000000000000000005b6040517fff0000000000000000000000000000000000000000000000000000000000000082166020820152602181018590526041016040516020818303038152906040529150505b92915050565b60006020600083516020850160025afa50602060006020600060035afa5050600c51919050565b600060028083604051610df991906119b6565b602060405180830381855afa158015610e16573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e3991906119f1565b604051602001610e4b91815260200190565b60408051601f1981840301815290829052610e65916119b6565b602060405180830381855afa158015610e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610db991906119f1565b60008551604014610f1e5760405162461bcd60e51b815260206004820152602760248201527f526571756972657320756e636f6d7072657373656420756e707265666978656460448201527f207075626b657900000000000000000000000000000000000000000000000000606482015260840161027a565b6000610f298761136f565b604080516000808252602082018084528a905260ff89169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610f81573d6000803e3d6000fd5b5050604051601f19015173ffffffffffffffffffffffffffffffffffffffff90811693169290921498975050505050505050565b600080611005610fc6600485611a0a565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060e081901c60d882901c63ff00ff001662ff00ff60e884901c1617601081811b91901c175b95945050505050565b600080600061107e600486868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061140a9050565b90925090506000611090836005611959565b905060005b8281101561126f5760006110e28389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115889050565b90506000611129848a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506115d39050565b915050801561124e576000611177858b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b905060006111e76111c1878d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b9050818160405160200161122a92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c98505050505061126f565b6112588285611959565b93505050808061126790611a21565b915050611095565b5050505092915050565b6000806112c0604485858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506113f49050565b9050600061130b6111c1604487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061161a9050565b9050818160405160200161134e92919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b60408051601f19818403018152919052805160209091012095945050505050565b600081516040146113e85760405162461bcd60e51b815260206004820152602d60248201527f5075626b6579206d7573742062652036342d62797465207261772c20756e636f60448201527f6d70726573736564206b65792e00000000000000000000000000000000000000606482015260840161027a565b50805160209091012090565b60006114038383016020015190565b9392505050565b60008060006114198585611631565b905060ff811661144b57600085858151811061143757611437611a3c565b016020015190935060f81c91506115819050565b83611457826001611a52565b60ff166114649190611959565b8551101561147b5760001960009250925050611581565b60008160ff16600214156114c0576114b56114a161149a876001611959565b88906113f4565b62ffff0060e882901c1660f89190911c1790565b61ffff169050611577565b8160ff16600414156114ea576114dd6111c161149a876001611959565b63ffffffff169050611577565b8160ff16600814156115775761156a61150761149a876001611959565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080600061159785856115d3565b90925090506000198214156115b25760001992505050610db9565b806115be836025611959565b6115c89190611959565b61102c906004611959565b6000806115e1836025611959565b845110156115f6575060001990506000611581565b60008061160d86611608876024611959565b61140a565b9097909650945050505050565b600061140361162a836020611959565b84906113f4565b600082828151811061164557611645611a3c565b60209101015160f81c60ff141561165e57506008610db9565b82828151811061167057611670611a3c565b60209101015160f81c60fe141561168957506004610db9565b82828151811061169b5761169b611a3c565b60209101015160f81c60fd14156116b457506002610db9565b50600092915050565b600080604083850312156116d057600080fd5b50508035926020909101359150565b60008083601f8401126116f157600080fd5b50813567ffffffffffffffff81111561170957600080fd5b60208301915083602082850101111561158157600080fd5b6000806000806060858703121561173757600080fd5b84359350602085013567ffffffffffffffff81111561175557600080fd5b611761878288016116df565b9598909750949560400135949350505050565b6000806000806000806080878903121561178d57600080fd5b86359550602087013567ffffffffffffffff808211156117ac57600080fd5b6117b88a838b016116df565b909750955060408901359150808211156117d157600080fd5b506117de89828a016116df565b909450925050606087013573ffffffffffffffffffffffffffffffffffffffff8116811461180b57600080fd5b809150509295509295509295565b60008060008060008086880360e081121561183357600080fd5b87359650602088013567ffffffffffffffff81111561185157600080fd5b61185d8a828b016116df565b90975095505060408801356bffffffffffffffffffffffff198116811461188357600080fd5b93506060888101359350607f198201121561189d57600080fd5b506080870190509295509295509295565b600080600080600080608087890312156118c757600080fd5b86359550602087013567ffffffffffffffff808211156118e657600080fd5b6118f28a838b016116df565b9097509550604089013591508082111561190b57600080fd5b5061191889828a016116df565b9094509250506060870135801515811461180b57600080fd5b82848237909101908152602001919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561196c5761196c611943565b500190565b60006020828403121561198357600080fd5b813560ff8116811461140357600080fd5b6000826119b157634e487b7160e01b600052601260045260246000fd5b500690565b6000825160005b818110156119d757602081860181015185830152016119bd565b818111156119e6576000828501525b509190910192915050565b600060208284031215611a0357600080fd5b5051919050565b600082821015611a1c57611a1c611943565b500390565b6000600019821415611a3557611a35611943565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115611a6f57611a6f611943565b01939250505056fea2646970667358221220a7852305a50b8d90eec1ab9ee1801ea51a07a1ee5abc1ae4beb865d85e9cf0fa64736f6c63430008090033",
136
- "linkReferences": {},
137
- "deployedLinkReferences": {}
138
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2fd33b4cd2b603ef68afefbc37f08651.json"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2fd33b4cd2b603ef68afefbc37f08651.json"
4
- }