ETH Price: $3,345.71 (-1.28%)

Token

FLASH-ALT-LP Token (FLASH-ALT-LP)
 

Overview

Max Total Supply

33,263.815847317601860033 FLASH-ALT-LP

Holders

13

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,414.407462536349171589 FLASH-ALT-LP

Value
$0.00
0xddC60D163015CF5Ca1369D557A2ca1cC2de1F1e3
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xf8b3d242...124797c0f
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Pool

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-01-01
*/

// SPDX-License-Identifier: MIT


pragma solidity 0.6.12;

// A library for performing overflow-safe math, courtesy of DappHub: https://github.com/dapphub/ds-math/blob/d0ef6d6a5f/src/math.sol
// Modified to include only the essentials
library SafeMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "MATH:: ADD_OVERFLOW");
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x, "MATH:: SUB_UNDERFLOW");
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "MATH:: MUL_OVERFLOW");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "MATH:: DIVISION_BY_ZERO");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}



pragma solidity 0.6.12;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    function burn(uint256 value) external returns (bool);
}



pragma solidity 0.6.12;

interface IFlashProtocol {
    function stake(
        uint256 _amountIn,
        uint256 _days,
        address _receiver,
        bytes calldata _data
    )
        external
        returns (
            uint256 mintedAmount,
            uint256 matchedAmount,
            bytes32 id
        );

    function unstake(bytes32 _id)
        external
        returns (uint256 withdrawAmount);

    function getFPY(uint256 _amountIn) external view returns (uint256);
}



pragma solidity 0.6.12;

interface IPool {
    function initialize(address _token) external;

    function stakeWithFeeRewardDistribution(
        uint256 _amountIn,
        address _staker,
        uint256 _expectedOutput
    ) external returns (uint256 result);

    function addLiquidity(
        uint256 _amountFLASH,
        uint256 _amountALT,
        uint256 _amountFLASHMin,
        uint256 _amountALTMin,
        address _maker
    )
        external
        returns (
            uint256,
            uint256,
            uint256
        );

    function removeLiquidity(address _maker) external returns (uint256, uint256);

    function swapWithFeeRewardDistribution(
        uint256 _amountIn,
        address _staker,
        uint256 _expectedOutput
    ) external returns (uint256 result);
}



pragma solidity 0.6.12;



// Lightweight token modelled after UNI-LP:
// https://github.com/Uniswap/uniswap-v2-core/blob/v1.0.1/contracts/UniswapV2ERC20.sol
// Adds:
//   - An exposed `mint()` with minting role
//   - An exposed `burn()`
//   - ERC-3009 (`transferWithAuthorization()`)
//   - flashMint() - allows to flashMint an arbitrary amount of FLASH, with the
//     condition that it is burned before the end of the transaction.
contract PoolERC20 is IERC20 {
    using SafeMath for uint256;

    // bytes32 private constant EIP712DOMAIN_HASH =
    // keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")
    bytes32 private constant EIP712DOMAIN_HASH = 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f;

    // bytes32 private constant NAME_HASH = keccak256("FLASH-ALT-LP Token")
    bytes32 private constant NAME_HASH = 0xfdde3a7807889787f51ab17062704a0d81341ba7debe5a9773b58a1b5e5f422c;

    // bytes32 private constant VERSION_HASH = keccak256("1")
    bytes32 private constant VERSION_HASH = 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6;

    // bytes32 public constant PERMIT_TYPEHASH =
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

    // bytes32 public constant TRANSFER_WITH_AUTHORIZATION_TYPEHASH =
    // keccak256("TransferWithAuthorization(address from,address to,uint256 value,uint256 validAfter,uint256 validBefore,bytes32 nonce)");
    bytes32
        public constant TRANSFER_WITH_AUTHORIZATION_TYPEHASH = 0x7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a2267;

    string public constant name = "FLASH-ALT-LP Token";
    string public constant symbol = "FLASH-ALT-LP";
    uint8 public constant decimals = 18;

    uint256 public override totalSupply;

    address public minter;

    mapping(address => uint256) public override balanceOf;
    mapping(address => mapping(address => uint256)) public override allowance;

    // ERC-2612, ERC-3009 state
    mapping(address => uint256) public nonces;
    mapping(address => mapping(bytes32 => bool)) public authorizationState;

    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event AuthorizationUsed(address indexed authorizer, bytes32 indexed nonce);

    function _validateSignedData(
        address signer,
        bytes32 encodeData,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal view {
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", getDomainSeparator(), encodeData));
        address recoveredAddress = ecrecover(digest, v, r, s);
        // Explicitly disallow authorizations for address(0) as ecrecover returns address(0) on malformed messages
        require(recoveredAddress != address(0) && recoveredAddress == signer, "FLASH-ALT-LP Token:: INVALID_SIGNATURE");
    }

    function _mint(address to, uint256 value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint256 value) internal {
        // Balance is implicitly checked with SafeMath's underflow protection
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _approve(
        address owner,
        address spender,
        uint256 value
    ) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) private {
        require(to != address(0), "FLASH-ALT-LP Token:: RECEIVER_IS_TOKEN_OR_ZERO");
        // Balance is implicitly checked with SafeMath's underflow protection
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(from, to, value);
    }

    function getChainId() public pure returns (uint256 chainId) {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            chainId := chainid()
        }
    }

    function getDomainSeparator() public view returns (bytes32) {
        return keccak256(abi.encode(EIP712DOMAIN_HASH, NAME_HASH, VERSION_HASH, getChainId(), address(this)));
    }

    function burn(uint256 value) external override returns (bool) {
        _burn(msg.sender, value);
        return true;
    }

    function approve(address spender, uint256 value) external override returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint256 value) external override returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override returns (bool) {
        uint256 fromAllowance = allowance[from][msg.sender];
        if (fromAllowance != uint256(-1)) {
            // Allowance is implicitly checked with SafeMath's underflow protection
            allowance[from][msg.sender] = fromAllowance.sub(value);
        }
        _transfer(from, to, value);
        return true;
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        require(deadline >= block.timestamp, "FLASH-ALT-LP Token:: AUTH_EXPIRED");

        bytes32 encodeData = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner], deadline));
        nonces[owner] = nonces[owner].add(1);
        _validateSignedData(owner, encodeData, v, r, s);

        _approve(owner, spender, value);
    }

    function transferWithAuthorization(
        address from,
        address to,
        uint256 value,
        uint256 validAfter,
        uint256 validBefore,
        bytes32 nonce,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        require(block.timestamp > validAfter, "FLASH-ALT-LP Token:: AUTH_NOT_YET_VALID");
        require(block.timestamp < validBefore, "FLASH-ALT-LP Token:: AUTH_EXPIRED");
        require(!authorizationState[from][nonce], "FLASH-ALT-LP Token:: AUTH_ALREADY_USED");

        bytes32 encodeData = keccak256(
            abi.encode(TRANSFER_WITH_AUTHORIZATION_TYPEHASH, from, to, value, validAfter, validBefore, nonce)
        );
        _validateSignedData(from, encodeData, v, r, s);

        authorizationState[from][nonce] = true;
        emit AuthorizationUsed(from, nonce);

        _transfer(from, to, value);
    }
}



pragma solidity 0.6.12;






contract Pool is PoolERC20, IPool {
    using SafeMath for uint256;

    uint256 public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant TRANSFER_SELECTOR = bytes4(keccak256(bytes("transfer(address,uint256)")));
    address public constant FLASH_TOKEN = 0xB4467E8D621105312a914F1D42f10770C0Ffe3c8;
    address public constant FLASH_PROTOCOL = 0xEc02f813404656E2A2AEd5BaeEd41D785324E8D0;

    uint256 public reserveFlashAmount;
    uint256 public reserveAltAmount;
    uint256 private unlocked = 1;

    address public token;
    address public factory;

    modifier lock() {
        require(unlocked == 1, "Pool: LOCKED");
        unlocked = 0;
        _;
        unlocked = 1;
    }

    modifier onlyFactory() {
        require(msg.sender == factory, "Pool:: ONLY_FACTORY");
        _;
    }

    constructor() public {
        factory = msg.sender;
    }

    function _safeTransfer(
        address _token,
        address _to,
        uint256 _value
    ) private {
        (bool success, bytes memory data) = _token.call(abi.encodeWithSelector(TRANSFER_SELECTOR, _to, _value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "Pool:: TRANSFER_FAILED");
    }

    function initialize(address _token) public override onlyFactory {
        token = _token;
    }

    function swapWithFeeRewardDistribution(
        uint256 _amountIn,
        address _staker,
        uint256 _expectedOutput
    ) public override lock onlyFactory returns (uint256 result) {
        result = getAPYSwap(_amountIn);
        require(_expectedOutput <= result, "Pool:: EXPECTED_IS_GREATER");
        calcNewReserveSwap(_amountIn, result);
        _safeTransfer(FLASH_TOKEN, _staker, result);
    }

    function stakeWithFeeRewardDistribution(
        uint256 _amountIn,
        address _staker,
        uint256 _expectedOutput
    ) public override lock onlyFactory returns (uint256 result) {
        result = getAPYStake(_amountIn);
        require(_expectedOutput <= result, "Pool:: EXPECTED_IS_GREATER");
        calcNewReserveStake(_amountIn, result);
        _safeTransfer(token, _staker, result);
    }

    function addLiquidity(
        uint256 _amountFLASH,
        uint256 _amountALT,
        uint256 _amountFLASHMin,
        uint256 _amountALTMin,
        address _maker
    )
        public
        override
        onlyFactory
        returns (
            uint256 amountFLASH,
            uint256 amountALT,
            uint256 liquidity
        )
    {
        (amountFLASH, amountALT) = _addLiquidity(_amountFLASH, _amountALT, _amountFLASHMin, _amountALTMin);
        liquidity = mintLiquidityTokens(_maker, amountFLASH, amountALT);
        calcNewReserveAddLiquidity(amountFLASH, amountALT);
    }

    function removeLiquidity(address _maker)
        public
        override
        onlyFactory
        returns (uint256 amountFLASH, uint256 amountALT)
    {
        (amountFLASH, amountALT) = burn(_maker);
    }

    function getAPYStake(uint256 _amountIn) public view returns (uint256 result) {
        uint256 amountInWithFee = _amountIn.mul(getLPFee());
        uint256 num = amountInWithFee.mul(reserveAltAmount);
        uint256 den = (reserveFlashAmount.mul(1000)).add(amountInWithFee);
        result = num.div(den);
    }

    function getAPYSwap(uint256 _amountIn) public view returns (uint256 result) {
        uint256 amountInWithFee = _amountIn.mul(getLPFee());
        uint256 num = amountInWithFee.mul(reserveFlashAmount);
        uint256 den = (reserveAltAmount.mul(1000)).add(amountInWithFee);
        result = num.div(den);
    }

    function getLPFee() public view returns (uint256) {
        uint256 fpy = IFlashProtocol(FLASH_PROTOCOL).getFPY(0);
        return uint256(1000).sub(fpy.div(5e15));
    }

    function quote(
        uint256 _amountA,
        uint256 _reserveA,
        uint256 _reserveB
    ) public pure returns (uint256 amountB) {
        require(_amountA > 0, "Pool:: INSUFFICIENT_AMOUNT");
        require(_reserveA > 0 && _reserveB > 0, "Pool:: INSUFFICIENT_LIQUIDITY");
        amountB = _amountA.mul(_reserveB).div(_reserveA);
    }

    function burn(address to) private lock returns (uint256 amountFLASH, uint256 amountALT) {
        uint256 balanceFLASH = IERC20(FLASH_TOKEN).balanceOf(address(this));
        uint256 balanceALT = IERC20(token).balanceOf(address(this));
        uint256 liquidity = balanceOf[address(this)];

        amountFLASH = liquidity.mul(balanceFLASH) / totalSupply;
        amountALT = liquidity.mul(balanceALT) / totalSupply;

        require(amountFLASH > 0 && amountALT > 0, "Pool:: INSUFFICIENT_LIQUIDITY_BURNED");

        _burn(address(this), liquidity);

        _safeTransfer(FLASH_TOKEN, to, amountFLASH);
        _safeTransfer(token, to, amountALT);

        balanceFLASH = balanceFLASH.sub(IERC20(FLASH_TOKEN).balanceOf(address(this)));
        balanceALT = balanceALT.sub(IERC20(token).balanceOf(address(this)));

        calcNewReserveRemoveLiquidity(balanceFLASH, balanceALT);
    }

    function _addLiquidity(
        uint256 _amountFLASH,
        uint256 _amountALT,
        uint256 _amountFLASHMin,
        uint256 _amountALTMin
    ) private view returns (uint256 amountFLASH, uint256 amountALT) {
        if (reserveAltAmount == 0 && reserveFlashAmount == 0) {
            (amountFLASH, amountALT) = (_amountFLASH, _amountALT);
        } else {
            uint256 amountALTQuote = quote(_amountFLASH, reserveFlashAmount, reserveAltAmount);
            if (amountALTQuote <= _amountALT) {
                require(amountALTQuote >= _amountALTMin, "Pool:: INSUFFICIENT_B_AMOUNT");
                (amountFLASH, amountALT) = (_amountFLASH, amountALTQuote);
            } else {
                uint256 amountFLASHQuote = quote(_amountALT, reserveAltAmount, reserveFlashAmount);
                require(
                    (amountFLASHQuote <= _amountFLASH) && (amountFLASHQuote >= _amountFLASHMin),
                    "Pool:: INSUFFICIENT_A_AMOUNT"
                );
                (amountFLASH, amountALT) = (amountFLASHQuote, _amountALT);
            }
        }
    }

    function mintLiquidityTokens(
        address _to,
        uint256 _flashAmount,
        uint256 _altAmount
    ) private returns (uint256 liquidity) {
        if (totalSupply == 0) {
            liquidity = SafeMath.sqrt(_flashAmount.mul(_altAmount)).sub(MINIMUM_LIQUIDITY);
            _mint(address(0), MINIMUM_LIQUIDITY);
        } else {
            liquidity = SafeMath.min(
                _flashAmount.mul(totalSupply) / reserveFlashAmount,
                _altAmount.mul(totalSupply) / reserveAltAmount
            );
        }
        require(liquidity > 0, "Pool:: INSUFFICIENT_LIQUIDITY_MINTED");
        _mint(_to, liquidity);
    }

    function calcNewReserveStake(uint256 _amountIn, uint256 _amountOut) private {
        reserveFlashAmount = reserveFlashAmount.add(_amountIn);
        reserveAltAmount = reserveAltAmount.sub(_amountOut);
    }

    function calcNewReserveSwap(uint256 _amountIn, uint256 _amountOut) private {
        reserveFlashAmount = reserveFlashAmount.sub(_amountOut);
        reserveAltAmount = reserveAltAmount.add(_amountIn);
    }

    function calcNewReserveAddLiquidity(uint256 _amountFLASH, uint256 _amountALT) private {
        reserveFlashAmount = reserveFlashAmount.add(_amountFLASH);
        reserveAltAmount = reserveAltAmount.add(_amountALT);
    }

    function calcNewReserveRemoveLiquidity(uint256 _amountFLASH, uint256 _amountALT) private {
        reserveFlashAmount = reserveFlashAmount.sub(_amountFLASH);
        reserveAltAmount = reserveAltAmount.sub(_amountALT);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizer","type":"address"},{"indexed":true,"internalType":"bytes32","name":"nonce","type":"bytes32"}],"name":"AuthorizationUsed","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":"FLASH_PROTOCOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASH_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRANSFER_WITH_AUTHORIZATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountFLASH","type":"uint256"},{"internalType":"uint256","name":"_amountALT","type":"uint256"},{"internalType":"uint256","name":"_amountFLASHMin","type":"uint256"},{"internalType":"uint256","name":"_amountALTMin","type":"uint256"},{"internalType":"address","name":"_maker","type":"address"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountFLASH","type":"uint256"},{"internalType":"uint256","name":"amountALT","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","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":[{"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":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"authorizationState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","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":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getAPYStake","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getAPYSwap","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"chainId","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getDomainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","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":[{"internalType":"address","name":"owner","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":"uint256","name":"_amountA","type":"uint256"},{"internalType":"uint256","name":"_reserveA","type":"uint256"},{"internalType":"uint256","name":"_reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_maker","type":"address"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountFLASH","type":"uint256"},{"internalType":"uint256","name":"amountALT","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveAltAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveFlashAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_expectedOutput","type":"uint256"}],"name":"stakeWithFeeRewardDistribution","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_expectedOutput","type":"uint256"}],"name":"swapWithFeeRewardDistribution","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"validAfter","type":"uint256"},{"internalType":"uint256","name":"validBefore","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600160085534801561001557600080fd5b5033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613521806100666000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806395d89b4111610125578063c4d66de8116100ad578063e0ab07721161007c578063e0ab077214610aa3578063e3ee160e14610b31578063e94a010214610bdf578063ed24911d14610c43578063fc0c546a14610c6157610211565b8063c4d66de8146108ef578063d505accf14610933578063d798f86e146109cc578063dd62ed3e14610a2b57610211565b8063a9059cbb116100f4578063a9059cbb146107c5578063ad615dec14610829578063ba9a7a561461087f578063c0bd9f161461089d578063c45a0155146108bb57610211565b806395d89b41146106ae578063a0cc6a6814610731578063a10adb171461074f578063a7f0e9031461079157610211565b80633408e470116101a85780634d861ece116101775780634d861ece1461050857806350b814a014610526578063687fbed81461059257806370a08231146105fe5780637ecebe001461065657610211565b80633408e470146104465780633750a8bd14610464578063411542701461048257806342966c68146104c457610211565b806323b872dd116101e457806323b872dd1461034f57806323c6e14c146103d357806330adf81f14610407578063313ce5671461042557610211565b806306fdde03146102165780630754617214610299578063095ea7b3146102cd57806318160ddd14610331575b600080fd5b61021e610c95565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a1610cce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610319600480360360408110156102e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cf4565b60405180821515815260200191505060405180910390f35b610339610d0b565b6040518082815260200191505060405180910390f35b6103bb6004803603606081101561036557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d11565b60405180821515815260200191505060405180910390f35b6103db610e65565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61040f610e7d565b6040518082815260200191505060405180910390f35b61042d610ea4565b604051808260ff16815260200191505060405180910390f35b61044e610ea9565b6040518082815260200191505060405180910390f35b61046c610eb1565b6040518082815260200191505060405180910390f35b6104ae6004803603602081101561049857600080fd5b8101908080359060200190929190505050610f8b565b6040518082815260200191505060405180910390f35b6104f0600480360360208110156104da57600080fd5b810190808035906020019092919050505061100d565b60405180821515815260200191505060405180910390f35b610510611022565b6040518082815260200191505060405180910390f35b61057c6004803603606081101561053c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611028565b6040518082815260200191505060405180910390f35b6105e8600480360360608110156105a857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611226565b6040518082815260200191505060405180910390f35b6106406004803603602081101561061457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611432565b6040518082815260200191505060405180910390f35b6106986004803603602081101561066c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061144a565b6040518082815260200191505060405180910390f35b6106b6611462565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106f65780820151818401526020810190506106db565b50505050905090810190601f1680156107235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61073961149b565b6040518082815260200191505060405180910390f35b61077b6004803603602081101561076557600080fd5b81019080803590602001909291905050506114c2565b6040518082815260200191505060405180910390f35b610799611544565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610811600480360360408110156107db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061155c565b60405180821515815260200191505060405180910390f35b6108696004803603606081101561083f57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611573565b6040518082815260200191505060405180910390f35b61088761169a565b6040518082815260200191505060405180910390f35b6108a56116a0565b6040518082815260200191505060405180910390f35b6108c36116a6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109316004803603602081101561090557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116cc565b005b6109ca600480360360e081101561094957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506117d3565b005b610a0e600480360360208110156109e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119c5565b604051808381526020018281526020019250505060405180910390f35b610a8d60048036036040811015610a4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aa1565b6040518082815260200191505060405180910390f35b610b0d600480360360a0811015610ab957600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ac6565b60405180848152602001838152602001828152602001935050505060405180910390f35b610bdd6004803603610120811015610b4857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611bc4565b005b610c2b60048036036040811015610bf557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ea3565b60405180821515815260200191505060405180910390f35b610c4b611ed2565b6040518082815260200191505060405180910390f35b610c69611fa6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6040518060400160405280601281526020017f464c4153482d414c542d4c5020546f6b656e000000000000000000000000000081525081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d01338484611fcc565b6001905092915050565b60005481565b600080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e4e57610dcd83826120b790919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610e5985858561213a565b60019150509392505050565b73b4467e8d621105312a914f1d42f10770c0ffe3c881565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b601281565b600046905090565b60008073ec02f813404656e2a2aed5baeed41d785324e8d073ffffffffffffffffffffffffffffffffffffffff1663cc704d5460006040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f1a57600080fd5b505afa158015610f2e573d6000803e3d6000fd5b505050506040513d6020811015610f4457600080fd5b81019080805190602001909291905050509050610f85610f746611c37937e080008361235490919063ffffffff16565b6103e86120b790919063ffffffff16565b91505090565b600080610fa8610f99610eb1565b846123e390919063ffffffff16565b90506000610fc1600754836123e390919063ffffffff16565b90506000610fee83610fe06103e86006546123e390919063ffffffff16565b61248690919063ffffffff16565b9050611003818361235490919063ffffffff16565b9350505050919050565b60006110193383612509565b60019050919050565b60065481565b60006001600854146110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f506f6f6c3a204c4f434b4544000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600881905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461116d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f6f6c3a3a204f4e4c595f464143544f52590000000000000000000000000081525060200191505060405180910390fd5b611176846114c2565b9050808211156111ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f506f6f6c3a3a2045585045435445445f49535f4752454154455200000000000081525060200191505060405180910390fd5b6111f88482612623565b61121773b4467e8d621105312a914f1d42f10770c0ffe3c8848361265d565b60016008819055509392505050565b60006001600854146112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f506f6f6c3a204c4f434b4544000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600881905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f6f6c3a3a204f4e4c595f464143544f52590000000000000000000000000081525060200191505060405180910390fd5b61137484610f8b565b9050808211156113ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f506f6f6c3a3a2045585045435445445f49535f4752454154455200000000000081525060200191505060405180910390fd5b6113f68482612894565b611423600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848361265d565b60016008819055509392505050565b60026020528060005260406000206000915090505481565b60046020528060005260406000206000915090505481565b6040518060400160405280600c81526020017f464c4153482d414c542d4c50000000000000000000000000000000000000000081525081565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226760001b81565b6000806114df6114d0610eb1565b846123e390919063ffffffff16565b905060006114f8600654836123e390919063ffffffff16565b90506000611525836115176103e86007546123e390919063ffffffff16565b61248690919063ffffffff16565b905061153a818361235490919063ffffffff16565b9350505050919050565b73ec02f813404656e2a2aed5baeed41d785324e8d081565b600061156933848461213a565b6001905092915050565b60008084116115ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f506f6f6c3a3a20494e53554646494349454e545f414d4f554e5400000000000081525060200191505060405180910390fd5b6000831180156115fa5750600082115b61166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f506f6f6c3a3a20494e53554646494349454e545f4c495155494449545900000081525060200191505060405180910390fd5b6116918361168384876123e390919063ffffffff16565b61235490919063ffffffff16565b90509392505050565b6103e881565b60075481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f6f6c3a3a204f4e4c595f464143544f52590000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b4284101561182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806134366021913960400191505060405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b888888600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205489604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506119606001600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248690919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b088828686866128ce565b6119bb888888611fcc565b5050505050505050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f6f6c3a3a204f4e4c595f464143544f52590000000000000000000000000081525060200191505060405180910390fd5b611a9483612a5e565b8092508193505050915091565b6003602052816000526040600020602052806000526040600020600091509150505481565b6000806000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f6f6c3a3a204f4e4c595f464143544f52590000000000000000000000000081525060200191505060405180910390fd5b611b9a88888888612f5e565b8093508194505050611bad8484846130d4565b9050611bb983836131d8565b955095509592505050565b854211611c1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061347d6027913960400191505060405180910390fd5b844210611c74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806134366021913960400191505060405180910390fd5b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff1615611d28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133e26026913960400191505060405180910390fd5b60007f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226760001b8a8a8a8a8a8a604051602001808881526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001838152602001828152602001975050505050505050604051602081830303815290604052805190602001209050611ddf8a828686866128ce565b6001600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002060006101000a81548160ff021916908315150217905550848a73ffffffffffffffffffffffffffffffffffffffff167f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a560405160405180910390a3611e978a8a8a61213a565b50505050505050505050565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b7ffdde3a7807889787f51ab17062704a0d81341ba7debe5a9773b58a1b5e5f422c60001b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660001b611f48610ea9565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405160208183030381529060405280519060200120905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000828284039150811115612134576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d4154483a3a205355425f554e444552464c4f5700000000000000000000000081525060200191505060405180910390fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613408602e913960400191505060405180910390fd5b61221281600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120b790919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122a781600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248690919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008082116123cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d4154483a3a204449564953494f4e5f42595f5a45524f00000000000000000081525060200191505060405180910390fd5b60008284816123d657fe5b0490508091505092915050565b6000808314156123f65760009050612480565b600082840290508284828161240757fe5b041461247b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4d4154483a3a204d554c5f4f564552464c4f570000000000000000000000000081525060200191505060405180910390fd5b809150505b92915050565b6000828284019150811015612503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4d4154483a3a204144445f4f564552464c4f570000000000000000000000000081525060200191505060405180910390fd5b92915050565b61255b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120b790919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125b3816000546120b790919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b612638816006546120b790919063ffffffff16565b6006819055506126538260075461248690919063ffffffff16565b6007819055505050565b600060608473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106127745780518252602082019150602081019050602083039250612751565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146127d6576040519150601f19603f3d011682016040523d82523d6000602084013e6127db565b606091505b509150915081801561281b575060008151148061281a575080806020019051602081101561280857600080fd5b81019080805190602001909291905050505b5b61288d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f506f6f6c3a3a205452414e534645525f4641494c45440000000000000000000081525060200191505060405180910390fd5b5050505050565b6128a98260065461248690919063ffffffff16565b6006819055506128c4816007546120b790919063ffffffff16565b6007819055505050565b60006128d8611ed2565b8560405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561298c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612a0057508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612a55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134576026913960400191505060405180910390fd5b50505050505050565b600080600160085414612ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f506f6f6c3a204c4f434b4544000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600881905550600073b4467e8d621105312a914f1d42f10770c0ffe3c873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612b5e57600080fd5b505afa158015612b72573d6000803e3d6000fd5b505050506040513d6020811015612b8857600080fd5b810190808051906020019092919050505090506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2657600080fd5b505afa158015612c3a573d6000803e3d6000fd5b505050506040513d6020811015612c5057600080fd5b810190808051906020019092919050505090506000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600054612cbd84836123e390919063ffffffff16565b81612cc457fe5b049450600054612cdd83836123e390919063ffffffff16565b81612ce457fe5b049350600085118015612cf75750600084115b612d4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134a46024913960400191505060405180910390fd5b612d563082612509565b612d7573b4467e8d621105312a914f1d42f10770c0ffe3c8878761265d565b612da2600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16878661265d565b612e6a73b4467e8d621105312a914f1d42f10770c0ffe3c873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e2057600080fd5b505afa158015612e34573d6000803e3d6000fd5b505050506040513d6020811015612e4a57600080fd5b8101908080519060200190929190505050846120b790919063ffffffff16565b9250612f42600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ef857600080fd5b505afa158015612f0c573d6000803e3d6000fd5b505050506040513d6020811015612f2257600080fd5b8101908080519060200190929190505050836120b790919063ffffffff16565b9150612f4e8383613212565b5050506001600881905550915091565b6000806000600754148015612f7557506000600654145b15612f8957858580925081935050506130cb565b6000612f9a87600654600754611573565b90508581116130285783811015613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506f6f6c3a3a20494e53554646494349454e545f425f414d4f554e540000000081525060200191505060405180910390fd5b868180935081945050506130c9565b600061303987600754600654611573565b905087811115801561304b5750858110155b6130bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506f6f6c3a3a20494e53554646494349454e545f415f414d4f554e540000000081525060200191505060405180910390fd5b80878094508195505050505b505b94509492505050565b60008060005414156131235761310f6103e86131016130fc85876123e390919063ffffffff16565b61324c565b6120b790919063ffffffff16565b905061311e60006103e86132ae565b61316e565b61316b60065461313e600054866123e390919063ffffffff16565b8161314557fe5b0460075461315e600054866123e390919063ffffffff16565b8161316557fe5b046133c8565b90505b600081116131c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134c86024913960400191505060405180910390fd5b6131d184826132ae565b9392505050565b6131ed8260065461248690919063ffffffff16565b6006819055506132088160075461248690919063ffffffff16565b6007819055505050565b613227826006546120b790919063ffffffff16565b600681905550613242816007546120b790919063ffffffff16565b6007819055505050565b6000600382111561329b57819050600060016002848161326857fe5b040190505b818110156132955780915060028182858161328457fe5b04018161328d57fe5b04905061326d565b506132a9565b600082146132a857600190505b5b919050565b6132c38160005461248690919063ffffffff16565b60008190555061331b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248690919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008183106133d757816133d9565b825b90509291505056fe464c4153482d414c542d4c5020546f6b656e3a3a20415554485f414c52454144595f55534544464c4153482d414c542d4c5020546f6b656e3a3a2052454345495645525f49535f544f4b454e5f4f525f5a45524f464c4153482d414c542d4c5020546f6b656e3a3a20415554485f45585049524544464c4153482d414c542d4c5020546f6b656e3a3a20494e56414c49445f5349474e4154555245464c4153482d414c542d4c5020546f6b656e3a3a20415554485f4e4f545f5945545f56414c4944506f6f6c3a3a20494e53554646494349454e545f4c49515549444954595f4255524e4544506f6f6c3a3a20494e53554646494349454e545f4c49515549444954595f4d494e544544a2646970667358221220a303fd62f349c50b6d9027293ed3707e0ca21c2a55fdb4ab6e1f684983b562db64736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c806395d89b4111610125578063c4d66de8116100ad578063e0ab07721161007c578063e0ab077214610aa3578063e3ee160e14610b31578063e94a010214610bdf578063ed24911d14610c43578063fc0c546a14610c6157610211565b8063c4d66de8146108ef578063d505accf14610933578063d798f86e146109cc578063dd62ed3e14610a2b57610211565b8063a9059cbb116100f4578063a9059cbb146107c5578063ad615dec14610829578063ba9a7a561461087f578063c0bd9f161461089d578063c45a0155146108bb57610211565b806395d89b41146106ae578063a0cc6a6814610731578063a10adb171461074f578063a7f0e9031461079157610211565b80633408e470116101a85780634d861ece116101775780634d861ece1461050857806350b814a014610526578063687fbed81461059257806370a08231146105fe5780637ecebe001461065657610211565b80633408e470146104465780633750a8bd14610464578063411542701461048257806342966c68146104c457610211565b806323b872dd116101e457806323b872dd1461034f57806323c6e14c146103d357806330adf81f14610407578063313ce5671461042557610211565b806306fdde03146102165780630754617214610299578063095ea7b3146102cd57806318160ddd14610331575b600080fd5b61021e610c95565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a1610cce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610319600480360360408110156102e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cf4565b60405180821515815260200191505060405180910390f35b610339610d0b565b6040518082815260200191505060405180910390f35b6103bb6004803603606081101561036557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d11565b60405180821515815260200191505060405180910390f35b6103db610e65565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61040f610e7d565b6040518082815260200191505060405180910390f35b61042d610ea4565b604051808260ff16815260200191505060405180910390f35b61044e610ea9565b6040518082815260200191505060405180910390f35b61046c610eb1565b6040518082815260200191505060405180910390f35b6104ae6004803603602081101561049857600080fd5b8101908080359060200190929190505050610f8b565b6040518082815260200191505060405180910390f35b6104f0600480360360208110156104da57600080fd5b810190808035906020019092919050505061100d565b60405180821515815260200191505060405180910390f35b610510611022565b6040518082815260200191505060405180910390f35b61057c6004803603606081101561053c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611028565b6040518082815260200191505060405180910390f35b6105e8600480360360608110156105a857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611226565b6040518082815260200191505060405180910390f35b6106406004803603602081101561061457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611432565b6040518082815260200191505060405180910390f35b6106986004803603602081101561066c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061144a565b6040518082815260200191505060405180910390f35b6106b6611462565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106f65780820151818401526020810190506106db565b50505050905090810190601f1680156107235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61073961149b565b6040518082815260200191505060405180910390f35b61077b6004803603602081101561076557600080fd5b81019080803590602001909291905050506114c2565b6040518082815260200191505060405180910390f35b610799611544565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610811600480360360408110156107db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061155c565b60405180821515815260200191505060405180910390f35b6108696004803603606081101561083f57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611573565b6040518082815260200191505060405180910390f35b61088761169a565b6040518082815260200191505060405180910390f35b6108a56116a0565b6040518082815260200191505060405180910390f35b6108c36116a6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109316004803603602081101561090557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116cc565b005b6109ca600480360360e081101561094957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506117d3565b005b610a0e600480360360208110156109e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119c5565b604051808381526020018281526020019250505060405180910390f35b610a8d60048036036040811015610a4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aa1565b6040518082815260200191505060405180910390f35b610b0d600480360360a0811015610ab957600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ac6565b60405180848152602001838152602001828152602001935050505060405180910390f35b610bdd6004803603610120811015610b4857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611bc4565b005b610c2b60048036036040811015610bf557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ea3565b60405180821515815260200191505060405180910390f35b610c4b611ed2565b6040518082815260200191505060405180910390f35b610c69611fa6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6040518060400160405280601281526020017f464c4153482d414c542d4c5020546f6b656e000000000000000000000000000081525081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d01338484611fcc565b6001905092915050565b60005481565b600080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e4e57610dcd83826120b790919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610e5985858561213a565b60019150509392505050565b73b4467e8d621105312a914f1d42f10770c0ffe3c881565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b601281565b600046905090565b60008073ec02f813404656e2a2aed5baeed41d785324e8d073ffffffffffffffffffffffffffffffffffffffff1663cc704d5460006040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610f1a57600080fd5b505afa158015610f2e573d6000803e3d6000fd5b505050506040513d6020811015610f4457600080fd5b81019080805190602001909291905050509050610f85610f746611c37937e080008361235490919063ffffffff16565b6103e86120b790919063ffffffff16565b91505090565b600080610fa8610f99610eb1565b846123e390919063ffffffff16565b90506000610fc1600754836123e390919063ffffffff16565b90506000610fee83610fe06103e86006546123e390919063ffffffff16565b61248690919063ffffffff16565b9050611003818361235490919063ffffffff16565b9350505050919050565b60006110193383612509565b60019050919050565b60065481565b60006001600854146110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f506f6f6c3a204c4f434b4544000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600881905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461116d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f6f6c3a3a204f4e4c595f464143544f52590000000000000000000000000081525060200191505060405180910390fd5b611176846114c2565b9050808211156111ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f506f6f6c3a3a2045585045435445445f49535f4752454154455200000000000081525060200191505060405180910390fd5b6111f88482612623565b61121773b4467e8d621105312a914f1d42f10770c0ffe3c8848361265d565b60016008819055509392505050565b60006001600854146112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f506f6f6c3a204c4f434b4544000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600881905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f6f6c3a3a204f4e4c595f464143544f52590000000000000000000000000081525060200191505060405180910390fd5b61137484610f8b565b9050808211156113ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f506f6f6c3a3a2045585045435445445f49535f4752454154455200000000000081525060200191505060405180910390fd5b6113f68482612894565b611423600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848361265d565b60016008819055509392505050565b60026020528060005260406000206000915090505481565b60046020528060005260406000206000915090505481565b6040518060400160405280600c81526020017f464c4153482d414c542d4c50000000000000000000000000000000000000000081525081565b7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226760001b81565b6000806114df6114d0610eb1565b846123e390919063ffffffff16565b905060006114f8600654836123e390919063ffffffff16565b90506000611525836115176103e86007546123e390919063ffffffff16565b61248690919063ffffffff16565b905061153a818361235490919063ffffffff16565b9350505050919050565b73ec02f813404656e2a2aed5baeed41d785324e8d081565b600061156933848461213a565b6001905092915050565b60008084116115ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f506f6f6c3a3a20494e53554646494349454e545f414d4f554e5400000000000081525060200191505060405180910390fd5b6000831180156115fa5750600082115b61166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f506f6f6c3a3a20494e53554646494349454e545f4c495155494449545900000081525060200191505060405180910390fd5b6116918361168384876123e390919063ffffffff16565b61235490919063ffffffff16565b90509392505050565b6103e881565b60075481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f6f6c3a3a204f4e4c595f464143544f52590000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b4284101561182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806134366021913960400191505060405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b888888600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205489604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506119606001600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248690919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b088828686866128ce565b6119bb888888611fcc565b5050505050505050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f6f6c3a3a204f4e4c595f464143544f52590000000000000000000000000081525060200191505060405180910390fd5b611a9483612a5e565b8092508193505050915091565b6003602052816000526040600020602052806000526040600020600091509150505481565b6000806000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f506f6f6c3a3a204f4e4c595f464143544f52590000000000000000000000000081525060200191505060405180910390fd5b611b9a88888888612f5e565b8093508194505050611bad8484846130d4565b9050611bb983836131d8565b955095509592505050565b854211611c1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061347d6027913960400191505060405180910390fd5b844210611c74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806134366021913960400191505060405180910390fd5b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff1615611d28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133e26026913960400191505060405180910390fd5b60007f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226760001b8a8a8a8a8a8a604051602001808881526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001838152602001828152602001975050505050505050604051602081830303815290604052805190602001209050611ddf8a828686866128ce565b6001600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002060006101000a81548160ff021916908315150217905550848a73ffffffffffffffffffffffffffffffffffffffff167f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a560405160405180910390a3611e978a8a8a61213a565b50505050505050505050565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b7ffdde3a7807889787f51ab17062704a0d81341ba7debe5a9773b58a1b5e5f422c60001b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660001b611f48610ea9565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405160208183030381529060405280519060200120905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000828284039150811115612134576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4d4154483a3a205355425f554e444552464c4f5700000000000000000000000081525060200191505060405180910390fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613408602e913960400191505060405180910390fd5b61221281600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120b790919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122a781600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248690919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008082116123cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d4154483a3a204449564953494f4e5f42595f5a45524f00000000000000000081525060200191505060405180910390fd5b60008284816123d657fe5b0490508091505092915050565b6000808314156123f65760009050612480565b600082840290508284828161240757fe5b041461247b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4d4154483a3a204d554c5f4f564552464c4f570000000000000000000000000081525060200191505060405180910390fd5b809150505b92915050565b6000828284019150811015612503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4d4154483a3a204144445f4f564552464c4f570000000000000000000000000081525060200191505060405180910390fd5b92915050565b61255b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120b790919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125b3816000546120b790919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b612638816006546120b790919063ffffffff16565b6006819055506126538260075461248690919063ffffffff16565b6007819055505050565b600060608473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106127745780518252602082019150602081019050602083039250612751565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146127d6576040519150601f19603f3d011682016040523d82523d6000602084013e6127db565b606091505b509150915081801561281b575060008151148061281a575080806020019051602081101561280857600080fd5b81019080805190602001909291905050505b5b61288d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f506f6f6c3a3a205452414e534645525f4641494c45440000000000000000000081525060200191505060405180910390fd5b5050505050565b6128a98260065461248690919063ffffffff16565b6006819055506128c4816007546120b790919063ffffffff16565b6007819055505050565b60006128d8611ed2565b8560405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561298c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612a0057508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612a55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134576026913960400191505060405180910390fd5b50505050505050565b600080600160085414612ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f506f6f6c3a204c4f434b4544000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600881905550600073b4467e8d621105312a914f1d42f10770c0ffe3c873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612b5e57600080fd5b505afa158015612b72573d6000803e3d6000fd5b505050506040513d6020811015612b8857600080fd5b810190808051906020019092919050505090506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2657600080fd5b505afa158015612c3a573d6000803e3d6000fd5b505050506040513d6020811015612c5057600080fd5b810190808051906020019092919050505090506000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600054612cbd84836123e390919063ffffffff16565b81612cc457fe5b049450600054612cdd83836123e390919063ffffffff16565b81612ce457fe5b049350600085118015612cf75750600084115b612d4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134a46024913960400191505060405180910390fd5b612d563082612509565b612d7573b4467e8d621105312a914f1d42f10770c0ffe3c8878761265d565b612da2600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16878661265d565b612e6a73b4467e8d621105312a914f1d42f10770c0ffe3c873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e2057600080fd5b505afa158015612e34573d6000803e3d6000fd5b505050506040513d6020811015612e4a57600080fd5b8101908080519060200190929190505050846120b790919063ffffffff16565b9250612f42600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ef857600080fd5b505afa158015612f0c573d6000803e3d6000fd5b505050506040513d6020811015612f2257600080fd5b8101908080519060200190929190505050836120b790919063ffffffff16565b9150612f4e8383613212565b5050506001600881905550915091565b6000806000600754148015612f7557506000600654145b15612f8957858580925081935050506130cb565b6000612f9a87600654600754611573565b90508581116130285783811015613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506f6f6c3a3a20494e53554646494349454e545f425f414d4f554e540000000081525060200191505060405180910390fd5b868180935081945050506130c9565b600061303987600754600654611573565b905087811115801561304b5750858110155b6130bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f506f6f6c3a3a20494e53554646494349454e545f415f414d4f554e540000000081525060200191505060405180910390fd5b80878094508195505050505b505b94509492505050565b60008060005414156131235761310f6103e86131016130fc85876123e390919063ffffffff16565b61324c565b6120b790919063ffffffff16565b905061311e60006103e86132ae565b61316e565b61316b60065461313e600054866123e390919063ffffffff16565b8161314557fe5b0460075461315e600054866123e390919063ffffffff16565b8161316557fe5b046133c8565b90505b600081116131c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134c86024913960400191505060405180910390fd5b6131d184826132ae565b9392505050565b6131ed8260065461248690919063ffffffff16565b6006819055506132088160075461248690919063ffffffff16565b6007819055505050565b613227826006546120b790919063ffffffff16565b600681905550613242816007546120b790919063ffffffff16565b6007819055505050565b6000600382111561329b57819050600060016002848161326857fe5b040190505b818110156132955780915060028182858161328457fe5b04018161328d57fe5b04905061326d565b506132a9565b600082146132a857600190505b5b919050565b6132c38160005461248690919063ffffffff16565b60008190555061331b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248690919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008183106133d757816133d9565b825b90509291505056fe464c4153482d414c542d4c5020546f6b656e3a3a20415554485f414c52454144595f55534544464c4153482d414c542d4c5020546f6b656e3a3a2052454345495645525f49535f544f4b454e5f4f525f5a45524f464c4153482d414c542d4c5020546f6b656e3a3a20415554485f45585049524544464c4153482d414c542d4c5020546f6b656e3a3a20494e56414c49445f5349474e4154555245464c4153482d414c542d4c5020546f6b656e3a3a20415554485f4e4f545f5945545f56414c4944506f6f6c3a3a20494e53554646494349454e545f4c49515549444954595f4255524e4544506f6f6c3a3a20494e53554646494349454e545f4c49515549444954595f4d494e544544a2646970667358221220a303fd62f349c50b6d9027293ed3707e0ca21c2a55fdb4ab6e1f684983b562db64736f6c634300060c0033

Deployed Bytecode Sourcemap

10969:7852:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5628:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5826:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8660:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5782:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8986:469;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11205:80;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5153:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5738:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8139:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14677:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14028:317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8525:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11384:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12327:418;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12753:415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5856:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6031:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5685:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5481:138;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14353:316;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11292:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8827:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14858:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11045:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11424:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11526:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12222:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9463:552;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13803:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5916:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13176:619;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10023:898;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6079:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8337:180;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11499:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5628:50;;;;;;;;;;;;;;;;;;;:::o;5826:21::-;;;;;;;;;;;;;:::o;8660:159::-;8736:4;8753:36;8762:10;8774:7;8783:5;8753:8;:36::i;:::-;8807:4;8800:11;;8660:159;;;;:::o;5782:35::-;;;;:::o;8986:469::-;9110:4;9127:21;9151:9;:15;9161:4;9151:15;;;;;;;;;;;;;;;:27;9167:10;9151:27;;;;;;;;;;;;;;;;9127:51;;9218:2;9193:13;:28;9189:200;;9353:24;9371:5;9353:13;:17;;:24;;;;:::i;:::-;9323:9;:15;9333:4;9323:15;;;;;;;;;;;;;;;:27;9339:10;9323:27;;;;;;;;;;;;;;;:54;;;;9189:200;9399:26;9409:4;9415:2;9419:5;9399:9;:26::i;:::-;9443:4;9436:11;;;8986:469;;;;;:::o;11205:80::-;11243:42;11205:80;:::o;5153:108::-;5195:66;5153:108;;;:::o;5738:35::-;5771:2;5738:35;:::o;8139:190::-;8182:15;8302:9;8291:20;;8276:46;:::o;14677:173::-;14718:7;14738:11;11333:42;14752:37;;;14790:1;14752:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14738:54;;14810:32;14828:13;14836:4;14828:3;:7;;:13;;;;:::i;:::-;14818:4;14810:17;;:32;;;;:::i;:::-;14803:39;;;14677:173;:::o;14028:317::-;14089:14;14116:23;14142:25;14156:10;:8;:10::i;:::-;14142:9;:13;;:25;;;;:::i;:::-;14116:51;;14178:11;14192:37;14212:16;;14192:15;:19;;:37;;;;:::i;:::-;14178:51;;14240:11;14254:51;14289:15;14255:28;14278:4;14255:18;;:22;;:28;;;;:::i;:::-;14254:34;;:51;;;;:::i;:::-;14240:65;;14325:12;14333:3;14325;:7;;:12;;;;:::i;:::-;14316:21;;14028:317;;;;;;:::o;8525:127::-;8581:4;8598:24;8604:10;8616:5;8598;:24::i;:::-;8640:4;8633:11;;8525:127;;;:::o;11384:33::-;;;;:::o;12327:418::-;12503:14;11604:1;11592:8;;:13;11584:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11644:1;11633:8;:12;;;;11752:7:::1;;;;;;;;;;;11738:21;;:10;:21;;;11730:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12539:21:::2;12550:9;12539:10;:21::i;:::-;12530:30;;12598:6;12579:15;:25;;12571:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;12646:37;12665:9;12676:6;12646:18;:37::i;:::-;12694:43;11243:42;12721:7;12730:6;12694:13;:43::i;:::-;11679:1:::0;11668:8;:12;;;;12327:418;;;;;:::o;12753:415::-;12930:14;11604:1;11592:8;;:13;11584:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11644:1;11633:8;:12;;;;11752:7:::1;;;;;;;;;;;11738:21;;:10;:21;;;11730:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12966:22:::2;12978:9;12966:11;:22::i;:::-;12957:31;;13026:6;13007:15;:25;;12999:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;13074:38;13094:9;13105:6;13074:19;:38::i;:::-;13123:37;13137:5;;;;;;;;;;;13144:7;13153:6;13123:13;:37::i;:::-;11679:1:::0;11668:8;:12;;;;12753:415;;;;;:::o;5856:53::-;;;;;;;;;;;;;;;;;:::o;6031:41::-;;;;;;;;;;;;;;;;;:::o;5685:46::-;;;;;;;;;;;;;;;;;;;:::o;5481:138::-;5553:66;5481:138;;;:::o;14353:316::-;14413:14;14440:23;14466:25;14480:10;:8;:10::i;:::-;14466:9;:13;;:25;;;;:::i;:::-;14440:51;;14502:11;14516:39;14536:18;;14516:15;:19;;:39;;;;:::i;:::-;14502:53;;14566:11;14580:49;14613:15;14581:26;14602:4;14581:16;;:20;;:26;;;;:::i;:::-;14580:32;;:49;;;;:::i;:::-;14566:63;;14649:12;14657:3;14649;:7;;:12;;;;:::i;:::-;14640:21;;14353:316;;;;;;:::o;11292:83::-;11333:42;11292:83;:::o;8827:151::-;8899:4;8916:32;8926:10;8938:2;8942:5;8916:9;:32::i;:::-;8966:4;8959:11;;8827:151;;;;:::o;14858:355::-;14984:15;15031:1;15020:8;:12;15012:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15094:1;15082:9;:13;:30;;;;;15111:1;15099:9;:13;15082:30;15074:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15167:38;15195:9;15167:23;15180:9;15167:8;:12;;:23;;;;:::i;:::-;:27;;:38;;;;:::i;:::-;15157:48;;14858:355;;;;;:::o;11045:49::-;11089:5;11045:49;:::o;11424:31::-;;;;:::o;11526:22::-;;;;;;;;;;;;;:::o;12222:97::-;11752:7;;;;;;;;;;;11738:21;;:10;:21;;;11730:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12305:6:::1;12297:5;;:14;;;;;;;;;;;;;;;;;;12222:97:::0;:::o;9463:552::-;9685:15;9673:8;:27;;9665:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9751:18;5195:66;9793:15;;9810:5;9817:7;9826:5;9833:6;:13;9840:5;9833:13;;;;;;;;;;;;;;;;9848:8;9782:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9772:86;;;;;;9751:107;;9885:20;9903:1;9885:6;:13;9892:5;9885:13;;;;;;;;;;;;;;;;:17;;:20;;;;:::i;:::-;9869:6;:13;9876:5;9869:13;;;;;;;;;;;;;;;:36;;;;9916:47;9936:5;9943:10;9955:1;9958;9961;9916:19;:47::i;:::-;9976:31;9985:5;9992:7;10001:5;9976:8;:31::i;:::-;9463:552;;;;;;;;:::o;13803:217::-;13917:19;13938:17;11752:7;;;;;;;;;;;11738:21;;:10;:21;;;11730:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14000:12:::1;14005:6;14000:4;:12::i;:::-;13973:39;;;;;;;;13803:217:::0;;;:::o;5916:73::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13176:619::-;13443:19;13477:17;13509;11752:7;;;;;;;;;;;11738:21;;:10;:21;;;11730:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13581:71:::1;13595:12;13609:10;13621:15;13638:13;13581;:71::i;:::-;13554:98;;;;;;;;13675:51;13695:6;13703:11;13716:9;13675:19;:51::i;:::-;13663:63;;13737:50;13764:11;13777:9;13737:26;:50::i;:::-;13176:619:::0;;;;;;;;;:::o;10023:898::-;10320:10;10302:15;:28;10294:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10411:11;10393:15;:29;10385:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10480:18;:24;10499:4;10480:24;;;;;;;;;;;;;;;:31;10505:5;10480:31;;;;;;;;;;;;;;;;;;;;;10479:32;10471:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10567:18;5553:66;10623:36;;10661:4;10667:2;10671:5;10678:10;10690:11;10703:5;10612:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10588:132;;;;;;10567:153;;10731:46;10751:4;10757:10;10769:1;10772;10775;10731:19;:46::i;:::-;10824:4;10790:18;:24;10809:4;10790:24;;;;;;;;;;;;;;;:31;10815:5;10790:31;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;10868:5;10862:4;10844:30;;;;;;;;;;;;10887:26;10897:4;10903:2;10907:5;10887:9;:26::i;:::-;10023:898;;;;;;;;;;:::o;6079:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8337:180::-;8388:7;4556:66;8436:17;;4745:66;8455:9;;4923:66;8466:12;;8480;:10;:12::i;:::-;8502:4;8425:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8415:94;;;;;;8408:101;;8337:180;:::o;11499:20::-;;;;;;;;;;;;;:::o;7495:206::-;7641:5;7613:9;:16;7623:5;7613:16;;;;;;;;;;;;;;;:25;7630:7;7613:25;;;;;;;;;;;;;;;:33;;;;7678:7;7662:31;;7671:5;7662:31;;;7687:5;7662:31;;;;;;;;;;;;;;;;;;7495:206;;;:::o;410:137::-;468:9;513:1;507;503;:5;499:9;;;498:16;;490:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;410:137;;;;:::o;7709:422::-;7844:1;7830:16;;:2;:16;;;;7822:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8005:26;8025:5;8005:9;:15;8015:4;8005:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;7987:9;:15;7997:4;7987:15;;;;;;;;;;;;;;;:44;;;;8058:24;8076:5;8058:9;:13;8068:2;8058:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;8042:9;:13;8052:2;8042:13;;;;;;;;;;;;;;;:40;;;;8113:2;8098:25;;8107:4;8098:25;;;8117:5;8098:25;;;;;;;;;;;;;;;;;;7709:422;;;:::o;1020:263::-;1078:7;1110:1;1106;:5;1098:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1150:9;1166:1;1162;:5;;;;;;1150:17;;1274:1;1267:8;;;1020:263;;;;:::o;555:457::-;613:7;863:1;858;:6;854:47;;;888:1;881:8;;;;854:47;913:9;929:1;925;:5;913:17;;958:1;953;949;:5;;;;;;:10;941:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1003:1;996:8;;;555:457;;;;;:::o;266:136::-;324:9;369:1;363;359;:5;355:9;;;354:16;;346:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;266:136;;;;:::o;7196:291::-;7357:26;7377:5;7357:9;:15;7367:4;7357:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;7339:9;:15;7349:4;7339:15;;;;;;;;;;;;;;;:44;;;;7408:22;7424:5;7408:11;;:15;;:22;;;;:::i;:::-;7394:11;:36;;;;7469:1;7446:33;;7455:4;7446:33;;;7473:5;7446:33;;;;;;;;;;;;;;;;;;7196:291;;:::o;18141:210::-;18248:34;18271:10;18248:18;;:22;;:34;;;;:::i;:::-;18227:18;:55;;;;18312:31;18333:9;18312:16;;:20;;:31;;;;:::i;:::-;18293:16;:50;;;;18141:210;;:::o;11879:335::-;12001:12;12015:17;12036:6;:11;;11162:34;;;;;;;;;;;;;;;;;11152:45;;;;;;12090:3;12095:6;12048:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12036:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12000:103;;;;12122:7;:57;;;;;12149:1;12134:4;:11;:16;:44;;;;12165:4;12154:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12134:44;12122:57;12114:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11879:335;;;;;:::o;17922:211::-;18030:33;18053:9;18030:18;;:22;;:33;;;;:::i;:::-;18009:18;:54;;;;18093:32;18114:10;18093:16;;:20;;:32;;;;:::i;:::-;18074:16;:51;;;;17922:211;;:::o;6403:573::-;6576:14;6632:20;:18;:20::i;:::-;6654:10;6603:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6593:73;;;;;;6576:90;;6677:24;6704:26;6714:6;6722:1;6725;6728;6704:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6677:53;;6893:1;6865:30;;:16;:30;;;;:60;;;;;6919:6;6899:26;;:16;:26;;;6865:60;6857:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6403:573;;;;;;;:::o;15221:905::-;15269:19;15290:17;11604:1;11592:8;;:13;11584:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11644:1;11633:8;:12;;;;15320:20:::1;11243:42;15343:29;;;15381:4;15343:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15320:67;;15398:18;15426:5;;;;;;;;;;;15419:23;;;15451:4;15419:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15398:59;;15468:17;15488:9;:24;15506:4;15488:24;;;;;;;;;;;;;;;;15468:44;;15569:11;;15539:27;15553:12;15539:9;:13;;:27;;;;:::i;:::-;:41;;;;;;15525:55;;15631:11;;15603:25;15617:10;15603:9;:13;;:25;;;;:::i;:::-;:39;;;;;;15591:51;;15677:1;15663:11;:15;:32;;;;;15694:1;15682:9;:13;15663:32;15655:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15749:31;15763:4;15770:9;15749:5;:31::i;:::-;15793:43;11243:42;15820:2;15824:11;15793:13;:43::i;:::-;15847:35;15861:5;;;;;;;;;;;15868:2;15872:9;15847:13;:35::i;:::-;15910:62;11243:42;15927:29;;;15965:4;15927:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15910:12;:16;;:62;;;;:::i;:::-;15895:77;;15996:54;16018:5;;;;;;;;;;;16011:23;;;16043:4;16011:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15996:10;:14;;:54;;;;:::i;:::-;15983:67;;16063:55;16093:12;16107:10;16063:29;:55::i;:::-;11656:1;;;11679::::0;11668:8;:12;;;;15221:905;;;:::o;16134:1111::-;16312:19;16333:17;16387:1;16367:16;;:21;:48;;;;;16414:1;16392:18;;:23;16367:48;16363:875;;;16460:12;16474:10;16432:53;;;;;;;;16363:875;;;16518:22;16543:57;16549:12;16563:18;;16583:16;;16543:5;:57::i;:::-;16518:82;;16637:10;16619:14;:28;16615:612;;16694:13;16676:14;:31;;16668:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16787:12;16801:14;16759:57;;;;;;;;16615:612;;;16857:24;16884:55;16890:10;16902:16;;16920:18;;16884:5;:55::i;:::-;16857:82;;17009:12;16989:16;:32;;16988:75;;;;;17047:15;17027:16;:35;;16988:75;16958:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17182:16;17200:10;17154:57;;;;;;;;16615:612;;16363:875;;16134:1111;;;;;;;:::o;17253:661::-;17388:17;17437:1;17422:11;;:16;17418:384;;;17467:66;11089:5;17467:43;17481:28;17498:10;17481:12;:16;;:28;;;;:::i;:::-;17467:13;:43::i;:::-;:47;;:66;;;;:::i;:::-;17455:78;;17548:36;17562:1;11089:5;17548;:36::i;:::-;17418:384;;;17629:161;17692:18;;17660:29;17677:11;;17660:12;:16;;:29;;;;:::i;:::-;:50;;;;;;17759:16;;17729:27;17744:11;;17729:10;:14;;:27;;;;:::i;:::-;:46;;;;;;17629:12;:161::i;:::-;17617:173;;17418:384;17832:1;17820:9;:13;17812:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17885:21;17891:3;17896:9;17885:5;:21::i;:::-;17253:661;;;;;:::o;18359:224::-;18477:36;18500:12;18477:18;;:22;;:36;;;;:::i;:::-;18456:18;:57;;;;18543:32;18564:10;18543:16;;:20;;:32;;;;:::i;:::-;18524:16;:51;;;;18359:224;;:::o;18591:227::-;18712:36;18735:12;18712:18;;:22;;:36;;;;:::i;:::-;18691:18;:57;;;;18778:32;18799:10;18778:16;;:20;;:32;;;;:::i;:::-;18759:16;:51;;;;18591:227;;:::o;1505:303::-;1550:6;1577:1;1573;:5;1569:232;;;1599:1;1595:5;;1615:6;1632:1;1628;1624;:5;;;;;;:9;1615:18;;1648:92;1659:1;1655;:5;1648:92;;;1685:1;1681:5;;1723:1;1718;1714;1710;:5;;;;;;:9;1709:15;;;;;;1705:19;;1648:92;;;1569:232;;;;1766:1;1761;:6;1757:44;;1788:1;1784:5;;1757:44;1569:232;1505:303;;;:::o;6984:204::-;7060:22;7076:5;7060:11;;:15;;:22;;;;:::i;:::-;7046:11;:36;;;;7109:24;7127:5;7109:9;:13;7119:2;7109:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;7093:9;:13;7103:2;7093:13;;;;;;;;;;;;;;;:40;;;;7170:2;7149:31;;7166:1;7149:31;;;7174:5;7149:31;;;;;;;;;;;;;;;;;;6984:204;;:::o;1291:96::-;1343:6;1370:1;1366;:5;:13;;1378:1;1366:13;;;1374:1;1366:13;1362:17;;1291:96;;;;:::o

Swarm Source

ipfs://a303fd62f349c50b6d9027293ed3707e0ca21c2a55fdb4ab6e1f684983b562db
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.