CRC-20
Overview
Max Total Supply
92,899,436.474164133738600679 SEA
Holders
43
Total Transfers
-
Market
Price
$0.00 @ 0.000000 CRO
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
GovernanceToken
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2024-10-24 */ // Sources flattened with hardhat v2.22.10 https://hardhat.org // SPDX-License-Identifier: MIT // File contracts/deprecated/Context.sol // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.0 <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 GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File contracts/deprecated/Ownable.sol // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.0 <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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File contracts/Authorizable.sol // Original license: SPDX_License_Identifier: MIT pragma solidity 0.6.12; contract Authorizable is Ownable { mapping(address => bool) public authorized; modifier onlyAuthorized() { require(authorized[msg.sender] || owner() == msg.sender); _; } function addAuthorized(address _toAdd) public onlyOwner { authorized[_toAdd] = true; } function removeAuthorized(address _toRemove) public onlyOwner { require(_toRemove != msg.sender); authorized[_toRemove] = false; } } // File contracts/deprecated/IERC20.sol // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/deprecated/SafeMath.sol // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File contracts/deprecated/ERC20.sol // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.0 <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 guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) public { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return _decimals; } /** * @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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File contracts/GovernanceToken.sol // Original license: SPDX_License_Identifier: MIT pragma solidity 0.6.12; // The GovernanceToken contract GovernanceToken is ERC20, Ownable, Authorizable { uint256 private _cap; uint256 private _totalLock; uint256 public lockFromBlock; uint256 public lockToBlock; // uint256 public manualMintLimit; // uint256 public manualMinted = 0; mapping(address => uint256) private _locks; mapping(address => uint256) private _lastUnlockBlock; event Lock(address indexed to, uint256 value); event TransferLocked(address indexed from, address indexed to, uint256 value); constructor( string memory _name, string memory _symbol, uint256 cap_, // uint256 _manualMintLimit, uint256 _lockFromBlock, uint256 _lockToBlock ) public ERC20(_name, _symbol) { _cap = cap_; // manualMintLimit = _manualMintLimit; lockFromBlock = _lockFromBlock; lockToBlock = _lockToBlock; } /** * @dev Returns the cap on the token's total supply. */ function cap() public view returns (uint256) { return _cap; } // Update the total cap - can go up or down but wont destroy previous tokens. function capUpdate(uint256 _newCap) public onlyAuthorized { _cap = _newCap; } // Update the lockFromBlock function lockFromUpdate(uint256 _newLockFrom) public onlyAuthorized { lockFromBlock = _newLockFrom; } // Update the lockToBlock function lockToUpdate(uint256 _newLockTo) public onlyAuthorized { lockToBlock = _newLockTo; } function unlockedSupply() public view returns (uint256) { return totalSupply().sub(_totalLock); } function lockedSupply() public view returns (uint256) { return totalLock(); } function circulatingSupply() public view returns (uint256) { return totalSupply(); } function totalLock() public view returns (uint256) { return _totalLock; } /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - minted tokens must not cause the total supply to go over the cap. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); if (from == address(0)) { // When minting tokens require( totalSupply().add(amount) <= _cap, "ERC20Capped: cap exceeded" ); } } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual override { super._transfer(sender, recipient, amount); _moveDelegates(_delegates[sender], _delegates[recipient], amount); } /// @notice Creates `_amount` token to `_to`. Must only be called by the owner. function mint(address _to, uint256 _amount) public onlyOwner { _mint(_to, _amount); _moveDelegates(address(0), _delegates[_to], _amount); } // function manualMint(address _to, uint256 _amount) public onlyAuthorized { // require(manualMinted.add(_amount) <= manualMintLimit, "ERC20: manualMinted greater than manualMintLimit"); // _mint(_to, _amount); // _moveDelegates(address(0), _delegates[_to], _amount); // manualMinted = manualMinted.add(_amount); // } function totalBalanceOf(address _holder) public view returns (uint256) { return _locks[_holder].add(balanceOf(_holder)); } function lockOf(address _holder) public view returns (uint256) { return _locks[_holder]; } function lastUnlockBlock(address _holder) public view returns (uint256) { return _lastUnlockBlock[_holder]; } function lock(address _holder, uint256 _amount) public onlyOwner { require(_holder != address(0), "ERC20: lock to the zero address"); require( _amount <= balanceOf(_holder), "ERC20: lock amount over balance" ); _transfer(_holder, address(this), _amount); _locks[_holder] = _locks[_holder].add(_amount); _totalLock = _totalLock.add(_amount); if (_lastUnlockBlock[_holder] < lockFromBlock) { _lastUnlockBlock[_holder] = lockFromBlock; } emit Lock(_holder, _amount); } function canUnlockAmount(address _holder) public view returns (uint256) { if (block.number < lockFromBlock) { return 0; } else if (block.number >= lockToBlock) { return _locks[_holder]; } else { uint256 releaseBlock = block.number.sub(_lastUnlockBlock[_holder]); uint256 numberLockBlock = lockToBlock.sub(_lastUnlockBlock[_holder]); return _locks[_holder].mul(releaseBlock).div(numberLockBlock); } } function unlock() public { require(_locks[msg.sender] > 0, "ERC20: cannot unlock"); uint256 amount = canUnlockAmount(msg.sender); // just for sure if (amount > balanceOf(address(this))) { amount = balanceOf(address(this)); } _transfer(address(this), msg.sender, amount); _locks[msg.sender] = _locks[msg.sender].sub(amount); _lastUnlockBlock[msg.sender] = block.number; _totalLock = _totalLock.sub(amount); } // This function is for dev address migrate all balance to a multi sig address function transferAll(address _to) public { _locks[_to] = _locks[_to].add(_locks[msg.sender]); if (_lastUnlockBlock[_to] < lockFromBlock) { _lastUnlockBlock[_to] = lockFromBlock; } if (_lastUnlockBlock[_to] < _lastUnlockBlock[msg.sender]) { _lastUnlockBlock[_to] = _lastUnlockBlock[msg.sender]; } _locks[msg.sender] = 0; _lastUnlockBlock[msg.sender] = 0; _transfer(msg.sender, _to, balanceOf(msg.sender)); } function transferLockedAmount(address _to, uint256 amount) public { // Ensure the sender has enough locked tokens to transfer require(amount <= _locks[msg.sender], "ERC20: transfer amount exceeds locked balance"); // Transfer locked tokens _locks[_to] = _locks[_to].add(amount); // Add locked tokens to recipient _locks[msg.sender] = _locks[msg.sender].sub(amount); // Deduct locked tokens from sender _totalLock = _totalLock.sub(amount); // Update total locked tokens globally // Update the last unlock block for the recipient if (_lastUnlockBlock[_to] < lockFromBlock) { _lastUnlockBlock[_to] = lockFromBlock; } if (_lastUnlockBlock[_to] < _lastUnlockBlock[msg.sender]) { _lastUnlockBlock[_to] = _lastUnlockBlock[msg.sender]; } emit TransferLocked(msg.sender, _to, amount); } // Copied and modified from YAM code: // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernanceStorage.sol // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernance.sol // Which is copied and modified from COMPOUND: // https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol /// @dev A record of each accounts delegate mapping(address => address) internal _delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @notice A record of votes checkpoints for each account, by index mapping(address => mapping(uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping(address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256( "EIP712Domain(string name,uint256 chainId,address verifyingContract)" ); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping(address => uint256) public nonces; /// @notice An event thats emitted when an account changes its delegate event DelegateChanged( address indexed delegator, address indexed fromDelegate, address indexed toDelegate ); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged( address indexed delegate, uint256 previousBalance, uint256 newBalance ); /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s ) external { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry) ); bytes32 digest = keccak256( abi.encodePacked("\x19\x01", domainSeparator, structHash) ); address signatory = ecrecover(digest, v, r, s); require( signatory != address(0), "GovernanceToken::delegateBySig: invalid signature" ); require( nonce == nonces[signatory]++, "GovernanceToken::delegateBySig: invalid nonce" ); require(now <= expiry, "GovernanceToken::delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint256 blockNumber) external view returns (uint256) { require( blockNumber < block.number, "GovernanceToken::getPriorVotes: not yet determined" ); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = balanceOf(delegator); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _moveDelegates( address srcRep, address dstRep, uint256 amount ) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32( block.number, "GovernanceToken::_writeCheckpoint: block number exceeds 32 bits" ); if ( nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber ) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint( blockNumber, newVotes ); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal pure returns (uint256) { uint256 chainId; assembly { chainId := chainid() } return chainId; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"cap_","type":"uint256"},{"internalType":"uint256","name":"_lockFromBlock","type":"uint256"},{"internalType":"uint256","name":"_lockToBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"TransferLocked","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_toAdd","type":"address"}],"name":"addAuthorized","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":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"canUnlockAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCap","type":"uint256"}],"name":"capUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"lastUnlockBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockFromBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLockFrom","type":"uint256"}],"name":"lockFromUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"lockOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockToBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLockTo","type":"uint256"}],"name":"lockToUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_toRemove","type":"address"}],"name":"removeAuthorized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"totalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"transferAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferLockedAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004e6338038062004e63833981810160405260a08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190805190602001909291908051906020019092919050505084848160039080519060200190620001f092919062000301565b5080600490805190602001906200020992919062000301565b506012600560006101000a81548160ff021916908360ff160217905550505060006200023a620002f960201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350826007819055508160098190555080600a819055505050505050620003a7565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200034457805160ff191683800117855562000375565b8280016001018555821562000375579182015b828111156200037457825182559160200191906001019062000357565b5b50905062000384919062000388565b5090565b5b80821115620003a357600081600090555060010162000389565b5090565b614aac80620003b76000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c8063756a5ab31161015c578063a9059cbb116100ce578063cf1c316a11610087578063cf1c316a14610dab578063dd62ed3e14610def578063e7a324dc14610e67578063f1127ed814610e85578063f2fde38b14610efa578063fd3d27b814610f3e5761028a565b8063a9059cbb14610bd0578063b4b5ea5714610c34578063b918161114610c8c578063c38533c614610ce6578063c3cda52014610d14578063ca5c7b9114610d8d5761028a565b80638e875e1a116101205780638e875e1a14610a5f5780639358928b14610a7d57806395d89b4114610a9b578063a3a7e7f314610b1e578063a457c2d714610b62578063a69df4b514610bc65761028a565b8063756a5ab3146108cb578063782d6fe1146109195780637ecebe001461097b57806389a2867c146109d35780638da5cb5b14610a2b5761028a565b80633a1aae35116102005780635a46d3b5116101b95780635a46d3b5146107515780635c19a95c146107a957806366fc237b146107ed5780636fcfff451461080b57806370a0823114610869578063715018a6146108c15761028a565b80633a1aae35146105ad57806340346c49146105cb57806340c10f19146105f9578063485d7d94146106475780634b0ee02a1461068b578063587cde1e146106e35761028a565b806320606b701161025257806320606b701461041a57806323b872dd14610438578063282d3fdf146104bc578063313ce5671461050a578063355274ea1461052b57806339509351146105495761028a565b806306fdde031461028f578063095ea7b3146103125780630cb285e21461037657806318160ddd146103a4578063202b1760146103c2575b600080fd5b610297610f5c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d75780820151818401526020810190506102bc565b50505050905090810190601f1680156103045780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61035e6004803603604081101561032857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ffe565b60405180821515815260200191505060405180910390f35b6103a26004803603602081101561038c57600080fd5b810190808035906020019092919050505061101c565b005b6103ac6110b9565b6040518082815260200191505060405180910390f35b610404600480360360208110156103d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110c3565b6040518082815260200191505060405180910390f35b610422611244565b6040518082815260200191505060405180910390f35b6104a46004803603606081101561044e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611268565b60405180821515815260200191505060405180910390f35b610508600480360360408110156104d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611341565b005b6105126116ae565b604051808260ff16815260200191505060405180910390f35b6105336116c5565b6040518082815260200191505060405180910390f35b6105956004803603604081101561055f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116cf565b60405180821515815260200191505060405180910390f35b6105b5611782565b6040518082815260200191505060405180910390f35b6105f7600480360360208110156105e157600080fd5b810190808035906020019092919050505061178c565b005b6106456004803603604081101561060f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611829565b005b6106896004803603602081101561065d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611951565b005b6106cd600480360360208110156106a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a94565b6040518082815260200191505060405180910390f35b610725600480360360208110156106f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611af7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107936004803603602081101561076757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b60565b6040518082815260200191505060405180910390f35b6107eb600480360360208110156107bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba9565b005b6107f5611bb6565b6040518082815260200191505060405180910390f35b61084d6004803603602081101561082157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bbc565b604051808263ffffffff16815260200191505060405180910390f35b6108ab6004803603602081101561087f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bdf565b6040518082815260200191505060405180910390f35b6108c9611c27565b005b610917600480360360408110156108e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d97565b005b6109656004803603604081101561092f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612177565b6040518082815260200191505060405180910390f35b6109bd6004803603602081101561099157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612538565b6040518082815260200191505060405180910390f35b610a15600480360360208110156109e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612550565b6040518082815260200191505060405180910390f35b610a33612599565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a676125c3565b6040518082815260200191505060405180910390f35b610a856125c9565b6040518082815260200191505060405180910390f35b610aa36125d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ae3578082015181840152602081019050610ac8565b50505050905090810190601f168015610b105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b6060048036036020811015610b3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061267a565b005b610bae60048036036040811015610b7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612988565b60405180821515815260200191505060405180910390f35b610bce612a55565b005b610c1c60048036036040811015610be657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c35565b60405180821515815260200191505060405180910390f35b610c7660048036036020811015610c4a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c53565b6040518082815260200191505060405180910390f35b610cce60048036036020811015610ca257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d29565b60405180821515815260200191505060405180910390f35b610d1260048036036020811015610cfc57600080fd5b8101908080359060200190929190505050612d49565b005b610d8b600480360360c0811015610d2a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612de6565b005b610d9561314a565b6040518082815260200191505060405180910390f35b610ded60048036036020811015610dc157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613159565b005b610e5160048036036040811015610e0557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613263565b6040518082815260200191505060405180910390f35b610e6f6132ea565b6040518082815260200191505060405180910390f35b610ed760048036036040811015610e9b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff16906020019092919050505061330e565b604051808363ffffffff1681526020018281526020019250505060405180910390f35b610f3c60048036036020811015610f1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061334f565b005b610f46613544565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ff45780601f10610fc957610100808354040283529160200191610ff4565b820191906000526020600020905b815481529060010190602001808311610fd757829003601f168201915b5050505050905090565b600061101261100b613567565b848461356f565b6001905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110a657503373ffffffffffffffffffffffffffffffffffffffff1661108e612599565b73ffffffffffffffffffffffffffffffffffffffff16145b6110af57600080fd5b80600a8190555050565b6000600254905090565b60006009544310156110d8576000905061123f565b600a54431061112857600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061123f565b600061117c600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544361376690919063ffffffff16565b905060006111d4600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a5461376690919063ffffffff16565b905061123a8161122c84600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137e990919063ffffffff16565b61386f90919063ffffffff16565b925050505b919050565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006112758484846138f8565b61133684611281613567565b611331856040518060600160405280602881526020016149b060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112e7613567565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d19092919063ffffffff16565b61356f565b600190509392505050565b611349613567565b73ffffffffffffffffffffffffffffffffffffffff16611367612599565b73ffffffffffffffffffffffffffffffffffffffff16146113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206c6f636b20746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61149c82611bdf565b811115611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206c6f636b20616d6f756e74206f7665722062616c616e63650081525060200191505060405180910390fd5b61151c8230836138f8565b61156e81600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115c681600854613a8b90919063ffffffff16565b600881905550600954600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561165c57600954600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff167f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d427826040518082815260200191505060405180910390a25050565b6000600560009054906101000a900460ff16905090565b6000600754905090565b60006117786116dc613567565b8461177385600160006116ed613567565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b61356f565b6001905092915050565b6000600854905090565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061181657503373ffffffffffffffffffffffffffffffffffffffff166117fe612599565b73ffffffffffffffffffffffffffffffffffffffff16145b61181f57600080fd5b8060078190555050565b611831613567565b73ffffffffffffffffffffffffffffffffffffffff1661184f612599565b73ffffffffffffffffffffffffffffffffffffffff16146118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6118e28282613b13565b61194d6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613cda565b5050565b611959613567565b73ffffffffffffffffffffffffffffffffffffffff16611977612599565b73ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a3957600080fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611af0611aa283611bdf565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b9050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611bb33382613f77565b50565b60095481565b600f6020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c2f613567565b73ffffffffffffffffffffffffffffffffffffffff16611c4d612599565b73ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611e2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806148c3602d913960400191505060405180910390fd5b611e8181600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f1681600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376690919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f6e8160085461376690919063ffffffff16565b600881905550600954600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561200457600954600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561210e57600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f5317ebfc0ec3457aaee1706ade06359db30a72c13fc9e937354e852bd9e43df9836040518082815260200191505060405180910390a35050565b60004382106121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806148026032913960400191505060405180910390fd5b6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16141561223e576000915050612532565b82600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161161232857600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff16815260200190815260200160002060010154915050612532565b82600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611156123a9576000915050612532565b6000806001830390505b8163ffffffff168163ffffffff1611156124cc576000600283830363ffffffff16816123db57fe5b04820390506123e86147e1565b600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1614156124a457806020015195505050505050612532565b86816000015163ffffffff1610156124be578193506124c5565b6001820392505b50506123b3565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b60106020528060005260406000206000915090505481565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b60006125d36110b9565b905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126705780601f1061264557610100808354040283529160200191612670565b820191906000526020600020905b81548152906001019060200180831161265357829003601f168201915b5050505050905090565b61270b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156127de57600954600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156128e857600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612985338261298033611bdf565b6138f8565b50565b6000612a4b612995613567565b84612a4685604051806060016040528060258152602001614a5260259139600160006129bf613567565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d19092919063ffffffff16565b61356f565b6001905092915050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612b0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f45524332303a2063616e6e6f7420756e6c6f636b00000000000000000000000081525060200191505060405180910390fd5b6000612b15336110c3565b9050612b2030611bdf565b811115612b3357612b3030611bdf565b90505b612b3e3033836138f8565b612b9081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376690919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c2c8160085461376690919063ffffffff16565b60088190555050565b6000612c49612c42613567565b84846138f8565b6001905092915050565b600080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611612cbd576000612d21565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60066020528060005260406000206000915054906101000a900460ff1681565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dd357503373ffffffffffffffffffffffffffffffffffffffff16612dbb612599565b73ffffffffffffffffffffffffffffffffffffffff16145b612ddc57600080fd5b8060098190555050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866612e11610f5c565b80519060200120612e206140e8565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612fa4573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613036576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806149d86031913960400191505060405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505589146130db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614834602d913960400191505060405180910390fd5b87421115613134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061495e6031913960400191505060405180910390fd5b61313e818b613f77565b50505050505050505050565b6000613154611782565b905090565b613161613567565b73ffffffffffffffffffffffffffffffffffffffff1661317f612599565b73ffffffffffffffffffffffffffffffffffffffff1614613208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600e602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b613357613567565b73ffffffffffffffffffffffffffffffffffffffff16613375612599565b73ffffffffffffffffffffffffffffffffffffffff16146133fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613484576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148f06026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006135626008546135546110b9565b61376690919063ffffffff16565b905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614a2e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561367b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149166022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000828211156137de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000808314156137fc5760009050613869565b600082840290508284828161380d57fe5b0414613864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061498f6021913960400191505060405180910390fd5b809150505b92915050565b60008082116138e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816138ef57fe5b04905092915050565b6139038383836140f5565b6139cc600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613cda565b505050565b6000838311158290613a7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a43578082015181840152602081019050613a28565b50505050905090810190601f168015613a705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600080828401905083811015613b09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613bc2600083836143b6565b613bd781600254613a8b90919063ffffffff16565b600281905550613c2e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613d165750600081115b15613f7257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613e46576000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613db9576000613e1d565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613e34848361376690919063ffffffff16565b9050613e428684848461448d565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613f71576000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613ee4576000613f48565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613f5f8483613a8b90919063ffffffff16565b9050613f6d8584848461448d565b5050505b5b505050565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000613fe684611bdf565b905082600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46140e2828483613cda565b50505050565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561417b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614a096025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806148616023913960400191505060405180910390fd5b61420c8383836143b6565b61427781604051806060016040528060268152602001614938602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d19092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061430a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6143c1838383614721565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561448857600754614413826144056110b9565b613a8b90919063ffffffff16565b1115614487576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f45524332304361707065643a206361702065786365656465640000000000000081525060200191505060405180910390fd5b5b505050565b60006144b1436040518060600160405280603f8152602001614884603f9139614726565b905060008463ffffffff1611801561454657508063ffffffff16600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156145b75781600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff168152602001908152602001600020600101819055506146c4565b60405180604001604052808263ffffffff16815260200183815250600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b505050565b6000640100000000831082906147d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561479c578082015181840152602081019050614781565b50505050905090810190601f1680156147c95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe476f7665726e616e6365546f6b656e3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e6564476f7665726e616e6365546f6b656e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e636545524332303a207472616e7366657220746f20746865207a65726f2061646472657373476f7665726e616e6365546f6b656e3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a207472616e7366657220616d6f756e742065786365656473206c6f636b65642062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365476f7665726e616e6365546f6b656e3a3a64656c656761746542795369673a207369676e61747572652065787069726564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365476f7665726e616e6365546f6b656e3a3a64656c656761746542795369673a20696e76616c6964207369676e617475726545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b70f6ef98e8aa83315d0e97371173792bfb3d7aa5979475ae2aea8d578ab575064736f6c634300060c003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000006765c793fa10079d0000000000000000000000000000000000000000000000000000000000000000151eda0000000000000000000000000000000000000000000000000000000000200e914000000000000000000000000000000000000000000000000000000000000000953656120546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035345410000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061028a5760003560e01c8063756a5ab31161015c578063a9059cbb116100ce578063cf1c316a11610087578063cf1c316a14610dab578063dd62ed3e14610def578063e7a324dc14610e67578063f1127ed814610e85578063f2fde38b14610efa578063fd3d27b814610f3e5761028a565b8063a9059cbb14610bd0578063b4b5ea5714610c34578063b918161114610c8c578063c38533c614610ce6578063c3cda52014610d14578063ca5c7b9114610d8d5761028a565b80638e875e1a116101205780638e875e1a14610a5f5780639358928b14610a7d57806395d89b4114610a9b578063a3a7e7f314610b1e578063a457c2d714610b62578063a69df4b514610bc65761028a565b8063756a5ab3146108cb578063782d6fe1146109195780637ecebe001461097b57806389a2867c146109d35780638da5cb5b14610a2b5761028a565b80633a1aae35116102005780635a46d3b5116101b95780635a46d3b5146107515780635c19a95c146107a957806366fc237b146107ed5780636fcfff451461080b57806370a0823114610869578063715018a6146108c15761028a565b80633a1aae35146105ad57806340346c49146105cb57806340c10f19146105f9578063485d7d94146106475780634b0ee02a1461068b578063587cde1e146106e35761028a565b806320606b701161025257806320606b701461041a57806323b872dd14610438578063282d3fdf146104bc578063313ce5671461050a578063355274ea1461052b57806339509351146105495761028a565b806306fdde031461028f578063095ea7b3146103125780630cb285e21461037657806318160ddd146103a4578063202b1760146103c2575b600080fd5b610297610f5c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d75780820151818401526020810190506102bc565b50505050905090810190601f1680156103045780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61035e6004803603604081101561032857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ffe565b60405180821515815260200191505060405180910390f35b6103a26004803603602081101561038c57600080fd5b810190808035906020019092919050505061101c565b005b6103ac6110b9565b6040518082815260200191505060405180910390f35b610404600480360360208110156103d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110c3565b6040518082815260200191505060405180910390f35b610422611244565b6040518082815260200191505060405180910390f35b6104a46004803603606081101561044e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611268565b60405180821515815260200191505060405180910390f35b610508600480360360408110156104d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611341565b005b6105126116ae565b604051808260ff16815260200191505060405180910390f35b6105336116c5565b6040518082815260200191505060405180910390f35b6105956004803603604081101561055f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116cf565b60405180821515815260200191505060405180910390f35b6105b5611782565b6040518082815260200191505060405180910390f35b6105f7600480360360208110156105e157600080fd5b810190808035906020019092919050505061178c565b005b6106456004803603604081101561060f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611829565b005b6106896004803603602081101561065d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611951565b005b6106cd600480360360208110156106a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a94565b6040518082815260200191505060405180910390f35b610725600480360360208110156106f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611af7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107936004803603602081101561076757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b60565b6040518082815260200191505060405180910390f35b6107eb600480360360208110156107bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba9565b005b6107f5611bb6565b6040518082815260200191505060405180910390f35b61084d6004803603602081101561082157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bbc565b604051808263ffffffff16815260200191505060405180910390f35b6108ab6004803603602081101561087f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bdf565b6040518082815260200191505060405180910390f35b6108c9611c27565b005b610917600480360360408110156108e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d97565b005b6109656004803603604081101561092f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612177565b6040518082815260200191505060405180910390f35b6109bd6004803603602081101561099157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612538565b6040518082815260200191505060405180910390f35b610a15600480360360208110156109e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612550565b6040518082815260200191505060405180910390f35b610a33612599565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a676125c3565b6040518082815260200191505060405180910390f35b610a856125c9565b6040518082815260200191505060405180910390f35b610aa36125d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ae3578082015181840152602081019050610ac8565b50505050905090810190601f168015610b105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b6060048036036020811015610b3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061267a565b005b610bae60048036036040811015610b7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612988565b60405180821515815260200191505060405180910390f35b610bce612a55565b005b610c1c60048036036040811015610be657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c35565b60405180821515815260200191505060405180910390f35b610c7660048036036020811015610c4a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c53565b6040518082815260200191505060405180910390f35b610cce60048036036020811015610ca257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d29565b60405180821515815260200191505060405180910390f35b610d1260048036036020811015610cfc57600080fd5b8101908080359060200190929190505050612d49565b005b610d8b600480360360c0811015610d2a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612de6565b005b610d9561314a565b6040518082815260200191505060405180910390f35b610ded60048036036020811015610dc157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613159565b005b610e5160048036036040811015610e0557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613263565b6040518082815260200191505060405180910390f35b610e6f6132ea565b6040518082815260200191505060405180910390f35b610ed760048036036040811015610e9b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff16906020019092919050505061330e565b604051808363ffffffff1681526020018281526020019250505060405180910390f35b610f3c60048036036020811015610f1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061334f565b005b610f46613544565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ff45780601f10610fc957610100808354040283529160200191610ff4565b820191906000526020600020905b815481529060010190602001808311610fd757829003601f168201915b5050505050905090565b600061101261100b613567565b848461356f565b6001905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110a657503373ffffffffffffffffffffffffffffffffffffffff1661108e612599565b73ffffffffffffffffffffffffffffffffffffffff16145b6110af57600080fd5b80600a8190555050565b6000600254905090565b60006009544310156110d8576000905061123f565b600a54431061112857600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061123f565b600061117c600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544361376690919063ffffffff16565b905060006111d4600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a5461376690919063ffffffff16565b905061123a8161122c84600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137e990919063ffffffff16565b61386f90919063ffffffff16565b925050505b919050565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006112758484846138f8565b61133684611281613567565b611331856040518060600160405280602881526020016149b060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112e7613567565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d19092919063ffffffff16565b61356f565b600190509392505050565b611349613567565b73ffffffffffffffffffffffffffffffffffffffff16611367612599565b73ffffffffffffffffffffffffffffffffffffffff16146113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206c6f636b20746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61149c82611bdf565b811115611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206c6f636b20616d6f756e74206f7665722062616c616e63650081525060200191505060405180910390fd5b61151c8230836138f8565b61156e81600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115c681600854613a8b90919063ffffffff16565b600881905550600954600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561165c57600954600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff167f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d427826040518082815260200191505060405180910390a25050565b6000600560009054906101000a900460ff16905090565b6000600754905090565b60006117786116dc613567565b8461177385600160006116ed613567565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b61356f565b6001905092915050565b6000600854905090565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061181657503373ffffffffffffffffffffffffffffffffffffffff166117fe612599565b73ffffffffffffffffffffffffffffffffffffffff16145b61181f57600080fd5b8060078190555050565b611831613567565b73ffffffffffffffffffffffffffffffffffffffff1661184f612599565b73ffffffffffffffffffffffffffffffffffffffff16146118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6118e28282613b13565b61194d6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613cda565b5050565b611959613567565b73ffffffffffffffffffffffffffffffffffffffff16611977612599565b73ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a3957600080fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611af0611aa283611bdf565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b9050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611bb33382613f77565b50565b60095481565b600f6020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c2f613567565b73ffffffffffffffffffffffffffffffffffffffff16611c4d612599565b73ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611e2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806148c3602d913960400191505060405180910390fd5b611e8181600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f1681600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376690919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f6e8160085461376690919063ffffffff16565b600881905550600954600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561200457600954600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561210e57600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f5317ebfc0ec3457aaee1706ade06359db30a72c13fc9e937354e852bd9e43df9836040518082815260200191505060405180910390a35050565b60004382106121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806148026032913960400191505060405180910390fd5b6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16141561223e576000915050612532565b82600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161161232857600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff16815260200190815260200160002060010154915050612532565b82600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611156123a9576000915050612532565b6000806001830390505b8163ffffffff168163ffffffff1611156124cc576000600283830363ffffffff16816123db57fe5b04820390506123e86147e1565b600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1614156124a457806020015195505050505050612532565b86816000015163ffffffff1610156124be578193506124c5565b6001820392505b50506123b3565b600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b60106020528060005260406000206000915090505481565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b60006125d36110b9565b905090565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156126705780601f1061264557610100808354040283529160200191612670565b820191906000526020600020905b81548152906001019060200180831161265357829003601f168201915b5050505050905090565b61270b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156127de57600954600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156128e857600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612985338261298033611bdf565b6138f8565b50565b6000612a4b612995613567565b84612a4685604051806060016040528060258152602001614a5260259139600160006129bf613567565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d19092919063ffffffff16565b61356f565b6001905092915050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612b0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f45524332303a2063616e6e6f7420756e6c6f636b00000000000000000000000081525060200191505060405180910390fd5b6000612b15336110c3565b9050612b2030611bdf565b811115612b3357612b3030611bdf565b90505b612b3e3033836138f8565b612b9081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376690919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c2c8160085461376690919063ffffffff16565b60088190555050565b6000612c49612c42613567565b84846138f8565b6001905092915050565b600080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611612cbd576000612d21565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60066020528060005260406000206000915054906101000a900460ff1681565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dd357503373ffffffffffffffffffffffffffffffffffffffff16612dbb612599565b73ffffffffffffffffffffffffffffffffffffffff16145b612ddc57600080fd5b8060098190555050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866612e11610f5c565b80519060200120612e206140e8565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612fa4573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613036576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806149d86031913960400191505060405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505589146130db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614834602d913960400191505060405180910390fd5b87421115613134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061495e6031913960400191505060405180910390fd5b61313e818b613f77565b50505050505050505050565b6000613154611782565b905090565b613161613567565b73ffffffffffffffffffffffffffffffffffffffff1661317f612599565b73ffffffffffffffffffffffffffffffffffffffff1614613208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600e602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b613357613567565b73ffffffffffffffffffffffffffffffffffffffff16613375612599565b73ffffffffffffffffffffffffffffffffffffffff16146133fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613484576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148f06026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006135626008546135546110b9565b61376690919063ffffffff16565b905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614a2e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561367b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149166022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000828211156137de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000808314156137fc5760009050613869565b600082840290508284828161380d57fe5b0414613864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061498f6021913960400191505060405180910390fd5b809150505b92915050565b60008082116138e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b8183816138ef57fe5b04905092915050565b6139038383836140f5565b6139cc600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613cda565b505050565b6000838311158290613a7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a43578082015181840152602081019050613a28565b50505050905090810190601f168015613a705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600080828401905083811015613b09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b613bc2600083836143b6565b613bd781600254613a8b90919063ffffffff16565b600281905550613c2e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613d165750600081115b15613f7257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613e46576000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613db9576000613e1d565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613e34848361376690919063ffffffff16565b9050613e428684848461448d565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613f71576000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611613ee4576000613f48565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000613f5f8483613a8b90919063ffffffff16565b9050613f6d8584848461448d565b5050505b5b505050565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000613fe684611bdf565b905082600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46140e2828483613cda565b50505050565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561417b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614a096025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806148616023913960400191505060405180910390fd5b61420c8383836143b6565b61427781604051806060016040528060268152602001614938602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d19092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061430a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a8b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6143c1838383614721565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561448857600754614413826144056110b9565b613a8b90919063ffffffff16565b1115614487576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f45524332304361707065643a206361702065786365656465640000000000000081525060200191505060405180910390fd5b5b505050565b60006144b1436040518060600160405280603f8152602001614884603f9139614726565b905060008463ffffffff1611801561454657508063ffffffff16600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156145b75781600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff168152602001908152602001600020600101819055506146c4565b60405180604001604052808263ffffffff16815260200183815250600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b505050565b6000640100000000831082906147d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561479c578082015181840152602081019050614781565b50505050905090810190601f1680156147c95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe476f7665726e616e6365546f6b656e3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e6564476f7665726e616e6365546f6b656e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e636545524332303a207472616e7366657220746f20746865207a65726f2061646472657373476f7665726e616e6365546f6b656e3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a207472616e7366657220616d6f756e742065786365656473206c6f636b65642062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365476f7665726e616e6365546f6b656e3a3a64656c656761746542795369673a207369676e61747572652065787069726564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365476f7665726e616e6365546f6b656e3a3a64656c656761746542795369673a20696e76616c6964207369676e617475726545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b70f6ef98e8aa83315d0e97371173792bfb3d7aa5979475ae2aea8d578ab575064736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000006765c793fa10079d0000000000000000000000000000000000000000000000000000000000000000151eda0000000000000000000000000000000000000000000000000000000000200e914000000000000000000000000000000000000000000000000000000000000000953656120546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035345410000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Sea Token
Arg [1] : _symbol (string): SEA
Arg [2] : cap_ (uint256): 2000000000000000000000000000
Arg [3] : _lockFromBlock (uint256): 22146464
Arg [4] : _lockToBlock (uint256): 33614100
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 000000000000000000000000000000000000000006765c793fa10079d0000000
Arg [3] : 000000000000000000000000000000000000000000000000000000000151eda0
Arg [4] : 000000000000000000000000000000000000000000000000000000000200e914
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [6] : 53656120546f6b656e0000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 5345410000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
25663:16595:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16639:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18785:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27101:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17738:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30603:522;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34205:155;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19436:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30001:594;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17582:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26649:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20166:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27540:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26815:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29078:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3926:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29614:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35304:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29758:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35569;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25787:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34084:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17909:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2932:148;;;:::i;:::-;;32262:934;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38186:1304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34661:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29870:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2281:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25822:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27434:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16849:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31733:517;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20887:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31133:508;;;:::i;:::-;;18249:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37519:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3646:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26947:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36107:1211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27335:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3818:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18487:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34454:126;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33947:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3235:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27216:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16639:91;16684:13;16717:5;16710:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16639:91;:::o;18785:169::-;18868:4;18885:39;18894:12;:10;:12::i;:::-;18908:7;18917:6;18885:8;:39::i;:::-;18942:4;18935:11;;18785:169;;;;:::o;27101:107::-;3742:10;:22;3753:10;3742:22;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;3779:10;3768:21;;:7;:5;:7::i;:::-;:21;;;3742:47;3734:56;;;;;;27190:10:::1;27176:11;:24;;;;27101:107:::0;:::o;17738:108::-;17799:7;17826:12;;17819:19;;17738:108;:::o;30603:522::-;30666:7;30705:13;;30690:12;:28;30686:432;;;30742:1;30735:8;;;;30686:432;30781:11;;30765:12;:27;30761:357;;30816:6;:15;30823:7;30816:15;;;;;;;;;;;;;;;;30809:22;;;;30761:357;30864:20;30887:43;30904:16;:25;30921:7;30904:25;;;;;;;;;;;;;;;;30887:12;:16;;:43;;;;:::i;:::-;30864:66;;30945:23;30988:42;31004:16;:25;31021:7;31004:25;;;;;;;;;;;;;;;;30988:11;;:15;;:42;;;;:::i;:::-;30945:85;;31052:54;31090:15;31052:33;31072:12;31052:6;:15;31059:7;31052:15;;;;;;;;;;;;;;;;:19;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;31045:61;;;;30603:522;;;;:::o;34205:155::-;34256:104;34205:155;:::o;19436:321::-;19542:4;19559:36;19569:6;19577:9;19588:6;19559:9;:36::i;:::-;19606:121;19615:6;19623:12;:10;:12::i;:::-;19637:89;19675:6;19637:89;;;;;;;;;;;;;;;;;:11;:19;19649:6;19637:19;;;;;;;;;;;;;;;:33;19657:12;:10;:12::i;:::-;19637:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;19606:8;:121::i;:::-;19745:4;19738:11;;19436:321;;;;;:::o;30001:594::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30104:1:::1;30085:21;;:7;:21;;;;30077:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30186:18;30196:7;30186:9;:18::i;:::-;30175:7;:29;;30153:110;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30276:42;30286:7;30303:4;30310:7;30276:9;:42::i;:::-;30349:28;30369:7;30349:6;:15;30356:7;30349:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30331:6;:15;30338:7;30331:15;;;;;;;;;;;;;;;:46;;;;30401:23;30416:7;30401:10;;:14;;:23;;;;:::i;:::-;30388:10;:36;;;;30467:13;;30439:16;:25;30456:7;30439:25;;;;;;;;;;;;;;;;:41;30435:115;;;30525:13;;30497:16;:25;30514:7;30497:25;;;;;;;;;;;;;;;:41;;;;30435:115;30570:7;30565:22;;;30579:7;30565:22;;;;;;;;;;;;;;;;;;30001:594:::0;;:::o;17582:91::-;17631:5;17656:9;;;;;;;;;;;17649:16;;17582:91;:::o;26649:75::-;26685:7;26712:4;;26705:11;;26649:75;:::o;20166:218::-;20254:4;20271:83;20280:12;:10;:12::i;:::-;20294:7;20303:50;20342:10;20303:11;:25;20315:12;:10;:12::i;:::-;20303:25;;;;;;;;;;;;;;;:34;20329:7;20303:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20271:8;:83::i;:::-;20372:4;20365:11;;20166:218;;;;:::o;27540:87::-;27582:7;27609:10;;27602:17;;27540:87;:::o;26815:91::-;3742:10;:22;3753:10;3742:22;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;3779:10;3768:21;;:7;:5;:7::i;:::-;:21;;;3742:47;3734:56;;;;;;26891:7:::1;26884:4;:14;;;;26815:91:::0;:::o;29078:162::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29150:19:::1;29156:3;29161:7;29150:5;:19::i;:::-;29180:52;29203:1;29207:10;:15;29218:3;29207:15;;;;;;;;;;;;;;;;;;;;;;;;;29224:7;29180:14;:52::i;:::-;29078:162:::0;;:::o;3926:153::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4020:10:::1;4007:23;;:9;:23;;;;3999:32;;;::::0;::::1;;4066:5;4042:10;:21;4053:9;4042:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;3926:153:::0;:::o;29614:136::-;29676:7;29703:39;29723:18;29733:7;29723:9;:18::i;:::-;29703:6;:15;29710:7;29703:15;;;;;;;;;;;;;;;;:19;;:39;;;;:::i;:::-;29696:46;;29614:136;;;:::o;35304:117::-;35365:7;35392:10;:21;35403:9;35392:21;;;;;;;;;;;;;;;;;;;;;;;;;35385:28;;35304:117;;;:::o;29758:104::-;29812:7;29839:6;:15;29846:7;29839:15;;;;;;;;;;;;;;;;29832:22;;29758:104;;;:::o;35569:::-;35633:32;35643:10;35655:9;35633;:32::i;:::-;35569:104;:::o;25787:28::-;;;;:::o;34084:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;17909:127::-;17983:7;18010:9;:18;18020:7;18010:18;;;;;;;;;;;;;;;;18003:25;;17909:127;;;:::o;2932:148::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:1:::1;3002:40;;3023:6;;;;;;;;;;;3002:40;;;;;;;;;;;;3070:1;3053:6;;:19;;;;;;;;;;;;;;;;;;2932:148::o:0;32262:934::-;32424:6;:18;32431:10;32424:18;;;;;;;;;;;;;;;;32414:6;:28;;32406:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32554:23;32570:6;32554;:11;32561:3;32554:11;;;;;;;;;;;;;;;;:15;;:23;;;;:::i;:::-;32540:6;:11;32547:3;32540:11;;;;;;;;;;;;;;;:37;;;;32651:30;32674:6;32651;:18;32658:10;32651:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;32630:6;:18;32637:10;32630:18;;;;;;;;;;;;;;;:51;;;;32742:22;32757:6;32742:10;;:14;;:22;;;;:::i;:::-;32729:10;:35;;;;32904:13;;32880:16;:21;32897:3;32880:21;;;;;;;;;;;;;;;;:37;32876:107;;;32958:13;;32934:16;:21;32951:3;32934:21;;;;;;;;;;;;;;;:37;;;;32876:107;33023:16;:28;33040:10;33023:28;;;;;;;;;;;;;;;;32999:16;:21;33016:3;32999:21;;;;;;;;;;;;;;;;:52;32995:137;;;33092:16;:28;33109:10;33092:28;;;;;;;;;;;;;;;;33068:16;:21;33085:3;33068:21;;;;;;;;;;;;;;;:52;;;;32995:137;33176:3;33149:39;;33164:10;33149:39;;;33181:6;33149:39;;;;;;;;;;;;;;;;;;32262:934;;:::o;38186:1304::-;38297:7;38358:12;38344:11;:26;38322:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38461:19;38483:14;:23;38498:7;38483:23;;;;;;;;;;;;;;;;;;;;;;;;;38461:45;;38537:1;38521:12;:17;;;38517:58;;;38562:1;38555:8;;;;;38517:58;38687:11;38635;:20;38647:7;38635:20;;;;;;;;;;;;;;;:38;38671:1;38656:12;:16;38635:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;38631:147;;38722:11;:20;38734:7;38722:20;;;;;;;;;;;;;;;:38;38758:1;38743:12;:16;38722:38;;;;;;;;;;;;;;;:44;;;38715:51;;;;;38631:147;38875:11;38839;:20;38851:7;38839:20;;;;;;;;;;;;;;;:23;38860:1;38839:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;38835:88;;;38910:1;38903:8;;;;;38835:88;38935:12;38962;38992:1;38977:12;:16;38962:31;;39004:428;39019:5;39011:13;;:5;:13;;;39004:428;;;39041:13;39083:1;39074:5;39066;:13;39065:19;;;;;;;;39057:5;:27;39041:43;;39126:20;;:::i;:::-;39149:11;:20;39161:7;39149:20;;;;;;;;;;;;;;;:28;39170:6;39149:28;;;;;;;;;;;;;;;39126:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39212:11;39196:2;:12;;;:27;;;39192:229;;;39251:2;:8;;;39244:15;;;;;;;;;39192:229;39300:11;39285:2;:12;;;:26;;;39281:140;;;39340:6;39332:14;;39281:140;;;39404:1;39395:6;:10;39387:18;;39281:140;39004:428;;;;;39449:11;:20;39461:7;39449:20;;;;;;;;;;;;;;;:27;39470:5;39449:27;;;;;;;;;;;;;;;:33;;;39442:40;;;;;38186:1304;;;;;:::o;34661:41::-;;;;;;;;;;;;;;;;;:::o;29870:123::-;29933:7;29960:16;:25;29977:7;29960:25;;;;;;;;;;;;;;;;29953:32;;29870:123;;;:::o;2281:87::-;2327:7;2354:6;;;;;;;;;;;2347:13;;2281:87;:::o;25822:26::-;;;;:::o;27434:98::-;27484:7;27511:13;:11;:13::i;:::-;27504:20;;27434:98;:::o;16849:95::-;16896:13;16929:7;16922:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16849:95;:::o;31733:517::-;31799:35;31815:6;:18;31822:10;31815:18;;;;;;;;;;;;;;;;31799:6;:11;31806:3;31799:11;;;;;;;;;;;;;;;;:15;;:35;;;;:::i;:::-;31785:6;:11;31792:3;31785:11;;;;;;;;;;;;;;;:49;;;;31875:13;;31851:16;:21;31868:3;31851:21;;;;;;;;;;;;;;;;:37;31847:107;;;31929:13;;31905:16;:21;31922:3;31905:21;;;;;;;;;;;;;;;:37;;;;31847:107;31994:16;:28;32011:10;31994:28;;;;;;;;;;;;;;;;31970:16;:21;31987:3;31970:21;;;;;;;;;;;;;;;;:52;31966:137;;;32063:16;:28;32080:10;32063:28;;;;;;;;;;;;;;;;32039:16;:21;32056:3;32039:21;;;;;;;;;;;;;;;:52;;;;31966:137;32136:1;32115:6;:18;32122:10;32115:18;;;;;;;;;;;;;;;:22;;;;32179:1;32148:16;:28;32165:10;32148:28;;;;;;;;;;;;;;;:32;;;;32193:49;32203:10;32215:3;32220:21;32230:10;32220:9;:21::i;:::-;32193:9;:49::i;:::-;31733:517;:::o;20887:269::-;20980:4;20997:129;21006:12;:10;:12::i;:::-;21020:7;21029:96;21068:15;21029:96;;;;;;;;;;;;;;;;;:11;:25;21041:12;:10;:12::i;:::-;21029:25;;;;;;;;;;;;;;;:34;21055:7;21029:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20997:8;:129::i;:::-;21144:4;21137:11;;20887:269;;;;:::o;31133:508::-;31198:1;31177:6;:18;31184:10;31177:18;;;;;;;;;;;;;;;;:22;31169:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31237:14;31254:27;31270:10;31254:15;:27::i;:::-;31237:44;;31331:24;31349:4;31331:9;:24::i;:::-;31322:6;:33;31318:99;;;31381:24;31399:4;31381:9;:24::i;:::-;31372:33;;31318:99;31427:44;31445:4;31452:10;31464:6;31427:9;:44::i;:::-;31503:30;31526:6;31503;:18;31510:10;31503:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;31482:6;:18;31489:10;31482:18;;;;;;;;;;;;;;;:51;;;;31575:12;31544:16;:28;31561:10;31544:28;;;;;;;;;;;;;;;:43;;;;31611:22;31626:6;31611:10;;:14;;:22;;;;:::i;:::-;31598:10;:35;;;;31133:508;:::o;18249:175::-;18335:4;18352:42;18362:12;:10;:12::i;:::-;18376:9;18387:6;18352:9;:42::i;:::-;18412:4;18405:11;;18249:175;;;;:::o;37519:236::-;37584:7;37604:19;37626:14;:23;37641:7;37626:23;;;;;;;;;;;;;;;;;;;;;;;;;37604:45;;37695:1;37680:12;:16;;;:67;;37746:1;37680:67;;;37699:11;:20;37711:7;37699:20;;;;;;;;;;;;;;;:38;37735:1;37720:12;:16;37699:38;;;;;;;;;;;;;;;:44;;;37680:67;37660:87;;;37519:236;;;:::o;3646:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;26947:115::-;3742:10;:22;3753:10;3742:22;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;3779:10;3768:21;;:7;:5;:7::i;:::-;:21;;;3742:47;3734:56;;;;;;27042:12:::1;27026:13;:28;;;;26947:115:::0;:::o;36107:1211::-;36292:23;34256:104;36446:6;:4;:6::i;:::-;36430:24;;;;;;36477:12;:10;:12::i;:::-;36520:4;36359:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36331:228;;;;;;36292:267;;36572:18;34509:71;36666:9;36677:5;36684:6;36634:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36606:100;;;;;;36572:134;;36719:14;36806:15;36823:10;36777:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36749:100;;;;;;36719:130;;36862:17;36882:26;36892:6;36900:1;36903;36906;36882:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36862:46;;36962:1;36941:23;;:9;:23;;;;36919:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37083:6;:17;37090:9;37083:17;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;37074:5;:28;37052:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37201:6;37194:3;:13;;37186:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37279:31;37289:9;37300;37279;:31::i;:::-;37272:38;;;;36107:1211;;;;;;:::o;27335:91::-;27380:7;27407:11;:9;:11::i;:::-;27400:18;;27335:91;:::o;3818:100::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3906:4:::1;3885:10;:18;3896:6;3885:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;3818:100:::0;:::o;18487:151::-;18576:7;18603:11;:18;18615:5;18603:18;;;;;;;;;;;;;;;:27;18622:7;18603:27;;;;;;;;;;;;;;;;18596:34;;18487:151;;;;:::o;34454:126::-;34509:71;34454:126;:::o;33947:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3235:244::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3344:1:::1;3324:22;;:8;:22;;;;3316:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3434:8;3405:38;;3426:6;;;;;;;;;;;3405:38;;;;;;;;;;;;3463:8;3454:6;;:17;;;;;;;;;;;;;;;;;;3235:244:::0;:::o;27216:111::-;27263:7;27290:29;27308:10;;27290:13;:11;:13::i;:::-;:17;;:29;;;;:::i;:::-;27283:36;;27216:111;:::o;776:106::-;829:15;864:10;857:17;;776:106;:::o;24034:346::-;24153:1;24136:19;;:5;:19;;;;24128:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24234:1;24215:21;;:7;:21;;;;24207:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24318:6;24288:11;:18;24300:5;24288:18;;;;;;;;;;;;;;;:27;24307:7;24288:27;;;;;;;;;;;;;;;:36;;;;24356:7;24340:32;;24349:5;24340:32;;;24365:6;24340:32;;;;;;;;;;;;;;;;;;24034:346;;;:::o;10233:158::-;10291:7;10324:1;10319;:6;;10311:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10382:1;10378;:5;10371:12;;10233:158;;;;:::o;10650:220::-;10708:7;10737:1;10732;:6;10728:20;;;10747:1;10740:8;;;;10728:20;10759:9;10775:1;10771;:5;10759:17;;10804:1;10799;10795;:5;;;;;;:10;10787:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10861:1;10854:8;;;10650:220;;;;;:::o;11348:153::-;11406:7;11438:1;11434;:5;11426:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11492:1;11488;:5;;;;;;11481:12;;11348:153;;;;:::o;28718:267::-;28859:42;28875:6;28883:9;28894:6;28859:15;:42::i;:::-;28912:65;28927:10;:18;28938:6;28927:18;;;;;;;;;;;;;;;;;;;;;;;;;28947:10;:21;28958:9;28947:21;;;;;;;;;;;;;;;;;;;;;;;;;28970:6;28912:14;:65::i;:::-;28718:267;;;:::o;12598:166::-;12684:7;12717:1;12712;:6;;12720:12;12704:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12755:1;12751;:5;12744:12;;12598:166;;;;;:::o;9771:179::-;9829:7;9849:9;9865:1;9861;:5;9849:17;;9890:1;9885;:6;;9877:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9941:1;9934:8;;;9771:179;;;;:::o;22467:378::-;22570:1;22551:21;;:7;:21;;;;22543:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22621:49;22650:1;22654:7;22663:6;22621:20;:49::i;:::-;22698:24;22715:6;22698:12;;:16;;:24;;;;:::i;:::-;22683:12;:39;;;;22754:30;22777:6;22754:9;:18;22764:7;22754:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;22733:9;:18;22743:7;22733:18;;;;;;;;;;;;;;;:51;;;;22821:7;22800:37;;22817:1;22800:37;;;22830:6;22800:37;;;;;;;;;;;;;;;;;;22467:378;;:::o;39885:1123::-;40025:6;40015:16;;:6;:16;;;;:30;;;;;40044:1;40035:6;:10;40015:30;40011:990;;;40084:1;40066:20;;:6;:20;;;40062:456;;40155:16;40174:14;:22;40189:6;40174:22;;;;;;;;;;;;;;;;;;;;;;;;;40155:41;;40215:17;40268:1;40256:9;:13;;;:110;;40365:1;40256:110;;;40297:11;:19;40309:6;40297:19;;;;;;;;;;;;;;;:34;40329:1;40317:9;:13;40297:34;;;;;;;;;;;;;;;:40;;;40256:110;40215:151;;40385:17;40405:21;40419:6;40405:9;:13;;:21;;;;:::i;:::-;40385:41;;40445:57;40462:6;40470:9;40481;40492;40445:16;:57::i;:::-;40062:456;;;;40556:1;40538:20;;:6;:20;;;40534:456;;40627:16;40646:14;:22;40661:6;40646:22;;;;;;;;;;;;;;;;;;;;;;;;;40627:41;;40687:17;40740:1;40728:9;:13;;;:110;;40837:1;40728:110;;;40769:11;:19;40781:6;40769:19;;;;;;;;;;;;;;;:34;40801:1;40789:9;:13;40769:34;;;;;;;;;;;;;;;:40;;;40728:110;40687:151;;40857:17;40877:21;40891:6;40877:9;:13;;:21;;;;:::i;:::-;40857:41;;40917:57;40934:6;40942:9;40953;40964;40917:16;:57::i;:::-;40534:456;;;;40011:990;39885:1123;;;:::o;39498:379::-;39575:23;39601:10;:21;39612:9;39601:21;;;;;;;;;;;;;;;;;;;;;;;;;39575:47;;39633:24;39660:20;39670:9;39660;:20::i;:::-;39633:47;;39715:9;39691:10;:21;39702:9;39691:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;39786:9;39742:54;;39769:15;39742:54;;39758:9;39742:54;;;;;;;;;;;;39809:60;39824:15;39841:9;39852:16;39809:14;:60::i;:::-;39498:379;;;;:::o;42077:178::-;42122:7;42142:15;42203:9;42192:20;;42240:7;42233:14;;;42077:178;:::o;21646:539::-;21770:1;21752:20;;:6;:20;;;;21744:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21854:1;21833:23;;:9;:23;;;;21825:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21909:47;21930:6;21938:9;21949:6;21909:20;:47::i;:::-;21989:71;22011:6;21989:71;;;;;;;;;;;;;;;;;:9;:17;21999:6;21989:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;21969:9;:17;21979:6;21969:17;;;;;;;;;;;;;;;:91;;;;22094:32;22119:6;22094:9;:20;22104:9;22094:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22071:9;:20;22081:9;22071:20;;;;;;;;;;;;;;;:55;;;;22159:9;22142:35;;22151:6;22142:35;;;22170:6;22142:35;;;;;;;;;;;;;;;;;;21646:539;;;:::o;27814:414::-;27957:44;27984:4;27990:2;27994:6;27957:26;:44::i;:::-;28034:1;28018:18;;:4;:18;;;28014:207;;;28144:4;;28115:25;28133:6;28115:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:33;;28089:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28014:207;27814:414;;;:::o;41016:849::-;41181:18;41215:136;41240:12;41215:136;;;;;;;;;;;;;;;;;:6;:136::i;:::-;41181:170;;41397:1;41382:12;:16;;;:98;;;;;41469:11;41415:65;;:11;:22;41427:9;41415:22;;;;;;;;;;;;;;;:40;41453:1;41438:12;:16;41415:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;41382:98;41364:425;;;41556:8;41507:11;:22;41519:9;41507:22;;;;;;;;;;;;;;;:40;41545:1;41530:12;:16;41507:40;;;;;;;;;;;;;;;:46;;:57;;;;41364:425;;;41636:82;;;;;;;;41665:11;41636:82;;;;;;41695:8;41636:82;;;41597:11;:22;41609:9;41597:22;;;;;;;;;;;;;;;:36;41620:12;41597:36;;;;;;;;;;;;;;;:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41776:1;41761:12;:16;41733:14;:25;41748:9;41733:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;41364:425;41827:9;41806:51;;;41838:8;41848;41806:51;;;;;;;;;;;;;;;;;;;;;;;;41016:849;;;;;:::o;25413:92::-;;;;:::o;41873:196::-;41978:6;42014:5;42010:1;:9;42021:12;42002:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42059:1;42045:16;;41873:196;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://b70f6ef98e8aa83315d0e97371173792bfb3d7aa5979475ae2aea8d578ab5750
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.