ETH Price: $2,674.55 (-2.58%)

Token

THE DIE (TD)
 

Overview

Max Total Supply

100,000 TD

Holders

73

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.139418821347598775 TD

Value
$0.00
0x6001a7d80a2d0c2b5f7f5da3522d81967a1a5410
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:
THEDIE

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-20
*/

/**
 *Submitted for verification at Etherscan.io on 2022-10-20
*/

/**

The Die, combining the THE ecosystsem with the DIE ecosystem..
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
pragma experimental ABIEncoderV2;

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 THEDIE is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    bool private swapping;

    address public devWallet;

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

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

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

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

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

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


    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    constructor() ERC20("THE DIE", "TD") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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


        uint256 _buyDevFee = 5;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellDevFee = 5;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 100_000 * 1e18;

        maxTransactionAmount =  totalSupply * 10 / 1000; // 1% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

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

        devWallet = address(0x24d06255c1C79B3A738278948F91b85203fb5650);

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

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

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

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external returns (bool) {
        require(msg.sender == owner() || msg.sender == devWallet, "Not authorised");
        limitsInEffect = false;
        return true;
    }

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

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

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

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

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

    function updateBuyFees(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external {
        require(msg.sender == owner() || msg.sender == devWallet, "Not authorised");
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        require(buyTotalFees <= 7, "Must keep fees at 7% or less");
    }

    function updateSellFees(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external {
        require(msg.sender == owner() || msg.sender == devWallet, "Not authorised");
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;
        require(sellTotalFees <= 7, "Must keep fees at 7% or less");
    }

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

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


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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

        swapTokensForETH(contractBalance);
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 100, "Wallets list length must be <= 100");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**decimals());
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }

}

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":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff021916908315150217905550348015620000b757600080fd5b506040518060400160405280600781526020017f54484520444945000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f5444000000000000000000000000000000000000000000000000000000000000815250816003908162000135919062000c86565b50806004908162000147919062000c86565b5050506200016a6200015e6200056e60201b60201c565b6200057660201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001968160016200063c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000dd7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200029a92919062000e1a565b6020604051808303816000875af1158015620002ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e0919062000dd7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032860a05160016200063c60201b60201c565b6000600590506000806005905060008069152d02c7e14af680000090506103e8600a8262000357919062000e76565b62000363919062000ef0565b6008819055506103e86014826200037b919062000e76565b62000387919062000ef0565b600a819055506127106005826200039f919062000e76565b620003ab919062000ef0565b60098190555084600d8190555083600e81905550600e54600d54620003d1919062000f28565b600c819055508260108190555081601181905550601154601054620003f7919062000f28565b600f819055507324d06255c1c79b3a738278948f91b85203fb5650600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000474620004666200072660201b60201c565b60016200075060201b60201c565b620004a9600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200075060201b60201c565b620004bc3060016200075060201b60201c565b620004d161dead60016200075060201b60201c565b620004f3620004e56200072660201b60201c565b60016200063c60201b60201c565b62000528600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200063c60201b60201c565b6200053b3060016200063c60201b60201c565b6200055061dead60016200063c60201b60201c565b6200056233826200088a60201b60201c565b505050505050620010c0565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200064c6200056e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006726200072660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006c29062000fc4565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007606200056e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007866200072660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d69062000fc4565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200087e919062001003565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f39062001070565b60405180910390fd5b620009106000838362000a0260201b60201c565b806002600082825462000924919062000f28565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200097b919062000f28565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009e29190620010a3565b60405180910390a3620009fe6000838362000a0760201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a8e57607f821691505b60208210810362000aa45762000aa362000a46565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000acf565b62000b1a868362000acf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b6762000b6162000b5b8462000b32565b62000b3c565b62000b32565b9050919050565b6000819050919050565b62000b838362000b46565b62000b9b62000b928262000b6e565b84845462000adc565b825550505050565b600090565b62000bb262000ba3565b62000bbf81848462000b78565b505050565b5b8181101562000be75762000bdb60008262000ba8565b60018101905062000bc5565b5050565b601f82111562000c365762000c008162000aaa565b62000c0b8462000abf565b8101602085101562000c1b578190505b62000c3362000c2a8562000abf565b83018262000bc4565b50505b505050565b600082821c905092915050565b600062000c5b6000198460080262000c3b565b1980831691505092915050565b600062000c76838362000c48565b9150826002028217905092915050565b62000c918262000a0c565b67ffffffffffffffff81111562000cad5762000cac62000a17565b5b62000cb9825462000a75565b62000cc682828562000beb565b600060209050601f83116001811462000cfe576000841562000ce9578287015190505b62000cf5858262000c68565b86555062000d65565b601f19841662000d0e8662000aaa565b60005b8281101562000d385784890151825560018201915060208501945060208101905062000d11565b8683101562000d58578489015162000d54601f89168262000c48565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d9f8262000d72565b9050919050565b62000db18162000d92565b811462000dbd57600080fd5b50565b60008151905062000dd18162000da6565b92915050565b60006020828403121562000df05762000def62000d6d565b5b600062000e008482850162000dc0565b91505092915050565b62000e148162000d92565b82525050565b600060408201905062000e31600083018562000e09565b62000e40602083018462000e09565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e838262000b32565b915062000e908362000b32565b925082820262000ea08162000b32565b9150828204841483151762000eba5762000eb962000e47565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000efd8262000b32565b915062000f0a8362000b32565b92508262000f1d5762000f1c62000ec1565b5b828204905092915050565b600062000f358262000b32565b915062000f428362000b32565b925082820190508082111562000f5d5762000f5c62000e47565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fac60208362000f63565b915062000fb98262000f74565b602082019050919050565b6000602082019050818103600083015262000fdf8162000f9d565b9050919050565b60008115159050919050565b62000ffd8162000fe6565b82525050565b60006020820190506200101a600083018462000ff2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001058601f8362000f63565b9150620010658262001020565b602082019050919050565b600060208201905081810360008301526200108b8162001049565b9050919050565b6200109d8162000b32565b82525050565b6000602082019050620010ba600083018462001092565b92915050565b60805160a0516144616200111760003960008181611118015281816124a6015281816126ef015281816128fa015281816129c50152612aaf015260008181610c0601528181612d5b0152612d8201526144616000f3fe6080604052600436106102605760003560e01c80637571336a11610144578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e146108e7578063e2f4560514610924578063f11a24d31461094f578063f2fde38b1461097a578063f6374342146109a3578063f8b45b05146109ce57610267565b8063c024666814610802578063c18bc1951461082b578063c8c8ebe414610854578063d257b34f1461087f578063d85ba063146108bc57610267565b806395d89b411161010857806395d89b41146106ee5780639c3b4fdc14610719578063a0d82dc514610744578063a9059cbb1461076f578063ad5c4648146107ac578063bbc0c742146107d757610267565b80637571336a1461062f5780638a8c523c146106585780638da5cb5b1461066f5780638ea5220f1461069a578063924de9b7146106c557610267565b806327c8f835116101dd57806366ca9b83116101a157806366ca9b83146105315780636a486a8e1461055a5780636ddd17131461058557806370a08231146105b0578063715018a6146105ed578063751039fc1461060457610267565b806327c8f83514610448578063313ce5671461047357806349bd5a5e1461049e5780634a62bb65146104c95780634fbee193146104f457610267565b806318160ddd1161022457806318160ddd146103655780631816467f14610390578063203e727e146103b95780632307b441146103e257806323b872dd1461040b57610267565b806302dbd8f81461026c57806306fdde0314610295578063095ea7b3146102c057806310d5de53146102fd5780631694505e1461033a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190612e84565b6109f9565b005b3480156102a157600080fd5b506102aa610b34565b6040516102b79190612f54565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190612fd4565b610bc6565b6040516102f4919061302f565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f919061304a565b610be4565b604051610331919061302f565b60405180910390f35b34801561034657600080fd5b5061034f610c04565b60405161035c91906130d6565b60405180910390f35b34801561037157600080fd5b5061037a610c28565b6040516103879190613100565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b2919061304a565b610c32565b005b3480156103c557600080fd5b506103e060048036038101906103db919061311b565b610d6e565b005b3480156103ee57600080fd5b5061040960048036038101906104049190613353565b610e7d565b005b34801561041757600080fd5b50610432600480360381019061042d91906133cb565b61100f565b60405161043f919061302f565b60405180910390f35b34801561045457600080fd5b5061045d611107565b60405161046a919061342d565b60405180910390f35b34801561047f57600080fd5b5061048861110d565b6040516104959190613464565b60405180910390f35b3480156104aa57600080fd5b506104b3611116565b6040516104c0919061342d565b60405180910390f35b3480156104d557600080fd5b506104de61113a565b6040516104eb919061302f565b60405180910390f35b34801561050057600080fd5b5061051b6004803603810190610516919061304a565b61114d565b604051610528919061302f565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190612e84565b6111a3565b005b34801561056657600080fd5b5061056f6112de565b60405161057c9190613100565b60405180910390f35b34801561059157600080fd5b5061059a6112e4565b6040516105a7919061302f565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d2919061304a565b6112f7565b6040516105e49190613100565b60405180910390f35b3480156105f957600080fd5b5061060261133f565b005b34801561061057600080fd5b506106196113c7565b604051610626919061302f565b60405180910390f35b34801561063b57600080fd5b50610656600480360381019061065191906134ab565b6114b8565b005b34801561066457600080fd5b5061066d61158f565b005b34801561067b57600080fd5b50610684611643565b604051610691919061342d565b60405180910390f35b3480156106a657600080fd5b506106af61166d565b6040516106bc919061342d565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e791906134eb565b611693565b005b3480156106fa57600080fd5b5061070361172c565b6040516107109190612f54565b60405180910390f35b34801561072557600080fd5b5061072e6117be565b60405161073b9190613100565b60405180910390f35b34801561075057600080fd5b506107596117c4565b6040516107669190613100565b60405180910390f35b34801561077b57600080fd5b5061079660048036038101906107919190612fd4565b6117ca565b6040516107a3919061302f565b60405180910390f35b3480156107b857600080fd5b506107c16117e8565b6040516107ce919061342d565b60405180910390f35b3480156107e357600080fd5b506107ec61180e565b6040516107f9919061302f565b60405180910390f35b34801561080e57600080fd5b50610829600480360381019061082491906134ab565b611821565b005b34801561083757600080fd5b50610852600480360381019061084d919061311b565b611946565b005b34801561086057600080fd5b50610869611a55565b6040516108769190613100565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a1919061311b565b611a5b565b6040516108b3919061302f565b60405180910390f35b3480156108c857600080fd5b506108d1611bb0565b6040516108de9190613100565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190613518565b611bb6565b60405161091b9190613100565b60405180910390f35b34801561093057600080fd5b50610939611c3d565b6040516109469190613100565b60405180910390f35b34801561095b57600080fd5b50610964611c43565b6040516109719190613100565b60405180910390f35b34801561098657600080fd5b506109a1600480360381019061099c919061304a565b611c49565b005b3480156109af57600080fd5b506109b8611d40565b6040516109c59190613100565b60405180910390f35b3480156109da57600080fd5b506109e3611d46565b6040516109f09190613100565b60405180910390f35b610a01611643565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a875750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd906135a4565b60405180910390fd5b8160108190555080601181905550601154601054610ae491906135f3565b600f819055506007600f541115610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2790613673565b60405180910390fd5b5050565b606060038054610b43906136c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6f906136c2565b8015610bbc5780601f10610b9157610100808354040283529160200191610bbc565b820191906000526020600020905b815481529060010190602001808311610b9f57829003601f168201915b5050505050905090565b6000610bda610bd3611d4c565b8484611d54565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610c3a611d4c565b73ffffffffffffffffffffffffffffffffffffffff16610c58611643565b73ffffffffffffffffffffffffffffffffffffffff1614610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca59061373f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d76611d4c565b73ffffffffffffffffffffffffffffffffffffffff16610d94611643565b73ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de19061373f565b60405180910390fd5b670de0b6b3a76400006103e86001610e00610c28565b610e0a919061375f565b610e1491906137d0565b610e1e91906137d0565b811015610e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5790613873565b60405180910390fd5b670de0b6b3a764000081610e74919061375f565b60088190555050565b610e85611d4c565b73ffffffffffffffffffffffffffffffffffffffff16610ea3611643565b73ffffffffffffffffffffffffffffffffffffffff1614610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef09061373f565b60405180910390fd5b8051825114610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f34906138df565b60405180910390fd5b606482511115610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613971565b60405180910390fd5b60005b825181101561100a576000838281518110610fa357610fa2613991565b5b602002602001015190506000610fb761110d565b600a610fc39190613af3565b848481518110610fd657610fd5613991565b5b6020026020010151610fe8919061375f565b9050610ff5338383611f1d565b5050808061100290613b3e565b915050610f85565b505050565b600061101c84848461219c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611067611d4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90613bf8565b60405180910390fd5b6110fb856110f3611d4c565b858403611d54565b60019150509392505050565b61dead81565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111ab611643565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112315750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611270576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611267906135a4565b60405180910390fd5b81600d8190555080600e81905550600e54600d5461128e91906135f3565b600c819055506007600c5411156112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190613673565b60405180910390fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611347611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611365611643565b73ffffffffffffffffffffffffffffffffffffffff16146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b29061373f565b60405180910390fd5b6113c56000612afb565b565b60006113d1611643565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114575750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d906135a4565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114c0611d4c565b73ffffffffffffffffffffffffffffffffffffffff166114de611643565b73ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b9061373f565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611597611d4c565b73ffffffffffffffffffffffffffffffffffffffff166115b5611643565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116029061373f565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61169b611d4c565b73ffffffffffffffffffffffffffffffffffffffff166116b9611643565b73ffffffffffffffffffffffffffffffffffffffff161461170f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117069061373f565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461173b906136c2565b80601f0160208091040260200160405190810160405280929190818152602001828054611767906136c2565b80156117b45780601f10611789576101008083540402835291602001916117b4565b820191906000526020600020905b81548152906001019060200180831161179757829003601f168201915b5050505050905090565b600d5481565b60105481565b60006117de6117d7611d4c565b848461219c565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b611829611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611847611643565b73ffffffffffffffffffffffffffffffffffffffff161461189d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118949061373f565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161193a919061302f565b60405180910390a25050565b61194e611d4c565b73ffffffffffffffffffffffffffffffffffffffff1661196c611643565b73ffffffffffffffffffffffffffffffffffffffff16146119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b99061373f565b60405180910390fd5b670de0b6b3a76400006103e860056119d8610c28565b6119e2919061375f565b6119ec91906137d0565b6119f691906137d0565b811015611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f90613c8a565b60405180910390fd5b670de0b6b3a764000081611a4c919061375f565b600a8190555050565b60085481565b6000611a65611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611a83611643565b73ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad09061373f565b60405180910390fd5b620186a06001611ae7610c28565b611af1919061375f565b611afb91906137d0565b821015611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490613d1c565b60405180910390fd5b6103e86005611b4a610c28565b611b54919061375f565b611b5e91906137d0565b821115611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613dae565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b611c51611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611c6f611643565b73ffffffffffffffffffffffffffffffffffffffff1614611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc9061373f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90613e40565b60405180910390fd5b611d3d81612afb565b50565b60115481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90613ed2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2990613f64565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f109190613100565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8390613ff6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff290614088565b60405180910390fd5b612006838383612bc1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561208c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120839061411a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461211f91906135f3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121839190613100565b60405180910390a3612196848484612bc6565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361220b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220290613ff6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190614088565b60405180910390fd5b600081036122935761228e83836000611f1d565b612af6565b600b60009054906101000a900460ff161561269d576122b0611643565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561231e57506122ee611643565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123575750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612391575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123aa5750600660149054906101000a900460ff16155b1561269c57600b60019054906101000a900460ff166124a457601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124645750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a90614186565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125495750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f057600854811115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614218565b60405180910390fd5b600a5461259f836112f7565b826125aa91906135f3565b11156125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e290614284565b60405180910390fd5b61269b565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661269a57600a5461264d836112f7565b8261265891906135f3565b1115612699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269090614284565b60405180910390fd5b5b5b5b5b60006126a8306112f7565b9050600060095482101590508080156126cd5750600b60029054906101000a900460ff165b80156126e65750600660149054906101000a900460ff16155b801561273d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156127935750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e95750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282d576001600660146101000a81548160ff021916908315150217905550612811612bcb565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e35750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128ed57600090505b60008060008315612ae4577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561295557506000600f54115b156129c3576129826064612974600f548a612c1b90919063ffffffff16565b612c3190919063ffffffff16565b9250600f5460115484612995919061375f565b61299f91906137d0565b9150600f54601054846129b2919061375f565b6129bc91906137d0565b9050612a8b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16148015612a2057506000600c54115b15612a8a57612a4d6064612a3f600c548a612c1b90919063ffffffff16565b612c3190919063ffffffff16565b9250600c54600e5484612a60919061375f565b612a6a91906137d0565b9150600c54600d5484612a7d919061375f565b612a8791906137d0565b90505b5b6000831115612aa057612a9f893085611f1d565b5b6000821115612ad557612ad4307f000000000000000000000000000000000000000000000000000000000000000084611f1d565b5b8287612ae191906142a4565b96505b612aef898989611f1d565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000612bd6306112f7565b905060008103612be65750612c19565b6014600954612bf5919061375f565b811115612c0e576014600954612c0b919061375f565b90505b612c1781612c47565b505b565b60008183612c29919061375f565b905092915050565b60008183612c3f91906137d0565b905092915050565b6000600267ffffffffffffffff811115612c6457612c6361314d565b5b604051908082528060200260200182016040528015612c925781602001602082028036833780820191505090505b5090503081600081518110612caa57612ca9613991565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612d1b57612d1a613991565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d80307f000000000000000000000000000000000000000000000000000000000000000084611d54565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612e049594939291906143d1565b600060405180830381600087803b158015612e1e57600080fd5b505af1158015612e32573d6000803e3d6000fd5b505050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612e6181612e4e565b8114612e6c57600080fd5b50565b600081359050612e7e81612e58565b92915050565b60008060408385031215612e9b57612e9a612e44565b5b6000612ea985828601612e6f565b9250506020612eba85828601612e6f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612efe578082015181840152602081019050612ee3565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f2682612ec4565b612f308185612ecf565b9350612f40818560208601612ee0565b612f4981612f0a565b840191505092915050565b60006020820190508181036000830152612f6e8184612f1b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fa182612f76565b9050919050565b612fb181612f96565b8114612fbc57600080fd5b50565b600081359050612fce81612fa8565b92915050565b60008060408385031215612feb57612fea612e44565b5b6000612ff985828601612fbf565b925050602061300a85828601612e6f565b9150509250929050565b60008115159050919050565b61302981613014565b82525050565b60006020820190506130446000830184613020565b92915050565b6000602082840312156130605761305f612e44565b5b600061306e84828501612fbf565b91505092915050565b6000819050919050565b600061309c61309761309284612f76565b613077565b612f76565b9050919050565b60006130ae82613081565b9050919050565b60006130c0826130a3565b9050919050565b6130d0816130b5565b82525050565b60006020820190506130eb60008301846130c7565b92915050565b6130fa81612e4e565b82525050565b600060208201905061311560008301846130f1565b92915050565b60006020828403121561313157613130612e44565b5b600061313f84828501612e6f565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61318582612f0a565b810181811067ffffffffffffffff821117156131a4576131a361314d565b5b80604052505050565b60006131b7612e3a565b90506131c3828261317c565b919050565b600067ffffffffffffffff8211156131e3576131e261314d565b5b602082029050602081019050919050565b600080fd5b600061320c613207846131c8565b6131ad565b9050808382526020820190506020840283018581111561322f5761322e6131f4565b5b835b8181101561325857806132448882612fbf565b845260208401935050602081019050613231565b5050509392505050565b600082601f83011261327757613276613148565b5b81356132878482602086016131f9565b91505092915050565b600067ffffffffffffffff8211156132ab576132aa61314d565b5b602082029050602081019050919050565b60006132cf6132ca84613290565b6131ad565b905080838252602082019050602084028301858111156132f2576132f16131f4565b5b835b8181101561331b57806133078882612e6f565b8452602084019350506020810190506132f4565b5050509392505050565b600082601f83011261333a57613339613148565b5b813561334a8482602086016132bc565b91505092915050565b6000806040838503121561336a57613369612e44565b5b600083013567ffffffffffffffff81111561338857613387612e49565b5b61339485828601613262565b925050602083013567ffffffffffffffff8111156133b5576133b4612e49565b5b6133c185828601613325565b9150509250929050565b6000806000606084860312156133e4576133e3612e44565b5b60006133f286828701612fbf565b935050602061340386828701612fbf565b925050604061341486828701612e6f565b9150509250925092565b61342781612f96565b82525050565b6000602082019050613442600083018461341e565b92915050565b600060ff82169050919050565b61345e81613448565b82525050565b60006020820190506134796000830184613455565b92915050565b61348881613014565b811461349357600080fd5b50565b6000813590506134a58161347f565b92915050565b600080604083850312156134c2576134c1612e44565b5b60006134d085828601612fbf565b92505060206134e185828601613496565b9150509250929050565b60006020828403121561350157613500612e44565b5b600061350f84828501613496565b91505092915050565b6000806040838503121561352f5761352e612e44565b5b600061353d85828601612fbf565b925050602061354e85828601612fbf565b9150509250929050565b7f4e6f7420617574686f7269736564000000000000000000000000000000000000600082015250565b600061358e600e83612ecf565b915061359982613558565b602082019050919050565b600060208201905081810360008301526135bd81613581565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135fe82612e4e565b915061360983612e4e565b9250828201905080821115613621576136206135c4565b5b92915050565b7f4d757374206b6565702066656573206174203725206f72206c65737300000000600082015250565b600061365d601c83612ecf565b915061366882613627565b602082019050919050565b6000602082019050818103600083015261368c81613650565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136da57607f821691505b6020821081036136ed576136ec613693565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613729602083612ecf565b9150613734826136f3565b602082019050919050565b600060208201905081810360008301526137588161371c565b9050919050565b600061376a82612e4e565b915061377583612e4e565b925082820261378381612e4e565b9150828204841483151761379a576137996135c4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137db82612e4e565b91506137e683612e4e565b9250826137f6576137f56137a1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061385d602f83612ecf565b915061386882613801565b604082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b60006138c9601e83612ecf565b91506138d482613893565b602082019050919050565b600060208201905081810360008301526138f8816138bc565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061395b602283612ecf565b9150613966826138ff565b604082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613a17578086048111156139f3576139f26135c4565b5b6001851615613a025780820291505b8081029050613a10856139c0565b94506139d7565b94509492505050565b600082613a305760019050613aec565b81613a3e5760009050613aec565b8160018114613a545760028114613a5e57613a8d565b6001915050613aec565b60ff841115613a7057613a6f6135c4565b5b8360020a915084821115613a8757613a866135c4565b5b50613aec565b5060208310610133831016604e8410600b8410161715613ac25782820a905083811115613abd57613abc6135c4565b5b613aec565b613acf84848460016139cd565b92509050818404811115613ae657613ae56135c4565b5b81810290505b9392505050565b6000613afe82612e4e565b9150613b0983613448565b9250613b367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a20565b905092915050565b6000613b4982612e4e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b7b57613b7a6135c4565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613be2602883612ecf565b9150613bed82613b86565b604082019050919050565b60006020820190508181036000830152613c1181613bd5565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613c74602483612ecf565b9150613c7f82613c18565b604082019050919050565b60006020820190508181036000830152613ca381613c67565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613d06603583612ecf565b9150613d1182613caa565b604082019050919050565b60006020820190508181036000830152613d3581613cf9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613d98603483612ecf565b9150613da382613d3c565b604082019050919050565b60006020820190508181036000830152613dc781613d8b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e2a602683612ecf565b9150613e3582613dce565b604082019050919050565b60006020820190508181036000830152613e5981613e1d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ebc602483612ecf565b9150613ec782613e60565b604082019050919050565b60006020820190508181036000830152613eeb81613eaf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f4e602283612ecf565b9150613f5982613ef2565b604082019050919050565b60006020820190508181036000830152613f7d81613f41565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fe0602583612ecf565b9150613feb82613f84565b604082019050919050565b6000602082019050818103600083015261400f81613fd3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614072602383612ecf565b915061407d82614016565b604082019050919050565b600060208201905081810360008301526140a181614065565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614104602683612ecf565b915061410f826140a8565b604082019050919050565b60006020820190508181036000830152614133816140f7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614170601683612ecf565b915061417b8261413a565b602082019050919050565b6000602082019050818103600083015261419f81614163565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614202603583612ecf565b915061420d826141a6565b604082019050919050565b60006020820190508181036000830152614231816141f5565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061426e601383612ecf565b915061427982614238565b602082019050919050565b6000602082019050818103600083015261429d81614261565b9050919050565b60006142af82612e4e565b91506142ba83612e4e565b92508282039050818111156142d2576142d16135c4565b5b92915050565b6000819050919050565b60006142fd6142f86142f3846142d8565b613077565b612e4e565b9050919050565b61430d816142e2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61434881612f96565b82525050565b600061435a838361433f565b60208301905092915050565b6000602082019050919050565b600061437e82614313565b614388818561431e565b93506143938361432f565b8060005b838110156143c45781516143ab888261434e565b97506143b683614366565b925050600181019050614397565b5085935050505092915050565b600060a0820190506143e660008301886130f1565b6143f36020830187614304565b81810360408301526144058186614373565b9050614414606083018561341e565b61442160808301846130f1565b969550505050505056fea26469706673582212205b93879b9141754dd0e1abfee0091718bbd0a1d76b5c3b74139687ac52821bee64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80637571336a11610144578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e146108e7578063e2f4560514610924578063f11a24d31461094f578063f2fde38b1461097a578063f6374342146109a3578063f8b45b05146109ce57610267565b8063c024666814610802578063c18bc1951461082b578063c8c8ebe414610854578063d257b34f1461087f578063d85ba063146108bc57610267565b806395d89b411161010857806395d89b41146106ee5780639c3b4fdc14610719578063a0d82dc514610744578063a9059cbb1461076f578063ad5c4648146107ac578063bbc0c742146107d757610267565b80637571336a1461062f5780638a8c523c146106585780638da5cb5b1461066f5780638ea5220f1461069a578063924de9b7146106c557610267565b806327c8f835116101dd57806366ca9b83116101a157806366ca9b83146105315780636a486a8e1461055a5780636ddd17131461058557806370a08231146105b0578063715018a6146105ed578063751039fc1461060457610267565b806327c8f83514610448578063313ce5671461047357806349bd5a5e1461049e5780634a62bb65146104c95780634fbee193146104f457610267565b806318160ddd1161022457806318160ddd146103655780631816467f14610390578063203e727e146103b95780632307b441146103e257806323b872dd1461040b57610267565b806302dbd8f81461026c57806306fdde0314610295578063095ea7b3146102c057806310d5de53146102fd5780631694505e1461033a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190612e84565b6109f9565b005b3480156102a157600080fd5b506102aa610b34565b6040516102b79190612f54565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190612fd4565b610bc6565b6040516102f4919061302f565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f919061304a565b610be4565b604051610331919061302f565b60405180910390f35b34801561034657600080fd5b5061034f610c04565b60405161035c91906130d6565b60405180910390f35b34801561037157600080fd5b5061037a610c28565b6040516103879190613100565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b2919061304a565b610c32565b005b3480156103c557600080fd5b506103e060048036038101906103db919061311b565b610d6e565b005b3480156103ee57600080fd5b5061040960048036038101906104049190613353565b610e7d565b005b34801561041757600080fd5b50610432600480360381019061042d91906133cb565b61100f565b60405161043f919061302f565b60405180910390f35b34801561045457600080fd5b5061045d611107565b60405161046a919061342d565b60405180910390f35b34801561047f57600080fd5b5061048861110d565b6040516104959190613464565b60405180910390f35b3480156104aa57600080fd5b506104b3611116565b6040516104c0919061342d565b60405180910390f35b3480156104d557600080fd5b506104de61113a565b6040516104eb919061302f565b60405180910390f35b34801561050057600080fd5b5061051b6004803603810190610516919061304a565b61114d565b604051610528919061302f565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190612e84565b6111a3565b005b34801561056657600080fd5b5061056f6112de565b60405161057c9190613100565b60405180910390f35b34801561059157600080fd5b5061059a6112e4565b6040516105a7919061302f565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d2919061304a565b6112f7565b6040516105e49190613100565b60405180910390f35b3480156105f957600080fd5b5061060261133f565b005b34801561061057600080fd5b506106196113c7565b604051610626919061302f565b60405180910390f35b34801561063b57600080fd5b50610656600480360381019061065191906134ab565b6114b8565b005b34801561066457600080fd5b5061066d61158f565b005b34801561067b57600080fd5b50610684611643565b604051610691919061342d565b60405180910390f35b3480156106a657600080fd5b506106af61166d565b6040516106bc919061342d565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e791906134eb565b611693565b005b3480156106fa57600080fd5b5061070361172c565b6040516107109190612f54565b60405180910390f35b34801561072557600080fd5b5061072e6117be565b60405161073b9190613100565b60405180910390f35b34801561075057600080fd5b506107596117c4565b6040516107669190613100565b60405180910390f35b34801561077b57600080fd5b5061079660048036038101906107919190612fd4565b6117ca565b6040516107a3919061302f565b60405180910390f35b3480156107b857600080fd5b506107c16117e8565b6040516107ce919061342d565b60405180910390f35b3480156107e357600080fd5b506107ec61180e565b6040516107f9919061302f565b60405180910390f35b34801561080e57600080fd5b50610829600480360381019061082491906134ab565b611821565b005b34801561083757600080fd5b50610852600480360381019061084d919061311b565b611946565b005b34801561086057600080fd5b50610869611a55565b6040516108769190613100565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a1919061311b565b611a5b565b6040516108b3919061302f565b60405180910390f35b3480156108c857600080fd5b506108d1611bb0565b6040516108de9190613100565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190613518565b611bb6565b60405161091b9190613100565b60405180910390f35b34801561093057600080fd5b50610939611c3d565b6040516109469190613100565b60405180910390f35b34801561095b57600080fd5b50610964611c43565b6040516109719190613100565b60405180910390f35b34801561098657600080fd5b506109a1600480360381019061099c919061304a565b611c49565b005b3480156109af57600080fd5b506109b8611d40565b6040516109c59190613100565b60405180910390f35b3480156109da57600080fd5b506109e3611d46565b6040516109f09190613100565b60405180910390f35b610a01611643565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a875750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd906135a4565b60405180910390fd5b8160108190555080601181905550601154601054610ae491906135f3565b600f819055506007600f541115610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2790613673565b60405180910390fd5b5050565b606060038054610b43906136c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6f906136c2565b8015610bbc5780601f10610b9157610100808354040283529160200191610bbc565b820191906000526020600020905b815481529060010190602001808311610b9f57829003601f168201915b5050505050905090565b6000610bda610bd3611d4c565b8484611d54565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610c3a611d4c565b73ffffffffffffffffffffffffffffffffffffffff16610c58611643565b73ffffffffffffffffffffffffffffffffffffffff1614610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca59061373f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d76611d4c565b73ffffffffffffffffffffffffffffffffffffffff16610d94611643565b73ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de19061373f565b60405180910390fd5b670de0b6b3a76400006103e86001610e00610c28565b610e0a919061375f565b610e1491906137d0565b610e1e91906137d0565b811015610e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5790613873565b60405180910390fd5b670de0b6b3a764000081610e74919061375f565b60088190555050565b610e85611d4c565b73ffffffffffffffffffffffffffffffffffffffff16610ea3611643565b73ffffffffffffffffffffffffffffffffffffffff1614610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef09061373f565b60405180910390fd5b8051825114610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f34906138df565b60405180910390fd5b606482511115610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613971565b60405180910390fd5b60005b825181101561100a576000838281518110610fa357610fa2613991565b5b602002602001015190506000610fb761110d565b600a610fc39190613af3565b848481518110610fd657610fd5613991565b5b6020026020010151610fe8919061375f565b9050610ff5338383611f1d565b5050808061100290613b3e565b915050610f85565b505050565b600061101c84848461219c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611067611d4c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90613bf8565b60405180910390fd5b6110fb856110f3611d4c565b858403611d54565b60019150509392505050565b61dead81565b60006012905090565b7f000000000000000000000000ed5297326b56cf29ad02dbffe89a1150c0e3de5d81565b600b60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111ab611643565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112315750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611270576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611267906135a4565b60405180910390fd5b81600d8190555080600e81905550600e54600d5461128e91906135f3565b600c819055506007600c5411156112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190613673565b60405180910390fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611347611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611365611643565b73ffffffffffffffffffffffffffffffffffffffff16146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b29061373f565b60405180910390fd5b6113c56000612afb565b565b60006113d1611643565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114575750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d906135a4565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114c0611d4c565b73ffffffffffffffffffffffffffffffffffffffff166114de611643565b73ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b9061373f565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611597611d4c565b73ffffffffffffffffffffffffffffffffffffffff166115b5611643565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116029061373f565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61169b611d4c565b73ffffffffffffffffffffffffffffffffffffffff166116b9611643565b73ffffffffffffffffffffffffffffffffffffffff161461170f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117069061373f565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461173b906136c2565b80601f0160208091040260200160405190810160405280929190818152602001828054611767906136c2565b80156117b45780601f10611789576101008083540402835291602001916117b4565b820191906000526020600020905b81548152906001019060200180831161179757829003601f168201915b5050505050905090565b600d5481565b60105481565b60006117de6117d7611d4c565b848461219c565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b611829611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611847611643565b73ffffffffffffffffffffffffffffffffffffffff161461189d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118949061373f565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161193a919061302f565b60405180910390a25050565b61194e611d4c565b73ffffffffffffffffffffffffffffffffffffffff1661196c611643565b73ffffffffffffffffffffffffffffffffffffffff16146119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b99061373f565b60405180910390fd5b670de0b6b3a76400006103e860056119d8610c28565b6119e2919061375f565b6119ec91906137d0565b6119f691906137d0565b811015611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f90613c8a565b60405180910390fd5b670de0b6b3a764000081611a4c919061375f565b600a8190555050565b60085481565b6000611a65611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611a83611643565b73ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad09061373f565b60405180910390fd5b620186a06001611ae7610c28565b611af1919061375f565b611afb91906137d0565b821015611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490613d1c565b60405180910390fd5b6103e86005611b4a610c28565b611b54919061375f565b611b5e91906137d0565b821115611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613dae565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b611c51611d4c565b73ffffffffffffffffffffffffffffffffffffffff16611c6f611643565b73ffffffffffffffffffffffffffffffffffffffff1614611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc9061373f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b90613e40565b60405180910390fd5b611d3d81612afb565b50565b60115481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90613ed2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2990613f64565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f109190613100565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8390613ff6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff290614088565b60405180910390fd5b612006838383612bc1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561208c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120839061411a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461211f91906135f3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121839190613100565b60405180910390a3612196848484612bc6565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361220b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220290613ff6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190614088565b60405180910390fd5b600081036122935761228e83836000611f1d565b612af6565b600b60009054906101000a900460ff161561269d576122b0611643565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561231e57506122ee611643565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123575750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612391575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123aa5750600660149054906101000a900460ff16155b1561269c57600b60019054906101000a900460ff166124a457601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124645750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a90614186565b60405180910390fd5b5b7f000000000000000000000000ed5297326b56cf29ad02dbffe89a1150c0e3de5d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125495750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f057600854811115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614218565b60405180910390fd5b600a5461259f836112f7565b826125aa91906135f3565b11156125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e290614284565b60405180910390fd5b61269b565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661269a57600a5461264d836112f7565b8261265891906135f3565b1115612699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269090614284565b60405180910390fd5b5b5b5b5b60006126a8306112f7565b9050600060095482101590508080156126cd5750600b60029054906101000a900460ff165b80156126e65750600660149054906101000a900460ff16155b801561273d57507f000000000000000000000000ed5297326b56cf29ad02dbffe89a1150c0e3de5d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156127935750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127e95750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561282d576001600660146101000a81548160ff021916908315150217905550612811612bcb565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128e35750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128ed57600090505b60008060008315612ae4577f000000000000000000000000ed5297326b56cf29ad02dbffe89a1150c0e3de5d73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561295557506000600f54115b156129c3576129826064612974600f548a612c1b90919063ffffffff16565b612c3190919063ffffffff16565b9250600f5460115484612995919061375f565b61299f91906137d0565b9150600f54601054846129b2919061375f565b6129bc91906137d0565b9050612a8b565b7f000000000000000000000000ed5297326b56cf29ad02dbffe89a1150c0e3de5d73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16148015612a2057506000600c54115b15612a8a57612a4d6064612a3f600c548a612c1b90919063ffffffff16565b612c3190919063ffffffff16565b9250600c54600e5484612a60919061375f565b612a6a91906137d0565b9150600c54600d5484612a7d919061375f565b612a8791906137d0565b90505b5b6000831115612aa057612a9f893085611f1d565b5b6000821115612ad557612ad4307f000000000000000000000000ed5297326b56cf29ad02dbffe89a1150c0e3de5d84611f1d565b5b8287612ae191906142a4565b96505b612aef898989611f1d565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000612bd6306112f7565b905060008103612be65750612c19565b6014600954612bf5919061375f565b811115612c0e576014600954612c0b919061375f565b90505b612c1781612c47565b505b565b60008183612c29919061375f565b905092915050565b60008183612c3f91906137d0565b905092915050565b6000600267ffffffffffffffff811115612c6457612c6361314d565b5b604051908082528060200260200182016040528015612c925781602001602082028036833780820191505090505b5090503081600081518110612caa57612ca9613991565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612d1b57612d1a613991565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d80307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d54565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612e049594939291906143d1565b600060405180830381600087803b158015612e1e57600080fd5b505af1158015612e32573d6000803e3d6000fd5b505050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612e6181612e4e565b8114612e6c57600080fd5b50565b600081359050612e7e81612e58565b92915050565b60008060408385031215612e9b57612e9a612e44565b5b6000612ea985828601612e6f565b9250506020612eba85828601612e6f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612efe578082015181840152602081019050612ee3565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f2682612ec4565b612f308185612ecf565b9350612f40818560208601612ee0565b612f4981612f0a565b840191505092915050565b60006020820190508181036000830152612f6e8184612f1b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fa182612f76565b9050919050565b612fb181612f96565b8114612fbc57600080fd5b50565b600081359050612fce81612fa8565b92915050565b60008060408385031215612feb57612fea612e44565b5b6000612ff985828601612fbf565b925050602061300a85828601612e6f565b9150509250929050565b60008115159050919050565b61302981613014565b82525050565b60006020820190506130446000830184613020565b92915050565b6000602082840312156130605761305f612e44565b5b600061306e84828501612fbf565b91505092915050565b6000819050919050565b600061309c61309761309284612f76565b613077565b612f76565b9050919050565b60006130ae82613081565b9050919050565b60006130c0826130a3565b9050919050565b6130d0816130b5565b82525050565b60006020820190506130eb60008301846130c7565b92915050565b6130fa81612e4e565b82525050565b600060208201905061311560008301846130f1565b92915050565b60006020828403121561313157613130612e44565b5b600061313f84828501612e6f565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61318582612f0a565b810181811067ffffffffffffffff821117156131a4576131a361314d565b5b80604052505050565b60006131b7612e3a565b90506131c3828261317c565b919050565b600067ffffffffffffffff8211156131e3576131e261314d565b5b602082029050602081019050919050565b600080fd5b600061320c613207846131c8565b6131ad565b9050808382526020820190506020840283018581111561322f5761322e6131f4565b5b835b8181101561325857806132448882612fbf565b845260208401935050602081019050613231565b5050509392505050565b600082601f83011261327757613276613148565b5b81356132878482602086016131f9565b91505092915050565b600067ffffffffffffffff8211156132ab576132aa61314d565b5b602082029050602081019050919050565b60006132cf6132ca84613290565b6131ad565b905080838252602082019050602084028301858111156132f2576132f16131f4565b5b835b8181101561331b57806133078882612e6f565b8452602084019350506020810190506132f4565b5050509392505050565b600082601f83011261333a57613339613148565b5b813561334a8482602086016132bc565b91505092915050565b6000806040838503121561336a57613369612e44565b5b600083013567ffffffffffffffff81111561338857613387612e49565b5b61339485828601613262565b925050602083013567ffffffffffffffff8111156133b5576133b4612e49565b5b6133c185828601613325565b9150509250929050565b6000806000606084860312156133e4576133e3612e44565b5b60006133f286828701612fbf565b935050602061340386828701612fbf565b925050604061341486828701612e6f565b9150509250925092565b61342781612f96565b82525050565b6000602082019050613442600083018461341e565b92915050565b600060ff82169050919050565b61345e81613448565b82525050565b60006020820190506134796000830184613455565b92915050565b61348881613014565b811461349357600080fd5b50565b6000813590506134a58161347f565b92915050565b600080604083850312156134c2576134c1612e44565b5b60006134d085828601612fbf565b92505060206134e185828601613496565b9150509250929050565b60006020828403121561350157613500612e44565b5b600061350f84828501613496565b91505092915050565b6000806040838503121561352f5761352e612e44565b5b600061353d85828601612fbf565b925050602061354e85828601612fbf565b9150509250929050565b7f4e6f7420617574686f7269736564000000000000000000000000000000000000600082015250565b600061358e600e83612ecf565b915061359982613558565b602082019050919050565b600060208201905081810360008301526135bd81613581565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135fe82612e4e565b915061360983612e4e565b9250828201905080821115613621576136206135c4565b5b92915050565b7f4d757374206b6565702066656573206174203725206f72206c65737300000000600082015250565b600061365d601c83612ecf565b915061366882613627565b602082019050919050565b6000602082019050818103600083015261368c81613650565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136da57607f821691505b6020821081036136ed576136ec613693565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613729602083612ecf565b9150613734826136f3565b602082019050919050565b600060208201905081810360008301526137588161371c565b9050919050565b600061376a82612e4e565b915061377583612e4e565b925082820261378381612e4e565b9150828204841483151761379a576137996135c4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137db82612e4e565b91506137e683612e4e565b9250826137f6576137f56137a1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061385d602f83612ecf565b915061386882613801565b604082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b60006138c9601e83612ecf565b91506138d482613893565b602082019050919050565b600060208201905081810360008301526138f8816138bc565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061395b602283612ecf565b9150613966826138ff565b604082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613a17578086048111156139f3576139f26135c4565b5b6001851615613a025780820291505b8081029050613a10856139c0565b94506139d7565b94509492505050565b600082613a305760019050613aec565b81613a3e5760009050613aec565b8160018114613a545760028114613a5e57613a8d565b6001915050613aec565b60ff841115613a7057613a6f6135c4565b5b8360020a915084821115613a8757613a866135c4565b5b50613aec565b5060208310610133831016604e8410600b8410161715613ac25782820a905083811115613abd57613abc6135c4565b5b613aec565b613acf84848460016139cd565b92509050818404811115613ae657613ae56135c4565b5b81810290505b9392505050565b6000613afe82612e4e565b9150613b0983613448565b9250613b367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a20565b905092915050565b6000613b4982612e4e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b7b57613b7a6135c4565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613be2602883612ecf565b9150613bed82613b86565b604082019050919050565b60006020820190508181036000830152613c1181613bd5565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613c74602483612ecf565b9150613c7f82613c18565b604082019050919050565b60006020820190508181036000830152613ca381613c67565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613d06603583612ecf565b9150613d1182613caa565b604082019050919050565b60006020820190508181036000830152613d3581613cf9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613d98603483612ecf565b9150613da382613d3c565b604082019050919050565b60006020820190508181036000830152613dc781613d8b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e2a602683612ecf565b9150613e3582613dce565b604082019050919050565b60006020820190508181036000830152613e5981613e1d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ebc602483612ecf565b9150613ec782613e60565b604082019050919050565b60006020820190508181036000830152613eeb81613eaf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f4e602283612ecf565b9150613f5982613ef2565b604082019050919050565b60006020820190508181036000830152613f7d81613f41565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fe0602583612ecf565b9150613feb82613f84565b604082019050919050565b6000602082019050818103600083015261400f81613fd3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614072602383612ecf565b915061407d82614016565b604082019050919050565b600060208201905081810360008301526140a181614065565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614104602683612ecf565b915061410f826140a8565b604082019050919050565b60006020820190508181036000830152614133816140f7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614170601683612ecf565b915061417b8261413a565b602082019050919050565b6000602082019050818103600083015261419f81614163565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614202603583612ecf565b915061420d826141a6565b604082019050919050565b60006020820190508181036000830152614231816141f5565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061426e601383612ecf565b915061427982614238565b602082019050919050565b6000602082019050818103600083015261429d81614261565b9050919050565b60006142af82612e4e565b91506142ba83612e4e565b92508282039050818111156142d2576142d16135c4565b5b92915050565b6000819050919050565b60006142fd6142f86142f3846142d8565b613077565b612e4e565b9050919050565b61430d816142e2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61434881612f96565b82525050565b600061435a838361433f565b60208301905092915050565b6000602082019050919050565b600061437e82614313565b614388818561431e565b93506143938361432f565b8060005b838110156143c45781516143ab888261434e565b97506143b683614366565b925050600181019050614397565b5085935050505092915050565b600060a0820190506143e660008301886130f1565b6143f36020830187614304565b81810360408301526144058186614373565b9050614414606083018561341e565b61442160808301846130f1565b969550505050505056fea26469706673582212205b93879b9141754dd0e1abfee0091718bbd0a1d76b5c3b74139687ac52821bee64736f6c63430008110033

Deployed Bytecode Sourcemap

23463:11606:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28960:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8319:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10486:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24424:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23539:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9439:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29550:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27649:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34495:569;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11137:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23642:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9281:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23597:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23953:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29749:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28567:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24177:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24033:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9610:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1554:103;;;;;;;;;;;;;:::i;:::-;;26877:197;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28196:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26713:112;;;;;;;;;;;;;:::i;:::-;;903:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23805:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28459:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8538:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24107:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24212:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9950:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23702:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23993:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29360:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27932:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23838:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27144:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24073:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10188:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23880:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24138:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1812:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24244:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23920:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28960:392;29091:7;:5;:7::i;:::-;29077:21;;:10;:21;;;:48;;;;29116:9;;;;;;;;;;;29102:23;;:10;:23;;;29077:48;29069:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;29168:7;29155:10;:20;;;;29205:13;29186:16;:32;;;;29258:16;;29245:10;;:29;;;;:::i;:::-;29229:13;:45;;;;29310:1;29293:13;;:18;;29285:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;28960:392;;:::o;8319:100::-;8373:13;8406:5;8399:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8319:100;:::o;10486:169::-;10569:4;10586:39;10595:12;:10;:12::i;:::-;10609:7;10618:6;10586:8;:39::i;:::-;10643:4;10636:11;;10486:169;;;;:::o;24424:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;23539:51::-;;;:::o;9439:108::-;9500:7;9527:12;;9520:19;;9439:108;:::o;29550:189::-;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29686:9:::1;;;;;;;;;;;29655:41;;29672:12;29655:41;;;;;;;;;;;;29719:12;29707:9;;:24;;;;;;;;;;;;;;;;;;29550:189:::0;:::o;27649:275::-;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27786:4:::1;27778;27773:1;27757:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27756:26;;;;:::i;:::-;27755:35;;;;:::i;:::-;27745:6;:45;;27723:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;27909:6;27899;:17;;;;:::i;:::-;27876:20;:40;;;;27649:275:::0;:::o;34495:569::-;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34667:6:::1;:13;34642:14;:21;:38;34634:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34759:3;34734:14;:21;:28;;34726:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34817:9;34812:245;34836:14;:21;34832:1;:25;34812:245;;;34879:14;34896;34911:1;34896:17;;;;;;;;:::i;:::-;;;;;;;;34879:34;;34928:21;34969:10;:8;:10::i;:::-;34965:2;:14;;;;:::i;:::-;34952:6;34959:1;34952:9;;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;34928:52;;34995:50;35011:10;35023:6;35031:13;34995:15;:50::i;:::-;34864:193;;34859:3;;;;;:::i;:::-;;;;34812:245;;;;34495:569:::0;;:::o;11137:492::-;11277:4;11294:36;11304:6;11312:9;11323:6;11294:9;:36::i;:::-;11343:24;11370:11;:19;11382:6;11370:19;;;;;;;;;;;;;;;:33;11390:12;:10;:12::i;:::-;11370:33;;;;;;;;;;;;;;;;11343:60;;11442:6;11422:16;:26;;11414:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11529:57;11538:6;11546:12;:10;:12::i;:::-;11579:6;11560:16;:25;11529:8;:57::i;:::-;11617:4;11610:11;;;11137:492;;;;;:::o;23642:53::-;23688:6;23642:53;:::o;9281:93::-;9339:5;9364:2;9357:9;;9281:93;:::o;23597:38::-;;;:::o;23953:33::-;;;;;;;;;;;;;:::o;29749:126::-;29815:4;29839:19;:28;29859:7;29839:28;;;;;;;;;;;;;;;;;;;;;;;;;29832:35;;29749:126;;;:::o;28567:385::-;28697:7;:5;:7::i;:::-;28683:21;;:10;:21;;;:48;;;;28722:9;;;;;;;;;;;28708:23;;:10;:23;;;28683:48;28675:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28773:7;28761:9;:19;;;;28809:13;28791:15;:31;;;;28860:15;;28848:9;;:27;;;;:::i;:::-;28833:12;:42;;;;28910:1;28894:12;;:17;;28886:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28567:385;;:::o;24177:28::-;;;;:::o;24033:31::-;;;;;;;;;;;;;:::o;9610:127::-;9684:7;9711:9;:18;9721:7;9711:18;;;;;;;;;;;;;;;;9704:25;;9610:127;;;:::o;1554:103::-;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1619:30:::1;1646:1;1619:18;:30::i;:::-;1554:103::o:0;26877:197::-;26919:4;26958:7;:5;:7::i;:::-;26944:21;;:10;:21;;;:48;;;;26983:9;;;;;;;;;;;26969:23;;:10;:23;;;26944:48;26936:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27039:5;27022:14;;:22;;;;;;;;;;;;;;;;;;27062:4;27055:11;;26877:197;:::o;28196:167::-;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28351:4:::1;28309:31;:39;28341:6;28309:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28196:167:::0;;:::o;26713:112::-;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26784:4:::1;26768:13;;:20;;;;;;;;;;;;;;;;;;26813:4;26799:11;;:18;;;;;;;;;;;;;;;;;;26713:112::o:0;903:87::-;949:7;976:6;;;;;;;;;;;969:13;;903:87;:::o;23805:24::-;;;;;;;;;;;;;:::o;28459:100::-;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28544:7:::1;28530:11;;:21;;;;;;;;;;;;;;;;;;28459:100:::0;:::o;8538:104::-;8594:13;8627:7;8620:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8538:104;:::o;24107:24::-;;;;:::o;24212:25::-;;;;:::o;9950:175::-;10036:4;10053:42;10063:12;:10;:12::i;:::-;10077:9;10088:6;10053:9;:42::i;:::-;10113:4;10106:11;;9950:175;;;;:::o;23702:64::-;;;;;;;;;;;;;:::o;23993:33::-;;;;;;;;;;;;;:::o;29360:182::-;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29476:8:::1;29445:19;:28;29465:7;29445:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29516:7;29500:34;;;29525:8;29500:34;;;;;;:::i;:::-;;;;;;;;29360:182:::0;;:::o;27932:256::-;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28072:4:::1;28064;28059:1;28043:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28042:26;;;;:::i;:::-;28041:35;;;;:::i;:::-;28031:6;:45;;28009:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;28173:6;28163;:17;;;;:::i;:::-;28151:9;:29;;;;27932:256:::0;:::o;23838:35::-;;;;:::o;27144:497::-;27252:4;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27331:6:::1;27326:1;27310:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27309:28;;;;:::i;:::-;27296:9;:41;;27274:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;27486:4;27481:1;27465:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27464:26;;;;:::i;:::-;27451:9;:39;;27429:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;27602:9;27581:18;:30;;;;27629:4;27622:11;;27144:497:::0;;;:::o;24073:27::-;;;;:::o;10188:151::-;10277:7;10304:11;:18;10316:5;10304:18;;;;;;;;;;;;;;;:27;10323:7;10304:27;;;;;;;;;;;;;;;;10297:34;;10188:151;;;;:::o;23880:33::-;;;;:::o;24138:30::-;;;;:::o;1812:201::-;1134:12;:10;:12::i;:::-;1123:23;;:7;:5;:7::i;:::-;:23;;;1115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1921:1:::1;1901:22;;:8;:22;;::::0;1893:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1977:28;1996:8;1977:18;:28::i;:::-;1812:201:::0;:::o;24244:31::-;;;;:::o;23920:24::-;;;;:::o;277:98::-;330:7;357:10;350:17;;277:98;:::o;13978:380::-;14131:1;14114:19;;:5;:19;;;14106:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14212:1;14193:21;;:7;:21;;;14185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14296:6;14266:11;:18;14278:5;14266:18;;;;;;;;;;;;;;;:27;14285:7;14266:27;;;;;;;;;;;;;;;:36;;;;14334:7;14318:32;;14327:5;14318:32;;;14343:6;14318:32;;;;;;:::i;:::-;;;;;;;;13978:380;;;:::o;12119:733::-;12277:1;12259:20;;:6;:20;;;12251:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12361:1;12340:23;;:9;:23;;;12332:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12416:47;12437:6;12445:9;12456:6;12416:20;:47::i;:::-;12476:21;12500:9;:17;12510:6;12500:17;;;;;;;;;;;;;;;;12476:41;;12553:6;12536:13;:23;;12528:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12674:6;12658:13;:22;12638:9;:17;12648:6;12638:17;;;;;;;;;;;;;;;:42;;;;12726:6;12702:9;:20;12712:9;12702:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12767:9;12750:35;;12759:6;12750:35;;;12778:6;12750:35;;;;;;:::i;:::-;;;;;;;;12798:46;12818:6;12826:9;12837:6;12798:19;:46::i;:::-;12240:612;12119:733;;;:::o;29883:3679::-;30031:1;30015:18;;:4;:18;;;30007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30108:1;30094:16;;:2;:16;;;30086:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30177:1;30167:6;:11;30163:93;;30195:28;30211:4;30217:2;30221:1;30195:15;:28::i;:::-;30238:7;;30163:93;30272:14;;;;;;;;;;;30268:1430;;;30333:7;:5;:7::i;:::-;30325:15;;:4;:15;;;;:49;;;;;30367:7;:5;:7::i;:::-;30361:13;;:2;:13;;;;30325:49;:86;;;;;30409:1;30395:16;;:2;:16;;;;30325:86;:128;;;;;30446:6;30432:21;;:2;:21;;;;30325:128;:158;;;;;30475:8;;;;;;;;;;;30474:9;30325:158;30303:1384;;;30523:13;;;;;;;;;;;30518:223;;30595:19;:25;30615:4;30595:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30624:19;:23;30644:2;30624:23;;;;;;;;;;;;;;;;;;;;;;;;;30595:52;30561:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;30518:223;30955:13;30947:21;;:4;:21;;;:82;;;;;30994:31;:35;31026:2;30994:35;;;;;;;;;;;;;;;;;;;;;;;;;30993:36;30947:82;30921:751;;;31116:20;;31106:6;:30;;31072:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;31324:9;;31307:13;31317:2;31307:9;:13::i;:::-;31298:6;:22;;;;:::i;:::-;:35;;31264:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30921:751;;;31452:31;:35;31484:2;31452:35;;;;;;;;;;;;;;;;;;;;;;;;;31447:225;;31572:9;;31555:13;31565:2;31555:9;:13::i;:::-;31546:6;:22;;;;:::i;:::-;:35;;31512:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31447:225;30921:751;30303:1384;30268:1430;31710:28;31741:24;31759:4;31741:9;:24::i;:::-;31710:55;;31778:12;31817:18;;31793:20;:42;;31778:57;;31866:7;:35;;;;;31890:11;;;;;;;;;;;31866:35;:61;;;;;31919:8;;;;;;;;;;;31918:9;31866:61;:97;;;;;31950:13;31944:19;;:2;:19;;;31866:97;:140;;;;;31981:19;:25;32001:4;31981:25;;;;;;;;;;;;;;;;;;;;;;;;;31980:26;31866:140;:181;;;;;32024:19;:23;32044:2;32024:23;;;;;;;;;;;;;;;;;;;;;;;;;32023:24;31866:181;31848:313;;;32085:4;32074:8;;:15;;;;;;;;;;;;;;;;;;32106:10;:8;:10::i;:::-;32144:5;32133:8;;:16;;;;;;;;;;;;;;;;;;31848:313;32173:12;32189:8;;;;;;;;;;;32188:9;32173:24;;32299:19;:25;32319:4;32299:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32328:19;:23;32348:2;32328:23;;;;;;;;;;;;;;;;;;;;;;;;;32299:52;32295:100;;;32378:5;32368:15;;32295:100;32407:12;32434:26;32475:20;32588:7;32584:925;;;32646:13;32640:19;;:2;:19;;;:40;;;;;32679:1;32663:13;;:17;32640:40;32636:583;;;32708:34;32738:3;32708:25;32719:13;;32708:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;32701:41;;32810:13;;32790:16;;32783:4;:23;;;;:::i;:::-;32782:41;;;;:::i;:::-;32761:62;;32879:13;;32865:10;;32858:4;:17;;;;:::i;:::-;32857:35;;;;:::i;:::-;32842:50;;32636:583;;;32962:13;32954:21;;:4;:21;;;:41;;;;;32994:1;32979:12;;:16;32954:41;32950:269;;;33023:33;33052:3;33023:24;33034:12;;33023:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;33016:40;;33123:12;;33104:15;;33097:4;:22;;;;:::i;:::-;33096:39;;;;:::i;:::-;33075:60;;33191:12;;33178:9;;33171:4;:16;;;;:::i;:::-;33170:33;;;;:::i;:::-;33155:48;;32950:269;32636:583;33245:1;33239:4;:7;33235:90;;;33267:42;33283:4;33297;33304;33267:15;:42::i;:::-;33235:90;33364:1;33343:18;:22;33339:128;;;33386:65;33410:4;33417:13;33432:18;33386:15;:65::i;:::-;33339:128;33493:4;33483:14;;;;;:::i;:::-;;;32584:925;33521:33;33537:4;33543:2;33547:6;33521:15;:33::i;:::-;29996:3566;;;;;;29883:3679;;;;:::o;2173:191::-;2247:16;2266:6;;;;;;;;;;;2247:25;;2292:8;2283:6;;:17;;;;;;;;;;;;;;;;;;2347:8;2316:40;;2337:8;2316:40;;;;;;;;;;;;2236:128;2173:191;:::o;14958:125::-;;;;:::o;15687:124::-;;;;:::o;34148:339::-;34187:23;34213:24;34231:4;34213:9;:24::i;:::-;34187:50;;34271:1;34252:15;:20;34248:59;;34289:7;;;34248:59;34362:2;34341:18;;:23;;;;:::i;:::-;34323:15;:41;34319:115;;;34420:2;34399:18;;:23;;;;:::i;:::-;34381:41;;34319:115;34446:33;34463:15;34446:16;:33::i;:::-;34176:311;34148:339;:::o;19431:98::-;19489:7;19520:1;19516;:5;;;;:::i;:::-;19509:12;;19431:98;;;;:::o;19830:::-;19888:7;19919:1;19915;:5;;;;:::i;:::-;19908:12;;19830:98;;;;:::o;33570:570::-;33696:21;33734:1;33720:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33696:40;;33765:4;33747;33752:1;33747:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33791:4;;;;;;;;;;;33781;33786:1;33781:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;33808:62;33825:4;33840:15;33858:11;33808:8;:62::i;:::-;33909:15;:69;;;33993:11;34019:1;34063:4;34082:9;;;;;;;;;;;34106:15;33909:223;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33625:515;33570:570;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:60::-;4289:3;4310:5;4303:12;;4261:60;;;:::o;4327:142::-;4377:9;4410:53;4428:34;4437:24;4455:5;4437:24;:::i;:::-;4428:34;:::i;:::-;4410:53;:::i;:::-;4397:66;;4327:142;;;:::o;4475:126::-;4525:9;4558:37;4589:5;4558:37;:::i;:::-;4545:50;;4475:126;;;:::o;4607:152::-;4683:9;4716:37;4747:5;4716:37;:::i;:::-;4703:50;;4607:152;;;:::o;4765:183::-;4878:63;4935:5;4878:63;:::i;:::-;4873:3;4866:76;4765:183;;:::o;4954:274::-;5073:4;5111:2;5100:9;5096:18;5088:26;;5124:97;5218:1;5207:9;5203:17;5194:6;5124:97;:::i;:::-;4954:274;;;;:::o;5234:118::-;5321:24;5339:5;5321:24;:::i;:::-;5316:3;5309:37;5234:118;;:::o;5358:222::-;5451:4;5489:2;5478:9;5474:18;5466:26;;5502:71;5570:1;5559:9;5555:17;5546:6;5502:71;:::i;:::-;5358:222;;;;:::o;5586:329::-;5645:6;5694:2;5682:9;5673:7;5669:23;5665:32;5662:119;;;5700:79;;:::i;:::-;5662:119;5820:1;5845:53;5890:7;5881:6;5870:9;5866:22;5845:53;:::i;:::-;5835:63;;5791:117;5586:329;;;;:::o;5921:117::-;6030:1;6027;6020:12;6044:180;6092:77;6089:1;6082:88;6189:4;6186:1;6179:15;6213:4;6210:1;6203:15;6230:281;6313:27;6335:4;6313:27;:::i;:::-;6305:6;6301:40;6443:6;6431:10;6428:22;6407:18;6395:10;6392:34;6389:62;6386:88;;;6454:18;;:::i;:::-;6386:88;6494:10;6490:2;6483:22;6273:238;6230:281;;:::o;6517:129::-;6551:6;6578:20;;:::i;:::-;6568:30;;6607:33;6635:4;6627:6;6607:33;:::i;:::-;6517:129;;;:::o;6652:311::-;6729:4;6819:18;6811:6;6808:30;6805:56;;;6841:18;;:::i;:::-;6805:56;6891:4;6883:6;6879:17;6871:25;;6951:4;6945;6941:15;6933:23;;6652:311;;;:::o;6969:117::-;7078:1;7075;7068:12;7109:710;7205:5;7230:81;7246:64;7303:6;7246:64;:::i;:::-;7230:81;:::i;:::-;7221:90;;7331:5;7360:6;7353:5;7346:21;7394:4;7387:5;7383:16;7376:23;;7447:4;7439:6;7435:17;7427:6;7423:30;7476:3;7468:6;7465:15;7462:122;;;7495:79;;:::i;:::-;7462:122;7610:6;7593:220;7627:6;7622:3;7619:15;7593:220;;;7702:3;7731:37;7764:3;7752:10;7731:37;:::i;:::-;7726:3;7719:50;7798:4;7793:3;7789:14;7782:21;;7669:144;7653:4;7648:3;7644:14;7637:21;;7593:220;;;7597:21;7211:608;;7109:710;;;;;:::o;7842:370::-;7913:5;7962:3;7955:4;7947:6;7943:17;7939:27;7929:122;;7970:79;;:::i;:::-;7929:122;8087:6;8074:20;8112:94;8202:3;8194:6;8187:4;8179:6;8175:17;8112:94;:::i;:::-;8103:103;;7919:293;7842:370;;;;:::o;8218:311::-;8295:4;8385:18;8377:6;8374:30;8371:56;;;8407:18;;:::i;:::-;8371:56;8457:4;8449:6;8445:17;8437:25;;8517:4;8511;8507:15;8499:23;;8218:311;;;:::o;8552:710::-;8648:5;8673:81;8689:64;8746:6;8689:64;:::i;:::-;8673:81;:::i;:::-;8664:90;;8774:5;8803:6;8796:5;8789:21;8837:4;8830:5;8826:16;8819:23;;8890:4;8882:6;8878:17;8870:6;8866:30;8919:3;8911:6;8908:15;8905:122;;;8938:79;;:::i;:::-;8905:122;9053:6;9036:220;9070:6;9065:3;9062:15;9036:220;;;9145:3;9174:37;9207:3;9195:10;9174:37;:::i;:::-;9169:3;9162:50;9241:4;9236:3;9232:14;9225:21;;9112:144;9096:4;9091:3;9087:14;9080:21;;9036:220;;;9040:21;8654:608;;8552:710;;;;;:::o;9285:370::-;9356:5;9405:3;9398:4;9390:6;9386:17;9382:27;9372:122;;9413:79;;:::i;:::-;9372:122;9530:6;9517:20;9555:94;9645:3;9637:6;9630:4;9622:6;9618:17;9555:94;:::i;:::-;9546:103;;9362:293;9285:370;;;;:::o;9661:894::-;9779:6;9787;9836:2;9824:9;9815:7;9811:23;9807:32;9804:119;;;9842:79;;:::i;:::-;9804:119;9990:1;9979:9;9975:17;9962:31;10020:18;10012:6;10009:30;10006:117;;;10042:79;;:::i;:::-;10006:117;10147:78;10217:7;10208:6;10197:9;10193:22;10147:78;:::i;:::-;10137:88;;9933:302;10302:2;10291:9;10287:18;10274:32;10333:18;10325:6;10322:30;10319:117;;;10355:79;;:::i;:::-;10319:117;10460:78;10530:7;10521:6;10510:9;10506:22;10460:78;:::i;:::-;10450:88;;10245:303;9661:894;;;;;:::o;10561:619::-;10638:6;10646;10654;10703:2;10691:9;10682:7;10678:23;10674:32;10671:119;;;10709:79;;:::i;:::-;10671:119;10829:1;10854:53;10899:7;10890:6;10879:9;10875:22;10854:53;:::i;:::-;10844:63;;10800:117;10956:2;10982:53;11027:7;11018:6;11007:9;11003:22;10982:53;:::i;:::-;10972:63;;10927:118;11084:2;11110:53;11155:7;11146:6;11135:9;11131:22;11110:53;:::i;:::-;11100:63;;11055:118;10561:619;;;;;:::o;11186:118::-;11273:24;11291:5;11273:24;:::i;:::-;11268:3;11261:37;11186:118;;:::o;11310:222::-;11403:4;11441:2;11430:9;11426:18;11418:26;;11454:71;11522:1;11511:9;11507:17;11498:6;11454:71;:::i;:::-;11310:222;;;;:::o;11538:86::-;11573:7;11613:4;11606:5;11602:16;11591:27;;11538:86;;;:::o;11630:112::-;11713:22;11729:5;11713:22;:::i;:::-;11708:3;11701:35;11630:112;;:::o;11748:214::-;11837:4;11875:2;11864:9;11860:18;11852:26;;11888:67;11952:1;11941:9;11937:17;11928:6;11888:67;:::i;:::-;11748:214;;;;:::o;11968:116::-;12038:21;12053:5;12038:21;:::i;:::-;12031:5;12028:32;12018:60;;12074:1;12071;12064:12;12018:60;11968:116;:::o;12090:133::-;12133:5;12171:6;12158:20;12149:29;;12187:30;12211:5;12187:30;:::i;:::-;12090:133;;;;:::o;12229:468::-;12294:6;12302;12351:2;12339:9;12330:7;12326:23;12322:32;12319:119;;;12357:79;;:::i;:::-;12319:119;12477:1;12502:53;12547:7;12538:6;12527:9;12523:22;12502:53;:::i;:::-;12492:63;;12448:117;12604:2;12630:50;12672:7;12663:6;12652:9;12648:22;12630:50;:::i;:::-;12620:60;;12575:115;12229:468;;;;;:::o;12703:323::-;12759:6;12808:2;12796:9;12787:7;12783:23;12779:32;12776:119;;;12814:79;;:::i;:::-;12776:119;12934:1;12959:50;13001:7;12992:6;12981:9;12977:22;12959:50;:::i;:::-;12949:60;;12905:114;12703:323;;;;:::o;13032:474::-;13100:6;13108;13157:2;13145:9;13136:7;13132:23;13128:32;13125:119;;;13163:79;;:::i;:::-;13125:119;13283:1;13308:53;13353:7;13344:6;13333:9;13329:22;13308:53;:::i;:::-;13298:63;;13254:117;13410:2;13436:53;13481:7;13472:6;13461:9;13457:22;13436:53;:::i;:::-;13426:63;;13381:118;13032:474;;;;;:::o;13512:164::-;13652:16;13648:1;13640:6;13636:14;13629:40;13512:164;:::o;13682:366::-;13824:3;13845:67;13909:2;13904:3;13845:67;:::i;:::-;13838:74;;13921:93;14010:3;13921:93;:::i;:::-;14039:2;14034:3;14030:12;14023:19;;13682:366;;;:::o;14054:419::-;14220:4;14258:2;14247:9;14243:18;14235:26;;14307:9;14301:4;14297:20;14293:1;14282:9;14278:17;14271:47;14335:131;14461:4;14335:131;:::i;:::-;14327:139;;14054:419;;;:::o;14479:180::-;14527:77;14524:1;14517:88;14624:4;14621:1;14614:15;14648:4;14645:1;14638:15;14665:191;14705:3;14724:20;14742:1;14724:20;:::i;:::-;14719:25;;14758:20;14776:1;14758:20;:::i;:::-;14753:25;;14801:1;14798;14794:9;14787:16;;14822:3;14819:1;14816:10;14813:36;;;14829:18;;:::i;:::-;14813:36;14665:191;;;;:::o;14862:178::-;15002:30;14998:1;14990:6;14986:14;14979:54;14862:178;:::o;15046:366::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:419::-;15584:4;15622:2;15611:9;15607:18;15599:26;;15671:9;15665:4;15661:20;15657:1;15646:9;15642:17;15635:47;15699:131;15825:4;15699:131;:::i;:::-;15691:139;;15418:419;;;:::o;15843:180::-;15891:77;15888:1;15881:88;15988:4;15985:1;15978:15;16012:4;16009:1;16002:15;16029:320;16073:6;16110:1;16104:4;16100:12;16090:22;;16157:1;16151:4;16147:12;16178:18;16168:81;;16234:4;16226:6;16222:17;16212:27;;16168:81;16296:2;16288:6;16285:14;16265:18;16262:38;16259:84;;16315:18;;:::i;:::-;16259:84;16080:269;16029:320;;;:::o;16355:182::-;16495:34;16491:1;16483:6;16479:14;16472:58;16355:182;:::o;16543:366::-;16685:3;16706:67;16770:2;16765:3;16706:67;:::i;:::-;16699:74;;16782:93;16871:3;16782:93;:::i;:::-;16900:2;16895:3;16891:12;16884:19;;16543:366;;;:::o;16915:419::-;17081:4;17119:2;17108:9;17104:18;17096:26;;17168:9;17162:4;17158:20;17154:1;17143:9;17139:17;17132:47;17196:131;17322:4;17196:131;:::i;:::-;17188:139;;16915:419;;;:::o;17340:410::-;17380:7;17403:20;17421:1;17403:20;:::i;:::-;17398:25;;17437:20;17455:1;17437:20;:::i;:::-;17432:25;;17492:1;17489;17485:9;17514:30;17532:11;17514:30;:::i;:::-;17503:41;;17693:1;17684:7;17680:15;17677:1;17674:22;17654:1;17647:9;17627:83;17604:139;;17723:18;;:::i;:::-;17604:139;17388:362;17340:410;;;;:::o;17756:180::-;17804:77;17801:1;17794:88;17901:4;17898:1;17891:15;17925:4;17922:1;17915:15;17942:185;17982:1;17999:20;18017:1;17999:20;:::i;:::-;17994:25;;18033:20;18051:1;18033:20;:::i;:::-;18028:25;;18072:1;18062:35;;18077:18;;:::i;:::-;18062:35;18119:1;18116;18112:9;18107:14;;17942:185;;;;:::o;18133:234::-;18273:34;18269:1;18261:6;18257:14;18250:58;18342:17;18337:2;18329:6;18325:15;18318:42;18133:234;:::o;18373:366::-;18515:3;18536:67;18600:2;18595:3;18536:67;:::i;:::-;18529:74;;18612:93;18701:3;18612:93;:::i;:::-;18730:2;18725:3;18721:12;18714:19;;18373:366;;;:::o;18745:419::-;18911:4;18949:2;18938:9;18934:18;18926:26;;18998:9;18992:4;18988:20;18984:1;18973:9;18969:17;18962:47;19026:131;19152:4;19026:131;:::i;:::-;19018:139;;18745:419;;;:::o;19170:180::-;19310:32;19306:1;19298:6;19294:14;19287:56;19170:180;:::o;19356:366::-;19498:3;19519:67;19583:2;19578:3;19519:67;:::i;:::-;19512:74;;19595:93;19684:3;19595:93;:::i;:::-;19713:2;19708:3;19704:12;19697:19;;19356:366;;;:::o;19728:419::-;19894:4;19932:2;19921:9;19917:18;19909:26;;19981:9;19975:4;19971:20;19967:1;19956:9;19952:17;19945:47;20009:131;20135:4;20009:131;:::i;:::-;20001:139;;19728:419;;;:::o;20153:221::-;20293:34;20289:1;20281:6;20277:14;20270:58;20362:4;20357:2;20349:6;20345:15;20338:29;20153:221;:::o;20380:366::-;20522:3;20543:67;20607:2;20602:3;20543:67;:::i;:::-;20536:74;;20619:93;20708:3;20619:93;:::i;:::-;20737:2;20732:3;20728:12;20721:19;;20380:366;;;:::o;20752:419::-;20918:4;20956:2;20945:9;20941:18;20933:26;;21005:9;20999:4;20995:20;20991:1;20980:9;20976:17;20969:47;21033:131;21159:4;21033:131;:::i;:::-;21025:139;;20752:419;;;:::o;21177:180::-;21225:77;21222:1;21215:88;21322:4;21319:1;21312:15;21346:4;21343:1;21336:15;21363:102;21405:8;21452:5;21449:1;21445:13;21424:34;;21363:102;;;:::o;21471:848::-;21532:5;21539:4;21563:6;21554:15;;21587:5;21578:14;;21601:712;21622:1;21612:8;21609:15;21601:712;;;21717:4;21712:3;21708:14;21702:4;21699:24;21696:50;;;21726:18;;:::i;:::-;21696:50;21776:1;21766:8;21762:16;21759:451;;;22191:4;22184:5;22180:16;22171:25;;21759:451;22241:4;22235;22231:15;22223:23;;22271:32;22294:8;22271:32;:::i;:::-;22259:44;;21601:712;;;21471:848;;;;;;;:::o;22325:1073::-;22379:5;22570:8;22560:40;;22591:1;22582:10;;22593:5;;22560:40;22619:4;22609:36;;22636:1;22627:10;;22638:5;;22609:36;22705:4;22753:1;22748:27;;;;22789:1;22784:191;;;;22698:277;;22748:27;22766:1;22757:10;;22768:5;;;22784:191;22829:3;22819:8;22816:17;22813:43;;;22836:18;;:::i;:::-;22813:43;22885:8;22882:1;22878:16;22869:25;;22920:3;22913:5;22910:14;22907:40;;;22927:18;;:::i;:::-;22907:40;22960:5;;;22698:277;;23084:2;23074:8;23071:16;23065:3;23059:4;23056:13;23052:36;23034:2;23024:8;23021:16;23016:2;23010:4;23007:12;23003:35;22987:111;22984:246;;;23140:8;23134:4;23130:19;23121:28;;23175:3;23168:5;23165:14;23162:40;;;23182:18;;:::i;:::-;23162:40;23215:5;;22984:246;23255:42;23293:3;23283:8;23277:4;23274:1;23255:42;:::i;:::-;23240:57;;;;23329:4;23324:3;23320:14;23313:5;23310:25;23307:51;;;23338:18;;:::i;:::-;23307:51;23387:4;23380:5;23376:16;23367:25;;22325:1073;;;;;;:::o;23404:281::-;23462:5;23486:23;23504:4;23486:23;:::i;:::-;23478:31;;23530:25;23546:8;23530:25;:::i;:::-;23518:37;;23574:104;23611:66;23601:8;23595:4;23574:104;:::i;:::-;23565:113;;23404:281;;;;:::o;23691:233::-;23730:3;23753:24;23771:5;23753:24;:::i;:::-;23744:33;;23799:66;23792:5;23789:77;23786:103;;23869:18;;:::i;:::-;23786:103;23916:1;23909:5;23905:13;23898:20;;23691:233;;;:::o;23930:227::-;24070:34;24066:1;24058:6;24054:14;24047:58;24139:10;24134:2;24126:6;24122:15;24115:35;23930:227;:::o;24163:366::-;24305:3;24326:67;24390:2;24385:3;24326:67;:::i;:::-;24319:74;;24402:93;24491:3;24402:93;:::i;:::-;24520:2;24515:3;24511:12;24504:19;;24163:366;;;:::o;24535:419::-;24701:4;24739:2;24728:9;24724:18;24716:26;;24788:9;24782:4;24778:20;24774:1;24763:9;24759:17;24752:47;24816:131;24942:4;24816:131;:::i;:::-;24808:139;;24535:419;;;:::o;24960:223::-;25100:34;25096:1;25088:6;25084:14;25077:58;25169:6;25164:2;25156:6;25152:15;25145:31;24960:223;:::o;25189:366::-;25331:3;25352:67;25416:2;25411:3;25352:67;:::i;:::-;25345:74;;25428:93;25517:3;25428:93;:::i;:::-;25546:2;25541:3;25537:12;25530:19;;25189:366;;;:::o;25561:419::-;25727:4;25765:2;25754:9;25750:18;25742:26;;25814:9;25808:4;25804:20;25800:1;25789:9;25785:17;25778:47;25842:131;25968:4;25842:131;:::i;:::-;25834:139;;25561:419;;;:::o;25986:240::-;26126:34;26122:1;26114:6;26110:14;26103:58;26195:23;26190:2;26182:6;26178:15;26171:48;25986:240;:::o;26232:366::-;26374:3;26395:67;26459:2;26454:3;26395:67;:::i;:::-;26388:74;;26471:93;26560:3;26471:93;:::i;:::-;26589:2;26584:3;26580:12;26573:19;;26232:366;;;:::o;26604:419::-;26770:4;26808:2;26797:9;26793:18;26785:26;;26857:9;26851:4;26847:20;26843:1;26832:9;26828:17;26821:47;26885:131;27011:4;26885:131;:::i;:::-;26877:139;;26604:419;;;:::o;27029:239::-;27169:34;27165:1;27157:6;27153:14;27146:58;27238:22;27233:2;27225:6;27221:15;27214:47;27029:239;:::o;27274:366::-;27416:3;27437:67;27501:2;27496:3;27437:67;:::i;:::-;27430:74;;27513:93;27602:3;27513:93;:::i;:::-;27631:2;27626:3;27622:12;27615:19;;27274:366;;;:::o;27646:419::-;27812:4;27850:2;27839:9;27835:18;27827:26;;27899:9;27893:4;27889:20;27885:1;27874:9;27870:17;27863:47;27927:131;28053:4;27927:131;:::i;:::-;27919:139;;27646:419;;;:::o;28071:225::-;28211:34;28207:1;28199:6;28195:14;28188:58;28280:8;28275:2;28267:6;28263:15;28256:33;28071:225;:::o;28302:366::-;28444:3;28465:67;28529:2;28524:3;28465:67;:::i;:::-;28458:74;;28541:93;28630:3;28541:93;:::i;:::-;28659:2;28654:3;28650:12;28643:19;;28302:366;;;:::o;28674:419::-;28840:4;28878:2;28867:9;28863:18;28855:26;;28927:9;28921:4;28917:20;28913:1;28902:9;28898:17;28891:47;28955:131;29081:4;28955:131;:::i;:::-;28947:139;;28674:419;;;:::o;29099:223::-;29239:34;29235:1;29227:6;29223:14;29216:58;29308:6;29303:2;29295:6;29291:15;29284:31;29099:223;:::o;29328:366::-;29470:3;29491:67;29555:2;29550:3;29491:67;:::i;:::-;29484:74;;29567:93;29656:3;29567:93;:::i;:::-;29685:2;29680:3;29676:12;29669:19;;29328:366;;;:::o;29700:419::-;29866:4;29904:2;29893:9;29889:18;29881:26;;29953:9;29947:4;29943:20;29939:1;29928:9;29924:17;29917:47;29981:131;30107:4;29981:131;:::i;:::-;29973:139;;29700:419;;;:::o;30125:221::-;30265:34;30261:1;30253:6;30249:14;30242:58;30334:4;30329:2;30321:6;30317:15;30310:29;30125:221;:::o;30352:366::-;30494:3;30515:67;30579:2;30574:3;30515:67;:::i;:::-;30508:74;;30591:93;30680:3;30591:93;:::i;:::-;30709:2;30704:3;30700:12;30693:19;;30352:366;;;:::o;30724:419::-;30890:4;30928:2;30917:9;30913:18;30905:26;;30977:9;30971:4;30967:20;30963:1;30952:9;30948:17;30941:47;31005:131;31131:4;31005:131;:::i;:::-;30997:139;;30724:419;;;:::o;31149:224::-;31289:34;31285:1;31277:6;31273:14;31266:58;31358:7;31353:2;31345:6;31341:15;31334:32;31149:224;:::o;31379:366::-;31521:3;31542:67;31606:2;31601:3;31542:67;:::i;:::-;31535:74;;31618:93;31707:3;31618:93;:::i;:::-;31736:2;31731:3;31727:12;31720:19;;31379:366;;;:::o;31751:419::-;31917:4;31955:2;31944:9;31940:18;31932:26;;32004:9;31998:4;31994:20;31990:1;31979:9;31975:17;31968:47;32032:131;32158:4;32032:131;:::i;:::-;32024:139;;31751:419;;;:::o;32176:222::-;32316:34;32312:1;32304:6;32300:14;32293:58;32385:5;32380:2;32372:6;32368:15;32361:30;32176:222;:::o;32404:366::-;32546:3;32567:67;32631:2;32626:3;32567:67;:::i;:::-;32560:74;;32643:93;32732:3;32643:93;:::i;:::-;32761:2;32756:3;32752:12;32745:19;;32404:366;;;:::o;32776:419::-;32942:4;32980:2;32969:9;32965:18;32957:26;;33029:9;33023:4;33019:20;33015:1;33004:9;33000:17;32993:47;33057:131;33183:4;33057:131;:::i;:::-;33049:139;;32776:419;;;:::o;33201:225::-;33341:34;33337:1;33329:6;33325:14;33318:58;33410:8;33405:2;33397:6;33393:15;33386:33;33201:225;:::o;33432:366::-;33574:3;33595:67;33659:2;33654:3;33595:67;:::i;:::-;33588:74;;33671:93;33760:3;33671:93;:::i;:::-;33789:2;33784:3;33780:12;33773:19;;33432:366;;;:::o;33804:419::-;33970:4;34008:2;33997:9;33993:18;33985:26;;34057:9;34051:4;34047:20;34043:1;34032:9;34028:17;34021:47;34085:131;34211:4;34085:131;:::i;:::-;34077:139;;33804:419;;;:::o;34229:172::-;34369:24;34365:1;34357:6;34353:14;34346:48;34229:172;:::o;34407:366::-;34549:3;34570:67;34634:2;34629:3;34570:67;:::i;:::-;34563:74;;34646:93;34735:3;34646:93;:::i;:::-;34764:2;34759:3;34755:12;34748:19;;34407:366;;;:::o;34779:419::-;34945:4;34983:2;34972:9;34968:18;34960:26;;35032:9;35026:4;35022:20;35018:1;35007:9;35003:17;34996:47;35060:131;35186:4;35060:131;:::i;:::-;35052:139;;34779:419;;;:::o;35204:240::-;35344:34;35340:1;35332:6;35328:14;35321:58;35413:23;35408:2;35400:6;35396:15;35389:48;35204:240;:::o;35450:366::-;35592:3;35613:67;35677:2;35672:3;35613:67;:::i;:::-;35606:74;;35689:93;35778:3;35689:93;:::i;:::-;35807:2;35802:3;35798:12;35791:19;;35450:366;;;:::o;35822:419::-;35988:4;36026:2;36015:9;36011:18;36003:26;;36075:9;36069:4;36065:20;36061:1;36050:9;36046:17;36039:47;36103:131;36229:4;36103:131;:::i;:::-;36095:139;;35822:419;;;:::o;36247:169::-;36387:21;36383:1;36375:6;36371:14;36364:45;36247:169;:::o;36422:366::-;36564:3;36585:67;36649:2;36644:3;36585:67;:::i;:::-;36578:74;;36661:93;36750:3;36661:93;:::i;:::-;36779:2;36774:3;36770:12;36763:19;;36422:366;;;:::o;36794:419::-;36960:4;36998:2;36987:9;36983:18;36975:26;;37047:9;37041:4;37037:20;37033:1;37022:9;37018:17;37011:47;37075:131;37201:4;37075:131;:::i;:::-;37067:139;;36794:419;;;:::o;37219:194::-;37259:4;37279:20;37297:1;37279:20;:::i;:::-;37274:25;;37313:20;37331:1;37313:20;:::i;:::-;37308:25;;37357:1;37354;37350:9;37342:17;;37381:1;37375:4;37372:11;37369:37;;;37386:18;;:::i;:::-;37369:37;37219:194;;;;:::o;37419:85::-;37464:7;37493:5;37482:16;;37419:85;;;:::o;37510:158::-;37568:9;37601:61;37619:42;37628:32;37654:5;37628:32;:::i;:::-;37619:42;:::i;:::-;37601:61;:::i;:::-;37588:74;;37510:158;;;:::o;37674:147::-;37769:45;37808:5;37769:45;:::i;:::-;37764:3;37757:58;37674:147;;:::o;37827:114::-;37894:6;37928:5;37922:12;37912:22;;37827:114;;;:::o;37947:184::-;38046:11;38080:6;38075:3;38068:19;38120:4;38115:3;38111:14;38096:29;;37947:184;;;;:::o;38137:132::-;38204:4;38227:3;38219:11;;38257:4;38252:3;38248:14;38240:22;;38137:132;;;:::o;38275:108::-;38352:24;38370:5;38352:24;:::i;:::-;38347:3;38340:37;38275:108;;:::o;38389:179::-;38458:10;38479:46;38521:3;38513:6;38479:46;:::i;:::-;38557:4;38552:3;38548:14;38534:28;;38389:179;;;;:::o;38574:113::-;38644:4;38676;38671:3;38667:14;38659:22;;38574:113;;;:::o;38723:732::-;38842:3;38871:54;38919:5;38871:54;:::i;:::-;38941:86;39020:6;39015:3;38941:86;:::i;:::-;38934:93;;39051:56;39101:5;39051:56;:::i;:::-;39130:7;39161:1;39146:284;39171:6;39168:1;39165:13;39146:284;;;39247:6;39241:13;39274:63;39333:3;39318:13;39274:63;:::i;:::-;39267:70;;39360:60;39413:6;39360:60;:::i;:::-;39350:70;;39206:224;39193:1;39190;39186:9;39181:14;;39146:284;;;39150:14;39446:3;39439:10;;38847:608;;;38723:732;;;;:::o;39461:831::-;39724:4;39762:3;39751:9;39747:19;39739:27;;39776:71;39844:1;39833:9;39829:17;39820:6;39776:71;:::i;:::-;39857:80;39933:2;39922:9;39918:18;39909:6;39857:80;:::i;:::-;39984:9;39978:4;39974:20;39969:2;39958:9;39954:18;39947:48;40012:108;40115:4;40106:6;40012:108;:::i;:::-;40004:116;;40130:72;40198:2;40187:9;40183:18;40174:6;40130:72;:::i;:::-;40212:73;40280:3;40269:9;40265:19;40256:6;40212:73;:::i;:::-;39461:831;;;;;;;;:::o

Swarm Source

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