forked from balancer/balancer-deployments
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FeeDistributor.json
387 lines (387 loc) · 38.6 KB
/
FeeDistributor.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
{
"_format": "hh-sol-artifact-1",
"contractName": "FeeDistributor",
"sourceName": "contracts/fee-distribution/FeeDistributor.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IVotingEscrow",
"name": "votingEscrow",
"type": "address"
},
{
"internalType": "uint256",
"name": "startTime",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "lastCheckpointTimestamp",
"type": "uint256"
}
],
"name": "TokenCheckpointed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "userTokenTimeCursor",
"type": "uint256"
}
],
"name": "TokensClaimed",
"type": "event"
},
{
"inputs": [],
"name": "checkpoint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
}
],
"name": "checkpointToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
}
],
"name": "checkpointTokens",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
}
],
"name": "checkpointUser",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
}
],
"name": "claimToken",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
}
],
"name": "claimTokens",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "depositToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"name": "depositTokens",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getTimeCursor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
}
],
"name": "getTokenLastBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
}
],
"name": "getTokenTimeCursor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
}
],
"name": "getTokensDistributedInWeek",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
}
],
"name": "getTotalSupplyAtTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
}
],
"name": "getUserBalanceAtTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
}
],
"name": "getUserTimeCursor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
}
],
"name": "getUserTokenTimeCursor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getVotingEscrow",
"outputs": [
{
"internalType": "contract IVotingEscrow",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60c06040523480156200001157600080fd5b5060405162001fce38038062001fce83398101604081905262000034916200015d565b60016000556001600160601b0319606083901b16608052620000568162000151565b90506000620000654262000151565b905080821015620000935760405162461bcd60e51b81526004016200008a90620001b0565b60405180910390fd5b80821415620001415760405163bd85b03960e01b81526000906001600160a01b0385169063bd85b03990620000cd9085906004016200022d565b60206040518083038186803b158015620000e657600080fd5b505afa158015620000fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000121919062000197565b11620001415760405162461bcd60e51b81526004016200008a90620001e5565b5060a08190526001555062000236565b62093a80908190040290565b6000806040838503121562000170578182fd5b82516001600160a01b038116811462000187578283fd5b6020939093015192949293505050565b600060208284031215620001a9578081fd5b5051919050565b6020808252818101527f43616e6e6f74207374617274206265666f72652063757272656e74207765656b604082015260600190565b60208082526028908201527f5a65726f20746f74616c20737570706c7920726573756c747320696e206c6f736040820152677420746f6b656e7360c01b606082015260800190565b90815260200190565b60805160601c60a051611d446200028a600039806104bb528061085452806109a45280610d22525080610276528061077652806109115280610ac4528061122d528061130152806115e65250611d446000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806382aa5ad4116100b2578063acbc142811610081578063ca31879d11610066578063ca31879d1461023b578063d3dc4ca11461024e578063de681faf146102615761011b565b8063acbc142814610220578063c2c4c5c1146102335761011b565b806382aa5ad4146101d2578063876e69a1146101da57806388720467146101ed578063905d10ac1461020d5761011b565b80633902b9bc116100ee5780633902b9bc146101865780634f3c5090146101995780637b8d6221146101ac5780638050a7ee146101bf5761011b565b806308b0308a1461012057806314866e081461013e5780632308805b14610153578063338b5dea14610173575b600080fd5b610128610274565b6040516101359190611b2f565b60405180910390f35b61015161014c3660046118bc565b610298565b005b6101666101613660046118bc565b6102b4565b6040516101359190611ce3565b610151610181366004611963565b610302565b6101516101943660046118bc565b61034e565b6101666101a7366004611ac6565b610361565b6101516101ba3660046119ce565b610373565b6101666101cd36600461192b565b610456565b61016661046b565b6101666101e83660046118bc565b610471565b6102006101fb3660046118d8565b6104af565b6040516101359190611bdd565b61015161021b36600461198e565b6105e9565b61016661022e3660046118bc565b61061e565b61015161065c565b61016661024936600461192b565b610676565b61016661025c366004611963565b6106b3565b61016661026f366004611963565b6106e8565b7f000000000000000000000000000000000000000000000000000000000000000090565b6102a061071d565b6102a981610736565b6102b1610c93565b50565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61030a61071d565b610315826000610c9a565b61033773ffffffffffffffffffffffffffffffffffffffff83163330846110c4565b610342826001610c9a565b61034a610c93565b5050565b61035661071d565b6102a9816001610c9a565b60009081526002602052604090205490565b61037b61071d565b6103858382611167565b8260005b81811015610446576103bc8686838181106103a057fe5b90506020020160208101906103b591906118bc565b6000610c9a565b61041333308686858181106103cd57fe5b905060200201358989868181106103e057fe5b90506020020160208101906103f591906118bc565b73ffffffffffffffffffffffffffffffffffffffff169291906110c4565b61043e86868381811061042257fe5b905060200201602081019061043791906118bc565b6001610c9a565b600101610389565b5050610450610c93565b50505050565b60006104628383611174565b90505b92915050565b60015490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205468010000000000000000900467ffffffffffffffff1690565b60606104b961071d565b7f0000000000000000000000000000000000000000000000000000000000000000421161051b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c86565b60405180910390fd5b61052361120c565b61052c84610736565b8160608167ffffffffffffffff8111801561054657600080fd5b50604051908082528060200260200182016040528015610570578160200160208202803683370190505b50905060005b828110156105d65761058d8686838181106103a057fe5b6105b78787878481811061059d57fe5b90506020020160208101906105b291906118bc565b6113ac565b8282815181106105c357fe5b6020908102919091010152600101610576565b509150506105e2610c93565b9392505050565b6105f161071d565b8060005b818110156106145761060c84848381811061042257fe5b6001016105f5565b505061034a610c93565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205468010000000000000000900467ffffffffffffffff1690565b61066461071d565b61066c61120c565b610674610c93565b565b600061068061071d565b61068861120c565b610693826000610c9a565b61069c83610736565b60006106a884846113ac565b915050610465610c93565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460209081526040808320938352929052205490565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b61072f60026000541415610190611570565b6002600055565b6040517f010ae75700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063010ae757906107ab908590600401611b2f565b60206040518083038186803b1580156107c357600080fd5b505afa1580156107d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fb9190611ade565b90508061080857506102b1565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600560205260408120805490916801000000000000000090910467ffffffffffffffff16908161088057610879857f00000000000000000000000000000000000000000000000000000000000000008661157e565b90506108c3565b6108894261169e565b82141561089957505050506102b1565b50815470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b806108cc575060015b6108d4611833565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d47906109489089908690600401611bb7565b60806040518083038186803b15801561096057600080fd5b505afa158015610974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109989190611a57565b905082610a0a576109d57f00000000000000000000000000000000000000000000000000000000000000006109d083604001516116aa565b6116ba565b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff821617855592505b610a12611833565b60005b6032811015610bf85742851115610a2b57610bf8565b82604001518510158015610a3f5750868411155b15610b535760018401935082915086841115610a875760405180608001604052806000600f0b81526020016000600f0b81526020016000815260200160008152509250610b4e565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d4790610afb908b908890600401611bb7565b60806040518083038186803b158015610b1357600080fd5b505afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190611a57565b92505b610bf0565b6000826040015186039050600081846020015102600f0b8460000151600f0b13610b7e576000610b8f565b81846020015102846000015103600f0b5b905080158015610b9e57508886115b15610bb557610bac426116aa565b96505050610bf8565b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526006602090815260408083208a84529091529020555062093a80909401935b600101610a15565b505083546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290920167ffffffffffffffff90811670010000000000000000000000000000000002929092177fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff1668010000000000000000939092169290920217909155505050565b6001600055565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805490916801000000000000000090910467ffffffffffffffff169081610d7e57429150610cec4261169e565b83547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff919091161783557f00000000000000000000000000000000000000000000000000000000000000004211610d79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c86565b610dd0565b814203905083610dd0576000610d938361169e565b610d9c4261169e565b14905060006201518042610daf426116aa565b03109050818015610dbe575080155b15610dcd57505050505061034a565b50505b82547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff16021783556040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190610e62903090600401611b2f565b60206040518083038186803b158015610e7a57600080fd5b505afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190611ade565b8454909150600090610eeb90839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166116d1565b905080610efc57505050505061034a565b6fffffffffffffffffffffffffffffffff821115610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c4f565b84546fffffffffffffffffffffffffffffffff8084167001000000000000000000000000000000000291161785556000610f7f8561169e565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260046020526040812091925090815b601481101561107c578362093a800192508242101561101a5786158015610fd057508742145b15610fee576000848152602083905260409020805486019055611015565b86884203860281610ffb57fe5b600086815260208590526040902080549290910490910190555b61107c565b8615801561102757508783145b1561104557600084815260208390526040902080548601905561106c565b8688840386028161105257fe5b600086815260208590526040902080549290910490910190555b9196508692508291600101610faa565b507f9b7f1a85a4c9b4e59e1b6527d9969c50cdfb3a1a467d0c4a51fb0ed8bf07f1308a85896040516110b093929190611c21565b60405180910390a150505050505050505050565b610450846323b872dd60e01b8585856040516024016110e593929190611b50565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116df565b61034a8183146067611570565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260076020908152604080832093851683529290529081205480156111b6579050610465565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260056020908152604080832054938716835260039091529020546112049167ffffffffffffffff90811691166116ba565b949350505050565b600154600061121a4261169e565b90508082111561122b575050610674565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c2c4c5c16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561129357600080fd5b505af11580156112a7573d6000803e3d6000fd5b5050505060005b60148110156113a557818311156112c4576113a5565b6040517fbd85b03900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063bd85b03990611336908690600401611ce3565b60206040518083038186803b15801561134e57600080fd5b505afa158015611362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113869190611ade565b60008481526002602052604090205562093a80909201916001016112ae565b5050600155565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120816113dc8585611174565b82549091506000906114039068010000000000000000900467ffffffffffffffff1661169e565b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600460209081526040808320938b16835260069091528120929350909190805b60148110156114945784861061145557611494565b6000868152600260209081526040808320548683528184205492889052922054028161147d57fe5b62093a809790970196049190910190600101611440565b5073ffffffffffffffffffffffffffffffffffffffff808a166000908152600760209081526040808320938c1683529290522085905580156115645785546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008083048216849003821602911617865561152673ffffffffffffffffffffffffffffffffffffffff89168a8361178c565b7fff097c7d8b1957a4ff09ef1361b5fb54dcede3941ba836d0beb9d10bec725de68989838860405161155b9493929190611b81565b60405180910390a15b98975050505050505050565b8161034a5761034a816117b0565b60008082815b60808110156116935781831061159957611693565b60028284018101046115a9611833565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d479061161d908c908690600401611bb7565b60806040518083038186803b15801561163557600080fd5b505afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d9190611a57565b90508781604001511161168257819450611689565b6001820393505b5050600101611584565b509095945050505050565b62093a80908190040290565b600061046562093a7f830161169e565b6000818310156116ca5781610462565b5090919050565b60006104628383600161181d565b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516117089190611af6565b6000604051808303816000865af19150503d8060008114611745576040519150601f19603f3d011682016040523d82523d6000602084013e61174a565b606091505b50915091506000821415611762573d6000803e3d6000fd5b6104508151600014806117845750818060200190518101906117849190611a37565b6101a2611570565b6117ab8363a9059cbb60e01b84846040516024016110e5929190611bb7565b505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b600061182c8484111583611570565b5050900390565b60405180608001604052806000600f0b81526020016000600f0b815260200160008152602001600081525090565b60008083601f840112611872578182fd5b50813567ffffffffffffffff811115611889578182fd5b60208301915083602080830285010111156118a357600080fd5b9250929050565b8051600f81900b811461046557600080fd5b6000602082840312156118cd578081fd5b81356105e281611cec565b6000806000604084860312156118ec578182fd5b83356118f781611cec565b9250602084013567ffffffffffffffff811115611912578283fd5b61191e86828701611861565b9497909650939450505050565b6000806040838503121561193d578182fd5b823561194881611cec565b9150602083013561195881611cec565b809150509250929050565b60008060408385031215611975578182fd5b823561198081611cec565b946020939093013593505050565b600080602083850312156119a0578182fd5b823567ffffffffffffffff8111156119b6578283fd5b6119c285828601611861565b90969095509350505050565b600080600080604085870312156119e3578081fd5b843567ffffffffffffffff808211156119fa578283fd5b611a0688838901611861565b90965094506020870135915080821115611a1e578283fd5b50611a2b87828801611861565b95989497509550505050565b600060208284031215611a48578081fd5b815180151581146105e2578182fd5b600060808284031215611a68578081fd5b6040516080810181811067ffffffffffffffff82111715611a87578283fd5b604052611a9484846118aa565b8152611aa384602085016118aa565b602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215611ad7578081fd5b5035919050565b600060208284031215611aef578081fd5b5051919050565b60008251815b81811015611b165760208186018101518583015201611afc565b81811115611b245782828501525b509190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152606081019190915260800190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b6020808252601e908201527f4d6178696d756d20746f6b656e2062616c616e63652065786365656465640000604082015260600190565b60208082526024908201527f46656520646973747269627574696f6e20686173206e6f74207374617274656460408201527f2079657400000000000000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff811681146102b157600080fdfea26469706673582212209a51080ef7195ce739746ca23f501c6240580d4514a704c2617480356521ab7764736f6c63430007010033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061011b5760003560e01c806382aa5ad4116100b2578063acbc142811610081578063ca31879d11610066578063ca31879d1461023b578063d3dc4ca11461024e578063de681faf146102615761011b565b8063acbc142814610220578063c2c4c5c1146102335761011b565b806382aa5ad4146101d2578063876e69a1146101da57806388720467146101ed578063905d10ac1461020d5761011b565b80633902b9bc116100ee5780633902b9bc146101865780634f3c5090146101995780637b8d6221146101ac5780638050a7ee146101bf5761011b565b806308b0308a1461012057806314866e081461013e5780632308805b14610153578063338b5dea14610173575b600080fd5b610128610274565b6040516101359190611b2f565b60405180910390f35b61015161014c3660046118bc565b610298565b005b6101666101613660046118bc565b6102b4565b6040516101359190611ce3565b610151610181366004611963565b610302565b6101516101943660046118bc565b61034e565b6101666101a7366004611ac6565b610361565b6101516101ba3660046119ce565b610373565b6101666101cd36600461192b565b610456565b61016661046b565b6101666101e83660046118bc565b610471565b6102006101fb3660046118d8565b6104af565b6040516101359190611bdd565b61015161021b36600461198e565b6105e9565b61016661022e3660046118bc565b61061e565b61015161065c565b61016661024936600461192b565b610676565b61016661025c366004611963565b6106b3565b61016661026f366004611963565b6106e8565b7f000000000000000000000000000000000000000000000000000000000000000090565b6102a061071d565b6102a981610736565b6102b1610c93565b50565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61030a61071d565b610315826000610c9a565b61033773ffffffffffffffffffffffffffffffffffffffff83163330846110c4565b610342826001610c9a565b61034a610c93565b5050565b61035661071d565b6102a9816001610c9a565b60009081526002602052604090205490565b61037b61071d565b6103858382611167565b8260005b81811015610446576103bc8686838181106103a057fe5b90506020020160208101906103b591906118bc565b6000610c9a565b61041333308686858181106103cd57fe5b905060200201358989868181106103e057fe5b90506020020160208101906103f591906118bc565b73ffffffffffffffffffffffffffffffffffffffff169291906110c4565b61043e86868381811061042257fe5b905060200201602081019061043791906118bc565b6001610c9a565b600101610389565b5050610450610c93565b50505050565b60006104628383611174565b90505b92915050565b60015490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205468010000000000000000900467ffffffffffffffff1690565b60606104b961071d565b7f0000000000000000000000000000000000000000000000000000000000000000421161051b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c86565b60405180910390fd5b61052361120c565b61052c84610736565b8160608167ffffffffffffffff8111801561054657600080fd5b50604051908082528060200260200182016040528015610570578160200160208202803683370190505b50905060005b828110156105d65761058d8686838181106103a057fe5b6105b78787878481811061059d57fe5b90506020020160208101906105b291906118bc565b6113ac565b8282815181106105c357fe5b6020908102919091010152600101610576565b509150506105e2610c93565b9392505050565b6105f161071d565b8060005b818110156106145761060c84848381811061042257fe5b6001016105f5565b505061034a610c93565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205468010000000000000000900467ffffffffffffffff1690565b61066461071d565b61066c61120c565b610674610c93565b565b600061068061071d565b61068861120c565b610693826000610c9a565b61069c83610736565b60006106a884846113ac565b915050610465610c93565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600460209081526040808320938352929052205490565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b61072f60026000541415610190611570565b6002600055565b6040517f010ae75700000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063010ae757906107ab908590600401611b2f565b60206040518083038186803b1580156107c357600080fd5b505afa1580156107d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fb9190611ade565b90508061080857506102b1565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600560205260408120805490916801000000000000000090910467ffffffffffffffff16908161088057610879857f00000000000000000000000000000000000000000000000000000000000000008661157e565b90506108c3565b6108894261169e565b82141561089957505050506102b1565b50815470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b806108cc575060015b6108d4611833565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d47906109489089908690600401611bb7565b60806040518083038186803b15801561096057600080fd5b505afa158015610974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109989190611a57565b905082610a0a576109d57f00000000000000000000000000000000000000000000000000000000000000006109d083604001516116aa565b6116ba565b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff821617855592505b610a12611833565b60005b6032811015610bf85742851115610a2b57610bf8565b82604001518510158015610a3f5750868411155b15610b535760018401935082915086841115610a875760405180608001604052806000600f0b81526020016000600f0b81526020016000815260200160008152509250610b4e565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d4790610afb908b908890600401611bb7565b60806040518083038186803b158015610b1357600080fd5b505afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190611a57565b92505b610bf0565b6000826040015186039050600081846020015102600f0b8460000151600f0b13610b7e576000610b8f565b81846020015102846000015103600f0b5b905080158015610b9e57508886115b15610bb557610bac426116aa565b96505050610bf8565b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526006602090815260408083208a84529091529020555062093a80909401935b600101610a15565b505083546fffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290920167ffffffffffffffff90811670010000000000000000000000000000000002929092177fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff1668010000000000000000939092169290920217909155505050565b6001600055565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805490916801000000000000000090910467ffffffffffffffff169081610d7e57429150610cec4261169e565b83547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff919091161783557f00000000000000000000000000000000000000000000000000000000000000004211610d79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c86565b610dd0565b814203905083610dd0576000610d938361169e565b610d9c4261169e565b14905060006201518042610daf426116aa565b03109050818015610dbe575080155b15610dcd57505050505061034a565b50505b82547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff16021783556040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190610e62903090600401611b2f565b60206040518083038186803b158015610e7a57600080fd5b505afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190611ade565b8454909150600090610eeb90839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166116d1565b905080610efc57505050505061034a565b6fffffffffffffffffffffffffffffffff821115610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051290611c4f565b84546fffffffffffffffffffffffffffffffff8084167001000000000000000000000000000000000291161785556000610f7f8561169e565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260046020526040812091925090815b601481101561107c578362093a800192508242101561101a5786158015610fd057508742145b15610fee576000848152602083905260409020805486019055611015565b86884203860281610ffb57fe5b600086815260208590526040902080549290910490910190555b61107c565b8615801561102757508783145b1561104557600084815260208390526040902080548601905561106c565b8688840386028161105257fe5b600086815260208590526040902080549290910490910190555b9196508692508291600101610faa565b507f9b7f1a85a4c9b4e59e1b6527d9969c50cdfb3a1a467d0c4a51fb0ed8bf07f1308a85896040516110b093929190611c21565b60405180910390a150505050505050505050565b610450846323b872dd60e01b8585856040516024016110e593929190611b50565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526116df565b61034a8183146067611570565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260076020908152604080832093851683529290529081205480156111b6579050610465565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260056020908152604080832054938716835260039091529020546112049167ffffffffffffffff90811691166116ba565b949350505050565b600154600061121a4261169e565b90508082111561122b575050610674565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c2c4c5c16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561129357600080fd5b505af11580156112a7573d6000803e3d6000fd5b5050505060005b60148110156113a557818311156112c4576113a5565b6040517fbd85b03900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063bd85b03990611336908690600401611ce3565b60206040518083038186803b15801561134e57600080fd5b505afa158015611362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113869190611ade565b60008481526002602052604090205562093a80909201916001016112ae565b5050600155565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260408120816113dc8585611174565b82549091506000906114039068010000000000000000900467ffffffffffffffff1661169e565b73ffffffffffffffffffffffffffffffffffffffff8087166000908152600460209081526040808320938b16835260069091528120929350909190805b60148110156114945784861061145557611494565b6000868152600260209081526040808320548683528184205492889052922054028161147d57fe5b62093a809790970196049190910190600101611440565b5073ffffffffffffffffffffffffffffffffffffffff808a166000908152600760209081526040808320938c1683529290522085905580156115645785546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008083048216849003821602911617865561152673ffffffffffffffffffffffffffffffffffffffff89168a8361178c565b7fff097c7d8b1957a4ff09ef1361b5fb54dcede3941ba836d0beb9d10bec725de68989838860405161155b9493929190611b81565b60405180910390a15b98975050505050505050565b8161034a5761034a816117b0565b60008082815b60808110156116935781831061159957611693565b60028284018101046115a9611833565b6040517f28d09d4700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328d09d479061161d908c908690600401611bb7565b60806040518083038186803b15801561163557600080fd5b505afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d9190611a57565b90508781604001511161168257819450611689565b6001820393505b5050600101611584565b509095945050505050565b62093a80908190040290565b600061046562093a7f830161169e565b6000818310156116ca5781610462565b5090919050565b60006104628383600161181d565b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516117089190611af6565b6000604051808303816000865af19150503d8060008114611745576040519150601f19603f3d011682016040523d82523d6000602084013e61174a565b606091505b50915091506000821415611762573d6000803e3d6000fd5b6104508151600014806117845750818060200190518101906117849190611a37565b6101a2611570565b6117ab8363a9059cbb60e01b84846040516024016110e5929190611bb7565b505050565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b600061182c8484111583611570565b5050900390565b60405180608001604052806000600f0b81526020016000600f0b815260200160008152602001600081525090565b60008083601f840112611872578182fd5b50813567ffffffffffffffff811115611889578182fd5b60208301915083602080830285010111156118a357600080fd5b9250929050565b8051600f81900b811461046557600080fd5b6000602082840312156118cd578081fd5b81356105e281611cec565b6000806000604084860312156118ec578182fd5b83356118f781611cec565b9250602084013567ffffffffffffffff811115611912578283fd5b61191e86828701611861565b9497909650939450505050565b6000806040838503121561193d578182fd5b823561194881611cec565b9150602083013561195881611cec565b809150509250929050565b60008060408385031215611975578182fd5b823561198081611cec565b946020939093013593505050565b600080602083850312156119a0578182fd5b823567ffffffffffffffff8111156119b6578283fd5b6119c285828601611861565b90969095509350505050565b600080600080604085870312156119e3578081fd5b843567ffffffffffffffff808211156119fa578283fd5b611a0688838901611861565b90965094506020870135915080821115611a1e578283fd5b50611a2b87828801611861565b95989497509550505050565b600060208284031215611a48578081fd5b815180151581146105e2578182fd5b600060808284031215611a68578081fd5b6040516080810181811067ffffffffffffffff82111715611a87578283fd5b604052611a9484846118aa565b8152611aa384602085016118aa565b602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215611ad7578081fd5b5035919050565b600060208284031215611aef578081fd5b5051919050565b60008251815b81811015611b165760208186018101518583015201611afc565b81811115611b245782828501525b509190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152606081019190915260800190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015611c1557835183529284019291840191600101611bf9565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b6020808252601e908201527f4d6178696d756d20746f6b656e2062616c616e63652065786365656465640000604082015260600190565b60208082526024908201527f46656520646973747269627574696f6e20686173206e6f74207374617274656460408201527f2079657400000000000000000000000000000000000000000000000000000000606082015260800190565b90815260200190565b73ffffffffffffffffffffffffffffffffffffffff811681146102b157600080fdfea26469706673582212209a51080ef7195ce739746ca23f501c6240580d4514a704c2617480356521ab7764736f6c63430007010033",
"linkReferences": {},
"deployedLinkReferences": {}
}