Token Strategyx Token
Overview ERC-20
Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
1,000,000,000 STAY
Holders:
1,302 addresses
Transfers:
-
Contract:
Decimals:
18
Official Site:
[ Download CSV Export ]
[ Download CSV Export ]
OVERVIEW
StragetyX Finance is a platform for all your DeFi investments minimizing correlations to the general market. Increase leverage to maximize return.Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
STAYToken
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: MIT pragma solidity >=0.6.0 <0.9.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require( initializing || isConstructor() || !initialized, "Contract instance has already been initialized" ); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } pragma solidity >=0.6.0 <0.9.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 is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer {} function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } pragma solidity >=0.6.0 <0.9.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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * 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 Initializable, Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @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(_owner == _msgSender(), "Ownable: caller is not the 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 virtual 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 virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } pragma solidity >=0.6.0 <0.9.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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 ); } pragma solidity >=0.6.0 <0.9.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. */ 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. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { 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. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } pragma solidity >=0.6.0 <0.9.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Initializable, Context, IERC20 { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ function __ERC20_init(string memory name_, string memory symbol_) internal initializer { __Context_init_unchained(); __ERC20_init_unchained(name_, symbol_); } function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); // _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); // _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} uint256[44] private __gap; } pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library SafeERC20 { function _safeApprove( IERC20 token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(0x095ea7b3, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "!APPROVE_FAILED" ); } function safeApprove( IERC20 token, address to, uint256 value ) internal { if (value > 0 && token.allowance(msg.sender, to) > 0) _safeApprove(token, to, 0); return _safeApprove(token, to, value); } function safeTransfer( IERC20 token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(0xa9059cbb, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "!TRANSFER_FAILED" ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(0x23b872dd, from, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "!TRANSFER_FROM_FAILED" ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, "!ETH_TRANSFER_FAILED"); } } pragma solidity ^0.8.0; /** * @title TokenVesting * @dev A token holder contract that can release its token balance gradually like a * typical vesting scheme, with a cliff and vesting period. Optionally revocable by the * owner. */ contract TokenVesting { using SafeMath for uint256; using SafeERC20 for IERC20; event Released(uint256 amount); // beneficiary of tokens after they are released address public beneficiary; uint256 public cliff; uint256 public start; uint256 public duration; mapping(address => uint256) public released; /** * @dev Creates a vesting contract that vests its balance of any ERC20 token to the * _beneficiary, gradually in a linear fashion until _start + _duration. By then all * of the balance will have vested. * @param _beneficiary address of the beneficiary to whom vested tokens are transferred * @param _cliff duration in seconds of the cliff in which tokens will begin to vest * @param _duration duration in seconds of the period in which the tokens will vest */ constructor( address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration ) { require(_beneficiary != address(0)); require(_cliff <= _duration); beneficiary = _beneficiary; duration = _duration; cliff = _start.add(_cliff); start = _start; } /** * @notice Transfers vested tokens to beneficiary. * @param token ERC20 token which is being vested */ function release(address token) public { uint256 unreleased = releasableAmount(token); require(unreleased > 0); released[token] = released[token].add(unreleased); IERC20(token).safeTransfer(beneficiary, unreleased); emit Released(unreleased); } /** * @dev Calculates the amount that has already vested but hasn't been released yet. * @param token ERC20 token which is being vested */ function releasableAmount(address token) public view returns (uint256) { return vestedAmount(token).sub(released[token]); } /** * @dev Calculates the amount that has already vested. * @param token ERC20 token which is being vested */ function vestedAmount(address token) public view returns (uint256) { uint256 currentBalance = IERC20(token).balanceOf(address(this)); uint256 totalBalance = currentBalance.add(released[token]); if (block.timestamp < cliff) { return 0; } else if (block.timestamp >= start.add(duration)) { return totalBalance; } else { return totalBalance.mul(block.timestamp.sub(start)).div(duration); } } } pragma solidity ^0.8.0; contract STAYToken is ERC20, Ownable { TokenVesting public adLockToken; TokenVesting public partnerLockToken; TokenVesting public teamLockToken; uint256 public MAX_AIRDROP = 10 * 1e6 * 1e18; bool public initializedMining = false; function initialize(address dev) public initializer { Ownable.__Ownable_init(); ERC20.__ERC20_init("Strategyx Token", "STAY"); adLockToken = new TokenVesting( msg.sender, block.timestamp, 0 days, 365 days ); partnerLockToken = new TokenVesting( msg.sender, block.timestamp, 0 days, 90 days ); teamLockToken = new TokenVesting( msg.sender, block.timestamp, 30 days, 1095 days ); _mint(msg.sender, 100 * 1e6 * 1e18); _mint(dev, MAX_AIRDROP); _mint(address(adLockToken), 20 * 1e6 * 1e18); _mint(address(partnerLockToken), 50 * 1e6 * 1e18); _mint(address(teamLockToken), 20 * 1e6 * 1e18); } function initFarm(address farm_, address dao_) public onlyOwner { require(!initializedMining); _mint(address(farm_), 700 * 1e6 * 1e18); _mint(address(dao_), 100 * 1e6 * 1e18); initializedMining = true; } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_AIRDROP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adLockToken","outputs":[{"internalType":"contract TokenVesting","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"farm_","type":"address"},{"internalType":"address","name":"dao_","type":"address"}],"name":"initFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dev","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initializedMining","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerLockToken","outputs":[{"internalType":"contract TokenVesting","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamLockToken","outputs":[{"internalType":"contract TokenVesting","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526a084595161401484a00000060cc55600060cd60006101000a81548160ff02191690831515021790555034801561003a57600080fd5b50613cd88061004a6000396000f3fe60806040523480156200001157600080fd5b5060043610620001545760003560e01c8063715018a611620000c9578063a9059cbb1162000087578063a9059cbb14620003a5578063b01f3c2914620003db578063c4d66de814620003fb578063dd62ed3e146200041b578063df93315d1462000451578063f2fde38b14620004735762000154565b8063715018a614620002fd5780638da5cb5b146200030957806395d89b41146200032b578063964bca5f146200034d578063a457c2d7146200036f5762000154565b8063313ce5671162000117578063313ce567146200022b57806336f4dfae146200024d57806339509351146200026f57806364210fa914620002a557806370a0823114620002c75762000154565b806306fdde031462000159578063095ea7b3146200017b57806315cf1ba114620001b157806318160ddd14620001d357806323b872dd14620001f5575b600080fd5b6200016362000493565b6040516200017291906200264f565b60405180910390f35b620001996004803603810190620001939190620020af565b6200052d565b604051620001a8919062002615565b60405180910390f35b620001bb6200054f565b604051620001ca919062002632565b60405180910390f35b620001dd62000575565b604051620001ec9190620027a5565b60405180910390f35b6200021360048036038101906200020d919062002059565b6200057f565b60405162000222919062002615565b60405180910390f35b6200023562000663565b604051620002449190620027c2565b60405180910390f35b620002576200067a565b60405162000266919062002615565b60405180910390f35b6200028d6004803603810190620002879190620020af565b6200068d565b6040516200029c919062002615565b60405180910390f35b620002af62000748565b604051620002be919062002632565b60405180910390f35b620002e56004803603810190620002df919062001fec565b6200076e565b604051620002f49190620027a5565b60405180910390f35b62000307620007b7565b005b6200031362000914565b60405162000322919062002511565b60405180910390f35b620003356200093e565b6040516200034491906200264f565b60405180910390f35b62000357620009d8565b60405162000366919062002632565b60405180910390f35b6200038d6004803603810190620003879190620020af565b620009fe565b6040516200039c919062002615565b60405180910390f35b620003c36004803603810190620003bd9190620020af565b62000ad4565b604051620003d2919062002615565b60405180910390f35b620003f96004803603810190620003f3919062002018565b62000af6565b005b62000419600480360381019062000413919062001fec565b62000bfb565b005b62000439600480360381019062000433919062002018565b62000fca565b604051620004489190620027a5565b60405180910390f35b6200045b62001051565b6040516200046a9190620027a5565b60405180910390f35b6200049160048036038101906200048b919062001fec565b62001057565b005b606060688054620004a490620029ac565b80601f0160208091040260200160405190810160405280929190818152602001828054620004d290620029ac565b8015620005235780601f10620004f75761010080835404028352916020019162000523565b820191906000526020600020905b8154815290600101906020018083116200050557829003601f168201915b5050505050905090565b6000620005456200053d62001226565b84846200122e565b6001905092915050565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000606754905090565b60006200058e84848462001401565b62000658846200059d62001226565b620006528560405180606001604052806028815260200162003c5660289139606660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006200060762001226565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620016a99092919063ffffffff16565b6200122e565b600190509392505050565b6000606a60009054906101000a900460ff16905090565b60cd60009054906101000a900460ff1681565b60006200073e6200069d62001226565b84620007388560666000620006b162001226565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200171290919063ffffffff16565b6200122e565b6001905092915050565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000606560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b620007c162001226565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000853576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084a90620026fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060606980546200094f90620029ac565b80601f01602080910402602001604051908101604052809291908181526020018280546200097d90620029ac565b8015620009ce5780601f10620009a257610100808354040283529160200191620009ce565b820191906000526020600020905b815481529060010190602001808311620009b057829003601f168201915b5050505050905090565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600062000aca62000a0e62001226565b8462000ac48560405180606001604052806025815260200162003c7e602591396066600062000a3c62001226565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620016a99092919063ffffffff16565b6200122e565b6001905092915050565b600062000aec62000ae462001226565b848462001401565b6001905092915050565b62000b0062001226565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8990620026fb565b60405180910390fd5b60cd60009054906101000a900460ff161562000bad57600080fd5b62000bc5826b024306c4097859c43c00000062001775565b62000bdc816a52b7d2dcc80cd2e400000062001775565b600160cd60006101000a81548160ff0219169083151502179055505050565b600060019054906101000a900460ff168062000c1d575062000c1c62001908565b5b8062000c34575060008054906101000a900460ff16155b62000c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c6d906200271d565b60405180910390fd5b60008060019054906101000a900460ff16159050801562000cc7576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b62000cd16200191f565b62000d476040518060400160405280600f81526020017f53747261746567797820546f6b656e00000000000000000000000000000000008152506040518060400160405280600481526020017f535441590000000000000000000000000000000000000000000000000000000081525062001a24565b334260006301e1338060405162000d5e9062001f00565b62000d6d94939291906200252e565b604051809103906000f08015801562000d8a573d6000803e3d6000fd5b5060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550334260006276a70060405162000de19062001f00565b62000df094939291906200257b565b604051809103906000f08015801562000e0d573d6000803e3d6000fd5b5060ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550334262278d006305a39a8060405162000e679062001f00565b62000e769493929190620025c8565b604051809103906000f08015801562000e93573d6000803e3d6000fd5b5060cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000eeb336a52b7d2dcc80cd2e400000062001775565b62000ef98260cc5462001775565b62000f3260c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166a108b2a2c2802909400000062001775565b62000f6b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166a295be96e6406697200000062001775565b62000fa460cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166a108b2a2c2802909400000062001775565b801562000fc65760008060016101000a81548160ff0219169083151502179055505b5050565b6000606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60cc5481565b6200106162001226565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620010f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010ea90620026fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562001166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200115d9062002695565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620012a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620012989062002761565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001314576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200130b90620026b7565b60405180910390fd5b80606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620013f49190620027a5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562001474576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200146b906200273f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620014e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620014de9062002673565b60405180910390fd5b620014f483838362001b2d565b620015638160405180606001604052806026815260200162003c3060269139606560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620016a99092919063ffffffff16565b606560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620015fa81606560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200171290919063ffffffff16565b606560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200169c9190620027a5565b60405180910390a3505050565b6000838311158290620016f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016eb91906200264f565b60405180910390fd5b506000838562001705919062002858565b9050809150509392505050565b6000808284620017239190620027fb565b9050838110156200176b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200176290620026d9565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620017e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017df9062002783565b60405180910390fd5b620017ff816067546200171290919063ffffffff16565b6067819055506200185981606560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200171290919063ffffffff16565b606560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620018fc9190620027a5565b60405180910390a35050565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff16806200194157506200194062001908565b5b8062001958575060008054906101000a900460ff16155b6200199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001991906200271d565b60405180910390fd5b60008060019054906101000a900460ff161590508015620019eb576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620019f562001b32565b620019ff62001c23565b801562001a215760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062001a46575062001a4562001908565b5b8062001a5d575060008054906101000a900460ff16155b62001a9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a96906200271d565b60405180910390fd5b60008060019054906101000a900460ff16159050801562001af0576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b62001afa62001b32565b62001b06838362001dbf565b801562001b285760008060016101000a81548160ff0219169083151502179055505b505050565b505050565b600060019054906101000a900460ff168062001b54575062001b5362001908565b5b8062001b6b575060008054906101000a900460ff16155b62001bad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001ba4906200271d565b60405180910390fd5b60008060019054906101000a900460ff16159050801562001bfe576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801562001c205760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062001c45575062001c4462001908565b5b8062001c5c575060008054906101000a900460ff16155b62001c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001c95906200271d565b60405180910390fd5b60008060019054906101000a900460ff16159050801562001cef576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600062001cfb62001226565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801562001dbc5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062001de1575062001de062001908565b5b8062001df8575060008054906101000a900460ff16155b62001e3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001e31906200271d565b60405180910390fd5b60008060019054906101000a900460ff16159050801562001e8b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b826068908051906020019062001ea392919062001f0e565b50816069908051906020019062001ebc92919062001f0e565b506012606a60006101000a81548160ff021916908360ff160217905550801562001efb5760008060016101000a81548160ff0219169083151502179055505b505050565b6111aa8062002a8683390190565b82805462001f1c90620029ac565b90600052602060002090601f01602090048101928262001f40576000855562001f8c565b82601f1062001f5b57805160ff191683800117855562001f8c565b8280016001018555821562001f8c579182015b8281111562001f8b57825182559160200191906001019062001f6e565b5b50905062001f9b919062001f9f565b5090565b5b8082111562001fba57600081600090555060010162001fa0565b5090565b60008135905062001fcf8162002a51565b92915050565b60008135905062001fe68162002a6b565b92915050565b60006020828403121562001fff57600080fd5b60006200200f8482850162001fbe565b91505092915050565b600080604083850312156200202c57600080fd5b60006200203c8582860162001fbe565b92505060206200204f8582860162001fbe565b9150509250929050565b6000806000606084860312156200206f57600080fd5b60006200207f8682870162001fbe565b9350506020620020928682870162001fbe565b9250506040620020a58682870162001fd5565b9150509250925092565b60008060408385031215620020c357600080fd5b6000620020d38582860162001fbe565b9250506020620020e68582860162001fd5565b9150509250929050565b620020fb8162002893565b82525050565b6200210c81620028a7565b82525050565b6200211d81620028ea565b82525050565b6200212e8162002912565b82525050565b6200213f8162002926565b82525050565b62002150816200293a565b82525050565b62002161816200294e565b82525050565b620021728162002962565b82525050565b60006200218582620027df565b620021918185620027ea565b9350620021a381856020860162002976565b620021ae8162002a40565b840191505092915050565b6000620021c8602383620027ea565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062002230602683620027ea565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062002298602283620027ea565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062002300601b83620027ea565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600062002342602083620027ea565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600062002384602e83620027ea565b91507f436f6e747261637420696e7374616e63652068617320616c726561647920626560008301527f656e20696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b6000620023ec602583620027ea565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062002454602483620027ea565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000620024bc601f83620027ea565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b620024fa81620028d3565b82525050565b6200250b81620028dd565b82525050565b6000602082019050620025286000830184620020f0565b92915050565b6000608082019050620025456000830187620020f0565b620025546020830186620024ef565b62002563604083018562002123565b62002572606083018462002145565b95945050505050565b6000608082019050620025926000830187620020f0565b620025a16020830186620024ef565b620025b0604083018562002123565b620025bf606083018462002156565b95945050505050565b6000608082019050620025df6000830187620020f0565b620025ee6020830186620024ef565b620025fd604083018562002134565b6200260c606083018462002167565b95945050505050565b60006020820190506200262c600083018462002101565b92915050565b600060208201905062002649600083018462002112565b92915050565b600060208201905081810360008301526200266b818462002178565b905092915050565b600060208201905081810360008301526200268e81620021b9565b9050919050565b60006020820190508181036000830152620026b08162002221565b9050919050565b60006020820190508181036000830152620026d28162002289565b9050919050565b60006020820190508181036000830152620026f481620022f1565b9050919050565b60006020820190508181036000830152620027168162002333565b9050919050565b60006020820190508181036000830152620027388162002375565b9050919050565b600060208201905081810360008301526200275a81620023dd565b9050919050565b600060208201905081810360008301526200277c8162002445565b9050919050565b600060208201905081810360008301526200279e81620024ad565b9050919050565b6000602082019050620027bc6000830184620024ef565b92915050565b6000602082019050620027d9600083018462002500565b92915050565b600081519050919050565b600082825260208201905092915050565b60006200280882620028d3565b91506200281583620028d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200284d576200284c620029e2565b5b828201905092915050565b60006200286582620028d3565b91506200287283620028d3565b925082821015620028885762002887620029e2565b5b828203905092915050565b6000620028a082620028b3565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000620028f782620028fe565b9050919050565b60006200290b82620028b3565b9050919050565b60006200291f82620028d3565b9050919050565b60006200293382620028d3565b9050919050565b60006200294782620028d3565b9050919050565b60006200295b82620028d3565b9050919050565b60006200296f82620028d3565b9050919050565b60005b838110156200299657808201518184015260208101905062002979565b83811115620029a6576000848401525b50505050565b60006002820490506001821680620029c557607f821691505b60208210811415620029dc57620029db62002a11565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b62002a5c8162002893565b811462002a6857600080fd5b50565b62002a7681620028d3565b811462002a8257600080fd5b5056fe60806040523480156200001157600080fd5b50604051620011aa380380620011aa833981810160405281019062000037919062000189565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200007257600080fd5b808211156200008057600080fd5b836000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600381905550620000e18284620000f860201b620004fc1790919060201c565b600181905550826002819055505050505062000368565b60008082846200010991906200026a565b90508381101562000151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001489062000237565b60405180910390fd5b8091505092915050565b6000815190506200016c8162000334565b92915050565b60008151905062000183816200034e565b92915050565b60008060008060808587031215620001a057600080fd5b6000620001b0878288016200015b565b9450506020620001c38782880162000172565b9350506040620001d68782880162000172565b9250506060620001e98782880162000172565b91505092959194509250565b600062000204601b8362000259565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600060208201905081810360008301526200025281620001f5565b9050919050565b600082825260208201905092915050565b60006200027782620002fb565b91506200028483620002fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620002bc57620002bb62000305565b5b828201905092915050565b6000620002d482620002db565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6200033f81620002c7565b81146200034b57600080fd5b50565b6200035981620002fb565b81146200036557600080fd5b50565b610e3280620003786000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063384711cc1161005b578063384711cc1461011557806338af3eed146101455780639852595c14610163578063be9a65551461019357610088565b80630fb5a6b41461008d57806313d033c0146100ab5780631726cbc8146100c957806319165587146100f9575b600080fd5b6100956101b1565b6040516100a29190610b6b565b60405180910390f35b6100b36101b7565b6040516100c09190610b6b565b60405180910390f35b6100e360048036038101906100de91906108a5565b6101bd565b6040516100f09190610b6b565b60405180910390f35b610113600480360381019061010e91906108a5565b610220565b005b61012f600480360381019061012a91906108a5565b610355565b60405161013c9190610b6b565b60405180910390f35b61014d6104ba565b60405161015a9190610aa5565b60405180910390f35b61017d600480360381019061017891906108a5565b6104de565b60405161018a9190610b6b565b60405180910390f35b61019b6104f6565b6040516101a89190610b6b565b60405180910390f35b60035481565b60015481565b6000610219600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461020b84610355565b61055a90919063ffffffff16565b9050919050565b600061022b826101bd565b90506000811161023a57600080fd5b61028c81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104fc90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061031a60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166105a49092919063ffffffff16565b7ffb81f9b30d73d830c3544b34d827c08142579ee75710b490bab0b3995468c565816040516103499190610b6b565b60405180910390a15050565b6000808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103919190610aa5565b60206040518083038186803b1580156103a957600080fd5b505afa1580156103bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e191906108f7565b90506000610437600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836104fc90919063ffffffff16565b905060015442101561044e576000925050506104b5565b6104656003546002546104fc90919063ffffffff16565b42106104755780925050506104b5565b6104b06003546104a26104936002544261055a90919063ffffffff16565b846106da90919063ffffffff16565b61075590919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b60025481565b600080828461050b9190610bb8565b905083811015610550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054790610b0b565b60405180910390fd5b8091505092915050565b600061059c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061079f565b905092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016105d6929190610ac0565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516106249190610a8e565b6000604051808303816000865af19150503d8060008114610661576040519150601f19603f3d011682016040523d82523d6000602084013e610666565b606091505b5091509150818015610694575060008151148061069357508080602001905181019061069291906108ce565b5b5b6106d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ca90610b4b565b60405180910390fd5b5050505050565b6000808314156106ed576000905061074f565b600082846106fb9190610c3f565b905082848261070a9190610c0e565b1461074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190610b2b565b60405180910390fd5b809150505b92915050565b600061079783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610803565b905092915050565b60008383111582906107e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107de9190610ae9565b60405180910390fd5b50600083856107f69190610c99565b9050809150509392505050565b6000808311829061084a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108419190610ae9565b60405180910390fd5b50600083856108599190610c0e565b9050809150509392505050565b60008135905061087581610db7565b92915050565b60008151905061088a81610dce565b92915050565b60008151905061089f81610de5565b92915050565b6000602082840312156108b757600080fd5b60006108c584828501610866565b91505092915050565b6000602082840312156108e057600080fd5b60006108ee8482850161087b565b91505092915050565b60006020828403121561090957600080fd5b600061091784828501610890565b91505092915050565b61092981610ccd565b82525050565b600061093a82610b86565b6109448185610b9c565b9350610954818560208601610d15565b80840191505092915050565b600061096b82610b91565b6109758185610ba7565b9350610985818560208601610d15565b61098e81610da6565b840191505092915050565b60006109a6601b83610ba7565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006109e6602183610ba7565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000610a4c601083610ba7565b91507f215452414e534645525f4641494c4544000000000000000000000000000000006000830152602082019050919050565b610a8881610d0b565b82525050565b6000610a9a828461092f565b915081905092915050565b6000602082019050610aba6000830184610920565b92915050565b6000604082019050610ad56000830185610920565b610ae26020830184610a7f565b9392505050565b60006020820190508181036000830152610b038184610960565b905092915050565b60006020820190508181036000830152610b2481610999565b9050919050565b60006020820190508181036000830152610b44816109d9565b9050919050565b60006020820190508181036000830152610b6481610a3f565b9050919050565b6000602082019050610b806000830184610a7f565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000610bc382610d0b565b9150610bce83610d0b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610c0357610c02610d48565b5b828201905092915050565b6000610c1982610d0b565b9150610c2483610d0b565b925082610c3457610c33610d77565b5b828204905092915050565b6000610c4a82610d0b565b9150610c5583610d0b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610c8e57610c8d610d48565b5b828202905092915050565b6000610ca482610d0b565b9150610caf83610d0b565b925082821015610cc257610cc1610d48565b5b828203905092915050565b6000610cd882610ceb565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015610d33578082015181840152602081019050610d18565b83811115610d42576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b610dc081610ccd565b8114610dcb57600080fd5b50565b610dd781610cdf565b8114610de257600080fd5b50565b610dee81610d0b565b8114610df957600080fd5b5056fea2646970667358221220408c2185187e5184edb6dbea1558289ebd62e5298c8572218804bea50404d5fa64736f6c6343000800003345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d9d6642743663d5c7df52da35fe382eaecb38bbea7f2904acf52420bce43195e64736f6c63430008000033