Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 Saṃsāra
Holders
25
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
13,001,199.996999344883028172 SaṃsāraValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
TheWheelOfLife
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-10 */ // File: TheWheelOfLife.sol /* You may discover that when there is no resistance to totally being in hell, heaven opens up and samsara reveals its true nature as nirvana. https://medium.com/@wheeloflife/the-wheel-of-life-samsara-e08e708503f https://t.me/TheWheelOfLifeETH */ pragma solidity 0.8.15; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); 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 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev 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. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } 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); } } /** * @dev Implementation of the {IERC20} interface. */ 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}. */ 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. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. */ 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 Moves `amount` of tokens from `sender` to `recipient`. */ 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. */ function _createInitialTotalSupply(address account, uint256 amount) internal virtual { require(account != address(0)); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. */ 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 */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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. */ 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 TheWheelOfLife is ERC20, Ownable { using SafeMath for uint256; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool private isOpen = false; uint256 public liquidityFee = 1; uint256 public marketingFee = 1; uint256 public devFee = 1; uint256 public sellLiquidityFee = 1; uint256 public sellMarketingFee = 1; uint256 public sellDevFee = 1; uint256 public maxTransactionAmount = 1000000000 * (10**18); uint256 public maxWalletToken = 1000000000 * (10**18); uint256 public swapTokensAtAmount = 500000 * (10**18); IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; mapping(address => bool) public _isBlacklisted; address payable public marketingWallet = payable(0x2FC6F27Eb769d2F62eDA09270F2888FdA5B357a2); address payable public devWallet = payable(0xe4a2334995Cc1aC56e56c1CA0Ed197408B9921a0); // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapETHForTokens(uint256 amountIn, address[] path); event ExcludeFromFees(address indexed account, bool isExcluded); constructor() ERC20("The Wheel Of Life", "\u0053\u0061\u1e43\u0073\u0101\u0072\u0061") { 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 and max transaction amount excludeFromFees(owner(), true); excludeFromFees(marketingWallet, true); excludeFromFees(devWallet, true); excludeFromFees(address(this), true); /* an internal function that is only called here, and CANNOT be called ever again */ _createInitialTotalSupply(owner(), 1000000000 * (10**18)); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); bool excludedAccount = _isExcludedFromFees[from] || _isExcludedFromFees[to]; require(isOpen || excludedAccount, "trading is not yet Open"); require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address'); if(amount == 0) { super._transfer(from, to, 0); return; } if(from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){ uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount."); } if(to==uniswapV2Pair && !excludedAccount) { require(amount <= maxTransactionAmount, "amount exceeds the maxTransactionAmount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if(overMinTokenBalance && !inSwapAndLiquify && to==uniswapV2Pair && swapAndLiquifyEnabled) { contractTokenBalance = swapTokensAtAmount; swapAndLiquify(contractTokenBalance); } // if any account belongs to _isExcludedFromFee account then remove the fee if(!excludedAccount) { uint256 fees; if(from==uniswapV2Pair) { fees = amount.mul(liquidityFee.add(marketingFee).add(devFee)).div(100); } if(to==uniswapV2Pair) { fees = amount.mul(sellLiquidityFee.add(sellMarketingFee).add(sellDevFee)).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(sellLiquidityFee).div(sellMarketingFee.add(sellLiquidityFee).add(sellDevFee)); // 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); // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); // swap and Send eth to wallets swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity)); devWallet.transfer(address(this).balance.mul(sellDevFee).div(sellMarketingFee.add(sellDevFee))); marketingWallet.transfer(address(this).balance); emit SwapAndLiquify(half, newBalance); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) { _approve(address(this), address(uniswapV2Router), ~uint256(0)); } // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function openTrade() external onlyOwner { isOpen = true; } function setMaxWalletLimit(uint256 _newLimit) public onlyOwner { maxWalletToken = _newLimit; require(maxWalletToken >= totalSupply().div(200), "value too low"); } function removeLimits(uint256 _Limits) public onlyOwner { maxTransactionAmount = _Limits; } function updateBuyFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee) public onlyOwner { require(_liquidityFee.add(_marketingFee).add(_devFee) <= 15, "tax too high"); liquidityFee = _liquidityFee; marketingFee = _marketingFee; devFee = _devFee; } function updateSellFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee) public onlyOwner { require(_liquidityFee.add(_marketingFee).add(_devFee) <= 15, "tax too high"); sellLiquidityFee = _liquidityFee; sellMarketingFee = _marketingFee; sellDevFee = _devFee; } function updateWallets(address payable _marketingWallet, address payable _devWallet) public onlyOwner { marketingWallet = _marketingWallet; devWallet = _devWallet; } function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner { swapTokensAtAmount = _newAmount; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function blacklistAddress(address account, bool value) external onlyOwner{ _isBlacklisted[account] = value; } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","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":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":"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":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Limits","type":"uint256"}],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setMaxWalletLimit","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"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingWallet","type":"address"},{"internalType":"address payable","name":"_devWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600560156101000a81548160ff0219169083151502179055506000600560166101000a81548160ff02191690831515021790555060016006556001600755600160085560016009556001600a556001600b556b033b2e3c9fd0803ce8000000600c556b033b2e3c9fd0803ce8000000600d556969e10de76676d0800000600e55732fc6f27eb769d2f62eda09270f2888fda5b357a2601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e4a2334995cc1ac56e56c1ca0ed197408b9921a0601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200013d57600080fd5b506040518060400160405280601181526020017f54686520576865656c204f66204c6966650000000000000000000000000000008152506040518060400160405280600a81526020017f5361e1b98373c4817261000000000000000000000000000000000000000000008152508160039081620001bb919062000b46565b508060049081620001cd919062000b46565b505050620001f0620001e4620004bb60201b60201c565b620004c360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000257573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027d919062000c97565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b919062000c97565b6040518363ffffffff1660e01b81526004016200032a92919062000cda565b6020604051808303816000875af11580156200034a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000370919062000c97565b905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000409620003fb6200058960201b60201c565b6001620005b360201b60201c565b6200043e601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b360201b60201c565b62000473601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b360201b60201c565b62000486306001620005b360201b60201c565b620004b36200049a6200058960201b60201c565b6b033b2e3c9fd0803ce80000006200078260201b60201c565b505062000f16565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005c3620004bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e96200058960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006399062000d68565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620006d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ce9062000e00565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000776919062000e3f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007bc57600080fd5b620007d060008383620008c260201b60201c565b8060026000828254620007e4919062000e8b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200083b919062000e8b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008a2919062000ef9565b60405180910390a3620008be60008383620008c760201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200094e57607f821691505b60208210810362000964576200096362000906565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200098f565b620009da86836200098f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a2762000a2162000a1b84620009f2565b620009fc565b620009f2565b9050919050565b6000819050919050565b62000a438362000a06565b62000a5b62000a528262000a2e565b8484546200099c565b825550505050565b600090565b62000a7262000a63565b62000a7f81848462000a38565b505050565b5b8181101562000aa75762000a9b60008262000a68565b60018101905062000a85565b5050565b601f82111562000af65762000ac0816200096a565b62000acb846200097f565b8101602085101562000adb578190505b62000af362000aea856200097f565b83018262000a84565b50505b505050565b600082821c905092915050565b600062000b1b6000198460080262000afb565b1980831691505092915050565b600062000b36838362000b08565b9150826002028217905092915050565b62000b5182620008cc565b67ffffffffffffffff81111562000b6d5762000b6c620008d7565b5b62000b79825462000935565b62000b8682828562000aab565b600060209050601f83116001811462000bbe576000841562000ba9578287015190505b62000bb5858262000b28565b86555062000c25565b601f19841662000bce866200096a565b60005b8281101562000bf85784890151825560018201915060208501945060208101905062000bd1565b8683101562000c18578489015162000c14601f89168262000b08565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c5f8262000c32565b9050919050565b62000c718162000c52565b811462000c7d57600080fd5b50565b60008151905062000c918162000c66565b92915050565b60006020828403121562000cb05762000caf62000c2d565b5b600062000cc08482850162000c80565b91505092915050565b62000cd48162000c52565b82525050565b600060408201905062000cf1600083018562000cc9565b62000d00602083018462000cc9565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d5060208362000d07565b915062000d5d8262000d18565b602082019050919050565b6000602082019050818103600083015262000d838162000d41565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000de8602a8362000d07565b915062000df58262000d8a565b604082019050919050565b6000602082019050818103600083015262000e1b8162000dd9565b9050919050565b60008115159050919050565b62000e398162000e22565b82525050565b600060208201905062000e56600083018462000e2e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e9882620009f2565b915062000ea583620009f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000edd5762000edc62000e5c565b5b828201905092915050565b62000ef381620009f2565b82525050565b600060208201905062000f10600083018462000ee8565b92915050565b608051613c2262000f5560003960008181610bb301528181611ca101528181611e0001528181611edc01528181611f5f01526120050152613c226000f3fe6080604052600436106102295760003560e01c80638da5cb5b11610123578063c49b9a80116100ab578063e6c75f711161006f578063e6c75f711461081a578063e8ba854f14610845578063f2fde38b1461086e578063f637434214610897578063fb201b1d146108c257610230565b8063c49b9a8014610735578063c8c8ebe41461075e578063dd62ed3e14610789578063e2f45605146107c6578063e559d86a146107f157610230565b806398118cb4116100f257806398118cb414610650578063a0d82dc51461067b578063a9059cbb146106a6578063c0246668146106e3578063c17b5b8c1461070c57610230565b80638da5cb5b146105a45780638ea5220f146105cf57806392136913146105fa57806395d89b411461062557610230565b80634a74bb02116101b1578063715018a611610175578063715018a6146104e7578063728d41c9146104fe578063750c11b61461052757806375f0a874146105505780638095d5641461057b57610230565b80634a74bb02146103ec5780634fbee193146104175780636827e764146104545780636b67c4df1461047f57806370a08231146104aa57610230565b80631cdd3be3116101f85780631cdd3be3146102f357806323b872dd14610330578063313ce5671461036d578063455a43961461039857806349bd5a5e146103c157610230565b806306fdde0314610235578063095ea7b3146102605780631694505e1461029d57806318160ddd146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108d9565b6040516102579190612aad565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190612b68565b61096b565b6040516102949190612bc3565b60405180910390f35b3480156102a957600080fd5b506102b2610989565b6040516102bf9190612c3d565b60405180910390f35b3480156102d457600080fd5b506102dd6109af565b6040516102ea9190612c67565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190612c82565b6109b9565b6040516103279190612bc3565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190612caf565b6109d9565b6040516103649190612bc3565b60405180910390f35b34801561037957600080fd5b50610382610ad1565b60405161038f9190612d1e565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d65565b610ada565b005b3480156103cd57600080fd5b506103d6610bb1565b6040516103e39190612db4565b60405180910390f35b3480156103f857600080fd5b50610401610bd5565b60405161040e9190612bc3565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612c82565b610be8565b60405161044b9190612bc3565b60405180910390f35b34801561046057600080fd5b50610469610c3e565b6040516104769190612c67565b60405180910390f35b34801561048b57600080fd5b50610494610c44565b6040516104a19190612c67565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190612c82565b610c4a565b6040516104de9190612c67565b60405180910390f35b3480156104f357600080fd5b506104fc610c92565b005b34801561050a57600080fd5b5061052560048036038101906105209190612dcf565b610d1a565b005b34801561053357600080fd5b5061054e60048036038101906105499190612dcf565b610dff565b005b34801561055c57600080fd5b50610565610e85565b6040516105729190612e1d565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612e38565b610eab565b005b3480156105b057600080fd5b506105b9610fa9565b6040516105c69190612db4565b60405180910390f35b3480156105db57600080fd5b506105e4610fd3565b6040516105f19190612e1d565b60405180910390f35b34801561060657600080fd5b5061060f610ff9565b60405161061c9190612c67565b60405180910390f35b34801561063157600080fd5b5061063a610fff565b6040516106479190612aad565b60405180910390f35b34801561065c57600080fd5b50610665611091565b6040516106729190612c67565b60405180910390f35b34801561068757600080fd5b50610690611097565b60405161069d9190612c67565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c89190612b68565b61109d565b6040516106da9190612bc3565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190612d65565b6110bb565b005b34801561071857600080fd5b50610733600480360381019061072e9190612e38565b611272565b005b34801561074157600080fd5b5061075c60048036038101906107579190612e8b565b611370565b005b34801561076a57600080fd5b50610773611440565b6040516107809190612c67565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190612eb8565b611446565b6040516107bd9190612c67565b60405180910390f35b3480156107d257600080fd5b506107db6114cd565b6040516107e89190612c67565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190612dcf565b6114d3565b005b34801561082657600080fd5b5061082f611559565b60405161083c9190612c67565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190612f24565b61155f565b005b34801561087a57600080fd5b5061089560048036038101906108909190612c82565b611661565b005b3480156108a357600080fd5b506108ac611758565b6040516108b99190612c67565b60405180910390f35b3480156108ce57600080fd5b506108d761175e565b005b6060600380546108e890612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461091490612f93565b80156109615780601f1061093657610100808354040283529160200191610961565b820191906000526020600020905b81548152906001019060200180831161094457829003601f168201915b5050505050905090565b600061097f6109786117f7565b84846117ff565b6001905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60106020528060005260406000206000915054906101000a900460ff1681565b60006109e68484846119c8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a316117f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890613036565b60405180910390fd5b610ac585610abd6117f7565b8584036117ff565b60019150509392505050565b60006012905090565b610ae26117f7565b73ffffffffffffffffffffffffffffffffffffffff16610b00610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906130a2565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600560159054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b60075481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c9a6117f7565b73ffffffffffffffffffffffffffffffffffffffff16610cb8610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d05906130a2565b60405180910390fd5b610d1860006120e9565b565b610d226117f7565b73ffffffffffffffffffffffffffffffffffffffff16610d40610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d906130a2565b60405180910390fd5b80600d81905550610db860c8610daa6109af565b6121af90919063ffffffff16565b600d541015610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df39061310e565b60405180910390fd5b50565b610e076117f7565b73ffffffffffffffffffffffffffffffffffffffff16610e25610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e72906130a2565b60405180910390fd5b80600e8190555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eb36117f7565b73ffffffffffffffffffffffffffffffffffffffff16610ed1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906130a2565b60405180910390fd5b600f610f4e82610f4085876121c590919063ffffffff16565b6121c590919063ffffffff16565b1115610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061317a565b60405180910390fd5b826006819055508160078190555080600881905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60606004805461100e90612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461103a90612f93565b80156110875780601f1061105c57610100808354040283529160200191611087565b820191906000526020600020905b81548152906001019060200180831161106a57829003601f168201915b5050505050905090565b60065481565b600b5481565b60006110b16110aa6117f7565b84846119c8565b6001905092915050565b6110c36117f7565b73ffffffffffffffffffffffffffffffffffffffff166110e1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e906130a2565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c09061320c565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112669190612bc3565b60405180910390a25050565b61127a6117f7565b73ffffffffffffffffffffffffffffffffffffffff16611298610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e5906130a2565b60405180910390fd5b600f6113158261130785876121c590919063ffffffff16565b6121c590919063ffffffff16565b1115611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d9061317a565b60405180910390fd5b8260098190555081600a8190555080600b81905550505050565b6113786117f7565b73ffffffffffffffffffffffffffffffffffffffff16611396610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906130a2565b60405180910390fd5b80600560156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516114359190612bc3565b60405180910390a150565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b6114db6117f7565b73ffffffffffffffffffffffffffffffffffffffff166114f9610fa9565b73ffffffffffffffffffffffffffffffffffffffff161461154f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611546906130a2565b60405180910390fd5b80600c8190555050565b600d5481565b6115676117f7565b73ffffffffffffffffffffffffffffffffffffffff16611585610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906130a2565b60405180910390fd5b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6116696117f7565b73ffffffffffffffffffffffffffffffffffffffff16611687610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d4906130a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117439061329e565b60405180910390fd5b611755816120e9565b50565b60095481565b6117666117f7565b73ffffffffffffffffffffffffffffffffffffffff16611784610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d1906130a2565b60405180910390fd5b6001600560166101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613330565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d4906133c2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119bb9190612c67565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90613454565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d906134e6565b60405180910390fd5b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b495750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600560169054906101000a900460ff1680611b635750805b611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990613552565b60405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c465750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c906135be565b60405180910390fd5b60008203611c9f57611c99848460006121db565b506120e4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611d445750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d9a5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dfe576000611daa84610c4a565b9050600d548382611dbb919061360d565b1115611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df3906136d5565b60405180910390fd5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e57575080155b15611ea257600c54821115611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613767565b60405180910390fd5b5b6000611ead30610c4a565b90506000600e548210159050808015611ed35750600560149054906101000a900460ff16155b8015611f2a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611f425750600560159054906101000a900460ff165b15611f5657600e549150611f558261245a565b5b826120d55760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603612003576120006064611ff2611fe3600854611fd56007546006546121c590919063ffffffff16565b6121c590919063ffffffff16565b886126ad90919063ffffffff16565b6121af90919063ffffffff16565b90505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036120a9576120a66064612098612089600b5461207b600a546009546121c590919063ffffffff16565b6121c590919063ffffffff16565b886126ad90919063ffffffff16565b6121af90919063ffffffff16565b90505b6120bc81866126c390919063ffffffff16565b945060008111156120d3576120d28730836121db565b5b505b6120e08686866121db565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836121bd91906137b6565b905092915050565b600081836121d3919061360d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224190613454565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906134e6565b60405180910390fd5b6122c48383836126d9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190613859565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123dd919061360d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124419190612c67565b60405180910390a36124548484846126de565b50505050565b6001600560146101000a81548160ff02191690831515021790555060006124c86124a5600b54612497600954600a546121c590919063ffffffff16565b6121c590919063ffffffff16565b6124ba600954856126ad90919063ffffffff16565b6121af90919063ffffffff16565b905060006124e06002836121af90919063ffffffff16565b905060006124f782846126c390919063ffffffff16565b90506000479050612507836126e3565b600061251c82476126c390919063ffffffff16565b9050612528838261295c565b61254361253e86886126c390919063ffffffff16565b6126e3565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6125bc612599600b54600a546121c590919063ffffffff16565b6125ae600b54476126ad90919063ffffffff16565b6121af90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156125e7573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612650573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051612682929190613879565b60405180910390a150505050506000600560146101000a81548160ff02191690831515021790555050565b600081836126bb91906138a2565b905092915050565b600081836126d191906138fc565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612700576126ff613930565b5b60405190808252806020026020018201604052801561272e5781602001602082028036833780820191505090505b50905030816000815181106127465761274561395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281191906139a3565b816001815181106128255761282461395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161288c30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611446565b10156128c2576128c130600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196117ff565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612926959493929190613ac9565b600060405180830381600087803b15801561294057600080fd5b505af1158015612954573d6000803e3d6000fd5b505050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129a8610fa9565b426040518863ffffffff1660e01b81526004016129ca96959493929190613b23565b60606040518083038185885af11580156129e8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a0d9190613b99565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a4e578082015181840152602081019050612a33565b83811115612a5d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a7f82612a14565b612a898185612a1f565b9350612a99818560208601612a30565b612aa281612a63565b840191505092915050565b60006020820190508181036000830152612ac78184612a74565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612aff82612ad4565b9050919050565b612b0f81612af4565b8114612b1a57600080fd5b50565b600081359050612b2c81612b06565b92915050565b6000819050919050565b612b4581612b32565b8114612b5057600080fd5b50565b600081359050612b6281612b3c565b92915050565b60008060408385031215612b7f57612b7e612acf565b5b6000612b8d85828601612b1d565b9250506020612b9e85828601612b53565b9150509250929050565b60008115159050919050565b612bbd81612ba8565b82525050565b6000602082019050612bd86000830184612bb4565b92915050565b6000819050919050565b6000612c03612bfe612bf984612ad4565b612bde565b612ad4565b9050919050565b6000612c1582612be8565b9050919050565b6000612c2782612c0a565b9050919050565b612c3781612c1c565b82525050565b6000602082019050612c526000830184612c2e565b92915050565b612c6181612b32565b82525050565b6000602082019050612c7c6000830184612c58565b92915050565b600060208284031215612c9857612c97612acf565b5b6000612ca684828501612b1d565b91505092915050565b600080600060608486031215612cc857612cc7612acf565b5b6000612cd686828701612b1d565b9350506020612ce786828701612b1d565b9250506040612cf886828701612b53565b9150509250925092565b600060ff82169050919050565b612d1881612d02565b82525050565b6000602082019050612d336000830184612d0f565b92915050565b612d4281612ba8565b8114612d4d57600080fd5b50565b600081359050612d5f81612d39565b92915050565b60008060408385031215612d7c57612d7b612acf565b5b6000612d8a85828601612b1d565b9250506020612d9b85828601612d50565b9150509250929050565b612dae81612af4565b82525050565b6000602082019050612dc96000830184612da5565b92915050565b600060208284031215612de557612de4612acf565b5b6000612df384828501612b53565b91505092915050565b6000612e0782612ad4565b9050919050565b612e1781612dfc565b82525050565b6000602082019050612e326000830184612e0e565b92915050565b600080600060608486031215612e5157612e50612acf565b5b6000612e5f86828701612b53565b9350506020612e7086828701612b53565b9250506040612e8186828701612b53565b9150509250925092565b600060208284031215612ea157612ea0612acf565b5b6000612eaf84828501612d50565b91505092915050565b60008060408385031215612ecf57612ece612acf565b5b6000612edd85828601612b1d565b9250506020612eee85828601612b1d565b9150509250929050565b612f0181612dfc565b8114612f0c57600080fd5b50565b600081359050612f1e81612ef8565b92915050565b60008060408385031215612f3b57612f3a612acf565b5b6000612f4985828601612f0f565b9250506020612f5a85828601612f0f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fab57607f821691505b602082108103612fbe57612fbd612f64565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613020602883612a1f565b915061302b82612fc4565b604082019050919050565b6000602082019050818103600083015261304f81613013565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061308c602083612a1f565b915061309782613056565b602082019050919050565b600060208201905081810360008301526130bb8161307f565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006130f8600d83612a1f565b9150613103826130c2565b602082019050919050565b60006020820190508181036000830152613127816130eb565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613164600c83612a1f565b915061316f8261312e565b602082019050919050565b6000602082019050818103600083015261319381613157565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006131f6602a83612a1f565b91506132018261319a565b604082019050919050565b60006020820190508181036000830152613225816131e9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613288602683612a1f565b91506132938261322c565b604082019050919050565b600060208201905081810360008301526132b78161327b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061331a602483612a1f565b9150613325826132be565b604082019050919050565b600060208201905081810360008301526133498161330d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133ac602283612a1f565b91506133b782613350565b604082019050919050565b600060208201905081810360008301526133db8161339f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061343e602583612a1f565b9150613449826133e2565b604082019050919050565b6000602082019050818103600083015261346d81613431565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006134d0602383612a1f565b91506134db82613474565b604082019050919050565b600060208201905081810360008301526134ff816134c3565b9050919050565b7f74726164696e67206973206e6f7420796574204f70656e000000000000000000600082015250565b600061353c601783612a1f565b915061354782613506565b602082019050919050565b6000602082019050818103600083015261356b8161352f565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006135a8601383612a1f565b91506135b382613572565b602082019050919050565b600060208201905081810360008301526135d78161359b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061361882612b32565b915061362383612b32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613658576136576135de565b5b828201905092915050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006136bf602483612a1f565b91506136ca82613663565b604082019050919050565b600060208201905081810360008301526136ee816136b2565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613751602883612a1f565b915061375c826136f5565b604082019050919050565b6000602082019050818103600083015261378081613744565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c182612b32565b91506137cc83612b32565b9250826137dc576137db613787565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613843602683612a1f565b915061384e826137e7565b604082019050919050565b6000602082019050818103600083015261387281613836565b9050919050565b600060408201905061388e6000830185612c58565b61389b6020830184612c58565b9392505050565b60006138ad82612b32565b91506138b883612b32565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138f1576138f06135de565b5b828202905092915050565b600061390782612b32565b915061391283612b32565b925082821015613925576139246135de565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061399d81612b06565b92915050565b6000602082840312156139b9576139b8612acf565b5b60006139c78482850161398e565b91505092915050565b6000819050919050565b60006139f56139f06139eb846139d0565b612bde565b612b32565b9050919050565b613a05816139da565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a4081612af4565b82525050565b6000613a528383613a37565b60208301905092915050565b6000602082019050919050565b6000613a7682613a0b565b613a808185613a16565b9350613a8b83613a27565b8060005b83811015613abc578151613aa38882613a46565b9750613aae83613a5e565b925050600181019050613a8f565b5085935050505092915050565b600060a082019050613ade6000830188612c58565b613aeb60208301876139fc565b8181036040830152613afd8186613a6b565b9050613b0c6060830185612da5565b613b196080830184612c58565b9695505050505050565b600060c082019050613b386000830189612da5565b613b456020830188612c58565b613b5260408301876139fc565b613b5f60608301866139fc565b613b6c6080830185612da5565b613b7960a0830184612c58565b979650505050505050565b600081519050613b9381612b3c565b92915050565b600080600060608486031215613bb257613bb1612acf565b5b6000613bc086828701613b84565b9350506020613bd186828701613b84565b9250506040613be286828701613b84565b915050925092509256fea264697066735822122059f85a284d607289d6b5c017e92342c4a952ccf9881607e3ac94e31fc513e5b264736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102295760003560e01c80638da5cb5b11610123578063c49b9a80116100ab578063e6c75f711161006f578063e6c75f711461081a578063e8ba854f14610845578063f2fde38b1461086e578063f637434214610897578063fb201b1d146108c257610230565b8063c49b9a8014610735578063c8c8ebe41461075e578063dd62ed3e14610789578063e2f45605146107c6578063e559d86a146107f157610230565b806398118cb4116100f257806398118cb414610650578063a0d82dc51461067b578063a9059cbb146106a6578063c0246668146106e3578063c17b5b8c1461070c57610230565b80638da5cb5b146105a45780638ea5220f146105cf57806392136913146105fa57806395d89b411461062557610230565b80634a74bb02116101b1578063715018a611610175578063715018a6146104e7578063728d41c9146104fe578063750c11b61461052757806375f0a874146105505780638095d5641461057b57610230565b80634a74bb02146103ec5780634fbee193146104175780636827e764146104545780636b67c4df1461047f57806370a08231146104aa57610230565b80631cdd3be3116101f85780631cdd3be3146102f357806323b872dd14610330578063313ce5671461036d578063455a43961461039857806349bd5a5e146103c157610230565b806306fdde0314610235578063095ea7b3146102605780631694505e1461029d57806318160ddd146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108d9565b6040516102579190612aad565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190612b68565b61096b565b6040516102949190612bc3565b60405180910390f35b3480156102a957600080fd5b506102b2610989565b6040516102bf9190612c3d565b60405180910390f35b3480156102d457600080fd5b506102dd6109af565b6040516102ea9190612c67565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190612c82565b6109b9565b6040516103279190612bc3565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190612caf565b6109d9565b6040516103649190612bc3565b60405180910390f35b34801561037957600080fd5b50610382610ad1565b60405161038f9190612d1e565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d65565b610ada565b005b3480156103cd57600080fd5b506103d6610bb1565b6040516103e39190612db4565b60405180910390f35b3480156103f857600080fd5b50610401610bd5565b60405161040e9190612bc3565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612c82565b610be8565b60405161044b9190612bc3565b60405180910390f35b34801561046057600080fd5b50610469610c3e565b6040516104769190612c67565b60405180910390f35b34801561048b57600080fd5b50610494610c44565b6040516104a19190612c67565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190612c82565b610c4a565b6040516104de9190612c67565b60405180910390f35b3480156104f357600080fd5b506104fc610c92565b005b34801561050a57600080fd5b5061052560048036038101906105209190612dcf565b610d1a565b005b34801561053357600080fd5b5061054e60048036038101906105499190612dcf565b610dff565b005b34801561055c57600080fd5b50610565610e85565b6040516105729190612e1d565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612e38565b610eab565b005b3480156105b057600080fd5b506105b9610fa9565b6040516105c69190612db4565b60405180910390f35b3480156105db57600080fd5b506105e4610fd3565b6040516105f19190612e1d565b60405180910390f35b34801561060657600080fd5b5061060f610ff9565b60405161061c9190612c67565b60405180910390f35b34801561063157600080fd5b5061063a610fff565b6040516106479190612aad565b60405180910390f35b34801561065c57600080fd5b50610665611091565b6040516106729190612c67565b60405180910390f35b34801561068757600080fd5b50610690611097565b60405161069d9190612c67565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c89190612b68565b61109d565b6040516106da9190612bc3565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190612d65565b6110bb565b005b34801561071857600080fd5b50610733600480360381019061072e9190612e38565b611272565b005b34801561074157600080fd5b5061075c60048036038101906107579190612e8b565b611370565b005b34801561076a57600080fd5b50610773611440565b6040516107809190612c67565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190612eb8565b611446565b6040516107bd9190612c67565b60405180910390f35b3480156107d257600080fd5b506107db6114cd565b6040516107e89190612c67565b60405180910390f35b3480156107fd57600080fd5b5061081860048036038101906108139190612dcf565b6114d3565b005b34801561082657600080fd5b5061082f611559565b60405161083c9190612c67565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190612f24565b61155f565b005b34801561087a57600080fd5b5061089560048036038101906108909190612c82565b611661565b005b3480156108a357600080fd5b506108ac611758565b6040516108b99190612c67565b60405180910390f35b3480156108ce57600080fd5b506108d761175e565b005b6060600380546108e890612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461091490612f93565b80156109615780601f1061093657610100808354040283529160200191610961565b820191906000526020600020905b81548152906001019060200180831161094457829003601f168201915b5050505050905090565b600061097f6109786117f7565b84846117ff565b6001905092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60106020528060005260406000206000915054906101000a900460ff1681565b60006109e68484846119c8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a316117f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890613036565b60405180910390fd5b610ac585610abd6117f7565b8584036117ff565b60019150509392505050565b60006012905090565b610ae26117f7565b73ffffffffffffffffffffffffffffffffffffffff16610b00610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d906130a2565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000003e7954dbcaa65dced8f4a97a0ffa9e989921b1da81565b600560159054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b60075481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c9a6117f7565b73ffffffffffffffffffffffffffffffffffffffff16610cb8610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d05906130a2565b60405180910390fd5b610d1860006120e9565b565b610d226117f7565b73ffffffffffffffffffffffffffffffffffffffff16610d40610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d906130a2565b60405180910390fd5b80600d81905550610db860c8610daa6109af565b6121af90919063ffffffff16565b600d541015610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df39061310e565b60405180910390fd5b50565b610e076117f7565b73ffffffffffffffffffffffffffffffffffffffff16610e25610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e72906130a2565b60405180910390fd5b80600e8190555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eb36117f7565b73ffffffffffffffffffffffffffffffffffffffff16610ed1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e906130a2565b60405180910390fd5b600f610f4e82610f4085876121c590919063ffffffff16565b6121c590919063ffffffff16565b1115610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f869061317a565b60405180910390fd5b826006819055508160078190555080600881905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60606004805461100e90612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461103a90612f93565b80156110875780601f1061105c57610100808354040283529160200191611087565b820191906000526020600020905b81548152906001019060200180831161106a57829003601f168201915b5050505050905090565b60065481565b600b5481565b60006110b16110aa6117f7565b84846119c8565b6001905092915050565b6110c36117f7565b73ffffffffffffffffffffffffffffffffffffffff166110e1610fa9565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e906130a2565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c09061320c565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516112669190612bc3565b60405180910390a25050565b61127a6117f7565b73ffffffffffffffffffffffffffffffffffffffff16611298610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e5906130a2565b60405180910390fd5b600f6113158261130785876121c590919063ffffffff16565b6121c590919063ffffffff16565b1115611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d9061317a565b60405180910390fd5b8260098190555081600a8190555080600b81905550505050565b6113786117f7565b73ffffffffffffffffffffffffffffffffffffffff16611396610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906130a2565b60405180910390fd5b80600560156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516114359190612bc3565b60405180910390a150565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b6114db6117f7565b73ffffffffffffffffffffffffffffffffffffffff166114f9610fa9565b73ffffffffffffffffffffffffffffffffffffffff161461154f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611546906130a2565b60405180910390fd5b80600c8190555050565b600d5481565b6115676117f7565b73ffffffffffffffffffffffffffffffffffffffff16611585610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906130a2565b60405180910390fd5b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6116696117f7565b73ffffffffffffffffffffffffffffffffffffffff16611687610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d4906130a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117439061329e565b60405180910390fd5b611755816120e9565b50565b60095481565b6117666117f7565b73ffffffffffffffffffffffffffffffffffffffff16611784610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d1906130a2565b60405180910390fd5b6001600560166101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613330565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d4906133c2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119bb9190612c67565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90613454565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d906134e6565b60405180910390fd5b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611b495750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600560169054906101000a900460ff1680611b635750805b611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9990613552565b60405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c465750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c906135be565b60405180910390fd5b60008203611c9f57611c99848460006121db565b506120e4565b7f0000000000000000000000003e7954dbcaa65dced8f4a97a0ffa9e989921b1da73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611d445750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d9a5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611dfe576000611daa84610c4a565b9050600d548382611dbb919061360d565b1115611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df3906136d5565b60405180910390fd5b505b7f0000000000000000000000003e7954dbcaa65dced8f4a97a0ffa9e989921b1da73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e57575080155b15611ea257600c54821115611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613767565b60405180910390fd5b5b6000611ead30610c4a565b90506000600e548210159050808015611ed35750600560149054906101000a900460ff16155b8015611f2a57507f0000000000000000000000003e7954dbcaa65dced8f4a97a0ffa9e989921b1da73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611f425750600560159054906101000a900460ff165b15611f5657600e549150611f558261245a565b5b826120d55760007f0000000000000000000000003e7954dbcaa65dced8f4a97a0ffa9e989921b1da73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603612003576120006064611ff2611fe3600854611fd56007546006546121c590919063ffffffff16565b6121c590919063ffffffff16565b886126ad90919063ffffffff16565b6121af90919063ffffffff16565b90505b7f0000000000000000000000003e7954dbcaa65dced8f4a97a0ffa9e989921b1da73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036120a9576120a66064612098612089600b5461207b600a546009546121c590919063ffffffff16565b6121c590919063ffffffff16565b886126ad90919063ffffffff16565b6121af90919063ffffffff16565b90505b6120bc81866126c390919063ffffffff16565b945060008111156120d3576120d28730836121db565b5b505b6120e08686866121db565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836121bd91906137b6565b905092915050565b600081836121d3919061360d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224190613454565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906134e6565b60405180910390fd5b6122c48383836126d9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190613859565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123dd919061360d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124419190612c67565b60405180910390a36124548484846126de565b50505050565b6001600560146101000a81548160ff02191690831515021790555060006124c86124a5600b54612497600954600a546121c590919063ffffffff16565b6121c590919063ffffffff16565b6124ba600954856126ad90919063ffffffff16565b6121af90919063ffffffff16565b905060006124e06002836121af90919063ffffffff16565b905060006124f782846126c390919063ffffffff16565b90506000479050612507836126e3565b600061251c82476126c390919063ffffffff16565b9050612528838261295c565b61254361253e86886126c390919063ffffffff16565b6126e3565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6125bc612599600b54600a546121c590919063ffffffff16565b6125ae600b54476126ad90919063ffffffff16565b6121af90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156125e7573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612650573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051612682929190613879565b60405180910390a150505050506000600560146101000a81548160ff02191690831515021790555050565b600081836126bb91906138a2565b905092915050565b600081836126d191906138fc565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612700576126ff613930565b5b60405190808252806020026020018201604052801561272e5781602001602082028036833780820191505090505b50905030816000815181106127465761274561395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281191906139a3565b816001815181106128255761282461395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161288c30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611446565b10156128c2576128c130600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196117ff565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612926959493929190613ac9565b600060405180830381600087803b15801561294057600080fd5b505af1158015612954573d6000803e3d6000fd5b505050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806129a8610fa9565b426040518863ffffffff1660e01b81526004016129ca96959493929190613b23565b60606040518083038185885af11580156129e8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a0d9190613b99565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a4e578082015181840152602081019050612a33565b83811115612a5d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a7f82612a14565b612a898185612a1f565b9350612a99818560208601612a30565b612aa281612a63565b840191505092915050565b60006020820190508181036000830152612ac78184612a74565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612aff82612ad4565b9050919050565b612b0f81612af4565b8114612b1a57600080fd5b50565b600081359050612b2c81612b06565b92915050565b6000819050919050565b612b4581612b32565b8114612b5057600080fd5b50565b600081359050612b6281612b3c565b92915050565b60008060408385031215612b7f57612b7e612acf565b5b6000612b8d85828601612b1d565b9250506020612b9e85828601612b53565b9150509250929050565b60008115159050919050565b612bbd81612ba8565b82525050565b6000602082019050612bd86000830184612bb4565b92915050565b6000819050919050565b6000612c03612bfe612bf984612ad4565b612bde565b612ad4565b9050919050565b6000612c1582612be8565b9050919050565b6000612c2782612c0a565b9050919050565b612c3781612c1c565b82525050565b6000602082019050612c526000830184612c2e565b92915050565b612c6181612b32565b82525050565b6000602082019050612c7c6000830184612c58565b92915050565b600060208284031215612c9857612c97612acf565b5b6000612ca684828501612b1d565b91505092915050565b600080600060608486031215612cc857612cc7612acf565b5b6000612cd686828701612b1d565b9350506020612ce786828701612b1d565b9250506040612cf886828701612b53565b9150509250925092565b600060ff82169050919050565b612d1881612d02565b82525050565b6000602082019050612d336000830184612d0f565b92915050565b612d4281612ba8565b8114612d4d57600080fd5b50565b600081359050612d5f81612d39565b92915050565b60008060408385031215612d7c57612d7b612acf565b5b6000612d8a85828601612b1d565b9250506020612d9b85828601612d50565b9150509250929050565b612dae81612af4565b82525050565b6000602082019050612dc96000830184612da5565b92915050565b600060208284031215612de557612de4612acf565b5b6000612df384828501612b53565b91505092915050565b6000612e0782612ad4565b9050919050565b612e1781612dfc565b82525050565b6000602082019050612e326000830184612e0e565b92915050565b600080600060608486031215612e5157612e50612acf565b5b6000612e5f86828701612b53565b9350506020612e7086828701612b53565b9250506040612e8186828701612b53565b9150509250925092565b600060208284031215612ea157612ea0612acf565b5b6000612eaf84828501612d50565b91505092915050565b60008060408385031215612ecf57612ece612acf565b5b6000612edd85828601612b1d565b9250506020612eee85828601612b1d565b9150509250929050565b612f0181612dfc565b8114612f0c57600080fd5b50565b600081359050612f1e81612ef8565b92915050565b60008060408385031215612f3b57612f3a612acf565b5b6000612f4985828601612f0f565b9250506020612f5a85828601612f0f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fab57607f821691505b602082108103612fbe57612fbd612f64565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613020602883612a1f565b915061302b82612fc4565b604082019050919050565b6000602082019050818103600083015261304f81613013565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061308c602083612a1f565b915061309782613056565b602082019050919050565b600060208201905081810360008301526130bb8161307f565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006130f8600d83612a1f565b9150613103826130c2565b602082019050919050565b60006020820190508181036000830152613127816130eb565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613164600c83612a1f565b915061316f8261312e565b602082019050919050565b6000602082019050818103600083015261319381613157565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006131f6602a83612a1f565b91506132018261319a565b604082019050919050565b60006020820190508181036000830152613225816131e9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613288602683612a1f565b91506132938261322c565b604082019050919050565b600060208201905081810360008301526132b78161327b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061331a602483612a1f565b9150613325826132be565b604082019050919050565b600060208201905081810360008301526133498161330d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133ac602283612a1f565b91506133b782613350565b604082019050919050565b600060208201905081810360008301526133db8161339f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061343e602583612a1f565b9150613449826133e2565b604082019050919050565b6000602082019050818103600083015261346d81613431565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006134d0602383612a1f565b91506134db82613474565b604082019050919050565b600060208201905081810360008301526134ff816134c3565b9050919050565b7f74726164696e67206973206e6f7420796574204f70656e000000000000000000600082015250565b600061353c601783612a1f565b915061354782613506565b602082019050919050565b6000602082019050818103600083015261356b8161352f565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006135a8601383612a1f565b91506135b382613572565b602082019050919050565b600060208201905081810360008301526135d78161359b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061361882612b32565b915061362383612b32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613658576136576135de565b5b828201905092915050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006136bf602483612a1f565b91506136ca82613663565b604082019050919050565b600060208201905081810360008301526136ee816136b2565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613751602883612a1f565b915061375c826136f5565b604082019050919050565b6000602082019050818103600083015261378081613744565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c182612b32565b91506137cc83612b32565b9250826137dc576137db613787565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613843602683612a1f565b915061384e826137e7565b604082019050919050565b6000602082019050818103600083015261387281613836565b9050919050565b600060408201905061388e6000830185612c58565b61389b6020830184612c58565b9392505050565b60006138ad82612b32565b91506138b883612b32565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138f1576138f06135de565b5b828202905092915050565b600061390782612b32565b915061391283612b32565b925082821015613925576139246135de565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061399d81612b06565b92915050565b6000602082840312156139b9576139b8612acf565b5b60006139c78482850161398e565b91505092915050565b6000819050919050565b60006139f56139f06139eb846139d0565b612bde565b612b32565b9050919050565b613a05816139da565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a4081612af4565b82525050565b6000613a528383613a37565b60208301905092915050565b6000602082019050919050565b6000613a7682613a0b565b613a808185613a16565b9350613a8b83613a27565b8060005b83811015613abc578151613aa38882613a46565b9750613aae83613a5e565b925050600181019050613a8f565b5085935050505092915050565b600060a082019050613ade6000830188612c58565b613aeb60208301876139fc565b8181036040830152613afd8186613a6b565b9050613b0c6060830185612da5565b613b196080830184612c58565b9695505050505050565b600060c082019050613b386000830189612da5565b613b456020830188612c58565b613b5260408301876139fc565b613b5f60608301866139fc565b613b6c6080830185612da5565b613b7960a0830184612c58565b979650505050505050565b600081519050613b9381612b3c565b92915050565b600080600060608486031215613bb257613bb1612acf565b5b6000613bc086828701613b84565b9350506020613bd186828701613b84565b9250506040613be286828701613b84565b915050925092509256fea264697066735822122059f85a284d607289d6b5c017e92342c4a952ccf9881607e3ac94e31fc513e5b264736f6c634300080f0033
Deployed Bytecode Sourcemap
29806:9111:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3663:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5298:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30425:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4251:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30520:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5692:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4093:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38742:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30473:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29926:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37075:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30085:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30047:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4422:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2580:94;;;;;;;;;;;;;:::i;:::-;;37288:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38436:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30575:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37604:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2357:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30675:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30159:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3882:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30009:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30201:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4762:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36775:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37916:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38563:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30237:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5000:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30363:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37481:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30303:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38240:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2682:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30117:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37208:72;;;;;;;;;;;;;:::i;:::-;;3663:100;3717:13;3750:5;3743:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3663:100;:::o;5298:169::-;5381:4;5398:39;5407:12;:10;:12::i;:::-;5421:7;5430:6;5398:8;:39::i;:::-;5455:4;5448:11;;5298:169;;;;:::o;30425:41::-;;;;;;;;;;;;;:::o;4251:108::-;4312:7;4339:12;;4332:19;;4251:108;:::o;30520:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;5692:492::-;5832:4;5849:36;5859:6;5867:9;5878:6;5849:9;:36::i;:::-;5898:24;5925:11;:19;5937:6;5925:19;;;;;;;;;;;;;;;:33;5945:12;:10;:12::i;:::-;5925:33;;;;;;;;;;;;;;;;5898:60;;5997:6;5977:16;:26;;5969:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6084:57;6093:6;6101:12;:10;:12::i;:::-;6134:6;6115:16;:25;6084:8;:57::i;:::-;6172:4;6165:11;;;5692:492;;;;;:::o;4093:93::-;4151:5;4176:2;4169:9;;4093:93;:::o;38742:123::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38852:5:::1;38826:14;:23;38841:7;38826:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;38742:123:::0;;:::o;30473:38::-;;;:::o;29926:40::-;;;;;;;;;;;;;:::o;37075:125::-;37140:4;37164:19;:28;37184:7;37164:28;;;;;;;;;;;;;;;;;;;;;;;;;37157:35;;37075:125;;;:::o;30085:25::-;;;;:::o;30047:31::-;;;;:::o;4422:127::-;4496:7;4523:9;:18;4533:7;4523:18;;;;;;;;;;;;;;;;4516:25;;4422:127;;;:::o;2580:94::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2645:21:::1;2663:1;2645:9;:21::i;:::-;2580:94::o:0;37288:185::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37379:9:::1;37362:14;:26;;;;37425:22;37443:3;37425:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;37407:14;;:40;;37399:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37288:185:::0;:::o;38436:119::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38537:10:::1;38516:18;:31;;;;38436:119:::0;:::o;30575:92::-;;;;;;;;;;;;;:::o;37604:303::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37775:2:::1;37726:45;37763:7;37726:32;37744:13;37726;:17;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;:51;;37718:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37820:13;37805:12;:28;;;;37859:13;37844:12;:28;;;;37892:7;37883:6;:16;;;;37604:303:::0;;;:::o;2357:87::-;2403:7;2430:6;;;;;;;;;;;2423:13;;2357:87;:::o;30675:86::-;;;;;;;;;;;;;:::o;30159:35::-;;;;:::o;3882:104::-;3938:13;3971:7;3964:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3882:104;:::o;30009:31::-;;;;:::o;30201:29::-;;;;:::o;4762:175::-;4848:4;4865:42;4875:12;:10;:12::i;:::-;4889:9;4900:6;4865:9;:42::i;:::-;4925:4;4918:11;;4762:175;;;;:::o;36775:288::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36900:8:::1;36868:40;;:19;:28;36888:7;36868:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;36860:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36997:8;36966:19;:28;36986:7;36966:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37037:7;37021:34;;;37046:8;37021:34;;;;;;:::i;:::-;;;;;;;;36775:288:::0;;:::o;37916:316::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38088:2:::1;38039:45;38076:7;38039:32;38057:13;38039;:17;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;:51;;38031:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38137:13;38118:16;:32;;;;38180:13;38161:16;:32;;;;38217:7;38204:10;:20;;;;37916:316:::0;;;:::o;38563:171::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38664:8:::1;38640:21;;:32;;;;;;;;;;;;;;;;;;38688:38;38717:8;38688:38;;;;;;:::i;:::-;;;;;;;;38563:171:::0;:::o;30237:59::-;;;;:::o;5000:151::-;5089:7;5116:11;:18;5128:5;5116:18;;;;;;;;;;;;;;;:27;5135:7;5116:27;;;;;;;;;;;;;;;;5109:34;;5000:151;;;;:::o;30363:53::-;;;;:::o;37481:115::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37571:7:::1;37548:20;:30;;;;37481:115:::0;:::o;30303:53::-;;;;:::o;38240:188::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38371:16:::1;38353:15;;:34;;;;;;;;;;;;;;;;;;38410:10;38398:9;;:22;;;;;;;;;;;;;;;;;;38240:188:::0;;:::o;2682:192::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2791:1:::1;2771:22;;:8;:22;;::::0;2763:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2847:19;2857:8;2847:9;:19::i;:::-;2682:192:::0;:::o;30117:35::-;;;;:::o;37208:72::-;2503:12;:10;:12::i;:::-;2492:23;;:7;:5;:7::i;:::-;:23;;;2484:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37268:4:::1;37259:6;;:13;;;;;;;;;;;;;;;;;;37208:72::o:0;1721:98::-;1774:7;1801:10;1794:17;;1721:98;:::o;7632:380::-;7785:1;7768:19;;:5;:19;;;7760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7866:1;7847:21;;:7;:21;;;7839:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7950:6;7920:11;:18;7932:5;7920:18;;;;;;;;;;;;;;;:27;7939:7;7920:27;;;;;;;;;;;;;;;:36;;;;7988:7;7972:32;;7981:5;7972:32;;;7997:6;7972:32;;;;;;:::i;:::-;;;;;;;;7632:380;;;:::o;32218:2120::-;32366:1;32350:18;;:4;:18;;;32342:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32443:1;32429:16;;:2;:16;;;32421:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32496:20;32519:19;:25;32539:4;32519:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32548:19;:23;32568:2;32548:23;;;;;;;;;;;;;;;;;;;;;;;;;32519:52;32496:75;;32590:6;;;;;;;;;;;:25;;;;32600:15;32590:25;32582:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32663:14;:20;32678:4;32663:20;;;;;;;;;;;;;;;;;;;;;;;;;32662:21;:44;;;;;32688:14;:18;32703:2;32688:18;;;;;;;;;;;;;;;;;;;;;;;;;32687:19;32662:44;32654:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32756:1;32746:6;:11;32743:92;;32774:28;32790:4;32796:2;32800:1;32774:15;:28::i;:::-;32817:7;;;32743:92;32857:13;32851:19;;:4;:19;;;:49;;;;;32875:19;:25;32895:4;32875:25;;;;;;;;;;;;;;;;;;;;;;;;;32874:26;32851:49;:77;;;;;32905:19;:23;32925:2;32905:23;;;;;;;;;;;;;;;;;;;;;;;;;32904:24;32851:77;32848:271;;;32944:32;32979:13;32989:2;32979:9;:13::i;:::-;32944:48;;33052:14;;33042:6;33015:24;:33;;;;:::i;:::-;:51;;33007:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32929:190;32848:271;33146:13;33142:17;;:2;:17;;;:37;;;;;33164:15;33163:16;33142:37;33139:152;;;33214:20;;33204:6;:30;;33196:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;33139:152;33308:28;33339:24;33357:4;33339:9;:24::i;:::-;33308:55;;33384:24;33435:18;;33411:20;:42;;33384:69;;33476:19;:40;;;;;33500:16;;;;;;;;;;;33499:17;33476:40;:61;;;;;33524:13;33520:17;;:2;:17;;;33476:61;:86;;;;;33541:21;;;;;;;;;;;33476:86;33473:212;;;33602:18;;33579:41;;33635:36;33650:20;33635:14;:36::i;:::-;33473:212;33787:15;33783:500;;33819:12;33855:13;33849:19;;:4;:19;;;33846:128;;33895:63;33954:3;33895:54;33906:42;33941:6;;33906:30;33923:12;;33906;;:16;;:30;;;;:::i;:::-;:34;;:42;;;;:::i;:::-;33895:6;:10;;:54;;;;:::i;:::-;:58;;:63;;;;:::i;:::-;33887:71;;33846:128;33997:13;33993:17;;:2;:17;;;33990:138;;34037:75;34108:3;34037:66;34048:54;34091:10;;34048:38;34069:16;;34048;;:20;;:38;;;;:::i;:::-;:42;;:54;;;;:::i;:::-;34037:6;:10;;:66;;;;:::i;:::-;:70;;:75;;;;:::i;:::-;34029:83;;33990:138;34150:16;34161:4;34150:6;:10;;:16;;;;:::i;:::-;34141:25;;34191:1;34184:4;:8;34181:91;;;34213:42;34229:4;34243;34250;34213:15;:42::i;:::-;34181:91;33804:479;33783:500;34295:33;34311:4;34317:2;34321:6;34295:15;:33::i;:::-;32331:2007;;;32218:2120;;;;:::o;2882:173::-;2938:16;2957:6;;;;;;;;;;;2938:25;;2983:8;2974:6;;:17;;;;;;;;;;;;;;;;;;3038:8;3007:40;;3028:8;3007:40;;;;;;;;;;;;2927:128;2882:173;:::o;19457:98::-;19515:7;19546:1;19542;:5;;;;:::i;:::-;19535:12;;19457:98;;;;:::o;18320:::-;18378:7;18409:1;18405;:5;;;;:::i;:::-;18398:12;;18320:98;;;;:::o;6282:733::-;6440:1;6422:20;;:6;:20;;;6414:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6524:1;6503:23;;:9;:23;;;6495:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6579:47;6600:6;6608:9;6619:6;6579:20;:47::i;:::-;6639:21;6663:9;:17;6673:6;6663:17;;;;;;;;;;;;;;;;6639:41;;6716:6;6699:13;:23;;6691:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6837:6;6821:13;:22;6801:9;:17;6811:6;6801:17;;;;;;;;;;;;;;;:42;;;;6889:6;6865:9;:20;6875:9;6865:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6930:9;6913:35;;6922:6;6913:35;;;6941:6;6913:35;;;;;;:::i;:::-;;;;;;;;6961:46;6981:6;6989:9;7000:6;6961:19;:46::i;:::-;6403:612;6282:733;;;:::o;34347:1330::-;30936:4;30917:16;;:23;;;;;;;;;;;;;;;;;;34432:26:::1;34461:102;34508:54;34551:10;;34508:38;34529:16;;34508;;:20;;:38;;;;:::i;:::-;:42;;:54;;;;:::i;:::-;34461:42;34486:16;;34461:20;:24;;:42;;;;:::i;:::-;:46;;:102;;;;:::i;:::-;34432:131;;34632:12;34647:25;34670:1;34647:18;:22;;:25;;;;:::i;:::-;34632:40;;34683:17;34703:28;34726:4;34703:18;:22;;:28;;;;:::i;:::-;34683:48;;35009:22;35034:21;35009:46;;35100:22;35117:4;35100:16;:22::i;:::-;35184:18;35205:41;35231:14;35205:21;:25;;:41;;;;:::i;:::-;35184:62;;35296:35;35309:9;35320:10;35296:12;:35::i;:::-;35385:62;35402:44;35427:18;35402:20;:24;;:44;;;;:::i;:::-;35385:16;:62::i;:::-;35458:9;;;;;;;;;;;:18;;:95;35477:75;35519:32;35540:10;;35519:16;;:20;;:32;;;;:::i;:::-;35477:37;35503:10;;35477:21;:25;;:37;;;;:::i;:::-;:41;;:75;;;;:::i;:::-;35458:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35564:15;;;;;;;;;;;:24;;:47;35589:21;35564:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35636:32;35651:4;35657:10;35636:32;;;;;;;:::i;:::-;;;;;;;;34421:1256;;;;;30982:5:::0;30963:16;;:24;;;;;;;;;;;;;;;;;;34347:1330;:::o;19058:98::-;19116:7;19147:1;19143;:5;;;;:::i;:::-;19136:12;;19058:98;;;;:::o;18701:::-;18759:7;18790:1;18786;:5;;;;:::i;:::-;18779:12;;18701:98;;;;:::o;8101:125::-;;;;:::o;8315:124::-;;;;:::o;35685:692::-;35811:21;35849:1;35835:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35811:40;;35880:4;35862;35867:1;35862:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35906:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35896:4;35901:1;35896:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;35997:11;35944:50;35962:4;35977:15;;;;;;;;;;;35944:9;:50::i;:::-;:64;35941:156;;;36023:62;36040:4;36055:15;;;;;;;;;;;36082:1;36073:11;36023:8;:62::i;:::-;35941:156;36135:15;;;;;;;;;;;:66;;;36216:11;36242:1;36286:4;36313;36333:15;36135:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35740:637;35685:692;:::o;36385:381::-;36496:15;;;;;;;;;;;:31;;;36535:9;36568:4;36588:11;36614:1;36657;36700:7;:5;:7::i;:::-;36722:15;36496:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36385: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:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:152::-;3916:9;3949:37;3980:5;3949:37;:::i;:::-;3936:50;;3840:152;;;:::o;3998:183::-;4111:63;4168:5;4111:63;:::i;:::-;4106:3;4099:76;3998:183;;:::o;4187:274::-;4306:4;4344:2;4333:9;4329:18;4321:26;;4357:97;4451:1;4440:9;4436:17;4427:6;4357:97;:::i;:::-;4187:274;;;;:::o;4467:118::-;4554:24;4572:5;4554:24;:::i;:::-;4549:3;4542:37;4467:118;;:::o;4591:222::-;4684:4;4722:2;4711:9;4707:18;4699:26;;4735:71;4803:1;4792:9;4788:17;4779:6;4735:71;:::i;:::-;4591:222;;;;:::o;4819:329::-;4878:6;4927:2;4915:9;4906:7;4902:23;4898:32;4895:119;;;4933:79;;:::i;:::-;4895:119;5053:1;5078:53;5123:7;5114:6;5103:9;5099:22;5078:53;:::i;:::-;5068:63;;5024:117;4819:329;;;;:::o;5154:619::-;5231:6;5239;5247;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5549:2;5575:53;5620:7;5611:6;5600:9;5596:22;5575:53;:::i;:::-;5565:63;;5520:118;5677:2;5703:53;5748:7;5739:6;5728:9;5724:22;5703:53;:::i;:::-;5693:63;;5648:118;5154:619;;;;;:::o;5779:86::-;5814:7;5854:4;5847:5;5843:16;5832:27;;5779:86;;;:::o;5871:112::-;5954:22;5970:5;5954:22;:::i;:::-;5949:3;5942:35;5871:112;;:::o;5989:214::-;6078:4;6116:2;6105:9;6101:18;6093:26;;6129:67;6193:1;6182:9;6178:17;6169:6;6129:67;:::i;:::-;5989:214;;;;:::o;6209:116::-;6279:21;6294:5;6279:21;:::i;:::-;6272:5;6269:32;6259:60;;6315:1;6312;6305:12;6259:60;6209:116;:::o;6331:133::-;6374:5;6412:6;6399:20;6390:29;;6428:30;6452:5;6428:30;:::i;:::-;6331:133;;;;:::o;6470:468::-;6535:6;6543;6592:2;6580:9;6571:7;6567:23;6563:32;6560:119;;;6598:79;;:::i;:::-;6560:119;6718:1;6743:53;6788:7;6779:6;6768:9;6764:22;6743:53;:::i;:::-;6733:63;;6689:117;6845:2;6871:50;6913:7;6904:6;6893:9;6889:22;6871:50;:::i;:::-;6861:60;;6816:115;6470:468;;;;;:::o;6944:118::-;7031:24;7049:5;7031:24;:::i;:::-;7026:3;7019:37;6944:118;;:::o;7068:222::-;7161:4;7199:2;7188:9;7184:18;7176:26;;7212:71;7280:1;7269:9;7265:17;7256:6;7212:71;:::i;:::-;7068:222;;;;:::o;7296:329::-;7355:6;7404:2;7392:9;7383:7;7379:23;7375:32;7372:119;;;7410:79;;:::i;:::-;7372:119;7530:1;7555:53;7600:7;7591:6;7580:9;7576:22;7555:53;:::i;:::-;7545:63;;7501:117;7296:329;;;;:::o;7631:104::-;7676:7;7705:24;7723:5;7705:24;:::i;:::-;7694:35;;7631:104;;;:::o;7741:142::-;7844:32;7870:5;7844:32;:::i;:::-;7839:3;7832:45;7741:142;;:::o;7889:254::-;7998:4;8036:2;8025:9;8021:18;8013:26;;8049:87;8133:1;8122:9;8118:17;8109:6;8049:87;:::i;:::-;7889:254;;;;:::o;8149:619::-;8226:6;8234;8242;8291:2;8279:9;8270:7;8266:23;8262:32;8259:119;;;8297:79;;:::i;:::-;8259:119;8417:1;8442:53;8487:7;8478:6;8467:9;8463:22;8442:53;:::i;:::-;8432:63;;8388:117;8544:2;8570:53;8615:7;8606:6;8595:9;8591:22;8570:53;:::i;:::-;8560:63;;8515:118;8672:2;8698:53;8743:7;8734:6;8723:9;8719:22;8698:53;:::i;:::-;8688:63;;8643:118;8149:619;;;;;:::o;8774:323::-;8830:6;8879:2;8867:9;8858:7;8854:23;8850:32;8847:119;;;8885:79;;:::i;:::-;8847:119;9005:1;9030:50;9072:7;9063:6;9052:9;9048:22;9030:50;:::i;:::-;9020:60;;8976:114;8774:323;;;;:::o;9103:474::-;9171:6;9179;9228:2;9216:9;9207:7;9203:23;9199:32;9196:119;;;9234:79;;:::i;:::-;9196:119;9354:1;9379:53;9424:7;9415:6;9404:9;9400:22;9379:53;:::i;:::-;9369:63;;9325:117;9481:2;9507:53;9552:7;9543:6;9532:9;9528:22;9507:53;:::i;:::-;9497:63;;9452:118;9103:474;;;;;:::o;9583:138::-;9664:32;9690:5;9664:32;:::i;:::-;9657:5;9654:43;9644:71;;9711:1;9708;9701:12;9644:71;9583:138;:::o;9727:155::-;9781:5;9819:6;9806:20;9797:29;;9835:41;9870:5;9835:41;:::i;:::-;9727:155;;;;:::o;9888:506::-;9972:6;9980;10029:2;10017:9;10008:7;10004:23;10000:32;9997:119;;;10035:79;;:::i;:::-;9997:119;10155:1;10180:61;10233:7;10224:6;10213:9;10209:22;10180:61;:::i;:::-;10170:71;;10126:125;10290:2;10316:61;10369:7;10360:6;10349:9;10345:22;10316:61;:::i;:::-;10306:71;;10261:126;9888:506;;;;;:::o;10400:180::-;10448:77;10445:1;10438:88;10545:4;10542:1;10535:15;10569:4;10566:1;10559:15;10586:320;10630:6;10667:1;10661:4;10657:12;10647:22;;10714:1;10708:4;10704:12;10735:18;10725:81;;10791:4;10783:6;10779:17;10769:27;;10725:81;10853:2;10845:6;10842:14;10822:18;10819:38;10816:84;;10872:18;;:::i;:::-;10816:84;10637:269;10586:320;;;:::o;10912:227::-;11052:34;11048:1;11040:6;11036:14;11029:58;11121:10;11116:2;11108:6;11104:15;11097:35;10912:227;:::o;11145:366::-;11287:3;11308:67;11372:2;11367:3;11308:67;:::i;:::-;11301:74;;11384:93;11473:3;11384:93;:::i;:::-;11502:2;11497:3;11493:12;11486:19;;11145:366;;;:::o;11517:419::-;11683:4;11721:2;11710:9;11706:18;11698:26;;11770:9;11764:4;11760:20;11756:1;11745:9;11741:17;11734:47;11798:131;11924:4;11798:131;:::i;:::-;11790:139;;11517:419;;;:::o;11942:182::-;12082:34;12078:1;12070:6;12066:14;12059:58;11942:182;:::o;12130:366::-;12272:3;12293:67;12357:2;12352:3;12293:67;:::i;:::-;12286:74;;12369:93;12458:3;12369:93;:::i;:::-;12487:2;12482:3;12478:12;12471:19;;12130:366;;;:::o;12502:419::-;12668:4;12706:2;12695:9;12691:18;12683:26;;12755:9;12749:4;12745:20;12741:1;12730:9;12726:17;12719:47;12783:131;12909:4;12783:131;:::i;:::-;12775:139;;12502:419;;;:::o;12927:163::-;13067:15;13063:1;13055:6;13051:14;13044:39;12927:163;:::o;13096:366::-;13238:3;13259:67;13323:2;13318:3;13259:67;:::i;:::-;13252:74;;13335:93;13424:3;13335:93;:::i;:::-;13453:2;13448:3;13444:12;13437:19;;13096:366;;;:::o;13468:419::-;13634:4;13672:2;13661:9;13657:18;13649:26;;13721:9;13715:4;13711:20;13707:1;13696:9;13692:17;13685:47;13749:131;13875:4;13749:131;:::i;:::-;13741:139;;13468:419;;;:::o;13893:162::-;14033:14;14029:1;14021:6;14017:14;14010:38;13893:162;:::o;14061:366::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:419::-;14599:4;14637:2;14626:9;14622:18;14614:26;;14686:9;14680:4;14676:20;14672:1;14661:9;14657:17;14650:47;14714:131;14840:4;14714:131;:::i;:::-;14706:139;;14433:419;;;:::o;14858:229::-;14998:34;14994:1;14986:6;14982:14;14975:58;15067:12;15062:2;15054:6;15050:15;15043:37;14858:229;:::o;15093:366::-;15235:3;15256:67;15320:2;15315:3;15256:67;:::i;:::-;15249:74;;15332:93;15421:3;15332:93;:::i;:::-;15450:2;15445:3;15441:12;15434:19;;15093:366;;;:::o;15465:419::-;15631:4;15669:2;15658:9;15654:18;15646:26;;15718:9;15712:4;15708:20;15704:1;15693:9;15689:17;15682:47;15746:131;15872:4;15746:131;:::i;:::-;15738:139;;15465:419;;;:::o;15890:225::-;16030:34;16026:1;16018:6;16014:14;16007:58;16099:8;16094:2;16086:6;16082:15;16075:33;15890:225;:::o;16121:366::-;16263:3;16284:67;16348:2;16343:3;16284:67;:::i;:::-;16277:74;;16360:93;16449:3;16360:93;:::i;:::-;16478:2;16473:3;16469:12;16462:19;;16121:366;;;:::o;16493:419::-;16659:4;16697:2;16686:9;16682:18;16674:26;;16746:9;16740:4;16736:20;16732:1;16721:9;16717:17;16710:47;16774:131;16900:4;16774:131;:::i;:::-;16766:139;;16493:419;;;:::o;16918:223::-;17058:34;17054:1;17046:6;17042:14;17035:58;17127:6;17122:2;17114:6;17110:15;17103:31;16918:223;:::o;17147:366::-;17289:3;17310:67;17374:2;17369:3;17310:67;:::i;:::-;17303:74;;17386:93;17475:3;17386:93;:::i;:::-;17504:2;17499:3;17495:12;17488:19;;17147:366;;;:::o;17519:419::-;17685:4;17723:2;17712:9;17708:18;17700:26;;17772:9;17766:4;17762:20;17758:1;17747:9;17743:17;17736:47;17800:131;17926:4;17800:131;:::i;:::-;17792:139;;17519:419;;;:::o;17944:221::-;18084:34;18080:1;18072:6;18068:14;18061:58;18153:4;18148:2;18140:6;18136:15;18129:29;17944:221;:::o;18171:366::-;18313:3;18334:67;18398:2;18393:3;18334:67;:::i;:::-;18327:74;;18410:93;18499:3;18410:93;:::i;:::-;18528:2;18523:3;18519:12;18512:19;;18171:366;;;:::o;18543:419::-;18709:4;18747:2;18736:9;18732:18;18724:26;;18796:9;18790:4;18786:20;18782:1;18771:9;18767:17;18760:47;18824:131;18950:4;18824:131;:::i;:::-;18816:139;;18543:419;;;:::o;18968:224::-;19108:34;19104:1;19096:6;19092:14;19085:58;19177:7;19172:2;19164:6;19160:15;19153:32;18968:224;:::o;19198:366::-;19340:3;19361:67;19425:2;19420:3;19361:67;:::i;:::-;19354:74;;19437:93;19526:3;19437:93;:::i;:::-;19555:2;19550:3;19546:12;19539:19;;19198:366;;;:::o;19570:419::-;19736:4;19774:2;19763:9;19759:18;19751:26;;19823:9;19817:4;19813:20;19809:1;19798:9;19794:17;19787:47;19851:131;19977:4;19851:131;:::i;:::-;19843:139;;19570:419;;;:::o;19995:222::-;20135:34;20131:1;20123:6;20119:14;20112:58;20204:5;20199:2;20191:6;20187:15;20180:30;19995:222;:::o;20223:366::-;20365:3;20386:67;20450:2;20445:3;20386:67;:::i;:::-;20379:74;;20462:93;20551:3;20462:93;:::i;:::-;20580:2;20575:3;20571:12;20564:19;;20223:366;;;:::o;20595:419::-;20761:4;20799:2;20788:9;20784:18;20776:26;;20848:9;20842:4;20838:20;20834:1;20823:9;20819:17;20812:47;20876:131;21002:4;20876:131;:::i;:::-;20868:139;;20595:419;;;:::o;21020:173::-;21160:25;21156:1;21148:6;21144:14;21137:49;21020:173;:::o;21199:366::-;21341:3;21362:67;21426:2;21421:3;21362:67;:::i;:::-;21355:74;;21438:93;21527:3;21438:93;:::i;:::-;21556:2;21551:3;21547:12;21540:19;;21199:366;;;:::o;21571:419::-;21737:4;21775:2;21764:9;21760:18;21752:26;;21824:9;21818:4;21814:20;21810:1;21799:9;21795:17;21788:47;21852:131;21978:4;21852:131;:::i;:::-;21844:139;;21571:419;;;:::o;21996:169::-;22136:21;22132:1;22124:6;22120:14;22113:45;21996:169;:::o;22171:366::-;22313:3;22334:67;22398:2;22393:3;22334:67;:::i;:::-;22327:74;;22410:93;22499:3;22410:93;:::i;:::-;22528:2;22523:3;22519:12;22512:19;;22171:366;;;:::o;22543:419::-;22709:4;22747:2;22736:9;22732:18;22724:26;;22796:9;22790:4;22786:20;22782:1;22771:9;22767:17;22760:47;22824:131;22950:4;22824:131;:::i;:::-;22816:139;;22543:419;;;:::o;22968:180::-;23016:77;23013:1;23006:88;23113:4;23110:1;23103:15;23137:4;23134:1;23127:15;23154:305;23194:3;23213:20;23231:1;23213:20;:::i;:::-;23208:25;;23247:20;23265:1;23247:20;:::i;:::-;23242:25;;23401:1;23333:66;23329:74;23326:1;23323:81;23320:107;;;23407:18;;:::i;:::-;23320:107;23451:1;23448;23444:9;23437:16;;23154:305;;;;:::o;23465:223::-;23605:34;23601:1;23593:6;23589:14;23582:58;23674:6;23669:2;23661:6;23657:15;23650:31;23465:223;:::o;23694:366::-;23836:3;23857:67;23921:2;23916:3;23857:67;:::i;:::-;23850:74;;23933:93;24022:3;23933:93;:::i;:::-;24051:2;24046:3;24042:12;24035:19;;23694:366;;;:::o;24066:419::-;24232:4;24270:2;24259:9;24255:18;24247:26;;24319:9;24313:4;24309:20;24305:1;24294:9;24290:17;24283:47;24347:131;24473:4;24347:131;:::i;:::-;24339:139;;24066:419;;;:::o;24491:227::-;24631:34;24627:1;24619:6;24615:14;24608:58;24700:10;24695:2;24687:6;24683:15;24676:35;24491:227;:::o;24724:366::-;24866:3;24887:67;24951:2;24946:3;24887:67;:::i;:::-;24880:74;;24963:93;25052:3;24963:93;:::i;:::-;25081:2;25076:3;25072:12;25065:19;;24724:366;;;:::o;25096:419::-;25262:4;25300:2;25289:9;25285:18;25277:26;;25349:9;25343:4;25339:20;25335:1;25324:9;25320:17;25313:47;25377:131;25503:4;25377:131;:::i;:::-;25369:139;;25096:419;;;:::o;25521:180::-;25569:77;25566:1;25559:88;25666:4;25663:1;25656:15;25690:4;25687:1;25680:15;25707:185;25747:1;25764:20;25782:1;25764:20;:::i;:::-;25759:25;;25798:20;25816:1;25798:20;:::i;:::-;25793:25;;25837:1;25827:35;;25842:18;;:::i;:::-;25827:35;25884:1;25881;25877:9;25872:14;;25707:185;;;;:::o;25898:225::-;26038:34;26034:1;26026:6;26022:14;26015:58;26107:8;26102:2;26094:6;26090:15;26083:33;25898:225;:::o;26129:366::-;26271:3;26292:67;26356:2;26351:3;26292:67;:::i;:::-;26285:74;;26368:93;26457:3;26368:93;:::i;:::-;26486:2;26481:3;26477:12;26470:19;;26129:366;;;:::o;26501:419::-;26667:4;26705:2;26694:9;26690:18;26682:26;;26754:9;26748:4;26744:20;26740:1;26729:9;26725:17;26718:47;26782:131;26908:4;26782:131;:::i;:::-;26774:139;;26501:419;;;:::o;26926:332::-;27047:4;27085:2;27074:9;27070:18;27062:26;;27098:71;27166:1;27155:9;27151:17;27142:6;27098:71;:::i;:::-;27179:72;27247:2;27236:9;27232:18;27223:6;27179:72;:::i;:::-;26926:332;;;;;:::o;27264:348::-;27304:7;27327:20;27345:1;27327:20;:::i;:::-;27322:25;;27361:20;27379:1;27361:20;:::i;:::-;27356:25;;27549:1;27481:66;27477:74;27474:1;27471:81;27466:1;27459:9;27452:17;27448:105;27445:131;;;27556:18;;:::i;:::-;27445:131;27604:1;27601;27597:9;27586:20;;27264:348;;;;:::o;27618:191::-;27658:4;27678:20;27696:1;27678:20;:::i;:::-;27673:25;;27712:20;27730:1;27712:20;:::i;:::-;27707:25;;27751:1;27748;27745:8;27742:34;;;27756:18;;:::i;:::-;27742:34;27801:1;27798;27794:9;27786:17;;27618:191;;;;:::o;27815:180::-;27863:77;27860:1;27853:88;27960:4;27957:1;27950:15;27984:4;27981:1;27974:15;28001:180;28049:77;28046:1;28039:88;28146:4;28143:1;28136:15;28170:4;28167:1;28160:15;28187:143;28244:5;28275:6;28269:13;28260:22;;28291:33;28318:5;28291:33;:::i;:::-;28187:143;;;;:::o;28336:351::-;28406:6;28455:2;28443:9;28434:7;28430:23;28426:32;28423:119;;;28461:79;;:::i;:::-;28423:119;28581:1;28606:64;28662:7;28653:6;28642:9;28638:22;28606:64;:::i;:::-;28596:74;;28552:128;28336:351;;;;:::o;28693:85::-;28738:7;28767:5;28756:16;;28693:85;;;:::o;28784:158::-;28842:9;28875:61;28893:42;28902:32;28928:5;28902:32;:::i;:::-;28893:42;:::i;:::-;28875:61;:::i;:::-;28862:74;;28784:158;;;:::o;28948:147::-;29043:45;29082:5;29043:45;:::i;:::-;29038:3;29031:58;28948:147;;:::o;29101:114::-;29168:6;29202:5;29196:12;29186:22;;29101:114;;;:::o;29221:184::-;29320:11;29354:6;29349:3;29342:19;29394:4;29389:3;29385:14;29370:29;;29221:184;;;;:::o;29411:132::-;29478:4;29501:3;29493:11;;29531:4;29526:3;29522:14;29514:22;;29411:132;;;:::o;29549:108::-;29626:24;29644:5;29626:24;:::i;:::-;29621:3;29614:37;29549:108;;:::o;29663:179::-;29732:10;29753:46;29795:3;29787:6;29753:46;:::i;:::-;29831:4;29826:3;29822:14;29808:28;;29663:179;;;;:::o;29848:113::-;29918:4;29950;29945:3;29941:14;29933:22;;29848:113;;;:::o;29997:732::-;30116:3;30145:54;30193:5;30145:54;:::i;:::-;30215:86;30294:6;30289:3;30215:86;:::i;:::-;30208:93;;30325:56;30375:5;30325:56;:::i;:::-;30404:7;30435:1;30420:284;30445:6;30442:1;30439:13;30420:284;;;30521:6;30515:13;30548:63;30607:3;30592:13;30548:63;:::i;:::-;30541:70;;30634:60;30687:6;30634:60;:::i;:::-;30624:70;;30480:224;30467:1;30464;30460:9;30455:14;;30420:284;;;30424:14;30720:3;30713:10;;30121:608;;;29997:732;;;;:::o;30735:831::-;30998:4;31036:3;31025:9;31021:19;31013:27;;31050:71;31118:1;31107:9;31103:17;31094:6;31050:71;:::i;:::-;31131:80;31207:2;31196:9;31192:18;31183:6;31131:80;:::i;:::-;31258:9;31252:4;31248:20;31243:2;31232:9;31228:18;31221:48;31286:108;31389:4;31380:6;31286:108;:::i;:::-;31278:116;;31404:72;31472:2;31461:9;31457:18;31448:6;31404:72;:::i;:::-;31486:73;31554:3;31543:9;31539:19;31530:6;31486:73;:::i;:::-;30735:831;;;;;;;;:::o;31572:807::-;31821:4;31859:3;31848:9;31844:19;31836:27;;31873:71;31941:1;31930:9;31926:17;31917:6;31873:71;:::i;:::-;31954:72;32022:2;32011:9;32007:18;31998:6;31954:72;:::i;:::-;32036:80;32112:2;32101:9;32097:18;32088:6;32036:80;:::i;:::-;32126;32202:2;32191:9;32187:18;32178:6;32126:80;:::i;:::-;32216:73;32284:3;32273:9;32269:19;32260:6;32216:73;:::i;:::-;32299;32367:3;32356:9;32352:19;32343:6;32299:73;:::i;:::-;31572:807;;;;;;;;;:::o;32385:143::-;32442:5;32473:6;32467:13;32458:22;;32489:33;32516:5;32489:33;:::i;:::-;32385:143;;;;:::o;32534:663::-;32622:6;32630;32638;32687:2;32675:9;32666:7;32662:23;32658:32;32655:119;;;32693:79;;:::i;:::-;32655:119;32813:1;32838:64;32894:7;32885:6;32874:9;32870:22;32838:64;:::i;:::-;32828:74;;32784:128;32951:2;32977:64;33033:7;33024:6;33013:9;33009:22;32977:64;:::i;:::-;32967:74;;32922:129;33090:2;33116:64;33172:7;33163:6;33152:9;33148:22;33116:64;:::i;:::-;33106:74;;33061:129;32534:663;;;;;:::o
Swarm Source
ipfs://59f85a284d607289d6b5c017e92342c4a952ccf9881607e3ac94e31fc513e5b2
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.