ERC-20
Overview
Max Total Supply
0 BS
Holders
54
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
RandomGame
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-23 */ // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ 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) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { 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) { unchecked { // 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) { unchecked { 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) { unchecked { 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) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return 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) { return a * b; } /** * @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. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { 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) { 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) { unchecked { 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. * * 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) { unchecked { 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/ERC20Capped.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that adds a cap to the supply of tokens. */ abstract contract ERC20Capped is ERC20 { uint256 private immutable _cap; /** * @dev Sets the value of the `cap`. This value is immutable, it can only be * set once during construction. */ constructor(uint256 cap_) { require(cap_ > 0, "ERC20Capped: cap is 0"); _cap = cap_; } /** * @dev Returns the cap on the token's total supply. */ function cap() public view virtual returns (uint256) { return _cap; } /** * @dev See {ERC20-_mint}. */ function _mint(address account, uint256 amount) internal virtual override { require(ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded"); super._mint(account, amount); } } // File: contracts/RandomGame.sol pragma solidity ^0.8.17; contract RandomGame is ERC20Capped, Ownable { using SafeMath for uint256; mapping(address => uint256) private _balances; uint256 private _totalSupply; string private _name; string private _symbol; enum WalletType { NONE, WHITELISTED, BLACKLISTED } address private teamWallet = 0xaf2AcebE7C2985E7E4eBDebB6B43155D29063C0d; address private marketingWallet = 0x3d742DA42b0B5Ce1040eFD8DD09ECb50037A834f; address private prizeWallet = 0x9f28E3CDA19760EE65A682B1bEf6964d6021EE43; address private circWallet = 0xb5Db75672635b379F3e1bD060b58Fa7E432e30A6; address private treasuryWallet = 0x0B435BF6bD1BFbA0cF3c4a3AEdc77dCD3818b7E8; address private constant uniswapRouterAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address private uniswapV2Pair; IUniswapV2Factory private uniswapV2Factory; IUniswapV2Router02 private uniswapV2Router; uint256 private devSellFees = 2; uint256 private marSellFees = 3; uint256 private priSellFees = 1; uint256 private poolSellFees = 4; uint256 private devBuyFees = 0; uint256 private marBuyFees = 0; uint256 private priBuyFees = 0; uint256 private poolBuyFees = 0; uint256 private totalSellFees = 10; uint256 private totalBuyFees = 0; mapping(address => WalletType) walletOthers; uint256 private multiplier = 10 ** decimals(); bool private isTransferrable = true; bool private isTradingOpened = false; bool private isLiquidityAdded = false; bool private isGameEnabled = true; uint256 private buyRatio = 2; uint256 private sellRatio = 1; uint256 private buyCurrent = 0; uint256 private sellCurrent = 1; uint256 private accumulatedBuy = 0; constructor ( uint256 cap, uint256 initialSupply, string memory _tokenName, string memory _tokenSymbol, address[] memory _presaleAddresses ) ERC20(_tokenName, _tokenSymbol) ERC20Capped(cap * multiplier) { _name = _tokenName; _symbol = _tokenSymbol; uint256 tokensForLiquidity = super.cap().div(2); // 50% of cap goes to liquidity uint256 tokensForPresalers = tokensForLiquidity.mul(40).div(100); // 40% goes to presalers uint256 tokensTotalForUtility = tokensForLiquidity.mul(10).div(100); // 10% goes to utility uint256 tokenForUtility = tokensTotalForUtility.div(4); _mint(owner(), tokensForLiquidity); _mint(circWallet, initialSupply.mul(multiplier).sub(tokensForLiquidity.add(tokensForPresalers).add(tokensTotalForUtility))); _mint(teamWallet, tokenForUtility); _mint(marketingWallet, tokenForUtility); _mint(prizeWallet, tokenForUtility); _mint(treasuryWallet, tokenForUtility); uint256 noOfPresalers = _presaleAddresses.length; for(uint256 i = 0; i < noOfPresalers; i++) { address presaleAddress = _presaleAddresses[i]; walletOthers[presaleAddress] = WalletType.WHITELISTED; _mint(presaleAddress, tokensForPresalers.div(noOfPresalers)); } // Uniswap utilities uniswapV2Router = IUniswapV2Router02(uniswapRouterAddress); uniswapV2Factory = IUniswapV2Factory(uniswapV2Router.factory()); uniswapV2Pair = uniswapV2Factory.createPair(address(this), uniswapV2Router.WETH()); } function addLiquidity(uint256 tokens) external payable onlyOwner { _approve(address(this), address(uniswapRouterAddress), tokens); uniswapV2Router.addLiquidityETH { value: msg.value }( address(this), tokens, 0, 0, owner(), block.timestamp ); isLiquidityAdded = true; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); require(from != to, "You cannot send to yourself."); if( (walletOthers[from] == WalletType.WHITELISTED || walletOthers[to] == WalletType.WHITELISTED) || (from == owner() || to == owner()) || (from != uniswapV2Pair && to != uniswapV2Pair) ) { require(walletOthers[from] != WalletType.BLACKLISTED && walletOthers[to] != WalletType.BLACKLISTED, "Your wallet is currently suspended for sniping."); _rawTransfer(from, to, amount, amount); return; } require(isLiquidityAdded, "Liquidity is not added yet."); require(isTransferrable, "Transferring and trading of token currently paused."); if(isTradingOpened) { if(from == uniswapV2Pair) { if(isGameEnabled) { _triggerBuyGame(amount); } _transferBuy(from, to, amount); } else if (to == uniswapV2Pair) { require(walletOthers[from] != WalletType.BLACKLISTED && walletOthers[to] != WalletType.BLACKLISTED, "Your wallet is currently suspended for sniping."); if(isGameEnabled) { require(sellCurrent != sellRatio, "Please wait for your turn to sell, you need to watch for buy ratio."); require(amount <= accumulatedBuy.div(sellRatio), "Sell must be equal or lower than the accumulated buys divided by sell ratio."); sellCurrent = sellCurrent.add(1); if(sellCurrent == sellRatio) { accumulatedBuy = 0; } } _transferSell(from, to, amount); } } else if(!isTradingOpened) { if(from == uniswapV2Pair) { _rawTransfer(from, treasuryWallet, amount, amount); walletOthers[to] = WalletType.BLACKLISTED; } else if (to == uniswapV2Pair) { revert("Trading is not yet opened."); } } } function _rawTransfer(address from, address to, uint256 amountToBeAdded, uint256 amountToBeSubtracted) internal { _addBalance(to, amountToBeAdded); _subBalance(from, amountToBeSubtracted); emit Transfer(from, to, amountToBeAdded); } function _triggerBuyGame(uint256 amount) internal { if(buyCurrent < buyRatio && sellCurrent == sellRatio) { buyCurrent = buyCurrent.add(1); accumulatedBuy = accumulatedBuy.add(amount); } if (buyCurrent == buyRatio) { sellCurrent = 0; buyCurrent = 0; } } function _transferBuy(address from, address to, uint256 amount) internal { uint256 amountReceivable = amount.sub(amount.mul(totalBuyFees).div(100)); _addBalance(teamWallet, amount.mul(devBuyFees).div(100)); _addBalance(marketingWallet, amount.mul(marBuyFees).div(100)); _addBalance(prizeWallet, amount.mul(priBuyFees).div(100)); _addBalance(uniswapV2Pair, amount.mul(poolBuyFees).div(100)); _rawTransfer(from, to, amountReceivable, amount); } function _transferSell(address from, address to, uint256 amount) internal { uint256 amountReceivable = amount.sub(amount.mul(totalSellFees).div(100)); _addBalance(teamWallet, amount.mul(devSellFees).div(100)); _addBalance(marketingWallet, amount.mul(marSellFees).div(100)); _addBalance(prizeWallet, amount.mul(priSellFees).div(100)); _addBalance(uniswapV2Pair, amount.mul(poolSellFees).div(100)); _rawTransfer(from, to, amountReceivable, amount); } function _addBalance(address _wallet, uint256 _amount) internal { _balances[_wallet] = balanceOf(_wallet).add(_amount); } function _subBalance(address _wallet, uint256 _amount) internal { _balances[_wallet] = balanceOf(_wallet).sub(_amount); } function _mint(address account, uint256 amount) internal override { require(totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded"); _addBalance(account, amount); _totalSupply = _totalSupply.add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal override { require(account != address(0), "ERC20: burn from the zero address"); uint256 accountBalance = balanceOf(account); require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _subBalance(account, amount); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function getWalletOthers(address _wallet) external onlyOwner view returns(WalletType) { WalletType wt = walletOthers[_wallet]; bool exists = (wt == WalletType.NONE ? false : true); require(exists, "No wallet record found."); return wt; } function addWalletOthers(address[] memory _addresses, WalletType _walletType) external onlyOwner { uint256 _addressesLength = _addresses.length; for(uint256 i = 0; i < _addressesLength; i++) { address walletAddressKey = _addresses[i]; walletOthers[walletAddressKey] = _walletType; } } function setFeeUtilities( uint256 _devSellFees, uint256 _marSellFees, uint256 _priSellFees, uint256 _poolSellFees, uint256 _devBuyFees, uint256 _marBuyFees, uint256 _priBuyFees, uint256 _poolBuyFees ) external onlyOwner { devSellFees = _devSellFees; marSellFees = _marSellFees; priSellFees = _priSellFees; poolSellFees = _poolSellFees; devBuyFees = _devBuyFees; marBuyFees = _marBuyFees; priBuyFees = _priBuyFees; poolBuyFees = _poolBuyFees; totalSellFees = devSellFees + marSellFees + priSellFees + poolSellFees; totalBuyFees = devBuyFees + marBuyFees + priBuyFees + poolBuyFees; } function getTradingUtilities() external onlyOwner view returns(bool, bool, bool, bool) { return (isTradingOpened, isGameEnabled, isTransferrable, isLiquidityAdded); } function setTradingUtilities( bool _isTradingOpened, bool _isGameEnabled, bool _isTransferrable, bool _isLiquidityAdded, uint256 _buyRatio, uint256 _sellRatio ) external onlyOwner { isTradingOpened = _isTradingOpened; isGameEnabled = _isGameEnabled; isTransferrable = _isTransferrable; isLiquidityAdded = _isLiquidityAdded; buyRatio = _buyRatio; sellRatio = _sellRatio; buyCurrent = 0; sellCurrent = _sellRatio; accumulatedBuy = 0; } function setWalletUtilities( address _teamWallet, address _marketingWallet, address _prizeWallet, address _treasuryWallet, address _circWallet, address _uniswapV2Pair ) external onlyOwner { teamWallet = _teamWallet; marketingWallet = _marketingWallet; prizeWallet = _prizeWallet; treasuryWallet = _treasuryWallet; circWallet = _circWallet; uniswapV2Pair = _uniswapV2Pair; } function setTokenNameAndSymbol(string memory _tokenName, string memory _tokenSymbol) external onlyOwner { _name = _tokenName; _symbol = _tokenSymbol; } function _mintNonCirculatingTokens(address account, uint256 amount) external onlyOwner { _mint(account, amount); } function _burnFrom(address account, uint256 amount) external onlyOwner { _burn(account, amount); } function getUniswapV2Pair() external onlyOwner view returns(address) { return uniswapV2Pair; } function getUniswapV2Router() external onlyOwner view returns(IUniswapV2Router02) { return uniswapV2Router; } function getUniswapV2Factory() external onlyOwner view returns(IUniswapV2Factory) { return uniswapV2Factory; } function convertUintToDecimal(uint256 amount) external view returns(uint256) { return amount.mul(multiplier); } function convertDecimalToUint(uint256 amount) external view returns(uint256) { return amount.div(multiplier); } function getAccumulatedBuy() external view returns(uint256) { return accumulatedBuy; } function getBuyAndSellCurrent() external view returns(uint256, uint256) { return (buyCurrent, sellCurrent); } function getBuyAndSellRatio() external view returns(uint256, uint256) { return (buyRatio, sellRatio); } function getSellFees() external view returns(uint256, uint256, uint256, uint256) { return (devSellFees, marSellFees, priSellFees, poolSellFees); } function getBuyFees() external view returns(uint256, uint256, uint256, uint256) { return (devBuyFees, marBuyFees, priSellFees, poolSellFees); } function destroy() external onlyOwner { selfdestruct(payable(owner())); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"cap","type":"uint256"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"address[]","name":"_presaleAddresses","type":"address[]"}],"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_mintNonCirculatingTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"enum RandomGame.WalletType","name":"_walletType","type":"uint8"}],"name":"addWalletOthers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"convertDecimalToUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"convertUintToDecimal","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":[],"name":"destroy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAccumulatedBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyAndSellCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyAndSellRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTradingUtilities","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapV2Factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletOthers","outputs":[{"internalType":"enum RandomGame.WalletType","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devSellFees","type":"uint256"},{"internalType":"uint256","name":"_marSellFees","type":"uint256"},{"internalType":"uint256","name":"_priSellFees","type":"uint256"},{"internalType":"uint256","name":"_poolSellFees","type":"uint256"},{"internalType":"uint256","name":"_devBuyFees","type":"uint256"},{"internalType":"uint256","name":"_marBuyFees","type":"uint256"},{"internalType":"uint256","name":"_priBuyFees","type":"uint256"},{"internalType":"uint256","name":"_poolBuyFees","type":"uint256"}],"name":"setFeeUtilities","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"}],"name":"setTokenNameAndSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTradingOpened","type":"bool"},{"internalType":"bool","name":"_isGameEnabled","type":"bool"},{"internalType":"bool","name":"_isTransferrable","type":"bool"},{"internalType":"bool","name":"_isLiquidityAdded","type":"bool"},{"internalType":"uint256","name":"_buyRatio","type":"uint256"},{"internalType":"uint256","name":"_sellRatio","type":"uint256"}],"name":"setTradingUtilities","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_prizeWallet","type":"address"},{"internalType":"address","name":"_treasuryWallet","type":"address"},{"internalType":"address","name":"_circWallet","type":"address"},{"internalType":"address","name":"_uniswapV2Pair","type":"address"}],"name":"setWalletUtilities","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405273af2acebe7c2985e7e4ebdebb6b43155d29063c0d600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733d742da42b0b5ce1040efd8dd09ecb50037a834f600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739f28e3cda19760ee65a682b1bef6964d6021ee43600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b5db75672635b379f3e1bd060b58fa7e432e30a6600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730b435bf6bd1bfba0cf3c4a3aedc77dcd3818b7e8600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060026012556003601355600160145560046015556000601655600060175560006018556000601955600a601a556000601b55620001ef6200096560201b60201c565b600a620001fd919062000e3f565b601d556001601e60006101000a81548160ff0219169083151502179055506000601e60016101000a81548160ff0219169083151502179055506000601e60026101000a81548160ff0219169083151502179055506001601e60036101000a81548160ff0219169083151502179055506002601f5560016020556000602155600160225560006023553480156200029257600080fd5b5060405162005d9638038062005d968339818101604052810190620002b8919062001194565b601d5485620002c8919062001279565b83838160039081620002db919062001505565b508060049081620002ed919062001505565b5050506000811162000336576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032d906200164d565b60405180910390fd5b8060808181525050506200035f620003536200096e60201b60201c565b6200097660201b60201c565b826008908162000370919062001505565b50816009908162000382919062001505565b506000620003b46002620003a062000a3c60201b62000c471760201c565b62000a4660201b620014311790919060201c565b90506000620003ed6064620003d960288562000a5e60201b620014471790919060201c565b62000a4660201b620014311790919060201c565b9050600062000426606462000412600a8662000a5e60201b620014471790919060201c565b62000a4660201b620014311790919060201c565b905060006200044560048362000a4660201b620014311790919060201c565b9050620004686200045b62000a7660201b60201c565b8562000aa060201b60201c565b62000502600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620004f6620004c685620004b2888a62000bb160201b6200145d1790919060201c565b62000bb160201b6200145d1790919060201c565b620004e2601d548d62000a5e60201b620014471790919060201c565b62000bc960201b620014731790919060201c565b62000aa060201b60201c565b62000536600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168262000aa060201b60201c565b6200056a600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168262000aa060201b60201c565b6200059e600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168262000aa060201b60201c565b620005d2600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168262000aa060201b60201c565b60008551905060005b81811015620006b3576000878281518110620005fc57620005fb6200166f565b5b602002602001015190506001601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360028111156200066c576200066b6200169e565b5b02179055506200069c8162000690858962000a4660201b620014311790919060201c565b62000aa060201b60201c565b508080620006aa90620016cd565b915050620005db565b50737a250d5630b4cf539739df2c5dacb4c659f2488d601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000777573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079d91906200171a565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b091906200171a565b6040518363ffffffff1660e01b8152600401620008cf9291906200175d565b6020604051808303816000875af1158015620008ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200091591906200171a565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050505062001907565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000608051905090565b6000818362000a569190620017b9565b905092915050565b6000818362000a6e919062001279565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000ab062000a3c60201b60201c565b8162000ac162000be160201b60201c565b62000acd9190620017f1565b111562000b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b08906200187c565b60405180910390fd5b62000b23828262000beb60201b60201c565b62000b3f8160075462000bb160201b6200145d1790919060201c565b6007819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ba59190620018af565b60405180910390a35050565b6000818362000bc19190620017f1565b905092915050565b6000818362000bd99190620018cc565b905092915050565b6000600754905090565b62000c158162000c018462000c5c60201b60201c565b62000bb160201b6200145d1790919060201c565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d335780860481111562000d0b5762000d0a62000ca5565b5b600185161562000d1b5780820291505b808102905062000d2b8562000cd4565b945062000ceb565b94509492505050565b60008262000d4e576001905062000e21565b8162000d5e576000905062000e21565b816001811462000d77576002811462000d825762000db8565b600191505062000e21565b60ff84111562000d975762000d9662000ca5565b5b8360020a91508482111562000db15762000db062000ca5565b5b5062000e21565b5060208310610133831016604e8410600b841016171562000df25782820a90508381111562000dec5762000deb62000ca5565b5b62000e21565b62000e01848484600162000ce1565b9250905081840481111562000e1b5762000e1a62000ca5565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000e4c8262000e28565b915062000e598362000e32565b925062000e887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d3c565b905092915050565b6000604051905090565b600080fd5b600080fd5b62000eaf8162000e28565b811462000ebb57600080fd5b50565b60008151905062000ecf8162000ea4565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000f2a8262000edf565b810181811067ffffffffffffffff8211171562000f4c5762000f4b62000ef0565b5b80604052505050565b600062000f6162000e90565b905062000f6f828262000f1f565b919050565b600067ffffffffffffffff82111562000f925762000f9162000ef0565b5b62000f9d8262000edf565b9050602081019050919050565b60005b8381101562000fca57808201518184015260208101905062000fad565b60008484015250505050565b600062000fed62000fe78462000f74565b62000f55565b9050828152602081018484840111156200100c576200100b62000eda565b5b6200101984828562000faa565b509392505050565b600082601f83011262001039576200103862000ed5565b5b81516200104b84826020860162000fd6565b91505092915050565b600067ffffffffffffffff82111562001072576200107162000ef0565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010b58262001088565b9050919050565b620010c781620010a8565b8114620010d357600080fd5b50565b600081519050620010e781620010bc565b92915050565b600062001104620010fe8462001054565b62000f55565b905080838252602082019050602084028301858111156200112a576200112962001083565b5b835b81811015620011575780620011428882620010d6565b8452602084019350506020810190506200112c565b5050509392505050565b600082601f83011262001179576200117862000ed5565b5b81516200118b848260208601620010ed565b91505092915050565b600080600080600060a08688031215620011b357620011b262000e9a565b5b6000620011c38882890162000ebe565b9550506020620011d68882890162000ebe565b945050604086015167ffffffffffffffff811115620011fa57620011f962000e9f565b5b620012088882890162001021565b935050606086015167ffffffffffffffff8111156200122c576200122b62000e9f565b5b6200123a8882890162001021565b925050608086015167ffffffffffffffff8111156200125e576200125d62000e9f565b5b6200126c8882890162001161565b9150509295509295909350565b6000620012868262000e28565b9150620012938362000e28565b9250828202620012a38162000e28565b91508282048414831517620012bd57620012bc62000ca5565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200131757607f821691505b6020821081036200132d576200132c620012cf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620013977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001358565b620013a3868362001358565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620013e6620013e0620013da8462000e28565b620013bb565b62000e28565b9050919050565b6000819050919050565b6200140283620013c5565b6200141a6200141182620013ed565b84845462001365565b825550505050565b600090565b6200143162001422565b6200143e818484620013f7565b505050565b5b8181101562001466576200145a60008262001427565b60018101905062001444565b5050565b601f821115620014b5576200147f8162001333565b6200148a8462001348565b810160208510156200149a578190505b620014b2620014a98562001348565b83018262001443565b50505b505050565b600082821c905092915050565b6000620014da60001984600802620014ba565b1980831691505092915050565b6000620014f58383620014c7565b9150826002028217905092915050565b6200151082620012c4565b67ffffffffffffffff8111156200152c576200152b62000ef0565b5b620015388254620012fe565b620015458282856200146a565b600060209050601f8311600181146200157d576000841562001568578287015190505b620015748582620014e7565b865550620015e4565b601f1984166200158d8662001333565b60005b82811015620015b75784890151825560018201915060208501945060208101905062001590565b86831015620015d75784890151620015d3601f891682620014c7565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332304361707065643a2063617020697320300000000000000000000000600082015250565b600062001635601583620015ec565b91506200164282620015fd565b602082019050919050565b60006020820190508181036000830152620016688162001626565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000620016da8262000e28565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200170f576200170e62000ca5565b5b600182019050919050565b60006020828403121562001733576200173262000e9a565b5b60006200174384828501620010d6565b91505092915050565b6200175781620010a8565b82525050565b60006040820190506200177460008301856200174c565b6200178360208301846200174c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620017c68262000e28565b9150620017d38362000e28565b925082620017e657620017e56200178a565b5b828204905092915050565b6000620017fe8262000e28565b91506200180b8362000e28565b925082820190508082111562001826576200182562000ca5565b5b92915050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b600062001864601983620015ec565b915062001871826200182c565b602082019050919050565b60006020820190508181036000830152620018978162001855565b9050919050565b620018a98162000e28565b82525050565b6000602082019050620018c660008301846200189e565b92915050565b6000620018d98262000e28565b9150620018e68362000e28565b925082820390508181111562001901576200190062000ca5565b5b92915050565b608051614473620019236000396000610c4b01526144736000f3fe60806040526004361061020e5760003560e01c806383197ef011610118578063a457c2d7116100a0578063dd5594361161006f578063dd5594361461079f578063dd62ed3e146107cb578063dfe565d314610808578063e94c510814610845578063f2fde38b1461086e5761020e565b8063a457c2d7146106bf578063a9059cbb146106fc578063ae329ed114610739578063ba50341b146107765761020e565b80639973277d116100e75780639973277d146105dc5780639a708be3146106195780639f090b8d14610642578063a0889de61461066b578063a22b35ce146106965761020e565b806383197ef0146105465780638da5cb5b1461055d57806395d89b4114610588578063983a8b90146105b35761020e565b80632878ab8e1161019b578063395093511161016a578063395093511461046b57806351c6590a146104a8578063685fc568146104c457806370a08231146104f2578063715018a61461052f5761020e565b80632878ab8e146103be578063289c7cc8146103ec578063313ce56714610415578063355274ea146104405761020e565b8063095ea7b3116101e2578063095ea7b3146102c257806314c08bdc146102ff57806318160ddd1461032b5780631abfa6291461035657806323b872dd146103815761020e565b806271c175146102135780630103982d1461023e5780630644e7571461026957806306fdde0314610297575b600080fd5b34801561021f57600080fd5b50610228610897565b6040516102359190612a55565b60405180910390f35b34801561024a57600080fd5b506102536108c9565b6040516102609190612a91565b60405180910390f35b34801561027557600080fd5b5061027e6108fb565b60405161028e9493929190612ac5565b60405180910390f35b3480156102a357600080fd5b506102ac61091b565b6040516102b99190612b9a565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e49190612c3a565b6109ad565b6040516102f69190612c95565b60405180910390f35b34801561030b57600080fd5b506103146109d0565b604051610322929190612cb0565b60405180910390f35b34801561033757600080fd5b506103406109e1565b60405161034d9190612cd9565b60405180910390f35b34801561036257600080fd5b5061036b6109eb565b6040516103789190612d03565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190612d1e565b610a1d565b6040516103b59190612c95565b60405180910390f35b3480156103ca57600080fd5b506103d3610a4c565b6040516103e39493929190612d71565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190612db6565b610aa8565b005b34801561042157600080fd5b5061042a610c3e565b6040516104379190612e5f565b60405180910390f35b34801561044c57600080fd5b50610455610c47565b6040516104629190612cd9565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190612c3a565b610c6f565b60405161049f9190612c95565b60405180910390f35b6104c260048036038101906104bd9190612e7a565b610ca6565b005b3480156104d057600080fd5b506104d9610d9f565b6040516104e99493929190612ac5565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190612ea7565b610dbf565b6040516105269190612cd9565b60405180910390f35b34801561053b57600080fd5b50610544610e08565b005b34801561055257600080fd5b5061055b610e1c565b005b34801561056957600080fd5b50610572610e44565b60405161057f9190612d03565b60405180910390f35b34801561059457600080fd5b5061059d610e6e565b6040516105aa9190612b9a565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190612c3a565b610f00565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190612e7a565b610f16565b6040516106109190612cd9565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613009565b610f34565b005b34801561064e57600080fd5b50610669600480360381019061066491906130ad565b610f60565b005b34801561067757600080fd5b50610680610ffd565b60405161068d9190612cd9565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190612c3a565b611007565b005b3480156106cb57600080fd5b506106e660048036038101906106e19190612c3a565b61101d565b6040516106f39190612c95565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190612c3a565b611094565b6040516107309190612c95565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190612e7a565b6110b7565b60405161076d9190612cd9565b60405180910390f35b34801561078257600080fd5b5061079d6004803603810190610798919061313a565b6110d5565b005b3480156107ab57600080fd5b506107b461117f565b6040516107c2929190612cb0565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906131f0565b611190565b6040516107ff9190612cd9565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a9190612ea7565b611217565b60405161083c91906132a7565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906133af565b6112f5565b005b34801561087a57600080fd5b5061089560048036038101906108909190612ea7565b6113ae565b005b60006108a1611489565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006108d3611489565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600080601654601754601454601554935093509350935090919293565b60606008805461092a9061343a565b80601f01602080910402602001604051908101604052809291908181526020018280546109569061343a565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905090565b6000806109b8611507565b90506109c581858561150f565b600191505092915050565b600080602154602254915091509091565b6000600754905090565b60006109f5611489565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610a28611507565b9050610a358582856116d8565b610a40858585611764565b60019150509392505050565b600080600080610a5a611489565b601e60019054906101000a900460ff16601e60039054906101000a900460ff16601e60009054906101000a900460ff16601e60029054906101000a900460ff16935093509350935090919293565b610ab0611489565b85600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b60006012905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600080610c7a611507565b9050610c9b818585610c8c8589611190565b610c96919061349a565b61150f565b600191505092915050565b610cae611489565b610ccd30737a250d5630b4cf539739df2c5dacb4c659f2488d8361150f565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719343084600080610d19610e44565b426040518863ffffffff1660e01b8152600401610d3b96959493929190613509565b60606040518083038185885af1158015610d59573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d7e919061357f565b5050506001601e60026101000a81548160ff02191690831515021790555050565b600080600080601254601354601454601554935093509350935090919293565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e10611489565b610e1a60006121e9565b565b610e24611489565b610e2c610e44565b73ffffffffffffffffffffffffffffffffffffffff16ff5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610e7d9061343a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea99061343a565b8015610ef65780601f10610ecb57610100808354040283529160200191610ef6565b820191906000526020600020905b815481529060010190602001808311610ed957829003601f168201915b5050505050905090565b610f08611489565b610f1282826122af565b5050565b6000610f2d601d548361143190919063ffffffff16565b9050919050565b610f3c611489565b8160089081610f4b9190613774565b508060099081610f5b9190613774565b505050565b610f68611489565b85601e60016101000a81548160ff02191690831515021790555084601e60036101000a81548160ff02191690831515021790555083601e60006101000a81548160ff02191690831515021790555082601e60026101000a81548160ff02191690831515021790555081601f81905550806020819055506000602181905550806022819055506000602381905550505050505050565b6000602354905090565b61100f611489565b611019828261239a565b5050565b600080611028611507565b905060006110368286611190565b90508381101561107b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611072906138b8565b60405180910390fd5b611088828686840361150f565b60019250505092915050565b60008061109f611507565b90506110ac818585611764565b600191505092915050565b60006110ce601d548361144790919063ffffffff16565b9050919050565b6110dd611489565b876012819055508660138190555085601481905550846015819055508360168190555082601781905550816018819055508060198190555060155460145460135460125461112b919061349a565b611135919061349a565b61113f919061349a565b601a8190555060195460185460175460165461115b919061349a565b611165919061349a565b61116f919061349a565b601b819055505050505050505050565b600080601f54602054915091509091565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611221611489565b6000601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600080600281111561128757611286613230565b5b82600281111561129a57611299613230565b5b146112a65760016112a9565b60005b9050806112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e290613924565b60405180910390fd5b8192505050919050565b6112fd611489565b60008251905060005b818110156113a857600084828151811061132357611322613944565b5b6020026020010151905083601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083600281111561138f5761138e613230565b5b02179055505080806113a090613973565b915050611306565b50505050565b6113b6611489565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613a2d565b60405180910390fd5b61142e816121e9565b50565b6000818361143f9190613a7c565b905092915050565b600081836114559190613aad565b905092915050565b6000818361146b919061349a565b905092915050565b600081836114819190613aef565b905092915050565b611491611507565b73ffffffffffffffffffffffffffffffffffffffff166114af610e44565b73ffffffffffffffffffffffffffffffffffffffff1614611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90613b6f565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590613c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490613c93565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116cb9190612cd9565b60405180910390a3505050565b60006116e48484611190565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461175e5781811015611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790613cff565b60405180910390fd5b61175d848484840361150f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90613d91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183990613e23565b60405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c090613eb5565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90613f21565b60405180910390fd5b6001600281111561194b5761194a613230565b5b601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660028111156119aa576119a9613230565b5b1480611a265750600160028111156119c5576119c4613230565b5b601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115611a2457611a23613230565b5b145b80611aa05750611a34610e44565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a9f5750611a70610e44565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b5b80611b535750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611b525750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611c9957600280811115611b6b57611b6a613230565b5b601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115611bca57611bc9613230565b5b14158015611c485750600280811115611be657611be5613230565b5b601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115611c4557611c44613230565b5b14155b611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e90613fb3565b60405180910390fd5b611c93848484856124e9565b506121e4565b601e60029054906101000a900460ff16611ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdf9061401f565b60405180910390fd5b601e60009054906101000a900460ff16611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e906140b1565b60405180910390fd5b601e60019054906101000a900460ff161561204b57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611dd057601e60039054906101000a900460ff1615611dc057611dbf82612568565b5b611dcb8484846125da565b612046565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361204557600280811115611e3857611e37613230565b5b601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115611e9757611e96613230565b5b14158015611f155750600280811115611eb357611eb2613230565b5b601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115611f1257611f11613230565b5b14155b611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90613fb3565b60405180910390fd5b601e60039054906101000a900460ff16156120395760205460225403611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa690614169565b60405180910390fd5b611fc660205460235461143190919063ffffffff16565b821115612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff90614221565b60405180910390fd5b61201e600160225461145d90919063ffffffff16565b602281905550602054602254036120385760006023819055505b5b612044848484612776565b5b5b6121e2565b601e60019054906101000a900460ff166121e157600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361214f576120e284600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684856124e9565b6002601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083600281111561214557612144613230565b5b02179055506121e0565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d69061428d565b60405180910390fd5b5b5b5b505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122b7610c47565b816122c06109e1565b6122ca919061349a565b111561230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906142f9565b60405180910390fd5b6123158282612912565b61232a8160075461145d90919063ffffffff16565b6007819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161238e9190612cd9565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124009061438b565b60405180910390fd5b600061241483610dbf565b905081811015612459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124509061441d565b60405180910390fd5b6124638383612974565b6124788260075461147390919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124dc9190612cd9565b60405180910390a3505050565b6124f38383612912565b6124fd8482612974565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161255a9190612cd9565b60405180910390a350505050565b601f5460215410801561257e5750602054602254145b156125bb57612599600160215461145d90919063ffffffff16565b6021819055506125b48160235461145d90919063ffffffff16565b6023819055505b601f54602154036125d757600060228190555060006021819055505b50565b600061261661260760646125f9601b548661144790919063ffffffff16565b61143190919063ffffffff16565b8361147390919063ffffffff16565b905061266b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661266660646126586016548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b6126be600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166126b960646126ab6017548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b612711600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661270c60646126fe6018548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b612764600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661275f60646127516019548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b612770848483856124e9565b50505050565b60006127b26127a36064612795601a548661144790919063ffffffff16565b61143190919063ffffffff16565b8361147390919063ffffffff16565b9050612807600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661280260646127f46012548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b61285a600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661285560646128476013548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b6128ad600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128a8606461289a6014548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b612900600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128fb60646128ed6015548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b61290c848483856124e9565b50505050565b61292d8161291f84610dbf565b61145d90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b61298f8161298184610dbf565b61147390919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612a1b612a16612a11846129d6565b6129f6565b6129d6565b9050919050565b6000612a2d82612a00565b9050919050565b6000612a3f82612a22565b9050919050565b612a4f81612a34565b82525050565b6000602082019050612a6a6000830184612a46565b92915050565b6000612a7b82612a22565b9050919050565b612a8b81612a70565b82525050565b6000602082019050612aa66000830184612a82565b92915050565b6000819050919050565b612abf81612aac565b82525050565b6000608082019050612ada6000830187612ab6565b612ae76020830186612ab6565b612af46040830185612ab6565b612b016060830184612ab6565b95945050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b44578082015181840152602081019050612b29565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b6c82612b0a565b612b768185612b15565b9350612b86818560208601612b26565b612b8f81612b50565b840191505092915050565b60006020820190508181036000830152612bb48184612b61565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000612bdb826129d6565b9050919050565b612beb81612bd0565b8114612bf657600080fd5b50565b600081359050612c0881612be2565b92915050565b612c1781612aac565b8114612c2257600080fd5b50565b600081359050612c3481612c0e565b92915050565b60008060408385031215612c5157612c50612bc6565b5b6000612c5f85828601612bf9565b9250506020612c7085828601612c25565b9150509250929050565b60008115159050919050565b612c8f81612c7a565b82525050565b6000602082019050612caa6000830184612c86565b92915050565b6000604082019050612cc56000830185612ab6565b612cd26020830184612ab6565b9392505050565b6000602082019050612cee6000830184612ab6565b92915050565b612cfd81612bd0565b82525050565b6000602082019050612d186000830184612cf4565b92915050565b600080600060608486031215612d3757612d36612bc6565b5b6000612d4586828701612bf9565b9350506020612d5686828701612bf9565b9250506040612d6786828701612c25565b9150509250925092565b6000608082019050612d866000830187612c86565b612d936020830186612c86565b612da06040830185612c86565b612dad6060830184612c86565b95945050505050565b60008060008060008060c08789031215612dd357612dd2612bc6565b5b6000612de189828a01612bf9565b9650506020612df289828a01612bf9565b9550506040612e0389828a01612bf9565b9450506060612e1489828a01612bf9565b9350506080612e2589828a01612bf9565b92505060a0612e3689828a01612bf9565b9150509295509295509295565b600060ff82169050919050565b612e5981612e43565b82525050565b6000602082019050612e746000830184612e50565b92915050565b600060208284031215612e9057612e8f612bc6565b5b6000612e9e84828501612c25565b91505092915050565b600060208284031215612ebd57612ebc612bc6565b5b6000612ecb84828501612bf9565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f1682612b50565b810181811067ffffffffffffffff82111715612f3557612f34612ede565b5b80604052505050565b6000612f48612bbc565b9050612f548282612f0d565b919050565b600067ffffffffffffffff821115612f7457612f73612ede565b5b612f7d82612b50565b9050602081019050919050565b82818337600083830152505050565b6000612fac612fa784612f59565b612f3e565b905082815260208101848484011115612fc857612fc7612ed9565b5b612fd3848285612f8a565b509392505050565b600082601f830112612ff057612fef612ed4565b5b8135613000848260208601612f99565b91505092915050565b600080604083850312156130205761301f612bc6565b5b600083013567ffffffffffffffff81111561303e5761303d612bcb565b5b61304a85828601612fdb565b925050602083013567ffffffffffffffff81111561306b5761306a612bcb565b5b61307785828601612fdb565b9150509250929050565b61308a81612c7a565b811461309557600080fd5b50565b6000813590506130a781613081565b92915050565b60008060008060008060c087890312156130ca576130c9612bc6565b5b60006130d889828a01613098565b96505060206130e989828a01613098565b95505060406130fa89828a01613098565b945050606061310b89828a01613098565b935050608061311c89828a01612c25565b92505060a061312d89828a01612c25565b9150509295509295509295565b600080600080600080600080610100898b03121561315b5761315a612bc6565b5b60006131698b828c01612c25565b985050602061317a8b828c01612c25565b975050604061318b8b828c01612c25565b965050606061319c8b828c01612c25565b95505060806131ad8b828c01612c25565b94505060a06131be8b828c01612c25565b93505060c06131cf8b828c01612c25565b92505060e06131e08b828c01612c25565b9150509295985092959890939650565b6000806040838503121561320757613206612bc6565b5b600061321585828601612bf9565b925050602061322685828601612bf9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106132705761326f613230565b5b50565b60008190506132818261325f565b919050565b600061329182613273565b9050919050565b6132a181613286565b82525050565b60006020820190506132bc6000830184613298565b92915050565b600067ffffffffffffffff8211156132dd576132dc612ede565b5b602082029050602081019050919050565b600080fd5b6000613306613301846132c2565b612f3e565b90508083825260208201905060208402830185811115613329576133286132ee565b5b835b81811015613352578061333e8882612bf9565b84526020840193505060208101905061332b565b5050509392505050565b600082601f83011261337157613370612ed4565b5b81356133818482602086016132f3565b91505092915050565b6003811061339757600080fd5b50565b6000813590506133a98161338a565b92915050565b600080604083850312156133c6576133c5612bc6565b5b600083013567ffffffffffffffff8111156133e4576133e3612bcb565b5b6133f08582860161335c565b92505060206134018582860161339a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061345257607f821691505b6020821081036134655761346461340b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134a582612aac565b91506134b083612aac565b92508282019050808211156134c8576134c761346b565b5b92915050565b6000819050919050565b60006134f36134ee6134e9846134ce565b6129f6565b612aac565b9050919050565b613503816134d8565b82525050565b600060c08201905061351e6000830189612cf4565b61352b6020830188612ab6565b61353860408301876134fa565b61354560608301866134fa565b6135526080830185612cf4565b61355f60a0830184612ab6565b979650505050505050565b60008151905061357981612c0e565b92915050565b60008060006060848603121561359857613597612bc6565b5b60006135a68682870161356a565b93505060206135b78682870161356a565b92505060406135c88682870161356a565b9150509250925092565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136347fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135f7565b61363e86836135f7565b95508019841693508086168417925050509392505050565b600061367161366c61366784612aac565b6129f6565b612aac565b9050919050565b6000819050919050565b61368b83613656565b61369f61369782613678565b848454613604565b825550505050565b600090565b6136b46136a7565b6136bf818484613682565b505050565b5b818110156136e3576136d86000826136ac565b6001810190506136c5565b5050565b601f821115613728576136f9816135d2565b613702846135e7565b81016020851015613711578190505b61372561371d856135e7565b8301826136c4565b50505b505050565b600082821c905092915050565b600061374b6000198460080261372d565b1980831691505092915050565b6000613764838361373a565b9150826002028217905092915050565b61377d82612b0a565b67ffffffffffffffff81111561379657613795612ede565b5b6137a0825461343a565b6137ab8282856136e7565b600060209050601f8311600181146137de57600084156137cc578287015190505b6137d68582613758565b86555061383e565b601f1984166137ec866135d2565b60005b82811015613814578489015182556001820191506020850194506020810190506137ef565b86831015613831578489015161382d601f89168261373a565b8355505b6001600288020188555050505b505050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006138a2602583612b15565b91506138ad82613846565b604082019050919050565b600060208201905081810360008301526138d181613895565b9050919050565b7f4e6f2077616c6c6574207265636f726420666f756e642e000000000000000000600082015250565b600061390e601783612b15565b9150613919826138d8565b602082019050919050565b6000602082019050818103600083015261393d81613901565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061397e82612aac565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139b0576139af61346b565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a17602683612b15565b9150613a22826139bb565b604082019050919050565b60006020820190508181036000830152613a4681613a0a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a8782612aac565b9150613a9283612aac565b925082613aa257613aa1613a4d565b5b828204905092915050565b6000613ab882612aac565b9150613ac383612aac565b9250828202613ad181612aac565b91508282048414831517613ae857613ae761346b565b5b5092915050565b6000613afa82612aac565b9150613b0583612aac565b9250828203905081811115613b1d57613b1c61346b565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b59602083612b15565b9150613b6482613b23565b602082019050919050565b60006020820190508181036000830152613b8881613b4c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613beb602483612b15565b9150613bf682613b8f565b604082019050919050565b60006020820190508181036000830152613c1a81613bde565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7d602283612b15565b9150613c8882613c21565b604082019050919050565b60006020820190508181036000830152613cac81613c70565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ce9601d83612b15565b9150613cf482613cb3565b602082019050919050565b60006020820190508181036000830152613d1881613cdc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d7b602583612b15565b9150613d8682613d1f565b604082019050919050565b60006020820190508181036000830152613daa81613d6e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0d602383612b15565b9150613e1882613db1565b604082019050919050565b60006020820190508181036000830152613e3c81613e00565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613e9f602683612b15565b9150613eaa82613e43565b604082019050919050565b60006020820190508181036000830152613ece81613e92565b9050919050565b7f596f752063616e6e6f742073656e6420746f20796f757273656c662e00000000600082015250565b6000613f0b601c83612b15565b9150613f1682613ed5565b602082019050919050565b60006020820190508181036000830152613f3a81613efe565b9050919050565b7f596f75722077616c6c65742069732063757272656e746c792073757370656e6460008201527f656420666f7220736e6970696e672e0000000000000000000000000000000000602082015250565b6000613f9d602f83612b15565b9150613fa882613f41565b604082019050919050565b60006020820190508181036000830152613fcc81613f90565b9050919050565b7f4c6971756964697479206973206e6f74206164646564207965742e0000000000600082015250565b6000614009601b83612b15565b915061401482613fd3565b602082019050919050565b6000602082019050818103600083015261403881613ffc565b9050919050565b7f5472616e7366657272696e6720616e642074726164696e67206f6620746f6b6560008201527f6e2063757272656e746c79207061757365642e00000000000000000000000000602082015250565b600061409b603383612b15565b91506140a68261403f565b604082019050919050565b600060208201905081810360008301526140ca8161408e565b9050919050565b7f506c65617365207761697420666f7220796f7572207475726e20746f2073656c60008201527f6c2c20796f75206e65656420746f20776174636820666f72206275792072617460208201527f696f2e0000000000000000000000000000000000000000000000000000000000604082015250565b6000614153604383612b15565b915061415e826140d1565b606082019050919050565b6000602082019050818103600083015261418281614146565b9050919050565b7f53656c6c206d75737420626520657175616c206f72206c6f776572207468616e60008201527f2074686520616363756d756c617465642062757973206469766964656420627960208201527f2073656c6c20726174696f2e0000000000000000000000000000000000000000604082015250565b600061420b604c83612b15565b915061421682614189565b606082019050919050565b6000602082019050818103600083015261423a816141fe565b9050919050565b7f54726164696e67206973206e6f7420796574206f70656e65642e000000000000600082015250565b6000614277601a83612b15565b915061428282614241565b602082019050919050565b600060208201905081810360008301526142a68161426a565b9050919050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b60006142e3601983612b15565b91506142ee826142ad565b602082019050919050565b60006020820190508181036000830152614312816142d6565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614375602183612b15565b915061438082614319565b604082019050919050565b600060208201905081810360008301526143a481614368565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614407602283612b15565b9150614412826143ab565b604082019050919050565b60006020820190508181036000830152614436816143fa565b905091905056fea26469706673582212204b57c8bc6eddafc81be52359365e5da78e91ef43775b644fe4af61a0d8c2716464736f6c6343000811003300000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000c350000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000432423153000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002425300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000006a8d4950dc24d87919e76f420a28d5d9a8486a3800000000000000000000000085bef5ae604a12feaa4077b8d5f526a1b7daedc600000000000000000000000056a87f47b184186ef204431776c789b932a32475000000000000000000000000eb0655dbbc9d35cd6ce4b0eb0153e3563d955c420000000000000000000000006321457c799a5ff99de349bd2d8e38e7aa138a97
Deployed Bytecode
0x60806040526004361061020e5760003560e01c806383197ef011610118578063a457c2d7116100a0578063dd5594361161006f578063dd5594361461079f578063dd62ed3e146107cb578063dfe565d314610808578063e94c510814610845578063f2fde38b1461086e5761020e565b8063a457c2d7146106bf578063a9059cbb146106fc578063ae329ed114610739578063ba50341b146107765761020e565b80639973277d116100e75780639973277d146105dc5780639a708be3146106195780639f090b8d14610642578063a0889de61461066b578063a22b35ce146106965761020e565b806383197ef0146105465780638da5cb5b1461055d57806395d89b4114610588578063983a8b90146105b35761020e565b80632878ab8e1161019b578063395093511161016a578063395093511461046b57806351c6590a146104a8578063685fc568146104c457806370a08231146104f2578063715018a61461052f5761020e565b80632878ab8e146103be578063289c7cc8146103ec578063313ce56714610415578063355274ea146104405761020e565b8063095ea7b3116101e2578063095ea7b3146102c257806314c08bdc146102ff57806318160ddd1461032b5780631abfa6291461035657806323b872dd146103815761020e565b806271c175146102135780630103982d1461023e5780630644e7571461026957806306fdde0314610297575b600080fd5b34801561021f57600080fd5b50610228610897565b6040516102359190612a55565b60405180910390f35b34801561024a57600080fd5b506102536108c9565b6040516102609190612a91565b60405180910390f35b34801561027557600080fd5b5061027e6108fb565b60405161028e9493929190612ac5565b60405180910390f35b3480156102a357600080fd5b506102ac61091b565b6040516102b99190612b9a565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e49190612c3a565b6109ad565b6040516102f69190612c95565b60405180910390f35b34801561030b57600080fd5b506103146109d0565b604051610322929190612cb0565b60405180910390f35b34801561033757600080fd5b506103406109e1565b60405161034d9190612cd9565b60405180910390f35b34801561036257600080fd5b5061036b6109eb565b6040516103789190612d03565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190612d1e565b610a1d565b6040516103b59190612c95565b60405180910390f35b3480156103ca57600080fd5b506103d3610a4c565b6040516103e39493929190612d71565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190612db6565b610aa8565b005b34801561042157600080fd5b5061042a610c3e565b6040516104379190612e5f565b60405180910390f35b34801561044c57600080fd5b50610455610c47565b6040516104629190612cd9565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190612c3a565b610c6f565b60405161049f9190612c95565b60405180910390f35b6104c260048036038101906104bd9190612e7a565b610ca6565b005b3480156104d057600080fd5b506104d9610d9f565b6040516104e99493929190612ac5565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190612ea7565b610dbf565b6040516105269190612cd9565b60405180910390f35b34801561053b57600080fd5b50610544610e08565b005b34801561055257600080fd5b5061055b610e1c565b005b34801561056957600080fd5b50610572610e44565b60405161057f9190612d03565b60405180910390f35b34801561059457600080fd5b5061059d610e6e565b6040516105aa9190612b9a565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190612c3a565b610f00565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190612e7a565b610f16565b6040516106109190612cd9565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613009565b610f34565b005b34801561064e57600080fd5b50610669600480360381019061066491906130ad565b610f60565b005b34801561067757600080fd5b50610680610ffd565b60405161068d9190612cd9565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190612c3a565b611007565b005b3480156106cb57600080fd5b506106e660048036038101906106e19190612c3a565b61101d565b6040516106f39190612c95565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190612c3a565b611094565b6040516107309190612c95565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190612e7a565b6110b7565b60405161076d9190612cd9565b60405180910390f35b34801561078257600080fd5b5061079d6004803603810190610798919061313a565b6110d5565b005b3480156107ab57600080fd5b506107b461117f565b6040516107c2929190612cb0565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906131f0565b611190565b6040516107ff9190612cd9565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a9190612ea7565b611217565b60405161083c91906132a7565b60405180910390f35b34801561085157600080fd5b5061086c600480360381019061086791906133af565b6112f5565b005b34801561087a57600080fd5b5061089560048036038101906108909190612ea7565b6113ae565b005b60006108a1611489565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006108d3611489565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600080601654601754601454601554935093509350935090919293565b60606008805461092a9061343a565b80601f01602080910402602001604051908101604052809291908181526020018280546109569061343a565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905090565b6000806109b8611507565b90506109c581858561150f565b600191505092915050565b600080602154602254915091509091565b6000600754905090565b60006109f5611489565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610a28611507565b9050610a358582856116d8565b610a40858585611764565b60019150509392505050565b600080600080610a5a611489565b601e60019054906101000a900460ff16601e60039054906101000a900460ff16601e60009054906101000a900460ff16601e60029054906101000a900460ff16935093509350935090919293565b610ab0611489565b85600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b60006012905090565b60007f00000000000000000000000000000000000000000000d3c21bcecceda1000000905090565b600080610c7a611507565b9050610c9b818585610c8c8589611190565b610c96919061349a565b61150f565b600191505092915050565b610cae611489565b610ccd30737a250d5630b4cf539739df2c5dacb4c659f2488d8361150f565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719343084600080610d19610e44565b426040518863ffffffff1660e01b8152600401610d3b96959493929190613509565b60606040518083038185885af1158015610d59573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d7e919061357f565b5050506001601e60026101000a81548160ff02191690831515021790555050565b600080600080601254601354601454601554935093509350935090919293565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e10611489565b610e1a60006121e9565b565b610e24611489565b610e2c610e44565b73ffffffffffffffffffffffffffffffffffffffff16ff5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610e7d9061343a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea99061343a565b8015610ef65780601f10610ecb57610100808354040283529160200191610ef6565b820191906000526020600020905b815481529060010190602001808311610ed957829003601f168201915b5050505050905090565b610f08611489565b610f1282826122af565b5050565b6000610f2d601d548361143190919063ffffffff16565b9050919050565b610f3c611489565b8160089081610f4b9190613774565b508060099081610f5b9190613774565b505050565b610f68611489565b85601e60016101000a81548160ff02191690831515021790555084601e60036101000a81548160ff02191690831515021790555083601e60006101000a81548160ff02191690831515021790555082601e60026101000a81548160ff02191690831515021790555081601f81905550806020819055506000602181905550806022819055506000602381905550505050505050565b6000602354905090565b61100f611489565b611019828261239a565b5050565b600080611028611507565b905060006110368286611190565b90508381101561107b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611072906138b8565b60405180910390fd5b611088828686840361150f565b60019250505092915050565b60008061109f611507565b90506110ac818585611764565b600191505092915050565b60006110ce601d548361144790919063ffffffff16565b9050919050565b6110dd611489565b876012819055508660138190555085601481905550846015819055508360168190555082601781905550816018819055508060198190555060155460145460135460125461112b919061349a565b611135919061349a565b61113f919061349a565b601a8190555060195460185460175460165461115b919061349a565b611165919061349a565b61116f919061349a565b601b819055505050505050505050565b600080601f54602054915091509091565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611221611489565b6000601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600080600281111561128757611286613230565b5b82600281111561129a57611299613230565b5b146112a65760016112a9565b60005b9050806112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e290613924565b60405180910390fd5b8192505050919050565b6112fd611489565b60008251905060005b818110156113a857600084828151811061132357611322613944565b5b6020026020010151905083601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083600281111561138f5761138e613230565b5b02179055505080806113a090613973565b915050611306565b50505050565b6113b6611489565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613a2d565b60405180910390fd5b61142e816121e9565b50565b6000818361143f9190613a7c565b905092915050565b600081836114559190613aad565b905092915050565b6000818361146b919061349a565b905092915050565b600081836114819190613aef565b905092915050565b611491611507565b73ffffffffffffffffffffffffffffffffffffffff166114af610e44565b73ffffffffffffffffffffffffffffffffffffffff1614611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90613b6f565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361157e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157590613c01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490613c93565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116cb9190612cd9565b60405180910390a3505050565b60006116e48484611190565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461175e5781811015611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790613cff565b60405180910390fd5b61175d848484840361150f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90613d91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183990613e23565b60405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c090613eb5565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90613f21565b60405180910390fd5b6001600281111561194b5761194a613230565b5b601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660028111156119aa576119a9613230565b5b1480611a265750600160028111156119c5576119c4613230565b5b601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115611a2457611a23613230565b5b145b80611aa05750611a34610e44565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a9f5750611a70610e44565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b5b80611b535750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611b525750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611c9957600280811115611b6b57611b6a613230565b5b601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115611bca57611bc9613230565b5b14158015611c485750600280811115611be657611be5613230565b5b601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115611c4557611c44613230565b5b14155b611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e90613fb3565b60405180910390fd5b611c93848484856124e9565b506121e4565b601e60029054906101000a900460ff16611ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdf9061401f565b60405180910390fd5b601e60009054906101000a900460ff16611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e906140b1565b60405180910390fd5b601e60019054906101000a900460ff161561204b57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611dd057601e60039054906101000a900460ff1615611dc057611dbf82612568565b5b611dcb8484846125da565b612046565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361204557600280811115611e3857611e37613230565b5b601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115611e9757611e96613230565b5b14158015611f155750600280811115611eb357611eb2613230565b5b601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115611f1257611f11613230565b5b14155b611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90613fb3565b60405180910390fd5b601e60039054906101000a900460ff16156120395760205460225403611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa690614169565b60405180910390fd5b611fc660205460235461143190919063ffffffff16565b821115612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff90614221565b60405180910390fd5b61201e600160225461145d90919063ffffffff16565b602281905550602054602254036120385760006023819055505b5b612044848484612776565b5b5b6121e2565b601e60019054906101000a900460ff166121e157600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361214f576120e284600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684856124e9565b6002601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083600281111561214557612144613230565b5b02179055506121e0565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d69061428d565b60405180910390fd5b5b5b5b505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122b7610c47565b816122c06109e1565b6122ca919061349a565b111561230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906142f9565b60405180910390fd5b6123158282612912565b61232a8160075461145d90919063ffffffff16565b6007819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161238e9190612cd9565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124009061438b565b60405180910390fd5b600061241483610dbf565b905081811015612459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124509061441d565b60405180910390fd5b6124638383612974565b6124788260075461147390919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124dc9190612cd9565b60405180910390a3505050565b6124f38383612912565b6124fd8482612974565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161255a9190612cd9565b60405180910390a350505050565b601f5460215410801561257e5750602054602254145b156125bb57612599600160215461145d90919063ffffffff16565b6021819055506125b48160235461145d90919063ffffffff16565b6023819055505b601f54602154036125d757600060228190555060006021819055505b50565b600061261661260760646125f9601b548661144790919063ffffffff16565b61143190919063ffffffff16565b8361147390919063ffffffff16565b905061266b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661266660646126586016548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b6126be600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166126b960646126ab6017548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b612711600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661270c60646126fe6018548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b612764600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661275f60646127516019548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b612770848483856124e9565b50505050565b60006127b26127a36064612795601a548661144790919063ffffffff16565b61143190919063ffffffff16565b8361147390919063ffffffff16565b9050612807600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661280260646127f46012548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b61285a600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661285560646128476013548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b6128ad600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128a8606461289a6014548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b612900600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128fb60646128ed6015548761144790919063ffffffff16565b61143190919063ffffffff16565b612912565b61290c848483856124e9565b50505050565b61292d8161291f84610dbf565b61145d90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b61298f8161298184610dbf565b61147390919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612a1b612a16612a11846129d6565b6129f6565b6129d6565b9050919050565b6000612a2d82612a00565b9050919050565b6000612a3f82612a22565b9050919050565b612a4f81612a34565b82525050565b6000602082019050612a6a6000830184612a46565b92915050565b6000612a7b82612a22565b9050919050565b612a8b81612a70565b82525050565b6000602082019050612aa66000830184612a82565b92915050565b6000819050919050565b612abf81612aac565b82525050565b6000608082019050612ada6000830187612ab6565b612ae76020830186612ab6565b612af46040830185612ab6565b612b016060830184612ab6565b95945050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b44578082015181840152602081019050612b29565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b6c82612b0a565b612b768185612b15565b9350612b86818560208601612b26565b612b8f81612b50565b840191505092915050565b60006020820190508181036000830152612bb48184612b61565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000612bdb826129d6565b9050919050565b612beb81612bd0565b8114612bf657600080fd5b50565b600081359050612c0881612be2565b92915050565b612c1781612aac565b8114612c2257600080fd5b50565b600081359050612c3481612c0e565b92915050565b60008060408385031215612c5157612c50612bc6565b5b6000612c5f85828601612bf9565b9250506020612c7085828601612c25565b9150509250929050565b60008115159050919050565b612c8f81612c7a565b82525050565b6000602082019050612caa6000830184612c86565b92915050565b6000604082019050612cc56000830185612ab6565b612cd26020830184612ab6565b9392505050565b6000602082019050612cee6000830184612ab6565b92915050565b612cfd81612bd0565b82525050565b6000602082019050612d186000830184612cf4565b92915050565b600080600060608486031215612d3757612d36612bc6565b5b6000612d4586828701612bf9565b9350506020612d5686828701612bf9565b9250506040612d6786828701612c25565b9150509250925092565b6000608082019050612d866000830187612c86565b612d936020830186612c86565b612da06040830185612c86565b612dad6060830184612c86565b95945050505050565b60008060008060008060c08789031215612dd357612dd2612bc6565b5b6000612de189828a01612bf9565b9650506020612df289828a01612bf9565b9550506040612e0389828a01612bf9565b9450506060612e1489828a01612bf9565b9350506080612e2589828a01612bf9565b92505060a0612e3689828a01612bf9565b9150509295509295509295565b600060ff82169050919050565b612e5981612e43565b82525050565b6000602082019050612e746000830184612e50565b92915050565b600060208284031215612e9057612e8f612bc6565b5b6000612e9e84828501612c25565b91505092915050565b600060208284031215612ebd57612ebc612bc6565b5b6000612ecb84828501612bf9565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f1682612b50565b810181811067ffffffffffffffff82111715612f3557612f34612ede565b5b80604052505050565b6000612f48612bbc565b9050612f548282612f0d565b919050565b600067ffffffffffffffff821115612f7457612f73612ede565b5b612f7d82612b50565b9050602081019050919050565b82818337600083830152505050565b6000612fac612fa784612f59565b612f3e565b905082815260208101848484011115612fc857612fc7612ed9565b5b612fd3848285612f8a565b509392505050565b600082601f830112612ff057612fef612ed4565b5b8135613000848260208601612f99565b91505092915050565b600080604083850312156130205761301f612bc6565b5b600083013567ffffffffffffffff81111561303e5761303d612bcb565b5b61304a85828601612fdb565b925050602083013567ffffffffffffffff81111561306b5761306a612bcb565b5b61307785828601612fdb565b9150509250929050565b61308a81612c7a565b811461309557600080fd5b50565b6000813590506130a781613081565b92915050565b60008060008060008060c087890312156130ca576130c9612bc6565b5b60006130d889828a01613098565b96505060206130e989828a01613098565b95505060406130fa89828a01613098565b945050606061310b89828a01613098565b935050608061311c89828a01612c25565b92505060a061312d89828a01612c25565b9150509295509295509295565b600080600080600080600080610100898b03121561315b5761315a612bc6565b5b60006131698b828c01612c25565b985050602061317a8b828c01612c25565b975050604061318b8b828c01612c25565b965050606061319c8b828c01612c25565b95505060806131ad8b828c01612c25565b94505060a06131be8b828c01612c25565b93505060c06131cf8b828c01612c25565b92505060e06131e08b828c01612c25565b9150509295985092959890939650565b6000806040838503121561320757613206612bc6565b5b600061321585828601612bf9565b925050602061322685828601612bf9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106132705761326f613230565b5b50565b60008190506132818261325f565b919050565b600061329182613273565b9050919050565b6132a181613286565b82525050565b60006020820190506132bc6000830184613298565b92915050565b600067ffffffffffffffff8211156132dd576132dc612ede565b5b602082029050602081019050919050565b600080fd5b6000613306613301846132c2565b612f3e565b90508083825260208201905060208402830185811115613329576133286132ee565b5b835b81811015613352578061333e8882612bf9565b84526020840193505060208101905061332b565b5050509392505050565b600082601f83011261337157613370612ed4565b5b81356133818482602086016132f3565b91505092915050565b6003811061339757600080fd5b50565b6000813590506133a98161338a565b92915050565b600080604083850312156133c6576133c5612bc6565b5b600083013567ffffffffffffffff8111156133e4576133e3612bcb565b5b6133f08582860161335c565b92505060206134018582860161339a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061345257607f821691505b6020821081036134655761346461340b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134a582612aac565b91506134b083612aac565b92508282019050808211156134c8576134c761346b565b5b92915050565b6000819050919050565b60006134f36134ee6134e9846134ce565b6129f6565b612aac565b9050919050565b613503816134d8565b82525050565b600060c08201905061351e6000830189612cf4565b61352b6020830188612ab6565b61353860408301876134fa565b61354560608301866134fa565b6135526080830185612cf4565b61355f60a0830184612ab6565b979650505050505050565b60008151905061357981612c0e565b92915050565b60008060006060848603121561359857613597612bc6565b5b60006135a68682870161356a565b93505060206135b78682870161356a565b92505060406135c88682870161356a565b9150509250925092565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136347fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135f7565b61363e86836135f7565b95508019841693508086168417925050509392505050565b600061367161366c61366784612aac565b6129f6565b612aac565b9050919050565b6000819050919050565b61368b83613656565b61369f61369782613678565b848454613604565b825550505050565b600090565b6136b46136a7565b6136bf818484613682565b505050565b5b818110156136e3576136d86000826136ac565b6001810190506136c5565b5050565b601f821115613728576136f9816135d2565b613702846135e7565b81016020851015613711578190505b61372561371d856135e7565b8301826136c4565b50505b505050565b600082821c905092915050565b600061374b6000198460080261372d565b1980831691505092915050565b6000613764838361373a565b9150826002028217905092915050565b61377d82612b0a565b67ffffffffffffffff81111561379657613795612ede565b5b6137a0825461343a565b6137ab8282856136e7565b600060209050601f8311600181146137de57600084156137cc578287015190505b6137d68582613758565b86555061383e565b601f1984166137ec866135d2565b60005b82811015613814578489015182556001820191506020850194506020810190506137ef565b86831015613831578489015161382d601f89168261373a565b8355505b6001600288020188555050505b505050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006138a2602583612b15565b91506138ad82613846565b604082019050919050565b600060208201905081810360008301526138d181613895565b9050919050565b7f4e6f2077616c6c6574207265636f726420666f756e642e000000000000000000600082015250565b600061390e601783612b15565b9150613919826138d8565b602082019050919050565b6000602082019050818103600083015261393d81613901565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061397e82612aac565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139b0576139af61346b565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a17602683612b15565b9150613a22826139bb565b604082019050919050565b60006020820190508181036000830152613a4681613a0a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a8782612aac565b9150613a9283612aac565b925082613aa257613aa1613a4d565b5b828204905092915050565b6000613ab882612aac565b9150613ac383612aac565b9250828202613ad181612aac565b91508282048414831517613ae857613ae761346b565b5b5092915050565b6000613afa82612aac565b9150613b0583612aac565b9250828203905081811115613b1d57613b1c61346b565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b59602083612b15565b9150613b6482613b23565b602082019050919050565b60006020820190508181036000830152613b8881613b4c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613beb602483612b15565b9150613bf682613b8f565b604082019050919050565b60006020820190508181036000830152613c1a81613bde565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7d602283612b15565b9150613c8882613c21565b604082019050919050565b60006020820190508181036000830152613cac81613c70565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ce9601d83612b15565b9150613cf482613cb3565b602082019050919050565b60006020820190508181036000830152613d1881613cdc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d7b602583612b15565b9150613d8682613d1f565b604082019050919050565b60006020820190508181036000830152613daa81613d6e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0d602383612b15565b9150613e1882613db1565b604082019050919050565b60006020820190508181036000830152613e3c81613e00565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613e9f602683612b15565b9150613eaa82613e43565b604082019050919050565b60006020820190508181036000830152613ece81613e92565b9050919050565b7f596f752063616e6e6f742073656e6420746f20796f757273656c662e00000000600082015250565b6000613f0b601c83612b15565b9150613f1682613ed5565b602082019050919050565b60006020820190508181036000830152613f3a81613efe565b9050919050565b7f596f75722077616c6c65742069732063757272656e746c792073757370656e6460008201527f656420666f7220736e6970696e672e0000000000000000000000000000000000602082015250565b6000613f9d602f83612b15565b9150613fa882613f41565b604082019050919050565b60006020820190508181036000830152613fcc81613f90565b9050919050565b7f4c6971756964697479206973206e6f74206164646564207965742e0000000000600082015250565b6000614009601b83612b15565b915061401482613fd3565b602082019050919050565b6000602082019050818103600083015261403881613ffc565b9050919050565b7f5472616e7366657272696e6720616e642074726164696e67206f6620746f6b6560008201527f6e2063757272656e746c79207061757365642e00000000000000000000000000602082015250565b600061409b603383612b15565b91506140a68261403f565b604082019050919050565b600060208201905081810360008301526140ca8161408e565b9050919050565b7f506c65617365207761697420666f7220796f7572207475726e20746f2073656c60008201527f6c2c20796f75206e65656420746f20776174636820666f72206275792072617460208201527f696f2e0000000000000000000000000000000000000000000000000000000000604082015250565b6000614153604383612b15565b915061415e826140d1565b606082019050919050565b6000602082019050818103600083015261418281614146565b9050919050565b7f53656c6c206d75737420626520657175616c206f72206c6f776572207468616e60008201527f2074686520616363756d756c617465642062757973206469766964656420627960208201527f2073656c6c20726174696f2e0000000000000000000000000000000000000000604082015250565b600061420b604c83612b15565b915061421682614189565b606082019050919050565b6000602082019050818103600083015261423a816141fe565b9050919050565b7f54726164696e67206973206e6f7420796574206f70656e65642e000000000000600082015250565b6000614277601a83612b15565b915061428282614241565b602082019050919050565b600060208201905081810360008301526142a68161426a565b9050919050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b60006142e3601983612b15565b91506142ee826142ad565b602082019050919050565b60006020820190508181036000830152614312816142d6565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614375602183612b15565b915061438082614319565b604082019050919050565b600060208201905081810360008301526143a481614368565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614407602283612b15565b9150614412826143ab565b604082019050919050565b60006020820190508181036000830152614436816143fa565b905091905056fea26469706673582212204b57c8bc6eddafc81be52359365e5da78e91ef43775b644fe4af61a0d8c2716464736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000c350000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000432423153000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002425300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000000006a8d4950dc24d87919e76f420a28d5d9a8486a3800000000000000000000000085bef5ae604a12feaa4077b8d5f526a1b7daedc600000000000000000000000056a87f47b184186ef204431776c789b932a32475000000000000000000000000eb0655dbbc9d35cd6ce4b0eb0153e3563d955c420000000000000000000000006321457c799a5ff99de349bd2d8e38e7aa138a97
-----Decoded View---------------
Arg [0] : cap (uint256): 1000000
Arg [1] : initialSupply (uint256): 800000
Arg [2] : _tokenName (string): 2B1S
Arg [3] : _tokenSymbol (string): BS
Arg [4] : _presaleAddresses (address[]): 0x6A8d4950dC24D87919E76f420a28d5D9A8486A38,0x85bef5aE604A12FEaa4077B8d5f526A1b7DAEdC6,0x56a87F47b184186EF204431776c789B932A32475,0xeB0655dbbC9d35cD6Ce4B0eB0153e3563d955C42,0x6321457C799a5FF99DE349bD2D8e38E7AA138a97
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [1] : 00000000000000000000000000000000000000000000000000000000000c3500
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 3242315300000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [8] : 4253000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [10] : 0000000000000000000000006a8d4950dc24d87919e76f420a28d5d9a8486a38
Arg [11] : 00000000000000000000000085bef5ae604a12feaa4077b8d5f526a1b7daedc6
Arg [12] : 00000000000000000000000056a87f47b184186ef204431776c789b932a32475
Arg [13] : 000000000000000000000000eb0655dbbc9d35cd6ce4b0eb0153e3563d955c42
Arg [14] : 0000000000000000000000006321457c799a5ff99de349bd2d8e38e7aa138a97
Deployed Bytecode Sourcemap
37068:13970:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49722:123;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49853:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50783:157;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;46263:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27117:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50359:123;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;46147:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49606;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27898:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47971:181;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;48714:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25728:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36634:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28602:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40544:391;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50615:160;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;46483:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18191:103;;;;;;;;;;;;;:::i;:::-;;50948:87;;;;;;;;;;;;;:::i;:::-;;17543;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46371:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49350:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50118:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49168:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48160:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50251:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49486:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29343:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26390:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49985:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47260:703;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50490:117;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;26646:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46624:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46910:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18449:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49722:123;49784:18;17429:13;:11;:13::i;:::-;49822:15:::1;;;;;;;;;;;49815:22;;49722:123:::0;:::o;49853:124::-;49916:17;17429:13;:11;:13::i;:::-;49953:16:::1;;;;;;;;;;;49946:23;;49853:124:::0;:::o;50783:157::-;50827:7;50836;50845;50854;50882:10;;50894;;50906:11;;50919:12;;50874:58;;;;;;;;50783:157;;;;:::o;46263:100::-;46317:13;46350:5;46343:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46263:100;:::o;27117:201::-;27200:4;27217:13;27233:12;:10;:12::i;:::-;27217:28;;27256:32;27265:5;27272:7;27281:6;27256:8;:32::i;:::-;27306:4;27299:11;;;27117:201;;;;:::o;50359:123::-;50413:7;50422;50450:10;;50462:11;;50442:32;;;;50359:123;;:::o;46147:108::-;46208:7;46235:12;;46228:19;;46147:108;:::o;49606:::-;49666:7;17429:13;:11;:13::i;:::-;49693::::1;;;;;;;;;;;49686:20;;49606:108:::0;:::o;27898:295::-;28029:4;28046:15;28064:12;:10;:12::i;:::-;28046:30;;28087:38;28103:4;28109:7;28118:6;28087:15;:38::i;:::-;28136:27;28146:4;28152:2;28156:6;28136:9;:27::i;:::-;28181:4;28174:11;;;27898:295;;;;;:::o;47971:181::-;48034:4;48040;48046;48052;17429:13;:11;:13::i;:::-;48077:15:::1;;;;;;;;;;;48094:13;;;;;;;;;;;48109:15;;;;;;;;;;;48126:16;;;;;;;;;;;48069:74;;;;;;;;47971:181:::0;;;;:::o;48714:446::-;17429:13;:11;:13::i;:::-;48940:11:::1;48927:10;;:24;;;;;;;;;;;;;;;;;;48980:16;48962:15;;:34;;;;;;;;;;;;;;;;;;49021:12;49007:11;;:26;;;;;;;;;;;;;;;;;;49061:15;49044:14;;:32;;;;;;;;;;;;;;;;;;49100:11;49087:10;;:24;;;;;;;;;;;;;;;;;;49138:14;49122:13;;:30;;;;;;;;;;;;;;;;;;48714:446:::0;;;;;;:::o;25728:93::-;25786:5;25811:2;25804:9;;25728:93;:::o;36634:83::-;36678:7;36705:4;36698:11;;36634:83;:::o;28602:238::-;28690:4;28707:13;28723:12;:10;:12::i;:::-;28707:28;;28746:64;28755:5;28762:7;28799:10;28771:25;28781:5;28788:7;28771:9;:25::i;:::-;:38;;;;:::i;:::-;28746:8;:64::i;:::-;28828:4;28821:11;;;28602:238;;;;:::o;40544:391::-;17429:13;:11;:13::i;:::-;40620:62:::1;40637:4;37809:42;40675:6;40620:8;:62::i;:::-;40695:15;;;;;;;;;;;:31;;;40736:9;40770:4;40790:6;40811:1;40827::::0;40843:7:::1;:5;:7::i;:::-;40865:15;40695:196;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40923:4;40904:16;;:23;;;;;;;;;;;;;;;;;;40544:391:::0;:::o;50615:160::-;50660:7;50669;50678;50687;50715:11;;50728;;50741;;50754:12;;50707:60;;;;;;;;50615:160;;;;:::o;46483:127::-;46557:7;46584:9;:18;46594:7;46584:18;;;;;;;;;;;;;;;;46577:25;;46483:127;;;:::o;18191:103::-;17429:13;:11;:13::i;:::-;18256:30:::1;18283:1;18256:18;:30::i;:::-;18191:103::o:0;50948:87::-;17429:13;:11;:13::i;:::-;51018:7:::1;:5;:7::i;:::-;50997:30;;;17543:87:::0;17589:7;17616:6;;;;;;;;;;;17609:13;;17543:87;:::o;46371:104::-;46427:13;46460:7;46453:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46371:104;:::o;49350:128::-;17429:13;:11;:13::i;:::-;49448:22:::1;49454:7;49463:6;49448:5;:22::i;:::-;49350:128:::0;;:::o;50118:125::-;50186:7;50213:22;50224:10;;50213:6;:10;;:22;;;;:::i;:::-;50206:29;;50118:125;;;:::o;49168:174::-;17429:13;:11;:13::i;:::-;49291:10:::1;49283:5;:18;;;;;;:::i;:::-;;49322:12;49312:7;:22;;;;;;:::i;:::-;;49168:174:::0;;:::o;48160:546::-;17429:13;:11;:13::i;:::-;48392:16:::1;48374:15;;:34;;;;;;;;;;;;;;;;;;48435:14;48419:13;;:30;;;;;;;;;;;;;;;;;;48478:16;48460:15;;:34;;;;;;;;;;;;;;;;;;48524:17;48505:16;;:36;;;;;;;;;;;;;;;;;;48565:9;48554:8;:20;;;;48597:10;48585:9;:22;;;;48633:1;48620:10;:14;;;;48659:10;48645:11;:24;;;;48697:1;48680:14;:18;;;;48160:546:::0;;;;;;:::o;50251:100::-;50302:7;50329:14;;50322:21;;50251:100;:::o;49486:112::-;17429:13;:11;:13::i;:::-;49568:22:::1;49574:7;49583:6;49568:5;:22::i;:::-;49486:112:::0;;:::o;29343:436::-;29436:4;29453:13;29469:12;:10;:12::i;:::-;29453:28;;29492:24;29519:25;29529:5;29536:7;29519:9;:25::i;:::-;29492:52;;29583:15;29563:16;:35;;29555:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29676:60;29685:5;29692:7;29720:15;29701:16;:34;29676:8;:60::i;:::-;29767:4;29760:11;;;;29343:436;;;;:::o;26390:193::-;26469:4;26486:13;26502:12;:10;:12::i;:::-;26486:28;;26525;26535:5;26542:2;26546:6;26525:9;:28::i;:::-;26571:4;26564:11;;;26390:193;;;;:::o;49985:125::-;50053:7;50080:22;50091:10;;50080:6;:10;;:22;;;;:::i;:::-;50073:29;;49985:125;;;:::o;47260:703::-;17429:13;:11;:13::i;:::-;47529:12:::1;47515:11;:26;;;;47566:12;47552:11;:26;;;;47603:12;47589:11;:26;;;;47641:13;47626:12;:28;;;;47678:11;47665:10;:24;;;;47713:11;47700:10;:24;;;;47748:11;47735:10;:24;;;;47784:12;47770:11;:26;;;;47867:12;;47853:11;;47839;;47825;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;:54;;;;:::i;:::-;47809:13;:70;;;;47944:11;;47931:10;;47918;;47905;;:23;;;;:::i;:::-;:36;;;;:::i;:::-;:50;;;;:::i;:::-;47890:12;:65;;;;47260:703:::0;;;;;;;;:::o;50490:117::-;50542:7;50551;50579:8;;50589:9;;50571:28;;;;50490:117;;:::o;26646:151::-;26735:7;26762:11;:18;26774:5;26762:18;;;;;;;;;;;;;;;:27;26781:7;26762:27;;;;;;;;;;;;;;;;26755:34;;26646:151;;;;:::o;46624:278::-;46698:10;17429:13;:11;:13::i;:::-;46721::::1;46737:12;:21;46750:7;46737:21;;;;;;;;;;;;;;;;;;;;;;;;;46721:37;;46769:11;46790:15:::0;46784:21:::1;;;;;;;;:::i;:::-;;:2;:21;;;;;;;;:::i;:::-;;;:36;;46816:4;46784:36;;;46808:5;46784:36;46769:52;;46840:6;46832:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;46892:2;46885:9;;;;46624:278:::0;;;:::o;46910:342::-;17429:13;:11;:13::i;:::-;47018:24:::1;47045:10;:17;47018:44;;47077:9;47073:172;47096:16;47092:1;:20;47073:172;;;47134:24;47161:10;47172:1;47161:13;;;;;;;;:::i;:::-;;;;;;;;47134:40;;47222:11;47189:12;:30;47202:16;47189:30;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;47119:126;47114:3;;;;;:::i;:::-;;;;47073:172;;;;47007:245;46910:342:::0;;:::o;18449:201::-;17429:13;:11;:13::i;:::-;18558:1:::1;18538:22;;:8;:22;;::::0;18530:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18614:28;18633:8;18614:18;:28::i;:::-;18449:201:::0;:::o;12387:98::-;12445:7;12476:1;12472;:5;;;;:::i;:::-;12465:12;;12387:98;;;;:::o;11988:::-;12046:7;12077:1;12073;:5;;;;:::i;:::-;12066:12;;11988:98;;;;:::o;11250:::-;11308:7;11339:1;11335;:5;;;;:::i;:::-;11328:12;;11250:98;;;;:::o;11631:::-;11689:7;11720:1;11716;:5;;;;:::i;:::-;11709:12;;11631:98;;;;:::o;17708:132::-;17783:12;:10;:12::i;:::-;17772:23;;:7;:5;:7::i;:::-;:23;;;17764:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17708:132::o;16094:98::-;16147:7;16174:10;16167:17;;16094:98;:::o;33370:380::-;33523:1;33506:19;;:5;:19;;;33498:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33604:1;33585:21;;:7;:21;;;33577:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33688:6;33658:11;:18;33670:5;33658:18;;;;;;;;;;;;;;;:27;33677:7;33658:27;;;;;;;;;;;;;;;:36;;;;33726:7;33710:32;;33719:5;33710:32;;;33735:6;33710:32;;;;;;:::i;:::-;;;;;;;;33370:380;;;:::o;34041:453::-;34176:24;34203:25;34213:5;34220:7;34203:9;:25::i;:::-;34176:52;;34263:17;34243:16;:37;34239:248;;34325:6;34305:16;:26;;34297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34409:51;34418:5;34425:7;34453:6;34434:16;:25;34409:8;:51::i;:::-;34239:248;34165:329;34041:453;;;:::o;40943:2485::-;41091:1;41075:18;;:4;:18;;;41067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41168:1;41154:16;;:2;:16;;;41146:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41221:19;41243:9;:15;41253:4;41243:15;;;;;;;;;;;;;;;;41221:37;;41292:6;41277:11;:21;;41269:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;41368:2;41360:10;;:4;:10;;;41352:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41464:22;41442:44;;;;;;;;:::i;:::-;;:12;:18;41455:4;41442:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;;;;:::i;:::-;;;:90;;;;41510:22;41490:42;;;;;;;;:::i;:::-;;:12;:16;41503:2;41490:16;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;;;;:::i;:::-;;;41442:90;41441:143;;;;41559:7;:5;:7::i;:::-;41551:15;;:4;:15;;;:32;;;;41576:7;:5;:7::i;:::-;41570:13;;:2;:13;;;41551:32;41441:143;:206;;;;41610:13;;;;;;;;;;;41602:21;;:4;:21;;;;:44;;;;;41633:13;;;;;;;;;;;41627:19;;:2;:19;;;;41602:44;41441:206;41424:486;;;41704:22;41682:44;;;;;;;;:::i;:::-;;:12;:18;41695:4;41682:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;;;;:::i;:::-;;;;:90;;;;;41750:22;41730:42;;;;;;;;:::i;:::-;;:12;:16;41743:2;41730:16;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;;;;:::i;:::-;;;;41682:90;41674:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;41839:38;41852:4;41858:2;41862:6;41870;41839:12;:38::i;:::-;41892:7;;;41424:486;41930:16;;;;;;;;;;;41922:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41997:15;;;;;;;;;;;41989:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;42084:15;;;;;;;;;;;42081:1340;;;42127:13;;;;;;;;;;;42119:21;;:4;:21;;;42116:968;;42164:13;;;;;;;;;;;42161:84;;;42202:23;42218:6;42202:15;:23::i;:::-;42161:84;42263:30;42276:4;42282:2;42286:6;42263:12;:30::i;:::-;42116:968;;;42325:13;;;;;;;;;;;42319:19;;:2;:19;;;42315:769;;42389:22;42367:44;;;;;;;;:::i;:::-;;:12;:18;42380:4;42367:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;;;;:::i;:::-;;;;:90;;;;;42435:22;42415:42;;;;;;;;:::i;:::-;;:12;:16;42428:2;42415:16;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;;;;:::i;:::-;;;;42367:90;42359:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;42531:13;;;;;;;;;;;42528:491;;;42592:9;;42577:11;;:24;42569:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;42714:29;42733:9;;42714:14;;:18;;:29;;;;:::i;:::-;42704:6;:39;;42696:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;42861:18;42877:1;42861:11;;:15;;:18;;;;:::i;:::-;42847:11;:32;;;;42920:9;;42905:11;;:24;42902:98;;42975:1;42958:14;:18;;;;42902:98;42528:491;43037:31;43051:4;43057:2;43061:6;43037:13;:31::i;:::-;42315:769;42116:968;42081:1340;;;43105:15;;;;;;;;;;;43101:320;;43148:13;;;;;;;;;;;43140:21;;:4;:21;;;43137:273;;43182:50;43195:4;43201:14;;;;;;;;;;;43217:6;43225;43182:12;:50::i;:::-;43270:22;43251:12;:16;43264:2;43251:16;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;43137:273;;;43324:13;;;;;;;;;;;43318:19;;:2;:19;;;43314:96;;43358:36;;;;;;;;;;:::i;:::-;;;;;;;;43314:96;43137:273;43101:320;42081:1340;41056:2372;40943:2485;;;;:::o;18810:191::-;18884:16;18903:6;;;;;;;;;;;18884:25;;18929:8;18920:6;;:17;;;;;;;;;;;;;;;;;;18984:8;18953:40;;18974:8;18953:40;;;;;;;;;;;;18873:128;18810:191;:::o;45405:296::-;45516:5;:3;:5::i;:::-;45506:6;45490:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:31;;45482:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;45562:28;45574:7;45583:6;45562:11;:28::i;:::-;45616:24;45633:6;45616:12;;:16;;:24;;;;:::i;:::-;45601:12;:39;;;;45677:7;45656:37;;45673:1;45656:37;;;45686:6;45656:37;;;;;;:::i;:::-;;;;;;;;45405:296;;:::o;45709:430::-;45813:1;45794:21;;:7;:21;;;45786:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45864:22;45889:18;45899:7;45889:9;:18::i;:::-;45864:43;;45944:6;45926:14;:24;;45918:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;46000:28;46012:7;46021:6;46000:11;:28::i;:::-;46054:24;46071:6;46054:12;;:16;;:24;;;;:::i;:::-;46039:12;:39;;;;46120:1;46094:37;;46103:7;46094:37;;;46124:6;46094:37;;;;;;:::i;:::-;;;;;;;;45775:364;45709:430;;:::o;43436:264::-;43559:32;43571:2;43575:15;43559:11;:32::i;:::-;43602:39;43614:4;43620:20;43602:11;:39::i;:::-;43672:2;43657:35;;43666:4;43657:35;;;43676:15;43657:35;;;;;;:::i;:::-;;;;;;;;43436:264;;;;:::o;43708:347::-;43785:8;;43772:10;;:21;:49;;;;;43812:9;;43797:11;;:24;43772:49;43769:169;;;43851:17;43866:1;43851:10;;:14;;:17;;;;:::i;:::-;43838:10;:30;;;;43900:26;43919:6;43900:14;;:18;;:26;;;;:::i;:::-;43883:14;:43;;;;43769:169;43967:8;;43953:10;;:22;43949:99;;44006:1;43992:11;:15;;;;44035:1;44022:10;:14;;;;43949:99;43708:347;:::o;44063:517::-;44147:24;44174:45;44185:33;44214:3;44185:24;44196:12;;44185:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44174:6;:10;;:45;;;;:::i;:::-;44147:72;;44232:56;44244:10;;;;;;;;;;;44256:31;44283:3;44256:22;44267:10;;44256:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;44232:11;:56::i;:::-;44299:61;44311:15;;;;;;;;;;;44328:31;44355:3;44328:22;44339:10;;44328:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;44299:11;:61::i;:::-;44371:57;44383:11;;;;;;;;;;;44396:31;44423:3;44396:22;44407:10;;44396:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;44371:11;:57::i;:::-;44439:60;44451:13;;;;;;;;;;;44466:32;44494:3;44466:23;44477:11;;44466:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44439:11;:60::i;:::-;44524:48;44537:4;44543:2;44547:16;44565:6;44524:12;:48::i;:::-;44136:444;44063:517;;;:::o;44588:523::-;44673:24;44700:46;44711:34;44741:3;44711:25;44722:13;;44711:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;44700:6;:10;;:46;;;;:::i;:::-;44673:73;;44759:57;44771:10;;;;;;;;;;;44783:32;44811:3;44783:23;44794:11;;44783:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44759:11;:57::i;:::-;44827:62;44839:15;;;;;;;;;;;44856:32;44884:3;44856:23;44867:11;;44856:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44827:11;:62::i;:::-;44900:58;44912:11;;;;;;;;;;;44925:32;44953:3;44925:23;44936:11;;44925:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44900:11;:58::i;:::-;44969:61;44981:13;;;;;;;;;;;44996:33;45025:3;44996:24;45007:12;;44996:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44969:11;:61::i;:::-;45055:48;45068:4;45074:2;45078:16;45096:6;45055:12;:48::i;:::-;44662:449;44588:523;;;:::o;45119:135::-;45215:31;45238:7;45215:18;45225:7;45215:9;:18::i;:::-;:22;;:31;;;;:::i;:::-;45194:9;:18;45204:7;45194:18;;;;;;;;;;;;;;;:52;;;;45119:135;;:::o;45262:::-;45358:31;45381:7;45358:18;45368:7;45358:9;:18::i;:::-;:22;;:31;;;;:::i;:::-;45337:9;:18;45347:7;45337:18;;;;;;;;;;;;;;;:52;;;;45262:135;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:60::-;167:3;188:5;181:12;;139:60;;;:::o;205:142::-;255:9;288:53;306:34;315:24;333:5;315:24;:::i;:::-;306:34;:::i;:::-;288:53;:::i;:::-;275:66;;205:142;;;:::o;353:126::-;403:9;436:37;467:5;436:37;:::i;:::-;423:50;;353:126;;;:::o;485:152::-;561:9;594:37;625:5;594:37;:::i;:::-;581:50;;485:152;;;:::o;643:183::-;756:63;813:5;756:63;:::i;:::-;751:3;744:76;643:183;;:::o;832:274::-;951:4;989:2;978:9;974:18;966:26;;1002:97;1096:1;1085:9;1081:17;1072:6;1002:97;:::i;:::-;832:274;;;;:::o;1112:151::-;1187:9;1220:37;1251:5;1220:37;:::i;:::-;1207:50;;1112:151;;;:::o;1269:181::-;1381:62;1437:5;1381:62;:::i;:::-;1376:3;1369:75;1269:181;;:::o;1456:272::-;1574:4;1612:2;1601:9;1597:18;1589:26;;1625:96;1718:1;1707:9;1703:17;1694:6;1625:96;:::i;:::-;1456:272;;;;:::o;1734:77::-;1771:7;1800:5;1789:16;;1734:77;;;:::o;1817:118::-;1904:24;1922:5;1904:24;:::i;:::-;1899:3;1892:37;1817:118;;:::o;1941:553::-;2118:4;2156:3;2145:9;2141:19;2133:27;;2170:71;2238:1;2227:9;2223:17;2214:6;2170:71;:::i;:::-;2251:72;2319:2;2308:9;2304:18;2295:6;2251:72;:::i;:::-;2333;2401:2;2390:9;2386:18;2377:6;2333:72;:::i;:::-;2415;2483:2;2472:9;2468:18;2459:6;2415:72;:::i;:::-;1941:553;;;;;;;:::o;2500:99::-;2552:6;2586:5;2580:12;2570:22;;2500:99;;;:::o;2605:169::-;2689:11;2723:6;2718:3;2711:19;2763:4;2758:3;2754:14;2739:29;;2605:169;;;;:::o;2780:246::-;2861:1;2871:113;2885:6;2882:1;2879:13;2871:113;;;2970:1;2965:3;2961:11;2955:18;2951:1;2946:3;2942:11;2935:39;2907:2;2904:1;2900:10;2895:15;;2871:113;;;3018:1;3009:6;3004:3;3000:16;2993:27;2842:184;2780:246;;;:::o;3032:102::-;3073:6;3124:2;3120:7;3115:2;3108:5;3104:14;3100:28;3090:38;;3032:102;;;:::o;3140:377::-;3228:3;3256:39;3289:5;3256:39;:::i;:::-;3311:71;3375:6;3370:3;3311:71;:::i;:::-;3304:78;;3391:65;3449:6;3444:3;3437:4;3430:5;3426:16;3391:65;:::i;:::-;3481:29;3503:6;3481:29;:::i;:::-;3476:3;3472:39;3465:46;;3232:285;3140:377;;;;:::o;3523:313::-;3636:4;3674:2;3663:9;3659:18;3651:26;;3723:9;3717:4;3713:20;3709:1;3698:9;3694:17;3687:47;3751:78;3824:4;3815:6;3751:78;:::i;:::-;3743:86;;3523:313;;;;:::o;3842:75::-;3875:6;3908:2;3902:9;3892:19;;3842:75;:::o;3923:117::-;4032:1;4029;4022:12;4046:117;4155:1;4152;4145:12;4169:96;4206:7;4235:24;4253:5;4235:24;:::i;:::-;4224:35;;4169:96;;;:::o;4271:122::-;4344:24;4362:5;4344:24;:::i;:::-;4337:5;4334:35;4324:63;;4383:1;4380;4373:12;4324:63;4271:122;:::o;4399:139::-;4445:5;4483:6;4470:20;4461:29;;4499:33;4526:5;4499:33;:::i;:::-;4399:139;;;;:::o;4544:122::-;4617:24;4635:5;4617:24;:::i;:::-;4610:5;4607:35;4597:63;;4656:1;4653;4646:12;4597:63;4544:122;:::o;4672:139::-;4718:5;4756:6;4743:20;4734:29;;4772:33;4799:5;4772:33;:::i;:::-;4672:139;;;;:::o;4817:474::-;4885:6;4893;4942:2;4930:9;4921:7;4917:23;4913:32;4910:119;;;4948:79;;:::i;:::-;4910:119;5068:1;5093:53;5138:7;5129:6;5118:9;5114:22;5093:53;:::i;:::-;5083:63;;5039:117;5195:2;5221:53;5266:7;5257:6;5246:9;5242:22;5221:53;:::i;:::-;5211:63;;5166:118;4817:474;;;;;:::o;5297:90::-;5331:7;5374:5;5367:13;5360:21;5349:32;;5297:90;;;:::o;5393:109::-;5474:21;5489:5;5474:21;:::i;:::-;5469:3;5462:34;5393:109;;:::o;5508:210::-;5595:4;5633:2;5622:9;5618:18;5610:26;;5646:65;5708:1;5697:9;5693:17;5684:6;5646:65;:::i;:::-;5508:210;;;;:::o;5724:332::-;5845:4;5883:2;5872:9;5868:18;5860:26;;5896:71;5964:1;5953:9;5949:17;5940:6;5896:71;:::i;:::-;5977:72;6045:2;6034:9;6030:18;6021:6;5977:72;:::i;:::-;5724:332;;;;;:::o;6062:222::-;6155:4;6193:2;6182:9;6178:18;6170:26;;6206:71;6274:1;6263:9;6259:17;6250:6;6206:71;:::i;:::-;6062:222;;;;:::o;6290:118::-;6377:24;6395:5;6377:24;:::i;:::-;6372:3;6365:37;6290:118;;:::o;6414:222::-;6507:4;6545:2;6534:9;6530:18;6522:26;;6558:71;6626:1;6615:9;6611:17;6602:6;6558:71;:::i;:::-;6414:222;;;;:::o;6642:619::-;6719:6;6727;6735;6784:2;6772:9;6763:7;6759:23;6755:32;6752:119;;;6790:79;;:::i;:::-;6752:119;6910:1;6935:53;6980:7;6971:6;6960:9;6956:22;6935:53;:::i;:::-;6925:63;;6881:117;7037:2;7063:53;7108:7;7099:6;7088:9;7084:22;7063:53;:::i;:::-;7053:63;;7008:118;7165:2;7191:53;7236:7;7227:6;7216:9;7212:22;7191:53;:::i;:::-;7181:63;;7136:118;6642:619;;;;;:::o;7267:505::-;7420:4;7458:3;7447:9;7443:19;7435:27;;7472:65;7534:1;7523:9;7519:17;7510:6;7472:65;:::i;:::-;7547:66;7609:2;7598:9;7594:18;7585:6;7547:66;:::i;:::-;7623;7685:2;7674:9;7670:18;7661:6;7623:66;:::i;:::-;7699;7761:2;7750:9;7746:18;7737:6;7699:66;:::i;:::-;7267:505;;;;;;;:::o;7778:1057::-;7882:6;7890;7898;7906;7914;7922;7971:3;7959:9;7950:7;7946:23;7942:33;7939:120;;;7978:79;;:::i;:::-;7939:120;8098:1;8123:53;8168:7;8159:6;8148:9;8144:22;8123:53;:::i;:::-;8113:63;;8069:117;8225:2;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8196:118;8353:2;8379:53;8424:7;8415:6;8404:9;8400:22;8379:53;:::i;:::-;8369:63;;8324:118;8481:2;8507:53;8552:7;8543:6;8532:9;8528:22;8507:53;:::i;:::-;8497:63;;8452:118;8609:3;8636:53;8681:7;8672:6;8661:9;8657:22;8636:53;:::i;:::-;8626:63;;8580:119;8738:3;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8709:119;7778:1057;;;;;;;;:::o;8841:86::-;8876:7;8916:4;8909:5;8905:16;8894:27;;8841:86;;;:::o;8933:112::-;9016:22;9032:5;9016:22;:::i;:::-;9011:3;9004:35;8933:112;;:::o;9051:214::-;9140:4;9178:2;9167:9;9163:18;9155:26;;9191:67;9255:1;9244:9;9240:17;9231:6;9191:67;:::i;:::-;9051:214;;;;:::o;9271:329::-;9330:6;9379:2;9367:9;9358:7;9354:23;9350:32;9347:119;;;9385:79;;:::i;:::-;9347:119;9505:1;9530:53;9575:7;9566:6;9555:9;9551:22;9530:53;:::i;:::-;9520:63;;9476:117;9271:329;;;;:::o;9606:::-;9665:6;9714:2;9702:9;9693:7;9689:23;9685:32;9682:119;;;9720:79;;:::i;:::-;9682:119;9840:1;9865:53;9910:7;9901:6;9890:9;9886:22;9865:53;:::i;:::-;9855:63;;9811:117;9606:329;;;;:::o;9941:117::-;10050:1;10047;10040:12;10064:117;10173:1;10170;10163:12;10187:180;10235:77;10232:1;10225:88;10332:4;10329:1;10322:15;10356:4;10353:1;10346:15;10373:281;10456:27;10478:4;10456:27;:::i;:::-;10448:6;10444:40;10586:6;10574:10;10571:22;10550:18;10538:10;10535:34;10532:62;10529:88;;;10597:18;;:::i;:::-;10529:88;10637:10;10633:2;10626:22;10416:238;10373:281;;:::o;10660:129::-;10694:6;10721:20;;:::i;:::-;10711:30;;10750:33;10778:4;10770:6;10750:33;:::i;:::-;10660:129;;;:::o;10795:308::-;10857:4;10947:18;10939:6;10936:30;10933:56;;;10969:18;;:::i;:::-;10933:56;11007:29;11029:6;11007:29;:::i;:::-;10999:37;;11091:4;11085;11081:15;11073:23;;10795:308;;;:::o;11109:146::-;11206:6;11201:3;11196;11183:30;11247:1;11238:6;11233:3;11229:16;11222:27;11109:146;;;:::o;11261:425::-;11339:5;11364:66;11380:49;11422:6;11380:49;:::i;:::-;11364:66;:::i;:::-;11355:75;;11453:6;11446:5;11439:21;11491:4;11484:5;11480:16;11529:3;11520:6;11515:3;11511:16;11508:25;11505:112;;;11536:79;;:::i;:::-;11505:112;11626:54;11673:6;11668:3;11663;11626:54;:::i;:::-;11345:341;11261:425;;;;;:::o;11706:340::-;11762:5;11811:3;11804:4;11796:6;11792:17;11788:27;11778:122;;11819:79;;:::i;:::-;11778:122;11936:6;11923:20;11961:79;12036:3;12028:6;12021:4;12013:6;12009:17;11961:79;:::i;:::-;11952:88;;11768:278;11706:340;;;;:::o;12052:834::-;12140:6;12148;12197:2;12185:9;12176:7;12172:23;12168:32;12165:119;;;12203:79;;:::i;:::-;12165:119;12351:1;12340:9;12336:17;12323:31;12381:18;12373:6;12370:30;12367:117;;;12403:79;;:::i;:::-;12367:117;12508:63;12563:7;12554:6;12543:9;12539:22;12508:63;:::i;:::-;12498:73;;12294:287;12648:2;12637:9;12633:18;12620:32;12679:18;12671:6;12668:30;12665:117;;;12701:79;;:::i;:::-;12665:117;12806:63;12861:7;12852:6;12841:9;12837:22;12806:63;:::i;:::-;12796:73;;12591:288;12052:834;;;;;:::o;12892:116::-;12962:21;12977:5;12962:21;:::i;:::-;12955:5;12952:32;12942:60;;12998:1;12995;12988:12;12942:60;12892:116;:::o;13014:133::-;13057:5;13095:6;13082:20;13073:29;;13111:30;13135:5;13111:30;:::i;:::-;13014:133;;;;:::o;13153:1033::-;13245:6;13253;13261;13269;13277;13285;13334:3;13322:9;13313:7;13309:23;13305:33;13302:120;;;13341:79;;:::i;:::-;13302:120;13461:1;13486:50;13528:7;13519:6;13508:9;13504:22;13486:50;:::i;:::-;13476:60;;13432:114;13585:2;13611:50;13653:7;13644:6;13633:9;13629:22;13611:50;:::i;:::-;13601:60;;13556:115;13710:2;13736:50;13778:7;13769:6;13758:9;13754:22;13736:50;:::i;:::-;13726:60;;13681:115;13835:2;13861:50;13903:7;13894:6;13883:9;13879:22;13861:50;:::i;:::-;13851:60;;13806:115;13960:3;13987:53;14032:7;14023:6;14012:9;14008:22;13987:53;:::i;:::-;13977:63;;13931:119;14089:3;14116:53;14161:7;14152:6;14141:9;14137:22;14116:53;:::i;:::-;14106:63;;14060:119;13153:1033;;;;;;;;:::o;14192:1349::-;14314:6;14322;14330;14338;14346;14354;14362;14370;14419:3;14407:9;14398:7;14394:23;14390:33;14387:120;;;14426:79;;:::i;:::-;14387:120;14546:1;14571:53;14616:7;14607:6;14596:9;14592:22;14571:53;:::i;:::-;14561:63;;14517:117;14673:2;14699:53;14744:7;14735:6;14724:9;14720:22;14699:53;:::i;:::-;14689:63;;14644:118;14801:2;14827:53;14872:7;14863:6;14852:9;14848:22;14827:53;:::i;:::-;14817:63;;14772:118;14929:2;14955:53;15000:7;14991:6;14980:9;14976:22;14955:53;:::i;:::-;14945:63;;14900:118;15057:3;15084:53;15129:7;15120:6;15109:9;15105:22;15084:53;:::i;:::-;15074:63;;15028:119;15186:3;15213:53;15258:7;15249:6;15238:9;15234:22;15213:53;:::i;:::-;15203:63;;15157:119;15315:3;15342:53;15387:7;15378:6;15367:9;15363:22;15342:53;:::i;:::-;15332:63;;15286:119;15444:3;15471:53;15516:7;15507:6;15496:9;15492:22;15471:53;:::i;:::-;15461:63;;15415:119;14192:1349;;;;;;;;;;;:::o;15547:474::-;15615:6;15623;15672:2;15660:9;15651:7;15647:23;15643:32;15640:119;;;15678:79;;:::i;:::-;15640:119;15798:1;15823:53;15868:7;15859:6;15848:9;15844:22;15823:53;:::i;:::-;15813:63;;15769:117;15925:2;15951:53;15996:7;15987:6;15976:9;15972:22;15951:53;:::i;:::-;15941:63;;15896:118;15547:474;;;;;:::o;16027:180::-;16075:77;16072:1;16065:88;16172:4;16169:1;16162:15;16196:4;16193:1;16186:15;16213:120;16301:1;16294:5;16291:12;16281:46;;16307:18;;:::i;:::-;16281:46;16213:120;:::o;16339:141::-;16391:7;16420:5;16409:16;;16426:48;16468:5;16426:48;:::i;:::-;16339:141;;;:::o;16486:::-;16549:9;16582:39;16615:5;16582:39;:::i;:::-;16569:52;;16486:141;;;:::o;16633:157::-;16733:50;16777:5;16733:50;:::i;:::-;16728:3;16721:63;16633:157;;:::o;16796:248::-;16902:4;16940:2;16929:9;16925:18;16917:26;;16953:84;17034:1;17023:9;17019:17;17010:6;16953:84;:::i;:::-;16796:248;;;;:::o;17050:311::-;17127:4;17217:18;17209:6;17206:30;17203:56;;;17239:18;;:::i;:::-;17203:56;17289:4;17281:6;17277:17;17269:25;;17349:4;17343;17339:15;17331:23;;17050:311;;;:::o;17367:117::-;17476:1;17473;17466:12;17507:710;17603:5;17628:81;17644:64;17701:6;17644:64;:::i;:::-;17628:81;:::i;:::-;17619:90;;17729:5;17758:6;17751:5;17744:21;17792:4;17785:5;17781:16;17774:23;;17845:4;17837:6;17833:17;17825:6;17821:30;17874:3;17866:6;17863:15;17860:122;;;17893:79;;:::i;:::-;17860:122;18008:6;17991:220;18025:6;18020:3;18017:15;17991:220;;;18100:3;18129:37;18162:3;18150:10;18129:37;:::i;:::-;18124:3;18117:50;18196:4;18191:3;18187:14;18180:21;;18067:144;18051:4;18046:3;18042:14;18035:21;;17991:220;;;17995:21;17609:608;;17507:710;;;;;:::o;18240:370::-;18311:5;18360:3;18353:4;18345:6;18341:17;18337:27;18327:122;;18368:79;;:::i;:::-;18327:122;18485:6;18472:20;18510:94;18600:3;18592:6;18585:4;18577:6;18573:17;18510:94;:::i;:::-;18501:103;;18317:293;18240:370;;;;:::o;18616:114::-;18704:1;18697:5;18694:12;18684:40;;18720:1;18717;18710:12;18684:40;18616:114;:::o;18736:169::-;18797:5;18835:6;18822:20;18813:29;;18851:48;18893:5;18851:48;:::i;:::-;18736:169;;;;:::o;18911:714::-;19019:6;19027;19076:2;19064:9;19055:7;19051:23;19047:32;19044:119;;;19082:79;;:::i;:::-;19044:119;19230:1;19219:9;19215:17;19202:31;19260:18;19252:6;19249:30;19246:117;;;19282:79;;:::i;:::-;19246:117;19387:78;19457:7;19448:6;19437:9;19433:22;19387:78;:::i;:::-;19377:88;;19173:302;19514:2;19540:68;19600:7;19591:6;19580:9;19576:22;19540:68;:::i;:::-;19530:78;;19485:133;18911:714;;;;;:::o;19631:180::-;19679:77;19676:1;19669:88;19776:4;19773:1;19766:15;19800:4;19797:1;19790:15;19817:320;19861:6;19898:1;19892:4;19888:12;19878:22;;19945:1;19939:4;19935:12;19966:18;19956:81;;20022:4;20014:6;20010:17;20000:27;;19956:81;20084:2;20076:6;20073:14;20053:18;20050:38;20047:84;;20103:18;;:::i;:::-;20047:84;19868:269;19817:320;;;:::o;20143:180::-;20191:77;20188:1;20181:88;20288:4;20285:1;20278:15;20312:4;20309:1;20302:15;20329:191;20369:3;20388:20;20406:1;20388:20;:::i;:::-;20383:25;;20422:20;20440:1;20422:20;:::i;:::-;20417:25;;20465:1;20462;20458:9;20451:16;;20486:3;20483:1;20480:10;20477:36;;;20493:18;;:::i;:::-;20477:36;20329:191;;;;:::o;20526:85::-;20571:7;20600:5;20589:16;;20526:85;;;:::o;20617:158::-;20675:9;20708:61;20726:42;20735:32;20761:5;20735:32;:::i;:::-;20726:42;:::i;:::-;20708:61;:::i;:::-;20695:74;;20617:158;;;:::o;20781:147::-;20876:45;20915:5;20876:45;:::i;:::-;20871:3;20864:58;20781:147;;:::o;20934:807::-;21183:4;21221:3;21210:9;21206:19;21198:27;;21235:71;21303:1;21292:9;21288:17;21279:6;21235:71;:::i;:::-;21316:72;21384:2;21373:9;21369:18;21360:6;21316:72;:::i;:::-;21398:80;21474:2;21463:9;21459:18;21450:6;21398:80;:::i;:::-;21488;21564:2;21553:9;21549:18;21540:6;21488:80;:::i;:::-;21578:73;21646:3;21635:9;21631:19;21622:6;21578:73;:::i;:::-;21661;21729:3;21718:9;21714:19;21705:6;21661:73;:::i;:::-;20934:807;;;;;;;;;:::o;21747:143::-;21804:5;21835:6;21829:13;21820:22;;21851:33;21878:5;21851:33;:::i;:::-;21747:143;;;;:::o;21896:663::-;21984:6;21992;22000;22049:2;22037:9;22028:7;22024:23;22020:32;22017:119;;;22055:79;;:::i;:::-;22017:119;22175:1;22200:64;22256:7;22247:6;22236:9;22232:22;22200:64;:::i;:::-;22190:74;;22146:128;22313:2;22339:64;22395:7;22386:6;22375:9;22371:22;22339:64;:::i;:::-;22329:74;;22284:129;22452:2;22478:64;22534:7;22525:6;22514:9;22510:22;22478:64;:::i;:::-;22468:74;;22423:129;21896:663;;;;;:::o;22565:141::-;22614:4;22637:3;22629:11;;22660:3;22657:1;22650:14;22694:4;22691:1;22681:18;22673:26;;22565:141;;;:::o;22712:93::-;22749:6;22796:2;22791;22784:5;22780:14;22776:23;22766:33;;22712:93;;;:::o;22811:107::-;22855:8;22905:5;22899:4;22895:16;22874:37;;22811:107;;;;:::o;22924:393::-;22993:6;23043:1;23031:10;23027:18;23066:97;23096:66;23085:9;23066:97;:::i;:::-;23184:39;23214:8;23203:9;23184:39;:::i;:::-;23172:51;;23256:4;23252:9;23245:5;23241:21;23232:30;;23305:4;23295:8;23291:19;23284:5;23281:30;23271:40;;23000:317;;22924:393;;;;;:::o;23323:142::-;23373:9;23406:53;23424:34;23433:24;23451:5;23433:24;:::i;:::-;23424:34;:::i;:::-;23406:53;:::i;:::-;23393:66;;23323:142;;;:::o;23471:75::-;23514:3;23535:5;23528:12;;23471:75;;;:::o;23552:269::-;23662:39;23693:7;23662:39;:::i;:::-;23723:91;23772:41;23796:16;23772:41;:::i;:::-;23764:6;23757:4;23751:11;23723:91;:::i;:::-;23717:4;23710:105;23628:193;23552:269;;;:::o;23827:73::-;23872:3;23827:73;:::o;23906:189::-;23983:32;;:::i;:::-;24024:65;24082:6;24074;24068:4;24024:65;:::i;:::-;23959:136;23906:189;;:::o;24101:186::-;24161:120;24178:3;24171:5;24168:14;24161:120;;;24232:39;24269:1;24262:5;24232:39;:::i;:::-;24205:1;24198:5;24194:13;24185:22;;24161:120;;;24101:186;;:::o;24293:543::-;24394:2;24389:3;24386:11;24383:446;;;24428:38;24460:5;24428:38;:::i;:::-;24512:29;24530:10;24512:29;:::i;:::-;24502:8;24498:44;24695:2;24683:10;24680:18;24677:49;;;24716:8;24701:23;;24677:49;24739:80;24795:22;24813:3;24795:22;:::i;:::-;24785:8;24781:37;24768:11;24739:80;:::i;:::-;24398:431;;24383:446;24293:543;;;:::o;24842:117::-;24896:8;24946:5;24940:4;24936:16;24915:37;;24842:117;;;;:::o;24965:169::-;25009:6;25042:51;25090:1;25086:6;25078:5;25075:1;25071:13;25042:51;:::i;:::-;25038:56;25123:4;25117;25113:15;25103:25;;25016:118;24965:169;;;;:::o;25139:295::-;25215:4;25361:29;25386:3;25380:4;25361:29;:::i;:::-;25353:37;;25423:3;25420:1;25416:11;25410:4;25407:21;25399:29;;25139:295;;;;:::o;25439:1395::-;25556:37;25589:3;25556:37;:::i;:::-;25658:18;25650:6;25647:30;25644:56;;;25680:18;;:::i;:::-;25644:56;25724:38;25756:4;25750:11;25724:38;:::i;:::-;25809:67;25869:6;25861;25855:4;25809:67;:::i;:::-;25903:1;25927:4;25914:17;;25959:2;25951:6;25948:14;25976:1;25971:618;;;;26633:1;26650:6;26647:77;;;26699:9;26694:3;26690:19;26684:26;26675:35;;26647:77;26750:67;26810:6;26803:5;26750:67;:::i;:::-;26744:4;26737:81;26606:222;25941:887;;25971:618;26023:4;26019:9;26011:6;26007:22;26057:37;26089:4;26057:37;:::i;:::-;26116:1;26130:208;26144:7;26141:1;26138:14;26130:208;;;26223:9;26218:3;26214:19;26208:26;26200:6;26193:42;26274:1;26266:6;26262:14;26252:24;;26321:2;26310:9;26306:18;26293:31;;26167:4;26164:1;26160:12;26155:17;;26130:208;;;26366:6;26357:7;26354:19;26351:179;;;26424:9;26419:3;26415:19;26409:26;26467:48;26509:4;26501:6;26497:17;26486:9;26467:48;:::i;:::-;26459:6;26452:64;26374:156;26351:179;26576:1;26572;26564:6;26560:14;26556:22;26550:4;26543:36;25978:611;;;25941:887;;25531:1303;;;25439:1395;;:::o;26840:224::-;26980:34;26976:1;26968:6;26964:14;26957:58;27049:7;27044:2;27036:6;27032:15;27025:32;26840:224;:::o;27070:366::-;27212:3;27233:67;27297:2;27292:3;27233:67;:::i;:::-;27226:74;;27309:93;27398:3;27309:93;:::i;:::-;27427:2;27422:3;27418:12;27411:19;;27070:366;;;:::o;27442:419::-;27608:4;27646:2;27635:9;27631:18;27623:26;;27695:9;27689:4;27685:20;27681:1;27670:9;27666:17;27659:47;27723:131;27849:4;27723:131;:::i;:::-;27715:139;;27442:419;;;:::o;27867:173::-;28007:25;28003:1;27995:6;27991:14;27984:49;27867:173;:::o;28046:366::-;28188:3;28209:67;28273:2;28268:3;28209:67;:::i;:::-;28202:74;;28285:93;28374:3;28285:93;:::i;:::-;28403:2;28398:3;28394:12;28387:19;;28046:366;;;:::o;28418:419::-;28584:4;28622:2;28611:9;28607:18;28599:26;;28671:9;28665:4;28661:20;28657:1;28646:9;28642:17;28635:47;28699:131;28825:4;28699:131;:::i;:::-;28691:139;;28418:419;;;:::o;28843:180::-;28891:77;28888:1;28881:88;28988:4;28985:1;28978:15;29012:4;29009:1;29002:15;29029:233;29068:3;29091:24;29109:5;29091:24;:::i;:::-;29082:33;;29137:66;29130:5;29127:77;29124:103;;29207:18;;:::i;:::-;29124:103;29254:1;29247:5;29243:13;29236:20;;29029:233;;;:::o;29268:225::-;29408:34;29404:1;29396:6;29392:14;29385:58;29477:8;29472:2;29464:6;29460:15;29453:33;29268:225;:::o;29499:366::-;29641:3;29662:67;29726:2;29721:3;29662:67;:::i;:::-;29655:74;;29738:93;29827:3;29738:93;:::i;:::-;29856:2;29851:3;29847:12;29840:19;;29499:366;;;:::o;29871:419::-;30037:4;30075:2;30064:9;30060:18;30052:26;;30124:9;30118:4;30114:20;30110:1;30099:9;30095:17;30088:47;30152:131;30278:4;30152:131;:::i;:::-;30144:139;;29871:419;;;:::o;30296:180::-;30344:77;30341:1;30334:88;30441:4;30438:1;30431:15;30465:4;30462:1;30455:15;30482:185;30522:1;30539:20;30557:1;30539:20;:::i;:::-;30534:25;;30573:20;30591:1;30573:20;:::i;:::-;30568:25;;30612:1;30602:35;;30617:18;;:::i;:::-;30602:35;30659:1;30656;30652:9;30647:14;;30482:185;;;;:::o;30673:410::-;30713:7;30736:20;30754:1;30736:20;:::i;:::-;30731:25;;30770:20;30788:1;30770:20;:::i;:::-;30765:25;;30825:1;30822;30818:9;30847:30;30865:11;30847:30;:::i;:::-;30836:41;;31026:1;31017:7;31013:15;31010:1;31007:22;30987:1;30980:9;30960:83;30937:139;;31056:18;;:::i;:::-;30937:139;30721:362;30673:410;;;;:::o;31089:194::-;31129:4;31149:20;31167:1;31149:20;:::i;:::-;31144:25;;31183:20;31201:1;31183:20;:::i;:::-;31178:25;;31227:1;31224;31220:9;31212:17;;31251:1;31245:4;31242:11;31239:37;;;31256:18;;:::i;:::-;31239:37;31089:194;;;;:::o;31289:182::-;31429:34;31425:1;31417:6;31413:14;31406:58;31289:182;:::o;31477:366::-;31619:3;31640:67;31704:2;31699:3;31640:67;:::i;:::-;31633:74;;31716:93;31805:3;31716:93;:::i;:::-;31834:2;31829:3;31825:12;31818:19;;31477:366;;;:::o;31849:419::-;32015:4;32053:2;32042:9;32038:18;32030:26;;32102:9;32096:4;32092:20;32088:1;32077:9;32073:17;32066:47;32130:131;32256:4;32130:131;:::i;:::-;32122:139;;31849:419;;;:::o;32274:223::-;32414:34;32410:1;32402:6;32398:14;32391:58;32483:6;32478:2;32470:6;32466:15;32459:31;32274:223;:::o;32503:366::-;32645:3;32666:67;32730:2;32725:3;32666:67;:::i;:::-;32659:74;;32742:93;32831:3;32742:93;:::i;:::-;32860:2;32855:3;32851:12;32844:19;;32503:366;;;:::o;32875:419::-;33041:4;33079:2;33068:9;33064:18;33056:26;;33128:9;33122:4;33118:20;33114:1;33103:9;33099:17;33092:47;33156:131;33282:4;33156:131;:::i;:::-;33148:139;;32875:419;;;:::o;33300:221::-;33440:34;33436:1;33428:6;33424:14;33417:58;33509:4;33504:2;33496:6;33492:15;33485:29;33300:221;:::o;33527:366::-;33669:3;33690:67;33754:2;33749:3;33690:67;:::i;:::-;33683:74;;33766:93;33855:3;33766:93;:::i;:::-;33884:2;33879:3;33875:12;33868:19;;33527:366;;;:::o;33899:419::-;34065:4;34103:2;34092:9;34088:18;34080:26;;34152:9;34146:4;34142:20;34138:1;34127:9;34123:17;34116:47;34180:131;34306:4;34180:131;:::i;:::-;34172:139;;33899:419;;;:::o;34324:179::-;34464:31;34460:1;34452:6;34448:14;34441:55;34324:179;:::o;34509:366::-;34651:3;34672:67;34736:2;34731:3;34672:67;:::i;:::-;34665:74;;34748:93;34837:3;34748:93;:::i;:::-;34866:2;34861:3;34857:12;34850:19;;34509:366;;;:::o;34881:419::-;35047:4;35085:2;35074:9;35070:18;35062:26;;35134:9;35128:4;35124:20;35120:1;35109:9;35105:17;35098:47;35162:131;35288:4;35162:131;:::i;:::-;35154:139;;34881:419;;;:::o;35306:224::-;35446:34;35442:1;35434:6;35430:14;35423:58;35515:7;35510:2;35502:6;35498:15;35491:32;35306:224;:::o;35536:366::-;35678:3;35699:67;35763:2;35758:3;35699:67;:::i;:::-;35692:74;;35775:93;35864:3;35775:93;:::i;:::-;35893:2;35888:3;35884:12;35877:19;;35536:366;;;:::o;35908:419::-;36074:4;36112:2;36101:9;36097:18;36089:26;;36161:9;36155:4;36151:20;36147:1;36136:9;36132:17;36125:47;36189:131;36315:4;36189:131;:::i;:::-;36181:139;;35908:419;;;:::o;36333:222::-;36473:34;36469:1;36461:6;36457:14;36450:58;36542:5;36537:2;36529:6;36525:15;36518:30;36333:222;:::o;36561:366::-;36703:3;36724:67;36788:2;36783:3;36724:67;:::i;:::-;36717:74;;36800:93;36889:3;36800:93;:::i;:::-;36918:2;36913:3;36909:12;36902:19;;36561:366;;;:::o;36933:419::-;37099:4;37137:2;37126:9;37122:18;37114:26;;37186:9;37180:4;37176:20;37172:1;37161:9;37157:17;37150:47;37214:131;37340:4;37214:131;:::i;:::-;37206:139;;36933:419;;;:::o;37358:225::-;37498:34;37494:1;37486:6;37482:14;37475:58;37567:8;37562:2;37554:6;37550:15;37543:33;37358:225;:::o;37589:366::-;37731:3;37752:67;37816:2;37811:3;37752:67;:::i;:::-;37745:74;;37828:93;37917:3;37828:93;:::i;:::-;37946:2;37941:3;37937:12;37930:19;;37589:366;;;:::o;37961:419::-;38127:4;38165:2;38154:9;38150:18;38142:26;;38214:9;38208:4;38204:20;38200:1;38189:9;38185:17;38178:47;38242:131;38368:4;38242:131;:::i;:::-;38234:139;;37961:419;;;:::o;38386:178::-;38526:30;38522:1;38514:6;38510:14;38503:54;38386:178;:::o;38570:366::-;38712:3;38733:67;38797:2;38792:3;38733:67;:::i;:::-;38726:74;;38809:93;38898:3;38809:93;:::i;:::-;38927:2;38922:3;38918:12;38911:19;;38570:366;;;:::o;38942:419::-;39108:4;39146:2;39135:9;39131:18;39123:26;;39195:9;39189:4;39185:20;39181:1;39170:9;39166:17;39159:47;39223:131;39349:4;39223:131;:::i;:::-;39215:139;;38942:419;;;:::o;39367:234::-;39507:34;39503:1;39495:6;39491:14;39484:58;39576:17;39571:2;39563:6;39559:15;39552:42;39367:234;:::o;39607:366::-;39749:3;39770:67;39834:2;39829:3;39770:67;:::i;:::-;39763:74;;39846:93;39935:3;39846:93;:::i;:::-;39964:2;39959:3;39955:12;39948:19;;39607:366;;;:::o;39979:419::-;40145:4;40183:2;40172:9;40168:18;40160:26;;40232:9;40226:4;40222:20;40218:1;40207:9;40203:17;40196:47;40260:131;40386:4;40260:131;:::i;:::-;40252:139;;39979:419;;;:::o;40404:177::-;40544:29;40540:1;40532:6;40528:14;40521:53;40404:177;:::o;40587:366::-;40729:3;40750:67;40814:2;40809:3;40750:67;:::i;:::-;40743:74;;40826:93;40915:3;40826:93;:::i;:::-;40944:2;40939:3;40935:12;40928:19;;40587:366;;;:::o;40959:419::-;41125:4;41163:2;41152:9;41148:18;41140:26;;41212:9;41206:4;41202:20;41198:1;41187:9;41183:17;41176:47;41240:131;41366:4;41240:131;:::i;:::-;41232:139;;40959:419;;;:::o;41384:238::-;41524:34;41520:1;41512:6;41508:14;41501:58;41593:21;41588:2;41580:6;41576:15;41569:46;41384:238;:::o;41628:366::-;41770:3;41791:67;41855:2;41850:3;41791:67;:::i;:::-;41784:74;;41867:93;41956:3;41867:93;:::i;:::-;41985:2;41980:3;41976:12;41969:19;;41628:366;;;:::o;42000:419::-;42166:4;42204:2;42193:9;42189:18;42181:26;;42253:9;42247:4;42243:20;42239:1;42228:9;42224:17;42217:47;42281:131;42407:4;42281:131;:::i;:::-;42273:139;;42000:419;;;:::o;42425:291::-;42565:34;42561:1;42553:6;42549:14;42542:58;42634:34;42629:2;42621:6;42617:15;42610:59;42703:5;42698:2;42690:6;42686:15;42679:30;42425:291;:::o;42722:366::-;42864:3;42885:67;42949:2;42944:3;42885:67;:::i;:::-;42878:74;;42961:93;43050:3;42961:93;:::i;:::-;43079:2;43074:3;43070:12;43063:19;;42722:366;;;:::o;43094:419::-;43260:4;43298:2;43287:9;43283:18;43275:26;;43347:9;43341:4;43337:20;43333:1;43322:9;43318:17;43311:47;43375:131;43501:4;43375:131;:::i;:::-;43367:139;;43094:419;;;:::o;43519:300::-;43659:34;43655:1;43647:6;43643:14;43636:58;43728:34;43723:2;43715:6;43711:15;43704:59;43797:14;43792:2;43784:6;43780:15;43773:39;43519:300;:::o;43825:366::-;43967:3;43988:67;44052:2;44047:3;43988:67;:::i;:::-;43981:74;;44064:93;44153:3;44064:93;:::i;:::-;44182:2;44177:3;44173:12;44166:19;;43825:366;;;:::o;44197:419::-;44363:4;44401:2;44390:9;44386:18;44378:26;;44450:9;44444:4;44440:20;44436:1;44425:9;44421:17;44414:47;44478:131;44604:4;44478:131;:::i;:::-;44470:139;;44197:419;;;:::o;44622:176::-;44762:28;44758:1;44750:6;44746:14;44739:52;44622:176;:::o;44804:366::-;44946:3;44967:67;45031:2;45026:3;44967:67;:::i;:::-;44960:74;;45043:93;45132:3;45043:93;:::i;:::-;45161:2;45156:3;45152:12;45145:19;;44804:366;;;:::o;45176:419::-;45342:4;45380:2;45369:9;45365:18;45357:26;;45429:9;45423:4;45419:20;45415:1;45404:9;45400:17;45393:47;45457:131;45583:4;45457:131;:::i;:::-;45449:139;;45176:419;;;:::o;45601:175::-;45741:27;45737:1;45729:6;45725:14;45718:51;45601:175;:::o;45782:366::-;45924:3;45945:67;46009:2;46004:3;45945:67;:::i;:::-;45938:74;;46021:93;46110:3;46021:93;:::i;:::-;46139:2;46134:3;46130:12;46123:19;;45782:366;;;:::o;46154:419::-;46320:4;46358:2;46347:9;46343:18;46335:26;;46407:9;46401:4;46397:20;46393:1;46382:9;46378:17;46371:47;46435:131;46561:4;46435:131;:::i;:::-;46427:139;;46154:419;;;:::o;46579:220::-;46719:34;46715:1;46707:6;46703:14;46696:58;46788:3;46783:2;46775:6;46771:15;46764:28;46579:220;:::o;46805:366::-;46947:3;46968:67;47032:2;47027:3;46968:67;:::i;:::-;46961:74;;47044:93;47133:3;47044:93;:::i;:::-;47162:2;47157:3;47153:12;47146:19;;46805:366;;;:::o;47177:419::-;47343:4;47381:2;47370:9;47366:18;47358:26;;47430:9;47424:4;47420:20;47416:1;47405:9;47401:17;47394:47;47458:131;47584:4;47458:131;:::i;:::-;47450:139;;47177:419;;;:::o;47602:221::-;47742:34;47738:1;47730:6;47726:14;47719:58;47811:4;47806:2;47798:6;47794:15;47787:29;47602:221;:::o;47829:366::-;47971:3;47992:67;48056:2;48051:3;47992:67;:::i;:::-;47985:74;;48068:93;48157:3;48068:93;:::i;:::-;48186:2;48181:3;48177:12;48170:19;;47829:366;;;:::o;48201:419::-;48367:4;48405:2;48394:9;48390:18;48382:26;;48454:9;48448:4;48444:20;48440:1;48429:9;48425:17;48418:47;48482:131;48608:4;48482:131;:::i;:::-;48474:139;;48201:419;;;:::o
Swarm Source
ipfs://4b57c8bc6eddafc81be52359365e5da78e91ef43775b644fe4af61a0d8c27164
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.