Overview
Max Total Supply
5,000,000,000 MOI
Holders
4,062 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MOI
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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) { return msg.sender; } } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override 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 this function is * overridden; * * 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 virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, 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: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += 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"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @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 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 {} } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (a supervisor) that can be granted exclusive access to * specific functions. * * By default, the supervisor account will be the one that deploys the contract. This * can later be changed with {transferSupervisorOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlySupervisor`, which can be applied to your functions to restrict their use to * the supervisor. */ abstract contract Supervisable is Context { address private _supervisor; event SupervisorOwnershipTransferred(address indexed previouSupervisor, address indexed newSupervisor); /** * @dev Initializes the contract setting the deployer as the initial supervisor. */ constructor() { _transferSupervisorOwnership(_msgSender()); } /** * @dev Returns the address of the current supervisor. */ function supervisor() public view virtual returns (address) { return _supervisor; } /** * @dev Throws if called by any account other than the supervisor. */ modifier onlySupervisor() { require(supervisor() == _msgSender(), "Supervisable: caller is not the supervisor"); _; } /** * @dev Transfers supervisor ownership of the contract to a new account (`newSupervisor`). * Internal function without access restriction. */ function _transferSupervisorOwnership(address newSupervisor) internal virtual { address oldSupervisor = _supervisor; _supervisor = newSupervisor; emit SupervisorOwnershipTransferred(oldSupervisor, newSupervisor); } } /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract Burnable is Context { mapping(address => bool) private _burners; event BurnerAdded(address indexed account); event BurnerRemoved(address indexed account); /** * @dev Returns whether the address is burner. */ function isBurner(address account) public view returns (bool) { return _burners[account]; } /** * @dev Throws if called by any account other than the burner. */ modifier onlyBurner() { require(_burners[_msgSender()], "Burnable: caller is not the burner"); _; } /** * @dev Add burner, only owner can add burner. */ function _addBurner(address account) internal { _burners[account] = true; emit BurnerAdded(account); } /** * @dev Remove operator, only owner can remove operator */ function _removeBurner(address account) internal { _burners[account] = false; emit BurnerRemoved(account); } } /** * @dev Contract for freezing mechanism. * Owner can add freezed account. * Supervisor can remove freezed account. */ contract Freezable is Context { mapping(address => bool) private _freezes; event Freezed(address indexed account); event Unfreezed(address indexed account); /** * @dev Freeze account, only owner can freeze */ function _freeze(address account) internal { _freezes[account] = true; emit Freezed(account); } /** * @dev Unfreeze account, only supervisor can unfreeze */ function _unfreeze(address account) internal { _freezes[account] = false; emit Unfreezed(account); } /** * @dev Returns whether the address is freezed. */ function isFreezed(address account) public view returns (bool) { return _freezes[account]; } } /** * @dev Contract for locking mechanism. * Locker can add locked account. * Supervisor can remove locked account. */ contract Lockable is Context { struct TimeLock { uint256 amount; uint256 expiresAt; } struct VestingLock { uint256 amount; uint256 startsAt; uint256 period; uint256 count; } mapping(address => bool) private _lockers; mapping(address => TimeLock[]) private _timeLocks; mapping(address => VestingLock) private _vestingLocks; event LockerAdded(address indexed account); event LockerRemoved(address indexed account); event TimeLocked(address indexed account); event TimeUnlocked(address indexed account); event VestingLocked(address indexed account); event VestingUnlocked(address indexed account); /** * @dev Throws if called by any account other than the locker. */ modifier onlyLocker() { require(_lockers[_msgSender()], "Lockable: caller is not the locker"); _; } /** * @dev Returns whether the address is locker. */ function isLocker(address account) public view returns (bool) { return _lockers[account]; } /** * @dev Add locker, only owner can add locker */ function _addLocker(address account) internal { _lockers[account] = true; emit LockerAdded(account); } /** * @dev Remove locker, only owner can remove locker */ function _removeLocker(address account) internal { _lockers[account] = false; emit LockerRemoved(account); } /** * @dev Add time lock, only locker can add */ function _addTimeLock( address account, uint256 amount, uint256 expiresAt ) internal { require(amount > 0, "TimeLock: lock amount is 0"); require(expiresAt > block.timestamp, "TimeLock: invalid expire date"); _timeLocks[account].push(TimeLock(amount, expiresAt)); emit TimeLocked(account); } /** * @dev Remove time lock, only supervisor can remove * @param account The address want to remove time lock * @param index Time lock index */ function _removeTimeLock(address account, uint8 index) internal { require(_timeLocks[account].length > index && index >= 0, "TimeLock: invalid index"); uint256 len = _timeLocks[account].length; if (len - 1 != index) { // if it is not last item, swap it _timeLocks[account][index] = _timeLocks[account][len - 1]; } _timeLocks[account].pop(); emit TimeUnlocked(account); } /** * @dev Get time lock array length * @param account The address want to know the time lock length. * @return time lock length */ function getTimeLockLength(address account) public view returns (uint256) { return _timeLocks[account].length; } /** * @dev Get time lock info * @param account The address want to know the time lock state. * @param index Time lock index * @return time lock info */ function getTimeLock(address account, uint8 index) public view returns (uint256, uint256) { require(_timeLocks[account].length > index && index >= 0, "TimeLock: invalid index"); return (_timeLocks[account][index].amount, _timeLocks[account][index].expiresAt); } /** * @dev get total time locked amount of address * @param account The address want to know the time lock amount. * @return time locked amount */ function getTimeLockedAmount(address account) public view returns (uint256) { uint256 timeLockedAmount = 0; uint256 len = _timeLocks[account].length; for (uint256 i = 0; i < len; i++) { if (block.timestamp < _timeLocks[account][i].expiresAt) { timeLockedAmount = timeLockedAmount + _timeLocks[account][i].amount; } } return timeLockedAmount; } /** * @dev Add vesting lock, only locker can add * @param account vesting lock account. * @param amount vesting lock amount. * @param startsAt vesting lock release start date. * @param period vesting lock period. End date is startsAt + (period - 1) * count * @param count vesting lock count. If count is 1, it works like a time lock */ function _addVestingLock( address account, uint256 amount, uint256 startsAt, uint256 period, uint256 count ) internal { require(account != address(0), "VestingLock: lock from the zero address"); require(startsAt > block.timestamp, "VestingLock: must set after now"); require(amount > 0, "VestingLock: amount is 0"); require(period > 0, "VestingLock: period is 0"); require(count > 0, "VestingLock: count is 0"); _vestingLocks[account] = VestingLock(amount, startsAt, period, count); emit VestingLocked(account); } /** * @dev Remove vesting lock, only supervisor can remove * @param account The address want to remove the vesting lock */ function _removeVestingLock(address account) internal { _vestingLocks[account] = VestingLock(0, 0, 0, 0); emit VestingUnlocked(account); } /** * @dev Get vesting lock info * @param account The address want to know the vesting lock state. * @return vesting lock info */ function getVestingLock(address account) public view returns ( uint256, uint256, uint256, uint256 ) { return (_vestingLocks[account].amount, _vestingLocks[account].startsAt, _vestingLocks[account].period, _vestingLocks[account].count); } /** * @dev Get total vesting locked amount of address, locked amount will be released by 100%/months * If months is 5, locked amount released 20% per 1 month. * @param account The address want to know the vesting lock amount. * @return vesting locked amount */ function getVestingLockedAmount(address account) public view returns (uint256) { uint256 vestingLockedAmount = 0; uint256 amount = _vestingLocks[account].amount; if (amount > 0) { uint256 startsAt = _vestingLocks[account].startsAt; uint256 period = _vestingLocks[account].period; uint256 count = _vestingLocks[account].count; uint256 expiresAt = startsAt + period * (count - 1); uint256 timestamp = block.timestamp; if (timestamp < startsAt) { vestingLockedAmount = amount; } else if (timestamp < expiresAt) { vestingLockedAmount = (amount * ((expiresAt - timestamp) / period + 1)) / count; } } return vestingLockedAmount; } /** * @dev Get all locked amount * @param account The address want to know the all locked amount * @return all locked amount */ function getAllLockedAmount(address account) public view returns (uint256) { return getTimeLockedAmount(account) + getVestingLockedAmount(account); } } /** * @dev Contract for MyOwnItem Coin */ contract MOI is Pausable, Ownable, Supervisable, Burnable, Freezable, Lockable, ERC20 { uint256 private constant _initialSupply = 5_000_000_000e18; constructor() ERC20("MyOwnItem", "MOI") { _mint(_msgSender(), _initialSupply); } /** * @dev Recover ERC20 coin in contract address. * @param tokenAddress The token contract address * @param tokenAmount Number of tokens to be sent */ function recoverERC20(address tokenAddress, uint256 tokenAmount) public onlyOwner { IERC20(tokenAddress).transfer(owner(), tokenAmount); } /** * @dev lock and pause before transfer token */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal override(ERC20) { super._beforeTokenTransfer(from, to, amount); require(!isFreezed(from), "Freezable: token transfer from freezed account"); require(!isFreezed(to), "Freezable: token transfer to freezed account"); require(!isFreezed(_msgSender()), "Freezable: token transfer called from freezed account"); require(!paused(), "Pausable: token transfer while paused"); require(balanceOf(from) - getAllLockedAmount(from) >= amount, "Lockable: insufficient transfer amount"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner whenNotPaused { _transferOwnership(address(0)); } /** * @dev only supervisor can renounce supervisor ownership */ function renounceSupervisorOwnership() public onlySupervisor whenNotPaused { _transferSupervisorOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner whenNotPaused { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev only supervisor can transfer supervisor ownership */ function transferSupervisorOwnership(address newSupervisor) public onlySupervisor whenNotPaused { require(newSupervisor != address(0), "Supervisable: new supervisor is the zero address"); _transferSupervisorOwnership(newSupervisor); } /** * @dev pause all coin transfer */ function pause() public onlyOwner whenNotPaused { _pause(); } /** * @dev unpause all coin transfer */ function unpause() public onlyOwner whenPaused { _unpause(); } /** * @dev only owner can lock account */ function freeze(address account) public onlyOwner whenNotPaused { _freeze(account); } /** * @dev only supervisor can unfreeze account */ function unfreeze(address account) public onlySupervisor whenNotPaused { _unfreeze(account); } /** * @dev only owner can add burner */ function addBurner(address account) public onlyOwner whenNotPaused { _addBurner(account); } /** * @dev only owner can remove burner */ function removeBurner(address account) public onlyOwner whenNotPaused { _removeBurner(account); } /** * @dev burn burner's coin */ function burn(uint256 amount) public onlyBurner whenNotPaused { _burn(_msgSender(), amount); } /** * @dev only owner can add locker */ function addLocker(address account) public onlyOwner whenNotPaused { _addLocker(account); } /** * @dev only owner can remove locker */ function removeLocker(address account) public onlyOwner whenNotPaused { _removeLocker(account); } /** * @dev only locker can add time lock */ function addTimeLock( address account, uint256 amount, uint256 expiresAt ) public onlyLocker whenNotPaused { _addTimeLock(account, amount, expiresAt); } /** * @dev only supervisor can remove time lock */ function removeTimeLock(address account, uint8 index) public onlySupervisor whenNotPaused { _removeTimeLock(account, index); } /** * @dev only locker can add vesting lock */ function addVestingLock( address account, uint256 startsAt, uint256 period, uint256 count ) public onlyLocker whenNotPaused { _addVestingLock(account, balanceOf(account), startsAt, period, count); } /** * @dev only supervisor can remove vesting lock */ function removeVestingLock(address account) public onlySupervisor whenNotPaused { _removeVestingLock(account); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"BurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"BurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Freezed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"LockerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"LockerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previouSupervisor","type":"address"},{"indexed":true,"internalType":"address","name":"newSupervisor","type":"address"}],"name":"SupervisorOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TimeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TimeUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Unfreezed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"VestingLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"VestingUnlocked","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addLocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"}],"name":"addTimeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"startsAt","type":"uint256"},{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"addVestingLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAllLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getTimeLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTimeLockLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTimeLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVestingLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVestingLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isFreezed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isLocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeLocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"removeTimeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeVestingLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceSupervisorOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supervisor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSupervisor","type":"address"}],"name":"transferSupervisorOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unfreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060408051808201825260098152684d794f776e4974656d60b81b602080830191909152825180840190935260038352624d4f4960e81b908301526000805460ff19169055906200006233620000cc565b6200006d3362000125565b81516200008290600a9060208501906200025f565b5080516200009890600b9060208401906200025f565b505050620000c2620000af620000c860201b60201c565b6b1027e72f1f1281308800000062000177565b62000368565b3390565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907facf6a327286171e5ce7f9bf15425ff49aab0fd07752fec84b2bd232c9f480c1790600090a35050565b6001600160a01b038216620001d25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060096000828254620001e6919062000305565b90915550506001600160a01b038216600090815260076020526040812080548392906200021590849062000305565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200026d906200032c565b90600052602060002090601f016020900481019282620002915760008555620002dc565b82601f10620002ac57805160ff1916838001178555620002dc565b82800160010185558215620002dc579182015b82811115620002dc578251825591602001919060010190620002bf565b50620002ea929150620002ee565b5090565b5b80821115620002ea5760008155600101620002ef565b600082198211156200032757634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200034157607f821691505b6020821081036200036257634e487b7160e01b600052602260045260246000fd5b50919050565b6126db80620003786000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c806370a0823111610146578063a9059cbb116100c3578063c47a784c11610087578063c47a784c146105b7578063ce62cd4a146105ca578063dd62ed3e146105dd578063f2fde38b146105f0578063f44637ba14610603578063f99a2ca01461061657600080fd5b8063a9059cbb1461054d578063ab0de0fe14610560578063b0a087c514610573578063ba40c71a1461057b578063be4329f4146105a457600080fd5b80638980f11f1161010a5780638980f11f146104f65780638d1fdf2f146105095780638da5cb5b1461051c57806395d89b4114610532578063a457c2d71461053a57600080fd5b806370a082311461047e578063715018a6146104a75780638111f24e146104af5780638456cb59146104db578063854d9ffe146104e357600080fd5b806339509351116101d457806345cc58901161019857806345cc5890146104005780634ca47ad11461041357806356e4b68b1461043b5780635c975abb146104605780636f395c831461046b57600080fd5b806339509351146103935780633f4ba83a146103a657806342966c68146103ae5780634334614a146103c157806345c8b1a6146103ed57600080fd5b806319651dbf1161021b57806319651dbf146102d357806323b872dd146103325780632ec63d7c14610345578063313ce56714610371578063363b3c151461038057600080fd5b8063028468581461025857806306fdde031461026d578063095ea7b31461028b5780630d605482146102ae57806318160ddd146102c1575b600080fd5b61026b6102663660046122c1565b610629565b005b610275610691565b60405161028291906122e3565b60405180910390f35b61029e610299366004612338565b610723565b6040519015158152602001610282565b61026b6102bc366004612362565b61073b565b6009545b604051908152602001610282565b6103126102e13660046122c1565b6001600160a01b03166000908152600660205260409020805460018201546002830154600390930154919390929190565b604080519485526020850193909352918301526060820152608001610282565b61029e610340366004612395565b61079d565b61029e6103533660046122c1565b6001600160a01b031660009081526004602052604090205460ff1690565b60405160128152602001610282565b61026b61038e3660046122c1565b6107c1565b61029e6103a1366004612338565b610886565b61026b6108a8565b61026b6103bc3660046123d1565b61092b565b61029e6103cf3660046122c1565b6001600160a01b031660009081526002602052604090205460ff1690565b61026b6103fb3660046122c1565b6109c2565b61026b61040e3660046122c1565b610a18565b6104266104213660046123ea565b610a74565b60408051928352602083019190915201610282565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610282565b60005460ff1661029e565b61026b6104793660046123ea565b610b6c565b6102c561048c3660046122c1565b6001600160a01b031660009081526007602052604090205490565b61026b610bc7565b61029e6104bd3660046122c1565b6001600160a01b031660009081526003602052604090205460ff1690565b61026b610c24565b6102c56104f13660046122c1565b610c7f565b61026b610504366004612338565b610ca3565b61026b6105173660046122c1565b610d6b565b60005461010090046001600160a01b0316610448565b610275610dc7565b61029e610548366004612338565b610dd6565b61029e61055b366004612338565b610e51565b6102c561056e3660046122c1565b610e5f565b61026b610f2b565b6102c56105893660046122c1565b6001600160a01b031660009081526005602052604090205490565b6102c56105b23660046122c1565b610f82565b61026b6105c5366004612427565b61104f565b61026b6105d83660046122c1565b6110d2565b6102c56105eb366004612460565b61112e565b61026b6105fe3660046122c1565b611159565b61026b6106113660046122c1565b61121a565b61026b6106243660046122c1565b611276565b6000546001600160a01b036101009091041633146106625760405162461bcd60e51b815260040161065990612493565b60405180910390fd5b60005460ff16156106855760405162461bcd60e51b8152600401610659906124c8565b61068e816112cc565b50565b6060600a80546106a0906124f2565b80601f01602080910402602001604051908101604052809291908181526020018280546106cc906124f2565b80156107195780601f106106ee57610100808354040283529160200191610719565b820191906000526020600020905b8154815290600101906020018083116106fc57829003601f168201915b5050505050905090565b600033610731818585611315565b5060019392505050565b3360009081526004602052604090205460ff1661076a5760405162461bcd60e51b81526004016106599061252c565b60005460ff161561078d5760405162461bcd60e51b8152600401610659906124c8565b61079883838361143a565b505050565b6000336107ab858285611551565b6107b68585856115c5565b506001949350505050565b6001546001600160a01b031633146107eb5760405162461bcd60e51b81526004016106599061256e565b60005460ff161561080e5760405162461bcd60e51b8152600401610659906124c8565b6001600160a01b03811661087d5760405162461bcd60e51b815260206004820152603060248201527f537570657276697361626c653a206e65772073757065727669736f722069732060448201526f746865207a65726f206164647265737360801b6064820152608401610659565b61068e8161179f565b600033610731818585610899838361112e565b6108a391906125ce565b611315565b6000546001600160a01b036101009091041633146108d85760405162461bcd60e51b815260040161065990612493565b60005460ff166109215760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610659565b6109296117f1565b565b3360009081526002602052604090205460ff166109955760405162461bcd60e51b815260206004820152602260248201527f4275726e61626c653a2063616c6c6572206973206e6f7420746865206275726e60448201526132b960f11b6064820152608401610659565b60005460ff16156109b85760405162461bcd60e51b8152600401610659906124c8565b61068e3382611884565b6001546001600160a01b031633146109ec5760405162461bcd60e51b81526004016106599061256e565b60005460ff1615610a0f5760405162461bcd60e51b8152600401610659906124c8565b61068e816119ca565b6000546001600160a01b03610100909104163314610a485760405162461bcd60e51b815260040161065990612493565b60005460ff1615610a6b5760405162461bcd60e51b8152600401610659906124c8565b61068e81611a13565b6001600160a01b038216600090815260056020526040812054819060ff8416108015610a9e575060015b610ae45760405162461bcd60e51b81526020600482015260176024820152760a8d2daca98dec6d67440d2dcecc2d8d2c840d2dcc8caf604b1b6044820152606401610659565b6001600160a01b0384166000908152600560205260409020805460ff8516908110610b1157610b116125e6565b600091825260208083206002909202909101546001600160a01b038716835260059091526040909120805460ff8616908110610b4f57610b4f6125e6565b906000526020600020906002020160010154915091509250929050565b6001546001600160a01b03163314610b965760405162461bcd60e51b81526004016106599061256e565b60005460ff1615610bb95760405162461bcd60e51b8152600401610659906124c8565b610bc38282611a5f565b5050565b6000546001600160a01b03610100909104163314610bf75760405162461bcd60e51b815260040161065990612493565b60005460ff1615610c1a5760405162461bcd60e51b8152600401610659906124c8565b6109296000611c10565b6000546001600160a01b03610100909104163314610c545760405162461bcd60e51b815260040161065990612493565b60005460ff1615610c775760405162461bcd60e51b8152600401610659906124c8565b610929611c69565b6000610c8a82610e5f565b610c9383610f82565b610c9d91906125ce565b92915050565b6000546001600160a01b03610100909104163314610cd35760405162461bcd60e51b815260040161065990612493565b816001600160a01b031663a9059cbb610cfa6000546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610d47573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079891906125fc565b6000546001600160a01b03610100909104163314610d9b5760405162461bcd60e51b815260040161065990612493565b60005460ff1615610dbe5760405162461bcd60e51b8152600401610659906124c8565b61068e81611cc1565b6060600b80546106a0906124f2565b60003381610de4828661112e565b905083811015610e445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610659565b6107b68286868403611315565b6000336107318185856115c5565b6001600160a01b03811660009081526006602052604081205481908015610f24576001600160a01b0384166000908152600660205260408120600180820154600283015460039093015490939091610eb7908361261e565b610ec19084612635565b610ecb90856125ce565b90504284811015610ede57859650610f1e565b81811015610f1e578284610ef2838561261e565b610efc9190612654565b610f079060016125ce565b610f119088612635565b610f1b9190612654565b96505b50505050505b5092915050565b6001546001600160a01b03163314610f555760405162461bcd60e51b81526004016106599061256e565b60005460ff1615610f785760405162461bcd60e51b8152600401610659906124c8565b610929600061179f565b6001600160a01b0381166000908152600560205260408120548190815b81811015611046576001600160a01b0385166000908152600560205260409020805482908110610fd157610fd16125e6565b906000526020600020906002020160010154421015611034576001600160a01b0385166000908152600560205260409020805482908110611014576110146125e6565b9060005260206000209060020201600001548361103191906125ce565b92505b8061103e81612676565b915050610f9f565b50909392505050565b3360009081526004602052604090205460ff1661107e5760405162461bcd60e51b81526004016106599061252c565b60005460ff16156110a15760405162461bcd60e51b8152600401610659906124c8565b6110cc846110c4866001600160a01b031660009081526007602052604090205490565b858585611d0d565b50505050565b6000546001600160a01b036101009091041633146111025760405162461bcd60e51b815260040161065990612493565b60005460ff16156111255760405162461bcd60e51b8152600401610659906124c8565b61068e81611f35565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6000546001600160a01b036101009091041633146111895760405162461bcd60e51b815260040161065990612493565b60005460ff16156111ac5760405162461bcd60e51b8152600401610659906124c8565b6001600160a01b0381166112115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610659565b61068e81611c10565b6000546001600160a01b0361010090910416331461124a5760405162461bcd60e51b815260040161065990612493565b60005460ff161561126d5760405162461bcd60e51b8152600401610659906124c8565b61068e81611f7e565b6001546001600160a01b031633146112a05760405162461bcd60e51b81526004016106599061256e565b60005460ff16156112c35760405162461bcd60e51b8152600401610659906124c8565b61068e81611fca565b6001600160a01b038116600081815260026020526040808220805460ff19169055517f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e9190a250565b6001600160a01b0383166113775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610659565b6001600160a01b0382166113d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610659565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000821161148a5760405162461bcd60e51b815260206004820152601a60248201527f54696d654c6f636b3a206c6f636b20616d6f756e7420697320300000000000006044820152606401610659565b4281116114d95760405162461bcd60e51b815260206004820152601d60248201527f54696d654c6f636b3a20696e76616c69642065787069726520646174650000006044820152606401610659565b6001600160a01b0383166000818152600560209081526040808320815180830183528781528084018781528254600181810185559387529486209151600290950290910193845551920191909155517fc80fbc3452298019908587d820303825af4187ac57ed90d7328886fd00b225579190a2505050565b600061155d848461112e565b905060001981146110cc57818110156115b85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610659565b6110cc8484848403611315565b6001600160a01b0383166116295760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610659565b6001600160a01b03821661168b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610659565b611696838383612048565b6001600160a01b0383166000908152600760205260409020548181101561170e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610659565b6001600160a01b038085166000908152600760205260408082208585039055918516815290812080548492906117459084906125ce565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161179191815260200190565b60405180910390a350505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907facf6a327286171e5ce7f9bf15425ff49aab0fd07752fec84b2bd232c9f480c1790600090a35050565b60005460ff1661183a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610659565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166118e45760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610659565b6001600160a01b038216600090815260076020526040902054818110156119585760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610659565b6001600160a01b038316600090815260076020526040812083830390556009805484929061198790849061261e565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161142d565b6001600160a01b038116600081815260036020526040808220805460ff19169055517f4d1fe3cc0f516ce2cfc5e83d52ee28af7f55376b18f58e7081c5fd25d8eeb1df9190a250565b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517f7c5af8d36d8be103bc583da8e01d3e98f15216cc7ef38832c7550b34e8feb43a9190a250565b6001600160a01b03821660009081526005602052604090205460ff8216108015611a87575060015b611acd5760405162461bcd60e51b81526020600482015260176024820152760a8d2daca98dec6d67440d2dcecc2d8d2c840d2dcc8caf604b1b6044820152606401610659565b6001600160a01b03821660009081526005602052604090205460ff8216611af560018361261e565b14611b93576001600160a01b0383166000908152600560205260409020611b1d60018361261e565b81548110611b2d57611b2d6125e6565b906000526020600020906002020160056000856001600160a01b03166001600160a01b031681526020019081526020016000208360ff1681548110611b7457611b746125e6565b6000918252602090912082546002909202019081556001918201549101555b6001600160a01b0383166000908152600560205260409020805480611bba57611bba61268f565b60008281526020812060026000199093019283020181815560010181905591556040516001600160a01b038516917fb34baa9e1ce392292123bbdca3018904b21991f7411e14d99a10aaf88ec8ea0d91a2505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b60005460ff1615611c8c5760405162461bcd60e51b8152600401610659906124c8565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118673390565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f0de8364a528e5ca2869160b20c375fe85b4e98d24a9cb48b4dc49c5f76d05b249190a250565b6001600160a01b038516611d735760405162461bcd60e51b815260206004820152602760248201527f56657374696e674c6f636b3a206c6f636b2066726f6d20746865207a65726f206044820152666164647265737360c81b6064820152608401610659565b428311611dc25760405162461bcd60e51b815260206004820152601f60248201527f56657374696e674c6f636b3a206d75737420736574206166746572206e6f77006044820152606401610659565b60008411611e125760405162461bcd60e51b815260206004820152601860248201527f56657374696e674c6f636b3a20616d6f756e74206973203000000000000000006044820152606401610659565b60008211611e625760405162461bcd60e51b815260206004820152601860248201527f56657374696e674c6f636b3a20706572696f64206973203000000000000000006044820152606401610659565b60008111611eb25760405162461bcd60e51b815260206004820152601760248201527f56657374696e674c6f636b3a20636f756e7420697320300000000000000000006044820152606401610659565b604080516080810182528581526020808201868152828401868152606084018681526001600160a01b038b166000818152600690955286852095518655925160018601559051600285015551600390930192909255915190917f04a72c810da52db1f0e22421438d411667cd0c1559e9ae7c638f1aed4bfa066d91a25050505050565b6001600160a01b038116600081815260046020526040808220805460ff19169055517f95266445d018e5b30f957c915e91b04bb4a19bf0f8f21020a08dad9be7931df49190a250565b6001600160a01b038116600081815260026020526040808220805460ff19166001179055517f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b945609190a250565b6040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b0388168086526006909452868520955186559151600186015551600285015551600390930192909255915190917ff71e9d23ff58e708ca92807894c580d899e97ab5bacc17df3543475e0e439f8491a250565b6001600160a01b03831660009081526003602052604090205460ff16156120c85760405162461bcd60e51b815260206004820152602e60248201527f467265657a61626c653a20746f6b656e207472616e736665722066726f6d206660448201526d1c99595e9959081858d8dbdd5b9d60921b6064820152608401610659565b6001600160a01b03821660009081526003602052604090205460ff16156121465760405162461bcd60e51b815260206004820152602c60248201527f467265657a61626c653a20746f6b656e207472616e7366657220746f2066726560448201526b195e9959081858d8dbdd5b9d60a21b6064820152608401610659565b61214f336104bd565b156121ba5760405162461bcd60e51b815260206004820152603560248201527f467265657a61626c653a20746f6b656e207472616e736665722063616c6c656460448201527408199c9bdb48199c99595e9959081858d8dbdd5b9d605a1b6064820152608401610659565b60005460ff161561221b5760405162461bcd60e51b815260206004820152602560248201527f5061757361626c653a20746f6b656e207472616e73666572207768696c652070604482015264185d5cd95960da1b6064820152608401610659565b8061222584610c7f565b6001600160a01b038516600090815260076020526040902054612248919061261e565b10156107985760405162461bcd60e51b815260206004820152602660248201527f4c6f636b61626c653a20696e73756666696369656e74207472616e7366657220604482015265185b5bdd5b9d60d21b6064820152608401610659565b80356001600160a01b03811681146122bc57600080fd5b919050565b6000602082840312156122d357600080fd5b6122dc826122a5565b9392505050565b600060208083528351808285015260005b81811015612310578581018301518582016040015282016122f4565b81811115612322576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561234b57600080fd5b612354836122a5565b946020939093013593505050565b60008060006060848603121561237757600080fd5b612380846122a5565b95602085013595506040909401359392505050565b6000806000606084860312156123aa57600080fd5b6123b3846122a5565b92506123c1602085016122a5565b9150604084013590509250925092565b6000602082840312156123e357600080fd5b5035919050565b600080604083850312156123fd57600080fd5b612406836122a5565b9150602083013560ff8116811461241c57600080fd5b809150509250929050565b6000806000806080858703121561243d57600080fd5b612446856122a5565b966020860135965060408601359560600135945092505050565b6000806040838503121561247357600080fd5b61247c836122a5565b915061248a602084016122a5565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b600181811c9082168061250657607f821691505b60208210810361252657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4c6f636b61626c653a2063616c6c6572206973206e6f7420746865206c6f636b60408201526132b960f11b606082015260800190565b6020808252602a908201527f537570657276697361626c653a2063616c6c6572206973206e6f74207468652060408201526939bab832b93b34b9b7b960b11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156125e1576125e16125b8565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561260e57600080fd5b815180151581146122dc57600080fd5b600082821015612630576126306125b8565b500390565b600081600019048311821515161561264f5761264f6125b8565b500290565b60008261267157634e487b7160e01b600052601260045260246000fd5b500490565b600060018201612688576126886125b8565b5060010190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220be95e1f0aa279a4339cc4c06b01afcaea4a9ee47578294eb63ec0a34e9e7227564736f6c634300080e0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102535760003560e01c806370a0823111610146578063a9059cbb116100c3578063c47a784c11610087578063c47a784c146105b7578063ce62cd4a146105ca578063dd62ed3e146105dd578063f2fde38b146105f0578063f44637ba14610603578063f99a2ca01461061657600080fd5b8063a9059cbb1461054d578063ab0de0fe14610560578063b0a087c514610573578063ba40c71a1461057b578063be4329f4146105a457600080fd5b80638980f11f1161010a5780638980f11f146104f65780638d1fdf2f146105095780638da5cb5b1461051c57806395d89b4114610532578063a457c2d71461053a57600080fd5b806370a082311461047e578063715018a6146104a75780638111f24e146104af5780638456cb59146104db578063854d9ffe146104e357600080fd5b806339509351116101d457806345cc58901161019857806345cc5890146104005780634ca47ad11461041357806356e4b68b1461043b5780635c975abb146104605780636f395c831461046b57600080fd5b806339509351146103935780633f4ba83a146103a657806342966c68146103ae5780634334614a146103c157806345c8b1a6146103ed57600080fd5b806319651dbf1161021b57806319651dbf146102d357806323b872dd146103325780632ec63d7c14610345578063313ce56714610371578063363b3c151461038057600080fd5b8063028468581461025857806306fdde031461026d578063095ea7b31461028b5780630d605482146102ae57806318160ddd146102c1575b600080fd5b61026b6102663660046122c1565b610629565b005b610275610691565b60405161028291906122e3565b60405180910390f35b61029e610299366004612338565b610723565b6040519015158152602001610282565b61026b6102bc366004612362565b61073b565b6009545b604051908152602001610282565b6103126102e13660046122c1565b6001600160a01b03166000908152600660205260409020805460018201546002830154600390930154919390929190565b604080519485526020850193909352918301526060820152608001610282565b61029e610340366004612395565b61079d565b61029e6103533660046122c1565b6001600160a01b031660009081526004602052604090205460ff1690565b60405160128152602001610282565b61026b61038e3660046122c1565b6107c1565b61029e6103a1366004612338565b610886565b61026b6108a8565b61026b6103bc3660046123d1565b61092b565b61029e6103cf3660046122c1565b6001600160a01b031660009081526002602052604090205460ff1690565b61026b6103fb3660046122c1565b6109c2565b61026b61040e3660046122c1565b610a18565b6104266104213660046123ea565b610a74565b60408051928352602083019190915201610282565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610282565b60005460ff1661029e565b61026b6104793660046123ea565b610b6c565b6102c561048c3660046122c1565b6001600160a01b031660009081526007602052604090205490565b61026b610bc7565b61029e6104bd3660046122c1565b6001600160a01b031660009081526003602052604090205460ff1690565b61026b610c24565b6102c56104f13660046122c1565b610c7f565b61026b610504366004612338565b610ca3565b61026b6105173660046122c1565b610d6b565b60005461010090046001600160a01b0316610448565b610275610dc7565b61029e610548366004612338565b610dd6565b61029e61055b366004612338565b610e51565b6102c561056e3660046122c1565b610e5f565b61026b610f2b565b6102c56105893660046122c1565b6001600160a01b031660009081526005602052604090205490565b6102c56105b23660046122c1565b610f82565b61026b6105c5366004612427565b61104f565b61026b6105d83660046122c1565b6110d2565b6102c56105eb366004612460565b61112e565b61026b6105fe3660046122c1565b611159565b61026b6106113660046122c1565b61121a565b61026b6106243660046122c1565b611276565b6000546001600160a01b036101009091041633146106625760405162461bcd60e51b815260040161065990612493565b60405180910390fd5b60005460ff16156106855760405162461bcd60e51b8152600401610659906124c8565b61068e816112cc565b50565b6060600a80546106a0906124f2565b80601f01602080910402602001604051908101604052809291908181526020018280546106cc906124f2565b80156107195780601f106106ee57610100808354040283529160200191610719565b820191906000526020600020905b8154815290600101906020018083116106fc57829003601f168201915b5050505050905090565b600033610731818585611315565b5060019392505050565b3360009081526004602052604090205460ff1661076a5760405162461bcd60e51b81526004016106599061252c565b60005460ff161561078d5760405162461bcd60e51b8152600401610659906124c8565b61079883838361143a565b505050565b6000336107ab858285611551565b6107b68585856115c5565b506001949350505050565b6001546001600160a01b031633146107eb5760405162461bcd60e51b81526004016106599061256e565b60005460ff161561080e5760405162461bcd60e51b8152600401610659906124c8565b6001600160a01b03811661087d5760405162461bcd60e51b815260206004820152603060248201527f537570657276697361626c653a206e65772073757065727669736f722069732060448201526f746865207a65726f206164647265737360801b6064820152608401610659565b61068e8161179f565b600033610731818585610899838361112e565b6108a391906125ce565b611315565b6000546001600160a01b036101009091041633146108d85760405162461bcd60e51b815260040161065990612493565b60005460ff166109215760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610659565b6109296117f1565b565b3360009081526002602052604090205460ff166109955760405162461bcd60e51b815260206004820152602260248201527f4275726e61626c653a2063616c6c6572206973206e6f7420746865206275726e60448201526132b960f11b6064820152608401610659565b60005460ff16156109b85760405162461bcd60e51b8152600401610659906124c8565b61068e3382611884565b6001546001600160a01b031633146109ec5760405162461bcd60e51b81526004016106599061256e565b60005460ff1615610a0f5760405162461bcd60e51b8152600401610659906124c8565b61068e816119ca565b6000546001600160a01b03610100909104163314610a485760405162461bcd60e51b815260040161065990612493565b60005460ff1615610a6b5760405162461bcd60e51b8152600401610659906124c8565b61068e81611a13565b6001600160a01b038216600090815260056020526040812054819060ff8416108015610a9e575060015b610ae45760405162461bcd60e51b81526020600482015260176024820152760a8d2daca98dec6d67440d2dcecc2d8d2c840d2dcc8caf604b1b6044820152606401610659565b6001600160a01b0384166000908152600560205260409020805460ff8516908110610b1157610b116125e6565b600091825260208083206002909202909101546001600160a01b038716835260059091526040909120805460ff8616908110610b4f57610b4f6125e6565b906000526020600020906002020160010154915091509250929050565b6001546001600160a01b03163314610b965760405162461bcd60e51b81526004016106599061256e565b60005460ff1615610bb95760405162461bcd60e51b8152600401610659906124c8565b610bc38282611a5f565b5050565b6000546001600160a01b03610100909104163314610bf75760405162461bcd60e51b815260040161065990612493565b60005460ff1615610c1a5760405162461bcd60e51b8152600401610659906124c8565b6109296000611c10565b6000546001600160a01b03610100909104163314610c545760405162461bcd60e51b815260040161065990612493565b60005460ff1615610c775760405162461bcd60e51b8152600401610659906124c8565b610929611c69565b6000610c8a82610e5f565b610c9383610f82565b610c9d91906125ce565b92915050565b6000546001600160a01b03610100909104163314610cd35760405162461bcd60e51b815260040161065990612493565b816001600160a01b031663a9059cbb610cfa6000546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610d47573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079891906125fc565b6000546001600160a01b03610100909104163314610d9b5760405162461bcd60e51b815260040161065990612493565b60005460ff1615610dbe5760405162461bcd60e51b8152600401610659906124c8565b61068e81611cc1565b6060600b80546106a0906124f2565b60003381610de4828661112e565b905083811015610e445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610659565b6107b68286868403611315565b6000336107318185856115c5565b6001600160a01b03811660009081526006602052604081205481908015610f24576001600160a01b0384166000908152600660205260408120600180820154600283015460039093015490939091610eb7908361261e565b610ec19084612635565b610ecb90856125ce565b90504284811015610ede57859650610f1e565b81811015610f1e578284610ef2838561261e565b610efc9190612654565b610f079060016125ce565b610f119088612635565b610f1b9190612654565b96505b50505050505b5092915050565b6001546001600160a01b03163314610f555760405162461bcd60e51b81526004016106599061256e565b60005460ff1615610f785760405162461bcd60e51b8152600401610659906124c8565b610929600061179f565b6001600160a01b0381166000908152600560205260408120548190815b81811015611046576001600160a01b0385166000908152600560205260409020805482908110610fd157610fd16125e6565b906000526020600020906002020160010154421015611034576001600160a01b0385166000908152600560205260409020805482908110611014576110146125e6565b9060005260206000209060020201600001548361103191906125ce565b92505b8061103e81612676565b915050610f9f565b50909392505050565b3360009081526004602052604090205460ff1661107e5760405162461bcd60e51b81526004016106599061252c565b60005460ff16156110a15760405162461bcd60e51b8152600401610659906124c8565b6110cc846110c4866001600160a01b031660009081526007602052604090205490565b858585611d0d565b50505050565b6000546001600160a01b036101009091041633146111025760405162461bcd60e51b815260040161065990612493565b60005460ff16156111255760405162461bcd60e51b8152600401610659906124c8565b61068e81611f35565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6000546001600160a01b036101009091041633146111895760405162461bcd60e51b815260040161065990612493565b60005460ff16156111ac5760405162461bcd60e51b8152600401610659906124c8565b6001600160a01b0381166112115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610659565b61068e81611c10565b6000546001600160a01b0361010090910416331461124a5760405162461bcd60e51b815260040161065990612493565b60005460ff161561126d5760405162461bcd60e51b8152600401610659906124c8565b61068e81611f7e565b6001546001600160a01b031633146112a05760405162461bcd60e51b81526004016106599061256e565b60005460ff16156112c35760405162461bcd60e51b8152600401610659906124c8565b61068e81611fca565b6001600160a01b038116600081815260026020526040808220805460ff19169055517f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e9190a250565b6001600160a01b0383166113775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610659565b6001600160a01b0382166113d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610659565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000821161148a5760405162461bcd60e51b815260206004820152601a60248201527f54696d654c6f636b3a206c6f636b20616d6f756e7420697320300000000000006044820152606401610659565b4281116114d95760405162461bcd60e51b815260206004820152601d60248201527f54696d654c6f636b3a20696e76616c69642065787069726520646174650000006044820152606401610659565b6001600160a01b0383166000818152600560209081526040808320815180830183528781528084018781528254600181810185559387529486209151600290950290910193845551920191909155517fc80fbc3452298019908587d820303825af4187ac57ed90d7328886fd00b225579190a2505050565b600061155d848461112e565b905060001981146110cc57818110156115b85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610659565b6110cc8484848403611315565b6001600160a01b0383166116295760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610659565b6001600160a01b03821661168b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610659565b611696838383612048565b6001600160a01b0383166000908152600760205260409020548181101561170e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610659565b6001600160a01b038085166000908152600760205260408082208585039055918516815290812080548492906117459084906125ce565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161179191815260200190565b60405180910390a350505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907facf6a327286171e5ce7f9bf15425ff49aab0fd07752fec84b2bd232c9f480c1790600090a35050565b60005460ff1661183a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610659565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166118e45760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610659565b6001600160a01b038216600090815260076020526040902054818110156119585760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610659565b6001600160a01b038316600090815260076020526040812083830390556009805484929061198790849061261e565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161142d565b6001600160a01b038116600081815260036020526040808220805460ff19169055517f4d1fe3cc0f516ce2cfc5e83d52ee28af7f55376b18f58e7081c5fd25d8eeb1df9190a250565b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517f7c5af8d36d8be103bc583da8e01d3e98f15216cc7ef38832c7550b34e8feb43a9190a250565b6001600160a01b03821660009081526005602052604090205460ff8216108015611a87575060015b611acd5760405162461bcd60e51b81526020600482015260176024820152760a8d2daca98dec6d67440d2dcecc2d8d2c840d2dcc8caf604b1b6044820152606401610659565b6001600160a01b03821660009081526005602052604090205460ff8216611af560018361261e565b14611b93576001600160a01b0383166000908152600560205260409020611b1d60018361261e565b81548110611b2d57611b2d6125e6565b906000526020600020906002020160056000856001600160a01b03166001600160a01b031681526020019081526020016000208360ff1681548110611b7457611b746125e6565b6000918252602090912082546002909202019081556001918201549101555b6001600160a01b0383166000908152600560205260409020805480611bba57611bba61268f565b60008281526020812060026000199093019283020181815560010181905591556040516001600160a01b038516917fb34baa9e1ce392292123bbdca3018904b21991f7411e14d99a10aaf88ec8ea0d91a2505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b60005460ff1615611c8c5760405162461bcd60e51b8152600401610659906124c8565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118673390565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f0de8364a528e5ca2869160b20c375fe85b4e98d24a9cb48b4dc49c5f76d05b249190a250565b6001600160a01b038516611d735760405162461bcd60e51b815260206004820152602760248201527f56657374696e674c6f636b3a206c6f636b2066726f6d20746865207a65726f206044820152666164647265737360c81b6064820152608401610659565b428311611dc25760405162461bcd60e51b815260206004820152601f60248201527f56657374696e674c6f636b3a206d75737420736574206166746572206e6f77006044820152606401610659565b60008411611e125760405162461bcd60e51b815260206004820152601860248201527f56657374696e674c6f636b3a20616d6f756e74206973203000000000000000006044820152606401610659565b60008211611e625760405162461bcd60e51b815260206004820152601860248201527f56657374696e674c6f636b3a20706572696f64206973203000000000000000006044820152606401610659565b60008111611eb25760405162461bcd60e51b815260206004820152601760248201527f56657374696e674c6f636b3a20636f756e7420697320300000000000000000006044820152606401610659565b604080516080810182528581526020808201868152828401868152606084018681526001600160a01b038b166000818152600690955286852095518655925160018601559051600285015551600390930192909255915190917f04a72c810da52db1f0e22421438d411667cd0c1559e9ae7c638f1aed4bfa066d91a25050505050565b6001600160a01b038116600081815260046020526040808220805460ff19169055517f95266445d018e5b30f957c915e91b04bb4a19bf0f8f21020a08dad9be7931df49190a250565b6001600160a01b038116600081815260026020526040808220805460ff19166001179055517f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b945609190a250565b6040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b0388168086526006909452868520955186559151600186015551600285015551600390930192909255915190917ff71e9d23ff58e708ca92807894c580d899e97ab5bacc17df3543475e0e439f8491a250565b6001600160a01b03831660009081526003602052604090205460ff16156120c85760405162461bcd60e51b815260206004820152602e60248201527f467265657a61626c653a20746f6b656e207472616e736665722066726f6d206660448201526d1c99595e9959081858d8dbdd5b9d60921b6064820152608401610659565b6001600160a01b03821660009081526003602052604090205460ff16156121465760405162461bcd60e51b815260206004820152602c60248201527f467265657a61626c653a20746f6b656e207472616e7366657220746f2066726560448201526b195e9959081858d8dbdd5b9d60a21b6064820152608401610659565b61214f336104bd565b156121ba5760405162461bcd60e51b815260206004820152603560248201527f467265657a61626c653a20746f6b656e207472616e736665722063616c6c656460448201527408199c9bdb48199c99595e9959081858d8dbdd5b9d605a1b6064820152608401610659565b60005460ff161561221b5760405162461bcd60e51b815260206004820152602560248201527f5061757361626c653a20746f6b656e207472616e73666572207768696c652070604482015264185d5cd95960da1b6064820152608401610659565b8061222584610c7f565b6001600160a01b038516600090815260076020526040902054612248919061261e565b10156107985760405162461bcd60e51b815260206004820152602660248201527f4c6f636b61626c653a20696e73756666696369656e74207472616e7366657220604482015265185b5bdd5b9d60d21b6064820152608401610659565b80356001600160a01b03811681146122bc57600080fd5b919050565b6000602082840312156122d357600080fd5b6122dc826122a5565b9392505050565b600060208083528351808285015260005b81811015612310578581018301518582016040015282016122f4565b81811115612322576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561234b57600080fd5b612354836122a5565b946020939093013593505050565b60008060006060848603121561237757600080fd5b612380846122a5565b95602085013595506040909401359392505050565b6000806000606084860312156123aa57600080fd5b6123b3846122a5565b92506123c1602085016122a5565b9150604084013590509250925092565b6000602082840312156123e357600080fd5b5035919050565b600080604083850312156123fd57600080fd5b612406836122a5565b9150602083013560ff8116811461241c57600080fd5b809150509250929050565b6000806000806080858703121561243d57600080fd5b612446856122a5565b966020860135965060408601359560600135945092505050565b6000806040838503121561247357600080fd5b61247c836122a5565b915061248a602084016122a5565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b600181811c9082168061250657607f821691505b60208210810361252657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4c6f636b61626c653a2063616c6c6572206973206e6f7420746865206c6f636b60408201526132b960f11b606082015260800190565b6020808252602a908201527f537570657276697361626c653a2063616c6c6572206973206e6f74207468652060408201526939bab832b93b34b9b7b960b11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156125e1576125e16125b8565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561260e57600080fd5b815180151581146122dc57600080fd5b600082821015612630576126306125b8565b500390565b600081600019048311821515161561264f5761264f6125b8565b500290565b60008261267157634e487b7160e01b600052601260045260246000fd5b500490565b600060018201612688576126886125b8565b5060010190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220be95e1f0aa279a4339cc4c06b01afcaea4a9ee47578294eb63ec0a34e9e7227564736f6c634300080e0033
Deployed Bytecode Sourcemap
30824:5220:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34402:111;;;;;;:::i;:::-;;:::i;:::-;;8115:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10466:201;;;;;;:::i;:::-;;:::i;:::-;;;1409:14:1;;1402:22;1384:41;;1372:2;1357:18;10466:201:0;1244:187:1;35097:198:0;;;;;;:::i;:::-;;:::i;9235:108::-;9323:12;;9235:108;;;1909:25:1;;;1897:2;1882:18;9235:108:0;1763:177:1;28982:344:0;;;;;;:::i;:::-;-1:-1:-1;;;;;29194:22:0;29085:7;29194:22;;;:13;:22;;;;;:29;;29225:31;;;;29258:29;;;;29289:28;;;;;29194:29;;29225:31;;29258:29;29289:28;28982:344;;;;;2176:25:1;;;2232:2;2217:18;;2210:34;;;;2260:18;;;2253:34;2318:2;2303:18;;2296:34;2163:3;2148:19;28982:344:0;1945:391:1;11247:295:0;;;;;;:::i;:::-;;:::i;24485:105::-;;;;;;:::i;:::-;-1:-1:-1;;;;;24565:17:0;24541:4;24565:17;;;:8;:17;;;;;;;;;24485:105;9077:93;;;9160:2;2816:36:1;;2804:2;2789:18;9077:93:0;2674:184:1;33278:257:0;;;;;;:::i;:::-;;:::i;11951:238::-;;;;;;:::i;:::-;;:::i;33738:76::-;;;:::i;34571:108::-;;;;;;:::i;:::-;;:::i;21696:105::-;;;;;;:::i;:::-;-1:-1:-1;;;;;21776:17:0;21752:4;21776:17;;;:8;:17;;;;;;;;;21696:105;34056:108;;;;;;:::i;:::-;;:::i;34744:105::-;;;;;;:::i;:::-;;:::i;26572:284::-;;;;;;:::i;:::-;;:::i;:::-;;;;3570:25:1;;;3626:2;3611:18;;3604:34;;;;3543:18;26572:284:0;3396:248:1;20451:97:0;20529:11;;-1:-1:-1;;;;;20529:11:0;20451:97;;;-1:-1:-1;;;;;3813:32:1;;;3795:51;;3783:2;3768:18;20451:97:0;3649:203:1;1690:86:0;1737:4;1761:7;;;1690:86;;35371:140;;;;;;:::i;:::-;;:::i;9406:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9507:18:0;9480:7;9507:18;;;:9;:18;;;;;;;9406:127;32495:109;;;:::i;23231:106::-;;;;;;:::i;:::-;-1:-1:-1;;;;;23312:17:0;23288:4;23312:17;;;:8;:17;;;;;;;;;23231:106;33598:75;;;:::i;30607:163::-;;;;;;:::i;:::-;;:::i;31267:152::-;;;;;;:::i;:::-;;:::i;33881:99::-;;;;;;:::i;:::-;;:::i;18796:87::-;18842:7;18869:6;;;;-1:-1:-1;;;;;18869:6:0;18796:87;;8334:104;;;:::i;12692:436::-;;;;;;:::i;:::-;;:::i;9739:193::-;;;;;;:::i;:::-;;:::i;29630:812::-;;;;;;:::i;:::-;;:::i;32693:134::-;;;:::i;26251:126::-;;;;;;:::i;:::-;-1:-1:-1;;;;;26343:19:0;26316:7;26343:19;;;:10;:19;;;;;:26;;26251:126;27040:438;;;;;;:::i;:::-;;:::i;35583:253::-;;;;;;:::i;:::-;;:::i;34917:111::-;;;;;;:::i;:::-;;:::i;9995:151::-;;;;;;:::i;:::-;;:::i;32982:207::-;;;;;;:::i;:::-;;:::i;34229:105::-;;;;;;:::i;:::-;;:::i;35915:126::-;;;;;;:::i;:::-;;:::i;34402:111::-;18842:7;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;682:10;19016:23;19008:68;;;;-1:-1:-1;;;19008:68:0;;;;;;;:::i;:::-;;;;;;;;;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34483:22:::2;34497:7;34483:13;:22::i;:::-;34402:111:::0;:::o;8115:100::-;8169:13;8202:5;8195:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8115:100;:::o;10466:201::-;10549:4;682:10;10605:32;682:10;10621:7;10630:6;10605:8;:32::i;:::-;-1:-1:-1;10655:4:0;;10466:201;-1:-1:-1;;;10466:201:0:o;35097:198::-;682:10;24326:22;;;;:8;:22;;;;;;;;24318:69;;;;-1:-1:-1;;;24318:69:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;35247:40:::2;35260:7;35269:6;35277:9;35247:12;:40::i;:::-;35097:198:::0;;;:::o;11247:295::-;11378:4;682:10;11436:38;11452:4;682:10;11467:6;11436:15;:38::i;:::-;11485:27;11495:4;11501:2;11505:6;11485:9;:27::i;:::-;-1:-1:-1;11530:4:0;;11247:295;-1:-1:-1;;;;11247:295:0:o;33278:257::-;20529:11;;-1:-1:-1;;;;;20529:11:0;682:10;20691:28;20683:83;;;;-1:-1:-1;;;20683:83:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33393:27:0;::::2;33385:88;;;::::0;-1:-1:-1;;;33385:88:0;;6625:2:1;33385:88:0::2;::::0;::::2;6607:21:1::0;6664:2;6644:18;;;6637:30;6703:34;6683:18;;;6676:62;-1:-1:-1;;;6754:18:1;;;6747:46;6810:19;;33385:88:0::2;6423:412:1::0;33385:88:0::2;33484:43;33513:13;33484:28;:43::i;11951:238::-:0;12039:4;682:10;12095:64;682:10;12111:7;12148:10;12120:25;682:10;12111:7;12120:9;:25::i;:::-;:38;;;;:::i;:::-;12095:8;:64::i;33738:76::-;18842:7;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;682:10;19016:23;19008:68;;;;-1:-1:-1;;;19008:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2285:41:::1;;;::::0;-1:-1:-1;;;2285:41:0;;7307:2:1;2285:41:0::1;::::0;::::1;7289:21:1::0;7346:2;7326:18;;;7319:30;-1:-1:-1;;;7365:18:1;;;7358:50;7425:18;;2285:41:0::1;7105:344:1::0;2285:41:0::1;33796:10:::2;:8;:10::i;:::-;33738:76::o:0;34571:108::-;682:10;21936:22;;;;:8;:22;;;;;;;;21928:69;;;;-1:-1:-1;;;21928:69:0;;7656:2:1;21928:69:0;;;7638:21:1;7695:2;7675:18;;;7668:30;7734:34;7714:18;;;7707:62;-1:-1:-1;;;7785:18:1;;;7778:32;7827:19;;21928:69:0;7454:398:1;21928:69:0;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34644:27:::2;682:10:::0;34664:6:::2;34644:5;:27::i;34056:108::-:0;20529:11;;-1:-1:-1;;;;;20529:11:0;682:10;20691:28;20683:83;;;;-1:-1:-1;;;20683:83:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34138:18:::2;34148:7;34138:9;:18::i;34744:105::-:0;18842:7;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;682:10;19016:23;19008:68;;;;-1:-1:-1;;;19008:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34822:19:::2;34833:7;34822:10;:19::i;26572:284::-:0;-1:-1:-1;;;;;26681:19:0;;26644:7;26681:19;;;:10;:19;;;;;:26;26644:7;;26681:34;;;-1:-1:-1;26681:48:0;;;;-1:-1:-1;26719:10:0;26681:48;26673:84;;;;-1:-1:-1;;;26673:84:0;;8059:2:1;26673:84:0;;;8041:21:1;8098:2;8078:18;;;8071:30;-1:-1:-1;;;8117:18:1;;;8110:53;8180:18;;26673:84:0;7857:347:1;26673:84:0;-1:-1:-1;;;;;26776:19:0;;;;;;:10;:19;;;;;:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:33;-1:-1:-1;;;;;26811:19:0;;;;:10;:19;;;;;;;:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;;26768:80;;;;26572:284;;;;;:::o;35371:140::-;20529:11;;-1:-1:-1;;;;;20529:11:0;682:10;20691:28;20683:83;;;;-1:-1:-1;;;20683:83:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;35472:31:::2;35488:7;35497:5;35472:15;:31::i;:::-;35371:140:::0;;:::o;32495:109::-;18842:7;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;682:10;19016:23;19008:68;;;;-1:-1:-1;;;19008:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;32566:30:::2;32593:1;32566:18;:30::i;33598:75::-:0;18842:7;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;682:10;19016:23;19008:68;;;;-1:-1:-1;;;19008:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;33657:8:::2;:6;:8::i;30607:163::-:0;30673:7;30731:31;30754:7;30731:22;:31::i;:::-;30700:28;30720:7;30700:19;:28::i;:::-;:62;;;;:::i;:::-;30693:69;30607:163;-1:-1:-1;;30607:163:0:o;31267:152::-;18842:7;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;682:10;19016:23;19008:68;;;;-1:-1:-1;;;19008:68:0;;;;;;;:::i;:::-;31367:12:::1;-1:-1:-1::0;;;;;31360:29:0::1;;31390:7;18842::::0;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;;18796:87;31390:7:::1;31360:51;::::0;-1:-1:-1;;;;;;31360:51:0::1;::::0;;;;;;-1:-1:-1;;;;;8533:32:1;;;31360:51:0::1;::::0;::::1;8515::1::0;8582:18;;;8575:34;;;8488:18;;31360:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33881:99::-:0;18842:7;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;682:10;19016:23;19008:68;;;;-1:-1:-1;;;19008:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;33956:16:::2;33964:7;33956;:16::i;8334:104::-:0;8390:13;8423:7;8416:14;;;;;:::i;12692:436::-;12785:4;682:10;12785:4;12868:25;682:10;12885:7;12868:9;:25::i;:::-;12841:52;;12932:15;12912:16;:35;;12904:85;;;;-1:-1:-1;;;12904:85:0;;9104:2:1;12904:85:0;;;9086:21:1;9143:2;9123:18;;;9116:30;9182:34;9162:18;;;9155:62;-1:-1:-1;;;9233:18:1;;;9226:35;9278:19;;12904:85:0;8902:401:1;12904:85:0;13025:60;13034:5;13041:7;13069:15;13050:16;:34;13025:8;:60::i;9739:193::-;9818:4;682:10;9874:28;682:10;9891:2;9895:6;9874:9;:28::i;29630:812::-;-1:-1:-1;;;;;29779:22:0;;29700:7;29779:22;;;:13;:22;;;;;:29;29700:7;;29823:10;;29819:579;;-1:-1:-1;;;;;29869:22:0;;29850:16;29869:22;;;:13;:22;;;;;:31;;;;;29932:29;;;;29992:28;;;;;29869:31;;29992:28;;30076:9;;29992:28;30076:9;:::i;:::-;30066:20;;:6;:20;:::i;:::-;30055:31;;:8;:31;:::i;:::-;30035:51;-1:-1:-1;30121:15:0;30155:20;;;30151:236;;;30218:6;30196:28;;30151:236;;;30262:9;30250;:21;30246:141;;;30366:5;30351:6;30326:21;30338:9;30326;:21;:::i;:::-;30325:32;;;;:::i;:::-;:36;;30360:1;30325:36;:::i;:::-;30315:47;;:6;:47;:::i;:::-;30314:57;;;;:::i;:::-;30292:79;;30246:141;29835:563;;;;;29819:579;-1:-1:-1;30415:19:0;29630:812;-1:-1:-1;;29630:812:0:o;32693:134::-;20529:11;;-1:-1:-1;;;;;20529:11:0;682:10;20691:28;20683:83;;;;-1:-1:-1;;;20683:83:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;32779:40:::2;32816:1;32779:28;:40::i;27040:438::-:0;-1:-1:-1;;;;;27182:19:0;;27107:7;27182:19;;;:10;:19;;;;;:26;27107:7;;;27219:218;27243:3;27239:1;:7;27219:218;;;-1:-1:-1;;;;;27290:19:0;;;;;;:10;:19;;;;;:22;;27310:1;;27290:22;;;;;;:::i;:::-;;;;;;;;;;;:32;;;27272:15;:50;27268:158;;;-1:-1:-1;;;;;27381:19:0;;;;;;:10;:19;;;;;:22;;27401:1;;27381:22;;;;;;:::i;:::-;;;;;;;;;;;:29;;;27362:16;:48;;;;:::i;:::-;27343:67;;27268:158;27248:3;;;;:::i;:::-;;;;27219:218;;;-1:-1:-1;27454:16:0;;27040:438;-1:-1:-1;;;27040:438:0:o;35583:253::-;682:10;24326:22;;;;:8;:22;;;;;;;;24318:69;;;;-1:-1:-1;;;24318:69:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;35759:69:::2;35775:7;35784:18;35794:7;-1:-1:-1::0;;;;;9507:18:0;9480:7;9507:18;;;:9;:18;;;;;;;9406:127;35784:18:::2;35804:8;35814:6;35822:5;35759:15;:69::i;:::-;35583:253:::0;;;;:::o;34917:111::-;18842:7;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;682:10;19016:23;19008:68;;;;-1:-1:-1;;;19008:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34998:22:::2;35012:7;34998:13;:22::i;9995:151::-:0;-1:-1:-1;;;;;10111:18:0;;;10084:7;10111:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9995:151::o;32982:207::-;18842:7;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;682:10;19016:23;19008:68;;;;-1:-1:-1;;;19008:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33077:22:0;::::2;33069:73;;;::::0;-1:-1:-1;;;33069:73:0;;10175:2:1;33069:73:0::2;::::0;::::2;10157:21:1::0;10214:2;10194:18;;;10187:30;10253:34;10233:18;;;10226:62;-1:-1:-1;;;10304:18:1;;;10297:36;10350:19;;33069:73:0::2;9973:402:1::0;33069:73:0::2;33153:28;33172:8;33153:18;:28::i;34229:105::-:0;18842:7;18869:6;-1:-1:-1;;;;;18869:6:0;;;;;682:10;19016:23;19008:68;;;;-1:-1:-1;;;19008:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34307:19:::2;34318:7;34307:10;:19::i;35915:126::-:0;20529:11;;-1:-1:-1;;;;;20529:11:0;682:10;20691:28;20683:83;;;;-1:-1:-1;;;20683:83:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;36006:27:::2;36025:7;36006:18;:27::i;22307:131::-:0;-1:-1:-1;;;;;22367:17:0;;22387:5;22367:17;;;:8;:17;;;;;;:25;;-1:-1:-1;;22367:25:0;;;22408:22;;;22387:5;22408:22;22307:131;:::o;16021:380::-;-1:-1:-1;;;;;16157:19:0;;16149:68;;;;-1:-1:-1;;;16149:68:0;;10582:2:1;16149:68:0;;;10564:21:1;10621:2;10601:18;;;10594:30;10660:34;10640:18;;;10633:62;-1:-1:-1;;;10711:18:1;;;10704:34;10755:19;;16149:68:0;10380:400:1;16149:68:0;-1:-1:-1;;;;;16236:21:0;;16228:68;;;;-1:-1:-1;;;16228:68:0;;10987:2:1;16228:68:0;;;10969:21:1;11026:2;11006:18;;;10999:30;11065:34;11045:18;;;11038:62;-1:-1:-1;;;11116:18:1;;;11109:32;11158:19;;16228:68:0;10785:398:1;16228:68:0;-1:-1:-1;;;;;16309:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16361:32;;1909:25:1;;;16361:32:0;;1882:18:1;16361:32:0;;;;;;;;16021:380;;;:::o;25080:364::-;25225:1;25216:6;:10;25208:49;;;;-1:-1:-1;;;25208:49:0;;11390:2:1;25208:49:0;;;11372:21:1;11429:2;11409:18;;;11402:30;11468:28;11448:18;;;11441:56;11514:18;;25208:49:0;11188:350:1;25208:49:0;25288:15;25276:9;:27;25268:69;;;;-1:-1:-1;;;25268:69:0;;11745:2:1;25268:69:0;;;11727:21:1;11784:2;11764:18;;;11757:30;11823:31;11803:18;;;11796:59;11872:18;;25268:69:0;11543:353:1;25268:69:0;-1:-1:-1;;;;;25348:19:0;;;;;;:10;:19;;;;;;;;25373:27;;;;;;;;;;;;;;;;25348:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25417:19;;;25348;25417;25080:364;;;:::o;16692:453::-;16827:24;16854:25;16864:5;16871:7;16854:9;:25::i;:::-;16827:52;;-1:-1:-1;;16894:16:0;:37;16890:248;;16976:6;16956:16;:26;;16948:68;;;;-1:-1:-1;;;16948:68:0;;12103:2:1;16948:68:0;;;12085:21:1;12142:2;12122:18;;;12115:30;12181:31;12161:18;;;12154:59;12230:18;;16948:68:0;11901:353:1;16948:68:0;17060:51;17069:5;17076:7;17104:6;17085:16;:25;17060:8;:51::i;13598:621::-;-1:-1:-1;;;;;13729:18:0;;13721:68;;;;-1:-1:-1;;;13721:68:0;;12461:2:1;13721:68:0;;;12443:21:1;12500:2;12480:18;;;12473:30;12539:34;12519:18;;;12512:62;-1:-1:-1;;;12590:18:1;;;12583:35;12635:19;;13721:68:0;12259:401:1;13721:68:0;-1:-1:-1;;;;;13808:16:0;;13800:64;;;;-1:-1:-1;;;13800:64:0;;12867:2:1;13800:64:0;;;12849:21:1;12906:2;12886:18;;;12879:30;12945:34;12925:18;;;12918:62;-1:-1:-1;;;12996:18:1;;;12989:33;13039:19;;13800:64:0;12665:399:1;13800:64:0;13877:38;13898:4;13904:2;13908:6;13877:20;:38::i;:::-;-1:-1:-1;;;;;13950:15:0;;13928:19;13950:15;;;:9;:15;;;;;;13984:21;;;;13976:72;;;;-1:-1:-1;;;13976:72:0;;13271:2:1;13976:72:0;;;13253:21:1;13310:2;13290:18;;;13283:30;13349:34;13329:18;;;13322:62;-1:-1:-1;;;13400:18:1;;;13393:36;13446:19;;13976:72:0;13069:402:1;13976:72:0;-1:-1:-1;;;;;14084:15:0;;;;;;;:9;:15;;;;;;14102:20;;;14084:38;;14144:13;;;;;;;;:23;;14116:6;;14084:15;14144:23;;14116:6;;14144:23;:::i;:::-;;;;;;;;14200:2;-1:-1:-1;;;;;14185:26:0;14194:4;-1:-1:-1;;;;;14185:26:0;;14204:6;14185:26;;;;1909:25:1;;1897:2;1882:18;;1763:177;14185:26:0;;;;;;;;13710:509;13598:621;;;:::o;20962:246::-;21075:11;;;-1:-1:-1;;;;;21097:27:0;;;-1:-1:-1;;;;;;21097:27:0;;;;;;;21140:60;;21075:11;;;21097:27;21075:11;;21140:60;;21051:21;;21140:60;21040:168;20962:246;:::o;2749:120::-;1737:4;1761:7;;;2285:41;;;;-1:-1:-1;;;2285:41:0;;7307:2:1;2285:41:0;;;7289:21:1;7346:2;7326:18;;;7319:30;-1:-1:-1;;;7365:18:1;;;7358:50;7425:18;;2285:41:0;7105:344:1;2285:41:0;2818:5:::1;2808:15:::0;;-1:-1:-1;;2808:15:0::1;::::0;;2839:22:::1;682:10:::0;2848:12:::1;2839:22;::::0;-1:-1:-1;;;;;3813:32:1;;;3795:51;;3783:2;3768:18;2839:22:0::1;;;;;;;2749:120::o:0;15115:468::-;-1:-1:-1;;;;;15199:21:0;;15191:67;;;;-1:-1:-1;;;15191:67:0;;13678:2:1;15191:67:0;;;13660:21:1;13717:2;13697:18;;;13690:30;13756:34;13736:18;;;13729:62;-1:-1:-1;;;13807:18:1;;;13800:31;13848:19;;15191:67:0;13476:397:1;15191:67:0;-1:-1:-1;;;;;15296:18:0;;15271:22;15296:18;;;:9;:18;;;;;;15333:24;;;;15325:71;;;;-1:-1:-1;;;15325:71:0;;14080:2:1;15325:71:0;;;14062:21:1;14119:2;14099:18;;;14092:30;14158:34;14138:18;;;14131:62;-1:-1:-1;;;14209:18:1;;;14202:32;14251:19;;15325:71:0;13878:398:1;15325:71:0;-1:-1:-1;;;;;15432:18:0;;;;;;:9;:18;;;;;15453:23;;;15432:44;;15498:12;:22;;15470:6;;15432:18;15498:22;;15470:6;;15498:22;:::i;:::-;;;;-1:-1:-1;;15538:37:0;;1909:25:1;;;15564:1:0;;-1:-1:-1;;;;;15538:37:0;;;;;1897:2:1;1882:18;15538:37:0;1763:177:1;23029:123:0;-1:-1:-1;;;;;23085:17:0;;23105:5;23085:17;;;:8;:17;;;;;;:25;;-1:-1:-1;;23085:25:0;;;23126:18;;;23105:5;23126:18;23029:123;:::o;24667:125::-;-1:-1:-1;;;;;24724:17:0;;;;;;:8;:17;;;;;;:24;;-1:-1:-1;;24724:24:0;24744:4;24724:24;;;24764:20;;;24724:17;24764:20;24667:125;:::o;25625:457::-;-1:-1:-1;;;;;25708:19:0;;;;;;:10;:19;;;;;:26;:34;;;-1:-1:-1;25708:48:0;;;;-1:-1:-1;25746:10:0;25708:48;25700:84;;;;-1:-1:-1;;;25700:84:0;;8059:2:1;25700:84:0;;;8041:21:1;8098:2;8078:18;;;8071:30;-1:-1:-1;;;8117:18:1;;;8110:53;8180:18;;25700:84:0;7857:347:1;25700:84:0;-1:-1:-1;;;;;25811:19:0;;25797:11;25811:19;;;:10;:19;;;;;:26;25852:16;;;:7;25858:1;25811:26;25852:7;:::i;:::-;:16;25848:154;;-1:-1:-1;;;;;25962:19:0;;;;;;:10;:19;;;;;25982:7;25988:1;25982:3;:7;:::i;:::-;25962:28;;;;;;;;:::i;:::-;;;;;;;;;;;25933:10;:19;25944:7;-1:-1:-1;;;;;25933:19:0;-1:-1:-1;;;;;25933:19:0;;;;;;;;;;;;25953:5;25933:26;;;;;;;;;;:::i;:::-;;;;;;;;;:57;;:26;;;;;:57;;;;;;;;;;;25848:154;-1:-1:-1;;;;;26012:19:0;;;;;;:10;:19;;;;;:25;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;26012:25:0;;;;;;;;;;;;;;;;;26053:21;;-1:-1:-1;;;;;26053:21:0;;;;;;25689:393;25625:457;;:::o;19256:191::-;19330:16;19349:6;;-1:-1:-1;;;;;19366:17:0;;;19349:6;19366:17;;;-1:-1:-1;;;;;;19366:17:0;;;;;19399:40;;19349:6;;;;;;;19366:17;;19349:6;;19399:40;;;19319:128;19256:191;:::o;2490:118::-;1737:4;1761:7;;;2015:9;2007:38;;;;-1:-1:-1;;;2007:38:0;;;;;;;:::i;:::-;2550:7:::1;:14:::0;;-1:-1:-1;;2550:14:0::1;2560:4;2550:14;::::0;;2580:20:::1;2587:12;682:10:::0;;602:98;22825:118;-1:-1:-1;;;;;22879:17:0;;;;;;:8;:17;;;;;;:24;;-1:-1:-1;;22879:24:0;22899:4;22879:24;;;22919:16;;;22879:17;22919:16;22825:118;:::o;27869:631::-;-1:-1:-1;;;;;28056:21:0;;28048:73;;;;-1:-1:-1;;;28048:73:0;;14615:2:1;28048:73:0;;;14597:21:1;14654:2;14634:18;;;14627:30;14693:34;14673:18;;;14666:62;-1:-1:-1;;;14744:18:1;;;14737:37;14791:19;;28048:73:0;14413:403:1;28048:73:0;28151:15;28140:8;:26;28132:70;;;;-1:-1:-1;;;28132:70:0;;15023:2:1;28132:70:0;;;15005:21:1;15062:2;15042:18;;;15035:30;15101:33;15081:18;;;15074:61;15152:18;;28132:70:0;14821:355:1;28132:70:0;28230:1;28221:6;:10;28213:47;;;;-1:-1:-1;;;28213:47:0;;15383:2:1;28213:47:0;;;15365:21:1;15422:2;15402:18;;;15395:30;15461:26;15441:18;;;15434:54;15505:18;;28213:47:0;15181:348:1;28213:47:0;28288:1;28279:6;:10;28271:47;;;;-1:-1:-1;;;28271:47:0;;15736:2:1;28271:47:0;;;15718:21:1;15775:2;15755:18;;;15748:30;15814:26;15794:18;;;15787:54;15858:18;;28271:47:0;15534:348:1;28271:47:0;28345:1;28337:5;:9;28329:45;;;;-1:-1:-1;;;28329:45:0;;16089:2:1;28329:45:0;;;16071:21:1;16128:2;16108:18;;;16101:30;16167:25;16147:18;;;16140:53;16210:18;;28329:45:0;15887:347:1;28329:45:0;28410:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28385:22:0;;-1:-1:-1;28385:22:0;;;:13;:22;;;;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;28470:22;;28385;;28470;;;27869:631;;;;;:::o;24875:131::-;-1:-1:-1;;;;;24935:17:0;;24955:5;24935:17;;;:8;:17;;;;;;:25;;-1:-1:-1;;24935:25:0;;;24976:22;;;24955:5;24976:22;24875:131;:::o;22095:125::-;-1:-1:-1;;;;;22152:17:0;;;;;;:8;:17;;;;;;:24;;-1:-1:-1;;22152:24:0;22172:4;22152:24;;;22192:20;;;22152:17;22192:20;22095:125;:::o;28654:161::-;28744:23;;;;;;;;-1:-1:-1;28744:23:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28719:22:0;;;;;:13;:22;;;;;;:48;;;;;;;;;;;;;;;;;;;;;;;;28783:24;;28719:22;;28783:24;;;28654:161;:::o;31495:649::-;-1:-1:-1;;;;;23312:17:0;;23288:4;23312:17;;;:8;:17;;;;;;;;31702:16;31694:75;;;;-1:-1:-1;;;31694:75:0;;16441:2:1;31694:75:0;;;16423:21:1;16480:2;16460:18;;;16453:30;16519:34;16499:18;;;16492:62;-1:-1:-1;;;16570:18:1;;;16563:44;16624:19;;31694:75:0;16239:410:1;31694:75:0;-1:-1:-1;;;;;23312:17:0;;23288:4;23312:17;;;:8;:17;;;;;;;;31788:14;31780:71;;;;-1:-1:-1;;;31780:71:0;;16856:2:1;31780:71:0;;;16838:21:1;16895:2;16875:18;;;16868:30;16934:34;16914:18;;;16907:62;-1:-1:-1;;;16985:18:1;;;16978:42;17037:19;;31780:71:0;16654:408:1;31780:71:0;31871:23;682:10;31881:12;602:98;31871:23;31870:24;31862:90;;;;-1:-1:-1;;;31862:90:0;;17269:2:1;31862:90:0;;;17251:21:1;17308:2;17288:18;;;17281:30;17347:34;17327:18;;;17320:62;-1:-1:-1;;;17398:18:1;;;17391:51;17459:19;;31862:90:0;17067:417:1;31862:90:0;1737:4;1761:7;;;31971:9;31963:59;;;;-1:-1:-1;;;31963:59:0;;17691:2:1;31963:59:0;;;17673:21:1;17730:2;17710:18;;;17703:30;17769:34;17749:18;;;17742:62;-1:-1:-1;;;17820:18:1;;;17813:35;17865:19;;31963:59:0;17489:401:1;31963:59:0;32087:6;32059:24;32078:4;32059:18;:24::i;:::-;-1:-1:-1;;;;;9507:18:0;;9480:7;9507:18;;;:9;:18;;;;;;32041:42;;;;:::i;:::-;:52;;32033:103;;;;-1:-1:-1;;;32033:103:0;;18097:2:1;32033:103:0;;;18079:21:1;18136:2;18116:18;;;18109:30;18175:34;18155:18;;;18148:62;-1:-1:-1;;;18226:18:1;;;18219:36;18272:19;;32033:103:0;17895:402:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;383:597::-;495:4;524:2;553;542:9;535:21;585:6;579:13;628:6;623:2;612:9;608:18;601:34;653:1;663:140;677:6;674:1;671:13;663:140;;;772:14;;;768:23;;762:30;738:17;;;757:2;734:26;727:66;692:10;;663:140;;;821:6;818:1;815:13;812:91;;;891:1;886:2;877:6;866:9;862:22;858:31;851:42;812:91;-1:-1:-1;964:2:1;943:15;-1:-1:-1;;939:29:1;924:45;;;;971:2;920:54;;383:597;-1:-1:-1;;;383:597:1:o;985:254::-;1053:6;1061;1114:2;1102:9;1093:7;1089:23;1085:32;1082:52;;;1130:1;1127;1120:12;1082:52;1153:29;1172:9;1153:29;:::i;:::-;1143:39;1229:2;1214:18;;;;1201:32;;-1:-1:-1;;;985:254:1:o;1436:322::-;1513:6;1521;1529;1582:2;1570:9;1561:7;1557:23;1553:32;1550:52;;;1598:1;1595;1588:12;1550:52;1621:29;1640:9;1621:29;:::i;:::-;1611:39;1697:2;1682:18;;1669:32;;-1:-1:-1;1748:2:1;1733:18;;;1720:32;;1436:322;-1:-1:-1;;;1436:322:1:o;2341:328::-;2418:6;2426;2434;2487:2;2475:9;2466:7;2462:23;2458:32;2455:52;;;2503:1;2500;2493:12;2455:52;2526:29;2545:9;2526:29;:::i;:::-;2516:39;;2574:38;2608:2;2597:9;2593:18;2574:38;:::i;:::-;2564:48;;2659:2;2648:9;2644:18;2631:32;2621:42;;2341:328;;;;;:::o;2863:180::-;2922:6;2975:2;2963:9;2954:7;2950:23;2946:32;2943:52;;;2991:1;2988;2981:12;2943:52;-1:-1:-1;3014:23:1;;2863:180;-1:-1:-1;2863:180:1:o;3048:343::-;3114:6;3122;3175:2;3163:9;3154:7;3150:23;3146:32;3143:52;;;3191:1;3188;3181:12;3143:52;3214:29;3233:9;3214:29;:::i;:::-;3204:39;;3293:2;3282:9;3278:18;3265:32;3337:4;3330:5;3326:16;3319:5;3316:27;3306:55;;3357:1;3354;3347:12;3306:55;3380:5;3370:15;;;3048:343;;;;;:::o;3857:391::-;3943:6;3951;3959;3967;4020:3;4008:9;3999:7;3995:23;3991:33;3988:53;;;4037:1;4034;4027:12;3988:53;4060:29;4079:9;4060:29;:::i;:::-;4050:39;4136:2;4121:18;;4108:32;;-1:-1:-1;4187:2:1;4172:18;;4159:32;;4238:2;4223:18;4210:32;;-1:-1:-1;3857:391:1;-1:-1:-1;;;3857:391:1:o;4253:260::-;4321:6;4329;4382:2;4370:9;4361:7;4357:23;4353:32;4350:52;;;4398:1;4395;4388:12;4350:52;4421:29;4440:9;4421:29;:::i;:::-;4411:39;;4469:38;4503:2;4492:9;4488:18;4469:38;:::i;:::-;4459:48;;4253:260;;;;;:::o;4518:356::-;4720:2;4702:21;;;4739:18;;;4732:30;4798:34;4793:2;4778:18;;4771:62;4865:2;4850:18;;4518:356::o;4879:340::-;5081:2;5063:21;;;5120:2;5100:18;;;5093:30;-1:-1:-1;;;5154:2:1;5139:18;;5132:46;5210:2;5195:18;;4879:340::o;5224:380::-;5303:1;5299:12;;;;5346;;;5367:61;;5421:4;5413:6;5409:17;5399:27;;5367:61;5474:2;5466:6;5463:14;5443:18;5440:38;5437:161;;5520:10;5515:3;5511:20;5508:1;5501:31;5555:4;5552:1;5545:15;5583:4;5580:1;5573:15;5437:161;;5224:380;;;:::o;5609:398::-;5811:2;5793:21;;;5850:2;5830:18;;;5823:30;5889:34;5884:2;5869:18;;5862:62;-1:-1:-1;;;5955:2:1;5940:18;;5933:32;5997:3;5982:19;;5609:398::o;6012:406::-;6214:2;6196:21;;;6253:2;6233:18;;;6226:30;6292:34;6287:2;6272:18;;6265:62;-1:-1:-1;;;6358:2:1;6343:18;;6336:40;6408:3;6393:19;;6012:406::o;6840:127::-;6901:10;6896:3;6892:20;6889:1;6882:31;6932:4;6929:1;6922:15;6956:4;6953:1;6946:15;6972:128;7012:3;7043:1;7039:6;7036:1;7033:13;7030:39;;;7049:18;;:::i;:::-;-1:-1:-1;7085:9:1;;6972:128::o;8209:127::-;8270:10;8265:3;8261:20;8258:1;8251:31;8301:4;8298:1;8291:15;8325:4;8322:1;8315:15;8620:277;8687:6;8740:2;8728:9;8719:7;8715:23;8711:32;8708:52;;;8756:1;8753;8746:12;8708:52;8788:9;8782:16;8841:5;8834:13;8827:21;8820:5;8817:32;8807:60;;8863:1;8860;8853:12;9308:125;9348:4;9376:1;9373;9370:8;9367:34;;;9381:18;;:::i;:::-;-1:-1:-1;9418:9:1;;9308:125::o;9438:168::-;9478:7;9544:1;9540;9536:6;9532:14;9529:1;9526:21;9521:1;9514:9;9507:17;9503:45;9500:71;;;9551:18;;:::i;:::-;-1:-1:-1;9591:9:1;;9438:168::o;9611:217::-;9651:1;9677;9667:132;;9721:10;9716:3;9712:20;9709:1;9702:31;9756:4;9753:1;9746:15;9784:4;9781:1;9774:15;9667:132;-1:-1:-1;9813:9:1;;9611:217::o;9833:135::-;9872:3;9893:17;;;9890:43;;9913:18;;:::i;:::-;-1:-1:-1;9960:1:1;9949:13;;9833:135::o;14281:127::-;14342:10;14337:3;14333:20;14330:1;14323:31;14373:4;14370:1;14363:15;14397:4;14394:1;14387:15
Swarm Source
ipfs://be95e1f0aa279a4339cc4c06b01afcaea4a9ee47578294eb63ec0a34e9e72275
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.