ETH Price: $3,408.95 (-0.20%)
Gas: 7 Gwei

Token

Neo Cypherpunk (NEOPUNK)
 

Overview

Max Total Supply

21,000,000,000,000 NEOPUNK

Holders

162

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.315914843398759789 NEOPUNK

Value
$0.00
0xf1466ebdd36d5e3638a12316477520bf3b2378a1
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NeoCypherpunk

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-12
*/

// File: @openzeppelin/contracts/utils/Context.sol


// 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;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// 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);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @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].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's 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 {}
}




pragma solidity ^0.8.0;



interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(address token,uint amountTokenDesired,uint amountTokenMin,uint amountETHMin,address to,uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
} 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn,uint amountOutMin,address[] calldata path,address to,uint deadline) external;
}
interface IUniswapV2Factory {
     function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract NeoCypherpunk is ERC20, Ownable {
    IUniswapV2Router02 public uniswapV2Router; 
    bool private swapping;
    bool public tradeEnabled = false;
    uint256 public marketingTaxSell = 50; // marketing tax on sell
    uint256 public marketingTaxBuy = 50; // marketing tax on sell

    uint256 public maxTxAmount = 21_000_000_000_000 ether; 
    uint256 public maxWalletAmount = 21_000_000_000_000 ether; 
    uint256 public marketingTaxThreshold = 2_100_000_000 ether; 

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedFromLimits;
    mapping (address => bool) public automatedMarketMakerPairs;

    address public marketingAddress = payable(0x6d64412485bA8E7A7bc962f23180F0bdF0F32857);
    address public uniswapV2Pair;

    event TradeEnabled();

    constructor() ERC20("Neo Cypherpunk", "NEOPUNK") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingAddress] = true;
        _isExcludedFromLimits[owner()] = true;
        _isExcludedFromLimits[0x000000000000000000000000000000000000dEaD] = true;
        _isExcludedFromLimits[marketingAddress] = true;
        _mint(msg.sender, 21_000_000_000_000 * 10**decimals());
    }
    
    receive() external payable {}

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
    
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (from != owner() && to != owner()) {
            if(!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                require(tradeEnabled, "Trading is currently disabled");
                require(amount <= maxTxAmount, "Transfer amount exceeds the maximum allowed");
                if (to != uniswapV2Pair) {
                    require(balanceOf(to) + amount < maxWalletAmount, "TOKEN: Balance exceeds wallet size!");
                }
            }
        }

        bool canSendMarketingFee = balanceOf(address(this)) >= marketingTaxThreshold;
         if( canSendMarketingFee &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != owner() &&
            to != owner()
        ) 
        {
            claimMarketingFees();
        } 

        bool takeFee = !swapping;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }   

        if (takeFee) {
            if (automatedMarketMakerPairs[to]) {
                 uint256 marketingTax = amount * marketingTaxSell / 100;
                amount = amount - marketingTax;
                super._transfer(from, address(this), marketingTax);
            }
            else if (automatedMarketMakerPairs[from]) {
                 uint256 marketingTax = amount * marketingTaxBuy / 100;
                amount = amount - marketingTax;
                super._transfer(from, address(this), marketingTax);
            }
        }
            
        super._transfer(from, to, amount);
    }


    function claimMarketingFees() public {
        uint _pendingMarketingFee = balanceOf(address(this));
        if (_pendingMarketingFee > 0) 
        {
        swapping = true;    
        swapTokensForEth(_pendingMarketingFee);
        uint amount = address(this).balance;
        (bool success, ) = address(marketingAddress).call{ value: amount }("");
        require(success, "Address: unable to extract value, tx may have reverted");
        swapping = false;         
        }
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
    }

    function excludeMultipleAccountsFromFees(address[] memory accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
    }

    function excludeFromLimits(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromLimits[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromLimits[account] = excluded;
    }

    function excludeMultipleAccountsFromLimits(address[] memory accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromLimits[accounts[i]] = excluded;
        }
    }

    function enableTrading() external onlyOwner {
        tradeEnabled = true;
        emit TradeEnabled();
    }

    function setmarketingTaxSell(uint256 selltax) external onlyOwner {
        require(selltax <= 50, "SellMarketingTax cannot be more than 50%");
        marketingTaxSell = selltax;
    }

    function setmarketingTaxBuy(uint256 buytax) external onlyOwner {
        require(buytax <= 50, "BuyMarketingTax cannot be more than 50%");
        marketingTaxBuy = buytax;
    }

    function setMaxTxAmount(uint256 amount) external onlyOwner {
        require(amount >= 210_000_000_000 ether, "MaxTxAmount cannot be less");
        maxTxAmount = amount;
    }

    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        require(amount >= 410_000_000_000 ether, "MaxWalletAmount cannot be less");
        maxWalletAmount = amount;
    }

    function setMarketingTaxThreshold(uint256 amount) external onlyOwner {
        marketingTaxThreshold = amount;
    }

    function setMarketingAddress(address payable _newaddress) external  onlyOwner {
        _isExcludedFromLimits[marketingAddress] = false;
        _isExcludedFromFees[marketingAddress] = false;
        marketingAddress = _newaddress;
        _isExcludedFromLimits[marketingAddress] = true;
        _isExcludedFromFees[marketingAddress] = true;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

}

Contract Security Audit

Contract ABI

[{"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":[],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimMarketingFees","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newaddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMarketingTaxThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buytax","type":"uint256"}],"name":"setmarketingTaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"selltax","type":"uint256"}],"name":"setmarketingTaxSell","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":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600660156101000a81548160ff021916908315150217905550603260075560326008556d01090ea8dd15c7978437400000006009556d01090ea8dd15c797843740000000600a556b06c9144c1c690d4cb4000000600b55736d64412485ba8e7a7bc962f23180f0bdf0f32857600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000bf57600080fd5b506040518060400160405280600e81526020017f4e656f2043797068657270756e6b0000000000000000000000000000000000008152506040518060400160405280600781526020017f4e454f50554e4b0000000000000000000000000000000000000000000000000081525081600390816200013d919062000c29565b5080600490816200014f919062000c29565b50505062000172620001666200064760201b60201c565b6200064f60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ff919062000d7a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028d919062000d7a565b6040518363ffffffff1660e01b8152600401620002ac92919062000dbd565b6020604051808303816000875af1158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f2919062000d7a565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003898160016200071560201b60201c565b6001600c60006200039f6200080560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000620004d86200080560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200063f33620006126200082f60201b60201c565b600a62000620919062000f7a565b651319718a500062000633919062000fcb565b6200083860201b60201c565b50506200119a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620007aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a1906200109d565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a1906200110f565b60405180910390fd5b620008be60008383620009a560201b60201c565b8060026000828254620008d2919062001131565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200098591906200117d565b60405180910390a3620009a160008383620009aa60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a3157607f821691505b60208210810362000a475762000a46620009e9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ab17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a72565b62000abd868362000a72565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b0a62000b0462000afe8462000ad5565b62000adf565b62000ad5565b9050919050565b6000819050919050565b62000b268362000ae9565b62000b3e62000b358262000b11565b84845462000a7f565b825550505050565b600090565b62000b5562000b46565b62000b6281848462000b1b565b505050565b5b8181101562000b8a5762000b7e60008262000b4b565b60018101905062000b68565b5050565b601f82111562000bd95762000ba38162000a4d565b62000bae8462000a62565b8101602085101562000bbe578190505b62000bd662000bcd8562000a62565b83018262000b67565b50505b505050565b600082821c905092915050565b600062000bfe6000198460080262000bde565b1980831691505092915050565b600062000c19838362000beb565b9150826002028217905092915050565b62000c3482620009af565b67ffffffffffffffff81111562000c505762000c4f620009ba565b5b62000c5c825462000a18565b62000c6982828562000b8e565b600060209050601f83116001811462000ca1576000841562000c8c578287015190505b62000c98858262000c0b565b86555062000d08565b601f19841662000cb18662000a4d565b60005b8281101562000cdb5784890151825560018201915060208501945060208101905062000cb4565b8683101562000cfb578489015162000cf7601f89168262000beb565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d428262000d15565b9050919050565b62000d548162000d35565b811462000d6057600080fd5b50565b60008151905062000d748162000d49565b92915050565b60006020828403121562000d935762000d9262000d10565b5b600062000da38482850162000d63565b91505092915050565b62000db78162000d35565b82525050565b600060408201905062000dd4600083018562000dac565b62000de3602083018462000dac565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000e785780860481111562000e505762000e4f62000dea565b5b600185161562000e605780820291505b808102905062000e708562000e19565b945062000e30565b94509492505050565b60008262000e93576001905062000f66565b8162000ea3576000905062000f66565b816001811462000ebc576002811462000ec75762000efd565b600191505062000f66565b60ff84111562000edc5762000edb62000dea565b5b8360020a91508482111562000ef65762000ef562000dea565b5b5062000f66565b5060208310610133831016604e8410600b841016171562000f375782820a90508381111562000f315762000f3062000dea565b5b62000f66565b62000f46848484600162000e26565b9250905081840481111562000f605762000f5f62000dea565b5b81810290505b9392505050565b600060ff82169050919050565b600062000f878262000ad5565b915062000f948362000f6d565b925062000fc37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e81565b905092915050565b600062000fd88262000ad5565b915062000fe58362000ad5565b925082820262000ff58162000ad5565b915082820484148315176200100f576200100e62000dea565b5b5092915050565b600082825260208201905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006200108560388362001016565b9150620010928262001027565b604082019050919050565b60006020820190508181036000830152620010b88162001076565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010f7601f8362001016565b91506200110482620010bf565b602082019050919050565b600060208201905081810360008301526200112a81620010e8565b9050919050565b60006200113e8262000ad5565b91506200114b8362000ad5565b925082820190508082111562001166576200116562000dea565b5b92915050565b620011778162000ad5565b82525050565b60006020820190506200119460008301846200116c565b92915050565b613fdd80620011aa6000396000f3fe60806040526004361061023e5760003560e01c80638c0b5e221161012e578063b62496f5116100ab578063d621e8131161006f578063d621e81314610869578063dd62ed3e14610894578063e550573d146108d1578063ec28438a1461090e578063f2fde38b1461093757610245565b8063b62496f514610788578063c0246668146107c5578063c0a904a2146107ee578063c492f04614610817578063c6e5a5ab1461084057610245565b8063a457c2d7116100f2578063a457c2d71461068d578063a5ece941146106ca578063a9059cbb146106f5578063aa4bde2814610732578063b2e208791461075d57610245565b80638c0b5e22146105ba5780638da5cb5b146105e5578063906e9dd01461061057806395d89b41146106395780639a7a23d61461066457610245565b806342d0b0bc116101bc578063715018a611610180578063715018a61461050f578063721e6233146105265780637c3a128f146105515780638753cc481461057a5780638a8c523c146105a357610245565b806342d0b0bc1461041657806349bd5a5e146104415780634fbee1931461046c57806365b8dbc0146104a957806370a08231146104d257610245565b806318160ddd1161020357806318160ddd1461031d57806323b872dd1461034857806327a14fc214610385578063313ce567146103ae57806339509351146103d957610245565b8062272d601461024a57806306fdde031461027357806307dce0f81461029e578063095ea7b3146102b55780631694505e146102f257610245565b3661024557005b600080fd5b34801561025657600080fd5b50610271600480360381019061026c9190612a3e565b610960565b005b34801561027f57600080fd5b506102886109b6565b6040516102959190612afb565b60405180910390f35b3480156102aa57600080fd5b506102b3610a48565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190612b7b565b610b76565b6040516102e99190612bd6565b60405180910390f35b3480156102fe57600080fd5b50610307610b99565b6040516103149190612c50565b60405180910390f35b34801561032957600080fd5b50610332610bbf565b60405161033f9190612c7a565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190612c95565b610bc9565b60405161037c9190612bd6565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612a3e565b610bf8565b005b3480156103ba57600080fd5b506103c3610c5a565b6040516103d09190612d04565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190612b7b565b610c63565b60405161040d9190612bd6565b60405180910390f35b34801561042257600080fd5b5061042b610c9a565b6040516104389190612c7a565b60405180910390f35b34801561044d57600080fd5b50610456610ca0565b6040516104639190612d2e565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190612d49565b610cc6565b6040516104a09190612bd6565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612d49565b610d1c565b005b3480156104de57600080fd5b506104f960048036038101906104f49190612d49565b610fdc565b6040516105069190612c7a565b60405180910390f35b34801561051b57600080fd5b50610524611024565b005b34801561053257600080fd5b5061053b611038565b6040516105489190612c7a565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190612a3e565b61103e565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612a3e565b611094565b005b3480156105af57600080fd5b506105b86110a6565b005b3480156105c657600080fd5b506105cf6110f7565b6040516105dc9190612c7a565b60405180910390f35b3480156105f157600080fd5b506105fa6110fd565b6040516106079190612d2e565b60405180910390f35b34801561061c57600080fd5b5061063760048036038101906106329190612db4565b611127565b005b34801561064557600080fd5b5061064e61135b565b60405161065b9190612afb565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190612e0d565b6113ed565b005b34801561069957600080fd5b506106b460048036038101906106af9190612b7b565b611493565b6040516106c19190612bd6565b60405180910390f35b3480156106d657600080fd5b506106df61150a565b6040516106ec9190612d2e565b60405180910390f35b34801561070157600080fd5b5061071c60048036038101906107179190612b7b565b611530565b6040516107299190612bd6565b60405180910390f35b34801561073e57600080fd5b50610747611553565b6040516107549190612c7a565b60405180910390f35b34801561076957600080fd5b50610772611559565b60405161077f9190612c7a565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612d49565b61155f565b6040516107bc9190612bd6565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190612e0d565b61157f565b005b3480156107fa57600080fd5b5061081560048036038101906108109190612e0d565b611674565b005b34801561082357600080fd5b5061083e60048036038101906108399190612f95565b611769565b005b34801561084c57600080fd5b5061086760048036038101906108629190612f95565b611806565b005b34801561087557600080fd5b5061087e6118a3565b60405161088b9190612bd6565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b69190612ff1565b6118b6565b6040516108c89190612c7a565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f39190612d49565b61193d565b6040516109059190612bd6565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190612a3e565b61195d565b005b34801561094357600080fd5b5061095e60048036038101906109599190612d49565b6119bf565b005b610968611a42565b60328111156109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a3906130a3565b60405180910390fd5b8060088190555050565b6060600380546109c5906130f2565b80601f01602080910402602001604051908101604052809291908181526020018280546109f1906130f2565b8015610a3e5780601f10610a1357610100808354040283529160200191610a3e565b820191906000526020600020905b815481529060010190602001808311610a2157829003601f168201915b5050505050905090565b6000610a5330610fdc565b90506000811115610b73576001600660146101000a81548160ff021916908315150217905550610a8281611ac0565b60004790506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610acf90613154565b60006040518083038185875af1925050503d8060008114610b0c576040519150601f19603f3d011682016040523d82523d6000602084013e610b11565b606091505b5050905080610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906131db565b60405180910390fd5b6000600660146101000a81548160ff02191690831515021790555050505b50565b600080610b81611d03565b9050610b8e818585611d0b565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080610bd4611d03565b9050610be1858285611ed4565b610bec858585611f60565b60019150509392505050565b610c00611a42565b6c052cc80d17f3ed618b90000000811015610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790613247565b60405180910390fd5b80600a8190555050565b60006012905090565b600080610c6e611d03565b9050610c8f818585610c8085896118b6565b610c8a9190613296565b611d0b565b600191505092915050565b60075481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d24611a42565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab9061333c565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e889190613371565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f359190613371565b6040518363ffffffff1660e01b8152600401610f5292919061339e565b6020604051808303816000875af1158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f959190613371565b905080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102c611a42565b61103660006125c1565b565b60085481565b611046611a42565b603281111561108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190613439565b60405180910390fd5b8060078190555050565b61109c611a42565b80600b8190555050565b6110ae611a42565b6001600660156101000a81548160ff0219169083151502179055507f0270d74976d9c744a465e24d0e2675086607ed6163edf4e36cabaf9740ce2ef460405160405180910390a1565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61112f611a42565b6000600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606004805461136a906130f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611396906130f2565b80156113e35780601f106113b8576101008083540402835291602001916113e3565b820191906000526020600020905b8154815290600101906020018083116113c657829003601f168201915b5050505050905090565b6113f5611a42565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c906134f1565b60405180910390fd5b61148f8282612687565b5050565b60008061149e611d03565b905060006114ac82866118b6565b9050838110156114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890613583565b60405180910390fd5b6114fe8286868403611d0b565b60019250505092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061153b611d03565b9050611548818585611f60565b600191505092915050565b600a5481565b600b5481565b600e6020528060005260406000206000915054906101000a900460ff1681565b611587611a42565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090613615565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61167c611a42565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590613615565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611771611a42565b60005b82518110156118015781600c600085848151811061179557611794613635565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117f990613664565b915050611774565b505050565b61180e611a42565b60005b825181101561189e5781600d600085848151811061183257611831613635565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061189690613664565b915050611811565b505050565b600660159054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b611965611a42565b6c02a68bedbb190931f6500000008110156119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac906136f8565b60405180910390fd5b8060098190555050565b6119c7611a42565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d9061378a565b60405180910390fd5b611a3f816125c1565b50565b611a4a611d03565b73ffffffffffffffffffffffffffffffffffffffff16611a686110fd565b73ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906137f6565b60405180910390fd5b565b6000600267ffffffffffffffff811115611add57611adc612e52565b5b604051908082528060200260200182016040528015611b0b5781602001602082028036833780820191505090505b5090503081600081518110611b2357611b22613635565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bee9190613371565b81600181518110611c0257611c01613635565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611c6930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d0b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611ccd95949392919061390f565b600060405180830381600087803b158015611ce757600080fd5b505af1158015611cfb573d6000803e3d6000fd5b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d71906139db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090613a6d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ec79190612c7a565b60405180910390a3505050565b6000611ee084846118b6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f5a5781811015611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613ad9565b60405180910390fd5b611f598484848403611d0b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc690613b6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590613bfd565b60405180910390fd5b600081036120575761205283836000612774565b6125bc565b61205f6110fd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120cd575061209d6110fd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122be57600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121765750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122bd57600660159054906101000a900460ff166121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190613c69565b60405180910390fd5b60095481111561220f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220690613cfb565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122bc57600a548161227184610fdc565b61227b9190613296565b106122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290613d8d565b60405180910390fd5b5b5b5b6000600b546122cc30610fdc565b101590508080156122ea5750600660149054906101000a900460ff16155b80156123405750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561237f575061234f6110fd565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156123be575061238e6110fd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156123cc576123cb610a48565b5b6000600660149054906101000a900460ff16159050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124825750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561248c57600090505b80156125ae57600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125215760006064600754856124f69190613dad565b6125009190613e1e565b9050808461250e9190613e4f565b935061251b863083612774565b506125ad565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125ac5760006064600854856125859190613dad565b61258f9190613e1e565b9050808461259d9190613e4f565b93506125aa863083612774565b505b5b5b6125b9858585612774565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090613ef5565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127da90613b6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284990613bfd565b60405180910390fd5b61285d8383836129ea565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da90613f87565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129d19190612c7a565b60405180910390a36129e48484846129ef565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612a1b81612a08565b8114612a2657600080fd5b50565b600081359050612a3881612a12565b92915050565b600060208284031215612a5457612a536129fe565b5b6000612a6284828501612a29565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aa5578082015181840152602081019050612a8a565b60008484015250505050565b6000601f19601f8301169050919050565b6000612acd82612a6b565b612ad78185612a76565b9350612ae7818560208601612a87565b612af081612ab1565b840191505092915050565b60006020820190508181036000830152612b158184612ac2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b4882612b1d565b9050919050565b612b5881612b3d565b8114612b6357600080fd5b50565b600081359050612b7581612b4f565b92915050565b60008060408385031215612b9257612b916129fe565b5b6000612ba085828601612b66565b9250506020612bb185828601612a29565b9150509250929050565b60008115159050919050565b612bd081612bbb565b82525050565b6000602082019050612beb6000830184612bc7565b92915050565b6000819050919050565b6000612c16612c11612c0c84612b1d565b612bf1565b612b1d565b9050919050565b6000612c2882612bfb565b9050919050565b6000612c3a82612c1d565b9050919050565b612c4a81612c2f565b82525050565b6000602082019050612c656000830184612c41565b92915050565b612c7481612a08565b82525050565b6000602082019050612c8f6000830184612c6b565b92915050565b600080600060608486031215612cae57612cad6129fe565b5b6000612cbc86828701612b66565b9350506020612ccd86828701612b66565b9250506040612cde86828701612a29565b9150509250925092565b600060ff82169050919050565b612cfe81612ce8565b82525050565b6000602082019050612d196000830184612cf5565b92915050565b612d2881612b3d565b82525050565b6000602082019050612d436000830184612d1f565b92915050565b600060208284031215612d5f57612d5e6129fe565b5b6000612d6d84828501612b66565b91505092915050565b6000612d8182612b1d565b9050919050565b612d9181612d76565b8114612d9c57600080fd5b50565b600081359050612dae81612d88565b92915050565b600060208284031215612dca57612dc96129fe565b5b6000612dd884828501612d9f565b91505092915050565b612dea81612bbb565b8114612df557600080fd5b50565b600081359050612e0781612de1565b92915050565b60008060408385031215612e2457612e236129fe565b5b6000612e3285828601612b66565b9250506020612e4385828601612df8565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e8a82612ab1565b810181811067ffffffffffffffff82111715612ea957612ea8612e52565b5b80604052505050565b6000612ebc6129f4565b9050612ec88282612e81565b919050565b600067ffffffffffffffff821115612ee857612ee7612e52565b5b602082029050602081019050919050565b600080fd5b6000612f11612f0c84612ecd565b612eb2565b90508083825260208201905060208402830185811115612f3457612f33612ef9565b5b835b81811015612f5d5780612f498882612b66565b845260208401935050602081019050612f36565b5050509392505050565b600082601f830112612f7c57612f7b612e4d565b5b8135612f8c848260208601612efe565b91505092915050565b60008060408385031215612fac57612fab6129fe565b5b600083013567ffffffffffffffff811115612fca57612fc9612a03565b5b612fd685828601612f67565b9250506020612fe785828601612df8565b9150509250929050565b60008060408385031215613008576130076129fe565b5b600061301685828601612b66565b925050602061302785828601612b66565b9150509250929050565b7f4275794d61726b6574696e675461782063616e6e6f74206265206d6f7265207460008201527f68616e2035302500000000000000000000000000000000000000000000000000602082015250565b600061308d602783612a76565b915061309882613031565b604082019050919050565b600060208201905081810360008301526130bc81613080565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061310a57607f821691505b60208210810361311d5761311c6130c3565b5b50919050565b600081905092915050565b50565b600061313e600083613123565b91506131498261312e565b600082019050919050565b600061315f82613131565b9150819050919050565b7f416464726573733a20756e61626c6520746f20657874726163742076616c756560008201527f2c207478206d6179206861766520726576657274656400000000000000000000602082015250565b60006131c5603683612a76565b91506131d082613169565b604082019050919050565b600060208201905081810360008301526131f4816131b8565b9050919050565b7f4d617857616c6c6574416d6f756e742063616e6e6f74206265206c6573730000600082015250565b6000613231601e83612a76565b915061323c826131fb565b602082019050919050565b6000602082019050818103600083015261326081613224565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132a182612a08565b91506132ac83612a08565b92508282019050808211156132c4576132c3613267565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613326602383612a76565b9150613331826132ca565b604082019050919050565b6000602082019050818103600083015261335581613319565b9050919050565b60008151905061336b81612b4f565b92915050565b600060208284031215613387576133866129fe565b5b60006133958482850161335c565b91505092915050565b60006040820190506133b36000830185612d1f565b6133c06020830184612d1f565b9392505050565b7f53656c6c4d61726b6574696e675461782063616e6e6f74206265206d6f72652060008201527f7468616e20353025000000000000000000000000000000000000000000000000602082015250565b6000613423602883612a76565b915061342e826133c7565b604082019050919050565b6000602082019050818103600083015261345281613416565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b60006134db604583612a76565b91506134e682613459565b606082019050919050565b6000602082019050818103600083015261350a816134ce565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061356d602583612a76565b915061357882613511565b604082019050919050565b6000602082019050818103600083015261359c81613560565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006135ff602a83612a76565b915061360a826135a3565b604082019050919050565b6000602082019050818103600083015261362e816135f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061366f82612a08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136a1576136a0613267565b5b600182019050919050565b7f4d61785478416d6f756e742063616e6e6f74206265206c657373000000000000600082015250565b60006136e2601a83612a76565b91506136ed826136ac565b602082019050919050565b60006020820190508181036000830152613711816136d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613774602683612a76565b915061377f82613718565b604082019050919050565b600060208201905081810360008301526137a381613767565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137e0602083612a76565b91506137eb826137aa565b602082019050919050565b6000602082019050818103600083015261380f816137d3565b9050919050565b6000819050919050565b600061383b61383661383184613816565b612bf1565b612a08565b9050919050565b61384b81613820565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61388681612b3d565b82525050565b6000613898838361387d565b60208301905092915050565b6000602082019050919050565b60006138bc82613851565b6138c6818561385c565b93506138d18361386d565b8060005b838110156139025781516138e9888261388c565b97506138f4836138a4565b9250506001810190506138d5565b5085935050505092915050565b600060a0820190506139246000830188612c6b565b6139316020830187613842565b818103604083015261394381866138b1565b90506139526060830185612d1f565b61395f6080830184612c6b565b9695505050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139c5602483612a76565b91506139d082613969565b604082019050919050565b600060208201905081810360008301526139f4816139b8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a57602283612a76565b9150613a62826139fb565b604082019050919050565b60006020820190508181036000830152613a8681613a4a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ac3601d83612a76565b9150613ace82613a8d565b602082019050919050565b60006020820190508181036000830152613af281613ab6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613b55602583612a76565b9150613b6082613af9565b604082019050919050565b60006020820190508181036000830152613b8481613b48565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613be7602383612a76565b9150613bf282613b8b565b604082019050919050565b60006020820190508181036000830152613c1681613bda565b9050919050565b7f54726164696e672069732063757272656e746c792064697361626c6564000000600082015250565b6000613c53601d83612a76565b9150613c5e82613c1d565b602082019050919050565b60006020820190508181036000830152613c8281613c46565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d20616c6c6f776564000000000000000000000000000000000000000000602082015250565b6000613ce5602b83612a76565b9150613cf082613c89565b604082019050919050565b60006020820190508181036000830152613d1481613cd8565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613d77602383612a76565b9150613d8282613d1b565b604082019050919050565b60006020820190508181036000830152613da681613d6a565b9050919050565b6000613db882612a08565b9150613dc383612a08565b9250828202613dd181612a08565b91508282048414831517613de857613de7613267565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e2982612a08565b9150613e3483612a08565b925082613e4457613e43613def565b5b828204905092915050565b6000613e5a82612a08565b9150613e6583612a08565b9250828203905081811115613e7d57613e7c613267565b5b92915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000613edf603883612a76565b9150613eea82613e83565b604082019050919050565b60006020820190508181036000830152613f0e81613ed2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f71602683612a76565b9150613f7c82613f15565b604082019050919050565b60006020820190508181036000830152613fa081613f64565b905091905056fea2646970667358221220b7d4b4dd272befec681505727ffe3394b1d9ef90ac74aa75053b31f3ec77dd5e64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061023e5760003560e01c80638c0b5e221161012e578063b62496f5116100ab578063d621e8131161006f578063d621e81314610869578063dd62ed3e14610894578063e550573d146108d1578063ec28438a1461090e578063f2fde38b1461093757610245565b8063b62496f514610788578063c0246668146107c5578063c0a904a2146107ee578063c492f04614610817578063c6e5a5ab1461084057610245565b8063a457c2d7116100f2578063a457c2d71461068d578063a5ece941146106ca578063a9059cbb146106f5578063aa4bde2814610732578063b2e208791461075d57610245565b80638c0b5e22146105ba5780638da5cb5b146105e5578063906e9dd01461061057806395d89b41146106395780639a7a23d61461066457610245565b806342d0b0bc116101bc578063715018a611610180578063715018a61461050f578063721e6233146105265780637c3a128f146105515780638753cc481461057a5780638a8c523c146105a357610245565b806342d0b0bc1461041657806349bd5a5e146104415780634fbee1931461046c57806365b8dbc0146104a957806370a08231146104d257610245565b806318160ddd1161020357806318160ddd1461031d57806323b872dd1461034857806327a14fc214610385578063313ce567146103ae57806339509351146103d957610245565b8062272d601461024a57806306fdde031461027357806307dce0f81461029e578063095ea7b3146102b55780631694505e146102f257610245565b3661024557005b600080fd5b34801561025657600080fd5b50610271600480360381019061026c9190612a3e565b610960565b005b34801561027f57600080fd5b506102886109b6565b6040516102959190612afb565b60405180910390f35b3480156102aa57600080fd5b506102b3610a48565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190612b7b565b610b76565b6040516102e99190612bd6565b60405180910390f35b3480156102fe57600080fd5b50610307610b99565b6040516103149190612c50565b60405180910390f35b34801561032957600080fd5b50610332610bbf565b60405161033f9190612c7a565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190612c95565b610bc9565b60405161037c9190612bd6565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612a3e565b610bf8565b005b3480156103ba57600080fd5b506103c3610c5a565b6040516103d09190612d04565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190612b7b565b610c63565b60405161040d9190612bd6565b60405180910390f35b34801561042257600080fd5b5061042b610c9a565b6040516104389190612c7a565b60405180910390f35b34801561044d57600080fd5b50610456610ca0565b6040516104639190612d2e565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190612d49565b610cc6565b6040516104a09190612bd6565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612d49565b610d1c565b005b3480156104de57600080fd5b506104f960048036038101906104f49190612d49565b610fdc565b6040516105069190612c7a565b60405180910390f35b34801561051b57600080fd5b50610524611024565b005b34801561053257600080fd5b5061053b611038565b6040516105489190612c7a565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190612a3e565b61103e565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612a3e565b611094565b005b3480156105af57600080fd5b506105b86110a6565b005b3480156105c657600080fd5b506105cf6110f7565b6040516105dc9190612c7a565b60405180910390f35b3480156105f157600080fd5b506105fa6110fd565b6040516106079190612d2e565b60405180910390f35b34801561061c57600080fd5b5061063760048036038101906106329190612db4565b611127565b005b34801561064557600080fd5b5061064e61135b565b60405161065b9190612afb565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190612e0d565b6113ed565b005b34801561069957600080fd5b506106b460048036038101906106af9190612b7b565b611493565b6040516106c19190612bd6565b60405180910390f35b3480156106d657600080fd5b506106df61150a565b6040516106ec9190612d2e565b60405180910390f35b34801561070157600080fd5b5061071c60048036038101906107179190612b7b565b611530565b6040516107299190612bd6565b60405180910390f35b34801561073e57600080fd5b50610747611553565b6040516107549190612c7a565b60405180910390f35b34801561076957600080fd5b50610772611559565b60405161077f9190612c7a565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612d49565b61155f565b6040516107bc9190612bd6565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190612e0d565b61157f565b005b3480156107fa57600080fd5b5061081560048036038101906108109190612e0d565b611674565b005b34801561082357600080fd5b5061083e60048036038101906108399190612f95565b611769565b005b34801561084c57600080fd5b5061086760048036038101906108629190612f95565b611806565b005b34801561087557600080fd5b5061087e6118a3565b60405161088b9190612bd6565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b69190612ff1565b6118b6565b6040516108c89190612c7a565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f39190612d49565b61193d565b6040516109059190612bd6565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190612a3e565b61195d565b005b34801561094357600080fd5b5061095e60048036038101906109599190612d49565b6119bf565b005b610968611a42565b60328111156109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a3906130a3565b60405180910390fd5b8060088190555050565b6060600380546109c5906130f2565b80601f01602080910402602001604051908101604052809291908181526020018280546109f1906130f2565b8015610a3e5780601f10610a1357610100808354040283529160200191610a3e565b820191906000526020600020905b815481529060010190602001808311610a2157829003601f168201915b5050505050905090565b6000610a5330610fdc565b90506000811115610b73576001600660146101000a81548160ff021916908315150217905550610a8281611ac0565b60004790506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610acf90613154565b60006040518083038185875af1925050503d8060008114610b0c576040519150601f19603f3d011682016040523d82523d6000602084013e610b11565b606091505b5050905080610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906131db565b60405180910390fd5b6000600660146101000a81548160ff02191690831515021790555050505b50565b600080610b81611d03565b9050610b8e818585611d0b565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600080610bd4611d03565b9050610be1858285611ed4565b610bec858585611f60565b60019150509392505050565b610c00611a42565b6c052cc80d17f3ed618b90000000811015610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790613247565b60405180910390fd5b80600a8190555050565b60006012905090565b600080610c6e611d03565b9050610c8f818585610c8085896118b6565b610c8a9190613296565b611d0b565b600191505092915050565b60075481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d24611a42565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab9061333c565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e889190613371565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f359190613371565b6040518363ffffffff1660e01b8152600401610f5292919061339e565b6020604051808303816000875af1158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f959190613371565b905080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102c611a42565b61103660006125c1565b565b60085481565b611046611a42565b603281111561108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190613439565b60405180910390fd5b8060078190555050565b61109c611a42565b80600b8190555050565b6110ae611a42565b6001600660156101000a81548160ff0219169083151502179055507f0270d74976d9c744a465e24d0e2675086607ed6163edf4e36cabaf9740ce2ef460405160405180910390a1565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61112f611a42565b6000600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606004805461136a906130f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611396906130f2565b80156113e35780601f106113b8576101008083540402835291602001916113e3565b820191906000526020600020905b8154815290600101906020018083116113c657829003601f168201915b5050505050905090565b6113f5611a42565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c906134f1565b60405180910390fd5b61148f8282612687565b5050565b60008061149e611d03565b905060006114ac82866118b6565b9050838110156114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890613583565b60405180910390fd5b6114fe8286868403611d0b565b60019250505092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061153b611d03565b9050611548818585611f60565b600191505092915050565b600a5481565b600b5481565b600e6020528060005260406000206000915054906101000a900460ff1681565b611587611a42565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090613615565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61167c611a42565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590613615565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611771611a42565b60005b82518110156118015781600c600085848151811061179557611794613635565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117f990613664565b915050611774565b505050565b61180e611a42565b60005b825181101561189e5781600d600085848151811061183257611831613635565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061189690613664565b915050611811565b505050565b600660159054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b611965611a42565b6c02a68bedbb190931f6500000008110156119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac906136f8565b60405180910390fd5b8060098190555050565b6119c7611a42565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d9061378a565b60405180910390fd5b611a3f816125c1565b50565b611a4a611d03565b73ffffffffffffffffffffffffffffffffffffffff16611a686110fd565b73ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906137f6565b60405180910390fd5b565b6000600267ffffffffffffffff811115611add57611adc612e52565b5b604051908082528060200260200182016040528015611b0b5781602001602082028036833780820191505090505b5090503081600081518110611b2357611b22613635565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bee9190613371565b81600181518110611c0257611c01613635565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611c6930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d0b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611ccd95949392919061390f565b600060405180830381600087803b158015611ce757600080fd5b505af1158015611cfb573d6000803e3d6000fd5b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d71906139db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090613a6d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ec79190612c7a565b60405180910390a3505050565b6000611ee084846118b6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f5a5781811015611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613ad9565b60405180910390fd5b611f598484848403611d0b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc690613b6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590613bfd565b60405180910390fd5b600081036120575761205283836000612774565b6125bc565b61205f6110fd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120cd575061209d6110fd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122be57600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121765750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122bd57600660159054906101000a900460ff166121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190613c69565b60405180910390fd5b60095481111561220f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220690613cfb565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122bc57600a548161227184610fdc565b61227b9190613296565b106122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290613d8d565b60405180910390fd5b5b5b5b6000600b546122cc30610fdc565b101590508080156122ea5750600660149054906101000a900460ff16155b80156123405750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561237f575061234f6110fd565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156123be575061238e6110fd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156123cc576123cb610a48565b5b6000600660149054906101000a900460ff16159050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124825750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561248c57600090505b80156125ae57600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125215760006064600754856124f69190613dad565b6125009190613e1e565b9050808461250e9190613e4f565b935061251b863083612774565b506125ad565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125ac5760006064600854856125859190613dad565b61258f9190613e1e565b9050808461259d9190613e4f565b93506125aa863083612774565b505b5b5b6125b9858585612774565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090613ef5565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127da90613b6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284990613bfd565b60405180910390fd5b61285d8383836129ea565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da90613f87565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129d19190612c7a565b60405180910390a36129e48484846129ef565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612a1b81612a08565b8114612a2657600080fd5b50565b600081359050612a3881612a12565b92915050565b600060208284031215612a5457612a536129fe565b5b6000612a6284828501612a29565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aa5578082015181840152602081019050612a8a565b60008484015250505050565b6000601f19601f8301169050919050565b6000612acd82612a6b565b612ad78185612a76565b9350612ae7818560208601612a87565b612af081612ab1565b840191505092915050565b60006020820190508181036000830152612b158184612ac2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b4882612b1d565b9050919050565b612b5881612b3d565b8114612b6357600080fd5b50565b600081359050612b7581612b4f565b92915050565b60008060408385031215612b9257612b916129fe565b5b6000612ba085828601612b66565b9250506020612bb185828601612a29565b9150509250929050565b60008115159050919050565b612bd081612bbb565b82525050565b6000602082019050612beb6000830184612bc7565b92915050565b6000819050919050565b6000612c16612c11612c0c84612b1d565b612bf1565b612b1d565b9050919050565b6000612c2882612bfb565b9050919050565b6000612c3a82612c1d565b9050919050565b612c4a81612c2f565b82525050565b6000602082019050612c656000830184612c41565b92915050565b612c7481612a08565b82525050565b6000602082019050612c8f6000830184612c6b565b92915050565b600080600060608486031215612cae57612cad6129fe565b5b6000612cbc86828701612b66565b9350506020612ccd86828701612b66565b9250506040612cde86828701612a29565b9150509250925092565b600060ff82169050919050565b612cfe81612ce8565b82525050565b6000602082019050612d196000830184612cf5565b92915050565b612d2881612b3d565b82525050565b6000602082019050612d436000830184612d1f565b92915050565b600060208284031215612d5f57612d5e6129fe565b5b6000612d6d84828501612b66565b91505092915050565b6000612d8182612b1d565b9050919050565b612d9181612d76565b8114612d9c57600080fd5b50565b600081359050612dae81612d88565b92915050565b600060208284031215612dca57612dc96129fe565b5b6000612dd884828501612d9f565b91505092915050565b612dea81612bbb565b8114612df557600080fd5b50565b600081359050612e0781612de1565b92915050565b60008060408385031215612e2457612e236129fe565b5b6000612e3285828601612b66565b9250506020612e4385828601612df8565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e8a82612ab1565b810181811067ffffffffffffffff82111715612ea957612ea8612e52565b5b80604052505050565b6000612ebc6129f4565b9050612ec88282612e81565b919050565b600067ffffffffffffffff821115612ee857612ee7612e52565b5b602082029050602081019050919050565b600080fd5b6000612f11612f0c84612ecd565b612eb2565b90508083825260208201905060208402830185811115612f3457612f33612ef9565b5b835b81811015612f5d5780612f498882612b66565b845260208401935050602081019050612f36565b5050509392505050565b600082601f830112612f7c57612f7b612e4d565b5b8135612f8c848260208601612efe565b91505092915050565b60008060408385031215612fac57612fab6129fe565b5b600083013567ffffffffffffffff811115612fca57612fc9612a03565b5b612fd685828601612f67565b9250506020612fe785828601612df8565b9150509250929050565b60008060408385031215613008576130076129fe565b5b600061301685828601612b66565b925050602061302785828601612b66565b9150509250929050565b7f4275794d61726b6574696e675461782063616e6e6f74206265206d6f7265207460008201527f68616e2035302500000000000000000000000000000000000000000000000000602082015250565b600061308d602783612a76565b915061309882613031565b604082019050919050565b600060208201905081810360008301526130bc81613080565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061310a57607f821691505b60208210810361311d5761311c6130c3565b5b50919050565b600081905092915050565b50565b600061313e600083613123565b91506131498261312e565b600082019050919050565b600061315f82613131565b9150819050919050565b7f416464726573733a20756e61626c6520746f20657874726163742076616c756560008201527f2c207478206d6179206861766520726576657274656400000000000000000000602082015250565b60006131c5603683612a76565b91506131d082613169565b604082019050919050565b600060208201905081810360008301526131f4816131b8565b9050919050565b7f4d617857616c6c6574416d6f756e742063616e6e6f74206265206c6573730000600082015250565b6000613231601e83612a76565b915061323c826131fb565b602082019050919050565b6000602082019050818103600083015261326081613224565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132a182612a08565b91506132ac83612a08565b92508282019050808211156132c4576132c3613267565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613326602383612a76565b9150613331826132ca565b604082019050919050565b6000602082019050818103600083015261335581613319565b9050919050565b60008151905061336b81612b4f565b92915050565b600060208284031215613387576133866129fe565b5b60006133958482850161335c565b91505092915050565b60006040820190506133b36000830185612d1f565b6133c06020830184612d1f565b9392505050565b7f53656c6c4d61726b6574696e675461782063616e6e6f74206265206d6f72652060008201527f7468616e20353025000000000000000000000000000000000000000000000000602082015250565b6000613423602883612a76565b915061342e826133c7565b604082019050919050565b6000602082019050818103600083015261345281613416565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b60006134db604583612a76565b91506134e682613459565b606082019050919050565b6000602082019050818103600083015261350a816134ce565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061356d602583612a76565b915061357882613511565b604082019050919050565b6000602082019050818103600083015261359c81613560565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006135ff602a83612a76565b915061360a826135a3565b604082019050919050565b6000602082019050818103600083015261362e816135f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061366f82612a08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136a1576136a0613267565b5b600182019050919050565b7f4d61785478416d6f756e742063616e6e6f74206265206c657373000000000000600082015250565b60006136e2601a83612a76565b91506136ed826136ac565b602082019050919050565b60006020820190508181036000830152613711816136d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613774602683612a76565b915061377f82613718565b604082019050919050565b600060208201905081810360008301526137a381613767565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137e0602083612a76565b91506137eb826137aa565b602082019050919050565b6000602082019050818103600083015261380f816137d3565b9050919050565b6000819050919050565b600061383b61383661383184613816565b612bf1565b612a08565b9050919050565b61384b81613820565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61388681612b3d565b82525050565b6000613898838361387d565b60208301905092915050565b6000602082019050919050565b60006138bc82613851565b6138c6818561385c565b93506138d18361386d565b8060005b838110156139025781516138e9888261388c565b97506138f4836138a4565b9250506001810190506138d5565b5085935050505092915050565b600060a0820190506139246000830188612c6b565b6139316020830187613842565b818103604083015261394381866138b1565b90506139526060830185612d1f565b61395f6080830184612c6b565b9695505050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139c5602483612a76565b91506139d082613969565b604082019050919050565b600060208201905081810360008301526139f4816139b8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a57602283612a76565b9150613a62826139fb565b604082019050919050565b60006020820190508181036000830152613a8681613a4a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ac3601d83612a76565b9150613ace82613a8d565b602082019050919050565b60006020820190508181036000830152613af281613ab6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613b55602583612a76565b9150613b6082613af9565b604082019050919050565b60006020820190508181036000830152613b8481613b48565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613be7602383612a76565b9150613bf282613b8b565b604082019050919050565b60006020820190508181036000830152613c1681613bda565b9050919050565b7f54726164696e672069732063757272656e746c792064697361626c6564000000600082015250565b6000613c53601d83612a76565b9150613c5e82613c1d565b602082019050919050565b60006020820190508181036000830152613c8281613c46565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d20616c6c6f776564000000000000000000000000000000000000000000602082015250565b6000613ce5602b83612a76565b9150613cf082613c89565b604082019050919050565b60006020820190508181036000830152613d1481613cd8565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613d77602383612a76565b9150613d8282613d1b565b604082019050919050565b60006020820190508181036000830152613da681613d6a565b9050919050565b6000613db882612a08565b9150613dc383612a08565b9250828202613dd181612a08565b91508282048414831517613de857613de7613267565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e2982612a08565b9150613e3483612a08565b925082613e4457613e43613def565b5b828204905092915050565b6000613e5a82612a08565b9150613e6583612a08565b9250828203905081811115613e7d57613e7c613267565b5b92915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000613edf603883612a76565b9150613eea82613e83565b604082019050919050565b60006020820190508181036000830152613f0e81613ed2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f71602683612a76565b9150613f7c82613f15565b604082019050919050565b60006020820190508181036000830152613fa081613f64565b905091905056fea2646970667358221220b7d4b4dd272befec681505727ffe3394b1d9ef90ac74aa75053b31f3ec77dd5e64736f6c63430008120033

Deployed Bytecode Sourcemap

21075:8149:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27552:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9348:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25748:497;;;;;;;;;;;;;:::i;:::-;;11708:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21123:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10477:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12489:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27928:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10319:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13159:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21239:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21850:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28614:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22832:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10648:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2769:103;;;;;;;;;;;;;:::i;:::-;;21307:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27357:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28127:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27237:112;;;;;;;;;;;;;:::i;:::-;;21376:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2128:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28253:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9567:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23243:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13900:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21758:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10981:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21437:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21502:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21691;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26253:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26740:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26499:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26992:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21200:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11237:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21630:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27741:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3027:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27552:181;2014:13;:11;:13::i;:::-;27644:2:::1;27634:6;:12;;27626:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27719:6;27701:15;:24;;;;27552:181:::0;:::o;9348:100::-;9402:13;9435:5;9428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9348:100;:::o;25748:497::-;25796:25;25824:24;25842:4;25824:9;:24::i;:::-;25796:52;;25886:1;25863:20;:24;25859:379;;;25921:4;25910:8;;:15;;;;;;;;;;;;;;;;;;25940:38;25957:20;25940:16;:38::i;:::-;25989:11;26003:21;25989:35;;26036:12;26062:16;;;;;;;;;;;26054:30;;26093:6;26054:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26035:70;;;26124:7;26116:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26212:5;26201:8;;:16;;;;;;;;;;;;;;;;;;25899:339;;25859:379;25785:460;25748:497::o;11708:201::-;11791:4;11808:13;11824:12;:10;:12::i;:::-;11808:28;;11847:32;11856:5;11863:7;11872:6;11847:8;:32::i;:::-;11897:4;11890:11;;;11708:201;;;;:::o;21123:41::-;;;;;;;;;;;;;:::o;10477:108::-;10538:7;10565:12;;10558:19;;10477:108;:::o;12489:261::-;12586:4;12603:15;12621:12;:10;:12::i;:::-;12603:30;;12644:38;12660:4;12666:7;12675:6;12644:15;:38::i;:::-;12693:27;12703:4;12709:2;12713:6;12693:9;:27::i;:::-;12738:4;12731:11;;;12489:261;;;;;:::o;27928:191::-;2014:13;:11;:13::i;:::-;28020:21:::1;28010:6;:31;;28002:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28105:6;28087:15;:24;;;;27928:191:::0;:::o;10319:93::-;10377:5;10402:2;10395:9;;10319:93;:::o;13159:238::-;13247:4;13264:13;13280:12;:10;:12::i;:::-;13264:28;;13303:64;13312:5;13319:7;13356:10;13328:25;13338:5;13345:7;13328:9;:25::i;:::-;:38;;;;:::i;:::-;13303:8;:64::i;:::-;13385:4;13378:11;;;13159:238;;;;:::o;21239:36::-;;;;:::o;21850:28::-;;;;;;;;;;;;;:::o;28614:125::-;28679:4;28703:19;:28;28723:7;28703:28;;;;;;;;;;;;;;;;;;;;;;;;;28696:35;;28614:125;;;:::o;22832:403::-;2014:13;:11;:13::i;:::-;22941:15:::1;;;;;;;;;;;22919:38;;:10;:38;;::::0;22911:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23045:10;23008:15;;:48;;;;;;;;;;;;;;;;;;23067:22;23110:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23092:55;;;23156:4;23163:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23092:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23067:119;;23213:14;23197:13;;:30;;;;;;;;;;;;;;;;;;22900:335;22832:403:::0;:::o;10648:127::-;10722:7;10749:9;:18;10759:7;10749:18;;;;;;;;;;;;;;;;10742:25;;10648:127;;;:::o;2769:103::-;2014:13;:11;:13::i;:::-;2834:30:::1;2861:1;2834:18;:30::i;:::-;2769:103::o:0;21307:35::-;;;;:::o;27357:187::-;2014:13;:11;:13::i;:::-;27452:2:::1;27441:7;:13;;27433:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27529:7;27510:16;:26;;;;27357:187:::0;:::o;28127:118::-;2014:13;:11;:13::i;:::-;28231:6:::1;28207:21;:30;;;;28127:118:::0;:::o;27237:112::-;2014:13;:11;:13::i;:::-;27307:4:::1;27292:12;;:19;;;;;;;;;;;;;;;;;;27327:14;;;;;;;;;;27237:112::o:0;21376:53::-;;;;:::o;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;28253:353::-;2014:13;:11;:13::i;:::-;28384:5:::1;28342:21;:39;28364:16;;;;;;;;;;;28342:39;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;28440:5;28400:19;:37;28420:16;;;;;;;;;;;28400:37;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;28475:11;28456:16;;:30;;;;;;;;;;;;;;;;;;28539:4;28497:21;:39;28519:16;;;;;;;;;;;28497:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28594:4;28554:19;:37;28574:16;;;;;;;;;;;28554:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;28253:353:::0;:::o;9567:104::-;9623:13;9656:7;9649:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9567:104;:::o;23243:254::-;2014:13;:11;:13::i;:::-;23350::::1;;;;;;;;;;;23342:21;;:4;:21;;::::0;23334:103:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23448:41;23477:4;23483:5;23448:28;:41::i;:::-;23243:254:::0;;:::o;13900:436::-;13993:4;14010:13;14026:12;:10;:12::i;:::-;14010:28;;14049:24;14076:25;14086:5;14093:7;14076:9;:25::i;:::-;14049:52;;14140:15;14120:16;:35;;14112:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14233:60;14242:5;14249:7;14277:15;14258:16;:34;14233:8;:60::i;:::-;14324:4;14317:11;;;;13900:436;;;;:::o;21758:85::-;;;;;;;;;;;;;:::o;10981:193::-;11060:4;11077:13;11093:12;:10;:12::i;:::-;11077:28;;11116;11126:5;11133:2;11137:6;11116:9;:28::i;:::-;11162:4;11155:11;;;10981:193;;;;:::o;21437:57::-;;;;:::o;21502:58::-;;;;:::o;21691:::-;;;;;;;;;;;;;;;;;;;;;;:::o;26253:238::-;2014:13;:11;:13::i;:::-;26378:8:::1;26346:40;;:19;:28;26366:7;26346:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;26338:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26475:8;26444:19;:28;26464:7;26444:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26253:238:::0;;:::o;26740:244::-;2014:13;:11;:13::i;:::-;26869:8:::1;26835:42;;:21;:30;26857:7;26835:30;;;;;;;;;;;;;;;;;;;;;;;;;:42;;::::0;26827:97:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26968:8;26935:21;:30;26957:7;26935:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;26740:244:::0;;:::o;26499:233::-;2014:13;:11;:13::i;:::-;26614:9:::1;26610:115;26633:8;:15;26629:1;:19;26610:115;;;26705:8;26670:19;:32;26690:8;26699:1;26690:11;;;;;;;;:::i;:::-;;;;;;;;26670:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;26650:3;;;;;:::i;:::-;;;;26610:115;;;;26499:233:::0;;:::o;26992:237::-;2014:13;:11;:13::i;:::-;27109:9:::1;27105:117;27128:8;:15;27124:1;:19;27105:117;;;27202:8;27165:21;:34;27187:8;27196:1;27187:11;;;;;;;;:::i;:::-;;;;;;;;27165:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;27145:3;;;;;:::i;:::-;;;;27105:117;;;;26992:237:::0;;:::o;21200:32::-;;;;;;;;;;;;;:::o;11237:151::-;11326:7;11353:11;:18;11365:5;11353:18;;;;;;;;;;;;;;;:27;11372:7;11353:27;;;;;;;;;;;;;;;;11346:34;;11237:151;;;;:::o;21630:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;27741:179::-;2014:13;:11;:13::i;:::-;27829:21:::1;27819:6;:31;;27811:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27906:6;27892:11;:20;;;;27741:179:::0;:::o;3027:201::-;2014:13;:11;:13::i;:::-;3136:1:::1;3116:22;;:8;:22;;::::0;3108:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3192:28;3211:8;3192:18;:28::i;:::-;3027:201:::0;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;28747:472::-;28813:21;28851:1;28837:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28813:40;;28882:4;28864;28869:1;28864:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28908:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28898:4;28903:1;28898:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28941:62;28958:4;28973:15;;;;;;;;;;;28991:11;28941:8;:62::i;:::-;29014:15;;;;;;;;;;;:66;;;29095:11;29121:1;29138:4;29165;29185:15;29014:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28802:417;28747:472;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;17893:346::-;18012:1;17995:19;;:5;:19;;;17987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18093:1;18074:21;;:7;:21;;;18066:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18177:6;18147:11;:18;18159:5;18147:18;;;;;;;;;;;;;;;:27;18166:7;18147:27;;;;;;;;;;;;;;;:36;;;;18215:7;18199:32;;18208:5;18199:32;;;18224:6;18199:32;;;;;;:::i;:::-;;;;;;;;17893:346;;;:::o;18530:419::-;18631:24;18658:25;18668:5;18675:7;18658:9;:25::i;:::-;18631:52;;18718:17;18698:16;:37;18694:248;;18780:6;18760:16;:26;;18752:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18864:51;18873:5;18880:7;18908:6;18889:16;:25;18864:8;:51::i;:::-;18694:248;18620:329;18530:419;;;:::o;23767:1971::-;23915:1;23899:18;;:4;:18;;;23891:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23992:1;23978:16;;:2;:16;;;23970:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24060:1;24050:6;:11;24047:92;;24078:28;24094:4;24100:2;24104:1;24078:15;:28::i;:::-;24121:7;;24047:92;24163:7;:5;:7::i;:::-;24155:15;;:4;:15;;;;:32;;;;;24180:7;:5;:7::i;:::-;24174:13;;:2;:13;;;;24155:32;24151:486;;;24208:21;:27;24230:4;24208:27;;;;;;;;;;;;;;;;;;;;;;;;;24207:28;:58;;;;;24240:21;:25;24262:2;24240:25;;;;;;;;;;;;;;;;;;;;;;;;;24239:26;24207:58;24204:422;;;24294:12;;;;;;;;;;;24286:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24377:11;;24367:6;:21;;24359:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24465:13;;;;;;;;;;;24459:19;;:2;:19;;;24455:156;;24536:15;;24527:6;24511:13;24521:2;24511:9;:13::i;:::-;:22;;;;:::i;:::-;:40;24503:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24455:156;24204:422;24151:486;24649:24;24704:21;;24676:24;24694:4;24676:9;:24::i;:::-;:49;;24649:76;;24741:19;:45;;;;;24778:8;;;;;;;;;;;24777:9;24741:45;:94;;;;;24804:25;:31;24830:4;24804:31;;;;;;;;;;;;;;;;;;;;;;;;;24803:32;24741:94;:126;;;;;24860:7;:5;:7::i;:::-;24852:15;;:4;:15;;;;24741:126;:156;;;;;24890:7;:5;:7::i;:::-;24884:13;;:2;:13;;;;24741:156;24737:229;;;24934:20;:18;:20::i;:::-;24737:229;24979:12;24995:8;;;;;;;;;;;24994:9;24979:24;;25017:19;:25;25037:4;25017:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25046:19;:23;25066:2;25046:23;;;;;;;;;;;;;;;;;;;;;;;;;25017:52;25014:99;;;25096:5;25086:15;;25014:99;25132:7;25128:545;;;25160:25;:29;25186:2;25160:29;;;;;;;;;;;;;;;;;;;;;;;;;25156:506;;;25211:20;25262:3;25243:16;;25234:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;25211:54;;25302:12;25293:6;:21;;;;:::i;:::-;25284:30;;25333:50;25349:4;25363;25370:12;25333:15;:50::i;:::-;25191:208;25156:506;;;25422:25;:31;25448:4;25422:31;;;;;;;;;;;;;;;;;;;;;;;;;25418:244;;;25475:20;25525:3;25507:15;;25498:6;:24;;;;:::i;:::-;:30;;;;:::i;:::-;25475:53;;25565:12;25556:6;:21;;;;:::i;:::-;25547:30;;25596:50;25612:4;25626;25633:12;25596:15;:50::i;:::-;25455:207;25418:244;25156:506;25128:545;25697:33;25713:4;25719:2;25723:6;25697:15;:33::i;:::-;23880:1858;;23767:1971;;;;:::o;3388:191::-;3462:16;3481:6;;;;;;;;;;;3462:25;;3507:8;3498:6;;:17;;;;;;;;;;;;;;;;;;3562:8;3531:40;;3552:8;3531:40;;;;;;;;;;;;3451:128;3388:191;:::o;23509:250::-;23635:5;23600:40;;:25;:31;23626:4;23600:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;23592:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23746:5;23712:25;:31;23738:4;23712:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23509:250;;:::o;14806:806::-;14919:1;14903:18;;:4;:18;;;14895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14996:1;14982:16;;:2;:16;;;14974:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15051:38;15072:4;15078:2;15082:6;15051:20;:38::i;:::-;15102:19;15124:9;:15;15134:4;15124:15;;;;;;;;;;;;;;;;15102:37;;15173:6;15158:11;:21;;15150:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15290:6;15276:11;:20;15258:9;:15;15268:4;15258:15;;;;;;;;;;;;;;;:38;;;;15493:6;15476:9;:13;15486:2;15476:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15543:2;15528:26;;15537:4;15528:26;;;15547:6;15528:26;;;;;;:::i;:::-;;;;;;;;15567:37;15587:4;15593:2;15597:6;15567:19;:37::i;:::-;14884:728;14806:806;;;:::o;19549:91::-;;;;:::o;20244:90::-;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:152::-;4203:9;4236:37;4267:5;4236:37;:::i;:::-;4223:50;;4127:152;;;:::o;4285:183::-;4398:63;4455:5;4398:63;:::i;:::-;4393:3;4386:76;4285:183;;:::o;4474:274::-;4593:4;4631:2;4620:9;4616:18;4608:26;;4644:97;4738:1;4727:9;4723:17;4714:6;4644:97;:::i;:::-;4474:274;;;;:::o;4754:118::-;4841:24;4859:5;4841:24;:::i;:::-;4836:3;4829:37;4754:118;;:::o;4878:222::-;4971:4;5009:2;4998:9;4994:18;4986:26;;5022:71;5090:1;5079:9;5075:17;5066:6;5022:71;:::i;:::-;4878:222;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:86::-;5766:7;5806:4;5799:5;5795:16;5784:27;;5731:86;;;:::o;5823:112::-;5906:22;5922:5;5906:22;:::i;:::-;5901:3;5894:35;5823:112;;:::o;5941:214::-;6030:4;6068:2;6057:9;6053:18;6045:26;;6081:67;6145:1;6134:9;6130:17;6121:6;6081:67;:::i;:::-;5941:214;;;;:::o;6161:118::-;6248:24;6266:5;6248:24;:::i;:::-;6243:3;6236:37;6161:118;;:::o;6285:222::-;6378:4;6416:2;6405:9;6401:18;6393:26;;6429:71;6497:1;6486:9;6482:17;6473:6;6429:71;:::i;:::-;6285:222;;;;:::o;6513:329::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:104::-;6893:7;6922:24;6940:5;6922:24;:::i;:::-;6911:35;;6848:104;;;:::o;6958:138::-;7039:32;7065:5;7039:32;:::i;:::-;7032:5;7029:43;7019:71;;7086:1;7083;7076:12;7019:71;6958:138;:::o;7102:155::-;7156:5;7194:6;7181:20;7172:29;;7210:41;7245:5;7210:41;:::i;:::-;7102:155;;;;:::o;7263:345::-;7330:6;7379:2;7367:9;7358:7;7354:23;7350:32;7347:119;;;7385:79;;:::i;:::-;7347:119;7505:1;7530:61;7583:7;7574:6;7563:9;7559:22;7530:61;:::i;:::-;7520:71;;7476:125;7263:345;;;;:::o;7614:116::-;7684:21;7699:5;7684:21;:::i;:::-;7677:5;7674:32;7664:60;;7720:1;7717;7710:12;7664:60;7614:116;:::o;7736:133::-;7779:5;7817:6;7804:20;7795:29;;7833:30;7857:5;7833:30;:::i;:::-;7736:133;;;;:::o;7875:468::-;7940:6;7948;7997:2;7985:9;7976:7;7972:23;7968:32;7965:119;;;8003:79;;:::i;:::-;7965:119;8123:1;8148:53;8193:7;8184:6;8173:9;8169:22;8148:53;:::i;:::-;8138:63;;8094:117;8250:2;8276:50;8318:7;8309:6;8298:9;8294:22;8276:50;:::i;:::-;8266:60;;8221:115;7875:468;;;;;:::o;8349:117::-;8458:1;8455;8448:12;8472:180;8520:77;8517:1;8510:88;8617:4;8614:1;8607:15;8641:4;8638:1;8631:15;8658:281;8741:27;8763:4;8741:27;:::i;:::-;8733:6;8729:40;8871:6;8859:10;8856:22;8835:18;8823:10;8820:34;8817:62;8814:88;;;8882:18;;:::i;:::-;8814:88;8922:10;8918:2;8911:22;8701:238;8658:281;;:::o;8945:129::-;8979:6;9006:20;;:::i;:::-;8996:30;;9035:33;9063:4;9055:6;9035:33;:::i;:::-;8945:129;;;:::o;9080:311::-;9157:4;9247:18;9239:6;9236:30;9233:56;;;9269:18;;:::i;:::-;9233:56;9319:4;9311:6;9307:17;9299:25;;9379:4;9373;9369:15;9361:23;;9080:311;;;:::o;9397:117::-;9506:1;9503;9496:12;9537:710;9633:5;9658:81;9674:64;9731:6;9674:64;:::i;:::-;9658:81;:::i;:::-;9649:90;;9759:5;9788:6;9781:5;9774:21;9822:4;9815:5;9811:16;9804:23;;9875:4;9867:6;9863:17;9855:6;9851:30;9904:3;9896:6;9893:15;9890:122;;;9923:79;;:::i;:::-;9890:122;10038:6;10021:220;10055:6;10050:3;10047:15;10021:220;;;10130:3;10159:37;10192:3;10180:10;10159:37;:::i;:::-;10154:3;10147:50;10226:4;10221:3;10217:14;10210:21;;10097:144;10081:4;10076:3;10072:14;10065:21;;10021:220;;;10025:21;9639:608;;9537:710;;;;;:::o;10270:370::-;10341:5;10390:3;10383:4;10375:6;10371:17;10367:27;10357:122;;10398:79;;:::i;:::-;10357:122;10515:6;10502:20;10540:94;10630:3;10622:6;10615:4;10607:6;10603:17;10540:94;:::i;:::-;10531:103;;10347:293;10270:370;;;;:::o;10646:678::-;10736:6;10744;10793:2;10781:9;10772:7;10768:23;10764:32;10761:119;;;10799:79;;:::i;:::-;10761:119;10947:1;10936:9;10932:17;10919:31;10977:18;10969:6;10966:30;10963:117;;;10999:79;;:::i;:::-;10963:117;11104:78;11174:7;11165:6;11154:9;11150:22;11104:78;:::i;:::-;11094:88;;10890:302;11231:2;11257:50;11299:7;11290:6;11279:9;11275:22;11257:50;:::i;:::-;11247:60;;11202:115;10646:678;;;;;:::o;11330:474::-;11398:6;11406;11455:2;11443:9;11434:7;11430:23;11426:32;11423:119;;;11461:79;;:::i;:::-;11423:119;11581:1;11606:53;11651:7;11642:6;11631:9;11627:22;11606:53;:::i;:::-;11596:63;;11552:117;11708:2;11734:53;11779:7;11770:6;11759:9;11755:22;11734:53;:::i;:::-;11724:63;;11679:118;11330:474;;;;;:::o;11810:226::-;11950:34;11946:1;11938:6;11934:14;11927:58;12019:9;12014:2;12006:6;12002:15;11995:34;11810:226;:::o;12042:366::-;12184:3;12205:67;12269:2;12264:3;12205:67;:::i;:::-;12198:74;;12281:93;12370:3;12281:93;:::i;:::-;12399:2;12394:3;12390:12;12383:19;;12042:366;;;:::o;12414:419::-;12580:4;12618:2;12607:9;12603:18;12595:26;;12667:9;12661:4;12657:20;12653:1;12642:9;12638:17;12631:47;12695:131;12821:4;12695:131;:::i;:::-;12687:139;;12414:419;;;:::o;12839:180::-;12887:77;12884:1;12877:88;12984:4;12981:1;12974:15;13008:4;13005:1;12998:15;13025:320;13069:6;13106:1;13100:4;13096:12;13086:22;;13153:1;13147:4;13143:12;13174:18;13164:81;;13230:4;13222:6;13218:17;13208:27;;13164:81;13292:2;13284:6;13281:14;13261:18;13258:38;13255:84;;13311:18;;:::i;:::-;13255:84;13076:269;13025:320;;;:::o;13351:147::-;13452:11;13489:3;13474:18;;13351:147;;;;:::o;13504:114::-;;:::o;13624:398::-;13783:3;13804:83;13885:1;13880:3;13804:83;:::i;:::-;13797:90;;13896:93;13985:3;13896:93;:::i;:::-;14014:1;14009:3;14005:11;13998:18;;13624:398;;;:::o;14028:379::-;14212:3;14234:147;14377:3;14234:147;:::i;:::-;14227:154;;14398:3;14391:10;;14028:379;;;:::o;14413:241::-;14553:34;14549:1;14541:6;14537:14;14530:58;14622:24;14617:2;14609:6;14605:15;14598:49;14413:241;:::o;14660:366::-;14802:3;14823:67;14887:2;14882:3;14823:67;:::i;:::-;14816:74;;14899:93;14988:3;14899:93;:::i;:::-;15017:2;15012:3;15008:12;15001:19;;14660:366;;;:::o;15032:419::-;15198:4;15236:2;15225:9;15221:18;15213:26;;15285:9;15279:4;15275:20;15271:1;15260:9;15256:17;15249:47;15313:131;15439:4;15313:131;:::i;:::-;15305:139;;15032:419;;;:::o;15457:180::-;15597:32;15593:1;15585:6;15581:14;15574:56;15457:180;:::o;15643:366::-;15785:3;15806:67;15870:2;15865:3;15806:67;:::i;:::-;15799:74;;15882:93;15971:3;15882:93;:::i;:::-;16000:2;15995:3;15991:12;15984:19;;15643:366;;;:::o;16015:419::-;16181:4;16219:2;16208:9;16204:18;16196:26;;16268:9;16262:4;16258:20;16254:1;16243:9;16239:17;16232:47;16296:131;16422:4;16296:131;:::i;:::-;16288:139;;16015:419;;;:::o;16440:180::-;16488:77;16485:1;16478:88;16585:4;16582:1;16575:15;16609:4;16606:1;16599:15;16626:191;16666:3;16685:20;16703:1;16685:20;:::i;:::-;16680:25;;16719:20;16737:1;16719:20;:::i;:::-;16714:25;;16762:1;16759;16755:9;16748:16;;16783:3;16780:1;16777:10;16774:36;;;16790:18;;:::i;:::-;16774:36;16626:191;;;;:::o;16823:222::-;16963:34;16959:1;16951:6;16947:14;16940:58;17032:5;17027:2;17019:6;17015:15;17008:30;16823:222;:::o;17051:366::-;17193:3;17214:67;17278:2;17273:3;17214:67;:::i;:::-;17207:74;;17290:93;17379:3;17290:93;:::i;:::-;17408:2;17403:3;17399:12;17392:19;;17051:366;;;:::o;17423:419::-;17589:4;17627:2;17616:9;17612:18;17604:26;;17676:9;17670:4;17666:20;17662:1;17651:9;17647:17;17640:47;17704:131;17830:4;17704:131;:::i;:::-;17696:139;;17423:419;;;:::o;17848:143::-;17905:5;17936:6;17930:13;17921:22;;17952:33;17979:5;17952:33;:::i;:::-;17848:143;;;;:::o;17997:351::-;18067:6;18116:2;18104:9;18095:7;18091:23;18087:32;18084:119;;;18122:79;;:::i;:::-;18084:119;18242:1;18267:64;18323:7;18314:6;18303:9;18299:22;18267:64;:::i;:::-;18257:74;;18213:128;17997:351;;;;:::o;18354:332::-;18475:4;18513:2;18502:9;18498:18;18490:26;;18526:71;18594:1;18583:9;18579:17;18570:6;18526:71;:::i;:::-;18607:72;18675:2;18664:9;18660:18;18651:6;18607:72;:::i;:::-;18354:332;;;;;:::o;18692:227::-;18832:34;18828:1;18820:6;18816:14;18809:58;18901:10;18896:2;18888:6;18884:15;18877:35;18692:227;:::o;18925:366::-;19067:3;19088:67;19152:2;19147:3;19088:67;:::i;:::-;19081:74;;19164:93;19253:3;19164:93;:::i;:::-;19282:2;19277:3;19273:12;19266:19;;18925:366;;;:::o;19297:419::-;19463:4;19501:2;19490:9;19486:18;19478:26;;19550:9;19544:4;19540:20;19536:1;19525:9;19521:17;19514:47;19578:131;19704:4;19578:131;:::i;:::-;19570:139;;19297:419;;;:::o;19722:293::-;19862:34;19858:1;19850:6;19846:14;19839:58;19931:34;19926:2;19918:6;19914:15;19907:59;20000:7;19995:2;19987:6;19983:15;19976:32;19722:293;:::o;20021:366::-;20163:3;20184:67;20248:2;20243:3;20184:67;:::i;:::-;20177:74;;20260:93;20349:3;20260:93;:::i;:::-;20378:2;20373:3;20369:12;20362:19;;20021:366;;;:::o;20393:419::-;20559:4;20597:2;20586:9;20582:18;20574:26;;20646:9;20640:4;20636:20;20632:1;20621:9;20617:17;20610:47;20674:131;20800:4;20674:131;:::i;:::-;20666:139;;20393:419;;;:::o;20818:224::-;20958:34;20954:1;20946:6;20942:14;20935:58;21027:7;21022:2;21014:6;21010:15;21003:32;20818:224;:::o;21048:366::-;21190:3;21211:67;21275:2;21270:3;21211:67;:::i;:::-;21204:74;;21287:93;21376:3;21287:93;:::i;:::-;21405:2;21400:3;21396:12;21389:19;;21048:366;;;:::o;21420:419::-;21586:4;21624:2;21613:9;21609:18;21601:26;;21673:9;21667:4;21663:20;21659:1;21648:9;21644:17;21637:47;21701:131;21827:4;21701:131;:::i;:::-;21693:139;;21420:419;;;:::o;21845:229::-;21985:34;21981:1;21973:6;21969:14;21962:58;22054:12;22049:2;22041:6;22037:15;22030:37;21845:229;:::o;22080:366::-;22222:3;22243:67;22307:2;22302:3;22243:67;:::i;:::-;22236:74;;22319:93;22408:3;22319:93;:::i;:::-;22437:2;22432:3;22428:12;22421:19;;22080:366;;;:::o;22452:419::-;22618:4;22656:2;22645:9;22641:18;22633:26;;22705:9;22699:4;22695:20;22691:1;22680:9;22676:17;22669:47;22733:131;22859:4;22733:131;:::i;:::-;22725:139;;22452:419;;;:::o;22877:180::-;22925:77;22922:1;22915:88;23022:4;23019:1;23012:15;23046:4;23043:1;23036:15;23063:233;23102:3;23125:24;23143:5;23125:24;:::i;:::-;23116:33;;23171:66;23164:5;23161:77;23158:103;;23241:18;;:::i;:::-;23158:103;23288:1;23281:5;23277:13;23270:20;;23063:233;;;:::o;23302:176::-;23442:28;23438:1;23430:6;23426:14;23419:52;23302:176;:::o;23484:366::-;23626:3;23647:67;23711:2;23706:3;23647:67;:::i;:::-;23640:74;;23723:93;23812:3;23723:93;:::i;:::-;23841:2;23836:3;23832:12;23825:19;;23484:366;;;:::o;23856:419::-;24022:4;24060:2;24049:9;24045:18;24037:26;;24109:9;24103:4;24099:20;24095:1;24084:9;24080:17;24073:47;24137:131;24263:4;24137:131;:::i;:::-;24129:139;;23856:419;;;:::o;24281:225::-;24421:34;24417:1;24409:6;24405:14;24398:58;24490:8;24485:2;24477:6;24473:15;24466:33;24281:225;:::o;24512:366::-;24654:3;24675:67;24739:2;24734:3;24675:67;:::i;:::-;24668:74;;24751:93;24840:3;24751:93;:::i;:::-;24869:2;24864:3;24860:12;24853:19;;24512:366;;;:::o;24884:419::-;25050:4;25088:2;25077:9;25073:18;25065:26;;25137:9;25131:4;25127:20;25123:1;25112:9;25108:17;25101:47;25165:131;25291:4;25165:131;:::i;:::-;25157:139;;24884:419;;;:::o;25309:182::-;25449:34;25445:1;25437:6;25433:14;25426:58;25309:182;:::o;25497:366::-;25639:3;25660:67;25724:2;25719:3;25660:67;:::i;:::-;25653:74;;25736:93;25825:3;25736:93;:::i;:::-;25854:2;25849:3;25845:12;25838:19;;25497:366;;;:::o;25869:419::-;26035:4;26073:2;26062:9;26058:18;26050:26;;26122:9;26116:4;26112:20;26108:1;26097:9;26093:17;26086:47;26150:131;26276:4;26150:131;:::i;:::-;26142:139;;25869:419;;;:::o;26294:85::-;26339:7;26368:5;26357:16;;26294:85;;;:::o;26385:158::-;26443:9;26476:61;26494:42;26503:32;26529:5;26503:32;:::i;:::-;26494:42;:::i;:::-;26476:61;:::i;:::-;26463:74;;26385:158;;;:::o;26549:147::-;26644:45;26683:5;26644:45;:::i;:::-;26639:3;26632:58;26549:147;;:::o;26702:114::-;26769:6;26803:5;26797:12;26787:22;;26702:114;;;:::o;26822:184::-;26921:11;26955:6;26950:3;26943:19;26995:4;26990:3;26986:14;26971:29;;26822:184;;;;:::o;27012:132::-;27079:4;27102:3;27094:11;;27132:4;27127:3;27123:14;27115:22;;27012:132;;;:::o;27150:108::-;27227:24;27245:5;27227:24;:::i;:::-;27222:3;27215:37;27150:108;;:::o;27264:179::-;27333:10;27354:46;27396:3;27388:6;27354:46;:::i;:::-;27432:4;27427:3;27423:14;27409:28;;27264:179;;;;:::o;27449:113::-;27519:4;27551;27546:3;27542:14;27534:22;;27449:113;;;:::o;27598:732::-;27717:3;27746:54;27794:5;27746:54;:::i;:::-;27816:86;27895:6;27890:3;27816:86;:::i;:::-;27809:93;;27926:56;27976:5;27926:56;:::i;:::-;28005:7;28036:1;28021:284;28046:6;28043:1;28040:13;28021:284;;;28122:6;28116:13;28149:63;28208:3;28193:13;28149:63;:::i;:::-;28142:70;;28235:60;28288:6;28235:60;:::i;:::-;28225:70;;28081:224;28068:1;28065;28061:9;28056:14;;28021:284;;;28025:14;28321:3;28314:10;;27722:608;;;27598:732;;;;:::o;28336:831::-;28599:4;28637:3;28626:9;28622:19;28614:27;;28651:71;28719:1;28708:9;28704:17;28695:6;28651:71;:::i;:::-;28732:80;28808:2;28797:9;28793:18;28784:6;28732:80;:::i;:::-;28859:9;28853:4;28849:20;28844:2;28833:9;28829:18;28822:48;28887:108;28990:4;28981:6;28887:108;:::i;:::-;28879:116;;29005:72;29073:2;29062:9;29058:18;29049:6;29005:72;:::i;:::-;29087:73;29155:3;29144:9;29140:19;29131:6;29087:73;:::i;:::-;28336:831;;;;;;;;:::o;29173:223::-;29313:34;29309:1;29301:6;29297:14;29290:58;29382:6;29377:2;29369:6;29365:15;29358:31;29173:223;:::o;29402:366::-;29544:3;29565:67;29629:2;29624:3;29565:67;:::i;:::-;29558:74;;29641:93;29730:3;29641:93;:::i;:::-;29759:2;29754:3;29750:12;29743:19;;29402:366;;;:::o;29774:419::-;29940:4;29978:2;29967:9;29963:18;29955:26;;30027:9;30021:4;30017:20;30013:1;30002:9;29998:17;29991:47;30055:131;30181:4;30055:131;:::i;:::-;30047:139;;29774:419;;;:::o;30199:221::-;30339:34;30335:1;30327:6;30323:14;30316:58;30408:4;30403:2;30395:6;30391:15;30384:29;30199:221;:::o;30426:366::-;30568:3;30589:67;30653:2;30648:3;30589:67;:::i;:::-;30582:74;;30665:93;30754:3;30665:93;:::i;:::-;30783:2;30778:3;30774:12;30767:19;;30426:366;;;:::o;30798:419::-;30964:4;31002:2;30991:9;30987:18;30979:26;;31051:9;31045:4;31041:20;31037:1;31026:9;31022:17;31015:47;31079:131;31205:4;31079:131;:::i;:::-;31071:139;;30798:419;;;:::o;31223:179::-;31363:31;31359:1;31351:6;31347:14;31340:55;31223:179;:::o;31408:366::-;31550:3;31571:67;31635:2;31630:3;31571:67;:::i;:::-;31564:74;;31647:93;31736:3;31647:93;:::i;:::-;31765:2;31760:3;31756:12;31749:19;;31408:366;;;:::o;31780:419::-;31946:4;31984:2;31973:9;31969:18;31961:26;;32033:9;32027:4;32023:20;32019:1;32008:9;32004:17;31997:47;32061:131;32187:4;32061:131;:::i;:::-;32053:139;;31780:419;;;:::o;32205:224::-;32345:34;32341:1;32333:6;32329:14;32322:58;32414:7;32409:2;32401:6;32397:15;32390:32;32205:224;:::o;32435:366::-;32577:3;32598:67;32662:2;32657:3;32598:67;:::i;:::-;32591:74;;32674:93;32763:3;32674:93;:::i;:::-;32792:2;32787:3;32783:12;32776:19;;32435:366;;;:::o;32807:419::-;32973:4;33011:2;33000:9;32996:18;32988:26;;33060:9;33054:4;33050:20;33046:1;33035:9;33031:17;33024:47;33088:131;33214:4;33088:131;:::i;:::-;33080:139;;32807:419;;;:::o;33232:222::-;33372:34;33368:1;33360:6;33356:14;33349:58;33441:5;33436:2;33428:6;33424:15;33417:30;33232:222;:::o;33460:366::-;33602:3;33623:67;33687:2;33682:3;33623:67;:::i;:::-;33616:74;;33699:93;33788:3;33699:93;:::i;:::-;33817:2;33812:3;33808:12;33801:19;;33460:366;;;:::o;33832:419::-;33998:4;34036:2;34025:9;34021:18;34013:26;;34085:9;34079:4;34075:20;34071:1;34060:9;34056:17;34049:47;34113:131;34239:4;34113:131;:::i;:::-;34105:139;;33832:419;;;:::o;34257:179::-;34397:31;34393:1;34385:6;34381:14;34374:55;34257:179;:::o;34442:366::-;34584:3;34605:67;34669:2;34664:3;34605:67;:::i;:::-;34598:74;;34681:93;34770:3;34681:93;:::i;:::-;34799:2;34794:3;34790:12;34783:19;;34442:366;;;:::o;34814:419::-;34980:4;35018:2;35007:9;35003:18;34995:26;;35067:9;35061:4;35057:20;35053:1;35042:9;35038:17;35031:47;35095:131;35221:4;35095:131;:::i;:::-;35087:139;;34814:419;;;:::o;35239:230::-;35379:34;35375:1;35367:6;35363:14;35356:58;35448:13;35443:2;35435:6;35431:15;35424:38;35239:230;:::o;35475:366::-;35617:3;35638:67;35702:2;35697:3;35638:67;:::i;:::-;35631:74;;35714:93;35803:3;35714:93;:::i;:::-;35832:2;35827:3;35823:12;35816:19;;35475:366;;;:::o;35847:419::-;36013:4;36051:2;36040:9;36036:18;36028:26;;36100:9;36094:4;36090:20;36086:1;36075:9;36071:17;36064:47;36128:131;36254:4;36128:131;:::i;:::-;36120:139;;35847:419;;;:::o;36272:222::-;36412:34;36408:1;36400:6;36396:14;36389:58;36481:5;36476:2;36468:6;36464:15;36457:30;36272:222;:::o;36500:366::-;36642:3;36663:67;36727:2;36722:3;36663:67;:::i;:::-;36656:74;;36739:93;36828:3;36739:93;:::i;:::-;36857:2;36852:3;36848:12;36841:19;;36500:366;;;:::o;36872:419::-;37038:4;37076:2;37065:9;37061:18;37053:26;;37125:9;37119:4;37115:20;37111:1;37100:9;37096:17;37089:47;37153:131;37279:4;37153:131;:::i;:::-;37145:139;;36872:419;;;:::o;37297:410::-;37337:7;37360:20;37378:1;37360:20;:::i;:::-;37355:25;;37394:20;37412:1;37394:20;:::i;:::-;37389:25;;37449:1;37446;37442:9;37471:30;37489:11;37471:30;:::i;:::-;37460:41;;37650:1;37641:7;37637:15;37634:1;37631:22;37611:1;37604:9;37584:83;37561:139;;37680:18;;:::i;:::-;37561:139;37345:362;37297:410;;;;:::o;37713:180::-;37761:77;37758:1;37751:88;37858:4;37855:1;37848:15;37882:4;37879:1;37872:15;37899:185;37939:1;37956:20;37974:1;37956:20;:::i;:::-;37951:25;;37990:20;38008:1;37990:20;:::i;:::-;37985:25;;38029:1;38019:35;;38034:18;;:::i;:::-;38019:35;38076:1;38073;38069:9;38064:14;;37899:185;;;;:::o;38090:194::-;38130:4;38150:20;38168:1;38150:20;:::i;:::-;38145:25;;38184:20;38202:1;38184:20;:::i;:::-;38179:25;;38228:1;38225;38221:9;38213:17;;38252:1;38246:4;38243:11;38240:37;;;38257:18;;:::i;:::-;38240:37;38090:194;;;;:::o;38290:243::-;38430:34;38426:1;38418:6;38414:14;38407:58;38499:26;38494:2;38486:6;38482:15;38475:51;38290:243;:::o;38539:366::-;38681:3;38702:67;38766:2;38761:3;38702:67;:::i;:::-;38695:74;;38778:93;38867:3;38778:93;:::i;:::-;38896:2;38891:3;38887:12;38880:19;;38539:366;;;:::o;38911:419::-;39077:4;39115:2;39104:9;39100:18;39092:26;;39164:9;39158:4;39154:20;39150:1;39139:9;39135:17;39128:47;39192:131;39318:4;39192:131;:::i;:::-;39184:139;;38911:419;;;:::o;39336:225::-;39476:34;39472:1;39464:6;39460:14;39453:58;39545:8;39540:2;39532:6;39528:15;39521:33;39336:225;:::o;39567:366::-;39709:3;39730:67;39794:2;39789:3;39730:67;:::i;:::-;39723:74;;39806:93;39895:3;39806:93;:::i;:::-;39924:2;39919:3;39915:12;39908:19;;39567:366;;;:::o;39939:419::-;40105:4;40143:2;40132:9;40128:18;40120:26;;40192:9;40186:4;40182:20;40178:1;40167:9;40163:17;40156:47;40220:131;40346:4;40220:131;:::i;:::-;40212:139;;39939:419;;;:::o

Swarm Source

ipfs://b7d4b4dd272befec681505727ffe3394b1d9ef90ac74aa75053b31f3ec77dd5e
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.