More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 397 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 20842219 | 34 hrs ago | IN | 0 ETH | 0.00096753 | ||||
Claim | 20842216 | 34 hrs ago | IN | 0 ETH | 0.00138423 | ||||
Unstake | 20641716 | 29 days ago | IN | 0 ETH | 0.00017899 | ||||
Claim | 20641714 | 29 days ago | IN | 0 ETH | 0.00023549 | ||||
Unstake | 20640140 | 29 days ago | IN | 0 ETH | 0.00011143 | ||||
Claim | 20640124 | 29 days ago | IN | 0 ETH | 0.00014592 | ||||
Claim | 20631268 | 30 days ago | IN | 0 ETH | 0.00010654 | ||||
Unstake | 20607444 | 34 days ago | IN | 0 ETH | 0.00003223 | ||||
Unstake | 20607444 | 34 days ago | IN | 0 ETH | 0.00009637 | ||||
Stake | 20547036 | 42 days ago | IN | 0 ETH | 0.00006442 | ||||
Claim | 20546827 | 42 days ago | IN | 0 ETH | 0.00007923 | ||||
Unstake | 20507083 | 48 days ago | IN | 0 ETH | 0.00011508 | ||||
Claim | 20507082 | 48 days ago | IN | 0 ETH | 0.00015204 | ||||
Claim | 20503403 | 48 days ago | IN | 0 ETH | 0.00009001 | ||||
Claim | 20500826 | 49 days ago | IN | 0 ETH | 0.00009872 | ||||
Unstake | 20500824 | 49 days ago | IN | 0 ETH | 0.00010879 | ||||
Unstake | 20497719 | 49 days ago | IN | 0 ETH | 0.00014376 | ||||
Claim | 20497711 | 49 days ago | IN | 0 ETH | 0.00014095 | ||||
Unstake | 20453427 | 55 days ago | IN | 0 ETH | 0.00007245 | ||||
Claim | 20453427 | 55 days ago | IN | 0 ETH | 0.00009487 | ||||
Unstake | 20453332 | 55 days ago | IN | 0 ETH | 0.00007245 | ||||
Claim | 20451984 | 55 days ago | IN | 0 ETH | 0.00009487 | ||||
Claim | 20439730 | 57 days ago | IN | 0 ETH | 0.0001907 | ||||
Unstake | 20439729 | 57 days ago | IN | 0 ETH | 0.00019739 | ||||
Claim | 20439676 | 57 days ago | IN | 0 ETH | 0.00016021 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
SbeeStaking
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import {ERC20} from "solmate/src/tokens/ERC20.sol"; import {SafeTransferLib} from "solmate/src/utils/SafeTransferLib.sol"; contract SbeeStaking { using SafeTransferLib for ERC20; using Cast for uint256; event Staked(address user, uint256 amount); event Unstaked(address user, uint256 amount); event Claimed(address user, uint256 amount); event RewardsPerTokenUpdated(uint256 accumulated); event UserRewardsUpdated(address user, uint256 rewards, uint256 checkpoint); struct RewardsPerToken { uint128 accumulated; uint128 lastUpdated; } struct UserRewards { uint128 accumulated; uint128 checkpoint; uint256 totalEarned; } ERC20 public immutable stakingToken; uint256 public totalStaked; uint256 public totalStakers; mapping(address => uint256) public userStake; uint256 public immutable rewardsRate; uint256 public immutable stakingStart; uint256 public immutable stakingEnd; RewardsPerToken public rewardsPerToken; mapping(address => UserRewards) public accumulatedRewards; constructor( ERC20 _stakingToken, uint256 _stakingStart, uint256 _stakingEnd, uint256 totalRewards ) { stakingToken = _stakingToken; stakingStart = _stakingStart; stakingEnd = _stakingEnd; rewardsRate = totalRewards / (_stakingEnd - _stakingStart); rewardsPerToken.lastUpdated = _stakingStart.u128(); } function _calculateRewardsPerToken( RewardsPerToken memory rewardsPerTokenIn ) internal view returns (RewardsPerToken memory) { RewardsPerToken memory rewardsPerTokenOut = RewardsPerToken( rewardsPerTokenIn.accumulated, rewardsPerTokenIn.lastUpdated ); uint256 _totalStaked = totalStaked; if (block.timestamp < stakingStart) return rewardsPerTokenOut; uint256 updateTime = block.timestamp < stakingEnd ? block.timestamp : stakingEnd; uint256 elapsed = updateTime - rewardsPerTokenIn.lastUpdated; if (elapsed == 0) return rewardsPerTokenOut; rewardsPerTokenOut.lastUpdated = updateTime.u128(); if (totalStaked == 0) return rewardsPerTokenOut; rewardsPerTokenOut.accumulated = (rewardsPerTokenIn.accumulated + (1e18 * elapsed * rewardsRate) / _totalStaked).u128(); return rewardsPerTokenOut; } function _calculateUserRewards( uint256 _staked, uint256 earlierCheckpoint, uint256 latterCheckpoint ) internal pure returns (uint256) { return (_staked * (latterCheckpoint - earlierCheckpoint)) / 1e18; } function _updateRewardsPerToken() internal returns (RewardsPerToken memory) { RewardsPerToken memory rewardsPerTokenIn = rewardsPerToken; RewardsPerToken memory rewardsPerTokenOut = _calculateRewardsPerToken( rewardsPerTokenIn ); if (rewardsPerTokenIn.lastUpdated == rewardsPerTokenOut.lastUpdated) return rewardsPerTokenOut; rewardsPerToken = rewardsPerTokenOut; emit RewardsPerTokenUpdated(rewardsPerTokenOut.accumulated); return rewardsPerTokenOut; } function _updateUserRewards( address user ) internal returns (UserRewards memory) { RewardsPerToken memory _rewardsPerToken = _updateRewardsPerToken(); UserRewards memory _userRewards = accumulatedRewards[user]; if (_userRewards.checkpoint == _rewardsPerToken.lastUpdated) return _userRewards; uint256 earnedSinceLastUpdate = _calculateUserRewards( userStake[user], _userRewards.checkpoint, _rewardsPerToken.accumulated ); _userRewards.accumulated += earnedSinceLastUpdate.u128(); _userRewards.totalEarned += earnedSinceLastUpdate.u128(); _userRewards.checkpoint = _rewardsPerToken.accumulated; accumulatedRewards[user] = _userRewards; emit UserRewardsUpdated( user, _userRewards.accumulated, _userRewards.checkpoint ); return _userRewards; } function _stake(address user, uint256 amount) internal { _updateUserRewards(user); if (userStake[user] == 0) { totalStakers++; } totalStaked += amount; userStake[user] += amount; stakingToken.safeTransferFrom(user, address(this), amount); emit Staked(user, amount); } function _unstake(address user, uint256 amount) internal { require(userStake[user] >= amount, "Insufficient staked amount"); _updateUserRewards(user); if (userStake[user] == amount) { totalStakers--; } totalStaked -= amount; userStake[user] -= amount; stakingToken.safeTransfer(user, amount); emit Unstaked(user, amount); } function _claim(address user, uint256 amount) internal { uint256 rewardsAvailable = _updateUserRewards(msg.sender).accumulated; accumulatedRewards[user].accumulated = (rewardsAvailable - amount) .u128(); stakingToken.safeTransfer(user, amount); emit Claimed(user, amount); } function stake(uint256 amount) public virtual { _stake(msg.sender, amount); } function unstake(uint256 amount) public virtual { _unstake(msg.sender, amount); } function claim() public virtual returns (uint256) { uint256 claimed = _updateUserRewards(msg.sender).accumulated; _claim(msg.sender, claimed); return claimed; } function currentRewardsPerToken() public view returns (uint256) { return _calculateRewardsPerToken(rewardsPerToken).accumulated; } function currentUserRewards(address user) public view returns (uint256) { UserRewards memory accumulatedRewards_ = accumulatedRewards[user]; RewardsPerToken memory rewardsPerToken_ = _calculateRewardsPerToken( rewardsPerToken ); return accumulatedRewards_.accumulated + _calculateUserRewards( userStake[user], accumulatedRewards_.checkpoint, rewardsPerToken_.accumulated ); } } library Cast { function u128(uint256 x) internal pure returns (uint128 y) { require(x <= type(uint128).max, "Cast overflow"); y = uint128(x); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; import {ERC20} from "../tokens/ERC20.sol"; /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller. library SafeTransferLib { /*////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool success; /// @solidity memory-safe-assembly assembly { // Transfer the ETH and store if it succeeded or not. success := call(gas(), to, amount, 0, 0, 0, 0) } require(success, "ETH_TRANSFER_FAILED"); } /*////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "from" argument. mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 100, 0, 32) ) } require(success, "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "APPROVE_FAILED"); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract ERC20","name":"_stakingToken","type":"address"},{"internalType":"uint256","name":"_stakingStart","type":"uint256"},{"internalType":"uint256","name":"_stakingEnd","type":"uint256"},{"internalType":"uint256","name":"totalRewards","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"accumulated","type":"uint256"}],"name":"RewardsPerTokenUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewards","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"checkpoint","type":"uint256"}],"name":"UserRewardsUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accumulatedRewards","outputs":[{"internalType":"uint128","name":"accumulated","type":"uint128"},{"internalType":"uint128","name":"checkpoint","type":"uint128"},{"internalType":"uint256","name":"totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentRewardsPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"currentUserRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPerToken","outputs":[{"internalType":"uint128","name":"accumulated","type":"uint128"},{"internalType":"uint128","name":"lastUpdated","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101006040523480156200001257600080fd5b506040516200208d3803806200208d83398181016040528101906200003891906200018c565b8373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508260c081815250508160e0818152505082826200008d9190620002a5565b816200009a91906200026d565b60a08181525050620000b783620000fc60201b620007771760201c565b600360000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050505050620003c4565b60006fffffffffffffffffffffffffffffffff801682111562000156576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014d906200023a565b60405180910390fd5b819050919050565b6000815190506200016f8162000390565b92915050565b6000815190506200018681620003aa565b92915050565b60008060008060808587031215620001a357600080fd5b6000620001b3878288016200015e565b9450506020620001c68782880162000175565b9350506040620001d98782880162000175565b9250506060620001ec8782880162000175565b91505092959194509250565b600062000207600d836200025c565b91507f43617374206f766572666c6f77000000000000000000000000000000000000006000830152602082019050919050565b600060208201905081810360008301526200025581620001f8565b9050919050565b600082825260208201905092915050565b60006200027a8262000328565b9150620002878362000328565b9250826200029a576200029962000361565b5b828204905092915050565b6000620002b28262000328565b9150620002bf8362000328565b925082821015620002d557620002d462000332565b5b828203905092915050565b6000620002ed8262000308565b9050919050565b60006200030182620002e0565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6200039b81620002f4565b8114620003a757600080fd5b50565b620003b58162000328565b8114620003c157600080fd5b50565b60805160601c60a05160c05160e051611c5b62000432600039600081816103d20152818161085f0152610886015260008181610755015261082b0152600081816103f6015261093d01526000818161047c01528181610b4701528181610ffe01526111960152611c5b6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806372f702f31161008c57806386989038116100665780638698903814610240578063a2dc05741461025e578063a694fc3a1461028e578063d771b0a6146102aa576100ea565b806372f702f3146101d257806373f273fc146101f0578063817b1cd214610222576100ea565b8063517d0411116100c8578063517d041114610147578063523bc7d51461016557806368e5585d1461018357806370641a36146101b3576100ea565b806308396646146100ef5780632e17de781461010d5780634e71d92d14610129575b600080fd5b6100f76102c8565b6040516101049190611911565b60405180910390f35b61012760048036038101906101229190611627565b61038e565b005b61013161039b565b60405161013e9190611911565b60405180910390f35b61014f6103d0565b60405161015c9190611911565b60405180910390f35b61016d6103f4565b60405161017a9190611911565b60405180910390f35b61019d600480360381019061019891906115fe565b610418565b6040516101aa9190611911565b60405180910390f35b6101bb610430565b6040516101c99291906118b1565b60405180910390f35b6101da61047a565b6040516101e791906117fb565b60405180910390f35b61020a600480360381019061020591906115fe565b61049e565b604051610219939291906118da565b60405180910390f35b61022a610500565b6040516102379190611911565b60405180910390f35b610248610506565b6040516102559190611911565b60405180910390f35b610278600480360381019061027391906115fe565b61050c565b6040516102859190611911565b60405180910390f35b6102a860048036038101906102a39190611627565b610746565b005b6102b2610753565b6040516102bf9190611911565b60405180910390f35b600061037360036040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250506107d6565b600001516fffffffffffffffffffffffffffffffff16905090565b61039833826109e6565b50565b6000806103a733610bc8565b600001516fffffffffffffffffffffffffffffffff1690506103c93382610f48565b8091505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915090505481565b60038060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a90046fffffffffffffffffffffffffffffffff16905082565b7f000000000000000000000000000000000000000000000000000000000000000081565b60046020528060005260406000206000915090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a90046fffffffffffffffffffffffffffffffff16908060010154905083565b60005481565b60015481565b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001600182015481525050905060006106a460036040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250506107d6565b905061071c600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483602001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16611080565b82600001516fffffffffffffffffffffffffffffffff1661073d9190611983565b92505050919050565b61075033826110b5565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006fffffffffffffffffffffffffffffffff80168211156107ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c590611836565b60405180910390fd5b819050919050565b6107de611551565b6000604051806040016040528084600001516fffffffffffffffffffffffffffffffff16815260200184602001516fffffffffffffffffffffffffffffffff1681525090506000805490507f000000000000000000000000000000000000000000000000000000000000000042101561085b5781925050506109e1565b60007f000000000000000000000000000000000000000000000000000000000000000042106108aa577f00000000000000000000000000000000000000000000000000000000000000006108ac565b425b9050600085602001516fffffffffffffffffffffffffffffffff16826108d29190611a64565b905060008114156108e957839450505050506109e1565b6108f282610777565b84602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505060008054141561093757839450505050506109e1565b6109aa837f000000000000000000000000000000000000000000000000000000000000000083670de0b6b3a76400006109709190611a0a565b61097a9190611a0a565b61098491906119d9565b87600001516fffffffffffffffffffffffffffffffff166109a59190611983565b610777565b84600001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff1681525050839450505050505b919050565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5f90611816565b60405180910390fd5b610a7182610bc8565b5080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610ad25760016000815480929190610acc90611b26565b91905055505b80600080828254610ae39190611a64565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b399190611a64565b92505081905550610b8b82827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112189092919063ffffffff16565b7f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f758282604051610bbc9291906117d2565b60405180910390a15050565b610bd061158f565b6000610bda6112c6565b90506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001600182015481525050905081602001516fffffffffffffffffffffffffffffffff1681602001516fffffffffffffffffffffffffffffffff161415610d06578092505050610f43565b6000610d7e600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483602001516fffffffffffffffffffffffffffffffff1685600001516fffffffffffffffffffffffffffffffff16611080565b9050610d8981610777565b82600001818151610d9a919061193d565b9150906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff1681525050610dd081610777565b6fffffffffffffffffffffffffffffffff1682604001818151610df39190611983565b91508181525050826000015182602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505081600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550604082015181600101559050507f5b9aaf4cc5141c090a75f8b8a627863eba92df81f0c83c096350da9b79aedd048583600001518460200151604051610f349392919061179b565b60405180910390a18193505050505b919050565b6000610f5333610bc8565b600001516fffffffffffffffffffffffffffffffff169050610f7f8282610f7a9190611a64565b610777565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555061104283837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112189092919063ffffffff16565b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a83836040516110739291906117d2565b60405180910390a1505050565b6000670de0b6b3a764000083836110979190611a64565b856110a29190611a0a565b6110ac91906119d9565b90509392505050565b6110be82610bc8565b506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611120576001600081548092919061111a90611b50565b91905055505b806000808282546111319190611983565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111879190611983565b925050819055506111db8230837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611486909392919063ffffffff16565b7f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d828260405161120c9291906117d2565b60405180910390a15050565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b790611876565b60405180910390fd5b50505050565b6112ce611551565b600060036040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050600061137e826107d6565b905080602001516fffffffffffffffffffffffffffffffff1682602001516fffffffffffffffffffffffffffffffff1614156113be578092505050611483565b80600360008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507fe972555b20cae8150e291bb40efce3ef4e3ed6b6b2c39c029346600e95469d4881600001516040516114759190611896565b60405180910390a180925050505b90565b60006040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff841660248201528260448201526020600060648360008a5af13d15601f3d116001600051141617169150508061154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190611856565b60405180910390fd5b5050505050565b604051806040016040528060006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff1681525090565b604051806060016040528060006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff168152602001600081525090565b6000813590506115e381611bf7565b92915050565b6000813590506115f881611c0e565b92915050565b60006020828403121561161057600080fd5b600061161e848285016115d4565b91505092915050565b60006020828403121561163957600080fd5b6000611647848285016115e9565b91505092915050565b61165981611a98565b82525050565b61166881611af0565b82525050565b600061167b601a8361192c565b91507f496e73756666696369656e74207374616b656420616d6f756e740000000000006000830152602082019050919050565b60006116bb600d8361192c565b91507f43617374206f766572666c6f77000000000000000000000000000000000000006000830152602082019050919050565b60006116fb60148361192c565b91507f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006000830152602082019050919050565b600061173b600f8361192c565b91507f5452414e534645525f4641494c454400000000000000000000000000000000006000830152602082019050919050565b61177781611aaa565b82525050565b61178681611b14565b82525050565b61179581611ae6565b82525050565b60006060820190506117b06000830186611650565b6117bd602083018561177d565b6117ca604083018461177d565b949350505050565b60006040820190506117e76000830185611650565b6117f4602083018461178c565b9392505050565b6000602082019050611810600083018461165f565b92915050565b6000602082019050818103600083015261182f8161166e565b9050919050565b6000602082019050818103600083015261184f816116ae565b9050919050565b6000602082019050818103600083015261186f816116ee565b9050919050565b6000602082019050818103600083015261188f8161172e565b9050919050565b60006020820190506118ab600083018461177d565b92915050565b60006040820190506118c6600083018561176e565b6118d3602083018461176e565b9392505050565b60006060820190506118ef600083018661176e565b6118fc602083018561176e565b611909604083018461178c565b949350505050565b6000602082019050611926600083018461178c565b92915050565b600082825260208201905092915050565b600061194882611aaa565b915061195383611aaa565b9250826fffffffffffffffffffffffffffffffff0382111561197857611977611b99565b5b828201905092915050565b600061198e82611ae6565b915061199983611ae6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156119ce576119cd611b99565b5b828201905092915050565b60006119e482611ae6565b91506119ef83611ae6565b9250826119ff576119fe611bc8565b5b828204905092915050565b6000611a1582611ae6565b9150611a2083611ae6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a5957611a58611b99565b5b828202905092915050565b6000611a6f82611ae6565b9150611a7a83611ae6565b925082821015611a8d57611a8c611b99565b5b828203905092915050565b6000611aa382611ac6565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611afb82611b02565b9050919050565b6000611b0d82611ac6565b9050919050565b6000611b1f82611aaa565b9050919050565b6000611b3182611ae6565b91506000821415611b4557611b44611b99565b5b600182039050919050565b6000611b5b82611ae6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b8e57611b8d611b99565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b611c0081611a98565b8114611c0b57600080fd5b50565b611c1781611ae6565b8114611c2257600080fd5b5056fea2646970667358221220604d887ef6c70249d35664427c6bf56ad7f8d431168b98931b536bd9e5ac8c3d64736f6c634300080000330000000000000000000000007ae0f19d2ae2f490e710579284a58000d4e8c85f00000000000000000000000000000000000000000000000000000000661f4630000000000000000000000000000000000000000000000000000000006695ed300000000000000000000000000000000000000000006e479bae89aecaed000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806372f702f31161008c57806386989038116100665780638698903814610240578063a2dc05741461025e578063a694fc3a1461028e578063d771b0a6146102aa576100ea565b806372f702f3146101d257806373f273fc146101f0578063817b1cd214610222576100ea565b8063517d0411116100c8578063517d041114610147578063523bc7d51461016557806368e5585d1461018357806370641a36146101b3576100ea565b806308396646146100ef5780632e17de781461010d5780634e71d92d14610129575b600080fd5b6100f76102c8565b6040516101049190611911565b60405180910390f35b61012760048036038101906101229190611627565b61038e565b005b61013161039b565b60405161013e9190611911565b60405180910390f35b61014f6103d0565b60405161015c9190611911565b60405180910390f35b61016d6103f4565b60405161017a9190611911565b60405180910390f35b61019d600480360381019061019891906115fe565b610418565b6040516101aa9190611911565b60405180910390f35b6101bb610430565b6040516101c99291906118b1565b60405180910390f35b6101da61047a565b6040516101e791906117fb565b60405180910390f35b61020a600480360381019061020591906115fe565b61049e565b604051610219939291906118da565b60405180910390f35b61022a610500565b6040516102379190611911565b60405180910390f35b610248610506565b6040516102559190611911565b60405180910390f35b610278600480360381019061027391906115fe565b61050c565b6040516102859190611911565b60405180910390f35b6102a860048036038101906102a39190611627565b610746565b005b6102b2610753565b6040516102bf9190611911565b60405180910390f35b600061037360036040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250506107d6565b600001516fffffffffffffffffffffffffffffffff16905090565b61039833826109e6565b50565b6000806103a733610bc8565b600001516fffffffffffffffffffffffffffffffff1690506103c93382610f48565b8091505090565b7f000000000000000000000000000000000000000000000000000000006695ed3081565b7f000000000000000000000000000000000000000000000000edef7ecdb521e9e081565b60026020528060005260406000206000915090505481565b60038060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a90046fffffffffffffffffffffffffffffffff16905082565b7f0000000000000000000000007ae0f19d2ae2f490e710579284a58000d4e8c85f81565b60046020528060005260406000206000915090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a90046fffffffffffffffffffffffffffffffff16908060010154905083565b60005481565b60015481565b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001600182015481525050905060006106a460036040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250506107d6565b905061071c600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483602001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16611080565b82600001516fffffffffffffffffffffffffffffffff1661073d9190611983565b92505050919050565b61075033826110b5565b50565b7f00000000000000000000000000000000000000000000000000000000661f463081565b60006fffffffffffffffffffffffffffffffff80168211156107ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c590611836565b60405180910390fd5b819050919050565b6107de611551565b6000604051806040016040528084600001516fffffffffffffffffffffffffffffffff16815260200184602001516fffffffffffffffffffffffffffffffff1681525090506000805490507f00000000000000000000000000000000000000000000000000000000661f463042101561085b5781925050506109e1565b60007f000000000000000000000000000000000000000000000000000000006695ed3042106108aa577f000000000000000000000000000000000000000000000000000000006695ed306108ac565b425b9050600085602001516fffffffffffffffffffffffffffffffff16826108d29190611a64565b905060008114156108e957839450505050506109e1565b6108f282610777565b84602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505060008054141561093757839450505050506109e1565b6109aa837f000000000000000000000000000000000000000000000000edef7ecdb521e9e083670de0b6b3a76400006109709190611a0a565b61097a9190611a0a565b61098491906119d9565b87600001516fffffffffffffffffffffffffffffffff166109a59190611983565b610777565b84600001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff1681525050839450505050505b919050565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5f90611816565b60405180910390fd5b610a7182610bc8565b5080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610ad25760016000815480929190610acc90611b26565b91905055505b80600080828254610ae39190611a64565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b399190611a64565b92505081905550610b8b82827f0000000000000000000000007ae0f19d2ae2f490e710579284a58000d4e8c85f73ffffffffffffffffffffffffffffffffffffffff166112189092919063ffffffff16565b7f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f758282604051610bbc9291906117d2565b60405180910390a15050565b610bd061158f565b6000610bda6112c6565b90506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001600182015481525050905081602001516fffffffffffffffffffffffffffffffff1681602001516fffffffffffffffffffffffffffffffff161415610d06578092505050610f43565b6000610d7e600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483602001516fffffffffffffffffffffffffffffffff1685600001516fffffffffffffffffffffffffffffffff16611080565b9050610d8981610777565b82600001818151610d9a919061193d565b9150906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff1681525050610dd081610777565b6fffffffffffffffffffffffffffffffff1682604001818151610df39190611983565b91508181525050826000015182602001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505081600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550604082015181600101559050507f5b9aaf4cc5141c090a75f8b8a627863eba92df81f0c83c096350da9b79aedd048583600001518460200151604051610f349392919061179b565b60405180910390a18193505050505b919050565b6000610f5333610bc8565b600001516fffffffffffffffffffffffffffffffff169050610f7f8282610f7a9190611a64565b610777565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555061104283837f0000000000000000000000007ae0f19d2ae2f490e710579284a58000d4e8c85f73ffffffffffffffffffffffffffffffffffffffff166112189092919063ffffffff16565b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a83836040516110739291906117d2565b60405180910390a1505050565b6000670de0b6b3a764000083836110979190611a64565b856110a29190611a0a565b6110ac91906119d9565b90509392505050565b6110be82610bc8565b506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611120576001600081548092919061111a90611b50565b91905055505b806000808282546111319190611983565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111879190611983565b925050819055506111db8230837f0000000000000000000000007ae0f19d2ae2f490e710579284a58000d4e8c85f73ffffffffffffffffffffffffffffffffffffffff16611486909392919063ffffffff16565b7f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d828260405161120c9291906117d2565b60405180910390a15050565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b790611876565b60405180910390fd5b50505050565b6112ce611551565b600060036040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050600061137e826107d6565b905080602001516fffffffffffffffffffffffffffffffff1682602001516fffffffffffffffffffffffffffffffff1614156113be578092505050611483565b80600360008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507fe972555b20cae8150e291bb40efce3ef4e3ed6b6b2c39c029346600e95469d4881600001516040516114759190611896565b60405180910390a180925050505b90565b60006040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff841660248201528260448201526020600060648360008a5af13d15601f3d116001600051141617169150508061154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190611856565b60405180910390fd5b5050505050565b604051806040016040528060006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff1681525090565b604051806060016040528060006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff168152602001600081525090565b6000813590506115e381611bf7565b92915050565b6000813590506115f881611c0e565b92915050565b60006020828403121561161057600080fd5b600061161e848285016115d4565b91505092915050565b60006020828403121561163957600080fd5b6000611647848285016115e9565b91505092915050565b61165981611a98565b82525050565b61166881611af0565b82525050565b600061167b601a8361192c565b91507f496e73756666696369656e74207374616b656420616d6f756e740000000000006000830152602082019050919050565b60006116bb600d8361192c565b91507f43617374206f766572666c6f77000000000000000000000000000000000000006000830152602082019050919050565b60006116fb60148361192c565b91507f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006000830152602082019050919050565b600061173b600f8361192c565b91507f5452414e534645525f4641494c454400000000000000000000000000000000006000830152602082019050919050565b61177781611aaa565b82525050565b61178681611b14565b82525050565b61179581611ae6565b82525050565b60006060820190506117b06000830186611650565b6117bd602083018561177d565b6117ca604083018461177d565b949350505050565b60006040820190506117e76000830185611650565b6117f4602083018461178c565b9392505050565b6000602082019050611810600083018461165f565b92915050565b6000602082019050818103600083015261182f8161166e565b9050919050565b6000602082019050818103600083015261184f816116ae565b9050919050565b6000602082019050818103600083015261186f816116ee565b9050919050565b6000602082019050818103600083015261188f8161172e565b9050919050565b60006020820190506118ab600083018461177d565b92915050565b60006040820190506118c6600083018561176e565b6118d3602083018461176e565b9392505050565b60006060820190506118ef600083018661176e565b6118fc602083018561176e565b611909604083018461178c565b949350505050565b6000602082019050611926600083018461178c565b92915050565b600082825260208201905092915050565b600061194882611aaa565b915061195383611aaa565b9250826fffffffffffffffffffffffffffffffff0382111561197857611977611b99565b5b828201905092915050565b600061198e82611ae6565b915061199983611ae6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156119ce576119cd611b99565b5b828201905092915050565b60006119e482611ae6565b91506119ef83611ae6565b9250826119ff576119fe611bc8565b5b828204905092915050565b6000611a1582611ae6565b9150611a2083611ae6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a5957611a58611b99565b5b828202905092915050565b6000611a6f82611ae6565b9150611a7a83611ae6565b925082821015611a8d57611a8c611b99565b5b828203905092915050565b6000611aa382611ac6565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611afb82611b02565b9050919050565b6000611b0d82611ac6565b9050919050565b6000611b1f82611aaa565b9050919050565b6000611b3182611ae6565b91506000821415611b4557611b44611b99565b5b600182039050919050565b6000611b5b82611ae6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b8e57611b8d611b99565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b611c0081611a98565b8114611c0b57600080fd5b50565b611c1781611ae6565b8114611c2257600080fd5b5056fea2646970667358221220604d887ef6c70249d35664427c6bf56ad7f8d431168b98931b536bd9e5ac8c3d64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007ae0f19d2ae2f490e710579284a58000d4e8c85f00000000000000000000000000000000000000000000000000000000661f4630000000000000000000000000000000000000000000000000000000006695ed300000000000000000000000000000000000000000006e479bae89aecaed000000
-----Decoded View---------------
Arg [0] : _stakingToken (address): 0x7Ae0f19D2aE2f490e710579284A58000d4E8C85f
Arg [1] : _stakingStart (uint256): 1713325616
Arg [2] : _stakingEnd (uint256): 1721101616
Arg [3] : totalRewards (uint256): 133320000000000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007ae0f19d2ae2f490e710579284a58000d4e8c85f
Arg [1] : 00000000000000000000000000000000000000000000000000000000661f4630
Arg [2] : 000000000000000000000000000000000000000000000000000000006695ed30
Arg [3] : 0000000000000000000000000000000000000000006e479bae89aecaed000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.000028 | 239,703,888.3666 | $6,798 |
Loading...
Loading
[ Download: CSV Export ]
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.