Token AlphaToken

 

Overview ERC-20

Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
57,395.709862 ALPHA

Holders:
35 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Alpha Finance Lab is an ecosystem of DeFi products and focused on building an ecosystem of automated yield-maximizing Alpha products that interoperate to bring optimal alpha to users on a cross-chain level.

Market

Volume (24H):$1,114,464.00
Market Capitalization:$65,999,578.00
Circulating Supply:726,000,000.00 ALPHA
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
1
Binance
ALPHA-USDT$0.0908
0.0000055 Btc
$448,365.0000
4,937,874.961 ALPHA
35.2369%
2
Bitget
ALPHA-USDT$0.0908
0.0000055 Btc
$153,375.0000
1,701,991.129 ALPHA
12.1455%
3
BingX
ALPHA-USDT$0.0908
0.0000055 Btc
$134,469.0000
1,491,196.599 ALPHA
10.6412%
4
Bilaxy
ALPHA-USDT$0.0909
0.0000055 Btc
$119,912.0000
1,318,818.000 ALPHA
9.4111%
5
Binance
ALPHA-BUSD$0.0910
0.0000055 Btc
$114,706.0000
1,260,619.034 ALPHA
8.9958%
6
Bitazza
ALPHA-USDT$0.0907
0.0000055 Btc
$75,885.0000
841,787.000 ALPHA
6.0070%
7
Phemex
ALPHA-USDT$0.0911
0.0000055 Btc
$49,995.0000
549,053.200 ALPHA
3.9181%
8
Bitvavo
ALPHA-EUR$0.0905
0.0000055 Btc
$38,264.0000
422,763.159 ALPHA
3.0169%
9
DigiFinex
ALPHA-USDT$0.0910
0.0000055 Btc
$31,539.0000
346,574.650 ALPHA
2.4732%
10
Binance
ALPHA-BTC$0.0911
0.0000055 Btc
$27,383.0000
300,612.987 ALPHA
2.1452%
11
OKX
ALPHA-USDT$0.0907
0.0000055 Btc
$20,975.0000
232,293.508 ALPHA
1.6577%
12
CoinEx
ALPHA-USDT$0.0907
0.0000055 Btc
$9,966.6900
110,754.719 ALPHA
0.7904%
13
CoinEx
ALPHA-USDC$0.0902
0.0000055 Btc
$9,539.8200
106,185.844 ALPHA
0.7577%
14
Crypto.com Exchange
ALPHA-USDT$0.0911
0.0000055 Btc
$7,826.5000
85,930.000 ALPHA
0.6132%
15
Binance
ALPHA-BNB$0.0909
0.0000055 Btc
$5,987.1000
65,859.318 ALPHA
0.4700%
16
Sushiswap
0XA1FAA113CBE53436DF28FF0AEE54275C13B40975-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.0913
0.0000055 Btc
$5,667.7300
62,324.855 0XA1FAA113CBE53436DF28FF0AEE54275C13B40975
0.4448%
17
Bitazza
ALPHA-THB$0.0918
0.0000055 Btc
$4,277.8800
46,994.000 ALPHA
0.3354%
18
KuCoin
ALPHA-USDT$0.0909
0.0000055 Btc
$3,379.8100
37,181.073 ALPHA
0.2653%
19
Bitstamp
ALPHA-EUR$0.0914
0.0000055 Btc
$2,658.1600
29,075.626 ALPHA
0.2075%
20
PancakeSwap (v2)
0XA1FAA113CBE53436DF28FF0AEE54275C13B40975-WBNB$0.0908
0.0000055 Btc
$1,939.4800
21,734.807 0XA1FAA113CBE53436DF28FF0AEE54275C13B40975
0.1551%
21
Uniswap (v2)
0XA1FAA113CBE53436DF28FF0AEE54275C13B40975-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.0912
0.0000055 Btc
$1,020.6800
12,463.997 0XA1FAA113CBE53436DF28FF0AEE54275C13B40975
0.0889%
22
Nominex
ALPHA-USDT$0.0908
0.0000055 Btc
$857.2900
9,442.645 ALPHA
0.0674%
23
Bancor (V2)
ALPHA-BNT$0.0904
0.0000055 Btc
$383.5200
4,243.489 ALPHA
0.0303%
24
Kraken
ALPHA-USD$0.0911
0.0000055 Btc
$291.2300
3,198.594 ALPHA
0.0228%
25
Uniswap (v2)
0X67B66C99D3EB37FA76AA3ED1FF33E8E39F0B9C7A-0XA1FAA113CBE53436DF28FF0AEE54275C13B40975$0.0911
0.0000055 Btc
$256.5600
0.197 0X67B66C99D3EB37FA76AA3ED1FF33E8E39F0B9C7A
0.0000%
26
Crypto.com Exchange
ALPHA-USD$0.0913
0.0000055 Btc
$220.9400
2,421.000 ALPHA
0.0173%
27
Zipmex
ALPHA-IDR$0.0944
0.0000057 Btc
$187.5200
1,985.830 ALPHA
0.0142%
28
Zipmex
ALPHA-USDT$0.0948
0.0000057 Btc
$181.5200
1,915.400 ALPHA
0.0137%
29
Zipmex
ALPHA-THB$0.0935
0.0000056 Btc
$141.7600
1,516.720 ALPHA
0.0108%
30
Nominex
ALPHA-BNB$0.0881
0.0000053 Btc
$121.8500
1,383.508 ALPHA
0.0099%
31
KuCoin
ALPHA-BTC$0.0912
0.0000055 Btc
$100.5400
1,102.245 ALPHA
0.0079%
32
Tokenize
ALPHA-SGD$0.0900
0.0000054 Btc
$90.0100
1,000.000 ALPHA
0.0071%
33
Nominex
ALPHA-BUSD$0.0908
0.0000055 Btc
$61.1700
673.378 ALPHA
0.0048%
34
Tokenize
ALPHA-USD$0.0898
0.0000054 Btc
$54.7800
610.000 ALPHA
0.0044%
35
Mercado Bitcoin
ALPHA-BRL$0.0888
0.0000054 Btc
$50.7700
571.823 ALPHA
0.0041%
36
Coinone
ALPHA-KRW$0.0891
0.0000054 Btc
$44.4700
499.045 ALPHA
0.0036%
37
Kraken
ALPHA-EUR$0.0897
0.0000054 Btc
$24.5600
273.855 ALPHA
0.0020%
38
TokoCrypto
ALPHA-USDT$0.0902
0.0000055 Btc
$12.8400
142.251 ALPHA
0.0010%
39
OKX
ALPHA-BTC$0.0911
0.0000055 Btc
$12.0800
133.000 ALPHA
0.0009%
40
Bitstamp
ALPHA-USD$0.0900
0.0000055 Btc
$10.8500
120.518 ALPHA
0.0009%
41
Nominex
ALPHA-BTC$0.0911
0.0000055 Btc
$1.9800
21.760 ALPHA
0.0002%
42
Poloniex
ALPHA-USDT$0.0881
0.0000053 Btc
$1.6200
18.377 ALPHA
0.0001%
43
HitBTC
ALPHA-BTC$0.0911
0.0000055 Btc
$0.0009
0.010 ALPHA
0.0000%
44
HitBTC
ALPHA-USDT$0.0905
0.0000055 Btc
$0.0009
0.010 ALPHA
0.0000%
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapV6ERC20

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at BscScan.com on 2022-03-11
*/

/**
 *Submitted for verification at BscScan.com on 2022-03-09
*/

/**
 *Submitted for verification at BscScan.com on 2022-02-11
*/

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

    // configurable delay for timelock functions
    uint public delay = 2*24*3600;


    // 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 Security Audit

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"}]

60e06040526202a3006005553480156200001857600080fd5b5060405162002b2538038062002b258339810160408190526200003b9162000399565b845162000050906000906020880190620001f7565b50835162000066906001906020870190620001f7565b5060ff83166080526001600160a01b03821660a081905215620000fa57816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e891906200043b565b60ff168360ff1614620000fa57600080fd5b6004805461ffff19166001179055600880546001600160a01b0383166001600160a01b03199182168117909255600b8054909116909117905542600c5560405146907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f906200016c906000906200049d565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f19818403018152919052805160209091012060c0525062000541945050505050565b828054620002059062000460565b90600052602060002090601f01602090048101928262000229576000855562000274565b82601f106200024457805160ff191683800117855562000274565b8280016001018555821562000274579182015b828111156200027457825182559160200191906001019062000257565b506200028292915062000286565b5090565b5b8082111562000282576000815560010162000287565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002c557600080fd5b81516001600160401b0380821115620002e257620002e26200029d565b604051601f8301601f19908116603f011681019082821181831017156200030d576200030d6200029d565b816040528381526020925086838588010111156200032a57600080fd5b600091505b838210156200034e57858201830151818301840152908201906200032f565b83821115620003605760008385830101525b9695505050505050565b805160ff811681146200037c57600080fd5b919050565b80516001600160a01b03811681146200037c57600080fd5b600080600080600060a08688031215620003b257600080fd5b85516001600160401b0380821115620003ca57600080fd5b620003d889838a01620002b3565b96506020880151915080821115620003ef57600080fd5b50620003fe88828901620002b3565b9450506200040f604087016200036a565b92506200041f6060870162000381565b91506200042f6080870162000381565b90509295509295909350565b6000602082840312156200044e57600080fd5b62000459826200036a565b9392505050565b600181811c908216806200047557607f821691505b602082108114156200049757634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620004ba57607f831692505b6020808410821415620004db57634e487b7160e01b86526022600452602486fd5b818015620004f25760018114620005045762000533565b60ff1986168952848901965062000533565b60008a81526020902060005b868110156200052b5781548b82015290850190830162000510565b505084890196505b509498975050505050505050565b60805160a05160c051612575620005b06000396000818161040501528181611aa30152611baf0152600081816104ed015281816111a7015281816113c0015281816115c6015281816116400152818161199601528181611d2e0152611d61015260006103cc01526125756000f3fe608060405234801561001057600080fd5b50600436106102b85760003560e01c806370a0823111610182578063bebbf4d0116100e9578063d505accf116100a2578063ec126c771161007c578063ec126c77146106a2578063f75c2664146106b5578063fbfa77cf146106bd578063fca3b5aa146106d057600080fd5b8063d505accf1461065c578063d93f24451461066f578063dd62ed3e1461067757600080fd5b8063bebbf4d0146105ff578063c308124014610612578063c4b740f51461061b578063cae9ca511461062e578063cfbd488514610641578063d0e30db01461065457600080fd5b806395d89b411161013b57806395d89b41146105865780639dc29fac1461058e578063a045442c146105a1578063a9059cbb146105b6578063aa271e1a146105c9578063b6b55f25146105ec57600080fd5b806370a082311461050f5780637ecebe001461052f5780638623ec7b1461054f57806387689e28146105625780638da5cb5b1461056b57806391c5df491461057357600080fd5b80633644e5151161022657806360e232a9116101df57806360e232a914610493578063628d6cba146104a65780636817031b146104b95780636a42b8f8146104cc5780636e553f65146104d55780636f307dc3146104e857600080fd5b80633644e515146104005780633ccfd60b146104275780634000aea01461042f57806340c10f191461044257806352113ba714610455578063605629d61461048057600080fd5b806318160ddd1161027857806318160ddd1461035f57806323b872dd146103675780632e1a7d4d1461037a5780632ebe3fbb1461038d57806330adf81f146103a0578063313ce567146103c757600080fd5b806239d6ec146102bd578062bf26f4146102e3578062f714ce1461030a57806306fdde031461031d578063095ea7b3146103325780630d707df814610355575b600080fd5b6102d06102cb366004611fb1565b6106e3565b6040519081526020015b60405180910390f35b6102d07f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b6102d0610318366004611fed565b610739565b61032561074d565b6040516102da9190612045565b610345610340366004612078565b6107db565b60405190151581526020016102da565b61035d610835565b005b6003546102d0565b6103456103753660046120a2565b6108f1565b6102d06103883660046120de565b610adc565b61035d61039b3660046120f7565b610aef565b6102d07f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6103ee7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102da565b6102d07f000000000000000000000000000000000000000000000000000000000000000081565b6102d0610bc6565b61034561043d366004612112565b610be7565b610345610450366004612078565b610d31565b600b54610468906001600160a01b031681565b6040516001600160a01b0390911681526020016102da565b61034561048e366004612199565b610d73565b6103456104a13660046120f7565b610f83565b6103456104b4366004611fed565b611044565b61035d6104c73660046120f7565b61110c565b6102d060055481565b6102d06104e3366004611fed565b611198565b6104687f000000000000000000000000000000000000000000000000000000000000000081565b6102d061051d3660046120f7565b60026020526000908152604090205481565b6102d061053d3660046120f7565b600d6020526000908152604090205481565b61046861055d3660046120de565b6111d9565b6102d0600c5481565b610468611203565b600954610468906001600160a01b031681565b61032561120d565b61034561059c366004612078565b61121a565b6105a9611279565b6040516102da919061220c565b6103456105c4366004612078565b6112db565b6103456105d73660046120f7565b60066020526000908152604090205460ff1681565b6102d06105fa3660046120de565b6113b1565b6102d061060d366004611fed565b6113f2565b6102d0600a5481565b61035d61062936600461226a565b61142c565b61034561063c366004612112565b61147e565b61035d61064f3660046120f7565b61154b565b6102d06115a4565b61035d61066a366004612199565b611678565b61035d6117e6565b6102d0610685366004612287565b600e60209081526000928352604080842090915290825290205481565b6103456106b03660046122b1565b611851565b6104686118c6565b600854610468906001600160a01b031681565b61035d6106de3660046120f7565b6118f1565b60006106ed6118c6565b6001600160a01b0316336001600160a01b0316146107265760405162461bcd60e51b815260040161071d906122d6565b60405180910390fd5b61073184848461197d565b949350505050565b600061074633848461197d565b9392505050565b6000805461075a9061230d565b80601f01602080910402602001604051908101604052809291908181526020018280546107869061230d565b80156107d35780601f106107a8576101008083540402835291602001916107d3565b820191906000526020600020905b8154815290600101906020018083116107b657829003601f168201915b505050505081565b336000818152600e602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612520833981519152906108249086815260200190565b60405180910390a350600192915050565b61083d6118c6565b6001600160a01b0316336001600160a01b03161461086d5760405162461bcd60e51b815260040161071d906122d6565b600a5442101561087c57600080fd5b600980546001600160a01b039081166000908152600660205260408120805460ff1916600190811790915592546007805494850181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b03191692909116919091179055565b60006001600160a01b03831615158061091357506001600160a01b0383163014155b61091c57600080fd5b6001600160a01b0384163314610a16576001600160a01b0384166000908152600e602090815260408083203384529091529020546000198114610a1457828110156109bb5760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b606482015260840161071d565b60006109c7848361235e565b6001600160a01b0387166000818152600e602090815260408083203380855290835292819020859055518481529394509092600080516020612520833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610a4f5760405162461bcd60e51b815260040161071d90612375565b610a59838261235e565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610a8f9084906123c4565b92505081905550836001600160a01b0316856001600160a01b031660008051602061250083398151915285604051610ac991815260200190565b60405180910390a3506001949350505050565b6000610ae933833361197d565b92915050565b610af76118c6565b6001600160a01b0316336001600160a01b031614610b275760405162461bcd60e51b815260040161071d906122d6565b60045460ff16610b3657600080fd5b600880546001600160a01b039092166001600160a01b03199283168117909155600b80548316821790556000818152600660205260408120805460ff1990811660019081179092556007805492830181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490931690911790915542600c55600480549091169055565b336000818152600260205260408120549091610be2918161197d565b905090565b60006001600160a01b038516151580610c0957506001600160a01b0385163014155b610c1257600080fd5b3360009081526002602052604090205484811015610c425760405162461bcd60e51b815260040161071d90612375565b610c4c858261235e565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610c7f9084906123c4565b90915550506040518581526001600160a01b0387169033906000805160206125008339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610ce49033908990899089906004016123dc565b6020604051808303816000875af1158015610d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d279190612424565b9695505050505050565b3360009081526006602052604081205460ff16610d605760405162461bcd60e51b815260040161071d90612441565b610d6a83836119c5565b50600192915050565b600084421115610dc55760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d69740000604482015260640161071d565b6001600160a01b0388166000908152600d6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610e1283612478565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001209050610e738982878787611a93565b80610e865750610e868982878787611b84565b610e8f57600080fd5b6001600160a01b038816151580610eaf57506001600160a01b0388163014155b610eb857600080fd5b6001600160a01b03891660009081526002602052604090205487811015610ef15760405162461bcd60e51b815260040161071d90612375565b610efb888261235e565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a9290610f319084906123c4565b92505081905550886001600160a01b03168a6001600160a01b03166000805160206125008339815191528a604051610f6b91815260200190565b60405180910390a35060019998505050505050505050565b6000610f8d6118c6565b6001600160a01b0316336001600160a01b031614610fbd5760405162461bcd60e51b815260040161071d906122d6565b6001600160a01b038216610fe35760405162461bcd60e51b815260040161071d90612493565b600880546001600160a01b0384166001600160a01b03199182168117909255600b80549091168217905560405142919081907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a45060015b919050565b600454600090610100900460ff161561109f5760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c79417574680000000000000000604482015260640161071d565b6001600160a01b0382166110c55760405162461bcd60e51b815260040161071d90612493565b6110cf3384611be7565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c88890602001610824565b6111146118c6565b6001600160a01b0316336001600160a01b0316146111445760405162461bcd60e51b815260040161071d906122d6565b6001600160a01b03811661116a5760405162461bcd60e51b815260040161071d90612493565b600b80546001600160a01b0319166001600160a01b03831617905560055461119290426123c4565b600c5550565b60006111cf6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086611cb9565b6107468383611d2a565b600781815481106111e957600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610be26118c6565b6001805461075a9061230d565b3360009081526006602052604081205460ff166112495760405162461bcd60e51b815260040161071d90612441565b6001600160a01b03831661126f5760405162461bcd60e51b815260040161071d90612493565b610d6a8383611be7565b606060078054806020026020016040519081016040528092919081815260200182805480156112d157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112b3575b5050505050905090565b60006001600160a01b0383161515806112fd57506001600160a01b0383163014155b61130657600080fd5b33600090815260026020526040902054828110156113365760405162461bcd60e51b815260040161071d90612375565b611340838261235e565b33600090815260026020526040808220929092556001600160a01b038616815290812080548592906113739084906123c4565b90915550506040518381526001600160a01b038516903390600080516020612500833981519152906020015b60405180910390a35060019392505050565b60006113e86001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085611cb9565b610ae98233611d2a565b60006113fc6118c6565b6001600160a01b0316336001600160a01b0316146111cf5760405162461bcd60e51b815260040161071d906122d6565b6114346118c6565b6001600160a01b0316336001600160a01b0316146114645760405162461bcd60e51b815260040161071d906122d6565b600480549115156101000261ff0019909216919091179055565b336000818152600e602090815260408083206001600160a01b03891680855292528083208790555191929091600080516020612520833981519152906114c79088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f906114ff9033908890889088906004016123dc565b6020604051808303816000875af115801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190612424565b95945050505050565b6115536118c6565b6001600160a01b0316336001600160a01b0316146115835760405162461bcd60e51b815260040161071d906122d6565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561160d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163191906124ca565b90506116686001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084611cb9565b6116728133611d2a565b91505090565b834211156116c85760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d69740000604482015260640161071d565b6001600160a01b0387166000908152600d6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661171583612478565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506117768882868686611a93565b8061178957506117898882868686611b84565b61179257600080fd5b6001600160a01b038881166000818152600e60209081526040808320948c16808452948252918290208a90559051898152600080516020612520833981519152910160405180910390a35050505050505050565b6117ee6118c6565b6001600160a01b0316336001600160a01b03161461181e5760405162461bcd60e51b815260040161071d906122d6565b600c5442101561182d57600080fd5b600b54600880546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526006602052604081205460ff166118805760405162461bcd60e51b815260040161071d90612441565b61188a83836119c5565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161139f91815260200190565b6000600c5442106118e15750600b546001600160a01b031690565b506008546001600160a01b031690565b6118f96118c6565b6001600160a01b0316336001600160a01b0316146119295760405162461bcd60e51b815260040161071d906122d6565b6001600160a01b03811661194f5760405162461bcd60e51b815260040161071d90612493565b600980546001600160a01b0319166001600160a01b03831617905560055461197790426123c4565b600a5550565b60006119898484611be7565b6119bd6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168385611da7565b509092915050565b6001600160a01b038216611a1b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161071d565b8060036000828254611a2d91906123c4565b90915550506001600160a01b03821660009081526002602052604081208054839290611a5a9084906123c4565b90915550506040518181526001600160a01b03831690600090600080516020612500833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527f000000000000000000000000000000000000000000000000000000000000000060228201526042810185905260009081906062015b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611b42573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611b785750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a33320000000060208201527f0000000000000000000000000000000000000000000000000000000000000000603c820152605c81018590526000908190607c01611ad7565b6001600160a01b038216611c475760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161071d565b6001600160a01b03821660009081526002602052604081208054839290611c6f90849061235e565b925050819055508060036000828254611c88919061235e565b90915550506040518181526000906001600160a01b0384169060008051602061250083398151915290602001611a87565b6040516001600160a01b0380851660248301528316604482015260648101829052611d249085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ddc565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590611d8d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014155b611d9657600080fd5b611da082846119c5565b5090919050565b6040516001600160a01b038316602482015260448101829052611dd790849063a9059cbb60e01b90606401611ced565b505050565b611dee826001600160a01b0316611f63565b611e3a5760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015260640161071d565b600080836001600160a01b031683604051611e5591906124e3565b6000604051808303816000865af19150503d8060008114611e92576040519150601f19603f3d011682016040523d82523d6000602084013e611e97565b606091505b509150915081611ee95760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015260640161071d565b805115611d245780806020019051810190611f049190612424565b611d245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161071d565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906107315750141592915050565b80356001600160a01b038116811461103f57600080fd5b600080600060608486031215611fc657600080fd5b611fcf84611f9a565b925060208401359150611fe460408501611f9a565b90509250925092565b6000806040838503121561200057600080fd5b8235915061201060208401611f9a565b90509250929050565b60005b8381101561203457818101518382015260200161201c565b83811115611d245750506000910152565b6020815260008251806020840152612064816040850160208701612019565b601f01601f19169190910160400192915050565b6000806040838503121561208b57600080fd5b61209483611f9a565b946020939093013593505050565b6000806000606084860312156120b757600080fd5b6120c084611f9a565b92506120ce60208501611f9a565b9150604084013590509250925092565b6000602082840312156120f057600080fd5b5035919050565b60006020828403121561210957600080fd5b61074682611f9a565b6000806000806060858703121561212857600080fd5b61213185611f9a565b935060208501359250604085013567ffffffffffffffff8082111561215557600080fd5b818701915087601f83011261216957600080fd5b81358181111561217857600080fd5b88602082850101111561218a57600080fd5b95989497505060200194505050565b600080600080600080600060e0888a0312156121b457600080fd5b6121bd88611f9a565b96506121cb60208901611f9a565b95506040880135945060608801359350608088013560ff811681146121ef57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6020808252825182820181905260009190848201906040850190845b8181101561224d5783516001600160a01b031683529284019291840191600101612228565b50909695505050505050565b801515811461226757600080fd5b50565b60006020828403121561227c57600080fd5b813561074681612259565b6000806040838503121561229a57600080fd5b6122a383611f9a565b915061201060208401611f9a565b6000806000606084860312156122c657600080fd5b833592506120ce60208501611f9a565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b600181811c9082168061232157607f821691505b6020821081141561234257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561237057612370612348565b500390565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b600082198211156123d7576123d7612348565b500190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b60006020828403121561243657600080fd5b815161074681612259565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b600060001982141561248c5761248c612348565b5060010190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6000602082840312156124dc57600080fd5b5051919050565b600082516124f5818460208701612019565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212204db622a89335a7f516edf22bc6964bb0d3dae43db253408484323d804b982d4c64736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000000000000000000000000000000000000000000a416c706861546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005414c504841000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000000000000000000000000000000000000000000a416c706861546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005414c504841000000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [6] : 416c706861546f6b656e00000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 414c504841000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

5941:17954:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13963:149;;;;;;:::i;:::-;;:::i;:::-;;;671:25:1;;;659:2;644:18;13963:149:0;;;;;;;;6314:136;;6358:92;6314:136;;13829:126;;;;;;:::i;:::-;;:::i;6024:18::-;;;:::i;:::-;;;;;;;:::i;15686:265::-;;;;;;:::i;:::-;;:::i;:::-;;;2223:14:1;;2216:22;2198:41;;2186:2;2171:18;15686:265:0;2058:187:1;8789:179:0;;;:::i;:::-;;12456:102;12538:12;;12456:102;;21815:927;;;;;;:::i;:::-;;:::i;13699:122::-;;;;;;:::i;:::-;;:::i;7932:272::-;;;;;;:::i;:::-;;:::i;6170:137::-;;6212:95;6170:137;;6076:41;;;;;;;;3131:4:1;3119:17;;;3101:36;;3089:2;3074:18;6076:41:0;2959:184:1;6457:41:0;;;;;13565:126;;;:::i;23369:523::-;;;;;;:::i;:::-;;:::i;9558:133::-;;;;;;:::i;:::-;;:::i;7270:27::-;;;;;-1:-1:-1;;;;;7270:27:0;;;;;;-1:-1:-1;;;;;4050:32:1;;;4032:51;;4020:2;4005:18;7270:27:0;3886:203:1;18284:938:0;;;;;;:::i;:::-;;:::i;9244:306::-;;;;;;:::i;:::-;;:::i;10131:328::-;;;;;;:::i;:::-;;:::i;8212:212::-;;;;;;:::i;:::-;;:::i;6945:29::-;;;;;;13017:193;;;;;;:::i;:::-;;:::i;6126:35::-;;;;;6578:54;;;;;;:::i;:::-;;;;;;;;;;;;;;10731:51;;;;;;:::i;:::-;;;;;;;;;;;;;;7092:24;;;;;;:::i;:::-;;:::i;7304:22::-;;;;;;7569:78;;;:::i;7203:28::-;;;;;-1:-1:-1;;;;;7203:28:0;;;6049:20;;;:::i;9699:207::-;;;;;;:::i;:::-;;:::i;9137:99::-;;;:::i;:::-;;;;;;;:::i;20488:438::-;;;;;;:::i;:::-;;:::i;7045:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12820:189;;;;;;:::i;:::-;;:::i;13218:127::-;;;;;;:::i;:::-;;:::i;7238:23::-;;;;;;7830:94;;;;;;:::i;:::-;;:::i;16372:356::-;;;;;;:::i;:::-;;:::i;9031:98::-;;;;;;:::i;:::-;;:::i;12566:246::-;;;:::i;17561:715::-;;;;;;:::i;:::-;;:::i;8432:129::-;;;:::i;10952:75::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;9914:209;;;;;;:::i;:::-;;:::i;7655:167::-;;;:::i;7174:20::-;;;;;-1:-1:-1;;;;;7174:20:0;;;8569:212;;;;;;:::i;:::-;;:::i;13963:149::-;14053:4;7506:5;:3;:5::i;:::-;-1:-1:-1;;;;;7492:19:0;:10;-1:-1:-1;;;;;7492:19:0;;7484:57;;;;-1:-1:-1;;;7484:57:0;;;;;;;:::i;:::-;;;;;;;;;14077:27:::1;14087:4;14093:6;14101:2;14077:9;:27::i;:::-;14070:34:::0;13963:149;-1:-1:-1;;;;13963:149:0:o;13829:126::-;13890:4;13914:33;13924:10;13936:6;13944:2;13914:9;:33::i;:::-;13907:40;13829:126;-1:-1:-1;;;13829:126:0:o;6024:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15686:265::-;15839:10;15762:4;15829:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;15829:30:0;;;;;;;;;;:38;;;15883:36;15762:4;;15829:30;;-1:-1:-1;;;;;;;;;;;15883:36:0;;;15862:5;671:25:1;;659:2;644:18;;525:177;15883:36:0;;;;;;;;-1:-1:-1;15939:4:0;15686:265;;;;:::o;8789:179::-;7506:5;:3;:5::i;:::-;-1:-1:-1;;;;;7492:19:0;:10;-1:-1:-1;;;;;7492:19:0;;7484:57;;;;-1:-1:-1;;;7484:57:0;;;;;;;:::i;:::-;8869:11:::1;;8850:15;:30;;8842:39;;;::::0;::::1;;8901:13;::::0;;-1:-1:-1;;;;;8901:13:0;;::::1;8892:23;::::0;;;:8:::1;:23;::::0;;;;:30;;-1:-1:-1;;8892:30:0::1;8918:4;8892:30:::0;;::::1;::::0;;;8946:13;;8933:7:::1;:27:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8933:27:0::1;8946:13:::0;;;::::1;8933:27:::0;;;::::1;::::0;;8789:179::o;21815:927::-;21905:4;-1:-1:-1;;;;;21930:16:0;;;;;:39;;-1:-1:-1;;;;;;21950:19:0;;21964:4;21950:19;;21930:39;21922:48;;;;;;-1:-1:-1;;;;;21985:18:0;;21993:10;21985:18;21981:477;;-1:-1:-1;;;;;22099:15:0;;22081;22099;;;:9;:15;;;;;;;;22115:10;22099:27;;;;;;;;-1:-1:-1;;22145:28:0;;22141:306;;22213:5;22202:7;:16;;22194:70;;;;-1:-1:-1;;;22194:70:0;;7357:2:1;22194:70:0;;;7339:21:1;7396:2;7376:18;;;7369:30;7435:34;7415:18;;;7408:62;-1:-1:-1;;;7486:18:1;;;7479:39;7535:19;;22194:70:0;7155:405:1;22194:70:0;22283:15;22301;22311:5;22301:7;:15;:::i;:::-;-1:-1:-1;;;;;22335:15:0;;;;;;:9;:15;;;;;;;;22351:10;22335:27;;;;;;;;;;:37;;;22396:35;671:25:1;;;22335:37:0;;-1:-1:-1;22351:10:0;;-1:-1:-1;;;;;;;;;;;22396:35:0;644:18:1;22396:35:0;;;;;;;22175:272;22141:306;22005:453;21981:477;-1:-1:-1;;;;;22488:15:0;;22470;22488;;;:9;:15;;;;;;22522:16;;;;22514:76;;;;-1:-1:-1;;;22514:76:0;;;;;;;:::i;:::-;22621:15;22631:5;22621:7;:15;:::i;:::-;-1:-1:-1;;;;;22603:15:0;;;;;;;:9;:15;;;;;;:33;;;;22647:13;;;;;;;;:22;;22664:5;;22603:15;22647:22;;22664:5;;22647:22;:::i;:::-;;;;;;;;22700:2;-1:-1:-1;;;;;22685:25:0;22694:4;-1:-1:-1;;;;;22685:25:0;-1:-1:-1;;;;;;;;;;;22704:5:0;22685:25;;;;671::1;;659:2;644:18;;525:177;22685:25:0;;;;;;;;-1:-1:-1;22730:4:0;;21815:927;-1:-1:-1;;;;21815:927:0:o;13699:122::-;13748:4;13772:41;13782:10;13794:6;13802:10;13772:9;:41::i;:::-;13765:48;13699:122;-1:-1:-1;;13699:122:0:o;7932:272::-;7506:5;:3;:5::i;:::-;-1:-1:-1;;;;;7492:19:0;:10;-1:-1:-1;;;;;7492:19:0;;7484:57;;;;-1:-1:-1;;;7484:57:0;;;;;;;:::i;:::-;8005:5:::1;::::0;::::1;;7997:14;;;::::0;::::1;;8022:5;:14:::0;;-1:-1:-1;;;;;8022:14:0;;::::1;-1:-1:-1::0;;;;;;8022:14:0;;::::1;::::0;::::1;::::0;;;8047:12:::1;:21:::0;;;::::1;::::0;::::1;::::0;;8022:5:::1;8079:16:::0;;;:8:::1;:16;::::0;;;;:23;;-1:-1:-1;;8079:23:0;;::::1;8022:14:::0;8079:23;;::::1;::::0;;;8113:7:::1;:20:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;8157:15:::1;8144:10;:28:::0;8183:5:::1;:13:::0;;;;::::1;::::0;;7932:272::o;13565:126::-;13637:10;13603:4;13649:21;;;:9;:21;;;;;;13603:4;;13627:56;;13637:10;13627:9;:56::i;:::-;13620:63;;13565:126;:::o;23369:523::-;23466:4;-1:-1:-1;;;;;23491:16:0;;;;;:39;;-1:-1:-1;;;;;;23511:19:0;;23525:4;23511:19;;23491:39;23483:48;;;;;;23572:10;23544:15;23562:21;;;:9;:21;;;;;;23602:16;;;;23594:76;;;;-1:-1:-1;;;23594:76:0;;;;;;;:::i;:::-;23707:15;23717:5;23707:7;:15;:::i;:::-;23693:10;23683:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;23733:13:0;;;;;;;:22;;23750:5;;23683:21;23733:22;;23750:5;;23733:22;:::i;:::-;;;;-1:-1:-1;;23771:31:0;;671:25:1;;;-1:-1:-1;;;;;23771:31:0;;;23780:10;;-1:-1:-1;;;;;;;;;;;23771:31:0;659:2:1;644:18;23771:31:0;;;;;;;23822:62;;-1:-1:-1;;;23822:62:0;;-1:-1:-1;;;;;23822:37:0;;;;;:62;;23860:10;;23872:5;;23879:4;;;;23822:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23815:69;23369:523;-1:-1:-1;;;;;;23369:523:0:o;9558:133::-;7383:10;9627:4;7374:20;;;:8;:20;;;;;;;;7366:58;;;;-1:-1:-1;;;7366:58:0;;;;;;;:::i;:::-;9644:17:::1;9650:2;9654:6;9644:5;:17::i;:::-;-1:-1:-1::0;9679:4:0::1;9558:133:::0;;;;:::o;18284:938::-;18431:4;18475:8;18456:15;:27;;18448:70;;;;-1:-1:-1;;;18448:70:0;;9746:2:1;18448:70:0;;;9728:21:1;9785:2;9765:18;;;9758:30;9824:32;9804:18;;;9797:60;9874:18;;18448:70:0;9544:354:1;18448:70:0;-1:-1:-1;;;;;18711:14:0;;18531:18;18711:14;;;:6;:14;;;;;:16;;6358:92;;18641:6;;18666:2;;18687:5;;18711:16;18531:18;18711:16;;;:::i;:::-;;;;-1:-1:-1;18576:179:0;;;;;;10330:25:1;;;;-1:-1:-1;;;;;10429:15:1;;;10409:18;;;10402:43;10481:15;;;;10461:18;;;10454:43;10513:18;;;10506:34;10556:19;;;10549:35;10600:19;;;10593:35;;;10302:19;;18576:179:0;;;;;;;;;;;;18552:204;;;;;;18531:225;;18777:41;18790:6;18798:10;18810:1;18813;18816;18777:12;:41::i;:::-;:92;;;;18822:47;18841:6;18849:10;18861:1;18864;18867;18822:18;:47::i;:::-;18769:101;;;;;;-1:-1:-1;;;;;18891:16:0;;;;;:39;;-1:-1:-1;;;;;;18911:19:0;;18925:4;18911:19;;18891:39;18883:48;;;;;;-1:-1:-1;;;;;18962:17:0;;18944:15;18962:17;;;:9;:17;;;;;;18998:16;;;;18990:76;;;;-1:-1:-1;;;18990:76:0;;;;;;;:::i;:::-;19099:15;19109:5;19099:7;:15;:::i;:::-;-1:-1:-1;;;;;19079:17:0;;;;;;;:9;:17;;;;;;:35;;;;19125:13;;;;;;;;:22;;19142:5;;19079:17;19125:22;;19142:5;;19125:22;:::i;:::-;;;;;;;;19180:2;-1:-1:-1;;;;;19163:27:0;19172:6;-1:-1:-1;;;;;19163:27:0;-1:-1:-1;;;;;;;;;;;19184:5:0;19163:27;;;;671:25:1;;659:2;644:18;;525:177;19163:27:0;;;;;;;;-1:-1:-1;19210:4:0;;18284:938;-1:-1:-1;;;;;;;;;18284:938:0:o;9244:306::-;9311:4;7506:5;:3;:5::i;:::-;-1:-1:-1;;;;;7492:19:0;:10;-1:-1:-1;;;;;7492:19:0;;7484:57;;;;-1:-1:-1;;;7484:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9336:22:0;::::1;9328:63;;;;-1:-1:-1::0;;;9328:63:0::1;;;;;;;:::i;:::-;9402:5;:16:::0;;-1:-1:-1;;;;;9402:16:0;::::1;-1:-1:-1::0;;;;;;9402:16:0;;::::1;::::0;::::1;::::0;;;9429:12:::1;:23:::0;;;;::::1;::::0;::::1;::::0;;9468:52:::1;::::0;9504:15:::1;::::0;9402:16;;;9468:52:::1;::::0;9402:5:::1;::::0;9468:52:::1;-1:-1:-1::0;9538:4:0::1;7552:1;9244:306:::0;;;:::o;10131:328::-;10224:10;;10198:4;;10224:10;;;;;10223:11;10215:48;;;;-1:-1:-1;;;10215:48:0;;11198:2:1;10215:48:0;;;11180:21:1;11237:2;11217:18;;;11210:30;11276:26;11256:18;;;11249:54;11320:18;;10215:48:0;10996:348:1;10215:48:0;-1:-1:-1;;;;;10282:22:0;;10274:63;;;;-1:-1:-1;;;10274:63:0;;;;;;;:::i;:::-;10348:25;10354:10;10366:6;10348:5;:25::i;:::-;10389:40;;671:25:1;;;-1:-1:-1;;;;;10389:40:0;;;10400:10;;10389:40;;659:2:1;644:18;10389:40:0;525:177:1;8212:212:0;7506:5;:3;:5::i;:::-;-1:-1:-1;;;;;7492:19:0;:10;-1:-1:-1;;;;;7492:19:0;;7484:57;;;;-1:-1:-1;;;7484:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8284:20:0;::::1;8276:61;;;;-1:-1:-1::0;;;8276:61:0::1;;;;;;;:::i;:::-;8348:12;:21:::0;;-1:-1:-1;;;;;;8348:21:0::1;-1:-1:-1::0;;;;;8348:21:0;::::1;;::::0;;8411:5:::1;::::0;8393:23:::1;::::0;:15:::1;:23;:::i;:::-;8380:10;:36:::0;-1:-1:-1;8212:212:0:o;13017:193::-;13077:4;13094:70;-1:-1:-1;;;;;13101:10:0;13094:35;13130:10;13150:4;13157:6;13094:35;:70::i;:::-;13182:20;13191:6;13199:2;13182:8;:20::i;7092:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7092:24:0;;-1:-1:-1;7092:24:0;:::o;7569:78::-;7607:7;7634:5;:3;:5::i;6049:20::-;;;;;;;:::i;9699:207::-;7383:10;9770:4;7374:20;;;:8;:20;;;;;;;;7366:58;;;;-1:-1:-1;;;7366:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9795:18:0;::::1;9787:59;;;;-1:-1:-1::0;;;9787:59:0::1;;;;;;;:::i;:::-;9857:19;9863:4;9869:6;9857:5;:19::i;9137:99::-:0;9185:16;9221:7;9214:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9214:14:0;;;;;;;;;;;;;;;;;;;;;;;9137:99;:::o;20488:438::-;20560:4;-1:-1:-1;;;;;20585:16:0;;;;;:39;;-1:-1:-1;;;;;;20605:19:0;;20619:4;20605:19;;20585:39;20577:48;;;;;;20664:10;20636:15;20654:21;;;:9;:21;;;;;;20694:16;;;;20686:76;;;;-1:-1:-1;;;20686:76:0;;;;;;;:::i;:::-;20799:15;20809:5;20799:7;:15;:::i;:::-;20785:10;20775:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;20825:13:0;;;;;;;:22;;20842:5;;20775:21;20825:22;;20842:5;;20825:22;:::i;:::-;;;;-1:-1:-1;;20863:31:0;;671:25:1;;;-1:-1:-1;;;;;20863:31:0;;;20872:10;;-1:-1:-1;;;;;;;;;;;20863:31:0;659:2:1;644:18;20863:31:0;;;;;;;;-1:-1:-1;20914:4:0;;20488:438;-1:-1:-1;;;20488:438:0:o;12820:189::-;12868:4;12885:70;-1:-1:-1;;;;;12892:10:0;12885:35;12921:10;12941:4;12948:6;12885:35;:70::i;:::-;12973:28;12982:6;12990:10;12973:8;:28::i;13218:127::-;13293:4;7506:5;:3;:5::i;:::-;-1:-1:-1;;;;;7492:19:0;:10;-1:-1:-1;;;;;7492:19:0;;7484:57;;;;-1:-1:-1;;;7484:57:0;;;;;;;:::i;7830:94::-;7506:5;:3;:5::i;:::-;-1:-1:-1;;;;;7492:19:0;:10;-1:-1:-1;;;;;7492:19:0;;7484:57;;;;-1:-1:-1;;;7484:57:0;;;;;;;:::i;:::-;7896:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;7896:20:0;;::::1;::::0;;;::::1;::::0;;7830:94::o;16372:356::-;16553:10;16476:4;16543:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;16543:30:0;;;;;;;;;;:38;;;16597:36;16476:4;;16543:30;;-1:-1:-1;;;;;;;;;;;16597:36:0;;;16576:5;671:25:1;;659:2;644:18;;525:177;16597:36:0;;;;;;;;16653:67;;-1:-1:-1;;;16653:67:0;;-1:-1:-1;;;;;16653:42:0;;;;;:67;;16696:10;;16708:5;;16715:4;;;;16653:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16646:74;16372:356;-1:-1:-1;;;;;16372:356:0:o;9031:98::-;7506:5;:3;:5::i;:::-;-1:-1:-1;;;;;7492:19:0;:10;-1:-1:-1;;;;;7492:19:0;;7484:57;;;;-1:-1:-1;;;7484:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9098:15:0::1;9116:5;9098:15:::0;;;:8:::1;:15;::::0;;;;:23;;-1:-1:-1;;9098:23:0::1;::::0;;9031:98::o;12566:246::-;12635:40;;-1:-1:-1;;;12635:40:0;;12664:10;12635:40;;;4032:51:1;12603:4:0;;;;-1:-1:-1;;;;;12642:10:0;12635:28;;;;4005:18:1;;12635:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12620:55;-1:-1:-1;12686:71:0;-1:-1:-1;;;;;12693:10:0;12686:35;12722:10;12742:4;12620:55;12686:35;:71::i;:::-;12775:29;12784:7;12793:10;12775:8;:29::i;:::-;12768:36;;;12566:246;:::o;17561:715::-;17730:8;17711:15;:27;;17703:70;;;;-1:-1:-1;;;17703:70:0;;9746:2:1;17703:70:0;;;9728:21:1;9785:2;9765:18;;;9758:30;9824:32;9804:18;;;9797:60;9874:18;;17703:70:0;9544:354:1;17703:70:0;-1:-1:-1;;;;;17969:14:0;;17786:18;17969:14;;;:6;:14;;;;;:16;;6212:95;;17894:6;;17919:7;;17945:5;;17969:16;17786:18;17969:16;;;:::i;:::-;;;;-1:-1:-1;17831:182:0;;;;;;10330:25:1;;;;-1:-1:-1;;;;;10429:15:1;;;10409:18;;;10402:43;10481:15;;;;10461:18;;;10454:43;10513:18;;;10506:34;10556:19;;;10549:35;10600:19;;;10593:35;;;10302:19;;17831:182:0;;;;;;;;;;;;17807:207;;;;;;17786:228;;18035:41;18048:6;18056:10;18068:1;18071;18074;18035:12;:41::i;:::-;:92;;;;18080:47;18099:6;18107:10;18119:1;18122;18125;18080:18;:47::i;:::-;18027:101;;;;;;-1:-1:-1;;;;;18186:17:0;;;;;;;:9;:17;;;;;;;;:26;;;;;;;;;;;;;:34;;;18236:32;;671:25:1;;;-1:-1:-1;;;;;;;;;;;18236:32:0;644:18:1;18236:32:0;;;;;;;17692:584;17561:715;;;;;;;:::o;8432:129::-;7506:5;:3;:5::i;:::-;-1:-1:-1;;;;;7492:19:0;:10;-1:-1:-1;;;;;7492:19:0;;7484:57;;;;-1:-1:-1;;;7484:57:0;;;;;;;:::i;:::-;8511:10:::1;;8492:15;:29;;8484:38;;;::::0;::::1;;8541:12;::::0;8533:5:::1;:20:::0;;-1:-1:-1;;;;;;8533:20:0::1;-1:-1:-1::0;;;;;8541:12:0;;::::1;8533:20:::0;;;::::1;::::0;;8432:129::o;9914:209::-;7383:10;10004:4;7374:20;;;:8;:20;;;;;;;;7366:58;;;;-1:-1:-1;;;7366:58:0;;;;;;;:::i;:::-;10021:22:::1;10027:7;10036:6;10021:5;:22::i;:::-;10077:7;-1:-1:-1::0;;;;;10059:34:0::1;10069:6;10059:34;10086:6;10059:34;;;;671:25:1::0;;659:2;644:18;;525:177;7655:167:0;7691:7;7734:10;;7715:15;:29;7711:81;;-1:-1:-1;7768:12:0;;-1:-1:-1;;;;;7768:12:0;;7655:167::o;7711:81::-;-1:-1:-1;7809:5:0;;-1:-1:-1;;;;;7809:5:0;;7655:167::o;8569:212::-;7506:5;:3;:5::i;:::-;-1:-1:-1;;;;;7492:19:0;:10;-1:-1:-1;;;;;7492:19:0;;7484:57;;;;-1:-1:-1;;;7484:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8641:19:0;::::1;8633:60;;;;-1:-1:-1::0;;;8633:60:0::1;;;;;;;:::i;:::-;8704:13;:21:::0;;-1:-1:-1;;;;;;8704:21:0::1;-1:-1:-1::0;;;;;8704:21:0;::::1;;::::0;;8768:5:::1;::::0;8750:23:::1;::::0;:15:::1;:23;:::i;:::-;8736:11;:37:::0;-1:-1:-1;8569:212:0:o;14120:198::-;14196:4;14213:19;14219:4;14225:6;14213:5;:19::i;:::-;14243:43;-1:-1:-1;;;;;14250:10:0;14243:31;14275:2;14279:6;14243:31;:43::i;:::-;-1:-1:-1;14304:6:0;;14120:198;-1:-1:-1;;14120:198:0:o;14599:268::-;-1:-1:-1;;;;;14675:21:0;;14667:65;;;;-1:-1:-1;;;14667:65:0;;11740:2:1;14667:65:0;;;11722:21:1;11779:2;11759:18;;;11752:30;11818:33;11798:18;;;11791:61;11869:18;;14667:65:0;11538:355:1;14667:65:0;14761:6;14745:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;14778:18:0;;;;;;:9;:18;;;;;:28;;14800:6;;14778:18;:28;;14800:6;;14778:28;:::i;:::-;;;;-1:-1:-1;;14822:37:0;;671:25:1;;;-1:-1:-1;;;;;14822:37:0;;;14839:1;;-1:-1:-1;;;;;;;;;;;14822:37:0;659:2:1;644:18;14822:37:0;;;;;;;;14599:268;;:::o;19230:399::-;19398:110;;-1:-1:-1;;;19398:110:0;;;12156:27:1;19462:16:0;12199:11:1;;;12192:27;12235:12;;;12228:28;;;19342:4:0;;;;12272:12:1;;19398:110:0;;;;-1:-1:-1;;19398:110:0;;;;;;;;;19374:135;;19398:110;19374:135;;;;19520:14;19537:24;;;;;;;;;12522:25:1;;;12595:4;12583:17;;12563:18;;;12556:45;;;;12617:18;;;12610:34;;;12660:18;;;12653:34;;;19374:135:0;;-1:-1:-1;19520:14:0;19537:24;;12494:19:1;;19537:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19537:24:0;;-1:-1:-1;;19537:24:0;;;-1:-1:-1;;;;;;;19580:20:0;;;;;;:40;;;19614:6;-1:-1:-1;;;;;19604:16:0;:6;-1:-1:-1;;;;;19604:16:0;;19580:40;19572:49;19230:399;-1:-1:-1;;;;;;;;19230:399:0:o;19637:429::-;19811:134;;12968:66:1;19811:134:0;;;12956:79:1;19899:16:0;13051:12:1;;;13044:28;13088:12;;;13081:28;;;19755:4:0;;;;13125:12:1;;19811:134:0;12698:445:1;15199:270:0;-1:-1:-1;;;;;15275:21:0;;15267:67;;;;-1:-1:-1;;;15267:67:0;;13350:2:1;15267:67:0;;;13332:21:1;13389:2;13369:18;;;13362:30;13428:34;13408:18;;;13401:62;-1:-1:-1;;;13479:18:1;;;13472:31;13520:19;;15267:67:0;13148:397:1;15267:67:0;-1:-1:-1;;;;;15347:18:0;;;;;;:9;:18;;;;;:28;;15369:6;;15347:18;:28;;15369:6;;15347:28;:::i;:::-;;;;;;;;15402:6;15386:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;15424:37:0;;671:25:1;;;15450:1:0;;-1:-1:-1;;;;;15424:37:0;;;-1:-1:-1;;;;;;;;;;;15424:37:0;659:2:1;644:18;15424:37:0;525:177:1;4777:201:0;4901:68;;-1:-1:-1;;;;;13808:15:1;;;4901:68:0;;;13790:34:1;13860:15;;13840:18;;;13833:43;13892:18;;;13885:34;;;4875:95:0;;4894:5;;-1:-1:-1;;;4924:27:0;13725:18:1;;4901:68:0;;;;-1:-1:-1;;4901:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;4901:68:0;-1:-1:-1;;;;;;4901:68:0;;;;;;;;;;4875:18;:95::i;:::-;4777:201;;;;:::o;13353:204::-;13414:4;13439:10;-1:-1:-1;;;;;13439:26:0;;;;;:57;;-1:-1:-1;13469:10:0;-1:-1:-1;;;;;13469:27:0;13491:4;13469:27;;13439:57;13431:66;;;;;;13508:17;13514:2;13518:6;13508:5;:17::i;:::-;-1:-1:-1;13543:6:0;;13353:204;-1:-1:-1;13353:204:0:o;4596:173::-;4702:58;;-1:-1:-1;;;;;14122:32:1;;4702:58:0;;;14104:51:1;14171:18;;;14164:34;;;4676:85:0;;4695:5;;-1:-1:-1;;;4725:23:0;14077:18:1;;4702:58:0;13930:274:1;4676:85:0;4596:173;;;:::o;5336:598::-;5424:27;5432:5;-1:-1:-1;;;;;5424:25:0;;:27::i;:::-;5416:71;;;;-1:-1:-1;;;5416:71:0;;14411:2:1;5416:71:0;;;14393:21:1;14450:2;14430:18;;;14423:30;14489:33;14469:18;;;14462:61;14540:18;;5416:71:0;14209:355:1;5416:71:0;5561:12;5575:23;5610:5;-1:-1:-1;;;;;5602:19:0;5622:4;5602:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5560:67;;;;5646:7;5638:52;;;;-1:-1:-1;;;5638:52:0;;15050:2:1;5638:52:0;;;15032:21:1;;;15069:18;;;15062:30;15128:34;15108:18;;;15101:62;15180:18;;5638:52:0;14848:356:1;5638:52:0;5707:17;;:21;5703:224;;5849:10;5838:30;;;;;;;;;;;;:::i;:::-;5830:85;;;;-1:-1:-1;;;5830:85:0;;15411:2:1;5830:85:0;;;15393:21:1;15450:2;15430:18;;;15423:30;15489:34;15469:18;;;15462:62;-1:-1:-1;;;15540:18:1;;;15533:40;15590:19;;5830:85:0;15209:406:1;4156:374:0;4216:4;4439:20;;4282:66;4479:15;;;;;:42;;-1:-1:-1;4498:23:0;;;4471:51;-1:-1:-1;;4156:374:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;192:328;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;453:2;442:9;438:18;425:32;415:42;;476:38;510:2;499:9;495:18;476:38;:::i;:::-;466:48;;192:328;;;;;:::o;889:254::-;957:6;965;1018:2;1006:9;997:7;993:23;989:32;986:52;;;1034:1;1031;1024:12;986:52;1070:9;1057:23;1047:33;;1099:38;1133:2;1122:9;1118:18;1099:38;:::i;:::-;1089:48;;889:254;;;;;:::o;1148:258::-;1220:1;1230:113;1244:6;1241:1;1238:13;1230:113;;;1320:11;;;1314:18;1301:11;;;1294:39;1266:2;1259:10;1230:113;;;1361:6;1358:1;1355:13;1352:48;;;-1:-1:-1;;1396:1:1;1378:16;;1371:27;1148:258::o;1411:383::-;1560:2;1549:9;1542:21;1523:4;1592:6;1586:13;1635:6;1630:2;1619:9;1615:18;1608:34;1651:66;1710:6;1705:2;1694:9;1690:18;1685:2;1677:6;1673:15;1651:66;:::i;:::-;1778:2;1757:15;-1:-1:-1;;1753:29:1;1738:45;;;;1785:2;1734:54;;1411:383;-1:-1:-1;;1411:383:1:o;1799:254::-;1867:6;1875;1928:2;1916:9;1907:7;1903:23;1899:32;1896:52;;;1944:1;1941;1934:12;1896:52;1967:29;1986:9;1967:29;:::i;:::-;1957:39;2043:2;2028:18;;;;2015:32;;-1:-1:-1;;;1799:254:1:o;2250:328::-;2327:6;2335;2343;2396:2;2384:9;2375:7;2371:23;2367:32;2364:52;;;2412:1;2409;2402:12;2364:52;2435:29;2454:9;2435:29;:::i;:::-;2425:39;;2483:38;2517:2;2506:9;2502:18;2483:38;:::i;:::-;2473:48;;2568:2;2557:9;2553:18;2540:32;2530:42;;2250:328;;;;;:::o;2583:180::-;2642:6;2695:2;2683:9;2674:7;2670:23;2666:32;2663:52;;;2711:1;2708;2701:12;2663:52;-1:-1:-1;2734:23:1;;2583:180;-1:-1:-1;2583:180:1:o;2768:186::-;2827:6;2880:2;2868:9;2859:7;2855:23;2851:32;2848:52;;;2896:1;2893;2886:12;2848:52;2919:29;2938:9;2919:29;:::i;3148:733::-;3236:6;3244;3252;3260;3313:2;3301:9;3292:7;3288:23;3284:32;3281:52;;;3329:1;3326;3319:12;3281:52;3352:29;3371:9;3352:29;:::i;:::-;3342:39;;3428:2;3417:9;3413:18;3400:32;3390:42;;3483:2;3472:9;3468:18;3455:32;3506:18;3547:2;3539:6;3536:14;3533:34;;;3563:1;3560;3553:12;3533:34;3601:6;3590:9;3586:22;3576:32;;3646:7;3639:4;3635:2;3631:13;3627:27;3617:55;;3668:1;3665;3658:12;3617:55;3708:2;3695:16;3734:2;3726:6;3723:14;3720:34;;;3750:1;3747;3740:12;3720:34;3795:7;3790:2;3781:6;3777:2;3773:15;3769:24;3766:37;3763:57;;;3816:1;3813;3806:12;3763:57;3148:733;;;;-1:-1:-1;;3847:2:1;3839:11;;-1:-1:-1;;;3148:733:1:o;4094:693::-;4205:6;4213;4221;4229;4237;4245;4253;4306:3;4294:9;4285:7;4281:23;4277:33;4274:53;;;4323:1;4320;4313:12;4274:53;4346:29;4365:9;4346:29;:::i;:::-;4336:39;;4394:38;4428:2;4417:9;4413:18;4394:38;:::i;:::-;4384:48;;4479:2;4468:9;4464:18;4451:32;4441:42;;4530:2;4519:9;4515:18;4502:32;4492:42;;4584:3;4573:9;4569:19;4556:33;4629:4;4622:5;4618:16;4611:5;4608:27;4598:55;;4649:1;4646;4639:12;4598:55;4094:693;;;;-1:-1:-1;4094:693:1;;;;4672:5;4724:3;4709:19;;4696:33;;-1:-1:-1;4776:3:1;4761:19;;;4748:33;;4094:693;-1:-1:-1;;4094:693:1:o;4792:658::-;4963:2;5015:21;;;5085:13;;4988:18;;;5107:22;;;4934:4;;4963:2;5186:15;;;;5160:2;5145:18;;;4934:4;5229:195;5243:6;5240:1;5237:13;5229:195;;;5308:13;;-1:-1:-1;;;;;5304:39:1;5292:52;;5399:15;;;;5364:12;;;;5340:1;5258:9;5229:195;;;-1:-1:-1;5441:3:1;;4792:658;-1:-1:-1;;;;;;4792:658:1:o;5455:118::-;5541:5;5534:13;5527:21;5520:5;5517:32;5507:60;;5563:1;5560;5553:12;5507:60;5455:118;:::o;5578:241::-;5634:6;5687:2;5675:9;5666:7;5662:23;5658:32;5655:52;;;5703:1;5700;5693:12;5655:52;5742:9;5729:23;5761:28;5783:5;5761:28;:::i;5824:260::-;5892:6;5900;5953:2;5941:9;5932:7;5928:23;5924:32;5921:52;;;5969:1;5966;5959:12;5921:52;5992:29;6011:9;5992:29;:::i;:::-;5982:39;;6040:38;6074:2;6063:9;6059:18;6040:38;:::i;6089:322::-;6166:6;6174;6182;6235:2;6223:9;6214:7;6210:23;6206:32;6203:52;;;6251:1;6248;6241:12;6203:52;6287:9;6274:23;6264:33;;6316:38;6350:2;6339:9;6335:18;6316:38;:::i;6416:349::-;6618:2;6600:21;;;6657:2;6637:18;;;6630:30;6696:27;6691:2;6676:18;;6669:55;6756:2;6741:18;;6416:349::o;6770:380::-;6849:1;6845:12;;;;6892;;;6913:61;;6967:4;6959:6;6955:17;6945:27;;6913:61;7020:2;7012:6;7009:14;6989:18;6986:38;6983:161;;;7066:10;7061:3;7057:20;7054:1;7047:31;7101:4;7098:1;7091:15;7129:4;7126:1;7119:15;6983:161;;6770:380;;;:::o;7565:127::-;7626:10;7621:3;7617:20;7614:1;7607:31;7657:4;7654:1;7647:15;7681:4;7678:1;7671:15;7697:125;7737:4;7765:1;7762;7759:8;7756:34;;;7770:18;;:::i;:::-;-1:-1:-1;7807:9:1;;7697:125::o;7827:411::-;8029:2;8011:21;;;8068:2;8048:18;;;8041:30;8107:34;8102:2;8087:18;;8080:62;-1:-1:-1;;;8173:2:1;8158:18;;8151:45;8228:3;8213:19;;7827:411::o;8243:128::-;8283:3;8314:1;8310:6;8307:1;8304:13;8301:39;;;8320:18;;:::i;:::-;-1:-1:-1;8356:9:1;;8243:128::o;8376:559::-;-1:-1:-1;;;;;8589:32:1;;8571:51;;8653:2;8638:18;;8631:34;;;8701:2;8696;8681:18;;8674:30;;;8720:18;;8713:34;;;8740:6;8790;8784:3;8769:19;;8756:49;8855:1;8825:22;;;8849:3;8821:32;;;8814:43;;;;8918:2;8897:15;;;-1:-1:-1;;8893:29:1;8878:45;8874:55;;8376:559;-1:-1:-1;;;8376:559:1:o;8940:245::-;9007:6;9060:2;9048:9;9039:7;9035:23;9031:32;9028:52;;;9076:1;9073;9066:12;9028:52;9108:9;9102:16;9127:28;9149:5;9127:28;:::i;9190:349::-;9392:2;9374:21;;;9431:2;9411:18;;;9404:30;9470:27;9465:2;9450:18;;9443:55;9530:2;9515:18;;9190:349::o;9903:135::-;9942:3;-1:-1:-1;;9963:17:1;;9960:43;;;9983:18;;:::i;:::-;-1:-1:-1;10030:1:1;10019:13;;9903:135::o;10639:352::-;10841:2;10823:21;;;10880:2;10860:18;;;10853:30;10919;10914:2;10899:18;;10892:58;10982:2;10967:18;;10639:352::o;11349:184::-;11419:6;11472:2;11460:9;11451:7;11447:23;11443:32;11440:52;;;11488:1;11485;11478:12;11440:52;-1:-1:-1;11511:16:1;;11349:184;-1:-1:-1;11349:184:1:o;14569:274::-;14698:3;14736:6;14730:13;14752:53;14798:6;14793:3;14786:4;14778:6;14774:17;14752:53;:::i;:::-;14821:16;;;;;14569:274;-1:-1:-1;;14569:274:1:o

Swarm Source

ipfs://4db622a89335a7f516edf22bc6964bb0d3dae43db253408484323d804b982d4c
Loading