@hanamesh/api-contracts 0.0.0-stage → 0.22.1

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.
@@ -0,0 +1,953 @@
1
+ {
2
+ "contract": "HanaBondFactoryQuoteV2",
3
+ "version": "release-quote-v2",
4
+ "abi": [
5
+ {
6
+ "type": "constructor",
7
+ "inputs": [
8
+ {
9
+ "name": "router_",
10
+ "type": "address",
11
+ "internalType": "address"
12
+ },
13
+ {
14
+ "name": "mesh_",
15
+ "type": "address",
16
+ "internalType": "address"
17
+ },
18
+ {
19
+ "name": "launcher_",
20
+ "type": "address",
21
+ "internalType": "address"
22
+ }
23
+ ],
24
+ "stateMutability": "nonpayable"
25
+ },
26
+ {
27
+ "type": "function",
28
+ "name": "MAX_POINTS_BPS",
29
+ "inputs": [],
30
+ "outputs": [
31
+ {
32
+ "name": "",
33
+ "type": "uint256",
34
+ "internalType": "uint256"
35
+ }
36
+ ],
37
+ "stateMutability": "view"
38
+ },
39
+ {
40
+ "type": "function",
41
+ "name": "bonds",
42
+ "inputs": [
43
+ {
44
+ "name": "",
45
+ "type": "address",
46
+ "internalType": "address"
47
+ }
48
+ ],
49
+ "outputs": [
50
+ {
51
+ "name": "",
52
+ "type": "address",
53
+ "internalType": "address"
54
+ }
55
+ ],
56
+ "stateMutability": "view"
57
+ },
58
+ {
59
+ "type": "function",
60
+ "name": "create",
61
+ "inputs": [
62
+ {
63
+ "name": "hana",
64
+ "type": "address",
65
+ "internalType": "address"
66
+ },
67
+ {
68
+ "name": "hanaTreasury",
69
+ "type": "address",
70
+ "internalType": "address"
71
+ },
72
+ {
73
+ "name": "quote_",
74
+ "type": "address",
75
+ "internalType": "address"
76
+ },
77
+ {
78
+ "name": "issuer",
79
+ "type": "address",
80
+ "internalType": "address"
81
+ },
82
+ {
83
+ "name": "pointsBps",
84
+ "type": "uint256",
85
+ "internalType": "uint256"
86
+ },
87
+ {
88
+ "name": "earlyReleaseAllowed",
89
+ "type": "bool",
90
+ "internalType": "bool"
91
+ }
92
+ ],
93
+ "outputs": [
94
+ {
95
+ "name": "bond",
96
+ "type": "address",
97
+ "internalType": "address"
98
+ }
99
+ ],
100
+ "stateMutability": "nonpayable"
101
+ },
102
+ {
103
+ "type": "function",
104
+ "name": "launcher",
105
+ "inputs": [],
106
+ "outputs": [
107
+ {
108
+ "name": "",
109
+ "type": "address",
110
+ "internalType": "address"
111
+ }
112
+ ],
113
+ "stateMutability": "view"
114
+ },
115
+ {
116
+ "type": "function",
117
+ "name": "meshTreasury",
118
+ "inputs": [],
119
+ "outputs": [
120
+ {
121
+ "name": "",
122
+ "type": "address",
123
+ "internalType": "address"
124
+ }
125
+ ],
126
+ "stateMutability": "view"
127
+ },
128
+ {
129
+ "type": "function",
130
+ "name": "pools",
131
+ "inputs": [
132
+ {
133
+ "name": "",
134
+ "type": "address",
135
+ "internalType": "address"
136
+ }
137
+ ],
138
+ "outputs": [
139
+ {
140
+ "name": "",
141
+ "type": "address",
142
+ "internalType": "address"
143
+ }
144
+ ],
145
+ "stateMutability": "view"
146
+ },
147
+ {
148
+ "type": "function",
149
+ "name": "quoteConfig",
150
+ "inputs": [
151
+ {
152
+ "name": "",
153
+ "type": "address",
154
+ "internalType": "address"
155
+ }
156
+ ],
157
+ "outputs": [
158
+ {
159
+ "name": "virtualQuote",
160
+ "type": "uint256",
161
+ "internalType": "uint256"
162
+ },
163
+ {
164
+ "name": "enabled",
165
+ "type": "bool",
166
+ "internalType": "bool"
167
+ }
168
+ ],
169
+ "stateMutability": "view"
170
+ },
171
+ {
172
+ "type": "function",
173
+ "name": "recordMigration",
174
+ "inputs": [
175
+ {
176
+ "name": "hana",
177
+ "type": "address",
178
+ "internalType": "address"
179
+ },
180
+ {
181
+ "name": "pool",
182
+ "type": "address",
183
+ "internalType": "address"
184
+ }
185
+ ],
186
+ "outputs": [],
187
+ "stateMutability": "nonpayable"
188
+ },
189
+ {
190
+ "type": "function",
191
+ "name": "router",
192
+ "inputs": [],
193
+ "outputs": [
194
+ {
195
+ "name": "",
196
+ "type": "address",
197
+ "internalType": "address"
198
+ }
199
+ ],
200
+ "stateMutability": "view"
201
+ },
202
+ {
203
+ "type": "function",
204
+ "name": "setQuote",
205
+ "inputs": [
206
+ {
207
+ "name": "quote",
208
+ "type": "address",
209
+ "internalType": "address"
210
+ },
211
+ {
212
+ "name": "virtualQuote",
213
+ "type": "uint256",
214
+ "internalType": "uint256"
215
+ },
216
+ {
217
+ "name": "enabled",
218
+ "type": "bool",
219
+ "internalType": "bool"
220
+ }
221
+ ],
222
+ "outputs": [],
223
+ "stateMutability": "nonpayable"
224
+ },
225
+ {
226
+ "type": "function",
227
+ "name": "v2Factory",
228
+ "inputs": [],
229
+ "outputs": [
230
+ {
231
+ "name": "",
232
+ "type": "address",
233
+ "internalType": "address"
234
+ }
235
+ ],
236
+ "stateMutability": "view"
237
+ },
238
+ {
239
+ "type": "function",
240
+ "name": "wrappedNative",
241
+ "inputs": [],
242
+ "outputs": [
243
+ {
244
+ "name": "",
245
+ "type": "address",
246
+ "internalType": "address"
247
+ }
248
+ ],
249
+ "stateMutability": "view"
250
+ },
251
+ {
252
+ "type": "event",
253
+ "name": "BondCreated",
254
+ "inputs": [
255
+ {
256
+ "name": "hana",
257
+ "type": "address",
258
+ "indexed": true,
259
+ "internalType": "address"
260
+ },
261
+ {
262
+ "name": "bond",
263
+ "type": "address",
264
+ "indexed": true,
265
+ "internalType": "address"
266
+ },
267
+ {
268
+ "name": "pool",
269
+ "type": "address",
270
+ "indexed": true,
271
+ "internalType": "address"
272
+ },
273
+ {
274
+ "name": "hanaTreasury",
275
+ "type": "address",
276
+ "indexed": false,
277
+ "internalType": "address"
278
+ },
279
+ {
280
+ "name": "issuer",
281
+ "type": "address",
282
+ "indexed": false,
283
+ "internalType": "address"
284
+ },
285
+ {
286
+ "name": "pointsBps",
287
+ "type": "uint256",
288
+ "indexed": false,
289
+ "internalType": "uint256"
290
+ },
291
+ {
292
+ "name": "earlyReleaseAllowed",
293
+ "type": "bool",
294
+ "indexed": false,
295
+ "internalType": "bool"
296
+ }
297
+ ],
298
+ "anonymous": false
299
+ },
300
+ {
301
+ "type": "event",
302
+ "name": "PoolRegistered",
303
+ "inputs": [
304
+ {
305
+ "name": "hana",
306
+ "type": "address",
307
+ "indexed": true,
308
+ "internalType": "address"
309
+ },
310
+ {
311
+ "name": "bond",
312
+ "type": "address",
313
+ "indexed": true,
314
+ "internalType": "address"
315
+ },
316
+ {
317
+ "name": "pair",
318
+ "type": "address",
319
+ "indexed": true,
320
+ "internalType": "address"
321
+ }
322
+ ],
323
+ "anonymous": false
324
+ },
325
+ {
326
+ "type": "event",
327
+ "name": "QuoteConfigured",
328
+ "inputs": [
329
+ {
330
+ "name": "quote",
331
+ "type": "address",
332
+ "indexed": true,
333
+ "internalType": "address"
334
+ },
335
+ {
336
+ "name": "virtualQuote",
337
+ "type": "uint256",
338
+ "indexed": false,
339
+ "internalType": "uint256"
340
+ },
341
+ {
342
+ "name": "enabled",
343
+ "type": "bool",
344
+ "indexed": false,
345
+ "internalType": "bool"
346
+ }
347
+ ],
348
+ "anonymous": false
349
+ },
350
+ {
351
+ "type": "error",
352
+ "name": "AlreadyRegistered",
353
+ "inputs": []
354
+ },
355
+ {
356
+ "type": "error",
357
+ "name": "InvalidAsset",
358
+ "inputs": []
359
+ },
360
+ {
361
+ "type": "error",
362
+ "name": "InvalidConfiguration",
363
+ "inputs": []
364
+ },
365
+ {
366
+ "type": "error",
367
+ "name": "ReentrancyGuardReentrantCall",
368
+ "inputs": []
369
+ },
370
+ {
371
+ "type": "error",
372
+ "name": "SafeERC20FailedOperation",
373
+ "inputs": [
374
+ {
375
+ "name": "token",
376
+ "type": "address",
377
+ "internalType": "address"
378
+ }
379
+ ]
380
+ },
381
+ {
382
+ "type": "error",
383
+ "name": "Unauthorized",
384
+ "inputs": []
385
+ }
386
+ ],
387
+ "creationBytecode": "0x61012060405234801561001157600080fd5b5060405161622a38038061622a833981016040819052610030916101d1565b60016000556001600160a01b0383163b158061005357506001600160a01b038216155b8061006557506001600160a01b038116155b156100835760405163c52a9bd360e01b815260040160405180910390fd5b6000836001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610214565b90506000846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014d9190610214565b90506001600160a01b0382163b158061016e57506001600160a01b0381163b155b1561018c5760405163c52a9bd360e01b815260040160405180910390fd5b6001600160a01b0390811660805293841660a052831660c05290821660e0521661010052610236565b80516001600160a01b03811681146101cc57600080fd5b919050565b6000806000606084860312156101e657600080fd5b6101ef846101b5565b92506101fd602085016101b5565b915061020b604085016101b5565b90509250925092565b60006020828403121561022657600080fd5b61022f826101b5565b9392505050565b60805160a05160c05160e05161010051615f9c61028e6000396000818160d3015281816104ab01526105d50152600081816101170152610287015260006101d00152600061021e015260006101f70152615f9c6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063a9f9f37311610071578063a9f9f373146101b8578063b4b57c39146101cb578063eb6d3a11146101f2578063f887ea4014610219578063fba2781b14610240578063fe10d7741461025357600080fd5b806305cd2a4d146100b957806316eebd1e146100ce5780637f646d0714610112578063853472f6146101395780639cd57cad14610150578063a4063dbc1461018f575b600080fd5b6100cc6100c7366004610a95565b61027c565b005b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6101426101f481565b604051908152602001610109565b61017a61015e366004610ad3565b6001602081905260009182526040909120805491015460ff1682565b60408051928352901515602083015201610109565b6100f561019d366004610ad3565b6003602052600090815260409020546001600160a01b031681565b6100cc6101c6366004610af7565b6103b7565b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6100f561024e366004610b30565b610496565b6100f5610261366004610ad3565b6002602052600090815260409020546001600160a01b031681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102c4576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0383163b15806102d9575081155b806103125750600a6102fa60016dffffffffffffffffffffffffffff610bbb565b610305906003610bd4565b61030f9190610beb565b82115b156103305760405163c52a9bd360e01b815260040160405180910390fd5b60408051808201825283815282151560208083018281526001600160a01b038816600081815260018085529087902095518655915194909101805460ff19169415159490941790935583518681529081019190915290917faa4837739289bc825af3edef898d9515e207195df84be3745bd39e550d19a028910160405180910390a2505050565b6001600160a01b0382811660009081526002602052604090205416331415806103e757506001600160a01b038116155b15610404576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03828116600090815260036020526040902054161561043d57604051630ea075bf60e21b815260040160405180910390fd5b6001600160a01b0382811660008181526003602052604080822080546001600160a01b0319169486169485179055513392917f61afef2e121f71511fab2583c5ac49a5dc1d7a8ad8ad91c44c8465f073a73ac491a45050565b60006104a061095c565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e8576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03878116600090815260026020526040902054161561052157604051630ea075bf60e21b815260040160405180910390fd5b6001600160a01b0385166000908152600160208181526040928390208351808501909452805484529091015460ff16151590820181905261057557604051636448d6e960e11b815260040160405180910390fd5b856001600160a01b0316886001600160a01b0316148061059d57506001600160a01b0388163b155b806105af57506001600160a01b038716155b806105c157506001600160a01b038516155b806105cd57506101f484115b8061066b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b03166316eebd1e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065f9190610c0d565b6001600160a01b031614155b806106db5750876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d39190610c2a565b60ff16601214155b806107535750876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561071f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107439190610c4d565b6b033b2e3c9fd0803ce800000014155b1561077157604051636448d6e960e11b815260040160405180910390fd5b6000888888846000015189898960405161078a90610a5b565b6001600160a01b039788168152958716602087015293861660408601526060850192909252909316608083015260a082019290925290151560c082015260e001604051809103906000f0801580156107e6573d6000803e3d6000fd5b506001600160a01b038a8116600090815260026020526040902080546001600160a01b03191691831691909117905592508290506108328933836b0295be96e640669720000000610986565b806001600160a01b0316630f15f4c06040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561086d57600080fd5b505af1158015610881573d6000803e3d6000fd5b50505050806001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e79190610c0d565b604080516001600160a01b038b811682528981166020830152918101889052861515606082015291811691858216918c16907f21de952fe499d7b6411019b8d0a02cb47d3c36c6e384a8c8dd50d257f214cb519060800160405180910390a450506109526001600055565b9695505050505050565b60026000540361097f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526109e09085906109e6565b50505050565b600080602060008451602086016000885af180610a09576040513d6000823e3d81fd5b50506000513d91508115610a21578060011415610a2e565b6001600160a01b0384163b155b156109e057604051635274afe760e01b81526001600160a01b038516600482015260240160405180910390fd5b61530080610c6783390190565b6001600160a01b0381168114610a7d57600080fd5b50565b80358015158114610a9057600080fd5b919050565b600080600060608486031215610aaa57600080fd5b8335610ab581610a68565b925060208401359150610aca60408501610a80565b90509250925092565b600060208284031215610ae557600080fd5b8135610af081610a68565b9392505050565b60008060408385031215610b0a57600080fd5b8235610b1581610a68565b91506020830135610b2581610a68565b809150509250929050565b60008060008060008060c08789031215610b4957600080fd5b8635610b5481610a68565b95506020870135610b6481610a68565b94506040870135610b7481610a68565b93506060870135610b8481610a68565b925060808701359150610b9960a08801610a80565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b81810381811115610bce57610bce610ba5565b92915050565b8082028115828204841417610bce57610bce610ba5565b600082610c0857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610c1f57600080fd5b8151610af081610a68565b600060208284031215610c3c57600080fd5b815160ff81168114610af057600080fd5b600060208284031215610c5f57600080fd5b505191905056fe61024060405234801561001157600080fd5b50604051615300380380615300833981016040819052610030916104c1565b6001600055336102208190526001600160a01b0388811660805287811660a052861660c0526040805163eb6d3a1160e01b8152905163eb6d3a11916004808201926020929091908290030181865afa158015610090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b49190610544565b6001600160a01b03166101a0816001600160a01b031681525050610220516001600160a01b031663f887ea406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561010f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101339190610544565b6001600160a01b031660e0816001600160a01b031681525050610220516001600160a01b031663b4b57c396040518163ffffffff1660e01b8152600401602060405180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b19190610544565b6001600160a01b0316610100816001600160a01b031681525050610220516001600160a01b0316637f646d076040518163ffffffff1660e01b8152600401602060405180830381865afa15801561020c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102309190610544565b6001600160a01b03908116610120528316610160526101c0829052612710610264836b033b2e3c9fd0803ce8000000610566565b61026e9190610591565b6101e052801515610200526101808490526101005160c05160405163e6a4390560e01b81526001600160a01b038a811660048301529182166024820152600092919091169063e6a4390590604401602060405180830381865afa1580156102d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fd9190610544565b90506001600160a01b03811661038d576101005160c0516040516364e329cb60e11b81526001600160a01b038b81166004830152918216602482015291169063c9c65396906044016020604051808303816000875af1158015610364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103889190610544565b61038f565b805b6001600160a01b031661014081905215806104325750610140516101005160c05160405163e6a4390560e01b81526001600160a01b038c8116600483015291821660248201529281169291169063e6a4390590604401602060405180830381865afa158015610402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104269190610544565b6001600160a01b031614155b1561044f5760405162820f3560e61b815260040160405180910390fd5b6001600160a01b03871630148061047a5750610140516001600160a01b0316876001600160a01b0316145b156104985760405163d69b537960e01b815260040160405180910390fd5b50505050505050506105b3565b80516001600160a01b03811681146104bc57600080fd5b919050565b600080600080600080600060e0888a0312156104dc57600080fd5b6104e5886104a5565b96506104f3602089016104a5565b9550610501604089016104a5565b60608901519095509350610517608089016104a5565b60a089015160c08a01519194509250801515811461053457600080fd5b8091505092959891949750929550565b60006020828403121561055657600080fd5b61055f826104a5565b9392505050565b808202811582820484141761058b57634e487b7160e01b600052601160045260246000fd5b92915050565b6000826105ae57634e487b7160e01b600052601260045260246000fd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051614afb6108056000396000818161073101528181610db101526134a501526000818161064701526117fc015260006106ae01526000610a1301526000818161032e01528181610a67015281816113c001526120ab01526000818161042b0152611a010152600081816104be01526117bd01526000818161047201528181610c3901528181610ce801528181611a5e015281816123d10152818161288501528181612b3601528181612df201528181612e9e0152818161310901528181613154015281816133da0152818161347d01526135410152600081816107650152818161153c015281816122fa0152818161333b015261338601526000818161092b0152612b5c01526000610a9b01526000818161086701528181610d16015281816113ea0152818161142d015281816114a5015281816114d00152818161151b01528181612036015281816120d50152818161212f015281816121b2015281816121f80152818161228e015281816122d901528181612b0901528181612ece01528181613133015281816132a80152613365015260008181610acf015281816114f101526122af01526000818161095f01528181610c6401528181610e3a0152818161126d015281816112e70152818161132d0152818161172701528181611b960152818161232401528181612ae101528181612dc3015281816130e80152818161321a0152818161331a0152818161344c015261361a0152614afb6000f3fe60806040526004361061031e5760003560e01c80637f646d07116101ab578063a8aa1b31116100f7578063c979e56b11610095578063e4d453e01161006f578063e4d453e014610a35578063eb6d3a1114610a55578063f887ea4014610a89578063f892d87b14610abd57600080fd5b8063c979e56b146109cb578063d51684a7146109eb578063d6b852c214610a0157600080fd5b8063b4e0ecf2116100d1578063b4e0ecf21461094d578063c2d107f114610981578063c796817b14610996578063c8cfaae4146109b657600080fd5b8063a8aa1b31146108da578063aedf220b14610903578063b4b57c391461091957600080fd5b8063900ef0ee1161016457806398aaa62b1161013e57806398aaa62b1461083f578063999b93af146108555780639ef27b0014610889578063a64190c41461089f57600080fd5b8063900ef0ee146107fd5780639042454314610813578063942062521461082957600080fd5b80637f646d07146107535780638113f0d9146107875780638a038a541461079c5780638b21e484146107bc5780638ee25281146107d25780638fd3ab80146107e857600080fd5b806332b8b2151161026a5780634cecd3f61161022357806361f5b8b3116101fd57806361f5b8b31461069c5780636be6e9d9146106d05780636fed787d146106f05780637b1039991461071f57600080fd5b80634cecd3f6146106355780634e80955c14610669578063554a21891461068957600080fd5b806332b8b215146105755780633833a4f11461058b5780633ded58be146105a057806343fd3cdd146105e057806346d201ee146105f55780634acc79ed1461061557600080fd5b806316875160116102d7578063252c09d7116102b1578063252c09d7146104e057806327efc086146105155780632861c7d1146105355780632c678c641461055457600080fd5b8063168751601461044d57806316f0115b146104605780631d143848146104ac57600080fd5b806302c7e7af1461037357806302fb0c5e1461039c57806306731d33146103cd5780630f15f4c0146103ef57806313821bf714610404578063147ece661461041957600080fd5b3661036e57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461036c57604051632f35253160e01b815260040160405180910390fd5b005b600080fd5b34801561037f57600080fd5b5061038960015481565b6040519081526020015b60405180910390f35b3480156103a857600080fd5b506049546103bd90600160c81b900460ff1681565b6040519015158152602001610393565b3480156103d957600080fd5b506103e2610af1565b60405161039391906147f1565b3480156103fb57600080fd5b5061036c610da6565b34801561041057600080fd5b50610389603c81565b34801561042557600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b61038961045b36600461487d565b610ee0565b34801561046c57600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610393565b3480156104b857600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ec57600080fd5b506105006104fb3660046148a9565b610f58565b60408051928352602083019190915201610393565b34801561052157600080fd5b506103896b033b2e3c9fd0803ce800000081565b34801561054157600080fd5b506103896a7c13bc4b2c133c5600000081565b34801561056057600080fd5b506049546103bd90600160d01b900460ff1681565b34801561058157600080fd5b5061038961070881565b34801561059757600080fd5b50610389610f7a565b3480156105ac57600080fd5b506105c06105bb3660046148a9565b610f94565b604080519485526020850193909352918301526060820152608001610393565b3480156105ec57600080fd5b5061038960c881565b34801561060157600080fd5b506103896106103660046148d7565b611038565b34801561062157600080fd5b506105006106303660046148a9565b611073565b34801561064157600080fd5b506103bd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067557600080fd5b506103896b02baf7b5c99a6c5c6d00000081565b61038961069736600461487d565b6110ad565b3480156106a857600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b3480156106dc57600080fd5b506103896b0219aada9b14535aca00000081565b3480156106fc57600080fd5b5060495461071290640100000000900460ff1681565b60405161039391906148f4565b34801561072b57600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b34801561075f57600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b34801561079357600080fd5b506103896110f0565b3480156107a857600080fd5b506103896107b7366004614902565b6110ff565b3480156107c857600080fd5b50610389604a5481565b3480156107de57600080fd5b5061038960045481565b3480156107f457600080fd5b506103bd6115d5565b34801561080957600080fd5b5061038960055481565b34801561081f57600080fd5b50610389604b5481565b34801561083557600080fd5b5061038960085481565b34801561084b57600080fd5b5061038960025481565b34801561086157600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b34801561089557600080fd5b5061038960075481565b3480156108ab57600080fd5b506108bf6108ba3660046148a9565b611655565b60408051938452602084019290925290820152606001610393565b3480156108e657600080fd5b50604954610494906501000000000090046001600160a01b031681565b34801561090f57600080fd5b5061038960035481565b34801561092557600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b34801561095957600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b34801561098d57600080fd5b50610389602081565b3480156109a257600080fd5b506103896109b13660046148d7565b6116c1565b3480156109c257600080fd5b5061036c6117aa565b3480156109d757600080fd5b506105c06109e63660046148a9565b611895565b3480156109f757600080fd5b5061038960065481565b348015610a0d57600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b348015610a4157600080fd5b50610389610a503660046148a9565b6119b0565b348015610a6157600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b348015610a9557600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b348015610ac957600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b610b47604080516101408101825260008082526020820181905291810182905290606082019081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6b0219aada9b14535aca000000600154148015610b6e5750604954600160c81b900460ff16155b1515815260495460ff600160d01b820481161515602084015260608301916401000000009004166003811115610ba657610ba66147b9565b90816003811115610bb957610bb96147b9565b9052506007546080820152604a5460a082015260085460c0820152600080610bdf611a57565b915091508115610c2257600080610bf583611d66565b80158015604089015260e088018290529193509150610c1f57610c18818361496d565b6101008601525b50505b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd19190614981565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d819190614981565b90508115610d9f57610d9881600160701b84611e78565b6101208601525b5050505090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141580610de75750604954600160c81b900460ff165b15610e04576040516282b42960e81b815260040160405180910390fd5b610e256a7c13bc4b2c133c560000006b0219aada9b14535aca00000061499a565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ead9190614981565b14610ecb57604051632f35253160e01b815260040160405180910390fd5b6049805460ff60c81b1916600160c81b179055565b6000610eea611f2d565b6000806000610ef887610f94565b929650909450925090508581610f0e848661499a565b610f18919061499a565b1115610f37576040516307dd37f760e41b815260040160405180910390fd5b610f448484848489611f57565b505050610f516001600055565b9392505050565b60098160208110610f6857600080fd5b60020201805460019091015490915082565b6000604b54600003610f8d5750604a5490565b50604b5490565b600080600080610fa2612469565b84600003610fc35760405163d69b537960e01b815260040160405180910390fd5b600154610fdc906b0219aada9b14535aca0000006149ad565b8511610fe85784611001565b600154611001906b0219aada9b14535aca0000006149ad565b935060025461101785600154610a50919061499a565b61102191906149ad565b925061102c83611073565b94969395509392915050565b604954600090600160d01b900460ff1661106a576001600160a01b0382166000908152604c602052604090205461106d565b60005b92915050565b6000806103e86110848460046149c0565b61108e919061496d565b91508161109c60648561496d565b6110a691906149ad565b9050915091565b60006110b7611f2d565b60008060006110c587611895565b9296509094509250905085841015610f37576040516307dd37f760e41b815260040160405180910390fd5b6110fc603c60206149c0565b81565b6000611109611f2d565b611112826124a9565b6001600160a01b038316158061113057506001600160a01b03831630145b1561114e5760405163d69b537960e01b815260040160405180910390fd5b336000908152604c60205260409020548086111561117f57604051632c5374f960e01b815260040160405180910390fd5b600080600061118d89611655565b919450925090508061119f83856149ad565b6111a991906149ad565b9450878510156111cc576040516307dd37f760e41b815260040160405180910390fd5b6111d689856149ad565b336000818152604c60205260409020919091557fb2e960e0adf7f3443afba08bed10ecb80f72394e72e60f9e4c325e6bce0132bf6112148b876149ad565b60405190815260200160405180910390a2886001600082825461123791906149ad565b92505081905550826002600082825461125091906149ad565b90915550506040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156112bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e09190614981565b905061130e7f000000000000000000000000000000000000000000000000000000000000000033308d6124cd565b6113188a8261499a565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561137c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a09190614981565b146113be57604051632f35253160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036114a057604051632e1a7d4d60e01b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561147957600080fd5b505af115801561148d573d6000803e3d6000fd5b5050505061149b888761253a565b6114cb565b6114cb7f000000000000000000000000000000000000000000000000000000000000000089886125bf565b6115167f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856125bf565b6115617f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000846125bf565b604080518b815260208101869052908101849052606081018390526001600160a01b0389169033907f89bc96e242cf3b1e6040a8f5123c29dbf1e48d876ded5856f1668191a8a7658e9060800160405180910390a36115be6127ca565b50505050506115cd6001600055565b949350505050565b60006115df611f2d565b604954600160d01b900460ff16156115f957506001611648565b6b0219aada9b14535aca00000060015414158061161f5750604954600160c81b900460ff165b1561163d57604051631cdde67b60e01b815260040160405180910390fd5b6116456127fd565b90505b6116526001600055565b90565b6000806000611662612469565b831580611670575060015484115b1561168e5760405163d69b537960e01b815260040160405180910390fd5b61169f84600154610a5091906149ad565b6002546116ac91906149ad565b92506116b783611073565b9395909450915050565b604954600090600160c81b900460ff1615806116e65750604954600160d01b900460ff165b156116f357506000919050565b6001600160a01b038281166000818152604c60205260408082205490516370a0823160e01b815260048101939093529290917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117949190614981565b90508082106117a357806115cd565b5092915050565b6117b2611f2d565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117fa576040516282b42960e81b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015806118285750604b5415155b156118465760405163cae54ae360e01b815260040160405180910390fd5b61184e612469565b42604b81905560405190815233907f85e1ef7b0313e3485755af9d396b0e69d958f9930ba5f57564127a6f61b6eefd9060200160405180910390a26118936001600055565b565b6000806000806118a3612469565b846000036118c45760405163d69b537960e01b815260040160405180910390fd5b6000806001546b0219aada9b14535aca0000006118e191906149ad565b90505b8082101561197557600060026118fa84846149ad565b61190590600161499a565b61190f919061496d565b611919908461499a565b9050600060025461193183600154610a50919061499a565b61193b91906149ad565b90508861194960648361496d565b611953908361499a565b116119605781935061196e565b61196b6001836149ad565b92505b50506118e4565b816000036119965760405163d69b537960e01b815260040160405180910390fd5b61199f82610f94565b955095509550955050509193509193565b60006b0219aada9b14535aca0000008211156119df5760405163d69b537960e01b815260040160405180910390fd5b60006119f7836b02baf7b5c99a6c5c6d0000006149ad565b90506000611a25847f00000000000000000000000000000000000000000000000000000000000000006149c0565b9050611a3182826149d7565b15611a3d576001611a40565b60005b60ff16611a4d838361496d565b6115cd919061499a565b60008060007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae19190614981565b600003611af357506000928392509050565b6000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a9190614a07565b925092509250826001600160701b031660001480611b7f57506001600160701b038216155b15611b9257506000958695509350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c209190614a57565b6001600160a01b031614905080611c9857846001600160a01b0316635a3d54936040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c939190614981565b611cfa565b846001600160a01b0316635909c0d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa9190614981565b9550600081611d095783611d0b565b845b6001600160701b03169050600082611d235785611d25565b845b6001600160701b031690504284900363ffffffff811683600160701b840281611d5057611d50614941565b0402890198505060019850505050505050509091565b600080610708421015611d7e57506000928392509050565b6000611d8c610708426149ad565b905060008060005b6020811015611e5157604954600163ffffffff8381169190911b9091161615611e4957600060098260208110611dcc57611dcc614a74565b600202016040518060400160405290816000820154815260200160018201548152505090508481600001511180611e185750611e0a603c60206149c0565b8151611e1690426149ad565b115b15611e235750611e49565b831580611e305750805183105b15611e475780516020820151890397506001945092505b505b600101611d94565b50818015611e5e57508415155b15611e7057611e6d81426149ad565b93505b505050915091565b6000806000611e8786866128ed565b9150915081600003611eac57838181611ea257611ea2614941565b0492505050610f51565b818411611ec357611ec3600385150260111861290b565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b600260005403611f5057604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b611f60816124a9565b336000908152604c6020526040812054611f7b90879061499a565b336000818152604c60205260409081902083905551919250907fb2e960e0adf7f3443afba08bed10ecb80f72394e72e60f9e4c325e6bce0132bf90611fc39084815260200190565b60405180910390a28560016000828254611fdd919061499a565b925050819055508460026000828254611ff6919061499a565b909155506000905083612009868861499a565b612013919061499a565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561207d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a19190614981565b905034156121a7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061210957508134105b156121275760405163d69b537960e01b815260040160405180910390fd5b81156121a2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561218857600080fd5b505af115801561219c573d6000803e3d6000fd5b50505050505b6121d9565b81156121d9576121d97f00000000000000000000000000000000000000000000000000000000000000003330856124cd565b6121e3828261499a565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226b9190614981565b1461228957604051632f35253160e01b815260040160405180910390fd5b6122d47f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000886125bf565b61231f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000876125bf565b61234a7f0000000000000000000000000000000000000000000000000000000000000000338a6125bf565b60408051898152602081018990529081018790526060810186905233907f27330bd7589580547b6437e08f9c60653de63691d2d2b2c13bff9ee67da2a68d9060800160405180910390a26b0219aada9b14535aca0000006001540361243c576049805460ff60c81b1916905542600781905560025460088190556040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016927ffa93b615fecab715dce428daa1553fb5c24c02f50a81d4971bb86b1937e3c4f29261242692918252602082015260400190565b60405180910390a26124366127fd565b50612444565b6124446127ca565b8134111561245f5761245f3361245a84346149ad565b61253a565b5050505050505050565b604954600160c81b900460ff16158061248b5750604954600160d01b900460ff165b1561189357604051631cdde67b60e01b815260040160405180910390fd5b428110156124ca5760405163d69b537960e01b815260040160405180910390fd5b50565b6040516001600160a01b0384811660248301528381166044830152606482018390526125349186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061291d565b50505050565b80600003612546575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612593576040519150601f19603f3d011682016040523d82523d6000602084013e612598565b606091505b50509050806125ba57604051632f35253160e01b815260040160405180910390fd5b505050565b806000036125cc57505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126379190614981565b6040516370a0823160e01b81526001600160a01b0385811660048301529192506000918616906370a0823190602401602060405180830381865afa158015612683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a79190614981565b90506126b4858585612992565b6126be83836149ad565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015612702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127269190614981565b1415806127a55750612738838261499a565b6040516370a0823160e01b81526001600160a01b0386811660048301528716906370a0823190602401602060405180830381865afa15801561277e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a29190614981565b14155b156127c357604051632f35253160e01b815260040160405180910390fd5b5050505050565b6000806127d5611a57565b9150915081156127ec576127e8816129c3565b5050565b6049805463ffffffff191690555050565b600080600061280a611a57565b9150915060008083156128335761282083611d66565b909250905061282e836129c3565b612841565b6049805463ffffffff191690555b600061284d8383612aca565b9096509050856128e5576049805482919064ff00000000191664010000000083600381111561287e5761287e6147b9565b02179055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f886f47bb880c2e015d8bdca3a345bd9578546a41b00952e356923daa465d1f60826040516128dc91906148f4565b60405180910390a25b505050505090565b60008060001983850993909202808410938190039390930393915050565b634e487b71600052806020526024601cfd5b600080602060008451602086016000885af180612940576040513d6000823e3d81fd5b50506000513d91508115612958578060011415612965565b6001600160a01b0384163b155b1561253457604051635274afe760e01b81526001600160a01b038516600482015260240160405180910390fd5b6040516001600160a01b038381166024830152604482018390526125ba91859182169063a9059cbb90606401612502565b60006129d0603c4261496d565b905060006129df6020836149d7565b604954909150600163ffffffff8084169190911b918216161580612a26575082603c60098460208110612a1457612a14614a74565b6002020154612a23919061496d565b14155b156125345760405180604001604052804281526020018581525060098360208110612a5357612a53614a74565b8251600291909102919091019081556020918201516001909101556049805463ffffffff8481169082161763ffffffff199091161790556040805142815291820186905283917f5d2f23d17c4ad5347ae00f7c12f3c1b984d44422cecfcba0009c80d996899f72910160405180910390a250505050565b60405163e6a4390560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000008116602483015260009182917f000000000000000000000000000000000000000000000000000000000000000091828216917f0000000000000000000000000000000000000000000000000000000000000000169063e6a4390590604401602060405180830381865afa158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190614a57565b6001600160a01b031614612bed5760405162820f3560e61b815260040160405180910390fd5b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c519190614981565b6000141590506000808215612dae57836001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c9b57600080fd5b505af1158015612caf573d6000803e3d6000fd5b50505050600080612cbf866135ab565b915091508160001480612cd0575080155b15612ced5760405162820f3560e61b815260040160405180910390fd5b88600003612d085760006001975097505050505050506135a4565b612d1482828c8c6136eb565b612d2b5760006002975097505050505050506135a4565b6000612d526a7c13bc4b2c133c56000000612d4d856001600160701b036149ad565b613772565b600854909150600090612d7090612d4d856001600160701b036149ad565b90506000612d7f838587611e78565b9050818111612d9357829650809550612da4565b612d9e828686611e78565b96508195505b50505050506130e3565b600080612dba866135ab565b915091506000827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401612e3c91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7d9190614981565b612e8791906149ad565b6040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015291925060009184917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015612f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3b9190614981565b612f4591906149ad565b90506000886001600160a01b031663ba9a7a566040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fab9190614981565b612fb690600161499a565b905060006130556040518060e00160405280888152602001878152602001612fff876a7c13bc4b2c133c56000000612fee919061499a565b612d4d8b6001600160701b036149ad565b815260200161302686600854613015919061499a565b612d4d8a6001600160701b036149ad565b81526a7c13bc4b2c133c560000006020820152600854604082015260600161304e85806149c0565b9052613782565b9050806040015161307757600060039b509b50505050505050505050506135a4565b8051602082015160405163bc25cf7760e01b815230600482015291995097506001600160a01b038b169063bc25cf7790602401600060405180830381600087803b1580156130c457600080fd5b505af11580156130d8573d6000803e3d6000fd5b505050505050505050505b61312e7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000846125bf565b6131797f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836125bf565b6040516335313c2160e11b8152600060048201819052906001600160a01b03861690636a627842906024016020604051808303816000875af11580156131c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e79190614981565b90506000806131f5876135ab565b6040516370a0823160e01b815230600482015291935091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190614981565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156132ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133139190614981565b90506133607f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000846125bf565b6133ab7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836125bf565b6049805460048990556003889055600586905560068590556000600281905560ff60d01b196001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166501000000000002166501000000000061ff0160c81b031990921691909117600160d01b1780835542604a5590919064ff00000000191664010000000083021790555060405163a9f9f37360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9f9f37390604401600060405180830381600087803b1580156134e957600080fd5b505af11580156134fd573d6000803e3d6000fd5b5050604080518a8152602081018a905290810188905260608101859052608081018490528a151560a082015260c0810187905260e081018690526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692507f6245a4f316997e7f00a4d4bf01393dc71253e3f9b060b14e31ecad684d753f4891506101000160405180910390a2600160009a509a505050505050505050505b9250929050565b600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156135ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136139190614a07565b50915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a49190614a57565b6001600160a01b0316146136cb57806001600160701b0316826001600160701b03166136e0565b816001600160701b0316816001600160701b03165b935093505050915091565b6000806136fc600160701b846149c0565b613708906127106149c0565b9050600061372f61371c60c86127106149ad565b61372690896149c0565b86846001613ae7565b9050600061375461374360c861271061499a565b61374d908a6149c0565b8785611e78565b90508187101580156137665750808711155b98975050505050505050565b6000828218828410028218610f51565b6137a8604051806060016040528060008152602001600081526020016000151581525090565b604082015115806137bb57506060820151155b806137da575081606001516137d88360c001518460400151613b34565b115b156137e457919050565b60006137f883608001518460a00151613b66565b9050600081846080015161380c919061496d565b90506000828560a00151613820919061496d565b90506000613865838760400151886000015161383c919061499a565b613846919061496d565b838860600151896020015161385b919061499a565b612d4d919061496d565b865190915061387484836149c0565b11801561388d5750602086015161388b83836149c0565b115b156138e25785516138cd9087906138a486856149c0565b6138ae91906149ad565b60208901516138bd86866149c0565b6138c791906149ad565b88613b8c565b94508460400151156138e25750505050919050565b60006138f38760c001516001613dd0565b90508087604001511015801561390d575080876060015110155b15613a375760008760c00151905060006040518060800160405280613936848c60600151613b34565b8b51613942919061499a565b81526020018a604001518b6000015161395b919061499a565b815260200161396e848c60400151613b34565b8b6020015161397d919061499a565b81526020018a606001518b60200151613996919061499a565b9052600160c08b015290506139ae898260008b613e01565b97506139bd898260018b613e01565b60c08a018390526020810151815191995083916139da91906149c0565b106139eb5750505050505050919050565b6000604089015288516139ff90849061499a565b81526020890151613a1190849061499a565b6040820152613a23898260008b613e01565b9750613a32898260018b613e01565b975050505b6000613a4e8860400151600184612d4d91906149ad565b9050613a628860c001518960600151613b34565b94505b808511613a8b57613a77888689613ffc565b965084613a8381614a8a565b955050613a65565b6060880151613a9f90612d4d6001856149ad565b9050613ab38860c001518960400151613b34565b93505b808411613adc57613ac88885896140c4565b965083613ad481614a8a565b945050613ab6565b505050505050919050565b6000613b16613af58361418b565b8015613b11575060008480613b0c57613b0c614941565b868809115b151590565b613b21868686611e78565b613b2b919061499a565b95945050505050565b6000613b4082846149d7565b15613b4c576001613b4f565b60005b60ff16613b5c838561496d565b610f51919061499a565b60005b8115613b85576000613b7b83856149d7565b929350613b699050565b5090919050565b613bb2604051806060016040528060008152602001600081526020016000151581525090565b831580613bbd575082155b80613bcb5750846040015184115b80613bd95750846060015183115b80613bf0575082613bee8660c0015186613b34565b115b15613bfc5750806115cd565b8160400151613c2a5760405180606001604052808581526020018481526020016001151581525090506115cd565b60008560800151848760200151613c41919061499a565b613c4b91906149c0565b905060008660a00151868860000151613c64919061499a565b613c6e91906149c0565b90506000818311613c8857613c8383836149ad565b613c92565b613c9282846149ad565b9050876080015185602001518960200151613cad919061499a565b613cb791906149c0565b60a089015186518a519295509091613ccf919061499a565b613cd991906149c0565b91506000828411613cf357613cee84846149ad565b613cfd565b613cfd83856149ad565b9050600080613d1f8489600001518d60000151613d1a919061499a565b6128ed565b91509150600080613d3a858d8f60000151613d1a919061499a565b9150915081841080613d5557508184148015613d5557508083105b80613d8d57508184148015613d6957508083145b8015613d8d575060208a01518a51613d8191906149c0565b613d8b8c8e6149c0565b115b15613dbf5760405180606001604052808d81526020018c815260200160011515815250985050505050505050506115cd565b50979b9a5050505050505050505050565b600080613ddc846141b8565b9050613df9613dea8461418b565b8015613b115750818002851190565b019392505050565b613e27604051806060016040528060008152602001600081526020016000151581525090565b6000613e3d858760a00151886080015187614311565b905083613e4b578015613e93565b84604001518560600151613e5f91906149ad565b613e6a90600161499a565b85516020870151613e7b91906149ad565b613e8690600161499a565b613e9091906149c0565b81145b15613ea157829150506115cd565b6040805180820182526000808252600160208084018290528451808601909552908452830152905b606087015181518351613edc919061499a565b11158015613f015750866020015181602001518360200151613efe919061499a565b11155b15613f6d5780518251600091613f37918a91613f1c9161499a565b84602001518660200151613f30919061499a565b878b614502565b90508015613f5557613f4e888484878b6001614538565b9250613f67565b613f64888385878b6000614538565b91505b50613ec9565b600086613f7a5782613f7c565b815b90506000613fa882602001518a60200151613f97919061496d565b835160608c0151612d4d919061496d565b9050613fee8a8b60000151846020015184613fc391906149c0565b613fcd91906149ad565b60208d01518551613fde90866149c0565b613fe891906149ad565b8a613b8c565b9a9950505050505050505050565b614022604051806060016040528060008152602001600081526020016000151581525090565b60006140328560c0015185613b34565b8560200151614041919061499a565b9050600085606001518660200151614059919061499a565b9050600061407f868860000151614070919061499a565b8860a001518960800151611e78565b9050614096878789602001516138bd8588886146b0565b94506140b9878789602001516138bd8560016140b2919061499a565b88886146b0565b979650505050505050565b6140ea604051806060016040528060008152602001600081526020016000151581525090565b60006140fa8560c0015185613b34565b8551614106919061499a565b905060008560400151866000015161411e919061499a565b90506000614144868860200151614135919061499a565b88608001518960a00151611e78565b905061416b87886000015161415a8487876146b0565b61416491906149ad565b8888613b8c565b87519095506140b990889061415a61418485600161499a565b87876146b0565b600060028260038111156141a1576141a16147b9565b6141ab9190614aa3565b60ff166001149050919050565b6000600182116141c6575090565b816001600160801b82106141df5760809190911c9060401b5b6801000000000000000082106141fa5760409190911c9060201b5b64010000000082106142115760209190911c9060101b5b6201000082106142265760109190911c9060081b5b610100821061423a5760089190911c9060041b5b6010821061424d5760049190911c9060021b5b600482106142595760011b5b600302600190811c9081858161427157614271614941565b048201901c9050600181858161428957614289614941565b048201901c905060018185816142a1576142a1614941565b048201901c905060018185816142b9576142b9614941565b048201901c905060018185816142d1576142d1614941565b048201901c905060018185816142e9576142e9614941565b048201901c905061430881858161430257614302614941565b04821190565b90039392505050565b600082600003614367578460400151856060015161432f91906149ad565b61433a90600161499a565b8551602087015161434b91906149ad565b61435690600161499a565b61436091906149c0565b90506115cd565b83600003614377575060006115cd565b60006143ca8660000151846143a45761439f86896040015161439991906149c0565b88613b34565b6146d4565b868689604001516143b591906149c0565b6143bf919061496d565b61439f90600161499a565b905060006144058760000151856143f45761439f878a606001516143ee91906149c0565b89613b34565b87878a606001516143b591906149c0565b905086602001518111614459578660400151876060015161442691906149ad565b61443190600161499a565b81886020015161444191906149ad565b61444c90600161499a565b61445691906149c0565b92505b60006144708860200151600184612d4d91906149ad565b90508083116144f757600061448584836149ad565b61449090600161499a565b90508060018a604001516144a491906149ad565b6144ae91906149c0565b6144df82898b8a6144c05760006144c3565b60015b60ff166144d08a8f6149c0565b6144da91906149ad565b6146e4565b6144e991906149ad565b6144f3908661499a565b9450505b505050949350505050565b60008161451d57826145178787876001614311565b1061452e565b8261452b8787876000614311565b11155b9695505050505050565b604080518082019091526000808252602082015284516000906145af901561457c578651885160608b015161456d91906149ad565b614577919061496d565b614582565b88602001515b6020880151156145a557876020015189602001518b6020015161385b91906149ad565b8960600151613772565b905060015b8181101561465657600060026145ca83856149ad565b6145d590600161499a565b6145df919061496d565b6145e9908361499a565b90508415156146338b8a600001518461460291906149c0565b8c5161460e919061499a565b60208c015161461d90866149c0565b8d6020015161462c919061499a565b8b8b614502565b15150361464257809150614650565b61464d6001826149ad565b92505b506145b4565b604051806040016040528088600001518361467191906149c0565b8a5161467d919061499a565b815260200188602001518361469291906149c0565b8a602001516146a1919061499a565b90529998505050505050505050565b60008284106146cc578184116146c657836115cd565b816115cd565b509092915050565b6000828218828411028218610f51565b60005b83831061473c576146f8848461496d565b60026147056001886149ad565b61470f90886149c0565b614719919061496d565b61472391906149c0565b61472d908261499a565b905061473984846149d7565b92505b8382106147705761474d848361496d565b61475790866149c0565b614761908261499a565b905061476d84836149d7565b91505b60008261477d87866149c0565b614787919061499a565b90508481101561479757506115cd565b6147a1858261496d565b95506147ad85826149d7565b93949392506146e79050565b634e487b7160e01b600052602160045260246000fd5b600481106147ed57634e487b7160e01b600052602160045260246000fd5b9052565b8151151581526101408101602083015161480f602084018215159052565b506040830151614823604084018215159052565b50606083015161483660608401826147cf565b506080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015261012083015161012083015292915050565b60008060006060848603121561489257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156148bb57600080fd5b5035919050565b6001600160a01b03811681146124ca57600080fd5b6000602082840312156148e957600080fd5b8135610f51816148c2565b6020810161106d82846147cf565b6000806000806080858703121561491857600080fd5b84359350602085013592506040850135614931816148c2565b9396929550929360600135925050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008261497c5761497c614941565b500490565b60006020828403121561499357600080fd5b5051919050565b8082018082111561106d5761106d614957565b8181038181111561106d5761106d614957565b808202811582820484141761106d5761106d614957565b6000826149e6576149e6614941565b500690565b80516001600160701b0381168114614a0257600080fd5b919050565b600080600060608486031215614a1c57600080fd5b614a25846149eb565b9250614a33602085016149eb565b9150604084015163ffffffff81168114614a4c57600080fd5b809150509250925092565b600060208284031215614a6957600080fd5b8151610f51816148c2565b634e487b7160e01b600052603260045260246000fd5b600060018201614a9c57614a9c614957565b5060010190565b600060ff831680614ab657614ab6614941565b8060ff8416069150509291505056fea2646970667358221220c05e5681bf37683440183c9bbaa0dfb163caab8d0f31ead556d000c8b959713b64736f6c634300081a0033a26469706673582212200193342308f3ccf6202171a54a918fe4b4bd2628879354f18800fc0bc3edfca064736f6c634300081a0033",
388
+ "runtimeTemplate": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063a9f9f37311610071578063a9f9f373146101b8578063b4b57c39146101cb578063eb6d3a11146101f2578063f887ea4014610219578063fba2781b14610240578063fe10d7741461025357600080fd5b806305cd2a4d146100b957806316eebd1e146100ce5780637f646d0714610112578063853472f6146101395780639cd57cad14610150578063a4063dbc1461018f575b600080fd5b6100cc6100c7366004610a95565b61027c565b005b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6101426101f481565b604051908152602001610109565b61017a61015e366004610ad3565b6001602081905260009182526040909120805491015460ff1682565b60408051928352901515602083015201610109565b6100f561019d366004610ad3565b6003602052600090815260409020546001600160a01b031681565b6100cc6101c6366004610af7565b6103b7565b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6100f561024e366004610b30565b610496565b6100f5610261366004610ad3565b6002602052600090815260409020546001600160a01b031681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102c4576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0383163b15806102d9575081155b806103125750600a6102fa60016dffffffffffffffffffffffffffff610bbb565b610305906003610bd4565b61030f9190610beb565b82115b156103305760405163c52a9bd360e01b815260040160405180910390fd5b60408051808201825283815282151560208083018281526001600160a01b038816600081815260018085529087902095518655915194909101805460ff19169415159490941790935583518681529081019190915290917faa4837739289bc825af3edef898d9515e207195df84be3745bd39e550d19a028910160405180910390a2505050565b6001600160a01b0382811660009081526002602052604090205416331415806103e757506001600160a01b038116155b15610404576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03828116600090815260036020526040902054161561043d57604051630ea075bf60e21b815260040160405180910390fd5b6001600160a01b0382811660008181526003602052604080822080546001600160a01b0319169486169485179055513392917f61afef2e121f71511fab2583c5ac49a5dc1d7a8ad8ad91c44c8465f073a73ac491a45050565b60006104a061095c565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e8576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03878116600090815260026020526040902054161561052157604051630ea075bf60e21b815260040160405180910390fd5b6001600160a01b0385166000908152600160208181526040928390208351808501909452805484529091015460ff16151590820181905261057557604051636448d6e960e11b815260040160405180910390fd5b856001600160a01b0316886001600160a01b0316148061059d57506001600160a01b0388163b155b806105af57506001600160a01b038716155b806105c157506001600160a01b038516155b806105cd57506101f484115b8061066b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b03166316eebd1e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065f9190610c0d565b6001600160a01b031614155b806106db5750876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d39190610c2a565b60ff16601214155b806107535750876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561071f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107439190610c4d565b6b033b2e3c9fd0803ce800000014155b1561077157604051636448d6e960e11b815260040160405180910390fd5b6000888888846000015189898960405161078a90610a5b565b6001600160a01b039788168152958716602087015293861660408601526060850192909252909316608083015260a082019290925290151560c082015260e001604051809103906000f0801580156107e6573d6000803e3d6000fd5b506001600160a01b038a8116600090815260026020526040902080546001600160a01b03191691831691909117905592508290506108328933836b0295be96e640669720000000610986565b806001600160a01b0316630f15f4c06040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561086d57600080fd5b505af1158015610881573d6000803e3d6000fd5b50505050806001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e79190610c0d565b604080516001600160a01b038b811682528981166020830152918101889052861515606082015291811691858216918c16907f21de952fe499d7b6411019b8d0a02cb47d3c36c6e384a8c8dd50d257f214cb519060800160405180910390a450506109526001600055565b9695505050505050565b60026000540361097f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526109e09085906109e6565b50505050565b600080602060008451602086016000885af180610a09576040513d6000823e3d81fd5b50506000513d91508115610a21578060011415610a2e565b6001600160a01b0384163b155b156109e057604051635274afe760e01b81526001600160a01b038516600482015260240160405180910390fd5b61530080610c6783390190565b6001600160a01b0381168114610a7d57600080fd5b50565b80358015158114610a9057600080fd5b919050565b600080600060608486031215610aaa57600080fd5b8335610ab581610a68565b925060208401359150610aca60408501610a80565b90509250925092565b600060208284031215610ae557600080fd5b8135610af081610a68565b9392505050565b60008060408385031215610b0a57600080fd5b8235610b1581610a68565b91506020830135610b2581610a68565b809150509250929050565b60008060008060008060c08789031215610b4957600080fd5b8635610b5481610a68565b95506020870135610b6481610a68565b94506040870135610b7481610a68565b93506060870135610b8481610a68565b925060808701359150610b9960a08801610a80565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b81810381811115610bce57610bce610ba5565b92915050565b8082028115828204841417610bce57610bce610ba5565b600082610c0857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610c1f57600080fd5b8151610af081610a68565b600060208284031215610c3c57600080fd5b815160ff81168114610af057600080fd5b600060208284031215610c5f57600080fd5b505191905056fe61024060405234801561001157600080fd5b50604051615300380380615300833981016040819052610030916104c1565b6001600055336102208190526001600160a01b0388811660805287811660a052861660c0526040805163eb6d3a1160e01b8152905163eb6d3a11916004808201926020929091908290030181865afa158015610090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b49190610544565b6001600160a01b03166101a0816001600160a01b031681525050610220516001600160a01b031663f887ea406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561010f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101339190610544565b6001600160a01b031660e0816001600160a01b031681525050610220516001600160a01b031663b4b57c396040518163ffffffff1660e01b8152600401602060405180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b19190610544565b6001600160a01b0316610100816001600160a01b031681525050610220516001600160a01b0316637f646d076040518163ffffffff1660e01b8152600401602060405180830381865afa15801561020c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102309190610544565b6001600160a01b03908116610120528316610160526101c0829052612710610264836b033b2e3c9fd0803ce8000000610566565b61026e9190610591565b6101e052801515610200526101808490526101005160c05160405163e6a4390560e01b81526001600160a01b038a811660048301529182166024820152600092919091169063e6a4390590604401602060405180830381865afa1580156102d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fd9190610544565b90506001600160a01b03811661038d576101005160c0516040516364e329cb60e11b81526001600160a01b038b81166004830152918216602482015291169063c9c65396906044016020604051808303816000875af1158015610364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103889190610544565b61038f565b805b6001600160a01b031661014081905215806104325750610140516101005160c05160405163e6a4390560e01b81526001600160a01b038c8116600483015291821660248201529281169291169063e6a4390590604401602060405180830381865afa158015610402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104269190610544565b6001600160a01b031614155b1561044f5760405162820f3560e61b815260040160405180910390fd5b6001600160a01b03871630148061047a5750610140516001600160a01b0316876001600160a01b0316145b156104985760405163d69b537960e01b815260040160405180910390fd5b50505050505050506105b3565b80516001600160a01b03811681146104bc57600080fd5b919050565b600080600080600080600060e0888a0312156104dc57600080fd5b6104e5886104a5565b96506104f3602089016104a5565b9550610501604089016104a5565b60608901519095509350610517608089016104a5565b60a089015160c08a01519194509250801515811461053457600080fd5b8091505092959891949750929550565b60006020828403121561055657600080fd5b61055f826104a5565b9392505050565b808202811582820484141761058b57634e487b7160e01b600052601160045260246000fd5b92915050565b6000826105ae57634e487b7160e01b600052601260045260246000fd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516102005161022051614afb6108056000396000818161073101528181610db101526134a501526000818161064701526117fc015260006106ae01526000610a1301526000818161032e01528181610a67015281816113c001526120ab01526000818161042b0152611a010152600081816104be01526117bd01526000818161047201528181610c3901528181610ce801528181611a5e015281816123d10152818161288501528181612b3601528181612df201528181612e9e0152818161310901528181613154015281816133da0152818161347d01526135410152600081816107650152818161153c015281816122fa0152818161333b015261338601526000818161092b0152612b5c01526000610a9b01526000818161086701528181610d16015281816113ea0152818161142d015281816114a5015281816114d00152818161151b01528181612036015281816120d50152818161212f015281816121b2015281816121f80152818161228e015281816122d901528181612b0901528181612ece01528181613133015281816132a80152613365015260008181610acf015281816114f101526122af01526000818161095f01528181610c6401528181610e3a0152818161126d015281816112e70152818161132d0152818161172701528181611b960152818161232401528181612ae101528181612dc3015281816130e80152818161321a0152818161331a0152818161344c015261361a0152614afb6000f3fe60806040526004361061031e5760003560e01c80637f646d07116101ab578063a8aa1b31116100f7578063c979e56b11610095578063e4d453e01161006f578063e4d453e014610a35578063eb6d3a1114610a55578063f887ea4014610a89578063f892d87b14610abd57600080fd5b8063c979e56b146109cb578063d51684a7146109eb578063d6b852c214610a0157600080fd5b8063b4e0ecf2116100d1578063b4e0ecf21461094d578063c2d107f114610981578063c796817b14610996578063c8cfaae4146109b657600080fd5b8063a8aa1b31146108da578063aedf220b14610903578063b4b57c391461091957600080fd5b8063900ef0ee1161016457806398aaa62b1161013e57806398aaa62b1461083f578063999b93af146108555780639ef27b0014610889578063a64190c41461089f57600080fd5b8063900ef0ee146107fd5780639042454314610813578063942062521461082957600080fd5b80637f646d07146107535780638113f0d9146107875780638a038a541461079c5780638b21e484146107bc5780638ee25281146107d25780638fd3ab80146107e857600080fd5b806332b8b2151161026a5780634cecd3f61161022357806361f5b8b3116101fd57806361f5b8b31461069c5780636be6e9d9146106d05780636fed787d146106f05780637b1039991461071f57600080fd5b80634cecd3f6146106355780634e80955c14610669578063554a21891461068957600080fd5b806332b8b215146105755780633833a4f11461058b5780633ded58be146105a057806343fd3cdd146105e057806346d201ee146105f55780634acc79ed1461061557600080fd5b806316875160116102d7578063252c09d7116102b1578063252c09d7146104e057806327efc086146105155780632861c7d1146105355780632c678c641461055457600080fd5b8063168751601461044d57806316f0115b146104605780631d143848146104ac57600080fd5b806302c7e7af1461037357806302fb0c5e1461039c57806306731d33146103cd5780630f15f4c0146103ef57806313821bf714610404578063147ece661461041957600080fd5b3661036e57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461036c57604051632f35253160e01b815260040160405180910390fd5b005b600080fd5b34801561037f57600080fd5b5061038960015481565b6040519081526020015b60405180910390f35b3480156103a857600080fd5b506049546103bd90600160c81b900460ff1681565b6040519015158152602001610393565b3480156103d957600080fd5b506103e2610af1565b60405161039391906147f1565b3480156103fb57600080fd5b5061036c610da6565b34801561041057600080fd5b50610389603c81565b34801561042557600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b61038961045b36600461487d565b610ee0565b34801561046c57600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610393565b3480156104b857600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ec57600080fd5b506105006104fb3660046148a9565b610f58565b60408051928352602083019190915201610393565b34801561052157600080fd5b506103896b033b2e3c9fd0803ce800000081565b34801561054157600080fd5b506103896a7c13bc4b2c133c5600000081565b34801561056057600080fd5b506049546103bd90600160d01b900460ff1681565b34801561058157600080fd5b5061038961070881565b34801561059757600080fd5b50610389610f7a565b3480156105ac57600080fd5b506105c06105bb3660046148a9565b610f94565b604080519485526020850193909352918301526060820152608001610393565b3480156105ec57600080fd5b5061038960c881565b34801561060157600080fd5b506103896106103660046148d7565b611038565b34801561062157600080fd5b506105006106303660046148a9565b611073565b34801561064157600080fd5b506103bd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067557600080fd5b506103896b02baf7b5c99a6c5c6d00000081565b61038961069736600461487d565b6110ad565b3480156106a857600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b3480156106dc57600080fd5b506103896b0219aada9b14535aca00000081565b3480156106fc57600080fd5b5060495461071290640100000000900460ff1681565b60405161039391906148f4565b34801561072b57600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b34801561075f57600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b34801561079357600080fd5b506103896110f0565b3480156107a857600080fd5b506103896107b7366004614902565b6110ff565b3480156107c857600080fd5b50610389604a5481565b3480156107de57600080fd5b5061038960045481565b3480156107f457600080fd5b506103bd6115d5565b34801561080957600080fd5b5061038960055481565b34801561081f57600080fd5b50610389604b5481565b34801561083557600080fd5b5061038960085481565b34801561084b57600080fd5b5061038960025481565b34801561086157600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b34801561089557600080fd5b5061038960075481565b3480156108ab57600080fd5b506108bf6108ba3660046148a9565b611655565b60408051938452602084019290925290820152606001610393565b3480156108e657600080fd5b50604954610494906501000000000090046001600160a01b031681565b34801561090f57600080fd5b5061038960035481565b34801561092557600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b34801561095957600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b34801561098d57600080fd5b50610389602081565b3480156109a257600080fd5b506103896109b13660046148d7565b6116c1565b3480156109c257600080fd5b5061036c6117aa565b3480156109d757600080fd5b506105c06109e63660046148a9565b611895565b3480156109f757600080fd5b5061038960065481565b348015610a0d57600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b348015610a4157600080fd5b50610389610a503660046148a9565b6119b0565b348015610a6157600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b348015610a9557600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b348015610ac957600080fd5b506104947f000000000000000000000000000000000000000000000000000000000000000081565b610b47604080516101408101825260008082526020820181905291810182905290606082019081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6b0219aada9b14535aca000000600154148015610b6e5750604954600160c81b900460ff16155b1515815260495460ff600160d01b820481161515602084015260608301916401000000009004166003811115610ba657610ba66147b9565b90816003811115610bb957610bb96147b9565b9052506007546080820152604a5460a082015260085460c0820152600080610bdf611a57565b915091508115610c2257600080610bf583611d66565b80158015604089015260e088018290529193509150610c1f57610c18818361496d565b6101008601525b50505b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd19190614981565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d819190614981565b90508115610d9f57610d9881600160701b84611e78565b6101208601525b5050505090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141580610de75750604954600160c81b900460ff165b15610e04576040516282b42960e81b815260040160405180910390fd5b610e256a7c13bc4b2c133c560000006b0219aada9b14535aca00000061499a565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ead9190614981565b14610ecb57604051632f35253160e01b815260040160405180910390fd5b6049805460ff60c81b1916600160c81b179055565b6000610eea611f2d565b6000806000610ef887610f94565b929650909450925090508581610f0e848661499a565b610f18919061499a565b1115610f37576040516307dd37f760e41b815260040160405180910390fd5b610f448484848489611f57565b505050610f516001600055565b9392505050565b60098160208110610f6857600080fd5b60020201805460019091015490915082565b6000604b54600003610f8d5750604a5490565b50604b5490565b600080600080610fa2612469565b84600003610fc35760405163d69b537960e01b815260040160405180910390fd5b600154610fdc906b0219aada9b14535aca0000006149ad565b8511610fe85784611001565b600154611001906b0219aada9b14535aca0000006149ad565b935060025461101785600154610a50919061499a565b61102191906149ad565b925061102c83611073565b94969395509392915050565b604954600090600160d01b900460ff1661106a576001600160a01b0382166000908152604c602052604090205461106d565b60005b92915050565b6000806103e86110848460046149c0565b61108e919061496d565b91508161109c60648561496d565b6110a691906149ad565b9050915091565b60006110b7611f2d565b60008060006110c587611895565b9296509094509250905085841015610f37576040516307dd37f760e41b815260040160405180910390fd5b6110fc603c60206149c0565b81565b6000611109611f2d565b611112826124a9565b6001600160a01b038316158061113057506001600160a01b03831630145b1561114e5760405163d69b537960e01b815260040160405180910390fd5b336000908152604c60205260409020548086111561117f57604051632c5374f960e01b815260040160405180910390fd5b600080600061118d89611655565b919450925090508061119f83856149ad565b6111a991906149ad565b9450878510156111cc576040516307dd37f760e41b815260040160405180910390fd5b6111d689856149ad565b336000818152604c60205260409020919091557fb2e960e0adf7f3443afba08bed10ecb80f72394e72e60f9e4c325e6bce0132bf6112148b876149ad565b60405190815260200160405180910390a2886001600082825461123791906149ad565b92505081905550826002600082825461125091906149ad565b90915550506040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156112bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e09190614981565b905061130e7f000000000000000000000000000000000000000000000000000000000000000033308d6124cd565b6113188a8261499a565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561137c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a09190614981565b146113be57604051632f35253160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036114a057604051632e1a7d4d60e01b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561147957600080fd5b505af115801561148d573d6000803e3d6000fd5b5050505061149b888761253a565b6114cb565b6114cb7f000000000000000000000000000000000000000000000000000000000000000089886125bf565b6115167f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000856125bf565b6115617f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000846125bf565b604080518b815260208101869052908101849052606081018390526001600160a01b0389169033907f89bc96e242cf3b1e6040a8f5123c29dbf1e48d876ded5856f1668191a8a7658e9060800160405180910390a36115be6127ca565b50505050506115cd6001600055565b949350505050565b60006115df611f2d565b604954600160d01b900460ff16156115f957506001611648565b6b0219aada9b14535aca00000060015414158061161f5750604954600160c81b900460ff165b1561163d57604051631cdde67b60e01b815260040160405180910390fd5b6116456127fd565b90505b6116526001600055565b90565b6000806000611662612469565b831580611670575060015484115b1561168e5760405163d69b537960e01b815260040160405180910390fd5b61169f84600154610a5091906149ad565b6002546116ac91906149ad565b92506116b783611073565b9395909450915050565b604954600090600160c81b900460ff1615806116e65750604954600160d01b900460ff165b156116f357506000919050565b6001600160a01b038281166000818152604c60205260408082205490516370a0823160e01b815260048101939093529290917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117949190614981565b90508082106117a357806115cd565b5092915050565b6117b2611f2d565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117fa576040516282b42960e81b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015806118285750604b5415155b156118465760405163cae54ae360e01b815260040160405180910390fd5b61184e612469565b42604b81905560405190815233907f85e1ef7b0313e3485755af9d396b0e69d958f9930ba5f57564127a6f61b6eefd9060200160405180910390a26118936001600055565b565b6000806000806118a3612469565b846000036118c45760405163d69b537960e01b815260040160405180910390fd5b6000806001546b0219aada9b14535aca0000006118e191906149ad565b90505b8082101561197557600060026118fa84846149ad565b61190590600161499a565b61190f919061496d565b611919908461499a565b9050600060025461193183600154610a50919061499a565b61193b91906149ad565b90508861194960648361496d565b611953908361499a565b116119605781935061196e565b61196b6001836149ad565b92505b50506118e4565b816000036119965760405163d69b537960e01b815260040160405180910390fd5b61199f82610f94565b955095509550955050509193509193565b60006b0219aada9b14535aca0000008211156119df5760405163d69b537960e01b815260040160405180910390fd5b60006119f7836b02baf7b5c99a6c5c6d0000006149ad565b90506000611a25847f00000000000000000000000000000000000000000000000000000000000000006149c0565b9050611a3182826149d7565b15611a3d576001611a40565b60005b60ff16611a4d838361496d565b6115cd919061499a565b60008060007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae19190614981565b600003611af357506000928392509050565b6000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a9190614a07565b925092509250826001600160701b031660001480611b7f57506001600160701b038216155b15611b9257506000958695509350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c209190614a57565b6001600160a01b031614905080611c9857846001600160a01b0316635a3d54936040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c939190614981565b611cfa565b846001600160a01b0316635909c0d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa9190614981565b9550600081611d095783611d0b565b845b6001600160701b03169050600082611d235785611d25565b845b6001600160701b031690504284900363ffffffff811683600160701b840281611d5057611d50614941565b0402890198505060019850505050505050509091565b600080610708421015611d7e57506000928392509050565b6000611d8c610708426149ad565b905060008060005b6020811015611e5157604954600163ffffffff8381169190911b9091161615611e4957600060098260208110611dcc57611dcc614a74565b600202016040518060400160405290816000820154815260200160018201548152505090508481600001511180611e185750611e0a603c60206149c0565b8151611e1690426149ad565b115b15611e235750611e49565b831580611e305750805183105b15611e475780516020820151890397506001945092505b505b600101611d94565b50818015611e5e57508415155b15611e7057611e6d81426149ad565b93505b505050915091565b6000806000611e8786866128ed565b9150915081600003611eac57838181611ea257611ea2614941565b0492505050610f51565b818411611ec357611ec3600385150260111861290b565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b600260005403611f5057604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b611f60816124a9565b336000908152604c6020526040812054611f7b90879061499a565b336000818152604c60205260409081902083905551919250907fb2e960e0adf7f3443afba08bed10ecb80f72394e72e60f9e4c325e6bce0132bf90611fc39084815260200190565b60405180910390a28560016000828254611fdd919061499a565b925050819055508460026000828254611ff6919061499a565b909155506000905083612009868861499a565b612013919061499a565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561207d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a19190614981565b905034156121a7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061210957508134105b156121275760405163d69b537960e01b815260040160405180910390fd5b81156121a2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561218857600080fd5b505af115801561219c573d6000803e3d6000fd5b50505050505b6121d9565b81156121d9576121d97f00000000000000000000000000000000000000000000000000000000000000003330856124cd565b6121e3828261499a565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226b9190614981565b1461228957604051632f35253160e01b815260040160405180910390fd5b6122d47f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000886125bf565b61231f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000876125bf565b61234a7f0000000000000000000000000000000000000000000000000000000000000000338a6125bf565b60408051898152602081018990529081018790526060810186905233907f27330bd7589580547b6437e08f9c60653de63691d2d2b2c13bff9ee67da2a68d9060800160405180910390a26b0219aada9b14535aca0000006001540361243c576049805460ff60c81b1916905542600781905560025460088190556040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016927ffa93b615fecab715dce428daa1553fb5c24c02f50a81d4971bb86b1937e3c4f29261242692918252602082015260400190565b60405180910390a26124366127fd565b50612444565b6124446127ca565b8134111561245f5761245f3361245a84346149ad565b61253a565b5050505050505050565b604954600160c81b900460ff16158061248b5750604954600160d01b900460ff165b1561189357604051631cdde67b60e01b815260040160405180910390fd5b428110156124ca5760405163d69b537960e01b815260040160405180910390fd5b50565b6040516001600160a01b0384811660248301528381166044830152606482018390526125349186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061291d565b50505050565b80600003612546575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612593576040519150601f19603f3d011682016040523d82523d6000602084013e612598565b606091505b50509050806125ba57604051632f35253160e01b815260040160405180910390fd5b505050565b806000036125cc57505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126379190614981565b6040516370a0823160e01b81526001600160a01b0385811660048301529192506000918616906370a0823190602401602060405180830381865afa158015612683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a79190614981565b90506126b4858585612992565b6126be83836149ad565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015612702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127269190614981565b1415806127a55750612738838261499a565b6040516370a0823160e01b81526001600160a01b0386811660048301528716906370a0823190602401602060405180830381865afa15801561277e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a29190614981565b14155b156127c357604051632f35253160e01b815260040160405180910390fd5b5050505050565b6000806127d5611a57565b9150915081156127ec576127e8816129c3565b5050565b6049805463ffffffff191690555050565b600080600061280a611a57565b9150915060008083156128335761282083611d66565b909250905061282e836129c3565b612841565b6049805463ffffffff191690555b600061284d8383612aca565b9096509050856128e5576049805482919064ff00000000191664010000000083600381111561287e5761287e6147b9565b02179055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f886f47bb880c2e015d8bdca3a345bd9578546a41b00952e356923daa465d1f60826040516128dc91906148f4565b60405180910390a25b505050505090565b60008060001983850993909202808410938190039390930393915050565b634e487b71600052806020526024601cfd5b600080602060008451602086016000885af180612940576040513d6000823e3d81fd5b50506000513d91508115612958578060011415612965565b6001600160a01b0384163b155b1561253457604051635274afe760e01b81526001600160a01b038516600482015260240160405180910390fd5b6040516001600160a01b038381166024830152604482018390526125ba91859182169063a9059cbb90606401612502565b60006129d0603c4261496d565b905060006129df6020836149d7565b604954909150600163ffffffff8084169190911b918216161580612a26575082603c60098460208110612a1457612a14614a74565b6002020154612a23919061496d565b14155b156125345760405180604001604052804281526020018581525060098360208110612a5357612a53614a74565b8251600291909102919091019081556020918201516001909101556049805463ffffffff8481169082161763ffffffff199091161790556040805142815291820186905283917f5d2f23d17c4ad5347ae00f7c12f3c1b984d44422cecfcba0009c80d996899f72910160405180910390a250505050565b60405163e6a4390560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000008116602483015260009182917f000000000000000000000000000000000000000000000000000000000000000091828216917f0000000000000000000000000000000000000000000000000000000000000000169063e6a4390590604401602060405180830381865afa158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190614a57565b6001600160a01b031614612bed5760405162820f3560e61b815260040160405180910390fd5b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c519190614981565b6000141590506000808215612dae57836001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c9b57600080fd5b505af1158015612caf573d6000803e3d6000fd5b50505050600080612cbf866135ab565b915091508160001480612cd0575080155b15612ced5760405162820f3560e61b815260040160405180910390fd5b88600003612d085760006001975097505050505050506135a4565b612d1482828c8c6136eb565b612d2b5760006002975097505050505050506135a4565b6000612d526a7c13bc4b2c133c56000000612d4d856001600160701b036149ad565b613772565b600854909150600090612d7090612d4d856001600160701b036149ad565b90506000612d7f838587611e78565b9050818111612d9357829650809550612da4565b612d9e828686611e78565b96508195505b50505050506130e3565b600080612dba866135ab565b915091506000827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401612e3c91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7d9190614981565b612e8791906149ad565b6040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015291925060009184917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015612f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3b9190614981565b612f4591906149ad565b90506000886001600160a01b031663ba9a7a566040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fab9190614981565b612fb690600161499a565b905060006130556040518060e00160405280888152602001878152602001612fff876a7c13bc4b2c133c56000000612fee919061499a565b612d4d8b6001600160701b036149ad565b815260200161302686600854613015919061499a565b612d4d8a6001600160701b036149ad565b81526a7c13bc4b2c133c560000006020820152600854604082015260600161304e85806149c0565b9052613782565b9050806040015161307757600060039b509b50505050505050505050506135a4565b8051602082015160405163bc25cf7760e01b815230600482015291995097506001600160a01b038b169063bc25cf7790602401600060405180830381600087803b1580156130c457600080fd5b505af11580156130d8573d6000803e3d6000fd5b505050505050505050505b61312e7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000846125bf565b6131797f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836125bf565b6040516335313c2160e11b8152600060048201819052906001600160a01b03861690636a627842906024016020604051808303816000875af11580156131c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e79190614981565b90506000806131f5876135ab565b6040516370a0823160e01b815230600482015291935091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132859190614981565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156132ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133139190614981565b90506133607f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000846125bf565b6133ab7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836125bf565b6049805460048990556003889055600586905560068590556000600281905560ff60d01b196001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166501000000000002166501000000000061ff0160c81b031990921691909117600160d01b1780835542604a5590919064ff00000000191664010000000083021790555060405163a9f9f37360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9f9f37390604401600060405180830381600087803b1580156134e957600080fd5b505af11580156134fd573d6000803e3d6000fd5b5050604080518a8152602081018a905290810188905260608101859052608081018490528a151560a082015260c0810187905260e081018690526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692507f6245a4f316997e7f00a4d4bf01393dc71253e3f9b060b14e31ecad684d753f4891506101000160405180910390a2600160009a509a505050505050505050505b9250929050565b600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156135ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136139190614a07565b50915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a49190614a57565b6001600160a01b0316146136cb57806001600160701b0316826001600160701b03166136e0565b816001600160701b0316816001600160701b03165b935093505050915091565b6000806136fc600160701b846149c0565b613708906127106149c0565b9050600061372f61371c60c86127106149ad565b61372690896149c0565b86846001613ae7565b9050600061375461374360c861271061499a565b61374d908a6149c0565b8785611e78565b90508187101580156137665750808711155b98975050505050505050565b6000828218828410028218610f51565b6137a8604051806060016040528060008152602001600081526020016000151581525090565b604082015115806137bb57506060820151155b806137da575081606001516137d88360c001518460400151613b34565b115b156137e457919050565b60006137f883608001518460a00151613b66565b9050600081846080015161380c919061496d565b90506000828560a00151613820919061496d565b90506000613865838760400151886000015161383c919061499a565b613846919061496d565b838860600151896020015161385b919061499a565b612d4d919061496d565b865190915061387484836149c0565b11801561388d5750602086015161388b83836149c0565b115b156138e25785516138cd9087906138a486856149c0565b6138ae91906149ad565b60208901516138bd86866149c0565b6138c791906149ad565b88613b8c565b94508460400151156138e25750505050919050565b60006138f38760c001516001613dd0565b90508087604001511015801561390d575080876060015110155b15613a375760008760c00151905060006040518060800160405280613936848c60600151613b34565b8b51613942919061499a565b81526020018a604001518b6000015161395b919061499a565b815260200161396e848c60400151613b34565b8b6020015161397d919061499a565b81526020018a606001518b60200151613996919061499a565b9052600160c08b015290506139ae898260008b613e01565b97506139bd898260018b613e01565b60c08a018390526020810151815191995083916139da91906149c0565b106139eb5750505050505050919050565b6000604089015288516139ff90849061499a565b81526020890151613a1190849061499a565b6040820152613a23898260008b613e01565b9750613a32898260018b613e01565b975050505b6000613a4e8860400151600184612d4d91906149ad565b9050613a628860c001518960600151613b34565b94505b808511613a8b57613a77888689613ffc565b965084613a8381614a8a565b955050613a65565b6060880151613a9f90612d4d6001856149ad565b9050613ab38860c001518960400151613b34565b93505b808411613adc57613ac88885896140c4565b965083613ad481614a8a565b945050613ab6565b505050505050919050565b6000613b16613af58361418b565b8015613b11575060008480613b0c57613b0c614941565b868809115b151590565b613b21868686611e78565b613b2b919061499a565b95945050505050565b6000613b4082846149d7565b15613b4c576001613b4f565b60005b60ff16613b5c838561496d565b610f51919061499a565b60005b8115613b85576000613b7b83856149d7565b929350613b699050565b5090919050565b613bb2604051806060016040528060008152602001600081526020016000151581525090565b831580613bbd575082155b80613bcb5750846040015184115b80613bd95750846060015183115b80613bf0575082613bee8660c0015186613b34565b115b15613bfc5750806115cd565b8160400151613c2a5760405180606001604052808581526020018481526020016001151581525090506115cd565b60008560800151848760200151613c41919061499a565b613c4b91906149c0565b905060008660a00151868860000151613c64919061499a565b613c6e91906149c0565b90506000818311613c8857613c8383836149ad565b613c92565b613c9282846149ad565b9050876080015185602001518960200151613cad919061499a565b613cb791906149c0565b60a089015186518a519295509091613ccf919061499a565b613cd991906149c0565b91506000828411613cf357613cee84846149ad565b613cfd565b613cfd83856149ad565b9050600080613d1f8489600001518d60000151613d1a919061499a565b6128ed565b91509150600080613d3a858d8f60000151613d1a919061499a565b9150915081841080613d5557508184148015613d5557508083105b80613d8d57508184148015613d6957508083145b8015613d8d575060208a01518a51613d8191906149c0565b613d8b8c8e6149c0565b115b15613dbf5760405180606001604052808d81526020018c815260200160011515815250985050505050505050506115cd565b50979b9a5050505050505050505050565b600080613ddc846141b8565b9050613df9613dea8461418b565b8015613b115750818002851190565b019392505050565b613e27604051806060016040528060008152602001600081526020016000151581525090565b6000613e3d858760a00151886080015187614311565b905083613e4b578015613e93565b84604001518560600151613e5f91906149ad565b613e6a90600161499a565b85516020870151613e7b91906149ad565b613e8690600161499a565b613e9091906149c0565b81145b15613ea157829150506115cd565b6040805180820182526000808252600160208084018290528451808601909552908452830152905b606087015181518351613edc919061499a565b11158015613f015750866020015181602001518360200151613efe919061499a565b11155b15613f6d5780518251600091613f37918a91613f1c9161499a565b84602001518660200151613f30919061499a565b878b614502565b90508015613f5557613f4e888484878b6001614538565b9250613f67565b613f64888385878b6000614538565b91505b50613ec9565b600086613f7a5782613f7c565b815b90506000613fa882602001518a60200151613f97919061496d565b835160608c0151612d4d919061496d565b9050613fee8a8b60000151846020015184613fc391906149c0565b613fcd91906149ad565b60208d01518551613fde90866149c0565b613fe891906149ad565b8a613b8c565b9a9950505050505050505050565b614022604051806060016040528060008152602001600081526020016000151581525090565b60006140328560c0015185613b34565b8560200151614041919061499a565b9050600085606001518660200151614059919061499a565b9050600061407f868860000151614070919061499a565b8860a001518960800151611e78565b9050614096878789602001516138bd8588886146b0565b94506140b9878789602001516138bd8560016140b2919061499a565b88886146b0565b979650505050505050565b6140ea604051806060016040528060008152602001600081526020016000151581525090565b60006140fa8560c0015185613b34565b8551614106919061499a565b905060008560400151866000015161411e919061499a565b90506000614144868860200151614135919061499a565b88608001518960a00151611e78565b905061416b87886000015161415a8487876146b0565b61416491906149ad565b8888613b8c565b87519095506140b990889061415a61418485600161499a565b87876146b0565b600060028260038111156141a1576141a16147b9565b6141ab9190614aa3565b60ff166001149050919050565b6000600182116141c6575090565b816001600160801b82106141df5760809190911c9060401b5b6801000000000000000082106141fa5760409190911c9060201b5b64010000000082106142115760209190911c9060101b5b6201000082106142265760109190911c9060081b5b610100821061423a5760089190911c9060041b5b6010821061424d5760049190911c9060021b5b600482106142595760011b5b600302600190811c9081858161427157614271614941565b048201901c9050600181858161428957614289614941565b048201901c905060018185816142a1576142a1614941565b048201901c905060018185816142b9576142b9614941565b048201901c905060018185816142d1576142d1614941565b048201901c905060018185816142e9576142e9614941565b048201901c905061430881858161430257614302614941565b04821190565b90039392505050565b600082600003614367578460400151856060015161432f91906149ad565b61433a90600161499a565b8551602087015161434b91906149ad565b61435690600161499a565b61436091906149c0565b90506115cd565b83600003614377575060006115cd565b60006143ca8660000151846143a45761439f86896040015161439991906149c0565b88613b34565b6146d4565b868689604001516143b591906149c0565b6143bf919061496d565b61439f90600161499a565b905060006144058760000151856143f45761439f878a606001516143ee91906149c0565b89613b34565b87878a606001516143b591906149c0565b905086602001518111614459578660400151876060015161442691906149ad565b61443190600161499a565b81886020015161444191906149ad565b61444c90600161499a565b61445691906149c0565b92505b60006144708860200151600184612d4d91906149ad565b90508083116144f757600061448584836149ad565b61449090600161499a565b90508060018a604001516144a491906149ad565b6144ae91906149c0565b6144df82898b8a6144c05760006144c3565b60015b60ff166144d08a8f6149c0565b6144da91906149ad565b6146e4565b6144e991906149ad565b6144f3908661499a565b9450505b505050949350505050565b60008161451d57826145178787876001614311565b1061452e565b8261452b8787876000614311565b11155b9695505050505050565b604080518082019091526000808252602082015284516000906145af901561457c578651885160608b015161456d91906149ad565b614577919061496d565b614582565b88602001515b6020880151156145a557876020015189602001518b6020015161385b91906149ad565b8960600151613772565b905060015b8181101561465657600060026145ca83856149ad565b6145d590600161499a565b6145df919061496d565b6145e9908361499a565b90508415156146338b8a600001518461460291906149c0565b8c5161460e919061499a565b60208c015161461d90866149c0565b8d6020015161462c919061499a565b8b8b614502565b15150361464257809150614650565b61464d6001826149ad565b92505b506145b4565b604051806040016040528088600001518361467191906149c0565b8a5161467d919061499a565b815260200188602001518361469291906149c0565b8a602001516146a1919061499a565b90529998505050505050505050565b60008284106146cc578184116146c657836115cd565b816115cd565b509092915050565b6000828218828411028218610f51565b60005b83831061473c576146f8848461496d565b60026147056001886149ad565b61470f90886149c0565b614719919061496d565b61472391906149c0565b61472d908261499a565b905061473984846149d7565b92505b8382106147705761474d848361496d565b61475790866149c0565b614761908261499a565b905061476d84836149d7565b91505b60008261477d87866149c0565b614787919061499a565b90508481101561479757506115cd565b6147a1858261496d565b95506147ad85826149d7565b93949392506146e79050565b634e487b7160e01b600052602160045260246000fd5b600481106147ed57634e487b7160e01b600052602160045260246000fd5b9052565b8151151581526101408101602083015161480f602084018215159052565b506040830151614823604084018215159052565b50606083015161483660608401826147cf565b506080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015261012083015161012083015292915050565b60008060006060848603121561489257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156148bb57600080fd5b5035919050565b6001600160a01b03811681146124ca57600080fd5b6000602082840312156148e957600080fd5b8135610f51816148c2565b6020810161106d82846147cf565b6000806000806080858703121561491857600080fd5b84359350602085013592506040850135614931816148c2565b9396929550929360600135925050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008261497c5761497c614941565b500490565b60006020828403121561499357600080fd5b5051919050565b8082018082111561106d5761106d614957565b8181038181111561106d5761106d614957565b808202811582820484141761106d5761106d614957565b6000826149e6576149e6614941565b500690565b80516001600160701b0381168114614a0257600080fd5b919050565b600080600060608486031215614a1c57600080fd5b614a25846149eb565b9250614a33602085016149eb565b9150604084015163ffffffff81168114614a4c57600080fd5b809150509250925092565b600060208284031215614a6957600080fd5b8151610f51816148c2565b634e487b7160e01b600052603260045260246000fd5b600060018201614a9c57614a9c614957565b5060010190565b600060ff831680614ab657614ab6614941565b8060ff8416069150509291505056fea2646970667358221220c05e5681bf37683440183c9bbaa0dfb163caab8d0f31ead556d000c8b959713b64736f6c634300081a0033a26469706673582212200193342308f3ccf6202171a54a918fe4b4bd2628879354f18800fc0bc3edfca064736f6c634300081a0033",
389
+ "metadata": {
390
+ "compiler": {
391
+ "version": "0.8.26+commit.8a97fa7a"
392
+ },
393
+ "language": "Solidity",
394
+ "output": {
395
+ "abi": [
396
+ {
397
+ "inputs": [
398
+ {
399
+ "internalType": "address",
400
+ "name": "router_",
401
+ "type": "address"
402
+ },
403
+ {
404
+ "internalType": "address",
405
+ "name": "mesh_",
406
+ "type": "address"
407
+ },
408
+ {
409
+ "internalType": "address",
410
+ "name": "launcher_",
411
+ "type": "address"
412
+ }
413
+ ],
414
+ "stateMutability": "nonpayable",
415
+ "type": "constructor"
416
+ },
417
+ {
418
+ "inputs": [],
419
+ "type": "error",
420
+ "name": "AlreadyRegistered"
421
+ },
422
+ {
423
+ "inputs": [],
424
+ "type": "error",
425
+ "name": "InvalidAsset"
426
+ },
427
+ {
428
+ "inputs": [],
429
+ "type": "error",
430
+ "name": "InvalidConfiguration"
431
+ },
432
+ {
433
+ "inputs": [],
434
+ "type": "error",
435
+ "name": "ReentrancyGuardReentrantCall"
436
+ },
437
+ {
438
+ "inputs": [
439
+ {
440
+ "internalType": "address",
441
+ "name": "token",
442
+ "type": "address"
443
+ }
444
+ ],
445
+ "type": "error",
446
+ "name": "SafeERC20FailedOperation"
447
+ },
448
+ {
449
+ "inputs": [],
450
+ "type": "error",
451
+ "name": "Unauthorized"
452
+ },
453
+ {
454
+ "inputs": [
455
+ {
456
+ "internalType": "address",
457
+ "name": "hana",
458
+ "type": "address",
459
+ "indexed": true
460
+ },
461
+ {
462
+ "internalType": "address",
463
+ "name": "bond",
464
+ "type": "address",
465
+ "indexed": true
466
+ },
467
+ {
468
+ "internalType": "address",
469
+ "name": "pool",
470
+ "type": "address",
471
+ "indexed": true
472
+ },
473
+ {
474
+ "internalType": "address",
475
+ "name": "hanaTreasury",
476
+ "type": "address",
477
+ "indexed": false
478
+ },
479
+ {
480
+ "internalType": "address",
481
+ "name": "issuer",
482
+ "type": "address",
483
+ "indexed": false
484
+ },
485
+ {
486
+ "internalType": "uint256",
487
+ "name": "pointsBps",
488
+ "type": "uint256",
489
+ "indexed": false
490
+ },
491
+ {
492
+ "internalType": "bool",
493
+ "name": "earlyReleaseAllowed",
494
+ "type": "bool",
495
+ "indexed": false
496
+ }
497
+ ],
498
+ "type": "event",
499
+ "name": "BondCreated",
500
+ "anonymous": false
501
+ },
502
+ {
503
+ "inputs": [
504
+ {
505
+ "internalType": "address",
506
+ "name": "hana",
507
+ "type": "address",
508
+ "indexed": true
509
+ },
510
+ {
511
+ "internalType": "address",
512
+ "name": "bond",
513
+ "type": "address",
514
+ "indexed": true
515
+ },
516
+ {
517
+ "internalType": "address",
518
+ "name": "pair",
519
+ "type": "address",
520
+ "indexed": true
521
+ }
522
+ ],
523
+ "type": "event",
524
+ "name": "PoolRegistered",
525
+ "anonymous": false
526
+ },
527
+ {
528
+ "inputs": [
529
+ {
530
+ "internalType": "address",
531
+ "name": "quote",
532
+ "type": "address",
533
+ "indexed": true
534
+ },
535
+ {
536
+ "internalType": "uint256",
537
+ "name": "virtualQuote",
538
+ "type": "uint256",
539
+ "indexed": false
540
+ },
541
+ {
542
+ "internalType": "bool",
543
+ "name": "enabled",
544
+ "type": "bool",
545
+ "indexed": false
546
+ }
547
+ ],
548
+ "type": "event",
549
+ "name": "QuoteConfigured",
550
+ "anonymous": false
551
+ },
552
+ {
553
+ "inputs": [],
554
+ "stateMutability": "view",
555
+ "type": "function",
556
+ "name": "MAX_POINTS_BPS",
557
+ "outputs": [
558
+ {
559
+ "internalType": "uint256",
560
+ "name": "",
561
+ "type": "uint256"
562
+ }
563
+ ]
564
+ },
565
+ {
566
+ "inputs": [
567
+ {
568
+ "internalType": "address",
569
+ "name": "",
570
+ "type": "address"
571
+ }
572
+ ],
573
+ "stateMutability": "view",
574
+ "type": "function",
575
+ "name": "bonds",
576
+ "outputs": [
577
+ {
578
+ "internalType": "address",
579
+ "name": "",
580
+ "type": "address"
581
+ }
582
+ ]
583
+ },
584
+ {
585
+ "inputs": [
586
+ {
587
+ "internalType": "address",
588
+ "name": "hana",
589
+ "type": "address"
590
+ },
591
+ {
592
+ "internalType": "address",
593
+ "name": "hanaTreasury",
594
+ "type": "address"
595
+ },
596
+ {
597
+ "internalType": "address",
598
+ "name": "quote_",
599
+ "type": "address"
600
+ },
601
+ {
602
+ "internalType": "address",
603
+ "name": "issuer",
604
+ "type": "address"
605
+ },
606
+ {
607
+ "internalType": "uint256",
608
+ "name": "pointsBps",
609
+ "type": "uint256"
610
+ },
611
+ {
612
+ "internalType": "bool",
613
+ "name": "earlyReleaseAllowed",
614
+ "type": "bool"
615
+ }
616
+ ],
617
+ "stateMutability": "nonpayable",
618
+ "type": "function",
619
+ "name": "create",
620
+ "outputs": [
621
+ {
622
+ "internalType": "address",
623
+ "name": "bond",
624
+ "type": "address"
625
+ }
626
+ ]
627
+ },
628
+ {
629
+ "inputs": [],
630
+ "stateMutability": "view",
631
+ "type": "function",
632
+ "name": "launcher",
633
+ "outputs": [
634
+ {
635
+ "internalType": "address",
636
+ "name": "",
637
+ "type": "address"
638
+ }
639
+ ]
640
+ },
641
+ {
642
+ "inputs": [],
643
+ "stateMutability": "view",
644
+ "type": "function",
645
+ "name": "meshTreasury",
646
+ "outputs": [
647
+ {
648
+ "internalType": "address",
649
+ "name": "",
650
+ "type": "address"
651
+ }
652
+ ]
653
+ },
654
+ {
655
+ "inputs": [
656
+ {
657
+ "internalType": "address",
658
+ "name": "",
659
+ "type": "address"
660
+ }
661
+ ],
662
+ "stateMutability": "view",
663
+ "type": "function",
664
+ "name": "pools",
665
+ "outputs": [
666
+ {
667
+ "internalType": "address",
668
+ "name": "",
669
+ "type": "address"
670
+ }
671
+ ]
672
+ },
673
+ {
674
+ "inputs": [
675
+ {
676
+ "internalType": "address",
677
+ "name": "",
678
+ "type": "address"
679
+ }
680
+ ],
681
+ "stateMutability": "view",
682
+ "type": "function",
683
+ "name": "quoteConfig",
684
+ "outputs": [
685
+ {
686
+ "internalType": "uint256",
687
+ "name": "virtualQuote",
688
+ "type": "uint256"
689
+ },
690
+ {
691
+ "internalType": "bool",
692
+ "name": "enabled",
693
+ "type": "bool"
694
+ }
695
+ ]
696
+ },
697
+ {
698
+ "inputs": [
699
+ {
700
+ "internalType": "address",
701
+ "name": "hana",
702
+ "type": "address"
703
+ },
704
+ {
705
+ "internalType": "address",
706
+ "name": "pool",
707
+ "type": "address"
708
+ }
709
+ ],
710
+ "stateMutability": "nonpayable",
711
+ "type": "function",
712
+ "name": "recordMigration"
713
+ },
714
+ {
715
+ "inputs": [],
716
+ "stateMutability": "view",
717
+ "type": "function",
718
+ "name": "router",
719
+ "outputs": [
720
+ {
721
+ "internalType": "address",
722
+ "name": "",
723
+ "type": "address"
724
+ }
725
+ ]
726
+ },
727
+ {
728
+ "inputs": [
729
+ {
730
+ "internalType": "address",
731
+ "name": "quote",
732
+ "type": "address"
733
+ },
734
+ {
735
+ "internalType": "uint256",
736
+ "name": "virtualQuote",
737
+ "type": "uint256"
738
+ },
739
+ {
740
+ "internalType": "bool",
741
+ "name": "enabled",
742
+ "type": "bool"
743
+ }
744
+ ],
745
+ "stateMutability": "nonpayable",
746
+ "type": "function",
747
+ "name": "setQuote"
748
+ },
749
+ {
750
+ "inputs": [],
751
+ "stateMutability": "view",
752
+ "type": "function",
753
+ "name": "v2Factory",
754
+ "outputs": [
755
+ {
756
+ "internalType": "address",
757
+ "name": "",
758
+ "type": "address"
759
+ }
760
+ ]
761
+ },
762
+ {
763
+ "inputs": [],
764
+ "stateMutability": "view",
765
+ "type": "function",
766
+ "name": "wrappedNative",
767
+ "outputs": [
768
+ {
769
+ "internalType": "address",
770
+ "name": "",
771
+ "type": "address"
772
+ }
773
+ ]
774
+ }
775
+ ],
776
+ "devdoc": {
777
+ "kind": "dev",
778
+ "methods": {},
779
+ "version": 1
780
+ },
781
+ "userdoc": {
782
+ "kind": "user",
783
+ "methods": {
784
+ "setQuote(address,uint256,bool)": {
785
+ "notice": "Platform Safe controls available quote assets and each asset's fixed virtual reserve. Changes only affect future Bonds; existing Bonds hold immutable copies."
786
+ }
787
+ },
788
+ "version": 1
789
+ }
790
+ },
791
+ "settings": {
792
+ "remappings": [
793
+ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
794
+ "forge-std/=lib/forge-std/src/"
795
+ ],
796
+ "optimizer": {
797
+ "enabled": true,
798
+ "runs": 200
799
+ },
800
+ "metadata": {
801
+ "bytecodeHash": "ipfs"
802
+ },
803
+ "compilationTarget": {
804
+ "src/HanaBondQuoteV2.sol": "HanaBondFactoryQuoteV2"
805
+ },
806
+ "evmVersion": "paris",
807
+ "libraries": {}
808
+ },
809
+ "sources": {
810
+ "lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
811
+ "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7",
812
+ "urls": [
813
+ "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b",
814
+ "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"
815
+ ],
816
+ "license": "MIT"
817
+ },
818
+ "lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
819
+ "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
820
+ "urls": [
821
+ "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
822
+ "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
823
+ ],
824
+ "license": "MIT"
825
+ },
826
+ "lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
827
+ "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c",
828
+ "urls": [
829
+ "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba",
830
+ "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"
831
+ ],
832
+ "license": "MIT"
833
+ },
834
+ "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
835
+ "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
836
+ "urls": [
837
+ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
838
+ "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
839
+ ],
840
+ "license": "MIT"
841
+ },
842
+ "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
843
+ "keccak256": "0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5",
844
+ "urls": [
845
+ "bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508",
846
+ "dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB"
847
+ ],
848
+ "license": "MIT"
849
+ },
850
+ "lib/openzeppelin-contracts/contracts/utils/Panic.sol": {
851
+ "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
852
+ "urls": [
853
+ "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
854
+ "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
855
+ ],
856
+ "license": "MIT"
857
+ },
858
+ "lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol": {
859
+ "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3",
860
+ "urls": [
861
+ "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a",
862
+ "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"
863
+ ],
864
+ "license": "MIT"
865
+ },
866
+ "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
867
+ "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
868
+ "urls": [
869
+ "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
870
+ "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
871
+ ],
872
+ "license": "MIT"
873
+ },
874
+ "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
875
+ "keccak256": "0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6",
876
+ "urls": [
877
+ "bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3",
878
+ "dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB"
879
+ ],
880
+ "license": "MIT"
881
+ },
882
+ "lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": {
883
+ "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54",
884
+ "urls": [
885
+ "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8",
886
+ "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"
887
+ ],
888
+ "license": "MIT"
889
+ },
890
+ "src/HanaBondQuoteV2.sol": {
891
+ "keccak256": "0x68b4ab797dc6cd4a647240586595d105908476f6dd1f4fd68fb5d3f3e67802f1",
892
+ "urls": [
893
+ "bzz-raw://a347a47725a0781f9e25dfb41e3d79b9f34ecdeeaedf674e2023f71739f5269e",
894
+ "dweb:/ipfs/QmYatBjqtcjUS9TS3J8KYs3ibJf2VwpjfcQ2NfSmZrGh6W"
895
+ ],
896
+ "license": "MIT"
897
+ },
898
+ "src/QuoteV2MigrationMath.sol": {
899
+ "keccak256": "0xa7f4e632458606afde140bad764ebf1490aa9cd5d5a1ef3f7f3830b85fb6b58c",
900
+ "urls": [
901
+ "bzz-raw://c0055087d5ab596ce4349d53ba18ae50d6ecda5d88767698ada57dc02102786f",
902
+ "dweb:/ipfs/QmSdQJZxDvkqRoh7BQVeQgdFWNCv6DAHHD8wf8LBnREQCv"
903
+ ],
904
+ "license": "MIT"
905
+ }
906
+ },
907
+ "version": 1
908
+ },
909
+ "immutableReferences": {
910
+ "11352": [
911
+ {
912
+ "start": 503,
913
+ "length": 32
914
+ }
915
+ ],
916
+ "11354": [
917
+ {
918
+ "start": 542,
919
+ "length": 32
920
+ }
921
+ ],
922
+ "11356": [
923
+ {
924
+ "start": 464,
925
+ "length": 32
926
+ }
927
+ ],
928
+ "11358": [
929
+ {
930
+ "start": 279,
931
+ "length": 32
932
+ },
933
+ {
934
+ "start": 647,
935
+ "length": 32
936
+ }
937
+ ],
938
+ "11360": [
939
+ {
940
+ "start": 211,
941
+ "length": 32
942
+ },
943
+ {
944
+ "start": 1195,
945
+ "length": 32
946
+ },
947
+ {
948
+ "start": 1493,
949
+ "length": 32
950
+ }
951
+ ]
952
+ }
953
+ }