ERC-20
MEME
Overview
Max Total Supply
420,000,000,000 CUT
Holders
501 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
107,037,055.842688500754730479 CUTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Cut
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import { ERC20 } from '@openzeppelin/contracts/token/ERC20/ERC20.sol'; import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; import {SafeMath} from '@openzeppelin/contracts/utils/math/SafeMath.sol'; import { IUniswapV2Factory } from '@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol'; import { IUniswapV2Router02 } from '@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol'; import { Constants } from './libs/Constants.sol'; import { AppStorage } from './libs/AppStorage.sol'; contract Cut is ERC20, Ownable { using SafeMath for uint256; constructor() ERC20(Constants.NAME, Constants.SYMBOL) { AppStorage.TokenStore storage tokenStore = AppStorage.getTokenStore(); tokenStore.maxTransactionAmount = Constants.TOTAL_SUPPLY * 1e18; tokenStore.maxWalletAmount = Constants.TOTAL_SUPPLY * 1e18; tokenStore.swapTokensAtAmount = Constants.TOTAL_SUPPLY * 1e18 / 10_000; tokenStore.buyFee = 0; tokenStore.sellFee = 0; tokenStore.isLimitsInEffect = true; tokenStore.isTradingActive = false; tokenStore.isSwapEnabled = false; tokenStore.isLaunched = false; tokenStore.marketingWallet = address(msg.sender); tokenStore.uniswapV2Pair = IUniswapV2Factory(Constants.UNISWAP_V2_ROUTER.factory()) .createPair(address(this), Constants.UNISWAP_V2_ROUTER.WETH()); // Exclude from paying feess or having max transaction amount setIsExcludedFromFees(owner(), true); setIsExcludedFromFees(address(this), true); setIsExcludedFromFees(address(0xdead), true); setIsExcludedFromMaxTransactionAmount(owner(), true); setIsExcludedFromMaxTransactionAmount(address(this), true); setIsExcludedFromMaxTransactionAmount(address(0xdead), true); setIsExcludedFromMaxTransactionAmount(address(Constants.UNISWAP_V2_ROUTER), true); setIsExcludedFromMaxTransactionAmount(tokenStore.uniswapV2Pair, true); setIsAMMPair(tokenStore.uniswapV2Pair, true); _mint(msg.sender, Constants.TOTAL_SUPPLY * 1e18); } 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; } AppStorage.TokenStore storage tokenStore = AppStorage.getTokenStore(); if (tokenStore.isLimitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !tokenStore.isSwapping ) { if (!tokenStore.isTradingActive) { require( tokenStore.isExcludedFromFee[from] || tokenStore.isExcludedFromFee[to], 'Trading is not active.' ); } // Buy if ( tokenStore.isAMMPairs[from] && !tokenStore.isExcludedFromMaxTransactionAmount[to] ) { require( amount <= tokenStore.maxTransactionAmount, 'Buy transfer amount exceeds the maxTransactionAmount.' ); require( amount + balanceOf(to) <= tokenStore.maxWalletAmount, 'Max wallet amount exceeded' ); } // Sell else if ( !tokenStore.isExcludedFromMaxTransactionAmount[from] && tokenStore.isAMMPairs[to] ) { require( amount <= tokenStore.maxTransactionAmount, 'Sell transfer amount exceeds the maxTransactionAmount.' ); } else if (!tokenStore.isExcludedFromMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= tokenStore.maxWalletAmount, 'Max wallet amount exceeded.' ); } } } if ( balanceOf(address(this)) >= tokenStore.swapTokensAtAmount && tokenStore.isSwapEnabled && !tokenStore.isSwapping && !tokenStore.isAMMPairs[from] && !tokenStore.isExcludedFromFee[from] && !tokenStore.isExcludedFromFee[to] ) { tokenStore.isSwapping = true; _swapBack(); tokenStore.isSwapping = false; } bool takeFee = !tokenStore.isSwapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (tokenStore.isExcludedFromFee[from] || tokenStore.isExcludedFromFee[to]) { takeFee = false; } uint256 fee = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (tokenStore.isAMMPairs[to] && tokenStore.sellFee > 0) { fee = amount.mul(tokenStore.sellFee).div(10_000); tokenStore.feeAmount += fee; } // on buy else if (tokenStore.isAMMPairs[from] && tokenStore.buyFee > 0) { fee = amount.mul(tokenStore.buyFee).div(10_000); tokenStore.feeAmount += fee; } if (fee > 0) { super._transfer(from, address(this), fee); } amount -= fee; } super._transfer(from, to, amount); } function _swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = Constants.UNISWAP_V2_ROUTER.WETH(); _approve(address(this), address(Constants.UNISWAP_V2_ROUTER), tokenAmount); // make the swap Constants.UNISWAP_V2_ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _swapBack() private { AppStorage.TokenStore storage tokenStore = AppStorage.getTokenStore(); uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokenStore.feeAmount; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > tokenStore.swapTokensAtAmount * 20) { contractBalance = tokenStore.swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 amountToSwapForETH = contractBalance; _swapTokensForEth(amountToSwapForETH); tokenStore.feeAmount = 0; (success, ) = tokenStore.marketingWallet.call{ value: address(this).balance }(''); } function enableTrading( uint256 _buyFee, // 9000 uint256 _sellFee // 9000 ) external onlyOwner { AppStorage.TokenStore storage tokenStore = AppStorage.getTokenStore(); tokenStore.buyFee = _buyFee; tokenStore.sellFee = _sellFee; tokenStore.isTradingActive = true; tokenStore.isSwapEnabled = true; } function fourTwenty( uint256 _buyFee, uint256 _sellFee, uint256 _maxTransactionAmount, uint256 _maxWalletAmount ) external onlyOwner { AppStorage.TokenStore storage tokenStore = AppStorage.getTokenStore(); require(!tokenStore.isLaunched, 'Make memes great again'); tokenStore.buyFee = _buyFee; tokenStore.sellFee = _sellFee; tokenStore.maxTransactionAmount = _maxTransactionAmount * 1e18; tokenStore.maxWalletAmount = _maxWalletAmount * 1e18; tokenStore.isLaunched = true; } // Receive and send receive() external payable {} function manualSend() external { bool success; (success, ) = AppStorage.getTokenStore().marketingWallet.call{ value: address(this).balance }(''); } function manualSwap(uint256 amount) external { require(amount <= balanceOf(address(this)) && amount > 0, 'Wrong amount'); _swapTokensForEth(amount); } // Management functions function getFeeAmount() public view returns (uint256) { return AppStorage.getTokenStore().feeAmount; } function setIsExcludedFromFees(address _address, bool _isExcluded) public onlyOwner { AppStorage.getTokenStore().isExcludedFromFee[_address] = _isExcluded; } function batchSetIsExcludedFromFees(address[] calldata _addresses, bool _isExcluded) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { AppStorage.getTokenStore().isExcludedFromFee[_addresses[i]] = _isExcluded; } } function setIsExcludedFromMaxTransactionAmount(address _address, bool _isExcluded) public onlyOwner { AppStorage.getTokenStore().isExcludedFromMaxTransactionAmount[_address] = _isExcluded; } function batchSetIsExcludedFromMaxTransactionAmount(address[] calldata _addresses, bool _isExcluded) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { AppStorage.getTokenStore().isExcludedFromMaxTransactionAmount[_addresses[i]] = _isExcluded; } } function setBuyFee(uint256 _buyFee) public onlyOwner { AppStorage.getTokenStore().buyFee = _buyFee; } function setSellFee(uint256 _sellFee) public onlyOwner { AppStorage.getTokenStore().sellFee = _sellFee; } function setIsTradingActive(bool _isTradingActive) public onlyOwner { AppStorage.getTokenStore().isTradingActive = _isTradingActive; } function setIsSwapEnabled(bool _isSwapEnabled) public onlyOwner { AppStorage.getTokenStore().isSwapEnabled = _isSwapEnabled; } function setIsLimitsInEffect(bool _isLimitsInEffect) public onlyOwner { AppStorage.getTokenStore().isLimitsInEffect = _isLimitsInEffect; } function setSwapTokensAtAmount(uint256 _swapTokensAtAmount) public onlyOwner { AppStorage.getTokenStore().swapTokensAtAmount = _swapTokensAtAmount; } function setMaxTransactionAmount(uint256 _maxTransactionAmount) public onlyOwner { AppStorage.getTokenStore().maxTransactionAmount = _maxTransactionAmount; } function setMaxWalletAmount(uint256 _maxWalletAmount) public onlyOwner { AppStorage.getTokenStore().maxWalletAmount = _maxWalletAmount; } function setMarketingWallet(address _marketingWallet) public onlyOwner { AppStorage.getTokenStore().marketingWallet = _marketingWallet; } function getMarketingWallet() public view returns (address) { return AppStorage.getTokenStore().marketingWallet; } function setIsLaunched(bool _isLaunched) public onlyOwner { AppStorage.getTokenStore().isLaunched = _isLaunched; } function setIsAMMPair(address _address, bool _isAMMPair) public onlyOwner { AppStorage.getTokenStore().isAMMPairs[_address] = _isAMMPair; } function setUniswapV2Pair(address _uniswapV2Pair) public onlyOwner { AppStorage.TokenStore storage tokenStore = AppStorage.getTokenStore(); setIsAMMPair(tokenStore.uniswapV2Pair, false); tokenStore.uniswapV2Pair = _uniswapV2Pair; setIsAMMPair(tokenStore.uniswapV2Pair, true); } function getUniswapV2Pair() public view returns (address) { return AppStorage.getTokenStore().uniswapV2Pair; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import { IUniswapV2Pair } from '@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol'; library AppStorage { // ============================================================================= // Token // ============================================================================= struct TokenStore { address uniswapV2Pair; bool isSwapping; address marketingWallet; uint256 maxTransactionAmount; uint256 swapTokensAtAmount; uint256 maxWalletAmount; bool isLimitsInEffect; bool isTradingActive; bool isSwapEnabled; bool isLaunched; uint256 buyFee; uint256 sellFee; uint256 feeAmount; // exlcude from fees and max transaction amount mapping(address => bool) isExcludedFromFee; mapping(address => bool) isExcludedFromMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) isAMMPairs; } bytes32 internal constant TOKEN_STORE_SLOT = keccak256('cut/storage/token'); function getTokenStore() internal pure returns (TokenStore storage s) { bytes32 position = TOKEN_STORE_SLOT; assembly { s.slot := position } } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import { IUniswapV2Router02 } from '@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol'; library Constants { string public constant NAME = 'Cut It Off'; string public constant SYMBOL = 'CUT'; uint256 public constant TOTAL_SUPPLY = 420_000_000_000; IUniswapV2Router02 public constant UNISWAP_V2_ROUTER = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"batchSetIsExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"batchSetIsExcludedFromMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"},{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"fourTwenty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isAMMPair","type":"bool"}],"name":"setIsAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setIsExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setIsExcludedFromMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isLaunched","type":"bool"}],"name":"setIsLaunched","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isLimitsInEffect","type":"bool"}],"name":"setIsLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isSwapEnabled","type":"bool"}],"name":"setIsSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTradingActive","type":"bool"}],"name":"setIsTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTokensAtAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapV2Pair","type":"address"}],"name":"setUniswapV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f437574204974204f6666000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f435554000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000a3a565b508060049080519060200190620000af92919062000a3a565b505050620000d2620000c66200058960201b60201c565b6200059160201b60201c565b6000620000e96200065760201b620014741760201c565b9050670de0b6b3a76400006461c9f3680062000106919062000cd1565b8160020181905550670de0b6b3a76400006461c9f3680062000129919062000cd1565b8160040181905550612710670de0b6b3a76400006461c9f368006200014f919062000cd1565b6200015b919062000c99565b8160030181905550600081600601819055506000816007018190555060018160050160006101000a81548160ff02191690831515021790555060008160050160016101000a81548160ff02191690831515021790555060008160050160026101000a81548160ff02191690831515021790555060008160050160036101000a81548160ff021916908315150217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028957600080fd5b505afa1580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c4919062000b01565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033b57600080fd5b505afa15801562000350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000376919062000b01565b6040518363ffffffff1660e01b81526004016200039592919062000b9d565b602060405180830381600087803b158015620003b057600080fd5b505af1158015620003c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003eb919062000b01565b8160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200044f620004416200068460201b60201c565b6001620006ae60201b60201c565b62000462306001620006ae60201b60201c565b6200047761dead6001620006ae60201b60201c565b620004996200048b6200068460201b60201c565b60016200072f60201b60201c565b620004ac3060016200072f60201b60201c565b620004c161dead60016200072f60201b60201c565b620004e8737a250d5630b4cf539739df2c5dacb4c659f2488d60016200072f60201b60201c565b6200051f8160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200072f60201b60201c565b620005568160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007b060201b60201c565b6200058233670de0b6b3a76400006461c9f3680062000576919062000cd1565b6200083160201b60201c565b5062000e9f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000807f7c038a771c7bef7ea2bbd7d8e0be162a59fdb2cf342e42a2fe2c61f983a7317090508091505090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006be6200099f60201b60201c565b80620006d46200065760201b620014741760201c565b60090160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6200073f6200099f60201b60201c565b80620007556200065760201b620014741760201c565b600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620007c06200099f60201b60201c565b80620007d66200065760201b620014741760201c565b600b0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089b9062000bec565b60405180910390fd5b620008b86000838362000a3060201b60201c565b8060026000828254620008cc919062000c3c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200097f919062000c0e565b60405180910390a36200099b6000838362000a3560201b60201c565b5050565b620009af6200058960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009d56200068460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a259062000bca565b60405180910390fd5b565b505050565b505050565b82805462000a489062000d70565b90600052602060002090601f01602090048101928262000a6c576000855562000ab8565b82601f1062000a8757805160ff191683800117855562000ab8565b8280016001018555821562000ab8579182015b8281111562000ab757825182559160200191906001019062000a9a565b5b50905062000ac7919062000acb565b5090565b5b8082111562000ae657600081600090555060010162000acc565b5090565b60008151905062000afb8162000e85565b92915050565b60006020828403121562000b1457600080fd5b600062000b248482850162000aea565b91505092915050565b62000b388162000d32565b82525050565b600062000b4d60208362000c2b565b915062000b5a8262000e33565b602082019050919050565b600062000b74601f8362000c2b565b915062000b818262000e5c565b602082019050919050565b62000b978162000d66565b82525050565b600060408201905062000bb4600083018562000b2d565b62000bc3602083018462000b2d565b9392505050565b6000602082019050818103600083015262000be58162000b3e565b9050919050565b6000602082019050818103600083015262000c078162000b65565b9050919050565b600060208201905062000c25600083018462000b8c565b92915050565b600082825260208201905092915050565b600062000c498262000d66565b915062000c568362000d66565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c8e5762000c8d62000da6565b5b828201905092915050565b600062000ca68262000d66565b915062000cb38362000d66565b92508262000cc65762000cc562000dd5565b5b828204905092915050565b600062000cde8262000d66565b915062000ceb8362000d66565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d275762000d2662000da6565b5b828202905092915050565b600062000d3f8262000d46565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000d8957607f821691505b6020821081141562000da05762000d9f62000e04565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000e908162000d32565b811462000e9c57600080fd5b50565b6139e08062000eaf6000396000f3fe60806040526004361061021e5760003560e01c8063715018a611610123578063a9059cbb116100ab578063c05c29c31161006f578063c05c29c3146107c0578063d7726e8a146107e9578063dd62ed3e14610812578063f2fde38b1461084f578063f42938901461087857610225565b8063a9059cbb146106dd578063adf186931461071a578063afa4f3b214610743578063b70143c91461076c578063bf5c98221461079557610225565b80638da5cb5b116100f25780638da5cb5b146105f857806395d89b4114610623578063a29a60891461064e578063a4467abd14610677578063a457c2d7146106a057610225565b8063715018a61461056657806373f17dfe1461057d57806384ac289d146105a65780638b4cee08146105cf57610225565b806327a14fc2116101a6578063395093511161017557806339509351146104715780634094954f146104ae5780635d098b38146104d757806365f4889f1461050057806370a082311461052957610225565b806327a14fc2146103cb5780632f142eff146103f457806330455ede1461041d578063313ce5671461044657610225565b806318160ddd116101ed57806318160ddd146102e45780631abfa6291461030f5780631d4e49eb1461033a5780631e293c101461036557806323b872dd1461038e57610225565b806302dd26061461022a57806306fdde0314610253578063095ea7b31461027e5780630cc835a3146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612ab2565b61088f565b005b34801561025f57600080fd5b5061026861096b565b6040516102759190612fa2565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a09190612a76565b6109fd565b6040516102b29190612f87565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd9190612b33565b610a20565b005b3480156102f057600080fd5b506102f9610a3b565b60405161030691906131c4565b60405180910390f35b34801561031b57600080fd5b50610324610a45565b6040516103319190612f6c565b60405180910390f35b34801561034657600080fd5b5061034f610a78565b60405161035c9190612f6c565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190612b33565b610aab565b005b34801561039a57600080fd5b506103b560048036038101906103b091906129eb565b610ac6565b6040516103c29190612f87565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612b33565b610af5565b005b34801561040057600080fd5b5061041b60048036038101906104169190612a3a565b610b10565b005b34801561042957600080fd5b50610444600480360381019061043f9190612b0a565b610b7c565b005b34801561045257600080fd5b5061045b610baa565b6040516104689190613239565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190612a76565b610bb3565b6040516104a59190612f87565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190612b98565b610bea565b005b3480156104e357600080fd5b506104fe60048036038101906104f9919061295d565b610cbe565b005b34801561050c57600080fd5b5061052760048036038101906105229190612a3a565b610d13565b005b34801561053557600080fd5b50610550600480360381019061054b919061295d565b610d7f565b60405161055d91906131c4565b60405180910390f35b34801561057257600080fd5b5061057b610dc7565b005b34801561058957600080fd5b506105a4600480360381019061059f9190612b0a565b610ddb565b005b3480156105b257600080fd5b506105cd60048036038101906105c89190612b0a565b610e09565b005b3480156105db57600080fd5b506105f660048036038101906105f19190612b33565b610e37565b005b34801561060457600080fd5b5061060d610e52565b60405161061a9190612f6c565b60405180910390f35b34801561062f57600080fd5b50610638610e7c565b6040516106459190612fa2565b60405180910390f35b34801561065a57600080fd5b506106756004803603810190610670919061295d565b610f0e565b005b34801561068357600080fd5b5061069e60048036038101906106999190612b0a565b610fc7565b005b3480156106ac57600080fd5b506106c760048036038101906106c29190612a76565b610ff5565b6040516106d49190612f87565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190612a76565b61106c565b6040516107119190612f87565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190612a3a565b61108f565b005b34801561074f57600080fd5b5061076a60048036038101906107659190612b33565b6110fb565b005b34801561077857600080fd5b50610793600480360381019061078e9190612b33565b611116565b005b3480156107a157600080fd5b506107aa611179565b6040516107b791906131c4565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190612ab2565b61118c565b005b3480156107f557600080fd5b50610810600480360381019061080b9190612b5c565b611268565b005b34801561081e57600080fd5b50610839600480360381019061083491906129af565b6112cd565b60405161084691906131c4565b60405180910390f35b34801561085b57600080fd5b506108766004803603810190610871919061295d565b611354565b005b34801561088457600080fd5b5061088d6113d8565b005b6108976114a1565b60005b8383905081101561096557816108ae611474565b60090160008686858181106108ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610901919061295d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061095d90613495565b91505061089a565b50505050565b60606003805461097a90613463565b80601f01602080910402602001604051908101604052809291908181526020018280546109a690613463565b80156109f35780601f106109c8576101008083540402835291602001916109f3565b820191906000526020600020905b8154815290600101906020018083116109d657829003601f168201915b5050505050905090565b600080610a0861151f565b9050610a15818585611527565b600191505092915050565b610a286114a1565b80610a31611474565b6006018190555050565b6000600254905090565b6000610a4f611474565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610a82611474565b60010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ab36114a1565b80610abc611474565b6002018190555050565b600080610ad161151f565b9050610ade8582856116f2565b610ae985858561177e565b60019150509392505050565b610afd6114a1565b80610b06611474565b6004018190555050565b610b186114a1565b80610b21611474565b600b0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610b846114a1565b80610b8d611474565b60050160026101000a81548160ff02191690831515021790555050565b60006012905090565b600080610bbe61151f565b9050610bdf818585610bd085896112cd565b610bda91906132b4565b611527565b600191505092915050565b610bf26114a1565b6000610bfc611474565b90508060050160039054906101000a900460ff1615610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790613044565b60405180910390fd5b848160060181905550838160070181905550670de0b6b3a764000083610c76919061333b565b8160020181905550670de0b6b3a764000082610c92919061333b565b816004018190555060018160050160036101000a81548160ff0219169083151502179055505050505050565b610cc66114a1565b80610ccf611474565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d1b6114a1565b80610d24611474565b600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dcf6114a1565b610dd96000612195565b565b610de36114a1565b80610dec611474565b60050160036101000a81548160ff02191690831515021790555050565b610e116114a1565b80610e1a611474565b60050160016101000a81548160ff02191690831515021790555050565b610e3f6114a1565b80610e48611474565b6007018190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e8b90613463565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb790613463565b8015610f045780601f10610ed957610100808354040283529160200191610f04565b820191906000526020600020905b815481529060010190602001808311610ee757829003601f168201915b5050505050905090565b610f166114a1565b6000610f20611474565b9050610f518160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000610b10565b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fc38160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610b10565b5050565b610fcf6114a1565b80610fd8611474565b60050160006101000a81548160ff02191690831515021790555050565b60008061100061151f565b9050600061100e82866112cd565b905083811015611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104a90613184565b60405180910390fd5b6110608286868403611527565b60019250505092915050565b60008061107761151f565b905061108481858561177e565b600191505092915050565b6110976114a1565b806110a0611474565b60090160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111036114a1565b8061110c611474565b6003018190555050565b61111f30610d7f565b811115801561112e5750600081115b61116d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611164906131a4565b60405180910390fd5b6111768161225b565b50565b6000611183611474565b60080154905090565b6111946114a1565b60005b8383905081101561126257816111ab611474565b600a0160008686858181106111e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906111fe919061295d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061125a90613495565b915050611197565b50505050565b6112706114a1565b600061127a611474565b905082816006018190555081816007018190555060018160050160016101000a81548160ff02191690831515021790555060018160050160026101000a81548160ff021916908315150217905550505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61135c6114a1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c390613004565b60405180910390fd5b6113d581612195565b50565b60006113e2611474565b60010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161142990612f57565b60006040518083038185875af1925050503d8060008114611466576040519150601f19603f3d011682016040523d82523d6000602084013e61146b565b606091505b50508091505050565b6000807f7c038a771c7bef7ea2bbd7d8e0be162a59fdb2cf342e42a2fe2c61f983a7317090508091505090565b6114a961151f565b73ffffffffffffffffffffffffffffffffffffffff166114c7610e52565b73ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490613104565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613144565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90613024565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116e591906131c4565b60405180910390a3505050565b60006116fe84846112cd565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611778578181101561176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176190613064565b60405180910390fd5b6117778484848403611527565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613124565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590612fc4565b60405180910390fd5b600081141561187857611873838360006124f5565b612190565b6000611882611474565b90508060050160009054906101000a900460ff1615611d9b576118a3610e52565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561191157506118e1610e52565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561194a5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611984575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561199f57508060000160149054906101000a900460ff16155b15611d9a578060050160019054906101000a900460ff16611a9f578060090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a5f57508060090160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9590612fe4565b60405180910390fd5b5b80600b0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b46575080600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bf1578060020154821115611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b89906130e4565b60405180910390fd5b8060040154611ba084610d7f565b83611bab91906132b4565b1115611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390613164565b60405180910390fd5b611d99565b80600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c98575080600b0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ce9578060020154821115611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb906130a4565b60405180910390fd5b611d98565b80600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d97578060040154611d4a84610d7f565b83611d5591906132b4565b1115611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d906130c4565b60405180910390fd5b5b5b5b5b5b8060030154611da930610d7f565b10158015611dc557508060050160029054906101000a900460ff165b8015611de057508060000160149054906101000a900460ff16155b8015611e38575080600b0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e9057508060090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ee857508060090160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f305760018160000160146101000a81548160ff021916908315150217905550611f1261276d565b60008160000160146101000a81548160ff0219169083151502179055505b60008160000160149054906101000a900460ff161590508160090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611fec57508160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ff657600090505b600081156121815782600b0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561205d575060008360070154115b156120af5761208d61271061207f85600701548761288990919063ffffffff16565b61289f90919063ffffffff16565b9050808360080160008282546120a391906132b4565b9250508190555061215d565b82600b0160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561210e575060008360060154115b1561215c5761213e61271061213085600601548761288990919063ffffffff16565b61289f90919063ffffffff16565b90508083600801600082825461215491906132b4565b925050819055505b5b6000811115612172576121718630836124f5565b5b808461217e9190613395565b93505b61218c8686866124f5565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff81111561229e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156122cc5781602001602082028036833780820191505090505b509050308160008151811061230a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561239e57600080fd5b505afa1580156123b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d69190612986565b81600181518110612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061246930737a250d5630b4cf539739df2c5dacb4c659f2488d84611527565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016124bf9594939291906131df565b600060405180830381600087803b1580156124d957600080fd5b505af11580156124ed573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255c90613124565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cc90612fc4565b60405180910390fd5b6125e08383836128b5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90613084565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161275491906131c4565b60405180910390a36127678484846128ba565b50505050565b6000612777611474565b9050600061278430610d7f565b905060008260080154905060008083148061279f5750600082145b156127ad5750505050612887565b601484600301546127be919061333b565b8311156127d957601484600301546127d6919061333b565b92505b60008390506127e78161225b565b600085600801819055508460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161283990612f57565b60006040518083038185875af1925050503d8060008114612876576040519150601f19603f3d011682016040523d82523d6000602084013e61287b565b606091505b50508092505050505050505b565b60008183612897919061333b565b905092915050565b600081836128ad919061330a565b905092915050565b505050565b505050565b6000813590506128ce81613965565b92915050565b6000815190506128e381613965565b92915050565b60008083601f8401126128fb57600080fd5b8235905067ffffffffffffffff81111561291457600080fd5b60208301915083602082028301111561292c57600080fd5b9250929050565b6000813590506129428161397c565b92915050565b60008135905061295781613993565b92915050565b60006020828403121561296f57600080fd5b600061297d848285016128bf565b91505092915050565b60006020828403121561299857600080fd5b60006129a6848285016128d4565b91505092915050565b600080604083850312156129c257600080fd5b60006129d0858286016128bf565b92505060206129e1858286016128bf565b9150509250929050565b600080600060608486031215612a0057600080fd5b6000612a0e868287016128bf565b9350506020612a1f868287016128bf565b9250506040612a3086828701612948565b9150509250925092565b60008060408385031215612a4d57600080fd5b6000612a5b858286016128bf565b9250506020612a6c85828601612933565b9150509250929050565b60008060408385031215612a8957600080fd5b6000612a97858286016128bf565b9250506020612aa885828601612948565b9150509250929050565b600080600060408486031215612ac757600080fd5b600084013567ffffffffffffffff811115612ae157600080fd5b612aed868287016128e9565b93509350506020612b0086828701612933565b9150509250925092565b600060208284031215612b1c57600080fd5b6000612b2a84828501612933565b91505092915050565b600060208284031215612b4557600080fd5b6000612b5384828501612948565b91505092915050565b60008060408385031215612b6f57600080fd5b6000612b7d85828601612948565b9250506020612b8e85828601612948565b9150509250929050565b60008060008060808587031215612bae57600080fd5b6000612bbc87828801612948565b9450506020612bcd87828801612948565b9350506040612bde87828801612948565b9250506060612bef87828801612948565b91505092959194509250565b6000612c078383612c13565b60208301905092915050565b612c1c816133c9565b82525050565b612c2b816133c9565b82525050565b6000612c3c82613264565b612c468185613287565b9350612c5183613254565b8060005b83811015612c82578151612c698882612bfb565b9750612c748361327a565b925050600181019050612c55565b5085935050505092915050565b612c98816133db565b82525050565b612ca78161341e565b82525050565b6000612cb88261326f565b612cc281856132a3565b9350612cd2818560208601613430565b612cdb8161356b565b840191505092915050565b6000612cf36023836132a3565b9150612cfe8261357c565b604082019050919050565b6000612d166016836132a3565b9150612d21826135cb565b602082019050919050565b6000612d396026836132a3565b9150612d44826135f4565b604082019050919050565b6000612d5c6022836132a3565b9150612d6782613643565b604082019050919050565b6000612d7f6016836132a3565b9150612d8a82613692565b602082019050919050565b6000612da2601d836132a3565b9150612dad826136bb565b602082019050919050565b6000612dc56026836132a3565b9150612dd0826136e4565b604082019050919050565b6000612de86036836132a3565b9150612df382613733565b604082019050919050565b6000612e0b601b836132a3565b9150612e1682613782565b602082019050919050565b6000612e2e6035836132a3565b9150612e39826137ab565b604082019050919050565b6000612e516020836132a3565b9150612e5c826137fa565b602082019050919050565b6000612e746025836132a3565b9150612e7f82613823565b604082019050919050565b6000612e97600083613298565b9150612ea282613872565b600082019050919050565b6000612eba6024836132a3565b9150612ec582613875565b604082019050919050565b6000612edd601a836132a3565b9150612ee8826138c4565b602082019050919050565b6000612f006025836132a3565b9150612f0b826138ed565b604082019050919050565b6000612f23600c836132a3565b9150612f2e8261393c565b602082019050919050565b612f4281613407565b82525050565b612f5181613411565b82525050565b6000612f6282612e8a565b9150819050919050565b6000602082019050612f816000830184612c22565b92915050565b6000602082019050612f9c6000830184612c8f565b92915050565b60006020820190508181036000830152612fbc8184612cad565b905092915050565b60006020820190508181036000830152612fdd81612ce6565b9050919050565b60006020820190508181036000830152612ffd81612d09565b9050919050565b6000602082019050818103600083015261301d81612d2c565b9050919050565b6000602082019050818103600083015261303d81612d4f565b9050919050565b6000602082019050818103600083015261305d81612d72565b9050919050565b6000602082019050818103600083015261307d81612d95565b9050919050565b6000602082019050818103600083015261309d81612db8565b9050919050565b600060208201905081810360008301526130bd81612ddb565b9050919050565b600060208201905081810360008301526130dd81612dfe565b9050919050565b600060208201905081810360008301526130fd81612e21565b9050919050565b6000602082019050818103600083015261311d81612e44565b9050919050565b6000602082019050818103600083015261313d81612e67565b9050919050565b6000602082019050818103600083015261315d81612ead565b9050919050565b6000602082019050818103600083015261317d81612ed0565b9050919050565b6000602082019050818103600083015261319d81612ef3565b9050919050565b600060208201905081810360008301526131bd81612f16565b9050919050565b60006020820190506131d96000830184612f39565b92915050565b600060a0820190506131f46000830188612f39565b6132016020830187612c9e565b81810360408301526132138186612c31565b90506132226060830185612c22565b61322f6080830184612f39565b9695505050505050565b600060208201905061324e6000830184612f48565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006132bf82613407565b91506132ca83613407565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132ff576132fe6134de565b5b828201905092915050565b600061331582613407565b915061332083613407565b9250826133305761332f61350d565b5b828204905092915050565b600061334682613407565b915061335183613407565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561338a576133896134de565b5b828202905092915050565b60006133a082613407565b91506133ab83613407565b9250828210156133be576133bd6134de565b5b828203905092915050565b60006133d4826133e7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061342982613407565b9050919050565b60005b8381101561344e578082015181840152602081019050613433565b8381111561345d576000848401525b50505050565b6000600282049050600182168061347b57607f821691505b6020821081141561348f5761348e61353c565b5b50919050565b60006134a082613407565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134d3576134d26134de565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d616b65206d656d657320677265617420616761696e00000000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f4d61782077616c6c657420616d6f756e742065786365656465642e0000000000600082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420616d6f756e74206578636565646564000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f57726f6e6720616d6f756e740000000000000000000000000000000000000000600082015250565b61396e816133c9565b811461397957600080fd5b50565b613985816133db565b811461399057600080fd5b50565b61399c81613407565b81146139a757600080fd5b5056fea2646970667358221220e02c81c5a24ba4e189cbc7d46600e0ce2d1d593a523e6f79a7fb22636e83d16264736f6c63430008040033
Deployed Bytecode
0x60806040526004361061021e5760003560e01c8063715018a611610123578063a9059cbb116100ab578063c05c29c31161006f578063c05c29c3146107c0578063d7726e8a146107e9578063dd62ed3e14610812578063f2fde38b1461084f578063f42938901461087857610225565b8063a9059cbb146106dd578063adf186931461071a578063afa4f3b214610743578063b70143c91461076c578063bf5c98221461079557610225565b80638da5cb5b116100f25780638da5cb5b146105f857806395d89b4114610623578063a29a60891461064e578063a4467abd14610677578063a457c2d7146106a057610225565b8063715018a61461056657806373f17dfe1461057d57806384ac289d146105a65780638b4cee08146105cf57610225565b806327a14fc2116101a6578063395093511161017557806339509351146104715780634094954f146104ae5780635d098b38146104d757806365f4889f1461050057806370a082311461052957610225565b806327a14fc2146103cb5780632f142eff146103f457806330455ede1461041d578063313ce5671461044657610225565b806318160ddd116101ed57806318160ddd146102e45780631abfa6291461030f5780631d4e49eb1461033a5780631e293c101461036557806323b872dd1461038e57610225565b806302dd26061461022a57806306fdde0314610253578063095ea7b31461027e5780630cc835a3146102bb57610225565b3661022557005b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612ab2565b61088f565b005b34801561025f57600080fd5b5061026861096b565b6040516102759190612fa2565b60405180910390f35b34801561028a57600080fd5b506102a560048036038101906102a09190612a76565b6109fd565b6040516102b29190612f87565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd9190612b33565b610a20565b005b3480156102f057600080fd5b506102f9610a3b565b60405161030691906131c4565b60405180910390f35b34801561031b57600080fd5b50610324610a45565b6040516103319190612f6c565b60405180910390f35b34801561034657600080fd5b5061034f610a78565b60405161035c9190612f6c565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190612b33565b610aab565b005b34801561039a57600080fd5b506103b560048036038101906103b091906129eb565b610ac6565b6040516103c29190612f87565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612b33565b610af5565b005b34801561040057600080fd5b5061041b60048036038101906104169190612a3a565b610b10565b005b34801561042957600080fd5b50610444600480360381019061043f9190612b0a565b610b7c565b005b34801561045257600080fd5b5061045b610baa565b6040516104689190613239565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190612a76565b610bb3565b6040516104a59190612f87565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190612b98565b610bea565b005b3480156104e357600080fd5b506104fe60048036038101906104f9919061295d565b610cbe565b005b34801561050c57600080fd5b5061052760048036038101906105229190612a3a565b610d13565b005b34801561053557600080fd5b50610550600480360381019061054b919061295d565b610d7f565b60405161055d91906131c4565b60405180910390f35b34801561057257600080fd5b5061057b610dc7565b005b34801561058957600080fd5b506105a4600480360381019061059f9190612b0a565b610ddb565b005b3480156105b257600080fd5b506105cd60048036038101906105c89190612b0a565b610e09565b005b3480156105db57600080fd5b506105f660048036038101906105f19190612b33565b610e37565b005b34801561060457600080fd5b5061060d610e52565b60405161061a9190612f6c565b60405180910390f35b34801561062f57600080fd5b50610638610e7c565b6040516106459190612fa2565b60405180910390f35b34801561065a57600080fd5b506106756004803603810190610670919061295d565b610f0e565b005b34801561068357600080fd5b5061069e60048036038101906106999190612b0a565b610fc7565b005b3480156106ac57600080fd5b506106c760048036038101906106c29190612a76565b610ff5565b6040516106d49190612f87565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff9190612a76565b61106c565b6040516107119190612f87565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190612a3a565b61108f565b005b34801561074f57600080fd5b5061076a60048036038101906107659190612b33565b6110fb565b005b34801561077857600080fd5b50610793600480360381019061078e9190612b33565b611116565b005b3480156107a157600080fd5b506107aa611179565b6040516107b791906131c4565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190612ab2565b61118c565b005b3480156107f557600080fd5b50610810600480360381019061080b9190612b5c565b611268565b005b34801561081e57600080fd5b50610839600480360381019061083491906129af565b6112cd565b60405161084691906131c4565b60405180910390f35b34801561085b57600080fd5b506108766004803603810190610871919061295d565b611354565b005b34801561088457600080fd5b5061088d6113d8565b005b6108976114a1565b60005b8383905081101561096557816108ae611474565b60090160008686858181106108ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610901919061295d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061095d90613495565b91505061089a565b50505050565b60606003805461097a90613463565b80601f01602080910402602001604051908101604052809291908181526020018280546109a690613463565b80156109f35780601f106109c8576101008083540402835291602001916109f3565b820191906000526020600020905b8154815290600101906020018083116109d657829003601f168201915b5050505050905090565b600080610a0861151f565b9050610a15818585611527565b600191505092915050565b610a286114a1565b80610a31611474565b6006018190555050565b6000600254905090565b6000610a4f611474565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610a82611474565b60010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ab36114a1565b80610abc611474565b6002018190555050565b600080610ad161151f565b9050610ade8582856116f2565b610ae985858561177e565b60019150509392505050565b610afd6114a1565b80610b06611474565b6004018190555050565b610b186114a1565b80610b21611474565b600b0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610b846114a1565b80610b8d611474565b60050160026101000a81548160ff02191690831515021790555050565b60006012905090565b600080610bbe61151f565b9050610bdf818585610bd085896112cd565b610bda91906132b4565b611527565b600191505092915050565b610bf26114a1565b6000610bfc611474565b90508060050160039054906101000a900460ff1615610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790613044565b60405180910390fd5b848160060181905550838160070181905550670de0b6b3a764000083610c76919061333b565b8160020181905550670de0b6b3a764000082610c92919061333b565b816004018190555060018160050160036101000a81548160ff0219169083151502179055505050505050565b610cc66114a1565b80610ccf611474565b60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d1b6114a1565b80610d24611474565b600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dcf6114a1565b610dd96000612195565b565b610de36114a1565b80610dec611474565b60050160036101000a81548160ff02191690831515021790555050565b610e116114a1565b80610e1a611474565b60050160016101000a81548160ff02191690831515021790555050565b610e3f6114a1565b80610e48611474565b6007018190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e8b90613463565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb790613463565b8015610f045780601f10610ed957610100808354040283529160200191610f04565b820191906000526020600020905b815481529060010190602001808311610ee757829003601f168201915b5050505050905090565b610f166114a1565b6000610f20611474565b9050610f518160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000610b10565b818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fc38160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610b10565b5050565b610fcf6114a1565b80610fd8611474565b60050160006101000a81548160ff02191690831515021790555050565b60008061100061151f565b9050600061100e82866112cd565b905083811015611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104a90613184565b60405180910390fd5b6110608286868403611527565b60019250505092915050565b60008061107761151f565b905061108481858561177e565b600191505092915050565b6110976114a1565b806110a0611474565b60090160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111036114a1565b8061110c611474565b6003018190555050565b61111f30610d7f565b811115801561112e5750600081115b61116d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611164906131a4565b60405180910390fd5b6111768161225b565b50565b6000611183611474565b60080154905090565b6111946114a1565b60005b8383905081101561126257816111ab611474565b600a0160008686858181106111e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906111fe919061295d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061125a90613495565b915050611197565b50505050565b6112706114a1565b600061127a611474565b905082816006018190555081816007018190555060018160050160016101000a81548160ff02191690831515021790555060018160050160026101000a81548160ff021916908315150217905550505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61135c6114a1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c390613004565b60405180910390fd5b6113d581612195565b50565b60006113e2611474565b60010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161142990612f57565b60006040518083038185875af1925050503d8060008114611466576040519150601f19603f3d011682016040523d82523d6000602084013e61146b565b606091505b50508091505050565b6000807f7c038a771c7bef7ea2bbd7d8e0be162a59fdb2cf342e42a2fe2c61f983a7317090508091505090565b6114a961151f565b73ffffffffffffffffffffffffffffffffffffffff166114c7610e52565b73ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490613104565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90613144565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90613024565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116e591906131c4565b60405180910390a3505050565b60006116fe84846112cd565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611778578181101561176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176190613064565b60405180910390fd5b6117778484848403611527565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613124565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590612fc4565b60405180910390fd5b600081141561187857611873838360006124f5565b612190565b6000611882611474565b90508060050160009054906101000a900460ff1615611d9b576118a3610e52565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561191157506118e1610e52565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561194a5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611984575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561199f57508060000160149054906101000a900460ff16155b15611d9a578060050160019054906101000a900460ff16611a9f578060090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a5f57508060090160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9590612fe4565b60405180910390fd5b5b80600b0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b46575080600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bf1578060020154821115611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b89906130e4565b60405180910390fd5b8060040154611ba084610d7f565b83611bab91906132b4565b1115611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390613164565b60405180910390fd5b611d99565b80600a0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611c98575080600b0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ce9578060020154821115611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb906130a4565b60405180910390fd5b611d98565b80600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d97578060040154611d4a84610d7f565b83611d5591906132b4565b1115611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d906130c4565b60405180910390fd5b5b5b5b5b5b8060030154611da930610d7f565b10158015611dc557508060050160029054906101000a900460ff165b8015611de057508060000160149054906101000a900460ff16155b8015611e38575080600b0160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e9057508060090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611ee857508060090160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f305760018160000160146101000a81548160ff021916908315150217905550611f1261276d565b60008160000160146101000a81548160ff0219169083151502179055505b60008160000160149054906101000a900460ff161590508160090160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611fec57508160090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611ff657600090505b600081156121815782600b0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561205d575060008360070154115b156120af5761208d61271061207f85600701548761288990919063ffffffff16565b61289f90919063ffffffff16565b9050808360080160008282546120a391906132b4565b9250508190555061215d565b82600b0160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561210e575060008360060154115b1561215c5761213e61271061213085600601548761288990919063ffffffff16565b61289f90919063ffffffff16565b90508083600801600082825461215491906132b4565b925050819055505b5b6000811115612172576121718630836124f5565b5b808461217e9190613395565b93505b61218c8686866124f5565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff81111561229e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156122cc5781602001602082028036833780820191505090505b509050308160008151811061230a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561239e57600080fd5b505afa1580156123b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d69190612986565b81600181518110612410577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061246930737a250d5630b4cf539739df2c5dacb4c659f2488d84611527565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016124bf9594939291906131df565b600060405180830381600087803b1580156124d957600080fd5b505af11580156124ed573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255c90613124565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cc90612fc4565b60405180910390fd5b6125e08383836128b5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90613084565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161275491906131c4565b60405180910390a36127678484846128ba565b50505050565b6000612777611474565b9050600061278430610d7f565b905060008260080154905060008083148061279f5750600082145b156127ad5750505050612887565b601484600301546127be919061333b565b8311156127d957601484600301546127d6919061333b565b92505b60008390506127e78161225b565b600085600801819055508460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161283990612f57565b60006040518083038185875af1925050503d8060008114612876576040519150601f19603f3d011682016040523d82523d6000602084013e61287b565b606091505b50508092505050505050505b565b60008183612897919061333b565b905092915050565b600081836128ad919061330a565b905092915050565b505050565b505050565b6000813590506128ce81613965565b92915050565b6000815190506128e381613965565b92915050565b60008083601f8401126128fb57600080fd5b8235905067ffffffffffffffff81111561291457600080fd5b60208301915083602082028301111561292c57600080fd5b9250929050565b6000813590506129428161397c565b92915050565b60008135905061295781613993565b92915050565b60006020828403121561296f57600080fd5b600061297d848285016128bf565b91505092915050565b60006020828403121561299857600080fd5b60006129a6848285016128d4565b91505092915050565b600080604083850312156129c257600080fd5b60006129d0858286016128bf565b92505060206129e1858286016128bf565b9150509250929050565b600080600060608486031215612a0057600080fd5b6000612a0e868287016128bf565b9350506020612a1f868287016128bf565b9250506040612a3086828701612948565b9150509250925092565b60008060408385031215612a4d57600080fd5b6000612a5b858286016128bf565b9250506020612a6c85828601612933565b9150509250929050565b60008060408385031215612a8957600080fd5b6000612a97858286016128bf565b9250506020612aa885828601612948565b9150509250929050565b600080600060408486031215612ac757600080fd5b600084013567ffffffffffffffff811115612ae157600080fd5b612aed868287016128e9565b93509350506020612b0086828701612933565b9150509250925092565b600060208284031215612b1c57600080fd5b6000612b2a84828501612933565b91505092915050565b600060208284031215612b4557600080fd5b6000612b5384828501612948565b91505092915050565b60008060408385031215612b6f57600080fd5b6000612b7d85828601612948565b9250506020612b8e85828601612948565b9150509250929050565b60008060008060808587031215612bae57600080fd5b6000612bbc87828801612948565b9450506020612bcd87828801612948565b9350506040612bde87828801612948565b9250506060612bef87828801612948565b91505092959194509250565b6000612c078383612c13565b60208301905092915050565b612c1c816133c9565b82525050565b612c2b816133c9565b82525050565b6000612c3c82613264565b612c468185613287565b9350612c5183613254565b8060005b83811015612c82578151612c698882612bfb565b9750612c748361327a565b925050600181019050612c55565b5085935050505092915050565b612c98816133db565b82525050565b612ca78161341e565b82525050565b6000612cb88261326f565b612cc281856132a3565b9350612cd2818560208601613430565b612cdb8161356b565b840191505092915050565b6000612cf36023836132a3565b9150612cfe8261357c565b604082019050919050565b6000612d166016836132a3565b9150612d21826135cb565b602082019050919050565b6000612d396026836132a3565b9150612d44826135f4565b604082019050919050565b6000612d5c6022836132a3565b9150612d6782613643565b604082019050919050565b6000612d7f6016836132a3565b9150612d8a82613692565b602082019050919050565b6000612da2601d836132a3565b9150612dad826136bb565b602082019050919050565b6000612dc56026836132a3565b9150612dd0826136e4565b604082019050919050565b6000612de86036836132a3565b9150612df382613733565b604082019050919050565b6000612e0b601b836132a3565b9150612e1682613782565b602082019050919050565b6000612e2e6035836132a3565b9150612e39826137ab565b604082019050919050565b6000612e516020836132a3565b9150612e5c826137fa565b602082019050919050565b6000612e746025836132a3565b9150612e7f82613823565b604082019050919050565b6000612e97600083613298565b9150612ea282613872565b600082019050919050565b6000612eba6024836132a3565b9150612ec582613875565b604082019050919050565b6000612edd601a836132a3565b9150612ee8826138c4565b602082019050919050565b6000612f006025836132a3565b9150612f0b826138ed565b604082019050919050565b6000612f23600c836132a3565b9150612f2e8261393c565b602082019050919050565b612f4281613407565b82525050565b612f5181613411565b82525050565b6000612f6282612e8a565b9150819050919050565b6000602082019050612f816000830184612c22565b92915050565b6000602082019050612f9c6000830184612c8f565b92915050565b60006020820190508181036000830152612fbc8184612cad565b905092915050565b60006020820190508181036000830152612fdd81612ce6565b9050919050565b60006020820190508181036000830152612ffd81612d09565b9050919050565b6000602082019050818103600083015261301d81612d2c565b9050919050565b6000602082019050818103600083015261303d81612d4f565b9050919050565b6000602082019050818103600083015261305d81612d72565b9050919050565b6000602082019050818103600083015261307d81612d95565b9050919050565b6000602082019050818103600083015261309d81612db8565b9050919050565b600060208201905081810360008301526130bd81612ddb565b9050919050565b600060208201905081810360008301526130dd81612dfe565b9050919050565b600060208201905081810360008301526130fd81612e21565b9050919050565b6000602082019050818103600083015261311d81612e44565b9050919050565b6000602082019050818103600083015261313d81612e67565b9050919050565b6000602082019050818103600083015261315d81612ead565b9050919050565b6000602082019050818103600083015261317d81612ed0565b9050919050565b6000602082019050818103600083015261319d81612ef3565b9050919050565b600060208201905081810360008301526131bd81612f16565b9050919050565b60006020820190506131d96000830184612f39565b92915050565b600060a0820190506131f46000830188612f39565b6132016020830187612c9e565b81810360408301526132138186612c31565b90506132226060830185612c22565b61322f6080830184612f39565b9695505050505050565b600060208201905061324e6000830184612f48565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006132bf82613407565b91506132ca83613407565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132ff576132fe6134de565b5b828201905092915050565b600061331582613407565b915061332083613407565b9250826133305761332f61350d565b5b828204905092915050565b600061334682613407565b915061335183613407565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561338a576133896134de565b5b828202905092915050565b60006133a082613407565b91506133ab83613407565b9250828210156133be576133bd6134de565b5b828203905092915050565b60006133d4826133e7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061342982613407565b9050919050565b60005b8381101561344e578082015181840152602081019050613433565b8381111561345d576000848401525b50505050565b6000600282049050600182168061347b57607f821691505b6020821081141561348f5761348e61353c565b5b50919050565b60006134a082613407565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134d3576134d26134de565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d616b65206d656d657320677265617420616761696e00000000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f4d61782077616c6c657420616d6f756e742065786365656465642e0000000000600082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420616d6f756e74206578636565646564000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f57726f6e6720616d6f756e740000000000000000000000000000000000000000600082015250565b61396e816133c9565b811461397957600080fd5b50565b613985816133db565b811461399057600080fd5b50565b61399c81613407565b81146139a757600080fd5b5056fea2646970667358221220e02c81c5a24ba4e189cbc7d46600e0ce2d1d593a523e6f79a7fb22636e83d16264736f6c63430008040033
Deployed Bytecode Sourcemap
584:11460:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9048:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2154:98:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4431:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9833:113:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3242:106:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11920:122:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11179:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10694:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5190:286:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10869:149:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11443:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10227:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3091:91:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5871:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7714:575:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11024:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9320:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3406:125:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1831:101:0;;;;;;;;;;;;;:::i;:::-;;11311:126:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10075:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9952:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1201:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2365:102:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11600:314:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10371:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6592:427:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3727:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8873:169:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10527:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8548:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8753:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9528:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7331:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3974:149:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2081:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8355:187:10;;;;;;;;;;;;;:::i;:::-;;9048:266;1094:13:0;:11;:13::i;:::-;9167:9:10::1;9162:146;9186:10;;:17;;9182:1;:21;9162:146;;;9286:11;9224:26;:24;:26::i;:::-;:44;;:59;9269:10;;9280:1;9269:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9224:59;;;;;;;;;;;;;;;;:73;;;;;;;;;;;;;;;;;;9205:3;;;;;:::i;:::-;;;;9162:146;;;;9048:266:::0;;;:::o;2154:98:1:-;2208:13;2240:5;2233:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2154:98;:::o;4431:197::-;4514:4;4530:13;4546:12;:10;:12::i;:::-;4530:28;;4568:32;4577:5;4584:7;4593:6;4568:8;:32::i;:::-;4617:4;4610:11;;;4431:197;;;;:::o;9833:113:10:-;1094:13:0;:11;:13::i;:::-;9932:7:10::1;9896:26;:24;:26::i;:::-;:33;;:43;;;;9833:113:::0;:::o;3242:106:1:-;3303:7;3329:12;;3322:19;;3242:106;:::o;11920:122:10:-;11969:7;11995:26;:24;:26::i;:::-;:40;;;;;;;;;;;;11988:47;;11920:122;:::o;11179:126::-;11230:7;11256:26;:24;:26::i;:::-;:42;;;;;;;;;;;;11249:49;;11179:126;:::o;10694:169::-;1094:13:0;:11;:13::i;:::-;10835:21:10::1;10785:26;:24;:26::i;:::-;:47;;:71;;;;10694:169:::0;:::o;5190:286:1:-;5317:4;5333:15;5351:12;:10;:12::i;:::-;5333:30;;5373:38;5389:4;5395:7;5404:6;5373:15;:38::i;:::-;5421:27;5431:4;5437:2;5441:6;5421:9;:27::i;:::-;5465:4;5458:11;;;5190:286;;;;;:::o;10869:149:10:-;1094:13:0;:11;:13::i;:::-;10995:16:10::1;10950:26;:24;:26::i;:::-;:42;;:61;;;;10869:149:::0;:::o;11443:151::-;1094:13:0;:11;:13::i;:::-;11577:10:10::1;11527:26;:24;:26::i;:::-;:37;;:47;11565:8;11527:47;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;11443:151:::0;;:::o;10227:138::-;1094:13:0;:11;:13::i;:::-;10344:14:10::1;10301:26;:24;:26::i;:::-;:40;;;:57;;;;;;;;;;;;;;;;;;10227:138:::0;:::o;3091:91:1:-;3149:5;3173:2;3166:9;;3091:91;:::o;5871:234::-;5959:4;5975:13;5991:12;:10;:12::i;:::-;5975:28;;6013:64;6022:5;6029:7;6066:10;6038:25;6048:5;6055:7;6038:9;:25::i;:::-;:38;;;;:::i;:::-;6013:8;:64::i;:::-;6094:4;6087:11;;;5871:234;;;;:::o;7714:575:10:-;1094:13:0;:11;:13::i;:::-;7893:40:10::1;7936:26;:24;:26::i;:::-;7893:69;;7982:10;:21;;;;;;;;;;;;7981:22;7973:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;8061:7;8041:10;:17;;:27;;;;8099:8;8078:10;:18;;:29;;;;8176:4;8152:21;:28;;;;:::i;:::-;8118:10;:31;;:62;;;;8239:4;8220:16;:23;;;;:::i;:::-;8190:10;:26;;:53;;;;8278:4;8254:10;:21;;;:28;;;;;;;;;;;;;;;;;;1117:1:0;7714:575:10::0;;;;:::o;11024:149::-;1094:13:0;:11;:13::i;:::-;11150:16:10::1;11105:26;:24;:26::i;:::-;:42;;;:61;;;;;;;;;;;;;;;;;;11024:149:::0;:::o;9320:202::-;1094:13:0;:11;:13::i;:::-;9504:11:10::1;9430:26;:24;:26::i;:::-;:61;;:71;9492:8;9430:71;;;;;;;;;;;;;;;;:85;;;;;;;;;;;;;;;;;;9320:202:::0;;:::o;3406:125:1:-;3480:7;3506:9;:18;3516:7;3506:18;;;;;;;;;;;;;;;;3499:25;;3406:125;;;:::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;11311:126:10:-;1094:13:0;:11;:13::i;:::-;11419:11:10::1;11379:26;:24;:26::i;:::-;:37;;;:51;;;;;;;;;;;;;;;;;;11311:126:::0;:::o;10075:146::-;1094:13:0;:11;:13::i;:::-;10198:16:10::1;10153:26;:24;:26::i;:::-;:42;;;:61;;;;;;;;;;;;;;;;;;10075:146:::0;:::o;9952:117::-;1094:13:0;:11;:13::i;:::-;10054:8:10::1;10017:26;:24;:26::i;:::-;:34;;:45;;;;9952:117:::0;:::o;1201:85:0:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;2365:102:1:-;2421:13;2453:7;2446:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2365:102;:::o;11600:314:10:-;1094:13:0;:11;:13::i;:::-;11677:40:10::1;11720:26;:24;:26::i;:::-;11677:69;;11757:45;11770:10;:24;;;;;;;;;;;;11796:5;11757:12;:45::i;:::-;11839:14;11812:10;:24;;;:41;;;;;;;;;;;;;;;;;;11863:44;11876:10;:24;;;;;;;;;;;;11902:4;11863:12;:44::i;:::-;1117:1:0;11600:314:10::0;:::o;10371:150::-;1094:13:0;:11;:13::i;:::-;10497:17:10::1;10451:26;:24;:26::i;:::-;:43;;;:63;;;;;;;;;;;;;;;;;;10371:150:::0;:::o;6592:427:1:-;6685:4;6701:13;6717:12;:10;:12::i;:::-;6701:28;;6739:24;6766:25;6776:5;6783:7;6766:9;:25::i;:::-;6739:52;;6829:15;6809:16;:35;;6801:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6920:60;6929:5;6936:7;6964:15;6945:16;:34;6920:8;:60::i;:::-;7008:4;7001:11;;;;6592:427;;;;:::o;3727:189::-;3806:4;3822:13;3838:12;:10;:12::i;:::-;3822:28;;3860;3870:5;3877:2;3881:6;3860:9;:28::i;:::-;3905:4;3898:11;;;3727:189;;;;:::o;8873:169:10:-;1094:13:0;:11;:13::i;:::-;9024:11:10::1;8967:26;:24;:26::i;:::-;:44;;:54;9012:8;8967:54;;;;;;;;;;;;;;;;:68;;;;;;;;;;;;;;;;;;8873:169:::0;;:::o;10527:161::-;1094:13:0;:11;:13::i;:::-;10662:19:10::1;10614:26;:24;:26::i;:::-;:45;;:67;;;;10527:161:::0;:::o;8548:170::-;8621:24;8639:4;8621:9;:24::i;:::-;8611:6;:34;;:48;;;;;8658:1;8649:6;:10;8611:48;8603:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8686:25;8704:6;8686:17;:25::i;:::-;8548:170;:::o;8753:114::-;8798:7;8824:26;:24;:26::i;:::-;:36;;;8817:43;;8753:114;:::o;9528:299::-;1094:13:0;:11;:13::i;:::-;9663:9:10::1;9658:163;9682:10;;:17;;9678:1;:21;9658:163;;;9799:11;9720:26;:24;:26::i;:::-;:61;;:76;9782:10;;9793:1;9782:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9720:76;;;;;;;;;;;;;;;;:90;;;;;;;;;;;;;;;;;;9701:3;;;;;:::i;:::-;;;;9658:163;;;;9528:299:::0;;;:::o;7331:377::-;1094:13:0;:11;:13::i;:::-;7462:40:10::1;7505:26;:24;:26::i;:::-;7462:69;;7562:7;7542:10;:17;;:27;;;;7600:8;7579:10;:18;;:29;;;;7656:4;7627:10;:26;;;:33;;;;;;;;;;;;;;;;;;7697:4;7670:10;:24;;;:31;;;;;;;;;;;;;;;;;;1117:1:0;7331:377:10::0;;:::o;3974:149:1:-;4063:7;4089:11;:18;4101:5;4089:18;;;;;;;;;;;;;;;:27;4108:7;4089:27;;;;;;;;;;;;;;;;4082:34;;3974:149;;;;:::o;2081:198:0:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;;;2161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;8355:187:10:-;8396:12;8432:26;:24;:26::i;:::-;:42;;;;;;;;;;;;:47;;8500:21;8432:103;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8418:117;;;;;8355:187;:::o;1219:152:11:-;1267:20;1293:16;1186:30;1293:35;;1356:8;1346:18;;1341:27;;:::o;1359:130:0:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;640:96:4:-;693:7;719:10;712:17;;640:96;:::o;10504:370:1:-;10652:1;10635:19;;:5;:19;;;;10627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10732:1;10713:21;;:7;:21;;;;10705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10814:6;10784:11;:18;10796:5;10784:18;;;;;;;;;;;;;;;:27;10803:7;10784:27;;;;;;;;;;;;;;;:36;;;;10851:7;10835:32;;10844:5;10835:32;;;10860:6;10835:32;;;;;;:::i;:::-;;;;;;;;10504:370;;;:::o;11155:441::-;11285:24;11312:25;11322:5;11329:7;11312:9;:25::i;:::-;11285:52;;11371:17;11351:16;:37;11347:243;;11432:6;11412:16;:26;;11404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11514:51;11523:5;11530:7;11558:6;11539:16;:25;11514:8;:51::i;:::-;11347:243;11155:441;;;;:::o;2208:3688:10:-;2333:1;2317:18;;:4;:18;;;;2309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2409:1;2395:16;;:2;:16;;;;2387:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;2476:1;2466:6;:11;2462:90;;;2493:28;2509:4;2515:2;2519:1;2493:15;:28::i;:::-;2535:7;;2462:90;2562:40;2605:26;:24;:26::i;:::-;2562:69;;2646:10;:27;;;;;;;;;;;;2642:1803;;;2718:7;:5;:7::i;:::-;2710:15;;:4;:15;;;;:48;;;;;2751:7;:5;:7::i;:::-;2745:13;;:2;:13;;;;2710:48;:84;;;;;2792:1;2778:16;;:2;:16;;;;2710:84;:125;;;;;2828:6;2814:21;;:2;:21;;;;2710:125;:167;;;;;2856:10;:21;;;;;;;;;;;;2855:22;2710:167;2689:1746;;;2915:10;:26;;;;;;;;;;;;2910:249;;2998:10;:28;;:34;3027:4;2998:34;;;;;;;;;;;;;;;;;;;;;;;;;:70;;;;3036:10;:28;;:32;3065:2;3036:32;;;;;;;;;;;;;;;;;;;;;;;;;2998:70;2965:175;;;;;;;;;;;;:::i;:::-;;;;;;;;;2910:249;3225:10;:21;;:27;3247:4;3225:27;;;;;;;;;;;;;;;;;;;;;;;;;:101;;;;;3277:10;:45;;:49;3323:2;3277:49;;;;;;;;;;;;;;;;;;;;;;;;;3276:50;3225:101;3200:1221;;;3410:10;:31;;;3400:6;:41;;3367:177;;;;;;;;;;;;:::i;:::-;;;;;;;;;3625:10;:26;;;3608:13;3618:2;3608:9;:13::i;:::-;3599:6;:22;;;;:::i;:::-;:52;;3566:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;3200:1221;;;3818:10;:45;;:51;3864:4;3818:51;;;;;;;;;;;;;;;;;;;;;;;;;3817:52;:101;;;;;3893:10;:21;;:25;3915:2;3893:25;;;;;;;;;;;;;;;;;;;;;;;;;3817:101;3792:629;;;4002:10;:31;;;3992:6;:41;;3959:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;3792:629;;;4167:10;:45;;:49;4213:2;4167:49;;;;;;;;;;;;;;;;;;;;;;;;;4162:259;;4299:10;:26;;;4282:13;4292:2;4282:9;:13::i;:::-;4273:6;:22;;;;:::i;:::-;:52;;4240:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;4162:259;3792:629;3200:1221;2689:1746;2642:1803;4500:10;:29;;;4472:24;4490:4;4472:9;:24::i;:::-;:57;;:97;;;;;4545:10;:24;;;;;;;;;;;;4472:97;:135;;;;;4586:10;:21;;;;;;;;;;;;4585:22;4472:135;:179;;;;;4624:10;:21;;:27;4646:4;4624:27;;;;;;;;;;;;;;;;;;;;;;;;;4623:28;4472:179;:230;;;;;4668:10;:28;;:34;4697:4;4668:34;;;;;;;;;;;;;;;;;;;;;;;;;4667:35;4472:230;:279;;;;;4719:10;:28;;:32;4748:2;4719:32;;;;;;;;;;;;;;;;;;;;;;;;;4718:33;4472:279;4455:430;;;4800:4;4776:10;:21;;;:28;;;;;;;;;;;;;;;;;;4819:11;:9;:11::i;:::-;4869:5;4845:10;:21;;;:29;;;;;;;;;;;;;;;;;;4455:430;4895:12;4911:10;:21;;;;;;;;;;;;4910:22;4895:37;;5031:10;:28;;:34;5060:4;5031:34;;;;;;;;;;;;;;;;;;;;;;;;;:70;;;;5069:10;:28;;:32;5098:2;5069:32;;;;;;;;;;;;;;;;;;;;;;;;;5031:70;5027:116;;;5127:5;5117:15;;5027:116;5153:11;5255:7;5251:595;;;5305:10;:21;;:25;5327:2;5305:25;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;5355:1;5334:10;:18;;;:22;5305:51;5301:406;;;5382:42;5417:6;5382:30;5393:10;:18;;;5382:6;:10;;:30;;;;:::i;:::-;:34;;:42;;;;:::i;:::-;5376:48;;5466:3;5442:10;:20;;;:27;;;;;;;:::i;:::-;;;;;;;;5301:406;;;5528:10;:21;;:27;5550:4;5528:27;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;5579:1;5559:10;:17;;;:21;5528:52;5524:183;;;5606:41;5640:6;5606:29;5617:10;:17;;;5606:6;:10;;:29;;;;:::i;:::-;:33;;:41;;;;:::i;:::-;5600:47;;5689:3;5665:10;:20;;;:27;;;;;;;:::i;:::-;;;;;;;;5524:183;5301:406;5731:1;5725:3;:7;5721:87;;;5752:41;5768:4;5782;5789:3;5752:15;:41::i;:::-;5721:87;5832:3;5822:13;;;;;:::i;:::-;;;5251:595;5856:33;5872:4;5878:2;5882:6;5856:15;:33::i;:::-;2208:3688;;;;;;;:::o;2433:187:0:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2433:187;;:::o;5902:622:10:-;6039:21;6077:1;6063:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6039:40;;6107:4;6089;6094:1;6089:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;408:42:12;6132:32:10;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6122:4;6127:1;6122:7;;;;;;;;;;;;;;;;;;;;;:44;;;;;;;;;;;6177:74;6194:4;408:42:12;6239:11:10;6177:8;:74::i;:::-;408:42:12;6287:78:10;;;6379:11;6404:1;6447:4;6473;6492:15;6287:230;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5902:622;;:::o;7473:818:1:-;7615:1;7599:18;;:4;:18;;;;7591:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7691:1;7677:16;;:2;:16;;;;7669:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7744:38;7765:4;7771:2;7775:6;7744:20;:38::i;:::-;7793:19;7815:9;:15;7825:4;7815:15;;;;;;;;;;;;;;;;7793:37;;7863:6;7848:11;:21;;7840:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7978:6;7964:11;:20;7946:9;:15;7956:4;7946:15;;;;;;;;;;;;;;;:38;;;;8178:6;8161:9;:13;8171:2;8161:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;8225:2;8210:26;;8219:4;8210:26;;;8229:6;8210:26;;;;;;:::i;:::-;;;;;;;;8247:37;8267:4;8273:2;8277:6;8247:19;:37::i;:::-;7473:818;;;;:::o;6531:794:10:-;6570:40;6613:26;:24;:26::i;:::-;6570:69;;6650:23;6676:24;6694:4;6676:9;:24::i;:::-;6650:50;;6710:25;6738:10;:20;;;6710:48;;6768:12;6814:1;6795:15;:20;:46;;;;6840:1;6819:17;:22;6795:46;6791:83;;;6857:7;;;;;;6791:83;6938:2;6906:10;:29;;;:34;;;;:::i;:::-;6888:15;:52;6884:135;;;7006:2;6974:10;:29;;;:34;;;;:::i;:::-;6956:52;;6884:135;7078:26;7107:15;7078:44;;7133:37;7151:18;7133:17;:37::i;:::-;7204:1;7181:10;:20;;:24;;;;7231:10;:26;;;;;;;;;;;;:31;;7283:21;7231:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7217:101;;;;;6531:794;;;;;;:::o;3465:96:5:-;3523:7;3553:1;3549;:5;;;;:::i;:::-;3542:12;;3465:96;;;;:::o;3850:::-;3908:7;3938:1;3934;:5;;;;:::i;:::-;3927:12;;3850:96;;;;:::o;12180:121:1:-;;;;:::o;12889:120::-;;;;:::o;7:139:13:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;318:367::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:2;;469:1;466;459:12;418:2;505:6;492:20;482:30;;535:18;527:6;524:30;521:2;;;567:1;564;557:12;521:2;604:4;596:6;592:17;580:29;;658:3;650:4;642:6;638:17;628:8;624:32;621:41;618:2;;;675:1;672;665:12;618:2;408:277;;;;;:::o;691:133::-;734:5;772:6;759:20;750:29;;788:30;812:5;788:30;:::i;:::-;740:84;;;;:::o;830:139::-;876:5;914:6;901:20;892:29;;930:33;957:5;930:33;:::i;:::-;882:87;;;;:::o;975:262::-;1034:6;1083:2;1071:9;1062:7;1058:23;1054:32;1051:2;;;1099:1;1096;1089:12;1051:2;1142:1;1167:53;1212:7;1203:6;1192:9;1188:22;1167:53;:::i;:::-;1157:63;;1113:117;1041:196;;;;:::o;1243:284::-;1313:6;1362:2;1350:9;1341:7;1337:23;1333:32;1330:2;;;1378:1;1375;1368:12;1330:2;1421:1;1446:64;1502:7;1493:6;1482:9;1478:22;1446:64;:::i;:::-;1436:74;;1392:128;1320:207;;;;:::o;1533:407::-;1601:6;1609;1658:2;1646:9;1637:7;1633:23;1629:32;1626:2;;;1674:1;1671;1664:12;1626:2;1717:1;1742:53;1787:7;1778:6;1767:9;1763:22;1742:53;:::i;:::-;1732:63;;1688:117;1844:2;1870:53;1915:7;1906:6;1895:9;1891:22;1870:53;:::i;:::-;1860:63;;1815:118;1616:324;;;;;:::o;1946:552::-;2023:6;2031;2039;2088:2;2076:9;2067:7;2063:23;2059:32;2056:2;;;2104:1;2101;2094:12;2056:2;2147:1;2172:53;2217:7;2208:6;2197:9;2193:22;2172:53;:::i;:::-;2162:63;;2118:117;2274:2;2300:53;2345:7;2336:6;2325:9;2321:22;2300:53;:::i;:::-;2290:63;;2245:118;2402:2;2428:53;2473:7;2464:6;2453:9;2449:22;2428:53;:::i;:::-;2418:63;;2373:118;2046:452;;;;;:::o;2504:401::-;2569:6;2577;2626:2;2614:9;2605:7;2601:23;2597:32;2594:2;;;2642:1;2639;2632:12;2594:2;2685:1;2710:53;2755:7;2746:6;2735:9;2731:22;2710:53;:::i;:::-;2700:63;;2656:117;2812:2;2838:50;2880:7;2871:6;2860:9;2856:22;2838:50;:::i;:::-;2828:60;;2783:115;2584:321;;;;;:::o;2911:407::-;2979:6;2987;3036:2;3024:9;3015:7;3011:23;3007:32;3004:2;;;3052:1;3049;3042:12;3004:2;3095:1;3120:53;3165:7;3156:6;3145:9;3141:22;3120:53;:::i;:::-;3110:63;;3066:117;3222:2;3248:53;3293:7;3284:6;3273:9;3269:22;3248:53;:::i;:::-;3238:63;;3193:118;2994:324;;;;;:::o;3324:564::-;3416:6;3424;3432;3481:2;3469:9;3460:7;3456:23;3452:32;3449:2;;;3497:1;3494;3487:12;3449:2;3568:1;3557:9;3553:17;3540:31;3598:18;3590:6;3587:30;3584:2;;;3630:1;3627;3620:12;3584:2;3666:80;3738:7;3729:6;3718:9;3714:22;3666:80;:::i;:::-;3648:98;;;;3511:245;3795:2;3821:50;3863:7;3854:6;3843:9;3839:22;3821:50;:::i;:::-;3811:60;;3766:115;3439:449;;;;;:::o;3894:256::-;3950:6;3999:2;3987:9;3978:7;3974:23;3970:32;3967:2;;;4015:1;4012;4005:12;3967:2;4058:1;4083:50;4125:7;4116:6;4105:9;4101:22;4083:50;:::i;:::-;4073:60;;4029:114;3957:193;;;;:::o;4156:262::-;4215:6;4264:2;4252:9;4243:7;4239:23;4235:32;4232:2;;;4280:1;4277;4270:12;4232:2;4323:1;4348:53;4393:7;4384:6;4373:9;4369:22;4348:53;:::i;:::-;4338:63;;4294:117;4222:196;;;;:::o;4424:407::-;4492:6;4500;4549:2;4537:9;4528:7;4524:23;4520:32;4517:2;;;4565:1;4562;4555:12;4517:2;4608:1;4633:53;4678:7;4669:6;4658:9;4654:22;4633:53;:::i;:::-;4623:63;;4579:117;4735:2;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4706:118;4507:324;;;;;:::o;4837:698::-;4923:6;4931;4939;4947;4996:3;4984:9;4975:7;4971:23;4967:33;4964:2;;;5013:1;5010;5003:12;4964:2;5056:1;5081:53;5126:7;5117:6;5106:9;5102:22;5081:53;:::i;:::-;5071:63;;5027:117;5183:2;5209:53;5254:7;5245:6;5234:9;5230:22;5209:53;:::i;:::-;5199:63;;5154:118;5311:2;5337:53;5382:7;5373:6;5362:9;5358:22;5337:53;:::i;:::-;5327:63;;5282:118;5439:2;5465:53;5510:7;5501:6;5490:9;5486:22;5465:53;:::i;:::-;5455:63;;5410:118;4954:581;;;;;;;:::o;5541:179::-;5610:10;5631:46;5673:3;5665:6;5631:46;:::i;:::-;5709:4;5704:3;5700:14;5686:28;;5621:99;;;;:::o;5726:108::-;5803:24;5821:5;5803:24;:::i;:::-;5798:3;5791:37;5781:53;;:::o;5840:118::-;5927:24;5945:5;5927:24;:::i;:::-;5922:3;5915:37;5905:53;;:::o;5994:732::-;6113:3;6142:54;6190:5;6142:54;:::i;:::-;6212:86;6291:6;6286:3;6212:86;:::i;:::-;6205:93;;6322:56;6372:5;6322:56;:::i;:::-;6401:7;6432:1;6417:284;6442:6;6439:1;6436:13;6417:284;;;6518:6;6512:13;6545:63;6604:3;6589:13;6545:63;:::i;:::-;6538:70;;6631:60;6684:6;6631:60;:::i;:::-;6621:70;;6477:224;6464:1;6461;6457:9;6452:14;;6417:284;;;6421:14;6717:3;6710:10;;6118:608;;;;;;;:::o;6732:109::-;6813:21;6828:5;6813:21;:::i;:::-;6808:3;6801:34;6791:50;;:::o;6847:147::-;6942:45;6981:5;6942:45;:::i;:::-;6937:3;6930:58;6920:74;;:::o;7000:364::-;7088:3;7116:39;7149:5;7116:39;:::i;:::-;7171:71;7235:6;7230:3;7171:71;:::i;:::-;7164:78;;7251:52;7296:6;7291:3;7284:4;7277:5;7273:16;7251:52;:::i;:::-;7328:29;7350:6;7328:29;:::i;:::-;7323:3;7319:39;7312:46;;7092:272;;;;;:::o;7370:366::-;7512:3;7533:67;7597:2;7592:3;7533:67;:::i;:::-;7526:74;;7609:93;7698:3;7609:93;:::i;:::-;7727:2;7722:3;7718:12;7711:19;;7516:220;;;:::o;7742:366::-;7884:3;7905:67;7969:2;7964:3;7905:67;:::i;:::-;7898:74;;7981:93;8070:3;7981:93;:::i;:::-;8099:2;8094:3;8090:12;8083:19;;7888:220;;;:::o;8114:366::-;8256:3;8277:67;8341:2;8336:3;8277:67;:::i;:::-;8270:74;;8353:93;8442:3;8353:93;:::i;:::-;8471:2;8466:3;8462:12;8455:19;;8260:220;;;:::o;8486:366::-;8628:3;8649:67;8713:2;8708:3;8649:67;:::i;:::-;8642:74;;8725:93;8814:3;8725:93;:::i;:::-;8843:2;8838:3;8834:12;8827:19;;8632:220;;;:::o;8858:366::-;9000:3;9021:67;9085:2;9080:3;9021:67;:::i;:::-;9014:74;;9097:93;9186:3;9097:93;:::i;:::-;9215:2;9210:3;9206:12;9199:19;;9004:220;;;:::o;9230:366::-;9372:3;9393:67;9457:2;9452:3;9393:67;:::i;:::-;9386:74;;9469:93;9558:3;9469:93;:::i;:::-;9587:2;9582:3;9578:12;9571:19;;9376:220;;;:::o;9602:366::-;9744:3;9765:67;9829:2;9824:3;9765:67;:::i;:::-;9758:74;;9841:93;9930:3;9841:93;:::i;:::-;9959:2;9954:3;9950:12;9943:19;;9748:220;;;:::o;9974:366::-;10116:3;10137:67;10201:2;10196:3;10137:67;:::i;:::-;10130:74;;10213:93;10302:3;10213:93;:::i;:::-;10331:2;10326:3;10322:12;10315:19;;10120:220;;;:::o;10346:366::-;10488:3;10509:67;10573:2;10568:3;10509:67;:::i;:::-;10502:74;;10585:93;10674:3;10585:93;:::i;:::-;10703:2;10698:3;10694:12;10687:19;;10492:220;;;:::o;10718:366::-;10860:3;10881:67;10945:2;10940:3;10881:67;:::i;:::-;10874:74;;10957:93;11046:3;10957:93;:::i;:::-;11075:2;11070:3;11066:12;11059:19;;10864:220;;;:::o;11090:366::-;11232:3;11253:67;11317:2;11312:3;11253:67;:::i;:::-;11246:74;;11329:93;11418:3;11329:93;:::i;:::-;11447:2;11442:3;11438:12;11431:19;;11236:220;;;:::o;11462:366::-;11604:3;11625:67;11689:2;11684:3;11625:67;:::i;:::-;11618:74;;11701:93;11790:3;11701:93;:::i;:::-;11819:2;11814:3;11810:12;11803:19;;11608:220;;;:::o;11834:398::-;11993:3;12014:83;12095:1;12090:3;12014:83;:::i;:::-;12007:90;;12106:93;12195:3;12106:93;:::i;:::-;12224:1;12219:3;12215:11;12208:18;;11997:235;;;:::o;12238:366::-;12380:3;12401:67;12465:2;12460:3;12401:67;:::i;:::-;12394:74;;12477:93;12566:3;12477:93;:::i;:::-;12595:2;12590:3;12586:12;12579:19;;12384:220;;;:::o;12610:366::-;12752:3;12773:67;12837:2;12832:3;12773:67;:::i;:::-;12766:74;;12849:93;12938:3;12849:93;:::i;:::-;12967:2;12962:3;12958:12;12951:19;;12756:220;;;:::o;12982:366::-;13124:3;13145:67;13209:2;13204:3;13145:67;:::i;:::-;13138:74;;13221:93;13310:3;13221:93;:::i;:::-;13339:2;13334:3;13330:12;13323:19;;13128:220;;;:::o;13354:366::-;13496:3;13517:67;13581:2;13576:3;13517:67;:::i;:::-;13510:74;;13593:93;13682:3;13593:93;:::i;:::-;13711:2;13706:3;13702:12;13695:19;;13500:220;;;:::o;13726:118::-;13813:24;13831:5;13813:24;:::i;:::-;13808:3;13801:37;13791:53;;:::o;13850:112::-;13933:22;13949:5;13933:22;:::i;:::-;13928:3;13921:35;13911:51;;:::o;13968:379::-;14152:3;14174:147;14317:3;14174:147;:::i;:::-;14167:154;;14338:3;14331:10;;14156:191;;;:::o;14353:222::-;14446:4;14484:2;14473:9;14469:18;14461:26;;14497:71;14565:1;14554:9;14550:17;14541:6;14497:71;:::i;:::-;14451:124;;;;:::o;14581:210::-;14668:4;14706:2;14695:9;14691:18;14683:26;;14719:65;14781:1;14770:9;14766:17;14757:6;14719:65;:::i;:::-;14673:118;;;;:::o;14797:313::-;14910:4;14948:2;14937:9;14933:18;14925:26;;14997:9;14991:4;14987:20;14983:1;14972:9;14968:17;14961:47;15025:78;15098:4;15089:6;15025:78;:::i;:::-;15017:86;;14915:195;;;;:::o;15116:419::-;15282:4;15320:2;15309:9;15305:18;15297:26;;15369:9;15363:4;15359:20;15355:1;15344:9;15340:17;15333:47;15397:131;15523:4;15397:131;:::i;:::-;15389:139;;15287:248;;;:::o;15541:419::-;15707:4;15745:2;15734:9;15730:18;15722:26;;15794:9;15788:4;15784:20;15780:1;15769:9;15765:17;15758:47;15822:131;15948:4;15822:131;:::i;:::-;15814:139;;15712:248;;;:::o;15966:419::-;16132:4;16170:2;16159:9;16155:18;16147:26;;16219:9;16213:4;16209:20;16205:1;16194:9;16190:17;16183:47;16247:131;16373:4;16247:131;:::i;:::-;16239:139;;16137:248;;;:::o;16391:419::-;16557:4;16595:2;16584:9;16580:18;16572:26;;16644:9;16638:4;16634:20;16630:1;16619:9;16615:17;16608:47;16672:131;16798:4;16672:131;:::i;:::-;16664:139;;16562:248;;;:::o;16816:419::-;16982:4;17020:2;17009:9;17005:18;16997:26;;17069:9;17063:4;17059:20;17055:1;17044:9;17040:17;17033:47;17097:131;17223:4;17097:131;:::i;:::-;17089:139;;16987:248;;;:::o;17241:419::-;17407:4;17445:2;17434:9;17430:18;17422:26;;17494:9;17488:4;17484:20;17480:1;17469:9;17465:17;17458:47;17522:131;17648:4;17522:131;:::i;:::-;17514:139;;17412:248;;;:::o;17666:419::-;17832:4;17870:2;17859:9;17855:18;17847:26;;17919:9;17913:4;17909:20;17905:1;17894:9;17890:17;17883:47;17947:131;18073:4;17947:131;:::i;:::-;17939:139;;17837:248;;;:::o;18091:419::-;18257:4;18295:2;18284:9;18280:18;18272:26;;18344:9;18338:4;18334:20;18330:1;18319:9;18315:17;18308:47;18372:131;18498:4;18372:131;:::i;:::-;18364:139;;18262:248;;;:::o;18516:419::-;18682:4;18720:2;18709:9;18705:18;18697:26;;18769:9;18763:4;18759:20;18755:1;18744:9;18740:17;18733:47;18797:131;18923:4;18797:131;:::i;:::-;18789:139;;18687:248;;;:::o;18941:419::-;19107:4;19145:2;19134:9;19130:18;19122:26;;19194:9;19188:4;19184:20;19180:1;19169:9;19165:17;19158:47;19222:131;19348:4;19222:131;:::i;:::-;19214:139;;19112:248;;;:::o;19366:419::-;19532:4;19570:2;19559:9;19555:18;19547:26;;19619:9;19613:4;19609:20;19605:1;19594:9;19590:17;19583:47;19647:131;19773:4;19647:131;:::i;:::-;19639:139;;19537:248;;;:::o;19791:419::-;19957:4;19995:2;19984:9;19980:18;19972:26;;20044:9;20038:4;20034:20;20030:1;20019:9;20015:17;20008:47;20072:131;20198:4;20072:131;:::i;:::-;20064:139;;19962:248;;;:::o;20216:419::-;20382:4;20420:2;20409:9;20405:18;20397:26;;20469:9;20463:4;20459:20;20455:1;20444:9;20440:17;20433:47;20497:131;20623:4;20497:131;:::i;:::-;20489:139;;20387:248;;;:::o;20641:419::-;20807:4;20845:2;20834:9;20830:18;20822:26;;20894:9;20888:4;20884:20;20880:1;20869:9;20865:17;20858:47;20922:131;21048:4;20922:131;:::i;:::-;20914:139;;20812:248;;;:::o;21066:419::-;21232:4;21270:2;21259:9;21255:18;21247:26;;21319:9;21313:4;21309:20;21305:1;21294:9;21290:17;21283:47;21347:131;21473:4;21347:131;:::i;:::-;21339:139;;21237:248;;;:::o;21491:419::-;21657:4;21695:2;21684:9;21680:18;21672:26;;21744:9;21738:4;21734:20;21730:1;21719:9;21715:17;21708:47;21772:131;21898:4;21772:131;:::i;:::-;21764:139;;21662:248;;;:::o;21916:222::-;22009:4;22047:2;22036:9;22032:18;22024:26;;22060:71;22128:1;22117:9;22113:17;22104:6;22060:71;:::i;:::-;22014:124;;;;:::o;22144:831::-;22407:4;22445:3;22434:9;22430:19;22422:27;;22459:71;22527:1;22516:9;22512:17;22503:6;22459:71;:::i;:::-;22540:80;22616:2;22605:9;22601:18;22592:6;22540:80;:::i;:::-;22667:9;22661:4;22657:20;22652:2;22641:9;22637:18;22630:48;22695:108;22798:4;22789:6;22695:108;:::i;:::-;22687:116;;22813:72;22881:2;22870:9;22866:18;22857:6;22813:72;:::i;:::-;22895:73;22963:3;22952:9;22948:19;22939:6;22895:73;:::i;:::-;22412:563;;;;;;;;:::o;22981:214::-;23070:4;23108:2;23097:9;23093:18;23085:26;;23121:67;23185:1;23174:9;23170:17;23161:6;23121:67;:::i;:::-;23075:120;;;;:::o;23201:132::-;23268:4;23291:3;23283:11;;23321:4;23316:3;23312:14;23304:22;;23273:60;;;:::o;23339:114::-;23406:6;23440:5;23434:12;23424:22;;23413:40;;;:::o;23459:99::-;23511:6;23545:5;23539:12;23529:22;;23518:40;;;:::o;23564:113::-;23634:4;23666;23661:3;23657:14;23649:22;;23639:38;;;:::o;23683:184::-;23782:11;23816:6;23811:3;23804:19;23856:4;23851:3;23847:14;23832:29;;23794:73;;;;:::o;23873:147::-;23974:11;24011:3;23996:18;;23986:34;;;;:::o;24026:169::-;24110:11;24144:6;24139:3;24132:19;24184:4;24179:3;24175:14;24160:29;;24122:73;;;;:::o;24201:305::-;24241:3;24260:20;24278:1;24260:20;:::i;:::-;24255:25;;24294:20;24312:1;24294:20;:::i;:::-;24289:25;;24448:1;24380:66;24376:74;24373:1;24370:81;24367:2;;;24454:18;;:::i;:::-;24367:2;24498:1;24495;24491:9;24484:16;;24245:261;;;;:::o;24512:185::-;24552:1;24569:20;24587:1;24569:20;:::i;:::-;24564:25;;24603:20;24621:1;24603:20;:::i;:::-;24598:25;;24642:1;24632:2;;24647:18;;:::i;:::-;24632:2;24689:1;24686;24682:9;24677:14;;24554:143;;;;:::o;24703:348::-;24743:7;24766:20;24784:1;24766:20;:::i;:::-;24761:25;;24800:20;24818:1;24800:20;:::i;:::-;24795:25;;24988:1;24920:66;24916:74;24913:1;24910:81;24905:1;24898:9;24891:17;24887:105;24884:2;;;24995:18;;:::i;:::-;24884:2;25043:1;25040;25036:9;25025:20;;24751:300;;;;:::o;25057:191::-;25097:4;25117:20;25135:1;25117:20;:::i;:::-;25112:25;;25151:20;25169:1;25151:20;:::i;:::-;25146:25;;25190:1;25187;25184:8;25181:2;;;25195:18;;:::i;:::-;25181:2;25240:1;25237;25233:9;25225:17;;25102:146;;;;:::o;25254:96::-;25291:7;25320:24;25338:5;25320:24;:::i;:::-;25309:35;;25299:51;;;:::o;25356:90::-;25390:7;25433:5;25426:13;25419:21;25408:32;;25398:48;;;:::o;25452:126::-;25489:7;25529:42;25522:5;25518:54;25507:65;;25497:81;;;:::o;25584:77::-;25621:7;25650:5;25639:16;;25629:32;;;:::o;25667:86::-;25702:7;25742:4;25735:5;25731:16;25720:27;;25710:43;;;:::o;25759:121::-;25817:9;25850:24;25868:5;25850:24;:::i;:::-;25837:37;;25827:53;;;:::o;25886:307::-;25954:1;25964:113;25978:6;25975:1;25972:13;25964:113;;;26063:1;26058:3;26054:11;26048:18;26044:1;26039:3;26035:11;26028:39;26000:2;25997:1;25993:10;25988:15;;25964:113;;;26095:6;26092:1;26089:13;26086:2;;;26175:1;26166:6;26161:3;26157:16;26150:27;26086:2;25935:258;;;;:::o;26199:320::-;26243:6;26280:1;26274:4;26270:12;26260:22;;26327:1;26321:4;26317:12;26348:18;26338:2;;26404:4;26396:6;26392:17;26382:27;;26338:2;26466;26458:6;26455:14;26435:18;26432:38;26429:2;;;26485:18;;:::i;:::-;26429:2;26250:269;;;;:::o;26525:233::-;26564:3;26587:24;26605:5;26587:24;:::i;:::-;26578:33;;26633:66;26626:5;26623:77;26620:2;;;26703:18;;:::i;:::-;26620:2;26750:1;26743:5;26739:13;26732:20;;26568:190;;;:::o;26764:180::-;26812:77;26809:1;26802:88;26909:4;26906:1;26899:15;26933:4;26930:1;26923:15;26950:180;26998:77;26995:1;26988:88;27095:4;27092:1;27085:15;27119:4;27116:1;27109:15;27136:180;27184:77;27181:1;27174:88;27281:4;27278:1;27271:15;27305:4;27302:1;27295:15;27322:102;27363:6;27414:2;27410:7;27405:2;27398:5;27394:14;27390:28;27380:38;;27370:54;;;:::o;27430:222::-;27570:34;27566:1;27558:6;27554:14;27547:58;27639:5;27634:2;27626:6;27622:15;27615:30;27536:116;:::o;27658:172::-;27798:24;27794:1;27786:6;27782:14;27775:48;27764:66;:::o;27836:225::-;27976:34;27972:1;27964:6;27960:14;27953:58;28045:8;28040:2;28032:6;28028:15;28021:33;27942:119;:::o;28067:221::-;28207:34;28203:1;28195:6;28191:14;28184:58;28276:4;28271:2;28263:6;28259:15;28252:29;28173:115;:::o;28294:172::-;28434:24;28430:1;28422:6;28418:14;28411:48;28400:66;:::o;28472:179::-;28612:31;28608:1;28600:6;28596:14;28589:55;28578:73;:::o;28657:225::-;28797:34;28793:1;28785:6;28781:14;28774:58;28866:8;28861:2;28853:6;28849:15;28842:33;28763:119;:::o;28888:241::-;29028:34;29024:1;29016:6;29012:14;29005:58;29097:24;29092:2;29084:6;29080:15;29073:49;28994:135;:::o;29135:177::-;29275:29;29271:1;29263:6;29259:14;29252:53;29241:71;:::o;29318:240::-;29458:34;29454:1;29446:6;29442:14;29435:58;29527:23;29522:2;29514:6;29510:15;29503:48;29424:134;:::o;29564:182::-;29704:34;29700:1;29692:6;29688:14;29681:58;29670:76;:::o;29752:224::-;29892:34;29888:1;29880:6;29876:14;29869:58;29961:7;29956:2;29948:6;29944:15;29937:32;29858:118;:::o;29982:114::-;30088:8;:::o;30102:223::-;30242:34;30238:1;30230:6;30226:14;30219:58;30311:6;30306:2;30298:6;30294:15;30287:31;30208:117;:::o;30331:176::-;30471:28;30467:1;30459:6;30455:14;30448:52;30437:70;:::o;30513:224::-;30653:34;30649:1;30641:6;30637:14;30630:58;30722:7;30717:2;30709:6;30705:15;30698:32;30619:118;:::o;30743:162::-;30883:14;30879:1;30871:6;30867:14;30860:38;30849:56;:::o;30911:122::-;30984:24;31002:5;30984:24;:::i;:::-;30977:5;30974:35;30964:2;;31023:1;31020;31013:12;30964:2;30954:79;:::o;31039:116::-;31109:21;31124:5;31109:21;:::i;:::-;31102:5;31099:32;31089:2;;31145:1;31142;31135:12;31089:2;31079:76;:::o;31161:122::-;31234:24;31252:5;31234:24;:::i;:::-;31227:5;31224:35;31214:2;;31273:1;31270;31263:12;31214:2;31204:79;:::o
Swarm Source
ipfs://e02c81c5a24ba4e189cbc7d46600e0ce2d1d593a523e6f79a7fb22636e83d162
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.