ETH Price: $2,981.41 (+2.10%)
Gas: 1 Gwei

Token

Meta Nami (NAMI)
 

Overview

Max Total Supply

100,000,000 NAMI

Holders

180

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
52,407.058566992 NAMI

Value
$0.00
0xf2a79c9c6f754b2a538836046cdf135c1b11a44f
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:
MetaNami

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

*/
// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.9;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * C U ON THE MOON
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

    function _msgData() internal view returns (bytes memory) {
        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);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 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 IDexPair {
    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;
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    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 IAntiSnipe {
  function setTokenOwner(address owner) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

contract MetaNami is IERC20, Ownable {
    using Address for address;
    
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Meta Nami";
    string constant _symbol = "NAMI";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 100_000_000 * (10 ** _decimals);
    uint256 _maxBuyTxAmount = (_totalSupply * 1) / 400;
    uint256 _maxSellTxAmount = (_totalSupply * 1) / 400;
    uint256 _maxWalletSize = (_totalSupply * 1) / 100;

    mapping (address => uint256) _balances;
    mapping (address => uint256) firstBuy;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) liquidityCreator;

    uint256 devFee = 200;
    uint256 marketingFee = 600;
    uint256 poolFee = 300;
    uint256 totalFees = marketingFee + devFee;
    uint256 sellBias = 0;
    uint256 highFeePeriod = 24 hours;
    uint256 highFeeMult = 250;
    uint256 feeDenominator = 10000;

    address public liquidityFeeReceiver;
    address payable public marketingFeeReceiver = payable(0x007a79d2bAe62770942C866E419D32001fd4Dd06);
    address payable public devReceiver1;
    address payable public devReceiver2;
    address public poolReceiver;

    IDEXRouter public router;
    //address routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
    //address routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping (address => bool) liquidityPools;
    
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    address public pair;
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    uint256 public launchedAt;
    uint256 public launchedTime;
    uint256 public deadBlocks = 1;

    bool public swapEnabled = false;
    uint256 public swapThreshold = _totalSupply / 200;
    uint256 public swapMinimum = _totalSupply / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (address _dev1, address _dev2) {
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(address(this),router.WETH());
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;

        isFeeExempt[owner()] = true;
        liquidityCreator[owner()] = true;

        liquidityFeeReceiver = msg.sender;
        poolReceiver = marketingFeeReceiver;
        devReceiver1 = payable(_dev1);
        devReceiver2 = payable(_dev2);

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;
        isTxLimitExempt[DEAD] = true;

        _balances[owner()] = _totalSupply;

        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function maxBuyTxTokens() external view returns (uint256) { return _maxBuyTxAmount / (10 ** _decimals); }
    function maxSellTxTokens() external view returns (uint256) { return _maxSellTxAmount / (10 ** _decimals); }
    function maxWalletTokens() external view returns (uint256) { return _maxWalletSize / (10 ** _decimals); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }
    
    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external onlyOwner {
        require(addresses.length > 0 && amounts.length == addresses.length);
        address from = msg.sender;

        for (uint i = 0; i < addresses.length; i++) {
            if(!liquidityPools[addresses[i]] && !liquidityCreator[addresses[i]]) {
                _basicTransfer(from, addresses[i], amounts[i] * (10 ** _decimals));
            }
        }
    }
    
    function rescueToken(address tokenAddress, uint256 tokens) external onlyOwner
        returns (bool success)
    {
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }
    
    function claimMarketing() external onlyOwner {
        uint256 bal = address(this).balance;
        uint256 amountMarketing = (bal * marketingFee) / (marketingFee + devFee);
        uint256 amountDev = (bal * devFee) / (marketingFee + devFee);
        
        if (amountMarketing > 0)
            marketingFeeReceiver.transfer(amountMarketing);
        if (amountDev > 0) {
            devReceiver1.transfer(amountDev / 2);
            devReceiver2.transfer(amountDev / 2);
        }
    }
    
    function setProtectionEnabled(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled);
        protectionEnabled = _protect;
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled);
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(msg.sender);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(amount > 0, "Amount must be > zero");
        require(_balances[sender] >= amount, "Insufficient balance");
        if(!launched() && liquidityPools[recipient]){ require(liquidityCreator[sender], "Liquidity not added yet."); launch(); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if(_balances[recipient] == 0) {
                firstBuy[recipient] = block.timestamp;
            }
            if (!isTxLimitExempt[recipient]) {
                checkWalletLimit(recipient, amount);
            }
        }
        
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        _balances[sender] = _balances[sender] - amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }

        _balances[recipient] = _balances[recipient] + amountReceived;
        
        if (protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function launched() internal view returns (bool) {
        return launchedTime != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        launchedTime = block.timestamp;
        swapEnabled = true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(isTxLimitExempt[sender] || amount <= (liquidityPools[sender] ? _maxBuyTxAmount : _maxSellTxAmount), "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling, bool highPeriod) public view returns (uint256) {
        if(launchedAt + deadBlocks > block.number){ return feeDenominator - 1; }
        if (selling) return highPeriod ? (totalFees * highFeeMult) / 100 : totalFees + sellBias;
        return highPeriod ? (totalFees * highFeeMult) / 100 : totalFees - sellBias;
    }

    function takeFee(address from, address recipient, uint256 amount) internal returns (uint256) {
        bool selling = liquidityPools[recipient];
        uint256 feeAmount = (amount * getTotalFee(selling, !liquidityPools[from] && firstBuy[from] + highFeePeriod > block.timestamp)) / feeDenominator;
        uint256 poolAmount;
        
        if (poolFee > 0){
            poolAmount = (amount * poolFee) / feeDenominator;
            _balances[poolReceiver] += poolAmount;
            emit Transfer(from, poolReceiver, poolAmount);
        }

        if (feeAmount > 0) {
            _balances[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }
    
        return amount - (feeAmount + poolAmount);
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum &&
        totalFees > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidityPool(address lp, bool isPool) external onlyOwner {
        require(lp != pair, "Can't alter current liquidity pair");
        liquidityPools[lp] = isPool;
        emit UpdatedSettings(isPool ? 'Liquidity Pool Enabled' : 'Liquidity Pool Disabled', [Log(toString(abi.encodePacked(lp)), 1), Log('', 0), Log('', 0)]);
    }
    
    function switchRouter(address newRouter, address newPair) external onlyOwner {
        router = IDEXRouter(newRouter);
        pair = newPair;
        liquidityPools[newPair] = true;
        isTxLimitExempt[newRouter] = true;
        emit UpdatedSettings('Exchange Router Updated', [Log(concatenate('New Router: ',toString(abi.encodePacked(newRouter))), 1),Log(concatenate('New Liquidity Pair: ',toString(abi.encodePacked(pair))), 1), Log('', 0)]);
    }
    
    function excludePresaleAddress(address presaleAddress) external onlyOwner {
        liquidityCreator[presaleAddress] = true;
        isTxLimitExempt[presaleAddress] = true;
        isFeeExempt[presaleAddress] = true;
        emit UpdatedSettings('Presale Setup', [Log(concatenate('Presale Address: ',toString(abi.encodePacked(presaleAddress))), 1), Log('', 0), Log('', 0)]);
    }

    function setTxLimit(uint256 buyNumerator, uint256 sellNumerator, uint256 divisor) external onlyOwner {
        require(buyNumerator > 0 && sellNumerator > 0 && divisor > 0 && divisor <= 10000);
        _maxBuyTxAmount = (_totalSupply * buyNumerator) / divisor;
        _maxSellTxAmount = (_totalSupply * sellNumerator) / divisor;
        emit UpdatedSettings('Maximum Transaction Size', [Log('Max Buy Tokens', _maxBuyTxAmount / (10 ** _decimals)), Log('Max Sell Tokens', _maxSellTxAmount / (10 ** _decimals)), Log('', 0)]);
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(numerator > 0 && divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
        emit UpdatedSettings('Maximum Wallet Size', [Log('Tokens', _maxWalletSize / (10 ** _decimals)), Log('', 0), Log('', 0)]);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
        emit UpdatedSettings(exempt ? 'Fees Removed' : 'Fees Enforced', [Log(toString(abi.encodePacked(holder)), 1), Log('', 0), Log('', 0)]);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
        emit UpdatedSettings(exempt ? 'Transaction Limit Removed' : 'Transaction Limit Enforced', [Log(toString(abi.encodePacked(holder)), 1), Log('', 0), Log('', 0)]);
    }

    function setFees(uint256 _marketingFee, uint256 _devFee, uint256 _poolFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        marketingFee = _marketingFee;
        devFee = _devFee;
        poolFee = _poolFee;
        totalFees = _devFee + _marketingFee;
        sellBias = _sellBias;
        feeDenominator = _feeDenominator;
        require(totalFees + poolFee < feeDenominator / 2);
        emit UpdatedSettings('Fees', [Log('Total Fee Percent', totalFees * 100 / feeDenominator), Log('Marketing Percent', _marketingFee * 100 / feeDenominator), Log('Dev Percent', _devFee * 100 / feeDenominator)]);
    }

    function setFeeReceivers(address _liquidityFeeReceiver, address _marketingFeeReceiver, address _dev1, address _dev2, address _poolReceiver) external onlyOwner {
        liquidityFeeReceiver = payable(_liquidityFeeReceiver);
        marketingFeeReceiver = payable(_marketingFeeReceiver);
        devReceiver1 = payable(_dev1);
        devReceiver2 = payable(_dev2);
        poolReceiver = _poolReceiver;
        emit UpdatedSettings('Fee Receivers', [Log(concatenate('Liquidity Receiver: ',toString(abi.encodePacked(_liquidityFeeReceiver))), 1),Log(concatenate('Marketing Receiver: ',toString(abi.encodePacked(_marketingFeeReceiver))), 1), Log(concatenate('Pool Receiver: ',toString(abi.encodePacked(_poolReceiver))), 1)]);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _swapMinimumDenom) external onlyOwner {
        require(_denominator > 0);
        swapEnabled = _enabled;
        swapThreshold = _totalSupply / _denominator;
        swapMinimum = _totalSupply / _swapMinimumDenom;
        emit UpdatedSettings('Swap Settings', [Log('Enabled', _enabled ? 1 : 0),Log('Swap Maximum', swapThreshold), Log('Swap Minimum', swapMinimum)]);
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
    }

    function burnLP(uint256 percent) external onlyOwner {
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 5 && percent > 0, "Max of 5% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        uint256 pairBalance = this.balanceOf(pair);
        
        _basicTransfer(pair, DEAD, (pairBalance * percent) / 100);
        
        IDexPair(pair).sync();
    }
	
	function toString(bytes memory data) internal pure returns(string memory) {
        bytes memory alphabet = "0123456789abcdef";
    
        bytes memory str = new bytes(2 + data.length * 2);
        str[0] = "0";
        str[1] = "x";
        for (uint i = 0; i < data.length; i++) {
            str[2+i*2] = alphabet[uint(uint8(data[i] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(data[i] & 0x0f))];
        }
        return string(str);
    }
    
    function concatenate(string memory a, string memory b) internal pure returns (string memory) {
        return string(abi.encodePacked(a, b));
    }

	struct Log {
	    string name;
	    uint256 value;
	}

    event UpdatedSettings(string name, Log[3] values);
    //C U ON THE MOON
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dev1","type":"address"},{"internalType":"address","name":"_dev2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"indexed":false,"internalType":"struct MetaNami.Log[3]","name":"values","type":"tuple[3]"}],"name":"UpdatedSettings","type":"event"},{"inputs":[{"internalType":"address","name":"lp","type":"address"},{"internalType":"bool","name":"isPool","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"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":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"burnLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devReceiver1","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devReceiver2","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleAddress","type":"address"}],"name":"excludePresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"highPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityFeeReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_dev1","type":"address"},{"internalType":"address","name":"_dev2","type":"address"},{"internalType":"address","name":"_poolReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_poolFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_swapMinimumDenom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyNumerator","type":"uint256"},{"internalType":"uint256","name":"sellNumerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"switchRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"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"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811661dead17909155600280549091169055620000326009600a62000633565b62000042906305f5e1006200064b565b60035561019060035460016200005991906200064b565b6200006591906200066d565b60045561019060035460016200007c91906200064b565b6200008891906200066d565b600555606460035460016200009e91906200064b565b620000aa91906200066d565b60065560c8600d55610258600e5561012c600f55600d54600e54620000d0919062000690565b60105560006011556201518060125560fa601355612710601455601680546001600160a01b0319908116727a79d2bae62770942c866e419d32001fd4dd0617909155601b8054909116737a250d5630b4cf539739df2c5dacb4c659f2488d179055601d805461ffff60a01b1916600160a01b179055610708601f5560016023556024805460ff191690556003546200016b9060c8906200066d565b6025556127106003546200018091906200066d565b6026553480156200019057600080fd5b5060405162003de138038062003de1833981016040819052620001b391620006c8565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601b54601a80546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000277919062000700565b6001600160a01b031663c9c6539630601a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000300919062000700565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200034e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000374919062000700565b601e80546001600160a01b0319166001600160a01b039290921691821790556000908152601c60205260408120805460ff1916600117905560001990600990620003c66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120601b80548416835290855283822095909555308082526009855283822086548416835285528382206000199055815483168252600a85528382208054600160ff199182168117909255835485168452600c8752858420805482168317905560158054336001600160a01b031991821617909155601654601980549188169183169190911790556017805482168c8816179055601880549091168a8716179055918352600b865284832080548316821790558254841683528483208054831682179055955483168252838220805482168717905585548316825283822080549091169095179094556003548454821685526007845282852081905584549251908152911692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350506200071e565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005755781600019048211156200055957620005596200051e565b808516156200056757918102915b93841c939080029062000539565b509250929050565b6000826200058e575060016200062d565b816200059d575060006200062d565b8160018114620005b65760028114620005c157620005e1565b60019150506200062d565b60ff841115620005d557620005d56200051e565b50506001821b6200062d565b5060208310610133831016604e8410600b841016171562000606575081810a6200062d565b62000612838362000534565b80600019048211156200062957620006296200051e565b0290505b92915050565b60006200064460ff8416836200057d565b9392505050565b60008160001904831182151516156200066857620006686200051e565b500290565b6000826200068b57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620006a657620006a66200051e565b500190565b80516001600160a01b0381168114620006c357600080fd5b919050565b60008060408385031215620006dc57600080fd5b620006e783620006ab565b9150620006f760208401620006ab565b90509250929050565b6000602082840312156200071357600080fd5b6200064482620006ab565b6136b3806200072e6000396000f3fe6080604052600436106103395760003560e01c80637516baec116101ab578063c5363caa116100f7578063e709bedb11610095578063f84ba65d1161006f578063f84ba65d14610972578063f8821a6214610992578063f887ea40146109a8578063fabb0b4f146109c857600080fd5b8063e709bedb14610912578063e96fada214610932578063f2fde38b1461095257600080fd5b8063ceafd6da116100d1578063ceafd6da1461086c578063d08893581461088c578063d5d035f5146108ac578063dd62ed3e146108cc57600080fd5b8063c5363caa1461080b578063c6ef20611461082c578063cbc870981461084c57600080fd5b80639ec22c0e11610164578063abe57e701161013e578063abe57e70146107a0578063bafe446b146107c0578063bf56b371146107d5578063bfa21d6a146107eb57600080fd5b80639ec22c0e1461074a578063a8aa1b3114610760578063a9059cbb1461078057600080fd5b80637516baec1461069e578063882cfb3f146106bf578063893d20e8146106df5780638da5cb5b146106df57806392895e4e146106fd57806395d89b411461071d57600080fd5b80633c109ee61161028557806363a803e11161022357806367243482116101fd57806367243482146106195780636ddd17131461063957806370a0823114610653578063715018a61461068957600080fd5b806363a803e1146105c45780636419b6f9146105d9578063658d4b7f146105f957600080fd5b8063492a937b1161025f578063492a937b1461054e578063507139351461056e578063571ac8b01461058e5780635804f1e4146105ae57600080fd5b80633c109ee6146104e1578063421dd7c7146105195780634592c0b81461052e57600080fd5b806318abb635116102f25780632b112e49116102cc5780632b112e491461047b578063313ce5671461049057806333f3d628146104ac578063374ddd36146104cc57600080fd5b806318abb63514610426578063234e94941461044657806323b872dd1461045b57600080fd5b80630445b6671461034557806304a66b481461036e57806306fdde0314610390578063095ea7b3146103cb57806318160ddd146103fb578063184c16c51461041057600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035b60255481565b6040519081526020015b60405180910390f35b34801561037a57600080fd5b5061038e610389366004612d56565b6109de565b005b34801561039c57600080fd5b506040805180820190915260098152684d657461204e616d6960b81b60208201525b6040516103659190612de9565b3480156103d757600080fd5b506103eb6103e6366004612e14565b610b8e565b6040519015158152602001610365565b34801561040757600080fd5b5060035461035b565b34801561041c57600080fd5b5061035b601f5481565b34801561043257600080fd5b5061038e610441366004612e40565b610bfb565b34801561045257600080fd5b5061035b610dc6565b34801561046757600080fd5b506103eb610476366004612eb1565b610de6565b34801561048757600080fd5b5061035b610e7b565b34801561049c57600080fd5b5060405160098152602001610365565b3480156104b857600080fd5b506103eb6104c7366004612e14565b610ebc565b3480156104d857600080fd5b5061038e610f58565b3480156104ed57600080fd5b50601854610501906001600160a01b031681565b6040516001600160a01b039091168152602001610365565b34801561052557600080fd5b5061038e6110af565b34801561053a57600080fd5b5061038e610549366004612ef2565b6110ee565b34801561055a57600080fd5b5061038e610569366004612f39565b611281565b34801561057a57600080fd5b5061038e610589366004612f67565b61142a565b34801561059a57600080fd5b506103eb6105a9366004612f93565b6115b4565b3480156105ba57600080fd5b5061035b60225481565b3480156105d057600080fd5b5061035b6115c2565b3480156105e557600080fd5b5061035b6105f4366004612fb0565b6115dd565b34801561060557600080fd5b5061038e610614366004612f39565b61167e565b34801561062557600080fd5b5061038e61063436600461301a565b61174d565b34801561064557600080fd5b506024546103eb9060ff1681565b34801561065f57600080fd5b5061035b61066e366004612f93565b6001600160a01b031660009081526007602052604090205490565b34801561069557600080fd5b5061038e6118b4565b3480156106aa57600080fd5b50601d546103eb90600160a01b900460ff1681565b3480156106cb57600080fd5b50601d54610501906001600160a01b031681565b3480156106eb57600080fd5b506000546001600160a01b0316610501565b34801561070957600080fd5b50601954610501906001600160a01b031681565b34801561072957600080fd5b506040805180820190915260048152634e414d4960e01b60208201526103be565b34801561075657600080fd5b5061035b60205481565b34801561076c57600080fd5b50601e54610501906001600160a01b031681565b34801561078c57600080fd5b506103eb61079b366004612e14565b611928565b3480156107ac57600080fd5b5061038e6107bb366004613086565b611935565b3480156107cc57600080fd5b5061035b611a4b565b3480156107e157600080fd5b5061035b60215481565b3480156107f757600080fd5b50601554610501906001600160a01b031681565b34801561081757600080fd5b50601d546103eb90600160a81b900460ff1681565b34801561083857600080fd5b5061038e6108473660046130a8565b611a66565b34801561085857600080fd5b5061038e610867366004612f93565b611c53565b34801561087857600080fd5b5061038e6108873660046130c1565b611d80565b34801561089857600080fd5b5061038e6108a73660046130de565b611de5565b3480156108b857600080fd5b5061038e6108c7366004612f39565b611f33565b3480156108d857600080fd5b5061035b6108e7366004612ef2565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561091e57600080fd5b50601754610501906001600160a01b031681565b34801561093e57600080fd5b50601654610501906001600160a01b031681565b34801561095e57600080fd5b5061038e61096d366004612f93565b611ff4565b34801561097e57600080fd5b5061038e61098d366004612f39565b6120de565b34801561099e57600080fd5b5061035b60265481565b3480156109b457600080fd5b50601a54610501906001600160a01b031681565b3480156109d457600080fd5b5061035b60235481565b6000546001600160a01b03163314610a115760405162461bcd60e51b8152600401610a0890613113565b60405180910390fd5b600e859055600d849055600f839055610a2a858561315e565b60105560118290556014819055610a42600282613176565b600f54601054610a52919061315e565b10610a5c57600080fd5b60008051602061363e8339815191526040518060600160405280604051806040016040528060405180604001604052806011815260200170151bdd185b081199594814195c98d95b9d607a1b81525081526020016014546010546064610ac29190613198565b610acc9190613176565b905281526040805160808101825260119181019182527013585c9ad95d1a5b99c814195c98d95b9d607a1b6060820152908152601454602092830192820190610b168b6064613198565b610b209190613176565b9052815260408051608081018252600b9181019182526a11195d8814195c98d95b9d60aa1b6060820152908152601454602092830192820190610b648a6064613198565b610b6e9190613176565b90529052604051610b7f9190613210565b60405180910390a15050505050565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610be99086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610c255760405162461bcd60e51b8152600401610a0890613113565b601580546001600160a01b03199081166001600160a01b0388811691909117909255601680548216878416179055601780548216868416179055601880548216858416179055601980549091169183169190911790556040805160e081018252601460a082019081527302634b8bab4b234ba3c902932b1b2b4bb32b91d160651b60c0830152915160008051602061363e83398151915292829160608301918291610cf69190610cf190610cdd908e9060200161323e565b6040516020818303038152906040526121ce565b6123e7565b8152602001600181525081526020016040518060400160405280610d5460405180604001604052806014815260200173026b0b935b2ba34b733902932b1b2b4bb32b91d160651b815250610cf18b604051602001610cdd919061323e565b8152602001600181525081526020016040518060400160405280610dad6040518060400160405280600f81526020016e02837b7b6102932b1b2b4bb32b91d1608d1b815250610cf188604051602001610cdd919061323e565b815260016020909101529052604051610b7f919061325b565b6000610dd46009600a613376565b600554610de19190613176565b905090565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610e66576001600160a01b0384166000908152600960209081526040808320338452909152902054610e41908390613385565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610e71848484612413565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610eaf9161315e565b600354610de19190613385565b600080546001600160a01b03163314610ee75760405162461bcd60e51b8152600401610a0890613113565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e74919061339c565b6000546001600160a01b03163314610f825760405162461bcd60e51b8152600401610a0890613113565b600d54600e544791600091610f97919061315e565b600e54610fa49084613198565b610fae9190613176565b90506000600d54600e54610fc2919061315e565b600d54610fcf9085613198565b610fd99190613176565b9050811561101d576016546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561101b573d6000803e3d6000fd5b505b80156110aa576017546001600160a01b03166108fc61103d600284613176565b6040518115909202916000818181858888f19350505050158015611065573d6000803e3d6000fd5b506018546001600160a01b03166108fc611080600284613176565b6040518115909202916000818181858888f193505050501580156110a8573d6000803e3d6000fd5b505b505050565b6000546001600160a01b031633146110d95760405162461bcd60e51b8152600401610a0890613113565b601d805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146111185760405162461bcd60e51b8152600401610a0890613113565b601a80546001600160a01b038085166001600160a01b03199283168117909355601e80549185169190921681179091556000908152601c60209081526040808320805460ff199081166001908117909255948452600b8352928190208054909416909217909255805160e081018252600c60a082019081526b02732bb902937baba32b91d160a51b60c0830152915160008051602061363e8339815191529391928392606084019283926111d8929091610cf191610cdd918c910161323e565b815260016020918201529082526040805160808101825260148183019081527302732bb902634b8bab4b234ba3c902830b4b91d160651b6060830152601e549251948401949193849361123d93610cf192610cdd926001600160a01b0316910161323e565b8152600160209182015290825260408051606081018252600081830181815282528184015292909101919091525161127591906133b9565b60405180910390a15050565b6000546001600160a01b031633146112ab5760405162461bcd60e51b8152600401610a0890613113565b601e546001600160a01b03838116911614156113145760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610a08565b6001600160a01b0382166000908152601c60205260409020805460ff191682151517905560008051602061363e83398151915281611387576040518060400160405280601781526020017f4c697175696469747920506f6f6c2044697361626c65640000000000000000008152506113b7565b60405180604001604052806016815260200175131a5c5d5a591a5d1e48141bdbdb08115b98589b195960521b8152505b6040805160a081019091528060608101806113d8610cdd8960c0860161323e565b8152600160209182015290825260408051606080820183526000828401818152835282850181905285850192909252825190810183528083018281528152928301529182015251611275929190613400565b6000546001600160a01b031633146114545760405162461bcd60e51b8152600401610a0890613113565b6000831180156114645750600082115b80156114705750600081115b801561147e57506127108111155b61148757600080fd5b80836003546114969190613198565b6114a09190613176565b60045560035481906114b3908490613198565b6114bd9190613176565b6005556040805160e08101909152600e60a082019081526d4d61782042757920546f6b656e7360901b60c08301526060820190815260008051602061363e83398151915291908190608082016115156009600a613376565b6004546115229190613176565b9052815260408051608081018252600f9181019182526e4d61782053656c6c20546f6b656e7360881b606082015290815260209182019181016115676009600a613376565b6005546115749190613176565b90528152604080516060810182526000818301818152825260208281019190915290920191909152516115a7919061342e565b60405180910390a1505050565b6000610bf582600019610b8e565b60006115d06009600a613376565b600654610de19190613176565b6000436023546021546115f0919061315e565b111561160c5760016014546116059190613385565b9050610bf5565b8215611648578161162c57601154601054611627919061315e565b611605565b606460135460105461163e9190613198565b6116059190613176565b816116625760115460105461165d9190613385565b610e74565b60646013546010546116749190613198565b610e749190613176565b6000546001600160a01b031633146116a85760405162461bcd60e51b8152600401610a0890613113565b6001600160a01b0382166000908152600a60205260409020805460ff191682151517905560008051602061363e8339815191528161170b576040518060400160405280600d81526020016c1199595cc8115b999bdc98d959609a1b8152506113b7565b604080518082018252600c81526b1199595cc814995b5bdd995960a21b6020820152815160a08101909252908060608101806113d8610cdd8960c0860161323e565b6000546001600160a01b031633146117775760405162461bcd60e51b8152600401610a0890613113565b821580159061178557508083145b61178e57600080fd5b3360005b848110156118ac57601c60008787848181106117b0576117b0613475565b90506020020160208101906117c59190612f93565b6001600160a01b0316815260208101919091526040016000205460ff161580156118345750600c600087878481811061180057611800613475565b90506020020160208101906118159190612f93565b6001600160a01b0316815260208101919091526040016000205460ff16155b1561189a576118988287878481811061184f5761184f613475565b90506020020160208101906118649190612f93565b6118706009600a613376565b87878681811061188257611882613475565b905060200201356118939190613198565b6127ee565b505b806118a48161348b565b915050611792565b505050505050565b6000546001600160a01b031633146118de5760405162461bcd60e51b8152600401610a0890613113565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610e74338484612413565b6000546001600160a01b0316331461195f5760405162461bcd60e51b8152600401610a0890613113565b60008211801561196f5750600081115b801561197d57506127108111155b61198657600080fd5b80826003546119959190613198565b61199f9190613176565b60069081556040805160e0810190915260a0810191825265546f6b656e7360d01b60c08201526060810191825260008051602061363e833981519152918190608082016119ee6009600a613376565b6006546119fb9190613176565b9052815260408051606080820183526000828401818152835260208381018290528086019390935283519182018452818401818152825291810191909152918101919091525161127591906134a6565b6000611a596009600a613376565b600454610de19190613176565b6000546001600160a01b03163314611a905760405162461bcd60e51b8152600401610a0890613113565b601f54602054611aa0919061315e565b4211611aee5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610a08565b60058111158015611aff5750600081115b611b4b5760405162461bcd60e51b815260206004820152601960248201527f4d6178206f66203525206f6620746f6b656e7320696e204c50000000000000006044820152606401610a08565b42602055601e546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe91906134e3565b601e54600154919250611bee916001600160a01b0391821691166064611be48686613198565b6118939190613176565b50601e60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c3f57600080fd5b505af11580156118ac573d6000803e3d6000fd5b6000546001600160a01b03163314611c7d5760405162461bcd60e51b8152600401610a0890613113565b6001600160a01b0381166000908152600c602090815260408083208054600160ff199182168117909255600b84528285208054821683179055600a845293829020805490941617909255815160e081018352601160a08201908152700283932b9b0b6329020b2323932b9b99d1607d1b60c0830152925160008051602061363e833981519152939192839260608401928392611d249291610cf191610cdd918b910161323e565b8152600160209182015290825260408051606080820183526000828401818152835282850181905285850192909252825190810183528083018281528152928301529182015251611d7591906134fc565b60405180910390a150565b6000546001600160a01b03163314611daa5760405162461bcd60e51b8152600401610a0890613113565b8015611dc757601d54600160a81b900460ff1615611dc757600080fd5b601d8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314611e0f5760405162461bcd60e51b8152600401610a0890613113565b60008211611e1c57600080fd5b6024805460ff1916841515179055600354611e38908390613176565b602555600354611e49908290613176565b6026556040805160e08101909152600760a0820190815266115b98589b195960ca1b60c08301526060820190815260008051602061363e833981519152919081906080820187611e9a576000611e9d565b60015b60ff16815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d6178696d756d60a01b8152508152602001602554815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d696e696d756d60a01b81525081526020016026548152508152506040516115a79190613533565b6000546001600160a01b03163314611f5d5760405162461bcd60e51b8152600401610a0890613113565b601d546001600160a01b03838116911614611fa557601d54600160a81b900460ff1615611f8957600080fd5b601d80546001600160a01b0319166001600160a01b0384161790555b8015611ff057601d546040516318e02bd960e01b81523360048201526001600160a01b03909116906318e02bd990602401600060405180830381600087803b158015611c3f57600080fd5b5050565b6000546001600160a01b0316331461201e5760405162461bcd60e51b8152600401610a0890613113565b6001600160a01b0381166120835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a08565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121085760405162461bcd60e51b8152600401610a0890613113565b6001600160a01b0382166000908152600b60205260409020805460ff191682151517905560008051602061363e8339815191528161217b576040518060400160405280601a81526020017f5472616e73616374696f6e204c696d697420456e666f726365640000000000008152506113b7565b604080518082018252601981527f5472616e73616374696f6e204c696d69742052656d6f766564000000000000006020820152815160a08101909252908060608101806113d8610cdd8960c0860161323e565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160609190600090612209906002613198565b61221490600261315e565b67ffffffffffffffff81111561222c5761222c61356a565b6040519080825280601f01601f191660200182016040528015612256576020820181803683370190505b509050600360fc1b8160008151811061227157612271613475565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106122a0576122a0613475565b60200101906001600160f81b031916908160001a90535060005b84518110156123df578260048683815181106122d8576122d8613475565b016020015182516001600160f81b031990911690911c60f81c90811061230057612300613475565b01602001516001600160f81b0319168261231b836002613198565b61232690600261315e565b8151811061233657612336613475565b60200101906001600160f81b031916908160001a9053508285828151811061236057612360613475565b602091010151815160f89190911c600f1690811061238057612380613475565b01602001516001600160f81b0319168261239b836002613198565b6123a690600361315e565b815181106123b6576123b6613475565b60200101906001600160f81b031916908160001a905350806123d78161348b565b9150506122ba565b509392505050565b606082826040516020016123fc929190613580565b604051602081830303815290604052905092915050565b600080821161245c5760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610a08565b6001600160a01b0384166000908152600760205260409020548211156124bb5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a08565b6022541580156124e357506001600160a01b0383166000908152601c602052604090205460ff165b1561256a576001600160a01b0384166000908152600c602052604090205460ff166125505760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610a08565b61256a43602155426022556024805460ff19166001179055565b6125748483612896565b6001600160a01b0383166000908152601c602052604090205460ff161580156125ab57506001546001600160a01b03848116911614155b15612613576001600160a01b0383166000908152600760205260409020546125e9576001600160a01b03831660009081526008602052604090204290555b6001600160a01b0383166000908152600b602052604090205460ff16612613576126138383612928565b60275460ff1615612630576126298484846127ee565b9050610e74565b6001600160a01b038416600090815260076020526040902054612654908390613385565b6001600160a01b038516600090815260076020908152604080832093909355600a90529081205460ff161580156126a457506001600160a01b0384166000908152600a602052604090205460ff16155b6126ae57826126b9565b6126b98585856129ad565b90506126c484612b36565b156126d85782156126d8576126d883612bbb565b6001600160a01b0384166000908152600760205260409020546126fc90829061315e565b6001600160a01b038516600090815260076020526040902055601d54600160a01b900460ff16156127a857601d5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a6919061339c565b505b836001600160a01b0316856001600160a01b031660008051602061365e833981519152836040516127db91815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260076020526040812054612812908390613385565b6001600160a01b03808616600090815260076020526040808220939093559085168152205461284290839061315e565b6001600160a01b03808516600081815260076020526040908190209390935591519086169060008051602061365e833981519152906128849086815260200190565b60405180910390a35060019392505050565b6001600160a01b0382166000908152600b602052604090205460ff16806128e857506001600160a01b0382166000908152601c602052604090205460ff166128e0576005546128e4565b6004545b8111155b611ff05760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610a08565b6006546001600160a01b038316600090815260076020526040902054819061295190849061315e565b11156110aa5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610a08565b6001600160a01b038083166000908152601c602052604080822054601454938716835290822054919260ff918216928492612a1a918591161580156105f457506012546001600160a01b038a166000908152600860205260409020544291612a149161315e565b116115dd565b612a249086613198565b612a2e9190613176565b9050600080600f541115612abe57601454600f54612a4c9087613198565b612a569190613176565b6019546001600160a01b0316600090815260076020526040812080549293508392909190612a8590849061315e565b90915550506019546040518281526001600160a01b039182169189169060008051602061365e8339815191529060200160405180910390a35b8115612b17573060009081526007602052604081208054849290612ae390849061315e565b909155505060405182815230906001600160a01b0389169060008051602061365e8339815191529060200160405180910390a35b612b21818361315e565b612b2b9086613385565b979650505050505050565b336000908152601c602052604081205460ff16158015612b59575060275460ff16155b8015612b67575060245460ff165b8015612b8b57506001600160a01b0382166000908152601c602052604090205460ff165b8015612ba857506026543060009081526007602052604090205410155b8015610bf5575060006010541192915050565b6027805460ff191660011790556025546000908210612bdc57602554612bde565b815b30600090815260076020526040902054909150811115612c0a5750306000908152600760205260409020545b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c3f57612c3f613475565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbc91906135af565b81600181518110612ccf57612ccf613475565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790612d159085906000908690309042906004016135cc565b600060405180830381600087803b158015612d2f57600080fd5b505af1158015612d43573d6000803e3d6000fd5b50506027805460ff191690555050505050565b600080600080600060a08688031215612d6e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b83811015612dac578181015183820152602001612d94565b838111156110a85750506000910152565b60008151808452612dd5816020860160208601612d91565b601f01601f19169290920160200192915050565b602081526000610e746020830184612dbd565b6001600160a01b0381168114612e1157600080fd5b50565b60008060408385031215612e2757600080fd5b8235612e3281612dfc565b946020939093013593505050565b600080600080600060a08688031215612e5857600080fd5b8535612e6381612dfc565b94506020860135612e7381612dfc565b93506040860135612e8381612dfc565b92506060860135612e9381612dfc565b91506080860135612ea381612dfc565b809150509295509295909350565b600080600060608486031215612ec657600080fd5b8335612ed181612dfc565b92506020840135612ee181612dfc565b929592945050506040919091013590565b60008060408385031215612f0557600080fd5b8235612f1081612dfc565b91506020830135612f2081612dfc565b809150509250929050565b8015158114612e1157600080fd5b60008060408385031215612f4c57600080fd5b8235612f5781612dfc565b91506020830135612f2081612f2b565b600080600060608486031215612f7c57600080fd5b505081359360208301359350604090920135919050565b600060208284031215612fa557600080fd5b8135610e7481612dfc565b60008060408385031215612fc357600080fd5b8235612f5781612f2b565b60008083601f840112612fe057600080fd5b50813567ffffffffffffffff811115612ff857600080fd5b6020830191508360208260051b850101111561301357600080fd5b9250929050565b6000806000806040858703121561303057600080fd5b843567ffffffffffffffff8082111561304857600080fd5b61305488838901612fce565b9096509450602087013591508082111561306d57600080fd5b5061307a87828801612fce565b95989497509550505050565b6000806040838503121561309957600080fd5b50508035926020909101359150565b6000602082840312156130ba57600080fd5b5035919050565b6000602082840312156130d357600080fd5b8135610e7481612f2b565b6000806000606084860312156130f357600080fd5b83356130fe81612f2b565b95602085013595506040909401359392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561317157613171613148565b500190565b60008261319357634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156131b2576131b2613148565b500290565b600082606081018360005b60038110156132055783830387528151604081518186526131e582870182612dbd565b6020938401519684019690965250509687019691909101906001016131c2565b509095945050505050565b6040815260046040820152634665657360e01b6060820152608060208201526000610e7460808301846131b7565b60609190911b6bffffffffffffffffffffffff1916815260140190565b60408152600d60408201526c4665652052656365697665727360981b6060820152608060208201526000610e7460808301846131b7565b600181815b808511156132cd5781600019048211156132b3576132b3613148565b808516156132c057918102915b93841c9390800290613297565b509250929050565b6000826132e457506001610bf5565b816132f157506000610bf5565b816001811461330757600281146133115761332d565b6001915050610bf5565b60ff84111561332257613322613148565b50506001821b610bf5565b5060208310610133831016604e8410600b8410161715613350575081810a610bf5565b61335a8383613292565b806000190482111561336e5761336e613148565b029392505050565b6000610e7460ff8416836132d5565b60008282101561339757613397613148565b500390565b6000602082840312156133ae57600080fd5b8151610e7481612f2b565b60408152601760408201527f45786368616e676520526f7574657220557064617465640000000000000000006060820152608060208201526000610e7460808301846131b7565b6040815260006134136040830185612dbd565b828103602084015261342581856131b7565b95945050505050565b60408152601860408201527f4d6178696d756d205472616e73616374696f6e2053697a6500000000000000006060820152608060208201526000610e7460808301846131b7565b634e487b7160e01b600052603260045260246000fd5b600060001982141561349f5761349f613148565b5060010190565b6040815260136040820152724d6178696d756d2057616c6c65742053697a6560681b6060820152608060208201526000610e7460808301846131b7565b6000602082840312156134f557600080fd5b5051919050565b60408152600d60408201526c050726573616c6520536574757609c1b6060820152608060208201526000610e7460808301846131b7565b60408152600d60408201526c537761702053657474696e677360981b6060820152608060208201526000610e7460808301846131b7565b634e487b7160e01b600052604160045260246000fd5b60008351613592818460208801612d91565b8351908301906135a6818360208801612d91565b01949350505050565b6000602082840312156135c157600080fd5b8151610e7481612dfc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561361c5784516001600160a01b0316835293830193918301916001016135f7565b50506001600160a01b0396909616606085015250505060800152939250505056fe6e502a17c2522c4dc061bacfc992cb08b19348f65d5ffc44766e54a42cf15b96ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a5a2bfdde4967af6fb10a47f4ff953a2757cd2b3979afcad845c34d2825380b664736f6c634300080a003300000000000000000000000014b8fab7b00595b215cc813cf9fa8b644437cc10000000000000000000000000a0bd9e08f4d81361ba83747c7d984af346e44655

Deployed Bytecode

0x6080604052600436106103395760003560e01c80637516baec116101ab578063c5363caa116100f7578063e709bedb11610095578063f84ba65d1161006f578063f84ba65d14610972578063f8821a6214610992578063f887ea40146109a8578063fabb0b4f146109c857600080fd5b8063e709bedb14610912578063e96fada214610932578063f2fde38b1461095257600080fd5b8063ceafd6da116100d1578063ceafd6da1461086c578063d08893581461088c578063d5d035f5146108ac578063dd62ed3e146108cc57600080fd5b8063c5363caa1461080b578063c6ef20611461082c578063cbc870981461084c57600080fd5b80639ec22c0e11610164578063abe57e701161013e578063abe57e70146107a0578063bafe446b146107c0578063bf56b371146107d5578063bfa21d6a146107eb57600080fd5b80639ec22c0e1461074a578063a8aa1b3114610760578063a9059cbb1461078057600080fd5b80637516baec1461069e578063882cfb3f146106bf578063893d20e8146106df5780638da5cb5b146106df57806392895e4e146106fd57806395d89b411461071d57600080fd5b80633c109ee61161028557806363a803e11161022357806367243482116101fd57806367243482146106195780636ddd17131461063957806370a0823114610653578063715018a61461068957600080fd5b806363a803e1146105c45780636419b6f9146105d9578063658d4b7f146105f957600080fd5b8063492a937b1161025f578063492a937b1461054e578063507139351461056e578063571ac8b01461058e5780635804f1e4146105ae57600080fd5b80633c109ee6146104e1578063421dd7c7146105195780634592c0b81461052e57600080fd5b806318abb635116102f25780632b112e49116102cc5780632b112e491461047b578063313ce5671461049057806333f3d628146104ac578063374ddd36146104cc57600080fd5b806318abb63514610426578063234e94941461044657806323b872dd1461045b57600080fd5b80630445b6671461034557806304a66b481461036e57806306fdde0314610390578063095ea7b3146103cb57806318160ddd146103fb578063184c16c51461041057600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035b60255481565b6040519081526020015b60405180910390f35b34801561037a57600080fd5b5061038e610389366004612d56565b6109de565b005b34801561039c57600080fd5b506040805180820190915260098152684d657461204e616d6960b81b60208201525b6040516103659190612de9565b3480156103d757600080fd5b506103eb6103e6366004612e14565b610b8e565b6040519015158152602001610365565b34801561040757600080fd5b5060035461035b565b34801561041c57600080fd5b5061035b601f5481565b34801561043257600080fd5b5061038e610441366004612e40565b610bfb565b34801561045257600080fd5b5061035b610dc6565b34801561046757600080fd5b506103eb610476366004612eb1565b610de6565b34801561048757600080fd5b5061035b610e7b565b34801561049c57600080fd5b5060405160098152602001610365565b3480156104b857600080fd5b506103eb6104c7366004612e14565b610ebc565b3480156104d857600080fd5b5061038e610f58565b3480156104ed57600080fd5b50601854610501906001600160a01b031681565b6040516001600160a01b039091168152602001610365565b34801561052557600080fd5b5061038e6110af565b34801561053a57600080fd5b5061038e610549366004612ef2565b6110ee565b34801561055a57600080fd5b5061038e610569366004612f39565b611281565b34801561057a57600080fd5b5061038e610589366004612f67565b61142a565b34801561059a57600080fd5b506103eb6105a9366004612f93565b6115b4565b3480156105ba57600080fd5b5061035b60225481565b3480156105d057600080fd5b5061035b6115c2565b3480156105e557600080fd5b5061035b6105f4366004612fb0565b6115dd565b34801561060557600080fd5b5061038e610614366004612f39565b61167e565b34801561062557600080fd5b5061038e61063436600461301a565b61174d565b34801561064557600080fd5b506024546103eb9060ff1681565b34801561065f57600080fd5b5061035b61066e366004612f93565b6001600160a01b031660009081526007602052604090205490565b34801561069557600080fd5b5061038e6118b4565b3480156106aa57600080fd5b50601d546103eb90600160a01b900460ff1681565b3480156106cb57600080fd5b50601d54610501906001600160a01b031681565b3480156106eb57600080fd5b506000546001600160a01b0316610501565b34801561070957600080fd5b50601954610501906001600160a01b031681565b34801561072957600080fd5b506040805180820190915260048152634e414d4960e01b60208201526103be565b34801561075657600080fd5b5061035b60205481565b34801561076c57600080fd5b50601e54610501906001600160a01b031681565b34801561078c57600080fd5b506103eb61079b366004612e14565b611928565b3480156107ac57600080fd5b5061038e6107bb366004613086565b611935565b3480156107cc57600080fd5b5061035b611a4b565b3480156107e157600080fd5b5061035b60215481565b3480156107f757600080fd5b50601554610501906001600160a01b031681565b34801561081757600080fd5b50601d546103eb90600160a81b900460ff1681565b34801561083857600080fd5b5061038e6108473660046130a8565b611a66565b34801561085857600080fd5b5061038e610867366004612f93565b611c53565b34801561087857600080fd5b5061038e6108873660046130c1565b611d80565b34801561089857600080fd5b5061038e6108a73660046130de565b611de5565b3480156108b857600080fd5b5061038e6108c7366004612f39565b611f33565b3480156108d857600080fd5b5061035b6108e7366004612ef2565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561091e57600080fd5b50601754610501906001600160a01b031681565b34801561093e57600080fd5b50601654610501906001600160a01b031681565b34801561095e57600080fd5b5061038e61096d366004612f93565b611ff4565b34801561097e57600080fd5b5061038e61098d366004612f39565b6120de565b34801561099e57600080fd5b5061035b60265481565b3480156109b457600080fd5b50601a54610501906001600160a01b031681565b3480156109d457600080fd5b5061035b60235481565b6000546001600160a01b03163314610a115760405162461bcd60e51b8152600401610a0890613113565b60405180910390fd5b600e859055600d849055600f839055610a2a858561315e565b60105560118290556014819055610a42600282613176565b600f54601054610a52919061315e565b10610a5c57600080fd5b60008051602061363e8339815191526040518060600160405280604051806040016040528060405180604001604052806011815260200170151bdd185b081199594814195c98d95b9d607a1b81525081526020016014546010546064610ac29190613198565b610acc9190613176565b905281526040805160808101825260119181019182527013585c9ad95d1a5b99c814195c98d95b9d607a1b6060820152908152601454602092830192820190610b168b6064613198565b610b209190613176565b9052815260408051608081018252600b9181019182526a11195d8814195c98d95b9d60aa1b6060820152908152601454602092830192820190610b648a6064613198565b610b6e9190613176565b90529052604051610b7f9190613210565b60405180910390a15050505050565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610be99086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610c255760405162461bcd60e51b8152600401610a0890613113565b601580546001600160a01b03199081166001600160a01b0388811691909117909255601680548216878416179055601780548216868416179055601880548216858416179055601980549091169183169190911790556040805160e081018252601460a082019081527302634b8bab4b234ba3c902932b1b2b4bb32b91d160651b60c0830152915160008051602061363e83398151915292829160608301918291610cf69190610cf190610cdd908e9060200161323e565b6040516020818303038152906040526121ce565b6123e7565b8152602001600181525081526020016040518060400160405280610d5460405180604001604052806014815260200173026b0b935b2ba34b733902932b1b2b4bb32b91d160651b815250610cf18b604051602001610cdd919061323e565b8152602001600181525081526020016040518060400160405280610dad6040518060400160405280600f81526020016e02837b7b6102932b1b2b4bb32b91d1608d1b815250610cf188604051602001610cdd919061323e565b815260016020909101529052604051610b7f919061325b565b6000610dd46009600a613376565b600554610de19190613176565b905090565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610e66576001600160a01b0384166000908152600960209081526040808320338452909152902054610e41908390613385565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610e71848484612413565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610eaf9161315e565b600354610de19190613385565b600080546001600160a01b03163314610ee75760405162461bcd60e51b8152600401610a0890613113565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e74919061339c565b6000546001600160a01b03163314610f825760405162461bcd60e51b8152600401610a0890613113565b600d54600e544791600091610f97919061315e565b600e54610fa49084613198565b610fae9190613176565b90506000600d54600e54610fc2919061315e565b600d54610fcf9085613198565b610fd99190613176565b9050811561101d576016546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561101b573d6000803e3d6000fd5b505b80156110aa576017546001600160a01b03166108fc61103d600284613176565b6040518115909202916000818181858888f19350505050158015611065573d6000803e3d6000fd5b506018546001600160a01b03166108fc611080600284613176565b6040518115909202916000818181858888f193505050501580156110a8573d6000803e3d6000fd5b505b505050565b6000546001600160a01b031633146110d95760405162461bcd60e51b8152600401610a0890613113565b601d805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146111185760405162461bcd60e51b8152600401610a0890613113565b601a80546001600160a01b038085166001600160a01b03199283168117909355601e80549185169190921681179091556000908152601c60209081526040808320805460ff199081166001908117909255948452600b8352928190208054909416909217909255805160e081018252600c60a082019081526b02732bb902937baba32b91d160a51b60c0830152915160008051602061363e8339815191529391928392606084019283926111d8929091610cf191610cdd918c910161323e565b815260016020918201529082526040805160808101825260148183019081527302732bb902634b8bab4b234ba3c902830b4b91d160651b6060830152601e549251948401949193849361123d93610cf192610cdd926001600160a01b0316910161323e565b8152600160209182015290825260408051606081018252600081830181815282528184015292909101919091525161127591906133b9565b60405180910390a15050565b6000546001600160a01b031633146112ab5760405162461bcd60e51b8152600401610a0890613113565b601e546001600160a01b03838116911614156113145760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610a08565b6001600160a01b0382166000908152601c60205260409020805460ff191682151517905560008051602061363e83398151915281611387576040518060400160405280601781526020017f4c697175696469747920506f6f6c2044697361626c65640000000000000000008152506113b7565b60405180604001604052806016815260200175131a5c5d5a591a5d1e48141bdbdb08115b98589b195960521b8152505b6040805160a081019091528060608101806113d8610cdd8960c0860161323e565b8152600160209182015290825260408051606080820183526000828401818152835282850181905285850192909252825190810183528083018281528152928301529182015251611275929190613400565b6000546001600160a01b031633146114545760405162461bcd60e51b8152600401610a0890613113565b6000831180156114645750600082115b80156114705750600081115b801561147e57506127108111155b61148757600080fd5b80836003546114969190613198565b6114a09190613176565b60045560035481906114b3908490613198565b6114bd9190613176565b6005556040805160e08101909152600e60a082019081526d4d61782042757920546f6b656e7360901b60c08301526060820190815260008051602061363e83398151915291908190608082016115156009600a613376565b6004546115229190613176565b9052815260408051608081018252600f9181019182526e4d61782053656c6c20546f6b656e7360881b606082015290815260209182019181016115676009600a613376565b6005546115749190613176565b90528152604080516060810182526000818301818152825260208281019190915290920191909152516115a7919061342e565b60405180910390a1505050565b6000610bf582600019610b8e565b60006115d06009600a613376565b600654610de19190613176565b6000436023546021546115f0919061315e565b111561160c5760016014546116059190613385565b9050610bf5565b8215611648578161162c57601154601054611627919061315e565b611605565b606460135460105461163e9190613198565b6116059190613176565b816116625760115460105461165d9190613385565b610e74565b60646013546010546116749190613198565b610e749190613176565b6000546001600160a01b031633146116a85760405162461bcd60e51b8152600401610a0890613113565b6001600160a01b0382166000908152600a60205260409020805460ff191682151517905560008051602061363e8339815191528161170b576040518060400160405280600d81526020016c1199595cc8115b999bdc98d959609a1b8152506113b7565b604080518082018252600c81526b1199595cc814995b5bdd995960a21b6020820152815160a08101909252908060608101806113d8610cdd8960c0860161323e565b6000546001600160a01b031633146117775760405162461bcd60e51b8152600401610a0890613113565b821580159061178557508083145b61178e57600080fd5b3360005b848110156118ac57601c60008787848181106117b0576117b0613475565b90506020020160208101906117c59190612f93565b6001600160a01b0316815260208101919091526040016000205460ff161580156118345750600c600087878481811061180057611800613475565b90506020020160208101906118159190612f93565b6001600160a01b0316815260208101919091526040016000205460ff16155b1561189a576118988287878481811061184f5761184f613475565b90506020020160208101906118649190612f93565b6118706009600a613376565b87878681811061188257611882613475565b905060200201356118939190613198565b6127ee565b505b806118a48161348b565b915050611792565b505050505050565b6000546001600160a01b031633146118de5760405162461bcd60e51b8152600401610a0890613113565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610e74338484612413565b6000546001600160a01b0316331461195f5760405162461bcd60e51b8152600401610a0890613113565b60008211801561196f5750600081115b801561197d57506127108111155b61198657600080fd5b80826003546119959190613198565b61199f9190613176565b60069081556040805160e0810190915260a0810191825265546f6b656e7360d01b60c08201526060810191825260008051602061363e833981519152918190608082016119ee6009600a613376565b6006546119fb9190613176565b9052815260408051606080820183526000828401818152835260208381018290528086019390935283519182018452818401818152825291810191909152918101919091525161127591906134a6565b6000611a596009600a613376565b600454610de19190613176565b6000546001600160a01b03163314611a905760405162461bcd60e51b8152600401610a0890613113565b601f54602054611aa0919061315e565b4211611aee5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610a08565b60058111158015611aff5750600081115b611b4b5760405162461bcd60e51b815260206004820152601960248201527f4d6178206f66203525206f6620746f6b656e7320696e204c50000000000000006044820152606401610a08565b42602055601e546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa158015611b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbe91906134e3565b601e54600154919250611bee916001600160a01b0391821691166064611be48686613198565b6118939190613176565b50601e60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c3f57600080fd5b505af11580156118ac573d6000803e3d6000fd5b6000546001600160a01b03163314611c7d5760405162461bcd60e51b8152600401610a0890613113565b6001600160a01b0381166000908152600c602090815260408083208054600160ff199182168117909255600b84528285208054821683179055600a845293829020805490941617909255815160e081018352601160a08201908152700283932b9b0b6329020b2323932b9b99d1607d1b60c0830152925160008051602061363e833981519152939192839260608401928392611d249291610cf191610cdd918b910161323e565b8152600160209182015290825260408051606080820183526000828401818152835282850181905285850192909252825190810183528083018281528152928301529182015251611d7591906134fc565b60405180910390a150565b6000546001600160a01b03163314611daa5760405162461bcd60e51b8152600401610a0890613113565b8015611dc757601d54600160a81b900460ff1615611dc757600080fd5b601d8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314611e0f5760405162461bcd60e51b8152600401610a0890613113565b60008211611e1c57600080fd5b6024805460ff1916841515179055600354611e38908390613176565b602555600354611e49908290613176565b6026556040805160e08101909152600760a0820190815266115b98589b195960ca1b60c08301526060820190815260008051602061363e833981519152919081906080820187611e9a576000611e9d565b60015b60ff16815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d6178696d756d60a01b8152508152602001602554815250815260200160405180604001604052806040518060400160405280600c81526020016b53776170204d696e696d756d60a01b81525081526020016026548152508152506040516115a79190613533565b6000546001600160a01b03163314611f5d5760405162461bcd60e51b8152600401610a0890613113565b601d546001600160a01b03838116911614611fa557601d54600160a81b900460ff1615611f8957600080fd5b601d80546001600160a01b0319166001600160a01b0384161790555b8015611ff057601d546040516318e02bd960e01b81523360048201526001600160a01b03909116906318e02bd990602401600060405180830381600087803b158015611c3f57600080fd5b5050565b6000546001600160a01b0316331461201e5760405162461bcd60e51b8152600401610a0890613113565b6001600160a01b0381166120835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a08565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121085760405162461bcd60e51b8152600401610a0890613113565b6001600160a01b0382166000908152600b60205260409020805460ff191682151517905560008051602061363e8339815191528161217b576040518060400160405280601a81526020017f5472616e73616374696f6e204c696d697420456e666f726365640000000000008152506113b7565b604080518082018252601981527f5472616e73616374696f6e204c696d69742052656d6f766564000000000000006020820152815160a08101909252908060608101806113d8610cdd8960c0860161323e565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160609190600090612209906002613198565b61221490600261315e565b67ffffffffffffffff81111561222c5761222c61356a565b6040519080825280601f01601f191660200182016040528015612256576020820181803683370190505b509050600360fc1b8160008151811061227157612271613475565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106122a0576122a0613475565b60200101906001600160f81b031916908160001a90535060005b84518110156123df578260048683815181106122d8576122d8613475565b016020015182516001600160f81b031990911690911c60f81c90811061230057612300613475565b01602001516001600160f81b0319168261231b836002613198565b61232690600261315e565b8151811061233657612336613475565b60200101906001600160f81b031916908160001a9053508285828151811061236057612360613475565b602091010151815160f89190911c600f1690811061238057612380613475565b01602001516001600160f81b0319168261239b836002613198565b6123a690600361315e565b815181106123b6576123b6613475565b60200101906001600160f81b031916908160001a905350806123d78161348b565b9150506122ba565b509392505050565b606082826040516020016123fc929190613580565b604051602081830303815290604052905092915050565b600080821161245c5760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610a08565b6001600160a01b0384166000908152600760205260409020548211156124bb5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a08565b6022541580156124e357506001600160a01b0383166000908152601c602052604090205460ff165b1561256a576001600160a01b0384166000908152600c602052604090205460ff166125505760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610a08565b61256a43602155426022556024805460ff19166001179055565b6125748483612896565b6001600160a01b0383166000908152601c602052604090205460ff161580156125ab57506001546001600160a01b03848116911614155b15612613576001600160a01b0383166000908152600760205260409020546125e9576001600160a01b03831660009081526008602052604090204290555b6001600160a01b0383166000908152600b602052604090205460ff16612613576126138383612928565b60275460ff1615612630576126298484846127ee565b9050610e74565b6001600160a01b038416600090815260076020526040902054612654908390613385565b6001600160a01b038516600090815260076020908152604080832093909355600a90529081205460ff161580156126a457506001600160a01b0384166000908152600a602052604090205460ff16155b6126ae57826126b9565b6126b98585856129ad565b90506126c484612b36565b156126d85782156126d8576126d883612bbb565b6001600160a01b0384166000908152600760205260409020546126fc90829061315e565b6001600160a01b038516600090815260076020526040902055601d54600160a01b900460ff16156127a857601d5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a6919061339c565b505b836001600160a01b0316856001600160a01b031660008051602061365e833981519152836040516127db91815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260076020526040812054612812908390613385565b6001600160a01b03808616600090815260076020526040808220939093559085168152205461284290839061315e565b6001600160a01b03808516600081815260076020526040908190209390935591519086169060008051602061365e833981519152906128849086815260200190565b60405180910390a35060019392505050565b6001600160a01b0382166000908152600b602052604090205460ff16806128e857506001600160a01b0382166000908152601c602052604090205460ff166128e0576005546128e4565b6004545b8111155b611ff05760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610a08565b6006546001600160a01b038316600090815260076020526040902054819061295190849061315e565b11156110aa5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610a08565b6001600160a01b038083166000908152601c602052604080822054601454938716835290822054919260ff918216928492612a1a918591161580156105f457506012546001600160a01b038a166000908152600860205260409020544291612a149161315e565b116115dd565b612a249086613198565b612a2e9190613176565b9050600080600f541115612abe57601454600f54612a4c9087613198565b612a569190613176565b6019546001600160a01b0316600090815260076020526040812080549293508392909190612a8590849061315e565b90915550506019546040518281526001600160a01b039182169189169060008051602061365e8339815191529060200160405180910390a35b8115612b17573060009081526007602052604081208054849290612ae390849061315e565b909155505060405182815230906001600160a01b0389169060008051602061365e8339815191529060200160405180910390a35b612b21818361315e565b612b2b9086613385565b979650505050505050565b336000908152601c602052604081205460ff16158015612b59575060275460ff16155b8015612b67575060245460ff165b8015612b8b57506001600160a01b0382166000908152601c602052604090205460ff165b8015612ba857506026543060009081526007602052604090205410155b8015610bf5575060006010541192915050565b6027805460ff191660011790556025546000908210612bdc57602554612bde565b815b30600090815260076020526040902054909150811115612c0a5750306000908152600760205260409020545b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c3f57612c3f613475565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbc91906135af565b81600181518110612ccf57612ccf613475565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b815291169063791ac94790612d159085906000908690309042906004016135cc565b600060405180830381600087803b158015612d2f57600080fd5b505af1158015612d43573d6000803e3d6000fd5b50506027805460ff191690555050505050565b600080600080600060a08688031215612d6e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60005b83811015612dac578181015183820152602001612d94565b838111156110a85750506000910152565b60008151808452612dd5816020860160208601612d91565b601f01601f19169290920160200192915050565b602081526000610e746020830184612dbd565b6001600160a01b0381168114612e1157600080fd5b50565b60008060408385031215612e2757600080fd5b8235612e3281612dfc565b946020939093013593505050565b600080600080600060a08688031215612e5857600080fd5b8535612e6381612dfc565b94506020860135612e7381612dfc565b93506040860135612e8381612dfc565b92506060860135612e9381612dfc565b91506080860135612ea381612dfc565b809150509295509295909350565b600080600060608486031215612ec657600080fd5b8335612ed181612dfc565b92506020840135612ee181612dfc565b929592945050506040919091013590565b60008060408385031215612f0557600080fd5b8235612f1081612dfc565b91506020830135612f2081612dfc565b809150509250929050565b8015158114612e1157600080fd5b60008060408385031215612f4c57600080fd5b8235612f5781612dfc565b91506020830135612f2081612f2b565b600080600060608486031215612f7c57600080fd5b505081359360208301359350604090920135919050565b600060208284031215612fa557600080fd5b8135610e7481612dfc565b60008060408385031215612fc357600080fd5b8235612f5781612f2b565b60008083601f840112612fe057600080fd5b50813567ffffffffffffffff811115612ff857600080fd5b6020830191508360208260051b850101111561301357600080fd5b9250929050565b6000806000806040858703121561303057600080fd5b843567ffffffffffffffff8082111561304857600080fd5b61305488838901612fce565b9096509450602087013591508082111561306d57600080fd5b5061307a87828801612fce565b95989497509550505050565b6000806040838503121561309957600080fd5b50508035926020909101359150565b6000602082840312156130ba57600080fd5b5035919050565b6000602082840312156130d357600080fd5b8135610e7481612f2b565b6000806000606084860312156130f357600080fd5b83356130fe81612f2b565b95602085013595506040909401359392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561317157613171613148565b500190565b60008261319357634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156131b2576131b2613148565b500290565b600082606081018360005b60038110156132055783830387528151604081518186526131e582870182612dbd565b6020938401519684019690965250509687019691909101906001016131c2565b509095945050505050565b6040815260046040820152634665657360e01b6060820152608060208201526000610e7460808301846131b7565b60609190911b6bffffffffffffffffffffffff1916815260140190565b60408152600d60408201526c4665652052656365697665727360981b6060820152608060208201526000610e7460808301846131b7565b600181815b808511156132cd5781600019048211156132b3576132b3613148565b808516156132c057918102915b93841c9390800290613297565b509250929050565b6000826132e457506001610bf5565b816132f157506000610bf5565b816001811461330757600281146133115761332d565b6001915050610bf5565b60ff84111561332257613322613148565b50506001821b610bf5565b5060208310610133831016604e8410600b8410161715613350575081810a610bf5565b61335a8383613292565b806000190482111561336e5761336e613148565b029392505050565b6000610e7460ff8416836132d5565b60008282101561339757613397613148565b500390565b6000602082840312156133ae57600080fd5b8151610e7481612f2b565b60408152601760408201527f45786368616e676520526f7574657220557064617465640000000000000000006060820152608060208201526000610e7460808301846131b7565b6040815260006134136040830185612dbd565b828103602084015261342581856131b7565b95945050505050565b60408152601860408201527f4d6178696d756d205472616e73616374696f6e2053697a6500000000000000006060820152608060208201526000610e7460808301846131b7565b634e487b7160e01b600052603260045260246000fd5b600060001982141561349f5761349f613148565b5060010190565b6040815260136040820152724d6178696d756d2057616c6c65742053697a6560681b6060820152608060208201526000610e7460808301846131b7565b6000602082840312156134f557600080fd5b5051919050565b60408152600d60408201526c050726573616c6520536574757609c1b6060820152608060208201526000610e7460808301846131b7565b60408152600d60408201526c537761702053657474696e677360981b6060820152608060208201526000610e7460808301846131b7565b634e487b7160e01b600052604160045260246000fd5b60008351613592818460208801612d91565b8351908301906135a6818360208801612d91565b01949350505050565b6000602082840312156135c157600080fd5b8151610e7481612dfc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561361c5784516001600160a01b0316835293830193918301916001016135f7565b50506001600160a01b0396909616606085015250505060800152939250505056fe6e502a17c2522c4dc061bacfc992cb08b19348f65d5ffc44766e54a42cf15b96ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a5a2bfdde4967af6fb10a47f4ff953a2757cd2b3979afcad845c34d2825380b664736f6c634300080a0033

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

00000000000000000000000014b8fab7b00595b215cc813cf9fa8b644437cc10000000000000000000000000a0bd9e08f4d81361ba83747c7d984af346e44655

-----Decoded View---------------
Arg [0] : _dev1 (address): 0x14B8fab7B00595B215Cc813Cf9Fa8b644437CC10
Arg [1] : _dev2 (address): 0xA0BD9e08F4D81361BA83747c7d984af346e44655

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000014b8fab7b00595b215cc813cf9fa8b644437cc10
Arg [1] : 000000000000000000000000a0bd9e08f4d81361ba83747c7d984af346e44655


Deployed Bytecode Sourcemap

15459:17391:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17561:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;17561:49:0;;;;;;;;29592:638;;;;;;;;;;-1:-1:-1;29592:638:0;;;;;:::i;:::-;;:::i;:::-;;18954:71;;;;;;;;;;-1:-1:-1;19017:5:0;;;;;;;;;;;;-1:-1:-1;;;19017:5:0;;;;18954:71;;;;;;;:::i;19695:216::-;;;;;;;;;;-1:-1:-1;19695:216:0;;;;;:::i;:::-;;:::i;:::-;;;2027:14:1;;2020:22;2002:41;;1990:2;1975:18;19695:216:0;1862:187:1;18702:88:0;;;;;;;;;;-1:-1:-1;18775:12:0;;18702:88;;17321:47;;;;;;;;;;;;;;;;30238:735;;;;;;;;;;-1:-1:-1;30238:735:0;;;;;:::i;:::-;;:::i;19219:107::-;;;;;;;;;;;;;:::i;22019:341::-;;;;;;;;;;-1:-1:-1;22019:341:0;;;;;:::i;:::-;;:::i;31442:138::-;;;;;;;;;;;;;:::i;18796:71::-;;;;;;;;;;-1:-1:-1;18796:71:0;;15779:1;3475:36:1;;3463:2;3448:18;18796:71:0;3333:184:1;20533:190:0;;;;;;;;;;-1:-1:-1;20533:190:0;;;;;:::i;:::-;;:::i;20735:501::-;;;;;;;;;;;;;:::i;16786:35::-;;;;;;;;;;-1:-1:-1;16786:35:0;;;;-1:-1:-1;;;;;16786:35:0;;;;;;-1:-1:-1;;;;;3702:32:1;;;3684:51;;3672:2;3657:18;16786:35:0;3522:219:1;21755:92:0;;;;;;;;;;;;;:::i;27247:460::-;;;;;;;;;;-1:-1:-1;27247:460:0;;;;;:::i;:::-;;:::i;26891:344::-;;;;;;;;;;-1:-1:-1;26891:344:0;;;;;:::i;:::-;;:::i;28112:534::-;;;;;;;;;;-1:-1:-1;28112:534:0;;;;;:::i;:::-;;:::i;19919:122::-;;;;;;;;;;-1:-1:-1;19919:122:0;;;;;:::i;:::-;;:::i;17451:27::-;;;;;;;;;;;;;;;;19332:105;;;;;;;;;;;;;:::i;24879:355::-;;;;;;;;;;-1:-1:-1;24879:355:0;;;;;:::i;:::-;;:::i;29016:263::-;;;;;;;;;;-1:-1:-1;29016:263:0;;;;;:::i;:::-;;:::i;20053:468::-;;;;;;;;;;-1:-1:-1;20053:468:0;;;;;:::i;:::-;;:::i;17523:31::-;;;;;;;;;;-1:-1:-1;17523:31:0;;;;;;;;19443:105;;;;;;;;;;-1:-1:-1;19443:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;19527:18:0;19509:7;19527:18;;;:9;:18;;;;;;;19443:105;14697:148;;;;;;;;;;;;;:::i;17205:36::-;;;;;;;;;;-1:-1:-1;17205:36:0;;;;-1:-1:-1;;;17205:36:0;;;;;;17171:27;;;;;;;;;;-1:-1:-1;17171:27:0;;;;-1:-1:-1;;;;;17171:27:0;;;19031:71;;;;;;;;;;-1:-1:-1;19074:7:0;14121:6;-1:-1:-1;;;;;14121:6:0;19031:71;19219:107;16828:27;;;;;;;;;;-1:-1:-1;16828:27:0;;;;-1:-1:-1;;;;;16828:27:0;;;18873:75;;;;;;;;;;-1:-1:-1;18938:7:0;;;;;;;;;;;;-1:-1:-1;;;18938:7:0;;;;18873:75;;17375:35;;;;;;;;;;;;;;;;17295:19;;;;;;;;;;-1:-1:-1;17295:19:0;;;;-1:-1:-1;;;;;17295:19:0;;;21855:156;;;;;;;;;;-1:-1:-1;21855:156:0;;;;;:::i;:::-;;:::i;28658:350::-;;;;;;;;;;-1:-1:-1;28658:350:0;;;;;:::i;:::-;;:::i;19108:105::-;;;;;;;;;;;;;:::i;17419:25::-;;;;;;;;;;;;;;;;16598:35;;;;;;;;;;-1:-1:-1;16598:35:0;;;;-1:-1:-1;;;;;16598:35:0;;;17248:38;;;;;;;;;;-1:-1:-1;17248:38:0;;;;-1:-1:-1;;;17248:38:0;;;;;;31588:485;;;;;;;;;;-1:-1:-1;31588:485:0;;;;;:::i;:::-;;:::i;27719:385::-;;;;;;;;;;-1:-1:-1;27719:385:0;;;;;:::i;:::-;;:::i;21248:177::-;;;;;;;;;;-1:-1:-1;21248:177:0;;;;;:::i;:::-;;:::i;30981:453::-;;;;;;;;;;-1:-1:-1;30981:453:0;;;;;:::i;:::-;;:::i;21437:306::-;;;;;;;;;;-1:-1:-1;21437:306:0;;;;;:::i;:::-;;:::i;19554:133::-;;;;;;;;;;-1:-1:-1;19554:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;19656:19:0;;;19638:7;19656:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;19554:133;16744:35;;;;;;;;;;-1:-1:-1;16744:35:0;;;;-1:-1:-1;;;;;16744:35:0;;;16640:97;;;;;;;;;;-1:-1:-1;16640:97:0;;;;-1:-1:-1;;;;;16640:97:0;;;15000:244;;;;;;;;;;-1:-1:-1;15000:244:0;;;;;:::i;:::-;;:::i;29287:297::-;;;;;;;;;;-1:-1:-1;29287:297:0;;;;;:::i;:::-;;:::i;17617:49::-;;;;;;;;;;;;;;;;16864:24;;;;;;;;;;-1:-1:-1;16864:24:0;;;;-1:-1:-1;;;;;16864:24:0;;;17485:29;;;;;;;;;;;;;;;;29592:638;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;;;;;;;;;29741:12:::1;:28:::0;;;29780:6:::1;:16:::0;;;29807:7:::1;:18:::0;;;29848:23:::1;29756:13:::0;29789:7;29848:23:::1;:::i;:::-;29836:9;:35:::0;29882:8:::1;:20:::0;;;29913:14:::1;:32:::0;;;29986:18:::1;30003:1;29930:15:::0;29986:18:::1;:::i;:::-;29976:7;;29964:9;;:19;;;;:::i;:::-;:40;29956:49;;;::::0;::::1;;-1:-1:-1::0;;;;;;;;;;;30021:201:0::1;;;;;;;;30046:58;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;30046:58:0::1;;::::0;::::1;;;;30089:14;;30071:9;;30083:3;30071:15;;;;:::i;:::-;:32;;;;:::i;:::-;30046:58:::0;;30021:201;;30106:62:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;30106:62:0;;;;;;;30153:14:::1;::::0;30021:201:::1;::::0;;::::1;::::0;30106:62;::::1;::::0;30131:19:::1;:13:::0;30147:3:::1;30131:19;:::i;:::-;:36;;;;:::i;:::-;30106:62:::0;;30021:201;;30170:50:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;30170:50:0;;;;;;;30205:14:::1;::::0;30021:201:::1;::::0;;::::1;::::0;30170:50;::::1;::::0;30189:13:::1;:7:::0;30199:3:::1;30189:13;:::i;:::-;:30;;;;:::i;:::-;30170:50:::0;;30021:201;;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;;;;;29592:638:::0;;;;;:::o;19695:216::-;19799:10;19770:4;19787:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;19787:32:0;;;;;;;;;;:41;;;19844:37;19770:4;;19787:32;;19844:37;;;;19822:6;160:25:1;;148:2;133:18;;14:177;19844:37:0;;;;;;;;-1:-1:-1;19899:4:0;19695:216;;;;;:::o;30238:735::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;30408:20:::1;:53:::0;;-1:-1:-1;;;;;;30408:53:0;;::::1;-1:-1:-1::0;;;;;30408:53:0;;::::1;::::0;;;::::1;::::0;;;30472:20:::1;:53:::0;;;::::1;::::0;;::::1;;::::0;;30536:12:::1;:29:::0;;;::::1;::::0;;::::1;;::::0;;30576:12:::1;:29:::0;;;::::1;::::0;;::::1;;::::0;;30616:12:::1;:28:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;30660:305:::1;::::0;;30698:85;;;;;::::1;30694:93:::0;;;30698:85;;;-1:-1:-1;;;30698:85:0;;;;30742:39;;-1:-1:-1;;;;;;;;;;;30660:305:0;;;::::1;::::0;::::1;::::0;;;30698:85:::1;::::0;30694:93;30733:49:::1;::::0;30742:39:::1;::::0;30408:53;;30698:85:::1;30742:39;;:::i;:::-;;;;;;;;;;;;;30733:8;:49::i;:::-;30698:11;:85::i;:::-;30694:93;;;;30785:1;30694:93;;::::0;30660:305:::1;;;;30788:93;;;;;;;;30792:85;;;;;;;;;;;;;;-1:-1:-1::0;;;30792:85:0::1;;::::0;30827:49:::1;30853:21;30836:39;;;;;;;;:::i;30792:85::-;30788:93;;;;30879:1;30788:93;;::::0;30660:305:::1;;;;30883:80;;;;;;;;30887:72;;;;;;;;;;;;;;-1:-1:-1::0;;;30887:72:0::1;;::::0;30917:41:::1;30943:13;30926:31;;;;;;;;:::i;30887:72::-;30883:80:::0;;30961:1:::1;30883:80;::::0;;::::1;::::0;30660:305;;::::1;::::0;::::1;::::0;;::::1;:::i;19219:107::-:0;19269:7;19307:15;15779:1;19307:2;:15;:::i;:::-;19287:16;;:36;;;;:::i;:::-;19280:43;;19219:107;:::o;22019:341::-;-1:-1:-1;;;;;22139:19:0;;22119:4;22139:19;;;:11;:19;;;;;;;;22159:10;22139:31;;;;;;;;-1:-1:-1;;22139:52:0;22136:157;;-1:-1:-1;;;;;22241:19:0;;;;;;:11;:19;;;;;;;;22261:10;22241:31;;;;;;;;:40;;22275:6;;22241:40;:::i;:::-;-1:-1:-1;;;;;22207:19:0;;;;;;:11;:19;;;;;;;;22227:10;22207:31;;;;;;;:74;22136:157;22312:40;22326:6;22334:9;22345:6;22312:13;:40::i;:::-;22305:47;;22019:341;;;;;;:::o;31442:138::-;31566:4;;-1:-1:-1;;;;;31566:4:0;;;31495:7;19527:18;;;:9;:18;;;;;;;31548:4;;;;;19527:18;;;;;31495:7;;31538:33;;;:::i;:::-;31522:12;;:50;;;;:::i;20533:190::-;20629:12;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;20666:49:::1;::::0;-1:-1:-1;;;20666:49:0;;20696:10:::1;20666:49;::::0;::::1;13199:51:1::0;13266:18;;;13259:34;;;-1:-1:-1;;;;;20666:29:0;::::1;::::0;::::1;::::0;13172:18:1;;20666:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20735:501::-:0;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;20902:6:::1;::::0;20887:12:::1;::::0;20805:21:::1;::::0;20791:11:::1;::::0;20887:21:::1;::::0;20902:6;20887:21:::1;:::i;:::-;20870:12;::::0;20864:18:::1;::::0;:3;:18:::1;:::i;:::-;20863:46;;;;:::i;:::-;20837:72;;20920:17;20973:6;;20958:12;;:21;;;;:::i;:::-;20947:6;::::0;20941:12:::1;::::0;:3;:12:::1;:::i;:::-;20940:40;;;;:::i;:::-;20920:60:::0;-1:-1:-1;21005:19:0;;21001:84:::1;;21039:20;::::0;:46:::1;::::0;-1:-1:-1;;;;;21039:20:0;;::::1;::::0;:46;::::1;;;::::0;21069:15;;21039:20:::1;:46:::0;:20;:46;21069:15;21039:20;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21001:84;21100:13:::0;;21096:133:::1;;21130:12;::::0;-1:-1:-1;;;;;21130:12:0::1;:36;21152:13;21164:1;21152:9:::0;:13:::1;:::i;:::-;21130:36;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;21181:12:0::1;::::0;-1:-1:-1;;;;;21181:12:0::1;:36;21203:13;21215:1;21203:9:::0;:13:::1;:::i;:::-;21181:36;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21096:133;20780:456;;;20735:501::o:0;21755:92::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;21814:18:::1;:25:::0;;-1:-1:-1;;;;21814:25:0::1;-1:-1:-1::0;;;21814:25:0::1;::::0;;21755:92::o;27247:460::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;27335:6:::1;:30:::0;;-1:-1:-1;;;;;27335:30:0;;::::1;-1:-1:-1::0;;;;;;27335:30:0;;::::1;::::0;::::1;::::0;;;27376:4:::1;:14:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;27335:6:::1;27401:23:::0;;;:14:::1;:23;::::0;;;;;;;:30;;-1:-1:-1;;27401:30:0;;::::1;27335::::0;27401;;::::1;::::0;;;27442:26;;;:15:::1;:26:::0;;;;;;:33;;;;::::1;::::0;;::::1;::::0;;;27491:208;;27539:65;;;;;::::1;27535:73:::0;;;27539:65;;;-1:-1:-1;;;27539:65:0;;;;27575:27;;-1:-1:-1;;;;;;;;;;;27491:208:0;;;;;::::1;::::0;::::1;::::0;;;27539:65:::1;::::0;27535:73;;27566:37:::1;::::0;27575:27:::1;::::0;27355:9;;27575:27:::1;;:::i;27539:65::-;27535:73:::0;;27606:1:::1;27535:73;::::0;;::::1;::::0;27491:208;;;27609:76:::1;::::0;;27613:68;;;;;::::1;27609:76:::0;;::::1;27613:68:::0;;;-1:-1:-1;;;27613:68:0;;;;27674:4:::1;::::0;27657:22;;27491:208;;::::1;::::0;27609:76;;;;27613:68:::1;::::0;27648:32:::1;::::0;27657:22:::1;::::0;-1:-1:-1;;;;;27674:4:0::1;::::0;27657:22:::1;;:::i;27613:68::-;27609:76:::0;;27683:1:::1;27609:76;::::0;;::::1;::::0;27491:208;;;27687:10:::1;::::0;;;;;;;-1:-1:-1;27687:10:0;;::::1;::::0;;;;;;;::::1;::::0;27491:208;;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;27247:460:::0;;:::o;26891:344::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;26986:4:::1;::::0;-1:-1:-1;;;;;26980:10:0;;::::1;26986:4:::0;::::1;26980:10;;26972:57;;;::::0;-1:-1:-1;;;26972:57:0;;14304:2:1;26972:57:0::1;::::0;::::1;14286:21:1::0;14343:2;14323:18;;;14316:30;14382:34;14362:18;;;14355:62;-1:-1:-1;;;14433:18:1;;;14426:32;14475:19;;26972:57:0::1;14102:398:1::0;26972:57:0::1;-1:-1:-1::0;;;;;27040:18:0;::::1;;::::0;;;:14:::1;:18;::::0;;;;:27;;-1:-1:-1;;27040:27:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;27040:27:0;27099:61:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;27099:61:0::1;;::::0;::::1;27083:144;::::0;;27163:38;;;;;;27083:144;::::1;::::0;::::1;::::0;27167:30:::1;27176:20;27193:2:::0;27176:20;;;::::1;:::i;27167:30::-;27163:38:::0;;27199:1:::1;27163:38;::::0;;::::1;::::0;27083:144;;;27203:10:::1;::::0;;;;;;;;-1:-1:-1;27203:10:0;;::::1;::::0;;;;;;;::::1;::::0;;;27083:144;;::::1;::::0;;;;27215:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;27083:144;;;;;::::1;::::0;;;::::1;:::i;28112:534::-:0;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;28247:1:::1;28232:12;:16;:37;;;;;28268:1;28252:13;:17;28232:37;:52;;;;;28283:1;28273:7;:11;28232:52;:72;;;;;28299:5;28288:7;:16;;28232:72;28224:81;;;::::0;::::1;;28366:7;28350:12;28335;;:27;;;;:::i;:::-;28334:39;;;;:::i;:::-;28316:15;:57:::0;28404:12:::1;::::0;28436:7;;28404:28:::1;::::0;28419:13;;28404:28:::1;:::i;:::-;28403:40;;;;:::i;:::-;28384:16;:59:::0;28459:179:::1;::::0;;28504:58;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;28504:58:0;;;;28459:179:::1;::::0;::::1;28504:58:::0;;;-1:-1:-1;;;;;;;;;;;28459:179:0;;;;28504:58;;;28545:15:::1;15779:1;28545:2;:15;:::i;:::-;28526;;:35;;;;:::i;:::-;28504:58:::0;;28459:179;;28564:60:::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;28564:60:0;;;;;;;28459:179:::1;::::0;;::::1;::::0;28564:60;::::1;28607:15;15779:1;28607:2;:15;:::i;:::-;28587:16;;:36;;;;:::i;:::-;28564:60:::0;;28459:179;;28626:10:::1;::::0;;;;;;;-1:-1:-1;28626:10:0;;::::1;::::0;;;;;28459:179:::1;28626:10:::0;;::::1;::::0;;;;28459:179;;::::1;::::0;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;28112:534:::0;;;:::o;19919:122::-;19974:4;19998:35;20006:7;-1:-1:-1;;19998:7:0;:35::i;19332:105::-;19382:7;19418:15;15779:1;19418:2;:15;:::i;:::-;19400:14;;:34;;;;:::i;24879:355::-;24952:7;25001:12;24988:10;;24975;;:23;;;;:::i;:::-;:38;24972:72;;;25040:1;25023:14;;:18;;;;:::i;:::-;25016:25;;;;24972:72;25058:7;25054:87;;;25074:10;:67;;25133:8;;25121:9;;:20;;;;:::i;:::-;25074:67;;;25115:3;25100:11;;25088:9;;:23;;;;:::i;:::-;25087:31;;;;:::i;25054:87::-;25159:10;:67;;25218:8;;25206:9;;:20;;;;:::i;:::-;25159:67;;;25200:3;25185:11;;25173:9;;:23;;;;:::i;:::-;25172:31;;;;:::i;29016:263::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29099:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;29099:28:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;29099:28:0;29159:41:::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;29159:41:0::1;;::::0;::::1;;;;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;29159:41:0::1;::::0;::::1;::::0;29143:128;;29203:42;;;;;;29159:41;29143:128;::::1;::::0;::::1;::::0;29207:34:::1;29216:24;29233:6:::0;29216:24;;;::::1;:::i;20053:468::-:0;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;20166:20;;;;;:58:::1;;-1:-1:-1::0;20190:34:0;;::::1;20166:58;20158:67;;;::::0;::::1;;20251:10;20236:12;20274:240;20291:20:::0;;::::1;20274:240;;;20337:14;:28;20352:9;;20362:1;20352:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20337:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20337:28:0;;::::1;;20336:29;:64:::0;::::1;;;;20370:16;:30;20387:9;;20397:1;20387:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20370:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20370:30:0;;::::1;;20369:31;20336:64;20333:170;;;20421:66;20436:4;20442:9;;20452:1;20442:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20470:15;15779:1;20470:2;:15;:::i;:::-;20456:7;;20464:1;20456:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;20421:14;:66::i;:::-;;20333:170;20313:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20274:240;;;;20147:374;20053:468:::0;;;;:::o;14697:148::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;14804:1:::1;14788:6:::0;;14767:40:::1;::::0;-1:-1:-1;;;;;14788:6:0;;::::1;::::0;14767:40:::1;::::0;14804:1;;14767:40:::1;14835:1;14818:19:::0;;-1:-1:-1;;;;;;14818:19:0::1;::::0;;14697:148::o;21855:156::-;21935:4;21959:44;21973:10;21985:9;21996:6;21959:13;:44::i;28658:350::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;28768:1:::1;28756:9;:13;:28;;;;;28783:1;28773:7;:11;28756:28;:48;;;;;28799:5;28788:7;:16;;28756:48;28748:57;;;::::0;::::1;;28862:7;28849:9;28834:12;;:24;;;;:::i;:::-;28833:36;;;;:::i;:::-;28816:14;:53:::0;;;28885:115:::1;::::0;;28925:49;;;;;;;;;;;;-1:-1:-1;;;28925:49:0;;;;28885:115:::1;::::0;::::1;28925:49:::0;;;-1:-1:-1;;;;;;;;;;;28885:115:0;;;28925:49;;;28957:15:::1;15779:1;28957:2;:15;:::i;:::-;28939:14;;:34;;;;:::i;:::-;28925:49:::0;;28885:115;;28976:10:::1;::::0;;;;;;;;-1:-1:-1;28976:10:0;;::::1;::::0;;;;;28885:115:::1;28976:10:::0;;::::1;::::0;;;28885:115;;::::1;::::0;;;;28988:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;28885:115;;;;;;;;::::1;::::0;;::::1;:::i;19108:105::-:0;19157:7;19194:15;15779:1;19194:2;:15;:::i;:::-;19175;;:35;;;;:::i;31588:485::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;31700:19:::1;;31677:20;;:42;;;;:::i;:::-;31659:15;:60;31651:106;;;::::0;-1:-1:-1;;;31651:106:0;;16538:2:1;31651:106:0::1;::::0;::::1;16520:21:1::0;;;16557:18;;;16550:30;16616:34;16596:18;;;16589:62;16668:18;;31651:106:0::1;16336:356:1::0;31651:106:0::1;31787:1;31776:7;:12;;:27;;;;;31802:1;31792:7;:11;31776:27;31768:65;;;::::0;-1:-1:-1;;;31768:65:0;;16899:2:1;31768:65:0::1;::::0;::::1;16881:21:1::0;16938:2;16918:18;;;16911:30;16977:27;16957:18;;;16950:55;17022:18;;31768:65:0::1;16697:349:1::0;31768:65:0::1;31867:15;31844:20;:38:::0;31940:4:::1;::::0;31925:20:::1;::::0;-1:-1:-1;;;31925:20:0;;-1:-1:-1;;;;;31940:4:0;;::::1;31925:20;::::0;::::1;3684:51:1::0;31903:19:0::1;::::0;31925:4:::1;::::0;:14:::1;::::0;3657:18:1;;31925:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31981:4;::::0;;31987;31903:42;;-1:-1:-1;31966:57:0::1;::::0;-1:-1:-1;;;;;31981:4:0;;::::1;::::0;31987::::1;32019:3;31994:21;32008:7:::0;31903:42;31994:21:::1;:::i;:::-;31993:29;;;;:::i;31966:57::-;;32053:4;;;;;;;;;-1:-1:-1::0;;;;;32053:4:0::1;-1:-1:-1::0;;;;;32044:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;27719:385:::0;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27804:32:0;::::1;;::::0;;;:16:::1;:32;::::0;;;;;;;:39;;27839:4:::1;-1:-1:-1::0;;27804:39:0;;::::1;::::0;::::1;::::0;;;27854:15:::1;:31:::0;;;;;:38;;;::::1;::::0;::::1;::::0;;27903:11:::1;:27:::0;;;;;;:34;;;;::::1;;::::0;;;27953:143;;27991:75;;;;;::::1;27987:83:::0;;;27991:75;;;-1:-1:-1;;;27991:75:0;;;;28032:32;;-1:-1:-1;;;;;;;;;;;27953:143:0;;;;;::::1;::::0;::::1;::::0;;;27991:75:::1;::::0;27987:83;28023:42:::1;::::0;28032:32:::1;::::0;27804;;28032::::1;;:::i;27991:75::-;27987:83:::0;;28068:1:::1;27987:83;::::0;;::::1;::::0;27953:143;;;28072:10:::1;::::0;;;;;;;;-1:-1:-1;28072:10:0;;::::1;::::0;;;;;;;::::1;::::0;;;27953:143;;::::1;::::0;;;;28084:10;;;;;;;;;::::1;::::0;;;;;;;::::1;::::0;27953:143;;;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;27719:385:::0;:::o;21248:177::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;21327:8:::1;21323:55;;;21359:18;::::0;-1:-1:-1;;;21359:18:0;::::1;;;21358:19;21350:28;;;::::0;::::1;;21389:17;:28:::0;;;::::1;;-1:-1:-1::0;;;21389:28:0::1;-1:-1:-1::0;;;;21389:28:0;;::::1;::::0;;;::::1;::::0;;21248:177::o;30981:453::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;31127:1:::1;31112:12;:16;31104:25;;;::::0;::::1;;31140:11;:22:::0;;-1:-1:-1;;31140:22:0::1;::::0;::::1;;;::::0;;31189:12:::1;::::0;:27:::1;::::0;31204:12;;31189:27:::1;:::i;:::-;31173:13;:43:::0;31241:12:::1;::::0;:32:::1;::::0;31256:17;;31241:32:::1;:::i;:::-;31227:11;:46:::0;31289:137:::1;::::0;;31323:32;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;31323:32:0;;;;31289:137:::1;::::0;::::1;31323:32:::0;;;-1:-1:-1;;;;;;;;;;;31289:137:0;;;;31323:32;;;31338:8;:16:::1;;31353:1;31338:16;;;31349:1;31338:16;31323:32;;;;::::0;31289:137:::1;;;;31356:34;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;31356:34:0::1;;::::0;::::1;;;;31376:13;;31356:34;;::::0;31289:137:::1;;;;31392:32;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;31392:32:0::1;;::::0;::::1;;;;31412:11;;31392:32;;::::0;31289:137:::1;;::::0;::::1;;;;;;:::i;21437:306::-:0;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;21550:9:::1;::::0;-1:-1:-1;;;;;21527:33:0;;::::1;21550:9:::0;::::1;21527:33;21523:143;;21585:18;::::0;-1:-1:-1;;;21585:18:0;::::1;;;21584:19;21576:28;;;::::0;::::1;;21619:9;:35:::0;;-1:-1:-1;;;;;;21619:35:0::1;-1:-1:-1::0;;;;;21619:35:0;::::1;;::::0;;21523:143:::1;21680:5;21676:59;;;21700:9;::::0;:35:::1;::::0;-1:-1:-1;;;21700:35:0;;21724:10:::1;21700:35;::::0;::::1;3684:51:1::0;-1:-1:-1;;;;;21700:9:0;;::::1;::::0;:23:::1;::::0;3657:18:1;;21700:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;21676:59;21437:306:::0;;:::o;15000:244::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15089:22:0;::::1;15081:73;;;::::0;-1:-1:-1;;;15081:73:0;;18518:2:1;15081:73:0::1;::::0;::::1;18500:21:1::0;18557:2;18537:18;;;18530:30;18596:34;18576:18;;;18569:62;-1:-1:-1;;;18647:18:1;;;18640:36;18693:19;;15081:73:0::1;18316:402:1::0;15081:73:0::1;15191:6;::::0;;15170:38:::1;::::0;-1:-1:-1;;;;;15170:38:0;;::::1;::::0;15191:6;::::1;::::0;15170:38:::1;::::0;::::1;15219:6;:17:::0;;-1:-1:-1;;;;;;15219:17:0::1;-1:-1:-1::0;;;;;15219:17:0;;;::::1;::::0;;;::::1;::::0;;15000:244::o;29287:297::-;14268:6;;-1:-1:-1;;;;;14268:6:0;6314:10;14268:22;14260:67;;;;-1:-1:-1;;;14260:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29374:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;29374:32:0::1;::::0;::::1;;;::::0;;-1:-1:-1;;;;;;;;;;;29374:32:0;29438:67:::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;29422:154;;29508:42;;;;;;29438:67;29422:154;::::1;::::0;::::1;::::0;29512:34:::1;29521:24;29538:6:::0;29521:24;;;::::1;:::i;32079:465::-:0;32164:42;;;;;;;;;;;;-1:-1:-1;;;32164:42:0;;;;32256:11;;32138:13;;32164:42;:21;;32256:15;;32270:1;32256:15;:::i;:::-;32252:19;;:1;:19;:::i;:::-;32242:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32242:30:0;;32223:49;;-1:-1:-1;;;32283:3:0;32287:1;32283:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;32283:12:0;;;;;;;;;-1:-1:-1;;;32306:3:0;32310:1;32306:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;32306:12:0;;;;;;;;;32334:6;32329:179;32350:4;:11;32346:1;:15;32329:179;;;32396:8;32427:1;32416:4;32421:1;32416:7;;;;;;;;:::i;:::-;;;;;32396:35;;-1:-1:-1;;;;;;32416:7:0;;;:12;;;:7;32410:19;;32396:35;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;32396:35:0;32383:3;32389;:1;32391;32389:3;:::i;:::-;32387:5;;:1;:5;:::i;:::-;32383:10;;;;;;;;:::i;:::-;;;;:48;-1:-1:-1;;;;;32383:48:0;;;;;;;;;32459:8;32479:4;32484:1;32479:7;;;;;;;;:::i;:::-;;;;;;32459:37;;32479:7;;;;;32489:4;32473:21;;32459:37;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;32459:37:0;32446:3;32452;:1;32454;32452:3;:::i;:::-;32450:5;;:1;:5;:::i;:::-;32446:10;;;;;;;;:::i;:::-;;;;:50;-1:-1:-1;;;;;32446:50:0;;;;;;;;-1:-1:-1;32363:3:0;;;;:::i;:::-;;;;32329:179;;;-1:-1:-1;32532:3:0;32079:465;-1:-1:-1;;;32079:465:0:o;32556:149::-;32634:13;32691:1;32694;32674:22;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32660:37;;32556:149;;;;:::o;22368:1350::-;22460:4;22494:1;22485:6;:10;22477:44;;;;-1:-1:-1;;;22477:44:0;;19532:2:1;22477:44:0;;;19514:21:1;19571:2;19551:18;;;19544:30;-1:-1:-1;;;19590:18:1;;;19583:51;19651:18;;22477:44:0;19330:345:1;22477:44:0;-1:-1:-1;;;;;22540:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;22540:27:0;22532:60;;;;-1:-1:-1;;;22532:60:0;;19882:2:1;22532:60:0;;;19864:21:1;19921:2;19901:18;;;19894:30;-1:-1:-1;;;19940:18:1;;;19933:50;20000:18;;22532:60:0;19680:344:1;22532:60:0;23797:12;;:17;;;22606:40;;-1:-1:-1;;;;;;22621:25:0;;;;;;:14;:25;;;;;;;;22606:40;22603:120;;;-1:-1:-1;;;;;22657:24:0;;;;;;:16;:24;;;;;;;;22649:61;;;;-1:-1:-1;;;22649:61:0;;20231:2:1;22649:61:0;;;20213:21:1;20270:2;20250:18;;;20243:30;20309:26;20289:18;;;20282:54;20353:18;;22649:61:0;20029:348:1;22649:61:0;22712:8;23881:12;23868:10;:25;23919:15;23904:12;:30;23945:11;:18;;-1:-1:-1;;23945:18:0;23959:4;23945:18;;;23830:141;22712:8;22735:28;22748:6;22756;22735:12;:28::i;:::-;-1:-1:-1;;;;;22789:25:0;;;;;;:14;:25;;;;;;;;22788:26;:47;;;;-1:-1:-1;22831:4:0;;-1:-1:-1;;;;;22818:17:0;;;22831:4;;22818:17;;22788:47;22784:298;;;-1:-1:-1;;;;;22855:20:0;;;;;;:9;:20;;;;;;22852:102;;-1:-1:-1;;;;;22901:19:0;;;;;;:8;:19;;;;;22923:15;22901:37;;22852:102;-1:-1:-1;;;;;22973:26:0;;;;;;:15;:26;;;;;;;;22968:103;;23020:35;23037:9;23048:6;23020:16;:35::i;:::-;23105:6;;;;23102:63;;;23121:41;23136:6;23144:9;23155:6;23121:14;:41::i;:::-;23114:48;;;;23102:63;-1:-1:-1;;;;;23197:17:0;;;;;;:9;:17;;;;;;:26;;23217:6;;23197:26;:::i;:::-;-1:-1:-1;;;;;23177:17:0;;;;;;:9;:17;;;;;;;;:46;;;;24844:11;:19;;;;;;;;24843:20;23261:49;;;;-1:-1:-1;;;;;;24844:19:0;;24819:4;24844:19;;;:11;:19;;;;;;;;24843:20;23286:24;23261:95;;23350:6;23261:95;;;23313:34;23321:6;23329:9;23340:6;23313:7;:34::i;:::-;23236:120;;23380:25;23395:9;23380:14;:25::i;:::-;23377:66;;;23412:10;;23408:32;;23424:16;23433:6;23424:8;:16::i;:::-;-1:-1:-1;;;;;23478:20:0;;;;;;:9;:20;;;;;;:37;;23501:14;;23478:37;:::i;:::-;-1:-1:-1;;;;;23455:20:0;;;;;;:9;:20;;;;;:60;23540:17;;-1:-1:-1;;;23540:17:0;;;;23536:91;;;23572:9;;:55;;-1:-1:-1;;;23572:55:0;;-1:-1:-1;;;;;20640:15:1;;;23572:55:0;;;20622:34:1;20692:15;;;20672:18;;;20665:43;20724:18;;;20717:34;;;23572:9:0;;;;:28;;20557:18:1;;23572:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23536:91;23662:9;-1:-1:-1;;;;;23645:43:0;23654:6;-1:-1:-1;;;;;23645:43:0;-1:-1:-1;;;;;;;;;;;23673:14:0;23645:43;;;;160:25:1;;148:2;133:18;;14:177;23645:43:0;;;;;;;;-1:-1:-1;23706:4:0;;22368:1350;-1:-1:-1;;;;22368:1350:0:o;23979:300::-;-1:-1:-1;;;;;24109:17:0;;24072:4;24109:17;;;:9;:17;;;;;;:26;;24129:6;;24109:26;:::i;:::-;-1:-1:-1;;;;;24089:17:0;;;;;;;:9;:17;;;;;;:46;;;;24169:20;;;;;;;:29;;24192:6;;24169:29;:::i;:::-;-1:-1:-1;;;;;24146:20:0;;;;;;;:9;:20;;;;;;;:52;;;;24214:35;;;;;;-1:-1:-1;;;;;;;;;;;24214:35:0;;;24242:6;160:25:1;;148:2;133:18;;14:177;24214:35:0;;;;;;;;-1:-1:-1;24267:4:0;23979:300;;;;;:::o;24534:215::-;-1:-1:-1;;;;;24621:23:0;;;;;;:15;:23;;;;;;;;;:98;;-1:-1:-1;;;;;;24659:22:0;;;;;;:14;:22;;;;;;;;:59;;24702:16;;24659:59;;;24684:15;;24659:59;24648:6;:71;;24621:98;24613:128;;;;-1:-1:-1;;;24613:128:0;;20964:2:1;24613:128:0;;;20946:21:1;21003:2;20983:18;;;20976:30;-1:-1:-1;;;21022:18:1;;;21015:47;21079:18;;24613:128:0;20762:341:1;24291:235:0;24399:14;;-1:-1:-1;;;;;24432:20:0;;24377:19;24432:20;;;:9;:20;;;;;;24399:14;;24432:29;;24455:6;;24432:29;:::i;:::-;:44;;24424:94;;;;-1:-1:-1;;;24424:94:0;;21310:2:1;24424:94:0;;;21292:21:1;21349:2;21329:18;;;21322:30;21388:34;21368:18;;;21361:62;-1:-1:-1;;;21439:18:1;;;21432:35;21484:19;;24424:94:0;21108:401:1;25242:770:0;-1:-1:-1;;;;;25361:25:0;;;25326:7;25361:25;;;:14;:25;;;;;;;25526:14;;25449:20;;;;;;;;;25326:7;;25361:25;;;;;25326:7;;25427:95;;25361:25;;25449:20;25448:21;:73;;;;-1:-1:-1;25490:13:0;;-1:-1:-1;;;;;25473:14:0;;;;;;:8;:14;;;;;;25506:15;;25473:30;;;:::i;:::-;:48;25427:11;:95::i;:::-;25418:104;;:6;:104;:::i;:::-;25417:123;;;;:::i;:::-;25397:143;;25551:18;25604:1;25594:7;;:11;25590:203;;;25655:14;;25644:7;;25635:16;;:6;:16;:::i;:::-;25634:35;;;;:::i;:::-;25694:12;;-1:-1:-1;;;;;25694:12:0;25684:23;;;;:9;:23;;;;;:37;;25621:48;;-1:-1:-1;25621:48:0;;25684:23;;;:37;;25621:48;;25684:37;:::i;:::-;;;;-1:-1:-1;;25756:12:0;;25741:40;;160:25:1;;;-1:-1:-1;;;;;25756:12:0;;;;25741:40;;;-1:-1:-1;;;;;;;;;;;25741:40:0;148:2:1;133:18;25741:40:0;;;;;;;25590:203;25809:13;;25805:143;;25857:4;25839:24;;;;:9;:24;;;;;:37;;25867:9;;25839:24;:37;;25867:9;;25839:37;:::i;:::-;;;;-1:-1:-1;;25896:40:0;;160:25:1;;;25919:4:0;;-1:-1:-1;;;;;25896:40:0;;;-1:-1:-1;;;;;;;;;;;25896:40:0;148:2:1;133:18;25896:40:0;;;;;;;25805:143;25981:22;25993:10;25981:9;:22;:::i;:::-;25971:33;;:6;:33;:::i;:::-;25964:40;25242:770;-1:-1:-1;;;;;;;25242:770:0:o;26020:285::-;26126:10;26086:4;26111:26;;;:14;:26;;;;;;;;26110:27;:47;;;;-1:-1:-1;26151:6:0;;;;26150:7;26110:47;:71;;;;-1:-1:-1;26170:11:0;;;;26110:71;:109;;;;-1:-1:-1;;;;;;26194:25:0;;;;;;:14;:25;;;;;;;;26110:109;:161;;;;-1:-1:-1;26260:11:0;;26250:4;26232:24;;;;:9;:24;;;;;;:39;;26110:161;:187;;;;;26296:1;26284:9;;:13;26103:194;26020:285;-1:-1:-1;;26020:285:0:o;26313:566::-;17713:6;:13;;-1:-1:-1;;17713:13:0;17722:4;17713:13;;;26408::::1;::::0;17713:6;;26399:22;::::1;:47;;26433:13;;26399:47;;;26424:6;26399:47;26479:4;26461:24;::::0;;;:9:::1;:24;::::0;;;;;26376:70;;-1:-1:-1;26461:39:0;-1:-1:-1;26457:84:0::1;;;-1:-1:-1::0;26535:4:0::1;26517:24;::::0;;;:9:::1;:24;::::0;;;;;26457:84:::1;26578:16;::::0;;26592:1:::1;26578:16:::0;;;;;::::1;::::0;;26554:21:::1;::::0;26578:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26578:16:0::1;26554:40;;26623:4;26605;26610:1;26605:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26605:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26649:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;26649:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;26605:7;;26649:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26639:4;26644:1;26639:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26639:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26683:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;26683:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;26755:12;;26683:6:::1;::::0;26798:4;;26825::::1;::::0;26845:15:::1;::::0;26683:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17731:6:0;:14;;-1:-1:-1;;17731:14:0;;;-1:-1:-1;;;;;26313:566:0:o;196:454:1:-;291:6;299;307;315;323;376:3;364:9;355:7;351:23;347:33;344:53;;;393:1;390;383:12;344:53;-1:-1:-1;;416:23:1;;;486:2;471:18;;458:32;;-1:-1:-1;537:2:1;522:18;;509:32;;588:2;573:18;;560:32;;-1:-1:-1;639:3:1;624:19;611:33;;-1:-1:-1;196:454:1;-1:-1:-1;196:454:1:o;655:258::-;727:1;737:113;751:6;748:1;745:13;737:113;;;827:11;;;821:18;808:11;;;801:39;773:2;766:10;737:113;;;868:6;865:1;862:13;859:48;;;-1:-1:-1;;903:1:1;885:16;;878:27;655:258::o;918:::-;960:3;998:5;992:12;1025:6;1020:3;1013:19;1041:63;1097:6;1090:4;1085:3;1081:14;1074:4;1067:5;1063:16;1041:63;:::i;:::-;1158:2;1137:15;-1:-1:-1;;1133:29:1;1124:39;;;;1165:4;1120:50;;918:258;-1:-1:-1;;918:258:1:o;1181:220::-;1330:2;1319:9;1312:21;1293:4;1350:45;1391:2;1380:9;1376:18;1368:6;1350:45;:::i;1406:131::-;-1:-1:-1;;;;;1481:31:1;;1471:42;;1461:70;;1527:1;1524;1517:12;1461:70;1406:131;:::o;1542:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;1847:2;1832:18;;;;1819:32;;-1:-1:-1;;;1542:315:1:o;2054:813::-;2149:6;2157;2165;2173;2181;2234:3;2222:9;2213:7;2209:23;2205:33;2202:53;;;2251:1;2248;2241:12;2202:53;2290:9;2277:23;2309:31;2334:5;2309:31;:::i;:::-;2359:5;-1:-1:-1;2416:2:1;2401:18;;2388:32;2429:33;2388:32;2429:33;:::i;:::-;2481:7;-1:-1:-1;2540:2:1;2525:18;;2512:32;2553:33;2512:32;2553:33;:::i;:::-;2605:7;-1:-1:-1;2664:2:1;2649:18;;2636:32;2677:33;2636:32;2677:33;:::i;:::-;2729:7;-1:-1:-1;2788:3:1;2773:19;;2760:33;2802;2760;2802;:::i;:::-;2854:7;2844:17;;;2054:813;;;;;;;;:::o;2872:456::-;2949:6;2957;2965;3018:2;3006:9;2997:7;2993:23;2989:32;2986:52;;;3034:1;3031;3024:12;2986:52;3073:9;3060:23;3092:31;3117:5;3092:31;:::i;:::-;3142:5;-1:-1:-1;3199:2:1;3184:18;;3171:32;3212:33;3171:32;3212:33;:::i;:::-;2872:456;;3264:7;;-1:-1:-1;;;3318:2:1;3303:18;;;;3290:32;;2872:456::o;3746:388::-;3814:6;3822;3875:2;3863:9;3854:7;3850:23;3846:32;3843:52;;;3891:1;3888;3881:12;3843:52;3930:9;3917:23;3949:31;3974:5;3949:31;:::i;:::-;3999:5;-1:-1:-1;4056:2:1;4041:18;;4028:32;4069:33;4028:32;4069:33;:::i;:::-;4121:7;4111:17;;;3746:388;;;;;:::o;4139:118::-;4225:5;4218:13;4211:21;4204:5;4201:32;4191:60;;4247:1;4244;4237:12;4262:382;4327:6;4335;4388:2;4376:9;4367:7;4363:23;4359:32;4356:52;;;4404:1;4401;4394:12;4356:52;4443:9;4430:23;4462:31;4487:5;4462:31;:::i;:::-;4512:5;-1:-1:-1;4569:2:1;4554:18;;4541:32;4582:30;4541:32;4582:30;:::i;4649:316::-;4726:6;4734;4742;4795:2;4783:9;4774:7;4770:23;4766:32;4763:52;;;4811:1;4808;4801:12;4763:52;-1:-1:-1;;4834:23:1;;;4904:2;4889:18;;4876:32;;-1:-1:-1;4955:2:1;4940:18;;;4927:32;;4649:316;-1:-1:-1;4649:316:1:o;4970:247::-;5029:6;5082:2;5070:9;5061:7;5057:23;5053:32;5050:52;;;5098:1;5095;5088:12;5050:52;5137:9;5124:23;5156:31;5181:5;5156:31;:::i;5222:376::-;5284:6;5292;5345:2;5333:9;5324:7;5320:23;5316:32;5313:52;;;5361:1;5358;5351:12;5313:52;5400:9;5387:23;5419:28;5441:5;5419:28;:::i;5603:367::-;5666:8;5676:6;5730:3;5723:4;5715:6;5711:17;5707:27;5697:55;;5748:1;5745;5738:12;5697:55;-1:-1:-1;5771:20:1;;5814:18;5803:30;;5800:50;;;5846:1;5843;5836:12;5800:50;5883:4;5875:6;5871:17;5859:29;;5943:3;5936:4;5926:6;5923:1;5919:14;5911:6;5907:27;5903:38;5900:47;5897:67;;;5960:1;5957;5950:12;5897:67;5603:367;;;;;:::o;5975:773::-;6097:6;6105;6113;6121;6174:2;6162:9;6153:7;6149:23;6145:32;6142:52;;;6190:1;6187;6180:12;6142:52;6230:9;6217:23;6259:18;6300:2;6292:6;6289:14;6286:34;;;6316:1;6313;6306:12;6286:34;6355:70;6417:7;6408:6;6397:9;6393:22;6355:70;:::i;:::-;6444:8;;-1:-1:-1;6329:96:1;-1:-1:-1;6532:2:1;6517:18;;6504:32;;-1:-1:-1;6548:16:1;;;6545:36;;;6577:1;6574;6567:12;6545:36;;6616:72;6680:7;6669:8;6658:9;6654:24;6616:72;:::i;:::-;5975:773;;;;-1:-1:-1;6707:8:1;-1:-1:-1;;;;5975:773:1:o;7187:248::-;7255:6;7263;7316:2;7304:9;7295:7;7291:23;7287:32;7284:52;;;7332:1;7329;7322:12;7284:52;-1:-1:-1;;7355:23:1;;;7425:2;7410:18;;;7397:32;;-1:-1:-1;7187:248:1:o;7440:180::-;7499:6;7552:2;7540:9;7531:7;7527:23;7523:32;7520:52;;;7568:1;7565;7558:12;7520:52;-1:-1:-1;7591:23:1;;7440:180;-1:-1:-1;7440:180:1:o;7625:241::-;7681:6;7734:2;7722:9;7713:7;7709:23;7705:32;7702:52;;;7750:1;7747;7740:12;7702:52;7789:9;7776:23;7808:28;7830:5;7808:28;:::i;7871:377::-;7945:6;7953;7961;8014:2;8002:9;7993:7;7989:23;7985:32;7982:52;;;8030:1;8027;8020:12;7982:52;8069:9;8056:23;8088:28;8110:5;8088:28;:::i;:::-;8135:5;8187:2;8172:18;;8159:32;;-1:-1:-1;8238:2:1;8223:18;;;8210:32;;7871:377;-1:-1:-1;;;7871:377:1:o;8479:356::-;8681:2;8663:21;;;8700:18;;;8693:30;8759:34;8754:2;8739:18;;8732:62;8826:2;8811:18;;8479:356::o;8840:127::-;8901:10;8896:3;8892:20;8889:1;8882:31;8932:4;8929:1;8922:15;8956:4;8953:1;8946:15;8972:128;9012:3;9043:1;9039:6;9036:1;9033:13;9030:39;;;9049:18;;:::i;:::-;-1:-1:-1;9085:9:1;;8972:128::o;9105:217::-;9145:1;9171;9161:132;;9215:10;9210:3;9206:20;9203:1;9196:31;9250:4;9247:1;9240:15;9278:4;9275:1;9268:15;9161:132;-1:-1:-1;9307:9:1;;9105:217::o;9327:168::-;9367:7;9433:1;9429;9425:6;9421:14;9418:1;9415:21;9410:1;9403:9;9396:17;9392:45;9389:71;;;9440:18;;:::i;:::-;-1:-1:-1;9480:9:1;;9327:168::o;9500:707::-;9552:3;9583;9637:2;9630:5;9626:14;9663:5;9686:1;9696:485;9710:4;9707:1;9704:11;9696:485;;;9779:5;9773:4;9769:16;9764:3;9757:29;9815:6;9809:13;9845:4;9888:2;9882:9;9917:2;9911:4;9904:16;9947:46;9989:2;9983:4;9979:13;9965:12;9947:46;:::i;:::-;10016:4;10061:11;;;10055:18;10040:13;;;10033:41;;;;-1:-1:-1;;10159:12:1;;;;10124:15;;;;;9730:1;9723:9;9696:485;;;-1:-1:-1;10197:4:1;;9500:707;-1:-1:-1;;;;;9500:707:1:o;10212:523::-;10530:2;10519:9;10512:21;10569:1;10564:2;10553:9;10549:18;10542:29;-1:-1:-1;;;10602:2:1;10591:9;10587:18;10580:34;10652:3;10645:4;10634:9;10630:20;10623:33;10493:4;10673:56;10724:3;10713:9;10709:19;10701:6;10673:56;:::i;10740:229::-;10889:2;10885:15;;;;-1:-1:-1;;10881:53:1;10869:66;;10960:2;10951:12;;10740:229::o;10974:533::-;11292:2;11281:9;11274:21;11331:2;11326;11315:9;11311:18;11304:30;-1:-1:-1;;;11365:2:1;11354:9;11350:18;11343:43;11424:3;11417:4;11406:9;11402:20;11395:33;11255:4;11445:56;11496:3;11485:9;11481:19;11473:6;11445:56;:::i;11512:422::-;11601:1;11644:5;11601:1;11658:270;11679:7;11669:8;11666:21;11658:270;;;11738:4;11734:1;11730:6;11726:17;11720:4;11717:27;11714:53;;;11747:18;;:::i;:::-;11797:7;11787:8;11783:22;11780:55;;;11817:16;;;;11780:55;11896:22;;;;11856:15;;;;11658:270;;;11662:3;11512:422;;;;;:::o;11939:806::-;11988:5;12018:8;12008:80;;-1:-1:-1;12059:1:1;12073:5;;12008:80;12107:4;12097:76;;-1:-1:-1;12144:1:1;12158:5;;12097:76;12189:4;12207:1;12202:59;;;;12275:1;12270:130;;;;12182:218;;12202:59;12232:1;12223:10;;12246:5;;;12270:130;12307:3;12297:8;12294:17;12291:43;;;12314:18;;:::i;:::-;-1:-1:-1;;12370:1:1;12356:16;;12385:5;;12182:218;;12484:2;12474:8;12471:16;12465:3;12459:4;12456:13;12452:36;12446:2;12436:8;12433:16;12428:2;12422:4;12419:12;12415:35;12412:77;12409:159;;;-1:-1:-1;12521:19:1;;;12553:5;;12409:159;12600:34;12625:8;12619:4;12600:34;:::i;:::-;12670:6;12666:1;12662:6;12658:19;12649:7;12646:32;12643:58;;;12681:18;;:::i;:::-;12719:20;;11939:806;-1:-1:-1;;;11939:806:1:o;12750:140::-;12808:5;12837:47;12878:4;12868:8;12864:19;12858:4;12837:47;:::i;12895:125::-;12935:4;12963:1;12960;12957:8;12954:34;;;12968:18;;:::i;:::-;-1:-1:-1;13005:9:1;;12895:125::o;13304:245::-;13371:6;13424:2;13412:9;13403:7;13399:23;13395:32;13392:52;;;13440:1;13437;13430:12;13392:52;13472:9;13466:16;13491:28;13513:5;13491:28;:::i;13554:543::-;13872:2;13861:9;13854:21;13911:2;13906;13895:9;13891:18;13884:30;13950:25;13945:2;13934:9;13930:18;13923:53;14014:3;14007:4;13996:9;13992:20;13985:33;13835:4;14035:56;14086:3;14075:9;14071:19;14063:6;14035:56;:::i;14505:461::-;14770:2;14759:9;14752:21;14733:4;14796:45;14837:2;14826:9;14822:18;14814:6;14796:45;:::i;:::-;14889:9;14881:6;14877:22;14872:2;14861:9;14857:18;14850:50;14917:43;14953:6;14945;14917:43;:::i;:::-;14909:51;14505:461;-1:-1:-1;;;;;14505:461:1:o;14971:544::-;15289:2;15278:9;15271:21;15328:2;15323;15312:9;15308:18;15301:30;15367:26;15362:2;15351:9;15347:18;15340:54;15432:3;15425:4;15414:9;15410:20;15403:33;15252:4;15453:56;15504:3;15493:9;15489:19;15481:6;15453:56;:::i;15520:127::-;15581:10;15576:3;15572:20;15569:1;15562:31;15612:4;15609:1;15602:15;15636:4;15633:1;15626:15;15652:135;15691:3;-1:-1:-1;;15712:17:1;;15709:43;;;15732:18;;:::i;:::-;-1:-1:-1;15779:1:1;15768:13;;15652:135::o;15792:539::-;16110:2;16099:9;16092:21;16149:2;16144;16133:9;16129:18;16122:30;-1:-1:-1;;;16183:2:1;16172:9;16168:18;16161:49;16248:3;16241:4;16230:9;16226:20;16219:33;16073:4;16269:56;16320:3;16309:9;16305:19;16297:6;16269:56;:::i;17051:184::-;17121:6;17174:2;17162:9;17153:7;17149:23;17145:32;17142:52;;;17190:1;17187;17180:12;17142:52;-1:-1:-1;17213:16:1;;17051:184;-1:-1:-1;17051:184:1:o;17240:533::-;17558:2;17547:9;17540:21;17597:2;17592;17581:9;17577:18;17570:30;-1:-1:-1;;;17631:2:1;17620:9;17616:18;17609:43;17690:3;17683:4;17672:9;17668:20;17661:33;17521:4;17711:56;17762:3;17751:9;17747:19;17739:6;17711:56;:::i;17778:533::-;18096:2;18085:9;18078:21;18135:2;18130;18119:9;18115:18;18108:30;-1:-1:-1;;;18169:2:1;18158:9;18154:18;18147:43;18228:3;18221:4;18210:9;18206:20;18199:33;18059:4;18249:56;18300:3;18289:9;18285:19;18277:6;18249:56;:::i;18723:127::-;18784:10;18779:3;18775:20;18772:1;18765:31;18815:4;18812:1;18805:15;18839:4;18836:1;18829:15;18855:470;19034:3;19072:6;19066:13;19088:53;19134:6;19129:3;19122:4;19114:6;19110:17;19088:53;:::i;:::-;19204:13;;19163:16;;;;19226:57;19204:13;19163:16;19260:4;19248:17;;19226:57;:::i;:::-;19299:20;;18855:470;-1:-1:-1;;;;18855:470:1:o;21514:251::-;21584:6;21637:2;21625:9;21616:7;21612:23;21608:32;21605:52;;;21653:1;21650;21643:12;21605:52;21685:9;21679:16;21704:31;21729:5;21704:31;:::i;21770:980::-;22032:4;22080:3;22069:9;22065:19;22111:6;22100:9;22093:25;22137:2;22175:6;22170:2;22159:9;22155:18;22148:34;22218:3;22213:2;22202:9;22198:18;22191:31;22242:6;22277;22271:13;22308:6;22300;22293:22;22346:3;22335:9;22331:19;22324:26;;22385:2;22377:6;22373:15;22359:29;;22406:1;22416:195;22430:6;22427:1;22424:13;22416:195;;;22495:13;;-1:-1:-1;;;;;22491:39:1;22479:52;;22586:15;;;;22551:12;;;;22527:1;22445:9;22416:195;;;-1:-1:-1;;;;;;;22667:32:1;;;;22662:2;22647:18;;22640:60;-1:-1:-1;;;22731:3:1;22716:19;22709:35;22628:3;21770:980;-1:-1:-1;;;21770:980:1:o

Swarm Source

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