ERC-20
Overview
Max Total Supply
100,000,000 RYU
Holders
18
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
229,621.601595105620769254 RYUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Ryu
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-25 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.15; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. * * 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; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using this function * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, 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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _createSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev 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 {} } /** * @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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } 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); } 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; } 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; } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SignedSafeMath { /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { return a * b; } /** * @dev Returns the integer division of two signed integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(int256 a, int256 b) internal pure returns (int256) { return a / b; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { return a - b; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { return a + b; } } // 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 no longer needed starting with Solidity 0.8. 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 substraction 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; } } } /** * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow * checks. * * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. * * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing * all math on `uint256` and `int256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint224 from uint256, reverting on * overflow (when the input is greater than largest uint224). * * Counterpart to Solidity's `uint224` operator. * * Requirements: * * - input must fit into 224 bits */ function toUint224(uint256 value) internal pure returns (uint224) { require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); return uint224(value); } /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint96 from uint256, reverting on * overflow (when the input is greater than largest uint96). * * Counterpart to Solidity's `uint96` operator. * * Requirements: * * - input must fit into 96 bits */ function toUint96(uint256 value) internal pure returns (uint96) { require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); return uint96(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Returns the downcasted int128 from int256, reverting on * overflow (when the input is less than smallest int128 or * greater than largest int128). * * Counterpart to Solidity's `int128` operator. * * Requirements: * * - input must fit into 128 bits * * _Available since v3.1._ */ function toInt128(int256 value) internal pure returns (int128) { require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits"); return int128(value); } /** * @dev Returns the downcasted int64 from int256, reverting on * overflow (when the input is less than smallest int64 or * greater than largest int64). * * Counterpart to Solidity's `int64` operator. * * Requirements: * * - input must fit into 64 bits * * _Available since v3.1._ */ function toInt64(int256 value) internal pure returns (int64) { require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits"); return int64(value); } /** * @dev Returns the downcasted int32 from int256, reverting on * overflow (when the input is less than smallest int32 or * greater than largest int32). * * Counterpart to Solidity's `int32` operator. * * Requirements: * * - input must fit into 32 bits * * _Available since v3.1._ */ function toInt32(int256 value) internal pure returns (int32) { require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits"); return int32(value); } /** * @dev Returns the downcasted int16 from int256, reverting on * overflow (when the input is less than smallest int16 or * greater than largest int16). * * Counterpart to Solidity's `int16` operator. * * Requirements: * * - input must fit into 16 bits * * _Available since v3.1._ */ function toInt16(int256 value) internal pure returns (int16) { require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits"); return int16(value); } /** * @dev Returns the downcasted int8 from int256, reverting on * overflow (when the input is less than smallest int8 or * greater than largest int8). * * Counterpart to Solidity's `int8` operator. * * Requirements: * * - input must fit into 8 bits. * * _Available since v3.1._ */ function toInt8(int256 value) internal pure returns (int8) { require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits"); return int8(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } } contract Ryu is ERC20, Ownable { using SafeMath for uint256; bool public swapAndLiquifyEnabled = true; bool private inSwapAndLiquify; bool public cooldownEnabled = true; uint256 public cooldownTimerInterval = 60 seconds; mapping (address => uint) private cooldownTimer; mapping (address => bool) public isTimelockExempt; uint256 public maxTransactionAmount = 1000000 * (10**18); uint256 public swapTokensAtAmount = 30000 * (10**18); uint256 public maxWalletToken = 2000000 * (10**18); uint256 public liquidityFee = 2; uint256 public marketingFee = 3; address payable public marketingWallet = payable(0xD81e7DC0B52C263Aa2234923864c63755950DB34); IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapETHForTokens(uint256 amountIn, address[] path); event ExcludeFromFees(address indexed account, bool isExcluded); constructor() ERC20("Ryu", "RYU") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // uniswap v2 router address // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; // exclude from paying fees and max transaction amount excludeFromFees(owner(), true); excludeFromFees(marketingWallet, true); excludeFromFees(address(this), true); isTimelockExempt[owner()] = true; isTimelockExempt[address(this)] = true; isTimelockExempt[0x000000000000000000000000000000000000dEaD] = true; /* an internal function that is only called here, and CANNOT be called ever again */ _createSupply(owner(), 100000000 * (10**18)); } 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"); if(amount == 0) { super._transfer(from, to, 0); return; } if(cooldownEnabled && from == uniswapV2Pair && !isTimelockExempt[from]){ require(cooldownTimer[from] < block.timestamp, "Please wait for cooldown between buys"); cooldownTimer[from] = block.timestamp + cooldownTimerInterval; } bool excludedAccount = _isExcludedFromFees[from] || _isExcludedFromFees[to]; if(!excludedAccount){ require(amount <= maxTransactionAmount, "amount exceeds the maxTransactionAmount."); } if (from == uniswapV2Pair && !excludedAccount) { uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if(overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapAndLiquifyEnabled) { contractTokenBalance = swapTokensAtAmount; swapAndLiquify(contractTokenBalance); } // if any account belongs to _isExcludedFromFee account then remove the fee if(!excludedAccount) { uint256 fees; if(from == uniswapV2Pair || to == uniswapV2Pair) { fees = amount.mul(liquidityFee.add(marketingFee)).div(100); } amount = amount.sub(fees); super._transfer(from, address(this), fees); } super._transfer(from, to, amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 tokensForLiquidity = contractTokenBalance.mul(liquidityFee).div(liquidityFee.add(marketingFee)); // split the Liquidity token balance into halves uint256 half = tokensForLiquidity.div(2); uint256 otherHalf = tokensForLiquidity.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); // swap and Send eth to team wallet swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity)); marketingWallet.transfer(address(this).balance); emit SwapAndLiquify(half, newBalance); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) { _approve(address(this), address(uniswapV2Router), ~uint256(0)); } // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setMaxTxAmount(uint256 _maxTx) public onlyOwner { maxTransactionAmount = _maxTx; require(maxTransactionAmount >= totalSupply().div(100), "value is too low"); } function setFee(uint256 _liquidityFee, uint256 _marketingFee) public onlyOwner { require(_liquidityFee.add(_marketingFee) <= 5, "tax too hugh"); liquidityFee = _liquidityFee; marketingFee = _marketingFee; } function setMaxWalletToken(uint256 _maxToken) external onlyOwner { maxWalletToken = _maxToken; require(maxWalletToken >= totalSupply().div(100), "value is too low"); } function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner { swapTokensAtAmount = _newAmount; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setIsTimelockExempt(address holder, bool _trueFalse) external onlyOwner { isTimelockExempt[holder] = _trueFalse; } // enable cooldown between trades function changeCooldownSettings(bool newStatus, uint256 newInterval) external onlyOwner { cooldownEnabled = newStatus; cooldownTimerInterval = newInterval; } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"},{"internalType":"uint256","name":"newInterval","type":"uint256"}],"name":"changeCooldownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTimelockExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"_trueFalse","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600560146101000a81548160ff0219169083151502179055506001600560166101000a81548160ff021916908315150217905550603c60065569d3c21bcecceda100000060095569065a4da25d3016c00000600a556a01a784379d99db42000000600b556002600c556003600d5573d81e7dc0b52c263aa2234923864c63755950db34600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d657600080fd5b506040518060400160405280600381526020017f52797500000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5259550000000000000000000000000000000000000000000000000000000000815250816003908162000154919062000bfa565b50806004908162000166919062000bfa565b505050620001896200017d6200053760201b60201c565b6200053f60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000216919062000d4b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a4919062000d4b565b6040518363ffffffff1660e01b8152600401620002c392919062000d8e565b6020604051808303816000875af1158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000309919062000d4b565b905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620003a2620003946200060560201b60201c565b60016200062f60201b60201c565b620003d7600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200062f60201b60201c565b620003ea3060016200062f60201b60201c565b600160086000620004006200060560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200052f620005176200060560201b60201c565b6a52b7d2dcc80cd2e4000000620007fe60201b60201c565b50506200103c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200063f6200053760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006656200060560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b59062000e1c565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074a9062000eb4565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007f2919062000ef3565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000870576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008679062000f60565b60405180910390fd5b62000884600083836200097660201b60201c565b806002600082825462000898919062000fb1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008ef919062000fb1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200095691906200101f565b60405180910390a362000972600083836200097b60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a0257607f821691505b60208210810362000a185762000a17620009ba565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a43565b62000a8e868362000a43565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000adb62000ad562000acf8462000aa6565b62000ab0565b62000aa6565b9050919050565b6000819050919050565b62000af78362000aba565b62000b0f62000b068262000ae2565b84845462000a50565b825550505050565b600090565b62000b2662000b17565b62000b3381848462000aec565b505050565b5b8181101562000b5b5762000b4f60008262000b1c565b60018101905062000b39565b5050565b601f82111562000baa5762000b748162000a1e565b62000b7f8462000a33565b8101602085101562000b8f578190505b62000ba762000b9e8562000a33565b83018262000b38565b50505b505050565b600082821c905092915050565b600062000bcf6000198460080262000baf565b1980831691505092915050565b600062000bea838362000bbc565b9150826002028217905092915050565b62000c058262000980565b67ffffffffffffffff81111562000c215762000c206200098b565b5b62000c2d8254620009e9565b62000c3a82828562000b5f565b600060209050601f83116001811462000c72576000841562000c5d578287015190505b62000c69858262000bdc565b86555062000cd9565b601f19841662000c828662000a1e565b60005b8281101562000cac5784890151825560018201915060208501945060208101905062000c85565b8683101562000ccc578489015162000cc8601f89168262000bbc565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d138262000ce6565b9050919050565b62000d258162000d06565b811462000d3157600080fd5b50565b60008151905062000d458162000d1a565b92915050565b60006020828403121562000d645762000d6362000ce1565b5b600062000d748482850162000d34565b91505092915050565b62000d888162000d06565b82525050565b600060408201905062000da5600083018562000d7d565b62000db4602083018462000d7d565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e0460208362000dbb565b915062000e118262000dcc565b602082019050919050565b6000602082019050818103600083015262000e378162000df5565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000e9c602a8362000dbb565b915062000ea98262000e3e565b604082019050919050565b6000602082019050818103600083015262000ecf8162000e8d565b9050919050565b60008115159050919050565b62000eed8162000ed6565b82525050565b600060208201905062000f0a600083018462000ee2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f48601f8362000dbb565b915062000f558262000f10565b602082019050919050565b6000602082019050818103600083015262000f7b8162000f39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fbe8262000aa6565b915062000fcb8362000aa6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001003576200100262000f82565b5b828201905092915050565b620010198162000aa6565b82525050565b60006020820190506200103660008301846200100e565b92915050565b6080516139bf6200107b60003960008181610ba101528181611a2f01528181611c9d01528181611d9201528181611e150152611e6a01526139bf6000f3fe6080604052600436106102085760003560e01c8063722b62ad11610118578063a985ceef116100a0578063dd62ed3e1161006f578063dd62ed3e1461078c578063e2f45605146107c9578063e6c75f71146107f4578063ec28438a1461081f578063f2fde38b146108485761020f565b8063a985ceef146106e4578063c02466681461070f578063c49b9a8014610738578063c8c8ebe4146107615761020f565b806391d55f41116100e757806391d55f41146105eb57806395d89b411461061457806398118cb41461063f578063a457c2d71461066a578063a9059cbb146106a75761020f565b8063722b62ad14610541578063750c11b61461056c57806375f0a874146105955780638da5cb5b146105c05761020f565b806349bd5a5e1161019b57806350db71fb1161016a57806350db71fb1461047057806352f7c988146104995780636b67c4df146104c257806370a08231146104ed578063715018a61461052a5761020f565b806349bd5a5e146103a05780634a74bb02146103cb5780634fbee193146103f657806350af449e146104335761020f565b806318160ddd116101d757806318160ddd146102d057806323b872dd146102fb578063313ce5671461033857806339509351146103635761020f565b806306fdde0314610214578063095ea7b31461023f5780630d45c0e31461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610871565b604051610236919061283d565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906128f8565b610903565b6040516102739190612953565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061299a565b610921565b005b3480156102b157600080fd5b506102ba6109c2565b6040516102c79190612a39565b60405180910390f35b3480156102dc57600080fd5b506102e56109e8565b6040516102f29190612a63565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612a7e565b6109f2565b60405161032f9190612953565b60405180910390f35b34801561034457600080fd5b5061034d610aea565b60405161035a9190612aed565b60405180910390f35b34801561036f57600080fd5b5061038a600480360381019061038591906128f8565b610af3565b6040516103979190612953565b60405180910390f35b3480156103ac57600080fd5b506103b5610b9f565b6040516103c29190612b17565b60405180910390f35b3480156103d757600080fd5b506103e0610bc3565b6040516103ed9190612953565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190612b32565b610bd6565b60405161042a9190612953565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190612b32565b610c2c565b6040516104679190612953565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190612b5f565b610c4c565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190612b9f565b610d23565b005b3480156104ce57600080fd5b506104d7610e07565b6040516104e49190612a63565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190612b32565b610e0d565b6040516105219190612a63565b60405180910390f35b34801561053657600080fd5b5061053f610e55565b005b34801561054d57600080fd5b50610556610edd565b6040516105639190612a63565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612bdf565b610ee3565b005b3480156105a157600080fd5b506105aa610f69565b6040516105b79190612c2d565b60405180910390f35b3480156105cc57600080fd5b506105d5610f8f565b6040516105e29190612b17565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612bdf565b610fb9565b005b34801561062057600080fd5b5061062961109e565b604051610636919061283d565b60405180910390f35b34801561064b57600080fd5b50610654611130565b6040516106619190612a63565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c91906128f8565b611136565b60405161069e9190612953565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c991906128f8565b611221565b6040516106db9190612953565b60405180910390f35b3480156106f057600080fd5b506106f961123f565b6040516107069190612953565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190612b5f565b611252565b005b34801561074457600080fd5b5061075f600480360381019061075a9190612c48565b611409565b005b34801561076d57600080fd5b506107766114d9565b6040516107839190612a63565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190612c75565b6114df565b6040516107c09190612a63565b60405180910390f35b3480156107d557600080fd5b506107de611566565b6040516107eb9190612a63565b60405180910390f35b34801561080057600080fd5b5061080961156c565b6040516108169190612a63565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190612bdf565b611572565b005b34801561085457600080fd5b5061086f600480360381019061086a9190612b32565b611657565b005b60606003805461088090612ce4565b80601f01602080910402602001604051908101604052809291908181526020018280546108ac90612ce4565b80156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b5050505050905090565b600061091761091061174e565b8484611756565b6001905092915050565b61092961174e565b73ffffffffffffffffffffffffffffffffffffffff16610947610f8f565b73ffffffffffffffffffffffffffffffffffffffff161461099d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099490612d61565b60405180910390fd5b81600560166101000a81548160ff021916908315150217905550806006819055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109ff84848461191f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a4a61174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190612df3565b60405180910390fd5b610ade85610ad661174e565b858403611756565b60019150509392505050565b60006012905090565b6000610b95610b0061174e565b848460016000610b0e61174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b909190612e42565b611756565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600560149054906101000a900460ff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60086020528060005260406000206000915054906101000a900460ff1681565b610c5461174e565b73ffffffffffffffffffffffffffffffffffffffff16610c72610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90612d61565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d2b61174e565b73ffffffffffffffffffffffffffffffffffffffff16610d49610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9690612d61565b60405180910390fd5b6005610db48284611f3290919063ffffffff16565b1115610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90612ee4565b60405180910390fd5b81600c8190555080600d819055505050565b600d5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e5d61174e565b73ffffffffffffffffffffffffffffffffffffffff16610e7b610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890612d61565b60405180910390fd5b610edb6000611f48565b565b60065481565b610eeb61174e565b73ffffffffffffffffffffffffffffffffffffffff16610f09610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690612d61565b60405180910390fd5b80600a8190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fc161174e565b73ffffffffffffffffffffffffffffffffffffffff16610fdf610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90612d61565b60405180910390fd5b80600b8190555061105760646110496109e8565b61200e90919063ffffffff16565b600b54101561109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612f50565b60405180910390fd5b50565b6060600480546110ad90612ce4565b80601f01602080910402602001604051908101604052809291908181526020018280546110d990612ce4565b80156111265780601f106110fb57610100808354040283529160200191611126565b820191906000526020600020905b81548152906001019060200180831161110957829003601f168201915b5050505050905090565b600c5481565b6000806001600061114561174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990612fe2565b60405180910390fd5b61121661120d61174e565b85858403611756565b600191505092915050565b600061123561122e61174e565b848461191f565b6001905092915050565b600560169054906101000a900460ff1681565b61125a61174e565b73ffffffffffffffffffffffffffffffffffffffff16611278610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590612d61565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613074565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113fd9190612953565b60405180910390a25050565b61141161174e565b73ffffffffffffffffffffffffffffffffffffffff1661142f610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90612d61565b60405180910390fd5b80600560146101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516114ce9190612953565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600b5481565b61157a61174e565b73ffffffffffffffffffffffffffffffffffffffff16611598610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590612d61565b60405180910390fd5b8060098190555061161060646116026109e8565b61200e90919063ffffffff16565b6009541015611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90612f50565b60405180910390fd5b50565b61165f61174e565b73ffffffffffffffffffffffffffffffffffffffff1661167d610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90612d61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990613106565b60405180910390fd5b61174b81611f48565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc90613198565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b9061322a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119129190612a63565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906132bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f49061334e565b60405180910390fd5b60008103611a1657611a1183836000612024565b611f2d565b600560169054906101000a900460ff168015611a7d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015611ad35750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bab5742600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906133e0565b60405180910390fd5b60065442611b679190612e42565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c4e5750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905080611c9b57600954821115611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9190613472565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611cf4575080155b15611d58576000611d0484610e0d565b9050600b548382611d159190612e42565b1115611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613504565b60405180910390fd5b505b6000611d6330610e0d565b90506000600a548210159050808015611d895750600560159054906101000a900460ff16155b8015611de057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611df85750600560149054906101000a900460ff165b15611e0c57600a549150611e0b826122a3565b5b82611f1e5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611eb857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15611efc57611ef96064611eeb611edc600d54600c54611f3290919063ffffffff16565b8861243d90919063ffffffff16565b61200e90919063ffffffff16565b90505b611f0f818661245390919063ffffffff16565b9450611f1c873083612024565b505b611f29868686612024565b5050505b505050565b60008183611f409190612e42565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361201c9190613553565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906132bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f99061334e565b60405180910390fd5b61210d838383612469565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906135f6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122269190612e42565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161228a9190612a63565b60405180910390a361229d84848461246e565b50505050565b6001600560156101000a81548160ff02191690831515021790555060006122fd6122da600d54600c54611f3290919063ffffffff16565b6122ef600c548561243d90919063ffffffff16565b61200e90919063ffffffff16565b9050600061231560028361200e90919063ffffffff16565b9050600061232c828461245390919063ffffffff16565b9050600047905061233c83612473565b6000612351824761245390919063ffffffff16565b905061235d83826126ec565b612378612373868861245390919063ffffffff16565b612473565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156123e0573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051612412929190613616565b60405180910390a150505050506000600560156101000a81548160ff02191690831515021790555050565b6000818361244b919061363f565b905092915050565b600081836124619190613699565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156124905761248f6136cd565b5b6040519080825280602002602001820160405280156124be5781602001602082028036833780820191505090505b50905030816000815181106124d6576124d56136fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613740565b816001815181106125b5576125b46136fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161261c30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114df565b10156126525761265130600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611756565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126b6959493929190613866565b600060405180830381600087803b1580156126d057600080fd5b505af11580156126e4573d6000803e3d6000fd5b505050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612738610f8f565b426040518863ffffffff1660e01b815260040161275a969594939291906138c0565b60606040518083038185885af1158015612778573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061279d9190613936565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127de5780820151818401526020810190506127c3565b838111156127ed576000848401525b50505050565b6000601f19601f8301169050919050565b600061280f826127a4565b61281981856127af565b93506128298185602086016127c0565b612832816127f3565b840191505092915050565b600060208201905081810360008301526128578184612804565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061288f82612864565b9050919050565b61289f81612884565b81146128aa57600080fd5b50565b6000813590506128bc81612896565b92915050565b6000819050919050565b6128d5816128c2565b81146128e057600080fd5b50565b6000813590506128f2816128cc565b92915050565b6000806040838503121561290f5761290e61285f565b5b600061291d858286016128ad565b925050602061292e858286016128e3565b9150509250929050565b60008115159050919050565b61294d81612938565b82525050565b60006020820190506129686000830184612944565b92915050565b61297781612938565b811461298257600080fd5b50565b6000813590506129948161296e565b92915050565b600080604083850312156129b1576129b061285f565b5b60006129bf85828601612985565b92505060206129d0858286016128e3565b9150509250929050565b6000819050919050565b60006129ff6129fa6129f584612864565b6129da565b612864565b9050919050565b6000612a11826129e4565b9050919050565b6000612a2382612a06565b9050919050565b612a3381612a18565b82525050565b6000602082019050612a4e6000830184612a2a565b92915050565b612a5d816128c2565b82525050565b6000602082019050612a786000830184612a54565b92915050565b600080600060608486031215612a9757612a9661285f565b5b6000612aa5868287016128ad565b9350506020612ab6868287016128ad565b9250506040612ac7868287016128e3565b9150509250925092565b600060ff82169050919050565b612ae781612ad1565b82525050565b6000602082019050612b026000830184612ade565b92915050565b612b1181612884565b82525050565b6000602082019050612b2c6000830184612b08565b92915050565b600060208284031215612b4857612b4761285f565b5b6000612b56848285016128ad565b91505092915050565b60008060408385031215612b7657612b7561285f565b5b6000612b84858286016128ad565b9250506020612b9585828601612985565b9150509250929050565b60008060408385031215612bb657612bb561285f565b5b6000612bc4858286016128e3565b9250506020612bd5858286016128e3565b9150509250929050565b600060208284031215612bf557612bf461285f565b5b6000612c03848285016128e3565b91505092915050565b6000612c1782612864565b9050919050565b612c2781612c0c565b82525050565b6000602082019050612c426000830184612c1e565b92915050565b600060208284031215612c5e57612c5d61285f565b5b6000612c6c84828501612985565b91505092915050565b60008060408385031215612c8c57612c8b61285f565b5b6000612c9a858286016128ad565b9250506020612cab858286016128ad565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cfc57607f821691505b602082108103612d0f57612d0e612cb5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d4b6020836127af565b9150612d5682612d15565b602082019050919050565b60006020820190508181036000830152612d7a81612d3e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612ddd6028836127af565b9150612de882612d81565b604082019050919050565b60006020820190508181036000830152612e0c81612dd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e4d826128c2565b9150612e58836128c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e8d57612e8c612e13565b5b828201905092915050565b7f74617820746f6f20687567680000000000000000000000000000000000000000600082015250565b6000612ece600c836127af565b9150612ed982612e98565b602082019050919050565b60006020820190508181036000830152612efd81612ec1565b9050919050565b7f76616c756520697320746f6f206c6f7700000000000000000000000000000000600082015250565b6000612f3a6010836127af565b9150612f4582612f04565b602082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612fcc6025836127af565b9150612fd782612f70565b604082019050919050565b60006020820190508181036000830152612ffb81612fbf565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600061305e602a836127af565b915061306982613002565b604082019050919050565b6000602082019050818103600083015261308d81613051565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130f06026836127af565b91506130fb82613094565b604082019050919050565b6000602082019050818103600083015261311f816130e3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131826024836127af565b915061318d82613126565b604082019050919050565b600060208201905081810360008301526131b181613175565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132146022836127af565b915061321f826131b8565b604082019050919050565b6000602082019050818103600083015261324381613207565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132a66025836127af565b91506132b18261324a565b604082019050919050565b600060208201905081810360008301526132d581613299565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133386023836127af565b9150613343826132dc565b604082019050919050565b600060208201905081810360008301526133678161332b565b9050919050565b7f506c65617365207761697420666f7220636f6f6c646f776e206265747765656e60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b60006133ca6025836127af565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061345c6028836127af565b915061346782613400565b604082019050919050565b6000602082019050818103600083015261348b8161344f565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006134ee6024836127af565b91506134f982613492565b604082019050919050565b6000602082019050818103600083015261351d816134e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061355e826128c2565b9150613569836128c2565b92508261357957613578613524565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135e06026836127af565b91506135eb82613584565b604082019050919050565b6000602082019050818103600083015261360f816135d3565b9050919050565b600060408201905061362b6000830185612a54565b6136386020830184612a54565b9392505050565b600061364a826128c2565b9150613655836128c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561368e5761368d612e13565b5b828202905092915050565b60006136a4826128c2565b91506136af836128c2565b9250828210156136c2576136c1612e13565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061373a81612896565b92915050565b6000602082840312156137565761375561285f565b5b60006137648482850161372b565b91505092915050565b6000819050919050565b600061379261378d6137888461376d565b6129da565b6128c2565b9050919050565b6137a281613777565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137dd81612884565b82525050565b60006137ef83836137d4565b60208301905092915050565b6000602082019050919050565b6000613813826137a8565b61381d81856137b3565b9350613828836137c4565b8060005b8381101561385957815161384088826137e3565b975061384b836137fb565b92505060018101905061382c565b5085935050505092915050565b600060a08201905061387b6000830188612a54565b6138886020830187613799565b818103604083015261389a8186613808565b90506138a96060830185612b08565b6138b66080830184612a54565b9695505050505050565b600060c0820190506138d56000830189612b08565b6138e26020830188612a54565b6138ef6040830187613799565b6138fc6060830186613799565b6139096080830185612b08565b61391660a0830184612a54565b979650505050505050565b600081519050613930816128cc565b92915050565b60008060006060848603121561394f5761394e61285f565b5b600061395d86828701613921565b935050602061396e86828701613921565b925050604061397f86828701613921565b915050925092509256fea2646970667358221220cd4d484a3e3218355cf0e4940c346a81e200b315bf2902d63fc77766d64a970464736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102085760003560e01c8063722b62ad11610118578063a985ceef116100a0578063dd62ed3e1161006f578063dd62ed3e1461078c578063e2f45605146107c9578063e6c75f71146107f4578063ec28438a1461081f578063f2fde38b146108485761020f565b8063a985ceef146106e4578063c02466681461070f578063c49b9a8014610738578063c8c8ebe4146107615761020f565b806391d55f41116100e757806391d55f41146105eb57806395d89b411461061457806398118cb41461063f578063a457c2d71461066a578063a9059cbb146106a75761020f565b8063722b62ad14610541578063750c11b61461056c57806375f0a874146105955780638da5cb5b146105c05761020f565b806349bd5a5e1161019b57806350db71fb1161016a57806350db71fb1461047057806352f7c988146104995780636b67c4df146104c257806370a08231146104ed578063715018a61461052a5761020f565b806349bd5a5e146103a05780634a74bb02146103cb5780634fbee193146103f657806350af449e146104335761020f565b806318160ddd116101d757806318160ddd146102d057806323b872dd146102fb578063313ce5671461033857806339509351146103635761020f565b806306fdde0314610214578063095ea7b31461023f5780630d45c0e31461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610871565b604051610236919061283d565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906128f8565b610903565b6040516102739190612953565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061299a565b610921565b005b3480156102b157600080fd5b506102ba6109c2565b6040516102c79190612a39565b60405180910390f35b3480156102dc57600080fd5b506102e56109e8565b6040516102f29190612a63565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612a7e565b6109f2565b60405161032f9190612953565b60405180910390f35b34801561034457600080fd5b5061034d610aea565b60405161035a9190612aed565b60405180910390f35b34801561036f57600080fd5b5061038a600480360381019061038591906128f8565b610af3565b6040516103979190612953565b60405180910390f35b3480156103ac57600080fd5b506103b5610b9f565b6040516103c29190612b17565b60405180910390f35b3480156103d757600080fd5b506103e0610bc3565b6040516103ed9190612953565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190612b32565b610bd6565b60405161042a9190612953565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190612b32565b610c2c565b6040516104679190612953565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190612b5f565b610c4c565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190612b9f565b610d23565b005b3480156104ce57600080fd5b506104d7610e07565b6040516104e49190612a63565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190612b32565b610e0d565b6040516105219190612a63565b60405180910390f35b34801561053657600080fd5b5061053f610e55565b005b34801561054d57600080fd5b50610556610edd565b6040516105639190612a63565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612bdf565b610ee3565b005b3480156105a157600080fd5b506105aa610f69565b6040516105b79190612c2d565b60405180910390f35b3480156105cc57600080fd5b506105d5610f8f565b6040516105e29190612b17565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612bdf565b610fb9565b005b34801561062057600080fd5b5061062961109e565b604051610636919061283d565b60405180910390f35b34801561064b57600080fd5b50610654611130565b6040516106619190612a63565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c91906128f8565b611136565b60405161069e9190612953565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c991906128f8565b611221565b6040516106db9190612953565b60405180910390f35b3480156106f057600080fd5b506106f961123f565b6040516107069190612953565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190612b5f565b611252565b005b34801561074457600080fd5b5061075f600480360381019061075a9190612c48565b611409565b005b34801561076d57600080fd5b506107766114d9565b6040516107839190612a63565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190612c75565b6114df565b6040516107c09190612a63565b60405180910390f35b3480156107d557600080fd5b506107de611566565b6040516107eb9190612a63565b60405180910390f35b34801561080057600080fd5b5061080961156c565b6040516108169190612a63565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190612bdf565b611572565b005b34801561085457600080fd5b5061086f600480360381019061086a9190612b32565b611657565b005b60606003805461088090612ce4565b80601f01602080910402602001604051908101604052809291908181526020018280546108ac90612ce4565b80156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b5050505050905090565b600061091761091061174e565b8484611756565b6001905092915050565b61092961174e565b73ffffffffffffffffffffffffffffffffffffffff16610947610f8f565b73ffffffffffffffffffffffffffffffffffffffff161461099d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099490612d61565b60405180910390fd5b81600560166101000a81548160ff021916908315150217905550806006819055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109ff84848461191f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a4a61174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190612df3565b60405180910390fd5b610ade85610ad661174e565b858403611756565b60019150509392505050565b60006012905090565b6000610b95610b0061174e565b848460016000610b0e61174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b909190612e42565b611756565b6001905092915050565b7f000000000000000000000000061ca01779d64763f18cca811e39190951fa441581565b600560149054906101000a900460ff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60086020528060005260406000206000915054906101000a900460ff1681565b610c5461174e565b73ffffffffffffffffffffffffffffffffffffffff16610c72610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90612d61565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d2b61174e565b73ffffffffffffffffffffffffffffffffffffffff16610d49610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9690612d61565b60405180910390fd5b6005610db48284611f3290919063ffffffff16565b1115610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90612ee4565b60405180910390fd5b81600c8190555080600d819055505050565b600d5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e5d61174e565b73ffffffffffffffffffffffffffffffffffffffff16610e7b610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890612d61565b60405180910390fd5b610edb6000611f48565b565b60065481565b610eeb61174e565b73ffffffffffffffffffffffffffffffffffffffff16610f09610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690612d61565b60405180910390fd5b80600a8190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fc161174e565b73ffffffffffffffffffffffffffffffffffffffff16610fdf610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90612d61565b60405180910390fd5b80600b8190555061105760646110496109e8565b61200e90919063ffffffff16565b600b54101561109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612f50565b60405180910390fd5b50565b6060600480546110ad90612ce4565b80601f01602080910402602001604051908101604052809291908181526020018280546110d990612ce4565b80156111265780601f106110fb57610100808354040283529160200191611126565b820191906000526020600020905b81548152906001019060200180831161110957829003601f168201915b5050505050905090565b600c5481565b6000806001600061114561174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990612fe2565b60405180910390fd5b61121661120d61174e565b85858403611756565b600191505092915050565b600061123561122e61174e565b848461191f565b6001905092915050565b600560169054906101000a900460ff1681565b61125a61174e565b73ffffffffffffffffffffffffffffffffffffffff16611278610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590612d61565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613074565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113fd9190612953565b60405180910390a25050565b61141161174e565b73ffffffffffffffffffffffffffffffffffffffff1661142f610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90612d61565b60405180910390fd5b80600560146101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516114ce9190612953565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600b5481565b61157a61174e565b73ffffffffffffffffffffffffffffffffffffffff16611598610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590612d61565b60405180910390fd5b8060098190555061161060646116026109e8565b61200e90919063ffffffff16565b6009541015611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90612f50565b60405180910390fd5b50565b61165f61174e565b73ffffffffffffffffffffffffffffffffffffffff1661167d610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90612d61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990613106565b60405180910390fd5b61174b81611f48565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc90613198565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b9061322a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119129190612a63565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906132bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f49061334e565b60405180910390fd5b60008103611a1657611a1183836000612024565b611f2d565b600560169054906101000a900460ff168015611a7d57507f000000000000000000000000061ca01779d64763f18cca811e39190951fa441573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015611ad35750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bab5742600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906133e0565b60405180910390fd5b60065442611b679190612e42565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c4e5750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905080611c9b57600954821115611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9190613472565b60405180910390fd5b5b7f000000000000000000000000061ca01779d64763f18cca811e39190951fa441573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611cf4575080155b15611d58576000611d0484610e0d565b9050600b548382611d159190612e42565b1115611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613504565b60405180910390fd5b505b6000611d6330610e0d565b90506000600a548210159050808015611d895750600560159054906101000a900460ff16155b8015611de057507f000000000000000000000000061ca01779d64763f18cca811e39190951fa441573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611df85750600560149054906101000a900460ff165b15611e0c57600a549150611e0b826122a3565b5b82611f1e5760007f000000000000000000000000061ca01779d64763f18cca811e39190951fa441573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611eb857507f000000000000000000000000061ca01779d64763f18cca811e39190951fa441573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15611efc57611ef96064611eeb611edc600d54600c54611f3290919063ffffffff16565b8861243d90919063ffffffff16565b61200e90919063ffffffff16565b90505b611f0f818661245390919063ffffffff16565b9450611f1c873083612024565b505b611f29868686612024565b5050505b505050565b60008183611f409190612e42565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361201c9190613553565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906132bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f99061334e565b60405180910390fd5b61210d838383612469565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906135f6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122269190612e42565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161228a9190612a63565b60405180910390a361229d84848461246e565b50505050565b6001600560156101000a81548160ff02191690831515021790555060006122fd6122da600d54600c54611f3290919063ffffffff16565b6122ef600c548561243d90919063ffffffff16565b61200e90919063ffffffff16565b9050600061231560028361200e90919063ffffffff16565b9050600061232c828461245390919063ffffffff16565b9050600047905061233c83612473565b6000612351824761245390919063ffffffff16565b905061235d83826126ec565b612378612373868861245390919063ffffffff16565b612473565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156123e0573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051612412929190613616565b60405180910390a150505050506000600560156101000a81548160ff02191690831515021790555050565b6000818361244b919061363f565b905092915050565b600081836124619190613699565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156124905761248f6136cd565b5b6040519080825280602002602001820160405280156124be5781602001602082028036833780820191505090505b50905030816000815181106124d6576124d56136fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613740565b816001815181106125b5576125b46136fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161261c30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114df565b10156126525761265130600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611756565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126b6959493929190613866565b600060405180830381600087803b1580156126d057600080fd5b505af11580156126e4573d6000803e3d6000fd5b505050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612738610f8f565b426040518863ffffffff1660e01b815260040161275a969594939291906138c0565b60606040518083038185885af1158015612778573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061279d9190613936565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127de5780820151818401526020810190506127c3565b838111156127ed576000848401525b50505050565b6000601f19601f8301169050919050565b600061280f826127a4565b61281981856127af565b93506128298185602086016127c0565b612832816127f3565b840191505092915050565b600060208201905081810360008301526128578184612804565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061288f82612864565b9050919050565b61289f81612884565b81146128aa57600080fd5b50565b6000813590506128bc81612896565b92915050565b6000819050919050565b6128d5816128c2565b81146128e057600080fd5b50565b6000813590506128f2816128cc565b92915050565b6000806040838503121561290f5761290e61285f565b5b600061291d858286016128ad565b925050602061292e858286016128e3565b9150509250929050565b60008115159050919050565b61294d81612938565b82525050565b60006020820190506129686000830184612944565b92915050565b61297781612938565b811461298257600080fd5b50565b6000813590506129948161296e565b92915050565b600080604083850312156129b1576129b061285f565b5b60006129bf85828601612985565b92505060206129d0858286016128e3565b9150509250929050565b6000819050919050565b60006129ff6129fa6129f584612864565b6129da565b612864565b9050919050565b6000612a11826129e4565b9050919050565b6000612a2382612a06565b9050919050565b612a3381612a18565b82525050565b6000602082019050612a4e6000830184612a2a565b92915050565b612a5d816128c2565b82525050565b6000602082019050612a786000830184612a54565b92915050565b600080600060608486031215612a9757612a9661285f565b5b6000612aa5868287016128ad565b9350506020612ab6868287016128ad565b9250506040612ac7868287016128e3565b9150509250925092565b600060ff82169050919050565b612ae781612ad1565b82525050565b6000602082019050612b026000830184612ade565b92915050565b612b1181612884565b82525050565b6000602082019050612b2c6000830184612b08565b92915050565b600060208284031215612b4857612b4761285f565b5b6000612b56848285016128ad565b91505092915050565b60008060408385031215612b7657612b7561285f565b5b6000612b84858286016128ad565b9250506020612b9585828601612985565b9150509250929050565b60008060408385031215612bb657612bb561285f565b5b6000612bc4858286016128e3565b9250506020612bd5858286016128e3565b9150509250929050565b600060208284031215612bf557612bf461285f565b5b6000612c03848285016128e3565b91505092915050565b6000612c1782612864565b9050919050565b612c2781612c0c565b82525050565b6000602082019050612c426000830184612c1e565b92915050565b600060208284031215612c5e57612c5d61285f565b5b6000612c6c84828501612985565b91505092915050565b60008060408385031215612c8c57612c8b61285f565b5b6000612c9a858286016128ad565b9250506020612cab858286016128ad565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cfc57607f821691505b602082108103612d0f57612d0e612cb5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d4b6020836127af565b9150612d5682612d15565b602082019050919050565b60006020820190508181036000830152612d7a81612d3e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612ddd6028836127af565b9150612de882612d81565b604082019050919050565b60006020820190508181036000830152612e0c81612dd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e4d826128c2565b9150612e58836128c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e8d57612e8c612e13565b5b828201905092915050565b7f74617820746f6f20687567680000000000000000000000000000000000000000600082015250565b6000612ece600c836127af565b9150612ed982612e98565b602082019050919050565b60006020820190508181036000830152612efd81612ec1565b9050919050565b7f76616c756520697320746f6f206c6f7700000000000000000000000000000000600082015250565b6000612f3a6010836127af565b9150612f4582612f04565b602082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612fcc6025836127af565b9150612fd782612f70565b604082019050919050565b60006020820190508181036000830152612ffb81612fbf565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600061305e602a836127af565b915061306982613002565b604082019050919050565b6000602082019050818103600083015261308d81613051565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130f06026836127af565b91506130fb82613094565b604082019050919050565b6000602082019050818103600083015261311f816130e3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131826024836127af565b915061318d82613126565b604082019050919050565b600060208201905081810360008301526131b181613175565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132146022836127af565b915061321f826131b8565b604082019050919050565b6000602082019050818103600083015261324381613207565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132a66025836127af565b91506132b18261324a565b604082019050919050565b600060208201905081810360008301526132d581613299565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133386023836127af565b9150613343826132dc565b604082019050919050565b600060208201905081810360008301526133678161332b565b9050919050565b7f506c65617365207761697420666f7220636f6f6c646f776e206265747765656e60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b60006133ca6025836127af565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061345c6028836127af565b915061346782613400565b604082019050919050565b6000602082019050818103600083015261348b8161344f565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006134ee6024836127af565b91506134f982613492565b604082019050919050565b6000602082019050818103600083015261351d816134e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061355e826128c2565b9150613569836128c2565b92508261357957613578613524565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135e06026836127af565b91506135eb82613584565b604082019050919050565b6000602082019050818103600083015261360f816135d3565b9050919050565b600060408201905061362b6000830185612a54565b6136386020830184612a54565b9392505050565b600061364a826128c2565b9150613655836128c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561368e5761368d612e13565b5b828202905092915050565b60006136a4826128c2565b91506136af836128c2565b9250828210156136c2576136c1612e13565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061373a81612896565b92915050565b6000602082840312156137565761375561285f565b5b60006137648482850161372b565b91505092915050565b6000819050919050565b600061379261378d6137888461376d565b6129da565b6128c2565b9050919050565b6137a281613777565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137dd81612884565b82525050565b60006137ef83836137d4565b60208301905092915050565b6000602082019050919050565b6000613813826137a8565b61381d81856137b3565b9350613828836137c4565b8060005b8381101561385957815161384088826137e3565b975061384b836137fb565b92505060018101905061382c565b5085935050505092915050565b600060a08201905061387b6000830188612a54565b6138886020830187613799565b818103604083015261389a8186613808565b90506138a96060830185612b08565b6138b66080830184612a54565b9695505050505050565b600060c0820190506138d56000830189612b08565b6138e26020830188612a54565b6138ef6040830187613799565b6138fc6060830186613799565b6139096080830185612b08565b61391660a0830184612a54565b979650505050505050565b600081519050613930816128cc565b92915050565b60008060006060848603121561394f5761394e61285f565b5b600061395d86828701613921565b935050602061396e86828701613921565b925050604061397f86828701613921565b915050925092509256fea2646970667358221220cd4d484a3e3218355cf0e4940c346a81e200b315bf2902d63fc77766d64a970464736f6c634300080f0033
Deployed Bytecode Sourcemap
39939:8516:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5802:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7969:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48222:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40667:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6922:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8620:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6764:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9521:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40715:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40012:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46957:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40250:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48038:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47289:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40528:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7093:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17332:94;;;;;;;;;;;;;:::i;:::-;;40140:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47731:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40566:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16681:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47535:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6021:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40490:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10239:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7433:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40099:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46661:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47858:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40308:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7671:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40371:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40430:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47090:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17581:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5802:100;5856:13;5889:5;5882:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5802:100;:::o;7969:169::-;8052:4;8069:39;8078:12;:10;:12::i;:::-;8092:7;8101:6;8069:8;:39::i;:::-;8126:4;8119:11;;7969:169;;;;:::o;48222:180::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48339:9:::1;48321:15;;:27;;;;;;;;;;;;;;;;;;48383:11;48359:21;:35;;;;48222:180:::0;;:::o;40667:41::-;;;;;;;;;;;;;:::o;6922:108::-;6983:7;7010:12;;7003:19;;6922:108;:::o;8620:492::-;8760:4;8777:36;8787:6;8795:9;8806:6;8777:9;:36::i;:::-;8826:24;8853:11;:19;8865:6;8853:19;;;;;;;;;;;;;;;:33;8873:12;:10;:12::i;:::-;8853:33;;;;;;;;;;;;;;;;8826:60;;8925:6;8905:16;:26;;8897:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9012:57;9021:6;9029:12;:10;:12::i;:::-;9062:6;9043:16;:25;9012:8;:57::i;:::-;9100:4;9093:11;;;8620:492;;;;;:::o;6764:93::-;6822:5;6847:2;6840:9;;6764:93;:::o;9521:215::-;9609:4;9626:80;9635:12;:10;:12::i;:::-;9649:7;9695:10;9658:11;:25;9670:12;:10;:12::i;:::-;9658:25;;;;;;;;;;;;;;;:34;9684:7;9658:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9626:8;:80::i;:::-;9724:4;9717:11;;9521:215;;;;:::o;40715:38::-;;;:::o;40012:40::-;;;;;;;;;;;;;:::o;46957:125::-;47022:4;47046:19;:28;47066:7;47046:28;;;;;;;;;;;;;;;;;;;;;;;;;47039:35;;46957:125;;;:::o;40250:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;48038:137::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48157:10:::1;48130:16;:24;48147:6;48130:24;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;48038:137:::0;;:::o;47289:238::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47423:1:::1;47387:32;47405:13;47387;:17;;:32;;;;:::i;:::-;:37;;47379:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47467:13;47452:12;:28;;;;47506:13;47491:12;:28;;;;47289:238:::0;;:::o;40528:31::-;;;;:::o;7093:127::-;7167:7;7194:9;:18;7204:7;7194:18;;;;;;;;;;;;;;;;7187:25;;7093:127;;;:::o;17332:94::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17397:21:::1;17415:1;17397:9;:21::i;:::-;17332:94::o:0;40140:49::-;;;;:::o;47731:119::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47832:10:::1;47811:18;:31;;;;47731:119:::0;:::o;40566:92::-;;;;;;;;;;;;;:::o;16681:87::-;16727:7;16754:6;;;;;;;;;;;16747:13;;16681:87;:::o;47535:188::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47627:9:::1;47610:14;:26;;;;47673:22;47691:3;47673:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47655:14;;:40;;47647:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;47535:188:::0;:::o;6021:104::-;6077:13;6110:7;6103:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6021:104;:::o;40490:31::-;;;;:::o;10239:413::-;10332:4;10349:24;10376:11;:25;10388:12;:10;:12::i;:::-;10376:25;;;;;;;;;;;;;;;:34;10402:7;10376:34;;;;;;;;;;;;;;;;10349:61;;10449:15;10429:16;:35;;10421:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10542:67;10551:12;:10;:12::i;:::-;10565:7;10593:15;10574:16;:34;10542:8;:67::i;:::-;10640:4;10633:11;;;10239:413;;;;:::o;7433:175::-;7519:4;7536:42;7546:12;:10;:12::i;:::-;7560:9;7571:6;7536:9;:42::i;:::-;7596:4;7589:11;;7433:175;;;;:::o;40099:34::-;;;;;;;;;;;;;:::o;46661:288::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46786:8:::1;46754:40;;:19;:28;46774:7;46754:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;46746:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46883:8;46852:19;:28;46872:7;46852:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46923:7;46907:34;;;46932:8;46907:34;;;;;;:::i;:::-;;;;;;;;46661:288:::0;;:::o;47858:171::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47959:8:::1;47935:21;;:32;;;;;;;;;;;;;;;;;;47983:38;48012:8;47983:38;;;;;;:::i;:::-;;;;;;;;47858:171:::0;:::o;40308:56::-;;;;:::o;7671:151::-;7760:7;7787:11;:18;7799:5;7787:18;;;;;;;;;;;;;;;:27;7806:7;7787:27;;;;;;;;;;;;;;;;7780:34;;7671:151;;;;:::o;40371:52::-;;;;:::o;40430:50::-;;;;:::o;47090:191::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47181:6:::1;47158:20;:29;;;;47230:22;47248:3;47230:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47206:20;;:46;;47198:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;47090:191:::0;:::o;17581:192::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17690:1:::1;17670:22;;:8;:22;;::::0;17662:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17746:19;17756:8;17746:9;:19::i;:::-;17581:192:::0;:::o;323:98::-;376:7;403:10;396:17;;323:98;:::o;13931:380::-;14084:1;14067:19;;:5;:19;;;14059:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14165:1;14146:21;;:7;:21;;;14138:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14249:6;14219:11;:18;14231:5;14219:18;;;;;;;;;;;;;;;:27;14238:7;14219:27;;;;;;;;;;;;;;;:36;;;;14287:7;14271:32;;14280:5;14271:32;;;14296:6;14271:32;;;;;;:::i;:::-;;;;;;;;13931:380;;;:::o;42291:1994::-;42439:1;42423:18;;:4;:18;;;42415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42516:1;42502:16;;:2;:16;;;42494:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42584:1;42574:6;:11;42571:92;;42602:28;42618:4;42624:2;42628:1;42602:15;:28::i;:::-;42645:7;;42571:92;42678:15;;;;;;;;;;;:40;;;;;42705:13;42697:21;;:4;:21;;;42678:40;:67;;;;;42723:16;:22;42740:4;42723:22;;;;;;;;;;;;;;;;;;;;;;;;;42722:23;42678:67;42675:261;;;42791:15;42769:13;:19;42783:4;42769:19;;;;;;;;;;;;;;;;:37;42761:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42903:21;;42885:15;:39;;;;:::i;:::-;42863:13;:19;42877:4;42863:19;;;;;;;;;;;;;;;:61;;;;42675:261;42948:20;42971:19;:25;42991:4;42971:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43000:19;:23;43020:2;43000:23;;;;;;;;;;;;;;;;;;;;;;;;;42971:52;42948:75;;43041:15;43037:130;;43090:20;;43080:6;:30;;43072:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;43037:130;43199:13;43191:21;;:4;:21;;;:41;;;;;43217:15;43216:16;43191:41;43187:237;;;43249:32;43284:13;43294:2;43284:9;:13::i;:::-;43249:48;;43357:14;;43347:6;43320:24;:33;;;;:::i;:::-;:51;;43312:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;43234:190;43187:237;43441:28;43472:24;43490:4;43472:9;:24::i;:::-;43441:55;;43517:24;43568:18;;43544:20;:42;;43517:69;;43609:19;:40;;;;;43633:16;;;;;;;;;;;43632:17;43609:40;:63;;;;;43659:13;43653:19;;:2;:19;;;43609:63;:88;;;;;43676:21;;;;;;;;;;;43609:88;43606:214;;;43737:18;;43714:41;;43770:36;43785:20;43770:14;:36::i;:::-;43606:214;43922:15;43918:312;;43954:12;43992:13;43984:21;;:4;:21;;;:44;;;;44015:13;44009:19;;:2;:19;;;43984:44;43981:141;;;44055:51;44102:3;44055:42;44066:30;44083:12;;44066;;:16;;:30;;;;:::i;:::-;44055:6;:10;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;44047:59;;43981:141;44144:16;44155:4;44144:6;:10;;:16;;;;:::i;:::-;44135:25;;44175:42;44191:4;44205;44212;44175:15;:42::i;:::-;43939:291;43918:312;44242:33;44258:4;44264:2;44268:6;44242:15;:33::i;:::-;42404:1881;;;42291:1994;;;;:::o;27835:98::-;27893:7;27924:1;27920;:5;;;;:::i;:::-;27913:12;;27835:98;;;;:::o;17781:173::-;17837:16;17856:6;;;;;;;;;;;17837:25;;17882:8;17873:6;;:17;;;;;;;;;;;;;;;;;;17937:8;17906:40;;17927:8;17906:40;;;;;;;;;;;;17826:128;17781:173;:::o;28972:98::-;29030:7;29061:1;29057;:5;;;;:::i;:::-;29050:12;;28972:98;;;;:::o;11142:733::-;11300:1;11282:20;;:6;:20;;;11274:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11384:1;11363:23;;:9;:23;;;11355:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11439:47;11460:6;11468:9;11479:6;11439:20;:47::i;:::-;11499:21;11523:9;:17;11533:6;11523:17;;;;;;;;;;;;;;;;11499:41;;11576:6;11559:13;:23;;11551:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11697:6;11681:13;:22;11661:9;:17;11671:6;11661:17;;;;;;;;;;;;;;;:42;;;;11749:6;11725:9;:20;11735:9;11725:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11790:9;11773:35;;11782:6;11773:35;;;11801:6;11773:35;;;;;;:::i;:::-;;;;;;;;11821:46;11841:6;11849:9;11860:6;11821:19;:46::i;:::-;11263:612;11142:733;;;:::o;44294:1270::-;40929:4;40910:16;;:23;;;;;;;;;;;;;;;;;;44379:26:::1;44408:74;44451:30;44468:12;;44451;;:16;;:30;;;;:::i;:::-;44408:38;44433:12;;44408:20;:24;;:38;;;;:::i;:::-;:42;;:74;;;;:::i;:::-;44379:103;;44551:12;44566:25;44589:1;44566:18;:22;;:25;;;;:::i;:::-;44551:40;;44602:17;44622:28;44645:4;44622:18;:22;;:28;;;;:::i;:::-;44602:48;;44928:22;44953:21;44928:46;;45019:22;45036:4;45019:16;:22::i;:::-;45172:18;45193:41;45219:14;45193:21;:25;;:41;;;;:::i;:::-;45172:62;;45284:35;45297:9;45308:10;45284:12;:35::i;:::-;45377:62;45394:44;45419:18;45394:20;:24;;:44;;;;:::i;:::-;45377:16;:62::i;:::-;45450:15;;;;;;;;;;;:24;;:47;45475:21;45450:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45523:32;45538:4;45544:10;45523:32;;;;;;;:::i;:::-;;;;;;;;44368:1196;;;;;40975:5:::0;40956:16;;:24;;;;;;;;;;;;;;;;;;44294:1270;:::o;28573:98::-;28631:7;28662:1;28658;:5;;;;:::i;:::-;28651:12;;28573:98;;;;:::o;28216:::-;28274:7;28305:1;28301;:5;;;;:::i;:::-;28294:12;;28216:98;;;;:::o;14911:125::-;;;;:::o;15640:124::-;;;;:::o;45572:692::-;45698:21;45736:1;45722:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45698:40;;45767:4;45749;45754:1;45749:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45793:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45783:4;45788:1;45783:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45884:11;45831:50;45849:4;45864:15;;;;;;;;;;;45831:9;:50::i;:::-;:64;45828:156;;;45910:62;45927:4;45942:15;;;;;;;;;;;45969:1;45960:11;45910:8;:62::i;:::-;45828:156;46022:15;;;;;;;;;;;:66;;;46103:11;46129:1;46173:4;46200;46220:15;46022:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45627:637;45572:692;:::o;46272:381::-;46383:15;;;;;;;;;;;:31;;;46422:9;46455:4;46475:11;46501:1;46544;46587:7;:5;:7::i;:::-;46609:15;46383:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46272:381;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:116::-;3564:21;3579:5;3564:21;:::i;:::-;3557:5;3554:32;3544:60;;3600:1;3597;3590:12;3544:60;3494:116;:::o;3616:133::-;3659:5;3697:6;3684:20;3675:29;;3713:30;3737:5;3713:30;:::i;:::-;3616:133;;;;:::o;3755:468::-;3820:6;3828;3877:2;3865:9;3856:7;3852:23;3848:32;3845:119;;;3883:79;;:::i;:::-;3845:119;4003:1;4028:50;4070:7;4061:6;4050:9;4046:22;4028:50;:::i;:::-;4018:60;;3974:114;4127:2;4153:53;4198:7;4189:6;4178:9;4174:22;4153:53;:::i;:::-;4143:63;;4098:118;3755:468;;;;;:::o;4229:60::-;4257:3;4278:5;4271:12;;4229:60;;;:::o;4295:142::-;4345:9;4378:53;4396:34;4405:24;4423:5;4405:24;:::i;:::-;4396:34;:::i;:::-;4378:53;:::i;:::-;4365:66;;4295:142;;;:::o;4443:126::-;4493:9;4526:37;4557:5;4526:37;:::i;:::-;4513:50;;4443:126;;;:::o;4575:153::-;4652:9;4685:37;4716:5;4685:37;:::i;:::-;4672:50;;4575:153;;;:::o;4734:185::-;4848:64;4906:5;4848:64;:::i;:::-;4843:3;4836:77;4734:185;;:::o;4925:276::-;5045:4;5083:2;5072:9;5068:18;5060:26;;5096:98;5191:1;5180:9;5176:17;5167:6;5096:98;:::i;:::-;4925:276;;;;:::o;5207:118::-;5294:24;5312:5;5294:24;:::i;:::-;5289:3;5282:37;5207:118;;:::o;5331:222::-;5424:4;5462:2;5451:9;5447:18;5439:26;;5475:71;5543:1;5532:9;5528:17;5519:6;5475:71;:::i;:::-;5331:222;;;;:::o;5559:619::-;5636:6;5644;5652;5701:2;5689:9;5680:7;5676:23;5672:32;5669:119;;;5707:79;;:::i;:::-;5669:119;5827:1;5852:53;5897:7;5888:6;5877:9;5873:22;5852:53;:::i;:::-;5842:63;;5798:117;5954:2;5980:53;6025:7;6016:6;6005:9;6001:22;5980:53;:::i;:::-;5970:63;;5925:118;6082:2;6108:53;6153:7;6144:6;6133:9;6129:22;6108:53;:::i;:::-;6098:63;;6053:118;5559:619;;;;;:::o;6184:86::-;6219:7;6259:4;6252:5;6248:16;6237:27;;6184:86;;;:::o;6276:112::-;6359:22;6375:5;6359:22;:::i;:::-;6354:3;6347:35;6276:112;;:::o;6394:214::-;6483:4;6521:2;6510:9;6506:18;6498:26;;6534:67;6598:1;6587:9;6583:17;6574:6;6534:67;:::i;:::-;6394:214;;;;:::o;6614:118::-;6701:24;6719:5;6701:24;:::i;:::-;6696:3;6689:37;6614:118;;:::o;6738:222::-;6831:4;6869:2;6858:9;6854:18;6846:26;;6882:71;6950:1;6939:9;6935:17;6926:6;6882:71;:::i;:::-;6738:222;;;;:::o;6966:329::-;7025:6;7074:2;7062:9;7053:7;7049:23;7045:32;7042:119;;;7080:79;;:::i;:::-;7042:119;7200:1;7225:53;7270:7;7261:6;7250:9;7246:22;7225:53;:::i;:::-;7215:63;;7171:117;6966:329;;;;:::o;7301:468::-;7366:6;7374;7423:2;7411:9;7402:7;7398:23;7394:32;7391:119;;;7429:79;;:::i;:::-;7391:119;7549:1;7574:53;7619:7;7610:6;7599:9;7595:22;7574:53;:::i;:::-;7564:63;;7520:117;7676:2;7702:50;7744:7;7735:6;7724:9;7720:22;7702:50;:::i;:::-;7692:60;;7647:115;7301:468;;;;;:::o;7775:474::-;7843:6;7851;7900:2;7888:9;7879:7;7875:23;7871:32;7868:119;;;7906:79;;:::i;:::-;7868:119;8026:1;8051:53;8096:7;8087:6;8076:9;8072:22;8051:53;:::i;:::-;8041:63;;7997:117;8153:2;8179:53;8224:7;8215:6;8204:9;8200:22;8179:53;:::i;:::-;8169:63;;8124:118;7775:474;;;;;:::o;8255:329::-;8314:6;8363:2;8351:9;8342:7;8338:23;8334:32;8331:119;;;8369:79;;:::i;:::-;8331:119;8489:1;8514:53;8559:7;8550:6;8539:9;8535:22;8514:53;:::i;:::-;8504:63;;8460:117;8255:329;;;;:::o;8590:104::-;8635:7;8664:24;8682:5;8664:24;:::i;:::-;8653:35;;8590:104;;;:::o;8700:142::-;8803:32;8829:5;8803:32;:::i;:::-;8798:3;8791:45;8700:142;;:::o;8848:254::-;8957:4;8995:2;8984:9;8980:18;8972:26;;9008:87;9092:1;9081:9;9077:17;9068:6;9008:87;:::i;:::-;8848:254;;;;:::o;9108:323::-;9164:6;9213:2;9201:9;9192:7;9188:23;9184:32;9181:119;;;9219:79;;:::i;:::-;9181:119;9339:1;9364:50;9406:7;9397:6;9386:9;9382:22;9364:50;:::i;:::-;9354:60;;9310:114;9108:323;;;;:::o;9437:474::-;9505:6;9513;9562:2;9550:9;9541:7;9537:23;9533:32;9530:119;;;9568:79;;:::i;:::-;9530:119;9688:1;9713:53;9758:7;9749:6;9738:9;9734:22;9713:53;:::i;:::-;9703:63;;9659:117;9815:2;9841:53;9886:7;9877:6;9866:9;9862:22;9841:53;:::i;:::-;9831:63;;9786:118;9437:474;;;;;:::o;9917:180::-;9965:77;9962:1;9955:88;10062:4;10059:1;10052:15;10086:4;10083:1;10076:15;10103:320;10147:6;10184:1;10178:4;10174:12;10164:22;;10231:1;10225:4;10221:12;10252:18;10242:81;;10308:4;10300:6;10296:17;10286:27;;10242:81;10370:2;10362:6;10359:14;10339:18;10336:38;10333:84;;10389:18;;:::i;:::-;10333:84;10154:269;10103:320;;;:::o;10429:182::-;10569:34;10565:1;10557:6;10553:14;10546:58;10429:182;:::o;10617:366::-;10759:3;10780:67;10844:2;10839:3;10780:67;:::i;:::-;10773:74;;10856:93;10945:3;10856:93;:::i;:::-;10974:2;10969:3;10965:12;10958:19;;10617:366;;;:::o;10989:419::-;11155:4;11193:2;11182:9;11178:18;11170:26;;11242:9;11236:4;11232:20;11228:1;11217:9;11213:17;11206:47;11270:131;11396:4;11270:131;:::i;:::-;11262:139;;10989:419;;;:::o;11414:227::-;11554:34;11550:1;11542:6;11538:14;11531:58;11623:10;11618:2;11610:6;11606:15;11599:35;11414:227;:::o;11647:366::-;11789:3;11810:67;11874:2;11869:3;11810:67;:::i;:::-;11803:74;;11886:93;11975:3;11886:93;:::i;:::-;12004:2;11999:3;11995:12;11988:19;;11647:366;;;:::o;12019:419::-;12185:4;12223:2;12212:9;12208:18;12200:26;;12272:9;12266:4;12262:20;12258:1;12247:9;12243:17;12236:47;12300:131;12426:4;12300:131;:::i;:::-;12292:139;;12019:419;;;:::o;12444:180::-;12492:77;12489:1;12482:88;12589:4;12586:1;12579:15;12613:4;12610:1;12603:15;12630:305;12670:3;12689:20;12707:1;12689:20;:::i;:::-;12684:25;;12723:20;12741:1;12723:20;:::i;:::-;12718:25;;12877:1;12809:66;12805:74;12802:1;12799:81;12796:107;;;12883:18;;:::i;:::-;12796:107;12927:1;12924;12920:9;12913:16;;12630:305;;;;:::o;12941:162::-;13081:14;13077:1;13069:6;13065:14;13058:38;12941:162;:::o;13109:366::-;13251:3;13272:67;13336:2;13331:3;13272:67;:::i;:::-;13265:74;;13348:93;13437:3;13348:93;:::i;:::-;13466:2;13461:3;13457:12;13450:19;;13109:366;;;:::o;13481:419::-;13647:4;13685:2;13674:9;13670:18;13662:26;;13734:9;13728:4;13724:20;13720:1;13709:9;13705:17;13698:47;13762:131;13888:4;13762:131;:::i;:::-;13754:139;;13481:419;;;:::o;13906:166::-;14046:18;14042:1;14034:6;14030:14;14023:42;13906:166;:::o;14078:366::-;14220:3;14241:67;14305:2;14300:3;14241:67;:::i;:::-;14234:74;;14317:93;14406:3;14317:93;:::i;:::-;14435:2;14430:3;14426:12;14419:19;;14078:366;;;:::o;14450:419::-;14616:4;14654:2;14643:9;14639:18;14631:26;;14703:9;14697:4;14693:20;14689:1;14678:9;14674:17;14667:47;14731:131;14857:4;14731:131;:::i;:::-;14723:139;;14450:419;;;:::o;14875:224::-;15015:34;15011:1;15003:6;14999:14;14992:58;15084:7;15079:2;15071:6;15067:15;15060:32;14875:224;:::o;15105:366::-;15247:3;15268:67;15332:2;15327:3;15268:67;:::i;:::-;15261:74;;15344:93;15433:3;15344:93;:::i;:::-;15462:2;15457:3;15453:12;15446:19;;15105:366;;;:::o;15477:419::-;15643:4;15681:2;15670:9;15666:18;15658:26;;15730:9;15724:4;15720:20;15716:1;15705:9;15701:17;15694:47;15758:131;15884:4;15758:131;:::i;:::-;15750:139;;15477:419;;;:::o;15902:229::-;16042:34;16038:1;16030:6;16026:14;16019:58;16111:12;16106:2;16098:6;16094:15;16087:37;15902:229;:::o;16137:366::-;16279:3;16300:67;16364:2;16359:3;16300:67;:::i;:::-;16293:74;;16376:93;16465:3;16376:93;:::i;:::-;16494:2;16489:3;16485:12;16478:19;;16137:366;;;:::o;16509:419::-;16675:4;16713:2;16702:9;16698:18;16690:26;;16762:9;16756:4;16752:20;16748:1;16737:9;16733:17;16726:47;16790:131;16916:4;16790:131;:::i;:::-;16782:139;;16509:419;;;:::o;16934:225::-;17074:34;17070:1;17062:6;17058:14;17051:58;17143:8;17138:2;17130:6;17126:15;17119:33;16934:225;:::o;17165:366::-;17307:3;17328:67;17392:2;17387:3;17328:67;:::i;:::-;17321:74;;17404:93;17493:3;17404:93;:::i;:::-;17522:2;17517:3;17513:12;17506:19;;17165:366;;;:::o;17537:419::-;17703:4;17741:2;17730:9;17726:18;17718:26;;17790:9;17784:4;17780:20;17776:1;17765:9;17761:17;17754:47;17818:131;17944:4;17818:131;:::i;:::-;17810:139;;17537:419;;;:::o;17962:223::-;18102:34;18098:1;18090:6;18086:14;18079:58;18171:6;18166:2;18158:6;18154:15;18147:31;17962:223;:::o;18191:366::-;18333:3;18354:67;18418:2;18413:3;18354:67;:::i;:::-;18347:74;;18430:93;18519:3;18430:93;:::i;:::-;18548:2;18543:3;18539:12;18532:19;;18191:366;;;:::o;18563:419::-;18729:4;18767:2;18756:9;18752:18;18744:26;;18816:9;18810:4;18806:20;18802:1;18791:9;18787:17;18780:47;18844:131;18970:4;18844:131;:::i;:::-;18836:139;;18563:419;;;:::o;18988:221::-;19128:34;19124:1;19116:6;19112:14;19105:58;19197:4;19192:2;19184:6;19180:15;19173:29;18988:221;:::o;19215:366::-;19357:3;19378:67;19442:2;19437:3;19378:67;:::i;:::-;19371:74;;19454:93;19543:3;19454:93;:::i;:::-;19572:2;19567:3;19563:12;19556:19;;19215:366;;;:::o;19587:419::-;19753:4;19791:2;19780:9;19776:18;19768:26;;19840:9;19834:4;19830:20;19826:1;19815:9;19811:17;19804:47;19868:131;19994:4;19868:131;:::i;:::-;19860:139;;19587:419;;;:::o;20012:224::-;20152:34;20148:1;20140:6;20136:14;20129:58;20221:7;20216:2;20208:6;20204:15;20197:32;20012:224;:::o;20242:366::-;20384:3;20405:67;20469:2;20464:3;20405:67;:::i;:::-;20398:74;;20481:93;20570:3;20481:93;:::i;:::-;20599:2;20594:3;20590:12;20583:19;;20242:366;;;:::o;20614:419::-;20780:4;20818:2;20807:9;20803:18;20795:26;;20867:9;20861:4;20857:20;20853:1;20842:9;20838:17;20831:47;20895:131;21021:4;20895:131;:::i;:::-;20887:139;;20614:419;;;:::o;21039:222::-;21179:34;21175:1;21167:6;21163:14;21156:58;21248:5;21243:2;21235:6;21231:15;21224:30;21039:222;:::o;21267:366::-;21409:3;21430:67;21494:2;21489:3;21430:67;:::i;:::-;21423:74;;21506:93;21595:3;21506:93;:::i;:::-;21624:2;21619:3;21615:12;21608:19;;21267:366;;;:::o;21639:419::-;21805:4;21843:2;21832:9;21828:18;21820:26;;21892:9;21886:4;21882:20;21878:1;21867:9;21863:17;21856:47;21920:131;22046:4;21920:131;:::i;:::-;21912:139;;21639:419;;;:::o;22064:224::-;22204:34;22200:1;22192:6;22188:14;22181:58;22273:7;22268:2;22260:6;22256:15;22249:32;22064:224;:::o;22294:366::-;22436:3;22457:67;22521:2;22516:3;22457:67;:::i;:::-;22450:74;;22533:93;22622:3;22533:93;:::i;:::-;22651:2;22646:3;22642:12;22635:19;;22294:366;;;:::o;22666:419::-;22832:4;22870:2;22859:9;22855:18;22847:26;;22919:9;22913:4;22909:20;22905:1;22894:9;22890:17;22883:47;22947:131;23073:4;22947:131;:::i;:::-;22939:139;;22666:419;;;:::o;23091:227::-;23231:34;23227:1;23219:6;23215:14;23208:58;23300:10;23295:2;23287:6;23283:15;23276:35;23091:227;:::o;23324:366::-;23466:3;23487:67;23551:2;23546:3;23487:67;:::i;:::-;23480:74;;23563:93;23652:3;23563:93;:::i;:::-;23681:2;23676:3;23672:12;23665:19;;23324:366;;;:::o;23696:419::-;23862:4;23900:2;23889:9;23885:18;23877:26;;23949:9;23943:4;23939:20;23935:1;23924:9;23920:17;23913:47;23977:131;24103:4;23977:131;:::i;:::-;23969:139;;23696:419;;;:::o;24121:223::-;24261:34;24257:1;24249:6;24245:14;24238:58;24330:6;24325:2;24317:6;24313:15;24306:31;24121:223;:::o;24350:366::-;24492:3;24513:67;24577:2;24572:3;24513:67;:::i;:::-;24506:74;;24589:93;24678:3;24589:93;:::i;:::-;24707:2;24702:3;24698:12;24691:19;;24350:366;;;:::o;24722:419::-;24888:4;24926:2;24915:9;24911:18;24903:26;;24975:9;24969:4;24965:20;24961:1;24950:9;24946:17;24939:47;25003:131;25129:4;25003:131;:::i;:::-;24995:139;;24722:419;;;:::o;25147:180::-;25195:77;25192:1;25185:88;25292:4;25289:1;25282:15;25316:4;25313:1;25306:15;25333:185;25373:1;25390:20;25408:1;25390:20;:::i;:::-;25385:25;;25424:20;25442:1;25424:20;:::i;:::-;25419:25;;25463:1;25453:35;;25468:18;;:::i;:::-;25453:35;25510:1;25507;25503:9;25498:14;;25333:185;;;;:::o;25524:225::-;25664:34;25660:1;25652:6;25648:14;25641:58;25733:8;25728:2;25720:6;25716:15;25709:33;25524:225;:::o;25755:366::-;25897:3;25918:67;25982:2;25977:3;25918:67;:::i;:::-;25911:74;;25994:93;26083:3;25994:93;:::i;:::-;26112:2;26107:3;26103:12;26096:19;;25755:366;;;:::o;26127:419::-;26293:4;26331:2;26320:9;26316:18;26308:26;;26380:9;26374:4;26370:20;26366:1;26355:9;26351:17;26344:47;26408:131;26534:4;26408:131;:::i;:::-;26400:139;;26127:419;;;:::o;26552:332::-;26673:4;26711:2;26700:9;26696:18;26688:26;;26724:71;26792:1;26781:9;26777:17;26768:6;26724:71;:::i;:::-;26805:72;26873:2;26862:9;26858:18;26849:6;26805:72;:::i;:::-;26552:332;;;;;:::o;26890:348::-;26930:7;26953:20;26971:1;26953:20;:::i;:::-;26948:25;;26987:20;27005:1;26987:20;:::i;:::-;26982:25;;27175:1;27107:66;27103:74;27100:1;27097:81;27092:1;27085:9;27078:17;27074:105;27071:131;;;27182:18;;:::i;:::-;27071:131;27230:1;27227;27223:9;27212:20;;26890:348;;;;:::o;27244:191::-;27284:4;27304:20;27322:1;27304:20;:::i;:::-;27299:25;;27338:20;27356:1;27338:20;:::i;:::-;27333:25;;27377:1;27374;27371:8;27368:34;;;27382:18;;:::i;:::-;27368:34;27427:1;27424;27420:9;27412:17;;27244:191;;;;:::o;27441:180::-;27489:77;27486:1;27479:88;27586:4;27583:1;27576:15;27610:4;27607:1;27600:15;27627:180;27675:77;27672:1;27665:88;27772:4;27769:1;27762:15;27796:4;27793:1;27786:15;27813:143;27870:5;27901:6;27895:13;27886:22;;27917:33;27944:5;27917:33;:::i;:::-;27813:143;;;;:::o;27962:351::-;28032:6;28081:2;28069:9;28060:7;28056:23;28052:32;28049:119;;;28087:79;;:::i;:::-;28049:119;28207:1;28232:64;28288:7;28279:6;28268:9;28264:22;28232:64;:::i;:::-;28222:74;;28178:128;27962:351;;;;:::o;28319:85::-;28364:7;28393:5;28382:16;;28319:85;;;:::o;28410:158::-;28468:9;28501:61;28519:42;28528:32;28554:5;28528:32;:::i;:::-;28519:42;:::i;:::-;28501:61;:::i;:::-;28488:74;;28410:158;;;:::o;28574:147::-;28669:45;28708:5;28669:45;:::i;:::-;28664:3;28657:58;28574:147;;:::o;28727:114::-;28794:6;28828:5;28822:12;28812:22;;28727:114;;;:::o;28847:184::-;28946:11;28980:6;28975:3;28968:19;29020:4;29015:3;29011:14;28996:29;;28847:184;;;;:::o;29037:132::-;29104:4;29127:3;29119:11;;29157:4;29152:3;29148:14;29140:22;;29037:132;;;:::o;29175:108::-;29252:24;29270:5;29252:24;:::i;:::-;29247:3;29240:37;29175:108;;:::o;29289:179::-;29358:10;29379:46;29421:3;29413:6;29379:46;:::i;:::-;29457:4;29452:3;29448:14;29434:28;;29289:179;;;;:::o;29474:113::-;29544:4;29576;29571:3;29567:14;29559:22;;29474:113;;;:::o;29623:732::-;29742:3;29771:54;29819:5;29771:54;:::i;:::-;29841:86;29920:6;29915:3;29841:86;:::i;:::-;29834:93;;29951:56;30001:5;29951:56;:::i;:::-;30030:7;30061:1;30046:284;30071:6;30068:1;30065:13;30046:284;;;30147:6;30141:13;30174:63;30233:3;30218:13;30174:63;:::i;:::-;30167:70;;30260:60;30313:6;30260:60;:::i;:::-;30250:70;;30106:224;30093:1;30090;30086:9;30081:14;;30046:284;;;30050:14;30346:3;30339:10;;29747:608;;;29623:732;;;;:::o;30361:831::-;30624:4;30662:3;30651:9;30647:19;30639:27;;30676:71;30744:1;30733:9;30729:17;30720:6;30676:71;:::i;:::-;30757:80;30833:2;30822:9;30818:18;30809:6;30757:80;:::i;:::-;30884:9;30878:4;30874:20;30869:2;30858:9;30854:18;30847:48;30912:108;31015:4;31006:6;30912:108;:::i;:::-;30904:116;;31030:72;31098:2;31087:9;31083:18;31074:6;31030:72;:::i;:::-;31112:73;31180:3;31169:9;31165:19;31156:6;31112:73;:::i;:::-;30361:831;;;;;;;;:::o;31198:807::-;31447:4;31485:3;31474:9;31470:19;31462:27;;31499:71;31567:1;31556:9;31552:17;31543:6;31499:71;:::i;:::-;31580:72;31648:2;31637:9;31633:18;31624:6;31580:72;:::i;:::-;31662:80;31738:2;31727:9;31723:18;31714:6;31662:80;:::i;:::-;31752;31828:2;31817:9;31813:18;31804:6;31752:80;:::i;:::-;31842:73;31910:3;31899:9;31895:19;31886:6;31842:73;:::i;:::-;31925;31993:3;31982:9;31978:19;31969:6;31925:73;:::i;:::-;31198:807;;;;;;;;;:::o;32011:143::-;32068:5;32099:6;32093:13;32084:22;;32115:33;32142:5;32115:33;:::i;:::-;32011:143;;;;:::o;32160:663::-;32248:6;32256;32264;32313:2;32301:9;32292:7;32288:23;32284:32;32281:119;;;32319:79;;:::i;:::-;32281:119;32439:1;32464:64;32520:7;32511:6;32500:9;32496:22;32464:64;:::i;:::-;32454:74;;32410:128;32577:2;32603:64;32659:7;32650:6;32639:9;32635:22;32603:64;:::i;:::-;32593:74;;32548:129;32716:2;32742:64;32798:7;32789:6;32778:9;32774:22;32742:64;:::i;:::-;32732:74;;32687:129;32160:663;;;;;:::o
Swarm Source
ipfs://cd4d484a3e3218355cf0e4940c346a81e200b315bf2902d63fc77766d64a9704
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.