ERC-20
Overview
Max Total Supply
100,000,000,000 FUJI
Holders
33
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.50088426201171875 FUJIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Fujiyama
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-23 */ /* Legend mountain japan */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.10; pragma experimental ABIEncoderV2; ////// lib/openzeppelin-contracts/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) /* pragma solidity ^0.8.0; */ // Solve the hints and find the Gems abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } ////// lib/openzeppelin-contracts/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) /* pragma solidity ^0.8.0; */ /* import "../utils/Context.sol"; */ /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } ////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /* pragma solidity ^0.8.0; */ /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /* pragma solidity ^0.8.0; */ /* import "../IERC20.sol"; */ /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol) /* pragma solidity ^0.8.0; */ /* import "./IERC20.sol"; */ /* import "./extensions/IERC20Metadata.sol"; */ /* import "../../utils/Context.sol"; */ /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } ////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) /* pragma solidity ^0.8.0; */ // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the 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; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract Fujiyama is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); address public USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; bool private swapping; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; uint256 public buyTotalFees; uint256 public buyDevFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public sellLiquidityFee; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; event ExcludeFromFees(address indexed account, bool isExcluded); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); constructor() ERC20("Fujiyama", "FUJI") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), USDC); excludeFromMaxTransaction(address(uniswapV2Pair), true); uint256 _buyDevFee = 1; uint256 _buyLiquidityFee = 4; uint256 _sellDevFee = 1; uint256 _sellLiquidityFee = 4; uint256 totalSupply = 100_000_000_000 * 1e18; maxTransactionAmount = totalSupply * 1 / 100; // 1% from total supply maxTransactionAmountTxn maxWallet = totalSupply * 1 / 100; // 1% from total supply maxWallet swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet buyDevFee = _buyDevFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyDevFee + buyLiquidityFee; sellDevFee = _sellDevFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellDevFee + sellLiquidityFee; devWallet = address(0xaa20240f288A3121af893E387d9157865df878A9); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _devFee, uint256 _liquidityFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyDevFee + buyLiquidityFee; require(buyTotalFees <= 8, "Must keep fees at 8% or less"); } function updateSellFees( uint256 _devFee, uint256 _liquidityFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellDevFee + sellLiquidityFee; require(sellTotalFees <= 100, "Must keep fees at 8% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function updateDevWallet(address newDevWallet) external onlyOwner { emit devWalletUpdated(newDevWallet, devWallet); devWallet = newDevWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. //when buy if ( from == uniswapV2Pair && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; uint256 tokensForLiquidity = 0; uint256 tokensForDev = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (to == uniswapV2Pair && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees; tokensForDev = (fees * sellDevFee) / sellTotalFees; } // on buy else if (from == uniswapV2Pair && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees; tokensForDev = (fees * buyDevFee) / buyTotalFees; } if (fees> 0) { super._transfer(from, address(this), fees); } if (tokensForLiquidity > 0) { super._transfer(address(this), uniswapV2Pair, tokensForLiquidity); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForUSDC(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = USDC; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of USDC path, devWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); if (contractBalance == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } swapTokensForUSDC(contractBalance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","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":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff021916908315150217905550348015620000b757600080fd5b506040518060400160405280600881526020017f46756a6979616d610000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f46554a490000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013c929190620009bc565b50806004908051906020019062000155929190620009bc565b505050620001786200016c6200051d60201b60201c565b6200052560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a4816001620005eb60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a919062000ad6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620002a892919062000b19565b6020604051808303816000875af1158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000ad6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033660a0516001620005eb60201b60201c565b60006001905060006004905060006001905060006004905060006c01431e0fae6d7217caa00000009050606460018262000371919062000b7f565b6200037d919062000c0f565b600881905550606460018262000394919062000b7f565b620003a0919062000c0f565b600a81905550612710600582620003b8919062000b7f565b620003c4919062000c0f565b60098190555084600d8190555083600e81905550600e54600d54620003ea919062000c47565b600c81905550826010819055508160118190555060115460105462000410919062000c47565b600f8190555073aa20240f288a3121af893e387d9157865df878a9600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200048d6200047f620006d560201b60201c565b6001620006ff60201b60201c565b620004a0306001620006ff60201b60201c565b620004b561dead6001620006ff60201b60201c565b620004d7620004c9620006d560201b60201c565b6001620005eb60201b60201c565b620004ea306001620005eb60201b60201c565b620004ff61dead6001620005eb60201b60201c565b6200051133826200083960201b60201c565b50505050505062000e66565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005fb6200051d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000621620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200067a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006719062000d05565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200070f6200051d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000735620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200078e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007859062000d05565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200082d919062000d44565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a39062000db1565b60405180910390fd5b620008c060008383620009b260201b60201c565b8060026000828254620008d4919062000c47565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200092b919062000c47565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000992919062000de4565b60405180910390a3620009ae60008383620009b760201b60201c565b5050565b505050565b505050565b828054620009ca9062000e30565b90600052602060002090601f016020900481019282620009ee576000855562000a3a565b82601f1062000a0957805160ff191683800117855562000a3a565b8280016001018555821562000a3a579182015b8281111562000a3957825182559160200191906001019062000a1c565b5b50905062000a49919062000a4d565b5090565b5b8082111562000a6857600081600090555060010162000a4e565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a9e8262000a71565b9050919050565b62000ab08162000a91565b811462000abc57600080fd5b50565b60008151905062000ad08162000aa5565b92915050565b60006020828403121562000aef5762000aee62000a6c565b5b600062000aff8482850162000abf565b91505092915050565b62000b138162000a91565b82525050565b600060408201905062000b30600083018562000b08565b62000b3f602083018462000b08565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b8c8262000b46565b915062000b998362000b46565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bd55762000bd462000b50565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c1c8262000b46565b915062000c298362000b46565b92508262000c3c5762000c3b62000be0565b5b828204905092915050565b600062000c548262000b46565b915062000c618362000b46565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c995762000c9862000b50565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ced60208362000ca4565b915062000cfa8262000cb5565b602082019050919050565b6000602082019050818103600083015262000d208162000cde565b9050919050565b60008115159050919050565b62000d3e8162000d27565b82525050565b600060208201905062000d5b600083018462000d33565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d99601f8362000ca4565b915062000da68262000d61565b602082019050919050565b6000602082019050818103600083015262000dcc8162000d8a565b9050919050565b62000dde8162000b46565b82525050565b600060208201905062000dfb600083018462000dd3565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e4957607f821691505b6020821081141562000e605762000e5f62000e01565b5b50919050565b60805160a051613c6262000ebd60003960008181610f0101528181611f74015281816121bd015281816123c801528181612493015261257d015260008181610b8101528181612aab0152612ad20152613c626000f3fe6080604052600436106102555760003560e01c806389a3027111610139578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e146108b3578063e2f45605146108f0578063f11a24d31461091b578063f2fde38b14610946578063f63743421461096f578063f8b45b051461099a5761025c565b8063c0246668146107ce578063c18bc195146107f7578063c8c8ebe414610820578063d257b34f1461084b578063d85ba063146108885761025c565b806395d89b41116100fd57806395d89b41146106e55780639c3b4fdc14610710578063a0d82dc51461073b578063a9059cbb14610766578063bbc0c742146107a35761025c565b806389a30271146106245780638a8c523c1461064f5780638da5cb5b146106665780638ea5220f14610691578063924de9b7146106bc5761025c565b8063313ce567116101d25780636a486a8e116101965780636a486a8e146105265780636ddd17131461055157806370a082311461057c578063715018a6146105b9578063751039fc146105d05780637571336a146105fb5761025c565b8063313ce5671461043f57806349bd5a5e1461046a5780634a62bb65146104955780634fbee193146104c057806366ca9b83146104fd5761025c565b806318160ddd1161021957806318160ddd1461035a5780631816467f14610385578063203e727e146103ae57806323b872dd146103d757806327c8f835146104145761025c565b806302dbd8f81461026157806306fdde031461028a578063095ea7b3146102b557806310d5de53146102f25780631694505e1461032f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190612bc5565b6109c5565b005b34801561029657600080fd5b5061029f610aaf565b6040516102ac9190612c9e565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612d1e565b610b41565b6040516102e99190612d79565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612d94565b610b5f565b6040516103269190612d79565b60405180910390f35b34801561033b57600080fd5b50610344610b7f565b6040516103519190612e20565b60405180910390f35b34801561036657600080fd5b5061036f610ba3565b60405161037c9190612e4a565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612d94565b610bad565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190612e65565b610ce9565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190612e92565b610df8565b60405161040b9190612d79565b60405180910390f35b34801561042057600080fd5b50610429610ef0565b6040516104369190612ef4565b60405180910390f35b34801561044b57600080fd5b50610454610ef6565b6040516104619190612f2b565b60405180910390f35b34801561047657600080fd5b5061047f610eff565b60405161048c9190612ef4565b60405180910390f35b3480156104a157600080fd5b506104aa610f23565b6040516104b79190612d79565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190612d94565b610f36565b6040516104f49190612d79565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612bc5565b610f8c565b005b34801561053257600080fd5b5061053b611076565b6040516105489190612e4a565b60405180910390f35b34801561055d57600080fd5b5061056661107c565b6040516105739190612d79565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190612d94565b61108f565b6040516105b09190612e4a565b60405180910390f35b3480156105c557600080fd5b506105ce6110d7565b005b3480156105dc57600080fd5b506105e561115f565b6040516105f29190612d79565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190612f72565b6111ff565b005b34801561063057600080fd5b506106396112d6565b6040516106469190612ef4565b60405180910390f35b34801561065b57600080fd5b506106646112fc565b005b34801561067257600080fd5b5061067b6113b0565b6040516106889190612ef4565b60405180910390f35b34801561069d57600080fd5b506106a66113da565b6040516106b39190612ef4565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190612fb2565b611400565b005b3480156106f157600080fd5b506106fa611499565b6040516107079190612c9e565b60405180910390f35b34801561071c57600080fd5b5061072561152b565b6040516107329190612e4a565b60405180910390f35b34801561074757600080fd5b50610750611531565b60405161075d9190612e4a565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190612d1e565b611537565b60405161079a9190612d79565b60405180910390f35b3480156107af57600080fd5b506107b8611555565b6040516107c59190612d79565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190612f72565b611568565b005b34801561080357600080fd5b5061081e60048036038101906108199190612e65565b61168d565b005b34801561082c57600080fd5b5061083561179c565b6040516108429190612e4a565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d9190612e65565b6117a2565b60405161087f9190612d79565b60405180910390f35b34801561089457600080fd5b5061089d6118f7565b6040516108aa9190612e4a565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612fdf565b6118fd565b6040516108e79190612e4a565b60405180910390f35b3480156108fc57600080fd5b50610905611984565b6040516109129190612e4a565b60405180910390f35b34801561092757600080fd5b5061093061198a565b60405161093d9190612e4a565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190612d94565b611990565b005b34801561097b57600080fd5b50610984611a88565b6040516109919190612e4a565b60405180910390f35b3480156109a657600080fd5b506109af611a8e565b6040516109bc9190612e4a565b60405180910390f35b6109cd611a94565b73ffffffffffffffffffffffffffffffffffffffff166109eb6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a389061306b565b60405180910390fd5b8160108190555080601181905550601154601054610a5f91906130ba565b600f819055506064600f541115610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa29061315c565b60405180910390fd5b5050565b606060038054610abe906131ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea906131ab565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b5050505050905090565b6000610b55610b4e611a94565b8484611a9c565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610bb5611a94565b73ffffffffffffffffffffffffffffffffffffffff16610bd36113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c209061306b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cf1611a94565b73ffffffffffffffffffffffffffffffffffffffff16610d0f6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c9061306b565b60405180910390fd5b670de0b6b3a76400006103e86001610d7b610ba3565b610d8591906131dd565b610d8f9190613266565b610d999190613266565b811015610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613309565b60405180910390fd5b670de0b6b3a764000081610def91906131dd565b60088190555050565b6000610e05848484611c67565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e50611a94565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec79061339b565b60405180910390fd5b610ee485610edc611a94565b858403611a9c565b60019150509392505050565b61dead81565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f94611a94565b73ffffffffffffffffffffffffffffffffffffffff16610fb26113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff9061306b565b60405180910390fd5b81600d8190555080600e81905550600e54600d5461102691906130ba565b600c819055506008600c541115611072576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110699061315c565b60405180910390fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110df611a94565b73ffffffffffffffffffffffffffffffffffffffff166110fd6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a9061306b565b60405180910390fd5b61115d60006125c9565b565b6000611169611a94565b73ffffffffffffffffffffffffffffffffffffffff166111876113b0565b73ffffffffffffffffffffffffffffffffffffffff16146111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d49061306b565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611207611a94565b73ffffffffffffffffffffffffffffffffffffffff166112256113b0565b73ffffffffffffffffffffffffffffffffffffffff161461127b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112729061306b565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611304611a94565b73ffffffffffffffffffffffffffffffffffffffff166113226113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f9061306b565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611408611a94565b73ffffffffffffffffffffffffffffffffffffffff166114266113b0565b73ffffffffffffffffffffffffffffffffffffffff161461147c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114739061306b565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546114a8906131ab565b80601f01602080910402602001604051908101604052809291908181526020018280546114d4906131ab565b80156115215780601f106114f657610100808354040283529160200191611521565b820191906000526020600020905b81548152906001019060200180831161150457829003601f168201915b5050505050905090565b600d5481565b60105481565b600061154b611544611a94565b8484611c67565b6001905092915050565b600b60019054906101000a900460ff1681565b611570611a94565b73ffffffffffffffffffffffffffffffffffffffff1661158e6113b0565b73ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db9061306b565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116819190612d79565b60405180910390a25050565b611695611a94565b73ffffffffffffffffffffffffffffffffffffffff166116b36113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117009061306b565b60405180910390fd5b670de0b6b3a76400006103e8600561171f610ba3565b61172991906131dd565b6117339190613266565b61173d9190613266565b81101561177f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117769061342d565b60405180910390fd5b670de0b6b3a76400008161179391906131dd565b600a8190555050565b60085481565b60006117ac611a94565b73ffffffffffffffffffffffffffffffffffffffff166117ca6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118179061306b565b60405180910390fd5b620186a0600161182e610ba3565b61183891906131dd565b6118429190613266565b821015611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b906134bf565b60405180910390fd5b6103e86005611891610ba3565b61189b91906131dd565b6118a59190613266565b8211156118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90613551565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b611998611a94565b73ffffffffffffffffffffffffffffffffffffffff166119b66113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a039061306b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a73906135e3565b60405180910390fd5b611a85816125c9565b50565b60115481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390613675565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390613707565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c5a9190612e4a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e9061382b565b60405180910390fd5b6000811415611d6157611d5c8383600061268f565b6125c4565b600b60009054906101000a900460ff161561216b57611d7e6113b0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611dec5750611dbc6113b0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e255750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e5f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e785750600660149054906101000a900460ff16155b1561216a57600b60019054906101000a900460ff16611f7257601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f325750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613897565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156120175750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120be57600854811115612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205890613929565b60405180910390fd5b600a5461206d8361108f565b8261207891906130ba565b11156120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090613995565b60405180910390fd5b612169565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661216857600a5461211b8361108f565b8261212691906130ba565b1115612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e90613995565b60405180910390fd5b5b5b5b5b60006121763061108f565b90506000600954821015905080801561219b5750600b60029054906101000a900460ff165b80156121b45750600660149054906101000a900460ff16155b801561220b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156122615750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122b75750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122fb576001600660146101000a81548160ff0219169083151502179055506122df612910565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123b15750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123bb57600090505b600080600083156125b2577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561242357506000600f54115b15612491576124506064612442600f548a61296190919063ffffffff16565b61297790919063ffffffff16565b9250600f546011548461246391906131dd565b61246d9190613266565b9150600f546010548461248091906131dd565b61248a9190613266565b9050612559565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161480156124ee57506000600c54115b156125585761251b606461250d600c548a61296190919063ffffffff16565b61297790919063ffffffff16565b9250600c54600e548461252e91906131dd565b6125389190613266565b9150600c54600d548461254b91906131dd565b6125559190613266565b90505b5b600083111561256e5761256d89308561268f565b5b60008211156125a3576125a2307f00000000000000000000000000000000000000000000000000000000000000008461268f565b5b82876125af91906139b5565b96505b6125bd89898961268f565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690613799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127669061382b565b60405180910390fd5b61277a83838361298d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f790613a5b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461289391906130ba565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128f79190612e4a565b60405180910390a361290a848484612992565b50505050565b600061291b3061108f565b9050600081141561292c575061295f565b601460095461293b91906131dd565b81111561295457601460095461295191906131dd565b90505b61295d81612997565b505b565b6000818361296f91906131dd565b905092915050565b600081836129859190613266565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156129b4576129b3613a7b565b5b6040519080825280602002602001820160405280156129e25781602001602082028036833780820191505090505b50905030816000815181106129fa576129f9613aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612a6b57612a6a613aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ad0307f000000000000000000000000000000000000000000000000000000000000000084611a9c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612b54959493929190613bd2565b600060405180830381600087803b158015612b6e57600080fd5b505af1158015612b82573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612ba281612b8f565b8114612bad57600080fd5b50565b600081359050612bbf81612b99565b92915050565b60008060408385031215612bdc57612bdb612b8a565b5b6000612bea85828601612bb0565b9250506020612bfb85828601612bb0565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c3f578082015181840152602081019050612c24565b83811115612c4e576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c7082612c05565b612c7a8185612c10565b9350612c8a818560208601612c21565b612c9381612c54565b840191505092915050565b60006020820190508181036000830152612cb88184612c65565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ceb82612cc0565b9050919050565b612cfb81612ce0565b8114612d0657600080fd5b50565b600081359050612d1881612cf2565b92915050565b60008060408385031215612d3557612d34612b8a565b5b6000612d4385828601612d09565b9250506020612d5485828601612bb0565b9150509250929050565b60008115159050919050565b612d7381612d5e565b82525050565b6000602082019050612d8e6000830184612d6a565b92915050565b600060208284031215612daa57612da9612b8a565b5b6000612db884828501612d09565b91505092915050565b6000819050919050565b6000612de6612de1612ddc84612cc0565b612dc1565b612cc0565b9050919050565b6000612df882612dcb565b9050919050565b6000612e0a82612ded565b9050919050565b612e1a81612dff565b82525050565b6000602082019050612e356000830184612e11565b92915050565b612e4481612b8f565b82525050565b6000602082019050612e5f6000830184612e3b565b92915050565b600060208284031215612e7b57612e7a612b8a565b5b6000612e8984828501612bb0565b91505092915050565b600080600060608486031215612eab57612eaa612b8a565b5b6000612eb986828701612d09565b9350506020612eca86828701612d09565b9250506040612edb86828701612bb0565b9150509250925092565b612eee81612ce0565b82525050565b6000602082019050612f096000830184612ee5565b92915050565b600060ff82169050919050565b612f2581612f0f565b82525050565b6000602082019050612f406000830184612f1c565b92915050565b612f4f81612d5e565b8114612f5a57600080fd5b50565b600081359050612f6c81612f46565b92915050565b60008060408385031215612f8957612f88612b8a565b5b6000612f9785828601612d09565b9250506020612fa885828601612f5d565b9150509250929050565b600060208284031215612fc857612fc7612b8a565b5b6000612fd684828501612f5d565b91505092915050565b60008060408385031215612ff657612ff5612b8a565b5b600061300485828601612d09565b925050602061301585828601612d09565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613055602083612c10565b91506130608261301f565b602082019050919050565b6000602082019050818103600083015261308481613048565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130c582612b8f565b91506130d083612b8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131055761310461308b565b5b828201905092915050565b7f4d757374206b6565702066656573206174203825206f72206c65737300000000600082015250565b6000613146601c83612c10565b915061315182613110565b602082019050919050565b6000602082019050818103600083015261317581613139565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131c357607f821691505b602082108114156131d7576131d661317c565b5b50919050565b60006131e882612b8f565b91506131f383612b8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322c5761322b61308b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061327182612b8f565b915061327c83612b8f565b92508261328c5761328b613237565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006132f3602f83612c10565b91506132fe82613297565b604082019050919050565b60006020820190508181036000830152613322816132e6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613385602883612c10565b915061339082613329565b604082019050919050565b600060208201905081810360008301526133b481613378565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613417602483612c10565b9150613422826133bb565b604082019050919050565b600060208201905081810360008301526134468161340a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006134a9603583612c10565b91506134b48261344d565b604082019050919050565b600060208201905081810360008301526134d88161349c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061353b603483612c10565b9150613546826134df565b604082019050919050565b6000602082019050818103600083015261356a8161352e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135cd602683612c10565b91506135d882613571565b604082019050919050565b600060208201905081810360008301526135fc816135c0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061365f602483612c10565b915061366a82613603565b604082019050919050565b6000602082019050818103600083015261368e81613652565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136f1602283612c10565b91506136fc82613695565b604082019050919050565b60006020820190508181036000830152613720816136e4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613783602583612c10565b915061378e82613727565b604082019050919050565b600060208201905081810360008301526137b281613776565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613815602383612c10565b9150613820826137b9565b604082019050919050565b6000602082019050818103600083015261384481613808565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613881601683612c10565b915061388c8261384b565b602082019050919050565b600060208201905081810360008301526138b081613874565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613913603583612c10565b915061391e826138b7565b604082019050919050565b6000602082019050818103600083015261394281613906565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061397f601383612c10565b915061398a82613949565b602082019050919050565b600060208201905081810360008301526139ae81613972565b9050919050565b60006139c082612b8f565b91506139cb83612b8f565b9250828210156139de576139dd61308b565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613a45602683612c10565b9150613a50826139e9565b604082019050919050565b60006020820190508181036000830152613a7481613a38565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613afe613af9613af484613ad9565b612dc1565b612b8f565b9050919050565b613b0e81613ae3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b4981612ce0565b82525050565b6000613b5b8383613b40565b60208301905092915050565b6000602082019050919050565b6000613b7f82613b14565b613b898185613b1f565b9350613b9483613b30565b8060005b83811015613bc5578151613bac8882613b4f565b9750613bb783613b67565b925050600181019050613b98565b5085935050505092915050565b600060a082019050613be76000830188612e3b565b613bf46020830187613b05565b8181036040830152613c068186613b74565b9050613c156060830185612ee5565b613c226080830184612e3b565b969550505050505056fea2646970667358221220186c7810e2b4ddc395d538656f4bce209bd6c75f32aab0cada790cbbc079e7cd64736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106102555760003560e01c806389a3027111610139578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e146108b3578063e2f45605146108f0578063f11a24d31461091b578063f2fde38b14610946578063f63743421461096f578063f8b45b051461099a5761025c565b8063c0246668146107ce578063c18bc195146107f7578063c8c8ebe414610820578063d257b34f1461084b578063d85ba063146108885761025c565b806395d89b41116100fd57806395d89b41146106e55780639c3b4fdc14610710578063a0d82dc51461073b578063a9059cbb14610766578063bbc0c742146107a35761025c565b806389a30271146106245780638a8c523c1461064f5780638da5cb5b146106665780638ea5220f14610691578063924de9b7146106bc5761025c565b8063313ce567116101d25780636a486a8e116101965780636a486a8e146105265780636ddd17131461055157806370a082311461057c578063715018a6146105b9578063751039fc146105d05780637571336a146105fb5761025c565b8063313ce5671461043f57806349bd5a5e1461046a5780634a62bb65146104955780634fbee193146104c057806366ca9b83146104fd5761025c565b806318160ddd1161021957806318160ddd1461035a5780631816467f14610385578063203e727e146103ae57806323b872dd146103d757806327c8f835146104145761025c565b806302dbd8f81461026157806306fdde031461028a578063095ea7b3146102b557806310d5de53146102f25780631694505e1461032f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190612bc5565b6109c5565b005b34801561029657600080fd5b5061029f610aaf565b6040516102ac9190612c9e565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612d1e565b610b41565b6040516102e99190612d79565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612d94565b610b5f565b6040516103269190612d79565b60405180910390f35b34801561033b57600080fd5b50610344610b7f565b6040516103519190612e20565b60405180910390f35b34801561036657600080fd5b5061036f610ba3565b60405161037c9190612e4a565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612d94565b610bad565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190612e65565b610ce9565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190612e92565b610df8565b60405161040b9190612d79565b60405180910390f35b34801561042057600080fd5b50610429610ef0565b6040516104369190612ef4565b60405180910390f35b34801561044b57600080fd5b50610454610ef6565b6040516104619190612f2b565b60405180910390f35b34801561047657600080fd5b5061047f610eff565b60405161048c9190612ef4565b60405180910390f35b3480156104a157600080fd5b506104aa610f23565b6040516104b79190612d79565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190612d94565b610f36565b6040516104f49190612d79565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612bc5565b610f8c565b005b34801561053257600080fd5b5061053b611076565b6040516105489190612e4a565b60405180910390f35b34801561055d57600080fd5b5061056661107c565b6040516105739190612d79565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190612d94565b61108f565b6040516105b09190612e4a565b60405180910390f35b3480156105c557600080fd5b506105ce6110d7565b005b3480156105dc57600080fd5b506105e561115f565b6040516105f29190612d79565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190612f72565b6111ff565b005b34801561063057600080fd5b506106396112d6565b6040516106469190612ef4565b60405180910390f35b34801561065b57600080fd5b506106646112fc565b005b34801561067257600080fd5b5061067b6113b0565b6040516106889190612ef4565b60405180910390f35b34801561069d57600080fd5b506106a66113da565b6040516106b39190612ef4565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190612fb2565b611400565b005b3480156106f157600080fd5b506106fa611499565b6040516107079190612c9e565b60405180910390f35b34801561071c57600080fd5b5061072561152b565b6040516107329190612e4a565b60405180910390f35b34801561074757600080fd5b50610750611531565b60405161075d9190612e4a565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190612d1e565b611537565b60405161079a9190612d79565b60405180910390f35b3480156107af57600080fd5b506107b8611555565b6040516107c59190612d79565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190612f72565b611568565b005b34801561080357600080fd5b5061081e60048036038101906108199190612e65565b61168d565b005b34801561082c57600080fd5b5061083561179c565b6040516108429190612e4a565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d9190612e65565b6117a2565b60405161087f9190612d79565b60405180910390f35b34801561089457600080fd5b5061089d6118f7565b6040516108aa9190612e4a565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612fdf565b6118fd565b6040516108e79190612e4a565b60405180910390f35b3480156108fc57600080fd5b50610905611984565b6040516109129190612e4a565b60405180910390f35b34801561092757600080fd5b5061093061198a565b60405161093d9190612e4a565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190612d94565b611990565b005b34801561097b57600080fd5b50610984611a88565b6040516109919190612e4a565b60405180910390f35b3480156109a657600080fd5b506109af611a8e565b6040516109bc9190612e4a565b60405180910390f35b6109cd611a94565b73ffffffffffffffffffffffffffffffffffffffff166109eb6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a389061306b565b60405180910390fd5b8160108190555080601181905550601154601054610a5f91906130ba565b600f819055506064600f541115610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa29061315c565b60405180910390fd5b5050565b606060038054610abe906131ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea906131ab565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b5050505050905090565b6000610b55610b4e611a94565b8484611a9c565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610bb5611a94565b73ffffffffffffffffffffffffffffffffffffffff16610bd36113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c209061306b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cf1611a94565b73ffffffffffffffffffffffffffffffffffffffff16610d0f6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c9061306b565b60405180910390fd5b670de0b6b3a76400006103e86001610d7b610ba3565b610d8591906131dd565b610d8f9190613266565b610d999190613266565b811015610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613309565b60405180910390fd5b670de0b6b3a764000081610def91906131dd565b60088190555050565b6000610e05848484611c67565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e50611a94565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec79061339b565b60405180910390fd5b610ee485610edc611a94565b858403611a9c565b60019150509392505050565b61dead81565b60006012905090565b7f000000000000000000000000bd687d0c2ca782b8a28b452ba1f119e1bddbfcd081565b600b60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f94611a94565b73ffffffffffffffffffffffffffffffffffffffff16610fb26113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff9061306b565b60405180910390fd5b81600d8190555080600e81905550600e54600d5461102691906130ba565b600c819055506008600c541115611072576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110699061315c565b60405180910390fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110df611a94565b73ffffffffffffffffffffffffffffffffffffffff166110fd6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a9061306b565b60405180910390fd5b61115d60006125c9565b565b6000611169611a94565b73ffffffffffffffffffffffffffffffffffffffff166111876113b0565b73ffffffffffffffffffffffffffffffffffffffff16146111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d49061306b565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611207611a94565b73ffffffffffffffffffffffffffffffffffffffff166112256113b0565b73ffffffffffffffffffffffffffffffffffffffff161461127b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112729061306b565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611304611a94565b73ffffffffffffffffffffffffffffffffffffffff166113226113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f9061306b565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611408611a94565b73ffffffffffffffffffffffffffffffffffffffff166114266113b0565b73ffffffffffffffffffffffffffffffffffffffff161461147c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114739061306b565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546114a8906131ab565b80601f01602080910402602001604051908101604052809291908181526020018280546114d4906131ab565b80156115215780601f106114f657610100808354040283529160200191611521565b820191906000526020600020905b81548152906001019060200180831161150457829003601f168201915b5050505050905090565b600d5481565b60105481565b600061154b611544611a94565b8484611c67565b6001905092915050565b600b60019054906101000a900460ff1681565b611570611a94565b73ffffffffffffffffffffffffffffffffffffffff1661158e6113b0565b73ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db9061306b565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116819190612d79565b60405180910390a25050565b611695611a94565b73ffffffffffffffffffffffffffffffffffffffff166116b36113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117009061306b565b60405180910390fd5b670de0b6b3a76400006103e8600561171f610ba3565b61172991906131dd565b6117339190613266565b61173d9190613266565b81101561177f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117769061342d565b60405180910390fd5b670de0b6b3a76400008161179391906131dd565b600a8190555050565b60085481565b60006117ac611a94565b73ffffffffffffffffffffffffffffffffffffffff166117ca6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118179061306b565b60405180910390fd5b620186a0600161182e610ba3565b61183891906131dd565b6118429190613266565b821015611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b906134bf565b60405180910390fd5b6103e86005611891610ba3565b61189b91906131dd565b6118a59190613266565b8211156118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90613551565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b611998611a94565b73ffffffffffffffffffffffffffffffffffffffff166119b66113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a039061306b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a73906135e3565b60405180910390fd5b611a85816125c9565b50565b60115481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390613675565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390613707565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c5a9190612e4a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e9061382b565b60405180910390fd5b6000811415611d6157611d5c8383600061268f565b6125c4565b600b60009054906101000a900460ff161561216b57611d7e6113b0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611dec5750611dbc6113b0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e255750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e5f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e785750600660149054906101000a900460ff16155b1561216a57600b60019054906101000a900460ff16611f7257601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f325750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613897565b60405180910390fd5b5b7f000000000000000000000000bd687d0c2ca782b8a28b452ba1f119e1bddbfcd073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156120175750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120be57600854811115612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205890613929565b60405180910390fd5b600a5461206d8361108f565b8261207891906130ba565b11156120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090613995565b60405180910390fd5b612169565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661216857600a5461211b8361108f565b8261212691906130ba565b1115612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e90613995565b60405180910390fd5b5b5b5b5b60006121763061108f565b90506000600954821015905080801561219b5750600b60029054906101000a900460ff165b80156121b45750600660149054906101000a900460ff16155b801561220b57507f000000000000000000000000bd687d0c2ca782b8a28b452ba1f119e1bddbfcd073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156122615750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122b75750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122fb576001600660146101000a81548160ff0219169083151502179055506122df612910565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123b15750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123bb57600090505b600080600083156125b2577f000000000000000000000000bd687d0c2ca782b8a28b452ba1f119e1bddbfcd073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561242357506000600f54115b15612491576124506064612442600f548a61296190919063ffffffff16565b61297790919063ffffffff16565b9250600f546011548461246391906131dd565b61246d9190613266565b9150600f546010548461248091906131dd565b61248a9190613266565b9050612559565b7f000000000000000000000000bd687d0c2ca782b8a28b452ba1f119e1bddbfcd073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161480156124ee57506000600c54115b156125585761251b606461250d600c548a61296190919063ffffffff16565b61297790919063ffffffff16565b9250600c54600e548461252e91906131dd565b6125389190613266565b9150600c54600d548461254b91906131dd565b6125559190613266565b90505b5b600083111561256e5761256d89308561268f565b5b60008211156125a3576125a2307f000000000000000000000000bd687d0c2ca782b8a28b452ba1f119e1bddbfcd08461268f565b5b82876125af91906139b5565b96505b6125bd89898961268f565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690613799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127669061382b565b60405180910390fd5b61277a83838361298d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f790613a5b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461289391906130ba565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128f79190612e4a565b60405180910390a361290a848484612992565b50505050565b600061291b3061108f565b9050600081141561292c575061295f565b601460095461293b91906131dd565b81111561295457601460095461295191906131dd565b90505b61295d81612997565b505b565b6000818361296f91906131dd565b905092915050565b600081836129859190613266565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156129b4576129b3613a7b565b5b6040519080825280602002602001820160405280156129e25781602001602082028036833780820191505090505b50905030816000815181106129fa576129f9613aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612a6b57612a6a613aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ad0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a9c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612b54959493929190613bd2565b600060405180830381600087803b158015612b6e57600080fd5b505af1158015612b82573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612ba281612b8f565b8114612bad57600080fd5b50565b600081359050612bbf81612b99565b92915050565b60008060408385031215612bdc57612bdb612b8a565b5b6000612bea85828601612bb0565b9250506020612bfb85828601612bb0565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c3f578082015181840152602081019050612c24565b83811115612c4e576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c7082612c05565b612c7a8185612c10565b9350612c8a818560208601612c21565b612c9381612c54565b840191505092915050565b60006020820190508181036000830152612cb88184612c65565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ceb82612cc0565b9050919050565b612cfb81612ce0565b8114612d0657600080fd5b50565b600081359050612d1881612cf2565b92915050565b60008060408385031215612d3557612d34612b8a565b5b6000612d4385828601612d09565b9250506020612d5485828601612bb0565b9150509250929050565b60008115159050919050565b612d7381612d5e565b82525050565b6000602082019050612d8e6000830184612d6a565b92915050565b600060208284031215612daa57612da9612b8a565b5b6000612db884828501612d09565b91505092915050565b6000819050919050565b6000612de6612de1612ddc84612cc0565b612dc1565b612cc0565b9050919050565b6000612df882612dcb565b9050919050565b6000612e0a82612ded565b9050919050565b612e1a81612dff565b82525050565b6000602082019050612e356000830184612e11565b92915050565b612e4481612b8f565b82525050565b6000602082019050612e5f6000830184612e3b565b92915050565b600060208284031215612e7b57612e7a612b8a565b5b6000612e8984828501612bb0565b91505092915050565b600080600060608486031215612eab57612eaa612b8a565b5b6000612eb986828701612d09565b9350506020612eca86828701612d09565b9250506040612edb86828701612bb0565b9150509250925092565b612eee81612ce0565b82525050565b6000602082019050612f096000830184612ee5565b92915050565b600060ff82169050919050565b612f2581612f0f565b82525050565b6000602082019050612f406000830184612f1c565b92915050565b612f4f81612d5e565b8114612f5a57600080fd5b50565b600081359050612f6c81612f46565b92915050565b60008060408385031215612f8957612f88612b8a565b5b6000612f9785828601612d09565b9250506020612fa885828601612f5d565b9150509250929050565b600060208284031215612fc857612fc7612b8a565b5b6000612fd684828501612f5d565b91505092915050565b60008060408385031215612ff657612ff5612b8a565b5b600061300485828601612d09565b925050602061301585828601612d09565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613055602083612c10565b91506130608261301f565b602082019050919050565b6000602082019050818103600083015261308481613048565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130c582612b8f565b91506130d083612b8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131055761310461308b565b5b828201905092915050565b7f4d757374206b6565702066656573206174203825206f72206c65737300000000600082015250565b6000613146601c83612c10565b915061315182613110565b602082019050919050565b6000602082019050818103600083015261317581613139565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131c357607f821691505b602082108114156131d7576131d661317c565b5b50919050565b60006131e882612b8f565b91506131f383612b8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322c5761322b61308b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061327182612b8f565b915061327c83612b8f565b92508261328c5761328b613237565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006132f3602f83612c10565b91506132fe82613297565b604082019050919050565b60006020820190508181036000830152613322816132e6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613385602883612c10565b915061339082613329565b604082019050919050565b600060208201905081810360008301526133b481613378565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613417602483612c10565b9150613422826133bb565b604082019050919050565b600060208201905081810360008301526134468161340a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006134a9603583612c10565b91506134b48261344d565b604082019050919050565b600060208201905081810360008301526134d88161349c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061353b603483612c10565b9150613546826134df565b604082019050919050565b6000602082019050818103600083015261356a8161352e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135cd602683612c10565b91506135d882613571565b604082019050919050565b600060208201905081810360008301526135fc816135c0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061365f602483612c10565b915061366a82613603565b604082019050919050565b6000602082019050818103600083015261368e81613652565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136f1602283612c10565b91506136fc82613695565b604082019050919050565b60006020820190508181036000830152613720816136e4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613783602583612c10565b915061378e82613727565b604082019050919050565b600060208201905081810360008301526137b281613776565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613815602383612c10565b9150613820826137b9565b604082019050919050565b6000602082019050818103600083015261384481613808565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613881601683612c10565b915061388c8261384b565b602082019050919050565b600060208201905081810360008301526138b081613874565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613913603583612c10565b915061391e826138b7565b604082019050919050565b6000602082019050818103600083015261394281613906565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061397f601383612c10565b915061398a82613949565b602082019050919050565b600060208201905081810360008301526139ae81613972565b9050919050565b60006139c082612b8f565b91506139cb83612b8f565b9250828210156139de576139dd61308b565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613a45602683612c10565b9150613a50826139e9565b604082019050919050565b60006020820190508181036000830152613a7481613a38565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613afe613af9613af484613ad9565b612dc1565b612b8f565b9050919050565b613b0e81613ae3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b4981612ce0565b82525050565b6000613b5b8383613b40565b60208301905092915050565b6000602082019050919050565b6000613b7f82613b14565b613b898185613b1f565b9350613b9483613b30565b8060005b83811015613bc5578151613bac8882613b4f565b9750613bb783613b67565b925050600181019050613b98565b5085935050505092915050565b600060a082019050613be76000830188612e3b565b613bf46020830187613b05565b8181036040830152613c068186613b74565b9050613c156060830185612ee5565b613c226080830184612e3b565b969550505050505056fea2646970667358221220186c7810e2b4ddc395d538656f4bce209bd6c75f32aab0cada790cbbc079e7cd64736f6c634300080a0033
Deployed Bytecode Sourcemap
24247:10764:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29550:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9103:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11270:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25210:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24325:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10223:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30066:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28315:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11921:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24428:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10065:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24383:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24739:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30265:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29233:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24963:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24819:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10394:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2338:103;;;;;;;;;;;;;:::i;:::-;;27619:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28862:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24488:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27455:112;;;;;;;;;;;;;:::i;:::-;;1687:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24591:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29125:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9322:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24893:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24998:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10734:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24779:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29876:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28598:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24624:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27810:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24859:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10972:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24666:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24924:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2596:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25030:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24706:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29550:318;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29682:7:::1;29669:10;:20;;;;29719:13;29700:16;:32;;;;29772:16;;29759:10;;:29;;;;:::i;:::-;29743:13;:45;;;;29824:3;29807:13;;:20;;29799:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29550:318:::0;;:::o;9103:100::-;9157:13;9190:5;9183:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9103:100;:::o;11270:169::-;11353:4;11370:39;11379:12;:10;:12::i;:::-;11393:7;11402:6;11370:8;:39::i;:::-;11427:4;11420:11;;11270:169;;;;:::o;25210:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;24325:51::-;;;:::o;10223:108::-;10284:7;10311:12;;10304:19;;10223:108;:::o;30066:189::-;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30202:9:::1;;;;;;;;;;;30171:41;;30188:12;30171:41;;;;;;;;;;;;30235:12;30223:9;;:24;;;;;;;;;;;;;;;;;;30066:189:::0;:::o;28315:275::-;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28452:4:::1;28444;28439:1;28423:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28422:26;;;;:::i;:::-;28421:35;;;;:::i;:::-;28411:6;:45;;28389:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;28575:6;28565;:17;;;;:::i;:::-;28542:20;:40;;;;28315:275:::0;:::o;11921:492::-;12061:4;12078:36;12088:6;12096:9;12107:6;12078:9;:36::i;:::-;12127:24;12154:11;:19;12166:6;12154:19;;;;;;;;;;;;;;;:33;12174:12;:10;:12::i;:::-;12154:33;;;;;;;;;;;;;;;;12127:60;;12226:6;12206:16;:26;;12198:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12313:57;12322:6;12330:12;:10;:12::i;:::-;12363:6;12344:16;:25;12313:8;:57::i;:::-;12401:4;12394:11;;;11921:492;;;;;:::o;24428:53::-;24474:6;24428:53;:::o;10065:93::-;10123:5;10148:2;10141:9;;10065:93;:::o;24383:38::-;;;:::o;24739:33::-;;;;;;;;;;;;;:::o;30265:126::-;30331:4;30355:19;:28;30375:7;30355:28;;;;;;;;;;;;;;;;;;;;;;;;;30348:35;;30265:126;;;:::o;29233:309::-;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29363:7:::1;29351:9;:19;;;;29399:13;29381:15;:31;;;;29450:15;;29438:9;;:27;;;;:::i;:::-;29423:12;:42;;;;29500:1;29484:12;;:17;;29476:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29233:309:::0;;:::o;24963:28::-;;;;:::o;24819:31::-;;;;;;;;;;;;;:::o;10394:127::-;10468:7;10495:9;:18;10505:7;10495:18;;;;;;;;;;;;;;;;10488:25;;10394:127;;;:::o;2338:103::-;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2403:30:::1;2430:1;2403:18;:30::i;:::-;2338:103::o:0;27619:121::-;27671:4;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27705:5:::1;27688:14;;:22;;;;;;;;;;;;;;;;;;27728:4;27721:11;;27619:121:::0;:::o;28862:167::-;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29017:4:::1;28975:31;:39;29007:6;28975:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28862:167:::0;;:::o;24488:64::-;;;;;;;;;;;;;:::o;27455:112::-;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27526:4:::1;27510:13;;:20;;;;;;;;;;;;;;;;;;27555:4;27541:11;;:18;;;;;;;;;;;;;;;;;;27455:112::o:0;1687:87::-;1733:7;1760:6;;;;;;;;;;;1753:13;;1687:87;:::o;24591:24::-;;;;;;;;;;;;;:::o;29125:100::-;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29210:7:::1;29196:11;;:21;;;;;;;;;;;;;;;;;;29125:100:::0;:::o;9322:104::-;9378:13;9411:7;9404:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9322:104;:::o;24893:24::-;;;;:::o;24998:25::-;;;;:::o;10734:175::-;10820:4;10837:42;10847:12;:10;:12::i;:::-;10861:9;10872:6;10837:9;:42::i;:::-;10897:4;10890:11;;10734:175;;;;:::o;24779:33::-;;;;;;;;;;;;;:::o;29876:182::-;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29992:8:::1;29961:19;:28;29981:7;29961:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30032:7;30016:34;;;30041:8;30016:34;;;;;;:::i;:::-;;;;;;;;29876:182:::0;;:::o;28598:256::-;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28738:4:::1;28730;28725:1;28709:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28708:26;;;;:::i;:::-;28707:35;;;;:::i;:::-;28697:6;:45;;28675:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;28839:6;28829;:17;;;;:::i;:::-;28817:9;:29;;;;28598:256:::0;:::o;24624:35::-;;;;:::o;27810:497::-;27918:4;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27997:6:::1;27992:1;27976:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27975:28;;;;:::i;:::-;27962:9;:41;;27940:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;28152:4;28147:1;28131:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28130:26;;;;:::i;:::-;28117:9;:39;;28095:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;28268:9;28247:18;:30;;;;28295:4;28288:11;;27810:497:::0;;;:::o;24859:27::-;;;;:::o;10972:151::-;11061:7;11088:11;:18;11100:5;11088:18;;;;;;;;;;;;;;;:27;11107:7;11088:27;;;;;;;;;;;;;;;;11081:34;;10972:151;;;;:::o;24666:33::-;;;;:::o;24924:30::-;;;;:::o;2596:201::-;1918:12;:10;:12::i;:::-;1907:23;;:7;:5;:7::i;:::-;:23;;;1899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2705:1:::1;2685:22;;:8;:22;;;;2677:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2761:28;2780:8;2761:18;:28::i;:::-;2596:201:::0;:::o;25030:31::-;;;;:::o;24706:24::-;;;;:::o;360:98::-;413:7;440:10;433:17;;360:98;:::o;14762:380::-;14915:1;14898:19;;:5;:19;;;;14890:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14996:1;14977:21;;:7;:21;;;;14969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15080:6;15050:11;:18;15062:5;15050:18;;;;;;;;;;;;;;;:27;15069:7;15050:27;;;;;;;;;;;;;;;:36;;;;15118:7;15102:32;;15111:5;15102:32;;;15127:6;15102:32;;;;;;:::i;:::-;;;;;;;;14762:380;;;:::o;30399:3679::-;30547:1;30531:18;;:4;:18;;;;30523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30624:1;30610:16;;:2;:16;;;;30602:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30693:1;30683:6;:11;30679:93;;;30711:28;30727:4;30733:2;30737:1;30711:15;:28::i;:::-;30754:7;;30679:93;30788:14;;;;;;;;;;;30784:1430;;;30849:7;:5;:7::i;:::-;30841:15;;:4;:15;;;;:49;;;;;30883:7;:5;:7::i;:::-;30877:13;;:2;:13;;;;30841:49;:86;;;;;30925:1;30911:16;;:2;:16;;;;30841:86;:128;;;;;30962:6;30948:21;;:2;:21;;;;30841:128;:158;;;;;30991:8;;;;;;;;;;;30990:9;30841:158;30819:1384;;;31039:13;;;;;;;;;;;31034:223;;31111:19;:25;31131:4;31111:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31140:19;:23;31160:2;31140:23;;;;;;;;;;;;;;;;;;;;;;;;;31111:52;31077:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;31034:223;31471:13;31463:21;;:4;:21;;;:82;;;;;31510:31;:35;31542:2;31510:35;;;;;;;;;;;;;;;;;;;;;;;;;31509:36;31463:82;31437:751;;;31632:20;;31622:6;:30;;31588:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;31840:9;;31823:13;31833:2;31823:9;:13::i;:::-;31814:6;:22;;;;:::i;:::-;:35;;31780:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31437:751;;;31968:31;:35;32000:2;31968:35;;;;;;;;;;;;;;;;;;;;;;;;;31963:225;;32088:9;;32071:13;32081:2;32071:9;:13::i;:::-;32062:6;:22;;;;:::i;:::-;:35;;32028:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31963:225;31437:751;30819:1384;30784:1430;32226:28;32257:24;32275:4;32257:9;:24::i;:::-;32226:55;;32294:12;32333:18;;32309:20;:42;;32294:57;;32382:7;:35;;;;;32406:11;;;;;;;;;;;32382:35;:61;;;;;32435:8;;;;;;;;;;;32434:9;32382:61;:97;;;;;32466:13;32460:19;;:2;:19;;;32382:97;:140;;;;;32497:19;:25;32517:4;32497:25;;;;;;;;;;;;;;;;;;;;;;;;;32496:26;32382:140;:181;;;;;32540:19;:23;32560:2;32540:23;;;;;;;;;;;;;;;;;;;;;;;;;32539:24;32382:181;32364:313;;;32601:4;32590:8;;:15;;;;;;;;;;;;;;;;;;32622:10;:8;:10::i;:::-;32660:5;32649:8;;:16;;;;;;;;;;;;;;;;;;32364:313;32689:12;32705:8;;;;;;;;;;;32704:9;32689:24;;32815:19;:25;32835:4;32815:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32844:19;:23;32864:2;32844:23;;;;;;;;;;;;;;;;;;;;;;;;;32815:52;32811:100;;;32894:5;32884:15;;32811:100;32923:12;32950:26;32991:20;33104:7;33100:925;;;33162:13;33156:19;;:2;:19;;;:40;;;;;33195:1;33179:13;;:17;33156:40;33152:583;;;33224:34;33254:3;33224:25;33235:13;;33224:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;33217:41;;33326:13;;33306:16;;33299:4;:23;;;;:::i;:::-;33298:41;;;;:::i;:::-;33277:62;;33395:13;;33381:10;;33374:4;:17;;;;:::i;:::-;33373:35;;;;:::i;:::-;33358:50;;33152:583;;;33478:13;33470:21;;:4;:21;;;:41;;;;;33510:1;33495:12;;:16;33470:41;33466:269;;;33539:33;33568:3;33539:24;33550:12;;33539:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;33532:40;;33639:12;;33620:15;;33613:4;:22;;;;:::i;:::-;33612:39;;;;:::i;:::-;33591:60;;33707:12;;33694:9;;33687:4;:16;;;;:::i;:::-;33686:33;;;;:::i;:::-;33671:48;;33466:269;33152:583;33761:1;33755:4;:7;33751:90;;;33783:42;33799:4;33813;33820;33783:15;:42::i;:::-;33751:90;33880:1;33859:18;:22;33855:128;;;33902:65;33926:4;33933:13;33948:18;33902:15;:65::i;:::-;33855:128;34009:4;33999:14;;;;;:::i;:::-;;;33100:925;34037:33;34053:4;34059:2;34063:6;34037:15;:33::i;:::-;30512:3566;;;;;;30399:3679;;;;:::o;2957:191::-;3031:16;3050:6;;;;;;;;;;;3031:25;;3076:8;3067:6;;:17;;;;;;;;;;;;;;;;;;3131:8;3100:40;;3121:8;3100:40;;;;;;;;;;;;3020:128;2957:191;:::o;12903:733::-;13061:1;13043:20;;:6;:20;;;;13035:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13145:1;13124:23;;:9;:23;;;;13116:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13200:47;13221:6;13229:9;13240:6;13200:20;:47::i;:::-;13260:21;13284:9;:17;13294:6;13284:17;;;;;;;;;;;;;;;;13260:41;;13337:6;13320:13;:23;;13312:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13458:6;13442:13;:22;13422:9;:17;13432:6;13422:17;;;;;;;;;;;;;;;:42;;;;13510:6;13486:9;:20;13496:9;13486:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13551:9;13534:35;;13543:6;13534:35;;;13562:6;13534:35;;;;;;:::i;:::-;;;;;;;;13582:46;13602:6;13610:9;13621:6;13582:19;:46::i;:::-;13024:612;12903:733;;;:::o;34666:340::-;34705:23;34731:24;34749:4;34731:9;:24::i;:::-;34705:50;;34789:1;34770:15;:20;34766:59;;;34807:7;;;34766:59;34880:2;34859:18;;:23;;;;:::i;:::-;34841:15;:41;34837:115;;;34938:2;34917:18;;:23;;;;:::i;:::-;34899:41;;34837:115;34964:34;34982:15;34964:17;:34::i;:::-;34694:312;34666:340;:::o;20215:98::-;20273:7;20304:1;20300;:5;;;;:::i;:::-;20293:12;;20215:98;;;;:::o;20614:::-;20672:7;20703:1;20699;:5;;;;:::i;:::-;20692:12;;20614:98;;;;:::o;15742:125::-;;;;:::o;16471:124::-;;;;:::o;34086:572::-;34213:21;34251:1;34237:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34213:40;;34282:4;34264;34269:1;34264:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34308:4;;;;;;;;;;;34298;34303:1;34298:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;34325:62;34342:4;34357:15;34375:11;34325:8;:62::i;:::-;34426:15;:69;;;34510:11;34536:1;34581:4;34600:9;;;;;;;;;;;34624:15;34426:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34142:516;34086:572;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:152::-;4731:9;4764:37;4795:5;4764:37;:::i;:::-;4751:50;;4655:152;;;:::o;4813:183::-;4926:63;4983:5;4926:63;:::i;:::-;4921:3;4914:76;4813:183;;:::o;5002:274::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:97;5266:1;5255:9;5251:17;5242:6;5172:97;:::i;:::-;5002:274;;;;:::o;5282:118::-;5369:24;5387:5;5369:24;:::i;:::-;5364:3;5357:37;5282:118;;:::o;5406:222::-;5499:4;5537:2;5526:9;5522:18;5514:26;;5550:71;5618:1;5607:9;5603:17;5594:6;5550:71;:::i;:::-;5406:222;;;;:::o;5634:329::-;5693:6;5742:2;5730:9;5721:7;5717:23;5713:32;5710:119;;;5748:79;;:::i;:::-;5710:119;5868:1;5893:53;5938:7;5929:6;5918:9;5914:22;5893:53;:::i;:::-;5883:63;;5839:117;5634:329;;;;:::o;5969:619::-;6046:6;6054;6062;6111:2;6099:9;6090:7;6086:23;6082:32;6079:119;;;6117:79;;:::i;:::-;6079:119;6237:1;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6208:117;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;6492:2;6518:53;6563:7;6554:6;6543:9;6539:22;6518:53;:::i;:::-;6508:63;;6463:118;5969:619;;;;;:::o;6594:118::-;6681:24;6699:5;6681:24;:::i;:::-;6676:3;6669:37;6594:118;;:::o;6718:222::-;6811:4;6849:2;6838:9;6834:18;6826:26;;6862:71;6930:1;6919:9;6915:17;6906:6;6862:71;:::i;:::-;6718:222;;;;:::o;6946:86::-;6981:7;7021:4;7014:5;7010:16;6999:27;;6946:86;;;:::o;7038:112::-;7121:22;7137:5;7121:22;:::i;:::-;7116:3;7109:35;7038:112;;:::o;7156:214::-;7245:4;7283:2;7272:9;7268:18;7260:26;;7296:67;7360:1;7349:9;7345:17;7336:6;7296:67;:::i;:::-;7156:214;;;;:::o;7376:116::-;7446:21;7461:5;7446:21;:::i;:::-;7439:5;7436:32;7426:60;;7482:1;7479;7472:12;7426:60;7376:116;:::o;7498:133::-;7541:5;7579:6;7566:20;7557:29;;7595:30;7619:5;7595:30;:::i;:::-;7498:133;;;;:::o;7637:468::-;7702:6;7710;7759:2;7747:9;7738:7;7734:23;7730:32;7727:119;;;7765:79;;:::i;:::-;7727:119;7885:1;7910:53;7955:7;7946:6;7935:9;7931:22;7910:53;:::i;:::-;7900:63;;7856:117;8012:2;8038:50;8080:7;8071:6;8060:9;8056:22;8038:50;:::i;:::-;8028:60;;7983:115;7637:468;;;;;:::o;8111:323::-;8167:6;8216:2;8204:9;8195:7;8191:23;8187:32;8184:119;;;8222:79;;:::i;:::-;8184:119;8342:1;8367:50;8409:7;8400:6;8389:9;8385:22;8367:50;:::i;:::-;8357:60;;8313:114;8111:323;;;;:::o;8440:474::-;8508:6;8516;8565:2;8553:9;8544:7;8540:23;8536:32;8533:119;;;8571:79;;:::i;:::-;8533:119;8691:1;8716:53;8761:7;8752:6;8741:9;8737:22;8716:53;:::i;:::-;8706:63;;8662:117;8818:2;8844:53;8889:7;8880:6;8869:9;8865:22;8844:53;:::i;:::-;8834:63;;8789:118;8440:474;;;;;:::o;8920:182::-;9060:34;9056:1;9048:6;9044:14;9037:58;8920:182;:::o;9108:366::-;9250:3;9271:67;9335:2;9330:3;9271:67;:::i;:::-;9264:74;;9347:93;9436:3;9347:93;:::i;:::-;9465:2;9460:3;9456:12;9449:19;;9108:366;;;:::o;9480:419::-;9646:4;9684:2;9673:9;9669:18;9661:26;;9733:9;9727:4;9723:20;9719:1;9708:9;9704:17;9697:47;9761:131;9887:4;9761:131;:::i;:::-;9753:139;;9480:419;;;:::o;9905:180::-;9953:77;9950:1;9943:88;10050:4;10047:1;10040:15;10074:4;10071:1;10064:15;10091:305;10131:3;10150:20;10168:1;10150:20;:::i;:::-;10145:25;;10184:20;10202:1;10184:20;:::i;:::-;10179:25;;10338:1;10270:66;10266:74;10263:1;10260:81;10257:107;;;10344:18;;:::i;:::-;10257:107;10388:1;10385;10381:9;10374:16;;10091:305;;;;:::o;10402:178::-;10542:30;10538:1;10530:6;10526:14;10519:54;10402:178;:::o;10586:366::-;10728:3;10749:67;10813:2;10808:3;10749:67;:::i;:::-;10742:74;;10825:93;10914:3;10825:93;:::i;:::-;10943:2;10938:3;10934:12;10927:19;;10586:366;;;:::o;10958:419::-;11124:4;11162:2;11151:9;11147:18;11139:26;;11211:9;11205:4;11201:20;11197:1;11186:9;11182:17;11175:47;11239:131;11365:4;11239:131;:::i;:::-;11231:139;;10958:419;;;:::o;11383:180::-;11431:77;11428:1;11421:88;11528:4;11525:1;11518:15;11552:4;11549:1;11542:15;11569:320;11613:6;11650:1;11644:4;11640:12;11630:22;;11697:1;11691:4;11687:12;11718:18;11708:81;;11774:4;11766:6;11762:17;11752:27;;11708:81;11836:2;11828:6;11825:14;11805:18;11802:38;11799:84;;;11855:18;;:::i;:::-;11799:84;11620:269;11569:320;;;:::o;11895:348::-;11935:7;11958:20;11976:1;11958:20;:::i;:::-;11953:25;;11992:20;12010:1;11992:20;:::i;:::-;11987:25;;12180:1;12112:66;12108:74;12105:1;12102:81;12097:1;12090:9;12083:17;12079:105;12076:131;;;12187:18;;:::i;:::-;12076:131;12235:1;12232;12228:9;12217:20;;11895:348;;;;:::o;12249:180::-;12297:77;12294:1;12287:88;12394:4;12391:1;12384:15;12418:4;12415:1;12408:15;12435:185;12475:1;12492:20;12510:1;12492:20;:::i;:::-;12487:25;;12526:20;12544:1;12526:20;:::i;:::-;12521:25;;12565:1;12555:35;;12570:18;;:::i;:::-;12555:35;12612:1;12609;12605:9;12600:14;;12435:185;;;;:::o;12626:234::-;12766:34;12762:1;12754:6;12750:14;12743:58;12835:17;12830:2;12822:6;12818:15;12811:42;12626:234;:::o;12866:366::-;13008:3;13029:67;13093:2;13088:3;13029:67;:::i;:::-;13022:74;;13105:93;13194:3;13105:93;:::i;:::-;13223:2;13218:3;13214:12;13207:19;;12866:366;;;:::o;13238:419::-;13404:4;13442:2;13431:9;13427:18;13419:26;;13491:9;13485:4;13481:20;13477:1;13466:9;13462:17;13455:47;13519:131;13645:4;13519:131;:::i;:::-;13511:139;;13238:419;;;:::o;13663:227::-;13803:34;13799:1;13791:6;13787:14;13780:58;13872:10;13867:2;13859:6;13855:15;13848:35;13663:227;:::o;13896:366::-;14038:3;14059:67;14123:2;14118:3;14059:67;:::i;:::-;14052:74;;14135:93;14224:3;14135:93;:::i;:::-;14253:2;14248:3;14244:12;14237:19;;13896:366;;;:::o;14268:419::-;14434:4;14472:2;14461:9;14457:18;14449:26;;14521:9;14515:4;14511:20;14507:1;14496:9;14492:17;14485:47;14549:131;14675:4;14549:131;:::i;:::-;14541:139;;14268:419;;;:::o;14693:223::-;14833:34;14829:1;14821:6;14817:14;14810:58;14902:6;14897:2;14889:6;14885:15;14878:31;14693:223;:::o;14922:366::-;15064:3;15085:67;15149:2;15144:3;15085:67;:::i;:::-;15078:74;;15161:93;15250:3;15161:93;:::i;:::-;15279:2;15274:3;15270:12;15263:19;;14922:366;;;:::o;15294:419::-;15460:4;15498:2;15487:9;15483:18;15475:26;;15547:9;15541:4;15537:20;15533:1;15522:9;15518:17;15511:47;15575:131;15701:4;15575:131;:::i;:::-;15567:139;;15294:419;;;:::o;15719:240::-;15859:34;15855:1;15847:6;15843:14;15836:58;15928:23;15923:2;15915:6;15911:15;15904:48;15719:240;:::o;15965:366::-;16107:3;16128:67;16192:2;16187:3;16128:67;:::i;:::-;16121:74;;16204:93;16293:3;16204:93;:::i;:::-;16322:2;16317:3;16313:12;16306:19;;15965:366;;;:::o;16337:419::-;16503:4;16541:2;16530:9;16526:18;16518:26;;16590:9;16584:4;16580:20;16576:1;16565:9;16561:17;16554:47;16618:131;16744:4;16618:131;:::i;:::-;16610:139;;16337:419;;;:::o;16762:239::-;16902:34;16898:1;16890:6;16886:14;16879:58;16971:22;16966:2;16958:6;16954:15;16947:47;16762:239;:::o;17007:366::-;17149:3;17170:67;17234:2;17229:3;17170:67;:::i;:::-;17163:74;;17246:93;17335:3;17246:93;:::i;:::-;17364:2;17359:3;17355:12;17348:19;;17007:366;;;:::o;17379:419::-;17545:4;17583:2;17572:9;17568:18;17560:26;;17632:9;17626:4;17622:20;17618:1;17607:9;17603:17;17596:47;17660:131;17786:4;17660:131;:::i;:::-;17652:139;;17379:419;;;:::o;17804:225::-;17944:34;17940:1;17932:6;17928:14;17921:58;18013:8;18008:2;18000:6;17996:15;17989:33;17804:225;:::o;18035:366::-;18177:3;18198:67;18262:2;18257:3;18198:67;:::i;:::-;18191:74;;18274:93;18363:3;18274:93;:::i;:::-;18392:2;18387:3;18383:12;18376:19;;18035:366;;;:::o;18407:419::-;18573:4;18611:2;18600:9;18596:18;18588:26;;18660:9;18654:4;18650:20;18646:1;18635:9;18631:17;18624:47;18688:131;18814:4;18688:131;:::i;:::-;18680:139;;18407:419;;;:::o;18832:223::-;18972:34;18968:1;18960:6;18956:14;18949:58;19041:6;19036:2;19028:6;19024:15;19017:31;18832:223;:::o;19061:366::-;19203:3;19224:67;19288:2;19283:3;19224:67;:::i;:::-;19217:74;;19300:93;19389:3;19300:93;:::i;:::-;19418:2;19413:3;19409:12;19402:19;;19061:366;;;:::o;19433:419::-;19599:4;19637:2;19626:9;19622:18;19614:26;;19686:9;19680:4;19676:20;19672:1;19661:9;19657:17;19650:47;19714:131;19840:4;19714:131;:::i;:::-;19706:139;;19433:419;;;:::o;19858:221::-;19998:34;19994:1;19986:6;19982:14;19975:58;20067:4;20062:2;20054:6;20050:15;20043:29;19858:221;:::o;20085:366::-;20227:3;20248:67;20312:2;20307:3;20248:67;:::i;:::-;20241:74;;20324:93;20413:3;20324:93;:::i;:::-;20442:2;20437:3;20433:12;20426:19;;20085:366;;;:::o;20457:419::-;20623:4;20661:2;20650:9;20646:18;20638:26;;20710:9;20704:4;20700:20;20696:1;20685:9;20681:17;20674:47;20738:131;20864:4;20738:131;:::i;:::-;20730:139;;20457:419;;;:::o;20882:224::-;21022:34;21018:1;21010:6;21006:14;20999:58;21091:7;21086:2;21078:6;21074:15;21067:32;20882:224;:::o;21112:366::-;21254:3;21275:67;21339:2;21334:3;21275:67;:::i;:::-;21268:74;;21351:93;21440:3;21351:93;:::i;:::-;21469:2;21464:3;21460:12;21453:19;;21112:366;;;:::o;21484:419::-;21650:4;21688:2;21677:9;21673:18;21665:26;;21737:9;21731:4;21727:20;21723:1;21712:9;21708:17;21701:47;21765:131;21891:4;21765:131;:::i;:::-;21757:139;;21484:419;;;:::o;21909:222::-;22049:34;22045:1;22037:6;22033:14;22026:58;22118:5;22113:2;22105:6;22101:15;22094:30;21909:222;:::o;22137:366::-;22279:3;22300:67;22364:2;22359:3;22300:67;:::i;:::-;22293:74;;22376:93;22465:3;22376:93;:::i;:::-;22494:2;22489:3;22485:12;22478:19;;22137:366;;;:::o;22509:419::-;22675:4;22713:2;22702:9;22698:18;22690:26;;22762:9;22756:4;22752:20;22748:1;22737:9;22733:17;22726:47;22790:131;22916:4;22790:131;:::i;:::-;22782:139;;22509:419;;;:::o;22934:172::-;23074:24;23070:1;23062:6;23058:14;23051:48;22934:172;:::o;23112:366::-;23254:3;23275:67;23339:2;23334:3;23275:67;:::i;:::-;23268:74;;23351:93;23440:3;23351:93;:::i;:::-;23469:2;23464:3;23460:12;23453:19;;23112:366;;;:::o;23484:419::-;23650:4;23688:2;23677:9;23673:18;23665:26;;23737:9;23731:4;23727:20;23723:1;23712:9;23708:17;23701:47;23765:131;23891:4;23765:131;:::i;:::-;23757:139;;23484:419;;;:::o;23909:240::-;24049:34;24045:1;24037:6;24033:14;24026:58;24118:23;24113:2;24105:6;24101:15;24094:48;23909:240;:::o;24155:366::-;24297:3;24318:67;24382:2;24377:3;24318:67;:::i;:::-;24311:74;;24394:93;24483:3;24394:93;:::i;:::-;24512:2;24507:3;24503:12;24496:19;;24155:366;;;:::o;24527:419::-;24693:4;24731:2;24720:9;24716:18;24708:26;;24780:9;24774:4;24770:20;24766:1;24755:9;24751:17;24744:47;24808:131;24934:4;24808:131;:::i;:::-;24800:139;;24527:419;;;:::o;24952:169::-;25092:21;25088:1;25080:6;25076:14;25069:45;24952:169;:::o;25127:366::-;25269:3;25290:67;25354:2;25349:3;25290:67;:::i;:::-;25283:74;;25366:93;25455:3;25366:93;:::i;:::-;25484:2;25479:3;25475:12;25468:19;;25127:366;;;:::o;25499:419::-;25665:4;25703:2;25692:9;25688:18;25680:26;;25752:9;25746:4;25742:20;25738:1;25727:9;25723:17;25716:47;25780:131;25906:4;25780:131;:::i;:::-;25772:139;;25499:419;;;:::o;25924:191::-;25964:4;25984:20;26002:1;25984:20;:::i;:::-;25979:25;;26018:20;26036:1;26018:20;:::i;:::-;26013:25;;26057:1;26054;26051:8;26048:34;;;26062:18;;:::i;:::-;26048:34;26107:1;26104;26100:9;26092:17;;25924:191;;;;:::o;26121:225::-;26261:34;26257:1;26249:6;26245:14;26238:58;26330:8;26325:2;26317:6;26313:15;26306:33;26121:225;:::o;26352:366::-;26494:3;26515:67;26579:2;26574:3;26515:67;:::i;:::-;26508:74;;26591:93;26680:3;26591:93;:::i;:::-;26709:2;26704:3;26700:12;26693:19;;26352:366;;;:::o;26724:419::-;26890:4;26928:2;26917:9;26913:18;26905:26;;26977:9;26971:4;26967:20;26963:1;26952:9;26948:17;26941:47;27005:131;27131:4;27005:131;:::i;:::-;26997:139;;26724:419;;;:::o;27149:180::-;27197:77;27194:1;27187:88;27294:4;27291:1;27284:15;27318:4;27315:1;27308:15;27335:180;27383:77;27380:1;27373:88;27480:4;27477:1;27470:15;27504:4;27501:1;27494:15;27521:85;27566:7;27595:5;27584:16;;27521:85;;;:::o;27612:158::-;27670:9;27703:61;27721:42;27730:32;27756:5;27730:32;:::i;:::-;27721:42;:::i;:::-;27703:61;:::i;:::-;27690:74;;27612:158;;;:::o;27776:147::-;27871:45;27910:5;27871:45;:::i;:::-;27866:3;27859:58;27776:147;;:::o;27929:114::-;27996:6;28030:5;28024:12;28014:22;;27929:114;;;:::o;28049:184::-;28148:11;28182:6;28177:3;28170:19;28222:4;28217:3;28213:14;28198:29;;28049:184;;;;:::o;28239:132::-;28306:4;28329:3;28321:11;;28359:4;28354:3;28350:14;28342:22;;28239:132;;;:::o;28377:108::-;28454:24;28472:5;28454:24;:::i;:::-;28449:3;28442:37;28377:108;;:::o;28491:179::-;28560:10;28581:46;28623:3;28615:6;28581:46;:::i;:::-;28659:4;28654:3;28650:14;28636:28;;28491:179;;;;:::o;28676:113::-;28746:4;28778;28773:3;28769:14;28761:22;;28676:113;;;:::o;28825:732::-;28944:3;28973:54;29021:5;28973:54;:::i;:::-;29043:86;29122:6;29117:3;29043:86;:::i;:::-;29036:93;;29153:56;29203:5;29153:56;:::i;:::-;29232:7;29263:1;29248:284;29273:6;29270:1;29267:13;29248:284;;;29349:6;29343:13;29376:63;29435:3;29420:13;29376:63;:::i;:::-;29369:70;;29462:60;29515:6;29462:60;:::i;:::-;29452:70;;29308:224;29295:1;29292;29288:9;29283:14;;29248:284;;;29252:14;29548:3;29541:10;;28949:608;;;28825:732;;;;:::o;29563:831::-;29826:4;29864:3;29853:9;29849:19;29841:27;;29878:71;29946:1;29935:9;29931:17;29922:6;29878:71;:::i;:::-;29959:80;30035:2;30024:9;30020:18;30011:6;29959:80;:::i;:::-;30086:9;30080:4;30076:20;30071:2;30060:9;30056:18;30049:48;30114:108;30217:4;30208:6;30114:108;:::i;:::-;30106:116;;30232:72;30300:2;30289:9;30285:18;30276:6;30232:72;:::i;:::-;30314:73;30382:3;30371:9;30367:19;30358:6;30314:73;:::i;:::-;29563:831;;;;;;;;:::o
Swarm Source
ipfs://186c7810e2b4ddc395d538656f4bce209bd6c75f32aab0cada790cbbc079e7cd
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.