@venusprotocol/venus-protocol 9.4.0-dev.7 → 9.4.0-dev.9
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.
- package/deploy/007-deploy-VBNBAdmin.ts +1 -1
- package/deploy/009-configure-vaults.ts +2 -0
- package/deploy/012-deploy-prime.ts +4 -0
- package/deploy/013-configure-prime.ts +1 -0
- package/deployments/basemainnet/DefaultProxyAdmin.json +200 -0
- package/deployments/basemainnet/Prime.json +2042 -0
- package/deployments/basemainnet/PrimeLiquidityProvider.json +1113 -0
- package/deployments/basemainnet/PrimeLiquidityProvider_Implementation.json +1432 -0
- package/deployments/basemainnet/PrimeLiquidityProvider_Proxy.json +272 -0
- package/deployments/basemainnet/Prime_Implementation.json +2966 -0
- package/deployments/basemainnet/Prime_Proxy.json +282 -0
- package/deployments/basemainnet/XVSStore.json +374 -0
- package/deployments/basemainnet/XVSVaultProxy.json +352 -0
- package/deployments/basemainnet/XVSVaultProxy_Implementation.json +2572 -0
- package/deployments/basemainnet/solcInputs/7584667b44eb77970ba8d274006d81ae.json +331 -0
- package/deployments/basemainnet/solcInputs/a2594572bdae270af6749f50c8019b6c.json +366 -0
- package/deployments/basemainnet.json +8171 -68
- package/deployments/basemainnet_addresses.json +11 -1
- package/dist/deploy/007-deploy-VBNBAdmin.js +2 -2
- package/dist/deploy/009-configure-vaults.js +2 -0
- package/dist/deploy/012-deploy-prime.js +4 -0
- package/dist/deploy/013-configure-prime.js +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,2572 @@
|
|
|
1
|
+
{
|
|
2
|
+
"address": "0x322F1a2E03F089F8ce510855e793970D6f0EFcF9",
|
|
3
|
+
"abi": [
|
|
4
|
+
{
|
|
5
|
+
"inputs": [],
|
|
6
|
+
"payable": false,
|
|
7
|
+
"stateMutability": "nonpayable",
|
|
8
|
+
"type": "constructor"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"anonymous": false,
|
|
12
|
+
"inputs": [
|
|
13
|
+
{
|
|
14
|
+
"indexed": true,
|
|
15
|
+
"internalType": "address",
|
|
16
|
+
"name": "user",
|
|
17
|
+
"type": "address"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"indexed": true,
|
|
21
|
+
"internalType": "address",
|
|
22
|
+
"name": "rewardToken",
|
|
23
|
+
"type": "address"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"indexed": true,
|
|
27
|
+
"internalType": "uint256",
|
|
28
|
+
"name": "pid",
|
|
29
|
+
"type": "uint256"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"indexed": false,
|
|
33
|
+
"internalType": "uint256",
|
|
34
|
+
"name": "amount",
|
|
35
|
+
"type": "uint256"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"name": "Claim",
|
|
39
|
+
"type": "event"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"anonymous": false,
|
|
43
|
+
"inputs": [
|
|
44
|
+
{
|
|
45
|
+
"indexed": true,
|
|
46
|
+
"internalType": "address",
|
|
47
|
+
"name": "delegator",
|
|
48
|
+
"type": "address"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"indexed": true,
|
|
52
|
+
"internalType": "address",
|
|
53
|
+
"name": "fromDelegate",
|
|
54
|
+
"type": "address"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"indexed": true,
|
|
58
|
+
"internalType": "address",
|
|
59
|
+
"name": "toDelegate",
|
|
60
|
+
"type": "address"
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"name": "DelegateChangedV2",
|
|
64
|
+
"type": "event"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"anonymous": false,
|
|
68
|
+
"inputs": [
|
|
69
|
+
{
|
|
70
|
+
"indexed": true,
|
|
71
|
+
"internalType": "address",
|
|
72
|
+
"name": "delegate",
|
|
73
|
+
"type": "address"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"indexed": false,
|
|
77
|
+
"internalType": "uint256",
|
|
78
|
+
"name": "previousBalance",
|
|
79
|
+
"type": "uint256"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"indexed": false,
|
|
83
|
+
"internalType": "uint256",
|
|
84
|
+
"name": "newBalance",
|
|
85
|
+
"type": "uint256"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"name": "DelegateVotesChangedV2",
|
|
89
|
+
"type": "event"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"anonymous": false,
|
|
93
|
+
"inputs": [
|
|
94
|
+
{
|
|
95
|
+
"indexed": true,
|
|
96
|
+
"internalType": "address",
|
|
97
|
+
"name": "user",
|
|
98
|
+
"type": "address"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"indexed": true,
|
|
102
|
+
"internalType": "address",
|
|
103
|
+
"name": "rewardToken",
|
|
104
|
+
"type": "address"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"indexed": true,
|
|
108
|
+
"internalType": "uint256",
|
|
109
|
+
"name": "pid",
|
|
110
|
+
"type": "uint256"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"indexed": false,
|
|
114
|
+
"internalType": "uint256",
|
|
115
|
+
"name": "amount",
|
|
116
|
+
"type": "uint256"
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"name": "Deposit",
|
|
120
|
+
"type": "event"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"anonymous": false,
|
|
124
|
+
"inputs": [
|
|
125
|
+
{
|
|
126
|
+
"indexed": true,
|
|
127
|
+
"internalType": "address",
|
|
128
|
+
"name": "user",
|
|
129
|
+
"type": "address"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"indexed": true,
|
|
133
|
+
"internalType": "address",
|
|
134
|
+
"name": "rewardToken",
|
|
135
|
+
"type": "address"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"indexed": true,
|
|
139
|
+
"internalType": "uint256",
|
|
140
|
+
"name": "pid",
|
|
141
|
+
"type": "uint256"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"indexed": false,
|
|
145
|
+
"internalType": "uint256",
|
|
146
|
+
"name": "amount",
|
|
147
|
+
"type": "uint256"
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"name": "ExecutedWithdrawal",
|
|
151
|
+
"type": "event"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"anonymous": false,
|
|
155
|
+
"inputs": [
|
|
156
|
+
{
|
|
157
|
+
"indexed": false,
|
|
158
|
+
"internalType": "address",
|
|
159
|
+
"name": "oldAccessControlManager",
|
|
160
|
+
"type": "address"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"indexed": false,
|
|
164
|
+
"internalType": "address",
|
|
165
|
+
"name": "newAccessControlManager",
|
|
166
|
+
"type": "address"
|
|
167
|
+
}
|
|
168
|
+
],
|
|
169
|
+
"name": "NewAccessControlManager",
|
|
170
|
+
"type": "event"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"anonymous": false,
|
|
174
|
+
"inputs": [
|
|
175
|
+
{
|
|
176
|
+
"indexed": true,
|
|
177
|
+
"internalType": "contract IPrime",
|
|
178
|
+
"name": "oldPrimeToken",
|
|
179
|
+
"type": "address"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"indexed": true,
|
|
183
|
+
"internalType": "contract IPrime",
|
|
184
|
+
"name": "newPrimeToken",
|
|
185
|
+
"type": "address"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"indexed": false,
|
|
189
|
+
"internalType": "address",
|
|
190
|
+
"name": "oldPrimeRewardToken",
|
|
191
|
+
"type": "address"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"indexed": false,
|
|
195
|
+
"internalType": "address",
|
|
196
|
+
"name": "newPrimeRewardToken",
|
|
197
|
+
"type": "address"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"indexed": false,
|
|
201
|
+
"internalType": "uint256",
|
|
202
|
+
"name": "oldPrimePoolId",
|
|
203
|
+
"type": "uint256"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"indexed": false,
|
|
207
|
+
"internalType": "uint256",
|
|
208
|
+
"name": "newPrimePoolId",
|
|
209
|
+
"type": "uint256"
|
|
210
|
+
}
|
|
211
|
+
],
|
|
212
|
+
"name": "NewPrimeToken",
|
|
213
|
+
"type": "event"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"anonymous": false,
|
|
217
|
+
"inputs": [
|
|
218
|
+
{
|
|
219
|
+
"indexed": true,
|
|
220
|
+
"internalType": "address",
|
|
221
|
+
"name": "rewardToken",
|
|
222
|
+
"type": "address"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"indexed": true,
|
|
226
|
+
"internalType": "uint256",
|
|
227
|
+
"name": "pid",
|
|
228
|
+
"type": "uint256"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"indexed": true,
|
|
232
|
+
"internalType": "address",
|
|
233
|
+
"name": "token",
|
|
234
|
+
"type": "address"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"indexed": false,
|
|
238
|
+
"internalType": "uint256",
|
|
239
|
+
"name": "allocPoints",
|
|
240
|
+
"type": "uint256"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"indexed": false,
|
|
244
|
+
"internalType": "uint256",
|
|
245
|
+
"name": "rewardPerBlockOrSecond",
|
|
246
|
+
"type": "uint256"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"indexed": false,
|
|
250
|
+
"internalType": "uint256",
|
|
251
|
+
"name": "lockPeriod",
|
|
252
|
+
"type": "uint256"
|
|
253
|
+
}
|
|
254
|
+
],
|
|
255
|
+
"name": "PoolAdded",
|
|
256
|
+
"type": "event"
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"anonymous": false,
|
|
260
|
+
"inputs": [
|
|
261
|
+
{
|
|
262
|
+
"indexed": true,
|
|
263
|
+
"internalType": "address",
|
|
264
|
+
"name": "rewardToken",
|
|
265
|
+
"type": "address"
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"indexed": true,
|
|
269
|
+
"internalType": "uint256",
|
|
270
|
+
"name": "pid",
|
|
271
|
+
"type": "uint256"
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"indexed": false,
|
|
275
|
+
"internalType": "uint256",
|
|
276
|
+
"name": "oldAllocPoints",
|
|
277
|
+
"type": "uint256"
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"indexed": false,
|
|
281
|
+
"internalType": "uint256",
|
|
282
|
+
"name": "newAllocPoints",
|
|
283
|
+
"type": "uint256"
|
|
284
|
+
}
|
|
285
|
+
],
|
|
286
|
+
"name": "PoolUpdated",
|
|
287
|
+
"type": "event"
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"anonymous": false,
|
|
291
|
+
"inputs": [
|
|
292
|
+
{
|
|
293
|
+
"indexed": true,
|
|
294
|
+
"internalType": "address",
|
|
295
|
+
"name": "user",
|
|
296
|
+
"type": "address"
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"indexed": true,
|
|
300
|
+
"internalType": "address",
|
|
301
|
+
"name": "rewardToken",
|
|
302
|
+
"type": "address"
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"indexed": true,
|
|
306
|
+
"internalType": "uint256",
|
|
307
|
+
"name": "pid",
|
|
308
|
+
"type": "uint256"
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"indexed": false,
|
|
312
|
+
"internalType": "uint256",
|
|
313
|
+
"name": "amount",
|
|
314
|
+
"type": "uint256"
|
|
315
|
+
}
|
|
316
|
+
],
|
|
317
|
+
"name": "RequestedWithdrawal",
|
|
318
|
+
"type": "event"
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"anonymous": false,
|
|
322
|
+
"inputs": [
|
|
323
|
+
{
|
|
324
|
+
"indexed": true,
|
|
325
|
+
"internalType": "address",
|
|
326
|
+
"name": "rewardToken",
|
|
327
|
+
"type": "address"
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"indexed": false,
|
|
331
|
+
"internalType": "uint256",
|
|
332
|
+
"name": "oldReward",
|
|
333
|
+
"type": "uint256"
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"indexed": false,
|
|
337
|
+
"internalType": "uint256",
|
|
338
|
+
"name": "newReward",
|
|
339
|
+
"type": "uint256"
|
|
340
|
+
}
|
|
341
|
+
],
|
|
342
|
+
"name": "RewardAmountUpdated",
|
|
343
|
+
"type": "event"
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"anonymous": false,
|
|
347
|
+
"inputs": [
|
|
348
|
+
{
|
|
349
|
+
"indexed": false,
|
|
350
|
+
"internalType": "address",
|
|
351
|
+
"name": "oldXvs",
|
|
352
|
+
"type": "address"
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"indexed": false,
|
|
356
|
+
"internalType": "address",
|
|
357
|
+
"name": "oldStore",
|
|
358
|
+
"type": "address"
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"indexed": false,
|
|
362
|
+
"internalType": "address",
|
|
363
|
+
"name": "newXvs",
|
|
364
|
+
"type": "address"
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"indexed": false,
|
|
368
|
+
"internalType": "address",
|
|
369
|
+
"name": "newStore",
|
|
370
|
+
"type": "address"
|
|
371
|
+
}
|
|
372
|
+
],
|
|
373
|
+
"name": "StoreUpdated",
|
|
374
|
+
"type": "event"
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"anonymous": false,
|
|
378
|
+
"inputs": [
|
|
379
|
+
{
|
|
380
|
+
"indexed": true,
|
|
381
|
+
"internalType": "address",
|
|
382
|
+
"name": "rewardToken",
|
|
383
|
+
"type": "address"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"indexed": true,
|
|
387
|
+
"internalType": "address",
|
|
388
|
+
"name": "userAddress",
|
|
389
|
+
"type": "address"
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"indexed": false,
|
|
393
|
+
"internalType": "uint256",
|
|
394
|
+
"name": "oldOwedAmount",
|
|
395
|
+
"type": "uint256"
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"indexed": false,
|
|
399
|
+
"internalType": "uint256",
|
|
400
|
+
"name": "newOwedAmount",
|
|
401
|
+
"type": "uint256"
|
|
402
|
+
}
|
|
403
|
+
],
|
|
404
|
+
"name": "VaultDebtUpdated",
|
|
405
|
+
"type": "event"
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"anonymous": false,
|
|
409
|
+
"inputs": [
|
|
410
|
+
{
|
|
411
|
+
"indexed": true,
|
|
412
|
+
"internalType": "address",
|
|
413
|
+
"name": "admin",
|
|
414
|
+
"type": "address"
|
|
415
|
+
}
|
|
416
|
+
],
|
|
417
|
+
"name": "VaultPaused",
|
|
418
|
+
"type": "event"
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"anonymous": false,
|
|
422
|
+
"inputs": [
|
|
423
|
+
{
|
|
424
|
+
"indexed": true,
|
|
425
|
+
"internalType": "address",
|
|
426
|
+
"name": "admin",
|
|
427
|
+
"type": "address"
|
|
428
|
+
}
|
|
429
|
+
],
|
|
430
|
+
"name": "VaultResumed",
|
|
431
|
+
"type": "event"
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
"anonymous": false,
|
|
435
|
+
"inputs": [
|
|
436
|
+
{
|
|
437
|
+
"indexed": true,
|
|
438
|
+
"internalType": "address",
|
|
439
|
+
"name": "rewardToken",
|
|
440
|
+
"type": "address"
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
"indexed": true,
|
|
444
|
+
"internalType": "uint256",
|
|
445
|
+
"name": "pid",
|
|
446
|
+
"type": "uint256"
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
"indexed": false,
|
|
450
|
+
"internalType": "uint256",
|
|
451
|
+
"name": "oldPeriod",
|
|
452
|
+
"type": "uint256"
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
"indexed": false,
|
|
456
|
+
"internalType": "uint256",
|
|
457
|
+
"name": "newPeriod",
|
|
458
|
+
"type": "uint256"
|
|
459
|
+
}
|
|
460
|
+
],
|
|
461
|
+
"name": "WithdrawalLockingPeriodUpdated",
|
|
462
|
+
"type": "event"
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
"constant": true,
|
|
466
|
+
"inputs": [],
|
|
467
|
+
"name": "DELEGATION_TYPEHASH",
|
|
468
|
+
"outputs": [
|
|
469
|
+
{
|
|
470
|
+
"internalType": "bytes32",
|
|
471
|
+
"name": "",
|
|
472
|
+
"type": "bytes32"
|
|
473
|
+
}
|
|
474
|
+
],
|
|
475
|
+
"payable": false,
|
|
476
|
+
"stateMutability": "view",
|
|
477
|
+
"type": "function"
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
"constant": true,
|
|
481
|
+
"inputs": [],
|
|
482
|
+
"name": "DOMAIN_TYPEHASH",
|
|
483
|
+
"outputs": [
|
|
484
|
+
{
|
|
485
|
+
"internalType": "bytes32",
|
|
486
|
+
"name": "",
|
|
487
|
+
"type": "bytes32"
|
|
488
|
+
}
|
|
489
|
+
],
|
|
490
|
+
"payable": false,
|
|
491
|
+
"stateMutability": "view",
|
|
492
|
+
"type": "function"
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
"constant": true,
|
|
496
|
+
"inputs": [],
|
|
497
|
+
"name": "MAX_LOCK_PERIOD",
|
|
498
|
+
"outputs": [
|
|
499
|
+
{
|
|
500
|
+
"internalType": "uint256",
|
|
501
|
+
"name": "",
|
|
502
|
+
"type": "uint256"
|
|
503
|
+
}
|
|
504
|
+
],
|
|
505
|
+
"payable": false,
|
|
506
|
+
"stateMutability": "view",
|
|
507
|
+
"type": "function"
|
|
508
|
+
},
|
|
509
|
+
{
|
|
510
|
+
"constant": true,
|
|
511
|
+
"inputs": [],
|
|
512
|
+
"name": "SECONDS_PER_YEAR",
|
|
513
|
+
"outputs": [
|
|
514
|
+
{
|
|
515
|
+
"internalType": "uint256",
|
|
516
|
+
"name": "",
|
|
517
|
+
"type": "uint256"
|
|
518
|
+
}
|
|
519
|
+
],
|
|
520
|
+
"payable": false,
|
|
521
|
+
"stateMutability": "view",
|
|
522
|
+
"type": "function"
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
"constant": false,
|
|
526
|
+
"inputs": [
|
|
527
|
+
{
|
|
528
|
+
"internalType": "contract XVSVaultProxy",
|
|
529
|
+
"name": "xvsVaultProxy",
|
|
530
|
+
"type": "address"
|
|
531
|
+
}
|
|
532
|
+
],
|
|
533
|
+
"name": "_become",
|
|
534
|
+
"outputs": [],
|
|
535
|
+
"payable": false,
|
|
536
|
+
"stateMutability": "nonpayable",
|
|
537
|
+
"type": "function"
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
"constant": true,
|
|
541
|
+
"inputs": [],
|
|
542
|
+
"name": "accessControlManager",
|
|
543
|
+
"outputs": [
|
|
544
|
+
{
|
|
545
|
+
"internalType": "contract IAccessControlManagerV5",
|
|
546
|
+
"name": "",
|
|
547
|
+
"type": "address"
|
|
548
|
+
}
|
|
549
|
+
],
|
|
550
|
+
"payable": false,
|
|
551
|
+
"stateMutability": "view",
|
|
552
|
+
"type": "function"
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
"constant": false,
|
|
556
|
+
"inputs": [
|
|
557
|
+
{
|
|
558
|
+
"internalType": "address",
|
|
559
|
+
"name": "_rewardToken",
|
|
560
|
+
"type": "address"
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
"internalType": "uint256",
|
|
564
|
+
"name": "_allocPoint",
|
|
565
|
+
"type": "uint256"
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"internalType": "contract IBEP20",
|
|
569
|
+
"name": "_token",
|
|
570
|
+
"type": "address"
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
"internalType": "uint256",
|
|
574
|
+
"name": "_rewardPerBlockOrSecond",
|
|
575
|
+
"type": "uint256"
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
"internalType": "uint256",
|
|
579
|
+
"name": "_lockPeriod",
|
|
580
|
+
"type": "uint256"
|
|
581
|
+
}
|
|
582
|
+
],
|
|
583
|
+
"name": "add",
|
|
584
|
+
"outputs": [],
|
|
585
|
+
"payable": false,
|
|
586
|
+
"stateMutability": "nonpayable",
|
|
587
|
+
"type": "function"
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
"constant": true,
|
|
591
|
+
"inputs": [],
|
|
592
|
+
"name": "admin",
|
|
593
|
+
"outputs": [
|
|
594
|
+
{
|
|
595
|
+
"internalType": "address",
|
|
596
|
+
"name": "",
|
|
597
|
+
"type": "address"
|
|
598
|
+
}
|
|
599
|
+
],
|
|
600
|
+
"payable": false,
|
|
601
|
+
"stateMutability": "view",
|
|
602
|
+
"type": "function"
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
"constant": true,
|
|
606
|
+
"inputs": [],
|
|
607
|
+
"name": "blocksOrSecondsPerYear",
|
|
608
|
+
"outputs": [
|
|
609
|
+
{
|
|
610
|
+
"internalType": "uint256",
|
|
611
|
+
"name": "",
|
|
612
|
+
"type": "uint256"
|
|
613
|
+
}
|
|
614
|
+
],
|
|
615
|
+
"payable": false,
|
|
616
|
+
"stateMutability": "view",
|
|
617
|
+
"type": "function"
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
"constant": true,
|
|
621
|
+
"inputs": [
|
|
622
|
+
{
|
|
623
|
+
"internalType": "address",
|
|
624
|
+
"name": "",
|
|
625
|
+
"type": "address"
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
"internalType": "uint32",
|
|
629
|
+
"name": "",
|
|
630
|
+
"type": "uint32"
|
|
631
|
+
}
|
|
632
|
+
],
|
|
633
|
+
"name": "checkpoints",
|
|
634
|
+
"outputs": [
|
|
635
|
+
{
|
|
636
|
+
"internalType": "uint32",
|
|
637
|
+
"name": "fromBlockOrSecond",
|
|
638
|
+
"type": "uint32"
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
"internalType": "uint96",
|
|
642
|
+
"name": "votes",
|
|
643
|
+
"type": "uint96"
|
|
644
|
+
}
|
|
645
|
+
],
|
|
646
|
+
"payable": false,
|
|
647
|
+
"stateMutability": "view",
|
|
648
|
+
"type": "function"
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
"constant": false,
|
|
652
|
+
"inputs": [
|
|
653
|
+
{
|
|
654
|
+
"internalType": "address",
|
|
655
|
+
"name": "_account",
|
|
656
|
+
"type": "address"
|
|
657
|
+
},
|
|
658
|
+
{
|
|
659
|
+
"internalType": "address",
|
|
660
|
+
"name": "_rewardToken",
|
|
661
|
+
"type": "address"
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
"internalType": "uint256",
|
|
665
|
+
"name": "_pid",
|
|
666
|
+
"type": "uint256"
|
|
667
|
+
}
|
|
668
|
+
],
|
|
669
|
+
"name": "claim",
|
|
670
|
+
"outputs": [],
|
|
671
|
+
"payable": false,
|
|
672
|
+
"stateMutability": "nonpayable",
|
|
673
|
+
"type": "function"
|
|
674
|
+
},
|
|
675
|
+
{
|
|
676
|
+
"constant": false,
|
|
677
|
+
"inputs": [
|
|
678
|
+
{
|
|
679
|
+
"internalType": "address",
|
|
680
|
+
"name": "delegatee",
|
|
681
|
+
"type": "address"
|
|
682
|
+
}
|
|
683
|
+
],
|
|
684
|
+
"name": "delegate",
|
|
685
|
+
"outputs": [],
|
|
686
|
+
"payable": false,
|
|
687
|
+
"stateMutability": "nonpayable",
|
|
688
|
+
"type": "function"
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
"constant": false,
|
|
692
|
+
"inputs": [
|
|
693
|
+
{
|
|
694
|
+
"internalType": "address",
|
|
695
|
+
"name": "delegatee",
|
|
696
|
+
"type": "address"
|
|
697
|
+
},
|
|
698
|
+
{
|
|
699
|
+
"internalType": "uint256",
|
|
700
|
+
"name": "nonce",
|
|
701
|
+
"type": "uint256"
|
|
702
|
+
},
|
|
703
|
+
{
|
|
704
|
+
"internalType": "uint256",
|
|
705
|
+
"name": "expiry",
|
|
706
|
+
"type": "uint256"
|
|
707
|
+
},
|
|
708
|
+
{
|
|
709
|
+
"internalType": "uint8",
|
|
710
|
+
"name": "v",
|
|
711
|
+
"type": "uint8"
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
"internalType": "bytes32",
|
|
715
|
+
"name": "r",
|
|
716
|
+
"type": "bytes32"
|
|
717
|
+
},
|
|
718
|
+
{
|
|
719
|
+
"internalType": "bytes32",
|
|
720
|
+
"name": "s",
|
|
721
|
+
"type": "bytes32"
|
|
722
|
+
}
|
|
723
|
+
],
|
|
724
|
+
"name": "delegateBySig",
|
|
725
|
+
"outputs": [],
|
|
726
|
+
"payable": false,
|
|
727
|
+
"stateMutability": "nonpayable",
|
|
728
|
+
"type": "function"
|
|
729
|
+
},
|
|
730
|
+
{
|
|
731
|
+
"constant": true,
|
|
732
|
+
"inputs": [
|
|
733
|
+
{
|
|
734
|
+
"internalType": "address",
|
|
735
|
+
"name": "",
|
|
736
|
+
"type": "address"
|
|
737
|
+
}
|
|
738
|
+
],
|
|
739
|
+
"name": "delegates",
|
|
740
|
+
"outputs": [
|
|
741
|
+
{
|
|
742
|
+
"internalType": "address",
|
|
743
|
+
"name": "",
|
|
744
|
+
"type": "address"
|
|
745
|
+
}
|
|
746
|
+
],
|
|
747
|
+
"payable": false,
|
|
748
|
+
"stateMutability": "view",
|
|
749
|
+
"type": "function"
|
|
750
|
+
},
|
|
751
|
+
{
|
|
752
|
+
"constant": false,
|
|
753
|
+
"inputs": [
|
|
754
|
+
{
|
|
755
|
+
"internalType": "address",
|
|
756
|
+
"name": "_rewardToken",
|
|
757
|
+
"type": "address"
|
|
758
|
+
},
|
|
759
|
+
{
|
|
760
|
+
"internalType": "uint256",
|
|
761
|
+
"name": "_pid",
|
|
762
|
+
"type": "uint256"
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
"internalType": "uint256",
|
|
766
|
+
"name": "_amount",
|
|
767
|
+
"type": "uint256"
|
|
768
|
+
}
|
|
769
|
+
],
|
|
770
|
+
"name": "deposit",
|
|
771
|
+
"outputs": [],
|
|
772
|
+
"payable": false,
|
|
773
|
+
"stateMutability": "nonpayable",
|
|
774
|
+
"type": "function"
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
"constant": false,
|
|
778
|
+
"inputs": [
|
|
779
|
+
{
|
|
780
|
+
"internalType": "address",
|
|
781
|
+
"name": "_rewardToken",
|
|
782
|
+
"type": "address"
|
|
783
|
+
},
|
|
784
|
+
{
|
|
785
|
+
"internalType": "uint256",
|
|
786
|
+
"name": "_pid",
|
|
787
|
+
"type": "uint256"
|
|
788
|
+
}
|
|
789
|
+
],
|
|
790
|
+
"name": "executeWithdrawal",
|
|
791
|
+
"outputs": [],
|
|
792
|
+
"payable": false,
|
|
793
|
+
"stateMutability": "nonpayable",
|
|
794
|
+
"type": "function"
|
|
795
|
+
},
|
|
796
|
+
{
|
|
797
|
+
"constant": true,
|
|
798
|
+
"inputs": [],
|
|
799
|
+
"name": "getBlockNumberOrTimestamp",
|
|
800
|
+
"outputs": [
|
|
801
|
+
{
|
|
802
|
+
"internalType": "uint256",
|
|
803
|
+
"name": "",
|
|
804
|
+
"type": "uint256"
|
|
805
|
+
}
|
|
806
|
+
],
|
|
807
|
+
"payable": false,
|
|
808
|
+
"stateMutability": "view",
|
|
809
|
+
"type": "function"
|
|
810
|
+
},
|
|
811
|
+
{
|
|
812
|
+
"constant": true,
|
|
813
|
+
"inputs": [
|
|
814
|
+
{
|
|
815
|
+
"internalType": "address",
|
|
816
|
+
"name": "account",
|
|
817
|
+
"type": "address"
|
|
818
|
+
}
|
|
819
|
+
],
|
|
820
|
+
"name": "getCurrentVotes",
|
|
821
|
+
"outputs": [
|
|
822
|
+
{
|
|
823
|
+
"internalType": "uint96",
|
|
824
|
+
"name": "",
|
|
825
|
+
"type": "uint96"
|
|
826
|
+
}
|
|
827
|
+
],
|
|
828
|
+
"payable": false,
|
|
829
|
+
"stateMutability": "view",
|
|
830
|
+
"type": "function"
|
|
831
|
+
},
|
|
832
|
+
{
|
|
833
|
+
"constant": true,
|
|
834
|
+
"inputs": [
|
|
835
|
+
{
|
|
836
|
+
"internalType": "address",
|
|
837
|
+
"name": "_rewardToken",
|
|
838
|
+
"type": "address"
|
|
839
|
+
},
|
|
840
|
+
{
|
|
841
|
+
"internalType": "uint256",
|
|
842
|
+
"name": "_pid",
|
|
843
|
+
"type": "uint256"
|
|
844
|
+
},
|
|
845
|
+
{
|
|
846
|
+
"internalType": "address",
|
|
847
|
+
"name": "_user",
|
|
848
|
+
"type": "address"
|
|
849
|
+
}
|
|
850
|
+
],
|
|
851
|
+
"name": "getEligibleWithdrawalAmount",
|
|
852
|
+
"outputs": [
|
|
853
|
+
{
|
|
854
|
+
"internalType": "uint256",
|
|
855
|
+
"name": "withdrawalAmount",
|
|
856
|
+
"type": "uint256"
|
|
857
|
+
}
|
|
858
|
+
],
|
|
859
|
+
"payable": false,
|
|
860
|
+
"stateMutability": "view",
|
|
861
|
+
"type": "function"
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
"constant": true,
|
|
865
|
+
"inputs": [
|
|
866
|
+
{
|
|
867
|
+
"internalType": "address",
|
|
868
|
+
"name": "account",
|
|
869
|
+
"type": "address"
|
|
870
|
+
},
|
|
871
|
+
{
|
|
872
|
+
"internalType": "uint256",
|
|
873
|
+
"name": "blockNumberOrSecond",
|
|
874
|
+
"type": "uint256"
|
|
875
|
+
}
|
|
876
|
+
],
|
|
877
|
+
"name": "getPriorVotes",
|
|
878
|
+
"outputs": [
|
|
879
|
+
{
|
|
880
|
+
"internalType": "uint96",
|
|
881
|
+
"name": "",
|
|
882
|
+
"type": "uint96"
|
|
883
|
+
}
|
|
884
|
+
],
|
|
885
|
+
"payable": false,
|
|
886
|
+
"stateMutability": "view",
|
|
887
|
+
"type": "function"
|
|
888
|
+
},
|
|
889
|
+
{
|
|
890
|
+
"constant": true,
|
|
891
|
+
"inputs": [
|
|
892
|
+
{
|
|
893
|
+
"internalType": "address",
|
|
894
|
+
"name": "_rewardToken",
|
|
895
|
+
"type": "address"
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
"internalType": "uint256",
|
|
899
|
+
"name": "_pid",
|
|
900
|
+
"type": "uint256"
|
|
901
|
+
},
|
|
902
|
+
{
|
|
903
|
+
"internalType": "address",
|
|
904
|
+
"name": "_user",
|
|
905
|
+
"type": "address"
|
|
906
|
+
}
|
|
907
|
+
],
|
|
908
|
+
"name": "getRequestedAmount",
|
|
909
|
+
"outputs": [
|
|
910
|
+
{
|
|
911
|
+
"internalType": "uint256",
|
|
912
|
+
"name": "",
|
|
913
|
+
"type": "uint256"
|
|
914
|
+
}
|
|
915
|
+
],
|
|
916
|
+
"payable": false,
|
|
917
|
+
"stateMutability": "view",
|
|
918
|
+
"type": "function"
|
|
919
|
+
},
|
|
920
|
+
{
|
|
921
|
+
"constant": true,
|
|
922
|
+
"inputs": [
|
|
923
|
+
{
|
|
924
|
+
"internalType": "address",
|
|
925
|
+
"name": "_rewardToken",
|
|
926
|
+
"type": "address"
|
|
927
|
+
},
|
|
928
|
+
{
|
|
929
|
+
"internalType": "uint256",
|
|
930
|
+
"name": "_pid",
|
|
931
|
+
"type": "uint256"
|
|
932
|
+
},
|
|
933
|
+
{
|
|
934
|
+
"internalType": "address",
|
|
935
|
+
"name": "_user",
|
|
936
|
+
"type": "address"
|
|
937
|
+
}
|
|
938
|
+
],
|
|
939
|
+
"name": "getUserInfo",
|
|
940
|
+
"outputs": [
|
|
941
|
+
{
|
|
942
|
+
"internalType": "uint256",
|
|
943
|
+
"name": "amount",
|
|
944
|
+
"type": "uint256"
|
|
945
|
+
},
|
|
946
|
+
{
|
|
947
|
+
"internalType": "uint256",
|
|
948
|
+
"name": "rewardDebt",
|
|
949
|
+
"type": "uint256"
|
|
950
|
+
},
|
|
951
|
+
{
|
|
952
|
+
"internalType": "uint256",
|
|
953
|
+
"name": "pendingWithdrawals",
|
|
954
|
+
"type": "uint256"
|
|
955
|
+
}
|
|
956
|
+
],
|
|
957
|
+
"payable": false,
|
|
958
|
+
"stateMutability": "view",
|
|
959
|
+
"type": "function"
|
|
960
|
+
},
|
|
961
|
+
{
|
|
962
|
+
"constant": true,
|
|
963
|
+
"inputs": [
|
|
964
|
+
{
|
|
965
|
+
"internalType": "address",
|
|
966
|
+
"name": "_rewardToken",
|
|
967
|
+
"type": "address"
|
|
968
|
+
},
|
|
969
|
+
{
|
|
970
|
+
"internalType": "uint256",
|
|
971
|
+
"name": "_pid",
|
|
972
|
+
"type": "uint256"
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
"internalType": "address",
|
|
976
|
+
"name": "_user",
|
|
977
|
+
"type": "address"
|
|
978
|
+
}
|
|
979
|
+
],
|
|
980
|
+
"name": "getWithdrawalRequests",
|
|
981
|
+
"outputs": [
|
|
982
|
+
{
|
|
983
|
+
"components": [
|
|
984
|
+
{
|
|
985
|
+
"internalType": "uint256",
|
|
986
|
+
"name": "amount",
|
|
987
|
+
"type": "uint256"
|
|
988
|
+
},
|
|
989
|
+
{
|
|
990
|
+
"internalType": "uint128",
|
|
991
|
+
"name": "lockedUntil",
|
|
992
|
+
"type": "uint128"
|
|
993
|
+
},
|
|
994
|
+
{
|
|
995
|
+
"internalType": "uint128",
|
|
996
|
+
"name": "afterUpgrade",
|
|
997
|
+
"type": "uint128"
|
|
998
|
+
}
|
|
999
|
+
],
|
|
1000
|
+
"internalType": "struct XVSVaultStorageV1.WithdrawalRequest[]",
|
|
1001
|
+
"name": "",
|
|
1002
|
+
"type": "tuple[]"
|
|
1003
|
+
}
|
|
1004
|
+
],
|
|
1005
|
+
"payable": false,
|
|
1006
|
+
"stateMutability": "view",
|
|
1007
|
+
"type": "function"
|
|
1008
|
+
},
|
|
1009
|
+
{
|
|
1010
|
+
"constant": true,
|
|
1011
|
+
"inputs": [],
|
|
1012
|
+
"name": "implementation",
|
|
1013
|
+
"outputs": [
|
|
1014
|
+
{
|
|
1015
|
+
"internalType": "address",
|
|
1016
|
+
"name": "",
|
|
1017
|
+
"type": "address"
|
|
1018
|
+
}
|
|
1019
|
+
],
|
|
1020
|
+
"payable": false,
|
|
1021
|
+
"stateMutability": "view",
|
|
1022
|
+
"type": "function"
|
|
1023
|
+
},
|
|
1024
|
+
{
|
|
1025
|
+
"constant": false,
|
|
1026
|
+
"inputs": [
|
|
1027
|
+
{
|
|
1028
|
+
"internalType": "bool",
|
|
1029
|
+
"name": "timeBased_",
|
|
1030
|
+
"type": "bool"
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
"internalType": "uint256",
|
|
1034
|
+
"name": "blocksPerYear_",
|
|
1035
|
+
"type": "uint256"
|
|
1036
|
+
}
|
|
1037
|
+
],
|
|
1038
|
+
"name": "initializeTimeManager",
|
|
1039
|
+
"outputs": [],
|
|
1040
|
+
"payable": false,
|
|
1041
|
+
"stateMutability": "nonpayable",
|
|
1042
|
+
"type": "function"
|
|
1043
|
+
},
|
|
1044
|
+
{
|
|
1045
|
+
"constant": true,
|
|
1046
|
+
"inputs": [
|
|
1047
|
+
{
|
|
1048
|
+
"internalType": "address",
|
|
1049
|
+
"name": "",
|
|
1050
|
+
"type": "address"
|
|
1051
|
+
}
|
|
1052
|
+
],
|
|
1053
|
+
"name": "isStakedToken",
|
|
1054
|
+
"outputs": [
|
|
1055
|
+
{
|
|
1056
|
+
"internalType": "bool",
|
|
1057
|
+
"name": "",
|
|
1058
|
+
"type": "bool"
|
|
1059
|
+
}
|
|
1060
|
+
],
|
|
1061
|
+
"payable": false,
|
|
1062
|
+
"stateMutability": "view",
|
|
1063
|
+
"type": "function"
|
|
1064
|
+
},
|
|
1065
|
+
{
|
|
1066
|
+
"constant": true,
|
|
1067
|
+
"inputs": [],
|
|
1068
|
+
"name": "isTimeBased",
|
|
1069
|
+
"outputs": [
|
|
1070
|
+
{
|
|
1071
|
+
"internalType": "bool",
|
|
1072
|
+
"name": "",
|
|
1073
|
+
"type": "bool"
|
|
1074
|
+
}
|
|
1075
|
+
],
|
|
1076
|
+
"payable": false,
|
|
1077
|
+
"stateMutability": "view",
|
|
1078
|
+
"type": "function"
|
|
1079
|
+
},
|
|
1080
|
+
{
|
|
1081
|
+
"constant": true,
|
|
1082
|
+
"inputs": [
|
|
1083
|
+
{
|
|
1084
|
+
"internalType": "address",
|
|
1085
|
+
"name": "",
|
|
1086
|
+
"type": "address"
|
|
1087
|
+
}
|
|
1088
|
+
],
|
|
1089
|
+
"name": "nonces",
|
|
1090
|
+
"outputs": [
|
|
1091
|
+
{
|
|
1092
|
+
"internalType": "uint256",
|
|
1093
|
+
"name": "",
|
|
1094
|
+
"type": "uint256"
|
|
1095
|
+
}
|
|
1096
|
+
],
|
|
1097
|
+
"payable": false,
|
|
1098
|
+
"stateMutability": "view",
|
|
1099
|
+
"type": "function"
|
|
1100
|
+
},
|
|
1101
|
+
{
|
|
1102
|
+
"constant": true,
|
|
1103
|
+
"inputs": [
|
|
1104
|
+
{
|
|
1105
|
+
"internalType": "address",
|
|
1106
|
+
"name": "",
|
|
1107
|
+
"type": "address"
|
|
1108
|
+
}
|
|
1109
|
+
],
|
|
1110
|
+
"name": "numCheckpoints",
|
|
1111
|
+
"outputs": [
|
|
1112
|
+
{
|
|
1113
|
+
"internalType": "uint32",
|
|
1114
|
+
"name": "",
|
|
1115
|
+
"type": "uint32"
|
|
1116
|
+
}
|
|
1117
|
+
],
|
|
1118
|
+
"payable": false,
|
|
1119
|
+
"stateMutability": "view",
|
|
1120
|
+
"type": "function"
|
|
1121
|
+
},
|
|
1122
|
+
{
|
|
1123
|
+
"constant": false,
|
|
1124
|
+
"inputs": [],
|
|
1125
|
+
"name": "pause",
|
|
1126
|
+
"outputs": [],
|
|
1127
|
+
"payable": false,
|
|
1128
|
+
"stateMutability": "nonpayable",
|
|
1129
|
+
"type": "function"
|
|
1130
|
+
},
|
|
1131
|
+
{
|
|
1132
|
+
"constant": true,
|
|
1133
|
+
"inputs": [],
|
|
1134
|
+
"name": "pendingAdmin",
|
|
1135
|
+
"outputs": [
|
|
1136
|
+
{
|
|
1137
|
+
"internalType": "address",
|
|
1138
|
+
"name": "",
|
|
1139
|
+
"type": "address"
|
|
1140
|
+
}
|
|
1141
|
+
],
|
|
1142
|
+
"payable": false,
|
|
1143
|
+
"stateMutability": "view",
|
|
1144
|
+
"type": "function"
|
|
1145
|
+
},
|
|
1146
|
+
{
|
|
1147
|
+
"constant": true,
|
|
1148
|
+
"inputs": [
|
|
1149
|
+
{
|
|
1150
|
+
"internalType": "address",
|
|
1151
|
+
"name": "_rewardToken",
|
|
1152
|
+
"type": "address"
|
|
1153
|
+
},
|
|
1154
|
+
{
|
|
1155
|
+
"internalType": "uint256",
|
|
1156
|
+
"name": "_pid",
|
|
1157
|
+
"type": "uint256"
|
|
1158
|
+
},
|
|
1159
|
+
{
|
|
1160
|
+
"internalType": "address",
|
|
1161
|
+
"name": "_user",
|
|
1162
|
+
"type": "address"
|
|
1163
|
+
}
|
|
1164
|
+
],
|
|
1165
|
+
"name": "pendingReward",
|
|
1166
|
+
"outputs": [
|
|
1167
|
+
{
|
|
1168
|
+
"internalType": "uint256",
|
|
1169
|
+
"name": "",
|
|
1170
|
+
"type": "uint256"
|
|
1171
|
+
}
|
|
1172
|
+
],
|
|
1173
|
+
"payable": false,
|
|
1174
|
+
"stateMutability": "view",
|
|
1175
|
+
"type": "function"
|
|
1176
|
+
},
|
|
1177
|
+
{
|
|
1178
|
+
"constant": true,
|
|
1179
|
+
"inputs": [
|
|
1180
|
+
{
|
|
1181
|
+
"internalType": "address",
|
|
1182
|
+
"name": "",
|
|
1183
|
+
"type": "address"
|
|
1184
|
+
},
|
|
1185
|
+
{
|
|
1186
|
+
"internalType": "address",
|
|
1187
|
+
"name": "",
|
|
1188
|
+
"type": "address"
|
|
1189
|
+
}
|
|
1190
|
+
],
|
|
1191
|
+
"name": "pendingRewardTransfers",
|
|
1192
|
+
"outputs": [
|
|
1193
|
+
{
|
|
1194
|
+
"internalType": "uint256",
|
|
1195
|
+
"name": "",
|
|
1196
|
+
"type": "uint256"
|
|
1197
|
+
}
|
|
1198
|
+
],
|
|
1199
|
+
"payable": false,
|
|
1200
|
+
"stateMutability": "view",
|
|
1201
|
+
"type": "function"
|
|
1202
|
+
},
|
|
1203
|
+
{
|
|
1204
|
+
"constant": true,
|
|
1205
|
+
"inputs": [
|
|
1206
|
+
{
|
|
1207
|
+
"internalType": "address",
|
|
1208
|
+
"name": "_rewardToken",
|
|
1209
|
+
"type": "address"
|
|
1210
|
+
},
|
|
1211
|
+
{
|
|
1212
|
+
"internalType": "uint256",
|
|
1213
|
+
"name": "_pid",
|
|
1214
|
+
"type": "uint256"
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
"internalType": "address",
|
|
1218
|
+
"name": "_user",
|
|
1219
|
+
"type": "address"
|
|
1220
|
+
}
|
|
1221
|
+
],
|
|
1222
|
+
"name": "pendingWithdrawalsBeforeUpgrade",
|
|
1223
|
+
"outputs": [
|
|
1224
|
+
{
|
|
1225
|
+
"internalType": "uint256",
|
|
1226
|
+
"name": "beforeUpgradeWithdrawalAmount",
|
|
1227
|
+
"type": "uint256"
|
|
1228
|
+
}
|
|
1229
|
+
],
|
|
1230
|
+
"payable": false,
|
|
1231
|
+
"stateMutability": "view",
|
|
1232
|
+
"type": "function"
|
|
1233
|
+
},
|
|
1234
|
+
{
|
|
1235
|
+
"constant": true,
|
|
1236
|
+
"inputs": [],
|
|
1237
|
+
"name": "pendingXVSVaultImplementation",
|
|
1238
|
+
"outputs": [
|
|
1239
|
+
{
|
|
1240
|
+
"internalType": "address",
|
|
1241
|
+
"name": "",
|
|
1242
|
+
"type": "address"
|
|
1243
|
+
}
|
|
1244
|
+
],
|
|
1245
|
+
"payable": false,
|
|
1246
|
+
"stateMutability": "view",
|
|
1247
|
+
"type": "function"
|
|
1248
|
+
},
|
|
1249
|
+
{
|
|
1250
|
+
"constant": true,
|
|
1251
|
+
"inputs": [
|
|
1252
|
+
{
|
|
1253
|
+
"internalType": "address",
|
|
1254
|
+
"name": "",
|
|
1255
|
+
"type": "address"
|
|
1256
|
+
},
|
|
1257
|
+
{
|
|
1258
|
+
"internalType": "uint256",
|
|
1259
|
+
"name": "",
|
|
1260
|
+
"type": "uint256"
|
|
1261
|
+
}
|
|
1262
|
+
],
|
|
1263
|
+
"name": "poolInfos",
|
|
1264
|
+
"outputs": [
|
|
1265
|
+
{
|
|
1266
|
+
"internalType": "contract IBEP20",
|
|
1267
|
+
"name": "token",
|
|
1268
|
+
"type": "address"
|
|
1269
|
+
},
|
|
1270
|
+
{
|
|
1271
|
+
"internalType": "uint256",
|
|
1272
|
+
"name": "allocPoint",
|
|
1273
|
+
"type": "uint256"
|
|
1274
|
+
},
|
|
1275
|
+
{
|
|
1276
|
+
"internalType": "uint256",
|
|
1277
|
+
"name": "lastRewardBlockOrSecond",
|
|
1278
|
+
"type": "uint256"
|
|
1279
|
+
},
|
|
1280
|
+
{
|
|
1281
|
+
"internalType": "uint256",
|
|
1282
|
+
"name": "accRewardPerShare",
|
|
1283
|
+
"type": "uint256"
|
|
1284
|
+
},
|
|
1285
|
+
{
|
|
1286
|
+
"internalType": "uint256",
|
|
1287
|
+
"name": "lockPeriod",
|
|
1288
|
+
"type": "uint256"
|
|
1289
|
+
}
|
|
1290
|
+
],
|
|
1291
|
+
"payable": false,
|
|
1292
|
+
"stateMutability": "view",
|
|
1293
|
+
"type": "function"
|
|
1294
|
+
},
|
|
1295
|
+
{
|
|
1296
|
+
"constant": true,
|
|
1297
|
+
"inputs": [
|
|
1298
|
+
{
|
|
1299
|
+
"internalType": "address",
|
|
1300
|
+
"name": "rewardToken",
|
|
1301
|
+
"type": "address"
|
|
1302
|
+
}
|
|
1303
|
+
],
|
|
1304
|
+
"name": "poolLength",
|
|
1305
|
+
"outputs": [
|
|
1306
|
+
{
|
|
1307
|
+
"internalType": "uint256",
|
|
1308
|
+
"name": "",
|
|
1309
|
+
"type": "uint256"
|
|
1310
|
+
}
|
|
1311
|
+
],
|
|
1312
|
+
"payable": false,
|
|
1313
|
+
"stateMutability": "view",
|
|
1314
|
+
"type": "function"
|
|
1315
|
+
},
|
|
1316
|
+
{
|
|
1317
|
+
"constant": true,
|
|
1318
|
+
"inputs": [],
|
|
1319
|
+
"name": "primePoolId",
|
|
1320
|
+
"outputs": [
|
|
1321
|
+
{
|
|
1322
|
+
"internalType": "uint256",
|
|
1323
|
+
"name": "",
|
|
1324
|
+
"type": "uint256"
|
|
1325
|
+
}
|
|
1326
|
+
],
|
|
1327
|
+
"payable": false,
|
|
1328
|
+
"stateMutability": "view",
|
|
1329
|
+
"type": "function"
|
|
1330
|
+
},
|
|
1331
|
+
{
|
|
1332
|
+
"constant": true,
|
|
1333
|
+
"inputs": [],
|
|
1334
|
+
"name": "primeRewardToken",
|
|
1335
|
+
"outputs": [
|
|
1336
|
+
{
|
|
1337
|
+
"internalType": "address",
|
|
1338
|
+
"name": "",
|
|
1339
|
+
"type": "address"
|
|
1340
|
+
}
|
|
1341
|
+
],
|
|
1342
|
+
"payable": false,
|
|
1343
|
+
"stateMutability": "view",
|
|
1344
|
+
"type": "function"
|
|
1345
|
+
},
|
|
1346
|
+
{
|
|
1347
|
+
"constant": true,
|
|
1348
|
+
"inputs": [],
|
|
1349
|
+
"name": "primeToken",
|
|
1350
|
+
"outputs": [
|
|
1351
|
+
{
|
|
1352
|
+
"internalType": "contract IPrime",
|
|
1353
|
+
"name": "",
|
|
1354
|
+
"type": "address"
|
|
1355
|
+
}
|
|
1356
|
+
],
|
|
1357
|
+
"payable": false,
|
|
1358
|
+
"stateMutability": "view",
|
|
1359
|
+
"type": "function"
|
|
1360
|
+
},
|
|
1361
|
+
{
|
|
1362
|
+
"constant": false,
|
|
1363
|
+
"inputs": [
|
|
1364
|
+
{
|
|
1365
|
+
"internalType": "address",
|
|
1366
|
+
"name": "_rewardToken",
|
|
1367
|
+
"type": "address"
|
|
1368
|
+
},
|
|
1369
|
+
{
|
|
1370
|
+
"internalType": "uint256",
|
|
1371
|
+
"name": "_pid",
|
|
1372
|
+
"type": "uint256"
|
|
1373
|
+
},
|
|
1374
|
+
{
|
|
1375
|
+
"internalType": "uint256",
|
|
1376
|
+
"name": "_amount",
|
|
1377
|
+
"type": "uint256"
|
|
1378
|
+
}
|
|
1379
|
+
],
|
|
1380
|
+
"name": "requestWithdrawal",
|
|
1381
|
+
"outputs": [],
|
|
1382
|
+
"payable": false,
|
|
1383
|
+
"stateMutability": "nonpayable",
|
|
1384
|
+
"type": "function"
|
|
1385
|
+
},
|
|
1386
|
+
{
|
|
1387
|
+
"constant": false,
|
|
1388
|
+
"inputs": [],
|
|
1389
|
+
"name": "resume",
|
|
1390
|
+
"outputs": [],
|
|
1391
|
+
"payable": false,
|
|
1392
|
+
"stateMutability": "nonpayable",
|
|
1393
|
+
"type": "function"
|
|
1394
|
+
},
|
|
1395
|
+
{
|
|
1396
|
+
"constant": true,
|
|
1397
|
+
"inputs": [
|
|
1398
|
+
{
|
|
1399
|
+
"internalType": "address",
|
|
1400
|
+
"name": "_rewardToken",
|
|
1401
|
+
"type": "address"
|
|
1402
|
+
}
|
|
1403
|
+
],
|
|
1404
|
+
"name": "rewardTokenAmountsPerBlock",
|
|
1405
|
+
"outputs": [
|
|
1406
|
+
{
|
|
1407
|
+
"internalType": "uint256",
|
|
1408
|
+
"name": "",
|
|
1409
|
+
"type": "uint256"
|
|
1410
|
+
}
|
|
1411
|
+
],
|
|
1412
|
+
"payable": false,
|
|
1413
|
+
"stateMutability": "view",
|
|
1414
|
+
"type": "function"
|
|
1415
|
+
},
|
|
1416
|
+
{
|
|
1417
|
+
"constant": true,
|
|
1418
|
+
"inputs": [
|
|
1419
|
+
{
|
|
1420
|
+
"internalType": "address",
|
|
1421
|
+
"name": "",
|
|
1422
|
+
"type": "address"
|
|
1423
|
+
}
|
|
1424
|
+
],
|
|
1425
|
+
"name": "rewardTokenAmountsPerBlockOrSecond",
|
|
1426
|
+
"outputs": [
|
|
1427
|
+
{
|
|
1428
|
+
"internalType": "uint256",
|
|
1429
|
+
"name": "",
|
|
1430
|
+
"type": "uint256"
|
|
1431
|
+
}
|
|
1432
|
+
],
|
|
1433
|
+
"payable": false,
|
|
1434
|
+
"stateMutability": "view",
|
|
1435
|
+
"type": "function"
|
|
1436
|
+
},
|
|
1437
|
+
{
|
|
1438
|
+
"constant": false,
|
|
1439
|
+
"inputs": [
|
|
1440
|
+
{
|
|
1441
|
+
"internalType": "address",
|
|
1442
|
+
"name": "_rewardToken",
|
|
1443
|
+
"type": "address"
|
|
1444
|
+
},
|
|
1445
|
+
{
|
|
1446
|
+
"internalType": "uint256",
|
|
1447
|
+
"name": "_pid",
|
|
1448
|
+
"type": "uint256"
|
|
1449
|
+
},
|
|
1450
|
+
{
|
|
1451
|
+
"internalType": "uint256",
|
|
1452
|
+
"name": "_allocPoint",
|
|
1453
|
+
"type": "uint256"
|
|
1454
|
+
}
|
|
1455
|
+
],
|
|
1456
|
+
"name": "set",
|
|
1457
|
+
"outputs": [],
|
|
1458
|
+
"payable": false,
|
|
1459
|
+
"stateMutability": "nonpayable",
|
|
1460
|
+
"type": "function"
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
"constant": false,
|
|
1464
|
+
"inputs": [
|
|
1465
|
+
{
|
|
1466
|
+
"internalType": "address",
|
|
1467
|
+
"name": "newAccessControlAddress",
|
|
1468
|
+
"type": "address"
|
|
1469
|
+
}
|
|
1470
|
+
],
|
|
1471
|
+
"name": "setAccessControl",
|
|
1472
|
+
"outputs": [],
|
|
1473
|
+
"payable": false,
|
|
1474
|
+
"stateMutability": "nonpayable",
|
|
1475
|
+
"type": "function"
|
|
1476
|
+
},
|
|
1477
|
+
{
|
|
1478
|
+
"constant": false,
|
|
1479
|
+
"inputs": [
|
|
1480
|
+
{
|
|
1481
|
+
"internalType": "contract IPrime",
|
|
1482
|
+
"name": "_primeToken",
|
|
1483
|
+
"type": "address"
|
|
1484
|
+
},
|
|
1485
|
+
{
|
|
1486
|
+
"internalType": "address",
|
|
1487
|
+
"name": "_primeRewardToken",
|
|
1488
|
+
"type": "address"
|
|
1489
|
+
},
|
|
1490
|
+
{
|
|
1491
|
+
"internalType": "uint256",
|
|
1492
|
+
"name": "_primePoolId",
|
|
1493
|
+
"type": "uint256"
|
|
1494
|
+
}
|
|
1495
|
+
],
|
|
1496
|
+
"name": "setPrimeToken",
|
|
1497
|
+
"outputs": [],
|
|
1498
|
+
"payable": false,
|
|
1499
|
+
"stateMutability": "nonpayable",
|
|
1500
|
+
"type": "function"
|
|
1501
|
+
},
|
|
1502
|
+
{
|
|
1503
|
+
"constant": false,
|
|
1504
|
+
"inputs": [
|
|
1505
|
+
{
|
|
1506
|
+
"internalType": "address",
|
|
1507
|
+
"name": "_rewardToken",
|
|
1508
|
+
"type": "address"
|
|
1509
|
+
},
|
|
1510
|
+
{
|
|
1511
|
+
"internalType": "uint256",
|
|
1512
|
+
"name": "_rewardAmount",
|
|
1513
|
+
"type": "uint256"
|
|
1514
|
+
}
|
|
1515
|
+
],
|
|
1516
|
+
"name": "setRewardAmountPerBlockOrSecond",
|
|
1517
|
+
"outputs": [],
|
|
1518
|
+
"payable": false,
|
|
1519
|
+
"stateMutability": "nonpayable",
|
|
1520
|
+
"type": "function"
|
|
1521
|
+
},
|
|
1522
|
+
{
|
|
1523
|
+
"constant": false,
|
|
1524
|
+
"inputs": [
|
|
1525
|
+
{
|
|
1526
|
+
"internalType": "address",
|
|
1527
|
+
"name": "_rewardToken",
|
|
1528
|
+
"type": "address"
|
|
1529
|
+
},
|
|
1530
|
+
{
|
|
1531
|
+
"internalType": "uint256",
|
|
1532
|
+
"name": "_pid",
|
|
1533
|
+
"type": "uint256"
|
|
1534
|
+
},
|
|
1535
|
+
{
|
|
1536
|
+
"internalType": "uint256",
|
|
1537
|
+
"name": "_newPeriod",
|
|
1538
|
+
"type": "uint256"
|
|
1539
|
+
}
|
|
1540
|
+
],
|
|
1541
|
+
"name": "setWithdrawalLockingPeriod",
|
|
1542
|
+
"outputs": [],
|
|
1543
|
+
"payable": false,
|
|
1544
|
+
"stateMutability": "nonpayable",
|
|
1545
|
+
"type": "function"
|
|
1546
|
+
},
|
|
1547
|
+
{
|
|
1548
|
+
"constant": false,
|
|
1549
|
+
"inputs": [
|
|
1550
|
+
{
|
|
1551
|
+
"internalType": "address",
|
|
1552
|
+
"name": "_xvs",
|
|
1553
|
+
"type": "address"
|
|
1554
|
+
},
|
|
1555
|
+
{
|
|
1556
|
+
"internalType": "address",
|
|
1557
|
+
"name": "_xvsStore",
|
|
1558
|
+
"type": "address"
|
|
1559
|
+
}
|
|
1560
|
+
],
|
|
1561
|
+
"name": "setXvsStore",
|
|
1562
|
+
"outputs": [],
|
|
1563
|
+
"payable": false,
|
|
1564
|
+
"stateMutability": "nonpayable",
|
|
1565
|
+
"type": "function"
|
|
1566
|
+
},
|
|
1567
|
+
{
|
|
1568
|
+
"constant": true,
|
|
1569
|
+
"inputs": [
|
|
1570
|
+
{
|
|
1571
|
+
"internalType": "address",
|
|
1572
|
+
"name": "",
|
|
1573
|
+
"type": "address"
|
|
1574
|
+
}
|
|
1575
|
+
],
|
|
1576
|
+
"name": "totalAllocPoints",
|
|
1577
|
+
"outputs": [
|
|
1578
|
+
{
|
|
1579
|
+
"internalType": "uint256",
|
|
1580
|
+
"name": "",
|
|
1581
|
+
"type": "uint256"
|
|
1582
|
+
}
|
|
1583
|
+
],
|
|
1584
|
+
"payable": false,
|
|
1585
|
+
"stateMutability": "view",
|
|
1586
|
+
"type": "function"
|
|
1587
|
+
},
|
|
1588
|
+
{
|
|
1589
|
+
"constant": true,
|
|
1590
|
+
"inputs": [
|
|
1591
|
+
{
|
|
1592
|
+
"internalType": "address",
|
|
1593
|
+
"name": "",
|
|
1594
|
+
"type": "address"
|
|
1595
|
+
},
|
|
1596
|
+
{
|
|
1597
|
+
"internalType": "uint256",
|
|
1598
|
+
"name": "",
|
|
1599
|
+
"type": "uint256"
|
|
1600
|
+
}
|
|
1601
|
+
],
|
|
1602
|
+
"name": "totalPendingWithdrawals",
|
|
1603
|
+
"outputs": [
|
|
1604
|
+
{
|
|
1605
|
+
"internalType": "uint256",
|
|
1606
|
+
"name": "",
|
|
1607
|
+
"type": "uint256"
|
|
1608
|
+
}
|
|
1609
|
+
],
|
|
1610
|
+
"payable": false,
|
|
1611
|
+
"stateMutability": "view",
|
|
1612
|
+
"type": "function"
|
|
1613
|
+
},
|
|
1614
|
+
{
|
|
1615
|
+
"constant": false,
|
|
1616
|
+
"inputs": [
|
|
1617
|
+
{
|
|
1618
|
+
"internalType": "address",
|
|
1619
|
+
"name": "_rewardToken",
|
|
1620
|
+
"type": "address"
|
|
1621
|
+
},
|
|
1622
|
+
{
|
|
1623
|
+
"internalType": "uint256",
|
|
1624
|
+
"name": "_pid",
|
|
1625
|
+
"type": "uint256"
|
|
1626
|
+
}
|
|
1627
|
+
],
|
|
1628
|
+
"name": "updatePool",
|
|
1629
|
+
"outputs": [],
|
|
1630
|
+
"payable": false,
|
|
1631
|
+
"stateMutability": "nonpayable",
|
|
1632
|
+
"type": "function"
|
|
1633
|
+
},
|
|
1634
|
+
{
|
|
1635
|
+
"constant": true,
|
|
1636
|
+
"inputs": [],
|
|
1637
|
+
"name": "vaultPaused",
|
|
1638
|
+
"outputs": [
|
|
1639
|
+
{
|
|
1640
|
+
"internalType": "bool",
|
|
1641
|
+
"name": "",
|
|
1642
|
+
"type": "bool"
|
|
1643
|
+
}
|
|
1644
|
+
],
|
|
1645
|
+
"payable": false,
|
|
1646
|
+
"stateMutability": "view",
|
|
1647
|
+
"type": "function"
|
|
1648
|
+
},
|
|
1649
|
+
{
|
|
1650
|
+
"constant": true,
|
|
1651
|
+
"inputs": [],
|
|
1652
|
+
"name": "xvsAddress",
|
|
1653
|
+
"outputs": [
|
|
1654
|
+
{
|
|
1655
|
+
"internalType": "address",
|
|
1656
|
+
"name": "",
|
|
1657
|
+
"type": "address"
|
|
1658
|
+
}
|
|
1659
|
+
],
|
|
1660
|
+
"payable": false,
|
|
1661
|
+
"stateMutability": "view",
|
|
1662
|
+
"type": "function"
|
|
1663
|
+
},
|
|
1664
|
+
{
|
|
1665
|
+
"constant": true,
|
|
1666
|
+
"inputs": [],
|
|
1667
|
+
"name": "xvsStore",
|
|
1668
|
+
"outputs": [
|
|
1669
|
+
{
|
|
1670
|
+
"internalType": "address",
|
|
1671
|
+
"name": "",
|
|
1672
|
+
"type": "address"
|
|
1673
|
+
}
|
|
1674
|
+
],
|
|
1675
|
+
"payable": false,
|
|
1676
|
+
"stateMutability": "view",
|
|
1677
|
+
"type": "function"
|
|
1678
|
+
}
|
|
1679
|
+
],
|
|
1680
|
+
"transactionHash": "0x93af27acf4459800430939e35a93c54248e70b9e577727737c4dfd6f0ab5773e",
|
|
1681
|
+
"receipt": {
|
|
1682
|
+
"to": null,
|
|
1683
|
+
"from": "0xdB7a865041d965f575CAB277783fF490508A21F3",
|
|
1684
|
+
"contractAddress": "0x322F1a2E03F089F8ce510855e793970D6f0EFcF9",
|
|
1685
|
+
"transactionIndex": 63,
|
|
1686
|
+
"gasUsed": "4916687",
|
|
1687
|
+
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
1688
|
+
"blockHash": "0xb37688143997753c14dff3918f5f7c2ae4d76ea67d45b8b4cc95ce9c073cd045",
|
|
1689
|
+
"transactionHash": "0x93af27acf4459800430939e35a93c54248e70b9e577727737c4dfd6f0ab5773e",
|
|
1690
|
+
"logs": [],
|
|
1691
|
+
"blockNumber": 23341146,
|
|
1692
|
+
"cumulativeGasUsed": "18704969",
|
|
1693
|
+
"status": 1,
|
|
1694
|
+
"byzantium": true
|
|
1695
|
+
},
|
|
1696
|
+
"args": [],
|
|
1697
|
+
"numDeployments": 1,
|
|
1698
|
+
"solcInputHash": "a2594572bdae270af6749f50c8019b6c",
|
|
1699
|
+
"metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Claim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\"}],\"name\":\"DelegateChangedV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"DelegateVotesChangedV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ExecutedWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAccessControlManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControlManager\",\"type\":\"address\"}],\"name\":\"NewAccessControlManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IPrime\",\"name\":\"oldPrimeToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IPrime\",\"name\":\"newPrimeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldPrimeRewardToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newPrimeRewardToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPrimePoolId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPrimePoolId\",\"type\":\"uint256\"}],\"name\":\"NewPrimeToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allocPoints\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardPerBlockOrSecond\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lockPeriod\",\"type\":\"uint256\"}],\"name\":\"PoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldAllocPoints\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAllocPoints\",\"type\":\"uint256\"}],\"name\":\"PoolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RequestedWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReward\",\"type\":\"uint256\"}],\"name\":\"RewardAmountUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldXvs\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldStore\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newXvs\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newStore\",\"type\":\"address\"}],\"name\":\"StoreUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldOwedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newOwedAmount\",\"type\":\"uint256\"}],\"name\":\"VaultDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"VaultPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"VaultResumed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"WithdrawalLockingPeriodUpdated\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DELEGATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOMAIN_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_LOCK_PERIOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"SECONDS_PER_YEAR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract XVSVaultProxy\",\"name\":\"xvsVaultProxy\",\"type\":\"address\"}],\"name\":\"_become\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"accessControlManager\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV5\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"contract IBEP20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rewardPerBlockOrSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lockPeriod\",\"type\":\"uint256\"}],\"name\":\"add\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"blocksOrSecondsPerYear\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"checkpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"fromBlockOrSecond\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"votes\",\"type\":\"uint96\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"}],\"name\":\"claim\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"delegateBySig\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"}],\"name\":\"executeWithdrawal\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getBlockNumberOrTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getCurrentVotes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getEligibleWithdrawalAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"withdrawalAmount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockNumberOrSecond\",\"type\":\"uint256\"}],\"name\":\"getPriorVotes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getRequestedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getUserInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rewardDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pendingWithdrawals\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getWithdrawalRequests\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"lockedUntil\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"afterUpgrade\",\"type\":\"uint128\"}],\"internalType\":\"struct XVSVaultStorageV1.WithdrawalRequest[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bool\",\"name\":\"timeBased_\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"blocksPerYear_\",\"type\":\"uint256\"}],\"name\":\"initializeTimeManager\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isStakedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isTimeBased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"numCheckpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"pendingReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingRewardTransfers\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"pendingWithdrawalsBeforeUpgrade\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"beforeUpgradeWithdrawalAmount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pendingXVSVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"poolInfos\",\"outputs\":[{\"internalType\":\"contract IBEP20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastRewardBlockOrSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accRewardPerShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lockPeriod\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"}],\"name\":\"poolLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"primePoolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"primeRewardToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"primeToken\",\"outputs\":[{\"internalType\":\"contract IPrime\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"requestWithdrawal\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"}],\"name\":\"rewardTokenAmountsPerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardTokenAmountsPerBlockOrSecond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_allocPoint\",\"type\":\"uint256\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAccessControlAddress\",\"type\":\"address\"}],\"name\":\"setAccessControl\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract IPrime\",\"name\":\"_primeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_primeRewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_primePoolId\",\"type\":\"uint256\"}],\"name\":\"setPrimeToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rewardAmount\",\"type\":\"uint256\"}],\"name\":\"setRewardAmountPerBlockOrSecond\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"setWithdrawalLockingPeriod\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_xvs\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_xvsStore\",\"type\":\"address\"}],\"name\":\"setXvsStore\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"totalAllocPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"totalPendingWithdrawals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"}],\"name\":\"updatePool\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"vaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"xvsAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"xvsStore\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"methods\":{\"add(address,uint256,address,uint256,uint256)\":{\"details\":\"This vault DOES NOT support deflationary tokens \\u2014 it expects that the amount of transferred tokens would equal the actually deposited amount. In practice this means that this vault DOES NOT support USDT and similar tokens (that do not provide these guarantees).\",\"params\":{\"_allocPoint\":\"Number of allocation points assigned to this pool\",\"_lockPeriod\":\"A period between withdrawal request and a moment when it's executable\",\"_rewardPerBlockOrSecond\":\"Initial reward per block or second, in terms of _rewardToken\",\"_rewardToken\":\"Reward token address\",\"_token\":\"Staked token\"}},\"claim(address,address,uint256)\":{\"params\":{\"_account\":\"The account for which to claim rewards\",\"_pid\":\"The Pool Index\",\"_rewardToken\":\"The Reward Token Address\"}},\"delegate(address)\":{\"params\":{\"delegatee\":\"The address to delegate votes to\"}},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"delegatee\":\"The address to delegate votes to\",\"expiry\":\"The time at which to expire the signature\",\"nonce\":\"The contract state required to match the signature\",\"r\":\"Half of the ECDSA signature pair\",\"s\":\"Half of the ECDSA signature pair\",\"v\":\"The recovery byte of the signature\"}},\"deposit(address,uint256,uint256)\":{\"params\":{\"_amount\":\"The amount to deposit to vault\",\"_pid\":\"The Pool Index\",\"_rewardToken\":\"The Reward Token Address\"}},\"executeWithdrawal(address,uint256)\":{\"params\":{\"_pid\":\"The Pool Index\",\"_rewardToken\":\"The Reward Token Address\"}},\"getBlockNumberOrTimestamp()\":{\"details\":\"Function to simply retrieve block number or block timestamp\",\"return\":\"Current block number or block timestamp\"},\"getCurrentVotes(address)\":{\"params\":{\"account\":\"The address to get votes balance\"},\"return\":\"The number of current votes for `account`\"},\"getEligibleWithdrawalAmount(address,uint256,address)\":{\"params\":{\"_pid\":\"The Pool Index\",\"_rewardToken\":\"The Reward Token Address\",\"_user\":\"The User Address\"},\"return\":\"withdrawalAmount Amount that the user can withdraw\"},\"getPriorVotes(address,uint256)\":{\"params\":{\"account\":\"The address of the account to check\",\"blockNumberOrSecond\":\"The block number or second to get the vote balance at\"},\"return\":\"The balance that user staked\"},\"getRequestedAmount(address,uint256,address)\":{\"params\":{\"_pid\":\"The Pool Index\",\"_rewardToken\":\"The Reward Token Address\",\"_user\":\"The User Address\"},\"return\":\"Total amount of requested but not yet executed withdrawals (including both executable and locked ones)\"},\"getUserInfo(address,uint256,address)\":{\"params\":{\"_pid\":\"Pool index\",\"_rewardToken\":\"Reward token address\",\"_user\":\"User address\"},\"return\":\"amount Deposited amountrewardDebt Reward debt (technical value used to track past payouts)pendingWithdrawals Requested but not yet executed withdrawals\"},\"getWithdrawalRequests(address,uint256,address)\":{\"params\":{\"_pid\":\"The Pool Index\",\"_rewardToken\":\"The Reward Token Address\",\"_user\":\"The User Address\"},\"return\":\"An array of withdrawal requests\"},\"initializeTimeManager(bool,uint256)\":{\"details\":\"Initializes the contract to use either blocks or seconds\",\"params\":{\"blocksPerYear_\":\"The number of blocks per year\",\"timeBased_\":\"A boolean indicating whether the contract is based on time or block If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\"}},\"pendingReward(address,uint256,address)\":{\"params\":{\"_pid\":\"Pool index\",\"_rewardToken\":\"Reward token address\",\"_user\":\"User address\"},\"return\":\"Reward the user is eligible for in this pool, in terms of _rewardToken\"},\"pendingWithdrawalsBeforeUpgrade(address,uint256,address)\":{\"params\":{\"_pid\":\"The Pool Index\",\"_rewardToken\":\"The Reward Token Address\",\"_user\":\"The address of the user\"},\"return\":\"beforeUpgradeWithdrawalAmount Total pending withdrawal amount in requests made before the vault upgrade\"},\"poolLength(address)\":{\"params\":{\"rewardToken\":\"Reward token address\"},\"return\":\"Number of pools that distribute the specified token as a reward\"},\"requestWithdrawal(address,uint256,uint256)\":{\"params\":{\"_amount\":\"The amount to withdraw from the vault\",\"_pid\":\"The Pool Index\",\"_rewardToken\":\"The Reward Token Address\"}},\"rewardTokenAmountsPerBlock(address)\":{\"params\":{\"_rewardToken\":\"Reward token address\"},\"return\":\"Number of reward tokens created per block or second\"},\"set(address,uint256,uint256)\":{\"params\":{\"_allocPoint\":\"Number of allocation points assigned to this pool\",\"_pid\":\"Pool index\",\"_rewardToken\":\"Reward token address\"}},\"setAccessControl(address)\":{\"details\":\"Admin function to set the access control address\",\"params\":{\"newAccessControlAddress\":\"New address for the access control\"}},\"setPrimeToken(address,address,uint256)\":{\"params\":{\"_primePoolId\":\"pool id for reward\",\"_primeRewardToken\":\"address of reward token\",\"_primeToken\":\"address of the prime token contract\"}},\"setRewardAmountPerBlockOrSecond(address,uint256)\":{\"params\":{\"_rewardAmount\":\"Number of allocation points assigned to this pool\",\"_rewardToken\":\"Reward token address\"}},\"setWithdrawalLockingPeriod(address,uint256,uint256)\":{\"params\":{\"_newPeriod\":\"New lock period\",\"_pid\":\"Pool index\",\"_rewardToken\":\"Reward token address\"}},\"updatePool(address,uint256)\":{\"params\":{\"_pid\":\"Pool index\",\"_rewardToken\":\"Reward token address\"}}},\"title\":\"XVS Vault\"},\"userdoc\":{\"methods\":{\"_become(address)\":{\"notice\":\"* Admin Functions **\"},\"accessControlManager()\":{\"notice\":\"Returns the address of the access control manager contract\"},\"add(address,uint256,address,uint256,uint256)\":{\"notice\":\"Add a new token pool\"},\"claim(address,address,uint256)\":{\"notice\":\"Claim rewards for pool\"},\"constructor\":\"XVSVault constructor\",\"delegate(address)\":{\"notice\":\"Delegate votes from `msg.sender` to `delegatee`\"},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates votes from signatory to `delegatee`\"},\"deposit(address,uint256,uint256)\":{\"notice\":\"Deposit XVSVault for XVS allocation\"},\"executeWithdrawal(address,uint256)\":{\"notice\":\"Execute withdrawal to XVSVault for XVS allocation\"},\"getCurrentVotes(address)\":{\"notice\":\"Gets the current votes balance for `account`\"},\"getEligibleWithdrawalAmount(address,uint256,address)\":{\"notice\":\"Get unlocked withdrawal amount\"},\"getPriorVotes(address,uint256)\":{\"notice\":\"Determine the xvs stake balance for an account\"},\"getRequestedAmount(address,uint256,address)\":{\"notice\":\"Get requested amount\"},\"getUserInfo(address,uint256,address)\":{\"notice\":\"Get user info with reward token address and pid\"},\"getWithdrawalRequests(address,uint256,address)\":{\"notice\":\"Returns the array of withdrawal requests that have not been executed yet\"},\"pause()\":{\"notice\":\"Pauses vault\"},\"pendingReward(address,uint256,address)\":{\"notice\":\"View function to see pending XVSs on frontend\"},\"pendingWithdrawalsBeforeUpgrade(address,uint256,address)\":{\"notice\":\"Gets the total pending withdrawal amount of a user before upgrade\"},\"poolLength(address)\":{\"notice\":\"Returns the number of pools with the specified reward token\"},\"requestWithdrawal(address,uint256,uint256)\":{\"notice\":\"Request withdrawal to XVSVault for XVS allocation\"},\"resume()\":{\"notice\":\"Resume vault\"},\"rewardTokenAmountsPerBlock(address)\":{\"notice\":\"Returns the number of reward tokens created per block or second\"},\"set(address,uint256,uint256)\":{\"notice\":\"Update the given pool's reward allocation point\"},\"setAccessControl(address)\":{\"notice\":\"Sets the address of the access control of this contract\"},\"setPrimeToken(address,address,uint256)\":{\"notice\":\"Sets the address of the prime token contract\"},\"setRewardAmountPerBlockOrSecond(address,uint256)\":{\"notice\":\"Update the given reward token's amount per block or second\"},\"setWithdrawalLockingPeriod(address,uint256,uint256)\":{\"notice\":\"Update the lock period after which a requested withdrawal can be executed\"},\"updatePool(address,uint256)\":{\"notice\":\"Update reward variables of the given pool to be up-to-date\"}},\"notice\":\"The XVS Vault allows XVS holders to lock their XVS to recieve voting rights in Venus governance and are rewarded with XVS.\"}},\"settings\":{\"compilationTarget\":{\"contracts/XVSVault/XVSVault.sol\":\"XVSVault\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV5.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.5.16;\\n\\nimport \\\"./IAccessControlManagerV5.sol\\\";\\n\\n/**\\n * @title AccessControlledV5\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.5.16)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\ncontract AccessControlledV5 {\\n /// @notice Access control manager contract\\n IAccessControlManagerV5 private _accessControlManager;\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n\\n /// @notice Emitted when access control manager contract address is changed\\n event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n /**\\n * @notice Returns the address of the access control manager contract\\n */\\n function accessControlManager() external view returns (IAccessControlManagerV5) {\\n return _accessControlManager;\\n }\\n\\n /**\\n * @dev Internal function to set address of AccessControlManager\\n * @param accessControlManager_ The new address of the AccessControlManager\\n */\\n function _setAccessControlManager(address accessControlManager_) internal {\\n require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n address oldAccessControlManager = address(_accessControlManager);\\n _accessControlManager = IAccessControlManagerV5(accessControlManager_);\\n emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n }\\n\\n /**\\n * @notice Reverts if the call is not allowed by AccessControlManager\\n * @param signature Method signature\\n */\\n function _checkAccessAllowed(string memory signature) internal view {\\n bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n if (!isAllowedToCall) {\\n revert(\\\"Unauthorized\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x4b724928650b944935bc91713782a8cf5bbd9cdb98b3e3fedf31e611c7e6df19\"},\"@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV5.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.5.16;\\n\\n/**\\n * @title IAccessControlManagerV5\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV5` contract.\\n */\\ninterface IAccessControlManagerV5 {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n\\n /**\\n * @notice Gives a function call permission to one single account\\n * @dev this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE\\n * \\t\\tMay emit a {RoleGranted} event.\\n * @param contractAddress address of contract for which call permissions will be granted\\n * @param functionSig signature e.g. \\\"functionName(uint,bool)\\\"\\n */\\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n /**\\n * @notice Revokes an account's permission to a particular function call\\n * @dev this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE\\n * \\t\\tMay emit a {RoleRevoked} event.\\n * @param contractAddress address of contract for which call permissions will be revoked\\n * @param functionSig signature e.g. \\\"functionName(uint,bool)\\\"\\n */\\n function revokeCallPermission(\\n address contractAddress,\\n string calldata functionSig,\\n address accountToRevoke\\n ) external;\\n\\n /**\\n * @notice Verifies if the given account can call a praticular contract's function\\n * @dev Since the contract is calling itself this function, we can get contracts address with msg.sender\\n * @param account address (eoa or contract) for which call permissions will be checked\\n * @param functionSig signature e.g. \\\"functionName(uint,bool)\\\"\\n * @return false if the user account cannot call the particular contract function\\n *\\n */\\n function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n function hasPermission(\\n address account,\\n address contractAddress,\\n string calldata functionSig\\n ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x3563db4c75f7aa0b8a982bab591907dda192438a2368511b62a9c587a3e54226\"},\"@venusprotocol/solidity-utilities/contracts/TimeManagerV5.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.5.16;\\n\\ncontract TimeManagerV5 {\\n /// @dev The approximate number of seconds per year\\n uint256 public constant SECONDS_PER_YEAR = 31_536_000;\\n\\n /// @notice Number of blocks per year or seconds per year\\n uint256 public blocksOrSecondsPerYear;\\n\\n /// @dev Sets true when block timestamp is used\\n bool public isTimeBased;\\n\\n /// @dev Sets true when contract is initialized\\n bool private isInitialized;\\n\\n /// @notice Deprecated slot for _getCurrentSlot function pointer\\n bytes8 private __deprecatedSlot1;\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[48] private __gap;\\n\\n /**\\n * @dev Function to simply retrieve block number or block timestamp\\n * @return Current block number or block timestamp\\n */\\n function getBlockNumberOrTimestamp() public view returns (uint256) {\\n return isTimeBased ? _getBlockTimestamp() : _getBlockNumber();\\n }\\n\\n /**\\n * @dev Initializes the contract to use either blocks or seconds\\n * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n * @param blocksPerYear_ The number of blocks per year\\n */\\n function _initializeTimeManager(bool timeBased_, uint256 blocksPerYear_) internal {\\n if (isInitialized) revert(\\\"Already initialized TimeManager\\\");\\n\\n if (!timeBased_ && blocksPerYear_ == 0) {\\n revert(\\\"Invalid blocks per year\\\");\\n }\\n if (timeBased_ && blocksPerYear_ != 0) {\\n revert(\\\"Invalid time based configuration\\\");\\n }\\n\\n isTimeBased = timeBased_;\\n blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;\\n isInitialized = true;\\n }\\n\\n /**\\n * @dev Returns the current timestamp in seconds\\n * @return The current timestamp\\n */\\n function _getBlockTimestamp() private view returns (uint256) {\\n return block.timestamp;\\n }\\n\\n /**\\n * @dev Returns the current block number\\n * @return The current block number\\n */\\n function _getBlockNumber() private view returns (uint256) {\\n return block.number;\\n }\\n}\\n\",\"keccak256\":\"0x0d35813e9a6d4fe7cf466466573ca12b6b378cad8f6da0b36b13e0d428a757f0\"},\"contracts/Tokens/Prime/IPrime.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title IPrime\\n * @author Venus\\n * @notice Interface for Prime Token\\n */\\ninterface IPrime {\\n /**\\n * @notice Executed by XVSVault whenever user's XVSVault balance changes\\n * @param user the account address whose balance was updated\\n */\\n function xvsUpdated(address user) external;\\n\\n /**\\n * @notice accrues interest and updates score for an user for a specific market\\n * @param user the account address for which to accrue interest and update score\\n * @param market the market for which to accrue interest and update score\\n */\\n function accrueInterestAndUpdateScore(address user, address market) external;\\n\\n /**\\n * @notice Distributes income from market since last distribution\\n * @param vToken the market for which to distribute the income\\n */\\n function accrueInterest(address vToken) external;\\n\\n /**\\n * @notice Returns if user is a prime holder\\n * @param isPrimeHolder returns if the user is a prime holder\\n */\\n function isUserPrimeHolder(address user) external view returns (bool isPrimeHolder);\\n}\\n\",\"keccak256\":\"0x58861c0c05b8757f1a5d50b107eff479c8680878e6aa51bc93af420caf73f500\"},\"contracts/Utils/Address.sol\":{\"content\":\"pragma solidity ^0.5.5;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n // for accounts without code, i.e. `keccak256('')`\\n bytes32 codehash;\\n bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n codehash := extcodehash(account)\\n }\\n return (codehash != accountHash && codehash != 0x0);\\n }\\n\\n /**\\n * @dev Converts an `address` into `address payable`. Note that this is\\n * simply a type cast: the actual underlying value is not changed.\\n *\\n * _Available since v2.4.0._\\n */\\n function toPayable(address account) internal pure returns (address payable) {\\n return address(uint160(account));\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n *\\n * _Available since v2.4.0._\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-call-value\\n // solium-disable-next-line security/no-call-value\\n (bool success, ) = recipient.call.value(amount)(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n}\\n\",\"keccak256\":\"0x3c2ef780599a2ae6913282b982633f07e405a4a9c8511590df571e2b773aef9d\"},\"contracts/Utils/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Adapted from OpenZeppelin Contracts v4.3.2 (utils/cryptography/ECDSA.sol)\\n\\n// SPDX-Copyright-Text: OpenZeppelin, 2021\\n// SPDX-Copyright-Text: Venus, 2021\\n\\npragma solidity ^0.5.16;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\ncontract ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n } else if (error == RecoverError.InvalidSignatureV) {\\n revert(\\\"ECDSA: invalid signature 'v' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n if (v != 27 && v != 28) {\\n return (address(0), RecoverError.InvalidSignatureV);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n}\\n\",\"keccak256\":\"0xf27d7ad488b72c627370afa6e9acc520d4834a082363d1dc46b5573ac40a2d0a\"},\"contracts/Utils/IBEP20.sol\":{\"content\":\"pragma solidity ^0.5.0;\\n\\n/**\\n * @dev Interface of the BEP20 standard as defined in the EIP. Does not include\\n * the optional functions; to access them see {BEP20Detailed}.\\n */\\ninterface IBEP20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x839b08895eb1ad83502d3631e8e9e3a856d2a8c63c46f070d604af7b26c62c07\"},\"contracts/Utils/SafeBEP20.sol\":{\"content\":\"pragma solidity ^0.5.0;\\n\\nimport \\\"./SafeMath.sol\\\";\\nimport \\\"./IBEP20.sol\\\";\\nimport \\\"./Address.sol\\\";\\n\\n/**\\n * @title SafeBEP20\\n * @dev Wrappers around BEP20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeBEP20 for BEP20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeBEP20 {\\n using SafeMath for uint256;\\n using Address for address;\\n\\n function safeTransfer(IBEP20 token, address to, uint256 value) internal {\\n callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(IBEP20 token, address from, address to, uint256 value) internal {\\n callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n function safeApprove(IBEP20 token, address spender, uint256 value) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n // solhint-disable-next-line max-line-length\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeBEP20: approve from non-zero to non-zero allowance\\\"\\n );\\n callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(IBEP20 token, address spender, uint256 value) internal {\\n uint256 newAllowance = token.allowance(address(this), spender).add(value);\\n callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(IBEP20 token, address spender, uint256 value) internal {\\n uint256 newAllowance = token.allowance(address(this), spender).sub(\\n value,\\n \\\"SafeBEP20: decreased allowance below zero\\\"\\n );\\n callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function callOptionalReturn(IBEP20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves.\\n\\n // A Solidity high level call has three parts:\\n // 1. The target address is checked to verify it contains contract code\\n // 2. The call itself is made, and success asserted\\n // 3. The return value is decoded, which in turn checks the size of the returned data.\\n // solhint-disable-next-line max-line-length\\n require(address(token).isContract(), \\\"SafeBEP20: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = address(token).call(data);\\n require(success, \\\"SafeBEP20: low-level call failed\\\");\\n\\n if (returndata.length > 0) {\\n // Return data is optional\\n // solhint-disable-next-line max-line-length\\n require(abi.decode(returndata, (bool)), \\\"SafeBEP20: BEP20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x540ef6ddc47232a59d3ab0e95537f7a7d1c8a36f8dba315b010e60c6487bd768\"},\"contracts/Utils/SafeCast.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n /**\\n * @dev Returns the downcasted uint128 from uint256, reverting on\\n * overflow (when the input is greater than largest uint128).\\n *\\n * Counterpart to Solidity's `uint128` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 128 bits\\n */\\n function toUint128(uint256 value) internal pure returns (uint128) {\\n require(value < 2 ** 128, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n return uint128(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted uint64 from uint256, reverting on\\n * overflow (when the input is greater than largest uint64).\\n *\\n * Counterpart to Solidity's `uint64` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 64 bits\\n */\\n function toUint64(uint256 value) internal pure returns (uint64) {\\n require(value < 2 ** 64, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n return uint64(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted uint32 from uint256, reverting on\\n * overflow (when the input is greater than largest uint32).\\n *\\n * Counterpart to Solidity's `uint32` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 32 bits\\n */\\n function toUint32(uint256 value) internal pure returns (uint32) {\\n require(value < 2 ** 32, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n return uint32(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted uint16 from uint256, reverting on\\n * overflow (when the input is greater than largest uint16).\\n *\\n * Counterpart to Solidity's `uint16` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 16 bits\\n */\\n function toUint16(uint256 value) internal pure returns (uint16) {\\n require(value < 2 ** 16, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n return uint16(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted uint8 from uint256, reverting on\\n * overflow (when the input is greater than largest uint8).\\n *\\n * Counterpart to Solidity's `uint8` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 8 bits.\\n */\\n function toUint8(uint256 value) internal pure returns (uint8) {\\n require(value < 2 ** 8, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n return uint8(value);\\n }\\n\\n /**\\n * @dev Converts a signed int256 into an unsigned uint256.\\n *\\n * Requirements:\\n *\\n * - input must be greater than or equal to 0.\\n */\\n function toUint256(int256 value) internal pure returns (uint256) {\\n require(value >= 0, \\\"SafeCast: value must be positive\\\");\\n return uint256(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted int128 from int256, reverting on\\n * overflow (when the input is less than smallest int128 or\\n * greater than largest int128).\\n *\\n * Counterpart to Solidity's `int128` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 128 bits\\n *\\n * _Available since v3.1._\\n */\\n function toInt128(int256 value) internal pure returns (int128) {\\n require(value >= -2 ** 127 && value < 2 ** 127, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n return int128(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted int64 from int256, reverting on\\n * overflow (when the input is less than smallest int64 or\\n * greater than largest int64).\\n *\\n * Counterpart to Solidity's `int64` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 64 bits\\n *\\n * _Available since v3.1._\\n */\\n function toInt64(int256 value) internal pure returns (int64) {\\n require(value >= -2 ** 63 && value < 2 ** 63, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n return int64(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted int32 from int256, reverting on\\n * overflow (when the input is less than smallest int32 or\\n * greater than largest int32).\\n *\\n * Counterpart to Solidity's `int32` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 32 bits\\n *\\n * _Available since v3.1._\\n */\\n function toInt32(int256 value) internal pure returns (int32) {\\n require(value >= -2 ** 31 && value < 2 ** 31, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n return int32(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted int16 from int256, reverting on\\n * overflow (when the input is less than smallest int16 or\\n * greater than largest int16).\\n *\\n * Counterpart to Solidity's `int16` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 16 bits\\n *\\n * _Available since v3.1._\\n */\\n function toInt16(int256 value) internal pure returns (int16) {\\n require(value >= -2 ** 15 && value < 2 ** 15, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n return int16(value);\\n }\\n\\n /**\\n * @dev Returns the downcasted int8 from int256, reverting on\\n * overflow (when the input is less than smallest int8 or\\n * greater than largest int8).\\n *\\n * Counterpart to Solidity's `int8` operator.\\n *\\n * Requirements:\\n *\\n * - input must fit into 8 bits.\\n *\\n * _Available since v3.1._\\n */\\n function toInt8(int256 value) internal pure returns (int8) {\\n require(value >= -2 ** 7 && value < 2 ** 7, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n return int8(value);\\n }\\n\\n /**\\n * @dev Converts an unsigned uint256 into a signed int256.\\n *\\n * Requirements:\\n *\\n * - input must be less than or equal to maxInt256.\\n */\\n function toInt256(uint256 value) internal pure returns (int256) {\\n require(value < 2 ** 255, \\\"SafeCast: value doesn't fit in an int256\\\");\\n return int256(value);\\n }\\n}\\n\",\"keccak256\":\"0xe6222292bd226980fd73c00eaf3a102c8638777aa3f9c7cd9b0d0fb621da0661\"},\"contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return add(a, b, \\\"SafeMath: addition overflow\\\");\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n * - Subtraction cannot overflow.\\n */\\n function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, errorMessage);\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n uint256 c = a - b;\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) {\\n return 0;\\n }\\n\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers. Reverts on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return div(a, b, \\\"SafeMath: division by zero\\\");\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n // Solidity only automatically asserts when dividing by 0\\n require(b > 0, errorMessage);\\n uint256 c = a / b;\\n // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * Reverts when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * Reverts with custom message when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b != 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"},\"contracts/XVSVault/XVSStore.sol\":{\"content\":\"pragma solidity 0.5.16;\\nimport \\\"../Utils/SafeBEP20.sol\\\";\\nimport \\\"../Utils/IBEP20.sol\\\";\\n\\n/**\\n * @title XVS Store\\n * @author Venus\\n * @notice XVS Store responsible for distributing XVS rewards\\n */\\ncontract XVSStore {\\n using SafeMath for uint256;\\n using SafeBEP20 for IBEP20;\\n\\n /// @notice The Admin Address\\n address public admin;\\n\\n /// @notice The pending admin address\\n address public pendingAdmin;\\n\\n /// @notice The Owner Address\\n address public owner;\\n\\n /// @notice The reward tokens\\n mapping(address => bool) public rewardTokens;\\n\\n /// @notice Emitted when pendingAdmin is changed\\n event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n /// @notice Event emitted when admin changed\\n event AdminTransferred(address indexed oldAdmin, address indexed newAdmin);\\n\\n /// @notice Event emitted when owner changed\\n event OwnerTransferred(address indexed oldOwner, address indexed newOwner);\\n\\n constructor() public {\\n admin = msg.sender;\\n }\\n\\n modifier onlyAdmin() {\\n require(msg.sender == admin, \\\"only admin can\\\");\\n _;\\n }\\n\\n modifier onlyOwner() {\\n require(msg.sender == owner, \\\"only owner can\\\");\\n _;\\n }\\n\\n /**\\n * @notice Safely transfer rewards. Only active reward tokens can be sent using this function.\\n * Only callable by owner\\n * @dev Safe reward token transfer function, just in case if rounding error causes pool to not have enough tokens.\\n * @param token Reward token to transfer\\n * @param _to Destination address of the reward\\n * @param _amount Amount to transfer\\n */\\n function safeRewardTransfer(address token, address _to, uint256 _amount) external onlyOwner {\\n require(rewardTokens[token] == true, \\\"only reward token can\\\");\\n\\n if (address(token) != address(0)) {\\n uint256 tokenBalance = IBEP20(token).balanceOf(address(this));\\n if (_amount > tokenBalance) {\\n IBEP20(token).safeTransfer(_to, tokenBalance);\\n } else {\\n IBEP20(token).safeTransfer(_to, _amount);\\n }\\n }\\n }\\n\\n /**\\n * @notice Allows the admin to propose a new admin\\n * Only callable admin\\n * @param _admin Propose an account as admin of the XVS store\\n */\\n function setPendingAdmin(address _admin) external onlyAdmin {\\n address oldPendingAdmin = pendingAdmin;\\n pendingAdmin = _admin;\\n emit NewPendingAdmin(oldPendingAdmin, _admin);\\n }\\n\\n /**\\n * @notice Allows an account that is pending as admin to accept the role\\n * nly calllable by the pending admin\\n */\\n function acceptAdmin() external {\\n require(msg.sender == pendingAdmin, \\\"only pending admin\\\");\\n address oldAdmin = admin;\\n address oldPendingAdmin = pendingAdmin;\\n\\n admin = pendingAdmin;\\n pendingAdmin = address(0);\\n\\n emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n emit AdminTransferred(oldAdmin, admin);\\n }\\n\\n /**\\n * @notice Set the contract owner\\n * @param _owner The address of the owner to set\\n * Only callable admin\\n */\\n function setNewOwner(address _owner) external onlyAdmin {\\n require(_owner != address(0), \\\"new owner is the zero address\\\");\\n address oldOwner = owner;\\n owner = _owner;\\n emit OwnerTransferred(oldOwner, _owner);\\n }\\n\\n /**\\n * @notice Set or disable a reward token\\n * @param _tokenAddress The address of a token to set as active or inactive\\n * @param status Set whether a reward token is active or not\\n */\\n function setRewardToken(address _tokenAddress, bool status) external {\\n require(msg.sender == admin || msg.sender == owner, \\\"only admin or owner can\\\");\\n rewardTokens[_tokenAddress] = status;\\n }\\n\\n /**\\n * @notice Security function to allow the owner of the contract to withdraw from the contract\\n * @param _tokenAddress Reward token address to withdraw\\n * @param _amount Amount of token to withdraw\\n */\\n function emergencyRewardWithdraw(address _tokenAddress, uint256 _amount) external onlyOwner {\\n IBEP20(_tokenAddress).safeTransfer(address(msg.sender), _amount);\\n }\\n}\\n\",\"keccak256\":\"0x8082f92b13448bd4fa982c93c763439f10fe016a5f3be6d613dfe3cca68501ef\"},\"contracts/XVSVault/XVSVault.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\n\\npragma solidity 0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../Utils/ECDSA.sol\\\";\\nimport \\\"../Utils/SafeBEP20.sol\\\";\\nimport \\\"../Utils/IBEP20.sol\\\";\\nimport \\\"./XVSVaultStorage.sol\\\";\\nimport \\\"../Tokens/Prime/IPrime.sol\\\";\\nimport \\\"../Utils/SafeCast.sol\\\";\\nimport \\\"@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV5.sol\\\";\\nimport \\\"@venusprotocol/solidity-utilities/contracts/TimeManagerV5.sol\\\";\\n\\nimport { XVSStore } from \\\"./XVSStore.sol\\\";\\nimport { XVSVaultProxy } from \\\"./XVSVaultProxy.sol\\\";\\n\\n/**\\n * @title XVS Vault\\n * @author Venus\\n * @notice The XVS Vault allows XVS holders to lock their XVS to recieve voting rights in Venus governance and are rewarded with XVS.\\n */\\ncontract XVSVault is XVSVaultStorage, ECDSA, AccessControlledV5, TimeManagerV5 {\\n using SafeMath for uint256;\\n using SafeCast for uint256;\\n using SafeBEP20 for IBEP20;\\n\\n /// @notice The upper bound for the lock period in a pool, 10 years\\n uint256 public constant MAX_LOCK_PERIOD = 60 * 60 * 24 * 365 * 10;\\n\\n /// @notice Event emitted when deposit\\n event Deposit(address indexed user, address indexed rewardToken, uint256 indexed pid, uint256 amount);\\n\\n /// @notice Event emitted when execute withrawal\\n event ExecutedWithdrawal(address indexed user, address indexed rewardToken, uint256 indexed pid, uint256 amount);\\n\\n /// @notice Event emitted when request withrawal\\n event RequestedWithdrawal(address indexed user, address indexed rewardToken, uint256 indexed pid, uint256 amount);\\n\\n /// @notice An event thats emitted when an account changes its delegate\\n event DelegateChangedV2(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);\\n\\n /// @notice An event thats emitted when a delegate account's vote balance changes\\n event DelegateVotesChangedV2(address indexed delegate, uint previousBalance, uint newBalance);\\n\\n /// @notice An event emitted when the reward store address is updated\\n event StoreUpdated(address oldXvs, address oldStore, address newXvs, address newStore);\\n\\n /// @notice An event emitted when the withdrawal locking period is updated for a pool\\n event WithdrawalLockingPeriodUpdated(address indexed rewardToken, uint indexed pid, uint oldPeriod, uint newPeriod);\\n\\n /// @notice An event emitted when the reward amount per block or second is modified for a pool\\n event RewardAmountUpdated(address indexed rewardToken, uint oldReward, uint newReward);\\n\\n /// @notice An event emitted when a new pool is added\\n event PoolAdded(\\n address indexed rewardToken,\\n uint indexed pid,\\n address indexed token,\\n uint allocPoints,\\n uint rewardPerBlockOrSecond,\\n uint lockPeriod\\n );\\n\\n /// @notice An event emitted when a pool allocation points are updated\\n event PoolUpdated(address indexed rewardToken, uint indexed pid, uint oldAllocPoints, uint newAllocPoints);\\n\\n /// @notice Event emitted when reward claimed\\n event Claim(address indexed user, address indexed rewardToken, uint256 indexed pid, uint256 amount);\\n\\n /// @notice Event emitted when vault is paused\\n event VaultPaused(address indexed admin);\\n\\n /// @notice Event emitted when vault is resumed after pause\\n event VaultResumed(address indexed admin);\\n\\n /// @notice Event emitted when protocol logs a debt to a user due to insufficient funds for pending reward distribution\\n event VaultDebtUpdated(\\n address indexed rewardToken,\\n address indexed userAddress,\\n uint256 oldOwedAmount,\\n uint256 newOwedAmount\\n );\\n\\n /// @notice Emitted when prime token contract address is changed\\n event NewPrimeToken(\\n IPrime indexed oldPrimeToken,\\n IPrime indexed newPrimeToken,\\n address oldPrimeRewardToken,\\n address newPrimeRewardToken,\\n uint256 oldPrimePoolId,\\n uint256 newPrimePoolId\\n );\\n\\n /**\\n * @notice XVSVault constructor\\n */\\n constructor() public {\\n admin = msg.sender;\\n }\\n\\n modifier onlyAdmin() {\\n require(msg.sender == admin, \\\"only admin can\\\");\\n _;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n */\\n modifier nonReentrant() {\\n require(_notEntered, \\\"re-entered\\\");\\n _notEntered = false;\\n _;\\n _notEntered = true; // get a gas-refund post-Istanbul\\n }\\n\\n /**\\n * @dev Prevents functions to execute when vault is paused.\\n */\\n modifier isActive() {\\n require(!vaultPaused, \\\"Vault is paused\\\");\\n _;\\n }\\n\\n /**\\n * @notice Pauses vault\\n */\\n function pause() external {\\n _checkAccessAllowed(\\\"pause()\\\");\\n require(!vaultPaused, \\\"Vault is already paused\\\");\\n vaultPaused = true;\\n emit VaultPaused(msg.sender);\\n }\\n\\n /**\\n * @notice Resume vault\\n */\\n function resume() external {\\n _checkAccessAllowed(\\\"resume()\\\");\\n require(vaultPaused, \\\"Vault is not paused\\\");\\n vaultPaused = false;\\n emit VaultResumed(msg.sender);\\n }\\n\\n /**\\n * @notice Returns the number of pools with the specified reward token\\n * @param rewardToken Reward token address\\n * @return Number of pools that distribute the specified token as a reward\\n */\\n function poolLength(address rewardToken) external view returns (uint256) {\\n return poolInfos[rewardToken].length;\\n }\\n\\n /**\\n * @notice Returns the number of reward tokens created per block or second\\n * @param _rewardToken Reward token address\\n * @return Number of reward tokens created per block or second\\n */\\n function rewardTokenAmountsPerBlock(address _rewardToken) external view returns (uint256) {\\n return rewardTokenAmountsPerBlockOrSecond[_rewardToken];\\n }\\n\\n /**\\n * @notice Add a new token pool\\n * @dev This vault DOES NOT support deflationary tokens \\u2014 it expects that\\n * the amount of transferred tokens would equal the actually deposited\\n * amount. In practice this means that this vault DOES NOT support USDT\\n * and similar tokens (that do not provide these guarantees).\\n * @param _rewardToken Reward token address\\n * @param _allocPoint Number of allocation points assigned to this pool\\n * @param _token Staked token\\n * @param _rewardPerBlockOrSecond Initial reward per block or second, in terms of _rewardToken\\n * @param _lockPeriod A period between withdrawal request and a moment when it's executable\\n */\\n function add(\\n address _rewardToken,\\n uint256 _allocPoint,\\n IBEP20 _token,\\n uint256 _rewardPerBlockOrSecond,\\n uint256 _lockPeriod\\n ) external {\\n _checkAccessAllowed(\\\"add(address,uint256,address,uint256,uint256)\\\");\\n _ensureNonzeroAddress(_rewardToken);\\n _ensureNonzeroAddress(address(_token));\\n require(address(xvsStore) != address(0), \\\"Store contract address is empty\\\");\\n require(_allocPoint > 0, \\\"Alloc points must not be zero\\\");\\n\\n massUpdatePools(_rewardToken);\\n\\n PoolInfo[] storage poolInfo = poolInfos[_rewardToken];\\n\\n uint256 length = poolInfo.length;\\n for (uint256 pid = 0; pid < length; ++pid) {\\n require(poolInfo[pid].token != _token, \\\"Pool already added\\\");\\n }\\n\\n // We use balanceOf to get the supply amount, so shouldn't be possible to\\n // configure pools with different reward token but the same staked token\\n require(!isStakedToken[address(_token)], \\\"Token exists in other pool\\\");\\n\\n totalAllocPoints[_rewardToken] = totalAllocPoints[_rewardToken].add(_allocPoint);\\n\\n rewardTokenAmountsPerBlockOrSecond[_rewardToken] = _rewardPerBlockOrSecond;\\n\\n poolInfo.push(\\n PoolInfo({\\n token: _token,\\n allocPoint: _allocPoint,\\n lastRewardBlockOrSecond: getBlockNumberOrTimestamp(),\\n accRewardPerShare: 0,\\n lockPeriod: _lockPeriod\\n })\\n );\\n isStakedToken[address(_token)] = true;\\n\\n XVSStore(xvsStore).setRewardToken(_rewardToken, true);\\n\\n emit PoolAdded(\\n _rewardToken,\\n poolInfo.length - 1,\\n address(_token),\\n _allocPoint,\\n _rewardPerBlockOrSecond,\\n _lockPeriod\\n );\\n }\\n\\n /**\\n * @notice Update the given pool's reward allocation point\\n * @param _rewardToken Reward token address\\n * @param _pid Pool index\\n * @param _allocPoint Number of allocation points assigned to this pool\\n */\\n function set(address _rewardToken, uint256 _pid, uint256 _allocPoint) external {\\n _checkAccessAllowed(\\\"set(address,uint256,uint256)\\\");\\n _ensureValidPool(_rewardToken, _pid);\\n\\n massUpdatePools(_rewardToken);\\n\\n PoolInfo[] storage poolInfo = poolInfos[_rewardToken];\\n uint256 newTotalAllocPoints = totalAllocPoints[_rewardToken].sub(poolInfo[_pid].allocPoint).add(_allocPoint);\\n require(newTotalAllocPoints > 0, \\\"Alloc points per reward token must not be zero\\\");\\n\\n uint256 oldAllocPoints = poolInfo[_pid].allocPoint;\\n poolInfo[_pid].allocPoint = _allocPoint;\\n totalAllocPoints[_rewardToken] = newTotalAllocPoints;\\n\\n emit PoolUpdated(_rewardToken, _pid, oldAllocPoints, _allocPoint);\\n }\\n\\n /**\\n * @notice Update the given reward token's amount per block or second\\n * @param _rewardToken Reward token address\\n * @param _rewardAmount Number of allocation points assigned to this pool\\n */\\n function setRewardAmountPerBlockOrSecond(address _rewardToken, uint256 _rewardAmount) external {\\n _checkAccessAllowed(\\\"setRewardAmountPerBlockOrSecond(address,uint256)\\\");\\n require(XVSStore(xvsStore).rewardTokens(_rewardToken), \\\"Invalid reward token\\\");\\n massUpdatePools(_rewardToken);\\n uint256 oldReward = rewardTokenAmountsPerBlockOrSecond[_rewardToken];\\n rewardTokenAmountsPerBlockOrSecond[_rewardToken] = _rewardAmount;\\n\\n emit RewardAmountUpdated(_rewardToken, oldReward, _rewardAmount);\\n }\\n\\n /**\\n * @notice Update the lock period after which a requested withdrawal can be executed\\n * @param _rewardToken Reward token address\\n * @param _pid Pool index\\n * @param _newPeriod New lock period\\n */\\n function setWithdrawalLockingPeriod(address _rewardToken, uint256 _pid, uint256 _newPeriod) external {\\n _checkAccessAllowed(\\\"setWithdrawalLockingPeriod(address,uint256,uint256)\\\");\\n _ensureValidPool(_rewardToken, _pid);\\n require(_newPeriod > 0 && _newPeriod < MAX_LOCK_PERIOD, \\\"Invalid new locking period\\\");\\n PoolInfo storage pool = poolInfos[_rewardToken][_pid];\\n uint256 oldPeriod = pool.lockPeriod;\\n pool.lockPeriod = _newPeriod;\\n\\n emit WithdrawalLockingPeriodUpdated(_rewardToken, _pid, oldPeriod, _newPeriod);\\n }\\n\\n /**\\n * @notice Deposit XVSVault for XVS allocation\\n * @param _rewardToken The Reward Token Address\\n * @param _pid The Pool Index\\n * @param _amount The amount to deposit to vault\\n */\\n function deposit(address _rewardToken, uint256 _pid, uint256 _amount) external nonReentrant isActive {\\n _ensureValidPool(_rewardToken, _pid);\\n PoolInfo storage pool = poolInfos[_rewardToken][_pid];\\n UserInfo storage user = userInfos[_rewardToken][_pid][msg.sender];\\n _updatePool(_rewardToken, _pid);\\n require(pendingWithdrawalsBeforeUpgrade(_rewardToken, _pid, msg.sender) == 0, \\\"execute pending withdrawal\\\");\\n\\n if (user.amount > 0) {\\n uint256 pending = _computeReward(user, pool);\\n if (pending > 0) {\\n _transferReward(_rewardToken, msg.sender, pending);\\n emit Claim(msg.sender, _rewardToken, _pid, pending);\\n }\\n }\\n pool.token.safeTransferFrom(msg.sender, address(this), _amount);\\n user.amount = user.amount.add(_amount);\\n user.rewardDebt = _cumulativeReward(user, pool);\\n\\n // Update Delegate Amount\\n if (address(pool.token) == xvsAddress) {\\n _moveDelegates(address(0), delegates[msg.sender], safe96(_amount, \\\"XVSVault::deposit: votes overflow\\\"));\\n }\\n\\n if (primeRewardToken == _rewardToken && _pid == primePoolId) {\\n primeToken.xvsUpdated(msg.sender);\\n }\\n\\n emit Deposit(msg.sender, _rewardToken, _pid, _amount);\\n }\\n\\n /**\\n * @notice Claim rewards for pool\\n * @param _account The account for which to claim rewards\\n * @param _rewardToken The Reward Token Address\\n * @param _pid The Pool Index\\n */\\n function claim(address _account, address _rewardToken, uint256 _pid) external nonReentrant isActive {\\n _ensureValidPool(_rewardToken, _pid);\\n PoolInfo storage pool = poolInfos[_rewardToken][_pid];\\n UserInfo storage user = userInfos[_rewardToken][_pid][_account];\\n _updatePool(_rewardToken, _pid);\\n require(pendingWithdrawalsBeforeUpgrade(_rewardToken, _pid, _account) == 0, \\\"execute pending withdrawal\\\");\\n\\n if (user.amount > 0) {\\n uint256 pending = _computeReward(user, pool);\\n\\n if (pending > 0) {\\n user.rewardDebt = _cumulativeReward(user, pool);\\n\\n _transferReward(_rewardToken, _account, pending);\\n emit Claim(_account, _rewardToken, _pid, pending);\\n }\\n }\\n }\\n\\n /**\\n * @notice Pushes withdrawal request to the requests array and updates\\n * the pending withdrawals amount. The requests are always sorted\\n * by unlock time (descending) so that the earliest to execute requests\\n * are always at the end of the array.\\n * @param _user The user struct storage pointer\\n * @param _requests The user's requests array storage pointer\\n * @param _amount The amount being requested\\n */\\n function pushWithdrawalRequest(\\n UserInfo storage _user,\\n WithdrawalRequest[] storage _requests,\\n uint _amount,\\n uint _lockedUntil\\n ) internal {\\n uint i = _requests.length;\\n _requests.push(WithdrawalRequest(0, 0, 1));\\n // Keep it sorted so that the first to get unlocked request is always at the end\\n for (; i > 0 && _requests[i - 1].lockedUntil <= _lockedUntil; --i) {\\n _requests[i] = _requests[i - 1];\\n }\\n _requests[i] = WithdrawalRequest(_amount, _lockedUntil.toUint128(), 1);\\n _user.pendingWithdrawals = _user.pendingWithdrawals.add(_amount);\\n }\\n\\n /**\\n * @notice Pops the requests with unlock time < now from the requests\\n * array and deducts the computed amount from the user's pending\\n * withdrawals counter. Assumes that the requests array is sorted\\n * by unclock time (descending).\\n * @dev This function **removes** the eligible requests from the requests\\n * array. If this function is called, the withdrawal should actually\\n * happen (or the transaction should be reverted).\\n * @param _user The user struct storage pointer\\n * @param _requests The user's requests array storage pointer\\n * @return beforeUpgradeWithdrawalAmount The amount eligible for withdrawal before upgrade (this amount should be\\n * sent to the user, otherwise the state would be inconsistent).\\n * @return afterUpgradeWithdrawalAmount The amount eligible for withdrawal after upgrade (this amount should be\\n * sent to the user, otherwise the state would be inconsistent).\\n */\\n function popEligibleWithdrawalRequests(\\n UserInfo storage _user,\\n WithdrawalRequest[] storage _requests\\n ) internal returns (uint beforeUpgradeWithdrawalAmount, uint afterUpgradeWithdrawalAmount) {\\n // Since the requests are sorted by their unlock time, we can just\\n // pop them from the array and stop at the first not-yet-eligible one\\n for (uint i = _requests.length; i > 0 && isUnlocked(_requests[i - 1]); --i) {\\n if (_requests[i - 1].afterUpgrade == 1) {\\n afterUpgradeWithdrawalAmount = afterUpgradeWithdrawalAmount.add(_requests[i - 1].amount);\\n } else {\\n beforeUpgradeWithdrawalAmount = beforeUpgradeWithdrawalAmount.add(_requests[i - 1].amount);\\n }\\n\\n _requests.pop();\\n }\\n _user.pendingWithdrawals = _user.pendingWithdrawals.sub(\\n afterUpgradeWithdrawalAmount.add(beforeUpgradeWithdrawalAmount)\\n );\\n return (beforeUpgradeWithdrawalAmount, afterUpgradeWithdrawalAmount);\\n }\\n\\n /**\\n * @notice Checks if the request is eligible for withdrawal.\\n * @param _request The request struct storage pointer\\n * @return True if the request is eligible for withdrawal, false otherwise\\n */\\n function isUnlocked(WithdrawalRequest storage _request) private view returns (bool) {\\n return _request.lockedUntil <= block.timestamp;\\n }\\n\\n /**\\n * @notice Execute withdrawal to XVSVault for XVS allocation\\n * @param _rewardToken The Reward Token Address\\n * @param _pid The Pool Index\\n */\\n function executeWithdrawal(address _rewardToken, uint256 _pid) external nonReentrant isActive {\\n _ensureValidPool(_rewardToken, _pid);\\n PoolInfo storage pool = poolInfos[_rewardToken][_pid];\\n UserInfo storage user = userInfos[_rewardToken][_pid][msg.sender];\\n WithdrawalRequest[] storage requests = withdrawalRequests[_rewardToken][_pid][msg.sender];\\n\\n uint256 beforeUpgradeWithdrawalAmount;\\n uint256 afterUpgradeWithdrawalAmount;\\n\\n (beforeUpgradeWithdrawalAmount, afterUpgradeWithdrawalAmount) = popEligibleWithdrawalRequests(user, requests);\\n require(beforeUpgradeWithdrawalAmount > 0 || afterUpgradeWithdrawalAmount > 0, \\\"nothing to withdraw\\\");\\n\\n // Having both old-style and new-style requests is not allowed and shouldn't be possible\\n require(beforeUpgradeWithdrawalAmount == 0 || afterUpgradeWithdrawalAmount == 0, \\\"inconsistent state\\\");\\n\\n if (beforeUpgradeWithdrawalAmount > 0) {\\n _updatePool(_rewardToken, _pid);\\n uint256 pending = user.amount.mul(pool.accRewardPerShare).div(1e12).sub(user.rewardDebt);\\n XVSStore(xvsStore).safeRewardTransfer(_rewardToken, msg.sender, pending);\\n user.amount = user.amount.sub(beforeUpgradeWithdrawalAmount);\\n user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e12);\\n pool.token.safeTransfer(address(msg.sender), beforeUpgradeWithdrawalAmount);\\n } else {\\n user.amount = user.amount.sub(afterUpgradeWithdrawalAmount);\\n totalPendingWithdrawals[_rewardToken][_pid] = totalPendingWithdrawals[_rewardToken][_pid].sub(\\n afterUpgradeWithdrawalAmount\\n );\\n pool.token.safeTransfer(address(msg.sender), afterUpgradeWithdrawalAmount);\\n }\\n\\n emit ExecutedWithdrawal(\\n msg.sender,\\n _rewardToken,\\n _pid,\\n beforeUpgradeWithdrawalAmount.add(afterUpgradeWithdrawalAmount)\\n );\\n }\\n\\n /**\\n * @notice Returns before and after upgrade pending withdrawal amount\\n * @param _requests The user's requests array storage pointer\\n * @return beforeUpgradeWithdrawalAmount The amount eligible for withdrawal before upgrade\\n * @return afterUpgradeWithdrawalAmount The amount eligible for withdrawal after upgrade\\n */\\n function getRequestedWithdrawalAmount(\\n WithdrawalRequest[] storage _requests\\n ) internal view returns (uint beforeUpgradeWithdrawalAmount, uint afterUpgradeWithdrawalAmount) {\\n for (uint i = _requests.length; i > 0; --i) {\\n if (_requests[i - 1].afterUpgrade == 1) {\\n afterUpgradeWithdrawalAmount = afterUpgradeWithdrawalAmount.add(_requests[i - 1].amount);\\n } else {\\n beforeUpgradeWithdrawalAmount = beforeUpgradeWithdrawalAmount.add(_requests[i - 1].amount);\\n }\\n }\\n return (beforeUpgradeWithdrawalAmount, afterUpgradeWithdrawalAmount);\\n }\\n\\n /**\\n * @notice Request withdrawal to XVSVault for XVS allocation\\n * @param _rewardToken The Reward Token Address\\n * @param _pid The Pool Index\\n * @param _amount The amount to withdraw from the vault\\n */\\n function requestWithdrawal(address _rewardToken, uint256 _pid, uint256 _amount) external nonReentrant isActive {\\n _ensureValidPool(_rewardToken, _pid);\\n require(_amount > 0, \\\"requested amount cannot be zero\\\");\\n UserInfo storage user = userInfos[_rewardToken][_pid][msg.sender];\\n require(user.amount >= user.pendingWithdrawals.add(_amount), \\\"requested amount is invalid\\\");\\n\\n PoolInfo storage pool = poolInfos[_rewardToken][_pid];\\n WithdrawalRequest[] storage requests = withdrawalRequests[_rewardToken][_pid][msg.sender];\\n\\n uint beforeUpgradeWithdrawalAmount;\\n\\n (beforeUpgradeWithdrawalAmount, ) = getRequestedWithdrawalAmount(requests);\\n require(beforeUpgradeWithdrawalAmount == 0, \\\"execute pending withdrawal\\\");\\n\\n _updatePool(_rewardToken, _pid);\\n uint256 pending = _computeReward(user, pool);\\n _transferReward(_rewardToken, msg.sender, pending);\\n\\n uint lockedUntil = pool.lockPeriod.add(block.timestamp);\\n\\n pushWithdrawalRequest(user, requests, _amount, lockedUntil);\\n totalPendingWithdrawals[_rewardToken][_pid] = totalPendingWithdrawals[_rewardToken][_pid].add(_amount);\\n user.rewardDebt = _cumulativeReward(user, pool);\\n\\n // Update Delegate Amount\\n if (address(pool.token) == xvsAddress) {\\n _moveDelegates(\\n delegates[msg.sender],\\n address(0),\\n safe96(_amount, \\\"XVSVault::requestWithdrawal: votes overflow\\\")\\n );\\n }\\n\\n if (primeRewardToken == _rewardToken && _pid == primePoolId) {\\n primeToken.xvsUpdated(msg.sender);\\n }\\n\\n emit Claim(msg.sender, _rewardToken, _pid, pending);\\n emit RequestedWithdrawal(msg.sender, _rewardToken, _pid, _amount);\\n }\\n\\n /**\\n * @notice Get unlocked withdrawal amount\\n * @param _rewardToken The Reward Token Address\\n * @param _pid The Pool Index\\n * @param _user The User Address\\n * @return withdrawalAmount Amount that the user can withdraw\\n */\\n function getEligibleWithdrawalAmount(\\n address _rewardToken,\\n uint256 _pid,\\n address _user\\n ) external view returns (uint withdrawalAmount) {\\n _ensureValidPool(_rewardToken, _pid);\\n WithdrawalRequest[] storage requests = withdrawalRequests[_rewardToken][_pid][_user];\\n // Since the requests are sorted by their unlock time, we can take\\n // the entries from the end of the array and stop at the first\\n // not-yet-eligible one\\n for (uint i = requests.length; i > 0 && isUnlocked(requests[i - 1]); --i) {\\n withdrawalAmount = withdrawalAmount.add(requests[i - 1].amount);\\n }\\n return withdrawalAmount;\\n }\\n\\n /**\\n * @notice Get requested amount\\n * @param _rewardToken The Reward Token Address\\n * @param _pid The Pool Index\\n * @param _user The User Address\\n * @return Total amount of requested but not yet executed withdrawals (including both executable and locked ones)\\n */\\n function getRequestedAmount(address _rewardToken, uint256 _pid, address _user) external view returns (uint256) {\\n _ensureValidPool(_rewardToken, _pid);\\n UserInfo storage user = userInfos[_rewardToken][_pid][_user];\\n return user.pendingWithdrawals;\\n }\\n\\n /**\\n * @notice Returns the array of withdrawal requests that have not been executed yet\\n * @param _rewardToken The Reward Token Address\\n * @param _pid The Pool Index\\n * @param _user The User Address\\n * @return An array of withdrawal requests\\n */\\n function getWithdrawalRequests(\\n address _rewardToken,\\n uint256 _pid,\\n address _user\\n ) external view returns (WithdrawalRequest[] memory) {\\n _ensureValidPool(_rewardToken, _pid);\\n return withdrawalRequests[_rewardToken][_pid][_user];\\n }\\n\\n /**\\n * @notice View function to see pending XVSs on frontend\\n * @param _rewardToken Reward token address\\n * @param _pid Pool index\\n * @param _user User address\\n * @return Reward the user is eligible for in this pool, in terms of _rewardToken\\n */\\n function pendingReward(address _rewardToken, uint256 _pid, address _user) external view returns (uint256) {\\n _ensureValidPool(_rewardToken, _pid);\\n PoolInfo storage pool = poolInfos[_rewardToken][_pid];\\n UserInfo storage user = userInfos[_rewardToken][_pid][_user];\\n uint256 accRewardPerShare = pool.accRewardPerShare;\\n uint256 supply = pool.token.balanceOf(address(this)).sub(totalPendingWithdrawals[_rewardToken][_pid]);\\n uint256 curBlockNumberOrSecond = getBlockNumberOrTimestamp();\\n uint256 rewardTokenPerBlockOrSecond = rewardTokenAmountsPerBlockOrSecond[_rewardToken];\\n if (curBlockNumberOrSecond > pool.lastRewardBlockOrSecond && supply != 0) {\\n uint256 multiplier = curBlockNumberOrSecond.sub(pool.lastRewardBlockOrSecond);\\n uint256 reward = multiplier.mul(rewardTokenPerBlockOrSecond).mul(pool.allocPoint).div(\\n totalAllocPoints[_rewardToken]\\n );\\n accRewardPerShare = accRewardPerShare.add(reward.mul(1e12).div(supply));\\n }\\n WithdrawalRequest[] storage requests = withdrawalRequests[_rewardToken][_pid][_user];\\n (, uint256 afterUpgradeWithdrawalAmount) = getRequestedWithdrawalAmount(requests);\\n return user.amount.sub(afterUpgradeWithdrawalAmount).mul(accRewardPerShare).div(1e12).sub(user.rewardDebt);\\n }\\n\\n // Update reward variables for all pools. Be careful of gas spending!\\n function massUpdatePools(address _rewardToken) internal {\\n uint256 length = poolInfos[_rewardToken].length;\\n for (uint256 pid = 0; pid < length; ++pid) {\\n _updatePool(_rewardToken, pid);\\n }\\n }\\n\\n /**\\n * @notice Update reward variables of the given pool to be up-to-date\\n * @param _rewardToken Reward token address\\n * @param _pid Pool index\\n */\\n function updatePool(address _rewardToken, uint256 _pid) external isActive {\\n _ensureValidPool(_rewardToken, _pid);\\n _updatePool(_rewardToken, _pid);\\n }\\n\\n // Update reward variables of the given pool to be up-to-date.\\n function _updatePool(address _rewardToken, uint256 _pid) internal {\\n PoolInfo storage pool = poolInfos[_rewardToken][_pid];\\n if (getBlockNumberOrTimestamp() <= pool.lastRewardBlockOrSecond) {\\n return;\\n }\\n uint256 supply = pool.token.balanceOf(address(this));\\n supply = supply.sub(totalPendingWithdrawals[_rewardToken][_pid]);\\n if (supply == 0) {\\n pool.lastRewardBlockOrSecond = getBlockNumberOrTimestamp();\\n return;\\n }\\n uint256 curBlockNumberOrSecond = getBlockNumberOrTimestamp();\\n uint256 multiplier = curBlockNumberOrSecond.sub(pool.lastRewardBlockOrSecond);\\n uint256 reward = multiplier.mul(rewardTokenAmountsPerBlockOrSecond[_rewardToken]).mul(pool.allocPoint).div(\\n totalAllocPoints[_rewardToken]\\n );\\n pool.accRewardPerShare = pool.accRewardPerShare.add(reward.mul(1e12).div(supply));\\n pool.lastRewardBlockOrSecond = getBlockNumberOrTimestamp();\\n }\\n\\n function _ensureValidPool(address rewardToken, uint256 pid) internal view {\\n require(pid < poolInfos[rewardToken].length, \\\"vault: pool exists?\\\");\\n }\\n\\n /**\\n * @notice Get user info with reward token address and pid\\n * @param _rewardToken Reward token address\\n * @param _pid Pool index\\n * @param _user User address\\n * @return amount Deposited amount\\n * @return rewardDebt Reward debt (technical value used to track past payouts)\\n * @return pendingWithdrawals Requested but not yet executed withdrawals\\n */\\n function getUserInfo(\\n address _rewardToken,\\n uint256 _pid,\\n address _user\\n ) external view returns (uint256 amount, uint256 rewardDebt, uint256 pendingWithdrawals) {\\n _ensureValidPool(_rewardToken, _pid);\\n UserInfo storage user = userInfos[_rewardToken][_pid][_user];\\n amount = user.amount;\\n rewardDebt = user.rewardDebt;\\n pendingWithdrawals = user.pendingWithdrawals;\\n }\\n\\n /**\\n * @notice Gets the total pending withdrawal amount of a user before upgrade\\n * @param _rewardToken The Reward Token Address\\n * @param _pid The Pool Index\\n * @param _user The address of the user\\n * @return beforeUpgradeWithdrawalAmount Total pending withdrawal amount in requests made before the vault upgrade\\n */\\n function pendingWithdrawalsBeforeUpgrade(\\n address _rewardToken,\\n uint256 _pid,\\n address _user\\n ) public view returns (uint256 beforeUpgradeWithdrawalAmount) {\\n WithdrawalRequest[] storage requests = withdrawalRequests[_rewardToken][_pid][_user];\\n (beforeUpgradeWithdrawalAmount, ) = getRequestedWithdrawalAmount(requests);\\n return beforeUpgradeWithdrawalAmount;\\n }\\n\\n /**\\n * @notice Get the XVS stake balance of an account (excluding the pending withdrawals)\\n * @param account The address of the account to check\\n * @return The balance that user staked\\n */\\n function getStakeAmount(address account) internal view returns (uint96) {\\n require(xvsAddress != address(0), \\\"XVSVault::getStakeAmount: xvs address is not set\\\");\\n\\n PoolInfo[] storage poolInfo = poolInfos[xvsAddress];\\n\\n uint256 length = poolInfo.length;\\n for (uint256 pid = 0; pid < length; ++pid) {\\n if (address(poolInfo[pid].token) == address(xvsAddress)) {\\n UserInfo storage user = userInfos[xvsAddress][pid][account];\\n return safe96(user.amount.sub(user.pendingWithdrawals), \\\"XVSVault::getStakeAmount: votes overflow\\\");\\n }\\n }\\n return uint96(0);\\n }\\n\\n /**\\n * @notice Delegate votes from `msg.sender` to `delegatee`\\n * @param delegatee The address to delegate votes to\\n */\\n function delegate(address delegatee) external isActive {\\n return _delegate(msg.sender, delegatee);\\n }\\n\\n /**\\n * @notice Delegates votes from signatory to `delegatee`\\n * @param delegatee The address to delegate votes to\\n * @param nonce The contract state required to match the signature\\n * @param expiry The time at which to expire the signature\\n * @param v The recovery byte of the signature\\n * @param r Half of the ECDSA signature pair\\n * @param s Half of the ECDSA signature pair\\n */\\n function delegateBySig(\\n address delegatee,\\n uint nonce,\\n uint expiry,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external isActive {\\n bytes32 domainSeparator = keccak256(\\n abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(\\\"XVSVault\\\")), getChainId(), address(this))\\n );\\n bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));\\n bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n address signatory = ECDSA.recover(digest, v, r, s);\\n require(nonce == nonces[signatory]++, \\\"XVSVault::delegateBySig: invalid nonce\\\");\\n require(block.timestamp <= expiry, \\\"XVSVault::delegateBySig: signature expired\\\");\\n return _delegate(signatory, delegatee);\\n }\\n\\n /**\\n * @notice Gets the current votes balance for `account`\\n * @param account The address to get votes balance\\n * @return The number of current votes for `account`\\n */\\n function getCurrentVotes(address account) external view returns (uint96) {\\n uint32 nCheckpoints = numCheckpoints[account];\\n return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;\\n }\\n\\n function _delegate(address delegator, address delegatee) internal {\\n address currentDelegate = delegates[delegator];\\n uint96 delegatorBalance = getStakeAmount(delegator);\\n delegates[delegator] = delegatee;\\n\\n emit DelegateChangedV2(delegator, currentDelegate, delegatee);\\n\\n _moveDelegates(currentDelegate, delegatee, delegatorBalance);\\n }\\n\\n function _moveDelegates(address srcRep, address dstRep, uint96 amount) internal {\\n if (srcRep != dstRep && amount > 0) {\\n if (srcRep != address(0)) {\\n uint32 srcRepNum = numCheckpoints[srcRep];\\n uint96 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;\\n uint96 srcRepNew = sub96(srcRepOld, amount, \\\"XVSVault::_moveVotes: vote amount underflows\\\");\\n _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);\\n }\\n\\n if (dstRep != address(0)) {\\n uint32 dstRepNum = numCheckpoints[dstRep];\\n uint96 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;\\n uint96 dstRepNew = add96(dstRepOld, amount, \\\"XVSVault::_moveVotes: vote amount overflows\\\");\\n _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);\\n }\\n }\\n }\\n\\n function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint96 oldVotes, uint96 newVotes) internal {\\n uint32 blockNumberOrSecond = safe32(\\n getBlockNumberOrTimestamp(),\\n \\\"XVSVault::_writeCheckpoint: block number or second exceeds 32 bits\\\"\\n );\\n\\n if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlockOrSecond == blockNumberOrSecond) {\\n checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;\\n } else {\\n checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumberOrSecond, newVotes);\\n numCheckpoints[delegatee] = nCheckpoints + 1;\\n }\\n\\n emit DelegateVotesChangedV2(delegatee, oldVotes, newVotes);\\n }\\n\\n function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {\\n require(n < 2 ** 32, errorMessage);\\n return uint32(n);\\n }\\n\\n function safe96(uint n, string memory errorMessage) internal pure returns (uint96) {\\n require(n < 2 ** 96, errorMessage);\\n return uint96(n);\\n }\\n\\n function add96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {\\n uint96 c = a + b;\\n require(c >= a, errorMessage);\\n return c;\\n }\\n\\n function sub96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n function getChainId() internal pure returns (uint) {\\n uint256 chainId;\\n assembly {\\n chainId := chainid()\\n }\\n return chainId;\\n }\\n\\n /**\\n * @notice Determine the xvs stake balance for an account\\n * @param account The address of the account to check\\n * @param blockNumberOrSecond The block number or second to get the vote balance at\\n * @return The balance that user staked\\n */\\n function getPriorVotes(address account, uint256 blockNumberOrSecond) external view returns (uint96) {\\n require(blockNumberOrSecond < getBlockNumberOrTimestamp(), \\\"XVSVault::getPriorVotes: not yet determined\\\");\\n\\n uint32 nCheckpoints = numCheckpoints[account];\\n if (nCheckpoints == 0) {\\n return 0;\\n }\\n\\n // First check most recent balance\\n if (checkpoints[account][nCheckpoints - 1].fromBlockOrSecond <= blockNumberOrSecond) {\\n return checkpoints[account][nCheckpoints - 1].votes;\\n }\\n\\n // Next check implicit zero balance\\n if (checkpoints[account][0].fromBlockOrSecond > blockNumberOrSecond) {\\n return 0;\\n }\\n\\n uint32 lower = 0;\\n uint32 upper = nCheckpoints - 1;\\n while (upper > lower) {\\n uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow\\n Checkpoint memory cp = checkpoints[account][center];\\n if (cp.fromBlockOrSecond == blockNumberOrSecond) {\\n return cp.votes;\\n } else if (cp.fromBlockOrSecond < blockNumberOrSecond) {\\n lower = center;\\n } else {\\n upper = center - 1;\\n }\\n }\\n return checkpoints[account][lower].votes;\\n }\\n\\n /*** Admin Functions ***/\\n\\n function _become(XVSVaultProxy xvsVaultProxy) external {\\n require(msg.sender == xvsVaultProxy.admin(), \\\"only proxy admin can change brains\\\");\\n require(xvsVaultProxy._acceptImplementation() == 0, \\\"change not authorized\\\");\\n }\\n\\n function setXvsStore(address _xvs, address _xvsStore) external onlyAdmin {\\n _ensureNonzeroAddress(_xvs);\\n _ensureNonzeroAddress(_xvsStore);\\n\\n address oldXvsContract = xvsAddress;\\n address oldStore = xvsStore;\\n require(oldXvsContract == address(0), \\\"already initialized\\\");\\n\\n xvsAddress = _xvs;\\n xvsStore = _xvsStore;\\n\\n _notEntered = true;\\n\\n emit StoreUpdated(oldXvsContract, oldStore, _xvs, _xvsStore);\\n }\\n\\n /**\\n * @notice Sets the address of the prime token contract\\n * @param _primeToken address of the prime token contract\\n * @param _primeRewardToken address of reward token\\n * @param _primePoolId pool id for reward\\n */\\n function setPrimeToken(IPrime _primeToken, address _primeRewardToken, uint256 _primePoolId) external onlyAdmin {\\n require(address(_primeToken) != address(0), \\\"prime token cannot be zero address\\\");\\n require(_primeRewardToken != address(0), \\\"reward cannot be zero address\\\");\\n\\n _ensureValidPool(_primeRewardToken, _primePoolId);\\n\\n emit NewPrimeToken(primeToken, _primeToken, primeRewardToken, _primeRewardToken, primePoolId, _primePoolId);\\n\\n primeToken = _primeToken;\\n primeRewardToken = _primeRewardToken;\\n primePoolId = _primePoolId;\\n }\\n\\n /**\\n * @dev Initializes the contract to use either blocks or seconds\\n * @param timeBased_ A boolean indicating whether the contract is based on time or block\\n * If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR\\n * @param blocksPerYear_ The number of blocks per year\\n */\\n function initializeTimeManager(bool timeBased_, uint256 blocksPerYear_) external onlyAdmin {\\n _initializeTimeManager(timeBased_, blocksPerYear_);\\n }\\n\\n /**\\n * @notice Sets the address of the access control of this contract\\n * @dev Admin function to set the access control address\\n * @param newAccessControlAddress New address for the access control\\n */\\n function setAccessControl(address newAccessControlAddress) external onlyAdmin {\\n _setAccessControlManager(newAccessControlAddress);\\n }\\n\\n /**\\n * @dev Reverts if the provided address is a zero address\\n * @param address_ Address to check\\n */\\n function _ensureNonzeroAddress(address address_) internal pure {\\n require(address_ != address(0), \\\"zero address not allowed\\\");\\n }\\n\\n /**\\n * @dev Transfers the reward to the user, taking into account the rewards store\\n * balance and the previous debt. If there are not enough rewards in the store,\\n * transfers the available funds and records the debt amount in pendingRewardTransfers.\\n * @param rewardToken Reward token address\\n * @param userAddress User address\\n * @param amount Reward amount, in reward tokens\\n */\\n function _transferReward(address rewardToken, address userAddress, uint256 amount) internal {\\n address xvsStore_ = xvsStore;\\n uint256 storeBalance = IBEP20(rewardToken).balanceOf(xvsStore_);\\n uint256 debtDueToFailedTransfers = pendingRewardTransfers[rewardToken][userAddress];\\n uint256 fullAmount = amount.add(debtDueToFailedTransfers);\\n\\n if (fullAmount <= storeBalance) {\\n if (debtDueToFailedTransfers != 0) {\\n pendingRewardTransfers[rewardToken][userAddress] = 0;\\n emit VaultDebtUpdated(rewardToken, userAddress, debtDueToFailedTransfers, 0);\\n }\\n XVSStore(xvsStore_).safeRewardTransfer(rewardToken, userAddress, fullAmount);\\n return;\\n }\\n // Overflow isn't possible due to the check above\\n uint256 newOwedAmount = fullAmount - storeBalance;\\n pendingRewardTransfers[rewardToken][userAddress] = newOwedAmount;\\n emit VaultDebtUpdated(rewardToken, userAddress, debtDueToFailedTransfers, newOwedAmount);\\n XVSStore(xvsStore_).safeRewardTransfer(rewardToken, userAddress, storeBalance);\\n }\\n\\n /**\\n * @dev Computes cumulative reward for all user's shares\\n * @param user UserInfo storage struct\\n * @param pool PoolInfo storage struct\\n */\\n function _cumulativeReward(UserInfo storage user, PoolInfo storage pool) internal view returns (uint256) {\\n return user.amount.sub(user.pendingWithdrawals).mul(pool.accRewardPerShare).div(1e12);\\n }\\n\\n /**\\n * @dev Computes the reward for all user's shares\\n * @param user UserInfo storage struct\\n * @param pool PoolInfo storage struct\\n */\\n function _computeReward(UserInfo storage user, PoolInfo storage pool) internal view returns (uint256) {\\n return _cumulativeReward(user, pool).sub(user.rewardDebt);\\n }\\n}\\n\",\"keccak256\":\"0xb60ac3238f6c088bc105fd784fb15e7e8d3e7c8fd14640f1945563c0ecd1a68c\"},\"contracts/XVSVault/XVSVaultErrorReporter.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\ncontract XVSVaultErrorReporter {\\n enum Error {\\n NO_ERROR,\\n UNAUTHORIZED\\n }\\n\\n enum FailureInfo {\\n ACCEPT_ADMIN_PENDING_ADMIN_CHECK,\\n ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK,\\n SET_PENDING_ADMIN_OWNER_CHECK,\\n SET_PENDING_IMPLEMENTATION_OWNER_CHECK\\n }\\n\\n /**\\n * @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary\\n * contract-specific code that enables us to report opaque error codes from upgradeable contracts.\\n **/\\n event Failure(uint error, uint info, uint detail);\\n\\n /**\\n * @dev use this when reporting a known error from the money market or a non-upgradeable collaborator\\n */\\n function fail(Error err, FailureInfo info) internal returns (uint) {\\n emit Failure(uint(err), uint(info), 0);\\n\\n return uint(err);\\n }\\n\\n /**\\n * @dev use this when reporting an opaque error from an upgradeable collaborator contract\\n */\\n function failOpaque(Error err, FailureInfo info, uint opaqueError) internal returns (uint) {\\n emit Failure(uint(err), uint(info), opaqueError);\\n\\n return uint(err);\\n }\\n}\\n\",\"keccak256\":\"0xa79877a281d024f0d03dbf1842a36a972ee6c1aa36ba93e3d646726d40684a26\"},\"contracts/XVSVault/XVSVaultProxy.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"./XVSVaultStorage.sol\\\";\\nimport \\\"./XVSVaultErrorReporter.sol\\\";\\n\\n/**\\n * @title XVS Vault Proxy\\n * @author Venus\\n * @notice XVS Vault Proxy contract\\n */\\ncontract XVSVaultProxy is XVSVaultAdminStorage, XVSVaultErrorReporter {\\n /**\\n * @notice Emitted when pendingXVSVaultImplementation is changed\\n */\\n event NewPendingImplementation(address oldPendingImplementation, address newPendingImplementation);\\n\\n /**\\n * @notice Emitted when pendingXVSVaultImplementation is accepted, which means XVS Vault implementation is updated\\n */\\n event NewImplementation(address oldImplementation, address newImplementation);\\n\\n /**\\n * @notice Emitted when pendingAdmin is changed\\n */\\n event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n /**\\n * @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n */\\n event NewAdmin(address oldAdmin, address newAdmin);\\n\\n constructor() public {\\n // Set admin to caller\\n admin = msg.sender;\\n }\\n\\n /*** Admin Functions ***/\\n function _setPendingImplementation(address newPendingImplementation) public returns (uint) {\\n if (msg.sender != admin) {\\n return fail(Error.UNAUTHORIZED, FailureInfo.SET_PENDING_IMPLEMENTATION_OWNER_CHECK);\\n }\\n\\n address oldPendingImplementation = pendingXVSVaultImplementation;\\n\\n pendingXVSVaultImplementation = newPendingImplementation;\\n\\n emit NewPendingImplementation(oldPendingImplementation, pendingXVSVaultImplementation);\\n\\n return uint(Error.NO_ERROR);\\n }\\n\\n /**\\n * @notice Accepts new implementation of XVS Vault. msg.sender must be pendingImplementation\\n * @dev Admin function for new implementation to accept it's role as implementation\\n * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\\n */\\n function _acceptImplementation() public returns (uint) {\\n // Check caller is pendingImplementation\\n if (msg.sender != pendingXVSVaultImplementation) {\\n return fail(Error.UNAUTHORIZED, FailureInfo.ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK);\\n }\\n\\n // Save current values for inclusion in log\\n address oldImplementation = implementation;\\n address oldPendingImplementation = pendingXVSVaultImplementation;\\n\\n implementation = pendingXVSVaultImplementation;\\n\\n pendingXVSVaultImplementation = address(0);\\n\\n emit NewImplementation(oldImplementation, implementation);\\n emit NewPendingImplementation(oldPendingImplementation, pendingXVSVaultImplementation);\\n\\n return uint(Error.NO_ERROR);\\n }\\n\\n /**\\n * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n * @param newPendingAdmin New pending admin.\\n * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\\n */\\n function _setPendingAdmin(address newPendingAdmin) public returns (uint) {\\n // Check caller = admin\\n if (msg.sender != admin) {\\n return fail(Error.UNAUTHORIZED, FailureInfo.SET_PENDING_ADMIN_OWNER_CHECK);\\n }\\n\\n // Save current value, if any, for inclusion in log\\n address oldPendingAdmin = pendingAdmin;\\n\\n // Store pendingAdmin with value newPendingAdmin\\n pendingAdmin = newPendingAdmin;\\n\\n // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n\\n return uint(Error.NO_ERROR);\\n }\\n\\n /**\\n * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n * @dev Admin function for pending admin to accept role and update admin\\n * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)\\n */\\n function _acceptAdmin() public returns (uint) {\\n // Check caller is pendingAdmin\\n if (msg.sender != pendingAdmin) {\\n return fail(Error.UNAUTHORIZED, FailureInfo.ACCEPT_ADMIN_PENDING_ADMIN_CHECK);\\n }\\n\\n // Save current values for inclusion in log\\n address oldAdmin = admin;\\n address oldPendingAdmin = pendingAdmin;\\n\\n // Store admin with value pendingAdmin\\n admin = pendingAdmin;\\n\\n // Clear the pending value\\n pendingAdmin = address(0);\\n\\n emit NewAdmin(oldAdmin, admin);\\n emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n\\n return uint(Error.NO_ERROR);\\n }\\n\\n /**\\n * @dev Delegates execution to an implementation contract.\\n * It returns to the external caller whatever the implementation returns\\n * or forwards reverts.\\n */\\n function() external payable {\\n // delegate all other functions to current implementation\\n (bool success, ) = implementation.delegatecall(msg.data);\\n\\n assembly {\\n let free_mem_ptr := mload(0x40)\\n returndatacopy(free_mem_ptr, 0, returndatasize)\\n\\n switch success\\n case 0 {\\n revert(free_mem_ptr, returndatasize)\\n }\\n default {\\n return(free_mem_ptr, returndatasize)\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb39af917833659fe38f2f76924deda420babed8259b27741dc6cb402ade4d124\"},\"contracts/XVSVault/XVSVaultStorage.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/SafeMath.sol\\\";\\nimport \\\"../Utils/IBEP20.sol\\\";\\nimport \\\"../Tokens/Prime/IPrime.sol\\\";\\n\\ncontract XVSVaultAdminStorage {\\n /**\\n * @notice Administrator for this contract\\n */\\n address public admin;\\n\\n /**\\n * @notice Pending administrator for this contract\\n */\\n address public pendingAdmin;\\n\\n /**\\n * @notice Active brains of XVS Vault\\n */\\n address public implementation;\\n\\n /**\\n * @notice Pending brains of XVS Vault\\n */\\n address public pendingXVSVaultImplementation;\\n}\\n\\ncontract XVSVaultStorageV1 is XVSVaultAdminStorage {\\n /// @notice Guard variable for re-entrancy checks\\n bool internal _notEntered;\\n\\n /// @notice The reward token store\\n address public xvsStore;\\n\\n /// @notice The xvs token address\\n address public xvsAddress;\\n\\n // Reward tokens created per block or second indentified by reward token address.\\n mapping(address => uint256) public rewardTokenAmountsPerBlockOrSecond;\\n\\n /// @notice Info of each user.\\n struct UserInfo {\\n uint256 amount;\\n uint256 rewardDebt;\\n uint256 pendingWithdrawals;\\n }\\n\\n // Info of each pool.\\n struct PoolInfo {\\n IBEP20 token; // Address of token contract to stake.\\n uint256 allocPoint; // How many allocation points assigned to this pool.\\n uint256 lastRewardBlockOrSecond; // Last block number or second that reward tokens distribution occurs.\\n uint256 accRewardPerShare; // Accumulated per share, times 1e12. See below.\\n uint256 lockPeriod; // Min time between withdrawal request and its execution.\\n }\\n\\n // Infomation about a withdrawal request\\n struct WithdrawalRequest {\\n uint256 amount;\\n uint128 lockedUntil;\\n uint128 afterUpgrade;\\n }\\n\\n // Info of each user that stakes tokens.\\n mapping(address => mapping(uint256 => mapping(address => UserInfo))) internal userInfos;\\n\\n // Info of each pool.\\n mapping(address => PoolInfo[]) public poolInfos;\\n\\n // Total allocation points. Must be the sum of all allocation points in all pools.\\n mapping(address => uint256) public totalAllocPoints;\\n\\n // Info of requested but not yet executed withdrawals\\n mapping(address => mapping(uint256 => mapping(address => WithdrawalRequest[]))) internal withdrawalRequests;\\n\\n /// @notice DEPRECATED A record of each accounts delegate (before the voting power fix)\\n mapping(address => address) private __oldDelegatesSlot;\\n\\n /// @notice A checkpoint for marking number of votes from a given block or second\\n struct Checkpoint {\\n uint32 fromBlockOrSecond;\\n uint96 votes;\\n }\\n\\n /// @notice DEPRECATED A record of votes checkpoints for each account, by index (before the voting power fix)\\n mapping(address => mapping(uint32 => Checkpoint)) private __oldCheckpointsSlot;\\n\\n /// @notice DEPRECATED The number of checkpoints for each account (before the voting power fix)\\n mapping(address => uint32) private __oldNumCheckpointsSlot;\\n\\n /// @notice A record of states for signing / validating signatures\\n mapping(address => uint) public nonces;\\n\\n /// @notice The EIP-712 typehash for the contract's domain\\n bytes32 public constant DOMAIN_TYPEHASH =\\n keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n /// @notice The EIP-712 typehash for the delegation struct used by the contract\\n bytes32 public constant DELEGATION_TYPEHASH =\\n keccak256(\\\"Delegation(address delegatee,uint256 nonce,uint256 expiry)\\\");\\n}\\n\\ncontract XVSVaultStorage is XVSVaultStorageV1 {\\n /// @notice A record of each accounts delegate\\n mapping(address => address) public delegates;\\n\\n /// @notice A record of votes checkpoints for each account, by index\\n mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;\\n\\n /// @notice The number of checkpoints for each account\\n mapping(address => uint32) public numCheckpoints;\\n\\n /// @notice Tracks pending withdrawals for all users for a particular reward token and pool id\\n mapping(address => mapping(uint256 => uint256)) public totalPendingWithdrawals;\\n\\n /// @notice pause indicator for Vault\\n bool public vaultPaused;\\n\\n /// @notice if the token is added to any of the pools\\n mapping(address => bool) public isStakedToken;\\n\\n /// @notice Amount we owe to users because of failed transfer attempts\\n mapping(address => mapping(address => uint256)) public pendingRewardTransfers;\\n\\n /// @notice Prime token contract address\\n IPrime public primeToken;\\n\\n /// @notice Reward token for which prime token is issued for staking\\n address public primeRewardToken;\\n\\n /// @notice Pool ID for which prime token is issued for staking\\n uint256 public primePoolId;\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0xb09f9295c41bdac1350a3607f2b4ea326cb295a6d08f4145bc33ff87844cd02b\"}},\"version\":1}",
|
|
1700
|
+
"bytecode": "0x608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561578980620000336000396000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806392e35000116101d3578063c7ad089511610104578063e7a324dc116100a2578063f55401621161007c578063f554016214610732578063f851a4401461073a578063fba1b1f914610742578063fe5a451a1461075557610378565b8063e7a324dc14610701578063e8f2be6f14610709578063f1127ed81461071157610378565b8063dae66bbe116100de578063dae66bbe146106d6578063de0368b2146106e9578063e1d146fb146106f1578063e6a69ab8146106f957610378565b8063c7ad0895146106a8578063cd9b94e7146106b0578063d7ae45e2146106c357610378565b8063add8933711610171578063b6a5fd2f1161014b578063b6a5fd2f1461064f578063c210259614610662578063c3c754a814610682578063c3cda5201461069557610378565b8063add893371461061f578063b4a0bdf314610627578063b4b5ea571461063c57610378565b80639e2b6c4d116101ad5780639e2b6c4d146105d3578063a09eab7a146105e6578063a6997762146105f9578063a9d69a691461060c57610378565b806392e350001461057a57806398e1b31b1461059e578063996cba68146105c057610378565b80635c19a95c116102ad57806373d025d61161024b5780637ecebe00116102255780637ecebe00146105395780638308d7e91461054c5780638456cb591461055f5780638ed7333d1461056757610378565b806373d025d6146104f1578063782d6fe1146105065780637ac924561461052657610378565b80635ff56315116102875780635ff56315146104a35780636857249c146104b65780636dd77cbd146104be5780636fcfff45146104d157610378565b80635c19a95c146104755780635c60da1b146104885780635f14e7001461049057610378565b806324f52bbf1161031a578063358ae036116102f4578063358ae036146104345780633d4180f91461043c5780634298bdbd1461044f578063587cde1e1461046257610378565b806324f52bbf1461040457806326782247146104195780632eda5c6c1461042157610378565b8063115b512f11610356578063115b512f146103c357806319129e5a146103d65780631d504dc6146103e957806320606b70146103fc57610378565b8063046f7da21461037d5780630af13728146103875780630efe6a8b146103b0575b600080fd5b61038561075d565b005b61039a6103953660046140be565b6107e8565b6040516103a791906150ae565b60405180910390f35b6103856103be366004614176565b61082e565b6103856103d1366004614176565b610b23565b6103856103e4366004613fcb565b610ed7565b6103856103f73660046142bd565b610f0d565b61039a61103e565b61040c611055565b6040516103a79190614f4c565b61040c611064565b61039a61042f366004613fcb565b611073565b61040c611092565b61039a61044a366004614007565b6110a1565b61039a61045d366004613fcb565b6110be565b61040c610470366004613fcb565b6110d0565b610385610483366004613fcb565b6110eb565b61040c611118565b61039a61049e36600461408e565b611127565b6103856104b1366004614007565b611144565b61039a611238565b61039a6104cc3660046140be565b61123e565b6104e46104df366004613fcb565b6112f3565b6040516103a7919061545c565b6104f961130b565b6040516103a791906150a0565b61051961051436600461408e565b611314565b6040516103a79190615485565b61038561053436600461408e565b61152a565b61039a610547366004613fcb565b611873565b61038561055a366004614176565b611885565b610385611a2b565b61038561057536600461408e565b611ab0565b61058d61058836600461408e565b611aeb565b6040516103a795949392919061511b565b6105b16105ac3660046140be565b611b40565b6040516103a793929190615441565b6103856105ce366004614041565b611b92565b6103856105e1366004614176565b611d24565b61039a6105f43660046140be565b611e0f565b61038561060736600461427d565b61205f565b61039a61061a3660046140be565b612093565b61040c6120d5565b61062f6120e4565b6040516103a7919061510d565b61051961064a366004613fcb565b6120f3565b61038561065d36600461408e565b612163565b6106756106703660046140be565b612289565b6040516103a7919061508f565b6104f9610690366004613fcb565b612343565b6103856106a33660046141a8565b612358565b6104f96124fc565b61039a6106be366004613fcb565b612505565b61039a6106d1366004613fcb565b612517565b6103856106e436600461429c565b612532565b61040c61263e565b61039a61264d565b61039a612674565b61039a61267c565b61039a612688565b61072461071f36600461422f565b61268e565b6040516103a792919061546a565b61039a6126c3565b61040c6126cb565b610385610750366004614101565b6126da565b61062f6129bf565b61078660405180604001604052806008815260200167726573756d65282960c01b8152506129ce565b60135460ff166107b15760405162461bcd60e51b81526004016107a8906151d8565b60405180910390fd5b6013805460ff1916905560405133907fd2619572a1464e0df0bb351d834fd47f3350984d7bfdb1ab69cfcb0b8e42141590600090a2565b60006107f48484612a70565b506001600160a01b0380841660009081526007602090815260408083208684528252808320938516835292905220600201545b9392505050565b600354600160a01b900460ff166108575760405162461bcd60e51b81526004016107a890615348565b6003805460ff60a01b1916905560135460ff16156108875760405162461bcd60e51b81526004016107a8906151c8565b6108918383612a70565b6001600160a01b03831660009081526008602052604081208054849081106108b557fe5b600091825260208083206001600160a01b038816845260078252604080852088865283528085203386529092529220600590910290910191506108f88585612aa7565b610903858533612093565b156109205760405162461bcd60e51b81526004016107a8906152e8565b8054156109955760006109338284612c84565b9050801561099357610946863383612c98565b84866001600160a01b0316336001600160a01b03167f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e946458460405161098a91906150ae565b60405180910390a45b505b81546109b2906001600160a01b031633308663ffffffff612f1116565b80546109c4908463ffffffff612f7216565b81556109d08183612fb4565b600182015560055482546001600160a01b0390811691161415610a3757336000908152600f60209081526040808320548151606081019092526021808352610a3794936001600160a01b0390921692610a329289929061562990830139612fe2565b613011565b6017546001600160a01b038681169116148015610a55575060185484145b15610abd576016546040516337f23cd360e01b81526001600160a01b03909116906337f23cd390610a8a903390600401614f5a565b600060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b505050505b83856001600160a01b0316336001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d786604051610b0191906150ae565b60405180910390a450506003805460ff60a01b1916600160a01b179055505050565b600354600160a01b900460ff16610b4c5760405162461bcd60e51b81526004016107a890615348565b6003805460ff60a01b1916905560135460ff1615610b7c5760405162461bcd60e51b81526004016107a8906151c8565b610b868383612a70565b60008111610ba65760405162461bcd60e51b81526004016107a890615308565b6001600160a01b0383166000908152600760209081526040808320858452825280832033845290915290206002810154610be6908363ffffffff612f7216565b81541015610c065760405162461bcd60e51b81526004016107a8906153e8565b6001600160a01b0384166000908152600860205260408120805485908110610c2a57fe5b600091825260208083206001600160a01b0389168452600a825260408085208986528352808520338652909252908320600590920201925090610c6c826131a3565b5090508015610c8d5760405162461bcd60e51b81526004016107a8906152e8565b610c978787612aa7565b6000610ca38585612c84565b9050610cb0883383612c98565b6004840154600090610cc8904263ffffffff612f7216565b9050610cd686858984613247565b6001600160a01b03891660009081526012602090815260408083208b8452909152902054610d0a908863ffffffff612f7216565b6001600160a01b038a1660009081526012602090815260408083208c8452909152902055610d388686612fb4565b600187015560055485546001600160a01b0390811691161415610d9b57336000908152600f6020908152604080832054815160608101909252602b808352610d9b946001600160a01b03909216939192610a32928d92906155d690830139612fe2565b6017546001600160a01b038a81169116148015610db9575060185488145b15610e21576016546040516337f23cd360e01b81526001600160a01b03909116906337f23cd390610dee903390600401614f5a565b600060405180830381600087803b158015610e0857600080fd5b505af1158015610e1c573d6000803e3d6000fd5b505050505b87896001600160a01b0316336001600160a01b03167f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e9464585604051610e6591906150ae565b60405180910390a487896001600160a01b0316336001600160a01b03167f88a254a0ef28a0b9e957ff600beae69870f6f924065147f3627c3f814e60ec118a604051610eb191906150ae565b60405180910390a450506003805460ff60a01b1916600160a01b17905550505050505050565b6000546001600160a01b03163314610f015760405162461bcd60e51b81526004016107a890615368565b610f0a8161342b565b50565b806001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4657600080fd5b505afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f7e9190810190613fe9565b6001600160a01b0316336001600160a01b031614610fae5760405162461bcd60e51b81526004016107a8906153f8565b806001600160a01b031663c1e803346040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fe957600080fd5b505af1158015610ffd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061102191908101906142db565b15610f0a5760405162461bcd60e51b81526004016107a890615378565b60405161104a90614f36565b604051809103902081565b6004546001600160a01b031681565b6001546001600160a01b031681565b6001600160a01b0381166000908152600660205260409020545b919050565b6005546001600160a01b031681565b601560209081526000928352604080842090915290825290205481565b60096020526000908152604090205481565b600f602052600090815260409020546001600160a01b031681565b60135460ff161561110e5760405162461bcd60e51b81526004016107a8906151c8565b610f0a33826134b0565b6002546001600160a01b031681565b601260209081526000928352604080842090915290825290205481565b6000546001600160a01b0316331461116e5760405162461bcd60e51b81526004016107a890615368565b6111778261353f565b6111808161353f565b6005546004546001600160a01b03918216911681156111b15760405162461bcd60e51b81526004016107a8906152a8565b600580546001600160a01b038087166001600160a01b03199283161790925560048054928616929091169190911790556003805460ff60a01b1916600160a01b1790556040517f559f314bb90394a4a9ceb724f365b36a53587d894352c43d12901fd6801014569061122a908490849088908890614fcb565b60405180910390a150505050565b60795481565b600061124a8484612a70565b6001600160a01b038085166000908152600a60209081526040808320878452825280832093861683529290522080545b6000811180156112aa57506112aa82600183038154811061129757fe5b9060005260206000209060020201613565565b156112ea576112df8260018303815481106112c157fe5b6000918252602090912060029091020154849063ffffffff612f7216565b92506000190161127a565b50509392505050565b60116020526000908152604090205463ffffffff1681565b60135460ff1681565b600061131e61264d565b821061133c5760405162461bcd60e51b81526004016107a8906152b8565b6001600160a01b03831660009081526011602052604090205463ffffffff168061136a576000915050611524565b6001600160a01b038416600090815260106020908152604080832063ffffffff6000198601811685529252909120541683106113e6576001600160a01b03841660009081526010602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050611524565b6001600160a01b038416600090815260106020908152604080832083805290915290205463ffffffff16831015611421576000915050611524565b600060001982015b8163ffffffff168163ffffffff1611156114e457600282820363ffffffff16048103611453613f51565b506001600160a01b038716600090815260106020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b031691810191909152908714156114bf576020015194506115249350505050565b805163ffffffff168711156114d6578193506114dd565b6001820392505b5050611429565b506001600160a01b038516600090815260106020908152604080832063ffffffff909416835292905220546001600160601b03600160201b909104169150505b92915050565b600354600160a01b900460ff166115535760405162461bcd60e51b81526004016107a890615348565b6003805460ff60a01b1916905560135460ff16156115835760405162461bcd60e51b81526004016107a8906151c8565b61158d8282612a70565b6001600160a01b03821660009081526008602052604081208054839081106115b157fe5b600091825260208083206001600160a01b038716808552600783526040808620888752845280862033808852908552818720928752600a8552818720898852855281872090875290935291842060059093020193509180611612848461357a565b9092509050811515806116255750600081115b6116415760405162461bcd60e51b81526004016107a890615388565b81158061164c575080155b6116685760405162461bcd60e51b81526004016107a890615188565b8115611781576116788787612aa7565b60006116be85600101546116b264e8d4a510006116a68a600301548a6000015461367190919063ffffffff16565b9063ffffffff6136ab16565b9063ffffffff6136ed16565b6004805460405163135b33cd60e31b81529293506001600160a01b031691639ad99e68916116f2918c913391879101614fa3565b600060405180830381600087803b15801561170c57600080fd5b505af1158015611720573d6000803e3d6000fd5b50508654611737925090508463ffffffff6136ed16565b808655600387015461175a9164e8d4a51000916116a6919063ffffffff61367116565b6001860155855461177b906001600160a01b0316338563ffffffff61372f16565b50611805565b8354611793908263ffffffff6136ed16565b84556001600160a01b03871660009081526012602090815260408083208984529091529020546117c9908263ffffffff6136ed16565b6001600160a01b0380891660009081526012602090815260408083208b845290915290209190915585546118059116338363ffffffff61372f16565b856001600160a01b038816337fe31da05fae6db869f5ea51f4b638aa6884070b6c87f18f63bd2291a12cb2f518611842868663ffffffff612f7216565b60405161184f91906150ae565b60405180910390a450506003805460ff60a01b1916600160a01b1790555050505050565b600e6020526000908152604090205481565b6118c36040518060400160405280601c81526020017f73657428616464726573732c75696e743235362c75696e7432353629000000008152506129ce565b6118cd8383612a70565b6118d683613751565b6001600160a01b0383166000908152600860205260408120805490919061194f9084906119439085908890811061190957fe5b60009182526020808320600160059093020191909101546001600160a01b038b16835260099091526040909120549063ffffffff6136ed16565b9063ffffffff612f7216565b9050600081116119715760405162461bcd60e51b81526004016107a890615408565b600082858154811061197f57fe5b9060005260206000209060050201600101549050838386815481106119a057fe5b9060005260206000209060050201600101819055508160096000886001600160a01b03166001600160a01b031681526020019081526020016000208190555084866001600160a01b03167f6ee09c6cb801194690c195c69f465aaf7c80255cbeafaab9600f47ed79de2ca98387604051611a1b929190615433565b60405180910390a3505050505050565b611a53604051806040016040528060078152602001667061757365282960c81b8152506129ce565b60135460ff1615611a765760405162461bcd60e51b81526004016107a890615268565b6013805460ff1916600117905560405133907fdffada2889ebfab9224c24069d833f3de835d8cf99872d49e7b7ba5fccb7a46f90600090a2565b60135460ff1615611ad35760405162461bcd60e51b81526004016107a8906151c8565b611add8282612a70565b611ae78282612aa7565b5050565b60086020528160005260406000208181548110611b0457fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b039093169550909350919085565b6000806000611b4f8686612a70565b5050506001600160a01b03928316600090815260076020908152604080832094835293815283822092909416815292529020805460018201546002909201549092565b600354600160a01b900460ff16611bbb5760405162461bcd60e51b81526004016107a890615348565b6003805460ff60a01b1916905560135460ff1615611beb5760405162461bcd60e51b81526004016107a8906151c8565b611bf58282612a70565b6001600160a01b0382166000908152600860205260408120805483908110611c1957fe5b600091825260208083206001600160a01b0380881685526007835260408086208887528452808620918a1686529252922060059091029091019150611c5e8484612aa7565b611c69848487612093565b15611c865760405162461bcd60e51b81526004016107a8906152e8565b805415611d0a576000611c998284612c84565b90508015611d0857611cab8284612fb4565b6001830155611cbb858783612c98565b83856001600160a01b0316876001600160a01b03167f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e9464584604051611cff91906150ae565b60405180910390a45b505b50506003805460ff60a01b1916600160a01b179055505050565b611d4560405180606001604052806033815260200161568c603391396129ce565b611d4f8383612a70565b600081118015611d6257506312cc030081105b611d7e5760405162461bcd60e51b81526004016107a890615398565b6001600160a01b0383166000908152600860205260408120805484908110611da257fe5b9060005260206000209060050201905060008160040154905082826004018190555083856001600160a01b03167f0bcf80c5060ccf99b7a993c57a94b232fc2c5c04bd74c7c7d174595fee6bc31f8386604051611e00929190615433565b60405180910390a35050505050565b6000611e1b8484612a70565b6001600160a01b0384166000908152600860205260408120805485908110611e3f57fe5b600091825260208083206001600160a01b03808a168086526007845260408087208b885285528087208a8416885285528087206003600590970290940195860154918752601285528087208b885290945283862054855494516370a0823160e01b8152959750929590949093611f16939216906370a0823190611ec6903090600401614f4c565b60206040518083038186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116b291908101906142db565b90506000611f2261264d565b6001600160a01b038a1660009081526006602052604090205460028701549192509082118015611f5157508215155b15611fe7576000611f6f8760020154846136ed90919063ffffffff16565b6001600160a01b038c1660009081526009602052604081205460018a01549293509091611fb791906116a690611fab868863ffffffff61367116565b9063ffffffff61367116565b9050611fe2611fd5866116a68464e8d4a5100063ffffffff61367116565b879063ffffffff612f7216565b955050505b6001600160a01b03808b166000908152600a602090815260408083208d84528252808320938c16835292905290812090612020826131a3565b91505061204f87600101546116b264e8d4a510006116a68a611fab878e600001546136ed90919063ffffffff16565b9c9b505050505050505050505050565b6000546001600160a01b031633146120895760405162461bcd60e51b81526004016107a890615368565b611ae78282613786565b6001600160a01b038084166000908152600a60209081526040808320868452825280832093851683529290529081206120cb816131a3565b5095945050505050565b6017546001600160a01b031681565b6047546001600160a01b031690565b6001600160a01b03811660009081526011602052604081205463ffffffff168061211e576000610827565b6001600160a01b0383166000908152601060209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03169392505050565b6121846040518060600160405280603081526020016156eb603091396129ce565b60048054604051633d6ac5b360e21b81526001600160a01b039091169163f5ab16cc916121b391869101614f4c565b60206040518083038186803b1580156121cb57600080fd5b505afa1580156121df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612203919081019061425f565b61221f5760405162461bcd60e51b81526004016107a890615358565b61222882613751565b6001600160a01b0382166000818152600660205260409081902080549084905590519091907fad96cee0d692f0250b98e085504f399da6733854908215f6203fe3c69366d9f59061227c9084908690615433565b60405180910390a2505050565b60606122958484612a70565b6001600160a01b038085166000908152600a602090815260408083208784528252808320938616835292815282822080548451818402810184019095528085529092909184015b828210156123365760008481526020908190206040805160608101825260028602909201805483526001908101546001600160801b0380821685870152600160801b909104169183019190915290835290920191016122dc565b5050505090509392505050565b60146020526000908152604090205460ff1681565b60135460ff161561237b5760405162461bcd60e51b81526004016107a8906151c8565b600060405161238990614f36565b604080519182900382208282019091526008825267161594d5985d5b1d60c21b6020909201919091527fddfcc46608a8bd52ebf900f03a24cc97b73a6046cec8c5d0f74a211e376e967a6123db613835565b306040516020016123ef94939291906150ca565b604051602081830303815290604052805190602001209050600060405161241590614f41565b604051908190038120612430918a908a908a906020016150bc565b6040516020818303038152906040528051906020012090506000828260405160200161245d929190614f05565b604051602081830303815290604052805190602001209050600061248382888888613839565b6001600160a01b0381166000908152600e6020526040902080546001810190915590915089146124c55760405162461bcd60e51b81526004016107a890615238565b874211156124e55760405162461bcd60e51b81526004016107a890615218565b6124ef818b6134b0565b505050505b505050505050565b607a5460ff1681565b60066020526000908152604090205481565b6001600160a01b031660009081526008602052604090205490565b6000546001600160a01b0316331461255c5760405162461bcd60e51b81526004016107a890615368565b6001600160a01b0383166125825760405162461bcd60e51b81526004016107a890615228565b6001600160a01b0382166125a85760405162461bcd60e51b81526004016107a8906152c8565b6125b28282612a70565b6016546017546018546040516001600160a01b03808816948116937f8def9436d6e31b89ed00948ba91d0cb6936eada5154cb1b45b55683fb9e492379361260193919092169188918890615024565b60405180910390a3601680546001600160a01b039485166001600160a01b0319918216179091556017805493909416921691909117909155601855565b6003546001600160a01b031681565b607a5460009060ff1661266757612662613863565b61266f565b61266f613867565b905090565b6301e1338081565b60405161104a90614f41565b60185481565b601060209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6312cc030081565b6000546001600160a01b031681565b6126fb6040518060600160405280602c815260200161571b602c91396129ce565b6127048561353f565b61270d8361353f565b6004546001600160a01b03166127355760405162461bcd60e51b81526004016107a8906151a8565b600084116127555760405162461bcd60e51b81526004016107a8906153a8565b61275e85613751565b6001600160a01b0385166000908152600860205260408120805490915b818110156127d957856001600160a01b031683828154811061279957fe5b60009182526020909120600590910201546001600160a01b031614156127d15760405162461bcd60e51b81526004016107a890615328565b60010161277b565b506001600160a01b03851660009081526014602052604090205460ff16156128135760405162461bcd60e51b81526004016107a890615298565b6001600160a01b03871660009081526009602052604090205461283c908763ffffffff612f7216565b6001600160a01b038089166000908152600960209081526040808320949094556006815290839020879055825160a081018452918816825281018890528391810161288561264d565b8152600060208083018290526040928301889052845460018082018755958352818320855160059092020180546001600160a01b0319166001600160a01b039283161781558583015181880155858501516002820155606086015160038201556080909501516004958601558a81168352601490915290829020805460ff1916851790558254915163fb66fb4d60e01b815291169263fb66fb4d9261292d928c929101615059565b600060405180830381600087803b15801561294757600080fd5b505af115801561295b573d6000803e3d6000fd5b50505050846001600160a01b03166001838054905003886001600160a01b03167fd7fa4bff1cd2253c0789c3291a786a6f6b1a3b4569a75af683a15d52abb6a0bf8988886040516129ae93929190615441565b60405180910390a450505050505050565b6016546001600160a01b031681565b6047546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab90612a019033908690600401614f68565b60206040518083038186803b158015612a1957600080fd5b505afa158015612a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a51919081019061425f565b905080611ae75760405162461bcd60e51b81526004016107a8906151e8565b6001600160a01b0382166000908152600860205260409020548110611ae75760405162461bcd60e51b81526004016107a890615198565b6001600160a01b0382166000908152600860205260408120805483908110612acb57fe5b906000526020600020906005020190508060020154612ae861264d565b11612af35750611ae7565b80546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612b23903090600401614f4c565b60206040518083038186803b158015612b3b57600080fd5b505afa158015612b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b7391908101906142db565b6001600160a01b0385166000908152601260209081526040808320878452909152902054909150612bab90829063ffffffff6136ed16565b905080612bc957612bba61264d565b82600201819055505050611ae7565b6000612bd361264d565b90506000612bee8460020154836136ed90919063ffffffff16565b6001600160a01b03871660009081526009602090815260408083205460018901546006909352908320549394509192612c3792916116a691611fab90879063ffffffff61367116565b9050612c66612c55856116a68464e8d4a5100063ffffffff61367116565b60038701549063ffffffff612f7216565b6003860155612c7361264d565b856002018190555050505050505050565b600061082783600101546116b28585612fb4565b600480546040516370a0823160e01b81526001600160a01b03918216926000928716916370a0823191612ccd91869101614f4c565b60206040518083038186803b158015612ce557600080fd5b505afa158015612cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d1d91908101906142db565b6001600160a01b038087166000908152601560209081526040808320938916835292905290812054919250612d58858363ffffffff612f7216565b9050828111612e36578115612dcb576001600160a01b038088166000818152601560209081526040808320948b1680845294909152808220829055517f6bdfd5e51d01475945224d3d37965916fd8df699ef9e8888af4359aa8622216091612dc291879190615418565b60405180910390a35b60405163135b33cd60e31b81526001600160a01b03851690639ad99e6890612dfb908a908a908690600401615009565b600060405180830381600087803b158015612e1557600080fd5b505af1158015612e29573d6000803e3d6000fd5b5050505050505050612f0c565b6001600160a01b038088166000818152601560209081526040808320948b168084529490915290819020868503908190559051909291907f6bdfd5e51d01475945224d3d37965916fd8df699ef9e8888af4359aa8622216090612e9c9087908690615433565b60405180910390a360405163135b33cd60e31b81526001600160a01b03861690639ad99e6890612ed4908b908b908990600401615009565b600060405180830381600087803b158015612eee57600080fd5b505af1158015612f02573d6000803e3d6000fd5b5050505050505050505b505050565b604051612f6c9085906323b872dd60e01b90612f3590879087908790602401615009565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261386b565b50505050565b600061082783836040518060400160405280601b81526020017f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815250613950565b600061082764e8d4a510006116a68460030154611fab876002015488600001546136ed90919063ffffffff16565b600081600160601b84106130095760405162461bcd60e51b81526004016107a89190615167565b509192915050565b816001600160a01b0316836001600160a01b03161415801561303c57506000816001600160601b0316115b15612f0c576001600160a01b038316156130f4576001600160a01b03831660009081526011602052604081205463ffffffff16908161307c5760006130bb565b6001600160a01b0385166000908152601060209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006130e282856040518060600160405280602c81526020016156bf602c9139613980565b90506130f0868484846139bf565b5050505b6001600160a01b03821615612f0c576001600160a01b03821660009081526011602052604081205463ffffffff16908161312f57600061316e565b6001600160a01b0384166000908152601060209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b9050600061319582856040518060600160405280602b81526020016155ab602b9139613b7b565b90506124f4858484846139bf565b805460009081905b8015613241578360018203815481106131c057fe5b6000918252602090912060016002909202018101546001600160801b03600160801b9091041614156132235761321c8460018303815481106131fe57fe5b6000918252602090912060029091020154839063ffffffff612f7216565b9150613238565b6132358460018303815481106112c157fe5b92505b600019016131ab565b50915091565b8254604080516060810182526000808252602080830182815260019484018581528587018a5589845291909220925160028602909301928355905191909201805492516001600160801b03908116600160801b029281166001600160801b0319909416939093179092161790555b6000811180156132f05750818460018303815481106132d057fe5b60009182526020909120600160029092020101546001600160801b031611155b156133775783600182038154811061330457fe5b906000526020600020906002020184828154811061331e57fe5b600091825260209091208254600290920201908155600191820180549290910180546001600160801b0319166001600160801b03938416178082559154600160801b9081900484160291909216179055600019016132b5565b604051806060016040528084815260200161339184613bae565b6001600160801b0316815260200160016001600160801b03168152508482815481106133b957fe5b60009182526020918290208351600292830290910190815591830151600190920180546040909401516001600160801b03199094166001600160801b03938416178316600160801b939094169290920292909217905585015461341c9084612f72565b85600201819055505050505050565b6001600160a01b0381166134515760405162461bcd60e51b81526004016107a890615278565b604780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0906134a49083908590614f88565b60405180910390a15050565b6001600160a01b038083166000908152600f6020526040812054909116906134d784613bd7565b6001600160a01b038581166000818152600f602052604080822080546001600160a01b031916898616908117909155905194955093928616927f0cc323ffec3ea49cbcddc0de1480978126d350c6a45dff33ad2f1cda6ae992619190a4612f6c828483613011565b6001600160a01b038116610f0a5760405162461bcd60e51b81526004016107a8906152d8565b60010154426001600160801b03909116111590565b805460009081905b60008111801561359f575061359f84600183038154811061129757fe5b15613640578360018203815481106135b357fe5b6000918252602090912060016002909202018101546001600160801b03600160801b9091041614156135f8576135f18460018303815481106131fe57fe5b915061360d565b61360a8460018303815481106112c157fe5b92505b8380548061361757fe5b600082815260208120600019928301600281029091018281556001019190915590915501613582565b50613665613654828463ffffffff612f7216565b60028601549063ffffffff6136ed16565b60028501559250929050565b60008261368057506000611524565b8282028284828161368d57fe5b04146108275760405162461bcd60e51b81526004016107a890615318565b600061082783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ced565b600061082783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d24565b604051612f0c90849063a9059cbb60e01b90612f359086908690602401615074565b6001600160a01b038116600090815260086020526040812054905b81811015612f0c5761377e8382612aa7565b60010161376c565b607a54610100900460ff16156137ae5760405162461bcd60e51b81526004016107a8906153b8565b811580156137ba575080155b156137d75760405162461bcd60e51b81526004016107a890615338565b8180156137e357508015155b156138005760405162461bcd60e51b81526004016107a890615258565b607a805460ff191683151517905581613819578061381f565b6301e133805b6079555050607a805461ff001916610100179055565b4690565b600080600061384a87878787613d48565b9150915061385781613e28565b5090505b949350505050565b4390565b4290565b61387d826001600160a01b0316613ef1565b6138995760405162461bcd60e51b81526004016107a8906153d8565b60006060836001600160a01b0316836040516138b59190614ef9565b6000604051808303816000865af19150503d80600081146138f2576040519150601f19603f3d011682016040523d82523d6000602084013e6138f7565b606091505b5091509150816139195760405162461bcd60e51b81526004016107a8906153c8565b805115612f6c5780806020019051613934919081019061425f565b612f6c5760405162461bcd60e51b81526004016107a890615208565b600083830182858210156139775760405162461bcd60e51b81526004016107a89190615167565b50949350505050565b6000836001600160601b0316836001600160601b0316111582906139b75760405162461bcd60e51b81526004016107a89190615167565b505050900390565b60006139ea6139cc61264d565b60405180608001604052806042815260200161564a60429139613f2a565b905060008463ffffffff16118015613a3357506001600160a01b038516600090815260106020908152604080832063ffffffff6000198901811685529252909120548282169116145b15613a92576001600160a01b0385166000908152601060209081526040808320600019880163ffffffff168452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055613b31565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152601083528781208c871682528352878120965187549451909516600160201b026fffffffffffffffffffffffff000000001995871663ffffffff19958616179590951694909417909555938252601190935292909220805460018801909316929091169190911790555b846001600160a01b03167f6adb589fed1e8542fb7a6b10f00a85e02265e77f9ae3ca8ff93b22983e1af9a08484604051613b6c929190615493565b60405180910390a25050505050565b6000838301826001600160601b0380871690831610156139775760405162461bcd60e51b81526004016107a89190615167565b6000600160801b8210613bd35760405162461bcd60e51b81526004016107a890615248565b5090565b6005546000906001600160a01b0316613c025760405162461bcd60e51b81526004016107a8906151f8565b6005546001600160a01b03166000908152600860205260408120805490915b81811015613ce25760055483546001600160a01b0390911690849083908110613c4657fe5b60009182526020909120600590910201546001600160a01b03161415613cda576005546001600160a01b039081166000908152600760209081526040808320858452825280832093891683529290522060028101548154613ccf91613cb1919063ffffffff6136ed16565b60405180606001604052806028815260200161560160289139612fe2565b94505050505061108d565b600101613c21565b506000949350505050565b60008183613d0e5760405162461bcd60e51b81526004016107a89190615167565b506000838581613d1a57fe5b0495945050505050565b600081848411156139b75760405162461bcd60e51b81526004016107a89190615167565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613d7f5750600090506003613e1f565b8460ff16601b14158015613d9757508460ff16601c14155b15613da85750600090506004613e1f565b600060018787878760405160008152602001604052604051613dcd94939291906150f2565b6020604051602081039080840390855afa158015613def573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613e1857506000915060019050613e1f565b9150600090505b94509492505050565b6000816004811115613e3657fe5b1415613e4157610f0a565b6001816004811115613e4f57fe5b1415613e6d5760405162461bcd60e51b81526004016107a890615178565b6002816004811115613e7b57fe5b1415613e995760405162461bcd60e51b81526004016107a8906151b8565b6003816004811115613ea757fe5b1415613ec55760405162461bcd60e51b81526004016107a890615288565b6004816004811115613ed357fe5b1415610f0a5760405162461bcd60e51b81526004016107a8906152f8565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061385b575050151592915050565b600081600160201b84106130095760405162461bcd60e51b81526004016107a89190615167565b604080518082019091526000808252602082015290565b803561152481615569565b805161152481615569565b80356115248161557d565b80516115248161557d565b803561152481615586565b80356115248161558f565b805161152481615586565b803561152481615598565b8035611524816155a1565b600060208284031215613fdd57600080fd5b600061385b8484613f68565b600060208284031215613ffb57600080fd5b600061385b8484613f73565b6000806040838503121561401a57600080fd5b60006140268585613f68565b925050602061403785828601613f68565b9150509250929050565b60008060006060848603121561405657600080fd5b60006140628686613f68565b935050602061407386828701613f68565b925050604061408486828701613f94565b9150509250925092565b600080604083850312156140a157600080fd5b60006140ad8585613f68565b925050602061403785828601613f94565b6000806000606084860312156140d357600080fd5b60006140df8686613f68565b93505060206140f086828701613f94565b925050604061408486828701613f68565b600080600080600060a0868803121561411957600080fd5b60006141258888613f68565b955050602061413688828901613f94565b945050604061414788828901613f9f565b935050606061415888828901613f94565b925050608061416988828901613f94565b9150509295509295909350565b60008060006060848603121561418b57600080fd5b60006141978686613f68565b935050602061407386828701613f94565b60008060008060008060c087890312156141c157600080fd5b60006141cd8989613f68565b96505060206141de89828a01613f94565b95505060406141ef89828a01613f94565b945050606061420089828a01613fc0565b935050608061421189828a01613f94565b92505060a061422289828a01613f94565b9150509295509295509295565b6000806040838503121561424257600080fd5b600061424e8585613f68565b925050602061403785828601613fb5565b60006020828403121561427157600080fd5b600061385b8484613f89565b6000806040838503121561429057600080fd5b60006140ad8585613f7e565b6000806000606084860312156142b157600080fd5b60006140628686613f9f565b6000602082840312156142cf57600080fd5b600061385b8484613f9f565b6000602082840312156142ed57600080fd5b600061385b8484613faa565b60006143058383614e99565b505060600190565b61431681615512565b82525050565b614316816154c1565b6000614330826154b4565b61433a81856154b8565b9350614345836154ae565b8060005b8381101561437357815161435d88826142f9565b9750614368836154ae565b925050600101614349565b509495945050505050565b614316816154cc565b614316816154d1565b61431661439c826154d1565b6154d1565b60006143ac826154b4565b6143b6818561108d565b93506143c6818560208601615533565b9290920192915050565b614316816154d4565b6143168161551d565b60006143ed826154b4565b6143f781856154b8565b9350614407818560208601615533565b6144108161555f565b9093019392505050565b60006144276018836154b8565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000815260200192915050565b60006144606012836154b8565b71696e636f6e73697374656e7420737461746560701b815260200192915050565b600061448e6013836154b8565b727661756c743a20706f6f6c206578697374733f60681b815260200192915050565b60006144bd601f836154b8565b7f53746f726520636f6e7472616374206164647265737320697320656d70747900815260200192915050565b60006144f6601f836154b8565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800815260200192915050565b600061452f600f836154b8565b6e15985d5b1d081a5cc81c185d5cd959608a1b815260200192915050565b600061455a6013836154b8565b7215985d5b1d081a5cc81b9bdd081c185d5cd959606a1b815260200192915050565b6000614589600c836154b8565b6b155b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006145b16030836154b8565b7f5856535661756c743a3a6765745374616b65416d6f756e743a2078767320616481526f191c995cdcc81a5cc81b9bdd081cd95d60821b602082015260400192915050565b6000614603602a836154b8565b7f5361666542455032303a204245503230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b600061464f602a836154b8565b7f5856535661756c743a3a64656c656761746542795369673a207369676e6174758152691c9948195e1c1a5c995960b21b602082015260400192915050565b600061469b6022836154b8565b7f7072696d6520746f6b656e2063616e6e6f74206265207a65726f206164647265815261737360f01b602082015260400192915050565b60006146df6026836154b8565b7f5856535661756c743a3a64656c656761746542795369673a20696e76616c6964815265206e6f6e636560d01b602082015260400192915050565b600061472760028361108d565b61190160f01b815260020192915050565b60006147456027836154b8565b7f53616665436173743a2076616c756520646f65736e27742066697420696e20318152663238206269747360c81b602082015260400192915050565b600061478e6020836154b8565b7f496e76616c69642074696d6520626173656420636f6e66696775726174696f6e815260200192915050565b60006147c76017836154b8565b7f5661756c7420697320616c726561647920706175736564000000000000000000815260200192915050565b60006148006025836154b8565b7f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b602082015260400192915050565b60006148476022836154b8565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c815261756560f01b602082015260400192915050565b600061488b601a836154b8565b7f546f6b656e2065786973747320696e206f7468657220706f6f6c000000000000815260200192915050565b60006148c46013836154b8565b72185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b815260200192915050565b60006148f3602b836154b8565b7f5856535661756c743a3a6765745072696f72566f7465733a206e6f742079657481526a0819195d195c9b5a5b995960aa1b602082015260400192915050565b6000614940601d836154b8565b7f7265776172642063616e6e6f74206265207a65726f2061646472657373000000815260200192915050565b60006149796018836154b8565b7f7a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000815260200192915050565b60006149b2601a836154b8565b7f657865637574652070656e64696e67207769746864726177616c000000000000815260200192915050565b60006149eb6022836154b8565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c815261756560f01b602082015260400192915050565b6000614a2f60438361108d565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000614a9a601f836154b8565b7f72657175657374656420616d6f756e742063616e6e6f74206265207a65726f00815260200192915050565b6000614ad36021836154b8565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000614b166012836154b8565b71141bdbdb08185b1c9958591e48185919195960721b815260200192915050565b6000614b446017836154b8565b7f496e76616c696420626c6f636b73207065722079656172000000000000000000815260200192915050565b6000614b7d600a836154b8565b691c994b595b9d195c995960b21b815260200192915050565b6000614ba36014836154b8565b7324b73b30b634b2103932bbb0b932103a37b5b2b760611b815260200192915050565b6000614bd3600e836154b8565b6d37b7363c9030b236b4b71031b0b760911b815260200192915050565b6000614bfd6015836154b8565b7418da185b99d9481b9bdd08185d5d1a1bdc9a5e9959605a1b815260200192915050565b6000614c2e6013836154b8565b726e6f7468696e6720746f20776974686472617760681b815260200192915050565b6000614c5d601a836154b8565b7f496e76616c6964206e6577206c6f636b696e6720706572696f64000000000000815260200192915050565b6000614c96601d836154b8565b7f416c6c6f6320706f696e7473206d757374206e6f74206265207a65726f000000815260200192915050565b6000614ccf601f836154b8565b7f416c726561647920696e697469616c697a65642054696d654d616e6167657200815260200192915050565b6000614d086020836154b8565b7f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000614d41603a8361108d565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020820152603a0192915050565b6000614da0601f836154b8565b7f5361666542455032303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6000614dd9601b836154b8565b7f72657175657374656420616d6f756e7420697320696e76616c69640000000000815260200192915050565b6000614e126022836154b8565b7f6f6e6c792070726f78792061646d696e2063616e206368616e676520627261698152616e7360f01b602082015260400192915050565b6000614e56602e836154b8565b7f416c6c6f6320706f696e7473207065722072657761726420746f6b656e206d7581526d7374206e6f74206265207a65726f60901b602082015260400192915050565b80516060830190614eaa8482614387565b506020820151614ebd6020850182614ecc565b506040820151612f6c60408501825b614316816154df565b614316816154f7565b61431681615500565b61431681615528565b61431681615506565b600061082782846143a1565b6000614f108261471a565b9150614f1c8285614390565b602082019150614f2c8284614390565b5060200192915050565b600061152482614a22565b600061152482614d34565b60208101611524828461431c565b60208101611524828461430d565b60408101614f76828561430d565b818103602083015261385b81846143e2565b60408101614f96828561431c565b610827602083018461431c565b60608101614fb1828661431c565b614fbe602083018561430d565b61385b6040830184614387565b60808101614fd9828761431c565b614fe6602083018661431c565b614ff3604083018561431c565b615000606083018461431c565b95945050505050565b60608101615017828661431c565b614fbe602083018561431c565b60808101615032828761431c565b61503f602083018661431c565b61504c6040830185614387565b6150006060830184614387565b60408101615067828561431c565b610827602083018461437e565b60408101615082828561431c565b6108276020830184614387565b602080825281016108278184614325565b60208101611524828461437e565b602081016115248284614387565b608081016150328287614387565b608081016150d88287614387565b6150e56020830186614387565b614ff36040830185614387565b608081016151008287614387565b61503f6020830186614ede565b6020810161152482846143d0565b60a0810161512982886143d0565b6151366020830187614387565b6151436040830186614387565b6151506060830185614387565b61515d6080830184614387565b9695505050505050565b6020808252810161082781846143e2565b602080825281016115248161441a565b6020808252810161152481614453565b6020808252810161152481614481565b60208082528101611524816144b0565b60208082528101611524816144e9565b6020808252810161152481614522565b602080825281016115248161454d565b602080825281016115248161457c565b60208082528101611524816145a4565b60208082528101611524816145f6565b6020808252810161152481614642565b602080825281016115248161468e565b60208082528101611524816146d2565b6020808252810161152481614738565b6020808252810161152481614781565b60208082528101611524816147ba565b60208082528101611524816147f3565b602080825281016115248161483a565b602080825281016115248161487e565b60208082528101611524816148b7565b60208082528101611524816148e6565b6020808252810161152481614933565b602080825281016115248161496c565b60208082528101611524816149a5565b60208082528101611524816149de565b6020808252810161152481614a8d565b6020808252810161152481614ac6565b6020808252810161152481614b09565b6020808252810161152481614b37565b6020808252810161152481614b70565b6020808252810161152481614b96565b6020808252810161152481614bc6565b6020808252810161152481614bf0565b6020808252810161152481614c21565b6020808252810161152481614c50565b6020808252810161152481614c89565b6020808252810161152481614cc2565b6020808252810161152481614cfb565b6020808252810161152481614d93565b6020808252810161152481614dcc565b6020808252810161152481614e05565b6020808252810161152481614e49565b604081016154268285614387565b61082760208301846143d9565b604081016150828285614387565b6060810161544f8286614387565b614fbe6020830185614387565b602081016115248284614ed5565b604081016154788285614ed5565b6108276020830184614ef0565b602081016115248284614ef0565b604081016154a18285614ee7565b6108276020830184614ee7565b60200190565b5190565b90815260200190565b6000611524826154eb565b151590565b90565b6000611524826154c1565b6001600160801b031690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6001600160601b031690565b6000611524826154d4565b6000611524826154d1565b600061152482615506565b60005b8381101561554e578181015183820152602001615536565b83811115612f6c5750506000910152565b601f01601f191690565b615572816154c1565b8114610f0a57600080fd5b615572816154cc565b615572816154d1565b615572816154d4565b615572816154f7565b6155728161550056fe5856535661756c743a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77735856535661756c743a3a726571756573745769746864726177616c3a20766f746573206f766572666c6f775856535661756c743a3a6765745374616b65416d6f756e743a20766f746573206f766572666c6f775856535661756c743a3a6465706f7369743a20766f746573206f766572666c6f775856535661756c743a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206f72207365636f6e64206578636565647320333220626974737365745769746864726177616c4c6f636b696e67506572696f6428616464726573732c75696e743235362c75696e74323536295856535661756c743a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773736574526577617264416d6f756e74506572426c6f636b4f725365636f6e6428616464726573732c75696e743235362961646428616464726573732c75696e743235362c616464726573732c75696e743235362c75696e7432353629a365627a7a7231582053ba350123a86f07263e7bddf3bcee0f7cf11e72f5d2678781f0eb1ebd599dc16c6578706572696d656e74616cf564736f6c63430005100040",
|
|
1701
|
+
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103785760003560e01c806392e35000116101d3578063c7ad089511610104578063e7a324dc116100a2578063f55401621161007c578063f554016214610732578063f851a4401461073a578063fba1b1f914610742578063fe5a451a1461075557610378565b8063e7a324dc14610701578063e8f2be6f14610709578063f1127ed81461071157610378565b8063dae66bbe116100de578063dae66bbe146106d6578063de0368b2146106e9578063e1d146fb146106f1578063e6a69ab8146106f957610378565b8063c7ad0895146106a8578063cd9b94e7146106b0578063d7ae45e2146106c357610378565b8063add8933711610171578063b6a5fd2f1161014b578063b6a5fd2f1461064f578063c210259614610662578063c3c754a814610682578063c3cda5201461069557610378565b8063add893371461061f578063b4a0bdf314610627578063b4b5ea571461063c57610378565b80639e2b6c4d116101ad5780639e2b6c4d146105d3578063a09eab7a146105e6578063a6997762146105f9578063a9d69a691461060c57610378565b806392e350001461057a57806398e1b31b1461059e578063996cba68146105c057610378565b80635c19a95c116102ad57806373d025d61161024b5780637ecebe00116102255780637ecebe00146105395780638308d7e91461054c5780638456cb591461055f5780638ed7333d1461056757610378565b806373d025d6146104f1578063782d6fe1146105065780637ac924561461052657610378565b80635ff56315116102875780635ff56315146104a35780636857249c146104b65780636dd77cbd146104be5780636fcfff45146104d157610378565b80635c19a95c146104755780635c60da1b146104885780635f14e7001461049057610378565b806324f52bbf1161031a578063358ae036116102f4578063358ae036146104345780633d4180f91461043c5780634298bdbd1461044f578063587cde1e1461046257610378565b806324f52bbf1461040457806326782247146104195780632eda5c6c1461042157610378565b8063115b512f11610356578063115b512f146103c357806319129e5a146103d65780631d504dc6146103e957806320606b70146103fc57610378565b8063046f7da21461037d5780630af13728146103875780630efe6a8b146103b0575b600080fd5b61038561075d565b005b61039a6103953660046140be565b6107e8565b6040516103a791906150ae565b60405180910390f35b6103856103be366004614176565b61082e565b6103856103d1366004614176565b610b23565b6103856103e4366004613fcb565b610ed7565b6103856103f73660046142bd565b610f0d565b61039a61103e565b61040c611055565b6040516103a79190614f4c565b61040c611064565b61039a61042f366004613fcb565b611073565b61040c611092565b61039a61044a366004614007565b6110a1565b61039a61045d366004613fcb565b6110be565b61040c610470366004613fcb565b6110d0565b610385610483366004613fcb565b6110eb565b61040c611118565b61039a61049e36600461408e565b611127565b6103856104b1366004614007565b611144565b61039a611238565b61039a6104cc3660046140be565b61123e565b6104e46104df366004613fcb565b6112f3565b6040516103a7919061545c565b6104f961130b565b6040516103a791906150a0565b61051961051436600461408e565b611314565b6040516103a79190615485565b61038561053436600461408e565b61152a565b61039a610547366004613fcb565b611873565b61038561055a366004614176565b611885565b610385611a2b565b61038561057536600461408e565b611ab0565b61058d61058836600461408e565b611aeb565b6040516103a795949392919061511b565b6105b16105ac3660046140be565b611b40565b6040516103a793929190615441565b6103856105ce366004614041565b611b92565b6103856105e1366004614176565b611d24565b61039a6105f43660046140be565b611e0f565b61038561060736600461427d565b61205f565b61039a61061a3660046140be565b612093565b61040c6120d5565b61062f6120e4565b6040516103a7919061510d565b61051961064a366004613fcb565b6120f3565b61038561065d36600461408e565b612163565b6106756106703660046140be565b612289565b6040516103a7919061508f565b6104f9610690366004613fcb565b612343565b6103856106a33660046141a8565b612358565b6104f96124fc565b61039a6106be366004613fcb565b612505565b61039a6106d1366004613fcb565b612517565b6103856106e436600461429c565b612532565b61040c61263e565b61039a61264d565b61039a612674565b61039a61267c565b61039a612688565b61072461071f36600461422f565b61268e565b6040516103a792919061546a565b61039a6126c3565b61040c6126cb565b610385610750366004614101565b6126da565b61062f6129bf565b61078660405180604001604052806008815260200167726573756d65282960c01b8152506129ce565b60135460ff166107b15760405162461bcd60e51b81526004016107a8906151d8565b60405180910390fd5b6013805460ff1916905560405133907fd2619572a1464e0df0bb351d834fd47f3350984d7bfdb1ab69cfcb0b8e42141590600090a2565b60006107f48484612a70565b506001600160a01b0380841660009081526007602090815260408083208684528252808320938516835292905220600201545b9392505050565b600354600160a01b900460ff166108575760405162461bcd60e51b81526004016107a890615348565b6003805460ff60a01b1916905560135460ff16156108875760405162461bcd60e51b81526004016107a8906151c8565b6108918383612a70565b6001600160a01b03831660009081526008602052604081208054849081106108b557fe5b600091825260208083206001600160a01b038816845260078252604080852088865283528085203386529092529220600590910290910191506108f88585612aa7565b610903858533612093565b156109205760405162461bcd60e51b81526004016107a8906152e8565b8054156109955760006109338284612c84565b9050801561099357610946863383612c98565b84866001600160a01b0316336001600160a01b03167f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e946458460405161098a91906150ae565b60405180910390a45b505b81546109b2906001600160a01b031633308663ffffffff612f1116565b80546109c4908463ffffffff612f7216565b81556109d08183612fb4565b600182015560055482546001600160a01b0390811691161415610a3757336000908152600f60209081526040808320548151606081019092526021808352610a3794936001600160a01b0390921692610a329289929061562990830139612fe2565b613011565b6017546001600160a01b038681169116148015610a55575060185484145b15610abd576016546040516337f23cd360e01b81526001600160a01b03909116906337f23cd390610a8a903390600401614f5a565b600060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b505050505b83856001600160a01b0316336001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d786604051610b0191906150ae565b60405180910390a450506003805460ff60a01b1916600160a01b179055505050565b600354600160a01b900460ff16610b4c5760405162461bcd60e51b81526004016107a890615348565b6003805460ff60a01b1916905560135460ff1615610b7c5760405162461bcd60e51b81526004016107a8906151c8565b610b868383612a70565b60008111610ba65760405162461bcd60e51b81526004016107a890615308565b6001600160a01b0383166000908152600760209081526040808320858452825280832033845290915290206002810154610be6908363ffffffff612f7216565b81541015610c065760405162461bcd60e51b81526004016107a8906153e8565b6001600160a01b0384166000908152600860205260408120805485908110610c2a57fe5b600091825260208083206001600160a01b0389168452600a825260408085208986528352808520338652909252908320600590920201925090610c6c826131a3565b5090508015610c8d5760405162461bcd60e51b81526004016107a8906152e8565b610c978787612aa7565b6000610ca38585612c84565b9050610cb0883383612c98565b6004840154600090610cc8904263ffffffff612f7216565b9050610cd686858984613247565b6001600160a01b03891660009081526012602090815260408083208b8452909152902054610d0a908863ffffffff612f7216565b6001600160a01b038a1660009081526012602090815260408083208c8452909152902055610d388686612fb4565b600187015560055485546001600160a01b0390811691161415610d9b57336000908152600f6020908152604080832054815160608101909252602b808352610d9b946001600160a01b03909216939192610a32928d92906155d690830139612fe2565b6017546001600160a01b038a81169116148015610db9575060185488145b15610e21576016546040516337f23cd360e01b81526001600160a01b03909116906337f23cd390610dee903390600401614f5a565b600060405180830381600087803b158015610e0857600080fd5b505af1158015610e1c573d6000803e3d6000fd5b505050505b87896001600160a01b0316336001600160a01b03167f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e9464585604051610e6591906150ae565b60405180910390a487896001600160a01b0316336001600160a01b03167f88a254a0ef28a0b9e957ff600beae69870f6f924065147f3627c3f814e60ec118a604051610eb191906150ae565b60405180910390a450506003805460ff60a01b1916600160a01b17905550505050505050565b6000546001600160a01b03163314610f015760405162461bcd60e51b81526004016107a890615368565b610f0a8161342b565b50565b806001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4657600080fd5b505afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f7e9190810190613fe9565b6001600160a01b0316336001600160a01b031614610fae5760405162461bcd60e51b81526004016107a8906153f8565b806001600160a01b031663c1e803346040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fe957600080fd5b505af1158015610ffd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061102191908101906142db565b15610f0a5760405162461bcd60e51b81526004016107a890615378565b60405161104a90614f36565b604051809103902081565b6004546001600160a01b031681565b6001546001600160a01b031681565b6001600160a01b0381166000908152600660205260409020545b919050565b6005546001600160a01b031681565b601560209081526000928352604080842090915290825290205481565b60096020526000908152604090205481565b600f602052600090815260409020546001600160a01b031681565b60135460ff161561110e5760405162461bcd60e51b81526004016107a8906151c8565b610f0a33826134b0565b6002546001600160a01b031681565b601260209081526000928352604080842090915290825290205481565b6000546001600160a01b0316331461116e5760405162461bcd60e51b81526004016107a890615368565b6111778261353f565b6111808161353f565b6005546004546001600160a01b03918216911681156111b15760405162461bcd60e51b81526004016107a8906152a8565b600580546001600160a01b038087166001600160a01b03199283161790925560048054928616929091169190911790556003805460ff60a01b1916600160a01b1790556040517f559f314bb90394a4a9ceb724f365b36a53587d894352c43d12901fd6801014569061122a908490849088908890614fcb565b60405180910390a150505050565b60795481565b600061124a8484612a70565b6001600160a01b038085166000908152600a60209081526040808320878452825280832093861683529290522080545b6000811180156112aa57506112aa82600183038154811061129757fe5b9060005260206000209060020201613565565b156112ea576112df8260018303815481106112c157fe5b6000918252602090912060029091020154849063ffffffff612f7216565b92506000190161127a565b50509392505050565b60116020526000908152604090205463ffffffff1681565b60135460ff1681565b600061131e61264d565b821061133c5760405162461bcd60e51b81526004016107a8906152b8565b6001600160a01b03831660009081526011602052604090205463ffffffff168061136a576000915050611524565b6001600160a01b038416600090815260106020908152604080832063ffffffff6000198601811685529252909120541683106113e6576001600160a01b03841660009081526010602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050611524565b6001600160a01b038416600090815260106020908152604080832083805290915290205463ffffffff16831015611421576000915050611524565b600060001982015b8163ffffffff168163ffffffff1611156114e457600282820363ffffffff16048103611453613f51565b506001600160a01b038716600090815260106020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b031691810191909152908714156114bf576020015194506115249350505050565b805163ffffffff168711156114d6578193506114dd565b6001820392505b5050611429565b506001600160a01b038516600090815260106020908152604080832063ffffffff909416835292905220546001600160601b03600160201b909104169150505b92915050565b600354600160a01b900460ff166115535760405162461bcd60e51b81526004016107a890615348565b6003805460ff60a01b1916905560135460ff16156115835760405162461bcd60e51b81526004016107a8906151c8565b61158d8282612a70565b6001600160a01b03821660009081526008602052604081208054839081106115b157fe5b600091825260208083206001600160a01b038716808552600783526040808620888752845280862033808852908552818720928752600a8552818720898852855281872090875290935291842060059093020193509180611612848461357a565b9092509050811515806116255750600081115b6116415760405162461bcd60e51b81526004016107a890615388565b81158061164c575080155b6116685760405162461bcd60e51b81526004016107a890615188565b8115611781576116788787612aa7565b60006116be85600101546116b264e8d4a510006116a68a600301548a6000015461367190919063ffffffff16565b9063ffffffff6136ab16565b9063ffffffff6136ed16565b6004805460405163135b33cd60e31b81529293506001600160a01b031691639ad99e68916116f2918c913391879101614fa3565b600060405180830381600087803b15801561170c57600080fd5b505af1158015611720573d6000803e3d6000fd5b50508654611737925090508463ffffffff6136ed16565b808655600387015461175a9164e8d4a51000916116a6919063ffffffff61367116565b6001860155855461177b906001600160a01b0316338563ffffffff61372f16565b50611805565b8354611793908263ffffffff6136ed16565b84556001600160a01b03871660009081526012602090815260408083208984529091529020546117c9908263ffffffff6136ed16565b6001600160a01b0380891660009081526012602090815260408083208b845290915290209190915585546118059116338363ffffffff61372f16565b856001600160a01b038816337fe31da05fae6db869f5ea51f4b638aa6884070b6c87f18f63bd2291a12cb2f518611842868663ffffffff612f7216565b60405161184f91906150ae565b60405180910390a450506003805460ff60a01b1916600160a01b1790555050505050565b600e6020526000908152604090205481565b6118c36040518060400160405280601c81526020017f73657428616464726573732c75696e743235362c75696e7432353629000000008152506129ce565b6118cd8383612a70565b6118d683613751565b6001600160a01b0383166000908152600860205260408120805490919061194f9084906119439085908890811061190957fe5b60009182526020808320600160059093020191909101546001600160a01b038b16835260099091526040909120549063ffffffff6136ed16565b9063ffffffff612f7216565b9050600081116119715760405162461bcd60e51b81526004016107a890615408565b600082858154811061197f57fe5b9060005260206000209060050201600101549050838386815481106119a057fe5b9060005260206000209060050201600101819055508160096000886001600160a01b03166001600160a01b031681526020019081526020016000208190555084866001600160a01b03167f6ee09c6cb801194690c195c69f465aaf7c80255cbeafaab9600f47ed79de2ca98387604051611a1b929190615433565b60405180910390a3505050505050565b611a53604051806040016040528060078152602001667061757365282960c81b8152506129ce565b60135460ff1615611a765760405162461bcd60e51b81526004016107a890615268565b6013805460ff1916600117905560405133907fdffada2889ebfab9224c24069d833f3de835d8cf99872d49e7b7ba5fccb7a46f90600090a2565b60135460ff1615611ad35760405162461bcd60e51b81526004016107a8906151c8565b611add8282612a70565b611ae78282612aa7565b5050565b60086020528160005260406000208181548110611b0457fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b039093169550909350919085565b6000806000611b4f8686612a70565b5050506001600160a01b03928316600090815260076020908152604080832094835293815283822092909416815292529020805460018201546002909201549092565b600354600160a01b900460ff16611bbb5760405162461bcd60e51b81526004016107a890615348565b6003805460ff60a01b1916905560135460ff1615611beb5760405162461bcd60e51b81526004016107a8906151c8565b611bf58282612a70565b6001600160a01b0382166000908152600860205260408120805483908110611c1957fe5b600091825260208083206001600160a01b0380881685526007835260408086208887528452808620918a1686529252922060059091029091019150611c5e8484612aa7565b611c69848487612093565b15611c865760405162461bcd60e51b81526004016107a8906152e8565b805415611d0a576000611c998284612c84565b90508015611d0857611cab8284612fb4565b6001830155611cbb858783612c98565b83856001600160a01b0316876001600160a01b03167f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e9464584604051611cff91906150ae565b60405180910390a45b505b50506003805460ff60a01b1916600160a01b179055505050565b611d4560405180606001604052806033815260200161568c603391396129ce565b611d4f8383612a70565b600081118015611d6257506312cc030081105b611d7e5760405162461bcd60e51b81526004016107a890615398565b6001600160a01b0383166000908152600860205260408120805484908110611da257fe5b9060005260206000209060050201905060008160040154905082826004018190555083856001600160a01b03167f0bcf80c5060ccf99b7a993c57a94b232fc2c5c04bd74c7c7d174595fee6bc31f8386604051611e00929190615433565b60405180910390a35050505050565b6000611e1b8484612a70565b6001600160a01b0384166000908152600860205260408120805485908110611e3f57fe5b600091825260208083206001600160a01b03808a168086526007845260408087208b885285528087208a8416885285528087206003600590970290940195860154918752601285528087208b885290945283862054855494516370a0823160e01b8152959750929590949093611f16939216906370a0823190611ec6903090600401614f4c565b60206040518083038186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116b291908101906142db565b90506000611f2261264d565b6001600160a01b038a1660009081526006602052604090205460028701549192509082118015611f5157508215155b15611fe7576000611f6f8760020154846136ed90919063ffffffff16565b6001600160a01b038c1660009081526009602052604081205460018a01549293509091611fb791906116a690611fab868863ffffffff61367116565b9063ffffffff61367116565b9050611fe2611fd5866116a68464e8d4a5100063ffffffff61367116565b879063ffffffff612f7216565b955050505b6001600160a01b03808b166000908152600a602090815260408083208d84528252808320938c16835292905290812090612020826131a3565b91505061204f87600101546116b264e8d4a510006116a68a611fab878e600001546136ed90919063ffffffff16565b9c9b505050505050505050505050565b6000546001600160a01b031633146120895760405162461bcd60e51b81526004016107a890615368565b611ae78282613786565b6001600160a01b038084166000908152600a60209081526040808320868452825280832093851683529290529081206120cb816131a3565b5095945050505050565b6017546001600160a01b031681565b6047546001600160a01b031690565b6001600160a01b03811660009081526011602052604081205463ffffffff168061211e576000610827565b6001600160a01b0383166000908152601060209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03169392505050565b6121846040518060600160405280603081526020016156eb603091396129ce565b60048054604051633d6ac5b360e21b81526001600160a01b039091169163f5ab16cc916121b391869101614f4c565b60206040518083038186803b1580156121cb57600080fd5b505afa1580156121df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612203919081019061425f565b61221f5760405162461bcd60e51b81526004016107a890615358565b61222882613751565b6001600160a01b0382166000818152600660205260409081902080549084905590519091907fad96cee0d692f0250b98e085504f399da6733854908215f6203fe3c69366d9f59061227c9084908690615433565b60405180910390a2505050565b60606122958484612a70565b6001600160a01b038085166000908152600a602090815260408083208784528252808320938616835292815282822080548451818402810184019095528085529092909184015b828210156123365760008481526020908190206040805160608101825260028602909201805483526001908101546001600160801b0380821685870152600160801b909104169183019190915290835290920191016122dc565b5050505090509392505050565b60146020526000908152604090205460ff1681565b60135460ff161561237b5760405162461bcd60e51b81526004016107a8906151c8565b600060405161238990614f36565b604080519182900382208282019091526008825267161594d5985d5b1d60c21b6020909201919091527fddfcc46608a8bd52ebf900f03a24cc97b73a6046cec8c5d0f74a211e376e967a6123db613835565b306040516020016123ef94939291906150ca565b604051602081830303815290604052805190602001209050600060405161241590614f41565b604051908190038120612430918a908a908a906020016150bc565b6040516020818303038152906040528051906020012090506000828260405160200161245d929190614f05565b604051602081830303815290604052805190602001209050600061248382888888613839565b6001600160a01b0381166000908152600e6020526040902080546001810190915590915089146124c55760405162461bcd60e51b81526004016107a890615238565b874211156124e55760405162461bcd60e51b81526004016107a890615218565b6124ef818b6134b0565b505050505b505050505050565b607a5460ff1681565b60066020526000908152604090205481565b6001600160a01b031660009081526008602052604090205490565b6000546001600160a01b0316331461255c5760405162461bcd60e51b81526004016107a890615368565b6001600160a01b0383166125825760405162461bcd60e51b81526004016107a890615228565b6001600160a01b0382166125a85760405162461bcd60e51b81526004016107a8906152c8565b6125b28282612a70565b6016546017546018546040516001600160a01b03808816948116937f8def9436d6e31b89ed00948ba91d0cb6936eada5154cb1b45b55683fb9e492379361260193919092169188918890615024565b60405180910390a3601680546001600160a01b039485166001600160a01b0319918216179091556017805493909416921691909117909155601855565b6003546001600160a01b031681565b607a5460009060ff1661266757612662613863565b61266f565b61266f613867565b905090565b6301e1338081565b60405161104a90614f41565b60185481565b601060209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6312cc030081565b6000546001600160a01b031681565b6126fb6040518060600160405280602c815260200161571b602c91396129ce565b6127048561353f565b61270d8361353f565b6004546001600160a01b03166127355760405162461bcd60e51b81526004016107a8906151a8565b600084116127555760405162461bcd60e51b81526004016107a8906153a8565b61275e85613751565b6001600160a01b0385166000908152600860205260408120805490915b818110156127d957856001600160a01b031683828154811061279957fe5b60009182526020909120600590910201546001600160a01b031614156127d15760405162461bcd60e51b81526004016107a890615328565b60010161277b565b506001600160a01b03851660009081526014602052604090205460ff16156128135760405162461bcd60e51b81526004016107a890615298565b6001600160a01b03871660009081526009602052604090205461283c908763ffffffff612f7216565b6001600160a01b038089166000908152600960209081526040808320949094556006815290839020879055825160a081018452918816825281018890528391810161288561264d565b8152600060208083018290526040928301889052845460018082018755958352818320855160059092020180546001600160a01b0319166001600160a01b039283161781558583015181880155858501516002820155606086015160038201556080909501516004958601558a81168352601490915290829020805460ff1916851790558254915163fb66fb4d60e01b815291169263fb66fb4d9261292d928c929101615059565b600060405180830381600087803b15801561294757600080fd5b505af115801561295b573d6000803e3d6000fd5b50505050846001600160a01b03166001838054905003886001600160a01b03167fd7fa4bff1cd2253c0789c3291a786a6f6b1a3b4569a75af683a15d52abb6a0bf8988886040516129ae93929190615441565b60405180910390a450505050505050565b6016546001600160a01b031681565b6047546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab90612a019033908690600401614f68565b60206040518083038186803b158015612a1957600080fd5b505afa158015612a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a51919081019061425f565b905080611ae75760405162461bcd60e51b81526004016107a8906151e8565b6001600160a01b0382166000908152600860205260409020548110611ae75760405162461bcd60e51b81526004016107a890615198565b6001600160a01b0382166000908152600860205260408120805483908110612acb57fe5b906000526020600020906005020190508060020154612ae861264d565b11612af35750611ae7565b80546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612b23903090600401614f4c565b60206040518083038186803b158015612b3b57600080fd5b505afa158015612b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b7391908101906142db565b6001600160a01b0385166000908152601260209081526040808320878452909152902054909150612bab90829063ffffffff6136ed16565b905080612bc957612bba61264d565b82600201819055505050611ae7565b6000612bd361264d565b90506000612bee8460020154836136ed90919063ffffffff16565b6001600160a01b03871660009081526009602090815260408083205460018901546006909352908320549394509192612c3792916116a691611fab90879063ffffffff61367116565b9050612c66612c55856116a68464e8d4a5100063ffffffff61367116565b60038701549063ffffffff612f7216565b6003860155612c7361264d565b856002018190555050505050505050565b600061082783600101546116b28585612fb4565b600480546040516370a0823160e01b81526001600160a01b03918216926000928716916370a0823191612ccd91869101614f4c565b60206040518083038186803b158015612ce557600080fd5b505afa158015612cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d1d91908101906142db565b6001600160a01b038087166000908152601560209081526040808320938916835292905290812054919250612d58858363ffffffff612f7216565b9050828111612e36578115612dcb576001600160a01b038088166000818152601560209081526040808320948b1680845294909152808220829055517f6bdfd5e51d01475945224d3d37965916fd8df699ef9e8888af4359aa8622216091612dc291879190615418565b60405180910390a35b60405163135b33cd60e31b81526001600160a01b03851690639ad99e6890612dfb908a908a908690600401615009565b600060405180830381600087803b158015612e1557600080fd5b505af1158015612e29573d6000803e3d6000fd5b5050505050505050612f0c565b6001600160a01b038088166000818152601560209081526040808320948b168084529490915290819020868503908190559051909291907f6bdfd5e51d01475945224d3d37965916fd8df699ef9e8888af4359aa8622216090612e9c9087908690615433565b60405180910390a360405163135b33cd60e31b81526001600160a01b03861690639ad99e6890612ed4908b908b908990600401615009565b600060405180830381600087803b158015612eee57600080fd5b505af1158015612f02573d6000803e3d6000fd5b5050505050505050505b505050565b604051612f6c9085906323b872dd60e01b90612f3590879087908790602401615009565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261386b565b50505050565b600061082783836040518060400160405280601b81526020017f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815250613950565b600061082764e8d4a510006116a68460030154611fab876002015488600001546136ed90919063ffffffff16565b600081600160601b84106130095760405162461bcd60e51b81526004016107a89190615167565b509192915050565b816001600160a01b0316836001600160a01b03161415801561303c57506000816001600160601b0316115b15612f0c576001600160a01b038316156130f4576001600160a01b03831660009081526011602052604081205463ffffffff16908161307c5760006130bb565b6001600160a01b0385166000908152601060209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006130e282856040518060600160405280602c81526020016156bf602c9139613980565b90506130f0868484846139bf565b5050505b6001600160a01b03821615612f0c576001600160a01b03821660009081526011602052604081205463ffffffff16908161312f57600061316e565b6001600160a01b0384166000908152601060209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b9050600061319582856040518060600160405280602b81526020016155ab602b9139613b7b565b90506124f4858484846139bf565b805460009081905b8015613241578360018203815481106131c057fe5b6000918252602090912060016002909202018101546001600160801b03600160801b9091041614156132235761321c8460018303815481106131fe57fe5b6000918252602090912060029091020154839063ffffffff612f7216565b9150613238565b6132358460018303815481106112c157fe5b92505b600019016131ab565b50915091565b8254604080516060810182526000808252602080830182815260019484018581528587018a5589845291909220925160028602909301928355905191909201805492516001600160801b03908116600160801b029281166001600160801b0319909416939093179092161790555b6000811180156132f05750818460018303815481106132d057fe5b60009182526020909120600160029092020101546001600160801b031611155b156133775783600182038154811061330457fe5b906000526020600020906002020184828154811061331e57fe5b600091825260209091208254600290920201908155600191820180549290910180546001600160801b0319166001600160801b03938416178082559154600160801b9081900484160291909216179055600019016132b5565b604051806060016040528084815260200161339184613bae565b6001600160801b0316815260200160016001600160801b03168152508482815481106133b957fe5b60009182526020918290208351600292830290910190815591830151600190920180546040909401516001600160801b03199094166001600160801b03938416178316600160801b939094169290920292909217905585015461341c9084612f72565b85600201819055505050505050565b6001600160a01b0381166134515760405162461bcd60e51b81526004016107a890615278565b604780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0906134a49083908590614f88565b60405180910390a15050565b6001600160a01b038083166000908152600f6020526040812054909116906134d784613bd7565b6001600160a01b038581166000818152600f602052604080822080546001600160a01b031916898616908117909155905194955093928616927f0cc323ffec3ea49cbcddc0de1480978126d350c6a45dff33ad2f1cda6ae992619190a4612f6c828483613011565b6001600160a01b038116610f0a5760405162461bcd60e51b81526004016107a8906152d8565b60010154426001600160801b03909116111590565b805460009081905b60008111801561359f575061359f84600183038154811061129757fe5b15613640578360018203815481106135b357fe5b6000918252602090912060016002909202018101546001600160801b03600160801b9091041614156135f8576135f18460018303815481106131fe57fe5b915061360d565b61360a8460018303815481106112c157fe5b92505b8380548061361757fe5b600082815260208120600019928301600281029091018281556001019190915590915501613582565b50613665613654828463ffffffff612f7216565b60028601549063ffffffff6136ed16565b60028501559250929050565b60008261368057506000611524565b8282028284828161368d57fe5b04146108275760405162461bcd60e51b81526004016107a890615318565b600061082783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ced565b600061082783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d24565b604051612f0c90849063a9059cbb60e01b90612f359086908690602401615074565b6001600160a01b038116600090815260086020526040812054905b81811015612f0c5761377e8382612aa7565b60010161376c565b607a54610100900460ff16156137ae5760405162461bcd60e51b81526004016107a8906153b8565b811580156137ba575080155b156137d75760405162461bcd60e51b81526004016107a890615338565b8180156137e357508015155b156138005760405162461bcd60e51b81526004016107a890615258565b607a805460ff191683151517905581613819578061381f565b6301e133805b6079555050607a805461ff001916610100179055565b4690565b600080600061384a87878787613d48565b9150915061385781613e28565b5090505b949350505050565b4390565b4290565b61387d826001600160a01b0316613ef1565b6138995760405162461bcd60e51b81526004016107a8906153d8565b60006060836001600160a01b0316836040516138b59190614ef9565b6000604051808303816000865af19150503d80600081146138f2576040519150601f19603f3d011682016040523d82523d6000602084013e6138f7565b606091505b5091509150816139195760405162461bcd60e51b81526004016107a8906153c8565b805115612f6c5780806020019051613934919081019061425f565b612f6c5760405162461bcd60e51b81526004016107a890615208565b600083830182858210156139775760405162461bcd60e51b81526004016107a89190615167565b50949350505050565b6000836001600160601b0316836001600160601b0316111582906139b75760405162461bcd60e51b81526004016107a89190615167565b505050900390565b60006139ea6139cc61264d565b60405180608001604052806042815260200161564a60429139613f2a565b905060008463ffffffff16118015613a3357506001600160a01b038516600090815260106020908152604080832063ffffffff6000198901811685529252909120548282169116145b15613a92576001600160a01b0385166000908152601060209081526040808320600019880163ffffffff168452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055613b31565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152601083528781208c871682528352878120965187549451909516600160201b026fffffffffffffffffffffffff000000001995871663ffffffff19958616179590951694909417909555938252601190935292909220805460018801909316929091169190911790555b846001600160a01b03167f6adb589fed1e8542fb7a6b10f00a85e02265e77f9ae3ca8ff93b22983e1af9a08484604051613b6c929190615493565b60405180910390a25050505050565b6000838301826001600160601b0380871690831610156139775760405162461bcd60e51b81526004016107a89190615167565b6000600160801b8210613bd35760405162461bcd60e51b81526004016107a890615248565b5090565b6005546000906001600160a01b0316613c025760405162461bcd60e51b81526004016107a8906151f8565b6005546001600160a01b03166000908152600860205260408120805490915b81811015613ce25760055483546001600160a01b0390911690849083908110613c4657fe5b60009182526020909120600590910201546001600160a01b03161415613cda576005546001600160a01b039081166000908152600760209081526040808320858452825280832093891683529290522060028101548154613ccf91613cb1919063ffffffff6136ed16565b60405180606001604052806028815260200161560160289139612fe2565b94505050505061108d565b600101613c21565b506000949350505050565b60008183613d0e5760405162461bcd60e51b81526004016107a89190615167565b506000838581613d1a57fe5b0495945050505050565b600081848411156139b75760405162461bcd60e51b81526004016107a89190615167565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613d7f5750600090506003613e1f565b8460ff16601b14158015613d9757508460ff16601c14155b15613da85750600090506004613e1f565b600060018787878760405160008152602001604052604051613dcd94939291906150f2565b6020604051602081039080840390855afa158015613def573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613e1857506000915060019050613e1f565b9150600090505b94509492505050565b6000816004811115613e3657fe5b1415613e4157610f0a565b6001816004811115613e4f57fe5b1415613e6d5760405162461bcd60e51b81526004016107a890615178565b6002816004811115613e7b57fe5b1415613e995760405162461bcd60e51b81526004016107a8906151b8565b6003816004811115613ea757fe5b1415613ec55760405162461bcd60e51b81526004016107a890615288565b6004816004811115613ed357fe5b1415610f0a5760405162461bcd60e51b81526004016107a8906152f8565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061385b575050151592915050565b600081600160201b84106130095760405162461bcd60e51b81526004016107a89190615167565b604080518082019091526000808252602082015290565b803561152481615569565b805161152481615569565b80356115248161557d565b80516115248161557d565b803561152481615586565b80356115248161558f565b805161152481615586565b803561152481615598565b8035611524816155a1565b600060208284031215613fdd57600080fd5b600061385b8484613f68565b600060208284031215613ffb57600080fd5b600061385b8484613f73565b6000806040838503121561401a57600080fd5b60006140268585613f68565b925050602061403785828601613f68565b9150509250929050565b60008060006060848603121561405657600080fd5b60006140628686613f68565b935050602061407386828701613f68565b925050604061408486828701613f94565b9150509250925092565b600080604083850312156140a157600080fd5b60006140ad8585613f68565b925050602061403785828601613f94565b6000806000606084860312156140d357600080fd5b60006140df8686613f68565b93505060206140f086828701613f94565b925050604061408486828701613f68565b600080600080600060a0868803121561411957600080fd5b60006141258888613f68565b955050602061413688828901613f94565b945050604061414788828901613f9f565b935050606061415888828901613f94565b925050608061416988828901613f94565b9150509295509295909350565b60008060006060848603121561418b57600080fd5b60006141978686613f68565b935050602061407386828701613f94565b60008060008060008060c087890312156141c157600080fd5b60006141cd8989613f68565b96505060206141de89828a01613f94565b95505060406141ef89828a01613f94565b945050606061420089828a01613fc0565b935050608061421189828a01613f94565b92505060a061422289828a01613f94565b9150509295509295509295565b6000806040838503121561424257600080fd5b600061424e8585613f68565b925050602061403785828601613fb5565b60006020828403121561427157600080fd5b600061385b8484613f89565b6000806040838503121561429057600080fd5b60006140ad8585613f7e565b6000806000606084860312156142b157600080fd5b60006140628686613f9f565b6000602082840312156142cf57600080fd5b600061385b8484613f9f565b6000602082840312156142ed57600080fd5b600061385b8484613faa565b60006143058383614e99565b505060600190565b61431681615512565b82525050565b614316816154c1565b6000614330826154b4565b61433a81856154b8565b9350614345836154ae565b8060005b8381101561437357815161435d88826142f9565b9750614368836154ae565b925050600101614349565b509495945050505050565b614316816154cc565b614316816154d1565b61431661439c826154d1565b6154d1565b60006143ac826154b4565b6143b6818561108d565b93506143c6818560208601615533565b9290920192915050565b614316816154d4565b6143168161551d565b60006143ed826154b4565b6143f781856154b8565b9350614407818560208601615533565b6144108161555f565b9093019392505050565b60006144276018836154b8565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000815260200192915050565b60006144606012836154b8565b71696e636f6e73697374656e7420737461746560701b815260200192915050565b600061448e6013836154b8565b727661756c743a20706f6f6c206578697374733f60681b815260200192915050565b60006144bd601f836154b8565b7f53746f726520636f6e7472616374206164647265737320697320656d70747900815260200192915050565b60006144f6601f836154b8565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800815260200192915050565b600061452f600f836154b8565b6e15985d5b1d081a5cc81c185d5cd959608a1b815260200192915050565b600061455a6013836154b8565b7215985d5b1d081a5cc81b9bdd081c185d5cd959606a1b815260200192915050565b6000614589600c836154b8565b6b155b985d5d1a1bdc9a5e995960a21b815260200192915050565b60006145b16030836154b8565b7f5856535661756c743a3a6765745374616b65416d6f756e743a2078767320616481526f191c995cdcc81a5cc81b9bdd081cd95d60821b602082015260400192915050565b6000614603602a836154b8565b7f5361666542455032303a204245503230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b600061464f602a836154b8565b7f5856535661756c743a3a64656c656761746542795369673a207369676e6174758152691c9948195e1c1a5c995960b21b602082015260400192915050565b600061469b6022836154b8565b7f7072696d6520746f6b656e2063616e6e6f74206265207a65726f206164647265815261737360f01b602082015260400192915050565b60006146df6026836154b8565b7f5856535661756c743a3a64656c656761746542795369673a20696e76616c6964815265206e6f6e636560d01b602082015260400192915050565b600061472760028361108d565b61190160f01b815260020192915050565b60006147456027836154b8565b7f53616665436173743a2076616c756520646f65736e27742066697420696e20318152663238206269747360c81b602082015260400192915050565b600061478e6020836154b8565b7f496e76616c69642074696d6520626173656420636f6e66696775726174696f6e815260200192915050565b60006147c76017836154b8565b7f5661756c7420697320616c726561647920706175736564000000000000000000815260200192915050565b60006148006025836154b8565b7f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b602082015260400192915050565b60006148476022836154b8565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c815261756560f01b602082015260400192915050565b600061488b601a836154b8565b7f546f6b656e2065786973747320696e206f7468657220706f6f6c000000000000815260200192915050565b60006148c46013836154b8565b72185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b815260200192915050565b60006148f3602b836154b8565b7f5856535661756c743a3a6765745072696f72566f7465733a206e6f742079657481526a0819195d195c9b5a5b995960aa1b602082015260400192915050565b6000614940601d836154b8565b7f7265776172642063616e6e6f74206265207a65726f2061646472657373000000815260200192915050565b60006149796018836154b8565b7f7a65726f2061646472657373206e6f7420616c6c6f7765640000000000000000815260200192915050565b60006149b2601a836154b8565b7f657865637574652070656e64696e67207769746864726177616c000000000000815260200192915050565b60006149eb6022836154b8565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c815261756560f01b602082015260400192915050565b6000614a2f60438361108d565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000614a9a601f836154b8565b7f72657175657374656420616d6f756e742063616e6e6f74206265207a65726f00815260200192915050565b6000614ad36021836154b8565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000614b166012836154b8565b71141bdbdb08185b1c9958591e48185919195960721b815260200192915050565b6000614b446017836154b8565b7f496e76616c696420626c6f636b73207065722079656172000000000000000000815260200192915050565b6000614b7d600a836154b8565b691c994b595b9d195c995960b21b815260200192915050565b6000614ba36014836154b8565b7324b73b30b634b2103932bbb0b932103a37b5b2b760611b815260200192915050565b6000614bd3600e836154b8565b6d37b7363c9030b236b4b71031b0b760911b815260200192915050565b6000614bfd6015836154b8565b7418da185b99d9481b9bdd08185d5d1a1bdc9a5e9959605a1b815260200192915050565b6000614c2e6013836154b8565b726e6f7468696e6720746f20776974686472617760681b815260200192915050565b6000614c5d601a836154b8565b7f496e76616c6964206e6577206c6f636b696e6720706572696f64000000000000815260200192915050565b6000614c96601d836154b8565b7f416c6c6f6320706f696e7473206d757374206e6f74206265207a65726f000000815260200192915050565b6000614ccf601f836154b8565b7f416c726561647920696e697469616c697a65642054696d654d616e6167657200815260200192915050565b6000614d086020836154b8565b7f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000614d41603a8361108d565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020820152603a0192915050565b6000614da0601f836154b8565b7f5361666542455032303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b6000614dd9601b836154b8565b7f72657175657374656420616d6f756e7420697320696e76616c69640000000000815260200192915050565b6000614e126022836154b8565b7f6f6e6c792070726f78792061646d696e2063616e206368616e676520627261698152616e7360f01b602082015260400192915050565b6000614e56602e836154b8565b7f416c6c6f6320706f696e7473207065722072657761726420746f6b656e206d7581526d7374206e6f74206265207a65726f60901b602082015260400192915050565b80516060830190614eaa8482614387565b506020820151614ebd6020850182614ecc565b506040820151612f6c60408501825b614316816154df565b614316816154f7565b61431681615500565b61431681615528565b61431681615506565b600061082782846143a1565b6000614f108261471a565b9150614f1c8285614390565b602082019150614f2c8284614390565b5060200192915050565b600061152482614a22565b600061152482614d34565b60208101611524828461431c565b60208101611524828461430d565b60408101614f76828561430d565b818103602083015261385b81846143e2565b60408101614f96828561431c565b610827602083018461431c565b60608101614fb1828661431c565b614fbe602083018561430d565b61385b6040830184614387565b60808101614fd9828761431c565b614fe6602083018661431c565b614ff3604083018561431c565b615000606083018461431c565b95945050505050565b60608101615017828661431c565b614fbe602083018561431c565b60808101615032828761431c565b61503f602083018661431c565b61504c6040830185614387565b6150006060830184614387565b60408101615067828561431c565b610827602083018461437e565b60408101615082828561431c565b6108276020830184614387565b602080825281016108278184614325565b60208101611524828461437e565b602081016115248284614387565b608081016150328287614387565b608081016150d88287614387565b6150e56020830186614387565b614ff36040830185614387565b608081016151008287614387565b61503f6020830186614ede565b6020810161152482846143d0565b60a0810161512982886143d0565b6151366020830187614387565b6151436040830186614387565b6151506060830185614387565b61515d6080830184614387565b9695505050505050565b6020808252810161082781846143e2565b602080825281016115248161441a565b6020808252810161152481614453565b6020808252810161152481614481565b60208082528101611524816144b0565b60208082528101611524816144e9565b6020808252810161152481614522565b602080825281016115248161454d565b602080825281016115248161457c565b60208082528101611524816145a4565b60208082528101611524816145f6565b6020808252810161152481614642565b602080825281016115248161468e565b60208082528101611524816146d2565b6020808252810161152481614738565b6020808252810161152481614781565b60208082528101611524816147ba565b60208082528101611524816147f3565b602080825281016115248161483a565b602080825281016115248161487e565b60208082528101611524816148b7565b60208082528101611524816148e6565b6020808252810161152481614933565b602080825281016115248161496c565b60208082528101611524816149a5565b60208082528101611524816149de565b6020808252810161152481614a8d565b6020808252810161152481614ac6565b6020808252810161152481614b09565b6020808252810161152481614b37565b6020808252810161152481614b70565b6020808252810161152481614b96565b6020808252810161152481614bc6565b6020808252810161152481614bf0565b6020808252810161152481614c21565b6020808252810161152481614c50565b6020808252810161152481614c89565b6020808252810161152481614cc2565b6020808252810161152481614cfb565b6020808252810161152481614d93565b6020808252810161152481614dcc565b6020808252810161152481614e05565b6020808252810161152481614e49565b604081016154268285614387565b61082760208301846143d9565b604081016150828285614387565b6060810161544f8286614387565b614fbe6020830185614387565b602081016115248284614ed5565b604081016154788285614ed5565b6108276020830184614ef0565b602081016115248284614ef0565b604081016154a18285614ee7565b6108276020830184614ee7565b60200190565b5190565b90815260200190565b6000611524826154eb565b151590565b90565b6000611524826154c1565b6001600160801b031690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6001600160601b031690565b6000611524826154d4565b6000611524826154d1565b600061152482615506565b60005b8381101561554e578181015183820152602001615536565b83811115612f6c5750506000910152565b601f01601f191690565b615572816154c1565b8114610f0a57600080fd5b615572816154cc565b615572816154d1565b615572816154d4565b615572816154f7565b6155728161550056fe5856535661756c743a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77735856535661756c743a3a726571756573745769746864726177616c3a20766f746573206f766572666c6f775856535661756c743a3a6765745374616b65416d6f756e743a20766f746573206f766572666c6f775856535661756c743a3a6465706f7369743a20766f746573206f766572666c6f775856535661756c743a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206f72207365636f6e64206578636565647320333220626974737365745769746864726177616c4c6f636b696e67506572696f6428616464726573732c75696e743235362c75696e74323536295856535661756c743a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773736574526577617264416d6f756e74506572426c6f636b4f725365636f6e6428616464726573732c75696e743235362961646428616464726573732c75696e743235362c616464726573732c75696e743235362c75696e7432353629a365627a7a7231582053ba350123a86f07263e7bddf3bcee0f7cf11e72f5d2678781f0eb1ebd599dc16c6578706572696d656e74616cf564736f6c63430005100040",
|
|
1702
|
+
"devdoc": {
|
|
1703
|
+
"author": "Venus",
|
|
1704
|
+
"methods": {
|
|
1705
|
+
"add(address,uint256,address,uint256,uint256)": {
|
|
1706
|
+
"details": "This vault DOES NOT support deflationary tokens — it expects that the amount of transferred tokens would equal the actually deposited amount. In practice this means that this vault DOES NOT support USDT and similar tokens (that do not provide these guarantees).",
|
|
1707
|
+
"params": {
|
|
1708
|
+
"_allocPoint": "Number of allocation points assigned to this pool",
|
|
1709
|
+
"_lockPeriod": "A period between withdrawal request and a moment when it's executable",
|
|
1710
|
+
"_rewardPerBlockOrSecond": "Initial reward per block or second, in terms of _rewardToken",
|
|
1711
|
+
"_rewardToken": "Reward token address",
|
|
1712
|
+
"_token": "Staked token"
|
|
1713
|
+
}
|
|
1714
|
+
},
|
|
1715
|
+
"claim(address,address,uint256)": {
|
|
1716
|
+
"params": {
|
|
1717
|
+
"_account": "The account for which to claim rewards",
|
|
1718
|
+
"_pid": "The Pool Index",
|
|
1719
|
+
"_rewardToken": "The Reward Token Address"
|
|
1720
|
+
}
|
|
1721
|
+
},
|
|
1722
|
+
"delegate(address)": {
|
|
1723
|
+
"params": {
|
|
1724
|
+
"delegatee": "The address to delegate votes to"
|
|
1725
|
+
}
|
|
1726
|
+
},
|
|
1727
|
+
"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": {
|
|
1728
|
+
"params": {
|
|
1729
|
+
"delegatee": "The address to delegate votes to",
|
|
1730
|
+
"expiry": "The time at which to expire the signature",
|
|
1731
|
+
"nonce": "The contract state required to match the signature",
|
|
1732
|
+
"r": "Half of the ECDSA signature pair",
|
|
1733
|
+
"s": "Half of the ECDSA signature pair",
|
|
1734
|
+
"v": "The recovery byte of the signature"
|
|
1735
|
+
}
|
|
1736
|
+
},
|
|
1737
|
+
"deposit(address,uint256,uint256)": {
|
|
1738
|
+
"params": {
|
|
1739
|
+
"_amount": "The amount to deposit to vault",
|
|
1740
|
+
"_pid": "The Pool Index",
|
|
1741
|
+
"_rewardToken": "The Reward Token Address"
|
|
1742
|
+
}
|
|
1743
|
+
},
|
|
1744
|
+
"executeWithdrawal(address,uint256)": {
|
|
1745
|
+
"params": {
|
|
1746
|
+
"_pid": "The Pool Index",
|
|
1747
|
+
"_rewardToken": "The Reward Token Address"
|
|
1748
|
+
}
|
|
1749
|
+
},
|
|
1750
|
+
"getBlockNumberOrTimestamp()": {
|
|
1751
|
+
"details": "Function to simply retrieve block number or block timestamp",
|
|
1752
|
+
"return": "Current block number or block timestamp"
|
|
1753
|
+
},
|
|
1754
|
+
"getCurrentVotes(address)": {
|
|
1755
|
+
"params": {
|
|
1756
|
+
"account": "The address to get votes balance"
|
|
1757
|
+
},
|
|
1758
|
+
"return": "The number of current votes for `account`"
|
|
1759
|
+
},
|
|
1760
|
+
"getEligibleWithdrawalAmount(address,uint256,address)": {
|
|
1761
|
+
"params": {
|
|
1762
|
+
"_pid": "The Pool Index",
|
|
1763
|
+
"_rewardToken": "The Reward Token Address",
|
|
1764
|
+
"_user": "The User Address"
|
|
1765
|
+
},
|
|
1766
|
+
"return": "withdrawalAmount Amount that the user can withdraw"
|
|
1767
|
+
},
|
|
1768
|
+
"getPriorVotes(address,uint256)": {
|
|
1769
|
+
"params": {
|
|
1770
|
+
"account": "The address of the account to check",
|
|
1771
|
+
"blockNumberOrSecond": "The block number or second to get the vote balance at"
|
|
1772
|
+
},
|
|
1773
|
+
"return": "The balance that user staked"
|
|
1774
|
+
},
|
|
1775
|
+
"getRequestedAmount(address,uint256,address)": {
|
|
1776
|
+
"params": {
|
|
1777
|
+
"_pid": "The Pool Index",
|
|
1778
|
+
"_rewardToken": "The Reward Token Address",
|
|
1779
|
+
"_user": "The User Address"
|
|
1780
|
+
},
|
|
1781
|
+
"return": "Total amount of requested but not yet executed withdrawals (including both executable and locked ones)"
|
|
1782
|
+
},
|
|
1783
|
+
"getUserInfo(address,uint256,address)": {
|
|
1784
|
+
"params": {
|
|
1785
|
+
"_pid": "Pool index",
|
|
1786
|
+
"_rewardToken": "Reward token address",
|
|
1787
|
+
"_user": "User address"
|
|
1788
|
+
},
|
|
1789
|
+
"return": "amount Deposited amountrewardDebt Reward debt (technical value used to track past payouts)pendingWithdrawals Requested but not yet executed withdrawals"
|
|
1790
|
+
},
|
|
1791
|
+
"getWithdrawalRequests(address,uint256,address)": {
|
|
1792
|
+
"params": {
|
|
1793
|
+
"_pid": "The Pool Index",
|
|
1794
|
+
"_rewardToken": "The Reward Token Address",
|
|
1795
|
+
"_user": "The User Address"
|
|
1796
|
+
},
|
|
1797
|
+
"return": "An array of withdrawal requests"
|
|
1798
|
+
},
|
|
1799
|
+
"initializeTimeManager(bool,uint256)": {
|
|
1800
|
+
"details": "Initializes the contract to use either blocks or seconds",
|
|
1801
|
+
"params": {
|
|
1802
|
+
"blocksPerYear_": "The number of blocks per year",
|
|
1803
|
+
"timeBased_": "A boolean indicating whether the contract is based on time or block If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR"
|
|
1804
|
+
}
|
|
1805
|
+
},
|
|
1806
|
+
"pendingReward(address,uint256,address)": {
|
|
1807
|
+
"params": {
|
|
1808
|
+
"_pid": "Pool index",
|
|
1809
|
+
"_rewardToken": "Reward token address",
|
|
1810
|
+
"_user": "User address"
|
|
1811
|
+
},
|
|
1812
|
+
"return": "Reward the user is eligible for in this pool, in terms of _rewardToken"
|
|
1813
|
+
},
|
|
1814
|
+
"pendingWithdrawalsBeforeUpgrade(address,uint256,address)": {
|
|
1815
|
+
"params": {
|
|
1816
|
+
"_pid": "The Pool Index",
|
|
1817
|
+
"_rewardToken": "The Reward Token Address",
|
|
1818
|
+
"_user": "The address of the user"
|
|
1819
|
+
},
|
|
1820
|
+
"return": "beforeUpgradeWithdrawalAmount Total pending withdrawal amount in requests made before the vault upgrade"
|
|
1821
|
+
},
|
|
1822
|
+
"poolLength(address)": {
|
|
1823
|
+
"params": {
|
|
1824
|
+
"rewardToken": "Reward token address"
|
|
1825
|
+
},
|
|
1826
|
+
"return": "Number of pools that distribute the specified token as a reward"
|
|
1827
|
+
},
|
|
1828
|
+
"requestWithdrawal(address,uint256,uint256)": {
|
|
1829
|
+
"params": {
|
|
1830
|
+
"_amount": "The amount to withdraw from the vault",
|
|
1831
|
+
"_pid": "The Pool Index",
|
|
1832
|
+
"_rewardToken": "The Reward Token Address"
|
|
1833
|
+
}
|
|
1834
|
+
},
|
|
1835
|
+
"rewardTokenAmountsPerBlock(address)": {
|
|
1836
|
+
"params": {
|
|
1837
|
+
"_rewardToken": "Reward token address"
|
|
1838
|
+
},
|
|
1839
|
+
"return": "Number of reward tokens created per block or second"
|
|
1840
|
+
},
|
|
1841
|
+
"set(address,uint256,uint256)": {
|
|
1842
|
+
"params": {
|
|
1843
|
+
"_allocPoint": "Number of allocation points assigned to this pool",
|
|
1844
|
+
"_pid": "Pool index",
|
|
1845
|
+
"_rewardToken": "Reward token address"
|
|
1846
|
+
}
|
|
1847
|
+
},
|
|
1848
|
+
"setAccessControl(address)": {
|
|
1849
|
+
"details": "Admin function to set the access control address",
|
|
1850
|
+
"params": {
|
|
1851
|
+
"newAccessControlAddress": "New address for the access control"
|
|
1852
|
+
}
|
|
1853
|
+
},
|
|
1854
|
+
"setPrimeToken(address,address,uint256)": {
|
|
1855
|
+
"params": {
|
|
1856
|
+
"_primePoolId": "pool id for reward",
|
|
1857
|
+
"_primeRewardToken": "address of reward token",
|
|
1858
|
+
"_primeToken": "address of the prime token contract"
|
|
1859
|
+
}
|
|
1860
|
+
},
|
|
1861
|
+
"setRewardAmountPerBlockOrSecond(address,uint256)": {
|
|
1862
|
+
"params": {
|
|
1863
|
+
"_rewardAmount": "Number of allocation points assigned to this pool",
|
|
1864
|
+
"_rewardToken": "Reward token address"
|
|
1865
|
+
}
|
|
1866
|
+
},
|
|
1867
|
+
"setWithdrawalLockingPeriod(address,uint256,uint256)": {
|
|
1868
|
+
"params": {
|
|
1869
|
+
"_newPeriod": "New lock period",
|
|
1870
|
+
"_pid": "Pool index",
|
|
1871
|
+
"_rewardToken": "Reward token address"
|
|
1872
|
+
}
|
|
1873
|
+
},
|
|
1874
|
+
"updatePool(address,uint256)": {
|
|
1875
|
+
"params": {
|
|
1876
|
+
"_pid": "Pool index",
|
|
1877
|
+
"_rewardToken": "Reward token address"
|
|
1878
|
+
}
|
|
1879
|
+
}
|
|
1880
|
+
},
|
|
1881
|
+
"title": "XVS Vault"
|
|
1882
|
+
},
|
|
1883
|
+
"userdoc": {
|
|
1884
|
+
"methods": {
|
|
1885
|
+
"_become(address)": {
|
|
1886
|
+
"notice": "* Admin Functions **"
|
|
1887
|
+
},
|
|
1888
|
+
"accessControlManager()": {
|
|
1889
|
+
"notice": "Returns the address of the access control manager contract"
|
|
1890
|
+
},
|
|
1891
|
+
"add(address,uint256,address,uint256,uint256)": {
|
|
1892
|
+
"notice": "Add a new token pool"
|
|
1893
|
+
},
|
|
1894
|
+
"claim(address,address,uint256)": {
|
|
1895
|
+
"notice": "Claim rewards for pool"
|
|
1896
|
+
},
|
|
1897
|
+
"constructor": "XVSVault constructor",
|
|
1898
|
+
"delegate(address)": {
|
|
1899
|
+
"notice": "Delegate votes from `msg.sender` to `delegatee`"
|
|
1900
|
+
},
|
|
1901
|
+
"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": {
|
|
1902
|
+
"notice": "Delegates votes from signatory to `delegatee`"
|
|
1903
|
+
},
|
|
1904
|
+
"deposit(address,uint256,uint256)": {
|
|
1905
|
+
"notice": "Deposit XVSVault for XVS allocation"
|
|
1906
|
+
},
|
|
1907
|
+
"executeWithdrawal(address,uint256)": {
|
|
1908
|
+
"notice": "Execute withdrawal to XVSVault for XVS allocation"
|
|
1909
|
+
},
|
|
1910
|
+
"getCurrentVotes(address)": {
|
|
1911
|
+
"notice": "Gets the current votes balance for `account`"
|
|
1912
|
+
},
|
|
1913
|
+
"getEligibleWithdrawalAmount(address,uint256,address)": {
|
|
1914
|
+
"notice": "Get unlocked withdrawal amount"
|
|
1915
|
+
},
|
|
1916
|
+
"getPriorVotes(address,uint256)": {
|
|
1917
|
+
"notice": "Determine the xvs stake balance for an account"
|
|
1918
|
+
},
|
|
1919
|
+
"getRequestedAmount(address,uint256,address)": {
|
|
1920
|
+
"notice": "Get requested amount"
|
|
1921
|
+
},
|
|
1922
|
+
"getUserInfo(address,uint256,address)": {
|
|
1923
|
+
"notice": "Get user info with reward token address and pid"
|
|
1924
|
+
},
|
|
1925
|
+
"getWithdrawalRequests(address,uint256,address)": {
|
|
1926
|
+
"notice": "Returns the array of withdrawal requests that have not been executed yet"
|
|
1927
|
+
},
|
|
1928
|
+
"pause()": {
|
|
1929
|
+
"notice": "Pauses vault"
|
|
1930
|
+
},
|
|
1931
|
+
"pendingReward(address,uint256,address)": {
|
|
1932
|
+
"notice": "View function to see pending XVSs on frontend"
|
|
1933
|
+
},
|
|
1934
|
+
"pendingWithdrawalsBeforeUpgrade(address,uint256,address)": {
|
|
1935
|
+
"notice": "Gets the total pending withdrawal amount of a user before upgrade"
|
|
1936
|
+
},
|
|
1937
|
+
"poolLength(address)": {
|
|
1938
|
+
"notice": "Returns the number of pools with the specified reward token"
|
|
1939
|
+
},
|
|
1940
|
+
"requestWithdrawal(address,uint256,uint256)": {
|
|
1941
|
+
"notice": "Request withdrawal to XVSVault for XVS allocation"
|
|
1942
|
+
},
|
|
1943
|
+
"resume()": {
|
|
1944
|
+
"notice": "Resume vault"
|
|
1945
|
+
},
|
|
1946
|
+
"rewardTokenAmountsPerBlock(address)": {
|
|
1947
|
+
"notice": "Returns the number of reward tokens created per block or second"
|
|
1948
|
+
},
|
|
1949
|
+
"set(address,uint256,uint256)": {
|
|
1950
|
+
"notice": "Update the given pool's reward allocation point"
|
|
1951
|
+
},
|
|
1952
|
+
"setAccessControl(address)": {
|
|
1953
|
+
"notice": "Sets the address of the access control of this contract"
|
|
1954
|
+
},
|
|
1955
|
+
"setPrimeToken(address,address,uint256)": {
|
|
1956
|
+
"notice": "Sets the address of the prime token contract"
|
|
1957
|
+
},
|
|
1958
|
+
"setRewardAmountPerBlockOrSecond(address,uint256)": {
|
|
1959
|
+
"notice": "Update the given reward token's amount per block or second"
|
|
1960
|
+
},
|
|
1961
|
+
"setWithdrawalLockingPeriod(address,uint256,uint256)": {
|
|
1962
|
+
"notice": "Update the lock period after which a requested withdrawal can be executed"
|
|
1963
|
+
},
|
|
1964
|
+
"updatePool(address,uint256)": {
|
|
1965
|
+
"notice": "Update reward variables of the given pool to be up-to-date"
|
|
1966
|
+
}
|
|
1967
|
+
},
|
|
1968
|
+
"notice": "The XVS Vault allows XVS holders to lock their XVS to recieve voting rights in Venus governance and are rewarded with XVS."
|
|
1969
|
+
},
|
|
1970
|
+
"storageLayout": {
|
|
1971
|
+
"storage": [
|
|
1972
|
+
{
|
|
1973
|
+
"astId": 40377,
|
|
1974
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
1975
|
+
"label": "admin",
|
|
1976
|
+
"offset": 0,
|
|
1977
|
+
"slot": "0",
|
|
1978
|
+
"type": "t_address"
|
|
1979
|
+
},
|
|
1980
|
+
{
|
|
1981
|
+
"astId": 40379,
|
|
1982
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
1983
|
+
"label": "pendingAdmin",
|
|
1984
|
+
"offset": 0,
|
|
1985
|
+
"slot": "1",
|
|
1986
|
+
"type": "t_address"
|
|
1987
|
+
},
|
|
1988
|
+
{
|
|
1989
|
+
"astId": 40381,
|
|
1990
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
1991
|
+
"label": "implementation",
|
|
1992
|
+
"offset": 0,
|
|
1993
|
+
"slot": "2",
|
|
1994
|
+
"type": "t_address"
|
|
1995
|
+
},
|
|
1996
|
+
{
|
|
1997
|
+
"astId": 40383,
|
|
1998
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
1999
|
+
"label": "pendingXVSVaultImplementation",
|
|
2000
|
+
"offset": 0,
|
|
2001
|
+
"slot": "3",
|
|
2002
|
+
"type": "t_address"
|
|
2003
|
+
},
|
|
2004
|
+
{
|
|
2005
|
+
"astId": 40388,
|
|
2006
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2007
|
+
"label": "_notEntered",
|
|
2008
|
+
"offset": 20,
|
|
2009
|
+
"slot": "3",
|
|
2010
|
+
"type": "t_bool"
|
|
2011
|
+
},
|
|
2012
|
+
{
|
|
2013
|
+
"astId": 40390,
|
|
2014
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2015
|
+
"label": "xvsStore",
|
|
2016
|
+
"offset": 0,
|
|
2017
|
+
"slot": "4",
|
|
2018
|
+
"type": "t_address"
|
|
2019
|
+
},
|
|
2020
|
+
{
|
|
2021
|
+
"astId": 40392,
|
|
2022
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2023
|
+
"label": "xvsAddress",
|
|
2024
|
+
"offset": 0,
|
|
2025
|
+
"slot": "5",
|
|
2026
|
+
"type": "t_address"
|
|
2027
|
+
},
|
|
2028
|
+
{
|
|
2029
|
+
"astId": 40396,
|
|
2030
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2031
|
+
"label": "rewardTokenAmountsPerBlockOrSecond",
|
|
2032
|
+
"offset": 0,
|
|
2033
|
+
"slot": "6",
|
|
2034
|
+
"type": "t_mapping(t_address,t_uint256)"
|
|
2035
|
+
},
|
|
2036
|
+
{
|
|
2037
|
+
"astId": 40429,
|
|
2038
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2039
|
+
"label": "userInfos",
|
|
2040
|
+
"offset": 0,
|
|
2041
|
+
"slot": "7",
|
|
2042
|
+
"type": "t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_struct(UserInfo)40403_storage)))"
|
|
2043
|
+
},
|
|
2044
|
+
{
|
|
2045
|
+
"astId": 40434,
|
|
2046
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2047
|
+
"label": "poolInfos",
|
|
2048
|
+
"offset": 0,
|
|
2049
|
+
"slot": "8",
|
|
2050
|
+
"type": "t_mapping(t_address,t_array(t_struct(PoolInfo)40414_storage)dyn_storage)"
|
|
2051
|
+
},
|
|
2052
|
+
{
|
|
2053
|
+
"astId": 40438,
|
|
2054
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2055
|
+
"label": "totalAllocPoints",
|
|
2056
|
+
"offset": 0,
|
|
2057
|
+
"slot": "9",
|
|
2058
|
+
"type": "t_mapping(t_address,t_uint256)"
|
|
2059
|
+
},
|
|
2060
|
+
{
|
|
2061
|
+
"astId": 40447,
|
|
2062
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2063
|
+
"label": "withdrawalRequests",
|
|
2064
|
+
"offset": 0,
|
|
2065
|
+
"slot": "10",
|
|
2066
|
+
"type": "t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(WithdrawalRequest)40421_storage)dyn_storage)))"
|
|
2067
|
+
},
|
|
2068
|
+
{
|
|
2069
|
+
"astId": 40451,
|
|
2070
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2071
|
+
"label": "__oldDelegatesSlot",
|
|
2072
|
+
"offset": 0,
|
|
2073
|
+
"slot": "11",
|
|
2074
|
+
"type": "t_mapping(t_address,t_address)"
|
|
2075
|
+
},
|
|
2076
|
+
{
|
|
2077
|
+
"astId": 40462,
|
|
2078
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2079
|
+
"label": "__oldCheckpointsSlot",
|
|
2080
|
+
"offset": 0,
|
|
2081
|
+
"slot": "12",
|
|
2082
|
+
"type": "t_mapping(t_address,t_mapping(t_uint32,t_struct(Checkpoint)40456_storage))"
|
|
2083
|
+
},
|
|
2084
|
+
{
|
|
2085
|
+
"astId": 40466,
|
|
2086
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2087
|
+
"label": "__oldNumCheckpointsSlot",
|
|
2088
|
+
"offset": 0,
|
|
2089
|
+
"slot": "13",
|
|
2090
|
+
"type": "t_mapping(t_address,t_uint32)"
|
|
2091
|
+
},
|
|
2092
|
+
{
|
|
2093
|
+
"astId": 40470,
|
|
2094
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2095
|
+
"label": "nonces",
|
|
2096
|
+
"offset": 0,
|
|
2097
|
+
"slot": "14",
|
|
2098
|
+
"type": "t_mapping(t_address,t_uint256)"
|
|
2099
|
+
},
|
|
2100
|
+
{
|
|
2101
|
+
"astId": 40487,
|
|
2102
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2103
|
+
"label": "delegates",
|
|
2104
|
+
"offset": 0,
|
|
2105
|
+
"slot": "15",
|
|
2106
|
+
"type": "t_mapping(t_address,t_address)"
|
|
2107
|
+
},
|
|
2108
|
+
{
|
|
2109
|
+
"astId": 40493,
|
|
2110
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2111
|
+
"label": "checkpoints",
|
|
2112
|
+
"offset": 0,
|
|
2113
|
+
"slot": "16",
|
|
2114
|
+
"type": "t_mapping(t_address,t_mapping(t_uint32,t_struct(Checkpoint)40456_storage))"
|
|
2115
|
+
},
|
|
2116
|
+
{
|
|
2117
|
+
"astId": 40497,
|
|
2118
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2119
|
+
"label": "numCheckpoints",
|
|
2120
|
+
"offset": 0,
|
|
2121
|
+
"slot": "17",
|
|
2122
|
+
"type": "t_mapping(t_address,t_uint32)"
|
|
2123
|
+
},
|
|
2124
|
+
{
|
|
2125
|
+
"astId": 40503,
|
|
2126
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2127
|
+
"label": "totalPendingWithdrawals",
|
|
2128
|
+
"offset": 0,
|
|
2129
|
+
"slot": "18",
|
|
2130
|
+
"type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))"
|
|
2131
|
+
},
|
|
2132
|
+
{
|
|
2133
|
+
"astId": 40505,
|
|
2134
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2135
|
+
"label": "vaultPaused",
|
|
2136
|
+
"offset": 0,
|
|
2137
|
+
"slot": "19",
|
|
2138
|
+
"type": "t_bool"
|
|
2139
|
+
},
|
|
2140
|
+
{
|
|
2141
|
+
"astId": 40509,
|
|
2142
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2143
|
+
"label": "isStakedToken",
|
|
2144
|
+
"offset": 0,
|
|
2145
|
+
"slot": "20",
|
|
2146
|
+
"type": "t_mapping(t_address,t_bool)"
|
|
2147
|
+
},
|
|
2148
|
+
{
|
|
2149
|
+
"astId": 40515,
|
|
2150
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2151
|
+
"label": "pendingRewardTransfers",
|
|
2152
|
+
"offset": 0,
|
|
2153
|
+
"slot": "21",
|
|
2154
|
+
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
|
|
2155
|
+
},
|
|
2156
|
+
{
|
|
2157
|
+
"astId": 40517,
|
|
2158
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2159
|
+
"label": "primeToken",
|
|
2160
|
+
"offset": 0,
|
|
2161
|
+
"slot": "22",
|
|
2162
|
+
"type": "t_contract(IPrime)12523"
|
|
2163
|
+
},
|
|
2164
|
+
{
|
|
2165
|
+
"astId": 40519,
|
|
2166
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2167
|
+
"label": "primeRewardToken",
|
|
2168
|
+
"offset": 0,
|
|
2169
|
+
"slot": "23",
|
|
2170
|
+
"type": "t_address"
|
|
2171
|
+
},
|
|
2172
|
+
{
|
|
2173
|
+
"astId": 40521,
|
|
2174
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2175
|
+
"label": "primePoolId",
|
|
2176
|
+
"offset": 0,
|
|
2177
|
+
"slot": "24",
|
|
2178
|
+
"type": "t_uint256"
|
|
2179
|
+
},
|
|
2180
|
+
{
|
|
2181
|
+
"astId": 40525,
|
|
2182
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2183
|
+
"label": "__gap",
|
|
2184
|
+
"offset": 0,
|
|
2185
|
+
"slot": "25",
|
|
2186
|
+
"type": "t_array(t_uint256)46_storage"
|
|
2187
|
+
},
|
|
2188
|
+
{
|
|
2189
|
+
"astId": 4,
|
|
2190
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2191
|
+
"label": "_accessControlManager",
|
|
2192
|
+
"offset": 0,
|
|
2193
|
+
"slot": "71",
|
|
2194
|
+
"type": "t_contract(IAccessControlManagerV5)1917"
|
|
2195
|
+
},
|
|
2196
|
+
{
|
|
2197
|
+
"astId": 8,
|
|
2198
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2199
|
+
"label": "__gap",
|
|
2200
|
+
"offset": 0,
|
|
2201
|
+
"slot": "72",
|
|
2202
|
+
"type": "t_array(t_uint256)49_storage"
|
|
2203
|
+
},
|
|
2204
|
+
{
|
|
2205
|
+
"astId": 1924,
|
|
2206
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2207
|
+
"label": "blocksOrSecondsPerYear",
|
|
2208
|
+
"offset": 0,
|
|
2209
|
+
"slot": "121",
|
|
2210
|
+
"type": "t_uint256"
|
|
2211
|
+
},
|
|
2212
|
+
{
|
|
2213
|
+
"astId": 1926,
|
|
2214
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2215
|
+
"label": "isTimeBased",
|
|
2216
|
+
"offset": 0,
|
|
2217
|
+
"slot": "122",
|
|
2218
|
+
"type": "t_bool"
|
|
2219
|
+
},
|
|
2220
|
+
{
|
|
2221
|
+
"astId": 1928,
|
|
2222
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2223
|
+
"label": "isInitialized",
|
|
2224
|
+
"offset": 1,
|
|
2225
|
+
"slot": "122",
|
|
2226
|
+
"type": "t_bool"
|
|
2227
|
+
},
|
|
2228
|
+
{
|
|
2229
|
+
"astId": 1930,
|
|
2230
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2231
|
+
"label": "__deprecatedSlot1",
|
|
2232
|
+
"offset": 2,
|
|
2233
|
+
"slot": "122",
|
|
2234
|
+
"type": "t_bytes8"
|
|
2235
|
+
},
|
|
2236
|
+
{
|
|
2237
|
+
"astId": 1934,
|
|
2238
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2239
|
+
"label": "__gap",
|
|
2240
|
+
"offset": 0,
|
|
2241
|
+
"slot": "123",
|
|
2242
|
+
"type": "t_array(t_uint256)48_storage"
|
|
2243
|
+
}
|
|
2244
|
+
],
|
|
2245
|
+
"types": {
|
|
2246
|
+
"t_address": {
|
|
2247
|
+
"encoding": "inplace",
|
|
2248
|
+
"label": "address",
|
|
2249
|
+
"numberOfBytes": "20"
|
|
2250
|
+
},
|
|
2251
|
+
"t_array(t_struct(PoolInfo)40414_storage)dyn_storage": {
|
|
2252
|
+
"base": "t_struct(PoolInfo)40414_storage",
|
|
2253
|
+
"encoding": "dynamic_array",
|
|
2254
|
+
"label": "struct XVSVaultStorageV1.PoolInfo[]",
|
|
2255
|
+
"numberOfBytes": "32"
|
|
2256
|
+
},
|
|
2257
|
+
"t_array(t_struct(WithdrawalRequest)40421_storage)dyn_storage": {
|
|
2258
|
+
"base": "t_struct(WithdrawalRequest)40421_storage",
|
|
2259
|
+
"encoding": "dynamic_array",
|
|
2260
|
+
"label": "struct XVSVaultStorageV1.WithdrawalRequest[]",
|
|
2261
|
+
"numberOfBytes": "32"
|
|
2262
|
+
},
|
|
2263
|
+
"t_array(t_uint256)46_storage": {
|
|
2264
|
+
"base": "t_uint256",
|
|
2265
|
+
"encoding": "inplace",
|
|
2266
|
+
"label": "uint256[46]",
|
|
2267
|
+
"numberOfBytes": "1472"
|
|
2268
|
+
},
|
|
2269
|
+
"t_array(t_uint256)48_storage": {
|
|
2270
|
+
"base": "t_uint256",
|
|
2271
|
+
"encoding": "inplace",
|
|
2272
|
+
"label": "uint256[48]",
|
|
2273
|
+
"numberOfBytes": "1536"
|
|
2274
|
+
},
|
|
2275
|
+
"t_array(t_uint256)49_storage": {
|
|
2276
|
+
"base": "t_uint256",
|
|
2277
|
+
"encoding": "inplace",
|
|
2278
|
+
"label": "uint256[49]",
|
|
2279
|
+
"numberOfBytes": "1568"
|
|
2280
|
+
},
|
|
2281
|
+
"t_bool": {
|
|
2282
|
+
"encoding": "inplace",
|
|
2283
|
+
"label": "bool",
|
|
2284
|
+
"numberOfBytes": "1"
|
|
2285
|
+
},
|
|
2286
|
+
"t_bytes8": {
|
|
2287
|
+
"encoding": "inplace",
|
|
2288
|
+
"label": "bytes8",
|
|
2289
|
+
"numberOfBytes": "8"
|
|
2290
|
+
},
|
|
2291
|
+
"t_contract(IAccessControlManagerV5)1917": {
|
|
2292
|
+
"encoding": "inplace",
|
|
2293
|
+
"label": "contract IAccessControlManagerV5",
|
|
2294
|
+
"numberOfBytes": "20"
|
|
2295
|
+
},
|
|
2296
|
+
"t_contract(IBEP20)33670": {
|
|
2297
|
+
"encoding": "inplace",
|
|
2298
|
+
"label": "contract IBEP20",
|
|
2299
|
+
"numberOfBytes": "20"
|
|
2300
|
+
},
|
|
2301
|
+
"t_contract(IPrime)12523": {
|
|
2302
|
+
"encoding": "inplace",
|
|
2303
|
+
"label": "contract IPrime",
|
|
2304
|
+
"numberOfBytes": "20"
|
|
2305
|
+
},
|
|
2306
|
+
"t_mapping(t_address,t_address)": {
|
|
2307
|
+
"encoding": "mapping",
|
|
2308
|
+
"key": "t_address",
|
|
2309
|
+
"label": "mapping(address => address)",
|
|
2310
|
+
"numberOfBytes": "32",
|
|
2311
|
+
"value": "t_address"
|
|
2312
|
+
},
|
|
2313
|
+
"t_mapping(t_address,t_array(t_struct(PoolInfo)40414_storage)dyn_storage)": {
|
|
2314
|
+
"encoding": "mapping",
|
|
2315
|
+
"key": "t_address",
|
|
2316
|
+
"label": "mapping(address => struct XVSVaultStorageV1.PoolInfo[])",
|
|
2317
|
+
"numberOfBytes": "32",
|
|
2318
|
+
"value": "t_array(t_struct(PoolInfo)40414_storage)dyn_storage"
|
|
2319
|
+
},
|
|
2320
|
+
"t_mapping(t_address,t_array(t_struct(WithdrawalRequest)40421_storage)dyn_storage)": {
|
|
2321
|
+
"encoding": "mapping",
|
|
2322
|
+
"key": "t_address",
|
|
2323
|
+
"label": "mapping(address => struct XVSVaultStorageV1.WithdrawalRequest[])",
|
|
2324
|
+
"numberOfBytes": "32",
|
|
2325
|
+
"value": "t_array(t_struct(WithdrawalRequest)40421_storage)dyn_storage"
|
|
2326
|
+
},
|
|
2327
|
+
"t_mapping(t_address,t_bool)": {
|
|
2328
|
+
"encoding": "mapping",
|
|
2329
|
+
"key": "t_address",
|
|
2330
|
+
"label": "mapping(address => bool)",
|
|
2331
|
+
"numberOfBytes": "32",
|
|
2332
|
+
"value": "t_bool"
|
|
2333
|
+
},
|
|
2334
|
+
"t_mapping(t_address,t_mapping(t_address,t_uint256))": {
|
|
2335
|
+
"encoding": "mapping",
|
|
2336
|
+
"key": "t_address",
|
|
2337
|
+
"label": "mapping(address => mapping(address => uint256))",
|
|
2338
|
+
"numberOfBytes": "32",
|
|
2339
|
+
"value": "t_mapping(t_address,t_uint256)"
|
|
2340
|
+
},
|
|
2341
|
+
"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(WithdrawalRequest)40421_storage)dyn_storage)))": {
|
|
2342
|
+
"encoding": "mapping",
|
|
2343
|
+
"key": "t_address",
|
|
2344
|
+
"label": "mapping(address => mapping(uint256 => mapping(address => struct XVSVaultStorageV1.WithdrawalRequest[])))",
|
|
2345
|
+
"numberOfBytes": "32",
|
|
2346
|
+
"value": "t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(WithdrawalRequest)40421_storage)dyn_storage))"
|
|
2347
|
+
},
|
|
2348
|
+
"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_struct(UserInfo)40403_storage)))": {
|
|
2349
|
+
"encoding": "mapping",
|
|
2350
|
+
"key": "t_address",
|
|
2351
|
+
"label": "mapping(address => mapping(uint256 => mapping(address => struct XVSVaultStorageV1.UserInfo)))",
|
|
2352
|
+
"numberOfBytes": "32",
|
|
2353
|
+
"value": "t_mapping(t_uint256,t_mapping(t_address,t_struct(UserInfo)40403_storage))"
|
|
2354
|
+
},
|
|
2355
|
+
"t_mapping(t_address,t_mapping(t_uint256,t_uint256))": {
|
|
2356
|
+
"encoding": "mapping",
|
|
2357
|
+
"key": "t_address",
|
|
2358
|
+
"label": "mapping(address => mapping(uint256 => uint256))",
|
|
2359
|
+
"numberOfBytes": "32",
|
|
2360
|
+
"value": "t_mapping(t_uint256,t_uint256)"
|
|
2361
|
+
},
|
|
2362
|
+
"t_mapping(t_address,t_mapping(t_uint32,t_struct(Checkpoint)40456_storage))": {
|
|
2363
|
+
"encoding": "mapping",
|
|
2364
|
+
"key": "t_address",
|
|
2365
|
+
"label": "mapping(address => mapping(uint32 => struct XVSVaultStorageV1.Checkpoint))",
|
|
2366
|
+
"numberOfBytes": "32",
|
|
2367
|
+
"value": "t_mapping(t_uint32,t_struct(Checkpoint)40456_storage)"
|
|
2368
|
+
},
|
|
2369
|
+
"t_mapping(t_address,t_struct(UserInfo)40403_storage)": {
|
|
2370
|
+
"encoding": "mapping",
|
|
2371
|
+
"key": "t_address",
|
|
2372
|
+
"label": "mapping(address => struct XVSVaultStorageV1.UserInfo)",
|
|
2373
|
+
"numberOfBytes": "32",
|
|
2374
|
+
"value": "t_struct(UserInfo)40403_storage"
|
|
2375
|
+
},
|
|
2376
|
+
"t_mapping(t_address,t_uint256)": {
|
|
2377
|
+
"encoding": "mapping",
|
|
2378
|
+
"key": "t_address",
|
|
2379
|
+
"label": "mapping(address => uint256)",
|
|
2380
|
+
"numberOfBytes": "32",
|
|
2381
|
+
"value": "t_uint256"
|
|
2382
|
+
},
|
|
2383
|
+
"t_mapping(t_address,t_uint32)": {
|
|
2384
|
+
"encoding": "mapping",
|
|
2385
|
+
"key": "t_address",
|
|
2386
|
+
"label": "mapping(address => uint32)",
|
|
2387
|
+
"numberOfBytes": "32",
|
|
2388
|
+
"value": "t_uint32"
|
|
2389
|
+
},
|
|
2390
|
+
"t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(WithdrawalRequest)40421_storage)dyn_storage))": {
|
|
2391
|
+
"encoding": "mapping",
|
|
2392
|
+
"key": "t_uint256",
|
|
2393
|
+
"label": "mapping(uint256 => mapping(address => struct XVSVaultStorageV1.WithdrawalRequest[]))",
|
|
2394
|
+
"numberOfBytes": "32",
|
|
2395
|
+
"value": "t_mapping(t_address,t_array(t_struct(WithdrawalRequest)40421_storage)dyn_storage)"
|
|
2396
|
+
},
|
|
2397
|
+
"t_mapping(t_uint256,t_mapping(t_address,t_struct(UserInfo)40403_storage))": {
|
|
2398
|
+
"encoding": "mapping",
|
|
2399
|
+
"key": "t_uint256",
|
|
2400
|
+
"label": "mapping(uint256 => mapping(address => struct XVSVaultStorageV1.UserInfo))",
|
|
2401
|
+
"numberOfBytes": "32",
|
|
2402
|
+
"value": "t_mapping(t_address,t_struct(UserInfo)40403_storage)"
|
|
2403
|
+
},
|
|
2404
|
+
"t_mapping(t_uint256,t_uint256)": {
|
|
2405
|
+
"encoding": "mapping",
|
|
2406
|
+
"key": "t_uint256",
|
|
2407
|
+
"label": "mapping(uint256 => uint256)",
|
|
2408
|
+
"numberOfBytes": "32",
|
|
2409
|
+
"value": "t_uint256"
|
|
2410
|
+
},
|
|
2411
|
+
"t_mapping(t_uint32,t_struct(Checkpoint)40456_storage)": {
|
|
2412
|
+
"encoding": "mapping",
|
|
2413
|
+
"key": "t_uint32",
|
|
2414
|
+
"label": "mapping(uint32 => struct XVSVaultStorageV1.Checkpoint)",
|
|
2415
|
+
"numberOfBytes": "32",
|
|
2416
|
+
"value": "t_struct(Checkpoint)40456_storage"
|
|
2417
|
+
},
|
|
2418
|
+
"t_struct(Checkpoint)40456_storage": {
|
|
2419
|
+
"encoding": "inplace",
|
|
2420
|
+
"label": "struct XVSVaultStorageV1.Checkpoint",
|
|
2421
|
+
"members": [
|
|
2422
|
+
{
|
|
2423
|
+
"astId": 40453,
|
|
2424
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2425
|
+
"label": "fromBlockOrSecond",
|
|
2426
|
+
"offset": 0,
|
|
2427
|
+
"slot": "0",
|
|
2428
|
+
"type": "t_uint32"
|
|
2429
|
+
},
|
|
2430
|
+
{
|
|
2431
|
+
"astId": 40455,
|
|
2432
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2433
|
+
"label": "votes",
|
|
2434
|
+
"offset": 4,
|
|
2435
|
+
"slot": "0",
|
|
2436
|
+
"type": "t_uint96"
|
|
2437
|
+
}
|
|
2438
|
+
],
|
|
2439
|
+
"numberOfBytes": "32"
|
|
2440
|
+
},
|
|
2441
|
+
"t_struct(PoolInfo)40414_storage": {
|
|
2442
|
+
"encoding": "inplace",
|
|
2443
|
+
"label": "struct XVSVaultStorageV1.PoolInfo",
|
|
2444
|
+
"members": [
|
|
2445
|
+
{
|
|
2446
|
+
"astId": 40405,
|
|
2447
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2448
|
+
"label": "token",
|
|
2449
|
+
"offset": 0,
|
|
2450
|
+
"slot": "0",
|
|
2451
|
+
"type": "t_contract(IBEP20)33670"
|
|
2452
|
+
},
|
|
2453
|
+
{
|
|
2454
|
+
"astId": 40407,
|
|
2455
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2456
|
+
"label": "allocPoint",
|
|
2457
|
+
"offset": 0,
|
|
2458
|
+
"slot": "1",
|
|
2459
|
+
"type": "t_uint256"
|
|
2460
|
+
},
|
|
2461
|
+
{
|
|
2462
|
+
"astId": 40409,
|
|
2463
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2464
|
+
"label": "lastRewardBlockOrSecond",
|
|
2465
|
+
"offset": 0,
|
|
2466
|
+
"slot": "2",
|
|
2467
|
+
"type": "t_uint256"
|
|
2468
|
+
},
|
|
2469
|
+
{
|
|
2470
|
+
"astId": 40411,
|
|
2471
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2472
|
+
"label": "accRewardPerShare",
|
|
2473
|
+
"offset": 0,
|
|
2474
|
+
"slot": "3",
|
|
2475
|
+
"type": "t_uint256"
|
|
2476
|
+
},
|
|
2477
|
+
{
|
|
2478
|
+
"astId": 40413,
|
|
2479
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2480
|
+
"label": "lockPeriod",
|
|
2481
|
+
"offset": 0,
|
|
2482
|
+
"slot": "4",
|
|
2483
|
+
"type": "t_uint256"
|
|
2484
|
+
}
|
|
2485
|
+
],
|
|
2486
|
+
"numberOfBytes": "160"
|
|
2487
|
+
},
|
|
2488
|
+
"t_struct(UserInfo)40403_storage": {
|
|
2489
|
+
"encoding": "inplace",
|
|
2490
|
+
"label": "struct XVSVaultStorageV1.UserInfo",
|
|
2491
|
+
"members": [
|
|
2492
|
+
{
|
|
2493
|
+
"astId": 40398,
|
|
2494
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2495
|
+
"label": "amount",
|
|
2496
|
+
"offset": 0,
|
|
2497
|
+
"slot": "0",
|
|
2498
|
+
"type": "t_uint256"
|
|
2499
|
+
},
|
|
2500
|
+
{
|
|
2501
|
+
"astId": 40400,
|
|
2502
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2503
|
+
"label": "rewardDebt",
|
|
2504
|
+
"offset": 0,
|
|
2505
|
+
"slot": "1",
|
|
2506
|
+
"type": "t_uint256"
|
|
2507
|
+
},
|
|
2508
|
+
{
|
|
2509
|
+
"astId": 40402,
|
|
2510
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2511
|
+
"label": "pendingWithdrawals",
|
|
2512
|
+
"offset": 0,
|
|
2513
|
+
"slot": "2",
|
|
2514
|
+
"type": "t_uint256"
|
|
2515
|
+
}
|
|
2516
|
+
],
|
|
2517
|
+
"numberOfBytes": "96"
|
|
2518
|
+
},
|
|
2519
|
+
"t_struct(WithdrawalRequest)40421_storage": {
|
|
2520
|
+
"encoding": "inplace",
|
|
2521
|
+
"label": "struct XVSVaultStorageV1.WithdrawalRequest",
|
|
2522
|
+
"members": [
|
|
2523
|
+
{
|
|
2524
|
+
"astId": 40416,
|
|
2525
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2526
|
+
"label": "amount",
|
|
2527
|
+
"offset": 0,
|
|
2528
|
+
"slot": "0",
|
|
2529
|
+
"type": "t_uint256"
|
|
2530
|
+
},
|
|
2531
|
+
{
|
|
2532
|
+
"astId": 40418,
|
|
2533
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2534
|
+
"label": "lockedUntil",
|
|
2535
|
+
"offset": 0,
|
|
2536
|
+
"slot": "1",
|
|
2537
|
+
"type": "t_uint128"
|
|
2538
|
+
},
|
|
2539
|
+
{
|
|
2540
|
+
"astId": 40420,
|
|
2541
|
+
"contract": "contracts/XVSVault/XVSVault.sol:XVSVault",
|
|
2542
|
+
"label": "afterUpgrade",
|
|
2543
|
+
"offset": 16,
|
|
2544
|
+
"slot": "1",
|
|
2545
|
+
"type": "t_uint128"
|
|
2546
|
+
}
|
|
2547
|
+
],
|
|
2548
|
+
"numberOfBytes": "64"
|
|
2549
|
+
},
|
|
2550
|
+
"t_uint128": {
|
|
2551
|
+
"encoding": "inplace",
|
|
2552
|
+
"label": "uint128",
|
|
2553
|
+
"numberOfBytes": "16"
|
|
2554
|
+
},
|
|
2555
|
+
"t_uint256": {
|
|
2556
|
+
"encoding": "inplace",
|
|
2557
|
+
"label": "uint256",
|
|
2558
|
+
"numberOfBytes": "32"
|
|
2559
|
+
},
|
|
2560
|
+
"t_uint32": {
|
|
2561
|
+
"encoding": "inplace",
|
|
2562
|
+
"label": "uint32",
|
|
2563
|
+
"numberOfBytes": "4"
|
|
2564
|
+
},
|
|
2565
|
+
"t_uint96": {
|
|
2566
|
+
"encoding": "inplace",
|
|
2567
|
+
"label": "uint96",
|
|
2568
|
+
"numberOfBytes": "12"
|
|
2569
|
+
}
|
|
2570
|
+
}
|
|
2571
|
+
}
|
|
2572
|
+
}
|