Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 138 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Exit | 11399059 | 1905 days ago | IN | 0 ETH | 0.00178528 | ||||
| Stake | 11362361 | 1911 days ago | IN | 0 ETH | 0.00490495 | ||||
| Exit | 11298296 | 1921 days ago | IN | 0 ETH | 0.00401688 | ||||
| Stake | 11298284 | 1921 days ago | IN | 0 ETH | 0.00404095 | ||||
| Exit | 11285252 | 1923 days ago | IN | 0 ETH | 0.00473099 | ||||
| Stake | 11263195 | 1926 days ago | IN | 0 ETH | 0.00479595 | ||||
| Get Reward | 11237690 | 1930 days ago | IN | 0 ETH | 0.00076238 | ||||
| Exit | 11233431 | 1931 days ago | IN | 0 ETH | 0.00501509 | ||||
| Stake | 11229233 | 1932 days ago | IN | 0 ETH | 0.00620314 | ||||
| Get Reward | 11228501 | 1932 days ago | IN | 0 ETH | 0.00193135 | ||||
| Stake | 11228284 | 1932 days ago | IN | 0 ETH | 0.00452392 | ||||
| Stake | 11227441 | 1932 days ago | IN | 0 ETH | 0.00163463 | ||||
| Exit | 11221342 | 1933 days ago | IN | 0 ETH | 0.00393865 | ||||
| Exit | 11220972 | 1933 days ago | IN | 0 ETH | 0.00353119 | ||||
| Exit | 11220317 | 1933 days ago | IN | 0 ETH | 0.00385884 | ||||
| Get Reward | 11219893 | 1933 days ago | IN | 0 ETH | 0.00096523 | ||||
| Withdraw | 11219893 | 1933 days ago | IN | 0 ETH | 0.00127572 | ||||
| Exit | 11215835 | 1934 days ago | IN | 0 ETH | 0.0026157 | ||||
| Get Reward | 11214444 | 1934 days ago | IN | 0 ETH | 0.0023097 | ||||
| Stake | 11214263 | 1934 days ago | IN | 0 ETH | 0.00174165 | ||||
| Get Reward | 11212839 | 1934 days ago | IN | 0 ETH | 0.00172894 | ||||
| Get Reward | 11211205 | 1934 days ago | IN | 0 ETH | 0.00277164 | ||||
| Get Reward | 11209375 | 1935 days ago | IN | 0 ETH | 0.0023097 | ||||
| Stake | 11209209 | 1935 days ago | IN | 0 ETH | 0.00186121 | ||||
| Get Reward | 11207929 | 1935 days ago | IN | 0 ETH | 0.0046194 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
GAMERWETHPool
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-10-31
*/
/*
____ __ __ __ _
/ __/__ __ ___ / /_ / / ___ / /_ (_)__ __
_\ \ / // // _ \/ __// _ \/ -_)/ __// / \ \ /
/___/ \_, //_//_/\__//_//_/\__/ \__//_/ /_\_\
/___/
* Synthetix: GAMERRewards.sol
*
* Docs: https://docs.synthetix.io/
*
*
* MIT License
* ===========
*
* Copyright (c) 2020 Synthetix
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/
// File: @openzeppelin/contracts/math/Math.sol
pragma solidity ^0.5.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow, so we distribute
return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
}
}
// File: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity ^0.5.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/GSN/Context.sol
pragma solidity ^0.5.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin/contracts/ownership/Ownable.sol
pragma solidity ^0.5.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
_owner = _msgSender();
emit OwnershipTransferred(address(0), _owner);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return _msgSender() == _owner;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.5.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see {ERC20Detailed}.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.5.5;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* This test is non-exhaustive, and there may be false-negatives: during the
* execution of a contract's constructor, its address will be reported as
* not containing a contract.
*
* IMPORTANT: It is unsafe to assume that an address for which this
* function returns false is an externally-owned account (EOA) and not a
* contract.
*/
function isContract(address account) internal view returns (bool) {
// This method relies in extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != 0x0 && codehash != accountHash);
}
/**
* @dev Converts an `address` into `address payable`. Note that this is
* simply a type cast: the actual underlying value is not changed.
*
* _Available since v2.4.0._
*/
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*
* _Available since v2.4.0._
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-call-value
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol
pragma solidity ^0.5.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: contracts/IRewardDistributionRecipient.sol
pragma solidity ^0.5.0;
contract IRewardDistributionRecipient is Ownable {
address public rewardDistribution;
function notifyRewardAmount(uint256 reward) external;
modifier onlyRewardDistribution() {
require(_msgSender() == rewardDistribution, "Caller is not reward distribution");
_;
}
function setRewardDistribution(address _rewardDistribution)
external
onlyOwner
{
rewardDistribution = _rewardDistribution;
}
}
// File: contracts/CurveRewards.sol
pragma solidity ^0.5.0;
interface GAMER {
function gamersScalingFactor() external returns (uint256);
}
contract LPTokenWrapper {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IERC20 public weth = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function stake(uint256 amount) public {
_totalSupply = _totalSupply.add(amount);
_balances[msg.sender] = _balances[msg.sender].add(amount);
weth.safeTransferFrom(msg.sender, address(this), amount);
}
function withdraw(uint256 amount) public {
_totalSupply = _totalSupply.sub(amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount);
weth.safeTransfer(msg.sender, amount);
}
}
contract GAMERWETHPool is LPTokenWrapper, IRewardDistributionRecipient {
IERC20 public gamer = IERC20(0x36F697f791A0C91D6f1BB166767d5D2D701B1d82);
uint256 public constant DURATION = 7 days;
uint256 public starttime = 1604289600; // 2020-11-02 04:00:00 (UTC +04:00)
uint256 public periodFinish = 0;
uint256 public rewardRate = 0;
uint256 public lastUpdateTime;
uint256 public rewardPerTokenStored;
mapping(address => uint256) public userRewardPerTokenPaid;
mapping(address => uint256) public rewards;
event RewardAdded(uint256 reward);
event Staked(address indexed user, uint256 amount);
event Withdrawn(address indexed user, uint256 amount);
event RewardPaid(address indexed user, uint256 reward);
modifier checkStart() {
require(block.timestamp >= starttime,"not start");
_;
}
modifier updateReward(address account) {
rewardPerTokenStored = rewardPerToken();
lastUpdateTime = lastTimeRewardApplicable();
if (account != address(0)) {
rewards[account] = earned(account);
userRewardPerTokenPaid[account] = rewardPerTokenStored;
}
_;
}
function lastTimeRewardApplicable() public view returns (uint256) {
return Math.min(block.timestamp, periodFinish);
}
function rewardPerToken() public view returns (uint256) {
if (totalSupply() == 0) {
return rewardPerTokenStored;
}
return
rewardPerTokenStored.add(
lastTimeRewardApplicable()
.sub(lastUpdateTime)
.mul(rewardRate)
.mul(1e18)
.div(totalSupply())
);
}
function earned(address account) public view returns (uint256) {
return
balanceOf(account)
.mul(rewardPerToken().sub(userRewardPerTokenPaid[account]))
.div(1e18)
.add(rewards[account]);
}
// stake visibility is public as overriding LPTokenWrapper's stake() function
function stake(uint256 amount) public updateReward(msg.sender) checkStart {
require(amount > 0, "Cannot stake 0");
super.stake(amount);
emit Staked(msg.sender, amount);
}
function withdraw(uint256 amount) public updateReward(msg.sender) checkStart {
require(amount > 0, "Cannot withdraw 0");
super.withdraw(amount);
emit Withdrawn(msg.sender, amount);
}
function exit() external {
withdraw(balanceOf(msg.sender));
getReward();
}
function getReward() public updateReward(msg.sender) checkStart {
uint256 reward = earned(msg.sender);
if (reward > 0) {
rewards[msg.sender] = 0;
uint256 scalingFactor = GAMER(address(gamer)).gamersScalingFactor();
uint256 trueReward = reward.mul(scalingFactor).div(10**18);
gamer.safeTransfer(msg.sender, trueReward);
emit RewardPaid(msg.sender, trueReward);
}
}
function notifyRewardAmount(uint256 reward)
external
onlyRewardDistribution
updateReward(address(0))
{
if (block.timestamp > starttime) {
if (block.timestamp >= periodFinish) {
rewardRate = reward.div(DURATION);
} else {
uint256 remaining = periodFinish.sub(block.timestamp);
uint256 leftover = remaining.mul(rewardRate);
rewardRate = reward.add(leftover).div(DURATION);
}
lastUpdateTime = block.timestamp;
periodFinish = block.timestamp.add(DURATION);
emit RewardAdded(reward);
} else {
rewardRate = reward.div(DURATION);
lastUpdateTime = starttime;
periodFinish = starttime.add(DURATION);
emit RewardAdded(reward);
}
}
// This function allows governance to take unsupported tokens out of the
// contract, since this one exists longer than the other pools.
// This is in an effort to make someone whole, should they seriously
// mess up. There is no guarantee governance will vote to return these.
// It also allows for removal of airdropped tokens.
function governanceRecoverUnsupported(IERC20 _token, uint256 amount, address to)
external
{
// only gov
require(msg.sender == owner(), "!governance");
// cant take staked asset
require(_token != weth, "weth");
// cant take reward asset
require(_token != gamer, "gamer");
// transfer to
_token.safeTransfer(to, amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"constant":true,"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gamer","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"governanceRecoverUnsupported","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"starttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600080546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2178255600580549091167336f697f791a0c91d6f1bb166767d5d2d701b1d82179055635f9f8440600655600781905560085561006c6001600160e01b036100bd16565b600380546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36100c1565b3390565b611b30806100d06000396000f3fe608060405234801561001057600080fd5b50600436106101b85760003560e01c8063715018a6116100f9578063a694fc3a11610097578063df136d6511610071578063df136d6514610417578063e9fad8ee1461041f578063ebe2b12b14610427578063f2fde38b1461042f576101b8565b8063a694fc3a146103ea578063c8f33c9114610407578063cd3daf9d1461040f576101b8565b80638b876347116100d35780638b8763471461038b5780638da58897146103be5780638da5cb5b146103c65780638f32d59b146103ce576101b8565b8063715018a6146103735780637b0a47ee1461037b57806380faa57d14610383576101b8565b80631be05289116101665780633d18b912116101405780633d18b912146102ed5780633fc8cef3146102f557806354575af4146102fd57806370a0823114610340576101b8565b80631be05289146102ab5780632e1a7d4d146102b35780633c6b16ab146102d0576101b8565b8063101114cf11610197578063101114cf1461026a57806318160ddd1461029b57806319ab81e9146102a3576101b8565b80628cc262146101bd5780630700037d146102025780630d68b76114610235575b600080fd5b6101f0600480360360208110156101d357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610462565b60408051918252519081900360200190f35b6101f06004803603602081101561021857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104f5565b6102686004803603602081101561024b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610507565b005b6102726105c1565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f06105dd565b6102726105e4565b6101f0610600565b610268600480360360208110156102c957600080fd5b5035610607565b610268600480360360208110156102e657600080fd5b503561079f565b6102686109de565b610272610c06565b6102686004803603606081101561031357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160409091013516610c22565b6101f06004803603602081101561035657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e05565b610268610e2d565b6101f0610f0f565b6101f0610f15565b6101f0600480360360208110156103a157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f28565b6101f0610f3a565b610272610f40565b6103d6610f5c565b604080519115158252519081900360200190f35b6102686004803603602081101561040057600080fd5b5035610f9c565b6101f0611134565b6101f061113a565b6101f061118e565b610268611194565b6101f06111af565b6102686004803603602081101561044557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111b5565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c6020908152604080832054600b9092528220546104ef91906104e390670de0b6b3a7640000906104d7906104c2906104b661113a565b9063ffffffff61123416565b6104cb88610e05565b9063ffffffff61127d16565b9063ffffffff6112f016565b9063ffffffff61133216565b92915050565b600c6020526000908152604090205481565b61050f610f5c565b61057a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b6001545b90565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b62093a8081565b3361061061113a565b600a5561061b610f15565b60095573ffffffffffffffffffffffffffffffffffffffff81161561067c5761064381610462565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b6006544210156106ed57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000821161075c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b610765826113a6565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b60045473ffffffffffffffffffffffffffffffffffffffff166107c0611414565b73ffffffffffffffffffffffffffffffffffffffff161461082c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611ab16021913960400191505060405180910390fd5b600061083661113a565b600a55610841610f15565b60095573ffffffffffffffffffffffffffffffffffffffff8116156108a25761086981610462565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b6006544211156109725760075442106108d0576108c88262093a8063ffffffff6112f016565b60085561091e565b6007546000906108e6904263ffffffff61123416565b905060006108ff6008548361127d90919063ffffffff16565b905061091862093a806104d7868463ffffffff61133216565b60085550505b4260098190556109379062093a8063ffffffff61133216565b6007556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a16109da565b6109858262093a8063ffffffff6112f016565b60085560065460098190556109a39062093a8063ffffffff61133216565b6007556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15b5050565b336109e761113a565b600a556109f2610f15565b60095573ffffffffffffffffffffffffffffffffffffffff811615610a5357610a1a81610462565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b600654421015610ac457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610acf33610462565b905080156109da57336000908152600c6020908152604080832083905560055481517fe662241d000000000000000000000000000000000000000000000000000000008152915173ffffffffffffffffffffffffffffffffffffffff9091169263e662241d926004808201939182900301818787803b158015610b5157600080fd5b505af1158015610b65573d6000803e3d6000fd5b505050506040513d6020811015610b7b57600080fd5b505190506000610b9d670de0b6b3a76400006104d7858563ffffffff61127d16565b600554909150610bca9073ffffffffffffffffffffffffffffffffffffffff16338363ffffffff61141816565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a250505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b610c2a610f40565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f21676f7665726e616e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b60005473ffffffffffffffffffffffffffffffffffffffff84811691161415610d4f57604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f7765746800000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60055473ffffffffffffffffffffffffffffffffffffffff84811691161415610dd957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f67616d6572000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610e0073ffffffffffffffffffffffffffffffffffffffff8416828463ffffffff61141816565b505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b610e35610f5c565b610ea057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60035460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60085481565b6000610f23426007546114a5565b905090565b600b6020526000908152604090205481565b60065481565b60035473ffffffffffffffffffffffffffffffffffffffff1690565b60035460009073ffffffffffffffffffffffffffffffffffffffff16610f80611414565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b33610fa561113a565b600a55610fb0610f15565b60095573ffffffffffffffffffffffffffffffffffffffff81161561101157610fd881610462565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b60065442101561108257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082116110f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6110fa826114bb565b60408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25050565b60095481565b60006111446105dd565b6111515750600a546105e1565b610f2361117f61115f6105dd565b6104d7670de0b6b3a76400006104cb6008546104cb6009546104b6610f15565b600a549063ffffffff61133216565b600a5481565b6111a56111a033610e05565b610607565b6111ad6109de565b565b60075481565b6111bd610f5c565b61122857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6112318161152a565b50565b600061127683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611624565b9392505050565b60008261128c575060006104ef565b8282028284828161129957fe5b0414611276576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611a906021913960400191505060405180910390fd5b600061127683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116d5565b60008282018381101561127657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001546113b9908263ffffffff61123416565b600155336000908152600260205260409020546113dc908263ffffffff61123416565b3360008181526002602052604081209290925590546112319173ffffffffffffffffffffffffffffffffffffffff9091169083611418565b3390565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610e00908490611754565b60008183106114b45781611276565b5090919050565b6001546114ce908263ffffffff61133216565b600155336000908152600260205260409020546114f1908263ffffffff61133216565b3360008181526002602052604081209290925590546112319173ffffffffffffffffffffffffffffffffffffffff909116903084611998565b73ffffffffffffffffffffffffffffffffffffffff8116611596576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611a6a6026913960400191505060405180910390fd5b60035460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081848411156116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561169257818101518382015260200161167a565b50505050905090810190601f1680156116bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561169257818101518382015260200161167a565b50600083858161174a57fe5b0495945050505050565b6117738273ffffffffffffffffffffffffffffffffffffffff16611a2d565b6117de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061184757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161180a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146118a9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ae565b606091505b50915091508161191f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156119925780806020019051602081101561193b57600080fd5b5051611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611ad2602a913960400191505060405180910390fd5b50505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611992908590611754565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611a615750808214155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820ff13abc081961a542eb4acf5ea84810b2130912b36f9805751432747d88ef1cc64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101b85760003560e01c8063715018a6116100f9578063a694fc3a11610097578063df136d6511610071578063df136d6514610417578063e9fad8ee1461041f578063ebe2b12b14610427578063f2fde38b1461042f576101b8565b8063a694fc3a146103ea578063c8f33c9114610407578063cd3daf9d1461040f576101b8565b80638b876347116100d35780638b8763471461038b5780638da58897146103be5780638da5cb5b146103c65780638f32d59b146103ce576101b8565b8063715018a6146103735780637b0a47ee1461037b57806380faa57d14610383576101b8565b80631be05289116101665780633d18b912116101405780633d18b912146102ed5780633fc8cef3146102f557806354575af4146102fd57806370a0823114610340576101b8565b80631be05289146102ab5780632e1a7d4d146102b35780633c6b16ab146102d0576101b8565b8063101114cf11610197578063101114cf1461026a57806318160ddd1461029b57806319ab81e9146102a3576101b8565b80628cc262146101bd5780630700037d146102025780630d68b76114610235575b600080fd5b6101f0600480360360208110156101d357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610462565b60408051918252519081900360200190f35b6101f06004803603602081101561021857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104f5565b6102686004803603602081101561024b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610507565b005b6102726105c1565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f06105dd565b6102726105e4565b6101f0610600565b610268600480360360208110156102c957600080fd5b5035610607565b610268600480360360208110156102e657600080fd5b503561079f565b6102686109de565b610272610c06565b6102686004803603606081101561031357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160409091013516610c22565b6101f06004803603602081101561035657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e05565b610268610e2d565b6101f0610f0f565b6101f0610f15565b6101f0600480360360208110156103a157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f28565b6101f0610f3a565b610272610f40565b6103d6610f5c565b604080519115158252519081900360200190f35b6102686004803603602081101561040057600080fd5b5035610f9c565b6101f0611134565b6101f061113a565b6101f061118e565b610268611194565b6101f06111af565b6102686004803603602081101561044557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111b5565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c6020908152604080832054600b9092528220546104ef91906104e390670de0b6b3a7640000906104d7906104c2906104b661113a565b9063ffffffff61123416565b6104cb88610e05565b9063ffffffff61127d16565b9063ffffffff6112f016565b9063ffffffff61133216565b92915050565b600c6020526000908152604090205481565b61050f610f5c565b61057a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b6001545b90565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b62093a8081565b3361061061113a565b600a5561061b610f15565b60095573ffffffffffffffffffffffffffffffffffffffff81161561067c5761064381610462565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b6006544210156106ed57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000821161075c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b610765826113a6565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b60045473ffffffffffffffffffffffffffffffffffffffff166107c0611414565b73ffffffffffffffffffffffffffffffffffffffff161461082c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611ab16021913960400191505060405180910390fd5b600061083661113a565b600a55610841610f15565b60095573ffffffffffffffffffffffffffffffffffffffff8116156108a25761086981610462565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b6006544211156109725760075442106108d0576108c88262093a8063ffffffff6112f016565b60085561091e565b6007546000906108e6904263ffffffff61123416565b905060006108ff6008548361127d90919063ffffffff16565b905061091862093a806104d7868463ffffffff61133216565b60085550505b4260098190556109379062093a8063ffffffff61133216565b6007556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a16109da565b6109858262093a8063ffffffff6112f016565b60085560065460098190556109a39062093a8063ffffffff61133216565b6007556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15b5050565b336109e761113a565b600a556109f2610f15565b60095573ffffffffffffffffffffffffffffffffffffffff811615610a5357610a1a81610462565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b600654421015610ac457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610acf33610462565b905080156109da57336000908152600c6020908152604080832083905560055481517fe662241d000000000000000000000000000000000000000000000000000000008152915173ffffffffffffffffffffffffffffffffffffffff9091169263e662241d926004808201939182900301818787803b158015610b5157600080fd5b505af1158015610b65573d6000803e3d6000fd5b505050506040513d6020811015610b7b57600080fd5b505190506000610b9d670de0b6b3a76400006104d7858563ffffffff61127d16565b600554909150610bca9073ffffffffffffffffffffffffffffffffffffffff16338363ffffffff61141816565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a250505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b610c2a610f40565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f21676f7665726e616e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b60005473ffffffffffffffffffffffffffffffffffffffff84811691161415610d4f57604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f7765746800000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60055473ffffffffffffffffffffffffffffffffffffffff84811691161415610dd957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f67616d6572000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610e0073ffffffffffffffffffffffffffffffffffffffff8416828463ffffffff61141816565b505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b610e35610f5c565b610ea057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60035460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60085481565b6000610f23426007546114a5565b905090565b600b6020526000908152604090205481565b60065481565b60035473ffffffffffffffffffffffffffffffffffffffff1690565b60035460009073ffffffffffffffffffffffffffffffffffffffff16610f80611414565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b33610fa561113a565b600a55610fb0610f15565b60095573ffffffffffffffffffffffffffffffffffffffff81161561101157610fd881610462565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b60065442101561108257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082116110f157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b6110fa826114bb565b60408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25050565b60095481565b60006111446105dd565b6111515750600a546105e1565b610f2361117f61115f6105dd565b6104d7670de0b6b3a76400006104cb6008546104cb6009546104b6610f15565b600a549063ffffffff61133216565b600a5481565b6111a56111a033610e05565b610607565b6111ad6109de565b565b60075481565b6111bd610f5c565b61122857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6112318161152a565b50565b600061127683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611624565b9392505050565b60008261128c575060006104ef565b8282028284828161129957fe5b0414611276576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611a906021913960400191505060405180910390fd5b600061127683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116d5565b60008282018381101561127657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001546113b9908263ffffffff61123416565b600155336000908152600260205260409020546113dc908263ffffffff61123416565b3360008181526002602052604081209290925590546112319173ffffffffffffffffffffffffffffffffffffffff9091169083611418565b3390565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610e00908490611754565b60008183106114b45781611276565b5090919050565b6001546114ce908263ffffffff61133216565b600155336000908152600260205260409020546114f1908263ffffffff61133216565b3360008181526002602052604081209290925590546112319173ffffffffffffffffffffffffffffffffffffffff909116903084611998565b73ffffffffffffffffffffffffffffffffffffffff8116611596576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611a6a6026913960400191505060405180910390fd5b60035460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081848411156116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561169257818101518382015260200161167a565b50505050905090810190601f1680156116bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561169257818101518382015260200161167a565b50600083858161174a57fe5b0495945050505050565b6117738273ffffffffffffffffffffffffffffffffffffffff16611a2d565b6117de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061184757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161180a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146118a9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ae565b606091505b50915091508161191f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156119925780806020019051602081101561193b57600080fd5b5051611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611ad2602a913960400191505060405180910390fd5b50505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611992908590611754565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611a615750808214155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820ff13abc081961a542eb4acf5ea84810b2130912b36f9805751432747d88ef1cc64736f6c63430005110032
Deployed Bytecode Sourcemap
22939:4783:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22939:4783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24728:265;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24728:265:0;;;;:::i;:::-;;;;;;;;;;;;;;;;23442:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23442:42:0;;;;:::i;21665:161::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21665:161:0;;;;:::i;:::-;;21409:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22261:91;;;:::i;23017:72::-;;;:::i;23096:41::-;;;:::i;25294:214::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25294:214:0;;:::i;26089:854::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26089:854:0;;:::i;25621:460::-;;;:::i;22092:71::-;;;:::i;27306:413::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27306:413:0;;;;;;;;;;;;;;;;;;:::i;22360:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22360:110:0;;;;:::i;10691:140::-;;;:::i;23264:29::-;;;:::i;24161:131::-;;;:::i;23378:57::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23378:57:0;;;;:::i;23146:37::-;;;:::i;9880:79::-;;;:::i;10246:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;25084:202;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25084:202:0;;:::i;23300:29::-;;;:::i;24300:420::-;;;:::i;23336:35::-;;;:::i;25516:97::-;;;:::i;23226:31::-;;;:::i;10986:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10986:109:0;;;;:::i;24728:265::-;24968:16;;;24782:7;24968:16;;;:7;:16;;;;;;;;;24884:22;:31;;;;;;24822:163;;24968:16;24822:123;;24940:4;;24822:95;;24863:53;;:16;:14;:16::i;:::-;:20;:53;:20;:53;:::i;:::-;24822:18;24832:7;24822:9;:18::i;:::-;:40;:95;:40;:95;:::i;:::-;:117;:123;:117;:123;:::i;:::-;:145;:163;:145;:163;:::i;:::-;24802:183;24728:265;-1:-1:-1;;24728:265:0:o;23442:42::-;;;;;;;;;;;;;:::o;21665:161::-;10092:9;:7;:9::i;:::-;10084:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21778:18;:40;;;;;;;;;;;;;;;21665:161::o;21409:33::-;;;;;;:::o;22261:91::-;22332:12;;22261:91;;:::o;23017:72::-;;;;;;:::o;23096:41::-;23131:6;23096:41;:::o;25294:214::-;25348:10;23896:16;:14;:16::i;:::-;23873:20;:39;23940:26;:24;:26::i;:::-;23923:14;:43;23981:21;;;;23977:157;;24038:15;24045:7;24038:6;:15::i;:::-;24019:16;;;;;;;:7;:16;;;;;;;;:34;;;;24102:20;;24068:22;:31;;;;;;:54;23977:157;23773:9;;23754:15;:28;;23746:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25399:1;25390:6;:10;25382:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25433:22;25448:6;25433:14;:22::i;:::-;25471:29;;;;;;;;25481:10;;25471:29;;;;;;;;;;25294:214;;:::o;26089:854::-;21581:18;;;;21565:12;:10;:12::i;:::-;:34;;;21557:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26213:1;23896:16;:14;:16::i;:::-;23873:20;:39;23940:26;:24;:26::i;:::-;23923:14;:43;23981:21;;;;23977:157;;24038:15;24045:7;24038:6;:15::i;:::-;24019:16;;;;;;;:7;:16;;;;;;;;:34;;;;24102:20;;24068:22;:31;;;;;;:54;23977:157;26255:9;;26237:15;:27;26233:703;;;26302:12;;26283:15;:31;26279:316;;26346:20;:6;23131;26346:20;:10;:20;:::i;:::-;26333:10;:33;26279:316;;;26423:12;;26403:17;;26423:33;;26440:15;26423:33;:16;:33;:::i;:::-;26403:53;;26473:16;26492:25;26506:10;;26492:9;:13;;:25;;;;:::i;:::-;26473:44;-1:-1:-1;26547:34:0;23131:6;26547:20;:6;26473:44;26547:20;:10;:20;:::i;:34::-;26534:10;:47;-1:-1:-1;;26279:316:0;26624:15;26607:14;:32;;;26667:29;;23131:6;26667:29;:19;:29;:::i;:::-;26652:12;:44;26714:19;;;;;;;;;;;;;;;;;26233:703;;;26777:20;:6;23131;26777:20;:10;:20;:::i;:::-;26764:10;:33;26827:9;;26810:14;:26;;;26864:23;;23131:6;26864:23;:13;:23;:::i;:::-;26849:12;:38;26905:19;;;;;;;;;;;;;;;;;26233:703;21648:1;26089:854;:::o;25621:460::-;25662:10;23896:16;:14;:16::i;:::-;23873:20;:39;23940:26;:24;:26::i;:::-;23923:14;:43;23981:21;;;;23977:157;;24038:15;24045:7;24038:6;:15::i;:::-;24019:16;;;;;;;:7;:16;;;;;;;;:34;;;;24102:20;;24068:22;:31;;;;;;:54;23977:157;23773:9;;23754:15;:28;;23746:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25696:14;25713:18;25720:10;25713:6;:18::i;:::-;25696:35;-1:-1:-1;25746:10:0;;25742:332;;25781:10;25795:1;25773:19;;;:7;:19;;;;;;;;:23;;;25849:5;;25835:43;;;;;;;25773:19;25849:5;;;;25835:41;;:43;;;;;;;;;;;25795:1;25849:5;25835:43;;;5:2:-1;;;;30:1;27;20:12;5:2;25835:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25835:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25835:43:0;;-1:-1:-1;25893:18:0;25914:37;25944:6;25914:25;:6;25835:43;25914:25;:10;:25;:::i;:37::-;25966:5;;25893:58;;-1:-1:-1;25966:42:0;;:5;;25985:10;25893:58;25966:42;:18;:42;:::i;:::-;26028:34;;;;;;;;26039:10;;26028:34;;;;;;;;;;25742:332;;23806:1;25621:460;:::o;22092:71::-;;;;;;:::o;27306:413::-;27464:7;:5;:7::i;:::-;27450:21;;:10;:21;;;27442:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27551:4;;;27541:14;;;27551:4;;27541:14;;27533:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27628:5;;;27618:15;;;27628:5;;27618:15;;27610:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27680:31;:19;;;27700:2;27704:6;27680:31;:19;:31;:::i;:::-;27306:413;;;:::o;22360:110::-;22444:18;;22417:7;22444:18;;;:9;:18;;;;;;;22360:110::o;10691:140::-;10092:9;:7;:9::i;:::-;10084:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10774:6;;10753:40;;10790:1;;10753:40;10774:6;;10753:40;;10790:1;;10753:40;10804:6;:19;;;;;;10691:140::o;23264:29::-;;;;:::o;24161:131::-;24218:7;24245:39;24254:15;24271:12;;24245:8;:39::i;:::-;24238:46;;24161:131;:::o;23378:57::-;;;;;;;;;;;;;:::o;23146:37::-;;;;:::o;9880:79::-;9945:6;;;;9880:79;:::o;10246:94::-;10326:6;;10286:4;;10326:6;;10310:12;:10;:12::i;:::-;:22;;;10303:29;;10246:94;:::o;25084:202::-;25135:10;23896:16;:14;:16::i;:::-;23873:20;:39;23940:26;:24;:26::i;:::-;23923:14;:43;23981:21;;;;23977:157;;24038:15;24045:7;24038:6;:15::i;:::-;24019:16;;;;;;;:7;:16;;;;;;;;:34;;;;24102:20;;24068:22;:31;;;;;;:54;23977:157;23773:9;;23754:15;:28;;23746:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25186:1;25177:6;:10;25169:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25217:19;25229:6;25217:11;:19::i;:::-;25252:26;;;;;;;;25259:10;;25252:26;;;;;;;;;;25084:202;;:::o;23300:29::-;;;;:::o;24300:420::-;24347:7;24371:13;:11;:13::i;:::-;24367:78;;-1:-1:-1;24413:20:0;;24406:27;;24367:78;24475:237;24518:179;24683:13;:11;:13::i;:::-;24518:138;24651:4;24518:106;24613:10;;24518:68;24571:14;;24518:26;:24;:26::i;:179::-;24475:20;;;:237;:24;:237;:::i;23336:35::-;;;;:::o;25516:97::-;25552:31;25561:21;25571:10;25561:9;:21::i;:::-;25552:8;:31::i;:::-;25594:11;:9;:11::i;:::-;25516:97::o;23226:31::-;;;;:::o;10986:109::-;10092:9;:7;:9::i;:::-;10084:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11059:28;11078:8;11059:18;:28::i;:::-;10986:109;:::o;3630:136::-;3688:7;3715:43;3719:1;3722;3715:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3708:50;3630:136;-1:-1:-1;;;3630:136:0:o;4546:471::-;4604:7;4849:6;4845:47;;-1:-1:-1;4879:1:0;4872:8;;4845:47;4916:5;;;4920:1;4916;:5;:1;4940:5;;;;;:10;4932:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5485:132;5543:7;5570:39;5574:1;5577;5570:39;;;;;;;;;;;;;;;;;:3;:39::i;3174:181::-;3232:7;3264:5;;;3288:6;;;;3280:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22717:215;22784:12;;:24;;22801:6;22784:24;:16;:24;:::i;:::-;22769:12;:39;22853:10;22843:21;;;;:9;:21;;;;;;:33;;22869:6;22843:33;:25;:33;:::i;:::-;22829:10;22819:21;;;;:9;:21;;;;;:57;;;;22887:4;;:37;;22819:21;22887:4;;;;22917:6;22887:17;:37::i;8629:98::-;8709:10;8629:98;:::o;18107:176::-;18216:58;;;18239:14;18216:58;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18216:58:0;;;;;;;;25:18:-1;;61:17;;18216:58:0;182:15:-1;18239:23:0;179:29:-1;160:49;;18190:85:0;;18209:5;;18190:18;:85::i;1836:106::-;1894:7;1925:1;1921;:5;:13;;1933:1;1921:13;;;-1:-1:-1;1929:1:0;;1836:106;-1:-1:-1;1836:106:0:o;22478:231::-;22542:12;;:24;;22559:6;22542:24;:16;:24;:::i;:::-;22527:12;:39;22611:10;22601:21;;;;:9;:21;;;;;;:33;;22627:6;22601:33;:25;:33;:::i;:::-;22587:10;22577:21;;;;:9;:21;;;;;:57;;;;22645:4;;:56;;22577:21;22645:4;;;;22687;22694:6;22645:21;:56::i;11201:229::-;11275:22;;;11267:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11377:6;;11356:38;;;;;;;11377:6;;11356:38;;11377:6;;11356:38;11405:6;:17;;;;;;;;;;;;;;;11201:229::o;4103:192::-;4189:7;4225:12;4217:6;;;;4209:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4209:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4261:5:0;;;4103:192::o;6147:345::-;6233:7;6335:12;6328:5;6320:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6320:28:0;;6359:9;6375:1;6371;:5;;;;;;;6147:345;-1:-1:-1;;;;;6147:345:0:o;20146:1114::-;20750:27;20758:5;20750:25;;;:27::i;:::-;20742:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20887:12;20901:23;20936:5;20928:19;;20948:4;20928:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;20928:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;20886:67:0;;;;20972:7;20964:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21033:17;;:21;21029:224;;21175:10;21164:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21164:30:0;21156:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20146:1114;;;;:::o;18291:204::-;18418:68;;;18441:18;18418:68;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18418:68:0;;;;;;;;25:18:-1;;61:17;;18418:68:0;182:15:-1;18441:27:0;179:29:-1;160:49;;18392:95:0;;18411:5;;18392:18;:95::i;14945:810::-;15005:4;15664:20;;15507:66;15704:15;;;;;:42;;;15735:11;15723:8;:23;;15704:42;15696:51;14945:810;-1:-1:-1;;;;14945:810:0:o
Swarm Source
bzzr://ff13abc081961a542eb4acf5ea84810b2130912b36f9805751432747d88ef1cc
Loading...
Loading
Loading...
Loading
Net Worth in USD
$11.10
Net Worth in ETH
0.0061
Token Allocations
WETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,820.16 | 0.0061 | $11.1 |
Loading...
Loading
Loading...
Loading
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.