ETH Price: $2,671.64 (+1.30%)

Token

VITALIK (MEGA)
 

Overview

Max Total Supply

10,000,000 MEGA

Holders

163

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000019 MEGA

Value
$0.00
0x8320a8c9c3b1f05a477a1dc007639ecbd27e7cb2
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:
MakeEthereumGreatAgain

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-08
*/

/*
    Web: https://makeethgreatagain.org
    Tg: https://t.me/MakeEthGreatAgain_Portal
    Twitter: https://twitter.com/MEGA_ERC_
*/

pragma solidity 0.8.23;

// SPDX-License-Identifier: MIT

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

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

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    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 IERC20Metadata is IERC20{
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

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

contract MakeEthereumGreatAgain is ERC20, Ownable {

    mapping (address => bool) public exemptFromFees;
    mapping (address => bool) public exemptFromLimits;

    bool public tradingAllowed;

    mapping (address => bool) public isAMMPair;

    address public marketingAddress;
    address public devAddress;
    address public charityAddress;

    Taxes public buyTax;
    Taxes public sellTax;

    TokensForTax public tokensForTax;

    mapping(address => uint256) private _holderLastTransferBlock; // MEV protection
    bool public antiMevEnabled = true;

    bool public limited = true;

    uint256 public swapTokensAtAmt;

    address public immutable lpPair;
    IDexRouter public immutable dexRouter;
    address public immutable WETH;

    TxLimits public txLimits;

    uint64 public constant FEE_DIVISOR = 10000;

    uint256 public launchBlock;

    bool public transferDelayEnabled = true;

    // structs

    struct TxLimits {
        uint128 transactionLimit;
        uint128 walletLimit;
    }

    struct Taxes {
        uint64 marketingTax;
        uint64 devTax;
        uint64 charityTax;
        uint64 totalTax;
    }

    struct TokensForTax {
        uint80 tokensForMarketing;
        uint80 tokensForCharity;
        uint80 tokensForDev;
        bool gasSaver;
    }

    // events

    event UpdatedTransactionLimit(uint newMax);
    event UpdatedWalletLimit(uint newMax);
    event SetExemptFromFees(address _address, bool _isExempt);
    event SetExemptFromLimits(address _address, bool _isExempt);
    event RemovedLimits();
    event UpdatedBuyTax(uint newAmt);
    event UpdatedSellTax(uint newAmt);

    // constructor

    constructor()
        ERC20("VITALIK", "MEGA")
    {   
        _mint(msg.sender, 10_000_000 * 1e18);

        address _v2Router;

        // @dev assumes WETH pair
        if(block.chainid == 1){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 5){
            _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else if(block.chainid == 97){
            _v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if(block.chainid == 42161){
            _v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
        } else {
            revert("Chain not configured");
        }

        dexRouter = IDexRouter(_v2Router);

        txLimits.transactionLimit = uint128(totalSupply() * 5 / 1000);
        txLimits.walletLimit = uint128(totalSupply() * 1 / 100);
        swapTokensAtAmt = totalSupply() * 25 / 100000;

        marketingAddress = 0x728014388Bf8Ae8ADA72dD311feC99fe66B3A05D; // update
        devAddress = 0x76b3921D70Eb220595AcC861eab42Ce9cA9e7D1a; // update
        charityAddress = 0x0AcBBDCF6fA9d11296ba36c078D6590C39781824;

        buyTax.marketingTax = 600;
        buyTax.charityTax = 400;
        buyTax.devTax = 1000;
        buyTax.totalTax = buyTax.marketingTax + buyTax.charityTax + buyTax.devTax;

        sellTax.marketingTax = 2000;
        sellTax.charityTax = 800;
        sellTax.devTax = 1200;
        sellTax.totalTax = sellTax.marketingTax + sellTax.charityTax + sellTax.devTax;

        tokensForTax.gasSaver = true;

        WETH = dexRouter.WETH();
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH);

        isAMMPair[lpPair] = true;

        exemptFromLimits[lpPair] = true;
        exemptFromLimits[msg.sender] = true;
        exemptFromLimits[address(this)] = true;

        exemptFromFees[msg.sender] = true;
        exemptFromFees[address(this)] = true;
        exemptFromFees[address(dexRouter)] = true;
 
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply());
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        
        if(!exemptFromFees[from] && !exemptFromFees[to]){
            require(tradingAllowed, "Trading not active");
            amount -= handleTax(from, to, amount);
            checkLimits(from, to, amount);
        }

        super._transfer(from,to,amount);
    }

    function checkLimits(address from, address to, uint256 amount) internal {
        if(limited){
            bool exFromLimitsTo = exemptFromLimits[to];
            uint256 balanceOfTo = balanceOf(to);
            TxLimits memory _txLimits = txLimits;
            // buy
            if (isAMMPair[from] && !exFromLimitsTo) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            } 
            // sell
            else if (isAMMPair[to] && !exemptFromLimits[from]) {
                require(amount <= _txLimits.transactionLimit, "Max Txn");
            }
            else if(!exFromLimitsTo) {
                require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet");
            }

            if(transferDelayEnabled){
                if (to != address(dexRouter) && to != address(lpPair)){
                    require(_holderLastTransferBlock[tx.origin] < block.number, "Transfer Delay");
                    if(from == address(lpPair)){
                        require(tx.origin == to, "no buying to external wallets yet");
                    }
                }
            }
        }

        if (antiMevEnabled){
            if(isAMMPair[to]){
                require(_holderLastTransferBlock[from] < block.number, "Anti MEV");
            } else {
                _holderLastTransferBlock[to] = block.number;
                _holderLastTransferBlock[tx.origin] = block.number;
            }
        }
    }

    function handleTax(address from, address to, uint256 amount) internal returns (uint256){

        if(balanceOf(address(this)) >= swapTokensAtAmt && !isAMMPair[from]) {
            convertTaxes();
        }
        
        uint128 tax = 0;

        Taxes memory taxes;

        if (isAMMPair[to]){
            taxes = sellTax;
        } else if(isAMMPair[from]){
            taxes = buyTax;
        }

        if(taxes.totalTax > 0){
            TokensForTax memory tokensForTaxUpdate = tokensForTax;
            tax = uint128(amount * taxes.totalTax / FEE_DIVISOR);
            if(block.number == launchBlock){
                tax = uint128(amount * 8000 / FEE_DIVISOR);
            }
            tokensForTaxUpdate.tokensForCharity += uint80(tax * taxes.charityTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForMarketing += uint80(tax * taxes.marketingTax / taxes.totalTax / 1e9);
            tokensForTaxUpdate.tokensForDev += uint80(tax * taxes.devTax / taxes.totalTax / 1e9);
            tokensForTax = tokensForTaxUpdate;
            super._transfer(from, address(this), tax);
        }
        
        return tax;
    }

    function swapTokensForETH(uint256 tokenAmt) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmt,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function convertTaxes() private {

        uint256 contractBalance = balanceOf(address(this));
        TokensForTax memory tokensForTaxMem = tokensForTax;
        uint256 totalTokensToSwap = tokensForTaxMem.tokensForCharity + tokensForTaxMem.tokensForMarketing + tokensForTaxMem.tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmt * 20){
            contractBalance = swapTokensAtAmt * 20;
        }

        if(contractBalance > 0){

            swapTokensForETH(contractBalance);
            
            uint256 ethBalance = address(this).balance;

            bool success;

            if(tokensForTaxMem.tokensForDev > 0){
                (success,) = devAddress.call{value: ethBalance * tokensForTaxMem.tokensForDev / totalTokensToSwap}("");  
            }

            if(tokensForTaxMem.tokensForCharity > 0){
                (success,) = charityAddress.call{value: ethBalance * tokensForTaxMem.tokensForCharity / totalTokensToSwap}("");  
            }

            ethBalance = address(this).balance;

            if(ethBalance > 0){
                (success,) = marketingAddress.call{value: ethBalance}("");  
            }
        }

        tokensForTaxMem.tokensForCharity = 0;
        tokensForTaxMem.tokensForMarketing = 0;
        tokensForTaxMem.tokensForDev = 0;

        tokensForTax = tokensForTaxMem;
    }

    // owner functions
    function setExemptFromFee(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        require(_address != address(this), "Cannot unexempt contract");
        exemptFromFees[_address] = _isExempt;
        emit SetExemptFromFees(_address, _isExempt);
    }

    function setExemptFromLimit(address _address, bool _isExempt) external onlyOwner {
        require(_address != address(0), "Zero Address");
        if(!_isExempt){
            require(_address != lpPair, "Cannot remove pair");
        }
        exemptFromLimits[_address] = _isExempt;
        emit SetExemptFromLimits(_address, _isExempt);
    }

    function updateTransactionLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 5 / 1000)/(10**decimals()), "Too low");
        txLimits.transactionLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedTransactionLimit(txLimits.transactionLimit);
    }

    function updateWalletLimit(uint128 newNumInTokens) external onlyOwner {
        require(newNumInTokens >= (totalSupply() * 1 / 100)/(10**decimals()), "Too low");
        txLimits.walletLimit = uint128(newNumInTokens * (10**decimals()));
        emit UpdatedWalletLimit(txLimits.walletLimit);
    }

    function updateSwapTokensAmt(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmt = newAmount;
    }

    function updateBuyTax(uint64 _marketingTax, uint64 _charityTax, uint64 _devTax) external onlyOwner {
        Taxes memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.charityTax = _charityTax;
        taxes.devTax = _devTax;
        taxes.totalTax = _marketingTax + _charityTax + _devTax;
        require(taxes.totalTax  <= 200 || taxes.totalTax <= buyTax.totalTax, "Keep tax below 2%");
        emit UpdatedBuyTax(taxes.totalTax);
        buyTax = taxes;
    }

    function updateSellTax(uint64 _marketingTax, uint64 _charityTax, uint64 _devTax) external onlyOwner {
        Taxes memory taxes;
        taxes.marketingTax = _marketingTax;
        taxes.charityTax = _charityTax;
        taxes.devTax = _devTax;
        taxes.totalTax = _marketingTax + _charityTax + _devTax;
        require(taxes.totalTax  <= 200 || taxes.totalTax <= sellTax.totalTax, "Keep tax below 2%");
        emit UpdatedSellTax(taxes.totalTax);
        sellTax = taxes;
    }

    function enableTrading() external onlyOwner {
        require(!tradingAllowed, "Trading already enabled");
        tradingAllowed = true;
        launchBlock = block.number;
    }

    function removeLimits() external onlyOwner {
        limited = false;
        TxLimits memory _txLimits;
        uint256 supply = totalSupply();
        _txLimits.transactionLimit = uint128(supply);
        _txLimits.walletLimit = uint128(supply);
        txLimits = _txLimits;
        emit RemovedLimits();
    }

    function updateMevBlockerEnabled(bool _enabled) external onlyOwner {
        antiMevEnabled = _enabled;
    }

    function removeTransferDelay() external onlyOwner {
        require(transferDelayEnabled, "Already disabled!");
        transferDelayEnabled = false;
    }

    function airdropToWallets(address[] calldata wallets, uint256[] calldata amountsInWei) external onlyOwner {
        require(wallets.length == amountsInWei.length, "arrays length mismatch");
        for(uint256 i = 0; i < wallets.length; i++){
            super._transfer(msg.sender, wallets[i], amountsInWei[i]);
        }
    }

    function rescueTokens(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance);
    }

    function updateMarketingAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        marketingAddress = _address;
    }

    function updateDevAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        devAddress = _address;
    }

    function updateCharityAddress(address _address) external onlyOwner {
        require(_address != address(0), "zero address");
        charityAddress = _address;
    }

    receive() payable external {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","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":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInWei","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiMevEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"charityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"charityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint80","name":"tokensForMarketing","type":"uint80"},{"internalType":"uint80","name":"tokensForCharity","type":"uint80"},{"internalType":"uint80","name":"tokensForDev","type":"uint80"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimits","outputs":[{"internalType":"uint128","name":"transactionLimit","type":"uint128"},{"internalType":"uint128","name":"walletLimit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketingTax","type":"uint64"},{"internalType":"uint64","name":"_charityTax","type":"uint64"},{"internalType":"uint64","name":"_devTax","type":"uint64"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateMevBlockerEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketingTax","type":"uint64"},{"internalType":"uint64","name":"_charityTax","type":"uint64"},{"internalType":"uint64","name":"_devTax","type":"uint64"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526011805461ffff19166101011790556015805460ff191660011790553480156200002c575f80fd5b5060405180604001604052806007815260200166564954414c494b60c81b815250604051806040016040528060048152602001634d45474160e01b81525081600390816200007b9190620008d7565b5060046200008a8282620008d7565b5050505f6200009e6200064760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000102336a084595161401484a0000006200064b565b5f46600103620001285750737a250d5630b4cf539739df2c5dacb4c659f2488d620001e5565b466005036200014d5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001e5565b4660610362000172575073d99d1c33f9fc3444f8101754abc46c52416550d1620001e5565b4661a4b103620001985750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001e5565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811660a0526103e8620001ff60025490565b6200020c906005620009b7565b620002189190620009d7565b601380546001600160801b0319166001600160801b039290921691909117905560646200024460025490565b62000251906001620009b7565b6200025d9190620009d7565b601380546001600160801b03928316600160801b029216919091179055620186a06200028860025490565b62000295906019620009b7565b620002a19190620009d7565b601255600a80546001600160a01b031990811673728014388bf8ae8ada72dd311fec99fe66b3a05d17909155600b805482167376b3921d70eb220595acc861eab42ce9ca9e7d1a179055600c8054909116730acbbdcf6fa9d11296ba36c078d6590c39781824179055600d805471019000000000000003e800000000000002586001600160c01b031990911617908190556801000000000000000081046001600160401b03908116916200036191600160801b90910416610258620009f7565b6200036d9190620009f7565b600d80546001600160c01b0316600160c01b6001600160401b0393841602179055600e80546001600160c01b03191671032000000000000004b000000000000007d01790819055680100000000000000008104821691620003d991600160801b9004166107d0620009f7565b620003e59190620009f7565b600e80546001600160401b0392909216600160c01b026001600160c01b03909216919091179055600f805460ff60f01b1916600160f01b17905560a051604080516315ab88c960e31b815290516001600160a01b039092169163ad5c4648916004808201926020929091908290030181865afa15801562000468573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048e919062000a21565b6001600160a01b031660c0816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200050c919062000a21565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af11580156200055b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000581919062000a21565b6001600160a01b0390811660808190525f9081526009602090815260408083208054600160ff19918216811790925560078452828520805482168317905533808652838620805483168417905530808752848720805484168517905590865260069094528285208054821683179055838552828520805482168317905560a051958616855291909320805490911690921790915562000622915f1962000712565b620006403360a0516200063a6200070c60201b60201c565b62000712565b5062000a66565b3390565b6001600160a01b038216620006a35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001dc565b8060025f828254620006b6919062000a50565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60025490565b6001600160a01b038316620007765760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620001dc565b6001600160a01b038216620007d95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620001dc565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200086257607f821691505b6020821081036200088157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620008d257805f5260205f20601f840160051c81016020851015620008ae5750805b601f840160051c820191505b81811015620008cf575f8155600101620008ba565b50505b505050565b81516001600160401b03811115620008f357620008f362000839565b6200090b816200090484546200084d565b8462000887565b602080601f83116001811462000941575f8415620009295750858301515b5f19600386901b1c1916600185901b1785556200099b565b5f85815260208120601f198616915b82811015620009715788860151825594840194600190910190840162000950565b50858210156200098f57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620009d157620009d1620009a3565b92915050565b5f82620009f257634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160401b0381811683821601908082111562000a1a5762000a1a620009a3565b5092915050565b5f6020828403121562000a32575f80fd5b81516001600160a01b038116811462000a49575f80fd5b9392505050565b80820180821115620009d157620009d1620009a3565b60805160a05160c05161338762000abb5f395f818161083f0152612af301525f8181610308015281816125340152612b4a01525f81816104b5015281816119040152818161257101526125fb01526133875ff3fe6080604052600436106102c2575f3560e01c8063850337621161016f578063ae5a17a7116100d8578063cc1776d311610092578063dd62ed3e1161006d578063dd62ed3e1461098c578063f270fde4146109ab578063f2fde38b146109f5578063f8686f0714610a14575f80fd5b8063cc1776d31461091a578063ccad03e114610958578063d00efb2f14610977575f80fd5b8063ae5a17a714610861578063afcf2fc414610880578063b0249cc61461089f578063bedafd01146108cd578063c78d0fa0146108ec578063c876d0b914610901575f80fd5b806395d89b411161012957806395d89b41146107905780639e93ad8e146107a4578063a457c2d7146107d1578063a5ece941146107f0578063a9059cbb1461080f578063ad5c46481461082e575f80fd5b806385033762146106d5578063860a32ec146106f45780638a8c523c146107125780638becc57d146107265780638d3e6e40146107455780638da5cb5b14610773575f80fd5b80633ad10ef61161022b5780635a90a49e116101e55780636d7adcad116101c05780636d7adcad1461060557806370a0823114610679578063715018a6146106ad578063751039fc146106c1575f80fd5b80635a90a49e1461059f578063627e9d8e146105cd57806366ebd39a146105e6575f80fd5b80633ad10ef614610485578063452ed4f1146104a45780634f7041a5146104d757806353371be0146105485780635431c94e146105615780635975899414610580575f80fd5b80632369bf831161027c5780632369bf83146103cf57806323b872dd146103ee578063286965a71461040d578063313ce5671461042c57806336e18e19146104475780633950935114610466575f80fd5b806306fdde03146102cd5780630758d924146102f7578063095ea7b31461034257806318160ddd14610371578063210459181461038f5780632307b441146103b0575f80fd5b366102c957005b5f80fd5b3480156102d8575f80fd5b506102e1610a28565b6040516102ee9190612d50565b60405180910390f35b348015610302575f80fd5b5061032a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ee565b34801561034d575f80fd5b5061036161035c366004612d9d565b610ab8565b60405190151581526020016102ee565b34801561037c575f80fd5b506002545b6040519081526020016102ee565b34801561039a575f80fd5b506103ae6103a9366004612dc5565b610ad1565b005b3480156103bb575f80fd5b506103ae6103ca366004612e23565b610c25565b3480156103da575f80fd5b506103ae6103e9366004612e89565b610cf9565b3480156103f9575f80fd5b50610361610408366004612ea9565b610d6b565b348015610418575f80fd5b506103ae610427366004612ef8565b610d8e565b348015610437575f80fd5b50604051601281526020016102ee565b348015610452575f80fd5b506103ae610461366004612f38565b610f29565b348015610471575f80fd5b50610361610480366004612d9d565b611041565b348015610490575f80fd5b50600b5461032a906001600160a01b031681565b3480156104af575f80fd5b5061032a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e2575f80fd5b50600d54610515906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b604080516001600160401b03958616815293851660208501529184169183019190915290911660608201526080016102ee565b348015610553575f80fd5b506008546103619060ff1681565b34801561056c575f80fd5b506103ae61057b366004612f5e565b611062565b34801561058b575f80fd5b506103ae61059a366004612f9f565b61115c565b3480156105aa575f80fd5b506103616105b9366004612e89565b60066020525f908152604090205460ff1681565b3480156105d8575f80fd5b506011546103619060ff1681565b3480156105f1575f80fd5b506103ae610600366004612f38565b611199565b348015610610575f80fd5b50600f54610644906001600160501b0380821691600160501b8104821691600160a01b82041690600160f01b900460ff1684565b6040516102ee94939291906001600160501b039485168152928416602084015292166040820152901515606082015260800190565b348015610684575f80fd5b50610381610693366004612e89565b6001600160a01b03165f9081526020819052604090205490565b3480156106b8575f80fd5b506103ae6112ac565b3480156106cc575f80fd5b506103ae61131f565b3480156106e0575f80fd5b506103ae6106ef366004612e89565b6113bf565b3480156106ff575f80fd5b5060115461036190610100900460ff1681565b34801561071d575f80fd5b506103ae611431565b348015610731575f80fd5b506103ae610740366004612ef8565b6114c1565b348015610750575f80fd5b5061036161075f366004612e89565b60076020525f908152604090205460ff1681565b34801561077e575f80fd5b506005546001600160a01b031661032a565b34801561079b575f80fd5b506102e161165c565b3480156107af575f80fd5b506107b961271081565b6040516001600160401b0390911681526020016102ee565b3480156107dc575f80fd5b506103616107eb366004612d9d565b61166b565b3480156107fb575f80fd5b50600a5461032a906001600160a01b031681565b34801561081a575f80fd5b50610361610829366004612d9d565b6116e5565b348015610839575f80fd5b5061032a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561086c575f80fd5b506103ae61087b366004612e89565b6116f2565b34801561088b575f80fd5b50600c5461032a906001600160a01b031681565b3480156108aa575f80fd5b506103616108b9366004612e89565b60096020525f908152604090205460ff1681565b3480156108d8575f80fd5b506103ae6108e7366004612fba565b611764565b3480156108f7575f80fd5b5061038160125481565b34801561090c575f80fd5b506015546103619060ff1681565b348015610925575f80fd5b50600e54610515906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b348015610963575f80fd5b506103ae610972366004612fba565b61188e565b348015610982575f80fd5b5061038160145481565b348015610997575f80fd5b506103816109a6366004612f5e565b6119d3565b3480156109b6575f80fd5b506013546109d5906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016102ee565b348015610a00575f80fd5b506103ae610a0f366004612e89565b6119fd565b348015610a1f575f80fd5b506103ae611ae7565b606060038054610a3790612fef565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6390612fef565b8015610aae5780601f10610a8557610100808354040283529160200191610aae565b820191905f5260205f20905b815481529060010190602001808311610a9157829003601f168201915b5050505050905090565b5f33610ac5818585611b63565b60019150505b92915050565b6005546001600160a01b03163314610b045760405162461bcd60e51b8152600401610afb90613027565b60405180910390fd5b620186a0610b1160025490565b610b1c906001613070565b610b26919061309b565b811015610b935760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610afb565b6103e8610b9f60025490565b610baa906005613070565b610bb4919061309b565b811115610c205760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610afb565b601255565b6005546001600160a01b03163314610c4f5760405162461bcd60e51b8152600401610afb90613027565b828114610c975760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610afb565b5f5b83811015610cf257610cea33868684818110610cb757610cb76130ae565b9050602002016020810190610ccc9190612e89565b858585818110610cde57610cde6130ae565b90506020020135611c86565b600101610c99565b5050505050565b6005546001600160a01b03163314610d235760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b038116610d495760405162461bcd60e51b8152600401610afb906130c2565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f33610d78858285611e29565b610d83858585611ea1565b506001949350505050565b6005546001600160a01b03163314610db85760405162461bcd60e51b8152600401610afb90613027565b604080516080810182525f60608201526001600160401b03858116825284811692820192909252908216602082015281610df284866130e8565b610dfc91906130e8565b6001600160401b03166060820181905260c8101580610e355750600e5460608201516001600160401b03600160c01b9092048216911611155b610e755760405162461bcd60e51b81526020600482015260116024820152704b656570207461782062656c6f7720322560781b6044820152606401610afb565b60608101516040516001600160401b0390911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a18051600e8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b6005546001600160a01b03163314610f535760405162461bcd60e51b8152600401610afb90613027565b610f5f6012600a6131ef565b6103e8610f6b60025490565b610f76906005613070565b610f80919061309b565b610f8a919061309b565b816001600160801b03161015610fcc5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610afb565b610fd86012600a6131ef565b610feb906001600160801b038316613070565b601380546001600160801b0319166001600160801b039290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e6906020015b60405180910390a150565b5f33610ac581858561105383836119d3565b61105d91906131fd565b611b63565b6005546001600160a01b0316331461108c5760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b0382166110e25760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610afb565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611126573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061114a9190613210565b9050611157838383611f5a565b505050565b6005546001600160a01b031633146111865760405162461bcd60e51b8152600401610afb90613027565b6011805460ff1916911515919091179055565b6005546001600160a01b031633146111c35760405162461bcd60e51b8152600401610afb90613027565b6111cf6012600a6131ef565b60646111da60025490565b6111e5906001613070565b6111ef919061309b565b6111f9919061309b565b816001600160801b0316101561123b5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610afb565b6112476012600a6131ef565b61125a906001600160801b038316613070565b601380546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade078890602001611036565b6005546001600160a01b031633146112d65760405162461bcd60e51b8152600401610afb90613027565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113495760405162461bcd60e51b8152600401610afb90613027565b6011805461ff0019169055604080518082019091525f80825260208201525f61137160025490565b6001600160801b03811680845260208401819052600160801b8102176013556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b6005546001600160a01b031633146113e95760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b03811661140f5760405162461bcd60e51b8152600401610afb906130c2565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461145b5760405162461bcd60e51b8152600401610afb90613027565b60085460ff16156114ae5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610afb565b6008805460ff1916600117905543601455565b6005546001600160a01b031633146114eb5760405162461bcd60e51b8152600401610afb90613027565b604080516080810182525f60608201526001600160401b0385811682528481169282019290925290821660208201528161152584866130e8565b61152f91906130e8565b6001600160401b03166060820181905260c81015806115685750600d5460608201516001600160401b03600160c01b9092048216911611155b6115a85760405162461bcd60e51b81526020600482015260116024820152704b656570207461782062656c6f7720322560781b6044820152606401610afb565b60608101516040516001600160401b0390911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600d8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b606060048054610a3790612fef565b5f338161167882866119d3565b9050838110156116d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610afb565b610d838286868403611b63565b5f33610ac5818585611ea1565b6005546001600160a01b0316331461171c5760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b0381166117425760405162461bcd60e51b8152600401610afb906130c2565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461178e5760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b0382166117d35760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610afb565b306001600160a01b0383160361182b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000006044820152606401610afb565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b031633146118b85760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b0382166118fd5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610afb565b80611978577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036119785760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610afb565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101611882565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611a275760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b038116611a8c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afb565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611b115760405162461bcd60e51b8152600401610afb90613027565b60155460ff16611b575760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b6044820152606401610afb565b6015805460ff19169055565b6001600160a01b038316611bc55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610afb565b6001600160a01b038216611c265760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610afb565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611cea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610afb565b6001600160a01b038216611d4c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610afb565b6001600160a01b0383165f9081526020819052604090205481811015611dc35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610afb565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b5f611e3484846119d3565b90505f198114611e9b5781811015611e8e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610afb565b611e9b8484848403611b63565b50505050565b6001600160a01b0383165f9081526006602052604090205460ff16158015611ee157506001600160a01b0382165f9081526006602052604090205460ff16155b15611f4f5760085460ff16611f2d5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610afb565b611f38838383611fac565b611f429082613227565b9050611f4f83838361232f565b611157838383611c86565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261115790849061273a565b601254305f90815260208190526040812054909111158015611fe657506001600160a01b0384165f9081526009602052604090205460ff16155b15611ff357611ff361280b565b604080516080810182525f8082526020808301829052828401829052606083018290526001600160a01b0387168252600990529182205460ff161561207f575060408051608081018252600e546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201526120e8565b6001600160a01b0386165f9081526009602052604090205460ff16156120e8575060408051608081018252600d546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201525b60608101516001600160401b03161561231d5760408051608081018252600f546001600160501b038082168352600160501b820481166020840152600160a01b82041692820192909252600160f01b90910460ff16151560608083019190915282015161271090612162906001600160401b031687613070565b61216c919061309b565b925060145443036121935761271061218686611f40613070565b612190919061309b565b92505b633b9aca0082606001516001600160401b031683604001516001600160401b0316856121bf919061323a565b6121c99190613265565b6121d39190613265565b816020018181516121e4919061328a565b6001600160501b031690525060608201518251633b9aca00916001600160401b039081169161221491168661323a565b61221e9190613265565b6122289190613265565b8151829061223790839061328a565b6001600160501b031690525060608201516020830151633b9aca00916001600160401b039081169161226a91168661323a565b6122749190613265565b61227e9190613265565b8160400181815161228f919061328a565b6001600160501b039081169091528251600f80546020860151604087015160608801511515600160f01b0260ff60f01b19918716600160a01b02919091166affffffffffffffffffffff60a01b19928716600160501b026001600160a01b031990941695909616949094179190911716929092171790555061231b87306001600160801b038616611c86565b505b506001600160801b0316949350505050565b601154610100900460ff1615612698576001600160a01b038281165f9081526007602090815260408083205483835281842054825180840184526013546001600160801b038082168352600160801b90910416818601529589168552600990935292205460ff9283169391921680156123a6575082155b156124475780516001600160801b03168411156123ef5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610afb565b60208101516001600160801b031661240783866131fd565b11156124425760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610afb565b612527565b6001600160a01b0385165f9081526009602052604090205460ff16801561248657506001600160a01b0386165f9081526007602052604090205460ff16155b156124cf5780516001600160801b03168411156124425760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610afb565b826125275760208101516001600160801b03166124ec83866131fd565b11156125275760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610afb565b60155460ff1615612694577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316141580156125a657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b1561269457325f9081526010602052604090205443116125f95760405162461bcd60e51b815260206004820152600e60248201526d5472616e736665722044656c617960901b6044820152606401610afb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03160361269457326001600160a01b038616146126945760405162461bcd60e51b815260206004820152602160248201527f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079656044820152601d60fa1b6064820152608401610afb565b5050505b60115460ff1615611157576001600160a01b0382165f9081526009602052604090205460ff1615612714576001600160a01b0383165f9081526010602052604090205443116111575760405162461bcd60e51b815260206004820152600860248201526720b73a349026a2ab60c11b6044820152606401610afb565b506001600160a01b03165f90815260106020526040808220439081905532835291205550565b5f61278e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a889092919063ffffffff16565b80519091501561115757808060200190518101906127ac91906132aa565b6111575760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610afb565b305f9081526020819052604081205460408051608081018252600f546001600160501b03808216808452600160501b8304821660208501819052600160a01b8404909216948401859052600160f01b90920460ff161515606084015293945090925f92916128789161328a565b612882919061328a565b6001600160501b03169050821580612898575080155b156128a257505050565b6012546128b0906014613070565b8311156128c8576012546128c5906014613070565b92505b8215612a50576128d783612a9e565b604082015147905f906001600160501b03161561296557600b5460408501516001600160a01b03909116908490612917906001600160501b031685613070565b612921919061309b565b6040515f81818185875af1925050503d805f811461295a576040519150601f19603f3d011682016040523d82523d5f602084013e61295f565b606091505b50909150505b60208401516001600160501b0316156129ef57600c5460208501516001600160a01b039091169084906129a1906001600160501b031685613070565b6129ab919061309b565b6040515f81818185875af1925050503d805f81146129e4576040519150601f19603f3d011682016040523d82523d5f602084013e6129e9565b606091505b50909150505b4791508115612a4d57600a546040516001600160a01b039091169083905f81818185875af1925050503d805f8114612a42576040519150601f19603f3d011682016040523d82523d5f602084013e612a47565b606091505b50909150505b50505b505f602082018190528082526040820152600f80546060909201511515600160f01b026001600160f81b031990921691909117905550565b6060612a9684845f85612bba565b949350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612ad157612ad16130ae565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612b2557612b256130ae565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790612b899085905f908690309042906004016132c5565b5f604051808303815f87803b158015612ba0575f80fd5b505af1158015612bb2573d5f803e3d5ffd5b505050505050565b606082471015612c1b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610afb565b5f80866001600160a01b03168587604051612c369190613336565b5f6040518083038185875af1925050503d805f8114612c70576040519150601f19603f3d011682016040523d82523d5f602084013e612c75565b606091505b5091509150612c8687838387612c91565b979650505050505050565b60608315612cff5782515f03612cf8576001600160a01b0385163b612cf85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610afb565b5081612a96565b612a968383815115612d145781518083602001fd5b8060405162461bcd60e51b8152600401610afb9190612d50565b5f5b83811015612d48578181015183820152602001612d30565b50505f910152565b602081525f8251806020840152612d6e816040850160208701612d2e565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114612d98575f80fd5b919050565b5f8060408385031215612dae575f80fd5b612db783612d82565b946020939093013593505050565b5f60208284031215612dd5575f80fd5b5035919050565b5f8083601f840112612dec575f80fd5b5081356001600160401b03811115612e02575f80fd5b6020830191508360208260051b8501011115612e1c575f80fd5b9250929050565b5f805f8060408587031215612e36575f80fd5b84356001600160401b0380821115612e4c575f80fd5b612e5888838901612ddc565b90965094506020870135915080821115612e70575f80fd5b50612e7d87828801612ddc565b95989497509550505050565b5f60208284031215612e99575f80fd5b612ea282612d82565b9392505050565b5f805f60608486031215612ebb575f80fd5b612ec484612d82565b9250612ed260208501612d82565b9150604084013590509250925092565b80356001600160401b0381168114612d98575f80fd5b5f805f60608486031215612f0a575f80fd5b612f1384612ee2565b9250612f2160208501612ee2565b9150612f2f60408501612ee2565b90509250925092565b5f60208284031215612f48575f80fd5b81356001600160801b0381168114612ea2575f80fd5b5f8060408385031215612f6f575f80fd5b612f7883612d82565b9150612f8660208401612d82565b90509250929050565b8015158114612f9c575f80fd5b50565b5f60208284031215612faf575f80fd5b8135612ea281612f8f565b5f8060408385031215612fcb575f80fd5b612fd483612d82565b91506020830135612fe481612f8f565b809150509250929050565b600181811c9082168061300357607f821691505b60208210810361302157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610acb57610acb61305c565b634e487b7160e01b5f52601260045260245ffd5b5f826130a9576130a9613087565b500490565b634e487b7160e01b5f52603260045260245ffd5b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b6001600160401b038181168382160190808211156131085761310861305c565b5092915050565b600181815b8085111561314957815f190482111561312f5761312f61305c565b8085161561313c57918102915b93841c9390800290613114565b509250929050565b5f8261315f57506001610acb565b8161316b57505f610acb565b8160018114613181576002811461318b576131a7565b6001915050610acb565b60ff84111561319c5761319c61305c565b50506001821b610acb565b5060208310610133831016604e8410600b84101617156131ca575081810a610acb565b6131d4838361310f565b805f19048211156131e7576131e761305c565b029392505050565b5f612ea260ff841683613151565b80820180821115610acb57610acb61305c565b5f60208284031215613220575f80fd5b5051919050565b81810381811115610acb57610acb61305c565b6001600160801b0381811683821602808216919082811461325d5761325d61305c565b505092915050565b5f6001600160801b038084168061327e5761327e613087565b92169190910492915050565b6001600160501b038181168382160190808211156131085761310861305c565b5f602082840312156132ba575f80fd5b8151612ea281612f8f565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156133155784516001600160a01b0316835293830193918301916001016132f0565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8251613347818460208701612d2e565b919091019291505056fea264697066735822122069efc44d7ab4802f1c9b7f6bcd3dba4cc5d5bbc3afb4c10a59f0573daa0eade164736f6c63430008170033

Deployed Bytecode

0x6080604052600436106102c2575f3560e01c8063850337621161016f578063ae5a17a7116100d8578063cc1776d311610092578063dd62ed3e1161006d578063dd62ed3e1461098c578063f270fde4146109ab578063f2fde38b146109f5578063f8686f0714610a14575f80fd5b8063cc1776d31461091a578063ccad03e114610958578063d00efb2f14610977575f80fd5b8063ae5a17a714610861578063afcf2fc414610880578063b0249cc61461089f578063bedafd01146108cd578063c78d0fa0146108ec578063c876d0b914610901575f80fd5b806395d89b411161012957806395d89b41146107905780639e93ad8e146107a4578063a457c2d7146107d1578063a5ece941146107f0578063a9059cbb1461080f578063ad5c46481461082e575f80fd5b806385033762146106d5578063860a32ec146106f45780638a8c523c146107125780638becc57d146107265780638d3e6e40146107455780638da5cb5b14610773575f80fd5b80633ad10ef61161022b5780635a90a49e116101e55780636d7adcad116101c05780636d7adcad1461060557806370a0823114610679578063715018a6146106ad578063751039fc146106c1575f80fd5b80635a90a49e1461059f578063627e9d8e146105cd57806366ebd39a146105e6575f80fd5b80633ad10ef614610485578063452ed4f1146104a45780634f7041a5146104d757806353371be0146105485780635431c94e146105615780635975899414610580575f80fd5b80632369bf831161027c5780632369bf83146103cf57806323b872dd146103ee578063286965a71461040d578063313ce5671461042c57806336e18e19146104475780633950935114610466575f80fd5b806306fdde03146102cd5780630758d924146102f7578063095ea7b31461034257806318160ddd14610371578063210459181461038f5780632307b441146103b0575f80fd5b366102c957005b5f80fd5b3480156102d8575f80fd5b506102e1610a28565b6040516102ee9190612d50565b60405180910390f35b348015610302575f80fd5b5061032a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102ee565b34801561034d575f80fd5b5061036161035c366004612d9d565b610ab8565b60405190151581526020016102ee565b34801561037c575f80fd5b506002545b6040519081526020016102ee565b34801561039a575f80fd5b506103ae6103a9366004612dc5565b610ad1565b005b3480156103bb575f80fd5b506103ae6103ca366004612e23565b610c25565b3480156103da575f80fd5b506103ae6103e9366004612e89565b610cf9565b3480156103f9575f80fd5b50610361610408366004612ea9565b610d6b565b348015610418575f80fd5b506103ae610427366004612ef8565b610d8e565b348015610437575f80fd5b50604051601281526020016102ee565b348015610452575f80fd5b506103ae610461366004612f38565b610f29565b348015610471575f80fd5b50610361610480366004612d9d565b611041565b348015610490575f80fd5b50600b5461032a906001600160a01b031681565b3480156104af575f80fd5b5061032a7f00000000000000000000000081f0c66029a1ad2c37a651ee2daf27d4b595131a81565b3480156104e2575f80fd5b50600d54610515906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b604080516001600160401b03958616815293851660208501529184169183019190915290911660608201526080016102ee565b348015610553575f80fd5b506008546103619060ff1681565b34801561056c575f80fd5b506103ae61057b366004612f5e565b611062565b34801561058b575f80fd5b506103ae61059a366004612f9f565b61115c565b3480156105aa575f80fd5b506103616105b9366004612e89565b60066020525f908152604090205460ff1681565b3480156105d8575f80fd5b506011546103619060ff1681565b3480156105f1575f80fd5b506103ae610600366004612f38565b611199565b348015610610575f80fd5b50600f54610644906001600160501b0380821691600160501b8104821691600160a01b82041690600160f01b900460ff1684565b6040516102ee94939291906001600160501b039485168152928416602084015292166040820152901515606082015260800190565b348015610684575f80fd5b50610381610693366004612e89565b6001600160a01b03165f9081526020819052604090205490565b3480156106b8575f80fd5b506103ae6112ac565b3480156106cc575f80fd5b506103ae61131f565b3480156106e0575f80fd5b506103ae6106ef366004612e89565b6113bf565b3480156106ff575f80fd5b5060115461036190610100900460ff1681565b34801561071d575f80fd5b506103ae611431565b348015610731575f80fd5b506103ae610740366004612ef8565b6114c1565b348015610750575f80fd5b5061036161075f366004612e89565b60076020525f908152604090205460ff1681565b34801561077e575f80fd5b506005546001600160a01b031661032a565b34801561079b575f80fd5b506102e161165c565b3480156107af575f80fd5b506107b961271081565b6040516001600160401b0390911681526020016102ee565b3480156107dc575f80fd5b506103616107eb366004612d9d565b61166b565b3480156107fb575f80fd5b50600a5461032a906001600160a01b031681565b34801561081a575f80fd5b50610361610829366004612d9d565b6116e5565b348015610839575f80fd5b5061032a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561086c575f80fd5b506103ae61087b366004612e89565b6116f2565b34801561088b575f80fd5b50600c5461032a906001600160a01b031681565b3480156108aa575f80fd5b506103616108b9366004612e89565b60096020525f908152604090205460ff1681565b3480156108d8575f80fd5b506103ae6108e7366004612fba565b611764565b3480156108f7575f80fd5b5061038160125481565b34801561090c575f80fd5b506015546103619060ff1681565b348015610925575f80fd5b50600e54610515906001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b348015610963575f80fd5b506103ae610972366004612fba565b61188e565b348015610982575f80fd5b5061038160145481565b348015610997575f80fd5b506103816109a6366004612f5e565b6119d3565b3480156109b6575f80fd5b506013546109d5906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016102ee565b348015610a00575f80fd5b506103ae610a0f366004612e89565b6119fd565b348015610a1f575f80fd5b506103ae611ae7565b606060038054610a3790612fef565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6390612fef565b8015610aae5780601f10610a8557610100808354040283529160200191610aae565b820191905f5260205f20905b815481529060010190602001808311610a9157829003601f168201915b5050505050905090565b5f33610ac5818585611b63565b60019150505b92915050565b6005546001600160a01b03163314610b045760405162461bcd60e51b8152600401610afb90613027565b60405180910390fd5b620186a0610b1160025490565b610b1c906001613070565b610b26919061309b565b811015610b935760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610afb565b6103e8610b9f60025490565b610baa906005613070565b610bb4919061309b565b811115610c205760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610afb565b601255565b6005546001600160a01b03163314610c4f5760405162461bcd60e51b8152600401610afb90613027565b828114610c975760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610afb565b5f5b83811015610cf257610cea33868684818110610cb757610cb76130ae565b9050602002016020810190610ccc9190612e89565b858585818110610cde57610cde6130ae565b90506020020135611c86565b600101610c99565b5050505050565b6005546001600160a01b03163314610d235760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b038116610d495760405162461bcd60e51b8152600401610afb906130c2565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f33610d78858285611e29565b610d83858585611ea1565b506001949350505050565b6005546001600160a01b03163314610db85760405162461bcd60e51b8152600401610afb90613027565b604080516080810182525f60608201526001600160401b03858116825284811692820192909252908216602082015281610df284866130e8565b610dfc91906130e8565b6001600160401b03166060820181905260c8101580610e355750600e5460608201516001600160401b03600160c01b9092048216911611155b610e755760405162461bcd60e51b81526020600482015260116024820152704b656570207461782062656c6f7720322560781b6044820152606401610afb565b60608101516040516001600160401b0390911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a18051600e8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b6005546001600160a01b03163314610f535760405162461bcd60e51b8152600401610afb90613027565b610f5f6012600a6131ef565b6103e8610f6b60025490565b610f76906005613070565b610f80919061309b565b610f8a919061309b565b816001600160801b03161015610fcc5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610afb565b610fd86012600a6131ef565b610feb906001600160801b038316613070565b601380546001600160801b0319166001600160801b039290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e6906020015b60405180910390a150565b5f33610ac581858561105383836119d3565b61105d91906131fd565b611b63565b6005546001600160a01b0316331461108c5760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b0382166110e25760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610afb565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611126573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061114a9190613210565b9050611157838383611f5a565b505050565b6005546001600160a01b031633146111865760405162461bcd60e51b8152600401610afb90613027565b6011805460ff1916911515919091179055565b6005546001600160a01b031633146111c35760405162461bcd60e51b8152600401610afb90613027565b6111cf6012600a6131ef565b60646111da60025490565b6111e5906001613070565b6111ef919061309b565b6111f9919061309b565b816001600160801b0316101561123b5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610afb565b6112476012600a6131ef565b61125a906001600160801b038316613070565b601380546001600160801b03908116600160801b93821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade078890602001611036565b6005546001600160a01b031633146112d65760405162461bcd60e51b8152600401610afb90613027565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113495760405162461bcd60e51b8152600401610afb90613027565b6011805461ff0019169055604080518082019091525f80825260208201525f61137160025490565b6001600160801b03811680845260208401819052600160801b8102176013556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a15050565b6005546001600160a01b031633146113e95760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b03811661140f5760405162461bcd60e51b8152600401610afb906130c2565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461145b5760405162461bcd60e51b8152600401610afb90613027565b60085460ff16156114ae5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610afb565b6008805460ff1916600117905543601455565b6005546001600160a01b031633146114eb5760405162461bcd60e51b8152600401610afb90613027565b604080516080810182525f60608201526001600160401b0385811682528481169282019290925290821660208201528161152584866130e8565b61152f91906130e8565b6001600160401b03166060820181905260c81015806115685750600d5460608201516001600160401b03600160c01b9092048216911611155b6115a85760405162461bcd60e51b81526020600482015260116024820152704b656570207461782062656c6f7720322560781b6044820152606401610afb565b60608101516040516001600160401b0390911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600d8054602084015160408501516060909501516001600160401b03908116600160c01b026001600160c01b03968216600160801b02969096166001600160801b03928216600160401b026001600160801b03199094169190951617919091171691909117919091179055505050565b606060048054610a3790612fef565b5f338161167882866119d3565b9050838110156116d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610afb565b610d838286868403611b63565b5f33610ac5818585611ea1565b6005546001600160a01b0316331461171c5760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b0381166117425760405162461bcd60e51b8152600401610afb906130c2565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461178e5760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b0382166117d35760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610afb565b306001600160a01b0383160361182b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000006044820152606401610afb565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b031633146118b85760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b0382166118fd5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610afb565b80611978577f00000000000000000000000081f0c66029a1ad2c37a651ee2daf27d4b595131a6001600160a01b0316826001600160a01b0316036119785760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610afb565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce9101611882565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611a275760405162461bcd60e51b8152600401610afb90613027565b6001600160a01b038116611a8c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afb565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611b115760405162461bcd60e51b8152600401610afb90613027565b60155460ff16611b575760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b6044820152606401610afb565b6015805460ff19169055565b6001600160a01b038316611bc55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610afb565b6001600160a01b038216611c265760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610afb565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611cea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610afb565b6001600160a01b038216611d4c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610afb565b6001600160a01b0383165f9081526020819052604090205481811015611dc35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610afb565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b5f611e3484846119d3565b90505f198114611e9b5781811015611e8e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610afb565b611e9b8484848403611b63565b50505050565b6001600160a01b0383165f9081526006602052604090205460ff16158015611ee157506001600160a01b0382165f9081526006602052604090205460ff16155b15611f4f5760085460ff16611f2d5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610afb565b611f38838383611fac565b611f429082613227565b9050611f4f83838361232f565b611157838383611c86565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261115790849061273a565b601254305f90815260208190526040812054909111158015611fe657506001600160a01b0384165f9081526009602052604090205460ff16155b15611ff357611ff361280b565b604080516080810182525f8082526020808301829052828401829052606083018290526001600160a01b0387168252600990529182205460ff161561207f575060408051608081018252600e546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201526120e8565b6001600160a01b0386165f9081526009602052604090205460ff16156120e8575060408051608081018252600d546001600160401b038082168352600160401b820481166020840152600160801b8204811693830193909352600160c01b900490911660608201525b60608101516001600160401b03161561231d5760408051608081018252600f546001600160501b038082168352600160501b820481166020840152600160a01b82041692820192909252600160f01b90910460ff16151560608083019190915282015161271090612162906001600160401b031687613070565b61216c919061309b565b925060145443036121935761271061218686611f40613070565b612190919061309b565b92505b633b9aca0082606001516001600160401b031683604001516001600160401b0316856121bf919061323a565b6121c99190613265565b6121d39190613265565b816020018181516121e4919061328a565b6001600160501b031690525060608201518251633b9aca00916001600160401b039081169161221491168661323a565b61221e9190613265565b6122289190613265565b8151829061223790839061328a565b6001600160501b031690525060608201516020830151633b9aca00916001600160401b039081169161226a91168661323a565b6122749190613265565b61227e9190613265565b8160400181815161228f919061328a565b6001600160501b039081169091528251600f80546020860151604087015160608801511515600160f01b0260ff60f01b19918716600160a01b02919091166affffffffffffffffffffff60a01b19928716600160501b026001600160a01b031990941695909616949094179190911716929092171790555061231b87306001600160801b038616611c86565b505b506001600160801b0316949350505050565b601154610100900460ff1615612698576001600160a01b038281165f9081526007602090815260408083205483835281842054825180840184526013546001600160801b038082168352600160801b90910416818601529589168552600990935292205460ff9283169391921680156123a6575082155b156124475780516001600160801b03168411156123ef5760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610afb565b60208101516001600160801b031661240783866131fd565b11156124425760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610afb565b612527565b6001600160a01b0385165f9081526009602052604090205460ff16801561248657506001600160a01b0386165f9081526007602052604090205460ff16155b156124cf5780516001600160801b03168411156124425760405162461bcd60e51b815260206004820152600760248201526626b0bc102a3c3760c91b6044820152606401610afb565b826125275760208101516001600160801b03166124ec83866131fd565b11156125275760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610afb565b60155460ff1615612694577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b0316141580156125a657507f00000000000000000000000081f0c66029a1ad2c37a651ee2daf27d4b595131a6001600160a01b0316856001600160a01b031614155b1561269457325f9081526010602052604090205443116125f95760405162461bcd60e51b815260206004820152600e60248201526d5472616e736665722044656c617960901b6044820152606401610afb565b7f00000000000000000000000081f0c66029a1ad2c37a651ee2daf27d4b595131a6001600160a01b0316866001600160a01b03160361269457326001600160a01b038616146126945760405162461bcd60e51b815260206004820152602160248201527f6e6f20627579696e6720746f2065787465726e616c2077616c6c6574732079656044820152601d60fa1b6064820152608401610afb565b5050505b60115460ff1615611157576001600160a01b0382165f9081526009602052604090205460ff1615612714576001600160a01b0383165f9081526010602052604090205443116111575760405162461bcd60e51b815260206004820152600860248201526720b73a349026a2ab60c11b6044820152606401610afb565b506001600160a01b03165f90815260106020526040808220439081905532835291205550565b5f61278e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a889092919063ffffffff16565b80519091501561115757808060200190518101906127ac91906132aa565b6111575760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610afb565b305f9081526020819052604081205460408051608081018252600f546001600160501b03808216808452600160501b8304821660208501819052600160a01b8404909216948401859052600160f01b90920460ff161515606084015293945090925f92916128789161328a565b612882919061328a565b6001600160501b03169050821580612898575080155b156128a257505050565b6012546128b0906014613070565b8311156128c8576012546128c5906014613070565b92505b8215612a50576128d783612a9e565b604082015147905f906001600160501b03161561296557600b5460408501516001600160a01b03909116908490612917906001600160501b031685613070565b612921919061309b565b6040515f81818185875af1925050503d805f811461295a576040519150601f19603f3d011682016040523d82523d5f602084013e61295f565b606091505b50909150505b60208401516001600160501b0316156129ef57600c5460208501516001600160a01b039091169084906129a1906001600160501b031685613070565b6129ab919061309b565b6040515f81818185875af1925050503d805f81146129e4576040519150601f19603f3d011682016040523d82523d5f602084013e6129e9565b606091505b50909150505b4791508115612a4d57600a546040516001600160a01b039091169083905f81818185875af1925050503d805f8114612a42576040519150601f19603f3d011682016040523d82523d5f602084013e612a47565b606091505b50909150505b50505b505f602082018190528082526040820152600f80546060909201511515600160f01b026001600160f81b031990921691909117905550565b6060612a9684845f85612bba565b949350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612ad157612ad16130ae565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612b2557612b256130ae565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790612b899085905f908690309042906004016132c5565b5f604051808303815f87803b158015612ba0575f80fd5b505af1158015612bb2573d5f803e3d5ffd5b505050505050565b606082471015612c1b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610afb565b5f80866001600160a01b03168587604051612c369190613336565b5f6040518083038185875af1925050503d805f8114612c70576040519150601f19603f3d011682016040523d82523d5f602084013e612c75565b606091505b5091509150612c8687838387612c91565b979650505050505050565b60608315612cff5782515f03612cf8576001600160a01b0385163b612cf85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610afb565b5081612a96565b612a968383815115612d145781518083602001fd5b8060405162461bcd60e51b8152600401610afb9190612d50565b5f5b83811015612d48578181015183820152602001612d30565b50505f910152565b602081525f8251806020840152612d6e816040850160208701612d2e565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114612d98575f80fd5b919050565b5f8060408385031215612dae575f80fd5b612db783612d82565b946020939093013593505050565b5f60208284031215612dd5575f80fd5b5035919050565b5f8083601f840112612dec575f80fd5b5081356001600160401b03811115612e02575f80fd5b6020830191508360208260051b8501011115612e1c575f80fd5b9250929050565b5f805f8060408587031215612e36575f80fd5b84356001600160401b0380821115612e4c575f80fd5b612e5888838901612ddc565b90965094506020870135915080821115612e70575f80fd5b50612e7d87828801612ddc565b95989497509550505050565b5f60208284031215612e99575f80fd5b612ea282612d82565b9392505050565b5f805f60608486031215612ebb575f80fd5b612ec484612d82565b9250612ed260208501612d82565b9150604084013590509250925092565b80356001600160401b0381168114612d98575f80fd5b5f805f60608486031215612f0a575f80fd5b612f1384612ee2565b9250612f2160208501612ee2565b9150612f2f60408501612ee2565b90509250925092565b5f60208284031215612f48575f80fd5b81356001600160801b0381168114612ea2575f80fd5b5f8060408385031215612f6f575f80fd5b612f7883612d82565b9150612f8660208401612d82565b90509250929050565b8015158114612f9c575f80fd5b50565b5f60208284031215612faf575f80fd5b8135612ea281612f8f565b5f8060408385031215612fcb575f80fd5b612fd483612d82565b91506020830135612fe481612f8f565b809150509250929050565b600181811c9082168061300357607f821691505b60208210810361302157634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610acb57610acb61305c565b634e487b7160e01b5f52601260045260245ffd5b5f826130a9576130a9613087565b500490565b634e487b7160e01b5f52603260045260245ffd5b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b6001600160401b038181168382160190808211156131085761310861305c565b5092915050565b600181815b8085111561314957815f190482111561312f5761312f61305c565b8085161561313c57918102915b93841c9390800290613114565b509250929050565b5f8261315f57506001610acb565b8161316b57505f610acb565b8160018114613181576002811461318b576131a7565b6001915050610acb565b60ff84111561319c5761319c61305c565b50506001821b610acb565b5060208310610133831016604e8410600b84101617156131ca575081810a610acb565b6131d4838361310f565b805f19048211156131e7576131e761305c565b029392505050565b5f612ea260ff841683613151565b80820180821115610acb57610acb61305c565b5f60208284031215613220575f80fd5b5051919050565b81810381811115610acb57610acb61305c565b6001600160801b0381811683821602808216919082811461325d5761325d61305c565b505092915050565b5f6001600160801b038084168061327e5761327e613087565b92169190910492915050565b6001600160501b038181168382160190808211156131085761310861305c565b5f602082840312156132ba575f80fd5b8151612ea281612f8f565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156133155784516001600160a01b0316835293830193918301916001016132f0565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8251613347818460208701612d2e565b919091019291505056fea264697066735822122069efc44d7ab4802f1c9b7f6bcd3dba4cc5d5bbc3afb4c10a59f0573daa0eade164736f6c63430008170033

Deployed Bytecode Sourcemap

21622:13659:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4330:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22322:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;853:32:1;;;835:51;;823:2;808:18;22322:37:0;670:222:1;6690:201:0;;;;;;;;;;-1:-1:-1;6690:201:0;;;;;:::i;:::-;;:::i;:::-;;;1499:14:1;;1492:22;1474:41;;1462:2;1447:18;6690:201:0;1334:187:1;5459:108:0;;;;;;;;;;-1:-1:-1;5547:12:0;;5459:108;;;1672:25:1;;;1660:2;1645:18;5459:108:0;1526:177:1;31918:346:0;;;;;;;;;;-1:-1:-1;31918:346:0;;;;;:::i;:::-;;:::i;:::-;;34077:333;;;;;;;;;;-1:-1:-1;34077:333:0;;;;;:::i;:::-;;:::i;34722:173::-;;;;;;;;;;-1:-1:-1;34722:173:0;;;;;:::i;:::-;;:::i;7471:261::-;;;;;;;;;;-1:-1:-1;7471:261:0;;;;;:::i;:::-;;:::i;32770:494::-;;;;;;;;;;-1:-1:-1;32770:494:0;;;;;:::i;:::-;;:::i;5301:93::-;;;;;;;;;;-1:-1:-1;5301:93:0;;5384:2;4218:36:1;;4206:2;4191:18;5301:93:0;4076:184:1;31279:322:0;;;;;;;;;;-1:-1:-1;31279:322:0;;;;;:::i;:::-;;:::i;8141:238::-;;;;;;;;;;-1:-1:-1;8141:238:0;;;;;:::i;:::-;;:::i;21917:25::-;;;;;;;;;;-1:-1:-1;21917:25:0;;;;-1:-1:-1;;;;;21917:25:0;;;22284:31;;;;;;;;;;;;;;;21987:19;;;;;;;;;;-1:-1:-1;21987:19:0;;;;-1:-1:-1;;;;;21987:19:0;;;;-1:-1:-1;;;21987:19:0;;;;;-1:-1:-1;;;21987:19:0;;;;;-1:-1:-1;;;21987:19:0;;;;;;;;;-1:-1:-1;;;;;5057:15:1;;;5039:34;;5109:15;;;5104:2;5089:18;;5082:43;5161:15;;;5141:18;;;5134:43;;;;5213:15;;;5208:2;5193:18;;5186:43;4989:3;4974:19;21987::0;4779:456:1;21793:26:0;;;;;;;;;;-1:-1:-1;21793:26:0;;;;;;;;34418:296;;;;;;;;;;-1:-1:-1;34418:296:0;;;;;:::i;:::-;;:::i;33792:111::-;;;;;;;;;;-1:-1:-1;33792:111:0;;;;;:::i;:::-;;:::i;21681:47::-;;;;;;;;;;-1:-1:-1;21681:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22168:33;;;;;;;;;;-1:-1:-1;22168:33:0;;;;;;;;31609:301;;;;;;;;;;-1:-1:-1;31609:301:0;;;;;:::i;:::-;;:::i;22042:32::-;;;;;;;;;;-1:-1:-1;22042:32:0;;;;-1:-1:-1;;;;;22042:32:0;;;;-1:-1:-1;;;22042:32:0;;;;;-1:-1:-1;;;22042:32:0;;;;-1:-1:-1;;;22042:32:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;6152:15:1;;;6134:34;;6204:15;;;6199:2;6184:18;;6177:43;6256:15;;6251:2;6236:18;;6229:43;6315:14;;6308:22;6303:2;6288:18;;6281:50;6080:3;6065:19;;5874:463;5630:127:0;;;;;;;;;;-1:-1:-1;5630:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5731:18:0;5704:7;5731:18;;;;;;;;;;;;5630:127;13244:150;;;;;;;;;;;;;:::i;33463:321::-;;;;;;;;;;;;;:::i;34903:161::-;;;;;;;;;;-1:-1:-1;34903:161:0;;;;;:::i;:::-;;:::i;22210:26::-;;;;;;;;;;-1:-1:-1;22210:26:0;;;;;;;;;;;33272:183;;;;;;;;;;;;;:::i;32272:490::-;;;;;;;;;;-1:-1:-1;32272:490:0;;;;;:::i;:::-;;:::i;21735:49::-;;;;;;;;;;-1:-1:-1;21735:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13030:79;;;;;;;;;;-1:-1:-1;13095:6:0;;-1:-1:-1;;;;;13095:6:0;13030:79;;4549:104;;;;;;;;;;;;;:::i;22437:42::-;;;;;;;;;;;;22474:5;22437:42;;;;;-1:-1:-1;;;;;6504:31:1;;;6486:50;;6474:2;6459:18;22437:42:0;6342:200:1;8882:436:0;;;;;;;;;;-1:-1:-1;8882:436:0;;;;;:::i;:::-;;:::i;21879:31::-;;;;;;;;;;-1:-1:-1;21879:31:0;;;;-1:-1:-1;;;;;21879:31:0;;;5963:193;;;;;;;;;;-1:-1:-1;5963:193:0;;;;;:::i;:::-;;:::i;22366:29::-;;;;;;;;;;;;;;;35072:169;;;;;;;;;;-1:-1:-1;35072:169:0;;;;;:::i;:::-;;:::i;21949:29::-;;;;;;;;;;-1:-1:-1;21949:29:0;;;;-1:-1:-1;;;;;21949:29:0;;;21828:42;;;;;;;;;;-1:-1:-1;21828:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30592:319;;;;;;;;;;-1:-1:-1;30592:319:0;;;;;:::i;:::-;;:::i;22245:30::-;;;;;;;;;;;;;;;;22523:39;;;;;;;;;;-1:-1:-1;22523:39:0;;;;;;;;22013:20;;;;;;;;;;-1:-1:-1;22013:20:0;;;;-1:-1:-1;;;;;22013:20:0;;;;-1:-1:-1;;;22013:20:0;;;;;-1:-1:-1;;;22013:20:0;;;;;-1:-1:-1;;;22013:20:0;;;;;30919:352;;;;;;;;;;-1:-1:-1;30919:352:0;;;;;:::i;:::-;;:::i;22488:26::-;;;;;;;;;;;;;;;;6219:151;;;;;;;;;;-1:-1:-1;6219:151:0;;;;;:::i;:::-;;:::i;22404:24::-;;;;;;;;;;-1:-1:-1;22404:24:0;;;;-1:-1:-1;;;;;22404:24:0;;;;-1:-1:-1;;;22404:24:0;;;;;;;;;-1:-1:-1;;;;;7112:15:1;;;7094:34;;7164:15;;;;7159:2;7144:18;;7137:43;7014:18;22404:24:0;6867:319:1;13402:244:0;;;;;;;;;;-1:-1:-1;13402:244:0;;;;;:::i;:::-;;:::i;33911:158::-;;;;;;;;;;;;;:::i;4330:100::-;4384:13;4417:5;4410:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4330:100;:::o;6690:201::-;6773:4;316:10;6829:32;316:10;6845:7;6854:6;6829:8;:32::i;:::-;6879:4;6872:11;;;6690:201;;;;;:::o;31918:346::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;;;;;;;;;32039:6:::1;32018:13;5547:12:::0;;;5459:108;32018:13:::1;:17;::::0;32034:1:::1;32018:17;:::i;:::-;32017:28;;;;:::i;:::-;32004:9;:41;;31996:107;;;::::0;-1:-1:-1;;;31996:107:0;;8701:2:1;31996:107:0::1;::::0;::::1;8683:21:1::0;8740:2;8720:18;;;8713:30;8779:34;8759:18;;;8752:62;-1:-1:-1;;;8830:18:1;;;8823:51;8891:19;;31996:107:0::1;8499:417:1::0;31996:107:0::1;32157:4;32136:13;5547:12:::0;;;5459:108;32136:13:::1;:17;::::0;32152:1:::1;32136:17;:::i;:::-;32135:26;;;;:::i;:::-;32122:9;:39;;32114:104;;;::::0;-1:-1:-1;;;32114:104:0;;9123:2:1;32114:104:0::1;::::0;::::1;9105:21:1::0;9162:2;9142:18;;;9135:30;9201:34;9181:18;;;9174:62;-1:-1:-1;;;9252:18:1;;;9245:50;9312:19;;32114:104:0::1;8921:416:1::0;32114:104:0::1;32229:15;:27:::0;31918:346::o;34077:333::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;34202:37;;::::1;34194:72;;;::::0;-1:-1:-1;;;34194:72:0;;9544:2:1;34194:72:0::1;::::0;::::1;9526:21:1::0;9583:2;9563:18;;;9556:30;-1:-1:-1;;;9602:18:1;;;9595:52;9664:18;;34194:72:0::1;9342:346:1::0;34194:72:0::1;34281:9;34277:126;34296:18:::0;;::::1;34277:126;;;34335:56;34351:10;34363:7;;34371:1;34363:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;34375:12;;34388:1;34375:15;;;;;;;:::i;:::-;;;;;;;34335;:56::i;:::-;34316:3;;34277:126;;;;34077:333:::0;;;;:::o;34722:173::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34810:22:0;::::1;34802:47;;;;-1:-1:-1::0;;;34802:47:0::1;;;;;;;:::i;:::-;34860:16;:27:::0;;-1:-1:-1;;;;;;34860:27:0::1;-1:-1:-1::0;;;;;34860:27:0;;;::::1;::::0;;;::::1;::::0;;34722:173::o;7471:261::-;7568:4;316:10;7626:38;7642:4;316:10;7657:6;7626:15;:38::i;:::-;7675:27;7685:4;7691:2;7695:6;7675:9;:27::i;:::-;-1:-1:-1;7720:4:0;;7471:261;-1:-1:-1;;;;7471:261:0:o;32770:494::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;32910:34:0;;::::1;::::0;;32955:30;;::::1;-1:-1:-1::0;;;32955:30:0;;;;32996:22;;::::1;-1:-1:-1::0;;;32996:22:0;;33046:27:::1;32955:30:::0;32910:34;33046:27:::1;:::i;:::-;:37;;;;:::i;:::-;-1:-1:-1::0;;;;;33029:54:0::1;:14;::::0;::::1;:54:::0;;;33121:3:::1;-1:-1:-1::0;33102:22:0::1;::::0;:60:::1;;-1:-1:-1::0;33146:7:0::1;:16:::0;33128:14:::1;::::0;::::1;::::0;-1:-1:-1;;;;;;;;33146:16:0;;::::1;::::0;::::1;33128:34:::0;::::1;;;33102:60;33094:90;;;::::0;-1:-1:-1;;;33094:90:0;;10553:2:1;33094:90:0::1;::::0;::::1;10535:21:1::0;10592:2;10572:18;;;10565:30;-1:-1:-1;;;10611:18:1;;;10604:47;10668:18;;33094:90:0::1;10351:341:1::0;33094:90:0::1;33215:14;::::0;::::1;::::0;33200:30:::1;::::0;-1:-1:-1;;;;;6504:31:1;;;6486:50;;33200:30:0::1;::::0;6474:2:1;6459:18;33200:30:0::1;;;;;;;33241:15:::0;;:7:::1;:15:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;33241:15:0;;::::1;-1:-1:-1::0;;;33241:15:0::1;-1:-1:-1::0;;;;;33241:15:0;;::::1;-1:-1:-1::0;;;33241:15:0::1;::::0;;;;-1:-1:-1;;;;;33241:15:0;;::::1;-1:-1:-1::0;;;33241:15:0::1;-1:-1:-1::0;;;;;;33241:15:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;32770:494:0:o;31279:322::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;31419:14:::1;5384:2:::0;31419::::1;:14;:::i;:::-;31412:4;31392:13;5547:12:::0;;;5459:108;31392:13:::1;:17;::::0;31408:1:::1;31392:17;:::i;:::-;:24;;;;:::i;:::-;31391:43;;;;:::i;:::-;31373:14;-1:-1:-1::0;;;;;31373:61:0::1;;;31365:81;;;::::0;-1:-1:-1;;;31365:81:0;;12482:2:1;31365:81:0::1;::::0;::::1;12464:21:1::0;12521:1;12501:18;;;12494:29;-1:-1:-1;;;12539:18:1;;;12532:37;12586:18;;31365:81:0::1;12280:330:1::0;31365:81:0::1;31511:14;5384:2:::0;31511::::1;:14;:::i;:::-;31493:33;::::0;-1:-1:-1;;;;;31493:33:0;::::1;;:::i;:::-;31457:8;:70:::0;;-1:-1:-1;;;;;;31457:70:0::1;-1:-1:-1::0;;;;;31457:70:0;;;::::1;::::0;;::::1;::::0;;31543:50:::1;::::0;12761:66:1;;;31543:50:0::1;::::0;12749:2:1;12734:18;31543:50:0::1;;;;;;;;31279:322:::0;:::o;8141:238::-;8229:4;316:10;8285:64;316:10;8301:7;8338:10;8310:25;316:10;8301:7;8310:9;:25::i;:::-;:38;;;;:::i;:::-;8285:8;:64::i;34418:296::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34507:20:0;::::1;34499:59;;;::::0;-1:-1:-1;;;34499:59:0;;13170:2:1;34499:59:0::1;::::0;::::1;13152:21:1::0;13209:2;13189:18;;;13182:30;13248:28;13228:18;;;13221:56;13294:18;;34499:59:0::1;12968:350:1::0;34499:59:0::1;34596:39;::::0;-1:-1:-1;;;34596:39:0;;34629:4:::1;34596:39;::::0;::::1;835:51:1::0;34569:24:0::1;::::0;-1:-1:-1;;;;;34596:24:0;::::1;::::0;::::1;::::0;808:18:1;;34596:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34569:66;;34646:60;34676:6;34684:3;34689:16;34646:22;:60::i;:::-;34488:226;34418:296:::0;;:::o;33792:111::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;33870:14:::1;:25:::0;;-1:-1:-1;;33870:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33792:111::o;31609:301::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;31743:14:::1;5384:2:::0;31743::::1;:14;:::i;:::-;31737:3;31717:13;5547:12:::0;;;5459:108;31717:13:::1;:17;::::0;31733:1:::1;31717:17;:::i;:::-;:23;;;;:::i;:::-;31716:42;;;;:::i;:::-;31698:14;-1:-1:-1::0;;;;;31698:60:0::1;;;31690:80;;;::::0;-1:-1:-1;;;31690:80:0;;12482:2:1;31690:80:0::1;::::0;::::1;12464:21:1::0;12521:1;12501:18;;;12494:29;-1:-1:-1;;;12539:18:1;;;12532:37;12586:18;;31690:80:0::1;12280:330:1::0;31690:80:0::1;31830:14;5384:2:::0;31830::::1;:14;:::i;:::-;31812:33;::::0;-1:-1:-1;;;;;31812:33:0;::::1;;:::i;:::-;31781:8;:65:::0;;-1:-1:-1;;;;;31781:65:0;;::::1;-1:-1:-1::0;;;31781:65:0;;::::1;::::0;::::1;;::::0;;;;31862:40:::1;::::0;31881:20;;;::::1;;12761:66:1::0;;31862:40:0::1;::::0;12749:2:1;12734:18;31862:40:0::1;12615:218:1::0;13244:150:0;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;13337:6:::1;::::0;13316:40:::1;::::0;13353:1:::1;::::0;-1:-1:-1;;;;;13337:6:0::1;::::0;13316:40:::1;::::0;13353:1;;13316:40:::1;13367:6;:19:::0;;-1:-1:-1;;;;;;13367:19:0::1;::::0;;13244:150::o;33463:321::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;33517:7:::1;:15:::0;;-1:-1:-1;;33517:15:0::1;::::0;;-1:-1:-1;;;;;;;;;33527:5:0::1;-1:-1:-1::0;;;;;;;33579:14:0::1;33596:13;5547:12:::0;;;5459:108;33596:13:::1;-1:-1:-1::0;;;;;33620:44:0;::::1;::::0;;;33675:21:::1;::::0;::::1;:39:::0;;;-1:-1:-1;;;33725:20:0;::::1;;:8;:20:::0;33761:15:::1;::::0;33579:30;;-1:-1:-1;33761:15:0::1;::::0;33620:26:::1;::::0;33761:15:::1;33506:278;;33463:321::o:0;34903:161::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34985:22:0;::::1;34977:47;;;;-1:-1:-1::0;;;34977:47:0::1;;;;;;;:::i;:::-;35035:10;:21:::0;;-1:-1:-1;;;;;;35035:21:0::1;-1:-1:-1::0;;;;;35035:21:0;;;::::1;::::0;;;::::1;::::0;;34903:161::o;33272:183::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;33336:14:::1;::::0;::::1;;33335:15;33327:51;;;::::0;-1:-1:-1;;;33327:51:0;;13714:2:1;33327:51:0::1;::::0;::::1;13696:21:1::0;13753:2;13733:18;;;13726:30;13792:25;13772:18;;;13765:53;13835:18;;33327:51:0::1;13512:347:1::0;33327:51:0::1;33389:14;:21:::0;;-1:-1:-1;;33389:21:0::1;33406:4;33389:21;::::0;;33435:12:::1;33421:11;:26:::0;33272:183::o;32272:490::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;32411:34:0;;::::1;::::0;;32456:30;;::::1;-1:-1:-1::0;;;32456:30:0;;;;32497:22;;::::1;-1:-1:-1::0;;;32497:22:0;;32547:27:::1;32456:30:::0;32411:34;32547:27:::1;:::i;:::-;:37;;;;:::i;:::-;-1:-1:-1::0;;;;;32530:54:0::1;:14;::::0;::::1;:54:::0;;;32622:3:::1;-1:-1:-1::0;32603:22:0::1;::::0;:59:::1;;-1:-1:-1::0;32647:6:0::1;:15:::0;32629:14:::1;::::0;::::1;::::0;-1:-1:-1;;;;;;;;32647:15:0;;::::1;::::0;::::1;32629:33:::0;::::1;;;32603:59;32595:89;;;::::0;-1:-1:-1;;;32595:89:0;;10553:2:1;32595:89:0::1;::::0;::::1;10535:21:1::0;10592:2;10572:18;;;10565:30;-1:-1:-1;;;10611:18:1;;;10604:47;10668:18;;32595:89:0::1;10351:341:1::0;32595:89:0::1;32714:14;::::0;::::1;::::0;32700:29:::1;::::0;-1:-1:-1;;;;;6504:31:1;;;6486:50;;32700:29:0::1;::::0;6474:2:1;6459:18;32700:29:0::1;;;;;;;32740:14:::0;;:6:::1;:14:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;32740:14:0;;::::1;-1:-1:-1::0;;;32740:14:0::1;-1:-1:-1::0;;;;;32740:14:0;;::::1;-1:-1:-1::0;;;32740:14:0::1;::::0;;;;-1:-1:-1;;;;;32740:14:0;;::::1;-1:-1:-1::0;;;32740:14:0::1;-1:-1:-1::0;;;;;;32740:14:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;32272:490:0:o;4549:104::-;4605:13;4638:7;4631:14;;;;;:::i;8882:436::-;8975:4;316:10;8975:4;9058:25;316:10;9075:7;9058:9;:25::i;:::-;9031:52;;9122:15;9102:16;:35;;9094:85;;;;-1:-1:-1;;;9094:85:0;;14066:2:1;9094:85:0;;;14048:21:1;14105:2;14085:18;;;14078:30;14144:34;14124:18;;;14117:62;-1:-1:-1;;;14195:18:1;;;14188:35;14240:19;;9094:85:0;13864:401:1;9094:85:0;9215:60;9224:5;9231:7;9259:15;9240:16;:34;9215:8;:60::i;5963:193::-;6042:4;316:10;6098:28;316:10;6115:2;6119:6;6098:9;:28::i;35072:169::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35158:22:0;::::1;35150:47;;;;-1:-1:-1::0;;;35150:47:0::1;;;;;;;:::i;:::-;35208:14;:25:::0;;-1:-1:-1;;;;;;35208:25:0::1;-1:-1:-1::0;;;;;35208:25:0;;;::::1;::::0;;;::::1;::::0;;35072:169::o;30592:319::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30690:22:0;::::1;30682:47;;;::::0;-1:-1:-1;;;30682:47:0;;14472:2:1;30682:47:0::1;::::0;::::1;14454:21:1::0;14511:2;14491:18;;;14484:30;-1:-1:-1;;;14530:18:1;;;14523:42;14582:18;;30682:47:0::1;14270:336:1::0;30682:47:0::1;30768:4;-1:-1:-1::0;;;;;30748:25:0;::::1;::::0;30740:62:::1;;;::::0;-1:-1:-1;;;30740:62:0;;14813:2:1;30740:62:0::1;::::0;::::1;14795:21:1::0;14852:2;14832:18;;;14825:30;14891:26;14871:18;;;14864:54;14935:18;;30740:62:0::1;14611:348:1::0;30740:62:0::1;-1:-1:-1::0;;;;;30813:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;30813:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30865:38;;15132:51:1;;;15199:18;;;15192:50;30865:38:0::1;::::0;15105:18:1;30865:38:0::1;;;;;;;;30592:319:::0;;:::o;30919:352::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31019:22:0;::::1;31011:47;;;::::0;-1:-1:-1;;;31011:47:0;;14472:2:1;31011:47:0::1;::::0;::::1;14454:21:1::0;14511:2;14491:18;;;14484:30;-1:-1:-1;;;14530:18:1;;;14523:42;14582:18;;31011:47:0::1;14270:336:1::0;31011:47:0::1;31073:9;31069:90;;31118:6;-1:-1:-1::0;;;;;31106:18:0::1;:8;-1:-1:-1::0;;;;;31106:18:0::1;::::0;31098:49:::1;;;::::0;-1:-1:-1;;;31098:49:0;;15455:2:1;31098:49:0::1;::::0;::::1;15437:21:1::0;15494:2;15474:18;;;15467:30;-1:-1:-1;;;15513:18:1;;;15506:48;15571:18;;31098:49:0::1;15253:342:1::0;31098:49:0::1;-1:-1:-1::0;;;;;31169:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;31169:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31223:40;;15132:51:1;;;15199:18;;;15192:50;31223:40:0::1;::::0;15105:18:1;31223:40:0::1;14964:284:1::0;6219:151:0;-1:-1:-1;;;;;6335:18:0;;;6308:7;6335:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6219:151::o;13402:244::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13491:22:0;::::1;13483:73;;;::::0;-1:-1:-1;;;13483:73:0;;15802:2:1;13483:73:0::1;::::0;::::1;15784:21:1::0;15841:2;15821:18;;;15814:30;15880:34;15860:18;;;15853:62;-1:-1:-1;;;15931:18:1;;;15924:36;15977:19;;13483:73:0::1;15600:402:1::0;13483:73:0::1;13593:6;::::0;13572:38:::1;::::0;-1:-1:-1;;;;;13572:38:0;;::::1;::::0;13593:6:::1;::::0;13572:38:::1;::::0;13593:6:::1;::::0;13572:38:::1;13621:6;:17:::0;;-1:-1:-1;;;;;;13621:17:0::1;-1:-1:-1::0;;;;;13621:17:0;;;::::1;::::0;;;::::1;::::0;;13402:244::o;33911:158::-;13157:6;;-1:-1:-1;;;;;13157:6:0;316:10;13157:22;13149:67;;;;-1:-1:-1;;;13149:67:0;;;;;;;:::i;:::-;33980:20:::1;::::0;::::1;;33972:50;;;::::0;-1:-1:-1;;;33972:50:0;;16209:2:1;33972:50:0::1;::::0;::::1;16191:21:1::0;16248:2;16228:18;;;16221:30;-1:-1:-1;;;16267:18:1;;;16260:47;16324:18;;33972:50:0::1;16007:341:1::0;33972:50:0::1;34033:20;:28:::0;;-1:-1:-1;;34033:28:0::1;::::0;;33911:158::o;11643:346::-;-1:-1:-1;;;;;11745:19:0;;11737:68;;;;-1:-1:-1;;;11737:68:0;;16555:2:1;11737:68:0;;;16537:21:1;16594:2;16574:18;;;16567:30;16633:34;16613:18;;;16606:62;-1:-1:-1;;;16684:18:1;;;16677:34;16728:19;;11737:68:0;16353:400:1;11737:68:0;-1:-1:-1;;;;;11824:21:0;;11816:68;;;;-1:-1:-1;;;11816:68:0;;16960:2:1;11816:68:0;;;16942:21:1;16999:2;16979:18;;;16972:30;17038:34;17018:18;;;17011:62;-1:-1:-1;;;17089:18:1;;;17082:32;17131:19;;11816:68:0;16758:398:1;11816:68:0;-1:-1:-1;;;;;11897:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11949:32;;1672:25:1;;;11949:32:0;;1645:18:1;11949:32:0;;;;;;;11643:346;;;:::o;9788:705::-;-1:-1:-1;;;;;9885:18:0;;9877:68;;;;-1:-1:-1;;;9877:68:0;;17363:2:1;9877:68:0;;;17345:21:1;17402:2;17382:18;;;17375:30;17441:34;17421:18;;;17414:62;-1:-1:-1;;;17492:18:1;;;17485:35;17537:19;;9877:68:0;17161:401:1;9877:68:0;-1:-1:-1;;;;;9964:16:0;;9956:64;;;;-1:-1:-1;;;9956:64:0;;17769:2:1;9956:64:0;;;17751:21:1;17808:2;17788:18;;;17781:30;17847:34;17827:18;;;17820:62;-1:-1:-1;;;17898:18:1;;;17891:33;17941:19;;9956:64:0;17567:399:1;9956:64:0;-1:-1:-1;;;;;10055:15:0;;10033:19;10055:15;;;;;;;;;;;10089:21;;;;10081:72;;;;-1:-1:-1;;;10081:72:0;;18173:2:1;10081:72:0;;;18155:21:1;18212:2;18192:18;;;18185:30;18251:34;18231:18;;;18224:62;-1:-1:-1;;;18302:18:1;;;18295:36;18348:19;;10081:72:0;17971:402:1;10081:72:0;-1:-1:-1;;;;;10189:15:0;;;:9;:15;;;;;;;;;;;10207:20;;;10189:38;;10407:13;;;;;;;;;;:23;;;;;;10459:26;;1672:25:1;;;10407:13:0;;10459:26;;1645:18:1;10459:26:0;;;;;;;9866:627;9788:705;;;:::o;12280:419::-;12381:24;12408:25;12418:5;12425:7;12408:9;:25::i;:::-;12381:52;;-1:-1:-1;;12448:16:0;:37;12444:248;;12530:6;12510:16;:26;;12502:68;;;;-1:-1:-1;;;12502:68:0;;18580:2:1;12502:68:0;;;18562:21:1;18619:2;18599:18;;;18592:30;18658:31;18638:18;;;18631:59;18707:18;;12502:68:0;18378:353:1;12502:68:0;12614:51;12623:5;12630:7;12658:6;12639:16;:25;12614:8;:51::i;:::-;12370:329;12280:419;;;:::o;25535:409::-;-1:-1:-1;;;;;25681:20:0;;;;;;:14;:20;;;;;;;;25680:21;:44;;;;-1:-1:-1;;;;;;25706:18:0;;;;;;:14;:18;;;;;;;;25705:19;25680:44;25677:216;;;25748:14;;;;25740:45;;;;-1:-1:-1;;;25740:45:0;;18938:2:1;25740:45:0;;;18920:21:1;18977:2;18957:18;;;18950:30;-1:-1:-1;;;18996:18:1;;;18989:48;19054:18;;25740:45:0;18736:342:1;25740:45:0;25810:27;25820:4;25826:2;25830:6;25810:9;:27::i;:::-;25800:37;;;;:::i;:::-;;;25852:29;25864:4;25870:2;25874:6;25852:11;:29::i;:::-;25905:31;25921:4;25926:2;25929:6;25905:15;:31::i;19816:177::-;19926:58;;;-1:-1:-1;;;;;19408:32:1;;19926:58:0;;;19390:51:1;19457:18;;;;19450:34;;;19926:58:0;;;;;;;;;;19363:18:1;;;;19926:58:0;;;;;;;;-1:-1:-1;;;;;19926:58:0;-1:-1:-1;;;19926:58:0;;;19899:86;;19919:5;;19899:19;:86::i;27540:1176::-;27671:15;;27661:4;27619:7;5731:18;;;;;;;;;;;27619:7;;-1:-1:-1;27643:43:0;:63;;;;-1:-1:-1;;;;;;27691:15:0;;;;;;:9;:15;;;;;;;;27690:16;27643:63;27640:109;;;27723:14;:12;:14::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27832:13:0;;;;:9;:13;;;;;;;;27828:126;;;-1:-1:-1;27861:15:0;;;;;;;;27869:7;27861:15;-1:-1:-1;;;;;27861:15:0;;;;;-1:-1:-1;;;27861:15:0;;;;;;;;-1:-1:-1;;;27861:15:0;;;;;;;;;;;-1:-1:-1;;;27861:15:0;;;;;;;;;27828:126;;;-1:-1:-1;;;;;27897:15:0;;;;;;:9;:15;;;;;;;;27894:60;;;-1:-1:-1;27928:14:0;;;;;;;;27936:6;27928:14;-1:-1:-1;;;;;27928:14:0;;;;;-1:-1:-1;;;27928:14:0;;;;;;;;-1:-1:-1;;;27928:14:0;;;;;;;;;;;-1:-1:-1;;;27928:14:0;;;;;;;;;27894:60;27969:14;;;;-1:-1:-1;;;;;27969:18:0;;27966:712;;28003:53;;;;;;;;28044:12;28003:53;-1:-1:-1;;;;;28003:53:0;;;;;-1:-1:-1;;;28003:53:0;;;;;;;;-1:-1:-1;;;28003:53:0;;;;;;;;;;-1:-1:-1;;;28003:53:0;;;;;;;;;;;;;;;28094:14;;;22474:5;;28085:23;;-1:-1:-1;;;;;28085:23:0;:6;:23;:::i;:::-;:37;;;;:::i;:::-;28071:52;;28157:11;;28141:12;:27;28138:108;;22474:5;28202:13;:6;28211:4;28202:13;:::i;:::-;:27;;;;:::i;:::-;28188:42;;28138:108;28348:3;28331:5;:14;;;-1:-1:-1;;;;;28306:39:0;28312:5;:16;;;-1:-1:-1;;;;;28306:22:0;:3;:22;;;;:::i;:::-;:39;;;;:::i;:::-;:45;;;;:::i;:::-;28260:18;:35;;:92;;;;;;;:::i;:::-;-1:-1:-1;;;;;28260:92:0;;;-1:-1:-1;28442:14:0;;;;28421:18;;28459:3;;-1:-1:-1;;;;;28415:41:0;;;;:24;;;:3;:24;:::i;:::-;:41;;;;:::i;:::-;:47;;;;:::i;:::-;28367:96;;:18;;:96;;;;;:::i;:::-;-1:-1:-1;;;;;28367:96:0;;;-1:-1:-1;28541:14:0;;;;28526:12;;;;28558:3;;-1:-1:-1;;;;;28520:35:0;;;;:18;;;:3;:18;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;28478:18;:31;;:84;;;;;;;:::i;:::-;-1:-1:-1;;;;;28478:84:0;;;;;;28577:33;;:12;:33;;;;;;;;;;;;;;;;-1:-1:-1;;;28577:33:0;-1:-1:-1;;;;28577:33:0;;;-1:-1:-1;;;28577:33:0;;;;;-1:-1:-1;;;;28577:33:0;;;-1:-1:-1;;;28577:33:0;-1:-1:-1;;;;;;28577:33:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28625:41:0;28641:4;28655;-1:-1:-1;;;;;28625:41:0;;:15;:41::i;:::-;27988:690;27966:712;-1:-1:-1;;;;;;28698:10:0;;27540:1176;-1:-1:-1;;;;27540:1176:0:o;25952:1580::-;26038:7;;;;;;;26035:1162;;;-1:-1:-1;;;;;26083:20:0;;;26061:19;26083:20;;;:16;:20;;;;;;;;;5731:18;;;;;;;26168:36;;;;;;;26196:8;26168:36;-1:-1:-1;;;;;26168:36:0;;;;;-1:-1:-1;;;26168:36:0;;;;;;;;26243:15;;;;;:9;:15;;;;;;26083:20;;;;;5731:18;;26243:15;:34;;;;;26263:14;26262:15;26243:34;26239:538;;;26316:26;;-1:-1:-1;;;;;26306:36:0;;;;26298:56;;;;-1:-1:-1;;;26298:56:0;;20386:2:1;26298:56:0;;;20368:21:1;20425:1;20405:18;;;20398:29;-1:-1:-1;;;20443:18:1;;;20436:37;20490:18;;26298:56:0;20184:330:1;26298:56:0;26405:21;;;;-1:-1:-1;;;;;26381:45:0;:20;26390:11;26381:6;:20;:::i;:::-;:45;;26373:68;;;;-1:-1:-1;;;26373:68:0;;20721:2:1;26373:68:0;;;20703:21:1;20760:2;20740:18;;;20733:30;-1:-1:-1;;;20779:18:1;;;20772:40;20829:18;;26373:68:0;20519:334:1;26373:68:0;26239:538;;;-1:-1:-1;;;;;26502:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;26520:22:0;;;;;;:16;:22;;;;;;;;26519:23;26502:40;26498:279;;;26581:26;;-1:-1:-1;;;;;26571:36:0;;;;26563:56;;;;-1:-1:-1;;;26563:56:0;;20386:2:1;26563:56:0;;;20368:21:1;20425:1;20405:18;;;20398:29;-1:-1:-1;;;20443:18:1;;;20436:37;20490:18;;26563:56:0;20184:330:1;26498:279:0;26658:14;26654:123;;26725:21;;;;-1:-1:-1;;;;;26701:45:0;:20;26710:11;26701:6;:20;:::i;:::-;:45;;26693:68;;;;-1:-1:-1;;;26693:68:0;;20721:2:1;26693:68:0;;;20703:21:1;20760:2;20740:18;;;20733:30;-1:-1:-1;;;20779:18:1;;;20772:40;20829:18;;26693:68:0;20519:334:1;26693:68:0;26796:20;;;;26793:393;;;26854:9;-1:-1:-1;;;;;26840:24:0;:2;-1:-1:-1;;;;;26840:24:0;;;:49;;;;;26882:6;-1:-1:-1;;;;;26868:21:0;:2;-1:-1:-1;;;;;26868:21:0;;;26840:49;26836:335;;;26946:9;26921:35;;;;:24;:35;;;;;;26959:12;-1:-1:-1;26913:77:0;;;;-1:-1:-1;;;26913:77:0;;21060:2:1;26913:77:0;;;21042:21:1;21099:2;21079:18;;;21072:30;-1:-1:-1;;;21118:18:1;;;21111:44;21172:18;;26913:77:0;20858:338:1;26913:77:0;27032:6;-1:-1:-1;;;;;27016:23:0;:4;-1:-1:-1;;;;;27016:23:0;;27013:139;;27075:9;-1:-1:-1;;;;;27075:15:0;;;27067:61;;;;-1:-1:-1;;;27067:61:0;;21403:2:1;27067:61:0;;;21385:21:1;21442:2;21422:18;;;21415:30;21481:34;21461:18;;;21454:62;-1:-1:-1;;;21532:18:1;;;21525:31;21573:19;;27067:61:0;21201:397:1;27067:61:0;26046:1151;;;26035:1162;27213:14;;;;27209:316;;;-1:-1:-1;;;;;27246:13:0;;;;;;:9;:13;;;;;;;;27243:271;;;-1:-1:-1;;;;;27287:30:0;;;;;;:24;:30;;;;;;27320:12;-1:-1:-1;27279:66:0;;;;-1:-1:-1;;;27279:66:0;;21805:2:1;27279:66:0;;;21787:21:1;21844:1;21824:18;;;21817:29;-1:-1:-1;;;21862:18:1;;;21855:38;21910:18;;27279:66:0;21603:331:1;27243:271:0;-1:-1:-1;;;;;;27386:28:0;;;;;:24;:28;;;;;;27417:12;27386:43;;;;27473:9;27448:35;;;;:50;-1:-1:-1;25952:1580:0:o;20214:333::-;20295:23;20321:69;20349:4;20321:69;;;;;;;;;;;;;;;;;20329:5;-1:-1:-1;;;;;20321:27:0;;;:69;;;;;:::i;:::-;20405:17;;20295:95;;-1:-1:-1;20405:21:0;20401:139;;20462:10;20451:30;;;;;;;;;;;;:::i;:::-;20443:85;;;;-1:-1:-1;;;20443:85:0;;22391:2:1;20443:85:0;;;22373:21:1;22430:2;22410:18;;;22403:30;22469:34;22449:18;;;22442:62;-1:-1:-1;;;22520:18:1;;;22513:40;22570:19;;20443:85:0;22189:406:1;29104:1456:0;29193:4;29149:23;5731:18;;;;;;;;;;;29210:50;;;;;;;;29248:12;29210:50;-1:-1:-1;;;;;29210:50:0;;;;;;-1:-1:-1;;;29210:50:0;;;;;;;;;;-1:-1:-1;;;29210:50:0;;;;;;;;;;;-1:-1:-1;;;29210:50:0;;;;;;;;;;;29149;;-1:-1:-1;29210:50:0;;-1:-1:-1;;29210:50:0;29299:69;;;:::i;:::-;:100;;;;:::i;:::-;-1:-1:-1;;;;;29271:128:0;;-1:-1:-1;29423:20:0;;;:46;;-1:-1:-1;29447:22:0;;29423:46;29420:60;;;29472:7;;;29104:1456::o;29420:60::-;29513:15;;:20;;29531:2;29513:20;:::i;:::-;29495:15;:38;29492:107;;;29567:15;;:20;;29585:2;29567:20;:::i;:::-;29549:38;;29492:107;29614:19;;29611:758;;29651:33;29668:15;29651:16;:33::i;:::-;29804:28;;;;29734:21;;29713:18;;-1:-1:-1;;;;;29804:32:0;;29801:175;;29869:10;;29905:28;;;;-1:-1:-1;;;;;29869:10:0;;;;29936:17;;29892:41;;-1:-1:-1;;;;;29892:41:0;:10;:41;:::i;:::-;:61;;;;:::i;:::-;29869:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29856:102:0;;-1:-1:-1;;29801:175:0;29995:32;;;;-1:-1:-1;;;;;29995:36:0;;29992:187;;30064:14;;30104:32;;;;-1:-1:-1;;;;;30064:14:0;;;;30139:17;;30091:45;;-1:-1:-1;;;;;30091:45:0;:10;:45;:::i;:::-;:65;;;;:::i;:::-;30064:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30051:110:0;;-1:-1:-1;;29992:187:0;30208:21;;-1:-1:-1;30249:14:0;;30246:112;;30296:16;;:44;;-1:-1:-1;;;;;30296:16:0;;;;30325:10;;30296:44;;;;30325:10;30296:16;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30283:57:0;;-1:-1:-1;;30246:112:0;29634:735;;29611:758;-1:-1:-1;30416:1:0;30381:32;;;:36;;;30428:38;;;30477:28;;;:32;30522:12;:30;;;;;;;;;-1:-1:-1;;;30522:30:0;-1:-1:-1;;;;;;30522:30:0;;;;;;;;;-1:-1:-1;29104:1456:0:o;14319:229::-;14456:12;14488:52;14510:6;14518:4;14524:1;14527:12;14488:21;:52::i;:::-;14481:59;14319:229;-1:-1:-1;;;;14319:229:0:o;28724:372::-;28813:16;;;28827:1;28813:16;;;;;;;;28789:21;;28813:16;;;;;;;;;;-1:-1:-1;28813:16:0;28789:40;;28858:4;28840;28845:1;28840:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28840:23:0;;;-1:-1:-1;;;;;28840:23:0;;;;;28884:4;28874;28879:1;28874:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28874:14:0;;;:7;;;;;;;;;:14;28901:187;;-1:-1:-1;;;28901:187:0;;:9;:60;;;;;;:187;;28976:8;;28999:1;;29015:4;;29042;;29062:15;;28901:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28776:320;28724:372;:::o;15439:455::-;15609:12;15667:5;15642:21;:30;;15634:81;;;;-1:-1:-1;;;15634:81:0;;24129:2:1;15634:81:0;;;24111:21:1;24168:2;24148:18;;;24141:30;24207:34;24187:18;;;24180:62;-1:-1:-1;;;24258:18:1;;;24251:36;24304:19;;15634:81:0;23927:402:1;15634:81:0;15727:12;15741:23;15768:6;-1:-1:-1;;;;;15768:11:0;15787:5;15794:4;15768:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15726:73;;;;15817:69;15844:6;15852:7;15861:10;15873:12;15817:26;:69::i;:::-;15810:76;15439:455;-1:-1:-1;;;;;;;15439:455:0:o;18012:644::-;18197:12;18226:7;18222:427;;;18254:10;:17;18275:1;18254:22;18250:290;;-1:-1:-1;;;;;13760:19:0;;;18464:60;;;;-1:-1:-1;;;18464:60:0;;24828:2:1;18464:60:0;;;24810:21:1;24867:2;24847:18;;;24840:30;24906:31;24886:18;;;24879:59;24955:18;;18464:60:0;24626:353:1;18464:60:0;-1:-1:-1;18561:10:0;18554:17;;18222:427;18604:33;18612:10;18624:12;19359:17;;:21;19355:388;;19591:10;19585:17;19648:15;19635:10;19631:2;19627:19;19620:44;19355:388;19718:12;19711:20;;-1:-1:-1;;;19711:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;897:173::-;965:20;;-1:-1:-1;;;;;1014:31:1;;1004:42;;994:70;;1060:1;1057;1050:12;994:70;897:173;;;:::o;1075:254::-;1143:6;1151;1204:2;1192:9;1183:7;1179:23;1175:32;1172:52;;;1220:1;1217;1210:12;1172:52;1243:29;1262:9;1243:29;:::i;:::-;1233:39;1319:2;1304:18;;;;1291:32;;-1:-1:-1;;;1075:254:1:o;1708:180::-;1767:6;1820:2;1808:9;1799:7;1795:23;1791:32;1788:52;;;1836:1;1833;1826:12;1788:52;-1:-1:-1;1859:23:1;;1708:180;-1:-1:-1;1708:180:1:o;1893:367::-;1956:8;1966:6;2020:3;2013:4;2005:6;2001:17;1997:27;1987:55;;2038:1;2035;2028:12;1987:55;-1:-1:-1;2061:20:1;;-1:-1:-1;;;;;2093:30:1;;2090:50;;;2136:1;2133;2126:12;2090:50;2173:4;2165:6;2161:17;2149:29;;2233:3;2226:4;2216:6;2213:1;2209:14;2201:6;2197:27;2193:38;2190:47;2187:67;;;2250:1;2247;2240:12;2187:67;1893:367;;;;;:::o;2265:773::-;2387:6;2395;2403;2411;2464:2;2452:9;2443:7;2439:23;2435:32;2432:52;;;2480:1;2477;2470:12;2432:52;2520:9;2507:23;-1:-1:-1;;;;;2590:2:1;2582:6;2579:14;2576:34;;;2606:1;2603;2596:12;2576:34;2645:70;2707:7;2698:6;2687:9;2683:22;2645:70;:::i;:::-;2734:8;;-1:-1:-1;2619:96:1;-1:-1:-1;2822:2:1;2807:18;;2794:32;;-1:-1:-1;2838:16:1;;;2835:36;;;2867:1;2864;2857:12;2835:36;;2906:72;2970:7;2959:8;2948:9;2944:24;2906:72;:::i;:::-;2265:773;;;;-1:-1:-1;2997:8:1;-1:-1:-1;;;;2265:773:1:o;3043:186::-;3102:6;3155:2;3143:9;3134:7;3130:23;3126:32;3123:52;;;3171:1;3168;3161:12;3123:52;3194:29;3213:9;3194:29;:::i;:::-;3184:39;3043:186;-1:-1:-1;;;3043:186:1:o;3234:328::-;3311:6;3319;3327;3380:2;3368:9;3359:7;3355:23;3351:32;3348:52;;;3396:1;3393;3386:12;3348:52;3419:29;3438:9;3419:29;:::i;:::-;3409:39;;3467:38;3501:2;3490:9;3486:18;3467:38;:::i;:::-;3457:48;;3552:2;3541:9;3537:18;3524:32;3514:42;;3234:328;;;;;:::o;3567:171::-;3634:20;;-1:-1:-1;;;;;3683:30:1;;3673:41;;3663:69;;3728:1;3725;3718:12;3743:328;3817:6;3825;3833;3886:2;3874:9;3865:7;3861:23;3857:32;3854:52;;;3902:1;3899;3892:12;3854:52;3925:28;3943:9;3925:28;:::i;:::-;3915:38;;3972:37;4005:2;3994:9;3990:18;3972:37;:::i;:::-;3962:47;;4028:37;4061:2;4050:9;4046:18;4028:37;:::i;:::-;4018:47;;3743:328;;;;;:::o;4265:301::-;4324:6;4377:2;4365:9;4356:7;4352:23;4348:32;4345:52;;;4393:1;4390;4383:12;4345:52;4432:9;4419:23;-1:-1:-1;;;;;4475:5:1;4471:46;4464:5;4461:57;4451:85;;4532:1;4529;4522:12;5240:260;5308:6;5316;5369:2;5357:9;5348:7;5344:23;5340:32;5337:52;;;5385:1;5382;5375:12;5337:52;5408:29;5427:9;5408:29;:::i;:::-;5398:39;;5456:38;5490:2;5479:9;5475:18;5456:38;:::i;:::-;5446:48;;5240:260;;;;;:::o;5505:118::-;5591:5;5584:13;5577:21;5570:5;5567:32;5557:60;;5613:1;5610;5603:12;5557:60;5505:118;:::o;5628:241::-;5684:6;5737:2;5725:9;5716:7;5712:23;5708:32;5705:52;;;5753:1;5750;5743:12;5705:52;5792:9;5779:23;5811:28;5833:5;5811:28;:::i;6547:315::-;6612:6;6620;6673:2;6661:9;6652:7;6648:23;6644:32;6641:52;;;6689:1;6686;6679:12;6641:52;6712:29;6731:9;6712:29;:::i;:::-;6702:39;;6791:2;6780:9;6776:18;6763:32;6804:28;6826:5;6804:28;:::i;:::-;6851:5;6841:15;;;6547:315;;;;;:::o;7191:380::-;7270:1;7266:12;;;;7313;;;7334:61;;7388:4;7380:6;7376:17;7366:27;;7334:61;7441:2;7433:6;7430:14;7410:18;7407:38;7404:161;;7487:10;7482:3;7478:20;7475:1;7468:31;7522:4;7519:1;7512:15;7550:4;7547:1;7540:15;7404:161;;7191:380;;;:::o;7576:356::-;7778:2;7760:21;;;7797:18;;;7790:30;7856:34;7851:2;7836:18;;7829:62;7923:2;7908:18;;7576:356::o;7937:127::-;7998:10;7993:3;7989:20;7986:1;7979:31;8029:4;8026:1;8019:15;8053:4;8050:1;8043:15;8069:168;8142:9;;;8173;;8190:15;;;8184:22;;8170:37;8160:71;;8211:18;;:::i;8242:127::-;8303:10;8298:3;8294:20;8291:1;8284:31;8334:4;8331:1;8324:15;8358:4;8355:1;8348:15;8374:120;8414:1;8440;8430:35;;8445:18;;:::i;:::-;-1:-1:-1;8479:9:1;;8374:120::o;9693:127::-;9754:10;9749:3;9745:20;9742:1;9735:31;9785:4;9782:1;9775:15;9809:4;9806:1;9799:15;9825:336;10027:2;10009:21;;;10066:2;10046:18;;;10039:30;-1:-1:-1;;;10100:2:1;10085:18;;10078:42;10152:2;10137:18;;9825:336::o;10166:180::-;-1:-1:-1;;;;;10271:10:1;;;10283;;;10267:27;;10306:11;;;10303:37;;;10320:18;;:::i;:::-;10303:37;10166:180;;;;:::o;10903:416::-;10992:1;11029:5;10992:1;11043:270;11064:7;11054:8;11051:21;11043:270;;;11123:4;11119:1;11115:6;11111:17;11105:4;11102:27;11099:53;;;11132:18;;:::i;:::-;11182:7;11172:8;11168:22;11165:55;;;11202:16;;;;11165:55;11281:22;;;;11241:15;;;;11043:270;;;11047:3;10903:416;;;;;:::o;11324:806::-;11373:5;11403:8;11393:80;;-1:-1:-1;11444:1:1;11458:5;;11393:80;11492:4;11482:76;;-1:-1:-1;11529:1:1;11543:5;;11482:76;11574:4;11592:1;11587:59;;;;11660:1;11655:130;;;;11567:218;;11587:59;11617:1;11608:10;;11631:5;;;11655:130;11692:3;11682:8;11679:17;11676:43;;;11699:18;;:::i;:::-;-1:-1:-1;;11755:1:1;11741:16;;11770:5;;11567:218;;11869:2;11859:8;11856:16;11850:3;11844:4;11841:13;11837:36;11831:2;11821:8;11818:16;11813:2;11807:4;11804:12;11800:35;11797:77;11794:159;;;-1:-1:-1;11906:19:1;;;11938:5;;11794:159;11985:34;12010:8;12004:4;11985:34;:::i;:::-;12055:6;12051:1;12047:6;12043:19;12034:7;12031:32;12028:58;;;12066:18;;:::i;:::-;12104:20;;11324:806;-1:-1:-1;;;11324:806:1:o;12135:140::-;12193:5;12222:47;12263:4;12253:8;12249:19;12243:4;12222:47;:::i;12838:125::-;12903:9;;;12924:10;;;12921:36;;;12937:18;;:::i;13323:184::-;13393:6;13446:2;13434:9;13425:7;13421:23;13417:32;13414:52;;;13462:1;13459;13452:12;13414:52;-1:-1:-1;13485:16:1;;13323:184;-1:-1:-1;13323:184:1:o;19083:128::-;19150:9;;;19171:11;;;19168:37;;;19185:18;;:::i;19495:274::-;-1:-1:-1;;;;;19633:10:1;;;19645;;;19629:27;19676:20;;;;19567:34;19715:24;;;19705:58;;19743:18;;:::i;:::-;19705:58;;19495:274;;;;:::o;19774:216::-;19814:1;-1:-1:-1;;;;;19901:2:1;19898:1;19894:10;19923:3;19913:37;;19930:18;;:::i;:::-;19968:10;;19964:20;;;;;19774:216;-1:-1:-1;;19774:216:1:o;19995:184::-;-1:-1:-1;;;;;20104:10:1;;;20116;;;20100:27;;20139:11;;;20136:37;;;20153:18;;:::i;21939:245::-;22006:6;22059:2;22047:9;22038:7;22034:23;22030:32;22027:52;;;22075:1;22072;22065:12;22027:52;22107:9;22101:16;22126:28;22148:5;22126:28;:::i;22942:980::-;23204:4;23252:3;23241:9;23237:19;23283:6;23272:9;23265:25;23309:2;23347:6;23342:2;23331:9;23327:18;23320:34;23390:3;23385:2;23374:9;23370:18;23363:31;23414:6;23449;23443:13;23480:6;23472;23465:22;23518:3;23507:9;23503:19;23496:26;;23557:2;23549:6;23545:15;23531:29;;23578:1;23588:195;23602:6;23599:1;23596:13;23588:195;;;23667:13;;-1:-1:-1;;;;;23663:39:1;23651:52;;23758:15;;;;23723:12;;;;23699:1;23617:9;23588:195;;;-1:-1:-1;;;;;;;23839:32:1;;;;23834:2;23819:18;;23812:60;-1:-1:-1;;;23903:3:1;23888:19;23881:35;23800:3;22942:980;-1:-1:-1;;;22942:980:1:o;24334:287::-;24463:3;24501:6;24495:13;24517:66;24576:6;24571:3;24564:4;24556:6;24552:17;24517:66;:::i;:::-;24599:16;;;;;24334:287;-1:-1:-1;;24334:287:1:o

Swarm Source

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