-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathStableSurgePoolFactory.json
499 lines (499 loc) · 83.7 KB
/
StableSurgePoolFactory.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
{
"_format": "hh-sol-artifact-1",
"contractName": "StableSurgePoolFactory",
"sourceName": "contracts/StableSurgePoolFactory.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IVault",
"name": "vault",
"type": "address"
},
{
"internalType": "uint32",
"name": "pauseWindowDuration",
"type": "uint32"
},
{
"internalType": "uint256",
"name": "defaultMaxSurgeFeePercentage",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "defaultSurgeThresholdPercentage",
"type": "uint256"
},
{
"internalType": "string",
"name": "factoryVersion",
"type": "string"
},
{
"internalType": "string",
"name": "poolVersion",
"type": "string"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "Create2EmptyBytecode",
"type": "error"
},
{
"inputs": [],
"name": "Create2FailedDeployment",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "Create2InsufficientBalance",
"type": "error"
},
{
"inputs": [],
"name": "Disabled",
"type": "error"
},
{
"inputs": [],
"name": "IndexOutOfBounds",
"type": "error"
},
{
"inputs": [],
"name": "MaxTokens",
"type": "error"
},
{
"inputs": [],
"name": "PoolPauseWindowDurationOverflow",
"type": "error"
},
{
"inputs": [],
"name": "SenderNotAllowed",
"type": "error"
},
{
"inputs": [],
"name": "StandardPoolWithCreator",
"type": "error"
},
{
"anonymous": false,
"inputs": [],
"name": "FactoryDisabled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pool",
"type": "address"
}
],
"name": "PoolCreated",
"type": "event"
},
{
"inputs": [
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"components": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "enum TokenType",
"name": "tokenType",
"type": "uint8"
},
{
"internalType": "contract IRateProvider",
"name": "rateProvider",
"type": "address"
},
{
"internalType": "bool",
"name": "paysYieldFees",
"type": "bool"
}
],
"internalType": "struct TokenConfig[]",
"name": "tokens",
"type": "tuple[]"
},
{
"internalType": "uint256",
"name": "amplificationParameter",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "pauseManager",
"type": "address"
},
{
"internalType": "address",
"name": "swapFeeManager",
"type": "address"
},
{
"internalType": "address",
"name": "poolCreator",
"type": "address"
}
],
"internalType": "struct PoolRoleAccounts",
"name": "roleAccounts",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "swapFeePercentage",
"type": "uint256"
},
{
"internalType": "bool",
"name": "enableDonation",
"type": "bool"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "create",
"outputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "disable",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "selector",
"type": "bytes4"
}
],
"name": "getActionId",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getAuthorizer",
"outputs": [
{
"internalType": "contract IAuthorizer",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDefaultLiquidityManagement",
"outputs": [
{
"components": [
{
"internalType": "bool",
"name": "disableUnbalancedLiquidity",
"type": "bool"
},
{
"internalType": "bool",
"name": "enableAddLiquidityCustom",
"type": "bool"
},
{
"internalType": "bool",
"name": "enableRemoveLiquidityCustom",
"type": "bool"
},
{
"internalType": "bool",
"name": "enableDonation",
"type": "bool"
}
],
"internalType": "struct LiquidityManagement",
"name": "liquidityManagement",
"type": "tuple"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "getDefaultPoolHooksContract",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "constructorArgs",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
}
],
"name": "getDeploymentAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getNewPoolPauseWindowEndTime",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getOriginalPauseWindowEndTime",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getPauseWindowDuration",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getPoolCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getPoolVersion",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getPools",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "start",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "count",
"type": "uint256"
}
],
"name": "getPoolsInRange",
"outputs": [
{
"internalType": "address[]",
"name": "pools",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getStableSurgeHook",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getVault",
"outputs": [
{
"internalType": "contract IVault",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isDisabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
}
],
"name": "isPoolFromFactory",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x604061012081523461049d57617ccf908138038061001c816104a1565b938439820160c08382031261049d5782516001600160a01b0393908481169081810361049d576020808401519263ffffffff9283851680860361049d57888701519460608801519660808901519860018060401b03998a811161049d578b6100859183016104c6565b9a60a08201518b811161049d5761009c92016104c6565b926143cf946100ac8887016104a1565b95808752611ad1898801393060805260a0524201908142116104895782821161047a5760c0521660e0528151918783116103d8576003926100ed8454610517565b91601f9283811161044e575b5086908383116001146103ec5761012792915f9183610287575b50508160011b915f199060031b1c19161790565b83555b88518881116103d8576004996101408b54610517565b8381116103a2575b5086908383116001146103405761017592915f91836102875750508160011b915f199060031b1c19161790565b89555b81519188831161032d5760059361018f8554610517565b8381116102f9575b508692841160011461029257506101c492915f91836102875750508160011b915f199060031b1c19161790565b90555b865195611e2f9081880196888810908811176102745750916060959391879593615ea087398452830152858201520301905ff091821561026a57610100921682525161156b91826105668339608051826113a5015260a0518281816103440152818161048c015281816105e4015281816109930152611433015260c05182610a23015260e05182818161087601526114a301525181818161057301526109260152f35b50513d5f823e3d90fd5b604190634e487b7160e01b5f525260245ffd5b015190505f80610113565b9091601f19841692855f52875f20935f5b898282106102e3575050908560019695949392106102ca575b50505050811b0190556101c7565b01519060f8845f19921b161c191690555f8080806102bc565b60018597829396860151815501960193016102a3565b61031e90865f52885f2085808801891c8201928b8910610324575b01881c019061054f565b5f610197565b92508192610314565b60418a634e487b7160e01b5f525260245ffd5b90601f198316918c5f52885f20925f5b8a82821061038c575050908460019594939210610375575b505050811b018955610178565b01515f1983881b60f8161c191690555f8080610368565b6001859682939686015181550195019301610350565b6103c9908c5f52885f208580860160051c8201928b87106103cf575b0160051c019061054f565b5f610148565b925081926103be565b634e487b7160e01b5f52604160045260245ffd5b90601f19831691865f52885f20925f5b8a828210610438575050908460019594939210610421575b505050811b01835561012a565b01515f1983881b60f8161c191690555f8080610414565b60018596829396860151815501950193016103fc565b61047490865f52885f208580860160051c8201928b87106103cf570160051c019061054f565b5f6100f9565b6368755a1160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176103d857604052565b81601f8201121561049d578051906001600160401b0382116103d8576104f5601f8301601f19166020016104a1565b928284526020838301011161049d57815f9260208093018386015e8301015290565b90600182811c92168015610545575b602083101461053157565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610526565b81811061055a575050565b5f815560010161054f56fe60806040526004361015610011575f80fd5b5f358060e01c908163193ad50f14610fc65781632f2770db14610e79575080633f819b6f14610e4a57806344f6fec714610d9057806353a72f7e14610c3257806354fd4d5014610b545780636634b75314610b08578063673a2a1f14610a695780636c57f5a914610a4757806378da80cb14610a07578063851c1bb3146109b75780638d928af8146109675780638eec5d701461094a5780638f9a8f3f146108fa578063aaabadc5146108c2578063db035ebc1461089a578063e9d56e191461085a578063ec888061146108405763f9d62108146100ed575f80fd5b34610718576101406003193601126107185760043567ffffffffffffffff81116107185761011f903690600401611110565b60243567ffffffffffffffff81116107185761013f903690600401611110565b906044359167ffffffffffffffff831161071857366023840112156107185782600401359061016d8261112e565b9361017b6040519586611056565b82855260208501906024829460071b8201019036821161071857602401915b8183106107bc5750505060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261071857604051926060840184811067ffffffffffffffff8211176106365760405260843573ffffffffffffffffffffffffffffffffffffffff8116810361071857845260a43573ffffffffffffffffffffffffffffffffffffffff8116810361071857602085015260c4359173ffffffffffffffffffffffffffffffffffffffff831692838103610718576040860152610104359283151584036107185761079457600586511161076c5761027e611146565b9215156060840152604051916102938361103a565b8252602082019081526103a560408301606435815261032d6102b36111bb565b91606086019283526040519485936103166102e2602087019960408b52516080606089015260e0880190611015565b9251927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09384888303016080890152611015565b925160a086015251908483030160c0850152611015565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660408301520361037c601f1991828101855284611056565b6040518094602082019461038f8661127f565b90518092825e015f815203908101845283611056565b6103b16101243561150c565b908251156107445773ffffffffffffffffffffffffffffffffffffffff9251905ff51692831561071c576103e36114d8565b835f525f60205260405f20600160ff19825416179055600154680100000000000000008110156106365780600161041d9201600155611318565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff87831b921b191617905560405194847f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a26104746114a1565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610718579086939492917feeec802f0000000000000000000000000000000000000000000000000000000085526101a48501908760048701526101a06024870152518091526101c4850193905f5b81811061066e575050505f9473ffffffffffffffffffffffffffffffffffffffff604086959463ffffffff6105ca9560e43560448a01521660648801528860848801528281511660a48801528260208201511660c488015201511660e485015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166101048501526101248401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156106635761061c575b602090604051908152f35b67ffffffffffffffff821161063657602091604052610611565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040513d5f823e3d90fd5b918097965094909293945173ffffffffffffffffffffffffffffffffffffffff815116825260208101519060028210156106eb5782606060809260209485600197015273ffffffffffffffffffffffffffffffffffffffff60408201511660408401520151151560608201520197019101918895969493926104fc565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f80fd5b7f741752c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f707bdf58000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f61ee1764000000000000000000000000000000000000000000000000000000005f5260045ffd5b60808336031261071857604051906107d38261103a565b73ffffffffffffffffffffffffffffffffffffffff843581811681036107185783526020850135600281101561071857602084015260408501359081168103610718576040830152606090818501359283151584036107185760809360209382015281520192019161019a565b34610718575f6003193601126107185760206040515f8152f35b34610718575f60031936011261071857602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610718575f6003193601126107185760206108b46114a1565b63ffffffff60405191168152f35b34610718575f6003193601126107185760206108dc6113f0565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b34610718575f60031936011261071857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610718575f600319360112610718576020600154604051908152f35b34610718575f60031936011261071857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610718576020600319360112610718576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610718576109ff60209161137a565b604051908152f35b34610718575f60031936011261071857602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610718575f60031936011261071857602060ff600254166040519015158152f35b34610718575f60031936011261071857604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610add57610ad986610acd818a0382611056565b604051918291826110bf565b0390f35b845473ffffffffffffffffffffffffffffffffffffffff168752958601959383019390830190610ab6565b346107185760206003193601126107185760043573ffffffffffffffffffffffffffffffffffffffff8116809103610718575f525f602052602060ff60405f2054166040519015158152f35b34610718575f600319360112610718576040516004545f82610b758361116a565b91828252602093600190856001821691825f14610c12575050600114610bb7575b50610ba392500383611056565b610ad9604051928284938452830190611015565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b858310610bfa575050610ba3935082010185610b96565b80548389018501528794508693909201918101610be3565b60ff191685820152610ba395151560051b8501019250879150610b969050565b34610718576040600319360112610718576004356024803560019260015480821015610d685780610c63848461130b565b11610d27575b50610c738261112e565b92610c816040519485611056565b828452610c8d8361112e565b91601f19602093013660208701375f5b848110610cb25760405180610ad988826110bf565b610cc4610cbf828461130b565b611318565b9054908751831015610cfb5760031b1c73ffffffffffffffffffffffffffffffffffffffff16600582901b87018501528601610c9d565b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260326004525ffd5b908092508103908111610d3b579084610c69565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b346107185760406003193601126107185760043567ffffffffffffffff81116107185736602382011215610718576055600b610dd86020933690602481600401359101611079565b604051610e08818680820194610ded8661127f565b90805192839101825e015f815203601f198101835282611056565b519020610e1660243561150c565b604051916040830152848201523081520160ff81532073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b34610718575f60031936011261071857610ad9610e656111bb565b604051918291602083526020830190611015565b34610718575f600319360112610718577fffffffff00000000000000000000000000000000000000000000000000000000610eb4911661137a565b602073ffffffffffffffffffffffffffffffffffffffff610ed36113f0565b16916064604051809481937f9be2a88400000000000000000000000000000000000000000000000000000000835260048301523360248301523060448301525afa908115610663575f91610f8b575b5015610f6357610f306114d8565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d602011610fbe575b81610fa660209383611056565b81010312610718575180151581036107185781610f22565b3d9150610f99565b34610718575f600319360112610718576080610fe0611146565b61101360405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6080810190811067ffffffffffffffff82111761063657604052565b90601f601f19910116810190811067ffffffffffffffff82111761063657604052565b92919267ffffffffffffffff821161063657604051916110a36020601f19601f8401160184611056565b829481845281830111610718578281602093845f960137010152565b60209060206040818301928281528551809452019301915f5b8281106110e6575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016110d8565b9080601f830112156107185781602061112b93359101611079565b90565b67ffffffffffffffff81116106365760051b60200190565b604051906111538261103a565b5f6060838281528260208201528260408201520152565b90600182811c921680156111b1575b602083101461118457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611179565b604051905f82600554916111ce8361116a565b8083529260209060019081811690811561125a57506001146111fb575b50506111f992500383611056565b565b91509260055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0935f925b82841061124257506111f99450505081016020015f806111eb565b85548885018301529485019487945092810192611227565b9050602093506111f995925060ff1991501682840152151560051b8201015f806111eb565b6003545f929161128e8261116a565b916001908181169081156112f857506001146112a957505050565b909192935060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8483106112e5575050500190565b81816020925485870152019201916112d7565b60ff191683525050811515909102019150565b91908201809211610d3b57565b60015481101561134d5760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176106365760405251902090565b6040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610663575f9261146857505090565b9091506020813d602011611499575b8161148460209383611056565b81010312610718575190811681036107185790565b3d9150611477565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156114d35790565b505f90565b60ff600254166114e457565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffd5b604051602081019133835246604083015260608201526060815261152f8161103a565b5190209056fea26469706673582212203cd0988e2e830b94536e6df4c35ff8f26efc023966b61f142a1f353476f2b54b64736f6c634300081b00336101e080604052346107de576143cf803803809161001d82856107e2565b833981016040828203126107de5781516001600160401b0381116107de5782019060809283838303126107de57604051918483016001600160401b038111848210176106035760405283516001600160401b0381116107de5781610082918601610805565b835260208401516001600160401b0381116107de57816100a3918601610805565b60208401908152604080860151908501526060850151909490916001600160401b0383116107de576020926100d89201610805565b60608401819052910151916001600160a01b03831683036107de578051935160408051959086016001600160401b03811187821017610603576040526001865260208601603160f81b815261012c8261085a565b61012052610139876109dd565b6101405281516020830120968760e05251902095610100968088524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84526040830152606082015246898201523060a082015260a0815260c0810181811060018060401b038211176106035760405251902087523060c0526101608590528051906001600160401b0382116106035760035490600182811c921680156107d4575b60208310146105e55781601f849311610779575b50602090601f8311600114610704575f926106f9575b50508160011b915f199060031b1c1916176003555b8051906001600160401b0382116106035760045490600182811c921680156106ef575b60208310146105e55781601f849311610697575b50602090601f8311600114610622575f92610617575b50508160011b915f199060031b1c1916176004555b610180903382526101a0928484526101c0948552805160018060401b03811161060357600591825490600182811c921680156105f9575b60208310146105e55781601f849311610597575b50602090601f8311600114610533575f92610528575b50508160011b915f199060031b1c19161790555b60016040820151106105195761138860408201511161050a57604001516103e8908181029181830414901517156104f6576001600160401b0381116104df57600654906001600160401b03811663ffffffff42116104c7574280891b63ffffffff60801b16604093841b6fffffffffffffffff0000000000000000166001600160c01b03199095168317949094179390931760a09390931b63ffffffff60a01b1692909217600655519081527fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a023390602090a16040519361387b9586610b14873951856132b0015260a0518561337c015260c05185613281015260e051856132ff015251846133250152610120518461146d015261014051846114960152610160518481816102d90152818161045b0152818161068f015281816109090152818161098401528181610a0301528181610afc01528181611187015281816113e1015281816117f30152818161193e01528181611dd4015281816120bc0152818161230c0152818161275e015281816129ba0152612f9b01525183612c63015251826130610152518181816107e001528181610d5b01528181610e1f0152818161108201526115ab0152f35b6306dfcc6560e41b5f5260206004524260245260445ffd5b6306dfcc6560e41b5f52604060045260245260445ffd5b634e487b7160e01b5f52601160045260245ffd5b6309b80d3960e41b5f5260045ffd5b63ab92332360e01b5f5260045ffd5b015190505f806102e9565b5f858152602081209350601f198516905b81811061057f5750908460019594939210610567575b505050811b0190556102fd565b01515f1960f88460031b161c191690555f808061055a565b92936020600181928786015181550195019301610544565b909150835f5260205f20601f8401851c810191602085106105db575b90601f8594939201861c01905b8181106105cd57506102d3565b5f81558493506001016105c0565b90915081906105b3565b634e487b7160e01b5f52602260045260245ffd5b91607f16916102bf565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610273565b60045f90815293505f5160206143af5f395f51905f5291905b601f198416851061067c576001945083601f19811610610664575b505050811b01600455610288565b01515f1960f88460031b161c191690555f8080610656565b8181015183556020948501946001909301929091019061063b565b60045f529091505f5160206143af5f395f51905f52601f840160051c8101602085106106e8575b90849392915b601f830160051c820181106106da57505061025d565b5f81558594506001016106c4565b50806106be565b91607f1691610249565b015190505f80610211565b60035f90815293505f51602061438f5f395f51905f5291905b601f198416851061075e576001945083601f19811610610746575b505050811b01600355610226565b01515f1960f88460031b161c191690555f8080610738565b8181015183556020948501946001909301929091019061071d565b60035f529091505f51602061438f5f395f51905f52601f840160051c810191602085106107ca575b90601f859493920160051c01905b8181106107bc57506101fb565b5f81558493506001016107af565b90915081906107a1565b91607f16916101e7565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761060357604052565b81601f820112156107de578051906001600160401b0382116106035760405192610839601f8401601f1916602001856107e2565b828452602083830101116107de57815f9260208093018386015e8301015290565b8051602090818110156108d05750601f825111610892578082519201519080831061088457501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610603575f54926001938481811c911680156109d3575b838210146105e557601f81116109a0575b5081601f841160011461093e57509282939183925f94610933575b50501b915f199060031b1c1916175f5560ff90565b015192505f8061091e565b919083601f1981165f8052845f20945f905b88838310610986575050501061096e575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610961565b858701518855909601959485019487935090810190610950565b5f805284601f845f20920160051c820191601f860160051c015b8281106109c8575050610903565b5f81550185906109ba565b90607f16906108f2565b805160209081811015610a075750601f825111610892578082519201519080831061088457501790565b9192916001600160401b0381116106035760019182548381811c91168015610b09575b828210146105e557601f8111610ad6575b5080601f8311600114610a765750819293945f92610a6b575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610a54565b90601f19831695845f52825f20925f905b888210610abf5750508385969710610aa7575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610a9a565b808785968294968601518155019501930190610a87565b835f5283601f835f20920160051c820191601f850160051c015b828110610afe575050610a3b565b5f8155018490610af0565b90607f1690610a2a56fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146123ec5750806306fdde0314612343578063095ea7b31461227557806316a0b3e0146121c357806318160ddd146121a957806321da5e191461212a57806323b872dd1461204b57806323de665114611fea578063273c1adf14611fc85780632f1a0bc914611c2557806330adf81f14611bea578063313ce56714611bce5780633644e51514611bb357806354fd4d5014611b095780635687f2b814611aa65780635c1e6259146118f1578063627cdcb9146118c8578063654cf15d146118a5578063679aefce1461188a5780636daccffa1461185857806370a082311461178457806372c98186146116565780637ecebe001461161157806381fa807c1461154e57806384b0196e14611457578063851c1bb3146114055780638d928af8146113b457806395d89b41146112b7578063984de9e8146111f8578063a9059cbb146110ef578063aa6ca80814611029578063abb1dc4414610dc4578063b156aa0a14610d02578063b677fa5614610cdf578063cbd4e28014610839578063ce20ece714610819578063d335b0cf14610785578063d505accf146104d8578063dd62ed3e146103dc5763eb0f24d6146101d6575f80fd5b346103a257806003193601126103a2576101ee612fef565b6101f6612d07565b156103b457807fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233602061022985946131e4565b60065467ffffffffffffffff82169173ffffffff0000000000000000000000000000000061025642613229565b916fffffffffffffffff0000000000000000857fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffff00000000000000000000000000000000000000008660a01b169616179160401b16179160801b161717600655604051908152a173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040519160208301526020825261030f8261250b565b803b156103b05761038183929183926040519485809481937fc80882470000000000000000000000000000000000000000000000000000000083527f416d7055706461746553746f70706564000000000000000000000000000000006004840152604060248401526044830190612454565b03925af180156103a5576103925750f35b61039b906124db565b6103a25780f35b80fd5b6040513d84823e3d90fd5b5050fd5b6004827f4673a675000000000000000000000000000000000000000000000000000000008152fd5b50346103a25760406003193601126103a2576103f6612479565b90602061040161249c565b92606473ffffffffffffffffffffffffffffffffffffffff91828060405197889586947f927da1050000000000000000000000000000000000000000000000000000000086523060048701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104cc5790610495575b602090604051908152f35b506020813d6020116104c4575b816104af60209383612527565b810103126104c0576020905161048a565b5f80fd5b3d91506104a2565b604051903d90823e3d90fd5b50346103a25760e06003193601126103a2576104f2612479565b6104fa61249c565b90604435916064359160843560ff8116810361078157834211610755576105488273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b9060405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff9687861694856040850152888816606085015289608085015260a084015260c083015260c0825260e082019082821067ffffffffffffffff83111761072857879361062b93610622936040525190206105e061326a565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a435922061370b565b9092919261379a565b168181036106fa576040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015285166024820152604481018790528790602081606481857f00000000000000000000000000000000000000000000000000000000000000008c165af180156103a5576106c0575080f35b6020813d6020116106f2575b816106d960209383612527565b810103126106ee576106ea90612708565b5080f35b5080fd5b3d91506106cc565b7f4b800e46000000000000000000000000000000000000000000000000000000008752600452602452604485fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b602486857f62791302000000000000000000000000000000000000000000000000000000008252600452fd5b8580fd5b50346103a257806003193601126103a257604051907fb45090f900000000000000000000000000000000000000000000000000000000825230600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104cc579061049557602090604051908152f35b50346103a257806003193601126103a257602060405164e8d4a510008152f35b50346103a257806003193601126103a2576040516101c0810181811067ffffffffffffffff8211176107285760405260608152606060208201528160408201528160608201528160808201528160a08201528160c08201528160e08201528161010082015281610120820152816101408201528161016082015281610180820152816101a08201526040517f535cfd8a000000000000000000000000000000000000000000000000000000008152306004820152828160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c578391610cbd575b5081526040517f7e361bde000000000000000000000000000000000000000000000000000000008152306004820152828160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c578391610c99575b5060208201526040517fb45090f900000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c578391610c67575b506040820152610a41612715565b6060820152610a4e612971565b6080820152610a5b612d07565b151561014083015260a082015263ffffffff6060610a776127c0565b67ffffffffffffffff81511660c085015267ffffffffffffffff60208201511660e0850152826040820151166101008501520151166101208201526040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a08160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c5c57610120929391610c2b575b5060e081015115156101608401526101008101511515610180840152015115156101a08201526040518091602082526101a0610b93610b7d83516101c060208701526101e0860190612604565b6020840151601f19868303016040870152612604565b916040810151606085015260608101516080850152608081015160a085015260a081015160c085015260c081015160e085015260e081015161010085015263ffffffff6101008201511661012085015263ffffffff6101208201511661014085015261014081015115156101608501526101608101511515610180850152610180810151151582850152015115156101c08301520390f35b610c4f91506101a03d6101a011610c55575b610c478183612527565b810190612b1d565b5f610b30565b503d610c3d565b6040513d85823e3d90fd5b90506020813d602011610c91575b81610c8260209383612527565b810103126104c057515f610a33565b3d9150610c75565b610cb591503d8085833e610cad8183612527565b81019061292d565b90505f6109b4565b610cd991503d8085833e610cd18183612527565b810190612caa565b5f610939565b50346103a257806003193601126103a2576020604051670853a0d2313c00008152f35b50346103a257806003193601126103a2576040517f535cfd8a000000000000000000000000000000000000000000000000000000008152306004820152818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103a55782610da59392610da9575b5050604051918291602083526020830190612604565b0390f35b610dbd92503d8091833e610cd18183612527565b5f80610d8f565b50346103a257806003193601126103a25773ffffffffffffffffffffffffffffffffffffffff906040517f67e0e0760000000000000000000000000000000000000000000000000000000081523060048201528181602481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103a55782809481928294610eec575b50610e6a60405195608087526080870190612637565b9060209086830382880152818089519485815201980193905b838210610eb0578780610da589610ea28d8b8582036040870152612604565b908382036060850152612604565b909192939783606060019260408c518051610eca81612680565b8352808501518716858401520151151560408201520199019493920190610e83565b955092509250503d8083853e610f028185612527565b83016080848203126110255783519267ffffffffffffffff938481116106ee5782610f2e918701612825565b9160209485870151818111610fc657870182601f82011215610fc657805190610f568261254a565b97610f64604051998a612527565b82895280890181606080950284010192868411611021578201905b838210610fca5750505050506040870151818111610fc65782610fa39189016128cc565b966060810151918211610fc657610fbb9291016128cc565b91939491925f610e54565b8380fd5b848288031261102157604051610fdf816124ef565b8251600281101561101d578152838301518b8116810361101d57848201528591849161100d60408601612708565b6040820152815201910190610f7f565b8980fd5b8780fd5b8280fd5b50346103a257806003193601126103a2576040517fca4f2803000000000000000000000000000000000000000000000000000000008152306004820152818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103a55782610da593926110cc575b5050604051918291602083526020830190612637565b6110e892503d8091833e6110e08183612527565b8101906128a3565b5f806110b6565b50346103a25760406003193601126103a25761116d602061110e612479565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03818573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156103a5576111bf575b602060405160018152f35b6020813d6020116111f0575b816111d860209383612527565b810103126106ee576111ea9150612708565b5f6111b4565b3d91506111cb565b50346103a25760406003193601126103a25760043567ffffffffffffffff81116106ee5761122a903690600401612562565b6024359160028310156103a2575061124a90611244612d07565b506133a2565b908161125c575b602082604051908152f35b80611268600192612680565b03611277576020905b90611251565b6001810180911161128a57602090611271565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50346103a257806003193601126103a2576040516004545f826112d9836126b7565b91828252602093600190856001821691825f1461137657505060011461131b575b5061130792500383612527565b610da5604051928284938452830190612454565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b85831061135e5750506113079350820101856112fa565b80548389018501528794508693909201918101611347565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261130795151560051b85010192508791506112fa9050565b50346103a257806003193601126103a257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103a25760206003193601126103a257600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036103a257602061144f83612c38565b604051908152f35b50346103a257806003193601126103a2576114917f000000000000000000000000000000000000000000000000000000000000000061351b565b6114ba7f000000000000000000000000000000000000000000000000000000000000000061364d565b60405192602084019380851067ffffffffffffffff8611176107285761152f610da593611521966040528383526040519687967f0f00000000000000000000000000000000000000000000000000000000000000885260e0602089015260e0880190612454565b908682036040880152612454565b9146606086015230608086015260a085015283820360c0850152612604565b50346103a257806003193601126103a2576040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c5c57604093926115f4575b505060608282015191015182519182526020820152f35b61160a9250803d10610c5557610c478183612527565b5f806115dd565b50346103a25760206003193601126103a257604060209173ffffffffffffffffffffffffffffffffffffffff611645612479565b168152600283522054604051908152f35b50346103a25760206003198181360112611025576004359067ffffffffffffffff908183116117805760e0908336030112610fc6576040519160e083018381108382111761072857604052806004013560028110156107815783526024810135848401526044810135828111610781576116d69060043691840101612562565b6040840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036104c05760a084015260c48101359082821161078157019036602383011215611780576004820135908111610728576040519161175385601f19601f8501160184612527565b8183523660248383010111610781579381819692602461144f9701838601378301015260c08201526129ed565b8480fd5b50346103a257602090816003193601126103a2576044826117a3612479565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa9182156104cc579161182b575b50604051908152f35b90508181813d8311611851575b6118428183612527565b810103126104c057515f611822565b503d611838565b50346103a257806003193601126103a2576060611873612d07565b604051918252151560208201526103e86040820152f35b50346103a257806003193601126103a257602061144f612971565b50346103a257806003193601126103a257602060405167016345785d8a00008152f35b50346103a257806003193601126103a257335f9081526002602052604090208054600101905580f35b50346103a257806003193601126103a2576040519061190f826124ef565b6060825260209182810160608152604082019183835273ffffffffffffffffffffffffffffffffffffffff94857f0000000000000000000000000000000000000000000000000000000000000000166040517fca4f28030000000000000000000000000000000000000000000000000000000081523060048201528681602481855afa908115611a9b579187916024938391611a81575b508552604051928380927f7e361bde0000000000000000000000000000000000000000000000000000000082523060048301525afa908115611a76578691611a5d575b508395929195526103e88452604051948086526080860191519660608288015287518093528160a08801980193905b838210611a4457878088611a398c8a51601f19858303016040860152612604565b905160608301520390f35b8451811689529782019793820193600190910190611a18565b611a7191503d8088833e610cad8183612527565b6119e9565b6040513d88823e3d90fd5b611a9591503d8085833e6110e08183612527565b5f6119a6565b6040513d89823e3d90fd5b50346103a25760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925611ad8366125c2565b92919390611ae4612f84565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a380f35b50346103a257806003193601126103a2576040516005545f82611b2b836126b7565b91828252602093600190856001821691825f14611376575050600114611b58575061130792500383612527565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b858310611b9b5750506113079350820101856112fa565b80548389018501528794508693909201918101611b84565b50346103a257806003193601126103a257602061144f61326a565b50346103a257806003193601126103a257602060405160128152f35b50346103a257806003193601126103a25760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346104c05760406003193601126104c057600435602435611c45612fef565b60018210611fa0576113888211611f7857611c604282612805565b62015180808210611f5057611c73612d07565b929092611f28576103e89485810295818704148115171561128a5783861115611f02576305265c000291858304148515171561128a57600291611cb9611cbf9285612812565b90613187565b11611eda57611cd0611cd6916131e4565b926131e4565b611ce8611ce242613229565b92613229565b67ffffffffffffffff809416916006548582169473ffffffff0000000000000000000000000000000063ffffffff936fffffffffffffffff0000000000000000877fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffff0000000000000000000000000000000000000000888716988a169960a01b169616179160401b16179160801b1617176006557f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf26080604051858152866020820152836040820152846060820152a173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016936040519360208501526040840152606083015260808201526080815260a0810192818410908411176107285782604052813b156104c0575f9183837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6082947fc80882470000000000000000000000000000000000000000000000000000000084527f416d70557064617465537461727465640000000000000000000000000000000060a4820152604060c4820152611eb060e4820182612454565b0301925af18015611ecf57611ec3575080f35b611ecd91506124db565b005b6040513d5f823e3d90fd5b7f1c708b92000000000000000000000000000000000000000000000000000000005f5260045ffd5b5081830291838304148315171561128a57600291611cb9611f239287612812565b611cbf565b7f2f301e7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd6b022a000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f9b80d390000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fab923323000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104c0575f6003193601126104c0576020604051674563918244f400008152f35b346104c05760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61201b366125c2565b92919390612027612f84565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a3005b346104c0576084602061205d366125c2565b6040517f15dacbea00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff93841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af18015611ecf576120f357602060405160018152f35b6020813d602011612122575b8161210c60209383612527565b810103126104c05761211d90612708565b6111b4565b3d91506120ff565b346104c0575f6003193601126104c0575f6060604051612149816124bf565b828152826020820152826040820152015260a06121646127c0565b6040519067ffffffffffffffff8082511683526020820151166020830152606060408201519163ffffffff809316604085015201511660608201526103e86080820152f35b346104c0575f6003193601126104c057602061144f612715565b346104c05760606003193601126104c05760043567ffffffffffffffff81116104c0576121f4903690600401612562565b6121fc612d07565b509061220a81611244612d07565b80612263575b9060209261222461144f9360443590612812565b91602435926001670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150291612dcf565b906001820180921161128a5790612210565b346104c05760406003193601126104c0576122f26020612293612479565b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015611ecf576120f357602060405160018152f35b346104c0575f6003193601126104c0576040516003545f82612364836126b7565b91828252602093600190856001821691825f14611376575050600114612391575061130792500383612527565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8583106123d45750506113079350820101856112fa565b805483890185015287945086939092019181016123bd565b346104c05760206003193601126104c057600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036104c0577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036104c057565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036104c057565b6080810190811067ffffffffffffffff82111761072857604052565b67ffffffffffffffff811161072857604052565b6060810190811067ffffffffffffffff82111761072857604052565b6040810190811067ffffffffffffffff82111761072857604052565b90601f601f19910116810190811067ffffffffffffffff82111761072857604052565b67ffffffffffffffff81116107285760051b60200190565b9080601f830112156104c057602090823561257c8161254a565b9361258a6040519586612527565b81855260208086019260051b8201019283116104c057602001905b8282106125b3575050505090565b813581529083019083016125a5565b60031960609101126104c05773ffffffffffffffffffffffffffffffffffffffff9060043582811681036104c0579160243590811681036104c0579060443590565b9081518082526020808093019301915f5b828110612623575050505090565b835185529381019392810192600101612615565b9081518082526020808093019301915f5b828110612656575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101612648565b6002111561268a57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90600182811c921680156126fe575b60208310146126d157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916126c6565b519081151582036104c057565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611ecf575f91612791575090565b90506020813d6020116127b8575b816127ac60209383612527565b810103126104c0575190565b3d915061279f565b604051906127cd826124bf565b81606060065467ffffffffffffffff80821684528160401c16602084015263ffffffff90818160801c16604085015260a01c16910152565b9190820391821161128a57565b8181029291811591840414171561128a57565b9080601f830112156104c0578151906020916128408161254a565b9361284e6040519586612527565b81855260208086019260051b8201019283116104c057602001905b828210612877575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036104c0578152908301908301612869565b906020828203126104c057815167ffffffffffffffff81116104c0576128c99201612825565b90565b9080601f830112156104c0578151906020916128e78161254a565b936128f56040519586612527565b81855260208086019260051b8201019283116104c057602001905b82821061291e575050505090565b81518152908301908301612910565b9190916040818403126104c05780519267ffffffffffffffff938481116104c0578161295a9184016128cc565b9360208301519081116104c0576128c992016128cc565b6040517f4f037ee700000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611ecf575f91612791575090565b60408101906129ff8251611244612d07565b9081612b18575b612a0e612d07565b50918151612a1b81612680565b612a2481612680565b612abe57612a8b91602091612a85612a71612a91975193606081015193856080830151978893015199612a618b612a5b8985612dbb565b51612c9d565b612a6b8884612dbb565b52612dcf565b95612a7c8385612dbb565b51039183612dbb565b52612dbb565b51612805565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161128a5790565b612b0391612b0a945190612a85612aef60608301518095856020608087015196015199612a618b612a8b8985612dbb565b95612afa8385612dbb565b51019183612dbb565b5190612805565b6001810180911161128a5790565b612a06565b6101a0918190038281126104c05760405192610140928385019285841067ffffffffffffffff8511176107285760809084604052126104c057612b5f836124bf565b612b6881612708565b8352612b7660208201612708565b926101609384870152612b8b60408301612708565b926101809384880152612ba060608401612708565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036104c05760808601526101008082015163ffffffff811681036104c057612c3194612c279160a0890152612c1b61012097612c0f898701612708565b60c08b01528501612708565b60e08901528301612708565b9086015201612708565b9082015290565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152612c97816124ef565b51902090565b9190820180921161128a57565b906020828203126104c057815167ffffffffffffffff81116104c0576128c992016128cc565b8115612cda570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b612d0f6127c0565b67ffffffffffffffff80825116906020830151169163ffffffff60608160408401511692015116908142105f14612d79576001938380821115612d615782612d5d9403924203910302612cd0565b0191565b5081612d74930391420390840302612cd0565b900391565b5050505f9091565b805115612d8e5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051821015612d8e5760209160051b010190565b92919092612ddf84518092612812565b90612de985612d81565b51612dfd82612df788612d81565b51612812565b916001905b8588828410612f4257612e1e949350612b039250889150612dbb565b90612e298480612812565b956103e8958688029088820488148915171561128a57612e53612e5992611cb9612e609689612812565b92612dbb565b5190612812565b9380840290848204148415171561128a57612e8c612e9292612e86612e9c958894612cd0565b90612c9d565b95612c9d565b611cb98584612c9d565b5f5b60ff8110612ece577fdcbda05c000000000000000000000000000000000000000000000000000000005f5260045ffd5b81612ee285612edd8380612812565b612c9d565b908060011b908082046002149015171561128a57600191611cb986612f0a8a612f0f95612c9d565b612805565b928381811115612f3257031115612f2a576001905b01612e9e565b509250505090565b90031115612f2a57600190612f24565b612f7c91612f6584612f60879899612e5960019899612f6a97612dbb565b612812565b612cd0565b94612f75858b612dbb565b5190612c9d565b920190612e02565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303612fc357565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b61301b7fffffffff000000000000000000000000000000000000000000000000000000005f3516612c38565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115611ecf5784925f9261314b575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215611ecf575f92613115575b5050156130ed57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311613144575b61312c8183612527565b810103126104c05761313d90612708565b5f806130e4565b503d613122565b8092508391933d8311613180575b6131638183612527565b810103126104c057519082821682036104c0578391906064613093565b503d613159565b9080156131bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201046001019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff908181116131f9571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b63ffffffff9081811161323a571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52602060045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480613379575b156132d2577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176107285760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146132a9565b90915f9183515f5b818110613503575083156134fa5792906133c5848392612812565b915f907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18840196848811916001986001890194858a11965b60ff821061342d577f010ca320000000000000000000000000000000000000000000000000000000005f5260045ffd5b805f5b8d8d82106134cc575050908187866134648f95612f608f9897612e86839a61345c6103e8978892612812565b049189612812565b9161128a576134748c9388612812565b049161128a5761348d8f9392612e86613493948d612812565b90612cd0565b9283818111156134bd570311156134ae578b905b01906133fd565b50985050505050505050915090565b900311156134ae578b906134a7565b909691939c926134df856134ed92612812565b61348d85612df78b87612dbb565b96019b929095919b613430565b50509150505f90565b93613514600191612f758789612dbb565b94016133aa565b60ff811461356f5760ff811690601f8211613547576040519161353d8361250b565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491613581836126b7565b8083529260209060019081811690811561360a57506001146135ac575b50506128c992500382612527565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b8284106135f257506128c99450505081016020015f8061359e565b855487850183015294850194869450928101926135d7565b9050602093506128c99592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f8061359e565b60ff811461366f5760ff811690601f8211613547576040519161353d8361250b565b506040515f81600191600154613684816126b7565b808452936020916001811690811561360a57506001146136ac5750506128c992500382612527565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b8284106136f357506128c99450505081016020015f8061359e565b855487850183015294850194869450928101926136d8565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161378f579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611ecf575f5173ffffffffffffffffffffffffffffffffffffffff81161561378557905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561268a57806137ac575050565b600181036137dc577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361381057507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60031461381a5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea2646970667358221220bb8b077bad55a0e0b58802a7624b301faad8f0b39b2066fffe91ed5854caf21a64736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b610140346100ee57601f611e2f38819003918201601f19168301916001600160401b038311848410176100f2578084926060946040528339810103126100ee5780516001600160a01b03811681036100ee576040602083015192015190806080523060a05260c05261007081610106565b61007982610106565b6101209081526101009182523360e05260405190611d0992836101268439608051838181611519015261196d015260a051836113b0015260c05183818161098b015261149a015260e05183818161075e0152610cdd015251828181610b1d0152610d0f01525181818161093c0152610d390152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b670de0b6b3a76400001061011657565b631f3b85d360e01b5f5260045ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630b89f1821461017457806318b6eb551461016f5780631a4a64be1461016a5780631c149e2814610165578063249d6761146101605780632754888d1461015b57806338be241d1461015657806345347f9c1461015157806345421ec71461014c5780634e493cfd146101475780635211fa771461014257806359f004661461013d578063851c1bb3146101385780638bc694ad146101335780638d928af81461012e578063976907cc14610129578063a0e8f5ac14610124578063aaabadc51461011f578063ba5f9f401461011a578063c17ef2cc14610115578063d77153a7146101105763e23816021461010b575f80fd5b610c3d565b610bc1565b610b06565b610ab7565b610a7f565b610a50565b6109af565b61095f565b610925565b6108dd565b6108a2565b61085b565b61081e565b610791565b610732565b6106e7565b610636565b6105c3565b610520565b610409565b6103c9565b6102ab565b73ffffffffffffffffffffffffffffffffffffffff81160361019757565b5f80fd5b600435906101a882610179565b565b602435906101a882610179565b35906101a882610179565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761020b57604052565b6101c2565b610140810190811067ffffffffffffffff82111761020b57604052565b90601f601f19910116810190811067ffffffffffffffff82111761020b57604052565b67ffffffffffffffff811161020b5760051b60200190565b6002111561019757565b8015150361019757565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c608091011261019757606490565b346101975760e0600319360112610197576004356102c881610179565b602435906102d582610179565b60443567ffffffffffffffff811161019757366023820112156101975780600401359061030182610250565b604092610311604051928361022d565b808252602460208093019160071b8401019236841161019757602401905b8382106103635761035f61034d88886103473661027c565b50610c8f565b60405190151581529081906020820190565b0390f35b6080823603126101975782608091865161037c816101ef565b843561038781610179565b81528285013561039681610268565b83820152878501356103a781610179565b88820152606080860135906103bb82610272565b82015281520191019061032f565b3461019757600319602081360112610197576004359067ffffffffffffffff821161019757610180913603011261019757604080515f81525f6020820152f35b346101975760206003193601126101975773ffffffffffffffffffffffffffffffffffffffff60043561043b81610179565b165f525f602052602067ffffffffffffffff60405f205460401c16604051908152f35b929161046982610250565b91610477604051938461022d565b829481845260208094019160051b810192831161019757905b82821061049d5750505050565b81358152908301908301610490565b9080601f83011215610197578160206104c79335910161045e565b90565b81601f820112156101975780359067ffffffffffffffff821161020b57604051926104ff6020601f19601f860116018561022d565b8284526020838301011161019757815f926020809301838601378301015290565b346101975760406003193601126101975767ffffffffffffffff600435818111610197576105529036906004016104ac565b506024359081116101975761056b9036906004016104ca565b5060206040515f8152f35b908160e09103126101975790565b6060600319820112610197576004359067ffffffffffffffff8211610197576105af91600401610576565b906024356105bc81610179565b9060443590565b346101975760206105dc6105d636610584565b91611139565b604051908152f35b60443590600482101561019757565b906040820190151582526020606081936040838201528551809452019301915f5b828110610622575050505090565b835185529381019392810192600101610614565b34610197576101006003193601126101975761065061019b565b506106596101aa565b6106616105e4565b67ffffffffffffffff9190608435838111610197576106849036906004016104ac565b60a4358481116101975761069c9036906004016104ac565b9160c435858111610197576106b59036906004016104ac565b9360e435958611610197576106d16106d79636906004016104ca565b506112d1565b9061035f604051928392836105f3565b346101975760606003193601126101975767ffffffffffffffff600435818111610197576107199036906004016104ac565b506044359081116101975761056b9036906004016104ca565b34610197575f60031936011261019757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60443590600582101561019757565b346101975760e0600319360112610197576107ad600435610179565b6107b56101aa565b506107be610782565b5067ffffffffffffffff606435818111610197576107e09036906004016104ac565b5060a435818111610197576107f99036906004016104ac565b5060c435908111610197576108129036906004016104ca565b506040515f8152602090f35b346101975760406003193601126101975761085960043561083e81610179565b6024359061084b8261188a565b61085481611921565b61156d565b005b346101975760406003193601126101975760043567ffffffffffffffff81116101975761088c903690600401610576565b50610898602435610179565b60206040515f8152f35b34610197576040600319360112610197576108596004356108c281610179565b602435906108cf8261188a565b6108d881611921565b611605565b34610197576020600319360112610197576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610197576105dc602091611385565b34610197575f6003193601126101975760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610197575f60031936011261019757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461019757610100600319360112610197576109c961019b565b506109d26101aa565b6109da610782565b67ffffffffffffffff9190606435838111610197576109fd9036906004016104ac565b60843584811161019757610a159036906004016104ac565b9160c43585811161019757610a2e9036906004016104ac565b9360e43595861161019757610a4a6106d79636906004016104ca565b506113fb565b34610197576040610a71610a6336610584565b91610a6c611502565b611139565b815190600182526020820152f35b34610197575f600319360112610197576020610a99611457565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101975760e060031936011261019757610ad3600435610179565b610adb6101aa565b50610ae46105e4565b5067ffffffffffffffff608435818111610197576107e09036906004016104ac565b34610197575f6003193601126101975760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b815115158152610140810192916101a8919060208181015115159083015260408181015115159083015260608181015115159083015260808181015115159083015260a08181015115159083015260c08181015115159083015260e08181015115159083015261010081810151151590830152610120908101511515910152565b34610197575f6003193601126101975761035f604051610be081610210565b5f81525f60208201525f60408201525f60808201525f60a08201525f60c0820152610c3160e082015f81525f610100840152610c2b6101208401915f83526001606086015260019052565b60019052565b60405191829182610b40565b346101975760206003193601126101975773ffffffffffffffffffffffffffffffffffffffff600435610c6f81610179565b165f525f602052602067ffffffffffffffff60405f205416604051908152f35b906104c791610c9c611502565b610cc1565b9081602091031261019757516104c781610272565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff80911691817f000000000000000000000000000000000000000000000000000000000000000016831480610d8f575b15610d8857610d347f00000000000000000000000000000000000000000000000000000000000000008261156d565b610d5e7f000000000000000000000000000000000000000000000000000000000000000082611605565b167ffd42028b1ab0233596a5bfda7bb185da4a89e41288da447e5135765d4b50d46b5f80a3600190565b5050505f90565b506040517f6634b75300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602081602481875afa908115610e1e575f91610def575b50610d05565b610e11915060203d602011610e17575b610e09818361022d565b810190610ca1565b5f610de9565b503d610dff565b610cb6565b90816020910312610197575190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610e6957565b610e32565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019757016020813591019167ffffffffffffffff8211610197578160051b3603831361019757565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116101975760209260051b809284830137010190565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019757016020813591019167ffffffffffffffff821161019757813603831361019757565b601f8260209493601f1993818652868601375f8582860101520116010190565b9060208252803591610f7f83610268565b6002831015610e69576104c79260208201526020820135604082015261100b610fc0610fae6040850185610e6e565b60e06060860152610100850191610ec1565b9260608101356080840152608081013560a0840152611001610fe460a083016101b7565b73ffffffffffffffffffffffffffffffffffffffff1660c0850152565b60c0810190610efe565b9160e0601f1982860301910152610f4e565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610197570180359067ffffffffffffffff821161019757602001918160051b3603831361019757565b9061107b82610250565b611088604051918261022d565b828152601f196110988294610250565b0190602036910137565b356104c781610268565b80518210156110c05760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190820180921161112757565b6110ed565b9190820391821161112757565b91604051917f72c98186000000000000000000000000000000000000000000000000000000008352602083806111728760048301610f6e565b038173ffffffffffffffffffffffffffffffffffffffff85165afa938415610e1e576104c7946111cb945f9161126f575b506111d7604083016111d26111c26111bb838761101d565b9050611071565b9788928661101d565b369161045e565b611690565b6111e0826110a2565b6111e981610e5f565b61123e57606082013561121461120d6020850135611207848a6110ac565b5161111a565b91876110ac565b5261123861123160808401359261122b84896110ac565b5161112c565b91866110ac565b526116d1565b61125461123160608401359261120784896110ac565b526080810135611238611231602084013561122b84896110ac565b611291915060203d602011611297575b611289818361022d565b810190610e23565b5f6111a3565b503d61127f565b906040516040810167ffffffffffffffff8282108183111761020b57602091604052829454818116845260401c16910152565b939192906004811015610e69571561137a576112ed8251611071565b945f5b835181101561132d5761130381856110ac565b519061130f81876110ac565b51820180921161112757600191611326828a6110ac565b52016112f0565b5093611375935061136961136461136f9297939773ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b61129e565b926117ce565b9161185b565b159190565b939250505060019190565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761020b5760405251902090565b939192906005811015610e69571561137a576114178251611071565b945f5b835181101561132d5761142d81856110ac565b519061143981876110ac565b51820391821161112757600191611450828a6110ac565b520161141a565b6040517faaabadc500000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610e1e575f916114cd575090565b90506020813d6020116114fa575b816114e86020938361022d565b8101031261019757516104c781610179565b3d91506114db565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361154157565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b9060207fcc7585f1dd40a0def67658a884745a1eca326ed902fe084d36e9e040842120329173ffffffffffffffffffffffffffffffffffffffff6115b082611a67565b941693845f525f835260405f20907fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b169116179055604051908152a2565b9060207f3b64afdb883fd4fa590572fb2db0b4d199d8ffb9703f5d32f4d87d1d468c026c9173ffffffffffffffffffffffffffffffffffffffff61164882611a67565b941693845f525f835267ffffffffffffffff60405f2091167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055604051908152a2565b908151815181036116a9576020809160051b930191015e565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b929073ffffffffffffffffffffffffffffffffffffffff165f525f6020526116fb60405f2061129e565b906020820167ffffffffffffffff918483835116106117c5576111cb9561173461172761173a936117ce565b978260408a94019061101d565b8561185b565b156117bd575116828103908111611127576117b1826117ab61179961177761178a6104c7996117846117776117b79a5167ffffffffffffffff1690565b67ffffffffffffffff1690565b9061112c565b935167ffffffffffffffff1690565b670de0b6b3a764000081810391100290565b90611ad9565b90611afd565b9061111a565b505050905090565b50505050905090565b906117d882611b1b565b5f9283805b825186101561182d576117f086846110ac565b51810180911161112757908361180687856110ac565b518181111561182657035b810180911161112757600190950194906117dd565b9003611811565b939450670de0b6b3a7640000808202935081159184041417159050611127578115611856570490565b611aac565b91908115610d885761186c906117ce565b8111918261187957505090565b5167ffffffffffffffff1610919050565b670de0b6b3a76400001061189a57565b7f1f3b85d3000000000000000000000000000000000000000000000000000000005f5260045ffd5b908160609103126101975760405190606082019082821067ffffffffffffffff83111761020b57604091825280516118f981610179565b8352602081015161190981610179565b6020840152015161191981610179565b604082015290565b6040517fe9ddeb2600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152906060816024817f000000000000000000000000000000000000000000000000000000000000000086165afa908115610e1e576119c1916020915f91611a38575b50015173ffffffffffffffffffffffffffffffffffffffff1690565b169081611a2f57611a0091506119f97fffffffff000000000000000000000000000000000000000000000000000000005f3516611385565b3390611b9c565b15611a0757565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b503303611a0757565b611a5a915060603d606011611a60575b611a52818361022d565b8101906118c2565b5f6119a5565b503d611a48565b67ffffffffffffffff90818111611a7c571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b670de0b6b3a764000090818102918183041490151715611127578115611856570490565b81810291818304149015171561112757670de0b6b3a7640000900490565b611b3360016020835160051b84010160208401611c2c565b8051600181811c9116611b8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019080821161112757611b78611b7f92846110ac565b51926110ac565b5181018091116111275760011c90565b611b98916110ac565b5190565b90606460209273ffffffffffffffffffffffffffffffffffffffff948580611bc2611457565b169160405197889687957f9be2a88400000000000000000000000000000000000000000000000000000000875260048701521660248501521660448301525afa908115610e1e575f91611c13575090565b6104c7915060203d602011610e1757610e09818361022d565b9190604083820310611cce5782519282818095602090602085015b868110611c6e575050835182518552825250611c6292611c2c565b60206101a89301611c2c565b9193509150805186600114611caa577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b8211611cbd575b82019186918693611c47565b958201805187518252875295611cb1565b50505056fea2646970667358221220c8f19e352d719ca3b5eda1fd3e5b683efb990ac40f3a22ab9dcf77543fe6059364736f6c634300081b0033",
"deployedBytecode": "0x60806040526004361015610011575f80fd5b5f358060e01c908163193ad50f14610fc65781632f2770db14610e79575080633f819b6f14610e4a57806344f6fec714610d9057806353a72f7e14610c3257806354fd4d5014610b545780636634b75314610b08578063673a2a1f14610a695780636c57f5a914610a4757806378da80cb14610a07578063851c1bb3146109b75780638d928af8146109675780638eec5d701461094a5780638f9a8f3f146108fa578063aaabadc5146108c2578063db035ebc1461089a578063e9d56e191461085a578063ec888061146108405763f9d62108146100ed575f80fd5b34610718576101406003193601126107185760043567ffffffffffffffff81116107185761011f903690600401611110565b60243567ffffffffffffffff81116107185761013f903690600401611110565b906044359167ffffffffffffffff831161071857366023840112156107185782600401359061016d8261112e565b9361017b6040519586611056565b82855260208501906024829460071b8201019036821161071857602401915b8183106107bc5750505060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261071857604051926060840184811067ffffffffffffffff8211176106365760405260843573ffffffffffffffffffffffffffffffffffffffff8116810361071857845260a43573ffffffffffffffffffffffffffffffffffffffff8116810361071857602085015260c4359173ffffffffffffffffffffffffffffffffffffffff831692838103610718576040860152610104359283151584036107185761079457600586511161076c5761027e611146565b9215156060840152604051916102938361103a565b8252602082019081526103a560408301606435815261032d6102b36111bb565b91606086019283526040519485936103166102e2602087019960408b52516080606089015260e0880190611015565b9251927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09384888303016080890152611015565b925160a086015251908483030160c0850152611015565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660408301520361037c601f1991828101855284611056565b6040518094602082019461038f8661127f565b90518092825e015f815203908101845283611056565b6103b16101243561150c565b908251156107445773ffffffffffffffffffffffffffffffffffffffff9251905ff51692831561071c576103e36114d8565b835f525f60205260405f20600160ff19825416179055600154680100000000000000008110156106365780600161041d9201600155611318565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff87831b921b191617905560405194847f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a26104746114a1565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610718579086939492917feeec802f0000000000000000000000000000000000000000000000000000000085526101a48501908760048701526101a06024870152518091526101c4850193905f5b81811061066e575050505f9473ffffffffffffffffffffffffffffffffffffffff604086959463ffffffff6105ca9560e43560448a01521660648801528860848801528281511660a48801528260208201511660c488015201511660e485015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166101048501526101248401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156106635761061c575b602090604051908152f35b67ffffffffffffffff821161063657602091604052610611565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040513d5f823e3d90fd5b918097965094909293945173ffffffffffffffffffffffffffffffffffffffff815116825260208101519060028210156106eb5782606060809260209485600197015273ffffffffffffffffffffffffffffffffffffffff60408201511660408401520151151560608201520197019101918895969493926104fc565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f80fd5b7f741752c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f707bdf58000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f61ee1764000000000000000000000000000000000000000000000000000000005f5260045ffd5b60808336031261071857604051906107d38261103a565b73ffffffffffffffffffffffffffffffffffffffff843581811681036107185783526020850135600281101561071857602084015260408501359081168103610718576040830152606090818501359283151584036107185760809360209382015281520192019161019a565b34610718575f6003193601126107185760206040515f8152f35b34610718575f60031936011261071857602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610718575f6003193601126107185760206108b46114a1565b63ffffffff60405191168152f35b34610718575f6003193601126107185760206108dc6113f0565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b34610718575f60031936011261071857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610718575f600319360112610718576020600154604051908152f35b34610718575f60031936011261071857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610718576020600319360112610718576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610718576109ff60209161137a565b604051908152f35b34610718575f60031936011261071857602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610718575f60031936011261071857602060ff600254166040519015158152f35b34610718575f60031936011261071857604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610add57610ad986610acd818a0382611056565b604051918291826110bf565b0390f35b845473ffffffffffffffffffffffffffffffffffffffff168752958601959383019390830190610ab6565b346107185760206003193601126107185760043573ffffffffffffffffffffffffffffffffffffffff8116809103610718575f525f602052602060ff60405f2054166040519015158152f35b34610718575f600319360112610718576040516004545f82610b758361116a565b91828252602093600190856001821691825f14610c12575050600114610bb7575b50610ba392500383611056565b610ad9604051928284938452830190611015565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b858310610bfa575050610ba3935082010185610b96565b80548389018501528794508693909201918101610be3565b60ff191685820152610ba395151560051b8501019250879150610b969050565b34610718576040600319360112610718576004356024803560019260015480821015610d685780610c63848461130b565b11610d27575b50610c738261112e565b92610c816040519485611056565b828452610c8d8361112e565b91601f19602093013660208701375f5b848110610cb25760405180610ad988826110bf565b610cc4610cbf828461130b565b611318565b9054908751831015610cfb5760031b1c73ffffffffffffffffffffffffffffffffffffffff16600582901b87018501528601610c9d565b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260326004525ffd5b908092508103908111610d3b579084610c69565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b346107185760406003193601126107185760043567ffffffffffffffff81116107185736602382011215610718576055600b610dd86020933690602481600401359101611079565b604051610e08818680820194610ded8661127f565b90805192839101825e015f815203601f198101835282611056565b519020610e1660243561150c565b604051916040830152848201523081520160ff81532073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b34610718575f60031936011261071857610ad9610e656111bb565b604051918291602083526020830190611015565b34610718575f600319360112610718577fffffffff00000000000000000000000000000000000000000000000000000000610eb4911661137a565b602073ffffffffffffffffffffffffffffffffffffffff610ed36113f0565b16916064604051809481937f9be2a88400000000000000000000000000000000000000000000000000000000835260048301523360248301523060448301525afa908115610663575f91610f8b575b5015610f6357610f306114d8565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d602011610fbe575b81610fa660209383611056565b81010312610718575180151581036107185781610f22565b3d9150610f99565b34610718575f600319360112610718576080610fe0611146565b61101360405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6080810190811067ffffffffffffffff82111761063657604052565b90601f601f19910116810190811067ffffffffffffffff82111761063657604052565b92919267ffffffffffffffff821161063657604051916110a36020601f19601f8401160184611056565b829481845281830111610718578281602093845f960137010152565b60209060206040818301928281528551809452019301915f5b8281106110e6575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016110d8565b9080601f830112156107185781602061112b93359101611079565b90565b67ffffffffffffffff81116106365760051b60200190565b604051906111538261103a565b5f6060838281528260208201528260408201520152565b90600182811c921680156111b1575b602083101461118457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611179565b604051905f82600554916111ce8361116a565b8083529260209060019081811690811561125a57506001146111fb575b50506111f992500383611056565b565b91509260055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0935f925b82841061124257506111f99450505081016020015f806111eb565b85548885018301529485019487945092810192611227565b9050602093506111f995925060ff1991501682840152151560051b8201015f806111eb565b6003545f929161128e8261116a565b916001908181169081156112f857506001146112a957505050565b909192935060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8483106112e5575050500190565b81816020925485870152019201916112d7565b60ff191683525050811515909102019150565b91908201809211610d3b57565b60015481101561134d5760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176106365760405251902090565b6040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610663575f9261146857505090565b9091506020813d602011611499575b8161148460209383611056565b81010312610718575190811681036107185790565b3d9150611477565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156114d35790565b505f90565b60ff600254166114e457565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffd5b604051602081019133835246604083015260608201526060815261152f8161103a565b5190209056fea26469706673582212203cd0988e2e830b94536e6df4c35ff8f26efc023966b61f142a1f353476f2b54b64736f6c634300081b0033",
"linkReferences": {},
"deployedLinkReferences": {}
}