[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "tokenRecovered", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "AdminTokenRecovery", "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": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "EmergencyWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "poolCap", "type": "uint256" } ], "name": "NewPoolCap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "poolLimitPerUser", "type": "uint256" } ], "name": "NewPoolLimit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "rewardPerBlock", "type": "uint256" }, { "indexed": false, "internalType": "contract ERC20", "name": "token", "type": "address" } ], "name": "NewRewardPerBlock", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract ERC20", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rewardPerBlock", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "p_factor", "type": "uint256" } ], "name": "NewRewardToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "startStakingBlock", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endStakingBlock", "type": "uint256" } ], "name": "NewStakingBlocks", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "startBlock", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endBlock", "type": "uint256" } ], "name": "NewStartAndEndBlocks", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "startUnStakingBlock", "type": "uint256" } ], "name": "NewUnStakingBlock", "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": "contract ERC20", "name": "token", "type": "address" } ], "name": "RemoveRewardToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "RewardsStop", "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": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "BSCStaion_CASTLE_FACTORY", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20", "name": "", "type": "address" } ], "name": "PRECISION_FACTOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20", "name": "", "type": "address" } ], "name": "accTokenPerShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_rewardPerBlock", "type": "uint256" } ], "name": "addRewardToken", "outputs": [], "stateMutability": "nonpayable", "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": [ { "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": "bonusEndBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "_amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "emergencyRemoval", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "emergencyRewardWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "feeCollector", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feePeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20[]", "name": "_tokens", "type": "address[]" } ], "name": "getAllAccTokenPerShared", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20[]", "name": "_tokens", "type": "address[]" } ], "name": "getAllPreFactor", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20[]", "name": "_tokens", "type": "address[]" } ], "name": "getAllRewardPerBlock", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFeeCollector", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFeePeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getLastStakingBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getStakingEndBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUnStakingFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUnlockTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_usr", "type": "address" } ], "name": "getUserDebt", "outputs": [ { "internalType": "contract ERC20[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_usr", "type": "address" }, { "internalType": "contract ERC20", "name": "_token", "type": "address" } ], "name": "getUserDebtByToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hasPoolLimit", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hasUserLimit", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [ { "internalType": "contract ERC20", "name": "_stakedToken", "type": "address" }, { "internalType": "contract ERC20[]", "name": "_rewardTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "_rewardPerBlock", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "_startEndBlocks", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "_stakingBlocks", "type": "uint256[]" }, { "internalType": "uint256", "name": "_unStakingBlock", "type": "uint256" }, { "internalType": "uint256[]", "name": "_feeSettings", "type": "uint256[]" }, { "internalType": "address", "name": "_feeCollector", "type": "address" }, { "internalType": "uint256", "name": "_poolLimitPerUser", "type": "uint256" }, { "internalType": "uint256", "name": "_poolCap", "type": "uint256" }, { "internalType": "bool", "name": "_isRemovable", "type": "bool" }, { "internalType": "address", "name": "_admin", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isInitialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastRewardBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "time", "type": "uint256" } ], "name": "lock", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "pendingReward", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "contract ERC20[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "contract ERC20", "name": "_token", "type": "address" } ], "name": "pendingRewardByToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolLimitPerUser", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "_tokenAmount", "type": "uint256" } ], "name": "recoverWrongTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20", "name": "_token", "type": "address" } ], "name": "removeRewardToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20", "name": "", "type": "address" } ], "name": "rewardPerBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "rewardTokens", "outputs": [ { "internalType": "contract ERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stakedToken", "outputs": [ { "internalType": "contract ERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stakingBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stakingEndBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "startBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stopReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "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": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "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": "unStakingBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unStakingFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unlock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newCollector", "type": "address" } ], "name": "updateFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newFeePeriod", "type": "uint256" } ], "name": "updateFeePeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_hasPoolLimit", "type": "bool" }, { "internalType": "uint256", "name": "_poolCap", "type": "uint256" } ], "name": "updatePoolCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_hasUserLimit", "type": "bool" }, { "internalType": "uint256", "name": "_poolLimitPerUser", "type": "uint256" } ], "name": "updatePoolLimitPerUser", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_rewardPerBlock", "type": "uint256" }, { "internalType": "contract ERC20", "name": "_token", "type": "address" } ], "name": "updateRewardPerBlock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_startStakingBlock", "type": "uint256" }, { "internalType": "uint256", "name": "_endStakingBlock", "type": "uint256" } ], "name": "updateStakingBlocks", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_startBlock", "type": "uint256" }, { "internalType": "uint256", "name": "_bonusEndBlock", "type": "uint256" } ], "name": "updateStartAndEndBlocks", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_startUnStakingBlock", "type": "uint256" } ], "name": "updateUnStakingBlock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newFee", "type": "uint256" } ], "name": "updateUnstakingFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userInfo", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "lastStakingBlock", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_caller", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdraw2", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405180604001604052806012815260200171105410481054104814dd185c9d08141bdbdb60721b815250604051806040016040528060048152602001637841504160e01b81525060006200006c6200011a60201b60201c565b9050620000786200011a565b600080546001600160a01b0319166001600160a01b03928316178155604051918316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060016003558151620000db9060079060208501906200011e565b508051620000f19060089060208401906200011e565b505060098054601260ff1990911617610100600160a81b031916610100330217905550620001ba565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200016157805160ff191683800117855562000191565b8280016001018555821562000191579182015b828111156200019157825182559160200191906001019062000174565b506200019f929150620001a3565b5090565b5b808211156200019f5760008155600101620001a4565b61586b80620001ca6000396000f3fe608060405234801561001057600080fd5b50600436106104075760003560e01c806380dc067211610220578063b6b55f2511610130578063dd467064116100b8578063e6b8b33c11610087578063e6b8b33c1461105b578063ea6e2beb14611063578063ee5896361461106b578063f2fde38b14611099578063f40f0f52146110bf57610407565b8063dd46706414610c6b578063dd62ed3e14610c88578063e5bddf9214610cb6578063e65896c914610f9c57610407565b8063cc7a262e116100ff578063cc7a262e14610be6578063d2c35ce814610bee578063db13b24f14610c14578063db2e21bc14610c40578063db7cbc6d14610c4857610407565b8063b6b55f2514610bb1578063b954dc5714610bce578063bdaf73bc14610bd6578063c415b95c14610bde57610407565b8063a0b40905116101b3578063a6d37a4d11610182578063a6d37a4d14610ab7578063a9059cbb14610ad4578063a9f8d18114610b00578063ad99b27714610b08578063b5206edd14610b1057610407565b8063a0b4090514610a56578063a457c2d714610a7b578063a48264ff14610aa7578063a69df4b514610aaf57610407565b80639513997f116101ef5780639513997f146109e057806395d89b4114610a0357806396acfa1e14610a0b5780639713117214610a2857610407565b806380dc06721461099c5780638da5cb5b146109a457806392e8990e146109ac5780639391f989146109b457610407565b80632e1a7d4d1161031b57806345deeda6116102ae578063602bc62b1161027d578063602bc62b1461092357806366fe9f8a1461092b578063684dc54a1461093357806370a08231146109595780637bb7bed11461097f57610407565b806345deeda61461085557806348cd4cb11461085d5780634d73056b146108655780635bc335fa1461088257610407565b806339509351116102ea57806339509351146107cf5780633b0c74cf146107fb5780633d509c97146108035780633f138d4b1461082957610407565b80632e1a7d4d1461076f578063313ce5671461078c5780633279beab146107aa578063392e53cd146107c757610407565b80630fd4ead91161039e57806318b297cc1161036d57806318b297cc146106c55780631959a002146106cd5780631aed65531461070c5780631cdcdec01461071457806323b872dd1461073957610407565b80630fd4ead91461059e57806312fde4b71461068f57806318160ddd146106975780631830ed571461069f57610407565b806309f6ae14116103da57806309f6ae14146105255780630a122c8a146105445780630cb5503b1461054c5780630e3802e91461057257610407565b806302055d2d1461040c57806304360c811461044457806306fdde0314610468578063095ea7b3146104e5575b600080fd5b6104326004803603602081101561042257600080fd5b50356001600160a01b03166110e5565b60408051918252519081900360200190f35b61044c611103565b604080516001600160a01b039092168252519081900360200190f35b610470611117565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104aa578181015183820152602001610492565b50505050905090810190601f1680156104d75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610511600480360360408110156104fb57600080fd5b506001600160a01b0381351690602001356111ad565b604080519115158252519081900360200190f35b6105426004803603602081101561053b57600080fd5b50356111cb565b005b610432611228565b6104326004803603602081101561056257600080fd5b50356001600160a01b031661122e565b6105426004803603604081101561058857600080fd5b506001600160a01b038135169060200135611240565b61063f600480360360208110156105b457600080fd5b810190602081018135600160201b8111156105ce57600080fd5b8201836020820111156105e057600080fd5b803590602001918460208302840111600160201b8311171561060157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611520945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561067b578181015183820152602001610663565b505050509050019250505060405180910390f35b61044c6115d3565b6104326115e2565b610432600480360360208110156106b557600080fd5b50356001600160a01b03166115e8565b6104326115fa565b6106f3600480360360208110156106e357600080fd5b50356001600160a01b0316611600565b6040805192835260208301919091528051918290030190f35b610432611619565b6105426004803603604081101561072a57600080fd5b5080351515906020013561161f565b6105116004803603606081101561074f57600080fd5b506001600160a01b03813581169160208101359091169060400135611729565b6105426004803603602081101561078557600080fd5b50356117b0565b610794611ba6565b6040805160ff9092168252519081900360200190f35b610542600480360360208110156107c057600080fd5b5035611baf565b610511611cb7565b610511600480360360408110156107e557600080fd5b506001600160a01b038135169060200135611cc7565b610432611d15565b6105426004803603602081101561081957600080fd5b50356001600160a01b0316611d1b565b6105426004803603604081101561083f57600080fd5b506001600160a01b038135169060200135611fa4565b6104326121a3565b6104326121a9565b6105426004803603602081101561087b57600080fd5b50356121af565b61063f6004803603602081101561089857600080fd5b810190602081018135600160201b8111156108b257600080fd5b8201836020820111156108c457600080fd5b803590602001918460208302840111600160201b831117156108e557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506122c1945050505050565b61043261236d565b610432612373565b6104326004803603602081101561094957600080fd5b50356001600160a01b0316612379565b6104326004803603602081101561096f57600080fd5b50356001600160a01b031661238b565b61044c6004803603602081101561099557600080fd5b50356123a6565b6105426123cd565b61044c61242b565b61051161243a565b610542600480360360408110156109ca57600080fd5b50803590602001356001600160a01b031661244a565b610542600480360360408110156109f657600080fd5b5080359060200135612557565b6104706126fb565b61054260048036036020811015610a2157600080fd5b503561275c565b61043260048036036040811015610a3e57600080fd5b506001600160a01b038135811691602001351661295e565b61054260048036036040811015610a6c57600080fd5b50803515159060200135612b47565b61051160048036036040811015610a9157600080fd5b506001600160a01b038135169060200135612c51565b610511612cb9565b610542612cc9565b61054260048036036020811015610acd57600080fd5b5035612dc9565b61051160048036036040811015610aea57600080fd5b506001600160a01b038135169060200135612e26565b610432612e3a565b610432612e40565b61063f60048036036020811015610b2657600080fd5b810190602081018135600160201b811115610b4057600080fd5b820183602082011115610b5257600080fd5b803590602001918460208302840111600160201b83111715610b7357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612e46945050505050565b61054260048036036020811015610bc757600080fd5b5035612ef2565b6104326133d8565b6104326133de565b61044c6133e4565b61044c6133f3565b61054260048036036020811015610c0457600080fd5b50356001600160a01b0316613402565b61054260048036036040811015610c2a57600080fd5b506001600160a01b0381351690602001356134df565b6105426137cc565b61054260048036036040811015610c5e57600080fd5b508035906020013561392b565b61054260048036036020811015610c8157600080fd5b5035613b0b565b61043260048036036040811015610c9e57600080fd5b506001600160a01b0381358116916020013516613bbb565b6105426004803603610180811015610ccd57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610cf757600080fd5b820183602082011115610d0957600080fd5b803590602001918460208302840111600160201b83111715610d2a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d7957600080fd5b820183602082011115610d8b57600080fd5b803590602001918460208302840111600160201b83111715610dac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610dfb57600080fd5b820183602082011115610e0d57600080fd5b803590602001918460208302840111600160201b83111715610e2e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e7d57600080fd5b820183602082011115610e8f57600080fd5b803590602001918460208302840111600160201b83111715610eb057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092958435959094909350604081019250602001359050600160201b811115610f0757600080fd5b820183602082011115610f1957600080fd5b803590602001918460208302840111600160201b83111715610f3a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b03833581169450602084013593604081013593506060810135151592506080013516613be6565b610fc260048036036020811015610fb257600080fd5b50356001600160a01b0316614107565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611006578181015183820152602001610fee565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561104557818101518382015260200161102d565b5050505090500194505050505060405180910390f35b61043261423e565b610432614244565b6104326004803603604081101561108157600080fd5b506001600160a01b038135811691602001351661424a565b610542600480360360208110156110af57600080fd5b50356001600160a01b0316614279565b610fc2600480360360208110156110d557600080fd5b50356001600160a01b0316614371565b6001600160a01b03166000908152601b602052604090206001015490565b60095461010090046001600160a01b031681565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111a35780601f10611178576101008083540402835291602001916111a3565b820191906000526020600020905b81548152906001019060200180831161118657829003601f168201915b5050505050905090565b60006111c16111ba6147ac565b84846147b0565b5060015b92915050565b6111d36147ac565b6000546001600160a01b03908116911614611223576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b600e55565b600c5481565b60176020526000908152604090205481565b6112486147ac565b6000546001600160a01b03908116911614611298576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b6001600160a01b0382166112ea576040805162461bcd60e51b815260206004820152601460248201527326bab9ba1031329030903932b0b6103a37b5b2b760611b604482015290519081900360640190fd5b6001600160a01b03821630141561133f576040805162461bcd60e51b815260206004820152601460248201527326bab9ba1031329030903932b0b6103a37b5b2b760611b604482015290519081900360640190fd5b60008061134d84601961489c565b915091508115611393576040805162461bcd60e51b815260206004820152600c60248201526b546f6b656e2065786973747360a01b604482015290519081900360640190fd5b6019805460018101825560009182527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0319166001600160a01b0387169081179091556040805163313ce56760e01b8152905163313ce56791600480820192602092909190829003018186803b15801561141657600080fd5b505afa15801561142a573d6000803e3d6000fd5b505050506040513d602081101561144057600080fd5b505160ff169050601e8110611495576040805162461bcd60e51b815260206004820152601660248201527504d75737420626520696e666572696f7220746f2033360541b604482015290519081900360640190fd5b6114a0601e826148ff565b6001600160a01b0386166000818152601860208181526040808420600a96870a8155601783528185208b905595825280842093909355908152925481519283529282018790528181019290925290517f06503357b3526cae94a5cae2393d03eeba70357ff6c54870b54563fb0b493b579181900360600190a15050505050565b606080825167ffffffffffffffff8111801561153b57600080fd5b50604051908082528060200260200182016040528015611565578160200160208202803683370190505b50905060005b83518110156115cc57600a600085838151811061158457fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106115b957fe5b602090810291909101015260010161156b565b5092915050565b6010546001600160a01b031690565b60065490565b60186020526000908152604090205481565b600d5481565b601b602052600090815260409020805460019091015482565b60115481565b6116276147ac565b6000546001600160a01b03908116911614611677576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b600954600160b01b900460ff166116c3576040805162461bcd60e51b815260206004820152600b60248201526a135d5cdd081899481cd95d60aa1b604482015290519081900360640190fd5b81156116d35760158190556116f0565b6009805460ff60b01b1916600160b01b8415150217905560006015555b60155460408051918252517ff20b09605c6beac7559c601059ac7e4205b9fcd5d28bd1ecf35f0977632d1e309181900360200190a15050565b6000611736848484614948565b6117a6846117426147ac565b6117a185604051806060016040528060288152602001615717602891396001600160a01b038a166000908152600560205260408120906117806147ac565b6001600160a01b031681526020810191909152604001600020549190614aa5565b6147b0565b5060019392505050565b600260035414156117f6576040805162461bcd60e51b815260206004820152601f6024820152600080516020615532833981519152604482015290519081900360640190fd5b6002600355336000908152601b6020526040902081156118635743600d541115611863576040805162461bcd60e51b8152602060048201526019602482015278155b9cdd185ada5b99c81a185cc81b9bdd081cdd185c9d1959603a1b604482015290519081900360640190fd5b80548211156118b9576040805162461bcd60e51b815260206004820152601b60248201527f416d6f756e7420746f20776974686472617720746f6f20686967680000000000604482015290519081900360640190fd5b6118c1614b3c565b6000805b6019548110156119d457611998836002016000601984815481106118e557fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181205460198054919261199292601892908790811061192257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181205460198054919261198c92600a92908990811061195f57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054885490614cc2565b90614d1b565b906148ff565b915081156119cc576119cc601982815481106119b057fe5b6000918252602090912001546001600160a01b03163384614d5d565b6001016118c5565b508215611a9a5781546119e790846148ff565b82556119f33384614ef5565b604080518082019091528254815260018301546020820152611a16908490614ff1565b601a546040805163a9059cbb60e01b81523360048201526024810184905290519295506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b158015611a6d57600080fd5b505af1158015611a81573d6000803e3d6000fd5b505050506040513d6020811015611a9757600080fd5b50505b60005b601954811015611b6557611b256018600060198481548110611abb57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181205460198054919261198c92600a929087908110611af857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054865490614cc2565b83600201600060198481548110611b3857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902055600101611a9d565b5060408051848152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a25050600160035550565b60095460ff1690565b611bb76147ac565b6000546001600160a01b03908116911614611c07576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b60005b601954811015611cb35760198181548110611c2157fe5b60009182526020808320909101546040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b039092169363a9059cbb9360448084019491939192918390030190829087803b158015611c7f57600080fd5b505af1158015611c93573d6000803e3d6000fd5b505050506040513d6020811015611ca957600080fd5b5050600101611c0a565b5050565b600954600160b81b900460ff1681565b60006111c1611cd46147ac565b846117a18560056000611ce56147ac565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906150f2565b600b5481565b611d236147ac565b6000546001600160a01b03908116911614611d73576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b6001600160a01b038116611dc5576040805162461bcd60e51b815260206004820152601460248201527326bab9ba1031329030903932b0b6103a37b5b2b760611b604482015290519081900360640190fd5b6001600160a01b038116301415611e1a576040805162461bcd60e51b815260206004820152601460248201527326bab9ba1031329030903932b0b6103a37b5b2b760611b604482015290519081900360640190fd5b601954611e67576040805162461bcd60e51b81526020600482015260166024820152754c697374206f6620746f6b656e20697320656d70747960501b604482015290519081900360640190fd5b600080611e7583601961489c565b9150915081611ebf576040805162461bcd60e51b815260206004820152601160248201527021b0b73737ba103334b732103a37b5b2b760791b604482015290519081900360640190fd5b60006060611ece83601961514c565b80519193509150611ee6906019906020840190615469565b5081611f39576040805162461bcd60e51b815260206004820152601b60248201527f52656d6f766520746f6b656e20756e7375636365737366756c6c790000000000604482015290519081900360640190fd5b6001600160a01b038516600081815260186020908152604080832083905560178252808320839055600a825280832092909255815192835290517f36bd04094fa067bb9471a8fbdb0a6e8a43424a2566ad3a740c88973fa40a31189281900390910190a15050505050565b611fac6147ac565b6000546001600160a01b03908116911614611ffc576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b601a546001600160a01b0383811691161415612058576040805162461bcd60e51b815260206004820152601660248201527521b0b73737ba1031329039ba30b5b2b2103a37b5b2b760511b604482015290519081900360640190fd5b60005b6019548110156120df576019818154811061207257fe5b6000918252602090912001546001600160a01b03848116911614156120d7576040805162461bcd60e51b815260206004820152601660248201527521b0b73737ba103132903932bbb0b932103a37b5b2b760511b604482015290519081900360640190fd5b60010161205b565b506040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561212f57600080fd5b505af1158015612143573d6000803e3d6000fd5b505050506040513d602081101561215957600080fd5b5050604080516001600160a01b03841681526020810183905281517f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab78129929181900390910190a15050565b600f5481565b60125481565b6121b76147ac565b6000546001600160a01b03908116911614612207576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b80600b5411156122485760405162461bcd60e51b81526004018080602001828103825260258152602001806157c96025913960400191505060405180910390fd5b8043106122865760405162461bcd60e51b81526004018080602001828103825260348152602001806155e56034913960400191505060405180910390fd5b600d8190556040805182815290517f262ce5e14c2c9659a43ec74362996b8d47a145b1e362b9c572cf22bfe9f0974b9181900360200190a150565b606080825167ffffffffffffffff811180156122dc57600080fd5b50604051908082528060200260200182016040528015612306578160200160208202803683370190505b50905060005b83518110156115cc576018600085838151811061232557fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061235a57fe5b602090810291909101015260010161230c565b60025490565b60145481565b600a6020526000908152604090205481565b6001600160a01b031660009081526004602052604090205490565b601981815481106123b357fe5b6000918252602090912001546001600160a01b0316905081565b6123d56147ac565b6000546001600160a01b03908116911614612425576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b43601155565b6000546001600160a01b031690565b600954600160a81b900460ff1681565b6124526147ac565b6000546001600160a01b039081169116146124a2576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b6000806124b083601961489c565b91509150816124fa576040805162461bcd60e51b815260206004820152601160248201527021b0b73737ba103334b732103a37b5b2b760791b604482015290519081900360640190fd5b6001600160a01b03831660008181526017602090815260409182902087905581518781529081019290925280517f27294c6fc8caeb45b3e5a0afcc3c67ed74d9d5b89140f30d751fc44928aff4e49281900390910190a150505050565b61255f6147ac565b6000546001600160a01b039081169116146125af576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b8082106125ed5760405162461bcd60e51b815260040180806020018281038252602e81526020018061563f602e913960400191505060405180910390fd5b81431061262b5760405162461bcd60e51b81526004018080602001828103825260308152602001806156c66030913960400191505060405180910390fd5b81600b54111561266c5760405162461bcd60e51b81526004018080602001828103825260218152602001806155116021913960400191505060405180910390fd5b80600c5411156126ad5760405162461bcd60e51b81526004018080602001828103825260298152602001806155746029913960400191505060405180910390fd5b601282905560118190556013829055604080518381526020810183905281517f7cd0ab87d19036f3dfadadb232c78aa4879dda3f0c994a9d637532410ee2ce06929181900390910190a15050565b60088054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111a35780601f10611178576101008083540402835291602001916111a3565b6127646147ac565b6000546001600160a01b039081169116146127b4576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b60165460ff1661280b576040805162461bcd60e51b815260206004820152601960248201527f54686520706f6f6c206973206e6f742072656d6f7661626c6500000000000000604482015290519081900360640190fd5b601a54604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561285557600080fd5b505afa158015612869573d6000803e3d6000fd5b505050506040513d602081101561287f57600080fd5b505110156128d4576040805162461bcd60e51b815260206004820152601b60248201527f416d6f756e74206578636565647320706f6f6c2062616c616e63650000000000604482015290519081900360640190fd5b801561295b57601a546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561292e57600080fd5b505af1158015612942573d6000803e3d6000fd5b505050506040513d602081101561295857600080fd5b50505b50565b600080600061296e84601961489c565b9150915081612982576000925050506111c5565b6001600160a01b038086166000908152601b60209081526040808320601a5482516370a0823160e01b81523060048201529251919516926370a082319260248082019391829003018186803b1580156129da57600080fd5b505afa1580156129ee573d6000803e3d6000fd5b505050506040513d6020811015612a0457600080fd5b505160135490915060009043118015612a1c57508115155b15612af7576000612a2f601354436152d8565b6001600160a01b03891660009081526017602052604081205491925090612a57908390614cc2565b6001600160a01b038a1660009081526018602052604081205491925090612aa890612a8990879061198c908690614cc2565b6001600160a01b038c166000908152600a6020526040902054906150f2565b6001600160a01b038b1660009081526002880160209081526040808320546018909252909120548854929350612ae792611992919061198c9086614cc2565b98506111c5975050505050505050565b6001600160a01b03871660009081526002840160209081526040808320546018835281842054600a9093529220548554612b3b939261199292909161198c91614cc2565b955050505050506111c5565b612b4f6147ac565b6000546001600160a01b03908116911614612b9f576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b600954600160a81b900460ff16612beb576040805162461bcd60e51b815260206004820152600b60248201526a135d5cdd081899481cd95d60aa1b604482015290519081900360640190fd5b8115612bfb576014819055612c18565b6009805460ff60a81b1916600160a81b8415150217905560006014555b60145460408051918252517f241f67ee5f41b7a5cabf911367329be7215900f602ebfc47f89dce2a6bcd847c9181900360200190a15050565b60006111c1612c5e6147ac565b846117a1856040518060600160405280602581526020016158116025913960056000612c886147ac565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190614aa5565b600954600160b01b900460ff1681565b6001546001600160a01b03163314612d125760405162461bcd60e51b81526004018080602001828103825260238152602001806157ee6023913960400191505060405180910390fd5b6002544211612d68576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b612dd16147ac565b6000546001600160a01b03908116911614612e21576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b600f55565b60006111c1612e336147ac565b8484614948565b60135481565b600c5490565b606080825167ffffffffffffffff81118015612e6157600080fd5b50604051908082528060200260200182016040528015612e8b578160200160208202803683370190505b50905060005b83518110156115cc5760176000858381518110612eaa57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110612edf57fe5b6020908102919091010152600101612e91565b60026003541415612f38576040805162461bcd60e51b815260206004820152601f6024820152600080516020615532833981519152604482015290519081900360640190fd5b6002600355336000908152601b60205260409020600b54431015612fa3576040805162461bcd60e51b815260206004820152601760248201527f5374616b696e6720686173206e6f742073746172746564000000000000000000604482015290519081900360640190fd5b43600c541015612fee576040805162461bcd60e51b815260206004820152601160248201527014dd185ada5b99c81a185cc8195b991959607a1b604482015290519081900360640190fd5b600954600160b01b900460ff16156130cf57601a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561304b57600080fd5b505afa15801561305f573d6000803e3d6000fd5b505050506040513d602081101561307557600080fd5b505160155490915061308784836150f2565b11156130cd576040805162461bcd60e51b815260206004820152601060248201526f141bdbdb0818d85c081c995858da195960821b604482015290519081900360640190fd5b505b600954600160a81b900460ff16156131445760145481546130f19084906150f2565b1115613144576040805162461bcd60e51b815260206004820152601760248201527f5573657220616d6f756e742061626f7665206c696d6974000000000000000000604482015290519081900360640190fd5b61314c614b3c565b805415613222576000805b60195481101561321f57613177836002016000601984815481106118e557fe5b91508115613217576019818154811061318c57fe5b60009182526020808320909101546040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b039092169363a9059cbb9360448084019491939192918390030190829087803b1580156131ea57600080fd5b505af11580156131fe573d6000803e3d6000fd5b505050506040513d602081101561321457600080fd5b50505b600101613157565b50505b81156132c757805461323490836150f2565b8155601a54604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561329057600080fd5b505af11580156132a4573d6000803e3d6000fd5b505050506040513d60208110156132ba57600080fd5b506132c790503383615312565b60005b6019548110156133925761335260186000601984815481106132e857fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181205460198054919261198c92600a92908790811061332557fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054855490614cc2565b8260020160006019848154811061336557fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556001016132ca565b5043600182015560408051838152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250506001600355565b60155481565b600e5490565b6010546001600160a01b031681565b601a546001600160a01b031681565b61340a6147ac565b6000546001600160a01b0390811691161461345a576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b6010546001600160a01b03828116911614156134bd576040805162461bcd60e51b815260206004820152601960248201527f416c7265616479207468652066656520636f6c6c6563746f7200000000000000604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60026003541415613525576040805162461bcd60e51b815260206004820152601f6024820152600080516020615532833981519152604482015290519081900360640190fd5b60026003556001600160a01b0382166000908152601b60205260409020811561359b5743600d54111561359b576040805162461bcd60e51b8152602060048201526019602482015278155b9cdd185ada5b99c81a185cc81b9bdd081cdd185c9d1959603a1b604482015290519081900360640190fd5b80548211156135f1576040805162461bcd60e51b815260206004820152601b60248201527f416d6f756e7420746f20776974686472617720746f6f20686967680000000000604482015290519081900360640190fd5b6135f9614b3c565b6000805b6019548110156136595761361d836002016000601984815481106118e557fe5b91508115613651576136516019828154811061363557fe5b6000918252602090912001546001600160a01b03168684614d5d565b6001016135fd565b50821561372057815461366c90846148ff565b82556136788484614ef5565b60408051808201909152825481526001830154602082015261369b908490614ff1565b601a546040805163a9059cbb60e01b81526001600160a01b03888116600483015260248201859052915193965091169163a9059cbb916044808201926020929091908290030181600087803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b505050506040513d602081101561371d57600080fd5b50505b60005b601954811015613781576137416018600060198481548110611abb57fe5b8360020160006019848154811061375457fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902055600101613723565b506040805184815290516001600160a01b038616917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a2505060016003555050565b60026003541415613812576040805162461bcd60e51b815260206004820152601f6024820152600080516020615532833981519152604482015290519081900360640190fd5b6002600355336000908152601b60205260409020600d54431015613879576040805162461bcd60e51b8152602060048201526019602482015278155b9cdd185ada5b99c81a185cc81b9bdd081cdd185c9d1959603a1b604482015290519081900360640190fd5b805460008083555b6019548110156138cd576000836002016000601984815481106138a057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902055600101613881565b5080156138eb57601a546138eb906001600160a01b03163383614d5d565b8154604080519182525133917f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695919081900360200190a250506001600355565b6139336147ac565b6000546001600160a01b03908116911614613983576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b6012548211156139c45760405162461bcd60e51b81526004018080602001828103825260218152602001806155116021913960400191505060405180910390fd5b600d54821115613a055760405162461bcd60e51b81526004018080602001828103825260258152602001806157c96025913960400191505060405180910390fd5b814310613a435760405162461bcd60e51b81526004018080602001828103825260328152602001806156946032913960400191505060405180910390fd5b808210613a815760405162461bcd60e51b815260040180806020018281038252602781526020018061566d6027913960400191505060405180910390fd5b601154811115613ac25760405162461bcd60e51b81526004018080602001828103825260298152602001806155746029913960400191505060405180910390fd5b600b829055600c819055604080518381526020810183905281517f8828b38a61bb0956be8f1bce300a8bebc12342263b6603b8d3aee677b815a348929181900390910190a15050565b613b136147ac565b6000546001600160a01b03908116911614613b63576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815542820160025560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b600954600160b81b900460ff1615613c3b576040805162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60095461010090046001600160a01b03163314613c8d576040805162461bcd60e51b815260206004820152600b60248201526a4e6f7420666163746f727960a81b604482015290519081900360640190fd5b89518b5114613cd5576040805162461bcd60e51b815260206004820152600f60248201526e09ad2e6dac2e8c6d040d8cadccee8d608b1b604482015290519081900360640190fd5b6001600160a01b038c16613d22576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b038516613d6f576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6001600160a01b038116613dbc576040805162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015290519081900360640190fd5b6009805460ff60b81b1916600160b81b179055601a80546001600160a01b038e166001600160a01b03199091161790558a51613dff9060199060208e0190615469565b5088600081518110613e0d57fe5b602002602001015160128190555088600181518110613e2857fe5b602002602001015160118190555087600181518110613e4357fe5b602002602001015188600081518110613e5857fe5b602002602001015110613e9c5760405162461bcd60e51b815260040180806020018281038252602781526020018061566d6027913960400191505060405180910390fd5b87600081518110613ea957fe5b6020026020010151600b8190555087600181518110613ec457fe5b6020026020010151600c8190555086600d8190555085600081518110613ee657fe5b6020026020010151600e8190555085600181518110613f0157fe5b6020908102919091010151600f55601080546001600160a01b0319166001600160a01b0387161790556016805460ff19168315151790558315613f57576009805460ff60a81b1916600160a81b17905560148490555b8215613f76576009805460ff60b01b1916600160b01b17905560158390555b6000805b8c518110156140e8578c8181518110613f8f57fe5b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015613fcf57600080fd5b505afa158015613fe3573d6000803e3d6000fd5b505050506040513d6020811015613ff957600080fd5b505160ff169150601e821061404e576040805162461bcd60e51b815260206004820152601660248201527504d75737420626520696e666572696f7220746f2033360541b604482015290519081900360640190fd5b614059601e836148ff565b600a0a601860008f848151811061406c57fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508b81815181106140a457fe5b6020026020010151601760008f84815181106140bc57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055600101613f7a565b506012546013556140f882614279565b50505050505050505050505050565b606080606060198054905067ffffffffffffffff8111801561412857600080fd5b50604051908082528060200260200182016040528015614152578160200160208202803683370190505b506001600160a01b0385166000908152601b602052604081209192505b6019548110156141d2578160020160006019838154811061418c57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483518490839081106141bf57fe5b602090810291909101015260010161416f565b506019828180548060200260200160405190810160405280929190818152602001828054801561422b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161420d575b505050505091509350935050505b915091565b600f5490565b600e5481565b6001600160a01b039182166000908152601b602090815260408083209390941682526002909201909152205490565b6142816147ac565b6000546001600160a01b039081169116146142d1576040805162461bcd60e51b8152602060048201819052602482015260008051602061573f833981519152604482015290519081900360640190fd5b6001600160a01b0381166143165760405162461bcd60e51b815260040180806020018281038252602681526020018061559d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000908152601b60209081526040808320601a5482516370a0823160e01b815230600482015292516060968796939593949216926370a082319260248082019391829003018186803b1580156143d157600080fd5b505afa1580156143e5573d6000803e3d6000fd5b505050506040513d60208110156143fb57600080fd5b505160195490915060609067ffffffffffffffff8111801561441c57600080fd5b50604051908082528060200260200182016040528015614446578160200160208202803683370190505b5090506013544311801561445957508115155b1561465757600061446c601354436152d8565b905060008060005b6019548110156145e8576144be601760006019848154811061449257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548590614cc2565b92506145436145078761198c60186000601987815481106144db57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548790614cc2565b600a60006019858154811061451857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054906150f2565b91506145c98760020160006019848154811061455b57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181205460198054919261199292601892908790811061459857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548a5461198c9087614cc2565b8582815181106145d557fe5b6020908102919091010152600101614474565b508360198080548060200260200160405190810160405280929190818152602001828054801561464157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311614623575b5050505050905097509750505050505050614239565b60005b601954811015614740576147218460020160006019848154811061467a57fe5b60009182526020808320909101546001600160a01b031683528201929092526040018120546019805491926119929260189290879081106146b757fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181205460198054919261198c92600a9290899081106146f457fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054895490614cc2565b82828151811061472d57fe5b602090810291909101015260010161465a565b508060198080548060200260200160405190810160405280929190818152602001828054801561479957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161477b575b5050505050905094509450505050614239565b3390565b6001600160a01b0383166147f55760405162461bcd60e51b81526004018080602001828103825260248152602001806157a56024913960400191505060405180910390fd5b6001600160a01b03821661483a5760405162461bcd60e51b81526004018080602001828103825260228152602001806155c36022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008060005b83548110156148ef57846001600160a01b03168482815481106148c157fe5b6000918252602090912001546001600160a01b031614156148e7576001925090506148f8565b6001016148a2565b50600080915091505b9250929050565b600061494183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614aa5565b9392505050565b6001600160a01b03831661498d5760405162461bcd60e51b81526004018080602001828103825260258152602001806157806025913960400191505060405180910390fd5b6001600160a01b0382166149d25760405162461bcd60e51b81526004018080602001828103825260238152602001806154ee6023913960400191505060405180910390fd5b6149dd838383612958565b614a1a81604051806060016040528060268152602001615619602691396001600160a01b0386166000908152600460205260409020549190614aa5565b6001600160a01b038085166000908152600460205260408082209390935590841681522054614a4990826150f2565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115614b345760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614af9578181015183820152602001614ae1565b50505050905090810190601f168015614b265780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6013544311614b4a57614cc0565b601a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015614b9557600080fd5b505afa158015614ba9573d6000803e3d6000fd5b505050506040513d6020811015614bbf57600080fd5b5051905080614bd2575043601355614cc0565b6000614be0601354436152d8565b90506000805b601954811015614cb757614c306017600060198481548110614c0457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490614cc2565b9150614c796145078561198c6018600060198781548110614c4d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548690614cc2565b600a600060198481548110614c8a57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902055600101614be6565b50504360135550505b565b600082614cd1575060006111c5565b82820282848281614cde57fe5b04146149415760405162461bcd60e51b81526004018080602001828103825260218152602001806156f66021913960400191505060405180910390fd5b600061494183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615404565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614dac57600080fd5b505afa158015614dc0573d6000803e3d6000fd5b505050506040513d6020811015614dd657600080fd5b5051905080821115614e6b57836001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015614e3957600080fd5b505af1158015614e4d573d6000803e3d6000fd5b505050506040513d6020811015614e6357600080fd5b50614eef9050565b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015614ec257600080fd5b505af1158015614ed6573d6000803e3d6000fd5b505050506040513d6020811015614eec57600080fd5b50505b50505050565b6001600160a01b038216614f3a5760405162461bcd60e51b815260040180806020018281038252602181526020018061575f6021913960400191505060405180910390fd5b614f4682600083612958565b614f8381604051806060016040528060228152602001615552602291396001600160a01b0385166000908152600460205260409020549190614aa5565b6001600160a01b038316600090815260046020526040902055600654614fa990826148ff565b6006556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60008061500b8360200151436148ff90919063ffffffff16565b9050600f546000148061502d57506000600f5411801561502d575080600f5410155b156150ea57600061504f61271061198c600e5488614cc290919063ffffffff16565b601a546010546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b1580156150aa57600080fd5b505af11580156150be573d6000803e3d6000fd5b505050506040513d60208110156150d457600080fd5b506150e1905085826148ff565b925050506111c5565b509192915050565b600082820183811015614941576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b805460009060609084106151c257600083808054806020026020016040519081016040528092919081815260200182805480156151b257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311615194575b50505050509050915091506148f8565b835b83546000190181101561523b578381600101815481106151e057fe5b9060005260206000200160009054906101000a90046001600160a01b031684828154811061520a57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556001016151c4565b508280548061524657fe5b6001900381819060005260206000200160006101000a8154906001600160a01b0302191690559055600183808054806020026020016040519081016040528092919081815260200182805480156152c657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116152a8575b50505050509050915091509250929050565b600060115482116152f4576152ed82846148ff565b90506111c5565b6011548310615305575060006111c5565b6011546152ed90846148ff565b6001600160a01b03821661536d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61537960008383612958565b60065461538690826150f2565b6006556001600160a01b0382166000908152600460205260409020546153ac90826150f2565b6001600160a01b03831660008181526004602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081836154535760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614af9578181015183820152602001614ae1565b50600083858161545f57fe5b0495945050505050565b8280548282559060005260206000209081019282156154be579160200282015b828111156154be57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615489565b506154ca9291506154ce565b5090565b5b808211156154ca5780546001600160a01b03191681556001016154cf56fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735374616b696e6720626c6f636b206578636565647320737461727420626c6f636b5265656e7472616e637947756172643a207265656e7472616e742063616c6c0045524332303a206275726e20616d6f756e7420657863656564732062616c616e6365456e64207374616b696e6720626c6f636b206578636565647320626f6e757320656e6420626c6f636b4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734e657720556e5374616b696e67426c6f636b206d75737420626520686967686572207468616e2063757272656e7420626c6f636b45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e6577207374617274426c6f636b206d757374206265206c6f776572207468616e206e657720656e64426c6f636b5374616b696e6720626c6f636b206578636565647320656e64207374616b696e6720626c6f636b4e6577207374616b696e67426c6f636b206d75737420626520686967686572207468616e2063757272656e7420626c6f636b4e6577207374617274426c6f636b206d75737420626520686967686572207468616e2063757272656e7420626c6f636b536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735374616b696e6720626c6f636b206578636565647320756e7374616b696e6720626c6f636b596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e4939e451ed00594a10d612fd8d34caf8216bec5d3908bb47d4f25f52e42269464736f6c634300060c0033