[ { "inputs": [ { "internalType": "address", "name": "token_addr", "type": "address" }, { "internalType": "address", "name": "art_proxy", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "provider", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "locktime", "type": "uint256" }, { "indexed": false, "internalType": "enum VotingEscrow.DepositType", "name": "deposit_type", "type": "uint8" }, { "indexed": false, "internalType": "uint256", "name": "ts", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "prevSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "supply", "type": "uint256" } ], "name": "Supply", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "provider", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ts", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "DELEGATION_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_DELEGATES", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SECONDS_PER_EPOCH", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "abstain", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_approved", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "artProxy", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "attach", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "attachments", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_block", "type": "uint256" } ], "name": "balanceOfAtNFT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "balanceOfNFT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_t", "type": "uint256" } ], "name": "balanceOfNFTAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "block_number", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "checkpoint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint32", "name": "", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "uint256", "name": "_lock_duration", "type": "uint256" } ], "name": "create_lock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "uint256", "name": "_lock_duration", "type": "uint256" }, { "internalType": "address", "name": "_to", "type": "address" } ], "name": "create_lock_for", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegator", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "deposit_for", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "detach", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "epoch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "getPastVotesIndex", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "get_last_user_slope", "outputs": [ { "internalType": "int128", "name": "", "type": "int128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "increase_amount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_lock_duration", "type": "uint256" } ], "name": "increase_unlock_time", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_spender", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "isApprovedOrOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "isBorrowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_expiresAt", "type": "uint256" }, { "internalType": "bool", "name": "_noPullback", "type": "bool" }, { "internalType": "bool", "name": "_noWithdraw", "type": "bool" }, { "internalType": "bool", "name": "_noApprove", "type": "bool" }, { "internalType": "bool", "name": "_noIncreaseUnlockTime", "type": "bool" }, { "internalType": "bool", "name": "_noMerge", "type": "bool" } ], "name": "lend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "locked", "outputs": [ { "internalType": "int128", "name": "amount", "type": "int128" }, { "internalType": "uint256", "name": "end", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "locked__end", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_from", "type": "uint256" }, { "internalType": "uint256", "name": "_to", "type": "uint256" } ], "name": "merge", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "ownership_change", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "point_history", "outputs": [ { "internalType": "int128", "name": "bias", "type": "int128" }, { "internalType": "int128", "name": "slope", "type": "int128" }, { "internalType": "uint256", "name": "ts", "type": "uint256" }, { "internalType": "uint256", "name": "blk", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "publicLending", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "pullBack", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "restrictions", "outputs": [ { "internalType": "address", "name": "lender", "type": "address" }, { "internalType": "uint256", "name": "expiresAt", "type": "uint256" }, { "internalType": "bool", "name": "noPullback", "type": "bool" }, { "internalType": "bool", "name": "noWithdraw", "type": "bool" }, { "internalType": "bool", "name": "noApprove", "type": "bool" }, { "internalType": "bool", "name": "noIncreaseUnlockTime", "type": "bool" }, { "internalType": "bool", "name": "noMerge", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_operator", "type": "address" }, { "internalType": "bool", "name": "_approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_proxy", "type": "address" } ], "name": "setArtProxy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_active", "type": "bool" } ], "name": "setPublicLending", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_team", "type": "address" } ], "name": "setTeam", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_voter", "type": "address" } ], "name": "setVoter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "slope_changes", "outputs": [ { "internalType": "int128", "name": "", "type": "int128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "supply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "_interfaceID", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "team", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_tokenIndex", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_block", "type": "uint256" } ], "name": "totalSupplyAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "t", "type": "uint256" } ], "name": "totalSupplyAtT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "user_point_epoch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "user_point_history", "outputs": [ { "internalType": "int128", "name": "bias", "type": "int128" }, { "internalType": "int128", "name": "slope", "type": "int128" }, { "internalType": "uint256", "name": "ts", "type": "uint256" }, { "internalType": "uint256", "name": "blk", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_idx", "type": "uint256" } ], "name": "user_point_history__ts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "voted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "voter", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "voting", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a06040526006805460ff19908116600117909155601b805490911690553480156200002a57600080fd5b50604051620054fd380380620054fd8339810160408190526200004d91620001c4565b6001600160a01b0382811660805260008054336001600160a01b031991821681178355600180548316909117815560028054909216938516939093179055437f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92f0155427f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92f005560046020527f9fe05126d2d9ecf60592e254dead906a4b2e492f36cca727682c38e9008c6ac1805460ff1990811684179091557f4267c0a6fd96b7a87f183ee8744f24d011423cd0e0142b3f563f183d8d9a456b8054821684179055635b5e139f60e01b82527e24030bcf4927897dffe721c2d8dda4bfd8910861687c42b03a463b43b04147805490911690921790915560055460405190913091600080516020620054dd833981519152908290a46005546040516000903090600080516020620054dd833981519152908390a45050620001fc565b80516001600160a01b0381168114620001bf57600080fd5b919050565b60008060408385031215620001d857600080fd5b620001e383620001a7565b9150620001f360208401620001a7565b90509250929050565b6080516152b76200022660003960008181610c930152818161121a0152613d2f01526152b76000f3fe608060405234801561001057600080fd5b506004361061045f5760003560e01c80637116c60c1161024c578063b45a3c0e11610146578063e441135c116100c3578063f1127ed811610087578063f1127ed814610c2d578063f8a0576314610c58578063fbd3a29d14610c7b578063fc0c546a14610c8e578063fd4a77f114610cb557600080fd5b8063e441135c14610b84578063e7a324dc14610ba4578063e7e242d414610bcb578063e985e9c514610bde578063ee99fe2814610c1a57600080fd5b8063c87b56dd1161010a578063c87b56dd14610afa578063d1c2babb14610b0d578063d1febfb914610b20578063d4e54c3b14610b5e578063e0514aba14610b7157600080fd5b8063b45a3c0e14610a71578063b88d4fde14610ab9578063c1f0fb9f14610acc578063c2c4c5c114610adf578063c3cda52014610ae757600080fd5b806395d89b41116101d4578063a16146c711610198578063a16146c714610a21578063a183af5214610a2e578063a22cb46514610a41578063a4cc588214610a54578063a4d855df14610a5e57600080fd5b806395d89b41146104bd578063981b24d0146109d5578063986b7d8a146109e85780639ab24eb0146109fb5780639d507cec14610a0e57600080fd5b806385f2aef21161021b57806385f2aef2146109705780638c2c9baf146109835780638e539e8c146109965780638fbb38ff146109a9578063900cf0cf146109cc57600080fd5b80637116c60c14610907578063711974841461091a5780637d7830ae1461093d5780637ecebe001461095057600080fd5b8063313ce5671161035d57806354fd4d50116102e55780636352211e116102a95780636352211e1461087257806365fc38731461089b5780636f548837146108ae5780636fcfff45146108ce57806370a08231146108f457600080fd5b806354fd4d501461080c5780635594a04514610830578063587cde1e146108435780635c19a95c146108565780635f5b0c321461086957600080fd5b806342842e0e1161032c57806342842e0e1461079a578063430c2081146107ad578063461f711c146107c057806346c96aac146107e65780634bc2a657146107f957600080fd5b8063313ce567146107475780633448f505146107615780633a46b1a8146107745780633b0635d61461078757600080fd5b806317d70f7c116103eb57806323b872dd116103af57806323b872dd146106d257806325a58b56146106e55780632e1a7d4d146106eb5780632e720f7d146106fe5780632f745c591461071157600080fd5b806317d70f7c146105da57806318160ddd146105e35780631c984bc3146105eb5780631f3b3bb7146105fe57806320606b70146106ab57600080fd5b8063081812fc11610432578063081812fc14610516578063095cf5c614610557578063095ea7b31461056c5780630d6a20331461057f5780631376f3da1461059f57600080fd5b806301ffc9a714610464578063047fc9aa146104a657806306fdde03146104bd5780630758c7d8146104ee575b600080fd5b610491610472366004614947565b6001600160e01b03191660009081526004602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6104af60135481565b60405190815260200161049d565b6104e1604051806040016040528060058152602001641d9953919560da1b81525081565b60405161049d91906149bc565b6105016104fc3660046149eb565b610cc8565b60405163ffffffff909116815260200161049d565b61053f610524366004614a15565b6000908152600960205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161049d565b61056a610565366004614a2e565b610e3b565b005b61056a61057a3660046149eb565b610e74565b6104af61058d366004614a15565b60146020526000908152604090205481565b6105b26105ad366004614a49565b610fab565b60408051600f95860b81529390940b602084015292820152606081019190915260800161049d565b6104af60055481565b6104af610ff2565b6104af6105f9366004614a49565b611002565b61066261060c366004614a15565b601a602052600090815260409020805460018201546002909201546001600160a01b03909116919060ff808216916101008104821691620100008204811691630100000081048216916401000000009091041687565b604080516001600160a01b03909816885260208801969096529315159486019490945290151560608501521515608084015290151560a0830152151560c082015260e00161049d565b6104af7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61056a6106e0366004614a6b565b611034565b436104af565b61056a6106f9366004614a15565b611045565b61056a61070c366004614a2e565b61133d565b6104af61071f3660046149eb565b6001600160a01b03919091166000908152600c60209081526040808320938352929052205490565b61074f601281565b60405160ff909116815260200161049d565b61056a61076f366004614ab5565b611376565b6104af6107823660046149eb565b6113a0565b61056a610795366004614a15565b61143f565b61056a6107a8366004614a6b565b61147d565b6104916107bb3660046149eb565b611498565b6107d36107ce366004614a15565b6114ab565b604051600f9190910b815260200161049d565b60005461053f906001600160a01b031681565b61056a610807366004614a2e565b6114ee565b6104e1604051806040016040528060058152602001640312e302e360dc1b81525081565b60025461053f906001600160a01b031681565b61053f610851366004614a2e565b611527565b61056a610864366004614a2e565b611557565b6104af61040081565b61053f610880366004614a15565b6000908152600760205260409020546001600160a01b031690565b6104af6108a9366004614a49565b611572565b6104af6108bc366004614a15565b600b6020526000908152604090205481565b6105016108dc366004614a2e565b60186020526000908152604090205463ffffffff1681565b6104af610902366004614a2e565b6115b4565b6104af610915366004614a15565b6115d2565b6107d3610928366004614a15565b601260205260009081526040902054600f0b81565b61049161094b366004614a15565b611632565b6104af61095e366004614a2e565b60196020526000908152604090205481565b60015461053f906001600160a01b031681565b6104af610991366004614a49565b6116a7565b6104af6109a4366004614a15565b6116b3565b6104916109b7366004614a15565b60156020526000908152604090205460ff1681565b6104af60115481565b6104af6109e3366004614a15565b6116be565b61056a6109f6366004614a15565b611860565b6104af610a09366004614a2e565b6118a4565b61056a610a1c366004614ad2565b611977565b601b546104919060ff1681565b61056a610a3c366004614a49565b611da8565b61056a610a4f366004614b67565b611ea7565b6104af62093a8081565b61056a610a6c366004614a49565b611f2b565b610a9f610a7f366004614a15565b60106020526000908152604090208054600190910154600f9190910b9082565b60408051600f9390930b835260208301919091520161049d565b61056a610ac7366004614c0d565b612165565b61056a610ada366004614a15565b612304565b61056a612333565b61056a610af5366004614cb8565b612373565b6104e1610b08366004614a15565b6126b3565b61056a610b1b366004614a49565b6127df565b6105b2610b2e366004614a15565b600360205260009081526040902080546001820154600290920154600f82810b93600160801b909304900b919084565b6104af610b6c366004614d18565b6129ee565b6104af610b7f366004614a49565b612a31565b6104af610b92366004614a15565b600e6020526000908152604090205481565b6104af7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6104af610bd9366004614a15565b612a3d565b610491610bec366004614d4d565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b61056a610c28366004614a49565b612a65565b6104af610c3b366004614d80565b601760209081526000928352604080842090915290825290205481565b6104af610c66366004614a15565b60009081526010602052604090206001015490565b61056a610c89366004614a15565b612b39565b61053f7f000000000000000000000000000000000000000000000000000000000000000081565b61056a610cc3366004614a15565b612b6a565b6001600160a01b03821660009081526018602052604081205463ffffffff16808203610cf8576000915050610e35565b6001600160a01b03841660009081526017602052604081208491610d1d600185614dcb565b63ffffffff16815260208101919091526040016000205411610d4c57610d44600182614dcb565b915050610e35565b6001600160a01b0384166000908152601760209081526040808320838052909152902054831015610d81576000915050610e35565b600080610d8f600184614dcb565b90505b8163ffffffff168163ffffffff161115610e305760006002610db48484614dcb565b610dbe9190614e06565b610dc89083614dcb565b6001600160a01b038816600090815260176020908152604080832063ffffffff851684529091529020805491925090879003610e0a57509350610e3592505050565b8054871115610e1b57819350610e29565b610e26600183614dcb565b92505b5050610d92565b509150505b92915050565b6001546001600160a01b03163314610e5257600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610e7d81612b9c565b610ec35760405162461bcd60e51b8152602060048201526012602482015271185c1c1c9bdd99481c995cdd1c9a58dd195960721b60448201526064015b60405180910390fd5b6000818152600760205260409020546001600160a01b031680610ee557600080fd5b806001600160a01b0316836001600160a01b031603610f0357600080fd5b6000828152600760209081526040808320546001600160a01b038581168552600a845282852033808752945291909320549216149060ff168180610f445750805b610f4d57600080fd5b60008481526009602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918716917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050505050565b600f60205281600052604060002081633b9aca008110610fca57600080fd5b6003020180546001820154600290920154600f82810b9550600160801b90920490910b925084565b6000610ffd426115d2565b905090565b6000828152600f6020526040812082633b9aca00811061102457611024614e29565b6003020160010154905092915050565b61104083838333612bce565b505050565b60065460ff1660011461105757600080fd5b6006805460ff1916600217905561106e3382612d7f565b61107a5761107a614e3f565b61108381612de5565b6110c55760405162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc81c995cdd1c9a58dd1959606a1b6044820152606401610eba565b6000818152601460205260409020541580156110f0575060008181526015602052604090205460ff16155b61110c5760405162461bcd60e51b8152600401610eba90614e55565b60008181526010602090815260409182902082518084019093528054600f0b83526001015490820181905242101561117f5760405162461bcd60e51b8152602060048201526016602482015275546865206c6f636b206469646e27742065787069726560501b6044820152606401610eba565b8051604080518082018252600080825260208083018281528783526010909152929020905181546001600160801b0319166001600160801b039091161781559051600190910155601354600f9190910b906111da8282614e77565b60135560408051808201909152600080825260208201526111fe9085908590612e0f565b60405163a9059cbb60e01b8152336004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561126b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128f9190614e8e565b61129b5761129b614e3f565b6112a48461346d565b60408051858152602081018490524281830152905133917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94919081900360600190a27f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c816113128482614e77565b6040805192835260208301919091520160405180910390a150506006805460ff191660011790555050565b6001546001600160a01b0316331461135457600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461138d57600080fd5b601b805460ff1916911515919091179055565b6000806113ad8484610cc8565b6001600160a01b038516600090815260176020908152604080832063ffffffff851684529091528120919250600190910190805b82548110156114355760008382815481106113fe576113fe614e29565b906000526020600020015490506114158188613540565b61141f9084614eab565b925050808061142d90614ec3565b9150506113e1565b5095945050505050565b60008181526007602052604090205461147a906001600160a01b03166000838152601a60205260409020546001600160a01b03168333612bce565b50565b61104083838360405180602001604052806000815250612165565b60006114a48383612d7f565b9392505050565b6000818152600e6020908152604080832054600f909252822081633b9aca0081106114d8576114d8614e29565b6003020154600160801b9004600f0b9392505050565b6000546001600160a01b0316331461150557600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808216600090815260166020526040812054909116801561155057806114a4565b5090919050565b6001600160a01b0381166115685750335b61147a3382613614565b60065460009060ff1660011461158757600080fd5b6006805460ff1916600217905561159f838333613687565b90506006805460ff1916600117905592915050565b6001600160a01b038116600090815260086020526040812054610e35565b601154600081815260036020908152604080832081516080810183528154600f81810b8352600160801b909104900b9381019390935260018101549183019190915260020154606082015290919061162a81856137de565b949350505050565b6000818152601a6020526040812060010154421061165257506000919050565b6000828152601a60205260409020546001600160a01b0316611689836000908152600760205260409020546001600160a01b031690565b6001600160a01b03160361169f57506000919050565b506001919050565b60006114a483836138df565b6000610e35826115d2565b6000438211156116d0576116d0614e3f565b60115460006116df8483613bb8565b600081815260036020908152604080832081516080810183528154600f81810b8352600160801b909104900b93810193909352600181015491830191909152600201546060820152919250838310156117ee576000600381611742866001614eab565b8152602080820192909252604090810160002081516080810183528154600f81810b8352600160801b909104900b93810193909352600181015491830191909152600201546060808301829052850151919250146117e857826060015181606001516117ae9190614e77565b836040015182604001516117c29190614e77565b60608501516117d1908a614e77565b6117db9190614edc565b6117e59190614efb565b91505b5061183d565b4382606001511461183d5760608201516118089043614e77565b60408301516118179042614e77565b60608401516118269089614e77565b6118309190614edc565b61183a9190614efb565b90505b611856828284604001516118519190614eab565b6137de565b9695505050505050565b6000546001600160a01b0316331461187757600080fd5b60008181526014602052604090205461189290600190614e77565b60009182526014602052604090912055565b6001600160a01b03811660009081526018602052604081205463ffffffff168082036118d35750600092915050565b6001600160a01b0383166000908152601760205260408120816118f7600185614dcb565b63ffffffff1663ffffffff16815260200190815260200160002060010190506000805b825481101561196e57600083828154811061193757611937614e29565b9060005260206000200154905061194e8142613540565b6119589084614eab565b925050808061196690614ec3565b91505061191a565b50949350505050565b60065460ff1660011461198957600080fd5b6006805460ff191660021790556119a03389612d7f565b6119ec5760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206f776e65722c20617070726f766564206f72206f70657261746f72006044820152606401610eba565b6001546001600160a01b0316331480611a075750601b5460ff165b611a3f5760405162461bcd60e51b81526020600482015260096024820152686f6e6c79207465616d60b81b6044820152606401610eba565b611a4888611632565b15611a8a5760405162461bcd60e51b81526020600482015260126024820152711d1bdad95b88185b1c9958591e481b195b9d60721b6044820152606401610eba565b84611b985782611ae85760405162461bcd60e51b815260206004820152602360248201527f70756c6c6261636b2072657175697265732064697361626c696e6720617070726044820152626f766560e81b6064820152608401610eba565b80611b3f5760405162461bcd60e51b815260206004820152602160248201527f70756c6c6261636b2072657175697265732064697361626c696e67206d6572676044820152606560f81b6064820152608401610eba565b83611b985760405162461bcd60e51b8152602060048201526024808201527f70756c6c6261636b2072657175697265732064697361626c696e6720776974686044820152636472617760e01b6064820152608401610eba565b428611611bd95760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195e1c1a5c9959608a1b6044820152606401610eba565b6000888152600760205260408120546001600160a01b031690506040518060e00160405280826001600160a01b031681526020018881526020018715158152602001861515815260200185151581526020018415158152602001831515815250601a60008b815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff02191690831515021790555060808201518160020160026101000a81548160ff02191690831515021790555060a08201518160020160036101000a81548160ff02191690831515021790555060c08201518160020160046101000a81548160ff021916908315150217905550905050611d3281898b33612bce565b85611d905760008981526009602052604080822080546001600160a01b0319166001600160a01b0385811691821790925591518c93918c1692917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45b50506006805460ff1916600117905550505050505050565b60065460ff16600114611dba57600080fd5b6006805460ff19166002179055611dd13383612d7f565b611ddd57611ddd614e3f565b60008281526010602090815260409182902082518084019093528054600f0b8352600101549082015281611e1357611e13614e3f565b60008160000151600f0b13611e635760405162461bcd60e51b8152602060048201526016602482015275139bc8195e1a5cdd1a5b99c81b1bd8dac8199bdd5b9960521b6044820152606401610eba565b42816020015111611e865760405162461bcd60e51b8152600401610eba90614f0f565b611e9583836000846002613c3e565b50506006805460ff1916600117905550565b336001600160a01b03831603611ebf57611ebf614e3f565b336000818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60065460ff16600114611f3d57600080fd5b6006805460ff19166002179055611f5382613e43565b611f9f5760405162461bcd60e51b815260206004820152601f60248201527f696e6372656173655f756e6c6f636b5f74696d652072657374726963746564006044820152606401610eba565b611fa93383612d7f565b611fb557611fb5614e3f565b600082815260106020908152604080832081518083019092528054600f0b825260010154918101919091529062093a8080611ff08542614eab565b611ffa9190614efb565b6120049190614edc565b9050428260200151116120485760405162461bcd60e51b815260206004820152600c60248201526b131bd8dac8195e1c1a5c995960a21b6044820152606401610eba565b60008260000151600f0b136120935760405162461bcd60e51b8152602060048201526011602482015270139bdd1a1a5b99c81a5cc81b1bd8dad959607a1b6044820152606401610eba565b816020015181116120e65760405162461bcd60e51b815260206004820152601f60248201527f43616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e006044820152606401610eba565b6120f46301e1338042614eab565b8111156121435760405162461bcd60e51b815260206004820152601e60248201527f566f74696e67206c6f636b2063616e2062652031207965617273206d617800006044820152606401610eba565b61215284600083856003613c3e565b50506006805460ff191660011790555050565b61217184848433612bce565b823b156122fe57604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906121aa903390889087908790600401614f53565b6020604051808303816000875af19250505080156121e5575060408051601f3d908101601f191682019092526121e291810190614f86565b60015b61228d573d808015612213576040519150601f19603f3d011682016040523d82523d6000602084013e612218565b606091505b5080516000036122855760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610eba565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b146122fc5760405162461bcd60e51b815260206004820152602660248201527f4552433732313a2045524337323152656365697665722072656a656374656420604482015265746f6b656e7360d01b6064820152608401610eba565b505b50505050565b6000546001600160a01b0316331461231b57600080fd5b6000908152601560205260409020805460ff19169055565b612371600060405180604001604052806000600f0b8152602001600081525060405180604001604052806000600f0b81526020016000815250612e0f565b565b6040805180820182526005808252641d9953919560da1b60209283015282518084018452908152640312e302e360dc1b9082015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fc792e9874e7b42c234d1e8448cec020a0f065019c8cd6f7ccdb65b8c110157e9818401527f06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c60608201524660808201523060a0808301919091528351808303909101815260c0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60e08301526001600160a01b038a1661010083015261012082018990526101408083018990528451808403909101815261016083019094528351939092019290922061190160f01b61018084015261018283018290526101a2830181905290916000906101c20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015612532573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166125ac5760405162461bcd60e51b815260206004820152602e60248201527f566f74696e67457363726f773a3a64656c656761746542795369673a20696e7660448201526d616c6964207369676e617475726560901b6064820152608401610eba565b6001600160a01b03811660009081526019602052604081208054916125d083614ec3565b9190505589146126355760405162461bcd60e51b815260206004820152602a60248201527f566f74696e67457363726f773a3a64656c656761746542795369673a20696e76604482015269616c6964206e6f6e636560b01b6064820152608401610eba565b8742111561269c5760405162461bcd60e51b815260206004820152602e60248201527f566f74696e67457363726f773a3a64656c656761746542795369673a2073696760448201526d1b985d1d5c9948195e1c1a5c995960921b6064820152608401610eba565b6126a6818b613614565b505050505b505050505050565b6000818152600760205260409020546060906001600160a01b031661271a5760405162461bcd60e51b815260206004820152601b60248201527f517565727920666f72206e6f6e6578697374656e7420746f6b656e00000000006044820152606401610eba565b60008281526010602090815260409182902082518084019093528054600f0b835260010154908201526002546001600160a01b031663dd9ec1498461275f8142613540565b6020850151855160405160e086901b6001600160e01b0319168152600481019490945260248401929092526044830152600f0b6064820152608401600060405180830381865afa1580156127b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114a49190810190614fa3565b6127e882613e6f565b6128345760405162461bcd60e51b815260206004820152601a60248201527f6d65726765207265737472696374656420666f72205f66726f6d0000000000006044820152606401610eba565b61283d81613e6f565b6128895760405162461bcd60e51b815260206004820152601860248201527f6d65726765207265737472696374656420666f72205f746f00000000000000006044820152606401610eba565b6000828152601460205260409020541580156128b4575060008281526015602052604090205460ff16155b6128d05760405162461bcd60e51b8152600401610eba90614e55565b8082036128dc57600080fd5b6128e63383612d7f565b6128ef57600080fd5b6128f93382612d7f565b61290257600080fd5b6000828152601060208181526040808420815180830183528154600f90810b825260019283015482860190815288885295855283872084518086019095528054820b855290920154938301849052805194519095929490910b92111561296c578260200151612972565b83602001515b604080518082018252600080825260208083018281528b835260108252848320935184546001600160801b0319166001600160801b03909116178455516001909301929092558251808401909352808352908201529091506129d79087908690612e0f565b6129e08661346d565b6126ab858383866004613c3e565b60065460009060ff16600114612a0357600080fd5b6006805460ff19166002179055612a1b848484613687565b90506006805460ff191660011790559392505050565b60006114a48383613540565b6000818152600b6020526040812054439003612a5b57506000919050565b610e358242613540565b60065460ff16600114612a7757600080fd5b6006805460ff1916600217905560008281526010602090815260409182902082518084019093528054600f0b8352600101549082015281612ab757600080fd5b60008160000151600f0b13612b075760405162461bcd60e51b8152602060048201526016602482015275139bc8195e1a5cdd1a5b99c81b1bd8dac8199bdd5b9960521b6044820152606401610eba565b42816020015111612b2a5760405162461bcd60e51b8152600401610eba90614f0f565b611e9583836000846000613c3e565b6000546001600160a01b03163314612b5057600080fd5b600081815260146020526040902054611892906001614eab565b6000546001600160a01b03163314612b8157600080fd5b6000908152601560205260409020805460ff19166001179055565b6000818152601a602052604081206002015462010000900460ff161580610e355750612bc782611632565b1592915050565b612bd88284613e9c565b612c2e5760405162461bcd60e51b815260206004820152602160248201527f7265737472696374696f6e733a207265636569766572206e6f74206c656e64656044820152603960f91b6064820152608401610eba565b600082815260146020526040902054158015612c59575060008281526015602052604090205460ff16155b612c755760405162461bcd60e51b8152600401610eba90614e55565b612c7f8183612d7f565b612c8857600080fd5b836001600160a01b0316836001600160a01b031603156122fe57612cac8483613eec565b6000828152601a60205260409020546001600160a01b0390811690841603612d02576000828152601a6020526040812080546001600160a01b03191681556001810191909155600201805464ffffffffff191690555b612d0c8483613f53565b612d27612d1885611527565b612d2185611527565b84613fd4565b612d318383614336565b6000828152600b60205260408082204390555183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450505050565b60008181526007602090815260408083205460098352818420546001600160a01b03918216808652600a855283862088841680885295529285205492938085149392909116149060ff168280612dd25750815b80612dda5750805b979650505050505050565b6000818152601a6020526040812060020154610100900460ff161580610e355750612bc782611632565b60408051608081018252600080825260208201819052918101829052606081019190915260408051608081018252600080825260208201819052918101829052606081019190915260115460009081908715612f7a57428760200151118015612e7f575060008760000151600f0b135b15612ec4578651612e95906301e1338090615011565b600f0b602080870191909152870151612eaf904290614e77565b8560200151612ebe919061504f565b600f0b85525b428660200151118015612ede575060008660000151600f0b135b15612f23578551612ef4906301e1338090615011565b600f0b602080860191909152860151612f0e904290614e77565b8460200151612f1d919061504f565b600f0b84525b602080880151600090815260128252604090205490870151600f9190910b935015612f7a578660200151866020015103612f5f57829150612f7a565b602080870151600090815260129091526040902054600f0b91505b604080516080810182526000808252602082015242918101919091524360608201528115612fef575060008181526003602090815260409182902082516080810184528154600f81810b8352600160801b909104900b9281019290925260018101549282019290925260029091015460608201525b600081604001519050600060405180608001604052808460000151600f0b81526020018460200151600f0b815260200184604001518152602001846060015181525090506000836040015142111561307e5760408401516130509042614e77565b606085015161305f9043614e77565b61307190670de0b6b3a7640000614edc565b61307b9190614efb565b90505b600062093a8061308e8186614efb565b6130989190614edc565b905060005b60ff811015613212576130b362093a8083614eab565b91506000428311156130c7574292506130db565b50600082815260126020526040902054600f0b5b6130e58684614e77565b87602001516130f4919061504f565b875188906131039083906150e4565b600f0b90525060208701805182919061311d908390615134565b600f90810b90915288516000910b1215905061313857600087525b60008760200151600f0b121561315057600060208801525b60408088018490528501519295508592670de0b6b3a7640000906131749085614e77565b61317e9086614edc565b6131889190614efb565b85606001516131979190614eab565b60608801526131a7600189614eab565b97504283036131bc5750436060870152613212565b6000888152600360209081526040918290208951918a01516001600160801b03908116600160801b02921691909117815590880151600182015560608801516002909101555061320b81614ec3565b905061309d565b505060118590558b1561329d578860200151886020015161323391906150e4565b846020018181516132449190615134565b600f0b9052508851885161325891906150e4565b84518590613267908390615134565b600f90810b90915260208601516000910b1215905061328857600060208501525b60008460000151600f0b121561329d57600084525b6000858152600360209081526040918290208651918701516001600160801b03908116600160801b02921691909117815590850151600182015560608501516002909101558b1561345f57428b6020015111156133545760208901516133039088615134565b96508a602001518a602001510361332657602088015161332390886150e4565b96505b60208b810151600090815260129091526040902080546001600160801b0319166001600160801b0389161790555b428a6020015111156133af578a602001518a6020015111156133af57602088015161337f90876150e4565b60208b810151600090815260129091526040902080546001600160801b0319166001600160801b03831617905595505b60008c8152600e60205260408120546133c9906001614eab565b905080600e60008f815260200190815260200160002081905550428960400181815250504389606001818152505088600f60008f815260200190815260200160002082633b9aca00811061341f5761341f614e29565b825160208401516001600160801b03908116600160801b029116176003919091029190910190815560408201516001820155606090910151600290910155505b505050505050505050505050565b6134773382612d7f565b6134c35760405162461bcd60e51b815260206004820181905260248201527f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665646044820152606401610eba565b6000818152600760205260408120546001600160a01b0316906134e69083610e74565b6134fa6134f282611527565b600084613fd4565b6135043383613f53565b60405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000828152600e6020526040812054808203613560576000915050610e35565b6000848152600f6020526040812082633b9aca00811061358257613582614e29565b60408051608081018252600392909202929092018054600f81810b8452600160801b909104900b6020830152600181015492820183905260020154606082015291506135ce9085615183565b81602001516135dd919061504f565b815182906135ec9083906150e4565b600f90810b90915282516000910b1215905061360757600081525b51600f0b9150610e359050565b600061361f83611527565b6001600160a01b0384811660008181526016602052604080822080546001600160a01b031916888616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46110408382846143cc565b60008062093a80806136998642614eab565b6136a39190614efb565b6136ad9190614edc565b9050600085116136bc57600080fd5b42811161371a5760405162461bcd60e51b815260206004820152602660248201527f43616e206f6e6c79206c6f636b20756e74696c2074696d6520696e207468652060448201526566757475726560d01b6064820152608401610eba565b6137286301e1338042614eab565b8111156137775760405162461bcd60e51b815260206004820152601e60248201527f566f74696e67206c6f636b2063616e2062652031207965617273206d617800006044820152606401610eba565b60056000815461378690614ec3565b909155506005546137978482614788565b5060008181526010602090815260409182902082518084019093528054600f0b8352600190810154918301919091526137d591839189918691613c3e565b95945050505050565b600080839050600062093a808083604001516137fa9190614efb565b6138049190614edc565b905060005b60ff8110156138b75761381f62093a8083614eab565b915060008583111561383357859250613847565b50600082815260126020526040902054600f0b5b60408401516138569084614e77565b8460200151613865919061504f565b845185906138749083906150e4565b600f0b90525085830361388757506138b7565b80846020018181516138999190615134565b600f0b90525050604083018290526138b081614ec3565b9050613809565b5060008260000151600f0b12156138cd57600082525b50516001600160801b03169392505050565b6000438211156138f1576138f1614e3f565b6000838152600e6020526040812054815b6080811015613991578183101561399157600060026139218486614eab565b61392c906001614eab565b6139369190614efb565b6000888152600f60205260409020909150869082633b9aca00811061395d5761395d614e29565b60030201600201541161397257809350613980565b61397d600182614e77565b92505b5061398a81614ec3565b9050613902565b506000858152600f6020526040812083633b9aca0081106139b4576139b4614e29565b60408051608081018252600392909202929092018054600f81810b8452600160801b909104900b602083015260018101549282019290925260029091015460608201526011549091506000613a098783613bb8565b600081815260036020908152604080832081516080810183528154600f81810b8352600160801b909104900b938101939093526001810154918301919091526002015460608201529192508084841015613ae8576000600381613a6d876001614eab565b8152602080820192909252604090810160002081516080810183528154600f81810b8352600160801b909104900b93810193909352600181015491830191909152600201546060808301829052860151919250613aca9190614e77565b925083604001518160400151613ae09190614e77565b915050613b0c565b6060830151613af79043614e77565b9150826040015142613b099190614e77565b90505b60408301518215613b49578284606001518c613b289190614e77565b613b329084614edc565b613b3c9190614efb565b613b469082614eab565b90505b6040870151613b589082614e77565b8760200151613b67919061504f565b87518890613b769083906150e4565b600f90810b90915288516000910b129050613ba657505093516001600160801b03169650610e3595505050505050565b60009950505050505050505050610e35565b60008082815b6080811015613c345781831015613c345760006002613bdd8486614eab565b613be8906001614eab565b613bf29190614efb565b6000818152600360205260409020600201549091508710613c1557809350613c23565b613c20600182614e77565b92505b50613c2d81614ec3565b9050613bbe565b5090949350505050565b6013548290613c4d8682614eab565b6013556040805180820190915260008082526020820152825160208085015190830152600f0b8152825187908490613c86908390615134565b600f0b9052508515613c9a57602083018690525b6000888152601060209081526040909120845181546001600160801b0319166001600160801b0390911617815590840151600190910155613cdc888285612e0f565b338715801590613cfe57506004856004811115613cfb57613cfb6151c2565b14155b15613da8576040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018a90527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af1158015613d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9c9190614e8e565b613da857613da8614e3f565b8360200151816001600160a01b03167fff04ccafc360e16b67d682d17bd9503c4c6b9a131f6be6325762dc9ffc7de6248b8b8942604051613dec94939291906151d8565b60405180910390a37f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c83613e208a82614eab565b6040805192835260208301919091520160405180910390a1505050505050505050565b6000818152601a60205260408120600201546301000000900460ff161580610e355750612bc782611632565b6000818152601a6020526040812060020154640100000000900460ff161580610e355750612bc782611632565b6000828152601a602052604081206002015460ff1680613ed557506000838152601a60205260409020546001600160a01b038381169116145b806114a45750613ee483611632565b159392505050565b6000818152600760205260409020546001600160a01b03838116911614613f1557613f15614e3f565b6000818152600960205260409020546001600160a01b031615613f4f57600081815260096020526040902080546001600160a01b03191690555b5050565b6000818152600760205260409020546001600160a01b03838116911614613f7c57613f7c614e3f565b600081815260076020526040902080546001600160a01b0319169055613fa282826147f9565b6001600160a01b0382166000908152600860205260408120805460019290613fcb908490614e77565b90915550505050565b816001600160a01b0316836001600160a01b031614158015613ff65750600081115b15611040576001600160a01b03831615614177576001600160a01b03831660009081526018602052604081205463ffffffff16908161405a576001600160a01b0385166000908152601760209081526040808320838052909152902060010161409c565b6001600160a01b03851660009081526017602052604081209061407e600185614dcb565b63ffffffff1663ffffffff1681526020019081526020016000206001015b905060006140a9866148b8565b6001600160a01b038716600090815260176020908152604080832063ffffffff8516845290915281209192506001909101905b83548110156141365760008482815481106140f9576140f9614e29565b90600052602060002001549050868114614123578254600181018455600084815260209020018190555b508061412e81614ec3565b9150506140dc565b50614142846001615216565b6001600160a01b0388166000908152601860205260409020805463ffffffff191663ffffffff92909216919091179055505050505b6001600160a01b03821615611040576001600160a01b03821660009081526018602052604081205463ffffffff1690816141d6576001600160a01b03841660009081526017602090815260408083208380529091529020600101614218565b6001600160a01b0384166000908152601760205260408120906141fa600185614dcb565b63ffffffff1663ffffffff1681526020019081526020016000206001015b90506000614225856148b8565b6001600160a01b038616600090815260176020908152604080832063ffffffff8516845290915290208354919250600190810191610400916142679190614eab565b11156142855760405162461bcd60e51b8152600401610eba9061523e565b60005b83548110156142d75760008482815481106142a5576142a5614e29565b6000918252602080832090910154855460018101875586845291909220015550806142cf81614ec3565b915050614288565b508054600181810183556000838152602090209091018690556142fb908590615216565b6001600160a01b0387166000908152601860205260409020805463ffffffff9290921663ffffffff1990921691909117905550505050505050565b6000818152600760205260409020546001600160a01b03161561435b5761435b614e3f565b600081815260076020908152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260088084528285208054600c86528487208188528652848720889055878752600d865293862093909355908452909152805460019290613fcb908490614eab565b806001600160a01b0316826001600160a01b031614611040576001600160a01b0382161561457f576001600160a01b03821660009081526018602052604081205463ffffffff169081614444576001600160a01b03841660009081526017602090815260408083208380529091529020600101614486565b6001600160a01b038416600090815260176020526040812090614468600185614dcb565b63ffffffff1663ffffffff1681526020019081526020016000206001015b90506000614493856148b8565b6001600160a01b038616600090815260176020908152604080832063ffffffff8516845290915281209192506001909101905b835481101561453e5760008482815481106144e3576144e3614e29565b600091825260208083209091015480835260079091526040909120549091506001600160a01b03908116908a161461452b578254600181018455600084815260209020018190555b508061453681614ec3565b9150506144c6565b5061454a846001615216565b6001600160a01b0387166000908152601860205260409020805463ffffffff191663ffffffff92909216919091179055505050505b6001600160a01b03811615611040576001600160a01b03811660009081526018602052604081205463ffffffff1690816145de576001600160a01b03831660009081526017602090815260408083208380529091529020600101614620565b6001600160a01b038316600090815260176020526040812090614602600185614dcb565b63ffffffff1663ffffffff1681526020019081526020016000206001015b9050600061462d846148b8565b6001600160a01b03808616600090815260176020908152604080832063ffffffff861684528252808320938b168352600890915290205484549293506001909101916104009061467e908390614eab565b111561469c5760405162461bcd60e51b8152600401610eba9061523e565b60005b84548110156146ee5760008582815481106146bc576146bc614e29565b6000918252602080832090910154865460018101885587845291909220015550806146e681614ec3565b91505061469f565b5060005b81811015614740576001600160a01b0389166000908152600c60209081526040808320848452825282205485546001810187558684529190922001558061473881614ec3565b9150506146f2565b5061474c856001615216565b6001600160a01b0387166000908152601860205260409020805463ffffffff9290921663ffffffff199092169190911790555050505050505050565b60006001600160a01b0383166147a0576147a0614e3f565b6147ae6000612d2185611527565b6147b88383614336565b60405182906001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a450600192915050565b6001600160a01b03821660009081526008602052604081205461481e90600190614e77565b6000838152600d602052604090205490915080820361486d576001600160a01b0384166000908152600c602090815260408083208584528252808320839055858352600d9091528120556122fe565b6001600160a01b03939093166000908152600c6020908152604080832093835292815282822080548684528484208190558352600d9091528282209490945592839055908252812055565b6001600160a01b038116600090815260186020526040812054429063ffffffff16801580159061492157506001600160a01b03841660009081526017602052604081208391614908600185614dcb565b63ffffffff168152602081019190915260400160002054145b156114a45761162a600182614dcb565b6001600160e01b03198116811461147a57600080fd5b60006020828403121561495957600080fd5b81356114a481614931565b60005b8381101561497f578181015183820152602001614967565b838111156122fe5750506000910152565b600081518084526149a8816020860160208601614964565b601f01601f19169290920160200192915050565b6020815260006114a46020830184614990565b80356001600160a01b03811681146149e657600080fd5b919050565b600080604083850312156149fe57600080fd5b614a07836149cf565b946020939093013593505050565b600060208284031215614a2757600080fd5b5035919050565b600060208284031215614a4057600080fd5b6114a4826149cf565b60008060408385031215614a5c57600080fd5b50508035926020909101359150565b600080600060608486031215614a8057600080fd5b614a89846149cf565b9250614a97602085016149cf565b9150604084013590509250925092565b801515811461147a57600080fd5b600060208284031215614ac757600080fd5b81356114a481614aa7565b600080600080600080600080610100898b031215614aef57600080fd5b88359750614aff60208a016149cf565b9650604089013595506060890135614b1681614aa7565b94506080890135614b2681614aa7565b935060a0890135614b3681614aa7565b925060c0890135614b4681614aa7565b915060e0890135614b5681614aa7565b809150509295985092959890939650565b60008060408385031215614b7a57600080fd5b614b83836149cf565b91506020830135614b9381614aa7565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614bdd57614bdd614b9e565b604052919050565b600067ffffffffffffffff821115614bff57614bff614b9e565b50601f01601f191660200190565b60008060008060808587031215614c2357600080fd5b614c2c856149cf565b9350614c3a602086016149cf565b925060408501359150606085013567ffffffffffffffff811115614c5d57600080fd5b8501601f81018713614c6e57600080fd5b8035614c81614c7c82614be5565b614bb4565b818152886020838501011115614c9657600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060008060008060c08789031215614cd157600080fd5b614cda876149cf565b95506020870135945060408701359350606087013560ff81168114614cfe57600080fd5b9598949750929560808101359460a0909101359350915050565b600080600060608486031215614d2d57600080fd5b8335925060208401359150614d44604085016149cf565b90509250925092565b60008060408385031215614d6057600080fd5b614d69836149cf565b9150614d77602084016149cf565b90509250929050565b60008060408385031215614d9357600080fd5b614d9c836149cf565b9150602083013563ffffffff81168114614b9357600080fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015614de857614de8614db5565b039392505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680614e1d57614e1d614df0565b92169190910492915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b602080825260089082015267185d1d1858da195960c21b604082015260600190565b600082821015614e8957614e89614db5565b500390565b600060208284031215614ea057600080fd5b81516114a481614aa7565b60008219821115614ebe57614ebe614db5565b500190565b600060018201614ed557614ed5614db5565b5060010190565b6000816000190483118215151615614ef657614ef6614db5565b500290565b600082614f0a57614f0a614df0565b500490565b60208082526024908201527f43616e6e6f742061646420746f2065787069726564206c6f636b2e20576974686040820152636472617760e01b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061185690830184614990565b600060208284031215614f9857600080fd5b81516114a481614931565b600060208284031215614fb557600080fd5b815167ffffffffffffffff811115614fcc57600080fd5b8201601f81018413614fdd57600080fd5b8051614feb614c7c82614be5565b81815285602083850101111561500057600080fd5b6137d5826020830160208601614964565b600081600f0b83600f0b8061502857615028614df0565b60016001607f1b031982146000198214161561504657615046614db5565b90059392505050565b600081600f0b83600f0b60016001607f1b0360008213600084138383048511828216161561507f5761507f614db5565b60016001607f1b031960008512828116878305871216156150a2576150a2614db5565b600087129250858205871284841616156150be576150be614db5565b858505871281841616156150d4576150d4614db5565b5050509290910295945050505050565b600081600f0b83600f0b600081128160016001607f1b03190183128115161561510f5761510f614db5565b8160016001607f1b0301831381161561512a5761512a614db5565b5090039392505050565b600081600f0b83600f0b600082128260016001607f1b030382138115161561515e5761515e614db5565b8260016001607f1b031903821281161561517a5761517a614db5565b50019392505050565b60008083128015600160ff1b8501841216156151a1576151a1614db5565b6001600160ff1b03840183138116156151bc576151bc614db5565b50500390565b634e487b7160e01b600052602160045260246000fd5b84815260208101849052608081016005841061520457634e487b7160e01b600052602160045260246000fd5b60408201939093526060015292915050565b600063ffffffff80831681851680830382111561523557615235614db5565b01949350505050565b60208082526023908201527f64737452657020776f756c64206861766520746f6f206d616e7920746f6b656e60408201526249647360e81b60608201526080019056fea264697066735822122078e190592a38743ab67fd12dfbd1e00e57b875b6dfbd2d13eef4c83663aa2d7964736f6c634300080d0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000001ede4ae9421829f0ada9a136aa17da79e53818cf0000000000000000000000007883ccd63835e32bba469a416afeb93fdf66b512