ERC-20
Overview
Max Total Supply
1,000,000 M60
Holders
60
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
M60
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-15 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.15; /** * @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); } 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 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 9; } /** * @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 M60 is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public maxWalletToken = 1000000 * (10**9); uint256 public maxBuyTxAmount = 1000000 * (10**9); uint256 public maxSellTxAmount = 1000000 * (10**9); uint256 public swapTokensAtAmount = 800 * (10**9); uint256 public liquidityFee = 4; uint256 public marketingFee = 6; address payable public marketingWallet = payable(0x8f23CD822c5d3746D1e094f6620046dbBF8389dA); // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; // record blacklisted addresses mapping(address => bool) public _isBlacklisted; event ExcludeFromFees(address indexed account, bool isExcluded); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() ERC20("MESSIER", "M60") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // 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 or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(marketingWallet, true); excludeFromFees(address(this), true); /* an internal function that is only called here, and CANNOT be called ever again */ _createSupply(owner(), 1000000 * (10**9)); } 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"); require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address'); if(amount == 0) { super._transfer(from, to, 0); return; } if(from == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { require(amount <= maxBuyTxAmount, "amount must be less than or equal to maxBuyTxAmount"); } if(to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { require(amount <= maxSellTxAmount, "amount must be less than or equal to maxSellTxAmount"); } if(from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){ 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(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { uint256 fees; if(from==uniswapV2Pair || to==uniswapV2Pair) { fees = amount.mul(liquidityFee.add(marketingFee)).div(100); } amount = amount.sub(fees); if(fees > 0) { 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 to wallets 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 { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function blacklistAddress(address account, bool value) external onlyOwner{ _isBlacklisted[account] = value; } function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner { swapTokensAtAmount = _newAmount; } function setFees(uint256 _liquidityFee, uint256 _marketingFee) public onlyOwner { require(_liquidityFee.add(_marketingFee) <= 20, "tax too high"); liquidityFee = _liquidityFee; marketingFee = _marketingFee; } function setMaxWalletToken(uint256 _maxToken) external onlyOwner { maxWalletToken = _maxToken; require(maxWalletToken >= totalSupply().div(200), "value too low"); } function setMarketingWallet(address payable _newAddress) external onlyOwner { marketingWallet = _newAddress; } function setMaxBuyTransaction(uint256 _maxBuyTx) external onlyOwner { maxBuyTxAmount = _maxBuyTx; require(maxBuyTxAmount >= totalSupply().div(300), "value too low"); } function setMaxSellTransaction(uint256 _maxSellTx) external onlyOwner { maxSellTxAmount = _maxSellTx; require(maxSellTxAmount >= totalSupply().div(300), "value too low"); } 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":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":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"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":[],"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":"maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxAmount","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":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTx","type":"uint256"}],"name":"setMaxBuyTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTx","type":"uint256"}],"name":"setMaxSellTransaction","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
60a06040526001600660156101000a81548160ff02191690831515021790555066038d7ea4c6800060075566038d7ea4c6800060085566038d7ea4c6800060095564ba43b74000600a556004600b556006600c55738f23cd822c5d3746d1e094f6620046dbbf8389da600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000b557600080fd5b506040518060400160405280600781526020017f4d455353494552000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d36300000000000000000000000000000000000000000000000000000000000815250816003908162000133919062000a27565b50806004908162000145919062000a27565b505050620001686200015c620003f960201b60201c565b6200040160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000b78565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000283919062000b78565b6040518363ffffffff1660e01b8152600401620002a292919062000bbb565b6020604051808303816000875af1158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000b78565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200038162000373620004c760201b60201c565b6001620004f160201b60201c565b620003b6600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004f160201b60201c565b620003c9306001620004f160201b60201c565b620003f1620003dd620004c760201b60201c565b66038d7ea4c680006200062b60201b60201c565b505062000dd1565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000501620003f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000527620004c760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005779062000c49565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200061f919062000c88565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200069d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006949062000cf5565b60405180910390fd5b620006b160008383620007a360201b60201c565b8060026000828254620006c5919062000d46565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200071c919062000d46565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000783919062000db4565b60405180910390a36200079f60008383620007a860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200082f57607f821691505b602082108103620008455762000844620007e7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008af7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000870565b620008bb868362000870565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200090862000902620008fc84620008d3565b620008dd565b620008d3565b9050919050565b6000819050919050565b6200092483620008e7565b6200093c62000933826200090f565b8484546200087d565b825550505050565b600090565b6200095362000944565b6200096081848462000919565b505050565b5b8181101562000988576200097c60008262000949565b60018101905062000966565b5050565b601f821115620009d757620009a1816200084b565b620009ac8462000860565b81016020851015620009bc578190505b620009d4620009cb8562000860565b83018262000965565b50505b505050565b600082821c905092915050565b6000620009fc60001984600802620009dc565b1980831691505092915050565b600062000a178383620009e9565b9150826002028217905092915050565b62000a3282620007ad565b67ffffffffffffffff81111562000a4e5762000a4d620007b8565b5b62000a5a825462000816565b62000a678282856200098c565b600060209050601f83116001811462000a9f576000841562000a8a578287015190505b62000a96858262000a09565b86555062000b06565b601f19841662000aaf866200084b565b60005b8281101562000ad95784890151825560018201915060208501945060208101905062000ab2565b8683101562000af9578489015162000af5601f891682620009e9565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b408262000b13565b9050919050565b62000b528162000b33565b811462000b5e57600080fd5b50565b60008151905062000b728162000b47565b92915050565b60006020828403121562000b915762000b9062000b0e565b5b600062000ba18482850162000b61565b91505092915050565b62000bb58162000b33565b82525050565b600060408201905062000bd2600083018562000baa565b62000be1602083018462000baa565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c3160208362000be8565b915062000c3e8262000bf9565b602082019050919050565b6000602082019050818103600083015262000c648162000c22565b9050919050565b60008115159050919050565b62000c828162000c6b565b82525050565b600060208201905062000c9f600083018462000c77565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cdd601f8362000be8565b915062000cea8262000ca5565b602082019050919050565b6000602082019050818103600083015262000d108162000cce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d5382620008d3565b915062000d6083620008d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d985762000d9762000d17565b5b828201905092915050565b62000dae81620008d3565b82525050565b600060208201905062000dcb600083018462000da3565b92915050565b608051613c4a62000e1760003960008181610cd901528181611b7001528181611cb601528181611dfc01528181611f93015281816120ba015261210f0152613c4a6000f3fe6080604052600436106102085760003560e01c8063715018a611610118578063a9059cbb116100a0578063d851fd0d1161006f578063d851fd0d14610788578063dd62ed3e146107b3578063e2f45605146107f0578063e6c75f711461081b578063f2fde38b146108465761020f565b8063a9059cbb146106d0578063b3b5e0431461070d578063c024666814610736578063c49b9a801461075f5761020f565b806391d55f41116100e757806391d55f41146105e957806395d89b411461061257806398118cb41461063d578063a457c2d714610668578063a87e5da4146106a55761020f565b8063715018a614610553578063750c11b61461056a57806375f0a874146105935780638da5cb5b146105be5761020f565b8063395093511161019b5780634fbee1931161016a5780634fbee1931461045c5780635c38ffe2146104995780635d098b38146104c25780636b67c4df146104eb57806370a08231146105165761020f565b806339509351146103a0578063455a4396146103dd57806349bd5a5e146104065780634a74bb02146104315761020f565b806318160ddd116101d757806318160ddd146102d05780631cdd3be3146102fb57806323b872dd14610338578063313ce567146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630b78f9c01461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086f565b6040516102369190612ad5565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612b90565b610901565b6040516102739190612beb565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612c06565b61091f565b005b3480156102b157600080fd5b506102ba610a03565b6040516102c79190612ca5565b60405180910390f35b3480156102dc57600080fd5b506102e5610a29565b6040516102f29190612ccf565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612cea565b610a33565b60405161032f9190612beb565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612d17565b610a53565b60405161036c9190612beb565b60405180910390f35b34801561038157600080fd5b5061038a610b4b565b6040516103979190612d86565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190612b90565b610b54565b6040516103d49190612beb565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612dcd565b610c00565b005b34801561041257600080fd5b5061041b610cd7565b6040516104289190612e1c565b60405180910390f35b34801561043d57600080fd5b50610446610cfb565b6040516104539190612beb565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190612cea565b610d0e565b6040516104909190612beb565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190612e37565b610d64565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190612ea2565b610e4a565b005b3480156104f757600080fd5b50610500610f0a565b60405161050d9190612ccf565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612cea565b610f10565b60405161054a9190612ccf565b60405180910390f35b34801561055f57600080fd5b50610568610f58565b005b34801561057657600080fd5b50610591600480360381019061058c9190612e37565b610fe0565b005b34801561059f57600080fd5b506105a8611066565b6040516105b59190612ede565b60405180910390f35b3480156105ca57600080fd5b506105d361108c565b6040516105e09190612e1c565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190612e37565b6110b6565b005b34801561061e57600080fd5b5061062761119b565b6040516106349190612ad5565b60405180910390f35b34801561064957600080fd5b5061065261122d565b60405161065f9190612ccf565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190612b90565b611233565b60405161069c9190612beb565b60405180910390f35b3480156106b157600080fd5b506106ba61131e565b6040516106c79190612ccf565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612b90565b611324565b6040516107049190612beb565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190612e37565b611342565b005b34801561074257600080fd5b5061075d60048036038101906107589190612dcd565b611428565b005b34801561076b57600080fd5b5061078660048036038101906107819190612ef9565b61154d565b005b34801561079457600080fd5b5061079d61161d565b6040516107aa9190612ccf565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190612f26565b611623565b6040516107e79190612ccf565b60405180910390f35b3480156107fc57600080fd5b506108056116aa565b6040516108129190612ccf565b60405180910390f35b34801561082757600080fd5b506108306116b0565b60405161083d9190612ccf565b60405180910390f35b34801561085257600080fd5b5061086d60048036038101906108689190612cea565b6116b6565b005b60606003805461087e90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90612f95565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061091561090e6117ad565b84846117b5565b6001905092915050565b6109276117ad565b73ffffffffffffffffffffffffffffffffffffffff1661094561108c565b73ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613012565b60405180910390fd5b60146109b0828461197e90919063ffffffff16565b11156109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e89061307e565b60405180910390fd5b81600b8190555080600c819055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000610a60848484611994565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aab6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2290613110565b60405180910390fd5b610b3f85610b376117ad565b8584036117b5565b60019150509392505050565b60006009905090565b6000610bf6610b616117ad565b848460016000610b6f6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf1919061315f565b6117b5565b6001905092915050565b610c086117ad565b73ffffffffffffffffffffffffffffffffffffffff16610c2661108c565b73ffffffffffffffffffffffffffffffffffffffff1614610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613012565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6c6117ad565b73ffffffffffffffffffffffffffffffffffffffff16610d8a61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd790613012565b60405180910390fd5b80600981905550610e0361012c610df5610a29565b6121e090919063ffffffff16565b6009541015610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90613201565b60405180910390fd5b50565b610e526117ad565b73ffffffffffffffffffffffffffffffffffffffff16610e7061108c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd90613012565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f606117ad565b73ffffffffffffffffffffffffffffffffffffffff16610f7e61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90613012565b60405180910390fd5b610fde60006121f6565b565b610fe86117ad565b73ffffffffffffffffffffffffffffffffffffffff1661100661108c565b73ffffffffffffffffffffffffffffffffffffffff161461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613012565b60405180910390fd5b80600a8190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166110dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613012565b60405180910390fd5b8060078190555061115460c8611146610a29565b6121e090919063ffffffff16565b6007541015611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f90613201565b60405180910390fd5b50565b6060600480546111aa90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546111d690612f95565b80156112235780601f106111f857610100808354040283529160200191611223565b820191906000526020600020905b81548152906001019060200180831161120657829003601f168201915b5050505050905090565b600b5481565b600080600160006112426117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613293565b60405180910390fd5b61131361130a6117ad565b858584036117b5565b600191505092915050565b60085481565b60006113386113316117ad565b8484611994565b6001905092915050565b61134a6117ad565b73ffffffffffffffffffffffffffffffffffffffff1661136861108c565b73ffffffffffffffffffffffffffffffffffffffff16146113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590613012565b60405180910390fd5b806008819055506113e161012c6113d3610a29565b6121e090919063ffffffff16565b6008541015611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613201565b60405180910390fd5b50565b6114306117ad565b73ffffffffffffffffffffffffffffffffffffffff1661144e61108c565b73ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90613012565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115419190612beb565b60405180910390a25050565b6115556117ad565b73ffffffffffffffffffffffffffffffffffffffff1661157361108c565b73ffffffffffffffffffffffffffffffffffffffff16146115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613012565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116129190612beb565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60075481565b6116be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166116dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890613325565b60405180910390fd5b6117aa816121f6565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906133b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613449565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119719190612ccf565b60405180910390a3505050565b6000818361198c919061315f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a699061356d565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b165750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906135d9565b60405180910390fd5b60008103611b6e57611b69838360006122bc565b6121db565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611c135750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c695750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cb457600854811115611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa9061366b565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611d595750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611daf5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dfa57600954811115611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df0906136fd565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e9f5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ef55750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f59576000611f0583610f10565b90506007548282611f16919061315f565b1115611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e9061378f565b60405180910390fd5b505b6000611f6430610f10565b90506000600a548210159050808015611f8a5750600660149054906101000a900460ff16155b8015611fe157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611ff95750600660159054906101000a900460ff165b1561200d57600a54915061200c8261253b565b5b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120b15750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121cd5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061215d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156121a15761219e6064612190612181600c54600b5461197e90919063ffffffff16565b876126d590919063ffffffff16565b6121e090919063ffffffff16565b90505b6121b481856126eb90919063ffffffff16565b935060008111156121cb576121ca8630836122bc565b5b505b6121d88585856122bc565b50505b505050565b600081836121ee91906137de565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361232b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612322906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061356d565b60405180910390fd5b6123a5838383612701565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290613881565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124be919061315f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125229190612ccf565b60405180910390a3612535848484612706565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000612595612572600c54600b5461197e90919063ffffffff16565b612587600b54856126d590919063ffffffff16565b6121e090919063ffffffff16565b905060006125ad6002836121e090919063ffffffff16565b905060006125c482846126eb90919063ffffffff16565b905060004790506125d48361270b565b60006125e982476126eb90919063ffffffff16565b90506125f58382612984565b61261061260b86886126eb90919063ffffffff16565b61270b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612678573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516126aa9291906138a1565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b600081836126e391906138ca565b905092915050565b600081836126f99190613924565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561272857612727613958565b5b6040519080825280602002602001820160405280156127565781602001602082028036833780820191505090505b509050308160008151811061276e5761276d613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283991906139cb565b8160018151811061284d5761284c613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816128b430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611623565b10156128ea576128e930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196117b5565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161294e959493929190613af1565b600060405180830381600087803b15801561296857600080fd5b505af115801561297c573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129d061108c565b426040518863ffffffff1660e01b81526004016129f296959493929190613b4b565b60606040518083038185885af1158015612a10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a359190613bc1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a76578082015181840152602081019050612a5b565b83811115612a85576000848401525b50505050565b6000601f19601f8301169050919050565b6000612aa782612a3c565b612ab18185612a47565b9350612ac1818560208601612a58565b612aca81612a8b565b840191505092915050565b60006020820190508181036000830152612aef8184612a9c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2782612afc565b9050919050565b612b3781612b1c565b8114612b4257600080fd5b50565b600081359050612b5481612b2e565b92915050565b6000819050919050565b612b6d81612b5a565b8114612b7857600080fd5b50565b600081359050612b8a81612b64565b92915050565b60008060408385031215612ba757612ba6612af7565b5b6000612bb585828601612b45565b9250506020612bc685828601612b7b565b9150509250929050565b60008115159050919050565b612be581612bd0565b82525050565b6000602082019050612c006000830184612bdc565b92915050565b60008060408385031215612c1d57612c1c612af7565b5b6000612c2b85828601612b7b565b9250506020612c3c85828601612b7b565b9150509250929050565b6000819050919050565b6000612c6b612c66612c6184612afc565b612c46565b612afc565b9050919050565b6000612c7d82612c50565b9050919050565b6000612c8f82612c72565b9050919050565b612c9f81612c84565b82525050565b6000602082019050612cba6000830184612c96565b92915050565b612cc981612b5a565b82525050565b6000602082019050612ce46000830184612cc0565b92915050565b600060208284031215612d0057612cff612af7565b5b6000612d0e84828501612b45565b91505092915050565b600080600060608486031215612d3057612d2f612af7565b5b6000612d3e86828701612b45565b9350506020612d4f86828701612b45565b9250506040612d6086828701612b7b565b9150509250925092565b600060ff82169050919050565b612d8081612d6a565b82525050565b6000602082019050612d9b6000830184612d77565b92915050565b612daa81612bd0565b8114612db557600080fd5b50565b600081359050612dc781612da1565b92915050565b60008060408385031215612de457612de3612af7565b5b6000612df285828601612b45565b9250506020612e0385828601612db8565b9150509250929050565b612e1681612b1c565b82525050565b6000602082019050612e316000830184612e0d565b92915050565b600060208284031215612e4d57612e4c612af7565b5b6000612e5b84828501612b7b565b91505092915050565b6000612e6f82612afc565b9050919050565b612e7f81612e64565b8114612e8a57600080fd5b50565b600081359050612e9c81612e76565b92915050565b600060208284031215612eb857612eb7612af7565b5b6000612ec684828501612e8d565b91505092915050565b612ed881612e64565b82525050565b6000602082019050612ef36000830184612ecf565b92915050565b600060208284031215612f0f57612f0e612af7565b5b6000612f1d84828501612db8565b91505092915050565b60008060408385031215612f3d57612f3c612af7565b5b6000612f4b85828601612b45565b9250506020612f5c85828601612b45565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fad57607f821691505b602082108103612fc057612fbf612f66565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ffc602083612a47565b915061300782612fc6565b602082019050919050565b6000602082019050818103600083015261302b81612fef565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613068600c83612a47565b915061307382613032565b602082019050919050565b600060208201905081810360008301526130978161305b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006130fa602883612a47565b91506131058261309e565b604082019050919050565b60006020820190508181036000830152613129816130ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316a82612b5a565b915061317583612b5a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131aa576131a9613130565b5b828201905092915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006131eb600d83612a47565b91506131f6826131b5565b602082019050919050565b6000602082019050818103600083015261321a816131de565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061327d602583612a47565b915061328882613221565b604082019050919050565b600060208201905081810360008301526132ac81613270565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061330f602683612a47565b915061331a826132b3565b604082019050919050565b6000602082019050818103600083015261333e81613302565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133a1602483612a47565b91506133ac82613345565b604082019050919050565b600060208201905081810360008301526133d081613394565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613433602283612a47565b915061343e826133d7565b604082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134c5602583612a47565b91506134d082613469565b604082019050919050565b600060208201905081810360008301526134f4816134b8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613557602383612a47565b9150613562826134fb565b604082019050919050565b600060208201905081810360008301526135868161354a565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006135c3601383612a47565b91506135ce8261358d565b602082019050919050565b600060208201905081810360008301526135f2816135b6565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61784275795478416d6f756e7400000000000000000000000000602082015250565b6000613655603383612a47565b9150613660826135f9565b604082019050919050565b6000602082019050818103600083015261368481613648565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d617853656c6c5478416d6f756e74000000000000000000000000602082015250565b60006136e7603483612a47565b91506136f28261368b565b604082019050919050565b60006020820190508181036000830152613716816136da565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613779602483612a47565b91506137848261371d565b604082019050919050565b600060208201905081810360008301526137a88161376c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137e982612b5a565b91506137f483612b5a565b925082613804576138036137af565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061386b602683612a47565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b60006040820190506138b66000830185612cc0565b6138c36020830184612cc0565b9392505050565b60006138d582612b5a565b91506138e083612b5a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391957613918613130565b5b828202905092915050565b600061392f82612b5a565b915061393a83612b5a565b92508282101561394d5761394c613130565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139c581612b2e565b92915050565b6000602082840312156139e1576139e0612af7565b5b60006139ef848285016139b6565b91505092915050565b6000819050919050565b6000613a1d613a18613a13846139f8565b612c46565b612b5a565b9050919050565b613a2d81613a02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a6881612b1c565b82525050565b6000613a7a8383613a5f565b60208301905092915050565b6000602082019050919050565b6000613a9e82613a33565b613aa88185613a3e565b9350613ab383613a4f565b8060005b83811015613ae4578151613acb8882613a6e565b9750613ad683613a86565b925050600181019050613ab7565b5085935050505092915050565b600060a082019050613b066000830188612cc0565b613b136020830187613a24565b8181036040830152613b258186613a93565b9050613b346060830185612e0d565b613b416080830184612cc0565b9695505050505050565b600060c082019050613b606000830189612e0d565b613b6d6020830188612cc0565b613b7a6040830187613a24565b613b876060830186613a24565b613b946080830185612e0d565b613ba160a0830184612cc0565b979650505050505050565b600081519050613bbb81612b64565b92915050565b600080600060608486031215613bda57613bd9612af7565b5b6000613be886828701613bac565b9350506020613bf986828701613bac565b9250506040613c0a86828701613bac565b915050925092509256fea2646970667358221220d8778124f9e73807db175073dace72835e61eb5e675fa104395b163e0db9bf9664736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102085760003560e01c8063715018a611610118578063a9059cbb116100a0578063d851fd0d1161006f578063d851fd0d14610788578063dd62ed3e146107b3578063e2f45605146107f0578063e6c75f711461081b578063f2fde38b146108465761020f565b8063a9059cbb146106d0578063b3b5e0431461070d578063c024666814610736578063c49b9a801461075f5761020f565b806391d55f41116100e757806391d55f41146105e957806395d89b411461061257806398118cb41461063d578063a457c2d714610668578063a87e5da4146106a55761020f565b8063715018a614610553578063750c11b61461056a57806375f0a874146105935780638da5cb5b146105be5761020f565b8063395093511161019b5780634fbee1931161016a5780634fbee1931461045c5780635c38ffe2146104995780635d098b38146104c25780636b67c4df146104eb57806370a08231146105165761020f565b806339509351146103a0578063455a4396146103dd57806349bd5a5e146104065780634a74bb02146104315761020f565b806318160ddd116101d757806318160ddd146102d05780631cdd3be3146102fb57806323b872dd14610338578063313ce567146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630b78f9c01461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961086f565b6040516102369190612ad5565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612b90565b610901565b6040516102739190612beb565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190612c06565b61091f565b005b3480156102b157600080fd5b506102ba610a03565b6040516102c79190612ca5565b60405180910390f35b3480156102dc57600080fd5b506102e5610a29565b6040516102f29190612ccf565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612cea565b610a33565b60405161032f9190612beb565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612d17565b610a53565b60405161036c9190612beb565b60405180910390f35b34801561038157600080fd5b5061038a610b4b565b6040516103979190612d86565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190612b90565b610b54565b6040516103d49190612beb565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612dcd565b610c00565b005b34801561041257600080fd5b5061041b610cd7565b6040516104289190612e1c565b60405180910390f35b34801561043d57600080fd5b50610446610cfb565b6040516104539190612beb565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190612cea565b610d0e565b6040516104909190612beb565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190612e37565b610d64565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190612ea2565b610e4a565b005b3480156104f757600080fd5b50610500610f0a565b60405161050d9190612ccf565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612cea565b610f10565b60405161054a9190612ccf565b60405180910390f35b34801561055f57600080fd5b50610568610f58565b005b34801561057657600080fd5b50610591600480360381019061058c9190612e37565b610fe0565b005b34801561059f57600080fd5b506105a8611066565b6040516105b59190612ede565b60405180910390f35b3480156105ca57600080fd5b506105d361108c565b6040516105e09190612e1c565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190612e37565b6110b6565b005b34801561061e57600080fd5b5061062761119b565b6040516106349190612ad5565b60405180910390f35b34801561064957600080fd5b5061065261122d565b60405161065f9190612ccf565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190612b90565b611233565b60405161069c9190612beb565b60405180910390f35b3480156106b157600080fd5b506106ba61131e565b6040516106c79190612ccf565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612b90565b611324565b6040516107049190612beb565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f9190612e37565b611342565b005b34801561074257600080fd5b5061075d60048036038101906107589190612dcd565b611428565b005b34801561076b57600080fd5b5061078660048036038101906107819190612ef9565b61154d565b005b34801561079457600080fd5b5061079d61161d565b6040516107aa9190612ccf565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190612f26565b611623565b6040516107e79190612ccf565b60405180910390f35b3480156107fc57600080fd5b506108056116aa565b6040516108129190612ccf565b60405180910390f35b34801561082757600080fd5b506108306116b0565b60405161083d9190612ccf565b60405180910390f35b34801561085257600080fd5b5061086d60048036038101906108689190612cea565b6116b6565b005b60606003805461087e90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa90612f95565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061091561090e6117ad565b84846117b5565b6001905092915050565b6109276117ad565b73ffffffffffffffffffffffffffffffffffffffff1661094561108c565b73ffffffffffffffffffffffffffffffffffffffff161461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613012565b60405180910390fd5b60146109b0828461197e90919063ffffffff16565b11156109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e89061307e565b60405180910390fd5b81600b8190555080600c819055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000610a60848484611994565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aab6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2290613110565b60405180910390fd5b610b3f85610b376117ad565b8584036117b5565b60019150509392505050565b60006009905090565b6000610bf6610b616117ad565b848460016000610b6f6117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf1919061315f565b6117b5565b6001905092915050565b610c086117ad565b73ffffffffffffffffffffffffffffffffffffffff16610c2661108c565b73ffffffffffffffffffffffffffffffffffffffff1614610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613012565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f00000000000000000000000071fed781fb2dae9a4e521b5171d7e61ff6bb5de081565b600660159054906101000a900460ff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6c6117ad565b73ffffffffffffffffffffffffffffffffffffffff16610d8a61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd790613012565b60405180910390fd5b80600981905550610e0361012c610df5610a29565b6121e090919063ffffffff16565b6009541015610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90613201565b60405180910390fd5b50565b610e526117ad565b73ffffffffffffffffffffffffffffffffffffffff16610e7061108c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd90613012565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f606117ad565b73ffffffffffffffffffffffffffffffffffffffff16610f7e61108c565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90613012565b60405180910390fd5b610fde60006121f6565b565b610fe86117ad565b73ffffffffffffffffffffffffffffffffffffffff1661100661108c565b73ffffffffffffffffffffffffffffffffffffffff161461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613012565b60405180910390fd5b80600a8190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166110dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613012565b60405180910390fd5b8060078190555061115460c8611146610a29565b6121e090919063ffffffff16565b6007541015611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f90613201565b60405180910390fd5b50565b6060600480546111aa90612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546111d690612f95565b80156112235780601f106111f857610100808354040283529160200191611223565b820191906000526020600020905b81548152906001019060200180831161120657829003601f168201915b5050505050905090565b600b5481565b600080600160006112426117ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613293565b60405180910390fd5b61131361130a6117ad565b858584036117b5565b600191505092915050565b60085481565b60006113386113316117ad565b8484611994565b6001905092915050565b61134a6117ad565b73ffffffffffffffffffffffffffffffffffffffff1661136861108c565b73ffffffffffffffffffffffffffffffffffffffff16146113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590613012565b60405180910390fd5b806008819055506113e161012c6113d3610a29565b6121e090919063ffffffff16565b6008541015611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613201565b60405180910390fd5b50565b6114306117ad565b73ffffffffffffffffffffffffffffffffffffffff1661144e61108c565b73ffffffffffffffffffffffffffffffffffffffff16146114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90613012565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115419190612beb565b60405180910390a25050565b6115556117ad565b73ffffffffffffffffffffffffffffffffffffffff1661157361108c565b73ffffffffffffffffffffffffffffffffffffffff16146115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090613012565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116129190612beb565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60075481565b6116be6117ad565b73ffffffffffffffffffffffffffffffffffffffff166116dc61108c565b73ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890613325565b60405180910390fd5b6117aa816121f6565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906133b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613449565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119719190612ccf565b60405180910390a3505050565b6000818361198c919061315f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a699061356d565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b165750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906135d9565b60405180910390fd5b60008103611b6e57611b69838360006122bc565b6121db565b7f00000000000000000000000071fed781fb2dae9a4e521b5171d7e61ff6bb5de073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611c135750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c695750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cb457600854811115611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa9061366b565b60405180910390fd5b5b7f00000000000000000000000071fed781fb2dae9a4e521b5171d7e61ff6bb5de073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611d595750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611daf5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dfa57600954811115611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df0906136fd565b60405180910390fd5b5b7f00000000000000000000000071fed781fb2dae9a4e521b5171d7e61ff6bb5de073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e9f5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ef55750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f59576000611f0583610f10565b90506007548282611f16919061315f565b1115611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e9061378f565b60405180910390fd5b505b6000611f6430610f10565b90506000600a548210159050808015611f8a5750600660149054906101000a900460ff16155b8015611fe157507f00000000000000000000000071fed781fb2dae9a4e521b5171d7e61ff6bb5de073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611ff95750600660159054906101000a900460ff165b1561200d57600a54915061200c8261253b565b5b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120b15750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121cd5760007f00000000000000000000000071fed781fb2dae9a4e521b5171d7e61ff6bb5de073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061215d57507f00000000000000000000000071fed781fb2dae9a4e521b5171d7e61ff6bb5de073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156121a15761219e6064612190612181600c54600b5461197e90919063ffffffff16565b876126d590919063ffffffff16565b6121e090919063ffffffff16565b90505b6121b481856126eb90919063ffffffff16565b935060008111156121cb576121ca8630836122bc565b5b505b6121d88585856122bc565b50505b505050565b600081836121ee91906137de565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361232b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612322906134db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061356d565b60405180910390fd5b6123a5838383612701565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290613881565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124be919061315f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125229190612ccf565b60405180910390a3612535848484612706565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000612595612572600c54600b5461197e90919063ffffffff16565b612587600b54856126d590919063ffffffff16565b6121e090919063ffffffff16565b905060006125ad6002836121e090919063ffffffff16565b905060006125c482846126eb90919063ffffffff16565b905060004790506125d48361270b565b60006125e982476126eb90919063ffffffff16565b90506125f58382612984565b61261061260b86886126eb90919063ffffffff16565b61270b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612678573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148684826040516126aa9291906138a1565b60405180910390a150505050506000600660146101000a81548160ff02191690831515021790555050565b600081836126e391906138ca565b905092915050565b600081836126f99190613924565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561272857612727613958565b5b6040519080825280602002602001820160405280156127565781602001602082028036833780820191505090505b509050308160008151811061276e5761276d613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612815573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283991906139cb565b8160018151811061284d5761284c613987565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816128b430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611623565b10156128ea576128e930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196117b5565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161294e959493929190613af1565b600060405180830381600087803b15801561296857600080fd5b505af115801561297c573d6000803e3d6000fd5b505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129d061108c565b426040518863ffffffff1660e01b81526004016129f296959493929190613b4b565b60606040518083038185885af1158015612a10573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a359190613bc1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a76578082015181840152602081019050612a5b565b83811115612a85576000848401525b50505050565b6000601f19601f8301169050919050565b6000612aa782612a3c565b612ab18185612a47565b9350612ac1818560208601612a58565b612aca81612a8b565b840191505092915050565b60006020820190508181036000830152612aef8184612a9c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2782612afc565b9050919050565b612b3781612b1c565b8114612b4257600080fd5b50565b600081359050612b5481612b2e565b92915050565b6000819050919050565b612b6d81612b5a565b8114612b7857600080fd5b50565b600081359050612b8a81612b64565b92915050565b60008060408385031215612ba757612ba6612af7565b5b6000612bb585828601612b45565b9250506020612bc685828601612b7b565b9150509250929050565b60008115159050919050565b612be581612bd0565b82525050565b6000602082019050612c006000830184612bdc565b92915050565b60008060408385031215612c1d57612c1c612af7565b5b6000612c2b85828601612b7b565b9250506020612c3c85828601612b7b565b9150509250929050565b6000819050919050565b6000612c6b612c66612c6184612afc565b612c46565b612afc565b9050919050565b6000612c7d82612c50565b9050919050565b6000612c8f82612c72565b9050919050565b612c9f81612c84565b82525050565b6000602082019050612cba6000830184612c96565b92915050565b612cc981612b5a565b82525050565b6000602082019050612ce46000830184612cc0565b92915050565b600060208284031215612d0057612cff612af7565b5b6000612d0e84828501612b45565b91505092915050565b600080600060608486031215612d3057612d2f612af7565b5b6000612d3e86828701612b45565b9350506020612d4f86828701612b45565b9250506040612d6086828701612b7b565b9150509250925092565b600060ff82169050919050565b612d8081612d6a565b82525050565b6000602082019050612d9b6000830184612d77565b92915050565b612daa81612bd0565b8114612db557600080fd5b50565b600081359050612dc781612da1565b92915050565b60008060408385031215612de457612de3612af7565b5b6000612df285828601612b45565b9250506020612e0385828601612db8565b9150509250929050565b612e1681612b1c565b82525050565b6000602082019050612e316000830184612e0d565b92915050565b600060208284031215612e4d57612e4c612af7565b5b6000612e5b84828501612b7b565b91505092915050565b6000612e6f82612afc565b9050919050565b612e7f81612e64565b8114612e8a57600080fd5b50565b600081359050612e9c81612e76565b92915050565b600060208284031215612eb857612eb7612af7565b5b6000612ec684828501612e8d565b91505092915050565b612ed881612e64565b82525050565b6000602082019050612ef36000830184612ecf565b92915050565b600060208284031215612f0f57612f0e612af7565b5b6000612f1d84828501612db8565b91505092915050565b60008060408385031215612f3d57612f3c612af7565b5b6000612f4b85828601612b45565b9250506020612f5c85828601612b45565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fad57607f821691505b602082108103612fc057612fbf612f66565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ffc602083612a47565b915061300782612fc6565b602082019050919050565b6000602082019050818103600083015261302b81612fef565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613068600c83612a47565b915061307382613032565b602082019050919050565b600060208201905081810360008301526130978161305b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006130fa602883612a47565b91506131058261309e565b604082019050919050565b60006020820190508181036000830152613129816130ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316a82612b5a565b915061317583612b5a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131aa576131a9613130565b5b828201905092915050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006131eb600d83612a47565b91506131f6826131b5565b602082019050919050565b6000602082019050818103600083015261321a816131de565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061327d602583612a47565b915061328882613221565b604082019050919050565b600060208201905081810360008301526132ac81613270565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061330f602683612a47565b915061331a826132b3565b604082019050919050565b6000602082019050818103600083015261333e81613302565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133a1602483612a47565b91506133ac82613345565b604082019050919050565b600060208201905081810360008301526133d081613394565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613433602283612a47565b915061343e826133d7565b604082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134c5602583612a47565b91506134d082613469565b604082019050919050565b600060208201905081810360008301526134f4816134b8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613557602383612a47565b9150613562826134fb565b604082019050919050565b600060208201905081810360008301526135868161354a565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006135c3601383612a47565b91506135ce8261358d565b602082019050919050565b600060208201905081810360008301526135f2816135b6565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d61784275795478416d6f756e7400000000000000000000000000602082015250565b6000613655603383612a47565b9150613660826135f9565b604082019050919050565b6000602082019050818103600083015261368481613648565b9050919050565b7f616d6f756e74206d757374206265206c657373207468616e206f72206571756160008201527f6c20746f206d617853656c6c5478416d6f756e74000000000000000000000000602082015250565b60006136e7603483612a47565b91506136f28261368b565b604082019050919050565b60006020820190508181036000830152613716816136da565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613779602483612a47565b91506137848261371d565b604082019050919050565b600060208201905081810360008301526137a88161376c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137e982612b5a565b91506137f483612b5a565b925082613804576138036137af565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061386b602683612a47565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b60006040820190506138b66000830185612cc0565b6138c36020830184612cc0565b9392505050565b60006138d582612b5a565b91506138e083612b5a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561391957613918613130565b5b828202905092915050565b600061392f82612b5a565b915061393a83612b5a565b92508282101561394d5761394c613130565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139c581612b2e565b92915050565b6000602082840312156139e1576139e0612af7565b5b60006139ef848285016139b6565b91505092915050565b6000819050919050565b6000613a1d613a18613a13846139f8565b612c46565b612b5a565b9050919050565b613a2d81613a02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a6881612b1c565b82525050565b6000613a7a8383613a5f565b60208301905092915050565b6000602082019050919050565b6000613a9e82613a33565b613aa88185613a3e565b9350613ab383613a4f565b8060005b83811015613ae4578151613acb8882613a6e565b9750613ad683613a86565b925050600181019050613ab7565b5085935050505092915050565b600060a082019050613b066000830188612cc0565b613b136020830187613a24565b8181036040830152613b258186613a93565b9050613b346060830185612e0d565b613b416080830184612cc0565b9695505050505050565b600060c082019050613b606000830189612e0d565b613b6d6020830188612cc0565b613b7a6040830187613a24565b613b876060830186613a24565b613b946080830185612e0d565b613ba160a0830184612cc0565b979650505050505050565b600081519050613bbb81612b64565b92915050565b600080600060608486031215613bda57613bd9612af7565b5b6000613be886828701613bac565b9350506020613bf986828701613bac565b9250506040613c0a86828701613bac565b915050925092509256fea2646970667358221220d8778124f9e73807db175073dace72835e61eb5e675fa104395b163e0db9bf9664736f6c634300080f0033
Deployed Bytecode Sourcemap
39719:8376:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5583:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7749:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47076:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39792:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6702:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40534:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8400:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6545:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9301:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46818:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39840:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39923:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46503:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47850:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47518:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40237:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6873:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17112:94;;;;;;;;;;;;;:::i;:::-;;46949:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40277:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16461:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47324:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5802:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40199:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10019:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40028:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7213:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47653:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46307:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46639:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40084:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7451:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40141:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39972;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17361:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5583:100;5637:13;5670:5;5663:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5583:100;:::o;7749:169::-;7832:4;7849:39;7858:12;:10;:12::i;:::-;7872:7;7881:6;7849:8;:39::i;:::-;7906:4;7899:11;;7749:169;;;;:::o;47076:240::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47211:2:::1;47175:32;47193:13;47175;:17;;:32;;;;:::i;:::-;:38;;47167:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47256:13;47241:12;:28;;;;47295:13;47280:12;:28;;;;47076:240:::0;;:::o;39792:41::-;;;;;;;;;;;;;:::o;6702:108::-;6763:7;6790:12;;6783:19;;6702:108;:::o;40534:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;8400:492::-;8540:4;8557:36;8567:6;8575:9;8586:6;8557:9;:36::i;:::-;8606:24;8633:11;:19;8645:6;8633:19;;;;;;;;;;;;;;;:33;8653:12;:10;:12::i;:::-;8633:33;;;;;;;;;;;;;;;;8606:60;;8705:6;8685:16;:26;;8677:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8792:57;8801:6;8809:12;:10;:12::i;:::-;8842:6;8823:16;:25;8792:8;:57::i;:::-;8880:4;8873:11;;;8400:492;;;;;:::o;6545:92::-;6603:5;6628:1;6621:8;;6545:92;:::o;9301:215::-;9389:4;9406:80;9415:12;:10;:12::i;:::-;9429:7;9475:10;9438:11;:25;9450:12;:10;:12::i;:::-;9438:25;;;;;;;;;;;;;;;:34;9464:7;9438:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9406:8;:80::i;:::-;9504:4;9497:11;;9301:215;;;;:::o;46818:123::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46928:5:::1;46902:14;:23;46917:7;46902:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;46818:123:::0;;:::o;39840:38::-;;;:::o;39923:40::-;;;;;;;;;;;;;:::o;46503:125::-;46568:4;46592:19;:28;46612:7;46592:28;;;;;;;;;;;;;;;;;;;;;;;;;46585:35;;46503:125;;;:::o;47850:194::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47949:10:::1;47931:15;:28;;;;47997:22;48015:3;47997:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47978:15;;:41;;47970:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47850:194:::0;:::o;47518:123::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47623:11:::1;47605:15;;:29;;;;;;;;;;;;;;;;;;47518:123:::0;:::o;40237:31::-;;;;:::o;6873:127::-;6947:7;6974:9;:18;6984:7;6974:18;;;;;;;;;;;;;;;;6967:25;;6873:127;;;:::o;17112:94::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17177:21:::1;17195:1;17177:9;:21::i;:::-;17112:94::o:0;46949:119::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47050:10:::1;47029:18;:31;;;;46949:119:::0;:::o;40277:92::-;;;;;;;;;;;;;:::o;16461:87::-;16507:7;16534:6;;;;;;;;;;;16527:13;;16461:87;:::o;47324:186::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47417:9:::1;47400:14;:26;;;;47463:22;47481:3;47463:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47445:14;;:40;;47437:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47324:186:::0;:::o;5802:104::-;5858:13;5891:7;5884:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5802:104;:::o;40199:31::-;;;;:::o;10019:413::-;10112:4;10129:24;10156:11;:25;10168:12;:10;:12::i;:::-;10156:25;;;;;;;;;;;;;;;:34;10182:7;10156:34;;;;;;;;;;;;;;;;10129:61;;10229:15;10209:16;:35;;10201:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10322:67;10331:12;:10;:12::i;:::-;10345:7;10373:15;10354:16;:34;10322:8;:67::i;:::-;10420:4;10413:11;;;10019:413;;;;:::o;40028:49::-;;;;:::o;7213:175::-;7299:4;7316:42;7326:12;:10;:12::i;:::-;7340:9;7351:6;7316:9;:42::i;:::-;7376:4;7369:11;;7213:175;;;;:::o;47653:189::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47749:9:::1;47732:14;:26;;;;47795:22;47813:3;47795:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47777:14;;:40;;47769:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47653:189:::0;:::o;46307:184::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46423:8:::1;46392:19;:28;46412:7;46392:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46465:7;46449:34;;;46474:8;46449:34;;;;;;:::i;:::-;;;;;;;;46307:184:::0;;:::o;46639:171::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46740:8:::1;46716:21;;:32;;;;;;;;;;;;;;;;;;46764:38;46793:8;46764:38;;;;;;:::i;:::-;;;;;;;;46639:171:::0;:::o;40084:50::-;;;;:::o;7451:151::-;7540:7;7567:11;:18;7579:5;7567:18;;;;;;;;;;;;;;;:27;7586:7;7567:27;;;;;;;;;;;;;;;;7560:34;;7451:151;;;;:::o;40141:49::-;;;;:::o;39972:::-;;;;:::o;17361:192::-;16692:12;:10;:12::i;:::-;16681:23;;:7;:5;:7::i;:::-;:23;;;16673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17470:1:::1;17450:22;;:8;:22;;::::0;17442:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17526:19;17536:8;17526:9;:19::i;:::-;17361:192:::0;:::o;3397:98::-;3450:7;3477:10;3470:17;;3397:98;:::o;13711:380::-;13864:1;13847:19;;:5;:19;;;13839:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13945:1;13926:21;;:7;:21;;;13918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14029:6;13999:11;:18;14011:5;13999:18;;;;;;;;;;;;;;;:27;14018:7;13999:27;;;;;;;;;;;;;;;:36;;;;14067:7;14051:32;;14060:5;14051:32;;;14076:6;14051:32;;;;;;:::i;:::-;;;;;;;;13711:380;;;:::o;27615:98::-;27673:7;27704:1;27700;:5;;;;:::i;:::-;27693:12;;27615:98;;;;:::o;41761:2187::-;41909:1;41893:18;;:4;:18;;;41885:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41986:1;41972:16;;:2;:16;;;41964:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42048:14;:20;42063:4;42048:20;;;;;;;;;;;;;;;;;;;;;;;;;42047:21;:44;;;;;42073:14;:18;42088:2;42073:18;;;;;;;;;;;;;;;;;;;;;;;;;42072:19;42047:44;42039:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42141:1;42131:6;:11;42128:92;;42159:28;42175:4;42181:2;42185:1;42159:15;:28::i;:::-;42202:7;;42128:92;42243:13;42235:21;;:4;:21;;;:51;;;;;42261:19;:25;42281:4;42261:25;;;;;;;;;;;;;;;;;;;;;;;;;42260:26;42235:51;:79;;;;;42291:19;:23;42311:2;42291:23;;;;;;;;;;;;;;;;;;;;;;;;;42290:24;42235:79;42232:199;;;42349:14;;42339:6;:24;;42331:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;42232:199;42453:13;42447:19;;:2;:19;;;:49;;;;;42471:19;:25;42491:4;42471:25;;;;;;;;;;;;;;;;;;;;;;;;;42470:26;42447:49;:77;;;;;42501:19;:23;42521:2;42501:23;;;;;;;;;;;;;;;;;;;;;;;;;42500:24;42447:77;42444:199;;;42559:15;;42549:6;:25;;42541:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;42444:199;42664:13;42658:19;;:4;:19;;;:49;;;;;42682:19;:25;42702:4;42682:25;;;;;;;;;;;;;;;;;;;;;;;;;42681:26;42658:49;:77;;;;;42712:19;:23;42732:2;42712:23;;;;;;;;;;;;;;;;;;;;;;;;;42711:24;42658:77;42655:271;;;42751:32;42786:13;42796:2;42786:9;:13::i;:::-;42751:48;;42859:14;;42849:6;42822:24;:33;;;;:::i;:::-;:51;;42814:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;42736:190;42655:271;42935:28;42966:24;42984:4;42966:9;:24::i;:::-;42935:55;;43011:24;43062:18;;43038:20;:42;;43011:69;;43117:19;:53;;;;;43154:16;;;;;;;;;;;43153:17;43117:53;:87;;;;;43191:13;43187:17;;:2;:17;;;43117:87;:126;;;;;43222:21;;;;;;;;;;;43117:126;43100:274;;;43293:18;;43270:41;;43326:36;43341:20;43326:14;:36::i;:::-;43100:274;43476:19;:25;43496:4;43476:25;;;;;;;;;;;;;;;;;;;;;;;;;43475:26;:54;;;;;43506:19;:23;43526:2;43506:23;;;;;;;;;;;;;;;;;;;;;;;;;43505:24;43475:54;43472:421;;;43546:12;43592:13;43586:19;;:4;:19;;;:40;;;;43613:13;43609:17;;:2;:17;;;43586:40;43583:138;;;43654:51;43701:3;43654:42;43665:30;43682:12;;43665;;:16;;:30;;;;:::i;:::-;43654:6;:10;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;43647:58;;43583:138;43743:16;43754:4;43743:6;:10;;:16;;;;:::i;:::-;43734:25;;43786:1;43779:4;:8;43776:91;;;43808:42;43824:4;43838;43845;43808:15;:42::i;:::-;43776:91;43531:362;43472:421;43905:33;43921:4;43927:2;43931:6;43905:15;:33::i;:::-;41874:2074;;41761:2187;;;;:::o;28752:98::-;28810:7;28841:1;28837;:5;;;;:::i;:::-;28830:12;;28752:98;;;;:::o;17561:173::-;17617:16;17636:6;;;;;;;;;;;17617:25;;17662:8;17653:6;;:17;;;;;;;;;;;;;;;;;;17717:8;17686:40;;17707:8;17686:40;;;;;;;;;;;;17606:128;17561:173;:::o;10922:733::-;11080:1;11062:20;;:6;:20;;;11054:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11164:1;11143:23;;:9;:23;;;11135:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11219:47;11240:6;11248:9;11259:6;11219:20;:47::i;:::-;11279:21;11303:9;:17;11313:6;11303:17;;;;;;;;;;;;;;;;11279:41;;11356:6;11339:13;:23;;11331:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11477:6;11461:13;:22;11441:9;:17;11451:6;11441:17;;;;;;;;;;;;;;;:42;;;;11529:6;11505:9;:20;11515:9;11505:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11570:9;11553:35;;11562:6;11553:35;;;11581:6;11553:35;;;;;;:::i;:::-;;;;;;;;11601:46;11621:6;11629:9;11640:6;11601:19;:46::i;:::-;11043:612;10922:733;;;:::o;43957:1253::-;40843:4;40824:16;;:23;;;;;;;;;;;;;;;;;;44042:26:::1;44071:74;44114:30;44131:12;;44114;;:16;;:30;;;;:::i;:::-;44071:38;44096:12;;44071:20;:24;;:38;;;;:::i;:::-;:42;;:74;;;;:::i;:::-;44042:103;;44214:12;44229:25;44252:1;44229:18;:22;;:25;;;;:::i;:::-;44214:40;;44265:17;44285:28;44308:4;44285:18;:22;;:28;;;;:::i;:::-;44265:48;;44591:22;44616:21;44591:46;;44682:22;44699:4;44682:16;:22::i;:::-;44835:18;44856:41;44882:14;44856:21;:25;;:41;;;;:::i;:::-;44835:62;;44947:35;44960:9;44971:10;44947:12;:35::i;:::-;45032:62;45049:44;45074:18;45049:20;:24;;:44;;;;:::i;:::-;45032:16;:62::i;:::-;45105:15;;;;;;;;;;;:24;;:47;45130:21;45105:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45170:32;45185:4;45191:10;45170:32;;;;;;;:::i;:::-;;;;;;;;44031:1179;;;;;40889:5:::0;40870:16;;:24;;;;;;;;;;;;;;;;;;43957:1253;:::o;28353:98::-;28411:7;28442:1;28438;:5;;;;:::i;:::-;28431:12;;28353:98;;;;:::o;27996:::-;28054:7;28085:1;28081;:5;;;;:::i;:::-;28074:12;;27996:98;;;;:::o;14691:125::-;;;;:::o;15420:124::-;;;;:::o;45218:692::-;45344:21;45382:1;45368:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45344:40;;45413:4;45395;45400:1;45395:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45439:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45429:4;45434:1;45429:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45530:11;45477:50;45495:4;45510:15;;;;;;;;;;;45477:9;:50::i;:::-;:64;45474:156;;;45556:62;45573:4;45588:15;;;;;;;;;;;45615:1;45606:11;45556:8;:62::i;:::-;45474:156;45668:15;;;;;;;;;;;:66;;;45749:11;45775:1;45819:4;45846;45866:15;45668:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45273:637;45218:692;:::o;45918:381::-;46029:15;;;;;;;;;;;:31;;;46068:9;46101:4;46121:11;46147:1;46190;46233:7;:5;:7::i;:::-;46255:15;46029:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45918: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:474::-;3562:6;3570;3619:2;3607:9;3598:7;3594:23;3590:32;3587:119;;;3625:79;;:::i;:::-;3587:119;3745:1;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3716:117;3872:2;3898:53;3943:7;3934:6;3923:9;3919:22;3898:53;:::i;:::-;3888:63;;3843:118;3494:474;;;;;:::o;3974:60::-;4002:3;4023:5;4016:12;;3974:60;;;:::o;4040:142::-;4090:9;4123:53;4141:34;4150:24;4168:5;4150:24;:::i;:::-;4141:34;:::i;:::-;4123:53;:::i;:::-;4110:66;;4040:142;;;:::o;4188:126::-;4238:9;4271:37;4302:5;4271:37;:::i;:::-;4258:50;;4188:126;;;:::o;4320:153::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4320:153;;;:::o;4479:185::-;4593:64;4651:5;4593:64;:::i;:::-;4588:3;4581:77;4479:185;;:::o;4670:276::-;4790:4;4828:2;4817:9;4813:18;4805:26;;4841:98;4936:1;4925:9;4921:17;4912:6;4841:98;:::i;:::-;4670:276;;;;:::o;4952:118::-;5039:24;5057:5;5039:24;:::i;:::-;5034:3;5027:37;4952:118;;:::o;5076:222::-;5169:4;5207:2;5196:9;5192:18;5184:26;;5220:71;5288:1;5277:9;5273:17;5264:6;5220:71;:::i;:::-;5076:222;;;;:::o;5304:329::-;5363:6;5412:2;5400:9;5391:7;5387:23;5383:32;5380:119;;;5418:79;;:::i;:::-;5380:119;5538:1;5563:53;5608:7;5599:6;5588:9;5584:22;5563:53;:::i;:::-;5553:63;;5509:117;5304:329;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:86::-;6299:7;6339:4;6332:5;6328:16;6317:27;;6264:86;;;:::o;6356:112::-;6439:22;6455:5;6439:22;:::i;:::-;6434:3;6427:35;6356:112;;:::o;6474:214::-;6563:4;6601:2;6590:9;6586:18;6578:26;;6614:67;6678:1;6667:9;6663:17;6654:6;6614:67;:::i;:::-;6474:214;;;;:::o;6694:116::-;6764:21;6779:5;6764:21;:::i;:::-;6757:5;6754:32;6744:60;;6800:1;6797;6790:12;6744:60;6694:116;:::o;6816:133::-;6859:5;6897:6;6884:20;6875:29;;6913:30;6937:5;6913:30;:::i;:::-;6816:133;;;;:::o;6955:468::-;7020:6;7028;7077:2;7065:9;7056:7;7052:23;7048:32;7045:119;;;7083:79;;:::i;:::-;7045:119;7203:1;7228:53;7273:7;7264:6;7253:9;7249:22;7228:53;:::i;:::-;7218:63;;7174:117;7330:2;7356:50;7398:7;7389:6;7378:9;7374:22;7356:50;:::i;:::-;7346:60;;7301:115;6955:468;;;;;:::o;7429:118::-;7516:24;7534:5;7516:24;:::i;:::-;7511:3;7504:37;7429:118;;:::o;7553:222::-;7646:4;7684:2;7673:9;7669:18;7661:26;;7697:71;7765:1;7754:9;7750:17;7741:6;7697:71;:::i;:::-;7553:222;;;;:::o;7781:329::-;7840:6;7889:2;7877:9;7868:7;7864:23;7860:32;7857:119;;;7895:79;;:::i;:::-;7857:119;8015:1;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7986:117;7781:329;;;;:::o;8116:104::-;8161:7;8190:24;8208:5;8190:24;:::i;:::-;8179:35;;8116:104;;;:::o;8226:138::-;8307:32;8333:5;8307:32;:::i;:::-;8300:5;8297:43;8287:71;;8354:1;8351;8344:12;8287:71;8226:138;:::o;8370:155::-;8424:5;8462:6;8449:20;8440:29;;8478:41;8513:5;8478:41;:::i;:::-;8370:155;;;;:::o;8531:345::-;8598:6;8647:2;8635:9;8626:7;8622:23;8618:32;8615:119;;;8653:79;;:::i;:::-;8615:119;8773:1;8798:61;8851:7;8842:6;8831:9;8827:22;8798:61;:::i;:::-;8788:71;;8744:125;8531:345;;;;:::o;8882:142::-;8985:32;9011:5;8985:32;:::i;:::-;8980:3;8973:45;8882:142;;:::o;9030:254::-;9139:4;9177:2;9166:9;9162:18;9154:26;;9190:87;9274:1;9263:9;9259:17;9250:6;9190:87;:::i;:::-;9030:254;;;;:::o;9290:323::-;9346:6;9395:2;9383:9;9374:7;9370:23;9366:32;9363:119;;;9401:79;;:::i;:::-;9363:119;9521:1;9546:50;9588:7;9579:6;9568:9;9564:22;9546:50;:::i;:::-;9536:60;;9492:114;9290:323;;;;:::o;9619:474::-;9687:6;9695;9744:2;9732:9;9723:7;9719:23;9715:32;9712:119;;;9750:79;;:::i;:::-;9712:119;9870:1;9895:53;9940:7;9931:6;9920:9;9916:22;9895:53;:::i;:::-;9885:63;;9841:117;9997:2;10023:53;10068:7;10059:6;10048:9;10044:22;10023:53;:::i;:::-;10013:63;;9968:118;9619:474;;;;;:::o;10099:180::-;10147:77;10144:1;10137:88;10244:4;10241:1;10234:15;10268:4;10265:1;10258:15;10285:320;10329:6;10366:1;10360:4;10356:12;10346:22;;10413:1;10407:4;10403:12;10434:18;10424:81;;10490:4;10482:6;10478:17;10468:27;;10424:81;10552:2;10544:6;10541:14;10521:18;10518:38;10515:84;;10571:18;;:::i;:::-;10515:84;10336:269;10285:320;;;:::o;10611:182::-;10751:34;10747:1;10739:6;10735:14;10728:58;10611:182;:::o;10799:366::-;10941:3;10962:67;11026:2;11021:3;10962:67;:::i;:::-;10955:74;;11038:93;11127:3;11038:93;:::i;:::-;11156:2;11151:3;11147:12;11140:19;;10799:366;;;:::o;11171:419::-;11337:4;11375:2;11364:9;11360:18;11352:26;;11424:9;11418:4;11414:20;11410:1;11399:9;11395:17;11388:47;11452:131;11578:4;11452:131;:::i;:::-;11444:139;;11171:419;;;:::o;11596:162::-;11736:14;11732:1;11724:6;11720:14;11713:38;11596:162;:::o;11764:366::-;11906:3;11927:67;11991:2;11986:3;11927:67;:::i;:::-;11920:74;;12003:93;12092:3;12003:93;:::i;:::-;12121:2;12116:3;12112:12;12105:19;;11764:366;;;:::o;12136:419::-;12302:4;12340:2;12329:9;12325:18;12317:26;;12389:9;12383:4;12379:20;12375:1;12364:9;12360:17;12353:47;12417:131;12543:4;12417:131;:::i;:::-;12409:139;;12136:419;;;:::o;12561:227::-;12701:34;12697:1;12689:6;12685:14;12678:58;12770:10;12765:2;12757:6;12753:15;12746:35;12561:227;:::o;12794:366::-;12936:3;12957:67;13021:2;13016:3;12957:67;:::i;:::-;12950:74;;13033:93;13122:3;13033:93;:::i;:::-;13151:2;13146:3;13142:12;13135:19;;12794:366;;;:::o;13166:419::-;13332:4;13370:2;13359:9;13355:18;13347:26;;13419:9;13413:4;13409:20;13405:1;13394:9;13390:17;13383:47;13447:131;13573:4;13447:131;:::i;:::-;13439:139;;13166:419;;;:::o;13591:180::-;13639:77;13636:1;13629:88;13736:4;13733:1;13726:15;13760:4;13757:1;13750:15;13777:305;13817:3;13836:20;13854:1;13836:20;:::i;:::-;13831:25;;13870:20;13888:1;13870:20;:::i;:::-;13865:25;;14024:1;13956:66;13952:74;13949:1;13946:81;13943:107;;;14030:18;;:::i;:::-;13943:107;14074:1;14071;14067:9;14060:16;;13777:305;;;;:::o;14088:163::-;14228:15;14224:1;14216:6;14212:14;14205:39;14088:163;:::o;14257:366::-;14399:3;14420:67;14484:2;14479:3;14420:67;:::i;:::-;14413:74;;14496:93;14585:3;14496:93;:::i;:::-;14614:2;14609:3;14605:12;14598:19;;14257:366;;;:::o;14629:419::-;14795:4;14833:2;14822:9;14818:18;14810:26;;14882:9;14876:4;14872:20;14868:1;14857:9;14853:17;14846:47;14910:131;15036:4;14910:131;:::i;:::-;14902:139;;14629:419;;;:::o;15054:224::-;15194:34;15190:1;15182:6;15178:14;15171:58;15263:7;15258:2;15250:6;15246:15;15239:32;15054:224;:::o;15284:366::-;15426:3;15447:67;15511:2;15506:3;15447:67;:::i;:::-;15440:74;;15523:93;15612:3;15523:93;:::i;:::-;15641:2;15636:3;15632:12;15625:19;;15284:366;;;:::o;15656:419::-;15822:4;15860:2;15849:9;15845:18;15837:26;;15909:9;15903:4;15899:20;15895:1;15884:9;15880:17;15873:47;15937:131;16063:4;15937:131;:::i;:::-;15929:139;;15656:419;;;:::o;16081:225::-;16221:34;16217:1;16209:6;16205:14;16198:58;16290:8;16285:2;16277:6;16273:15;16266:33;16081:225;:::o;16312:366::-;16454:3;16475:67;16539:2;16534:3;16475:67;:::i;:::-;16468:74;;16551:93;16640:3;16551:93;:::i;:::-;16669:2;16664:3;16660:12;16653:19;;16312:366;;;:::o;16684:419::-;16850:4;16888:2;16877:9;16873:18;16865:26;;16937:9;16931:4;16927:20;16923:1;16912:9;16908:17;16901:47;16965:131;17091:4;16965:131;:::i;:::-;16957:139;;16684:419;;;:::o;17109:223::-;17249:34;17245:1;17237:6;17233:14;17226:58;17318:6;17313:2;17305:6;17301:15;17294:31;17109:223;:::o;17338:366::-;17480:3;17501:67;17565:2;17560:3;17501:67;:::i;:::-;17494:74;;17577:93;17666:3;17577:93;:::i;:::-;17695:2;17690:3;17686:12;17679:19;;17338:366;;;:::o;17710:419::-;17876:4;17914:2;17903:9;17899:18;17891:26;;17963:9;17957:4;17953:20;17949:1;17938:9;17934:17;17927:47;17991:131;18117:4;17991:131;:::i;:::-;17983:139;;17710:419;;;:::o;18135:221::-;18275:34;18271:1;18263:6;18259:14;18252:58;18344:4;18339:2;18331:6;18327:15;18320:29;18135:221;:::o;18362:366::-;18504:3;18525:67;18589:2;18584:3;18525:67;:::i;:::-;18518:74;;18601:93;18690:3;18601:93;:::i;:::-;18719:2;18714:3;18710:12;18703:19;;18362:366;;;:::o;18734:419::-;18900:4;18938:2;18927:9;18923:18;18915:26;;18987:9;18981:4;18977:20;18973:1;18962:9;18958:17;18951:47;19015:131;19141:4;19015:131;:::i;:::-;19007:139;;18734:419;;;:::o;19159:224::-;19299:34;19295:1;19287:6;19283:14;19276:58;19368:7;19363:2;19355:6;19351:15;19344:32;19159:224;:::o;19389:366::-;19531:3;19552:67;19616:2;19611:3;19552:67;:::i;:::-;19545:74;;19628:93;19717:3;19628:93;:::i;:::-;19746:2;19741:3;19737:12;19730:19;;19389:366;;;:::o;19761:419::-;19927:4;19965:2;19954:9;19950:18;19942:26;;20014:9;20008:4;20004:20;20000:1;19989:9;19985:17;19978:47;20042:131;20168:4;20042:131;:::i;:::-;20034:139;;19761:419;;;:::o;20186:222::-;20326:34;20322:1;20314:6;20310:14;20303:58;20395:5;20390:2;20382:6;20378:15;20371:30;20186:222;:::o;20414:366::-;20556:3;20577:67;20641:2;20636:3;20577:67;:::i;:::-;20570:74;;20653:93;20742:3;20653:93;:::i;:::-;20771:2;20766:3;20762:12;20755:19;;20414:366;;;:::o;20786:419::-;20952:4;20990:2;20979:9;20975:18;20967:26;;21039:9;21033:4;21029:20;21025:1;21014:9;21010:17;21003:47;21067:131;21193:4;21067:131;:::i;:::-;21059:139;;20786:419;;;:::o;21211:169::-;21351:21;21347:1;21339:6;21335:14;21328:45;21211:169;:::o;21386:366::-;21528:3;21549:67;21613:2;21608:3;21549:67;:::i;:::-;21542:74;;21625:93;21714:3;21625:93;:::i;:::-;21743:2;21738:3;21734:12;21727:19;;21386:366;;;:::o;21758:419::-;21924:4;21962:2;21951:9;21947:18;21939:26;;22011:9;22005:4;22001:20;21997:1;21986:9;21982:17;21975:47;22039:131;22165:4;22039:131;:::i;:::-;22031:139;;21758:419;;;:::o;22183:238::-;22323:34;22319:1;22311:6;22307:14;22300:58;22392:21;22387:2;22379:6;22375:15;22368:46;22183:238;:::o;22427:366::-;22569:3;22590:67;22654:2;22649:3;22590:67;:::i;:::-;22583:74;;22666:93;22755:3;22666:93;:::i;:::-;22784:2;22779:3;22775:12;22768:19;;22427:366;;;:::o;22799:419::-;22965:4;23003:2;22992:9;22988:18;22980:26;;23052:9;23046:4;23042:20;23038:1;23027:9;23023:17;23016:47;23080:131;23206:4;23080:131;:::i;:::-;23072:139;;22799:419;;;:::o;23224:239::-;23364:34;23360:1;23352:6;23348:14;23341:58;23433:22;23428:2;23420:6;23416:15;23409:47;23224:239;:::o;23469:366::-;23611:3;23632:67;23696:2;23691:3;23632:67;:::i;:::-;23625:74;;23708:93;23797:3;23708:93;:::i;:::-;23826:2;23821:3;23817:12;23810:19;;23469:366;;;:::o;23841:419::-;24007:4;24045:2;24034:9;24030:18;24022:26;;24094:9;24088:4;24084:20;24080:1;24069:9;24065:17;24058:47;24122:131;24248:4;24122:131;:::i;:::-;24114:139;;23841:419;;;:::o;24266:223::-;24406:34;24402:1;24394:6;24390:14;24383:58;24475:6;24470:2;24462:6;24458:15;24451:31;24266:223;:::o;24495:366::-;24637:3;24658:67;24722:2;24717:3;24658:67;:::i;:::-;24651:74;;24734:93;24823:3;24734:93;:::i;:::-;24852:2;24847:3;24843:12;24836:19;;24495:366;;;:::o;24867:419::-;25033:4;25071:2;25060:9;25056:18;25048:26;;25120:9;25114:4;25110:20;25106:1;25095:9;25091:17;25084:47;25148:131;25274:4;25148:131;:::i;:::-;25140:139;;24867:419;;;:::o;25292:180::-;25340:77;25337:1;25330:88;25437:4;25434:1;25427:15;25461:4;25458:1;25451:15;25478:185;25518:1;25535:20;25553:1;25535:20;:::i;:::-;25530:25;;25569:20;25587:1;25569:20;:::i;:::-;25564:25;;25608:1;25598:35;;25613:18;;:::i;:::-;25598:35;25655:1;25652;25648:9;25643:14;;25478:185;;;;:::o;25669:225::-;25809:34;25805:1;25797:6;25793:14;25786:58;25878:8;25873:2;25865:6;25861:15;25854:33;25669:225;:::o;25900:366::-;26042:3;26063:67;26127:2;26122:3;26063:67;:::i;:::-;26056:74;;26139:93;26228:3;26139:93;:::i;:::-;26257:2;26252:3;26248:12;26241:19;;25900:366;;;:::o;26272:419::-;26438:4;26476:2;26465:9;26461:18;26453:26;;26525:9;26519:4;26515:20;26511:1;26500:9;26496:17;26489:47;26553:131;26679:4;26553:131;:::i;:::-;26545:139;;26272:419;;;:::o;26697:332::-;26818:4;26856:2;26845:9;26841:18;26833:26;;26869:71;26937:1;26926:9;26922:17;26913:6;26869:71;:::i;:::-;26950:72;27018:2;27007:9;27003:18;26994:6;26950:72;:::i;:::-;26697:332;;;;;:::o;27035:348::-;27075:7;27098:20;27116:1;27098:20;:::i;:::-;27093:25;;27132:20;27150:1;27132:20;:::i;:::-;27127:25;;27320:1;27252:66;27248:74;27245:1;27242:81;27237:1;27230:9;27223:17;27219:105;27216:131;;;27327:18;;:::i;:::-;27216:131;27375:1;27372;27368:9;27357:20;;27035:348;;;;:::o;27389:191::-;27429:4;27449:20;27467:1;27449:20;:::i;:::-;27444:25;;27483:20;27501:1;27483:20;:::i;:::-;27478:25;;27522:1;27519;27516:8;27513:34;;;27527:18;;:::i;:::-;27513:34;27572:1;27569;27565:9;27557:17;;27389:191;;;;:::o;27586:180::-;27634:77;27631:1;27624:88;27731:4;27728:1;27721:15;27755:4;27752:1;27745:15;27772:180;27820:77;27817:1;27810:88;27917:4;27914:1;27907:15;27941:4;27938:1;27931:15;27958:143;28015:5;28046:6;28040:13;28031:22;;28062:33;28089:5;28062:33;:::i;:::-;27958:143;;;;:::o;28107:351::-;28177:6;28226:2;28214:9;28205:7;28201:23;28197:32;28194:119;;;28232:79;;:::i;:::-;28194:119;28352:1;28377:64;28433:7;28424:6;28413:9;28409:22;28377:64;:::i;:::-;28367:74;;28323:128;28107:351;;;;:::o;28464:85::-;28509:7;28538:5;28527:16;;28464:85;;;:::o;28555:158::-;28613:9;28646:61;28664:42;28673:32;28699:5;28673:32;:::i;:::-;28664:42;:::i;:::-;28646:61;:::i;:::-;28633:74;;28555:158;;;:::o;28719:147::-;28814:45;28853:5;28814:45;:::i;:::-;28809:3;28802:58;28719:147;;:::o;28872:114::-;28939:6;28973:5;28967:12;28957:22;;28872:114;;;:::o;28992:184::-;29091:11;29125:6;29120:3;29113:19;29165:4;29160:3;29156:14;29141:29;;28992:184;;;;:::o;29182:132::-;29249:4;29272:3;29264:11;;29302:4;29297:3;29293:14;29285:22;;29182:132;;;:::o;29320:108::-;29397:24;29415:5;29397:24;:::i;:::-;29392:3;29385:37;29320:108;;:::o;29434:179::-;29503:10;29524:46;29566:3;29558:6;29524:46;:::i;:::-;29602:4;29597:3;29593:14;29579:28;;29434:179;;;;:::o;29619:113::-;29689:4;29721;29716:3;29712:14;29704:22;;29619:113;;;:::o;29768:732::-;29887:3;29916:54;29964:5;29916:54;:::i;:::-;29986:86;30065:6;30060:3;29986:86;:::i;:::-;29979:93;;30096:56;30146:5;30096:56;:::i;:::-;30175:7;30206:1;30191:284;30216:6;30213:1;30210:13;30191:284;;;30292:6;30286:13;30319:63;30378:3;30363:13;30319:63;:::i;:::-;30312:70;;30405:60;30458:6;30405:60;:::i;:::-;30395:70;;30251:224;30238:1;30235;30231:9;30226:14;;30191:284;;;30195:14;30491:3;30484:10;;29892:608;;;29768:732;;;;:::o;30506:831::-;30769:4;30807:3;30796:9;30792:19;30784:27;;30821:71;30889:1;30878:9;30874:17;30865:6;30821:71;:::i;:::-;30902:80;30978:2;30967:9;30963:18;30954:6;30902:80;:::i;:::-;31029:9;31023:4;31019:20;31014:2;31003:9;30999:18;30992:48;31057:108;31160:4;31151:6;31057:108;:::i;:::-;31049:116;;31175:72;31243:2;31232:9;31228:18;31219:6;31175:72;:::i;:::-;31257:73;31325:3;31314:9;31310:19;31301:6;31257:73;:::i;:::-;30506:831;;;;;;;;:::o;31343:807::-;31592:4;31630:3;31619:9;31615:19;31607:27;;31644:71;31712:1;31701:9;31697:17;31688:6;31644:71;:::i;:::-;31725:72;31793:2;31782:9;31778:18;31769:6;31725:72;:::i;:::-;31807:80;31883:2;31872:9;31868:18;31859:6;31807:80;:::i;:::-;31897;31973:2;31962:9;31958:18;31949:6;31897:80;:::i;:::-;31987:73;32055:3;32044:9;32040:19;32031:6;31987:73;:::i;:::-;32070;32138:3;32127:9;32123:19;32114:6;32070:73;:::i;:::-;31343:807;;;;;;;;;:::o;32156:143::-;32213:5;32244:6;32238:13;32229:22;;32260:33;32287:5;32260:33;:::i;:::-;32156:143;;;;:::o;32305:663::-;32393:6;32401;32409;32458:2;32446:9;32437:7;32433:23;32429:32;32426:119;;;32464:79;;:::i;:::-;32426:119;32584:1;32609:64;32665:7;32656:6;32645:9;32641:22;32609:64;:::i;:::-;32599:74;;32555:128;32722:2;32748:64;32804:7;32795:6;32784:9;32780:22;32748:64;:::i;:::-;32738:74;;32693:129;32861:2;32887:64;32943:7;32934:6;32923:9;32919:22;32887:64;:::i;:::-;32877:74;;32832:129;32305:663;;;;;:::o
Swarm Source
ipfs://d8778124f9e73807db175073dace72835e61eb5e675fa104395b163e0db9bf96
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.