Token Anyerc

Overview ERC-20

Total Supply:
49,950 Anyerc

Holders:
1 addresses

Profile Summary

 
Contract:
0x8b38492ebb4f36564dd72e5583fa233a3fbf12cc0x8B38492ebB4f36564dD72e5583fa233A3Fbf12Cc

Decimals:
18
Balance
0 Anyerc
0x0000000000000000000000000000000000000000
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapV6ERC20

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-03
*/

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity ^0.8.2;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface of the ERC2612 standard as defined in the EIP.
 *
 * Adds the {permit} method, which can be used to change one's
 * {IERC20-allowance} without having to send a transaction, by signing a
 * message. This allows users to spend tokens without having to hold Ether.
 *
 * See https://eips.ethereum.org/EIPS/eip-2612.
 */
interface IERC2612 {

    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);

}

/// @dev Wrapped ERC-20 v10 (AnyswapV3ERC20) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an AnyswapV3ERC20 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ERC-20 from AnyswapV3ERC20, which will then burn AnyswapV3ERC20 token in your wallet. The amount of AnyswapV3ERC20 token in any wallet is always identical to the
/// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet.
interface IAnyswapV3ERC20 is IERC20, IERC2612 {

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ERC-20 withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);
}

interface ITransferReceiver {
    function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}

interface IApprovalReceiver {
    function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract AnyswapV6ERC20 is IAnyswapV3ERC20 {
    using SafeERC20 for IERC20;
    string public name;
    string public symbol;
    uint8  public immutable override decimals;

    address public immutable underlying;

    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant TRANSFER_TYPEHASH = keccak256("Transfer(address owner,address to,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public immutable DOMAIN_SEPARATOR;

    /// @dev Records amount of AnyswapV3ERC20 token owned by account.
    mapping (address => uint256) public override balanceOf;
    uint256 private _totalSupply;

    // init flag for setting immediate vault, needed for CREATE2 support
    bool private _init;

    // flag to enable/disable swapout vs vault.burn so multiple events are triggered
    bool private _vaultOnly;

    // set to 1 second for testing purpose
    uint public delay = 1;


    // set of minters, can be this bridge or other bridges
    mapping(address => bool) public isMinter;
    address[] public minters;

    // primary controller of the token contract
    address public vault;

    address public pendingMinter;
    uint public delayMinter;

    address public pendingVault;
    uint public delayVault;

    modifier onlyAuth() {
        require(isMinter[msg.sender], "AnyswapV4ERC20: FORBIDDEN");
        _;
    }

    modifier onlyVault() {
        require(msg.sender == mpc(), "AnyswapV3ERC20: FORBIDDEN");
        _;
    }

    function owner() public view returns (address) {
        return mpc();
    }

    function mpc() public view returns (address) {
        if (block.timestamp >= delayVault) {
            return pendingVault;
        }
        return vault;
    }

    function setVaultOnly(bool enabled) external onlyVault {
        _vaultOnly = enabled;
    }

    function initVault(address _vault) external onlyVault {
        require(_init);
        vault = _vault;
        pendingVault = _vault;
        isMinter[_vault] = true;
        minters.push(_vault);
        delayVault = block.timestamp;
        _init = false;
    }

    function setVault(address _vault) external onlyVault {
        require(_vault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = _vault;
        delayVault = block.timestamp + delay;
    }

    function applyVault() external onlyVault {
        require(block.timestamp >= delayVault);
        vault = pendingVault;
    }

    function setMinter(address _auth) external onlyVault {
        require(_auth != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingMinter = _auth;
        delayMinter = block.timestamp + delay;
    }

    function applyMinter() external onlyVault {
        require(block.timestamp >= delayMinter);
        isMinter[pendingMinter] = true;
        minters.push(pendingMinter);
    }

    // No time delay revoke minter emergency function
    function revokeMinter(address _auth) external onlyVault {
        isMinter[_auth] = false;
    }

    function getAllMinters() external view returns (address[] memory) {
        return minters;
    }

    function changeVault(address newVault) external onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        vault = newVault;
        pendingVault = newVault;
        emit LogChangeVault(vault, pendingVault, block.timestamp);
        return true;
    }

    function mint(address to, uint256 amount) external onlyAuth returns (bool) {
        _mint(to, amount);
        return true;
    }

    function burn(address from, uint256 amount) external onlyAuth returns (bool) {
        require(from != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(from, amount);
        return true;
    }

    function Swapin(bytes32 txhash, address account, uint256 amount) public onlyAuth returns (bool) {
        _mint(account, amount);
        emit LogSwapin(txhash, account, amount);
        return true;
    }

    function Swapout(uint256 amount, address bindaddr) public returns (bool) {
        require(!_vaultOnly, "AnyswapV4ERC20: onlyAuth");
        require(bindaddr != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(msg.sender, amount);
        emit LogSwapout(msg.sender, bindaddr, amount);
        return true;
    }

    /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
    /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
    mapping (address => uint256) public override nonces;

    /// @dev Records number of AnyswapV3ERC20 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
    mapping (address => mapping (address => uint256)) public override allowance;

    event LogChangeVault(address indexed oldVault, address indexed newVault, uint indexed effectiveTime);
    event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);
    event LogSwapout(address indexed account, address indexed bindaddr, uint amount);

    constructor(string memory _name, string memory _symbol, uint8 _decimals, address _underlying, address _vault) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        underlying = _underlying;
        if (_underlying != address(0x0)) {
            require(_decimals == IERC20(_underlying).decimals());
        }

        // Use init to allow for CREATE2 accross all chains
        _init = true;

        // Disable/Enable swapout for v1 tokens vs mint/burn for v3 tokens
        _vaultOnly = false;

        vault = _vault;
        pendingVault = _vault;
        delayVault = block.timestamp;

        uint256 chainId;
        assembly {chainId := chainid()}
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)));
    }

    /// @dev Returns the total supply of AnyswapV3ERC20 token as the ETH held in this contract.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function deposit() external returns (uint) {
        uint _amount = IERC20(underlying).balanceOf(msg.sender);
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), _amount);
        return _deposit(_amount, msg.sender);
    }

    function deposit(uint amount) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, msg.sender);
    }

    function deposit(uint amount, address to) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, to);
    }

    function depositVault(uint amount, address to) external onlyVault returns (uint) {
        return _deposit(amount, to);
    }

    function _deposit(uint amount, address to) internal returns (uint) {
        require(underlying != address(0x0) && underlying != address(this));
        _mint(to, amount);
        return amount;
    }

    function withdraw() external returns (uint) {
        return _withdraw(msg.sender, balanceOf[msg.sender], msg.sender);
    }

    function withdraw(uint amount) external returns (uint) {
        return _withdraw(msg.sender, amount, msg.sender);
    }

    function withdraw(uint amount, address to) external returns (uint) {
        return _withdraw(msg.sender, amount, to);
    }

    function withdrawVault(address from, uint amount, address to) external onlyVault returns (uint) {
        return _withdraw(from, amount, to);
    }

    function _withdraw(address from, uint amount, address to) internal returns (uint) {
        _burn(from, amount);
        IERC20(underlying).safeTransfer(to, amount);
        return 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
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        balanceOf[account] -= amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    function approve(address spender, uint256 value) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return true;
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
    }

    /// @dev Sets `value` as allowance of `spender` account over `owner` account's AnyswapV3ERC20 token, given `owner` account's signed approval.
    /// Emits {Approval} event.
    /// Requirements:
    ///   - `deadline` must be timestamp in future.
    ///   - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
    ///   - the signature must use `owner` account's current nonce (see {nonces}).
    ///   - the signer cannot be zero address and must be `owner` account.
    /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
    /// AnyswapV3ERC20 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                PERMIT_TYPEHASH,
                target,
                spender,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        // _approve(owner, spender, value);
        allowance[target][spender] = value;
        emit Approval(target, spender, value);
    }

    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override returns (bool) {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                TRANSFER_TYPEHASH,
                target,
                to,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[target];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[target] = balance - value;
        balanceOf[to] += value;
        emit Transfer(target, to, value);

        return true;
    }

    function verifyEIP712(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                hashStruct));
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    function verifyPersonalSign(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = keccak256(
            abi.encodePacked(
                "\x19Ethereum Signed Message:\n32",
                DOMAIN_SEPARATOR,
                hashStruct));
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`).
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    function transfer(address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from account (`from`) to account (`to`) using allowance mechanism.
    /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `from` account must have at least `value` balance of AnyswapV3ERC20 token.
    ///   - `from` account must have approved caller to spend at least `value` of AnyswapV3ERC20 token, unless `from` and caller are the same account.
    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "AnyswapV3ERC20: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }

        uint256 balance = balanceOf[from];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[from] = balance - value;
        balanceOf[to] += value;
        emit Transfer(from, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
    }
}

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_underlying","type":"address"},{"internalType":"address","name":"_vault","type":"address"}],"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":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRANSFER_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMinter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"initVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setVaultOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60e060405260016005553480156200001657600080fd5b50604051620053bf380380620053bf83398181016040528101906200003c9190620005d6565b846000908051906020019062000054929190620002e6565b5083600190805190602001906200006d929190620002e6565b508260ff1660808160ff16815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200016a578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015791906200069c565b60ff168360ff16146200016957600080fd5b5b6001600460006101000a81548160ff0219169083151502179055506000600460016101000a81548160ff02191690831515021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600c8190555060004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620002609190620007de565b60405180910390206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001620002bd9594939291906200083e565b6040516020818303038152906040528051906020012060c081815250505050505050506200089b565b828054620002f490620006fd565b90600052602060002090601f01602090048101928262000318576000855562000364565b82601f106200033357805160ff191683800117855562000364565b8280016001018555821562000364579182015b828111156200036357825182559160200191906001019062000346565b5b50905062000373919062000377565b5090565b5b808211156200039257600081600090555060010162000378565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003ff82620003b4565b810181811067ffffffffffffffff82111715620004215762000420620003c5565b5b80604052505050565b60006200043662000396565b9050620004448282620003f4565b919050565b600067ffffffffffffffff821115620004675762000466620003c5565b5b6200047282620003b4565b9050602081019050919050565b60005b838110156200049f57808201518184015260208101905062000482565b83811115620004af576000848401525b50505050565b6000620004cc620004c68462000449565b6200042a565b905082815260208101848484011115620004eb57620004ea620003af565b5b620004f88482856200047f565b509392505050565b600082601f830112620005185762000517620003aa565b5b81516200052a848260208601620004b5565b91505092915050565b600060ff82169050919050565b6200054b8162000533565b81146200055757600080fd5b50565b6000815190506200056b8162000540565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200059e8262000571565b9050919050565b620005b08162000591565b8114620005bc57600080fd5b50565b600081519050620005d081620005a5565b92915050565b600080600080600060a08688031215620005f557620005f4620003a0565b5b600086015167ffffffffffffffff811115620006165762000615620003a5565b5b620006248882890162000500565b955050602086015167ffffffffffffffff811115620006485762000647620003a5565b5b620006568882890162000500565b945050604062000669888289016200055a565b93505060606200067c88828901620005bf565b92505060806200068f88828901620005bf565b9150509295509295909350565b600060208284031215620006b557620006b4620003a0565b5b6000620006c5848285016200055a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200071657607f821691505b602082108114156200072d576200072c620006ce565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546200076281620006fd565b6200076e818662000733565b945060018216600081146200078c57600181146200079e57620007d5565b60ff19831686528186019350620007d5565b620007a9856200073e565b60005b83811015620007cd57815481890152600182019150602081019050620007ac565b838801955050505b50505092915050565b6000620007ec828462000753565b915081905092915050565b6000819050919050565b6200080c81620007f7565b82525050565b6000819050919050565b620008278162000812565b82525050565b620008388162000591565b82525050565b600060a08201905062000855600083018862000801565b62000864602083018762000801565b62000873604083018662000801565b6200088260608301856200081c565b6200089160808301846200082d565b9695505050505050565b60805160a05160c051614ab56200090a6000396000818161141b0152818161315f0152613275015260008181611fa90152818161200201528181612534015281816128f30152818161299501528181612fc30152818161357301526135ca015260006113f70152614ab56000f3fe608060405234801561001057600080fd5b50600436106102b85760003560e01c806370a0823111610182578063bebbf4d0116100e9578063d505accf116100a2578063ec126c771161007c578063ec126c771461094b578063f75c26641461097b578063fbfa77cf14610999578063fca3b5aa146109b7576102b8565b8063d505accf146108f5578063d93f244514610911578063dd62ed3e1461091b576102b8565b8063bebbf4d014610821578063c308124014610851578063c4b740f51461086f578063cae9ca511461088b578063cfbd4885146108bb578063d0e30db0146108d7576102b8565b806395d89b411161013b57806395d89b41146107255780639dc29fac14610743578063a045442c14610773578063a9059cbb14610791578063aa271e1a146107c1578063b6b55f25146107f1576102b8565b806370a082311461063b5780637ecebe001461066b5780638623ec7b1461069b57806387689e28146106cb5780638da5cb5b146106e957806391c5df4914610707576102b8565b80633644e5151161022657806360e232a9116101df57806360e232a914610553578063628d6cba146105835780636817031b146105b35780636a42b8f8146105cf5780636e553f65146105ed5780636f307dc31461061d576102b8565b80633644e515146104695780633ccfd60b146104875780634000aea0146104a557806340c10f19146104d557806352113ba714610505578063605629d614610523576102b8565b806318160ddd1161027857806318160ddd1461039357806323b872dd146103b15780632e1a7d4d146103e15780632ebe3fbb1461041157806330adf81f1461042d578063313ce5671461044b576102b8565b806239d6ec146102bd578062bf26f4146102ed578062f714ce1461030b57806306fdde031461033b578063095ea7b3146103595780630d707df814610389575b600080fd5b6102d760048036038101906102d291906138fe565b6109d3565b6040516102e49190613960565b60405180910390f35b6102f5610a5e565b6040516103029190613994565b60405180910390f35b610325600480360381019061032091906139af565b610a82565b6040516103329190613960565b60405180910390f35b610343610a97565b6040516103509190613a88565b60405180910390f35b610373600480360381019061036e9190613aaa565b610b25565b6040516103809190613b05565b60405180910390f35b610391610c17565b005b61039b610d9c565b6040516103a89190613960565b60405180910390f35b6103cb60048036038101906103c69190613b20565b610da6565b6040516103d89190613b05565b60405180910390f35b6103fb60048036038101906103f69190613b73565b6111cd565b6040516104089190613960565b60405180910390f35b61042b60048036038101906104269190613ba0565b6111e1565b005b6104356113d1565b6040516104429190613994565b60405180910390f35b6104536113f5565b6040516104609190613be9565b60405180910390f35b610471611419565b60405161047e9190613994565b60405180910390f35b61048f61143d565b60405161049c9190613960565b60405180910390f35b6104bf60048036038101906104ba9190613c69565b61148e565b6040516104cc9190613b05565b60405180910390f35b6104ef60048036038101906104ea9190613aaa565b61171e565b6040516104fc9190613b05565b60405180910390f35b61050d6117c0565b60405161051a9190613cec565b60405180910390f35b61053d60048036038101906105389190613d5f565b6117e6565b60405161054a9190613b05565b60405180910390f35b61056d60048036038101906105689190613ba0565b611b10565b60405161057a9190613b05565b60405180910390f35b61059d600480360381019061059891906139af565b611d21565b6040516105aa9190613b05565b60405180910390f35b6105cd60048036038101906105c89190613ba0565b611e5c565b005b6105d7611f99565b6040516105e49190613960565b60405180910390f35b610607600480360381019061060291906139af565b611f9f565b6040516106149190613960565b60405180910390f35b610625612000565b6040516106329190613cec565b60405180910390f35b61065560048036038101906106509190613ba0565b612024565b6040516106629190613960565b60405180910390f35b61068560048036038101906106809190613ba0565b61203c565b6040516106929190613960565b60405180910390f35b6106b560048036038101906106b09190613b73565b612054565b6040516106c29190613cec565b60405180910390f35b6106d3612093565b6040516106e09190613960565b60405180910390f35b6106f1612099565b6040516106fe9190613cec565b60405180910390f35b61070f6120a8565b60405161071c9190613cec565b60405180910390f35b61072d6120ce565b60405161073a9190613a88565b60405180910390f35b61075d60048036038101906107589190613aaa565b61215c565b60405161076a9190613b05565b60405180910390f35b61077b61226e565b6040516107889190613ebf565b60405180910390f35b6107ab60048036038101906107a69190613aaa565b6122fc565b6040516107b89190613b05565b60405180910390f35b6107db60048036038101906107d69190613ba0565b61250a565b6040516107e89190613b05565b60405180910390f35b61080b60048036038101906108069190613b73565b61252a565b6040516108189190613960565b60405180910390f35b61083b600480360381019061083691906139af565b61258a565b6040516108489190613960565b60405180910390f35b610859612613565b6040516108669190613960565b60405180910390f35b61088960048036038101906108849190613f0d565b612619565b005b6108a560048036038101906108a09190613c69565b6126ab565b6040516108b29190613b05565b60405180910390f35b6108d560048036038101906108d09190613ba0565b61281e565b005b6108df6128ee565b6040516108ec9190613960565b60405180910390f35b61090f600480360381019061090a9190613d5f565b6129ea565b005b610919612bef565b005b61093560048036038101906109309190613f3a565b612cd8565b6040516109429190613960565b60405180910390f35b61096560048036038101906109609190613f7a565b612cfd565b6040516109729190613b05565b60405180910390f35b610983612def565b6040516109909190613cec565b60405180910390f35b6109a1612e4d565b6040516109ae9190613cec565b60405180910390f35b6109d160048036038101906109cc9190613ba0565b612e73565b005b60006109dd612def565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190614019565b60405180910390fd5b610a55848484612fb0565b90509392505050565b7f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b6000610a8f338484612fb0565b905092915050565b60008054610aa490614068565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad090614068565b8015610b1d5780601f10610af257610100808354040283529160200191610b1d565b820191906000526020600020905b815481529060010190602001808311610b0057829003601f168201915b505050505081565b600081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c059190613960565b60405180910390a36001905092915050565b610c1f612def565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390614019565b60405180910390fd5b600a54421015610c9b57600080fd5b600160066000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600354905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580610e0f57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b610e1857600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611030576000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461102e5782811015610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d9061410c565b60405180910390fd5b60008382610f44919061415b565b905080600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110249190613960565b60405180910390a3505b505b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90614201565b60405180910390fd5b82816110c3919061415b565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111559190614221565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516111b99190613960565b60405180910390a360019150509392505050565b60006111da338333612fb0565b9050919050565b6111e9612def565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d90614019565b60405180910390fd5b600460009054906101000a900460ff1661126f57600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600c819055506000600460006101000a81548160ff02191690831515021790555050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061148933600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205433612fb0565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415806114f757503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b61150057600080fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e90614201565b60405180910390fd5b8481611593919061415b565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116259190614221565b925050819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516116899190613960565b60405180910390a38573ffffffffffffffffffffffffffffffffffffffff1663a4c0ed36338787876040518563ffffffff1660e01b81526004016116d094939291906142c4565b6020604051808303816000875af11580156116ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117139190614319565b915050949350505050565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a390614392565b60405180910390fd5b6117b68383613011565b6001905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008442111561182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906143fe565b60405180910390fd5b60007f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59898989600d60008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118a19061441e565b919050558a6040516020016118bb96959493929190614467565b6040516020818303038152906040528051906020012090506118e0898287878761315a565b806118f457506118f38982878787613270565b5b6118fd57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158061196557503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b61196e57600080fd5b6000600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050878110156119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ec90614201565b60405180910390fd5b8781611a01919061415b565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555087600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a939190614221565b925050819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051611af79190613960565b60405180910390a3600192505050979650505050505050565b6000611b1a612def565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7e90614019565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90614514565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac60405160405180910390a460019050919050565b6000600460019054906101000a900460ff1615611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90614580565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90614514565b60405180910390fd5b611ded3384613386565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c88885604051611e4a9190613960565b60405180910390a36001905092915050565b611e64612def565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890614019565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614514565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055442611f909190614221565b600c8190555050565b60055481565b6000611fee3330857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166134cf909392919063ffffffff16565b611ff88383613558565b905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915090505481565b600d6020528060005260406000206000915090505481565b6007818154811061206457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b60006120a3612def565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600180546120db90614068565b80601f016020809104026020016040519081016040528092919081815260200182805461210790614068565b80156121545780601f1061212957610100808354040283529160200191612154565b820191906000526020600020905b81548152906001019060200180831161213757829003601f168201915b505050505081565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e190614392565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561225a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225190614514565b60405180910390fd5b6122648383613386565b6001905092915050565b606060078054806020026020016040519081016040528092919081815260200182805480156122f257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116122a8575b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158061236557503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b61236e57600080fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614201565b60405180910390fd5b8281612401919061415b565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124939190614221565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516124f79190613960565b60405180910390a3600191505092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b60006125793330847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166134cf909392919063ffffffff16565b6125838233613558565b9050919050565b6000612594612def565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f890614019565b60405180910390fd5b61260b8383613558565b905092915050565b600a5481565b612621612def565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461268e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268590614019565b60405180910390fd5b80600460016101000a81548160ff02191690831515021790555050565b600083600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258660405161278b9190613960565b60405180910390a38473ffffffffffffffffffffffffffffffffffffffff1662ba451f338686866040518563ffffffff1660e01b81526004016127d194939291906142c4565b6020604051808303816000875af11580156127f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128149190614319565b9050949350505050565b612826612def565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288a90614019565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161294a9190613cec565b602060405180830381865afa158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298b91906145b5565b90506129da3330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166134cf909392919063ffffffff16565b6129e48133613558565b91505090565b83421115612a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a24906143fe565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888600d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612aa39061441e565b9190505589604051602001612abd96959493929190614467565b604051602081830303815290604052805190602001209050612ae2888286868661315a565b80612af65750612af58882868686613270565b5b612aff57600080fd5b85600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92588604051612bdd9190613960565b60405180910390a35050505050505050565b612bf7612def565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5b90614019565b60405180910390fd5b600c54421015612c7357600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e602052816000526040600020602052806000526040600020600091509150505481565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8290614392565b60405180910390fd5b612d958383613011565b8273ffffffffffffffffffffffffffffffffffffffff16847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d6184604051612ddc9190613960565b60405180910390a3600190509392505050565b6000600c544210612e2457600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612e4a565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b90565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612e7b612def565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edf90614019565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4f90614514565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055442612fa79190614221565b600a8190555050565b6000612fbc8484613386565b61300782847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661361e9092919063ffffffff16565b8290509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613081576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130789061462e565b60405180910390fd5b80600360008282546130939190614221565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130e99190614221565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161314e9190613960565b60405180910390a35050565b6000807f0000000000000000000000000000000000000000000000000000000000000000866040516020016131909291906146c6565b6040516020818303038152906040528051906020012090506000600182878787604051600081526020016040526040516131cd94939291906146fd565b6020604051602081039080840390855afa1580156131ef573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561326357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b9250505095945050505050565b6000807f0000000000000000000000000000000000000000000000000000000000000000866040516020016132a692919061478e565b6040516020818303038152906040528051906020012090506000600182878787604051600081526020016040526040516132e394939291906146fd565b6020604051602081039080840390855afa158015613305573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561337957508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b9250505095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ed90614837565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613445919061415b565b92505081905550806003600082825461345e919061415b565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134c39190613960565b60405180910390a35050565b613552846323b872dd60e01b8585856040516024016134f093929190614857565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506136a4565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161415801561360257503073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614155b61360b57600080fd5b6136158284613011565b82905092915050565b61369f8363a9059cbb60e01b848460405160240161363d92919061488e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506136a4565b505050565b6136c38273ffffffffffffffffffffffffffffffffffffffff16613815565b613702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f990614903565b60405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff168360405161372a919061496a565b6000604051808303816000865af19150503d8060008114613767576040519150601f19603f3d011682016040523d82523d6000602084013e61376c565b606091505b5091509150816137b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a8906149cd565b60405180910390fd5b60008151111561380f57808060200190518101906137cf9190614319565b61380e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380590614a5f565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156138575750808214155b92505050919050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138958261386a565b9050919050565b6138a58161388a565b81146138b057600080fd5b50565b6000813590506138c28161389c565b92915050565b6000819050919050565b6138db816138c8565b81146138e657600080fd5b50565b6000813590506138f8816138d2565b92915050565b60008060006060848603121561391757613916613860565b5b6000613925868287016138b3565b9350506020613936868287016138e9565b9250506040613947868287016138b3565b9150509250925092565b61395a816138c8565b82525050565b60006020820190506139756000830184613951565b92915050565b6000819050919050565b61398e8161397b565b82525050565b60006020820190506139a96000830184613985565b92915050565b600080604083850312156139c6576139c5613860565b5b60006139d4858286016138e9565b92505060206139e5858286016138b3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a29578082015181840152602081019050613a0e565b83811115613a38576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a5a826139ef565b613a6481856139fa565b9350613a74818560208601613a0b565b613a7d81613a3e565b840191505092915050565b60006020820190508181036000830152613aa28184613a4f565b905092915050565b60008060408385031215613ac157613ac0613860565b5b6000613acf858286016138b3565b9250506020613ae0858286016138e9565b9150509250929050565b60008115159050919050565b613aff81613aea565b82525050565b6000602082019050613b1a6000830184613af6565b92915050565b600080600060608486031215613b3957613b38613860565b5b6000613b47868287016138b3565b9350506020613b58868287016138b3565b9250506040613b69868287016138e9565b9150509250925092565b600060208284031215613b8957613b88613860565b5b6000613b97848285016138e9565b91505092915050565b600060208284031215613bb657613bb5613860565b5b6000613bc4848285016138b3565b91505092915050565b600060ff82169050919050565b613be381613bcd565b82525050565b6000602082019050613bfe6000830184613bda565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613c2957613c28613c04565b5b8235905067ffffffffffffffff811115613c4657613c45613c09565b5b602083019150836001820283011115613c6257613c61613c0e565b5b9250929050565b60008060008060608587031215613c8357613c82613860565b5b6000613c91878288016138b3565b9450506020613ca2878288016138e9565b935050604085013567ffffffffffffffff811115613cc357613cc2613865565b5b613ccf87828801613c13565b925092505092959194509250565b613ce68161388a565b82525050565b6000602082019050613d016000830184613cdd565b92915050565b613d1081613bcd565b8114613d1b57600080fd5b50565b600081359050613d2d81613d07565b92915050565b613d3c8161397b565b8114613d4757600080fd5b50565b600081359050613d5981613d33565b92915050565b600080600080600080600060e0888a031215613d7e57613d7d613860565b5b6000613d8c8a828b016138b3565b9750506020613d9d8a828b016138b3565b9650506040613dae8a828b016138e9565b9550506060613dbf8a828b016138e9565b9450506080613dd08a828b01613d1e565b93505060a0613de18a828b01613d4a565b92505060c0613df28a828b01613d4a565b91505092959891949750929550565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e368161388a565b82525050565b6000613e488383613e2d565b60208301905092915050565b6000602082019050919050565b6000613e6c82613e01565b613e768185613e0c565b9350613e8183613e1d565b8060005b83811015613eb2578151613e998882613e3c565b9750613ea483613e54565b925050600181019050613e85565b5085935050505092915050565b60006020820190508181036000830152613ed98184613e61565b905092915050565b613eea81613aea565b8114613ef557600080fd5b50565b600081359050613f0781613ee1565b92915050565b600060208284031215613f2357613f22613860565b5b6000613f3184828501613ef8565b91505092915050565b60008060408385031215613f5157613f50613860565b5b6000613f5f858286016138b3565b9250506020613f70858286016138b3565b9150509250929050565b600080600060608486031215613f9357613f92613860565b5b6000613fa186828701613d4a565b9350506020613fb2868287016138b3565b9250506040613fc3868287016138e9565b9150509250925092565b7f416e7973776170563345524332303a20464f5242494444454e00000000000000600082015250565b60006140036019836139fa565b915061400e82613fcd565b602082019050919050565b6000602082019050818103600083015261403281613ff6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061408057607f821691505b6020821081141561409457614093614039565b5b50919050565b7f416e7973776170563345524332303a207265717565737420657863656564732060008201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b60006140f66029836139fa565b91506141018261409a565b604082019050919050565b60006020820190508181036000830152614125816140e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614166826138c8565b9150614171836138c8565b9250828210156141845761418361412c565b5b828203905092915050565b7f416e7973776170563345524332303a207472616e7366657220616d6f756e742060008201527f657863656564732062616c616e63650000000000000000000000000000000000602082015250565b60006141eb602f836139fa565b91506141f68261418f565b604082019050919050565b6000602082019050818103600083015261421a816141de565b9050919050565b600061422c826138c8565b9150614237836138c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561426c5761426b61412c565b5b828201905092915050565b600082825260208201905092915050565b82818337600083830152505050565b60006142a38385614277565b93506142b0838584614288565b6142b983613a3e565b840190509392505050565b60006060820190506142d96000830187613cdd565b6142e66020830186613951565b81810360408301526142f9818486614297565b905095945050505050565b60008151905061431381613ee1565b92915050565b60006020828403121561432f5761432e613860565b5b600061433d84828501614304565b91505092915050565b7f416e7973776170563445524332303a20464f5242494444454e00000000000000600082015250565b600061437c6019836139fa565b915061438782614346565b602082019050919050565b600060208201905081810360008301526143ab8161436f565b9050919050565b7f416e7973776170563345524332303a2045787069726564207065726d69740000600082015250565b60006143e8601e836139fa565b91506143f3826143b2565b602082019050919050565b60006020820190508181036000830152614417816143db565b9050919050565b6000614429826138c8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561445c5761445b61412c565b5b600182019050919050565b600060c08201905061447c6000830189613985565b6144896020830188613cdd565b6144966040830187613cdd565b6144a36060830186613951565b6144b06080830185613951565b6144bd60a0830184613951565b979650505050505050565b7f416e7973776170563345524332303a2061646472657373283078302900000000600082015250565b60006144fe601c836139fa565b9150614509826144c8565b602082019050919050565b6000602082019050818103600083015261452d816144f1565b9050919050565b7f416e7973776170563445524332303a206f6e6c79417574680000000000000000600082015250565b600061456a6018836139fa565b915061457582614534565b602082019050919050565b600060208201905081810360008301526145998161455d565b9050919050565b6000815190506145af816138d2565b92915050565b6000602082840312156145cb576145ca613860565b5b60006145d9848285016145a0565b91505092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614618601f836139fa565b9150614623826145e2565b602082019050919050565b600060208201905081810360008301526146478161460b565b9050919050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b600061468f60028361464e565b915061469a82614659565b600282019050919050565b6000819050919050565b6146c06146bb8261397b565b6146a5565b82525050565b60006146d182614682565b91506146dd82856146af565b6020820191506146ed82846146af565b6020820191508190509392505050565b60006080820190506147126000830187613985565b61471f6020830186613bda565b61472c6040830185613985565b6147396060830184613985565b95945050505050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000614778601c8361464e565b915061478382614742565b601c82019050919050565b60006147998261476b565b91506147a582856146af565b6020820191506147b582846146af565b6020820191508190509392505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006148216021836139fa565b915061482c826147c5565b604082019050919050565b6000602082019050818103600083015261485081614814565b9050919050565b600060608201905061486c6000830186613cdd565b6148796020830185613cdd565b6148866040830184613951565b949350505050565b60006040820190506148a36000830185613cdd565b6148b06020830184613951565b9392505050565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400600082015250565b60006148ed601f836139fa565b91506148f8826148b7565b602082019050919050565b6000602082019050818103600083015261491c816148e0565b9050919050565b600081519050919050565b600081905092915050565b600061494482614923565b61494e818561492e565b935061495e818560208601613a0b565b80840191505092915050565b60006149768284614939565b915081905092915050565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564600082015250565b60006149b76020836139fa565b91506149c282614981565b602082019050919050565b600060208201905081810360008301526149e6816149aa565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614a49602a836139fa565b9150614a54826149ed565b604082019050919050565b60006020820190508181036000830152614a7881614a3c565b905091905056fea2646970667358221220a683bfdb9e7fe03a7c1b27eb69dc8ef3ec521bb0c77c0be9e64e3a80e1226e9464736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d71cb0c4a82c36312b5b83c43f351b882756957f0000000000000000000000000000000000000000000000000000000000000006416e7965726300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006416e796572630000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d71cb0c4a82c36312b5b83c43f351b882756957f0000000000000000000000000000000000000000000000000000000000000006416e7965726300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006416e796572630000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Anyerc
Arg [1] : _symbol (string): Anyerc
Arg [2] : _decimals (uint8): 18
Arg [3] : _underlying (address): 0x0000000000000000000000000000000000000000
Arg [4] : _vault (address): 0xd71cb0c4a82c36312b5b83c43f351b882756957f

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000d71cb0c4a82c36312b5b83c43f351b882756957f
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 416e796572630000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [8] : 416e796572630000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

5731:17940:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13739:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6104:136;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13605:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5814:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15462:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8565:179;;;:::i;:::-;;12232:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21591:927;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13475:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7708:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5960:137;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5866:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6247;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13341:126;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23145:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9334:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7046:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18060:938;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9020:306;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9907:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7988:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6729:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12793:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5916:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6368:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10507:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6868:24;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7080:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7345:78;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6979:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5839:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9475:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8913:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20264:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6821:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12596:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12994:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7014:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7606:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16148:356;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8807:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12342:246;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17337:715;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8208:129;;;:::i;:::-;;10728:75;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9690:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7431:167;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6950:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8345:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13739:149;13829:4;7282:5;:3;:5::i;:::-;7268:19;;:10;:19;;;7260:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13853:27:::1;13863:4;13869:6;13877:2;13853:9;:27::i;:::-;13846:34;;13739:149:::0;;;;;:::o;6104:136::-;6148:92;6104:136;:::o;13605:126::-;13666:4;13690:33;13700:10;13712:6;13720:2;13690:9;:33::i;:::-;13683:40;;13605:126;;;;:::o;5814:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15462:265::-;15538:4;15638:5;15605:9;:21;15615:10;15605:21;;;;;;;;;;;;;;;:30;15627:7;15605:30;;;;;;;;;;;;;;;:38;;;;15680:7;15659:36;;15668:10;15659:36;;;15689:5;15659:36;;;;;;:::i;:::-;;;;;;;;15715:4;15708:11;;15462:265;;;;:::o;8565:179::-;7282:5;:3;:5::i;:::-;7268:19;;:10;:19;;;7260:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;8645:11:::1;;8626:15;:30;;8618:39;;;::::0;::::1;;8694:4;8668:8;:23;8677:13;;;;;;;;;;;8668:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;8709:7;8722:13;;;;;;;;;;;8709:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8565:179::o:0;12232:102::-;12287:7;12314:12;;12307:19;;12232:102;:::o;21591:927::-;21681:4;21720:1;21706:16;;:2;:16;;;;:39;;;;21740:4;21726:19;;:2;:19;;;;21706:39;21698:48;;;;;;21769:10;21761:18;;:4;:18;;;21757:477;;21857:15;21875:9;:15;21885:4;21875:15;;;;;;;;;;;;;;;:27;21891:10;21875:27;;;;;;;;;;;;;;;;21857:45;;21932:17;21921:7;:28;21917:306;;21989:5;21978:7;:16;;21970:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22059:15;22087:5;22077:7;:15;;;;:::i;:::-;22059:33;;22141:7;22111:9;:15;22121:4;22111:15;;;;;;;;;;;;;;;:27;22127:10;22111:27;;;;;;;;;;;;;;;:37;;;;22187:10;22172:35;;22181:4;22172:35;;;22199:7;22172:35;;;;;;:::i;:::-;;;;;;;;21951:272;21917:306;21781:453;21757:477;22246:15;22264:9;:15;22274:4;22264:15;;;;;;;;;;;;;;;;22246:33;;22309:5;22298:7;:16;;22290:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22407:5;22397:7;:15;;;;:::i;:::-;22379:9;:15;22389:4;22379:15;;;;;;;;;;;;;;;:33;;;;22440:5;22423:9;:13;22433:2;22423:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;22476:2;22461:25;;22470:4;22461:25;;;22480:5;22461:25;;;;;;:::i;:::-;;;;;;;;22506:4;22499:11;;;21591:927;;;;;:::o;13475:122::-;13524:4;13548:41;13558:10;13570:6;13578:10;13548:9;:41::i;:::-;13541:48;;13475:122;;;:::o;7708:272::-;7282:5;:3;:5::i;:::-;7268:19;;:10;:19;;;7260:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;7781:5:::1;;;;;;;;;;;7773:14;;;::::0;::::1;;7806:6;7798:5;;:14;;;;;;;;;;;;;;;;;;7838:6;7823:12;;:21;;;;;;;;;;;;;;;;;;7874:4;7855:8;:16;7864:6;7855:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;7889:7;7902:6;7889:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7933:15;7920:10;:28;;;;7967:5;7959;;:13;;;;;;;;;;;;;;;;;;7708:272:::0;:::o;5960:137::-;6002:95;5960:137;:::o;5866:41::-;;;:::o;6247:::-;;;:::o;13341:126::-;13379:4;13403:56;13413:10;13425:9;:21;13435:10;13425:21;;;;;;;;;;;;;;;;13448:10;13403:9;:56::i;:::-;13396:63;;13341:126;:::o;23145:523::-;23242:4;23281:1;23267:16;;:2;:16;;;;:39;;;;23301:4;23287:19;;:2;:19;;;;23267:39;23259:48;;;;;;23320:15;23338:9;:21;23348:10;23338:21;;;;;;;;;;;;;;;;23320:39;;23389:5;23378:7;:16;;23370:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23493:5;23483:7;:15;;;;:::i;:::-;23459:9;:21;23469:10;23459:21;;;;;;;;;;;;;;;:39;;;;23526:5;23509:9;:13;23519:2;23509:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;23568:2;23547:31;;23556:10;23547:31;;;23572:5;23547:31;;;;;;:::i;:::-;;;;;;;;23616:2;23598:37;;;23636:10;23648:5;23655:4;;23598:62;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23591:69;;;23145:523;;;;;;:::o;9334:133::-;9403:4;7150:8;:20;7159:10;7150:20;;;;;;;;;;;;;;;;;;;;;;;;;7142:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9420:17:::1;9426:2;9430:6;9420:5;:17::i;:::-;9455:4;9448:11;;9334:133:::0;;;;:::o;7046:27::-;;;;;;;;;;;;;:::o;18060:938::-;18207:4;18251:8;18232:15;:27;;18224:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;18307:18;6148:92;18417:6;18442:2;18463:5;18487:6;:14;18494:6;18487:14;;;;;;;;;;;;;;;;:16;;;;;;;;;:::i;:::-;;;;;18522:8;18352:179;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18328:204;;;;;;18307:225;;18553:41;18566:6;18574:10;18586:1;18589;18592;18553:12;:41::i;:::-;:92;;;;18598:47;18617:6;18625:10;18637:1;18640;18643;18598:18;:47::i;:::-;18553:92;18545:101;;;;;;18681:1;18667:16;;:2;:16;;;;:39;;;;18701:4;18687:19;;:2;:19;;;;18667:39;18659:48;;;;;;18720:15;18738:9;:17;18748:6;18738:17;;;;;;;;;;;;;;;;18720:35;;18785:5;18774:7;:16;;18766:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;18885:5;18875:7;:15;;;;:::i;:::-;18855:9;:17;18865:6;18855:17;;;;;;;;;;;;;;;:35;;;;18918:5;18901:9;:13;18911:2;18901:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;18956:2;18939:27;;18948:6;18939:27;;;18960:5;18939:27;;;;;;:::i;:::-;;;;;;;;18986:4;18979:11;;;;18060:938;;;;;;;;;:::o;9020:306::-;9087:4;7282:5;:3;:5::i;:::-;7268:19;;:10;:19;;;7260:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;9132:1:::1;9112:22;;:8;:22;;;;9104:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9186:8;9178:5;;:16;;;;;;;;;;;;;;;;;;9220:8;9205:12;;:23;;;;;;;;;;;;;;;;;;9280:15;9266:12;;;;;;;;;;;9244:52;;9259:5;;;;;;;;;;;9244:52;;;;;;;;;;;;9314:4;9307:11;;9020:306:::0;;;:::o;9907:328::-;9974:4;10000:10;;;;;;;;;;;9999:11;9991:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;10078:1;10058:22;;:8;:22;;;;10050:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;10124:25;10130:10;10142:6;10124:5;:25::i;:::-;10188:8;10165:40;;10176:10;10165:40;;;10198:6;10165:40;;;;;;:::i;:::-;;;;;;;;10223:4;10216:11;;9907:328;;;;:::o;7988:212::-;7282:5;:3;:5::i;:::-;7268:19;;:10;:19;;;7260:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;8078:1:::1;8060:20;;:6;:20;;;;8052:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;8139:6;8124:12;;:21;;;;;;;;;;;;;;;;;;8187:5;;8169:15;:23;;;;:::i;:::-;8156:10;:36;;;;7988:212:::0;:::o;6729:21::-;;;;:::o;12793:193::-;12853:4;12870:70;12906:10;12926:4;12933:6;12877:10;12870:35;;;;:70;;;;;;:::i;:::-;12958:20;12967:6;12975:2;12958:8;:20::i;:::-;12951:27;;12793:193;;;;:::o;5916:35::-;;;:::o;6368:54::-;;;;;;;;;;;;;;;;;:::o;10507:51::-;;;;;;;;;;;;;;;;;:::o;6868:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7080:22::-;;;;:::o;7345:78::-;7383:7;7410:5;:3;:5::i;:::-;7403:12;;7345:78;:::o;6979:28::-;;;;;;;;;;;;;:::o;5839:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9475:207::-;9546:4;7150:8;:20;7159:10;7150:20;;;;;;;;;;;;;;;;;;;;;;;;;7142:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9587:1:::1;9571:18;;:4;:18;;;;9563:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;9633:19;9639:4;9645:6;9633:5;:19::i;:::-;9670:4;9663:11;;9475:207:::0;;;;:::o;8913:99::-;8961:16;8997:7;8990:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8913:99;:::o;20264:438::-;20336:4;20375:1;20361:16;;:2;:16;;;;:39;;;;20395:4;20381:19;;:2;:19;;;;20361:39;20353:48;;;;;;20412:15;20430:9;:21;20440:10;20430:21;;;;;;;;;;;;;;;;20412:39;;20481:5;20470:7;:16;;20462:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;20585:5;20575:7;:15;;;;:::i;:::-;20551:9;:21;20561:10;20551:21;;;;;;;;;;;;;;;:39;;;;20618:5;20601:9;:13;20611:2;20601:13;;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;20660:2;20639:31;;20648:10;20639:31;;;20664:5;20639:31;;;;;;:::i;:::-;;;;;;;;20690:4;20683:11;;;20264:438;;;;:::o;6821:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;12596:189::-;12644:4;12661:70;12697:10;12717:4;12724:6;12668:10;12661:35;;;;:70;;;;;;:::i;:::-;12749:28;12758:6;12766:10;12749:8;:28::i;:::-;12742:35;;12596:189;;;:::o;12994:127::-;13069:4;7282:5;:3;:5::i;:::-;7268:19;;:10;:19;;;7260:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13093:20:::1;13102:6;13110:2;13093:8;:20::i;:::-;13086:27;;12994:127:::0;;;;:::o;7014:23::-;;;;:::o;7606:94::-;7282:5;:3;:5::i;:::-;7268:19;;:10;:19;;;7260:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;7685:7:::1;7672:10;;:20;;;;;;;;;;;;;;;;;;7606:94:::0;:::o;16148:356::-;16252:4;16352:5;16319:9;:21;16329:10;16319:21;;;;;;;;;;;;;;;:30;16341:7;16319:30;;;;;;;;;;;;;;;:38;;;;16394:7;16373:36;;16382:10;16373:36;;;16403:5;16373:36;;;;;;:::i;:::-;;;;;;;;16447:7;16429:42;;;16472:10;16484:5;16491:4;;16429:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16422:74;;16148:356;;;;;;:::o;8807:98::-;7282:5;:3;:5::i;:::-;7268:19;;:10;:19;;;7260:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;8892:5:::1;8874:8;:15;8883:5;8874:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;8807:98:::0;:::o;12342:246::-;12379:4;12396:12;12418:10;12411:28;;;12440:10;12411:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12396:55;;12462:71;12498:10;12518:4;12525:7;12469:10;12462:35;;;;:71;;;;;;:::i;:::-;12551:29;12560:7;12569:10;12551:8;:29::i;:::-;12544:36;;;12342:246;:::o;17337:715::-;17506:8;17487:15;:27;;17479:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17562:18;6002:95;17670:6;17695:7;17721:5;17745:6;:14;17752:6;17745:14;;;;;;;;;;;;;;;;:16;;;;;;;;;:::i;:::-;;;;;17780:8;17607:182;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17583:207;;;;;;17562:228;;17811:41;17824:6;17832:10;17844:1;17847;17850;17811:12;:41::i;:::-;:92;;;;17856:47;17875:6;17883:10;17895:1;17898;17901;17856:18;:47::i;:::-;17811:92;17803:101;;;;;;17991:5;17962:9;:17;17972:6;17962:17;;;;;;;;;;;;;;;:26;17980:7;17962:26;;;;;;;;;;;;;;;:34;;;;18029:7;18012:32;;18021:6;18012:32;;;18038:5;18012:32;;;;;;:::i;:::-;;;;;;;;17468:584;17337:715;;;;;;;:::o;8208:129::-;7282:5;:3;:5::i;:::-;7268:19;;:10;:19;;;7260:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;8287:10:::1;;8268:15;:29;;8260:38;;;::::0;::::1;;8317:12;;;;;;;;;;;8309:5;;:20;;;;;;;;;;;;;;;;;;8208:129::o:0;10728:75::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9690:209::-;9780:4;7150:8;:20;7159:10;7150:20;;;;;;;;;;;;;;;;;;;;;;;;;7142:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9797:22:::1;9803:7;9812:6;9797:5;:22::i;:::-;9853:7;9835:34;;9845:6;9835:34;9862:6;9835:34;;;;;;:::i;:::-;;;;;;;;9887:4;9880:11;;9690:209:::0;;;;;:::o;7431:167::-;7467:7;7510:10;;7491:15;:29;7487:81;;7544:12;;;;;;;;;;;7537:19;;;;7487:81;7585:5;;;;;;;;;;;7578:12;;7431:167;;:::o;6950:20::-;;;;;;;;;;;;;:::o;8345:212::-;7282:5;:3;:5::i;:::-;7268:19;;:10;:19;;;7260:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;8434:1:::1;8417:19;;:5;:19;;;;8409:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;8496:5;8480:13;;:21;;;;;;;;;;;;;;;;;;8544:5;;8526:15;:23;;;;:::i;:::-;8512:11;:37;;;;8345:212:::0;:::o;13896:198::-;13972:4;13989:19;13995:4;14001:6;13989:5;:19::i;:::-;14019:43;14051:2;14055:6;14026:10;14019:31;;;;:43;;;;;:::i;:::-;14080:6;14073:13;;13896:198;;;;;:::o;14375:268::-;14470:1;14451:21;;:7;:21;;;;14443:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;14537:6;14521:12;;:22;;;;;;;:::i;:::-;;;;;;;;14576:6;14554:9;:18;14564:7;14554:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;14619:7;14598:37;;14615:1;14598:37;;;14628:6;14598:37;;;;;;:::i;:::-;;;;;;;;14375:268;;:::o;19006:399::-;19118:4;19135:12;19238:16;19273:10;19174:110;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19150:135;;;;;;19135:150;;19296:14;19313:24;19323:4;19329:1;19332;19335;19313:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19296:41;;19374:1;19356:20;;:6;:20;;;;:40;;;;;19390:6;19380:16;;:6;:16;;;19356:40;19348:49;;;;19006:399;;;;;;;:::o;19413:429::-;19531:4;19548:12;19675:16;19710:10;19587:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19563:159;;;;;;19548:174;;19733:14;19750:24;19760:4;19766:1;19769;19772;19750:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19733:41;;19811:1;19793:20;;:6;:20;;;;:40;;;;;19827:6;19817:16;;:6;:16;;;19793:40;19785:49;;;;19413:429;;;;;;;:::o;14975:270::-;15070:1;15051:21;;:7;:21;;;;15043:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15145:6;15123:9;:18;15133:7;15123:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;15178:6;15162:12;;:22;;;;;;;:::i;:::-;;;;;;;;15226:1;15200:37;;15209:7;15200:37;;;15230:6;15200:37;;;;;;:::i;:::-;;;;;;;;14975:270;;:::o;4567:201::-;4665:95;4684:5;4714:27;;;4743:4;4749:2;4753:5;4691:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4665:18;:95::i;:::-;4567:201;;;;:::o;13129:204::-;13190:4;13237:3;13215:26;;:10;:26;;;;:57;;;;;13267:4;13245:27;;:10;:27;;;;13215:57;13207:66;;;;;;13284:17;13290:2;13294:6;13284:5;:17::i;:::-;13319:6;13312:13;;13129:204;;;;:::o;4386:173::-;4466:85;4485:5;4515:23;;;4540:2;4544:5;4492:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4466:18;:85::i;:::-;4386:173;;;:::o;5126:598::-;5214:27;5222:5;5214:25;;;:27::i;:::-;5206:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5351:12;5365:23;5400:5;5392:19;;5412:4;5392:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5350:67;;;;5436:7;5428:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;5517:1;5497:10;:17;:21;5493:224;;;5639:10;5628:30;;;;;;;;;;;;:::i;:::-;5620:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5493:224;5195:529;;5126:598;;:::o;3946:374::-;4006:4;4023:16;4050:19;4072:66;4050:88;;;;4241:7;4229:20;4217:32;;4281:3;4269:15;;:8;:15;;:42;;;;;4300:11;4288:8;:23;;4269:42;4261:51;;;;3946:374;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:619::-;1274:6;1282;1290;1339:2;1327:9;1318:7;1314:23;1310:32;1307:119;;;1345:79;;:::i;:::-;1307:119;1465:1;1490:53;1535:7;1526:6;1515:9;1511:22;1490:53;:::i;:::-;1480:63;;1436:117;1592:2;1618:53;1663:7;1654:6;1643:9;1639:22;1618:53;:::i;:::-;1608:63;;1563:118;1720:2;1746:53;1791:7;1782:6;1771:9;1767:22;1746:53;:::i;:::-;1736:63;;1691:118;1197:619;;;;;:::o;1822:118::-;1909:24;1927:5;1909:24;:::i;:::-;1904:3;1897:37;1822:118;;:::o;1946:222::-;2039:4;2077:2;2066:9;2062:18;2054:26;;2090:71;2158:1;2147:9;2143:17;2134:6;2090:71;:::i;:::-;1946:222;;;;:::o;2174:77::-;2211:7;2240:5;2229:16;;2174:77;;;:::o;2257:118::-;2344:24;2362:5;2344:24;:::i;:::-;2339:3;2332:37;2257:118;;:::o;2381:222::-;2474:4;2512:2;2501:9;2497:18;2489:26;;2525:71;2593:1;2582:9;2578:17;2569:6;2525:71;:::i;:::-;2381:222;;;;:::o;2609:474::-;2677:6;2685;2734:2;2722:9;2713:7;2709:23;2705:32;2702:119;;;2740:79;;:::i;:::-;2702:119;2860:1;2885:53;2930:7;2921:6;2910:9;2906:22;2885:53;:::i;:::-;2875:63;;2831:117;2987:2;3013:53;3058:7;3049:6;3038:9;3034:22;3013:53;:::i;:::-;3003:63;;2958:118;2609:474;;;;;:::o;3089:99::-;3141:6;3175:5;3169:12;3159:22;;3089:99;;;:::o;3194:169::-;3278:11;3312:6;3307:3;3300:19;3352:4;3347:3;3343:14;3328:29;;3194:169;;;;:::o;3369:307::-;3437:1;3447:113;3461:6;3458:1;3455:13;3447:113;;;3546:1;3541:3;3537:11;3531:18;3527:1;3522:3;3518:11;3511:39;3483:2;3480:1;3476:10;3471:15;;3447:113;;;3578:6;3575:1;3572:13;3569:101;;;3658:1;3649:6;3644:3;3640:16;3633:27;3569:101;3418:258;3369:307;;;:::o;3682:102::-;3723:6;3774:2;3770:7;3765:2;3758:5;3754:14;3750:28;3740:38;;3682:102;;;:::o;3790:364::-;3878:3;3906:39;3939:5;3906:39;:::i;:::-;3961:71;4025:6;4020:3;3961:71;:::i;:::-;3954:78;;4041:52;4086:6;4081:3;4074:4;4067:5;4063:16;4041:52;:::i;:::-;4118:29;4140:6;4118:29;:::i;:::-;4113:3;4109:39;4102:46;;3882:272;3790:364;;;;:::o;4160:313::-;4273:4;4311:2;4300:9;4296:18;4288:26;;4360:9;4354:4;4350:20;4346:1;4335:9;4331:17;4324:47;4388:78;4461:4;4452:6;4388:78;:::i;:::-;4380:86;;4160:313;;;;:::o;4479:474::-;4547:6;4555;4604:2;4592:9;4583:7;4579:23;4575:32;4572:119;;;4610:79;;:::i;:::-;4572:119;4730:1;4755:53;4800:7;4791:6;4780:9;4776:22;4755:53;:::i;:::-;4745:63;;4701:117;4857:2;4883:53;4928:7;4919:6;4908:9;4904:22;4883:53;:::i;:::-;4873:63;;4828:118;4479:474;;;;;:::o;4959:90::-;4993:7;5036:5;5029:13;5022:21;5011:32;;4959:90;;;:::o;5055:109::-;5136:21;5151:5;5136:21;:::i;:::-;5131:3;5124:34;5055:109;;:::o;5170:210::-;5257:4;5295:2;5284:9;5280:18;5272:26;;5308:65;5370:1;5359:9;5355:17;5346:6;5308:65;:::i;:::-;5170:210;;;;:::o;5386:619::-;5463:6;5471;5479;5528:2;5516:9;5507:7;5503:23;5499:32;5496:119;;;5534:79;;:::i;:::-;5496:119;5654:1;5679:53;5724:7;5715:6;5704:9;5700:22;5679:53;:::i;:::-;5669:63;;5625:117;5781:2;5807:53;5852:7;5843:6;5832:9;5828:22;5807:53;:::i;:::-;5797:63;;5752:118;5909:2;5935:53;5980:7;5971:6;5960:9;5956:22;5935:53;:::i;:::-;5925:63;;5880:118;5386:619;;;;;:::o;6011:329::-;6070:6;6119:2;6107:9;6098:7;6094:23;6090:32;6087:119;;;6125:79;;:::i;:::-;6087:119;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6011:329;;;;:::o;6346:::-;6405:6;6454:2;6442:9;6433:7;6429:23;6425:32;6422:119;;;6460:79;;:::i;:::-;6422:119;6580:1;6605:53;6650:7;6641:6;6630:9;6626:22;6605:53;:::i;:::-;6595:63;;6551:117;6346:329;;;;:::o;6681:86::-;6716:7;6756:4;6749:5;6745:16;6734:27;;6681:86;;;:::o;6773:112::-;6856:22;6872:5;6856:22;:::i;:::-;6851:3;6844:35;6773:112;;:::o;6891:214::-;6980:4;7018:2;7007:9;7003:18;6995:26;;7031:67;7095:1;7084:9;7080:17;7071:6;7031:67;:::i;:::-;6891:214;;;;:::o;7111:117::-;7220:1;7217;7210:12;7234:117;7343:1;7340;7333:12;7357:117;7466:1;7463;7456:12;7493:552;7550:8;7560:6;7610:3;7603:4;7595:6;7591:17;7587:27;7577:122;;7618:79;;:::i;:::-;7577:122;7731:6;7718:20;7708:30;;7761:18;7753:6;7750:30;7747:117;;;7783:79;;:::i;:::-;7747:117;7897:4;7889:6;7885:17;7873:29;;7951:3;7943:4;7935:6;7931:17;7921:8;7917:32;7914:41;7911:128;;;7958:79;;:::i;:::-;7911:128;7493:552;;;;;:::o;8051:817::-;8139:6;8147;8155;8163;8212:2;8200:9;8191:7;8187:23;8183:32;8180:119;;;8218:79;;:::i;:::-;8180:119;8338:1;8363:53;8408:7;8399:6;8388:9;8384:22;8363:53;:::i;:::-;8353:63;;8309:117;8465:2;8491:53;8536:7;8527:6;8516:9;8512:22;8491:53;:::i;:::-;8481:63;;8436:118;8621:2;8610:9;8606:18;8593:32;8652:18;8644:6;8641:30;8638:117;;;8674:79;;:::i;:::-;8638:117;8787:64;8843:7;8834:6;8823:9;8819:22;8787:64;:::i;:::-;8769:82;;;;8564:297;8051:817;;;;;;;:::o;8874:118::-;8961:24;8979:5;8961:24;:::i;:::-;8956:3;8949:37;8874:118;;:::o;8998:222::-;9091:4;9129:2;9118:9;9114:18;9106:26;;9142:71;9210:1;9199:9;9195:17;9186:6;9142:71;:::i;:::-;8998:222;;;;:::o;9226:118::-;9297:22;9313:5;9297:22;:::i;:::-;9290:5;9287:33;9277:61;;9334:1;9331;9324:12;9277:61;9226:118;:::o;9350:135::-;9394:5;9432:6;9419:20;9410:29;;9448:31;9473:5;9448:31;:::i;:::-;9350:135;;;;:::o;9491:122::-;9564:24;9582:5;9564:24;:::i;:::-;9557:5;9554:35;9544:63;;9603:1;9600;9593:12;9544:63;9491:122;:::o;9619:139::-;9665:5;9703:6;9690:20;9681:29;;9719:33;9746:5;9719:33;:::i;:::-;9619:139;;;;:::o;9764:1199::-;9875:6;9883;9891;9899;9907;9915;9923;9972:3;9960:9;9951:7;9947:23;9943:33;9940:120;;;9979:79;;:::i;:::-;9940:120;10099:1;10124:53;10169:7;10160:6;10149:9;10145:22;10124:53;:::i;:::-;10114:63;;10070:117;10226:2;10252:53;10297:7;10288:6;10277:9;10273:22;10252:53;:::i;:::-;10242:63;;10197:118;10354:2;10380:53;10425:7;10416:6;10405:9;10401:22;10380:53;:::i;:::-;10370:63;;10325:118;10482:2;10508:53;10553:7;10544:6;10533:9;10529:22;10508:53;:::i;:::-;10498:63;;10453:118;10610:3;10637:51;10680:7;10671:6;10660:9;10656:22;10637:51;:::i;:::-;10627:61;;10581:117;10737:3;10764:53;10809:7;10800:6;10789:9;10785:22;10764:53;:::i;:::-;10754:63;;10708:119;10866:3;10893:53;10938:7;10929:6;10918:9;10914:22;10893:53;:::i;:::-;10883:63;;10837:119;9764:1199;;;;;;;;;;:::o;10969:114::-;11036:6;11070:5;11064:12;11054:22;;10969:114;;;:::o;11089:184::-;11188:11;11222:6;11217:3;11210:19;11262:4;11257:3;11253:14;11238:29;;11089:184;;;;:::o;11279:132::-;11346:4;11369:3;11361:11;;11399:4;11394:3;11390:14;11382:22;;11279:132;;;:::o;11417:108::-;11494:24;11512:5;11494:24;:::i;:::-;11489:3;11482:37;11417:108;;:::o;11531:179::-;11600:10;11621:46;11663:3;11655:6;11621:46;:::i;:::-;11699:4;11694:3;11690:14;11676:28;;11531:179;;;;:::o;11716:113::-;11786:4;11818;11813:3;11809:14;11801:22;;11716:113;;;:::o;11865:732::-;11984:3;12013:54;12061:5;12013:54;:::i;:::-;12083:86;12162:6;12157:3;12083:86;:::i;:::-;12076:93;;12193:56;12243:5;12193:56;:::i;:::-;12272:7;12303:1;12288:284;12313:6;12310:1;12307:13;12288:284;;;12389:6;12383:13;12416:63;12475:3;12460:13;12416:63;:::i;:::-;12409:70;;12502:60;12555:6;12502:60;:::i;:::-;12492:70;;12348:224;12335:1;12332;12328:9;12323:14;;12288:284;;;12292:14;12588:3;12581:10;;11989:608;;;11865:732;;;;:::o;12603:373::-;12746:4;12784:2;12773:9;12769:18;12761:26;;12833:9;12827:4;12823:20;12819:1;12808:9;12804:17;12797:47;12861:108;12964:4;12955:6;12861:108;:::i;:::-;12853:116;;12603:373;;;;:::o;12982:116::-;13052:21;13067:5;13052:21;:::i;:::-;13045:5;13042:32;13032:60;;13088:1;13085;13078:12;13032:60;12982:116;:::o;13104:133::-;13147:5;13185:6;13172:20;13163:29;;13201:30;13225:5;13201:30;:::i;:::-;13104:133;;;;:::o;13243:323::-;13299:6;13348:2;13336:9;13327:7;13323:23;13319:32;13316:119;;;13354:79;;:::i;:::-;13316:119;13474:1;13499:50;13541:7;13532:6;13521:9;13517:22;13499:50;:::i;:::-;13489:60;;13445:114;13243:323;;;;:::o;13572:474::-;13640:6;13648;13697:2;13685:9;13676:7;13672:23;13668:32;13665:119;;;13703:79;;:::i;:::-;13665:119;13823:1;13848:53;13893:7;13884:6;13873:9;13869:22;13848:53;:::i;:::-;13838:63;;13794:117;13950:2;13976:53;14021:7;14012:6;14001:9;13997:22;13976:53;:::i;:::-;13966:63;;13921:118;13572:474;;;;;:::o;14052:619::-;14129:6;14137;14145;14194:2;14182:9;14173:7;14169:23;14165:32;14162:119;;;14200:79;;:::i;:::-;14162:119;14320:1;14345:53;14390:7;14381:6;14370:9;14366:22;14345:53;:::i;:::-;14335:63;;14291:117;14447:2;14473:53;14518:7;14509:6;14498:9;14494:22;14473:53;:::i;:::-;14463:63;;14418:118;14575:2;14601:53;14646:7;14637:6;14626:9;14622:22;14601:53;:::i;:::-;14591:63;;14546:118;14052:619;;;;;:::o;14677:175::-;14817:27;14813:1;14805:6;14801:14;14794:51;14677:175;:::o;14858:366::-;15000:3;15021:67;15085:2;15080:3;15021:67;:::i;:::-;15014:74;;15097:93;15186:3;15097:93;:::i;:::-;15215:2;15210:3;15206:12;15199:19;;14858:366;;;:::o;15230:419::-;15396:4;15434:2;15423:9;15419:18;15411:26;;15483:9;15477:4;15473:20;15469:1;15458:9;15454:17;15447:47;15511:131;15637:4;15511:131;:::i;:::-;15503:139;;15230:419;;;:::o;15655:180::-;15703:77;15700:1;15693:88;15800:4;15797:1;15790:15;15824:4;15821:1;15814:15;15841:320;15885:6;15922:1;15916:4;15912:12;15902:22;;15969:1;15963:4;15959:12;15990:18;15980:81;;16046:4;16038:6;16034:17;16024:27;;15980:81;16108:2;16100:6;16097:14;16077:18;16074:38;16071:84;;;16127:18;;:::i;:::-;16071:84;15892:269;15841:320;;;:::o;16167:228::-;16307:34;16303:1;16295:6;16291:14;16284:58;16376:11;16371:2;16363:6;16359:15;16352:36;16167:228;:::o;16401:366::-;16543:3;16564:67;16628:2;16623:3;16564:67;:::i;:::-;16557:74;;16640:93;16729:3;16640:93;:::i;:::-;16758:2;16753:3;16749:12;16742:19;;16401:366;;;:::o;16773:419::-;16939:4;16977:2;16966:9;16962:18;16954:26;;17026:9;17020:4;17016:20;17012:1;17001:9;16997:17;16990:47;17054:131;17180:4;17054:131;:::i;:::-;17046:139;;16773:419;;;:::o;17198:180::-;17246:77;17243:1;17236:88;17343:4;17340:1;17333:15;17367:4;17364:1;17357:15;17384:191;17424:4;17444:20;17462:1;17444:20;:::i;:::-;17439:25;;17478:20;17496:1;17478:20;:::i;:::-;17473:25;;17517:1;17514;17511:8;17508:34;;;17522:18;;:::i;:::-;17508:34;17567:1;17564;17560:9;17552:17;;17384:191;;;;:::o;17581:234::-;17721:34;17717:1;17709:6;17705:14;17698:58;17790:17;17785:2;17777:6;17773:15;17766:42;17581:234;:::o;17821:366::-;17963:3;17984:67;18048:2;18043:3;17984:67;:::i;:::-;17977:74;;18060:93;18149:3;18060:93;:::i;:::-;18178:2;18173:3;18169:12;18162:19;;17821:366;;;:::o;18193:419::-;18359:4;18397:2;18386:9;18382:18;18374:26;;18446:9;18440:4;18436:20;18432:1;18421:9;18417:17;18410:47;18474:131;18600:4;18474:131;:::i;:::-;18466:139;;18193:419;;;:::o;18618:305::-;18658:3;18677:20;18695:1;18677:20;:::i;:::-;18672:25;;18711:20;18729:1;18711:20;:::i;:::-;18706:25;;18865:1;18797:66;18793:74;18790:1;18787:81;18784:107;;;18871:18;;:::i;:::-;18784:107;18915:1;18912;18908:9;18901:16;;18618:305;;;;:::o;18929:168::-;19012:11;19046:6;19041:3;19034:19;19086:4;19081:3;19077:14;19062:29;;18929:168;;;;:::o;19103:154::-;19187:6;19182:3;19177;19164:30;19249:1;19240:6;19235:3;19231:16;19224:27;19103:154;;;:::o;19285:301::-;19381:3;19402:70;19465:6;19460:3;19402:70;:::i;:::-;19395:77;;19482:43;19518:6;19513:3;19506:5;19482:43;:::i;:::-;19550:29;19572:6;19550:29;:::i;:::-;19545:3;19541:39;19534:46;;19285:301;;;;;:::o;19592:549::-;19769:4;19807:2;19796:9;19792:18;19784:26;;19820:71;19888:1;19877:9;19873:17;19864:6;19820:71;:::i;:::-;19901:72;19969:2;19958:9;19954:18;19945:6;19901:72;:::i;:::-;20020:9;20014:4;20010:20;20005:2;19994:9;19990:18;19983:48;20048:86;20129:4;20120:6;20112;20048:86;:::i;:::-;20040:94;;19592:549;;;;;;;:::o;20147:137::-;20201:5;20232:6;20226:13;20217:22;;20248:30;20272:5;20248:30;:::i;:::-;20147:137;;;;:::o;20290:345::-;20357:6;20406:2;20394:9;20385:7;20381:23;20377:32;20374:119;;;20412:79;;:::i;:::-;20374:119;20532:1;20557:61;20610:7;20601:6;20590:9;20586:22;20557:61;:::i;:::-;20547:71;;20503:125;20290:345;;;;:::o;20641:175::-;20781:27;20777:1;20769:6;20765:14;20758:51;20641:175;:::o;20822:366::-;20964:3;20985:67;21049:2;21044:3;20985:67;:::i;:::-;20978:74;;21061:93;21150:3;21061:93;:::i;:::-;21179:2;21174:3;21170:12;21163:19;;20822:366;;;:::o;21194:419::-;21360:4;21398:2;21387:9;21383:18;21375:26;;21447:9;21441:4;21437:20;21433:1;21422:9;21418:17;21411:47;21475:131;21601:4;21475:131;:::i;:::-;21467:139;;21194:419;;;:::o;21619:180::-;21759:32;21755:1;21747:6;21743:14;21736:56;21619:180;:::o;21805:366::-;21947:3;21968:67;22032:2;22027:3;21968:67;:::i;:::-;21961:74;;22044:93;22133:3;22044:93;:::i;:::-;22162:2;22157:3;22153:12;22146:19;;21805:366;;;:::o;22177:419::-;22343:4;22381:2;22370:9;22366:18;22358:26;;22430:9;22424:4;22420:20;22416:1;22405:9;22401:17;22394:47;22458:131;22584:4;22458:131;:::i;:::-;22450:139;;22177:419;;;:::o;22602:233::-;22641:3;22664:24;22682:5;22664:24;:::i;:::-;22655:33;;22710:66;22703:5;22700:77;22697:103;;;22780:18;;:::i;:::-;22697:103;22827:1;22820:5;22816:13;22809:20;;22602:233;;;:::o;22841:775::-;23074:4;23112:3;23101:9;23097:19;23089:27;;23126:71;23194:1;23183:9;23179:17;23170:6;23126:71;:::i;:::-;23207:72;23275:2;23264:9;23260:18;23251:6;23207:72;:::i;:::-;23289;23357:2;23346:9;23342:18;23333:6;23289:72;:::i;:::-;23371;23439:2;23428:9;23424:18;23415:6;23371:72;:::i;:::-;23453:73;23521:3;23510:9;23506:19;23497:6;23453:73;:::i;:::-;23536;23604:3;23593:9;23589:19;23580:6;23536:73;:::i;:::-;22841:775;;;;;;;;;:::o;23622:178::-;23762:30;23758:1;23750:6;23746:14;23739:54;23622:178;:::o;23806:366::-;23948:3;23969:67;24033:2;24028:3;23969:67;:::i;:::-;23962:74;;24045:93;24134:3;24045:93;:::i;:::-;24163:2;24158:3;24154:12;24147:19;;23806:366;;;:::o;24178:419::-;24344:4;24382:2;24371:9;24367:18;24359:26;;24431:9;24425:4;24421:20;24417:1;24406:9;24402:17;24395:47;24459:131;24585:4;24459:131;:::i;:::-;24451:139;;24178:419;;;:::o;24603:174::-;24743:26;24739:1;24731:6;24727:14;24720:50;24603:174;:::o;24783:366::-;24925:3;24946:67;25010:2;25005:3;24946:67;:::i;:::-;24939:74;;25022:93;25111:3;25022:93;:::i;:::-;25140:2;25135:3;25131:12;25124:19;;24783:366;;;:::o;25155:419::-;25321:4;25359:2;25348:9;25344:18;25336:26;;25408:9;25402:4;25398:20;25394:1;25383:9;25379:17;25372:47;25436:131;25562:4;25436:131;:::i;:::-;25428:139;;25155:419;;;:::o;25580:143::-;25637:5;25668:6;25662:13;25653:22;;25684:33;25711:5;25684:33;:::i;:::-;25580:143;;;;:::o;25729:351::-;25799:6;25848:2;25836:9;25827:7;25823:23;25819:32;25816:119;;;25854:79;;:::i;:::-;25816:119;25974:1;25999:64;26055:7;26046:6;26035:9;26031:22;25999:64;:::i;:::-;25989:74;;25945:128;25729:351;;;;:::o;26086:181::-;26226:33;26222:1;26214:6;26210:14;26203:57;26086:181;:::o;26273:366::-;26415:3;26436:67;26500:2;26495:3;26436:67;:::i;:::-;26429:74;;26512:93;26601:3;26512:93;:::i;:::-;26630:2;26625:3;26621:12;26614:19;;26273:366;;;:::o;26645:419::-;26811:4;26849:2;26838:9;26834:18;26826:26;;26898:9;26892:4;26888:20;26884:1;26873:9;26869:17;26862:47;26926:131;27052:4;26926:131;:::i;:::-;26918:139;;26645:419;;;:::o;27070:148::-;27172:11;27209:3;27194:18;;27070:148;;;;:::o;27224:214::-;27364:66;27360:1;27352:6;27348:14;27341:90;27224:214;:::o;27444:400::-;27604:3;27625:84;27707:1;27702:3;27625:84;:::i;:::-;27618:91;;27718:93;27807:3;27718:93;:::i;:::-;27836:1;27831:3;27827:11;27820:18;;27444:400;;;:::o;27850:79::-;27889:7;27918:5;27907:16;;27850:79;;;:::o;27935:157::-;28040:45;28060:24;28078:5;28060:24;:::i;:::-;28040:45;:::i;:::-;28035:3;28028:58;27935:157;;:::o;28098:663::-;28339:3;28361:148;28505:3;28361:148;:::i;:::-;28354:155;;28519:75;28590:3;28581:6;28519:75;:::i;:::-;28619:2;28614:3;28610:12;28603:19;;28632:75;28703:3;28694:6;28632:75;:::i;:::-;28732:2;28727:3;28723:12;28716:19;;28752:3;28745:10;;28098:663;;;;;:::o;28767:545::-;28940:4;28978:3;28967:9;28963:19;28955:27;;28992:71;29060:1;29049:9;29045:17;29036:6;28992:71;:::i;:::-;29073:68;29137:2;29126:9;29122:18;29113:6;29073:68;:::i;:::-;29151:72;29219:2;29208:9;29204:18;29195:6;29151:72;:::i;:::-;29233;29301:2;29290:9;29286:18;29277:6;29233:72;:::i;:::-;28767:545;;;;;;;:::o;29318:214::-;29458:66;29454:1;29446:6;29442:14;29435:90;29318:214;:::o;29538:402::-;29698:3;29719:85;29801:2;29796:3;29719:85;:::i;:::-;29712:92;;29813:93;29902:3;29813:93;:::i;:::-;29931:2;29926:3;29922:12;29915:19;;29538:402;;;:::o;29946:663::-;30187:3;30209:148;30353:3;30209:148;:::i;:::-;30202:155;;30367:75;30438:3;30429:6;30367:75;:::i;:::-;30467:2;30462:3;30458:12;30451:19;;30480:75;30551:3;30542:6;30480:75;:::i;:::-;30580:2;30575:3;30571:12;30564:19;;30600:3;30593:10;;29946:663;;;;;:::o;30615:220::-;30755:34;30751:1;30743:6;30739:14;30732:58;30824:3;30819:2;30811:6;30807:15;30800:28;30615:220;:::o;30841:366::-;30983:3;31004:67;31068:2;31063:3;31004:67;:::i;:::-;30997:74;;31080:93;31169:3;31080:93;:::i;:::-;31198:2;31193:3;31189:12;31182:19;;30841:366;;;:::o;31213:419::-;31379:4;31417:2;31406:9;31402:18;31394:26;;31466:9;31460:4;31456:20;31452:1;31441:9;31437:17;31430:47;31494:131;31620:4;31494:131;:::i;:::-;31486:139;;31213:419;;;:::o;31638:442::-;31787:4;31825:2;31814:9;31810:18;31802:26;;31838:71;31906:1;31895:9;31891:17;31882:6;31838:71;:::i;:::-;31919:72;31987:2;31976:9;31972:18;31963:6;31919:72;:::i;:::-;32001;32069:2;32058:9;32054:18;32045:6;32001:72;:::i;:::-;31638:442;;;;;;:::o;32086:332::-;32207:4;32245:2;32234:9;32230:18;32222:26;;32258:71;32326:1;32315:9;32311:17;32302:6;32258:71;:::i;:::-;32339:72;32407:2;32396:9;32392:18;32383:6;32339:72;:::i;:::-;32086:332;;;;;:::o;32424:181::-;32564:33;32560:1;32552:6;32548:14;32541:57;32424:181;:::o;32611:366::-;32753:3;32774:67;32838:2;32833:3;32774:67;:::i;:::-;32767:74;;32850:93;32939:3;32850:93;:::i;:::-;32968:2;32963:3;32959:12;32952:19;;32611:366;;;:::o;32983:419::-;33149:4;33187:2;33176:9;33172:18;33164:26;;33236:9;33230:4;33226:20;33222:1;33211:9;33207:17;33200:47;33264:131;33390:4;33264:131;:::i;:::-;33256:139;;32983:419;;;:::o;33408:98::-;33459:6;33493:5;33487:12;33477:22;;33408:98;;;:::o;33512:147::-;33613:11;33650:3;33635:18;;33512:147;;;;:::o;33665:373::-;33769:3;33797:38;33829:5;33797:38;:::i;:::-;33851:88;33932:6;33927:3;33851:88;:::i;:::-;33844:95;;33948:52;33993:6;33988:3;33981:4;33974:5;33970:16;33948:52;:::i;:::-;34025:6;34020:3;34016:16;34009:23;;33773:265;33665:373;;;;:::o;34044:271::-;34174:3;34196:93;34285:3;34276:6;34196:93;:::i;:::-;34189:100;;34306:3;34299:10;;34044:271;;;;:::o;34321:182::-;34461:34;34457:1;34449:6;34445:14;34438:58;34321:182;:::o;34509:366::-;34651:3;34672:67;34736:2;34731:3;34672:67;:::i;:::-;34665:74;;34748:93;34837:3;34748:93;:::i;:::-;34866:2;34861:3;34857:12;34850:19;;34509:366;;;:::o;34881:419::-;35047:4;35085:2;35074:9;35070:18;35062:26;;35134:9;35128:4;35124:20;35120:1;35109:9;35105:17;35098:47;35162:131;35288:4;35162:131;:::i;:::-;35154:139;;34881:419;;;:::o;35306:229::-;35446:34;35442:1;35434:6;35430:14;35423:58;35515:12;35510:2;35502:6;35498:15;35491:37;35306:229;:::o;35541:366::-;35683:3;35704:67;35768:2;35763:3;35704:67;:::i;:::-;35697:74;;35780:93;35869:3;35780:93;:::i;:::-;35898:2;35893:3;35889:12;35882:19;;35541:366;;;:::o;35913:419::-;36079:4;36117:2;36106:9;36102:18;36094:26;;36166:9;36160:4;36156:20;36152:1;36141:9;36137:17;36130:47;36194:131;36320:4;36194:131;:::i;:::-;36186:139;;35913:419;;;:::o

Swarm Source

ipfs://a683bfdb9e7fe03a7c1b27eb69dc8ef3ec521bb0c77c0be9e64e3a80e1226e94
Loading