ETH Price: $3,108.99 (+0.03%)
 

Overview

Max Total Supply

1,000,000 SOLETH

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
14,999.250020168762378693 SOLETH

Value
$0.00
0xfca062b5e62e981a3605883a37a4227c9f9206c1
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:
SOLETH

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-06
*/

/*
Website: https://soleth.org/
Telegram: https://t.me/solethportal
X / Twitter: https://twitter.com/solethofficial
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.12;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }


    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract SOLETH is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public PAIR = 0xD31a59c85aE9D8edEFeC411D448f90841571b89c; // Pair's Coin Address

    bool private swapping;

    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;


    event ExcludeFromFees(address indexed account, bool isExcluded);

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("SOLETH", "SOLETH") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), PAIR);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);


        uint256 _buyDevFee = 25;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellDevFee = 40;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount =  totalSupply * 20 / 1000;
        maxWallet = totalSupply * 20 / 1000;
        swapTokensAtAmount = (totalSupply * 10) / 10000;

        buyDevFee = _buyDevFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;

        sellDevFee = _sellDevFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;

        devWallet = address(0x0f9b074ce84d13d65FECaCd4CbEe41b738bE2B4d); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // remove limits after token is stable
    function disableLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // once enabled, can never be turned off
    function triggerLaunch() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function adjustBuyTax(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;
    }

    function adjustSellTax(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateDevWallet(address newDevWallet)
        external
        onlyOwner
    {
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }


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

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

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                //when buy
                if (
                    from == uniswapV2Pair &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            to == uniswapV2Pair &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        uint256 tokensForLiquidity = 0;
        uint256 tokensForDev = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev = (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees; 
                tokensForDev = (fees * buyDevFee) / buyTotalFees;
            }

            if (fees> 0) {
                super._transfer(from, address(this), fees);
            }
            if (tokensForLiquidity > 0) {
                super._transfer(address(this), uniswapV2Pair, tokensForLiquidity);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForPAIR(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = PAIR;

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of PAIR
            path,
            devWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        swapTokensForPAIR(contractBalance);
    }

}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"adjustBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"adjustSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerLaunch","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":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273d31a59c85ae9d8edefec411d448f90841571b89c600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550348015620000b757600080fd5b506040518060400160405280600681526020017f534f4c45544800000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f534f4c455448000000000000000000000000000000000000000000000000000081525081600390805190602001906200013c929190620009b1565b50806004908051906020019062000155929190620009b1565b505050620001786200016c6200051260201b60201c565b6200051a60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a4816001620005e060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a919062000acb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620002a892919062000b0e565b6020604051808303816000875af1158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000acb565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033660a0516001620005e060201b60201c565b6000601990506000806028905060008069d3c21bcecceda100000090506103e860148262000365919062000b74565b62000371919062000c04565b6008819055506103e860148262000389919062000b74565b62000395919062000c04565b600a81905550612710600a82620003ad919062000b74565b620003b9919062000c04565b60098190555084600d8190555083600e81905550600e54600d54620003df919062000c3c565b600c81905550826010819055508160118190555060115460105462000405919062000c3c565b600f81905550730f9b074ce84d13d65fecacd4cbee41b738be2b4d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200048262000474620006ca60201b60201c565b6001620006f460201b60201c565b62000495306001620006f460201b60201c565b620004aa61dead6001620006f460201b60201c565b620004cc620004be620006ca60201b60201c565b6001620005e060201b60201c565b620004df306001620005e060201b60201c565b620004f461dead6001620005e060201b60201c565b6200050633826200082e60201b60201c565b50505050505062000e5b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005f06200051260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000616620006ca60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200066f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006669062000cfa565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007046200051260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200072a620006ca60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000783576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077a9062000cfa565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000822919062000d39565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008989062000da6565b60405180910390fd5b620008b560008383620009a760201b60201c565b8060026000828254620008c9919062000c3c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000920919062000c3c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000987919062000dd9565b60405180910390a3620009a360008383620009ac60201b60201c565b5050565b505050565b505050565b828054620009bf9062000e25565b90600052602060002090601f016020900481019282620009e3576000855562000a2f565b82601f10620009fe57805160ff191683800117855562000a2f565b8280016001018555821562000a2f579182015b8281111562000a2e57825182559160200191906001019062000a11565b5b50905062000a3e919062000a42565b5090565b5b8082111562000a5d57600081600090555060010162000a43565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a938262000a66565b9050919050565b62000aa58162000a86565b811462000ab157600080fd5b50565b60008151905062000ac58162000a9a565b92915050565b60006020828403121562000ae45762000ae362000a61565b5b600062000af48482850162000ab4565b91505092915050565b62000b088162000a86565b82525050565b600060408201905062000b25600083018562000afd565b62000b34602083018462000afd565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b818262000b3b565b915062000b8e8362000b3b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bca5762000bc962000b45565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c118262000b3b565b915062000c1e8362000b3b565b92508262000c315762000c3062000bd5565b5b828204905092915050565b600062000c498262000b3b565b915062000c568362000b3b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c8e5762000c8d62000b45565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ce260208362000c99565b915062000cef8262000caa565b602082019050919050565b6000602082019050818103600083015262000d158162000cd3565b9050919050565b60008115159050919050565b62000d338162000d1c565b82525050565b600060208201905062000d50600083018462000d28565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d8e601f8362000c99565b915062000d9b8262000d56565b602082019050919050565b6000602082019050818103600083015262000dc18162000d7f565b9050919050565b62000dd38162000b3b565b82525050565b600060208201905062000df0600083018462000dc8565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e3e57607f821691505b6020821081141562000e555762000e5462000df6565b5b50919050565b60805160a051613b6a62000eb260003960008181610ebb01528181611ee8015281816121310152818161233c0152818161240701526124f1015260008181610a9701528181612a1f0152612a460152613b6a6000f3fe6080604052600436106102555760003560e01c80638da5cb5b11610139578063c18bc195116100b6578063e2f456051161007a578063e2f45605146108c5578063f11a24d3146108f0578063f2fde38b1461091b578063f637434214610944578063f8b45b051461096f578063f928364c1461099a5761025c565b8063c18bc195146107cc578063c8c8ebe4146107f5578063d257b34f14610820578063d85ba0631461085d578063dd62ed3e146108885761025c565b8063a0d82dc5116100fd578063a0d82dc5146106e5578063a9059cbb14610710578063ace3a8a71461074d578063bbc0c74214610778578063c0246668146107a35761025c565b80638da5cb5b146106105780638ea5220f1461063b578063924de9b71461066657806395d89b411461068f5780639c3b4fdc146106ba5761025c565b8063313ce567116101d25780636a486a8e116101965780636a486a8e146105265780636ddd17131461055157806370a082311461057c578063715018a6146105b95780637571336a146105d05780637c4e9aac146105f95761025c565b8063313ce5671461043f57806349bd5a5e1461046a5780634a62bb65146104955780634e3f8842146104c05780634fbee193146104e95761025c565b80631816467f116102195780631816467f1461035c578063203e727e1461038557806323b872dd146103ae57806325d9f22c146103eb57806327c8f835146104145761025c565b806306fdde0314610261578063095ea7b31461028c57806310d5de53146102c95780631694505e1461030657806318160ddd146103315761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109c5565b6040516102839190612b97565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612c52565b610a57565b6040516102c09190612cad565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190612cc8565b610a75565b6040516102fd9190612cad565b60405180910390f35b34801561031257600080fd5b5061031b610a95565b6040516103289190612d54565b60405180910390f35b34801561033d57600080fd5b50610346610ab9565b6040516103539190612d7e565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190612cc8565b610ac3565b005b34801561039157600080fd5b506103ac60048036038101906103a79190612d99565b610bff565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190612dc6565b610d0e565b6040516103e29190612cad565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190612e19565b610e06565b005b34801561042057600080fd5b50610429610eaa565b6040516104369190612e68565b60405180910390f35b34801561044b57600080fd5b50610454610eb0565b6040516104619190612e9f565b60405180910390f35b34801561047657600080fd5b5061047f610eb9565b60405161048c9190612e68565b60405180910390f35b3480156104a157600080fd5b506104aa610edd565b6040516104b79190612cad565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190612e19565b610ef0565b005b3480156104f557600080fd5b50610510600480360381019061050b9190612cc8565b610f94565b60405161051d9190612cad565b60405180910390f35b34801561053257600080fd5b5061053b610fea565b6040516105489190612d7e565b60405180910390f35b34801561055d57600080fd5b50610566610ff0565b6040516105739190612cad565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190612cc8565b611003565b6040516105b09190612d7e565b60405180910390f35b3480156105c557600080fd5b506105ce61104b565b005b3480156105dc57600080fd5b506105f760048036038101906105f29190612ee6565b6110d3565b005b34801561060557600080fd5b5061060e6111aa565b005b34801561061c57600080fd5b5061062561125e565b6040516106329190612e68565b60405180910390f35b34801561064757600080fd5b50610650611288565b60405161065d9190612e68565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190612f26565b6112ae565b005b34801561069b57600080fd5b506106a4611347565b6040516106b19190612b97565b60405180910390f35b3480156106c657600080fd5b506106cf6113d9565b6040516106dc9190612d7e565b60405180910390f35b3480156106f157600080fd5b506106fa6113df565b6040516107079190612d7e565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190612c52565b6113e5565b6040516107449190612cad565b60405180910390f35b34801561075957600080fd5b50610762611403565b60405161076f9190612e68565b60405180910390f35b34801561078457600080fd5b5061078d611429565b60405161079a9190612cad565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c59190612ee6565b61143c565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190612d99565b611561565b005b34801561080157600080fd5b5061080a611670565b6040516108179190612d7e565b60405180910390f35b34801561082c57600080fd5b5061084760048036038101906108429190612d99565b611676565b6040516108549190612cad565b60405180910390f35b34801561086957600080fd5b506108726117cb565b60405161087f9190612d7e565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa9190612f53565b6117d1565b6040516108bc9190612d7e565b60405180910390f35b3480156108d157600080fd5b506108da611858565b6040516108e79190612d7e565b60405180910390f35b3480156108fc57600080fd5b5061090561185e565b6040516109129190612d7e565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190612cc8565b611864565b005b34801561095057600080fd5b5061095961195c565b6040516109669190612d7e565b60405180910390f35b34801561097b57600080fd5b50610984611962565b6040516109919190612d7e565b60405180910390f35b3480156109a657600080fd5b506109af611968565b6040516109bc9190612cad565b60405180910390f35b6060600380546109d490612fc2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0090612fc2565b8015610a4d5780601f10610a2257610100808354040283529160200191610a4d565b820191906000526020600020905b815481529060010190602001808311610a3057829003601f168201915b5050505050905090565b6000610a6b610a64611a08565b8484611a10565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610acb611a08565b73ffffffffffffffffffffffffffffffffffffffff16610ae961125e565b73ffffffffffffffffffffffffffffffffffffffff1614610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3690613040565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c07611a08565b73ffffffffffffffffffffffffffffffffffffffff16610c2561125e565b73ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290613040565b60405180910390fd5b670de0b6b3a76400006103e86001610c91610ab9565b610c9b919061308f565b610ca59190613118565b610caf9190613118565b811015610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce8906131bb565b60405180910390fd5b670de0b6b3a764000081610d05919061308f565b60088190555050565b6000610d1b848484611bdb565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d66611a08565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd9061324d565b60405180910390fd5b610dfa85610df2611a08565b858403611a10565b60019150509392505050565b610e0e611a08565b73ffffffffffffffffffffffffffffffffffffffff16610e2c61125e565b73ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990613040565b60405180910390fd5b81600d8190555080600e81905550600e54600d54610ea0919061326d565b600c819055505050565b61dead81565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b610ef8611a08565b73ffffffffffffffffffffffffffffffffffffffff16610f1661125e565b73ffffffffffffffffffffffffffffffffffffffff1614610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390613040565b60405180910390fd5b8160108190555080601181905550601154601054610f8a919061326d565b600f819055505050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611053611a08565b73ffffffffffffffffffffffffffffffffffffffff1661107161125e565b73ffffffffffffffffffffffffffffffffffffffff16146110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90613040565b60405180910390fd5b6110d1600061253d565b565b6110db611a08565b73ffffffffffffffffffffffffffffffffffffffff166110f961125e565b73ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690613040565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111b2611a08565b73ffffffffffffffffffffffffffffffffffffffff166111d061125e565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613040565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112b6611a08565b73ffffffffffffffffffffffffffffffffffffffff166112d461125e565b73ffffffffffffffffffffffffffffffffffffffff161461132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190613040565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461135690612fc2565b80601f016020809104026020016040519081016040528092919081815260200182805461138290612fc2565b80156113cf5780601f106113a4576101008083540402835291602001916113cf565b820191906000526020600020905b8154815290600101906020018083116113b257829003601f168201915b5050505050905090565b600d5481565b60105481565b60006113f96113f2611a08565b8484611bdb565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b611444611a08565b73ffffffffffffffffffffffffffffffffffffffff1661146261125e565b73ffffffffffffffffffffffffffffffffffffffff16146114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114af90613040565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115559190612cad565b60405180910390a25050565b611569611a08565b73ffffffffffffffffffffffffffffffffffffffff1661158761125e565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490613040565b60405180910390fd5b670de0b6b3a76400006103e860056115f3610ab9565b6115fd919061308f565b6116079190613118565b6116119190613118565b811015611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90613335565b60405180910390fd5b670de0b6b3a764000081611667919061308f565b600a8190555050565b60085481565b6000611680611a08565b73ffffffffffffffffffffffffffffffffffffffff1661169e61125e565b73ffffffffffffffffffffffffffffffffffffffff16146116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90613040565b60405180910390fd5b620186a06001611702610ab9565b61170c919061308f565b6117169190613118565b821015611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f906133c7565b60405180910390fd5b6103e86005611765610ab9565b61176f919061308f565b6117799190613118565b8211156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b290613459565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61186c611a08565b73ffffffffffffffffffffffffffffffffffffffff1661188a61125e565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790613040565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611947906134eb565b60405180910390fd5b6119598161253d565b50565b60115481565b600a5481565b6000611972611a08565b73ffffffffffffffffffffffffffffffffffffffff1661199061125e565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd90613040565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a779061357d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae79061360f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bce9190612d7e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c42906136a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290613733565b60405180910390fd5b6000811415611cd557611cd083836000612603565b612538565b600b60009054906101000a900460ff16156120df57611cf261125e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d605750611d3061125e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d995750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dec5750600660149054906101000a900460ff16155b156120de57600b60019054906101000a900460ff16611ee657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ea65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc9061379f565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f8b5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203257600854811115611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc90613831565b60405180910390fd5b600a54611fe183611003565b82611fec919061326d565b111561202d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120249061389d565b60405180910390fd5b6120dd565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120dc57600a5461208f83611003565b8261209a919061326d565b11156120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d29061389d565b60405180910390fd5b5b5b5b5b60006120ea30611003565b90506000600954821015905080801561210f5750600b60029054906101000a900460ff165b80156121285750600660149054906101000a900460ff16155b801561217f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121d55750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561222b5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561226f576001600660146101000a81548160ff021916908315150217905550612253612884565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123255750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561232f57600090505b60008060008315612526577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561239757506000600f54115b15612405576123c460646123b6600f548a6128d590919063ffffffff16565b6128eb90919063ffffffff16565b9250600f54601154846123d7919061308f565b6123e19190613118565b9150600f54601054846123f4919061308f565b6123fe9190613118565b90506124cd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561246257506000600c54115b156124cc5761248f6064612481600c548a6128d590919063ffffffff16565b6128eb90919063ffffffff16565b9250600c54600e54846124a2919061308f565b6124ac9190613118565b9150600c54600d54846124bf919061308f565b6124c99190613118565b90505b5b60008311156124e2576124e1893085612603565b5b600082111561251757612516307f000000000000000000000000000000000000000000000000000000000000000084612603565b5b828761252391906138bd565b96505b612531898989612603565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a906136a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126da90613733565b60405180910390fd5b6126ee838383612901565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b90613963565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612807919061326d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161286b9190612d7e565b60405180910390a361287e848484612906565b50505050565b600061288f30611003565b905060008114156128a057506128d3565b60146009546128af919061308f565b8111156128c85760146009546128c5919061308f565b90505b6128d18161290b565b505b565b600081836128e3919061308f565b905092915050565b600081836128f99190613118565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561292857612927613983565b5b6040519080825280602002602001820160405280156129565781602001602082028036833780820191505090505b509050308160008151811061296e5761296d6139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106129df576129de6139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a44307f000000000000000000000000000000000000000000000000000000000000000084611a10565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612ac8959493929190613ada565b600060405180830381600087803b158015612ae257600080fd5b505af1158015612af6573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b38578082015181840152602081019050612b1d565b83811115612b47576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b6982612afe565b612b738185612b09565b9350612b83818560208601612b1a565b612b8c81612b4d565b840191505092915050565b60006020820190508181036000830152612bb18184612b5e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612be982612bbe565b9050919050565b612bf981612bde565b8114612c0457600080fd5b50565b600081359050612c1681612bf0565b92915050565b6000819050919050565b612c2f81612c1c565b8114612c3a57600080fd5b50565b600081359050612c4c81612c26565b92915050565b60008060408385031215612c6957612c68612bb9565b5b6000612c7785828601612c07565b9250506020612c8885828601612c3d565b9150509250929050565b60008115159050919050565b612ca781612c92565b82525050565b6000602082019050612cc26000830184612c9e565b92915050565b600060208284031215612cde57612cdd612bb9565b5b6000612cec84828501612c07565b91505092915050565b6000819050919050565b6000612d1a612d15612d1084612bbe565b612cf5565b612bbe565b9050919050565b6000612d2c82612cff565b9050919050565b6000612d3e82612d21565b9050919050565b612d4e81612d33565b82525050565b6000602082019050612d696000830184612d45565b92915050565b612d7881612c1c565b82525050565b6000602082019050612d936000830184612d6f565b92915050565b600060208284031215612daf57612dae612bb9565b5b6000612dbd84828501612c3d565b91505092915050565b600080600060608486031215612ddf57612dde612bb9565b5b6000612ded86828701612c07565b9350506020612dfe86828701612c07565b9250506040612e0f86828701612c3d565b9150509250925092565b60008060408385031215612e3057612e2f612bb9565b5b6000612e3e85828601612c3d565b9250506020612e4f85828601612c3d565b9150509250929050565b612e6281612bde565b82525050565b6000602082019050612e7d6000830184612e59565b92915050565b600060ff82169050919050565b612e9981612e83565b82525050565b6000602082019050612eb46000830184612e90565b92915050565b612ec381612c92565b8114612ece57600080fd5b50565b600081359050612ee081612eba565b92915050565b60008060408385031215612efd57612efc612bb9565b5b6000612f0b85828601612c07565b9250506020612f1c85828601612ed1565b9150509250929050565b600060208284031215612f3c57612f3b612bb9565b5b6000612f4a84828501612ed1565b91505092915050565b60008060408385031215612f6a57612f69612bb9565b5b6000612f7885828601612c07565b9250506020612f8985828601612c07565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fda57607f821691505b60208210811415612fee57612fed612f93565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061302a602083612b09565b915061303582612ff4565b602082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061309a82612c1c565b91506130a583612c1c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130de576130dd613060565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061312382612c1c565b915061312e83612c1c565b92508261313e5761313d6130e9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006131a5602f83612b09565b91506131b082613149565b604082019050919050565b600060208201905081810360008301526131d481613198565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613237602883612b09565b9150613242826131db565b604082019050919050565b600060208201905081810360008301526132668161322a565b9050919050565b600061327882612c1c565b915061328383612c1c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132b8576132b7613060565b5b828201905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061331f602483612b09565b915061332a826132c3565b604082019050919050565b6000602082019050818103600083015261334e81613312565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006133b1603583612b09565b91506133bc82613355565b604082019050919050565b600060208201905081810360008301526133e0816133a4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613443603483612b09565b915061344e826133e7565b604082019050919050565b6000602082019050818103600083015261347281613436565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134d5602683612b09565b91506134e082613479565b604082019050919050565b60006020820190508181036000830152613504816134c8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613567602483612b09565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135f9602283612b09565b91506136048261359d565b604082019050919050565b60006020820190508181036000830152613628816135ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061368b602583612b09565b91506136968261362f565b604082019050919050565b600060208201905081810360008301526136ba8161367e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061371d602383612b09565b9150613728826136c1565b604082019050919050565b6000602082019050818103600083015261374c81613710565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613789601683612b09565b915061379482613753565b602082019050919050565b600060208201905081810360008301526137b88161377c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061381b603583612b09565b9150613826826137bf565b604082019050919050565b6000602082019050818103600083015261384a8161380e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613887601383612b09565b915061389282613851565b602082019050919050565b600060208201905081810360008301526138b68161387a565b9050919050565b60006138c882612c1c565b91506138d383612c1c565b9250828210156138e6576138e5613060565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061394d602683612b09565b9150613958826138f1565b604082019050919050565b6000602082019050818103600083015261397c81613940565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613a06613a016139fc846139e1565b612cf5565b612c1c565b9050919050565b613a16816139eb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a5181612bde565b82525050565b6000613a638383613a48565b60208301905092915050565b6000602082019050919050565b6000613a8782613a1c565b613a918185613a27565b9350613a9c83613a38565b8060005b83811015613acd578151613ab48882613a57565b9750613abf83613a6f565b925050600181019050613aa0565b5085935050505092915050565b600060a082019050613aef6000830188612d6f565b613afc6020830187613a0d565b8181036040830152613b0e8186613a7c565b9050613b1d6060830185612e59565b613b2a6080830184612d6f565b969550505050505056fea2646970667358221220634dff11dbb9faa6c592143e52e29c05da349f32429da487ffd7d22ed6b31a6c64736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102555760003560e01c80638da5cb5b11610139578063c18bc195116100b6578063e2f456051161007a578063e2f45605146108c5578063f11a24d3146108f0578063f2fde38b1461091b578063f637434214610944578063f8b45b051461096f578063f928364c1461099a5761025c565b8063c18bc195146107cc578063c8c8ebe4146107f5578063d257b34f14610820578063d85ba0631461085d578063dd62ed3e146108885761025c565b8063a0d82dc5116100fd578063a0d82dc5146106e5578063a9059cbb14610710578063ace3a8a71461074d578063bbc0c74214610778578063c0246668146107a35761025c565b80638da5cb5b146106105780638ea5220f1461063b578063924de9b71461066657806395d89b411461068f5780639c3b4fdc146106ba5761025c565b8063313ce567116101d25780636a486a8e116101965780636a486a8e146105265780636ddd17131461055157806370a082311461057c578063715018a6146105b95780637571336a146105d05780637c4e9aac146105f95761025c565b8063313ce5671461043f57806349bd5a5e1461046a5780634a62bb65146104955780634e3f8842146104c05780634fbee193146104e95761025c565b80631816467f116102195780631816467f1461035c578063203e727e1461038557806323b872dd146103ae57806325d9f22c146103eb57806327c8f835146104145761025c565b806306fdde0314610261578063095ea7b31461028c57806310d5de53146102c95780631694505e1461030657806318160ddd146103315761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109c5565b6040516102839190612b97565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612c52565b610a57565b6040516102c09190612cad565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190612cc8565b610a75565b6040516102fd9190612cad565b60405180910390f35b34801561031257600080fd5b5061031b610a95565b6040516103289190612d54565b60405180910390f35b34801561033d57600080fd5b50610346610ab9565b6040516103539190612d7e565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190612cc8565b610ac3565b005b34801561039157600080fd5b506103ac60048036038101906103a79190612d99565b610bff565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190612dc6565b610d0e565b6040516103e29190612cad565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190612e19565b610e06565b005b34801561042057600080fd5b50610429610eaa565b6040516104369190612e68565b60405180910390f35b34801561044b57600080fd5b50610454610eb0565b6040516104619190612e9f565b60405180910390f35b34801561047657600080fd5b5061047f610eb9565b60405161048c9190612e68565b60405180910390f35b3480156104a157600080fd5b506104aa610edd565b6040516104b79190612cad565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190612e19565b610ef0565b005b3480156104f557600080fd5b50610510600480360381019061050b9190612cc8565b610f94565b60405161051d9190612cad565b60405180910390f35b34801561053257600080fd5b5061053b610fea565b6040516105489190612d7e565b60405180910390f35b34801561055d57600080fd5b50610566610ff0565b6040516105739190612cad565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190612cc8565b611003565b6040516105b09190612d7e565b60405180910390f35b3480156105c557600080fd5b506105ce61104b565b005b3480156105dc57600080fd5b506105f760048036038101906105f29190612ee6565b6110d3565b005b34801561060557600080fd5b5061060e6111aa565b005b34801561061c57600080fd5b5061062561125e565b6040516106329190612e68565b60405180910390f35b34801561064757600080fd5b50610650611288565b60405161065d9190612e68565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190612f26565b6112ae565b005b34801561069b57600080fd5b506106a4611347565b6040516106b19190612b97565b60405180910390f35b3480156106c657600080fd5b506106cf6113d9565b6040516106dc9190612d7e565b60405180910390f35b3480156106f157600080fd5b506106fa6113df565b6040516107079190612d7e565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190612c52565b6113e5565b6040516107449190612cad565b60405180910390f35b34801561075957600080fd5b50610762611403565b60405161076f9190612e68565b60405180910390f35b34801561078457600080fd5b5061078d611429565b60405161079a9190612cad565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c59190612ee6565b61143c565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190612d99565b611561565b005b34801561080157600080fd5b5061080a611670565b6040516108179190612d7e565b60405180910390f35b34801561082c57600080fd5b5061084760048036038101906108429190612d99565b611676565b6040516108549190612cad565b60405180910390f35b34801561086957600080fd5b506108726117cb565b60405161087f9190612d7e565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa9190612f53565b6117d1565b6040516108bc9190612d7e565b60405180910390f35b3480156108d157600080fd5b506108da611858565b6040516108e79190612d7e565b60405180910390f35b3480156108fc57600080fd5b5061090561185e565b6040516109129190612d7e565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190612cc8565b611864565b005b34801561095057600080fd5b5061095961195c565b6040516109669190612d7e565b60405180910390f35b34801561097b57600080fd5b50610984611962565b6040516109919190612d7e565b60405180910390f35b3480156109a657600080fd5b506109af611968565b6040516109bc9190612cad565b60405180910390f35b6060600380546109d490612fc2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0090612fc2565b8015610a4d5780601f10610a2257610100808354040283529160200191610a4d565b820191906000526020600020905b815481529060010190602001808311610a3057829003601f168201915b5050505050905090565b6000610a6b610a64611a08565b8484611a10565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610acb611a08565b73ffffffffffffffffffffffffffffffffffffffff16610ae961125e565b73ffffffffffffffffffffffffffffffffffffffff1614610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3690613040565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c07611a08565b73ffffffffffffffffffffffffffffffffffffffff16610c2561125e565b73ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290613040565b60405180910390fd5b670de0b6b3a76400006103e86001610c91610ab9565b610c9b919061308f565b610ca59190613118565b610caf9190613118565b811015610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce8906131bb565b60405180910390fd5b670de0b6b3a764000081610d05919061308f565b60088190555050565b6000610d1b848484611bdb565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d66611a08565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd9061324d565b60405180910390fd5b610dfa85610df2611a08565b858403611a10565b60019150509392505050565b610e0e611a08565b73ffffffffffffffffffffffffffffffffffffffff16610e2c61125e565b73ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990613040565b60405180910390fd5b81600d8190555080600e81905550600e54600d54610ea0919061326d565b600c819055505050565b61dead81565b60006012905090565b7f000000000000000000000000cdd7c70c1c5f6e55f200e114a45b7d67f6c594ba81565b600b60009054906101000a900460ff1681565b610ef8611a08565b73ffffffffffffffffffffffffffffffffffffffff16610f1661125e565b73ffffffffffffffffffffffffffffffffffffffff1614610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390613040565b60405180910390fd5b8160108190555080601181905550601154601054610f8a919061326d565b600f819055505050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611053611a08565b73ffffffffffffffffffffffffffffffffffffffff1661107161125e565b73ffffffffffffffffffffffffffffffffffffffff16146110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90613040565b60405180910390fd5b6110d1600061253d565b565b6110db611a08565b73ffffffffffffffffffffffffffffffffffffffff166110f961125e565b73ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690613040565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111b2611a08565b73ffffffffffffffffffffffffffffffffffffffff166111d061125e565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613040565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112b6611a08565b73ffffffffffffffffffffffffffffffffffffffff166112d461125e565b73ffffffffffffffffffffffffffffffffffffffff161461132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190613040565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461135690612fc2565b80601f016020809104026020016040519081016040528092919081815260200182805461138290612fc2565b80156113cf5780601f106113a4576101008083540402835291602001916113cf565b820191906000526020600020905b8154815290600101906020018083116113b257829003601f168201915b5050505050905090565b600d5481565b60105481565b60006113f96113f2611a08565b8484611bdb565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b611444611a08565b73ffffffffffffffffffffffffffffffffffffffff1661146261125e565b73ffffffffffffffffffffffffffffffffffffffff16146114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114af90613040565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115559190612cad565b60405180910390a25050565b611569611a08565b73ffffffffffffffffffffffffffffffffffffffff1661158761125e565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490613040565b60405180910390fd5b670de0b6b3a76400006103e860056115f3610ab9565b6115fd919061308f565b6116079190613118565b6116119190613118565b811015611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90613335565b60405180910390fd5b670de0b6b3a764000081611667919061308f565b600a8190555050565b60085481565b6000611680611a08565b73ffffffffffffffffffffffffffffffffffffffff1661169e61125e565b73ffffffffffffffffffffffffffffffffffffffff16146116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90613040565b60405180910390fd5b620186a06001611702610ab9565b61170c919061308f565b6117169190613118565b821015611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f906133c7565b60405180910390fd5b6103e86005611765610ab9565b61176f919061308f565b6117799190613118565b8211156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b290613459565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61186c611a08565b73ffffffffffffffffffffffffffffffffffffffff1661188a61125e565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790613040565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611947906134eb565b60405180910390fd5b6119598161253d565b50565b60115481565b600a5481565b6000611972611a08565b73ffffffffffffffffffffffffffffffffffffffff1661199061125e565b73ffffffffffffffffffffffffffffffffffffffff16146119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd90613040565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a779061357d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae79061360f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bce9190612d7e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c42906136a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290613733565b60405180910390fd5b6000811415611cd557611cd083836000612603565b612538565b600b60009054906101000a900460ff16156120df57611cf261125e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d605750611d3061125e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d995750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dec5750600660149054906101000a900460ff16155b156120de57600b60019054906101000a900460ff16611ee657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ea65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc9061379f565b60405180910390fd5b5b7f000000000000000000000000cdd7c70c1c5f6e55f200e114a45b7d67f6c594ba73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f8b5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203257600854811115611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc90613831565b60405180910390fd5b600a54611fe183611003565b82611fec919061326d565b111561202d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120249061389d565b60405180910390fd5b6120dd565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120dc57600a5461208f83611003565b8261209a919061326d565b11156120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d29061389d565b60405180910390fd5b5b5b5b5b60006120ea30611003565b90506000600954821015905080801561210f5750600b60029054906101000a900460ff165b80156121285750600660149054906101000a900460ff16155b801561217f57507f000000000000000000000000cdd7c70c1c5f6e55f200e114a45b7d67f6c594ba73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121d55750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561222b5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561226f576001600660146101000a81548160ff021916908315150217905550612253612884565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123255750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561232f57600090505b60008060008315612526577f000000000000000000000000cdd7c70c1c5f6e55f200e114a45b7d67f6c594ba73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561239757506000600f54115b15612405576123c460646123b6600f548a6128d590919063ffffffff16565b6128eb90919063ffffffff16565b9250600f54601154846123d7919061308f565b6123e19190613118565b9150600f54601054846123f4919061308f565b6123fe9190613118565b90506124cd565b7f000000000000000000000000cdd7c70c1c5f6e55f200e114a45b7d67f6c594ba73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561246257506000600c54115b156124cc5761248f6064612481600c548a6128d590919063ffffffff16565b6128eb90919063ffffffff16565b9250600c54600e54846124a2919061308f565b6124ac9190613118565b9150600c54600d54846124bf919061308f565b6124c99190613118565b90505b5b60008311156124e2576124e1893085612603565b5b600082111561251757612516307f000000000000000000000000cdd7c70c1c5f6e55f200e114a45b7d67f6c594ba84612603565b5b828761252391906138bd565b96505b612531898989612603565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a906136a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126da90613733565b60405180910390fd5b6126ee838383612901565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b90613963565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612807919061326d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161286b9190612d7e565b60405180910390a361287e848484612906565b50505050565b600061288f30611003565b905060008114156128a057506128d3565b60146009546128af919061308f565b8111156128c85760146009546128c5919061308f565b90505b6128d18161290b565b505b565b600081836128e3919061308f565b905092915050565b600081836128f99190613118565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561292857612927613983565b5b6040519080825280602002602001820160405280156129565781602001602082028036833780820191505090505b509050308160008151811061296e5761296d6139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106129df576129de6139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a44307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a10565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612ac8959493929190613ada565b600060405180830381600087803b158015612ae257600080fd5b505af1158015612af6573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b38578082015181840152602081019050612b1d565b83811115612b47576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b6982612afe565b612b738185612b09565b9350612b83818560208601612b1a565b612b8c81612b4d565b840191505092915050565b60006020820190508181036000830152612bb18184612b5e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612be982612bbe565b9050919050565b612bf981612bde565b8114612c0457600080fd5b50565b600081359050612c1681612bf0565b92915050565b6000819050919050565b612c2f81612c1c565b8114612c3a57600080fd5b50565b600081359050612c4c81612c26565b92915050565b60008060408385031215612c6957612c68612bb9565b5b6000612c7785828601612c07565b9250506020612c8885828601612c3d565b9150509250929050565b60008115159050919050565b612ca781612c92565b82525050565b6000602082019050612cc26000830184612c9e565b92915050565b600060208284031215612cde57612cdd612bb9565b5b6000612cec84828501612c07565b91505092915050565b6000819050919050565b6000612d1a612d15612d1084612bbe565b612cf5565b612bbe565b9050919050565b6000612d2c82612cff565b9050919050565b6000612d3e82612d21565b9050919050565b612d4e81612d33565b82525050565b6000602082019050612d696000830184612d45565b92915050565b612d7881612c1c565b82525050565b6000602082019050612d936000830184612d6f565b92915050565b600060208284031215612daf57612dae612bb9565b5b6000612dbd84828501612c3d565b91505092915050565b600080600060608486031215612ddf57612dde612bb9565b5b6000612ded86828701612c07565b9350506020612dfe86828701612c07565b9250506040612e0f86828701612c3d565b9150509250925092565b60008060408385031215612e3057612e2f612bb9565b5b6000612e3e85828601612c3d565b9250506020612e4f85828601612c3d565b9150509250929050565b612e6281612bde565b82525050565b6000602082019050612e7d6000830184612e59565b92915050565b600060ff82169050919050565b612e9981612e83565b82525050565b6000602082019050612eb46000830184612e90565b92915050565b612ec381612c92565b8114612ece57600080fd5b50565b600081359050612ee081612eba565b92915050565b60008060408385031215612efd57612efc612bb9565b5b6000612f0b85828601612c07565b9250506020612f1c85828601612ed1565b9150509250929050565b600060208284031215612f3c57612f3b612bb9565b5b6000612f4a84828501612ed1565b91505092915050565b60008060408385031215612f6a57612f69612bb9565b5b6000612f7885828601612c07565b9250506020612f8985828601612c07565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fda57607f821691505b60208210811415612fee57612fed612f93565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061302a602083612b09565b915061303582612ff4565b602082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061309a82612c1c565b91506130a583612c1c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130de576130dd613060565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061312382612c1c565b915061312e83612c1c565b92508261313e5761313d6130e9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006131a5602f83612b09565b91506131b082613149565b604082019050919050565b600060208201905081810360008301526131d481613198565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613237602883612b09565b9150613242826131db565b604082019050919050565b600060208201905081810360008301526132668161322a565b9050919050565b600061327882612c1c565b915061328383612c1c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132b8576132b7613060565b5b828201905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061331f602483612b09565b915061332a826132c3565b604082019050919050565b6000602082019050818103600083015261334e81613312565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006133b1603583612b09565b91506133bc82613355565b604082019050919050565b600060208201905081810360008301526133e0816133a4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613443603483612b09565b915061344e826133e7565b604082019050919050565b6000602082019050818103600083015261347281613436565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134d5602683612b09565b91506134e082613479565b604082019050919050565b60006020820190508181036000830152613504816134c8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613567602483612b09565b91506135728261350b565b604082019050919050565b600060208201905081810360008301526135968161355a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135f9602283612b09565b91506136048261359d565b604082019050919050565b60006020820190508181036000830152613628816135ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061368b602583612b09565b91506136968261362f565b604082019050919050565b600060208201905081810360008301526136ba8161367e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061371d602383612b09565b9150613728826136c1565b604082019050919050565b6000602082019050818103600083015261374c81613710565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613789601683612b09565b915061379482613753565b602082019050919050565b600060208201905081810360008301526137b88161377c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061381b603583612b09565b9150613826826137bf565b604082019050919050565b6000602082019050818103600083015261384a8161380e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613887601383612b09565b915061389282613851565b602082019050919050565b600060208201905081810360008301526138b68161387a565b9050919050565b60006138c882612c1c565b91506138d383612c1c565b9250828210156138e6576138e5613060565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061394d602683612b09565b9150613958826138f1565b604082019050919050565b6000602082019050818103600083015261397c81613940565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613a06613a016139fc846139e1565b612cf5565b612c1c565b9050919050565b613a16816139eb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a5181612bde565b82525050565b6000613a638383613a48565b60208301905092915050565b6000602082019050919050565b6000613a8782613a1c565b613a918185613a27565b9350613a9c83613a38565b8060005b83811015613acd578151613ab48882613a57565b9750613abf83613a6f565b925050600181019050613aa0565b5085935050505092915050565b600060a082019050613aef6000830188612d6f565b613afc6020830187613a0d565b8181036040830152613b0e8186613a7c565b9050613b1d6060830185612e59565b613b2a6080830184612d6f565b969550505050505056fea2646970667358221220634dff11dbb9faa6c592143e52e29c05da349f32429da487ffd7d22ed6b31a6c64736f6c634300080c0033

Deployed Bytecode Sourcemap

23403:10499:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8259:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10426:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24385:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23479:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9379:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28957:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27613:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11077:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28267:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23582:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9221:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23537:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23916:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28514:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29156:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24138:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23995:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9550:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1494:103;;;;;;;;;;;;;:::i;:::-;;27896:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26662:112;;;;;;;;;;;;;:::i;:::-;;843:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23768:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28159:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8478:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24068:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24173:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9890:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23642:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23956:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28767:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27349:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23801:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26844:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24034:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10128:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23843:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24099:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1752:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24205:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23883:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26482:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8259:100;8313:13;8346:5;8339:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8259:100;:::o;10426:169::-;10509:4;10526:39;10535:12;:10;:12::i;:::-;10549:7;10558:6;10526:8;:39::i;:::-;10583:4;10576:11;;10426:169;;;;:::o;24385:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;23479:51::-;;;:::o;9379:108::-;9440:7;9467:12;;9460:19;;9379:108;:::o;28957:189::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29093:9:::1;;;;;;;;;;;29062:41;;29079:12;29062:41;;;;;;;;;;;;29126:12;29114:9;;:24;;;;;;;;;;;;;;;;;;28957:189:::0;:::o;27613:275::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27750:4:::1;27742;27737:1;27721:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27720:26;;;;:::i;:::-;27719:35;;;;:::i;:::-;27709:6;:45;;27687:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;27873:6;27863;:17;;;;:::i;:::-;27840:20;:40;;;;27613:275:::0;:::o;11077:492::-;11217:4;11234:36;11244:6;11252:9;11263:6;11234:9;:36::i;:::-;11283:24;11310:11;:19;11322:6;11310:19;;;;;;;;;;;;;;;:33;11330:12;:10;:12::i;:::-;11310:33;;;;;;;;;;;;;;;;11283:60;;11382:6;11362:16;:26;;11354:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11469:57;11478:6;11486:12;:10;:12::i;:::-;11519:6;11500:16;:25;11469:8;:57::i;:::-;11557:4;11550:11;;;11077:492;;;;;:::o;28267:239::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28396:7:::1;28384:9;:19;;;;28432:13;28414:15;:31;;;;28483:15;;28471:9;;:27;;;;:::i;:::-;28456:12;:42;;;;28267:239:::0;;:::o;23582:53::-;23628:6;23582:53;:::o;9221:93::-;9279:5;9304:2;9297:9;;9221:93;:::o;23537:38::-;;;:::o;23916:33::-;;;;;;;;;;;;;:::o;28514:245::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28645:7:::1;28632:10;:20;;;;28682:13;28663:16;:32;;;;28735:16;;28722:10;;:29;;;;:::i;:::-;28706:13;:45;;;;28514:245:::0;;:::o;29156:126::-;29222:4;29246:19;:28;29266:7;29246:28;;;;;;;;;;;;;;;;;;;;;;;;;29239:35;;29156:126;;;:::o;24138:28::-;;;;:::o;23995:30::-;;;;;;;;;;;;;:::o;9550:127::-;9624:7;9651:9;:18;9661:7;9651:18;;;;;;;;;;;;;;;;9644:25;;9550:127;;;:::o;1494:103::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1559:30:::1;1586:1;1559:18;:30::i;:::-;1494:103::o:0;27896:167::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28051:4:::1;28009:31;:39;28041:6;28009:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27896:167:::0;;:::o;26662:112::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26733:4:::1;26717:13;;:20;;;;;;;;;;;;;;;;;;26762:4;26748:11;;:18;;;;;;;;;;;;;;;;;;26662:112::o:0;843:87::-;889:7;916:6;;;;;;;;;;;909:13;;843:87;:::o;23768:24::-;;;;;;;;;;;;;:::o;28159:100::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28244:7:::1;28230:11;;:21;;;;;;;;;;;;;;;;;;28159:100:::0;:::o;8478:104::-;8534:13;8567:7;8560:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8478:104;:::o;24068:24::-;;;;:::o;24173:25::-;;;;:::o;9890:175::-;9976:4;9993:42;10003:12;:10;:12::i;:::-;10017:9;10028:6;9993:9;:42::i;:::-;10053:4;10046:11;;9890:175;;;;:::o;23642:64::-;;;;;;;;;;;;;:::o;23956:32::-;;;;;;;;;;;;;:::o;28767:182::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28883:8:::1;28852:19;:28;28872:7;28852:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;28923:7;28907:34;;;28932:8;28907:34;;;;;;:::i;:::-;;;;;;;;28767:182:::0;;:::o;27349:256::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27489:4:::1;27481;27476:1;27460:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27459:26;;;;:::i;:::-;27458:35;;;;:::i;:::-;27448:6;:45;;27426:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;27590:6;27580;:17;;;;:::i;:::-;27568:9;:29;;;;27349:256:::0;:::o;23801:35::-;;;;:::o;26844:497::-;26952:4;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27031:6:::1;27026:1;27010:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27009:28;;;;:::i;:::-;26996:9;:41;;26974:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;27186:4;27181:1;27165:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27164:26;;;;:::i;:::-;27151:9;:39;;27129:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;27302:9;27281:18;:30;;;;27329:4;27322:11;;26844:497:::0;;;:::o;24034:27::-;;;;:::o;10128:151::-;10217:7;10244:11;:18;10256:5;10244:18;;;;;;;;;;;;;;;:27;10263:7;10244:27;;;;;;;;;;;;;;;;10237:34;;10128:151;;;;:::o;23843:33::-;;;;:::o;24099:30::-;;;;:::o;1752:201::-;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1861:1:::1;1841:22;;:8;:22;;;;1833:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1917:28;1936:8;1917:18;:28::i;:::-;1752:201:::0;:::o;24205:31::-;;;;:::o;23883:24::-;;;;:::o;26482:122::-;26535:4;1074:12;:10;:12::i;:::-;1063:23;;:7;:5;:7::i;:::-;:23;;;1055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26569:5:::1;26552:14;;:22;;;;;;;;;;;;;;;;;;26592:4;26585:11;;26482:122:::0;:::o;217:98::-;270:7;297:10;290:17;;217:98;:::o;13918:380::-;14071:1;14054:19;;:5;:19;;;;14046:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14152:1;14133:21;;:7;:21;;;;14125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14236:6;14206:11;:18;14218:5;14206:18;;;;;;;;;;;;;;;:27;14225:7;14206:27;;;;;;;;;;;;;;;:36;;;;14274:7;14258:32;;14267:5;14258:32;;;14283:6;14258:32;;;;;;:::i;:::-;;;;;;;;13918:380;;;:::o;29290:3679::-;29438:1;29422:18;;:4;:18;;;;29414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29515:1;29501:16;;:2;:16;;;;29493:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29584:1;29574:6;:11;29570:93;;;29602:28;29618:4;29624:2;29628:1;29602:15;:28::i;:::-;29645:7;;29570:93;29679:14;;;;;;;;;;;29675:1430;;;29740:7;:5;:7::i;:::-;29732:15;;:4;:15;;;;:49;;;;;29774:7;:5;:7::i;:::-;29768:13;;:2;:13;;;;29732:49;:86;;;;;29816:1;29802:16;;:2;:16;;;;29732:86;:128;;;;;29853:6;29839:21;;:2;:21;;;;29732:128;:158;;;;;29882:8;;;;;;;;;;;29881:9;29732:158;29710:1384;;;29930:13;;;;;;;;;;;29925:223;;30002:19;:25;30022:4;30002:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30031:19;:23;30051:2;30031:23;;;;;;;;;;;;;;;;;;;;;;;;;30002:52;29968:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;29925:223;30362:13;30354:21;;:4;:21;;;:82;;;;;30401:31;:35;30433:2;30401:35;;;;;;;;;;;;;;;;;;;;;;;;;30400:36;30354:82;30328:751;;;30523:20;;30513:6;:30;;30479:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;30731:9;;30714:13;30724:2;30714:9;:13::i;:::-;30705:6;:22;;;;:::i;:::-;:35;;30671:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30328:751;;;30859:31;:35;30891:2;30859:35;;;;;;;;;;;;;;;;;;;;;;;;;30854:225;;30979:9;;30962:13;30972:2;30962:9;:13::i;:::-;30953:6;:22;;;;:::i;:::-;:35;;30919:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30854:225;30328:751;29710:1384;29675:1430;31117:28;31148:24;31166:4;31148:9;:24::i;:::-;31117:55;;31185:12;31224:18;;31200:20;:42;;31185:57;;31273:7;:35;;;;;31297:11;;;;;;;;;;;31273:35;:61;;;;;31326:8;;;;;;;;;;;31325:9;31273:61;:97;;;;;31357:13;31351:19;;:2;:19;;;31273:97;:140;;;;;31388:19;:25;31408:4;31388:25;;;;;;;;;;;;;;;;;;;;;;;;;31387:26;31273:140;:181;;;;;31431:19;:23;31451:2;31431:23;;;;;;;;;;;;;;;;;;;;;;;;;31430:24;31273:181;31255:313;;;31492:4;31481:8;;:15;;;;;;;;;;;;;;;;;;31513:10;:8;:10::i;:::-;31551:5;31540:8;;:16;;;;;;;;;;;;;;;;;;31255:313;31580:12;31596:8;;;;;;;;;;;31595:9;31580:24;;31706:19;:25;31726:4;31706:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31735:19;:23;31755:2;31735:23;;;;;;;;;;;;;;;;;;;;;;;;;31706:52;31702:100;;;31785:5;31775:15;;31702:100;31814:12;31841:26;31882:20;31995:7;31991:925;;;32053:13;32047:19;;:2;:19;;;:40;;;;;32086:1;32070:13;;:17;32047:40;32043:583;;;32115:34;32145:3;32115:25;32126:13;;32115:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;32108:41;;32217:13;;32197:16;;32190:4;:23;;;;:::i;:::-;32189:41;;;;:::i;:::-;32168:62;;32286:13;;32272:10;;32265:4;:17;;;;:::i;:::-;32264:35;;;;:::i;:::-;32249:50;;32043:583;;;32369:13;32361:21;;:4;:21;;;:41;;;;;32401:1;32386:12;;:16;32361:41;32357:269;;;32430:33;32459:3;32430:24;32441:12;;32430:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;32423:40;;32530:12;;32511:15;;32504:4;:22;;;;:::i;:::-;32503:39;;;;:::i;:::-;32482:60;;32598:12;;32585:9;;32578:4;:16;;;;:::i;:::-;32577:33;;;;:::i;:::-;32562:48;;32357:269;32043:583;32652:1;32646:4;:7;32642:90;;;32674:42;32690:4;32704;32711;32674:15;:42::i;:::-;32642:90;32771:1;32750:18;:22;32746:128;;;32793:65;32817:4;32824:13;32839:18;32793:15;:65::i;:::-;32746:128;32900:4;32890:14;;;;;:::i;:::-;;;31991:925;32928:33;32944:4;32950:2;32954:6;32928:15;:33::i;:::-;29403:3566;;;;;;29290:3679;;;;:::o;2113:191::-;2187:16;2206:6;;;;;;;;;;;2187:25;;2232:8;2223:6;;:17;;;;;;;;;;;;;;;;;;2287:8;2256:40;;2277:8;2256:40;;;;;;;;;;;;2176:128;2113:191;:::o;12059:733::-;12217:1;12199:20;;:6;:20;;;;12191:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12301:1;12280:23;;:9;:23;;;;12272:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12356:47;12377:6;12385:9;12396:6;12356:20;:47::i;:::-;12416:21;12440:9;:17;12450:6;12440:17;;;;;;;;;;;;;;;;12416:41;;12493:6;12476:13;:23;;12468:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12614:6;12598:13;:22;12578:9;:17;12588:6;12578:17;;;;;;;;;;;;;;;:42;;;;12666:6;12642:9;:20;12652:9;12642:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12707:9;12690:35;;12699:6;12690:35;;;12718:6;12690:35;;;;;;:::i;:::-;;;;;;;;12738:46;12758:6;12766:9;12777:6;12738:19;:46::i;:::-;12180:612;12059:733;;;:::o;33557:340::-;33596:23;33622:24;33640:4;33622:9;:24::i;:::-;33596:50;;33680:1;33661:15;:20;33657:59;;;33698:7;;;33657:59;33771:2;33750:18;;:23;;;;:::i;:::-;33732:15;:41;33728:115;;;33829:2;33808:18;;:23;;;;:::i;:::-;33790:41;;33728:115;33855:34;33873:15;33855:17;:34::i;:::-;33585:312;33557:340;:::o;19371:98::-;19429:7;19460:1;19456;:5;;;;:::i;:::-;19449:12;;19371:98;;;;:::o;19770:::-;19828:7;19859:1;19855;:5;;;;:::i;:::-;19848:12;;19770:98;;;;:::o;14898:125::-;;;;:::o;15627:124::-;;;;:::o;32977:572::-;33104:21;33142:1;33128:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33104:40;;33173:4;33155;33160:1;33155:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33199:4;;;;;;;;;;;33189;33194:1;33189:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;33216:62;33233:4;33248:15;33266:11;33216:8;:62::i;:::-;33317:15;:69;;;33401:11;33427:1;33472:4;33491:9;;;;;;;;;;;33515:15;33317:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33033:516;32977:572;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:152::-;4251:9;4284:37;4315:5;4284:37;:::i;:::-;4271:50;;4175:152;;;:::o;4333:183::-;4446:63;4503:5;4446:63;:::i;:::-;4441:3;4434:76;4333:183;;:::o;4522:274::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:97;4786:1;4775:9;4771:17;4762:6;4692:97;:::i;:::-;4522:274;;;;:::o;4802:118::-;4889:24;4907:5;4889:24;:::i;:::-;4884:3;4877:37;4802:118;;:::o;4926:222::-;5019:4;5057:2;5046:9;5042:18;5034:26;;5070:71;5138:1;5127:9;5123:17;5114:6;5070:71;:::i;:::-;4926:222;;;;:::o;5154:329::-;5213:6;5262:2;5250:9;5241:7;5237:23;5233:32;5230:119;;;5268:79;;:::i;:::-;5230:119;5388:1;5413:53;5458:7;5449:6;5438:9;5434:22;5413:53;:::i;:::-;5403:63;;5359:117;5154:329;;;;:::o;5489:619::-;5566:6;5574;5582;5631:2;5619:9;5610:7;5606:23;5602:32;5599:119;;;5637:79;;:::i;:::-;5599:119;5757:1;5782:53;5827:7;5818:6;5807:9;5803:22;5782:53;:::i;:::-;5772:63;;5728:117;5884:2;5910:53;5955:7;5946:6;5935:9;5931:22;5910:53;:::i;:::-;5900:63;;5855:118;6012:2;6038:53;6083:7;6074:6;6063:9;6059:22;6038:53;:::i;:::-;6028:63;;5983:118;5489:619;;;;;:::o;6114:474::-;6182:6;6190;6239:2;6227:9;6218:7;6214:23;6210:32;6207:119;;;6245:79;;:::i;:::-;6207:119;6365:1;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6336:117;6492:2;6518:53;6563:7;6554:6;6543:9;6539:22;6518:53;:::i;:::-;6508:63;;6463:118;6114:474;;;;;:::o;6594:118::-;6681:24;6699:5;6681:24;:::i;:::-;6676:3;6669:37;6594:118;;:::o;6718:222::-;6811:4;6849:2;6838:9;6834:18;6826:26;;6862:71;6930:1;6919:9;6915:17;6906:6;6862:71;:::i;:::-;6718:222;;;;:::o;6946:86::-;6981:7;7021:4;7014:5;7010:16;6999:27;;6946:86;;;:::o;7038:112::-;7121:22;7137:5;7121:22;:::i;:::-;7116:3;7109:35;7038:112;;:::o;7156:214::-;7245:4;7283:2;7272:9;7268:18;7260:26;;7296:67;7360:1;7349:9;7345:17;7336:6;7296:67;:::i;:::-;7156:214;;;;:::o;7376:116::-;7446:21;7461:5;7446:21;:::i;:::-;7439:5;7436:32;7426:60;;7482:1;7479;7472:12;7426:60;7376:116;:::o;7498:133::-;7541:5;7579:6;7566:20;7557:29;;7595:30;7619:5;7595:30;:::i;:::-;7498:133;;;;:::o;7637:468::-;7702:6;7710;7759:2;7747:9;7738:7;7734:23;7730:32;7727:119;;;7765:79;;:::i;:::-;7727:119;7885:1;7910:53;7955:7;7946:6;7935:9;7931:22;7910:53;:::i;:::-;7900:63;;7856:117;8012:2;8038:50;8080:7;8071:6;8060:9;8056:22;8038:50;:::i;:::-;8028:60;;7983:115;7637:468;;;;;:::o;8111:323::-;8167:6;8216:2;8204:9;8195:7;8191:23;8187:32;8184:119;;;8222:79;;:::i;:::-;8184:119;8342:1;8367:50;8409:7;8400:6;8389:9;8385:22;8367:50;:::i;:::-;8357:60;;8313:114;8111:323;;;;:::o;8440:474::-;8508:6;8516;8565:2;8553:9;8544:7;8540:23;8536:32;8533:119;;;8571:79;;:::i;:::-;8533:119;8691:1;8716:53;8761:7;8752:6;8741:9;8737:22;8716:53;:::i;:::-;8706:63;;8662:117;8818:2;8844:53;8889:7;8880:6;8869:9;8865:22;8844:53;:::i;:::-;8834:63;;8789:118;8440:474;;;;;:::o;8920:180::-;8968:77;8965:1;8958:88;9065:4;9062:1;9055:15;9089:4;9086:1;9079:15;9106:320;9150:6;9187:1;9181:4;9177:12;9167:22;;9234:1;9228:4;9224:12;9255:18;9245:81;;9311:4;9303:6;9299:17;9289:27;;9245:81;9373:2;9365:6;9362:14;9342:18;9339:38;9336:84;;;9392:18;;:::i;:::-;9336:84;9157:269;9106:320;;;:::o;9432:182::-;9572:34;9568:1;9560:6;9556:14;9549:58;9432:182;:::o;9620:366::-;9762:3;9783:67;9847:2;9842:3;9783:67;:::i;:::-;9776:74;;9859:93;9948:3;9859:93;:::i;:::-;9977:2;9972:3;9968:12;9961:19;;9620:366;;;:::o;9992:419::-;10158:4;10196:2;10185:9;10181:18;10173:26;;10245:9;10239:4;10235:20;10231:1;10220:9;10216:17;10209:47;10273:131;10399:4;10273:131;:::i;:::-;10265:139;;9992:419;;;:::o;10417:180::-;10465:77;10462:1;10455:88;10562:4;10559:1;10552:15;10586:4;10583:1;10576:15;10603:348;10643:7;10666:20;10684:1;10666:20;:::i;:::-;10661:25;;10700:20;10718:1;10700:20;:::i;:::-;10695:25;;10888:1;10820:66;10816:74;10813:1;10810:81;10805:1;10798:9;10791:17;10787:105;10784:131;;;10895:18;;:::i;:::-;10784:131;10943:1;10940;10936:9;10925:20;;10603:348;;;;:::o;10957:180::-;11005:77;11002:1;10995:88;11102:4;11099:1;11092:15;11126:4;11123:1;11116:15;11143:185;11183:1;11200:20;11218:1;11200:20;:::i;:::-;11195:25;;11234:20;11252:1;11234:20;:::i;:::-;11229:25;;11273:1;11263:35;;11278:18;;:::i;:::-;11263:35;11320:1;11317;11313:9;11308:14;;11143:185;;;;:::o;11334:234::-;11474:34;11470:1;11462:6;11458:14;11451:58;11543:17;11538:2;11530:6;11526:15;11519:42;11334:234;:::o;11574:366::-;11716:3;11737:67;11801:2;11796:3;11737:67;:::i;:::-;11730:74;;11813:93;11902:3;11813:93;:::i;:::-;11931:2;11926:3;11922:12;11915:19;;11574:366;;;:::o;11946:419::-;12112:4;12150:2;12139:9;12135:18;12127:26;;12199:9;12193:4;12189:20;12185:1;12174:9;12170:17;12163:47;12227:131;12353:4;12227:131;:::i;:::-;12219:139;;11946:419;;;:::o;12371:227::-;12511:34;12507:1;12499:6;12495:14;12488:58;12580:10;12575:2;12567:6;12563:15;12556:35;12371:227;:::o;12604:366::-;12746:3;12767:67;12831:2;12826:3;12767:67;:::i;:::-;12760:74;;12843:93;12932:3;12843:93;:::i;:::-;12961:2;12956:3;12952:12;12945:19;;12604:366;;;:::o;12976:419::-;13142:4;13180:2;13169:9;13165:18;13157:26;;13229:9;13223:4;13219:20;13215:1;13204:9;13200:17;13193:47;13257:131;13383:4;13257:131;:::i;:::-;13249:139;;12976:419;;;:::o;13401:305::-;13441:3;13460:20;13478:1;13460:20;:::i;:::-;13455:25;;13494:20;13512:1;13494:20;:::i;:::-;13489:25;;13648:1;13580:66;13576:74;13573:1;13570:81;13567:107;;;13654:18;;:::i;:::-;13567:107;13698:1;13695;13691:9;13684:16;;13401:305;;;;:::o;13712:223::-;13852:34;13848:1;13840:6;13836:14;13829:58;13921:6;13916:2;13908:6;13904:15;13897:31;13712:223;:::o;13941:366::-;14083:3;14104:67;14168:2;14163:3;14104:67;:::i;:::-;14097:74;;14180:93;14269:3;14180:93;:::i;:::-;14298:2;14293:3;14289:12;14282:19;;13941:366;;;:::o;14313:419::-;14479:4;14517:2;14506:9;14502:18;14494:26;;14566:9;14560:4;14556:20;14552:1;14541:9;14537:17;14530:47;14594:131;14720:4;14594:131;:::i;:::-;14586:139;;14313:419;;;:::o;14738:240::-;14878:34;14874:1;14866:6;14862:14;14855:58;14947:23;14942:2;14934:6;14930:15;14923:48;14738:240;:::o;14984:366::-;15126:3;15147:67;15211:2;15206:3;15147:67;:::i;:::-;15140:74;;15223:93;15312:3;15223:93;:::i;:::-;15341:2;15336:3;15332:12;15325:19;;14984:366;;;:::o;15356:419::-;15522:4;15560:2;15549:9;15545:18;15537:26;;15609:9;15603:4;15599:20;15595:1;15584:9;15580:17;15573:47;15637:131;15763:4;15637:131;:::i;:::-;15629:139;;15356:419;;;:::o;15781:239::-;15921:34;15917:1;15909:6;15905:14;15898:58;15990:22;15985:2;15977:6;15973:15;15966:47;15781:239;:::o;16026:366::-;16168:3;16189:67;16253:2;16248:3;16189:67;:::i;:::-;16182:74;;16265:93;16354:3;16265:93;:::i;:::-;16383:2;16378:3;16374:12;16367:19;;16026:366;;;:::o;16398:419::-;16564:4;16602:2;16591:9;16587:18;16579:26;;16651:9;16645:4;16641:20;16637:1;16626:9;16622:17;16615:47;16679:131;16805:4;16679:131;:::i;:::-;16671:139;;16398:419;;;:::o;16823:225::-;16963:34;16959:1;16951:6;16947:14;16940:58;17032:8;17027:2;17019:6;17015:15;17008:33;16823:225;:::o;17054:366::-;17196:3;17217:67;17281:2;17276:3;17217:67;:::i;:::-;17210:74;;17293:93;17382:3;17293:93;:::i;:::-;17411:2;17406:3;17402:12;17395:19;;17054:366;;;:::o;17426:419::-;17592:4;17630:2;17619:9;17615:18;17607:26;;17679:9;17673:4;17669:20;17665:1;17654:9;17650:17;17643:47;17707:131;17833:4;17707:131;:::i;:::-;17699:139;;17426:419;;;:::o;17851:223::-;17991:34;17987:1;17979:6;17975:14;17968:58;18060:6;18055:2;18047:6;18043:15;18036:31;17851:223;:::o;18080:366::-;18222:3;18243:67;18307:2;18302:3;18243:67;:::i;:::-;18236:74;;18319:93;18408:3;18319:93;:::i;:::-;18437:2;18432:3;18428:12;18421:19;;18080:366;;;:::o;18452:419::-;18618:4;18656:2;18645:9;18641:18;18633:26;;18705:9;18699:4;18695:20;18691:1;18680:9;18676:17;18669:47;18733:131;18859:4;18733:131;:::i;:::-;18725:139;;18452:419;;;:::o;18877:221::-;19017:34;19013:1;19005:6;19001:14;18994:58;19086:4;19081:2;19073:6;19069:15;19062:29;18877:221;:::o;19104:366::-;19246:3;19267:67;19331:2;19326:3;19267:67;:::i;:::-;19260:74;;19343:93;19432:3;19343:93;:::i;:::-;19461:2;19456:3;19452:12;19445:19;;19104:366;;;:::o;19476:419::-;19642:4;19680:2;19669:9;19665:18;19657:26;;19729:9;19723:4;19719:20;19715:1;19704:9;19700:17;19693:47;19757:131;19883:4;19757:131;:::i;:::-;19749:139;;19476:419;;;:::o;19901:224::-;20041:34;20037:1;20029:6;20025:14;20018:58;20110:7;20105:2;20097:6;20093:15;20086:32;19901:224;:::o;20131:366::-;20273:3;20294:67;20358:2;20353:3;20294:67;:::i;:::-;20287:74;;20370:93;20459:3;20370:93;:::i;:::-;20488:2;20483:3;20479:12;20472:19;;20131:366;;;:::o;20503:419::-;20669:4;20707:2;20696:9;20692:18;20684:26;;20756:9;20750:4;20746:20;20742:1;20731:9;20727:17;20720:47;20784:131;20910:4;20784:131;:::i;:::-;20776:139;;20503:419;;;:::o;20928:222::-;21068:34;21064:1;21056:6;21052:14;21045:58;21137:5;21132:2;21124:6;21120:15;21113:30;20928:222;:::o;21156:366::-;21298:3;21319:67;21383:2;21378:3;21319:67;:::i;:::-;21312:74;;21395:93;21484:3;21395:93;:::i;:::-;21513:2;21508:3;21504:12;21497:19;;21156:366;;;:::o;21528:419::-;21694:4;21732:2;21721:9;21717:18;21709:26;;21781:9;21775:4;21771:20;21767:1;21756:9;21752:17;21745:47;21809:131;21935:4;21809:131;:::i;:::-;21801:139;;21528:419;;;:::o;21953:172::-;22093:24;22089:1;22081:6;22077:14;22070:48;21953:172;:::o;22131:366::-;22273:3;22294:67;22358:2;22353:3;22294:67;:::i;:::-;22287:74;;22370:93;22459:3;22370:93;:::i;:::-;22488:2;22483:3;22479:12;22472:19;;22131:366;;;:::o;22503:419::-;22669:4;22707:2;22696:9;22692:18;22684:26;;22756:9;22750:4;22746:20;22742:1;22731:9;22727:17;22720:47;22784:131;22910:4;22784:131;:::i;:::-;22776:139;;22503:419;;;:::o;22928:240::-;23068:34;23064:1;23056:6;23052:14;23045:58;23137:23;23132:2;23124:6;23120:15;23113:48;22928:240;:::o;23174:366::-;23316:3;23337:67;23401:2;23396:3;23337:67;:::i;:::-;23330:74;;23413:93;23502:3;23413:93;:::i;:::-;23531:2;23526:3;23522:12;23515:19;;23174:366;;;:::o;23546:419::-;23712:4;23750:2;23739:9;23735:18;23727:26;;23799:9;23793:4;23789:20;23785:1;23774:9;23770:17;23763:47;23827:131;23953:4;23827:131;:::i;:::-;23819:139;;23546:419;;;:::o;23971:169::-;24111:21;24107:1;24099:6;24095:14;24088:45;23971:169;:::o;24146:366::-;24288:3;24309:67;24373:2;24368:3;24309:67;:::i;:::-;24302:74;;24385:93;24474:3;24385:93;:::i;:::-;24503:2;24498:3;24494:12;24487:19;;24146:366;;;:::o;24518:419::-;24684:4;24722:2;24711:9;24707:18;24699:26;;24771:9;24765:4;24761:20;24757:1;24746:9;24742:17;24735:47;24799:131;24925:4;24799:131;:::i;:::-;24791:139;;24518:419;;;:::o;24943:191::-;24983:4;25003:20;25021:1;25003:20;:::i;:::-;24998:25;;25037:20;25055:1;25037:20;:::i;:::-;25032:25;;25076:1;25073;25070:8;25067:34;;;25081:18;;:::i;:::-;25067:34;25126:1;25123;25119:9;25111:17;;24943:191;;;;:::o;25140:225::-;25280:34;25276:1;25268:6;25264:14;25257:58;25349:8;25344:2;25336:6;25332:15;25325:33;25140:225;:::o;25371:366::-;25513:3;25534:67;25598:2;25593:3;25534:67;:::i;:::-;25527:74;;25610:93;25699:3;25610:93;:::i;:::-;25728:2;25723:3;25719:12;25712:19;;25371:366;;;:::o;25743:419::-;25909:4;25947:2;25936:9;25932:18;25924:26;;25996:9;25990:4;25986:20;25982:1;25971:9;25967:17;25960:47;26024:131;26150:4;26024:131;:::i;:::-;26016:139;;25743:419;;;:::o;26168:180::-;26216:77;26213:1;26206:88;26313:4;26310:1;26303:15;26337:4;26334:1;26327:15;26354:180;26402:77;26399:1;26392:88;26499:4;26496:1;26489:15;26523:4;26520:1;26513:15;26540:85;26585:7;26614:5;26603:16;;26540:85;;;:::o;26631:158::-;26689:9;26722:61;26740:42;26749:32;26775:5;26749:32;:::i;:::-;26740:42;:::i;:::-;26722:61;:::i;:::-;26709:74;;26631:158;;;:::o;26795:147::-;26890:45;26929:5;26890:45;:::i;:::-;26885:3;26878:58;26795:147;;:::o;26948:114::-;27015:6;27049:5;27043:12;27033:22;;26948:114;;;:::o;27068:184::-;27167:11;27201:6;27196:3;27189:19;27241:4;27236:3;27232:14;27217:29;;27068:184;;;;:::o;27258:132::-;27325:4;27348:3;27340:11;;27378:4;27373:3;27369:14;27361:22;;27258:132;;;:::o;27396:108::-;27473:24;27491:5;27473:24;:::i;:::-;27468:3;27461:37;27396:108;;:::o;27510:179::-;27579:10;27600:46;27642:3;27634:6;27600:46;:::i;:::-;27678:4;27673:3;27669:14;27655:28;;27510:179;;;;:::o;27695:113::-;27765:4;27797;27792:3;27788:14;27780:22;;27695:113;;;:::o;27844:732::-;27963:3;27992:54;28040:5;27992:54;:::i;:::-;28062:86;28141:6;28136:3;28062:86;:::i;:::-;28055:93;;28172:56;28222:5;28172:56;:::i;:::-;28251:7;28282:1;28267:284;28292:6;28289:1;28286:13;28267:284;;;28368:6;28362:13;28395:63;28454:3;28439:13;28395:63;:::i;:::-;28388:70;;28481:60;28534:6;28481:60;:::i;:::-;28471:70;;28327:224;28314:1;28311;28307:9;28302:14;;28267:284;;;28271:14;28567:3;28560:10;;27968:608;;;27844:732;;;;:::o;28582:831::-;28845:4;28883:3;28872:9;28868:19;28860:27;;28897:71;28965:1;28954:9;28950:17;28941:6;28897:71;:::i;:::-;28978:80;29054:2;29043:9;29039:18;29030:6;28978:80;:::i;:::-;29105:9;29099:4;29095:20;29090:2;29079:9;29075:18;29068:48;29133:108;29236:4;29227:6;29133:108;:::i;:::-;29125:116;;29251:72;29319:2;29308:9;29304:18;29295:6;29251:72;:::i;:::-;29333:73;29401:3;29390:9;29386:19;29377:6;29333:73;:::i;:::-;28582:831;;;;;;;;:::o

Swarm Source

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