Source Code
Latest 25 from a total of 2,908 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Buy Steps | 14980861 | 1369 days ago | IN | 0.0001 ETH | 0.00289633 | ||||
| Buy Steps | 14980850 | 1369 days ago | IN | 0.0001 ETH | 0.00306862 | ||||
| Buy Steps | 14980797 | 1369 days ago | IN | 0.0001 ETH | 0.00448207 | ||||
| Buy Steps | 14980797 | 1369 days ago | IN | 0.0001 ETH | 0.00556139 | ||||
| Buy Steps | 14782198 | 1402 days ago | IN | 0.02 ETH | 0.00199708 | ||||
| Buy Steps | 14744389 | 1408 days ago | IN | 0.001 ETH | 0.01022548 | ||||
| Send Reward To M... | 14743689 | 1408 days ago | IN | 0 ETH | 0.00438544 | ||||
| Emit Withdrawal | 14743687 | 1408 days ago | IN | 0.00763 ETH | 0.00299891 | ||||
| Emit Withdrawal | 14743379 | 1408 days ago | IN | 0.00651 ETH | 0.00254631 | ||||
| Send Reward To M... | 14743242 | 1408 days ago | IN | 0 ETH | 0.00385757 | ||||
| Emit Withdrawal | 14743241 | 1408 days ago | IN | 0.00805 ETH | 0.00230224 | ||||
| Send Reward To M... | 14743156 | 1408 days ago | IN | 0 ETH | 0.00365454 | ||||
| Emit Withdrawal | 14743155 | 1408 days ago | IN | 0.00651 ETH | 0.00228393 | ||||
| Send Reward To M... | 14558035 | 1437 days ago | IN | 0 ETH | 0.00097396 | ||||
| Emit Withdrawal | 14558033 | 1437 days ago | IN | 0.004 ETH | 0.00063279 | ||||
| Emit Withdrawal | 14541225 | 1440 days ago | IN | 0.004 ETH | 0.00118305 | ||||
| Send Reward To M... | 14478503 | 1449 days ago | IN | 0 ETH | 0.00216808 | ||||
| Send Reward To M... | 14455509 | 1453 days ago | IN | 0 ETH | 0.00194563 | ||||
| Emit Withdrawal | 14455507 | 1453 days ago | IN | 0.004 ETH | 0.00118305 | ||||
| Withdraw Admins | 14455486 | 1453 days ago | IN | 0 ETH | 0.00330615 | ||||
| Add Admin | 14455006 | 1453 days ago | IN | 0 ETH | 0.0022244 | ||||
| Add Admin | 14454996 | 1453 days ago | IN | 0 ETH | 0.00204282 | ||||
| Delete Admin | 14454995 | 1453 days ago | IN | 0 ETH | 0.00081294 | ||||
| Delete Admin | 14454995 | 1453 days ago | IN | 0 ETH | 0.00093677 | ||||
| Emit Withdrawal | 14451975 | 1454 days ago | IN | 0.004 ETH | 0.00099046 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 14743689 | 1408 days ago | 0.17949546 ETH | ||||
| - | 14743242 | 1408 days ago | 0.16151701 ETH | ||||
| - | 14743156 | 1408 days ago | 0.19271658 ETH | ||||
| - | 14558035 | 1437 days ago | 0.01164458 ETH | ||||
| - | 14478503 | 1449 days ago | 0.5888513 ETH | ||||
| - | 14478503 | 1449 days ago | 0.19 ETH | ||||
| - | 14478503 | 1449 days ago | 0.21 ETH | ||||
| - | 14455509 | 1453 days ago | 0.0036 ETH | ||||
| - | 14455486 | 1453 days ago | 0.00322 ETH | ||||
| - | 14355463 | 1469 days ago | 0.004 ETH | ||||
| - | 13493214 | 1603 days ago | 1.06725541 ETH | ||||
| - | 13352440 | 1625 days ago | 0.057355 ETH | ||||
| - | 13351262 | 1625 days ago | 0.02197209 ETH | ||||
| - | 13351180 | 1625 days ago | 0.03073579 ETH | ||||
| - | 13351135 | 1625 days ago | 0.06990491 ETH | ||||
| - | 13346775 | 1626 days ago | 0.00762448 ETH | ||||
| - | 13341314 | 1627 days ago | 0.01436132 ETH | ||||
| - | 13247954 | 1641 days ago | 0.05697673 ETH | ||||
| - | 13211389 | 1647 days ago | 0.35674538 ETH | ||||
| - | 13211371 | 1647 days ago | 0.0123 ETH | ||||
| - | 13211371 | 1647 days ago | 0.0287 ETH | ||||
| - | 13159703 | 1655 days ago | 0.2629367 ETH | ||||
| - | 13159611 | 1655 days ago | 0.0108 ETH | ||||
| - | 13159611 | 1655 days ago | 0.0252 ETH | ||||
| - | 13115302 | 1662 days ago | 0.37936298 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ETHStepMarket
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-11-23
*/
pragma solidity ^0.6.2;
/**
* @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;
}
}
contract Ownable {
/**
* @notice map for list of owners
*/
mapping(address => uint256) public owner;
uint256 index = 0;
/**
* @notice constructor, where first user is an administrator
*/
constructor() public {
owner[msg.sender] = ++index;
}
/**
* @notice modifier which check the status of user and continue only if msg.sender is administrator
*/
modifier onlyOwner() {
require(owner[msg.sender] > 0, "onlyOwner exception");
_;
}
/**
* @notice adding new owner to list of owners
* @param newOwner address of new administrator
* @return true when operation is successful
*/
function addNewOwner(address newOwner) public onlyOwner returns(bool) {
owner[newOwner] = ++index;
return true;
}
/**
* @notice remove owner from list of owners
* @param removedOwner address of removed administrator
* @return true when operation is successful
*/
function removeOwner(address removedOwner) public onlyOwner returns(bool) {
require(msg.sender != removedOwner, "Denied deleting of yourself");
owner[removedOwner] = 0;
return true;
}
}
/*
* @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.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return 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;
}
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is 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.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
*/
function isContract(address account) internal view returns (bool) {
// 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 != accountHash && codehash != 0x0);
}
/**
* @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].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @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);
}
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
using Address for address;
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.
*/
constructor (string memory name, string memory symbol) public {
_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");
revert("Transfers are not allowed");
_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 is 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 { }
}
contract ETHSteps is ERC20, Ownable {
address public stepMarket;
constructor()
ERC20("CoinClash", "CoC")
public {}
function init(address _stepMarket) public onlyOwner {
stepMarket = _stepMarket;
}
/**
* mint tokens to user
* @param _to address token receiver
* @param _value uint256 amount of tokens for mint
*/
function mint(address _to, uint256 _value) public {
require(msg.sender == stepMarket, "address not stepmarket");
_mint(_to, _value);
}
/**
* burn tokens from user
* @param _from address address of user for burning
* @param _value uint256 amount of tokens for burn
*/
function burnFrom(address _from, uint256 _value) public {
require(msg.sender == stepMarket, "address not stepmarket");
_burn(_from, _value);
}
}
contract ETHStepMarket is Ownable {
using SafeMath for uint256;
mapping(address => uint256) public percentages;
address[] public admins;
ETHSteps public stepAddress;
uint256 public adminPart;
uint256 public treasurePart;
uint256 public commissionPart;
uint256 public treasurePercentage = 90;
uint256 public adminPercentage = 10;
/**
* event of success airdrop of coc tokens
*/
event WithdrawAdminProcessed(
address caller,
uint256 amount,
uint256 timestamp
);
event AdminAddressAdded(
address newAddress,
uint256 percentage
);
event AdminAddressRemoved(
address oldAddress
);
event AdminPercentageChanged(
address admin,
uint256 newPercentage
);
event StepsAirdropped(
address indexed user,
uint256 amount
);
event AirdropDeposited(
address indexed user,
uint256 amount
);
event StepsBoughtViaEth(
address indexed user,
uint256 ethAmount
);
event TreasurePercentagesChanged(
uint256 treasurePercentage,
uint256 adminPercentage
);
event TreasureAdded(uint256 amount);
event WithdrawEmitted(address indexed user);
event EmitInternalDrop(address indexed user);
function init(address _stepAddress) public onlyOwner {
stepAddress = ETHSteps(_stepAddress);
}
/**
* send free steps to many users as airdrop
* @param _user address[] receivers address list
* @param _amount uint256[] amount of tokens for sending
*/
function airdropToMany(
address[] memory _user,
uint256[] memory _amount
) public onlyOwner {
require(_user.length == _amount.length, "Length must be equal");
for (uint256 i = 0; i < _user.length; i++) {
stepAddress.mint(_user[i], _amount[i].mul(1 ether));
emit StepsAirdropped(_user[i], _amount[i].mul(1 ether));
}
}
function sendRewardToMany(
address[] memory _user,
uint256[] memory _amount,
uint256 totaRewardSent
) public onlyOwner {
require(_user.length == _amount.length, "Length must be equal");
require(treasurePart >= totaRewardSent);
treasurePart = treasurePart.sub(totaRewardSent);
for (uint256 i = 0; i < _user.length; i++) {
address(uint160(_user[i])).transfer(_amount[i]);
}
}
function receiveCommission() public onlyOwner {
require(commissionPart > 0);
uint256 value = commissionPart;
commissionPart = 0;
msg.sender.transfer(value);
}
function getInternalAirdrop() public {
stepAddress.mint(msg.sender, 1 ether);
stepAddress.burnFrom(msg.sender, 1 ether);
emit EmitInternalDrop(msg.sender);
}
function buySteps() public payable {
require(msg.value != 0, "value can't be 0");
stepAddress.mint(msg.sender, msg.value);
stepAddress.burnFrom(msg.sender, msg.value);
adminPart = adminPart.add(msg.value.mul(adminPercentage).div(100));
treasurePart = treasurePart.add(msg.value.mul(treasurePercentage).div(100));
emit StepsBoughtViaEth(
msg.sender,
msg.value
);
}
function depositToGame() public {
require(stepAddress.balanceOf(msg.sender) != 0, "No tokens for deposit");
emit AirdropDeposited(
msg.sender,
stepAddress.balanceOf(msg.sender)
);
stepAddress.burnFrom(msg.sender, stepAddress.balanceOf(msg.sender));
}
function changeTreasurePercentage(
uint256 _treasurePercentage,
uint256 _adminPercentage
) public onlyOwner {
require(_treasurePercentage + _adminPercentage == 100, "Total percentage not 100");
treasurePercentage = _treasurePercentage;
adminPercentage = _adminPercentage;
emit TreasurePercentagesChanged(
treasurePercentage,
adminPercentage
);
}
function addAdmin(address _admin, uint256 _percentage) public onlyOwner {
require(percentages[_admin] == 0, "Admin exists");
admins.push(_admin);
percentages[_admin] = _percentage;
emit AdminAddressAdded(
_admin,
_percentage
);
}
function addToTreasure() public payable {
treasurePart = treasurePart.add(msg.value);
emit TreasureAdded(
msg.value
);
}
function emitWithdrawal() public payable {
require(msg.value >= 4 finney);
commissionPart = commissionPart.add(msg.value);
emit WithdrawEmitted(
msg.sender
);
}
function changePercentage(
address _admin,
uint256 _percentage
) public onlyOwner {
percentages[_admin] = _percentage;
emit AdminPercentageChanged(
_admin,
_percentage
);
}
function deleteAdmin(address _removedAdmin) public onlyOwner {
uint256 found = 0;
for (uint256 i = 0; i < admins.length; i++) {
if (admins[i] == _removedAdmin) {
found = i;
}
}
for (uint256 i = found; i < admins.length - 1; i++) {
admins[i] = admins[i + 1];
}
admins.pop();
percentages[_removedAdmin] = 0;
emit AdminAddressRemoved(_removedAdmin);
}
function withdrawAdmins() public payable {
uint256 percent = 0;
uint256 value = adminPart;
adminPart = 0;
for (uint256 i = 0; i < admins.length; i++) {
percent = percent.add(percentages[admins[i]]);
}
require(percent == 10000, "Total admin percent must be 10000 or 100,00%");
for (uint256 i = 0; i < admins.length; i++) {
uint256 amount = value.mul(percentages[admins[i]]).div(10000);
address(uint160(admins[i])).transfer(amount);
}
emit WithdrawAdminProcessed(
msg.sender,
adminPart,
block.timestamp
);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"AdminAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"}],"name":"AdminAddressRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"AdminPercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AirdropDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"EmitInternalDrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StepsAirdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"StepsBoughtViaEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TreasureAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"treasurePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"adminPercentage","type":"uint256"}],"name":"TreasurePercentagesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"WithdrawAdminProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"WithdrawEmitted","type":"event"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"addNewOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addToTreasure","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"adminPart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"admins","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdropToMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buySteps","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"changePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasurePercentage","type":"uint256"},{"internalType":"uint256","name":"_adminPercentage","type":"uint256"}],"name":"changeTreasurePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"commissionPart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_removedAdmin","type":"address"}],"name":"deleteAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositToGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitWithdrawal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getInternalAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stepAddress","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"owner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"percentages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiveCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"removedOwner","type":"address"}],"name":"removeOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"},{"internalType":"uint256","name":"totaRewardSent","type":"uint256"}],"name":"sendRewardToMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stepAddress","outputs":[{"internalType":"contract ETHSteps","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasurePart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasurePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAdmins","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
60806040526000600155605a600855600a60095534801561001f57600080fd5b506001600081546001019190508190556000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a95806100806000396000f3fe6080604052600436106101665760003560e01c806367b1b7ac116100d1578063be99aa221161008a578063e97d8ea111610064578063e97d8ea11461078b578063faaaae75146107cc578063fdca2f0b146107d6578063ffe4a0d7146107ed57610166565b8063be99aa221461072b578063cc9b91dc14610756578063df3e98131461078157610166565b806367b1b7ac146105965780637a863730146105a05780637fcb29c9146105e557806383f19e76146106405780639d592c661461069b5780639fd78ca61461070057610166565b806319ab453c1161012357806319ab453c146104435780632718fcf31461049457806327e1f7df146104bf57806340ad04161461051057806348b2b9a414610527578063666e1b391461053157610166565b80630cce5be61461016b5780630d184dce14610182578063114d8be1146102e557806314bfd6d01461034c578063173825d9146103b15780631882923f14610418575b600080fd5b34801561017757600080fd5b50610180610946565b005b34801561018e57600080fd5b506102e3600480360360608110156101a557600080fd5b81019080803590602001906401000000008111156101c257600080fd5b8201836020820111156101d457600080fd5b803590602001918460208302840111640100000000831117156101f657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561025657600080fd5b82018360208201111561026857600080fd5b8035906020019184602083028401116401000000008311171561028a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610a62565b005b3480156102f157600080fd5b506103346004803603602081101561030857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c43565b60405180821515815260200191505060405180910390f35b34801561035857600080fd5b506103856004803603602081101561036f57600080fd5b8101908080359060200190929190505050610d52565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103bd57600080fd5b50610400600480360360208110156103d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d8e565b60405180821515815260200191505060405180910390f35b34801561042457600080fd5b5061042d610f32565b6040518082815260200191505060405180910390f35b34801561044f57600080fd5b506104926004803603602081101561046657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f38565b005b3480156104a057600080fd5b506104a9611030565b6040518082815260200191505060405180910390f35b3480156104cb57600080fd5b5061050e600480360360208110156104e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611036565b005b34801561051c57600080fd5b50610525611302565b005b61052f6116bd565b005b34801561053d57600080fd5b506105806004803603602081101561055457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611711565b6040518082815260200191505060405180910390f35b61059e611729565b005b3480156105ac57600080fd5b506105e3600480360360408110156105c357600080fd5b81019080803590602001909291908035906020019092919050505061179d565b005b3480156105f157600080fd5b5061063e6004803603604081101561060857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061191e565b005b34801561064c57600080fd5b506106996004803603604081101561066357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b87565b005b3480156106a757600080fd5b506106ea600480360360208110156106be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd8565b6040518082815260200191505060405180910390f35b34801561070c57600080fd5b50610715611cf0565b6040518082815260200191505060405180910390f35b34801561073757600080fd5b50610740611cf6565b6040518082815260200191505060405180910390f35b34801561076257600080fd5b5061076b611cfc565b6040518082815260200191505060405180910390f35b610789611d02565b005b34801561079757600080fd5b506107a0611fb6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107d4611fdc565b005b3480156107e257600080fd5b506107eb61227d565b005b3480156107f957600080fd5b506109446004803603604081101561081057600080fd5b810190808035906020019064010000000081111561082d57600080fd5b82018360208201111561083f57600080fd5b8035906020019184602083028401116401000000008311171561086157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108c157600080fd5b8201836020820111156108d357600080fd5b803590602001918460208302840111640100000000831117156108f557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612428565b005b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b600060075411610a0957600080fd5b6000600754905060006007819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a5e573d6000803e3d6000fd5b5050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610b16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b8151835114610b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c656e677468206d75737420626520657175616c00000000000000000000000081525060200191505060405180910390fd5b806006541015610b9c57600080fd5b610bb1816006546126ea90919063ffffffff16565b60068190555060005b8351811015610c3d57838181518110610bcf57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166108fc848381518110610bfc57fe5b60200260200101519081150290604051600060405180830381858888f19350505050158015610c2f573d6000803e3d6000fd5b508080600101915050610bba565b50505050565b6000806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610cf8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b6001600081546001019190508190556000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019050919050565b60038181548110610d5f57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610e43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f44656e6965642064656c6574696e67206f6620796f757273656c66000000000081525060200191505060405180910390fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019050919050565b60075481565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610fec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b6000805b600380549050811015611177578273ffffffffffffffffffffffffffffffffffffffff166003828154811061111f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561116a578091505b80806001019150506110ee565b5060008190505b60016003805490500381101561122b576003600182018154811061119e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600382815481106111d657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061117e565b50600380548061123757fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fc41dab03d4639245f86ebd733046feb495209977c224698a4d1318fec207af5a82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561138d57600080fd5b505afa1580156113a1573d6000803e3d6000fd5b505050506040513d60208110156113b757600080fd5b8101908080519060200190929190505050141561143c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20746f6b656e7320666f72206465706f736974000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167ff203c6008233be733039995da21fdf1df9374288316e6fe0a3c4072fd57dff99600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156114fd57600080fd5b505afa158015611511573d6000803e3d6000fd5b505050506040513d602081101561152757600080fd5b81019080805190602001909291905050506040518082815260200191505060405180910390a2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561161557600080fd5b505afa158015611629573d6000803e3d6000fd5b505050506040513d602081101561163f57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156116a357600080fd5b505af11580156116b7573d6000803e3d6000fd5b50505050565b6116d23460065461273490919063ffffffff16565b6006819055507f8657e14d5cc7dffe911a5e5f0d6958b27b144ba98bddc26c589294d56ddec32b346040518082815260200191505060405180910390a1565b60006020528060005260406000206000915090505481565b660e35fa931a000034101561173d57600080fd5b6117523460075461273490919063ffffffff16565b6007819055503373ffffffffffffffffffffffffffffffffffffffff167f4b00bc03a07fbd67b68357edc95177fa75b26dfd1f51c0d47776a7e2d9d46b1960405160405180910390a2565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b6064818301146118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f74616c2070657263656e74616765206e6f7420313030000000000000000081525060200191505060405180910390fd5b81600881905550806009819055507f884e4bbbc40e26397d0b05c6839cdcf7b026cd38794898d9c51b37d4cc165391600854600954604051808381526020018281526020019250505060405180910390a15050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f41646d696e20657869737473000000000000000000000000000000000000000081525060200191505060405180910390fd5b6003829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fff6cd3fd26797ec0844b8bccaf4d1bed68970974ac11d089f85f40273ac1d0038282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fae5eaa640e2341f3368d1baac3eb9812d69b668fa1e0ba08c90fdb53173ce8398282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b60026020528060005260406000206000915090505481565b60055481565b60065481565b60095481565b6000806005549050600060058190555060005b600380549050811015611dba57611dab6002600060038481548110611d3657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461273490919063ffffffff16565b92508080600101915050611d15565b506127108214611e15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612a34602c913960400191505060405180910390fd5b60005b600380549050811015611f52576000611ec4612710611eb66002600060038781548110611e4157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866127bc90919063ffffffff16565b61284290919063ffffffff16565b905060038281548110611ed357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f43573d6000803e3d6000fd5b50508080600101915050611e18565b507f120c076541ccb8c16bf2c56c6deebc4180889bac84c748555cccf8db356ff6e83360055442604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000341415612053576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f76616c75652063616e277420626520300000000000000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933346040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033346040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050506121e56121d460646121c6600954346127bc90919063ffffffff16565b61284290919063ffffffff16565b60055461273490919063ffffffff16565b6005819055506122276122166064612208600854346127bc90919063ffffffff16565b61284290919063ffffffff16565b60065461273490919063ffffffff16565b6006819055503373ffffffffffffffffffffffffffffffffffffffff167f3c72cd907b02bfabf2b9d1d12d2eff3cde47e728ff81ee85b520bcff43ccfa1e346040518082815260200191505060405180910390a2565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933670de0b6b3a76400006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561231857600080fd5b505af115801561232c573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033670de0b6b3a76400006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156123cb57600080fd5b505af11580156123df573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f115e05ef542075982c11897da4ce0aa02e1cb80096d14d3f46d7bb437483262560405160405180910390a2565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b8051825114612553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c656e677468206d75737420626520657175616c00000000000000000000000081525060200191505060405180910390fd5b60005b82518110156126e557600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f198483815181106125a957fe5b60200260200101516125df670de0b6b3a76400008686815181106125c957fe5b60200260200101516127bc90919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561263257600080fd5b505af1158015612646573d6000803e3d6000fd5b5050505082818151811061265657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f90f7e21c33ab390affdebdd0409112df9d790bf0fe5144d10268aa3265e47b1f6126c3670de0b6b3a76400008585815181106126ad57fe5b60200260200101516127bc90919063ffffffff16565b6040518082815260200191505060405180910390a28080600101915050612556565b505050565b600061272c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061288c565b905092915050565b6000808284019050838110156127b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808314156127cf576000905061283c565b60008284029050828482816127e057fe5b0414612837576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612a136021913960400191505060405180910390fd5b809150505b92915050565b600061288483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061294c565b905092915050565b6000838311158290612939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128fe5780820151818401526020810190506128e3565b50505050905090810190601f16801561292b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906129f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129bd5780820151818401526020810190506129a2565b50505050905090810190601f1680156129ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612a0457fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f74616c2061646d696e2070657263656e74206d757374206265203130303030206f72203130302c303025a2646970667358221220430f9ea1157de0c0f2038b06741c8a4ac8c630a13f75acd5434617e0451f15ae64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106101665760003560e01c806367b1b7ac116100d1578063be99aa221161008a578063e97d8ea111610064578063e97d8ea11461078b578063faaaae75146107cc578063fdca2f0b146107d6578063ffe4a0d7146107ed57610166565b8063be99aa221461072b578063cc9b91dc14610756578063df3e98131461078157610166565b806367b1b7ac146105965780637a863730146105a05780637fcb29c9146105e557806383f19e76146106405780639d592c661461069b5780639fd78ca61461070057610166565b806319ab453c1161012357806319ab453c146104435780632718fcf31461049457806327e1f7df146104bf57806340ad04161461051057806348b2b9a414610527578063666e1b391461053157610166565b80630cce5be61461016b5780630d184dce14610182578063114d8be1146102e557806314bfd6d01461034c578063173825d9146103b15780631882923f14610418575b600080fd5b34801561017757600080fd5b50610180610946565b005b34801561018e57600080fd5b506102e3600480360360608110156101a557600080fd5b81019080803590602001906401000000008111156101c257600080fd5b8201836020820111156101d457600080fd5b803590602001918460208302840111640100000000831117156101f657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561025657600080fd5b82018360208201111561026857600080fd5b8035906020019184602083028401116401000000008311171561028a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610a62565b005b3480156102f157600080fd5b506103346004803603602081101561030857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c43565b60405180821515815260200191505060405180910390f35b34801561035857600080fd5b506103856004803603602081101561036f57600080fd5b8101908080359060200190929190505050610d52565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103bd57600080fd5b50610400600480360360208110156103d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d8e565b60405180821515815260200191505060405180910390f35b34801561042457600080fd5b5061042d610f32565b6040518082815260200191505060405180910390f35b34801561044f57600080fd5b506104926004803603602081101561046657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f38565b005b3480156104a057600080fd5b506104a9611030565b6040518082815260200191505060405180910390f35b3480156104cb57600080fd5b5061050e600480360360208110156104e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611036565b005b34801561051c57600080fd5b50610525611302565b005b61052f6116bd565b005b34801561053d57600080fd5b506105806004803603602081101561055457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611711565b6040518082815260200191505060405180910390f35b61059e611729565b005b3480156105ac57600080fd5b506105e3600480360360408110156105c357600080fd5b81019080803590602001909291908035906020019092919050505061179d565b005b3480156105f157600080fd5b5061063e6004803603604081101561060857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061191e565b005b34801561064c57600080fd5b506106996004803603604081101561066357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b87565b005b3480156106a757600080fd5b506106ea600480360360208110156106be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd8565b6040518082815260200191505060405180910390f35b34801561070c57600080fd5b50610715611cf0565b6040518082815260200191505060405180910390f35b34801561073757600080fd5b50610740611cf6565b6040518082815260200191505060405180910390f35b34801561076257600080fd5b5061076b611cfc565b6040518082815260200191505060405180910390f35b610789611d02565b005b34801561079757600080fd5b506107a0611fb6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107d4611fdc565b005b3480156107e257600080fd5b506107eb61227d565b005b3480156107f957600080fd5b506109446004803603604081101561081057600080fd5b810190808035906020019064010000000081111561082d57600080fd5b82018360208201111561083f57600080fd5b8035906020019184602083028401116401000000008311171561086157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108c157600080fd5b8201836020820111156108d357600080fd5b803590602001918460208302840111640100000000831117156108f557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612428565b005b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b600060075411610a0957600080fd5b6000600754905060006007819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a5e573d6000803e3d6000fd5b5050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610b16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b8151835114610b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c656e677468206d75737420626520657175616c00000000000000000000000081525060200191505060405180910390fd5b806006541015610b9c57600080fd5b610bb1816006546126ea90919063ffffffff16565b60068190555060005b8351811015610c3d57838181518110610bcf57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166108fc848381518110610bfc57fe5b60200260200101519081150290604051600060405180830381858888f19350505050158015610c2f573d6000803e3d6000fd5b508080600101915050610bba565b50505050565b6000806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610cf8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b6001600081546001019190508190556000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019050919050565b60038181548110610d5f57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610e43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f44656e6965642064656c6574696e67206f6620796f757273656c66000000000081525060200191505060405180910390fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019050919050565b60075481565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610fec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b6000805b600380549050811015611177578273ffffffffffffffffffffffffffffffffffffffff166003828154811061111f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561116a578091505b80806001019150506110ee565b5060008190505b60016003805490500381101561122b576003600182018154811061119e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600382815481106111d657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061117e565b50600380548061123757fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fc41dab03d4639245f86ebd733046feb495209977c224698a4d1318fec207af5a82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561138d57600080fd5b505afa1580156113a1573d6000803e3d6000fd5b505050506040513d60208110156113b757600080fd5b8101908080519060200190929190505050141561143c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20746f6b656e7320666f72206465706f736974000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167ff203c6008233be733039995da21fdf1df9374288316e6fe0a3c4072fd57dff99600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156114fd57600080fd5b505afa158015611511573d6000803e3d6000fd5b505050506040513d602081101561152757600080fd5b81019080805190602001909291905050506040518082815260200191505060405180910390a2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561161557600080fd5b505afa158015611629573d6000803e3d6000fd5b505050506040513d602081101561163f57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156116a357600080fd5b505af11580156116b7573d6000803e3d6000fd5b50505050565b6116d23460065461273490919063ffffffff16565b6006819055507f8657e14d5cc7dffe911a5e5f0d6958b27b144ba98bddc26c589294d56ddec32b346040518082815260200191505060405180910390a1565b60006020528060005260406000206000915090505481565b660e35fa931a000034101561173d57600080fd5b6117523460075461273490919063ffffffff16565b6007819055503373ffffffffffffffffffffffffffffffffffffffff167f4b00bc03a07fbd67b68357edc95177fa75b26dfd1f51c0d47776a7e2d9d46b1960405160405180910390a2565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b6064818301146118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546f74616c2070657263656e74616765206e6f7420313030000000000000000081525060200191505060405180910390fd5b81600881905550806009819055507f884e4bbbc40e26397d0b05c6839cdcf7b026cd38794898d9c51b37d4cc165391600854600954604051808381526020018281526020019250505060405180910390a15050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f41646d696e20657869737473000000000000000000000000000000000000000081525060200191505060405180910390fd5b6003829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fff6cd3fd26797ec0844b8bccaf4d1bed68970974ac11d089f85f40273ac1d0038282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fae5eaa640e2341f3368d1baac3eb9812d69b668fa1e0ba08c90fdb53173ce8398282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b60026020528060005260406000206000915090505481565b60055481565b60065481565b60095481565b6000806005549050600060058190555060005b600380549050811015611dba57611dab6002600060038481548110611d3657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461273490919063ffffffff16565b92508080600101915050611d15565b506127108214611e15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612a34602c913960400191505060405180910390fd5b60005b600380549050811015611f52576000611ec4612710611eb66002600060038781548110611e4157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866127bc90919063ffffffff16565b61284290919063ffffffff16565b905060038281548110611ed357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f43573d6000803e3d6000fd5b50508080600101915050611e18565b507f120c076541ccb8c16bf2c56c6deebc4180889bac84c748555cccf8db356ff6e83360055442604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000341415612053576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f76616c75652063616e277420626520300000000000000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933346040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033346040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050506121e56121d460646121c6600954346127bc90919063ffffffff16565b61284290919063ffffffff16565b60055461273490919063ffffffff16565b6005819055506122276122166064612208600854346127bc90919063ffffffff16565b61284290919063ffffffff16565b60065461273490919063ffffffff16565b6006819055503373ffffffffffffffffffffffffffffffffffffffff167f3c72cd907b02bfabf2b9d1d12d2eff3cde47e728ff81ee85b520bcff43ccfa1e346040518082815260200191505060405180910390a2565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933670de0b6b3a76400006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561231857600080fd5b505af115801561232c573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033670de0b6b3a76400006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156123cb57600080fd5b505af11580156123df573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f115e05ef542075982c11897da4ce0aa02e1cb80096d14d3f46d7bb437483262560405160405180910390a2565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6f6e6c794f776e657220657863657074696f6e0000000000000000000000000081525060200191505060405180910390fd5b8051825114612553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c656e677468206d75737420626520657175616c00000000000000000000000081525060200191505060405180910390fd5b60005b82518110156126e557600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f198483815181106125a957fe5b60200260200101516125df670de0b6b3a76400008686815181106125c957fe5b60200260200101516127bc90919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561263257600080fd5b505af1158015612646573d6000803e3d6000fd5b5050505082818151811061265657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f90f7e21c33ab390affdebdd0409112df9d790bf0fe5144d10268aa3265e47b1f6126c3670de0b6b3a76400008585815181106126ad57fe5b60200260200101516127bc90919063ffffffff16565b6040518082815260200191505060405180910390a28080600101915050612556565b505050565b600061272c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061288c565b905092915050565b6000808284019050838110156127b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808314156127cf576000905061283c565b60008284029050828482816127e057fe5b0414612837576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612a136021913960400191505060405180910390fd5b809150505b92915050565b600061288483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061294c565b905092915050565b6000838311158290612939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128fe5780820151818401526020810190506128e3565b50505050905090810190601f16801561292b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906129f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129bd5780820151818401526020810190506129a2565b50505050905090810190601f1680156129ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612a0457fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f74616c2061646d696e2070657263656e74206d757374206265203130303030206f72203130302c303025a2646970667358221220430f9ea1157de0c0f2038b06741c8a4ac8c630a13f75acd5434617e0451f15ae64736f6c634300060c0033
Deployed Bytecode Sourcemap
27009:6392:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29568:203;;;;;;;;;;;;;:::i;:::-;;29088:472;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6048:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27138:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6370:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27267:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28379:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27303:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32213:489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30449:321;;;;;;;;;;;;;:::i;:::-;;31549:167;;;:::i;:::-;;5408:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31724:218;;;:::i;:::-;;30778:446;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31232:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31950:255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27085:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27202:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27233:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27348:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32710:688;;;:::i;:::-;;27168:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29978:463;;;:::i;:::-;;29779:191;;;;;;;;;;;;;:::i;:::-;;28678:402;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29568:203;5823:1;5803:5;:17;5809:10;5803:17;;;;;;;;;;;;;;;;:21;5795:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29650:1:::1;29633:14;;:18;29625:27;;;::::0;::::1;;29665:13;29681:14;;29665:30;;29723:1;29706:14;:18;;;;29737:10;:19;;:26;29757:5;29737:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;5859:1;29568:203::o:0;29088:472::-;5823:1;5803:5;:17;5809:10;5803:17;;;;;;;;;;;;;;;;:21;5795:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29274:7:::1;:14;29258:5;:12;:30;29250:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29348:14;29332:12;;:30;;29324:39;;;::::0;::::1;;29391:32;29408:14;29391:12;;:16;;:32;;;;:::i;:::-;29376:12;:47;;;;29441:9;29436:117;29460:5;:12;29456:1;:16;29436:117;;;29510:5;29516:1;29510:8;;;;;;;;;;;;;;29494:35;;:47;29530:7;29538:1;29530:10;;;;;;;;;;;;;;29494:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29474:3;;;;;;;29436:117;;;;29088:472:::0;;;:::o;6048:136::-;6112:4;5823:1;5803:5;:17;5809:10;5803:17;;;;;;;;;;;;;;;;:21;5795:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6149:5:::1;;6147:7;;;;;;;;;;6129:5;:15:::0;6135:8:::1;6129:15;;;;;;;;;;;;;;;:25;;;;6172:4;6165:11;;6048:136:::0;;;:::o;27138:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6370:215::-;6438:4;5823:1;5803:5;:17;5809:10;5803:17;;;;;;;;;;;;;;;;:21;5795:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6477:12:::1;6463:26;;:10;:26;;;;6455:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;6554:1;6532:5:::0;:19:::1;6538:12;6532:19;;;;;;;;;;;;;;;:23;;;;6573:4;6566:11;;6370:215:::0;;;:::o;27267:29::-;;;;:::o;28379:108::-;5823:1;5803:5;:17;5809:10;5803:17;;;;;;;;;;;;;;;;:21;5795:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28466:12:::1;28443:11;;:36;;;;;;;;;;;;;;;;;;28379:108:::0;:::o;27303:38::-;;;;:::o;32213:489::-;5823:1;5803:5;:17;5809:10;5803:17;;;;;;;;;;;;;;;;:21;5795:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32285:13:::1;32318:9:::0;32313:146:::1;32337:6;:13;;;;32333:1;:17;32313:146;;;32389:13;32376:26;;:6;32383:1;32376:9;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;32372:76;;;32431:1;32423:9;;32372:76;32352:3;;;;;;;32313:146;;;;32476:9;32488:5;32476:17;;32471:104;32515:1;32499:6;:13;;;;:17;32495:1;:21;32471:104;;;32550:6;32561:1;32557;:5;32550:13;;;;;;;;;;;;;;;;;;;;;;;;;32538:6;32545:1;32538:9;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;32518:3;;;;;;;32471:104;;;;32587:6;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32641:1;32612:11;:26;32624:13;32612:26;;;;;;;;;;;;;;;:30;;;;32660:34;32680:13;32660:34;;;;;;;;;;;;;;;;;;;;5859:1;32213:489:::0;:::o;30449:321::-;30537:1;30500:11;;;;;;;;;;;:21;;;30522:10;30500:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;;30492:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30613:10;30582:100;;;30638:11;;;;;;;;;;;:21;;;30660:10;30638:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30582:100;;;;;;;;;;;;;;;;;;30695:11;;;;;;;;;;;:20;;;30716:10;30728:11;;;;;;;;;;;:21;;;30750:10;30728:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30695:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30449:321::o;31549:167::-;31615:27;31632:9;31615:12;;:16;;:27;;;;:::i;:::-;31600:12;:42;;;;31660:48;31688:9;31660:48;;;;;;;;;;;;;;;;;;31549:167::o;5408:40::-;;;;;;;;;;;;;;;;;:::o;31724:218::-;31797:8;31784:9;:21;;31776:30;;;;;;31836:29;31855:9;31836:14;;:18;;:29;;;;:::i;:::-;31819:14;:46;;;;31913:10;31883:51;;;;;;;;;;;;31724:218::o;30778:446::-;5823:1;5803:5;:17;5809:10;5803:17;;;;;;;;;;;;;;;;:21;5795:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30970:3:::1;30950:16;30928:19;:38;:45;30920:82;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31034:19;31013:18;:40;;;;31082:16;31064:15;:34;;;;31116:100;31157:18;;31190:15;;31116:100;;;;;;;;;;;;;;;;;;;;;;;;30778:446:::0;;:::o;31232:309::-;5823:1;5803:5;:17;5809:10;5803:17;;;;;;;;;;;;;;;;:21;5795:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31346:1:::1;31323:11;:19;31335:6;31323:19;;;;;;;;;;;;;;;;:24;31315:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31377:6;31389;31377:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31429:11;31407;:19;31419:6;31407:19;;;;;;;;;;;;;;;:33;;;;31458:75;31490:6;31511:11;31458:75;;;;;;;;;;;;;;;;;;;;;;;;;;31232:309:::0;;:::o;31950:255::-;5823:1;5803:5;:17;5809:10;5803:17;;;;;;;;;;;;;;;;:21;5795:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32088:11:::1;32066;:19;32078:6;32066:19;;;;;;;;;;;;;;;:33;;;;32117:80;32154:6;32175:11;32117:80;;;;;;;;;;;;;;;;;;;;;;;;;;31950:255:::0;;:::o;27085:46::-;;;;;;;;;;;;;;;;;:::o;27202:24::-;;;;:::o;27233:27::-;;;;:::o;27348:35::-;;;;:::o;32710:688::-;32762:15;32794:13;32810:9;;32794:25;;32842:1;32830:9;:13;;;;32861:9;32856:116;32880:6;:13;;;;32876:1;:17;32856:116;;;32925:35;32937:11;:22;32949:6;32956:1;32949:9;;;;;;;;;;;;;;;;;;;;;;;;;32937:22;;;;;;;;;;;;;;;;32925:7;:11;;:35;;;;:::i;:::-;32915:45;;32895:3;;;;;;;32856:116;;;;33003:5;32992:7;:16;32984:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33075:9;33070:191;33094:6;:13;;;;33090:1;:17;33070:191;;;33129:14;33146:44;33184:5;33146:33;33156:11;:22;33168:6;33175:1;33168:9;;;;;;;;;;;;;;;;;;;;;;;;;33156:22;;;;;;;;;;;;;;;;33146:5;:9;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;33129:61;;33221:6;33228:1;33221:9;;;;;;;;;;;;;;;;;;;;;;;;;33205:36;;:44;33242:6;33205:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33070:191;33109:3;;;;;;;33070:191;;;;33278:112;33315:10;33340:9;;33364:15;33278:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32710:688;;:::o;27168:27::-;;;;;;;;;;;;;:::o;29978:463::-;30045:1;30032:9;:14;;30024:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30080:11;;;;;;;;;;;:16;;;30097:10;30109:9;30080:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30130:11;;;;;;;;;;;:20;;;30151:10;30163:9;30130:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30198:54;30212:39;30247:3;30212:30;30226:15;;30212:9;:13;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30198:9;;:13;;:54;;;;:::i;:::-;30186:9;:66;;;;30278:60;30295:42;30333:3;30295:33;30309:18;;30295:9;:13;;:33;;;;:::i;:::-;:37;;:42;;;;:::i;:::-;30278:12;;:16;;:60;;;;:::i;:::-;30263:12;:75;;;;30388:10;30356:77;;;30413:9;30356:77;;;;;;;;;;;;;;;;;;29978:463::o;29779:191::-;29827:11;;;;;;;;;;;:16;;;29844:10;29856:7;29827:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29875:11;;;;;;;;;;;:20;;;29896:10;29908:7;29875:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29951:10;29934:28;;;;;;;;;;;;29779:191::o;28678:402::-;5823:1;5803:5;:17;5809:10;5803:17;;;;;;;;;;;;;;;;:21;5795:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28828:7:::1;:14;28812:5;:12;:30;28804:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28885:9;28880:193;28904:5;:12;28900:1;:16;28880:193;;;28938:11;;;;;;;;;;;:16;;;28955:5;28961:1;28955:8;;;;;;;;;;;;;;28965:23;28980:7;28965;28973:1;28965:10;;;;;;;;;;;;;;:14;;:23;;;;:::i;:::-;28938:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29027:5;29033:1;29027:8;;;;;;;;;;;;;;29011:50;;;29037:23;29052:7;29037;29045:1;29037:10;;;;;;;;;;;;;;:14;;:23;;;;:::i;:::-;29011:50;;;;;;;;;;;;;;;;;;28918:3;;;;;;;28880:193;;;;28678:402:::0;;:::o;1331:136::-;1389:7;1416:43;1420:1;1423;1416:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1409:50;;1331:136;;;;:::o;867:181::-;925:7;945:9;961:1;957;:5;945:17;;986:1;981;:6;;973:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1039:1;1032:8;;;867:181;;;;:::o;2221:471::-;2279:7;2529:1;2524;:6;2520:47;;;2554:1;2547:8;;;;2520:47;2579:9;2595:1;2591;:5;2579:17;;2624:1;2619;2615;:5;;;;;;:10;2607:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2683:1;2676:8;;;2221:471;;;;;:::o;3168:132::-;3226:7;3253:39;3257:1;3260;3253:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3246:46;;3168:132;;;;:::o;1770:192::-;1856:7;1889:1;1884;:6;;1892:12;1876:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1916:9;1932:1;1928;:5;1916:17;;1953:1;1946:8;;;1770:192;;;;;:::o;3796:278::-;3882:7;3914:1;3910;:5;3917:12;3902:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3941:9;3957:1;3953;:5;;;;;;3941:17;;4065:1;4058:8;;;3796:278;;;;;:::o
Swarm Source
ipfs://430f9ea1157de0c0f2038b06741c8a4ac8c630a13f75acd5434617e0451f15ae
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1,066.39
Net Worth in ETH
0.457027
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,331.62 | 0.4574 | $1,066.39 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.