ERC-20
Services / Solutions
Overview
Max Total Supply
1,000,000,000 HYCO
Holders
7,032 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH (+1.85%)
Onchain Market Cap
$1,671,674.32
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
3 HYCOValue
$0.01 ( ~2.59005920560244E-06 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HYCOToken
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @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); } } // File contracts/Confirmer.sol pragma solidity >=0.8.0 <0.9.0; abstract contract Confirmer is Ownable { event AddConfirmer (address account); event RemoveConfirmer (address account); event Confirmed (address account, uint256 confirmedTime); struct ConfirmInfo { bool confirmed; uint256 validTime; } mapping(address => ConfirmInfo) private _confirmInfos; address[] public _confirmers; constructor() { } modifier isConfirmed() { require(_checkConfirmed(), "Insufficient execution conditions."); _; } modifier isConfirmer(address walletAddress) { require(_checkConfirmer(walletAddress), "This address or caller is not the confirmer."); _; } function _checkConfirmed() internal view returns (bool) { uint8 confirmedCount = 0; for (uint8 i = 0; i < _confirmers.length; i++) { if (_confirmInfos[_confirmers[i]].confirmed == true && _confirmInfos[_confirmers[i]].validTime > block.timestamp) { confirmedCount++; } } if (confirmedCount > 1) return true; else return false; } function _checkConfirmer(address walletAddress) internal view returns (bool) { for (uint8 i = 0; i < _confirmers.length; i++) { if (_confirmers[i] == walletAddress) { return true; } } return false; } function addConfirmer(address walletAddress) public onlyOwner isConfirmed { require(!_checkConfirmer(walletAddress), "Aleady exist confirmer."); _confirmers.push(walletAddress); _resetConfirmed(); emit AddConfirmer(walletAddress); } function removeConfirmer(address walletAddress) public onlyOwner isConfirmed isConfirmer(walletAddress) { require(_confirmers.length > 3, "Must be at least 3 confirmers."); uint8 j = 0; for (uint8 i = 0; i < _confirmers.length; i++) { if (_confirmers[i] != walletAddress) { _confirmers[j] = _confirmers[i]; j++; } else if (_confirmers[i] == walletAddress){ delete _confirmers[i]; delete _confirmInfos[_confirmers[i]]; } } _confirmers.pop(); _resetConfirmed(); emit RemoveConfirmer (walletAddress); } function _resetConfirmed() internal { require((_checkConfirmer(msg.sender) || msg.sender == owner()), "Caller is not the owner or confirmer."); for (uint8 i = 0; i < _confirmers.length; i++) { _confirmInfos[_confirmers[i]].confirmed = false; _confirmInfos[_confirmers[i]].validTime = block.timestamp; } } function toConfirm() public isConfirmer(msg.sender) { _confirmInfos[msg.sender].confirmed = true; _confirmInfos[msg.sender].validTime = block.timestamp + 86400; emit Confirmed(msg.sender, block.timestamp); } function getConfirmer() public view onlyOwner returns (address[] memory) { return (_confirmers); } function getConfirmed(address walletAddress) public view onlyOwner returns (bool, uint256) { return (_confirmInfos[walletAddress].confirmed, _confirmInfos[walletAddress].validTime); } } // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @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 Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { 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()); } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @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); } // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin 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); _afterTokenTransfer(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"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); 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); _afterTokenTransfer(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 Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @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 ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } pragma solidity >=0.8.0 <0.9.0; contract HYCOToken is ERC20, ERC20Burnable, Pausable, Ownable, Confirmer { event TimeLock(address indexed account, uint256 amount, uint256 startTime, uint256 releaseMonths); event TimeLockUpdate (address indexed account, uint256 valueIndex, uint256 value); struct LockInfo { uint256 amount; uint256 startTime; uint256 releaseMonths; } mapping(address => LockInfo) private _lockInfos; address[] private _lockedWallets; constructor(address confirmer1, address confirmer2) ERC20("HYCO", "HYCO") { //_mint(msg.sender, 100000000 * 10 ** decimals()); _mint(0x769D674eDe614d79e79cE157B561B4F89Fac96d5, 150000000 * 10 ** decimals()); _mint(0xcB8E27169eC43e75751CEa7033e1E39aeD5595f3, 150000000 * 10 ** decimals()); _mint(0x643FF6fe36a18bF0d705fb89CEfC42deD01CF28d, 100000000 * 10 ** decimals()); _mint(0x7Cb592BBEE577867B735419402aF95F0605ecA1C, 150000000 * 10 ** decimals()); _mint(0xd4B11779a2dDAb1B49bcC873b87501f0C1319BFa, 250000000 * 10 ** decimals()); _mint(0xa90FF9C33e14C2d0badca9c137d46f33765613E2, 200000000 * 10 ** decimals()); _confirmers.push(msg.sender); _confirmers.push(confirmer1); _confirmers.push(confirmer2); _resetConfirmed(); } function pause() public onlyOwner isConfirmed { _pause(); _resetConfirmed(); } function unpause() public onlyOwner isConfirmed { _unpause(); _resetConfirmed(); } function transferOwnership(address newOwner) public isConfirmer(msg.sender) isConfirmed override { require(newOwner != address(0), "Ownable: new owner is the zero address"); super._transferOwnership(newOwner); _resetConfirmed(); } function renounceOwnership() public onlyOwner isConfirmed override { super.renounceOwnership(); _resetConfirmed(); } function setLock(address walletAddress, uint256 startTime, uint256 releaseMonths, uint256 amount) public onlyOwner { require(_lockInfos[walletAddress].amount < 1, "Aleady exist lock info."); require(block.timestamp < startTime, "ERC20: Current time is greater than start time."); require(releaseMonths > 0, "ERC20: ReleaseMonths is greater than 0."); require(amount > 0, "ERC20: Amount is greater than 0."); _lockInfos[walletAddress] = LockInfo(amount, startTime, releaseMonths); _lockedWallets.push(walletAddress); emit TimeLock( walletAddress, amount, startTime, releaseMonths ); } function setLockReleaseMonths(address walletAddress, uint256 releaseMonths) public onlyOwner isConfirmed { require(_lockInfos[walletAddress].amount > 0, "Not exist lock info."); require(releaseMonths > 0, "ERC20: ReleaseMonths is greater than 0."); _lockInfos[walletAddress].releaseMonths = releaseMonths; emit TimeLockUpdate (walletAddress, 3, releaseMonths); _resetConfirmed(); } function setLockStartTime(address walletAddress, uint256 startTime) public onlyOwner isConfirmed { require(_lockInfos[walletAddress].amount > 0, "Not exist lock info."); require(block.timestamp < startTime, "ERC20: Current time is greater than start time"); _lockInfos[walletAddress].startTime = startTime; emit TimeLockUpdate (walletAddress, 2, startTime); _resetConfirmed(); } function setLockAmount(address walletAddress, uint256 amount) public onlyOwner isConfirmed { require(_lockInfos[walletAddress].amount > 0, "Not exist lock info."); require(amount > 0, "ERC20: Amount is greater than 0."); _lockInfos[walletAddress].amount = amount; emit TimeLockUpdate (walletAddress, 1, amount); _resetConfirmed(); } function getLockInfo(address walletAddress) public view returns (uint256 lockAmount, uint256 startTime, uint256 releaseMonths, uint256 released) { require(msg.sender == walletAddress || msg.sender == owner(), "Caller is not the owner."); require(_lockInfos[walletAddress].amount > 0, "Not exist lock info."); uint256 unLockAmount = _getUnLockAmount(walletAddress, block.timestamp); return (_lockInfos[walletAddress].amount, _lockInfos[walletAddress].startTime, _lockInfos[walletAddress].releaseMonths, unLockAmount); } function getLockWallets() public view virtual onlyOwner returns (address[] memory) { return (_lockedWallets); } function _getUnLockAmount(address walletAddress, uint256 timestamp) internal view returns (uint256 unLockAmount) { uint256 lockAmount = _lockInfos[walletAddress].amount; uint256 lockStartTime = _lockInfos[walletAddress].startTime; uint256 releaseMonths = _lockInfos[walletAddress].releaseMonths; if (timestamp < lockStartTime) return 0; uint256 checkReleasedSecond = timestamp - lockStartTime; uint256 checkReleasedMonth = checkReleasedSecond / (86400 * 30); //per 30day if (releaseMonths <= checkReleasedMonth) { return lockAmount; } else if (checkReleasedMonth < 1) { return 0; } else { return lockAmount * checkReleasedMonth / releaseMonths; } } function _isLocked(address walletAddress, uint256 amount) internal view returns (bool) { if (_lockInfos[walletAddress].amount != 0) { uint256 unLockAmount = _getUnLockAmount(walletAddress, block.timestamp); return (balanceOf(walletAddress) - (_lockInfos[walletAddress].amount - unLockAmount)) < amount; } else { return false; } } function _beforeTokenTransfer(address from, address to, uint256 amount) internal whenNotPaused override { require( !_isLocked( from, amount ) , "ERC20: Locked balance."); super._beforeTokenTransfer(from, to, amount); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"confirmer1","type":"address"},{"internalType":"address","name":"confirmer2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"AddConfirmer","type":"event"},{"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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"confirmedTime","type":"uint256"}],"name":"Confirmed","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":false,"internalType":"address","name":"account","type":"address"}],"name":"RemoveConfirmer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"releaseMonths","type":"uint256"}],"name":"TimeLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"valueIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TimeLockUpdate","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_confirmers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"addConfirmer","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","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":"walletAddress","type":"address"}],"name":"getConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConfirmer","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"getLockInfo","outputs":[{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"releaseMonths","type":"uint256"},{"internalType":"uint256","name":"released","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLockWallets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"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":[],"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":"walletAddress","type":"address"}],"name":"removeConfirmer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"releaseMonths","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLockAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"releaseMonths","type":"uint256"}],"name":"setLockReleaseMonths","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"name":"setLockStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toConfirm","outputs":[],"stateMutability":"nonpayable","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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162005ae438038062005ae4833981810160405281019062000037919062000d5d565b6040518060400160405280600481526020017f4859434f000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4859434f000000000000000000000000000000000000000000000000000000008152508160039081620000b491906200101e565b508060049081620000c691906200101e565b5050506000600560006101000a81548160ff02191690831515021790555062000104620000f86200043d60201b60201c565b6200044560201b60201c565b6200015873769d674ede614d79e79ce157b561b4f89fac96d56200012d6200050b60201b60201c565b600a6200013b919062001295565b6308f0d1806200014c9190620012e6565b6200051460201b60201c565b620001ac73cb8e27169ec43e75751cea7033e1e39aed5595f3620001816200050b60201b60201c565b600a6200018f919062001295565b6308f0d180620001a09190620012e6565b6200051460201b60201c565b6200020073643ff6fe36a18bf0d705fb89cefc42ded01cf28d620001d56200050b60201b60201c565b600a620001e3919062001295565b6305f5e100620001f49190620012e6565b6200051460201b60201c565b62000254737cb592bbee577867b735419402af95f0605eca1c620002296200050b60201b60201c565b600a62000237919062001295565b6308f0d180620002489190620012e6565b6200051460201b60201c565b620002a873d4b11779a2ddab1b49bcc873b87501f0c1319bfa6200027d6200050b60201b60201c565b600a6200028b919062001295565b630ee6b2806200029c9190620012e6565b6200051460201b60201c565b620002fc73a90ff9c33e14c2d0badca9c137d46f33765613e2620002d16200050b60201b60201c565b600a620002df919062001295565b630bebc200620002f09190620012e6565b6200051460201b60201c565b6007339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506007829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004356200068c60201b60201c565b505062001698565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000586576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057d9062001392565b60405180910390fd5b6200059a600083836200087c60201b60201c565b8060026000828254620005ae9190620013b4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006059190620013b4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200066c919062001400565b60405180910390a36200068860008383620008fe60201b60201c565b5050565b6200069d336200090360201b60201c565b80620006e35750620006b4620009c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b62000725576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071c9062001493565b60405180910390fd5b60005b6007805490508160ff161015620008795760006006600060078460ff1681548110620007595762000758620014b5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550426006600060078460ff1681548110620007f757620007f6620014b5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080806200087090620014e4565b91505062000728565b50565b6200088c620009ea60201b60201c565b6200089e838262000a3f60201b60201c565b15620008e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d89062001562565b60405180910390fd5b620008f983838362000b2460201b62001e281760201c565b505050565b505050565b600080600090505b6007805490508160ff161015620009b5578273ffffffffffffffffffffffffffffffffffffffff1660078260ff16815481106200094d576200094c620014b5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036200099f576001915050620009bb565b8080620009ac90620014e4565b9150506200090b565b50600090505b919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009fa62000b2960201b60201c565b1562000a3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3490620015d4565b60405180910390fd5b565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541462000b1957600062000a9f844262000b4060201b60201c565b90508281600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015462000af29190620015f6565b62000b038662000cab60201b60201c565b62000b0f9190620015f6565b1091505062000b1e565b600090505b92915050565b505050565b6000600560009054906101000a900460ff16905090565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015490508185101562000c2c576000935050505062000ca5565b6000828662000c3c9190620015f6565b9050600062278d008262000c51919062001660565b905080831162000c6957849550505050505062000ca5565b600181101562000c825760009550505050505062000ca5565b82818662000c919190620012e6565b62000c9d919062001660565b955050505050505b92915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d258262000cf8565b9050919050565b62000d378162000d18565b811462000d4357600080fd5b50565b60008151905062000d578162000d2c565b92915050565b6000806040838503121562000d775762000d7662000cf3565b5b600062000d878582860162000d46565b925050602062000d9a8582860162000d46565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e2657607f821691505b60208210810362000e3c5762000e3b62000dde565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ea67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e67565b62000eb2868362000e67565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000eff62000ef962000ef38462000eca565b62000ed4565b62000eca565b9050919050565b6000819050919050565b62000f1b8362000ede565b62000f3362000f2a8262000f06565b84845462000e74565b825550505050565b600090565b62000f4a62000f3b565b62000f5781848462000f10565b505050565b5b8181101562000f7f5762000f7360008262000f40565b60018101905062000f5d565b5050565b601f82111562000fce5762000f988162000e42565b62000fa38462000e57565b8101602085101562000fb3578190505b62000fcb62000fc28562000e57565b83018262000f5c565b50505b505050565b600082821c905092915050565b600062000ff36000198460080262000fd3565b1980831691505092915050565b60006200100e838362000fe0565b9150826002028217905092915050565b620010298262000da4565b67ffffffffffffffff81111562001045576200104462000daf565b5b62001051825462000e0d565b6200105e82828562000f83565b600060209050601f83116001811462001096576000841562001081578287015190505b6200108d858262001000565b865550620010fd565b601f198416620010a68662000e42565b60005b82811015620010d057848901518255600182019150602085019450602081019050620010a9565b86831015620010f05784890151620010ec601f89168262000fe0565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001193578086048111156200116b576200116a62001105565b5b60018516156200117b5780820291505b80810290506200118b8562001134565b94506200114b565b94509492505050565b600082620011ae576001905062001281565b81620011be576000905062001281565b8160018114620011d75760028114620011e25762001218565b600191505062001281565b60ff841115620011f757620011f662001105565b5b8360020a91508482111562001211576200121062001105565b5b5062001281565b5060208310610133831016604e8410600b8410161715620012525782820a9050838111156200124c576200124b62001105565b5b62001281565b62001261848484600162001141565b925090508184048111156200127b576200127a62001105565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012a28262000eca565b9150620012af8362001288565b9250620012de7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200119c565b905092915050565b6000620012f38262000eca565b9150620013008362000eca565b9250828202620013108162000eca565b915082820484148315176200132a576200132962001105565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200137a601f8362001331565b9150620013878262001342565b602082019050919050565b60006020820190508181036000830152620013ad816200136b565b9050919050565b6000620013c18262000eca565b9150620013ce8362000eca565b9250828201905080821115620013e957620013e862001105565b5b92915050565b620013fa8162000eca565b82525050565b6000602082019050620014176000830184620013ef565b92915050565b7f43616c6c6572206973206e6f7420746865206f776e6572206f7220636f6e666960008201527f726d65722e000000000000000000000000000000000000000000000000000000602082015250565b60006200147b60258362001331565b915062001488826200141d565b604082019050919050565b60006020820190508181036000830152620014ae816200146c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620014f18262001288565b915060ff820362001507576200150662001105565b5b600182019050919050565b7f45524332303a204c6f636b65642062616c616e63652e00000000000000000000600082015250565b60006200154a60168362001331565b9150620015578262001512565b602082019050919050565b600060208201905081810360008301526200157d816200153b565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000620015bc60108362001331565b9150620015c98262001584565b602082019050919050565b60006020820190508181036000830152620015ef81620015ad565b9050919050565b6000620016038262000eca565b9150620016108362000eca565b92508282039050818111156200162b576200162a62001105565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200166d8262000eca565b91506200167a8362000eca565b9250826200168d576200168c62001631565b5b828204905092915050565b61443c80620016a86000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063715018a61161010f5780638da5cb5b116100a2578063a9059cbb11610071578063a9059cbb1461054a578063dd62ed3e1461057a578063ef9f3574146105aa578063f2fde38b146105c6576101e5565b80638da5cb5b146104c057806392e27a08146104de57806395d89b41146104fc578063a457c2d71461051a576101e5565b806376b57027116100de57806376b570271461046057806379cc67901461047c57806383df4f37146104985780638456cb59146104b6576101e5565b8063715018a6146103d75780637238ccdb146103e157806374db76621461041457806375d966e914610444576101e5565b806339509351116101875780635c383ea0116101565780635c383ea0146103635780635c975abb1461037f5780636884461a1461039d57806370a08231146103a7576101e5565b806339509351146102dc5780633c97a9c51461030c5780633f4ba83a1461033d57806342966c6814610347576101e5565b806323b872dd116101c357806323b872dd1461025657806324a7039d14610286578063313ce567146102a25780633873d475146102c0576101e5565b806306fdde03146101ea578063095ea7b31461020857806318160ddd14610238575b600080fd5b6101f26105e2565b6040516101ff9190612ec0565b60405180910390f35b610222600480360381019061021d9190612f7b565b610674565b60405161022f9190612fd6565b60405180910390f35b610240610697565b60405161024d9190613000565b60405180910390f35b610270600480360381019061026b919061301b565b6106a1565b60405161027d9190612fd6565b60405180910390f35b6102a0600480360381019061029b919061306e565b6106d0565b005b6102aa61095b565b6040516102b791906130f1565b60405180910390f35b6102da60048036038101906102d59190612f7b565b610964565b005b6102f660048036038101906102f19190612f7b565b610b1f565b6040516103039190612fd6565b60405180910390f35b6103266004803603810190610321919061310c565b610b56565b604051610334929190613139565b60405180910390f35b610345610bfd565b005b610361600480360381019061035c9190613162565b610c5e565b005b61037d60048036038101906103789190612f7b565b610c72565b005b610387610e2d565b6040516103949190612fd6565b60405180910390f35b6103a5610e44565b005b6103c160048036038101906103bc919061310c565b610f79565b6040516103ce9190613000565b60405180910390f35b6103df610fc1565b005b6103fb60048036038101906103f6919061310c565b611022565b60405161040b949392919061318f565b60405180910390f35b61042e60048036038101906104299190613162565b611240565b60405161043b91906131e3565b60405180910390f35b61045e6004803603810190610459919061310c565b61127f565b005b61047a60048036038101906104759190612f7b565b611693565b005b61049660048036038101906104919190612f7b565b61184d565b005b6104a061186d565b6040516104ad91906132bc565b60405180910390f35b6104be611903565b005b6104c8611964565b6040516104d591906131e3565b60405180910390f35b6104e661198e565b6040516104f391906132bc565b60405180910390f35b610504611a24565b6040516105119190612ec0565b60405180910390f35b610534600480360381019061052f9190612f7b565b611ab6565b6040516105419190612fd6565b60405180910390f35b610564600480360381019061055f9190612f7b565b611b2d565b6040516105719190612fd6565b60405180910390f35b610594600480360381019061058f91906132de565b611b50565b6040516105a19190613000565b60405180910390f35b6105c460048036038101906105bf919061310c565b611bd7565b005b6105e060048036038101906105db919061310c565b611d14565b005b6060600380546105f19061334d565b80601f016020809104026020016040519081016040528092919081815260200182805461061d9061334d565b801561066a5780601f1061063f5761010080835404028352916020019161066a565b820191906000526020600020905b81548152906001019060200180831161064d57829003601f168201915b5050505050905090565b60008061067f611e2d565b905061068c818585611e35565b600191505092915050565b6000600254905090565b6000806106ac611e2d565b90506106b9858285611ffe565b6106c485858561208a565b60019150509392505050565b6106d8612309565b6001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541061075d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610754906133ca565b60405180910390fd5b82421061079f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107969061345c565b60405180910390fd5b600082116107e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d9906134ee565b60405180910390fd5b60008111610825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081c9061355a565b60405180910390fd5b604051806060016040528082815260200184815260200183815250600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050506009849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff167f1e79ce210cfb5d5b665fdab9417fddaf7112bcbbdb74138529c203c1173ea54f82858560405161094d9392919061357a565b60405180910390a250505050565b60006012905090565b61096c612309565b610974612387565b6109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa90613623565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f9061368f565b60405180910390fd5b60008111610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a729061355a565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508173ffffffffffffffffffffffffffffffffffffffff167f546881d7b11e2e451d337a9f8c5902323a467b3b333b598942f963b9e67c7d4e600183604051610b0b9291906136f4565b60405180910390a2610b1b61250e565b5050565b600080610b2a611e2d565b9050610b4b818585610b3c8589611b50565b610b46919061374c565b611e35565b600191505092915050565b600080610b61612309565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015491509150915091565b610c05612309565b610c0d612387565b610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613623565b60405180910390fd5b610c546126e0565b610c5c61250e565b565b610c6f610c69611e2d565b82612743565b50565b610c7a612309565b610c82612387565b610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613623565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d9061368f565b60405180910390fd5b60008111610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906134ee565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508173ffffffffffffffffffffffffffffffffffffffff167f546881d7b11e2e451d337a9f8c5902323a467b3b333b598942f963b9e67c7d4e600383604051610e199291906137bb565b60405180910390a2610e2961250e565b5050565b6000600560009054906101000a900460ff16905090565b33610e4e81612919565b610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490613856565b60405180910390fd5b6001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506201518042610ef7919061374c565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055507fab825bb15a80ddd6248dab50c44299ab366e0658b16d6c37ceda8018f5b1adde3342604051610f6e929190613876565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fc9612309565b610fd1612387565b611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100790613623565b60405180910390fd5b6110186129cd565b61102061250e565b565b6000806000808473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110945750611065611964565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca906138eb565b60405180910390fd5b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f9061368f565b60405180910390fd5b600061116486426129e1565b9050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154839450945094509450509193509193565b6007818154811061125057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611287612309565b61128f612387565b6112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590613623565b60405180910390fd5b806112d881612919565b611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90613856565b60405180910390fd5b60036007805490501161135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613957565b60405180910390fd5b6000805b6007805490508160ff161015611607578373ffffffffffffffffffffffffffffffffffffffff1660078260ff16815481106113a1576113a0613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149b5760078160ff16815481106113fe576113fd613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078360ff16815481106114405761143f613977565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508180611493906139a6565b9250506115f4565b8373ffffffffffffffffffffffffffffffffffffffff1660078260ff16815481106114c9576114c8613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036115f35760078160ff168154811061152657611525613977565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006600060078360ff168154811061156e5761156d613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000905550505b5b80806115ff906139a6565b915050611363565b50600780548061161a576116196139cf565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561165761250e565b7f996ac2d2d3bae289f37a56cbfa088fb659e7f5b37433a0f06d8e005844d73eb68360405161168691906131e3565b60405180910390a1505050565b61169b612309565b6116a3612387565b6116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990613623565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e9061368f565b60405180910390fd5b8042106117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090613a70565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508173ffffffffffffffffffffffffffffffffffffffff167f546881d7b11e2e451d337a9f8c5902323a467b3b333b598942f963b9e67c7d4e600283604051611839929190613acb565b60405180910390a261184961250e565b5050565b61185f82611859611e2d565b83611ffe565b6118698282612743565b5050565b6060611877612309565b60098054806020026020016040519081016040528092919081815260200182805480156118f957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116118af575b5050505050905090565b61190b612309565b611913612387565b611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990613623565b60405180910390fd5b61195a612b3e565b61196261250e565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060611998612309565b6007805480602002602001604051908101604052809291908181526020018280548015611a1a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116119d0575b5050505050905090565b606060048054611a339061334d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5f9061334d565b8015611aac5780601f10611a8157610100808354040283529160200191611aac565b820191906000526020600020905b815481529060010190602001808311611a8f57829003601f168201915b5050505050905090565b600080611ac1611e2d565b90506000611acf8286611b50565b905083811015611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613b66565b60405180910390fd5b611b218286868403611e35565b60019250505092915050565b600080611b38611e2d565b9050611b4581858561208a565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611bdf612309565b611be7612387565b611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d90613623565b60405180910390fd5b611c2f81612919565b15611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690613bd2565b60405180910390fd5b6007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611cda61250e565b7f36cdd242bdd95cb0e707df56299f9f974765eefb508f6e9165d196e29bd7337481604051611d0991906131e3565b60405180910390a150565b33611d1e81612919565b611d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5490613856565b60405180910390fd5b611d65612387565b611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90613623565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90613c64565b60405180910390fd5b611e1c82612ba1565b611e2461250e565b5050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9b90613cf6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90613d88565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff19190613000565b60405180910390a3505050565b600061200a8484611b50565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120845781811015612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90613df4565b60405180910390fd5b6120838484848403611e35565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090613e86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f90613f18565b60405180910390fd5b612173838383612c67565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090613faa565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228c919061374c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122f09190613000565b60405180910390a3612303848484612cc9565b50505050565b612311611e2d565b73ffffffffffffffffffffffffffffffffffffffff1661232f611964565b73ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614016565b60405180910390fd5b565b6000806000905060005b6007805490508160ff1610156124ee57600115156006600060078460ff16815481106123c0576123bf613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1615151480156124c75750426006600060078460ff168154811061245c5761245b613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154115b156124db5781806124d7906139a6565b9250505b80806124e6906139a6565b915050612391565b5060018160ff16111561250557600191505061250b565b60009150505b90565b61251733612919565b806125545750612525611964565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a906140a8565b60405180910390fd5b60005b6007805490508160ff1610156126dd5760006006600060078460ff16815481106125c3576125c2613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550426006600060078460ff168154811061265e5761265d613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080806126d5906139a6565b915050612596565b50565b6126e8612cce565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61272c611e2d565b60405161273991906131e3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a99061413a565b60405180910390fd5b6127be82600083612c67565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b906141cc565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461289b91906141ec565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129009190613000565b60405180910390a361291483600084612cc9565b505050565b600080600090505b6007805490508160ff1610156129c2578273ffffffffffffffffffffffffffffffffffffffff1660078260ff168154811061295f5761295e613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129af5760019150506129c8565b80806129ba906139a6565b915050612921565b50600090505b919050565b6129d5612309565b6129df6000612ba1565b565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905081851015612acb5760009350505050612b38565b60008286612ad991906141ec565b9050600062278d0082612aec919061424f565b9050808311612b02578495505050505050612b38565b6001811015612b1957600095505050505050612b38565b828186612b269190614280565b612b30919061424f565b955050505050505b92915050565b612b46612d17565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b8a611e2d565b604051612b9791906131e3565b60405180910390a1565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c6f612d17565b612c798382612d61565b15612cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb09061430e565b60405180910390fd5b612cc4838383611e28565b505050565b505050565b612cd6610e2d565b612d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c9061437a565b60405180910390fd5b565b612d1f610e2d565b15612d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d56906143e6565b60405180910390fd5b565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414612e25576000612db884426129e1565b90508281600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612e0991906141ec565b612e1286610f79565b612e1c91906141ec565b10915050612e2a565b600090505b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e6a578082015181840152602081019050612e4f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e9282612e30565b612e9c8185612e3b565b9350612eac818560208601612e4c565b612eb581612e76565b840191505092915050565b60006020820190508181036000830152612eda8184612e87565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f1282612ee7565b9050919050565b612f2281612f07565b8114612f2d57600080fd5b50565b600081359050612f3f81612f19565b92915050565b6000819050919050565b612f5881612f45565b8114612f6357600080fd5b50565b600081359050612f7581612f4f565b92915050565b60008060408385031215612f9257612f91612ee2565b5b6000612fa085828601612f30565b9250506020612fb185828601612f66565b9150509250929050565b60008115159050919050565b612fd081612fbb565b82525050565b6000602082019050612feb6000830184612fc7565b92915050565b612ffa81612f45565b82525050565b60006020820190506130156000830184612ff1565b92915050565b60008060006060848603121561303457613033612ee2565b5b600061304286828701612f30565b935050602061305386828701612f30565b925050604061306486828701612f66565b9150509250925092565b6000806000806080858703121561308857613087612ee2565b5b600061309687828801612f30565b94505060206130a787828801612f66565b93505060406130b887828801612f66565b92505060606130c987828801612f66565b91505092959194509250565b600060ff82169050919050565b6130eb816130d5565b82525050565b600060208201905061310660008301846130e2565b92915050565b60006020828403121561312257613121612ee2565b5b600061313084828501612f30565b91505092915050565b600060408201905061314e6000830185612fc7565b61315b6020830184612ff1565b9392505050565b60006020828403121561317857613177612ee2565b5b600061318684828501612f66565b91505092915050565b60006080820190506131a46000830187612ff1565b6131b16020830186612ff1565b6131be6040830185612ff1565b6131cb6060830184612ff1565b95945050505050565b6131dd81612f07565b82525050565b60006020820190506131f860008301846131d4565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61323381612f07565b82525050565b6000613245838361322a565b60208301905092915050565b6000602082019050919050565b6000613269826131fe565b6132738185613209565b935061327e8361321a565b8060005b838110156132af5781516132968882613239565b97506132a183613251565b925050600181019050613282565b5085935050505092915050565b600060208201905081810360008301526132d6818461325e565b905092915050565b600080604083850312156132f5576132f4612ee2565b5b600061330385828601612f30565b925050602061331485828601612f30565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061336557607f821691505b6020821081036133785761337761331e565b5b50919050565b7f416c65616479206578697374206c6f636b20696e666f2e000000000000000000600082015250565b60006133b4601783612e3b565b91506133bf8261337e565b602082019050919050565b600060208201905081810360008301526133e3816133a7565b9050919050565b7f45524332303a2043757272656e742074696d652069732067726561746572207460008201527f68616e2073746172742074696d652e0000000000000000000000000000000000602082015250565b6000613446602f83612e3b565b9150613451826133ea565b604082019050919050565b6000602082019050818103600083015261347581613439565b9050919050565b7f45524332303a2052656c656173654d6f6e74687320697320677265617465722060008201527f7468616e20302e00000000000000000000000000000000000000000000000000602082015250565b60006134d8602783612e3b565b91506134e38261347c565b604082019050919050565b60006020820190508181036000830152613507816134cb565b9050919050565b7f45524332303a20416d6f756e742069732067726561746572207468616e20302e600082015250565b6000613544602083612e3b565b915061354f8261350e565b602082019050919050565b6000602082019050818103600083015261357381613537565b9050919050565b600060608201905061358f6000830186612ff1565b61359c6020830185612ff1565b6135a96040830184612ff1565b949350505050565b7f496e73756666696369656e7420657865637574696f6e20636f6e646974696f6e60008201527f732e000000000000000000000000000000000000000000000000000000000000602082015250565b600061360d602283612e3b565b9150613618826135b1565b604082019050919050565b6000602082019050818103600083015261363c81613600565b9050919050565b7f4e6f74206578697374206c6f636b20696e666f2e000000000000000000000000600082015250565b6000613679601483612e3b565b915061368482613643565b602082019050919050565b600060208201905081810360008301526136a88161366c565b9050919050565b6000819050919050565b6000819050919050565b60006136de6136d96136d4846136af565b6136b9565b612f45565b9050919050565b6136ee816136c3565b82525050565b600060408201905061370960008301856136e5565b6137166020830184612ff1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061375782612f45565b915061376283612f45565b925082820190508082111561377a5761377961371d565b5b92915050565b6000819050919050565b60006137a56137a061379b84613780565b6136b9565b612f45565b9050919050565b6137b58161378a565b82525050565b60006040820190506137d060008301856137ac565b6137dd6020830184612ff1565b9392505050565b7f546869732061646472657373206f722063616c6c6572206973206e6f7420746860008201527f6520636f6e6669726d65722e0000000000000000000000000000000000000000602082015250565b6000613840602c83612e3b565b915061384b826137e4565b604082019050919050565b6000602082019050818103600083015261386f81613833565b9050919050565b600060408201905061388b60008301856131d4565b6138986020830184612ff1565b9392505050565b7f43616c6c6572206973206e6f7420746865206f776e65722e0000000000000000600082015250565b60006138d5601883612e3b565b91506138e08261389f565b602082019050919050565b60006020820190508181036000830152613904816138c8565b9050919050565b7f4d757374206265206174206c65617374203320636f6e6669726d6572732e0000600082015250565b6000613941601e83612e3b565b915061394c8261390b565b602082019050919050565b6000602082019050818103600083015261397081613934565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006139b1826130d5565b915060ff82036139c4576139c361371d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f45524332303a2043757272656e742074696d652069732067726561746572207460008201527f68616e2073746172742074696d65000000000000000000000000000000000000602082015250565b6000613a5a602e83612e3b565b9150613a65826139fe565b604082019050919050565b60006020820190508181036000830152613a8981613a4d565b9050919050565b6000819050919050565b6000613ab5613ab0613aab84613a90565b6136b9565b612f45565b9050919050565b613ac581613a9a565b82525050565b6000604082019050613ae06000830185613abc565b613aed6020830184612ff1565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b50602583612e3b565b9150613b5b82613af4565b604082019050919050565b60006020820190508181036000830152613b7f81613b43565b9050919050565b7f416c6561647920657869737420636f6e6669726d65722e000000000000000000600082015250565b6000613bbc601783612e3b565b9150613bc782613b86565b602082019050919050565b60006020820190508181036000830152613beb81613baf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c4e602683612e3b565b9150613c5982613bf2565b604082019050919050565b60006020820190508181036000830152613c7d81613c41565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ce0602483612e3b565b9150613ceb82613c84565b604082019050919050565b60006020820190508181036000830152613d0f81613cd3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d72602283612e3b565b9150613d7d82613d16565b604082019050919050565b60006020820190508181036000830152613da181613d65565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613dde601d83612e3b565b9150613de982613da8565b602082019050919050565b60006020820190508181036000830152613e0d81613dd1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e70602583612e3b565b9150613e7b82613e14565b604082019050919050565b60006020820190508181036000830152613e9f81613e63565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f02602383612e3b565b9150613f0d82613ea6565b604082019050919050565b60006020820190508181036000830152613f3181613ef5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f94602683612e3b565b9150613f9f82613f38565b604082019050919050565b60006020820190508181036000830152613fc381613f87565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614000602083612e3b565b915061400b82613fca565b602082019050919050565b6000602082019050818103600083015261402f81613ff3565b9050919050565b7f43616c6c6572206973206e6f7420746865206f776e6572206f7220636f6e666960008201527f726d65722e000000000000000000000000000000000000000000000000000000602082015250565b6000614092602583612e3b565b915061409d82614036565b604082019050919050565b600060208201905081810360008301526140c181614085565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614124602183612e3b565b915061412f826140c8565b604082019050919050565b6000602082019050818103600083015261415381614117565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006141b6602283612e3b565b91506141c18261415a565b604082019050919050565b600060208201905081810360008301526141e5816141a9565b9050919050565b60006141f782612f45565b915061420283612f45565b925082820390508181111561421a5761421961371d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061425a82612f45565b915061426583612f45565b92508261427557614274614220565b5b828204905092915050565b600061428b82612f45565b915061429683612f45565b92508282026142a481612f45565b915082820484148315176142bb576142ba61371d565b5b5092915050565b7f45524332303a204c6f636b65642062616c616e63652e00000000000000000000600082015250565b60006142f8601683612e3b565b9150614303826142c2565b602082019050919050565b60006020820190508181036000830152614327816142eb565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614364601483612e3b565b915061436f8261432e565b602082019050919050565b6000602082019050818103600083015261439381614357565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006143d0601083612e3b565b91506143db8261439a565b602082019050919050565b600060208201905081810360008301526143ff816143c3565b905091905056fea2646970667358221220f5fc907606f3bf4fdfbd1196c5cd65d0bc6787fc1f7c9fc39eede17263b0aa7864736f6c634300081100330000000000000000000000004720f1796314fbe7d242ae5848d6a6689cc843dc000000000000000000000000eb54c0baea6afe00332d9db185ff4b0228321548
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063715018a61161010f5780638da5cb5b116100a2578063a9059cbb11610071578063a9059cbb1461054a578063dd62ed3e1461057a578063ef9f3574146105aa578063f2fde38b146105c6576101e5565b80638da5cb5b146104c057806392e27a08146104de57806395d89b41146104fc578063a457c2d71461051a576101e5565b806376b57027116100de57806376b570271461046057806379cc67901461047c57806383df4f37146104985780638456cb59146104b6576101e5565b8063715018a6146103d75780637238ccdb146103e157806374db76621461041457806375d966e914610444576101e5565b806339509351116101875780635c383ea0116101565780635c383ea0146103635780635c975abb1461037f5780636884461a1461039d57806370a08231146103a7576101e5565b806339509351146102dc5780633c97a9c51461030c5780633f4ba83a1461033d57806342966c6814610347576101e5565b806323b872dd116101c357806323b872dd1461025657806324a7039d14610286578063313ce567146102a25780633873d475146102c0576101e5565b806306fdde03146101ea578063095ea7b31461020857806318160ddd14610238575b600080fd5b6101f26105e2565b6040516101ff9190612ec0565b60405180910390f35b610222600480360381019061021d9190612f7b565b610674565b60405161022f9190612fd6565b60405180910390f35b610240610697565b60405161024d9190613000565b60405180910390f35b610270600480360381019061026b919061301b565b6106a1565b60405161027d9190612fd6565b60405180910390f35b6102a0600480360381019061029b919061306e565b6106d0565b005b6102aa61095b565b6040516102b791906130f1565b60405180910390f35b6102da60048036038101906102d59190612f7b565b610964565b005b6102f660048036038101906102f19190612f7b565b610b1f565b6040516103039190612fd6565b60405180910390f35b6103266004803603810190610321919061310c565b610b56565b604051610334929190613139565b60405180910390f35b610345610bfd565b005b610361600480360381019061035c9190613162565b610c5e565b005b61037d60048036038101906103789190612f7b565b610c72565b005b610387610e2d565b6040516103949190612fd6565b60405180910390f35b6103a5610e44565b005b6103c160048036038101906103bc919061310c565b610f79565b6040516103ce9190613000565b60405180910390f35b6103df610fc1565b005b6103fb60048036038101906103f6919061310c565b611022565b60405161040b949392919061318f565b60405180910390f35b61042e60048036038101906104299190613162565b611240565b60405161043b91906131e3565b60405180910390f35b61045e6004803603810190610459919061310c565b61127f565b005b61047a60048036038101906104759190612f7b565b611693565b005b61049660048036038101906104919190612f7b565b61184d565b005b6104a061186d565b6040516104ad91906132bc565b60405180910390f35b6104be611903565b005b6104c8611964565b6040516104d591906131e3565b60405180910390f35b6104e661198e565b6040516104f391906132bc565b60405180910390f35b610504611a24565b6040516105119190612ec0565b60405180910390f35b610534600480360381019061052f9190612f7b565b611ab6565b6040516105419190612fd6565b60405180910390f35b610564600480360381019061055f9190612f7b565b611b2d565b6040516105719190612fd6565b60405180910390f35b610594600480360381019061058f91906132de565b611b50565b6040516105a19190613000565b60405180910390f35b6105c460048036038101906105bf919061310c565b611bd7565b005b6105e060048036038101906105db919061310c565b611d14565b005b6060600380546105f19061334d565b80601f016020809104026020016040519081016040528092919081815260200182805461061d9061334d565b801561066a5780601f1061063f5761010080835404028352916020019161066a565b820191906000526020600020905b81548152906001019060200180831161064d57829003601f168201915b5050505050905090565b60008061067f611e2d565b905061068c818585611e35565b600191505092915050565b6000600254905090565b6000806106ac611e2d565b90506106b9858285611ffe565b6106c485858561208a565b60019150509392505050565b6106d8612309565b6001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541061075d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610754906133ca565b60405180910390fd5b82421061079f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107969061345c565b60405180910390fd5b600082116107e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d9906134ee565b60405180910390fd5b60008111610825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081c9061355a565b60405180910390fd5b604051806060016040528082815260200184815260200183815250600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050506009849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff167f1e79ce210cfb5d5b665fdab9417fddaf7112bcbbdb74138529c203c1173ea54f82858560405161094d9392919061357a565b60405180910390a250505050565b60006012905090565b61096c612309565b610974612387565b6109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa90613623565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f9061368f565b60405180910390fd5b60008111610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a729061355a565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508173ffffffffffffffffffffffffffffffffffffffff167f546881d7b11e2e451d337a9f8c5902323a467b3b333b598942f963b9e67c7d4e600183604051610b0b9291906136f4565b60405180910390a2610b1b61250e565b5050565b600080610b2a611e2d565b9050610b4b818585610b3c8589611b50565b610b46919061374c565b611e35565b600191505092915050565b600080610b61612309565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015491509150915091565b610c05612309565b610c0d612387565b610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613623565b60405180910390fd5b610c546126e0565b610c5c61250e565b565b610c6f610c69611e2d565b82612743565b50565b610c7a612309565b610c82612387565b610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613623565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d9061368f565b60405180910390fd5b60008111610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906134ee565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508173ffffffffffffffffffffffffffffffffffffffff167f546881d7b11e2e451d337a9f8c5902323a467b3b333b598942f963b9e67c7d4e600383604051610e199291906137bb565b60405180910390a2610e2961250e565b5050565b6000600560009054906101000a900460ff16905090565b33610e4e81612919565b610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490613856565b60405180910390fd5b6001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506201518042610ef7919061374c565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055507fab825bb15a80ddd6248dab50c44299ab366e0658b16d6c37ceda8018f5b1adde3342604051610f6e929190613876565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fc9612309565b610fd1612387565b611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100790613623565b60405180910390fd5b6110186129cd565b61102061250e565b565b6000806000808473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110945750611065611964565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca906138eb565b60405180910390fd5b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f9061368f565b60405180910390fd5b600061116486426129e1565b9050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154839450945094509450509193509193565b6007818154811061125057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611287612309565b61128f612387565b6112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590613623565b60405180910390fd5b806112d881612919565b611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90613856565b60405180910390fd5b60036007805490501161135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613957565b60405180910390fd5b6000805b6007805490508160ff161015611607578373ffffffffffffffffffffffffffffffffffffffff1660078260ff16815481106113a1576113a0613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149b5760078160ff16815481106113fe576113fd613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078360ff16815481106114405761143f613977565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508180611493906139a6565b9250506115f4565b8373ffffffffffffffffffffffffffffffffffffffff1660078260ff16815481106114c9576114c8613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036115f35760078160ff168154811061152657611525613977565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006600060078360ff168154811061156e5761156d613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000905550505b5b80806115ff906139a6565b915050611363565b50600780548061161a576116196139cf565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561165761250e565b7f996ac2d2d3bae289f37a56cbfa088fb659e7f5b37433a0f06d8e005844d73eb68360405161168691906131e3565b60405180910390a1505050565b61169b612309565b6116a3612387565b6116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990613623565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e9061368f565b60405180910390fd5b8042106117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090613a70565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508173ffffffffffffffffffffffffffffffffffffffff167f546881d7b11e2e451d337a9f8c5902323a467b3b333b598942f963b9e67c7d4e600283604051611839929190613acb565b60405180910390a261184961250e565b5050565b61185f82611859611e2d565b83611ffe565b6118698282612743565b5050565b6060611877612309565b60098054806020026020016040519081016040528092919081815260200182805480156118f957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116118af575b5050505050905090565b61190b612309565b611913612387565b611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194990613623565b60405180910390fd5b61195a612b3e565b61196261250e565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060611998612309565b6007805480602002602001604051908101604052809291908181526020018280548015611a1a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116119d0575b5050505050905090565b606060048054611a339061334d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5f9061334d565b8015611aac5780601f10611a8157610100808354040283529160200191611aac565b820191906000526020600020905b815481529060010190602001808311611a8f57829003601f168201915b5050505050905090565b600080611ac1611e2d565b90506000611acf8286611b50565b905083811015611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613b66565b60405180910390fd5b611b218286868403611e35565b60019250505092915050565b600080611b38611e2d565b9050611b4581858561208a565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611bdf612309565b611be7612387565b611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d90613623565b60405180910390fd5b611c2f81612919565b15611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690613bd2565b60405180910390fd5b6007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611cda61250e565b7f36cdd242bdd95cb0e707df56299f9f974765eefb508f6e9165d196e29bd7337481604051611d0991906131e3565b60405180910390a150565b33611d1e81612919565b611d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5490613856565b60405180910390fd5b611d65612387565b611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90613623565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90613c64565b60405180910390fd5b611e1c82612ba1565b611e2461250e565b5050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9b90613cf6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90613d88565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ff19190613000565b60405180910390a3505050565b600061200a8484611b50565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120845781811015612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90613df4565b60405180910390fd5b6120838484848403611e35565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090613e86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f90613f18565b60405180910390fd5b612173838383612c67565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090613faa565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461228c919061374c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122f09190613000565b60405180910390a3612303848484612cc9565b50505050565b612311611e2d565b73ffffffffffffffffffffffffffffffffffffffff1661232f611964565b73ffffffffffffffffffffffffffffffffffffffff1614612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614016565b60405180910390fd5b565b6000806000905060005b6007805490508160ff1610156124ee57600115156006600060078460ff16815481106123c0576123bf613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1615151480156124c75750426006600060078460ff168154811061245c5761245b613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154115b156124db5781806124d7906139a6565b9250505b80806124e6906139a6565b915050612391565b5060018160ff16111561250557600191505061250b565b60009150505b90565b61251733612919565b806125545750612525611964565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a906140a8565b60405180910390fd5b60005b6007805490508160ff1610156126dd5760006006600060078460ff16815481106125c3576125c2613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550426006600060078460ff168154811061265e5761265d613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080806126d5906139a6565b915050612596565b50565b6126e8612cce565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61272c611e2d565b60405161273991906131e3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a99061413a565b60405180910390fd5b6127be82600083612c67565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b906141cc565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461289b91906141ec565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129009190613000565b60405180910390a361291483600084612cc9565b505050565b600080600090505b6007805490508160ff1610156129c2578273ffffffffffffffffffffffffffffffffffffffff1660078260ff168154811061295f5761295e613977565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129af5760019150506129c8565b80806129ba906139a6565b915050612921565b50600090505b919050565b6129d5612309565b6129df6000612ba1565b565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905081851015612acb5760009350505050612b38565b60008286612ad991906141ec565b9050600062278d0082612aec919061424f565b9050808311612b02578495505050505050612b38565b6001811015612b1957600095505050505050612b38565b828186612b269190614280565b612b30919061424f565b955050505050505b92915050565b612b46612d17565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b8a611e2d565b604051612b9791906131e3565b60405180910390a1565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c6f612d17565b612c798382612d61565b15612cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb09061430e565b60405180910390fd5b612cc4838383611e28565b505050565b505050565b612cd6610e2d565b612d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c9061437a565b60405180910390fd5b565b612d1f610e2d565b15612d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d56906143e6565b60405180910390fd5b565b600080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414612e25576000612db884426129e1565b90508281600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612e0991906141ec565b612e1286610f79565b612e1c91906141ec565b10915050612e2a565b600090505b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e6a578082015181840152602081019050612e4f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e9282612e30565b612e9c8185612e3b565b9350612eac818560208601612e4c565b612eb581612e76565b840191505092915050565b60006020820190508181036000830152612eda8184612e87565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f1282612ee7565b9050919050565b612f2281612f07565b8114612f2d57600080fd5b50565b600081359050612f3f81612f19565b92915050565b6000819050919050565b612f5881612f45565b8114612f6357600080fd5b50565b600081359050612f7581612f4f565b92915050565b60008060408385031215612f9257612f91612ee2565b5b6000612fa085828601612f30565b9250506020612fb185828601612f66565b9150509250929050565b60008115159050919050565b612fd081612fbb565b82525050565b6000602082019050612feb6000830184612fc7565b92915050565b612ffa81612f45565b82525050565b60006020820190506130156000830184612ff1565b92915050565b60008060006060848603121561303457613033612ee2565b5b600061304286828701612f30565b935050602061305386828701612f30565b925050604061306486828701612f66565b9150509250925092565b6000806000806080858703121561308857613087612ee2565b5b600061309687828801612f30565b94505060206130a787828801612f66565b93505060406130b887828801612f66565b92505060606130c987828801612f66565b91505092959194509250565b600060ff82169050919050565b6130eb816130d5565b82525050565b600060208201905061310660008301846130e2565b92915050565b60006020828403121561312257613121612ee2565b5b600061313084828501612f30565b91505092915050565b600060408201905061314e6000830185612fc7565b61315b6020830184612ff1565b9392505050565b60006020828403121561317857613177612ee2565b5b600061318684828501612f66565b91505092915050565b60006080820190506131a46000830187612ff1565b6131b16020830186612ff1565b6131be6040830185612ff1565b6131cb6060830184612ff1565b95945050505050565b6131dd81612f07565b82525050565b60006020820190506131f860008301846131d4565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61323381612f07565b82525050565b6000613245838361322a565b60208301905092915050565b6000602082019050919050565b6000613269826131fe565b6132738185613209565b935061327e8361321a565b8060005b838110156132af5781516132968882613239565b97506132a183613251565b925050600181019050613282565b5085935050505092915050565b600060208201905081810360008301526132d6818461325e565b905092915050565b600080604083850312156132f5576132f4612ee2565b5b600061330385828601612f30565b925050602061331485828601612f30565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061336557607f821691505b6020821081036133785761337761331e565b5b50919050565b7f416c65616479206578697374206c6f636b20696e666f2e000000000000000000600082015250565b60006133b4601783612e3b565b91506133bf8261337e565b602082019050919050565b600060208201905081810360008301526133e3816133a7565b9050919050565b7f45524332303a2043757272656e742074696d652069732067726561746572207460008201527f68616e2073746172742074696d652e0000000000000000000000000000000000602082015250565b6000613446602f83612e3b565b9150613451826133ea565b604082019050919050565b6000602082019050818103600083015261347581613439565b9050919050565b7f45524332303a2052656c656173654d6f6e74687320697320677265617465722060008201527f7468616e20302e00000000000000000000000000000000000000000000000000602082015250565b60006134d8602783612e3b565b91506134e38261347c565b604082019050919050565b60006020820190508181036000830152613507816134cb565b9050919050565b7f45524332303a20416d6f756e742069732067726561746572207468616e20302e600082015250565b6000613544602083612e3b565b915061354f8261350e565b602082019050919050565b6000602082019050818103600083015261357381613537565b9050919050565b600060608201905061358f6000830186612ff1565b61359c6020830185612ff1565b6135a96040830184612ff1565b949350505050565b7f496e73756666696369656e7420657865637574696f6e20636f6e646974696f6e60008201527f732e000000000000000000000000000000000000000000000000000000000000602082015250565b600061360d602283612e3b565b9150613618826135b1565b604082019050919050565b6000602082019050818103600083015261363c81613600565b9050919050565b7f4e6f74206578697374206c6f636b20696e666f2e000000000000000000000000600082015250565b6000613679601483612e3b565b915061368482613643565b602082019050919050565b600060208201905081810360008301526136a88161366c565b9050919050565b6000819050919050565b6000819050919050565b60006136de6136d96136d4846136af565b6136b9565b612f45565b9050919050565b6136ee816136c3565b82525050565b600060408201905061370960008301856136e5565b6137166020830184612ff1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061375782612f45565b915061376283612f45565b925082820190508082111561377a5761377961371d565b5b92915050565b6000819050919050565b60006137a56137a061379b84613780565b6136b9565b612f45565b9050919050565b6137b58161378a565b82525050565b60006040820190506137d060008301856137ac565b6137dd6020830184612ff1565b9392505050565b7f546869732061646472657373206f722063616c6c6572206973206e6f7420746860008201527f6520636f6e6669726d65722e0000000000000000000000000000000000000000602082015250565b6000613840602c83612e3b565b915061384b826137e4565b604082019050919050565b6000602082019050818103600083015261386f81613833565b9050919050565b600060408201905061388b60008301856131d4565b6138986020830184612ff1565b9392505050565b7f43616c6c6572206973206e6f7420746865206f776e65722e0000000000000000600082015250565b60006138d5601883612e3b565b91506138e08261389f565b602082019050919050565b60006020820190508181036000830152613904816138c8565b9050919050565b7f4d757374206265206174206c65617374203320636f6e6669726d6572732e0000600082015250565b6000613941601e83612e3b565b915061394c8261390b565b602082019050919050565b6000602082019050818103600083015261397081613934565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006139b1826130d5565b915060ff82036139c4576139c361371d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f45524332303a2043757272656e742074696d652069732067726561746572207460008201527f68616e2073746172742074696d65000000000000000000000000000000000000602082015250565b6000613a5a602e83612e3b565b9150613a65826139fe565b604082019050919050565b60006020820190508181036000830152613a8981613a4d565b9050919050565b6000819050919050565b6000613ab5613ab0613aab84613a90565b6136b9565b612f45565b9050919050565b613ac581613a9a565b82525050565b6000604082019050613ae06000830185613abc565b613aed6020830184612ff1565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b50602583612e3b565b9150613b5b82613af4565b604082019050919050565b60006020820190508181036000830152613b7f81613b43565b9050919050565b7f416c6561647920657869737420636f6e6669726d65722e000000000000000000600082015250565b6000613bbc601783612e3b565b9150613bc782613b86565b602082019050919050565b60006020820190508181036000830152613beb81613baf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c4e602683612e3b565b9150613c5982613bf2565b604082019050919050565b60006020820190508181036000830152613c7d81613c41565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ce0602483612e3b565b9150613ceb82613c84565b604082019050919050565b60006020820190508181036000830152613d0f81613cd3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d72602283612e3b565b9150613d7d82613d16565b604082019050919050565b60006020820190508181036000830152613da181613d65565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613dde601d83612e3b565b9150613de982613da8565b602082019050919050565b60006020820190508181036000830152613e0d81613dd1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e70602583612e3b565b9150613e7b82613e14565b604082019050919050565b60006020820190508181036000830152613e9f81613e63565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f02602383612e3b565b9150613f0d82613ea6565b604082019050919050565b60006020820190508181036000830152613f3181613ef5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f94602683612e3b565b9150613f9f82613f38565b604082019050919050565b60006020820190508181036000830152613fc381613f87565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614000602083612e3b565b915061400b82613fca565b602082019050919050565b6000602082019050818103600083015261402f81613ff3565b9050919050565b7f43616c6c6572206973206e6f7420746865206f776e6572206f7220636f6e666960008201527f726d65722e000000000000000000000000000000000000000000000000000000602082015250565b6000614092602583612e3b565b915061409d82614036565b604082019050919050565b600060208201905081810360008301526140c181614085565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614124602183612e3b565b915061412f826140c8565b604082019050919050565b6000602082019050818103600083015261415381614117565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006141b6602283612e3b565b91506141c18261415a565b604082019050919050565b600060208201905081810360008301526141e5816141a9565b9050919050565b60006141f782612f45565b915061420283612f45565b925082820390508181111561421a5761421961371d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061425a82612f45565b915061426583612f45565b92508261427557614274614220565b5b828204905092915050565b600061428b82612f45565b915061429683612f45565b92508282026142a481612f45565b915082820484148315176142bb576142ba61371d565b5b5092915050565b7f45524332303a204c6f636b65642062616c616e63652e00000000000000000000600082015250565b60006142f8601683612e3b565b9150614303826142c2565b602082019050919050565b60006020820190508181036000830152614327816142eb565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614364601483612e3b565b915061436f8261432e565b602082019050919050565b6000602082019050818103600083015261439381614357565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006143d0601083612e3b565b91506143db8261439a565b602082019050919050565b600060208201905081810360008301526143ff816143c3565b905091905056fea2646970667358221220f5fc907606f3bf4fdfbd1196c5cd65d0bc6787fc1f7c9fc39eede17263b0aa7864736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004720f1796314fbe7d242ae5848d6a6689cc843dc000000000000000000000000eb54c0baea6afe00332d9db185ff4b0228321548
-----Decoded View---------------
Arg [0] : confirmer1 (address): 0x4720f1796314FBE7d242Ae5848D6a6689CC843dc
Arg [1] : confirmer2 (address): 0xeb54c0baEA6afe00332d9Db185ff4b0228321548
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004720f1796314fbe7d242ae5848d6a6689cc843dc
Arg [1] : 000000000000000000000000eb54c0baea6afe00332d9db185ff4b0228321548
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.