[ { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" }, { "internalType": "bool", "name": "_allowToken0", "type": "bool" }, { "internalType": "bool", "name": "_allowToken1", "type": "bool" }, { "internalType": "address", "name": "__owner", "type": "address" }, { "internalType": "uint32", "name": "_twapPeriod", "type": "uint32" }, { "internalType": "uint256", "name": "_vaultIndex", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "affiliate", "type": "address" } ], "name": "Affiliate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "ammFeeRecipient", "type": "address" } ], "name": "AmmFeeRecipient", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount1", "type": "uint256" } ], "name": "CollectFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "pool", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "allowToken0", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "allowToken1", "type": "bool" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "twapPeriod", "type": "uint256" } ], "name": "DeployICHIVault", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "deposit0Max", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "deposit1Max", "type": "uint256" } ], "name": "DepositMax", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "hysteresis", "type": "uint256" } ], "name": "Hysteresis", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "maxTotalSupply", "type": "uint256" } ], "name": "MaxTotalSupply", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int24", "name": "tick", "type": "int24" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "Rebalance", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint32", "name": "newTwapPeriod", "type": "uint32" } ], "name": "SetTwapPeriod", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "PRECISION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "affiliate", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "algebraMintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "algebraSwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "allowToken0", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "allowToken1", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ammFeeRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseLower", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseUpper", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collectFees", "outputs": [ { "internalType": "uint256", "name": "fees0", "type": "uint256" }, { "internalType": "uint256", "name": "fees1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentTick", "outputs": [ { "internalType": "int24", "name": "tick", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "deposit0", "type": "uint256" }, { "internalType": "uint256", "name": "deposit1", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deposit0Max", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "deposit1Max", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fee", "outputs": [ { "internalType": "uint24", "name": "fee_", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getBasePosition", "outputs": [ { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLimitPosition", "outputs": [ { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalAmounts", "outputs": [ { "internalType": "uint256", "name": "total0", "type": "uint256" }, { "internalType": "uint256", "name": "total1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hysteresis", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ichiVaultFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "limitLower", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitUpper", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "_baseLower", "type": "int24" }, { "internalType": "int24", "name": "_baseUpper", "type": "int24" }, { "internalType": "int24", "name": "_limitLower", "type": "int24" }, { "internalType": "int24", "name": "_limitUpper", "type": "int24" }, { "internalType": "int256", "name": "swapQuantity", "type": "int256" } ], "name": "rebalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_affiliate", "type": "address" } ], "name": "setAffiliate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_ammFeeRecipient", "type": "address" } ], "name": "setAmmFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_deposit0Max", "type": "uint256" }, { "internalType": "uint256", "name": "_deposit1Max", "type": "uint256" } ], "name": "setDepositMax", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_hysteresis", "type": "uint256" } ], "name": "setHysteresis", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxTotalSupply", "type": "uint256" } ], "name": "setMaxTotalSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "newTwapPeriod", "type": "uint32" } ], "name": "setTwapPeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tickSpacing", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "twapPeriod", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
6101406040523480156200001257600080fd5b506040516200585938038062005859833981016040819052620000359162000535565b604080518082018252601481527f49434849205661756c74204c697175696469747900000000000000000000000060208201529051633afd2b7960e11b8152600481018390526001600160a01b0388166024820152861515604482015273065cb8139e9fed6c97f8b0851e599c56286ea031906375fa56f290606401600060405180830381865af4158015620000cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000f99190810190620005cf565b600362000107838262000733565b50600462000116828262000733565b50506001600555506200012933620003c3565b6001600160a01b038616620001855760405162461bcd60e51b815260206004820152601c60248201527f49562e636f6e7374727563746f723a207a65726f20616464726573730000000060448201526064015b60405180910390fd5b84806200018f5750835b620001e75760405162461bcd60e51b815260206004820152602160248201527f49562e636f6e7374727563746f723a206e6f20616c6c6f77656420746f6b656e6044820152607360f81b60648201526084016200017c565b336080526001600160a01b03861660a081905260408051630dfe168160e01b81529051630dfe1681916004808201926020929091908290030181865afa15801562000236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025c9190620007ff565b6001600160a01b031660c0816001600160a01b031681525050856001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da9190620007ff565b6001600160a01b031660e0528415156101005283151561012052600d805463ffffffff191663ffffffff8416179055620003148362000415565b6000600b556200032e670de0b6b3a7640000606462000494565b600c556000196009819055600a55600780546001600160a01b031990811690915560088054909116905560408051861515815285151560208201526001600160a01b038581168284015263ffffffff8516606083015291519188169133917f3e708ccf7d0e6de8558e020ea36189511cb3435bbfec54e721a48ee4df0d4f8c919081900360800190a350505050505062000840565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200041f620004a9565b6001600160a01b038116620004865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200017c565b6200049181620003c3565b50565b6000620004a282846200081d565b9392505050565b6006546001600160a01b03163314620005055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200017c565b565b80516001600160a01b03811681146200051f57600080fd5b919050565b805180151581146200051f57600080fd5b60008060008060008060c087890312156200054f57600080fd5b6200055a8762000507565b95506200056a6020880162000524565b94506200057a6040880162000524565b93506200058a6060880162000507565b9250608087015163ffffffff81168114620005a457600080fd5b8092505060a087015190509295509295509295565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215620005e357600080fd5b82516001600160401b0380821115620005fb57600080fd5b818501915085601f8301126200061057600080fd5b815181811115620006255762000625620005b9565b604051601f8201601f19908116603f01168101908382118183101715620006505762000650620005b9565b8160405282815288868487010111156200066957600080fd5b600093505b828410156200068d57848401860151818501870152928501926200066e565b600086848301015280965050505050505092915050565b600181811c90821680620006b957607f821691505b602082108103620006da57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200072e57600081815260208120601f850160051c81016020861015620007095750805b601f850160051c820191505b818110156200072a5782815560010162000715565b5050505b505050565b81516001600160401b038111156200074f576200074f620005b9565b6200076781620007608454620006a4565b84620006e0565b602080601f8311600181146200079f5760008415620007865750858301515b600019600386901b1c1916600185901b1785556200072a565b600085815260208120601f198616915b82811015620007d057888601518255948401946001909101908401620007af565b5085821015620007ef5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200081257600080fd5b620004a28262000507565b6000826200083b57634e487b7160e01b600052601260045260246000fd5b500490565b60805160a05160c05160e0516101005161012051614e2c62000a2d6000396000818161043e015261114001526000818161053701526110ca01526000818161063e01528181610922015281816109a001528181610d9601528181610dca01528181610ee601528181610f5b0152818161159d015281816116250152818161177b01528181611af30152818161233f0152818161261401528181613e31015281816140a001526140de01526000818161035f0152818161087b0152818161096601528181610d0f01528181610d4801528181610eac01528181610f200152818161157c015281816116030152818161174001528181611a5b015281816122b7015281816125650152818161271d01528181613dd401528181613fe0015261401e0152600081816103b201528181610a6401528181610c8601528181610e260152818161133001528181611485015281816115e101528181611cac01528181611da10152818161200f0152818161210001528181612402015281816127e00152818161306b015281816135ec015281816136800152818161387901528181613a9501528181613be8015281816141180152614365015260008181610693015281816132220152818161355501528181613c7701528181613cfd01528181613e740152613f090152614e2c6000f3fe608060405234801561001057600080fd5b50600436106102d55760003560e01c80637aea530911610182578063c4a7761e116100e9578063dd62ed3e116100a2578063f2fde38b1161007c578063f2fde38b146106d1578063f6207326146106e4578063f9c95d4614610709578063fa0827431461071c57600080fd5b8063dd62ed3e1461067b578063dd81fa631461068e578063ddca3f43146106b557600080fd5b8063c4a7761e14610621578063c879657214610629578063d0c93a7c14610631578063d21220a714610639578063d2eabcfc14610660578063d87346aa1461066857600080fd5b80638dbdbe6d1161013b5780638dbdbe6d146105a457806395d89b41146105b7578063a049de6b146105bf578063a457c2d7146105ec578063a9059cbb146105ff578063aaf5eb681461061257600080fd5b80637aea5309146105295780637f7a1eec1461053257806381de128b14610559578063888a91341461056c578063897f078c146105805780638da5cb5b1461059357600080fd5b8063313ce5671161024157806345e05f43116101fa5780635ffc1ff7116101d45780635ffc1ff7146104dc578063648cab85146104ef57806370a08231146104f8578063715018a61461052157600080fd5b806345e05f43146104ac5780634d461fbb146104bf57806351e87af7146104c857600080fd5b8063313ce5671461042a57806337e41b401461043957806339509351146104605780633dd657c5146104735780633e091ee9146104865780633f3e4c111461049957600080fd5b806316f0115b1161029357806316f0115b146103ad57806318160ddd146103d457806323b872dd146103e65780632ab4d052146103f95780632bbb56d9146104025780632c8958f61461041757600080fd5b8062f714ce146102da578063065e53601461030757806306fdde0314610322578063095ea7b3146103375780630dfe16811461035a5780630f35bcac14610399575b600080fd5b6102ed6102e8366004614650565b610730565b604080519283526020830191909152015b60405180910390f35b61030f610a5d565b60405160029190910b81526020016102fe565b61032a610b4a565b6040516102fe91906146d0565b61034a6103453660046146e3565b610bdc565b60405190151581526020016102fe565b6103817f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102fe565b60085461030f90600160e81b900460020b81565b6103817f000000000000000000000000000000000000000000000000000000000000000081565b6002545b6040519081526020016102fe565b61034a6103f436600461470f565b610bf6565b6103d8600b5481565b610415610410366004614750565b610c1c565b005b6104156104253660046147af565b610c7b565b604051601281526020016102fe565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b61034a61046e3660046146e3565b610df9565b6104156104813660046147af565b610e1b565b610415610494366004614802565b610f83565b6104156104a7366004614824565b610fd4565b600854610381906001600160a01b031681565b6103d8600a5481565b60085461030f90600160d01b900460020b81565b6104156104ea366004614824565b611013565b6103d860095481565b6103d8610506366004614750565b6001600160a01b031660009081526020819052604090205490565b610415611052565b6103d8600c5481565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b610415610567366004614750565b611066565b60085461030f90600160b81b900460020b81565b600754610381906001600160a01b031681565b6006546001600160a01b0316610381565b6103d86105b236600461483d565b6110be565b61032a6118d3565b6105c76118e2565b604080516001600160801b0390941684526020840192909252908201526060016102fe565b61034a6105fa3660046146e3565b61197a565b61034a61060d3660046146e3565b611a00565b6103d8670de0b6b3a764000081565b6102ed611a0e565b6102ed611b2c565b61030f611ca8565b6103817f000000000000000000000000000000000000000000000000000000000000000081565b6105c7611d31565b610415610676366004614885565b611d8d565b6103d86106893660046148e9565b6127b1565b6103817f000000000000000000000000000000000000000000000000000000000000000081565b6106bd6127dc565b60405162ffffff90911681526020016102fe565b6104156106df366004614750565b61286e565b600d546106f49063ffffffff1681565b60405163ffffffff90911681526020016102fe565b610415610717366004614929565b6128e7565b60085461030f90600160a01b900460020b81565b60008061073b61299a565b600084116107865760405162461bcd60e51b815260206004820152601360248201527249562e77697468647261773a2073686172657360681b60448201526064015b60405180910390fd5b6001600160a01b0383166107ce5760405162461bcd60e51b815260206004820152600f60248201526e49562e77697468647261773a20746f60881b604482015260640161077d565b600854600090819061080390600160a01b8104600290810b91600160b81b9004900b6107fb82828b6129f3565b886000612a34565b6008549193509150600090819061083d90600160d01b8104600290810b91600160e81b9004900b61083582828d6129f3565b8a6000612a34565b91509150600061084c60025490565b6040516370a0823160e01b81523060048201529091506000906108f39083906108ed908d906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa1580156108c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e79190614946565b90612a62565b90612a6e565b6040516370a0823160e01b81523060048201529091506000906109519084906108ed908e906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024016108a6565b9050811561098d5761098d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b84612a7a565b80156109c7576109c76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b83612a7a565b6109db826109d58988612ae2565b90612ae2565b98506109eb816109d58887612ae2565b97506109f7338c612aee565b604080518c8152602081018b90529081018990526001600160a01b038b169033907febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9060600160405180910390a350505050505050610a566001600555565b9250929050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015610ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae49190614986565b955050505092505080610b445760405162461bcd60e51b815260206004820152602260248201527f49562e63757272656e745469636b3a2074686520706f6f6c206973206c6f636b604482015261195960f21b606482015260840161077d565b50919050565b606060038054610b5990614a07565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8590614a07565b8015610bd25780601f10610ba757610100808354040283529160200191610bd2565b820191906000526020600020905b815481529060010190602001808311610bb557829003601f168201915b5050505050905090565b600033610bea818585612c20565b60019150505b92915050565b600033610c04858285612d44565b610c0f858585612dbe565b60019150505b9392505050565b610c24612f62565b600880546001600160a01b0319166001600160a01b03831690811790915560405190815233907f3066ef5dd340e8b2ea28d62f5a8391eb7a82d3ee87532724a1ca4386d34f7523906020015b60405180910390a250565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cd95760405162461bcd60e51b815260206004820152600360248201526231b11960e91b604482015260640161077d565b6000610ce782840184614750565b90506000851315610d7057306001600160a01b03821603610d3b57610d366001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163387612a7a565b610df2565b610d366001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823388612fbc565b6000841315610df257306001600160a01b03821603610dbd57610d366001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163386612a7a565b610df26001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823387612fbc565b5050505050565b600033610bea818585610e0c83836127b1565b610e169190614a51565b612c20565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e795760405162461bcd60e51b815260206004820152600360248201526263623160e81b604482015260640161077d565b6000610e8782840184614750565b9050306001600160a01b03821603610f0d578415610ed357610ed36001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163387612a7a565b8315610d3657610d366001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163386612a7a565b8415610f4857610f486001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823388612fbc565b8315610df257610df26001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823387612fbc565b610f8b612f62565b6009829055600a819055604080518381526020810183905233917fafd3b05a4086b378b6f291200a528d8aed8c5e0317af77436b001f1bec28821a910160405180910390a25050565b610fdc612f62565b600b81905560405181815233907f7423cea36ad2104e8e8c3d9aa1e24288bdf3bfa7b4f37868cfa6d4d34ffdaf3a90602001610c70565b61101b612f62565b600c81905560405181815233907f529698f34660760dcb172def5c99d62e1b5b74b444df322e8f7da31f2bd0a86b90602001610c70565b61105a612f62565b6110646000612ff4565b565b61106e612f62565b600780546001600160a01b0319166001600160a01b03831690811790915560405190815233907fbb78b7c13893a913fa8c9ecb9fdaf97597aa412a39c778bf976790555f0942f790602001610c70565b60006110c861299a565b7f0000000000000000000000000000000000000000000000000000000000000000806110f2575083155b61113e5760405162461bcd60e51b815260206004820152601e60248201527f49562e6465706f7369743a20746f6b656e30206e6f7420616c6c6f7765640000604482015260640161077d565b7f000000000000000000000000000000000000000000000000000000000000000080611168575082155b6111b45760405162461bcd60e51b815260206004820152601e60248201527f49562e6465706f7369743a20746f6b656e31206e6f7420616c6c6f7765640000604482015260640161077d565b60008411806111c35750600083115b61120f5760405162461bcd60e51b815260206004820181905260248201527f49562e6465706f7369743a206465706f73697473206d757374206265203e2030604482015260640161077d565b600954841080156112215750600a5483105b61126d5760405162461bcd60e51b815260206004820152601e60248201527f49562e6465706f7369743a206465706f7369747320746f6f206c617267650000604482015260640161077d565b6001600160a01b0382161580159061128e57506001600160a01b0382163014155b6112cb5760405162461bcd60e51b815260206004820152600e60248201526d49562e6465706f7369743a20746f60901b604482015260640161077d565b6008546000906112f090600160a01b8104600290810b91600160b81b9004900b613046565b50909150506001600160801b03811615611420576008546040805160208101825260008082529151631d9de38760e11b8152919283926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692633b3bc70e9261137d92600160a01b8204600290810b93600160b81b909304900b918791600401614a64565b60408051808303816000875af115801561139b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bf9190614a98565b915091508160001480156113d1575080155b61141d5760405162461bcd60e51b815260206004820152601f60248201527f49562e6465706f7369743a20756e6578706563746564206275726e2028312900604482015260640161077d565b50505b60085460009061144590600160d01b8104600290810b91600160e81b9004900b613046565b50909150506001600160801b03811615611575576008546040805160208101825260008082529151631d9de38760e11b8152919283926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692633b3bc70e926114d292600160d01b8204600290810b93600160e81b909304900b918791600401614a64565b60408051808303816000875af11580156114f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115149190614a98565b91509150816000148015611526575080155b6115725760405162461bcd60e51b815260206004820152601f60248201527f49562e6465706f7369743a20756e6578706563746564206275726e2028322900604482015260640161077d565b50505b60006115d27f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006115c4610a5d565b670de0b6b3a7640000613119565b600d54909150600090611659907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009063ffffffff16670de0b6b3a764000061321d565b905060008183116116835761167e826108ed670de0b6b3a76400006108e78388613544565b61169d565b61169d836108ed670de0b6b3a76400006108e78387613544565b9050600c548111156116f5576116b1613550565b6116f55760405162461bcd60e51b815260206004820152601560248201527424ab173232b837b9b4ba1d103a393c903630ba32b960591b604482015260640161077d565b600080611700611a0e565b91509150600061172b670de0b6b3a76400006108ed8789106117225787611724565b885b8f90612a62565b90508b15611768576117686001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308f612fbc565b8a156117a3576117a36001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308e612fbc565b6117ad8b82612ae2565b98506117b860025490565b1561180a5760006117e4670de0b6b3a76400006108ed888a116117db57886117dd565b895b8790612a62565b90506118066117f38285612ae2565b6108ed6117ff60025490565b8d90612a62565b9950505b6118148a8a6137b3565b604080518a8152602081018e90529081018c90526001600160a01b038b169033907f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f69060600160405180910390a3600b5415806118755750600b5460025411155b6118c15760405162461bcd60e51b815260206004820152601a60248201527f49562e6465706f7369743a206d6178546f74616c537570706c79000000000000604482015260640161077d565b5050505050505050610c156001600555565b606060048054610b5990614a07565b6000806000806000806119136008601a9054906101000a900460020b6008601d9054906101000a900460020b613046565b600854929550909350915061193e90600160d01b8104600290810b91600160e81b9004900b85613872565b9396509450919250849161195b856001600160801b038416612ae2565b9450611970846001600160801b038316612ae2565b9350505050909192565b6000338161198882866127b1565b9050838110156119e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161077d565b6119f58286868403612c20565b506001949350505050565b600033610bea818585612dbe565b600080600080611a1c611d31565b9250925050600080611a2c6118e2565b6040516370a0823160e01b81523060048201529194509250611ac7915083906109d59087906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa158015611aa3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d59190614946565b6040516370a0823160e01b8152306004820152909650611b229082906109d59086906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401611a86565b9450505050509091565b600080611b3761299a565b600854600090611b5c90600160a01b8104600290810b91600160b81b9004900b613046565b50909150506001600160801b03811615611bbb576008546000908190611b9b90600160a01b8104600290810b91600160b81b9004900b83306001613a8d565b9092509050611baa8583612ae2565b9450611bb68482612ae2565b935050505b600854600090611be090600160d01b8104600290810b91600160e81b9004900b613046565b50909150506001600160801b03811615611c3f576008546000908190611c1f90600160d01b8104600290810b91600160e81b9004900b83306001613a8d565b9092509050611c2e8683612ae2565b9550611c3a8582612ae2565b945050505b604080518581526020810185905233917fec8208dd791fa8ffdc0d7427f3ba9c0ed06f1bce9a86254e6940c10cc1802fef910160405180910390a26000841180611c895750600083115b15611c9857611c988484613c73565b5050611ca46001600555565b9091565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2c9190614abc565b905090565b600080600080600080611d62600860149054906101000a900460020b600860179054906101000a900460020b613046565b600854929550909350915061193e90600160a01b8104600290810b91600160b81b9004900b85613872565b611d9561299a565b611d9d612f62565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e219190614abc565b90508460020b8660020b128015611e425750611e3d8187614aef565b60020b155b8015611e585750611e538186614aef565b60020b155b611eb05760405162461bcd60e51b815260206004820152602360248201527f49562e726562616c616e63653a206261736520706f736974696f6e20696e76616044820152621b1a5960ea1b606482015260840161077d565b8260020b8460020b128015611ecf5750611eca8185614aef565b60020b155b8015611ee55750611ee08184614aef565b60020b155b611f3d5760405162461bcd60e51b8152602060048201526024808201527f49562e726562616c616e63653a206c696d697420706f736974696f6e20696e76604482015263185b1a5960e21b606482015260840161077d565b8360020b8660020b141580611f5857508260020b8560020b14155b611fae5760405162461bcd60e51b815260206004820152602160248201527f49562e726562616c616e63653a206964656e746963616c20706f736974696f6e6044820152607360f81b606482015260840161077d565b600854600090611fd390600160a01b8104600290810b91600160b81b9004900b613046565b50909150506001600160801b0381161561209f576008546040805160208101825260008082529151631d9de38760e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693633b3bc70e9361205a93600160a01b8304600290810b94600160b81b909404900b92600401614a64565b60408051808303816000875af1158015612078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209c9190614a98565b50505b6008546000906120c490600160d01b8104600290810b91600160e81b9004900b613046565b50909150506001600160801b03811615612190576008546040805160208101825260008082529151631d9de38760e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693633b3bc70e9361214b93600160d01b8304600290810b94600160e81b909404900b92600401614a64565b60408051808303816000875af1158015612169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218d9190614a98565b50505b60085460009081906121b790600160a01b8104600290810b91600160b81b9004900b613046565b6008546001600160801b039283169550911692506000915081906121f090600160d01b8104600290810b91600160e81b9004900b613046565b6001600160801b0391821694501691506000905061220e8584612ae2565b9050600061221c8584612ae2565b60085490915061224590600160a01b8104600290810b91600160b81b9004900b8a306001612a34565b505060085461226d90600160d01b8104600290810b91600160e81b9004900b89306001612a34565b50506122798282613c73565b7fbc4c20ad04f161d631d9ce94d27659391196415aa3c42f6a71c62e905ece782d6122a2610a5d565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232a9190614946565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561238e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b29190614946565b85856123bd60025490565b6040805160029790970b87526020870195909552938501929092526060840152608083015260a082015260c00160405180910390a189156124fc576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663128acb083060008d138061243f5761243a8e614b11565b612441565b8d5b60008f1361246d57612468600173fffd8963efd1fc6a506488495d951d5263988d26614b2d565b61247d565b61247d6401000276a36001614b54565b60408051306020820152016040516020818303038152906040526040518663ffffffff1660e01b81526004016124b7959493929190614b74565b60408051808303816000875af11580156124d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f99190614a98565b50505b8d600860146101000a81548162ffffff021916908360020b62ffffff1602179055508c600860176101000a81548162ffffff021916908360020b62ffffff16021790555061268c600860149054906101000a900460020b600860179054906101000a900460020b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016125be91906001600160a01b0391909116815260200190565b602060405180830381865afa1580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190614946565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126879190614946565b614113565b6008549098506126b290600160a01b8104600290810b91600160b81b9004900b8a614328565b50508b6008601a6101000a81548162ffffff021916908360020b62ffffff1602179055508a6008601d6101000a81548162ffffff021916908360020b62ffffff1602179055506127766008601a9054906101000a900460020b6008601d9054906101000a900460020b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016125be91906001600160a01b0391909116815260200190565b60085490975061279c90600160d01b8104600290810b91600160e81b9004900b89614328565b5050505050505050505050610df26001600555565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa15801561283c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128609190614986565b50505061ffff169392505050565b612876612f62565b6001600160a01b0381166128db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077d565b6128e481612ff4565b50565b6128ef612f62565b60008163ffffffff16116129455760405162461bcd60e51b815260206004820181905260248201527f49562e73657454776170506572696f643a206d697373696e6720706572696f64604482015260640161077d565b600d805463ffffffff191663ffffffff83169081179091556040805133815260208101929092527fe4c60f4984caeb7f45b0cfe6d4233c115601ab11d141bc2cbf68b48346cdef38910160405180910390a150565b6002600554036129ec5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161077d565b6002600555565b600080612a008585613046565b50509050612a2b612a26612a1360025490565b6108ed6001600160801b03851687612a62565b6143fa565b95945050505050565b6000806001600160801b03851615612a5857612a538787878787613a8d565b915091505b9550959350505050565b6000610c158284614baf565b6000610c158284614bc6565b6040516001600160a01b038316602482015260448101829052612add90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614443565b505050565b6000610c158284614a51565b6001600160a01b038216612b4e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161077d565b6001600160a01b03821660009081526020819052604090205481811015612bc25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161077d565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b038316612c825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161077d565b6001600160a01b038216612ce35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161077d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000612d5084846127b1565b90506000198114612db85781811015612dab5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161077d565b612db88484848403612c20565b50505050565b6001600160a01b038316612e225760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161077d565b6001600160a01b038216612e845760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161077d565b6001600160a01b03831660009081526020819052604090205481811015612efc5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161077d565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612db8565b6006546001600160a01b031633146110645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077d565b6040516001600160a01b0380851660248301528316604482015260648101829052612db89085906323b872dd60e01b90608401612aa6565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008060008060008030905062ffffff871662ffffff89168260181b1760181b1792507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016130b791815260200190565b60a060405180830381865afa1580156130d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f89190614bf1565b909850965091935061310d91508390506143fa565b95505050509250925092565b600073065cb8139e9fed6c97f8b0851e599c56286ea0316343c57a278473065cb8139e9fed6c97f8b0851e599c56286ea03163809fdd33866040518263ffffffff1660e01b815260040161316f91815260200190565b602060405180830381865af415801561318c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b09190614c41565b88886040518563ffffffff1660e01b81526004016131d19493929190614c5c565b602060405180830381865af41580156131ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132129190614946565b90505b949350505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cd968b076040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a29190614c91565b6040516366f78b7b60e11b81526001600160a01b038981166004830152919091169063cdef16f690602401602060405180830381865afa1580156132ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330e9190614c91565b6040516330ea6ca760e11b81526001600160a01b0380831660048301528916602482015290915073065cb8139e9fed6c97f8b0851e599c56286ea031906361d4d94e90604401602060405180830381865af4158015613371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133959190614cae565b6133b15760405162461bcd60e51b815260040161077d90614cc9565b604051638241348960e01b81526001600160a01b038216600482015263ffffffff8516602482015260009073065cb8139e9fed6c97f8b0851e599c56286ea03190638241348990604401602060405180830381865af4158015613418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343c9190614abc565b60020b905073065cb8139e9fed6c97f8b0851e599c56286ea0316343c57a278273065cb8139e9fed6c97f8b0851e599c56286ea03163809fdd33886040518263ffffffff1660e01b815260040161349591815260200190565b602060405180830381865af41580156134b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d69190614c41565b8a8a6040518563ffffffff1660e01b81526004016134f79493929190614c5c565b602060405180830381865af4158015613514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135389190614946565b98975050505050505050565b6000610c158284614d0f565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cd968b076040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d59190614c91565b6040516366f78b7b60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152919091169063cdef16f690602401602060405180830381865afa15801561363d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136619190614c91565b6040516330ea6ca760e11b81526001600160a01b0380831660048301527f000000000000000000000000000000000000000000000000000000000000000016602482015290915073065cb8139e9fed6c97f8b0851e599c56286ea031906361d4d94e90604401602060405180830381865af41580156136e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137089190614cae565b6137245760405162461bcd60e51b815260040161077d90614cc9565b604051634c3e6e1160e11b81526001600160a01b038216600482015260009073065cb8139e9fed6c97f8b0851e599c56286ea0319063987cdc22906024016040805180830381865af415801561377e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a29190614d22565b63ffffffff16421415949350505050565b6001600160a01b0382166138095760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161077d565b806002600082825461381b9190614a51565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa1580156138d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f99190614986565b505060405163986cfba360e01b815260028b900b600482015293945073065cb8139e9fed6c97f8b0851e599c56286ea0319363c72e160b935085925084915063986cfba390602401602060405180830381865af415801561395e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139829190614c91565b60405163986cfba360e01b815260028a900b600482015273065cb8139e9fed6c97f8b0851e599c56286ea0319063986cfba390602401602060405180830381865af41580156139d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f99190614c91565b60405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015290911660448201526001600160801b03871660648201526084016040805180830381865af4158015613a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7f9190614a98565b92509250505b935093915050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633b3bc70e8a8a8a604051806020016040528060008152506040518563ffffffff1660e01b8152600401613af49493929190614a64565b60408051808303816000875af1158015613b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b369190614a98565b91509150600085613b4f57613b4a836143fa565b613b58565b6001600160801b035b9050600086613b6f57613b6a836143fa565b613b78565b6001600160801b035b90506000826001600160801b03161180613b9b57506000816001600160801b0316115b15613c65576040516309e3d67b60e31b81526001600160a01b03898116600483015260028d810b60248401528c900b60448301526001600160801b038085166064840152831660848301527f00000000000000000000000000000000000000000000000000000000000000001690634f1eb3d89060a40160408051808303816000875af1158015613c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c549190614d4e565b6001600160801b0391821697501694505b505050509550959350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663665a17c56040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf79190614946565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ef25c3a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7d9190614946565b9050600082118015613d9957506007546001600160a01b031615155b15613e58578315613dfb57600754613dfb906001600160a01b0316613dca670de0b6b3a76400006108ed8887612a62565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190612a7a565b8215613e5857600754613e58906001600160a01b0316613e27670de0b6b3a76400006108ed8787612a62565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190612a7a565b8015612db8576008546000906001600160a01b031615613ef9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663acc8247d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef49190614946565b613f03565b670de0b6b3a76400005b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663469048406040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f899190614c91565b9050851561404b576000613fa9670de0b6b3a76400006108ed8987612a62565b90506000613fc3670de0b6b3a76400006108ed8487612a62565b90506000613fd18383613544565b90506140076001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168584612a7a565b801561404757600854614047906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683612a7a565b5050505b841561410b576000614069670de0b6b3a76400006108ed8887612a62565b90506000614083670de0b6b3a76400006108ed8487612a62565b905060006140918383613544565b90506140c76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168584612a7a565b801561410757600854614107906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683612a7a565b5050505b505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015614174573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141989190614986565b505060405163986cfba360e01b815260028b900b600482015293945073065cb8139e9fed6c97f8b0851e599c56286ea03193636098fd4a935085925084915063986cfba390602401602060405180830381865af41580156141fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142219190614c91565b60405163986cfba360e01b815260028a900b600482015273065cb8139e9fed6c97f8b0851e599c56286ea0319063986cfba390602401602060405180830381865af4158015614274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142989190614c91565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018790526084810186905260a401602060405180830381865af41580156142fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061431e9190614c41565b9695505050505050565b6000806001600160801b03831615613a85576040805130602080830182905283518084039091018152828401938490526302abf8a760e61b9093527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169263aafe29c0926143aa929182918b918b918b9190604401614d81565b6060604051808303816000875af11580156143c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143ed9190614dce565b5090969095509350505050565b60006001600160801b0382111561443f5760405162461bcd60e51b815260206004820152600960248201526824ab1718991c2fa7a360b91b604482015260640161077d565b5090565b6000614498826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145189092919063ffffffff16565b90508051600014806144b95750808060200190518101906144b99190614cae565b612add5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161077d565b6060613215848460008585600080866001600160a01b0316858760405161453f9190614e03565b60006040518083038185875af1925050503d806000811461457c576040519150601f19603f3d011682016040523d82523d6000602084013e614581565b606091505b50915091506145928783838761459d565b979650505050505050565b6060831561460c578251600003614605576001600160a01b0385163b6146055760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161077d565b5081613215565b61321583838151156146215781518083602001fd5b8060405162461bcd60e51b815260040161077d91906146d0565b6001600160a01b03811681146128e457600080fd5b6000806040838503121561466357600080fd5b8235915060208301356146758161463b565b809150509250929050565b60005b8381101561469b578181015183820152602001614683565b50506000910152565b600081518084526146bc816020860160208601614680565b601f01601f19169290920160200192915050565b602081526000610c1560208301846146a4565b600080604083850312156146f657600080fd5b82356147018161463b565b946020939093013593505050565b60008060006060848603121561472457600080fd5b833561472f8161463b565b9250602084013561473f8161463b565b929592945050506040919091013590565b60006020828403121561476257600080fd5b8135610c158161463b565b60008083601f84011261477f57600080fd5b50813567ffffffffffffffff81111561479757600080fd5b602083019150836020828501011115610a5657600080fd5b600080600080606085870312156147c557600080fd5b8435935060208501359250604085013567ffffffffffffffff8111156147ea57600080fd5b6147f68782880161476d565b95989497509550505050565b6000806040838503121561481557600080fd5b50508035926020909101359150565b60006020828403121561483657600080fd5b5035919050565b60008060006060848603121561485257600080fd5b8335925060208401359150604084013561486b8161463b565b809150509250925092565b8060020b81146128e457600080fd5b600080600080600060a0868803121561489d57600080fd5b85356148a881614876565b945060208601356148b881614876565b935060408601356148c881614876565b925060608601356148d881614876565b949793965091946080013592915050565b600080604083850312156148fc57600080fd5b82356149078161463b565b915060208301356146758161463b565b63ffffffff811681146128e457600080fd5b60006020828403121561493b57600080fd5b8135610c1581614917565b60006020828403121561495857600080fd5b5051919050565b805161ffff8116811461497157600080fd5b919050565b8051801515811461497157600080fd5b60008060008060008060c0878903121561499f57600080fd5b86516149aa8161463b565b60208801519096506149bb81614876565b94506149c96040880161495f565b9350606087015160ff811681146149df57600080fd5b92506149ed6080880161495f565b91506149fb60a08801614976565b90509295509295509295565b600181811c90821680614a1b57607f821691505b602082108103610b4457634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610bf057610bf0614a3b565b8460020b81528360020b60208201526001600160801b038316604082015260806060820152600061431e60808301846146a4565b60008060408385031215614aab57600080fd5b505080516020909101519092909150565b600060208284031215614ace57600080fd5b8151610c1581614876565b634e487b7160e01b600052601260045260246000fd5b60008260020b80614b0257614b02614ad9565b808360020b0791505092915050565b6000600160ff1b8201614b2657614b26614a3b565b5060000390565b6001600160a01b03828116828216039080821115614b4d57614b4d614a3b565b5092915050565b6001600160a01b03818116838216019080821115614b4d57614b4d614a3b565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090614592908301846146a4565b8082028115828204841417610bf057610bf0614a3b565b600082614bd557614bd5614ad9565b500490565b80516001600160801b038116811461497157600080fd5b600080600080600060a08688031215614c0957600080fd5b855194506020860151935060408601519250614c2760608701614bda565b9150614c3560808701614bda565b90509295509295909350565b600060208284031215614c5357600080fd5b610c1582614bda565b60029490940b84526001600160801b039290921660208401526001600160a01b03908116604084015216606082015260800190565b600060208284031215614ca357600080fd5b8151610c158161463b565b600060208284031215614cc057600080fd5b610c1582614976565b60208082526026908201527f49562e636865636b487973746572657369733a206469636f6e6e65637465642060408201526538363ab3b4b760d11b606082015260800190565b81810381811115610bf057610bf0614a3b565b60008060408385031215614d3557600080fd5b614d3e8361495f565b9150602083015161467581614917565b60008060408385031215614d6157600080fd5b614d6a83614bda565b9150614d7860208401614bda565b90509250929050565b6001600160a01b03878116825286166020820152600285810b604083015284900b60608201526001600160801b038316608082015260c060a08201819052600090613538908301846146a4565b600080600060608486031215614de357600080fd5b8351925060208401519150614dfa60408501614bda565b90509250925092565b60008251614e15818460208701614680565b919091019291505056fea164736f6c6343000814000a000000000000000000000000044e9d04e95da164e7c7a9e2ec734610c09aae1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d639392f0fd8686e1739ce3e3174115e33e95a260000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000000000