More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
StakingPool
Compiler Version
v0.4.25+commit.59dbf8f1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-08 */ /** *Submitted for verification at Etherscan.io on 2021-03-30 */ pragma solidity 0.4.25; /** * token contract functions */ contract Ierc20 { function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function approveAndCall(address spender, uint tokens, bytes data) external returns (bool success); function transferFrom(address from, address to, uint256 value) external returns (bool); } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } function ceil(uint256 a, uint256 m) internal pure returns (uint256) { uint256 c = add(a,m); uint256 d = sub(c,1); return mul(div(d,m),m); } } contract Owned { address public owner; event OwnerChanges(address newOwner); constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner external { require(newOwner != address(0), "New owner is the zero address"); owner = newOwner; emit OwnerChanges(newOwner); } } contract StakingPool is Owned { using SafeMath for uint256; Ierc20 public tswap; Ierc20 public rewardToken; uint256 poolDuration; uint256 totalRewards; uint256 rewardsWithdrawn; uint256 poolStartTime; uint256 poolEndTime; uint256 totalStaked; // Represents a single stake for a user. A user may have multiple. struct Stake { uint256 amount; uint256 stakingTime; uint256 lastWithdrawTime; } mapping (address => Stake[]) public userStaking; // Represents total staking of an user struct UserTotals { uint256 totalStaking; uint256 totalStakingTIme; } mapping (address => UserTotals) public userTotalStaking; struct Ris3Rewards { uint256 totalWithdrawn; uint256 lastWithdrawTime; } mapping(address => Ris3Rewards) public userRewardInfo; event OwnerSetReward(uint256 amount); event Staked(address userAddress, uint256 amount); event StakingWithdrawal(address userAddress, uint256 amount); event RewardWithdrawal(address userAddress, uint256 amount); event PoolDurationChange(uint256 poolDuration); /** * Constrctor function */ constructor() public { tswap = Ierc20(0xCC4304A31d09258b0029eA7FE63d032f52e44EFe); rewardToken = Ierc20(0x8D717AB5eaC1016b64C2A7fD04720Fd2D27D1B86); poolDuration = 720 hours; } //Set pool rewards function ownerSetPoolRewards(uint256 _rewardAmount) external onlyOwner { require(poolStartTime == 0, "Pool rewards already set"); require(_rewardAmount > 0, "Cannot create pool with zero amount"); //set total rewards value totalRewards = _rewardAmount; poolStartTime = now; poolEndTime = now + poolDuration; //transfer tokens to contract rewardToken.transferFrom(msg.sender, this, _rewardAmount); emit OwnerSetReward(_rewardAmount); } //Stake function for users to stake SWAP token function stake(uint256 amount) external { require(amount > 0, "Cannot stake 0"); require(now < poolEndTime, "Staking pool is closed"); //staking pool is closed for staking //add value in staking userTotalStaking[msg.sender].totalStaking = userTotalStaking[msg.sender].totalStaking.add(amount); //add new stake Stake memory newStake = Stake(amount, now, 0); userStaking[msg.sender].push(newStake); //add to total staked totalStaked = totalStaked.add(amount); tswap.transferFrom(msg.sender, this, amount); emit Staked(msg.sender, amount); } //compute rewards function computeNewReward(uint256 _rewardAmount, uint256 _stakedAmount, uint256 _stakeTimeSec) private view returns (uint256 _reward) { uint256 rewardPerSecond = totalRewards.mul(1 ether); if (rewardPerSecond != 0 ) { rewardPerSecond = rewardPerSecond.div(poolDuration); } if (rewardPerSecond > 0) { uint256 rewardPerSecForEachTokenStaked = rewardPerSecond.div(totalStaked); uint256 userRewards = rewardPerSecForEachTokenStaked.mul(_stakedAmount).mul(_stakeTimeSec); userRewards = userRewards.div(1 ether); return _rewardAmount.add(userRewards); } else { return 0; } } //calculate your rewards function calculateReward(address _userAddress) public view returns (uint256 _reward) { // all user stakes Stake[] storage accountStakes = userStaking[_userAddress]; // Redeem from most recent stake and go backwards in time. uint256 rewardAmount = 0; uint256 i = accountStakes.length; while (i > 0) { Stake storage userStake = accountStakes[i - 1]; uint256 stakeTimeSec; //check if current time is more than pool ending time if (now > poolEndTime) { stakeTimeSec = poolEndTime.sub(userStake.stakingTime); if(userStake.lastWithdrawTime != 0){ stakeTimeSec = poolEndTime.sub(userStake.lastWithdrawTime); } } else { stakeTimeSec = now.sub(userStake.stakingTime); if(userStake.lastWithdrawTime != 0){ stakeTimeSec = now.sub(userStake.lastWithdrawTime); } } // fully redeem a past stake rewardAmount = computeNewReward(rewardAmount, userStake.amount, stakeTimeSec); i--; } return rewardAmount; } //Withdraw staking and rewards function withdrawStaking(uint256 amount) external { require(amount > 0, "Amount can not be zero"); require(userTotalStaking[msg.sender].totalStaking >= amount, "You are trying to withdaw more than your stake"); // 1. User Accounting Stake[] storage accountStakes = userStaking[msg.sender]; // Redeem from most recent stake and go backwards in time. uint256 sharesLeftToBurn = amount; uint256 rewardAmount = 0; while (sharesLeftToBurn > 0) { Stake storage lastStake = accountStakes[accountStakes.length - 1]; uint256 stakeTimeSec; //check if current time is more than pool ending time if (now > poolEndTime) { stakeTimeSec = poolEndTime.sub(lastStake.stakingTime); if(lastStake.lastWithdrawTime != 0){ stakeTimeSec = poolEndTime.sub(lastStake.lastWithdrawTime); } } else { stakeTimeSec = now.sub(lastStake.stakingTime); if(lastStake.lastWithdrawTime != 0){ stakeTimeSec = now.sub(lastStake.lastWithdrawTime); } } if (lastStake.amount <= sharesLeftToBurn) { // fully redeem a past stake rewardAmount = computeNewReward(rewardAmount, lastStake.amount, stakeTimeSec); sharesLeftToBurn = sharesLeftToBurn.sub(lastStake.amount); accountStakes.length--; } else { // partially redeem a past stake rewardAmount = computeNewReward(rewardAmount, sharesLeftToBurn, stakeTimeSec); lastStake.amount = lastStake.amount.sub(sharesLeftToBurn); lastStake.lastWithdrawTime = now; sharesLeftToBurn = 0; } } //substract value in staking userTotalStaking[msg.sender].totalStaking = userTotalStaking[msg.sender].totalStaking.sub(amount); //substract from total staked totalStaked = totalStaked.sub(amount); //update user rewards info userRewardInfo[msg.sender].totalWithdrawn = userRewardInfo[msg.sender].totalWithdrawn.add(rewardAmount); userRewardInfo[msg.sender].lastWithdrawTime = now; //update total rewards withdrawn rewardsWithdrawn = rewardsWithdrawn.add(rewardAmount); //transfer rewards and tokens rewardToken.transfer(msg.sender, rewardAmount); tswap.transfer(msg.sender, amount); emit RewardWithdrawal(msg.sender, rewardAmount); emit StakingWithdrawal(msg.sender, amount); } //Withdraw rewards function withdrawRewardsOnly() external { uint256 _rwdAmount = calculateReward(msg.sender); require(_rwdAmount > 0, "You do not have enough rewards"); // 1. User Accounting Stake[] storage accountStakes = userStaking[msg.sender]; // Redeem from most recent stake and go backwards in time. uint256 rewardAmount = 0; uint256 i = accountStakes.length; while (i > 0) { Stake storage userStake = accountStakes[i - 1]; uint256 stakeTimeSec; //check if current time is more than pool ending time if (now > poolEndTime) { stakeTimeSec = poolEndTime.sub(userStake.stakingTime); if(userStake.lastWithdrawTime != 0){ stakeTimeSec = poolEndTime.sub(userStake.lastWithdrawTime); } } else { stakeTimeSec = now.sub(userStake.stakingTime); if(userStake.lastWithdrawTime != 0){ stakeTimeSec = now.sub(userStake.lastWithdrawTime); } } // fully redeem a past stake rewardAmount = computeNewReward(rewardAmount, userStake.amount, stakeTimeSec); userStake.lastWithdrawTime = now; i--; } //update user rewards info userRewardInfo[msg.sender].totalWithdrawn = userRewardInfo[msg.sender].totalWithdrawn.add(rewardAmount); userRewardInfo[msg.sender].lastWithdrawTime = now; //update total rewards withdrawn rewardsWithdrawn = rewardsWithdrawn.add(rewardAmount); //transfer rewards rewardToken.transfer(msg.sender, rewardAmount); emit RewardWithdrawal(msg.sender, rewardAmount); } //get staking details by user address function getStakingAmount(address _userAddress) external constant returns (uint256 _stakedAmount) { return userTotalStaking[_userAddress].totalStaking; } //get total rewards collected by user function getTotalRewardCollectedByUser(address userAddress) view external returns (uint256 _totalRewardCollected) { return userRewardInfo[userAddress].totalWithdrawn; } //get total SWAP token staked in the contract function getTotalStaked() external constant returns ( uint256 _totalStaked) { return totalStaked; } //get total rewards in the contract function getTotalRewards() external constant returns ( uint256 _totalRewards) { return totalRewards; } //get pool details function getPoolDetails() external view returns (address _baseToken, address _pairedToken, uint256 _totalRewards, uint256 _rewardsWithdrawn, uint256 _poolStartTime, uint256 _poolEndTime) { return (address(tswap),address(rewardToken),totalRewards,rewardsWithdrawn,poolStartTime,poolEndTime); } //get duration of pools function getPoolDuration() external constant returns (uint256 _poolDuration) { return poolDuration; } //set duration of pools by owner in seconds function setPoolDuration(uint256 _poolDuration) external onlyOwner { poolDuration = _poolDuration; poolEndTime = poolStartTime + _poolDuration; emit PoolDurationChange(_poolDuration); } //get SWAP token address function getSwapAddress() external constant returns (address _swapAddress) { return address(tswap); } //set tswap address function setTswapAddress(address _address) external onlyOwner { tswap = Ierc20(_address); } //set reward token address function setRewardTokenAddress(address _address) external onlyOwner { rewardToken = Ierc20(_address); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_poolDuration","type":"uint256"}],"name":"setPoolDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalStaked","outputs":[{"name":"_totalStaked","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawRewardsOnly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdrawStaking","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userRewardInfo","outputs":[{"name":"totalWithdrawn","type":"uint256"},{"name":"lastWithdrawTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_userAddress","type":"address"}],"name":"getStakingAmount","outputs":[{"name":"_stakedAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSwapAddress","outputs":[{"name":"_swapAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userTotalStaking","outputs":[{"name":"totalStaking","type":"uint256"},{"name":"totalStakingTIme","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"userStaking","outputs":[{"name":"amount","type":"uint256"},{"name":"stakingTime","type":"uint256"},{"name":"lastWithdrawTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setRewardTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setTswapAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"userAddress","type":"address"}],"name":"getTotalRewardCollectedByUser","outputs":[{"name":"_totalRewardCollected","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPoolDetails","outputs":[{"name":"_baseToken","type":"address"},{"name":"_pairedToken","type":"address"},{"name":"_totalRewards","type":"uint256"},{"name":"_rewardsWithdrawn","type":"uint256"},{"name":"_poolStartTime","type":"uint256"},{"name":"_poolEndTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tswap","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_userAddress","type":"address"}],"name":"calculateReward","outputs":[{"name":"_reward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalRewards","outputs":[{"name":"_totalRewards","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPoolDuration","outputs":[{"name":"_poolDuration","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rewardAmount","type":"uint256"}],"name":"ownerSetPoolRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"OwnerSetReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"StakingWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"userAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"RewardWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"poolDuration","type":"uint256"}],"name":"PoolDurationChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanges","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b5060008054600160a060020a0319908116331790915560018054821673cc4304a31d09258b0029ea7fe63d032f52e44efe17905560028054909116738d717ab5eac1016b64c2a7fd04720fd2d27d1b8617905562278d006003556114db806100796000396000f3006080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302a01dc2811461012c5780630917e77614610146578063176089691461016d5780632e0b78f614610182578063360b8ed91461019a57806374363daa146101d457806385811fbf146101f55780638da5cb5b146102265780638db6c1191461023b578063908163021461025c5780639a6acf201461029e5780639ebde781146102bf578063a694fc3a146102e0578063a6b240fe146102f8578063aca34c1114610319578063c9e486531461036d578063d82e396214610382578063e627f2db146103a3578063f2fde38b146103b8578063f7c618c1146103d9578063f7d57b81146103ee578063fbc14bfb14610403575b600080fd5b34801561013857600080fd5b5061014460043561041b565b005b34801561015257600080fd5b5061015b610475565b60408051918252519081900360200190f35b34801561017957600080fd5b5061014461047c565b34801561018e57600080fd5b50610144600435610703565b3480156101a657600080fd5b506101bb600160a060020a0360043516610b75565b6040805192835260208301919091528051918290030190f35b3480156101e057600080fd5b5061015b600160a060020a0360043516610b8e565b34801561020157600080fd5b5061020a610ba9565b60408051600160a060020a039092168252519081900360200190f35b34801561023257600080fd5b5061020a610bb8565b34801561024757600080fd5b506101bb600160a060020a0360043516610bc7565b34801561026857600080fd5b50610280600160a060020a0360043516602435610be0565b60408051938452602084019290925282820152519081900360600190f35b3480156102aa57600080fd5b50610144600160a060020a0360043516610c21565b3480156102cb57600080fd5b50610144600160a060020a0360043516610c67565b3480156102ec57600080fd5b50610144600435610cad565b34801561030457600080fd5b5061015b600160a060020a0360043516610ee1565b34801561032557600080fd5b5061032e610efc565b60408051600160a060020a039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b34801561037957600080fd5b5061020a610f27565b34801561038e57600080fd5b5061015b600160a060020a0360043516610f36565b3480156103af57600080fd5b5061015b611030565b3480156103c457600080fd5b50610144600160a060020a0360043516611036565b3480156103e557600080fd5b5061020a61110e565b3480156103fa57600080fd5b5061015b61111d565b34801561040f57600080fd5b50610144600435611123565b600054600160a060020a0316331461043257600080fd5b600381905560065481016007556040805182815290517f93202f612f7aeb2a12b92bc5e92cd9600b71bbe0605f654cc7ce95e0025f22709181900360200190a150565b6008545b90565b60008060008060008061048e33610f36565b9550600086116104e8576040805160e560020a62461bcd02815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820726577617264730000604482015290519081900360640190fd5b336000908152600960205260408120805490965090945092505b60008311156105d857846001840381548110151561051c57fe5b9060005260206000209060030201915060075442111561057957600182015460075461054d9163ffffffff6112f716565b6002830154909150156105745760028201546007546105719163ffffffff6112f716565b90505b6105b5565b600182015461058f90429063ffffffff6112f716565b6002830154909150156105b55760028201546105b290429063ffffffff6112f716565b90505b6105c48483600001548361130c565b426002840155935060001990920191610502565b336000908152600b60205260409020546105f8908563ffffffff6113cf16565b336000908152600b6020526040902090815542600190910155600554610624908563ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018790529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b15801561069457600080fd5b505af11580156106a8573d6000803e3d6000fd5b505050506040513d60208110156106be57600080fd5b5050604080513381526020810186905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1505050505050565b600080808080808611610760576040805160e560020a62461bcd02815260206004820152601660248201527f416d6f756e742063616e206e6f74206265207a65726f00000000000000000000604482015290519081900360640190fd5b336000908152600a60205260409020548611156107ed576040805160e560020a62461bcd02815260206004820152602e60248201527f596f752061726520747279696e6720746f2077697468646177206d6f7265207460448201527f68616e20796f7572207374616b65000000000000000000000000000000000000606482015290519081900360840190fd5b336000908152600960205260408120955086945092505b60008411156109305784548590600019810190811061081f57fe5b9060005260206000209060030201915060075442111561087c5760018201546007546108509163ffffffff6112f716565b6002830154909150156108775760028201546007546108749163ffffffff6112f716565b90505b6108b8565b600182015461089290429063ffffffff6112f716565b6002830154909150156108b85760028201546108b590429063ffffffff6112f716565b90505b815484106108fe576108cf8383600001548361130c565b82549093506108e590859063ffffffff6112f716565b85549094506108f8866000198301611431565b5061092b565b61090983858361130c565b825490935061091e908563ffffffff6112f716565b8255426002830155600093505b610804565b336000908152600a6020526040902054610950908763ffffffff6112f716565b336000908152600a6020526040902055600854610973908763ffffffff6112f716565b600855336000908152600b6020526040902054610996908463ffffffff6113cf16565b336000908152600b60205260409020908155426001909101556005546109c2908463ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610a3257600080fd5b505af1158015610a46573d6000803e3d6000fd5b505050506040513d6020811015610a5c57600080fd5b5050600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018990529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5050604080513381526020810185905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1604080513381526020810188905281517f5322e8325014aeb0f999c341770ee4939af85cc55c4f5e03547373cabe18978a929181900390910190a1505050505050565b600b602052600090815260409020805460019091015482565b600160a060020a03166000908152600a602052604090205490565b600154600160a060020a031690565b600054600160a060020a031681565b600a602052600090815260409020805460019091015482565b600960205281600052604060002081815481101515610bfb57fe5b600091825260209091206003909102018054600182015460029092015490935090915083565b600054600160a060020a03163314610c3857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610c7e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610cb5611462565b60008211610d0d576040805160e560020a62461bcd02815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6007544210610d66576040805160e560020a62461bcd02815260206004820152601660248201527f5374616b696e6720706f6f6c20697320636c6f73656400000000000000000000604482015290519081900360640190fd5b336000908152600a6020526040902054610d86908363ffffffff6113cf16565b336000818152600a6020908152604080832094909455835160608101855286815242818301908152818601848152948452600983529483208054600181810183559185529290932081516003909302019182559351918101919091559051600290910155600854909150610e00908363ffffffff6113cf16565b600855600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b158015610e7657600080fd5b505af1158015610e8a573d6000803e3d6000fd5b505050506040513d6020811015610ea057600080fd5b5050604080513381526020810184905281517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d929181900390910190a15050565b600160a060020a03166000908152600b602052604090205490565b600154600254600454600554600654600754600160a060020a03958616959490941693909192939495565b600154600160a060020a031681565b600160a060020a03811660009081526009602052604081208054829081805b6000831115611025578460018403815481101515610f6f57fe5b90600052602060002090600302019150600754421115610fcc576001820154600754610fa09163ffffffff6112f716565b600283015490915015610fc7576002820154600754610fc49163ffffffff6112f716565b90505b611008565b6001820154610fe290429063ffffffff6112f716565b60028301549091501561100857600282015461100590429063ffffffff6112f716565b90505b6110178483600001548361130c565b935060001990920191610f55565b509195945050505050565b60045490565b600054600160a060020a0316331461104d57600080fd5b600160a060020a03811615156110ad576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b60008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fe181e59d45ee426a055928ff3e7e85526d4ef2532db1b20262d9bb5d5263d4549181900360200190a150565b600254600160a060020a031681565b60035490565b600054600160a060020a0316331461113a57600080fd5b60065415611192576040805160e560020a62461bcd02815260206004820152601860248201527f506f6f6c207265776172647320616c7265616479207365740000000000000000604482015290519081900360640190fd5b60008111611210576040805160e560020a62461bcd02815260206004820152602360248201527f43616e6e6f742063726561746520706f6f6c2077697468207a65726f20616d6f60448201527f756e740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600481815542600681905560035401600755600254604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233938101939093523060248401526044830184905251600160a060020a03909116916323b872dd9160648083019260209291908290030181600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b505050506040513d60208110156112bf57600080fd5b50506040805182815290517f9995276a5cbceb87f6c2a87b816fb85911a01e6eec7c9380558cbaaca1d62bdf9181900360200190a150565b60008282111561130657600080fd5b50900390565b60008060008061132f670de0b6b3a76400006004546113ec90919063ffffffff16565b9250821561134e5760035461134b90849063ffffffff61141a16565b92505b60008311156113c05760085461136b90849063ffffffff61141a16565b915061138d85611381848963ffffffff6113ec16565b9063ffffffff6113ec16565b90506113a781670de0b6b3a764000063ffffffff61141a16565b90506113b9878263ffffffff6113cf16565b93506113c5565b600093505b5050509392505050565b6000828201838110156113e157600080fd5b8091505b5092915050565b6000808315156113ff57600091506113e5565b5082820282848281151561140f57fe5b04146113e157600080fd5b600080828481151561142857fe5b04949350505050565b81548183558181111561145d5760030281600302836000526020600020918201910161145d9190611484565b505050565b6060604051908101604052806000815260200160008152602001600081525090565b61047991905b808211156114ab57600080825560018201819055600282015560030161148a565b50905600a165627a7a723058206df58f27ba58e027253c43b541312eb8c5c4424fcd49cd54fc89b3b8c2be0d7d0029
Deployed Bytecode
0x6080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302a01dc2811461012c5780630917e77614610146578063176089691461016d5780632e0b78f614610182578063360b8ed91461019a57806374363daa146101d457806385811fbf146101f55780638da5cb5b146102265780638db6c1191461023b578063908163021461025c5780639a6acf201461029e5780639ebde781146102bf578063a694fc3a146102e0578063a6b240fe146102f8578063aca34c1114610319578063c9e486531461036d578063d82e396214610382578063e627f2db146103a3578063f2fde38b146103b8578063f7c618c1146103d9578063f7d57b81146103ee578063fbc14bfb14610403575b600080fd5b34801561013857600080fd5b5061014460043561041b565b005b34801561015257600080fd5b5061015b610475565b60408051918252519081900360200190f35b34801561017957600080fd5b5061014461047c565b34801561018e57600080fd5b50610144600435610703565b3480156101a657600080fd5b506101bb600160a060020a0360043516610b75565b6040805192835260208301919091528051918290030190f35b3480156101e057600080fd5b5061015b600160a060020a0360043516610b8e565b34801561020157600080fd5b5061020a610ba9565b60408051600160a060020a039092168252519081900360200190f35b34801561023257600080fd5b5061020a610bb8565b34801561024757600080fd5b506101bb600160a060020a0360043516610bc7565b34801561026857600080fd5b50610280600160a060020a0360043516602435610be0565b60408051938452602084019290925282820152519081900360600190f35b3480156102aa57600080fd5b50610144600160a060020a0360043516610c21565b3480156102cb57600080fd5b50610144600160a060020a0360043516610c67565b3480156102ec57600080fd5b50610144600435610cad565b34801561030457600080fd5b5061015b600160a060020a0360043516610ee1565b34801561032557600080fd5b5061032e610efc565b60408051600160a060020a039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b34801561037957600080fd5b5061020a610f27565b34801561038e57600080fd5b5061015b600160a060020a0360043516610f36565b3480156103af57600080fd5b5061015b611030565b3480156103c457600080fd5b50610144600160a060020a0360043516611036565b3480156103e557600080fd5b5061020a61110e565b3480156103fa57600080fd5b5061015b61111d565b34801561040f57600080fd5b50610144600435611123565b600054600160a060020a0316331461043257600080fd5b600381905560065481016007556040805182815290517f93202f612f7aeb2a12b92bc5e92cd9600b71bbe0605f654cc7ce95e0025f22709181900360200190a150565b6008545b90565b60008060008060008061048e33610f36565b9550600086116104e8576040805160e560020a62461bcd02815260206004820152601e60248201527f596f7520646f206e6f74206861766520656e6f75676820726577617264730000604482015290519081900360640190fd5b336000908152600960205260408120805490965090945092505b60008311156105d857846001840381548110151561051c57fe5b9060005260206000209060030201915060075442111561057957600182015460075461054d9163ffffffff6112f716565b6002830154909150156105745760028201546007546105719163ffffffff6112f716565b90505b6105b5565b600182015461058f90429063ffffffff6112f716565b6002830154909150156105b55760028201546105b290429063ffffffff6112f716565b90505b6105c48483600001548361130c565b426002840155935060001990920191610502565b336000908152600b60205260409020546105f8908563ffffffff6113cf16565b336000908152600b6020526040902090815542600190910155600554610624908563ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018790529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b15801561069457600080fd5b505af11580156106a8573d6000803e3d6000fd5b505050506040513d60208110156106be57600080fd5b5050604080513381526020810186905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1505050505050565b600080808080808611610760576040805160e560020a62461bcd02815260206004820152601660248201527f416d6f756e742063616e206e6f74206265207a65726f00000000000000000000604482015290519081900360640190fd5b336000908152600a60205260409020548611156107ed576040805160e560020a62461bcd02815260206004820152602e60248201527f596f752061726520747279696e6720746f2077697468646177206d6f7265207460448201527f68616e20796f7572207374616b65000000000000000000000000000000000000606482015290519081900360840190fd5b336000908152600960205260408120955086945092505b60008411156109305784548590600019810190811061081f57fe5b9060005260206000209060030201915060075442111561087c5760018201546007546108509163ffffffff6112f716565b6002830154909150156108775760028201546007546108749163ffffffff6112f716565b90505b6108b8565b600182015461089290429063ffffffff6112f716565b6002830154909150156108b85760028201546108b590429063ffffffff6112f716565b90505b815484106108fe576108cf8383600001548361130c565b82549093506108e590859063ffffffff6112f716565b85549094506108f8866000198301611431565b5061092b565b61090983858361130c565b825490935061091e908563ffffffff6112f716565b8255426002830155600093505b610804565b336000908152600a6020526040902054610950908763ffffffff6112f716565b336000908152600a6020526040902055600854610973908763ffffffff6112f716565b600855336000908152600b6020526040902054610996908463ffffffff6113cf16565b336000908152600b60205260409020908155426001909101556005546109c2908463ffffffff6113cf16565b600555600254604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610a3257600080fd5b505af1158015610a46573d6000803e3d6000fd5b505050506040513d6020811015610a5c57600080fd5b5050600154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018990529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5050604080513381526020810185905281517f5bf73990fdbbb1700fedc6b63f17f15c22d262a16352f0fd668471a1e3548ffe929181900390910190a1604080513381526020810188905281517f5322e8325014aeb0f999c341770ee4939af85cc55c4f5e03547373cabe18978a929181900390910190a1505050505050565b600b602052600090815260409020805460019091015482565b600160a060020a03166000908152600a602052604090205490565b600154600160a060020a031690565b600054600160a060020a031681565b600a602052600090815260409020805460019091015482565b600960205281600052604060002081815481101515610bfb57fe5b600091825260209091206003909102018054600182015460029092015490935090915083565b600054600160a060020a03163314610c3857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610c7e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610cb5611462565b60008211610d0d576040805160e560020a62461bcd02815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6007544210610d66576040805160e560020a62461bcd02815260206004820152601660248201527f5374616b696e6720706f6f6c20697320636c6f73656400000000000000000000604482015290519081900360640190fd5b336000908152600a6020526040902054610d86908363ffffffff6113cf16565b336000818152600a6020908152604080832094909455835160608101855286815242818301908152818601848152948452600983529483208054600181810183559185529290932081516003909302019182559351918101919091559051600290910155600854909150610e00908363ffffffff6113cf16565b600855600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b158015610e7657600080fd5b505af1158015610e8a573d6000803e3d6000fd5b505050506040513d6020811015610ea057600080fd5b5050604080513381526020810184905281517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d929181900390910190a15050565b600160a060020a03166000908152600b602052604090205490565b600154600254600454600554600654600754600160a060020a03958616959490941693909192939495565b600154600160a060020a031681565b600160a060020a03811660009081526009602052604081208054829081805b6000831115611025578460018403815481101515610f6f57fe5b90600052602060002090600302019150600754421115610fcc576001820154600754610fa09163ffffffff6112f716565b600283015490915015610fc7576002820154600754610fc49163ffffffff6112f716565b90505b611008565b6001820154610fe290429063ffffffff6112f716565b60028301549091501561100857600282015461100590429063ffffffff6112f716565b90505b6110178483600001548361130c565b935060001990920191610f55565b509195945050505050565b60045490565b600054600160a060020a0316331461104d57600080fd5b600160a060020a03811615156110ad576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b60008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517fe181e59d45ee426a055928ff3e7e85526d4ef2532db1b20262d9bb5d5263d4549181900360200190a150565b600254600160a060020a031681565b60035490565b600054600160a060020a0316331461113a57600080fd5b60065415611192576040805160e560020a62461bcd02815260206004820152601860248201527f506f6f6c207265776172647320616c7265616479207365740000000000000000604482015290519081900360640190fd5b60008111611210576040805160e560020a62461bcd02815260206004820152602360248201527f43616e6e6f742063726561746520706f6f6c2077697468207a65726f20616d6f60448201527f756e740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600481815542600681905560035401600755600254604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233938101939093523060248401526044830184905251600160a060020a03909116916323b872dd9160648083019260209291908290030181600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b505050506040513d60208110156112bf57600080fd5b50506040805182815290517f9995276a5cbceb87f6c2a87b816fb85911a01e6eec7c9380558cbaaca1d62bdf9181900360200190a150565b60008282111561130657600080fd5b50900390565b60008060008061132f670de0b6b3a76400006004546113ec90919063ffffffff16565b9250821561134e5760035461134b90849063ffffffff61141a16565b92505b60008311156113c05760085461136b90849063ffffffff61141a16565b915061138d85611381848963ffffffff6113ec16565b9063ffffffff6113ec16565b90506113a781670de0b6b3a764000063ffffffff61141a16565b90506113b9878263ffffffff6113cf16565b93506113c5565b600093505b5050509392505050565b6000828201838110156113e157600080fd5b8091505b5092915050565b6000808315156113ff57600091506113e5565b5082820282848281151561140f57fe5b04146113e157600080fd5b600080828481151561142857fe5b04949350505050565b81548183558181111561145d5760030281600302836000526020600020918201910161145d9190611484565b505050565b6060604051908101604052806000815260200160008152602001600081525090565b61047991905b808211156114ab57600080825560018201819055600282015560030161148a565b50905600a165627a7a723058206df58f27ba58e027253c43b541312eb8c5c4424fcd49cd54fc89b3b8c2be0d7d0029
Deployed Bytecode Sourcemap
1950:11672:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12936:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12936:217:0;;;;;;;12099:113;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12099:113:0;;;;;;;;;;;;;;;;;;;;9707:1864;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9707:1864:0;;;;6888:2783;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6888:2783:0;;;;;2809:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2809:53:0;-1:-1:-1;;;;;2809:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11626:167;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11626:167:0;-1:-1:-1;;;;;11626:167:0;;;;;13195:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13195:115:0;;;;;;;;-1:-1:-1;;;;;13195:115:0;;;;;;;;;;;;;;1447:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1447:20:0;;;;2640:55;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2640:55:0;-1:-1:-1;;;;;2640:55:0;;;;;2438:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2438:47:0;-1:-1:-1;;;;;2438:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13496:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13496:117:0;-1:-1:-1;;;;;13496:117:0;;;;;13347:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13347:105:0;-1:-1:-1;;;;;13347:105:0;;;;;4069:682;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4069:682:0;;;;;11848:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11848:188:0;-1:-1:-1;;;;;11848:188:0;;;;;12417:306;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12417:306:0;;;;;;;;-1:-1:-1;;;;;12417:306:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2026:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2026:19:0;;;;5565:1275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5565:1275:0;-1:-1:-1;;;;;5565:1275:0;;;;;12265:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12265:116:0;;;;1715:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1715:228:0;-1:-1:-1;;;;;1715:228:0;;;;;2052:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2052:25:0;;;;12764:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12764:115:0;;;;3455:550;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3455:550:0;;;;;12936:217;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;13014:12;:28;;;13067:13;;:29;;13053:11;:43;13112:33;;;;;;;;;;;;;;;;;12936:217;:::o;12099:113::-;12193:11;;12099:113;;:::o;9707:1864::-;9758:18;9926:29;10070:20;10105:9;10177:23;10238:20;9779:27;9795:10;9779:15;:27::i;:::-;9758:48;-1:-1:-1;9838:1:0;9825:14;;9817:57;;;;;-1:-1:-1;;;;;9817:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9970:10;9958:23;;;;:11;:23;;;;;10117:20;;9958:23;;-1:-1:-1;9958:23:0;;-1:-1:-1;10117:20:0;-1:-1:-1;10148:927:0;10159:1;10155;:5;10148:927;;;10203:13;10221:1;10217;:5;10203:20;;;;;;;;;;;;;;;;;;;;10177:46;;10364:11;;10358:3;:17;10354:497;;;10427:21;;;;10411:11;;:38;;;:15;:38;:::i;:::-;10471:26;;;;10396:53;;-1:-1:-1;10471:31:0;10468:136;;10557:26;;;;10541:11;;:43;;;:15;:43;:::i;:::-;10526:58;;10468:136;10354:497;;;10667:21;;;;10659:30;;:3;;:30;:7;:30;:::i;:::-;10711:26;;;;10644:45;;-1:-1:-1;10711:31:0;10708:128;;10789:26;;;;10781:35;;:3;;:35;:7;:35;:::i;:::-;10766:50;;10708:128;10936:62;10953:12;10967:9;:16;;;10985:12;10936:16;:62::i;:::-;11042:3;11013:26;;;:32;10921:77;-1:-1:-1;;;11060:3:0;;;;10148:927;;;11190:10;11175:26;;;;:14;:26;;;;;:41;:59;;11221:12;11175:59;:45;:59;:::i;:::-;11146:10;11131:26;;;;:14;:26;;;;;:103;;;11291:3;11245:43;;;;:49;11376:16;;:34;;11397:12;11376:34;:20;:34;:::i;:::-;11357:16;:53;11459:11;;:46;;;;;;11480:10;11459:46;;;;;;;;;;;;-1:-1:-1;;;;;11459:11:0;;;;:20;;:46;;;;;;;;;;;;;;;:11;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;11459:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11459:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;11521:42:0;;;11538:10;11521:42;;11459:46;11521:42;;;;;;;;;;;;;;;;;;9707:1864;;;;;;:::o;6888:2783::-;7167:29;;;;;6957:10;;;6949:45;;;;;-1:-1:-1;;;;;6949:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7030:10;7013:28;;;;:16;:28;;;;;:41;:51;-1:-1:-1;7013:51:0;7005:110;;;;;-1:-1:-1;;;;;7005:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7211:10;7199:23;;;;:11;:23;;;;;;-1:-1:-1;7338:6:0;;-1:-1:-1;7199:23:0;-1:-1:-1;7390:1413:0;7416:1;7397:16;:20;7390:1413;;;7474:20;;7460:13;;-1:-1:-1;;7474:24:0;;;7460:39;;;;;;;;;;;;;;;;7434:65;;7626:11;;7620:3;:17;7616:497;;;7689:21;;;;7673:11;;:38;;;:15;:38;:::i;:::-;7733:26;;;;7658:53;;-1:-1:-1;7733:31:0;7730:136;;7819:26;;;;7803:11;;:43;;;:15;:43;:::i;:::-;7788:58;;7730:136;7616:497;;;7929:21;;;;7921:30;;:3;;:30;:7;:30;:::i;:::-;7973:26;;;;7906:45;;-1:-1:-1;7973:31:0;7970:128;;8051:26;;;;8043:35;;:3;;:35;:7;:35;:::i;:::-;8028:50;;7970:128;8145:16;;:36;-1:-1:-1;8141:651:0;;8263:62;8280:12;8294:9;:16;;;8312:12;8263:16;:62::i;:::-;8384:16;;8248:77;;-1:-1:-1;8363:38:0;;:16;;:38;:20;:38;:::i;:::-;8420:22;;8344:57;;-1:-1:-1;8420:22:0;:13;-1:-1:-1;;8420:22:0;;;:::i;:::-;;8141:651;;;8548:62;8565:12;8579:16;8597:12;8548:16;:62::i;:::-;8648:16;;8533:77;;-1:-1:-1;8648:38:0;;8669:16;8648:38;:20;:38;:::i;:::-;8629:57;;8734:3;8705:26;;;:32;8629:16;;-1:-1:-1;8141:651:0;7390:1413;;;8922:10;8905:28;;;;:16;:28;;;;;:41;:53;;8951:6;8905:53;:45;:53;:::i;:::-;8878:10;8861:28;;;;:16;:28;;;;;:97;9032:11;;:23;;9048:6;9032:23;:15;:23;:::i;:::-;9018:11;:37;9171:10;9156:26;;;;:14;:26;;;;;:41;:59;;9202:12;9156:59;:45;:59;:::i;:::-;9127:10;9112:26;;;;:14;:26;;;;;:103;;;9272:3;9226:43;;;;:49;9357:16;;:34;;9378:12;9357:34;:20;:34;:::i;:::-;9338:16;:53;9451:11;;:46;;;;;;9472:10;9451:46;;;;;;;;;;;;-1:-1:-1;;;;;9451:11:0;;;;:20;;:46;;;;;;;;;;;;;;;:11;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;9451:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9451:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;9508:5:0;;:34;;;;;;9523:10;9508:34;;;;;;;;;;;;-1:-1:-1;;;;;9508:5:0;;;;:14;;:34;;;;;9451:46;;9508:34;;;;;;;;:5;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;9508:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9508:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;9568:42:0;;;9585:10;9568:42;;9508:34;9568:42;;;;;;;;;;;;;;;;;;9626:37;;;9644:10;9626:37;;;;;;;;;;;;;;;;;;;;;6888:2783;;;;;;:::o;2809:53::-;;;;;;;;;;;;;;;;;;;:::o;11626:167::-;-1:-1:-1;;;;;11742:30:0;11701:21;11742:30;;;:16;:30;;;;;:43;;11626:167::o;13195:115::-;13296:5;;-1:-1:-1;;;;;13296:5:0;13195:115;:::o;1447:20::-;;;-1:-1:-1;;;;;1447:20:0;;:::o;2640:55::-;;;;;;;;;;;;;;;;;;;:::o;2438:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2438:47:0;;-1:-1:-1;2438:47:0;:::o;13496:117::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;13575:11;:30;;-1:-1:-1;;13575:30:0;-1:-1:-1;;;;;13575:30:0;;;;;;;;;;13496:117::o;13347:105::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;13420:5;:24;;-1:-1:-1;;13420:24:0;-1:-1:-1;;;;;13420:24:0;;;;;;;;;;13347:105::o;4069:682::-;4453:21;;:::i;:::-;4137:1;4128:10;;4120:37;;;;;-1:-1:-1;;;;;4120:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4182:11;;4176:3;:17;4168:52;;;;;-1:-1:-1;;;;;4168:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4371:10;4354:28;;;;:16;:28;;;;;:41;:53;;4400:6;4354:53;:45;:53;:::i;:::-;4327:10;4310:28;;;;:16;:28;;;;;;;;:97;;;;4477:21;;;;;;;;;;4491:3;4477:21;;;;;;;;;;;;4509:23;;;:11;:23;;;;;27:10:-1;;39:1;23:18;;;45:23;;4509:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4613:11;;4477:21;;-1:-1:-1;4613:23:0;;4483:6;4613:23;:15;:23;:::i;:::-;4599:11;:37;4657:5;;:44;;;;;;4676:10;4657:44;;;;4688:4;4657:44;;;;;;;;;;;;-1:-1:-1;;;;;4657:5:0;;;;:18;;:44;;;;;;;;;;;;;;;:5;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;4657:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4657:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;4717:26:0;;;4724:10;4717:26;;4657:44;4717:26;;;;;;;;;;;;;;;;;;4069:682;;:::o;11848:188::-;-1:-1:-1;;;;;11986:27:0;11931:29;11986:27;;;:14;:27;;;;;:42;;11848:188::o;12417:306::-;12631:5;;12646:11;;12659:12;;12672:16;;12689:13;;12703:11;;-1:-1:-1;;;;;12631:5:0;;;;12646:11;;;;;12417:306;;;;;;:::o;2026:19::-;;;-1:-1:-1;;;;;2026:19:0;;:::o;5565:1275::-;-1:-1:-1;;;;;5721:25:0;;5633:15;5721:25;;;:11;:25;;;;;5882:20;;5633:15;;;;5913:880;5924:1;5920;:5;5913:880;;;5968:13;5986:1;5982;:5;5968:20;;;;;;;;;;;;;;;;;;;;5942:46;;6129:11;;6123:3;:17;6119:497;;;6192:21;;;;6176:11;;:38;;;:15;:38;:::i;:::-;6236:26;;;;6161:53;;-1:-1:-1;6236:31:0;6233:136;;6322:26;;;;6306:11;;:43;;;:15;:43;:::i;:::-;6291:58;;6233:136;6119:497;;;6432:21;;;;6424:30;;:3;;:30;:7;:30;:::i;:::-;6476:26;;;;6409:45;;-1:-1:-1;6476:31:0;6473:128;;6554:26;;;;6546:35;;:3;;:35;:7;:35;:::i;:::-;6531:50;;6473:128;6701:62;6718:12;6732:9;:16;;;6750:12;6701:16;:62::i;:::-;6686:77;-1:-1:-1;;;6778:3:0;;;;5913:880;;;-1:-1:-1;6820:12:0;;5565:1275;-1:-1:-1;;;;;5565:1275:0:o;12265:116::-;12361:12;;12265:116;:::o;1715:228::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;-1:-1:-1;;;;;1802:22:0;;;;1794:64;;;;;-1:-1:-1;;;;;1794:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1873:5;:16;;-1:-1:-1;;;;;1873:16:0;;-1:-1:-1;;1873:16:0;;;;;;;;1909:22;;;;;;;;;;;;;;;;1715:228;:::o;2052:25::-;;;-1:-1:-1;;;;;2052:25:0;;:::o;12764:115::-;12859:12;;12764:115;:::o;3455:550::-;1669:5;;-1:-1:-1;;;;;1669:5:0;1655:10;:19;1647:28;;;;;;3545:13;;:18;3537:55;;;;;-1:-1:-1;;;;;3537:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3627:1;3611:17;;3603:65;;;;;-1:-1:-1;;;;;3603:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3724:12;:28;;;3789:3;3773:13;:19;;;3823:12;;3817:18;3803:11;:32;3895:11;;:57;;;;;;3920:10;3895:57;;;;;;;3932:4;3895:57;;;;;;;;;;;-1:-1:-1;;;;;3895:11:0;;;;:24;;:57;;;;;;;;;;;;;;-1:-1:-1;3895:11:0;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;3895:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3895:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;3968:29:0;;;;;;;;;;;;;3895:57;3968:29;;;3455:550;:::o;997:114::-;1055:7;1079:6;;;;1071:15;;;;;;-1:-1:-1;1100:5:0;;;997:114::o;4786:737::-;4903:15;4931:23;5158:38;5246:19;4957:25;4974:7;4957:12;;:16;;:25;;;;:::i;:::-;4931:51;-1:-1:-1;4997:20:0;;4993:105;;5073:12;;5053:33;;:15;;:33;:19;:33;:::i;:::-;5035:51;;4993:105;5140:1;5122:15;:19;5118:398;;;5219:11;;5199:32;;:15;;:32;:19;:32;:::i;:::-;5158:73;-1:-1:-1;5268:68:0;5322:13;5268:49;5158:73;5303:13;5268:49;:34;:49;:::i;:::-;:53;:68;:53;:68;:::i;:::-;5246:90;-1:-1:-1;5373:24:0;5246:90;5389:7;5373:24;:15;:24;:::i;:::-;5359:38;-1:-1:-1;5433:30:0;:13;5359:38;5433:30;:17;:30;:::i;:::-;5426:37;;;;5118:398;5503:1;5496:8;;5118:398;4786:737;;;;;;;;:::o;1117:134::-;1175:7;1203:5;;;1223:6;;;;1215:15;;;;;;1244:1;1237:8;;1117:134;;;;;;:::o;692:181::-;750:7;;770:6;;766:37;;;794:1;787:8;;;;766:37;-1:-1:-1;821:5:0;;;825:1;821;:5;841;;;;;;;;:10;833:19;;;;;879:112;937:7;953:9;969:1;965;:5;;;;;;;;;879:112;-1:-1:-1;;;;879:112:0:o;1950:11672::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://6df58f27ba58e027253c43b541312eb8c5c4424fcd49cd54fc89b3b8c2be0d7d
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.