ETH Price: $3,335.92 (+0.33%)

Contract

0xDDBb4F82EA4dF7C07e2EA7BF3764B4008D6d8390
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Apex AI (APEX) (@$0.0003)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve211435702024-11-08 14:38:3549 days ago1731076715IN
Apex AI: Token
0 ETH0.0012441226.69857509
Approve211435172024-11-08 14:27:5949 days ago1731076079IN
Apex AI: Token
0 ETH0.0013270528.47822115
Approve211434902024-11-08 14:22:3549 days ago1731075755IN
Apex AI: Token
0 ETH0.0012666627.18230378
Transfer211434872024-11-08 14:21:5949 days ago1731075719IN
Apex AI: Token
0 ETH0.0012651626.47672432
Transfer211434862024-11-08 14:21:4749 days ago1731075707IN
Apex AI: Token
0 ETH0.0012465426.08704491
Transfer211434852024-11-08 14:21:3549 days ago1731075695IN
Apex AI: Token
0 ETH0.0012747926.67824883
Transfer211434842024-11-08 14:21:2349 days ago1731075683IN
Apex AI: Token
0 ETH0.0012364925.87671881
Transfer211434832024-11-08 14:21:1149 days ago1731075671IN
Apex AI: Token
0 ETH0.0012579626.32596836
Transfer211434822024-11-08 14:20:5949 days ago1731075659IN
Apex AI: Token
0 ETH0.0012160825.44960794
Transfer211434812024-11-08 14:20:4749 days ago1731075647IN
Apex AI: Token
0 ETH0.0012648126.46951041
Transfer211434802024-11-08 14:20:3549 days ago1731075635IN
Apex AI: Token
0 ETH0.0012899726.99604597
Transfer211434792024-11-08 14:20:2349 days ago1731075623IN
Apex AI: Token
0 ETH0.0012403225.95693278
Transfer211434782024-11-08 14:20:1149 days ago1731075611IN
Apex AI: Token
0 ETH0.0012697226.57216208
Transfer211434772024-11-08 14:19:5949 days ago1731075599IN
Apex AI: Token
0 ETH0.0012853726.89968948
Transfer211434762024-11-08 14:19:4749 days ago1731075587IN
Apex AI: Token
0 ETH0.0012994127.19348432
Transfer211434752024-11-08 14:19:3549 days ago1731075575IN
Apex AI: Token
0 ETH0.001301127.22879581
Transfer211434192024-11-08 14:08:2349 days ago1731074903IN
Apex AI: Token
0 ETH0.0011559624.19143551
Transfer211434182024-11-08 14:08:1149 days ago1731074891IN
Apex AI: Token
0 ETH0.001169424.47273912
Transfer211434172024-11-08 14:07:5949 days ago1731074879IN
Apex AI: Token
0 ETH0.0011509124.09174575
Transfer211434162024-11-08 14:07:4749 days ago1731074867IN
Apex AI: Token
0 ETH0.0011685424.45464487
Transfer211434152024-11-08 14:07:3549 days ago1731074855IN
Apex AI: Token
0 ETH0.0011581624.24366841
Transfer211434142024-11-08 14:07:2349 days ago1731074843IN
Apex AI: Token
0 ETH0.0011579524.23921477
Transfer211434132024-11-08 14:07:1149 days ago1731074831IN
Apex AI: Token
0 ETH0.001120823.45572862
Transfer211434122024-11-08 14:06:5949 days ago1731074819IN
Apex AI: Token
0 ETH0.0011397223.85158777
Transfer211434112024-11-08 14:06:4749 days ago1731074807IN
Apex AI: Token
0 ETH0.0011058423.14267496
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
211435742024-11-08 14:39:2349 days ago1731076763
Apex AI: Token
0.00569244 ETH
211435742024-11-08 14:39:2349 days ago1731076763
Apex AI: Token
0.00569244 ETH
211435622024-11-08 14:36:5949 days ago1731076619
Apex AI: Token
0.0299744 ETH
211435622024-11-08 14:36:5949 days ago1731076619
Apex AI: Token
0.0299744 ETH
209418302024-10-11 10:37:5977 days ago1728643079
Apex AI: Token
0.00612449 ETH
209418302024-10-11 10:37:5977 days ago1728643079
Apex AI: Token
0.00612449 ETH
209418002024-10-11 10:31:4777 days ago1728642707
Apex AI: Token
0.00691714 ETH
209418002024-10-11 10:31:4777 days ago1728642707
Apex AI: Token
0.00691714 ETH
208627262024-09-30 9:59:2388 days ago1727690363
Apex AI: Token
0.01413644 ETH
208627262024-09-30 9:59:2388 days ago1727690363
Apex AI: Token
0.01413644 ETH
208627002024-09-30 9:54:1188 days ago1727690051
Apex AI: Token
0.01631068 ETH
208627002024-09-30 9:54:1188 days ago1727690051
Apex AI: Token
0.01631068 ETH
208510972024-09-28 19:02:5989 days ago1727550179
Apex AI: Token
0.00950887 ETH
208510972024-09-28 19:02:5989 days ago1727550179
Apex AI: Token
0.00950887 ETH
208510852024-09-28 19:00:3589 days ago1727550035
Apex AI: Token
0.00825582 ETH
208510852024-09-28 19:00:3589 days ago1727550035
Apex AI: Token
0.00825582 ETH
207270692024-09-11 11:27:59107 days ago1726054079
Apex AI: Token
0.02220731 ETH
207270692024-09-11 11:27:59107 days ago1726054079
Apex AI: Token
0.02220731 ETH
206708152024-09-03 15:01:59115 days ago1725375719
Apex AI: Token
0.03909365 ETH
206708152024-09-03 15:01:59115 days ago1725375719
Apex AI: Token
0.03909365 ETH
206655072024-09-02 21:15:23115 days ago1725311723
Apex AI: Token
0.01792196 ETH
206655072024-09-02 21:15:23115 days ago1725311723
Apex AI: Token
0.01792196 ETH
206443082024-08-30 22:14:47118 days ago1725056087
Apex AI: Token
0.01995519 ETH
206443082024-08-30 22:14:47118 days ago1725056087
Apex AI: Token
0.01995519 ETH
206442862024-08-30 22:10:23118 days ago1725055823
Apex AI: Token
0.01274563 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
APEX

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-28
*/

// SPDX-License-Identifier: MIT

/* 
   X: https://x.com/0xApexAI
   Website: 0xapex.ai 
   Medium: https://medium.com/@0xApexAI
   LinkTree: https://linktr.ee/0xApexAI
 */

pragma solidity 0.8.19;

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 IERC165 {

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IAccessControl {

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

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

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

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

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

    function grantRole(bytes32 role, address account) external;

    function revokeRole(bytes32 role, address account) external;

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

library Math {
    enum Rounding {
        Down, 
        Up, 
        Zero 
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {

        return (a & b) + (a ^ b) / 2;
    }

    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {

        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {

            uint256 prod0; 
            uint256 prod1; 
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            if (prod1 == 0) {

                return prod0 / denominator;
            }

            require(denominator > prod1, "Math: mulDiv overflow");

            uint256 remainder;
            assembly {

                remainder := mulmod(x, y, denominator)

                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            uint256 twos = denominator & (~denominator + 1);
            assembly {

                denominator := div(denominator, twos)

                prod0 := div(prod0, twos)

                twos := add(div(sub(0, twos), twos), 1)
            }

            prod0 |= prod1 * twos;

            uint256 inverse = (3 * denominator) ^ 2;

            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 

            result = prod0 * inverse;
            return result;
        }
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 result = 1 << (log2(a) >> 1);

        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }

    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }

    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
        }
    }

    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
        }
    }
}

library SignedMath {

    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    function average(int256 a, int256 b) internal pure returns (int256) {

        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    function abs(int256 n) internal pure returns (uint256) {
        unchecked {

            return uint256(n >= 0 ? n : -n);
        }
    }
}

library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;

            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;

                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    function toString(int256 value) internal pure returns (string memory) {
        return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value))));
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

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

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }

    function equal(string memory a, string memory b) internal pure returns (bool) {
        return keccak256(bytes(a)) == keccak256(bytes(b));
    }
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

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

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

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

    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

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

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

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

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

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

        _revokeRole(role, account);
    }

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

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

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
}

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

contract APEX is ERC20, AccessControl {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public operationsAddress;

    uint256 public tradingActiveBlock = 0;
    mapping(address => bool) public markedAsSniper;

    bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE");
    bytes32 public constant AUTHENTICATOR_ROLE =
        keccak256("AUTHENTICATOR_ROLE");    

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public flagSnipersEnabled = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    // Modifiers
    modifier onlyManager() {
        require(hasRole(MANAGER_ROLE, msg.sender), "Not a manager");
        _;
    }

    modifier onlyAuthenticators() {
        require(
            hasRole(AUTHENTICATOR_ROLE, msg.sender),
            "Not an authenticator"
        );
        _;
    }

    constructor() payable ERC20("Apex AI", "APEX") {
        address newOwner = msg.sender;  

        _setupRole(MANAGER_ROLE, newOwner); // Assign the manager role to the contract deployer
        _setRoleAdmin(AUTHENTICATOR_ROLE, MANAGER_ROLE); // Assign manager as the administrator of the authenticator role
        grantRole(AUTHENTICATOR_ROLE, newOwner); // Grant the authenticator role to the contract deployer

        uint256 totalSupply = 100 * 1e6 * 1e18; 

        buyOperationsFee = 10;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = 25;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;        

        maxBuyAmount = (totalSupply * 1) / 100; // 1%
        maxSellAmount = (totalSupply * 1) / 100; // 1%
        maxWallet = (totalSupply * 1) / 100; // 1%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        operationsAddress = address(msg.sender);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);

        _createInitialSupply(address(this), totalSupply);     
    }

    receive() external payable {}

    function addAuthenticator(address _authenticator) external onlyManager {
        require(_authenticator != address(0), "Invalid address");
        grantRole(AUTHENTICATOR_ROLE, _authenticator);
    }

    function removeAuthenticator(address _authenticator) external onlyManager {
        require(_authenticator != address(0), "Invalid address");
        revokeRole(AUTHENTICATOR_ROLE, _authenticator);
    }    

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyManager {
        transferDelayEnabled = false;
    }

    function _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyManager {
        if (!isEx) {
            require(
                updAds != lpPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyManager {
        require(
            pair != lpPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }        

    function updateBuyTax(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyManager {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellTax(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyManager {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }    

    function excludeFromFees(address account, bool excluded) public onlyManager {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        } else {
            require(
                !markedAsSniper[from],
                "Snipers cannot transfer tokens"
            );
        }

        if (limitsInEffect) {
            if (to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {    
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 15) {
            contractBalance = swapTokensAtAmount * 15;
        }

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = (ethBalance * tokensForOperations) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success, ) = address(operationsAddress).call{
            value: address(this).balance
        }("");
    }

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyManager returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(
            _token != address(this) || !tradingActive,
            "Can't withdraw native tokens while trading is active"
        );
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function setOperationsAddress(
        address _operationsAddress
    ) external onlyManager {
        require(
            _operationsAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function removeLimits() external onlyManager {
        limitsInEffect = false;
    }

    function restoreLimits() external onlyManager { 
        limitsInEffect = true;
    }

    function flagSniper(address wallet) external onlyAuthenticators {
        require(
            flagSnipersEnabled,
            "Flag sniper functionality disabled forever!"
        );

        require(!markedAsSniper[wallet], "Wallet is already flagged.");
        markedAsSniper[wallet] = true;
    }

    function massFlagSnipers(address[] calldata wallets)
        external onlyAuthenticators
    {
        require(
            flagSnipersEnabled,
            "Flag sniper functionality disabled forever!"
        );        

        for (uint256 i = 0; i < wallets.length; i++) {
            markedAsSniper[wallets[i]] = true;
        }
    }

    function unflagSniper(address wallet) external onlyAuthenticators {
        require(markedAsSniper[wallet], "Wallet is already not marked.");
        markedAsSniper[wallet] = false;
    }        

    function massUnflagSnipers(address[] calldata wallets)
        external onlyAuthenticators
    {
        for (uint256 i = 0; i < wallets.length; i++) {
            markedAsSniper[wallets[i]] = false;
        }
    }    

    function disableFlagSnipersForever() external onlyManager {
        require(
            flagSnipersEnabled,
            "Flag sniper functionality already disabled forever!!"
        );

        flagSnipersEnabled = false;
    }    

    function emergencyETHRecovery() external onlyManager {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }      

    function prepareLaunch() external onlyManager {
        require(!tradingActive, "Trading is already active, cannot relaunch.");     

        address _dexRouter;

        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 11155111) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Sepolia
        } else if (block.chainid == 56) {
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if (block.chainid == 97) {
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if (block.chainid == 42161) {
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);
        
        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );

        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);        

        _excludeFromMaxTransaction(address(dexRouter), true);
        excludeFromFees(address(dexRouter), true);  

        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        require(
            balanceOf(address(this)) > 0,
            "Must have Tokens on contract to launch"
        );           

        _approve(address(this), address(dexRouter), balanceOf(address(this)));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        ); 
    }

    function enableTrading() external onlyAuthenticators {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }      
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"AUTHENTICATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"addAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFlagSnipersForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyETHRecovery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flagSnipersEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markedAsSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massFlagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massUnflagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"removeAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d55600f805463ffffffff191663010000011790556011805460ff1916600117905560076080908152664170657820414960c81b60a052610100604052600460c090815263082a08ab60e31b60e05260036200005f83826200086b565b5060046200006e82826200086b565b503391506200008f905060008051602062004448833981519152826200023d565b620000b960008051602062004468833981519152600080516020620044488339815191526200024d565b620000d4600080516020620044688339815191528262000298565b600a6013819055600060148190556a52b7d2dcc80cd2e400000091620000fb91906200094d565b601255601960168190556000601781905562000117916200094d565b60155560646200012982600162000963565b6200013591906200097d565b60065560646200014782600162000963565b6200015391906200097d565b60075560646200016582600162000963565b6200017191906200097d565b6008556127106200018482600562000963565b6200019091906200097d565b600b55600c80546001600160a01b03191633179055620001b2826001620002c6565b620001bf306001620002c6565b620001ce61dead6001620002c6565b600c54620001e7906001600160a01b03166001620002c6565b620001f482600162000329565b6200020130600162000329565b6200021061dead600162000329565b600c5462000229906001600160a01b0316600162000329565b620002353082620003e5565b505062000aa4565b620002498282620004ca565b5050565b600082815260056020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600082815260056020526040902060010154620002b58162000554565b620002c18383620004ca565b505050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b62000344600080516020620044488339815191523362000563565b620003865760405162461bcd60e51b815260206004820152600d60248201526c2737ba10309036b0b730b3b2b960991b60448201526064015b60405180910390fd5b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200043d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200037d565b80600260008282546200045191906200094d565b90915550506001600160a01b03821660009081526020819052604081208054839290620004809084906200094d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620004d6828262000563565b620002495760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620005103390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b62000560813362000590565b50565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b6200059c828262000563565b6200024957620005ac81620005f4565b620005b983602062000607565b604051602001620005cc929190620009c6565b60408051601f198184030181529082905262461bcd60e51b82526200037d9160040162000a3f565b60606200058a6001600160a01b03831660145b606060006200061883600262000963565b620006259060026200094d565b6001600160401b038111156200063f576200063f620007c7565b6040519080825280601f01601f1916602001820160405280156200066a576020820181803683370190505b509050600360fc1b8160008151811062000688576200068862000a74565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620006ba57620006ba62000a74565b60200101906001600160f81b031916908160001a9053506000620006e084600262000963565b620006ed9060016200094d565b90505b60018111156200076f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062000725576200072562000a74565b1a60f81b8282815181106200073e576200073e62000a74565b60200101906001600160f81b031916908160001a90535060049490941c93620007678162000a8a565b9050620006f0565b508315620007c05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016200037d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007f257607f821691505b6020821081036200081357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c157600081815260208120601f850160051c81016020861015620008425750805b601f850160051c820191505b8181101562000863578281556001016200084e565b505050505050565b81516001600160401b03811115620008875762000887620007c7565b6200089f81620008988454620007dd565b8462000819565b602080601f831160018114620008d75760008415620008be5750858301515b600019600386901b1c1916600185901b17855562000863565b600085815260208120601f198616915b828110156200090857888601518255948401946001909101908401620008e7565b5085821015620009275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808201808211156200058a576200058a62000937565b80820281158282048414176200058a576200058a62000937565b6000826200099b57634e487b7160e01b600052601260045260246000fd5b500490565b60005b83811015620009bd578181015183820152602001620009a3565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000a00816017850160208801620009a0565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000a33816028840160208801620009a0565b01602801949350505050565b602081526000825180602084015262000a60816040850160208701620009a0565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60008162000a9c5762000a9c62000937565b506000190190565b6139948062000ab46000396000f3fe6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c02466681161010d578063e884f260116100a0578063f11a24d31161006f578063f11a24d314610b20578063f637434214610b36578063f8b45b0514610b4c578063fb002c9714610b6257600080fd5b8063e884f26014610ab3578063ea4cfe1214610ac8578063ec87621c14610ae8578063ee40166e14610b0a57600080fd5b8063d85ba063116100dc578063d85ba06314610a21578063d86c9fec14610a37578063dd62ed3e14610a57578063e2f4560514610a9d57600080fd5b8063c024666814610997578063c44a24dd146109b7578063c876d0b9146109e7578063d547741f14610a0157600080fd5b8063a457c2d711610185578063b62496f511610154578063b62496f514610906578063b65c5e8d14610936578063b79c188614610958578063bbc0c7421461097857600080fd5b8063a457c2d714610891578063a9059cbb146108b1578063af4641ed146108d1578063b38d5ef4146108e657600080fd5b806396c58b7c116101c157806396c58b7c146108325780639a7a23d614610847578063a217fddf14610867578063a28e86d31461087c57600080fd5b80638a8c523c146107c857806391d14854146107dd57806395d89b41146107fd5780639699a82d1461081257600080fd5b80634a62bb65116102e25780636a486a8e11610275578063751039fc11610244578063751039fc1461075d5780637571336a146107725780638366e79a1461079257806388e765ff146107b257600080fd5b80636a486a8e146106e75780636ddd1713146106fd5780636e55c13f1461071d57806370a082311461073d57600080fd5b806357bd8bb3116102b157806357bd8bb31461067a5780635a139dd41461069a57806361b6b94f146106b057806366d602ae146106d157600080fd5b80634a62bb65146106155780634be813e61461062f5780634eaa60011461064f5780634f77f6c01461066457600080fd5b8063248a9ca31161035a57806339509351116103295780633950935114610595578063410b2724146105b5578063452ed4f1146105d5578063499b8394146105f557600080fd5b8063248a9ca3146105075780632f2ff15d14610537578063313ce5671461055957806336568abe1461057557600080fd5b806310d5de531161039657806310d5de531461048257806318160ddd146104b25780631a8145bb146104d157806323b872dd146104e757600080fd5b806301ffc9a7146103d357806306fdde03146104085780630758d9241461042a578063095ea7b31461046257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132df565b610b78565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610baf565b6040516103ff919061332d565b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b506103f361047d366004613375565b610c41565b34801561048e57600080fd5b506103f361049d3660046133a1565b601b6020526000908152604090205460ff1681565b3480156104be57600080fd5b506002545b6040519081526020016103ff565b3480156104dd57600080fd5b506104c360195481565b3480156104f357600080fd5b506103f36105023660046133be565b610c57565b34801561051357600080fd5b506104c36105223660046133ff565b60009081526005602052604090206001015490565b34801561054357600080fd5b50610557610552366004613418565b610d06565b005b34801561056557600080fd5b50604051601281526020016103ff565b34801561058157600080fd5b50610557610590366004613418565b610d30565b3480156105a157600080fd5b506103f36105b0366004613375565b610dae565b3480156105c157600080fd5b506105576105d03660046133a1565b610dea565b3480156105e157600080fd5b50600a5461044a906001600160a01b031681565b34801561060157600080fd5b506105576106103660046133a1565b610e81565b34801561062157600080fd5b50600f546103f39060ff1681565b34801561063b57600080fd5b5061055761064a366004613448565b610f64565b34801561065b57600080fd5b5061055761100a565b34801561067057600080fd5b506104c360165481565b34801561068657600080fd5b506105576106953660046133a1565b61108b565b3480156106a657600080fd5b506104c360135481565b3480156106bc57600080fd5b50600f546103f3906301000000900460ff1681565b3480156106dd57600080fd5b506104c360075481565b3480156106f357600080fd5b506104c360155481565b34801561070957600080fd5b50600f546103f39062010000900460ff1681565b34801561072957600080fd5b50610557610738366004613448565b611175565b34801561074957600080fd5b506104c36107583660046133a1565b611244565b34801561076957600080fd5b5061055761125f565b34801561077e57600080fd5b5061055761078d3660046134cb565b61129f565b34801561079e57600080fd5b506103f36107ad3660046134f9565b611371565b3480156107be57600080fd5b506104c360065481565b3480156107d457600080fd5b506105576115b4565b3480156107e957600080fd5b506103f36107f8366004613418565b611680565b34801561080957600080fd5b5061041d6116ab565b34801561081e57600080fd5b5061055761082d3660046133a1565b6116ba565b34801561083e57600080fd5b5061055761174e565b34801561085357600080fd5b506105576108623660046134cb565b611c27565b34801561087357600080fd5b506104c3600081565b34801561088857600080fd5b50610557611d25565b34801561089d57600080fd5b506103f36108ac366004613375565b611d68565b3480156108bd57600080fd5b506103f36108cc366004613375565b611e01565b3480156108dd57600080fd5b50610557611e0e565b3480156108f257600080fd5b50610557610901366004613527565b611ec7565b34801561091257600080fd5b506103f36109213660046133a1565b601c6020526000908152604090205460ff1681565b34801561094257600080fd5b506104c360008051602061393f83398151915281565b34801561096457600080fd5b50610557610973366004613527565b611f64565b34801561098457600080fd5b50600f546103f390610100900460ff1681565b3480156109a357600080fd5b506105576109b23660046134cb565b612001565b3480156109c357600080fd5b506103f36109d23660046133a1565b600e6020526000908152604090205460ff1681565b3480156109f357600080fd5b506011546103f39060ff1681565b348015610a0d57600080fd5b50610557610a1c366004613418565b612094565b348015610a2d57600080fd5b506104c360125481565b348015610a4357600080fd5b50610557610a523660046133a1565b6120b9565b348015610a6357600080fd5b506104c3610a723660046134f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506104c3600b5481565b348015610abf57600080fd5b50610557612176565b348015610ad457600080fd5b50600c5461044a906001600160a01b031681565b348015610af457600080fd5b506104c360008051602061391f83398151915281565b348015610b1657600080fd5b506104c3600d5481565b348015610b2c57600080fd5b506104c360145481565b348015610b4257600080fd5b506104c360175481565b348015610b5857600080fd5b506104c360085481565b348015610b6e57600080fd5b506104c360185481565b60006001600160e01b03198216637965db0b60e01b1480610ba957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610bbe90613549565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90613549565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4e3384846121b6565b50600192915050565b6000610c648484846122da565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cfb85338584036121b6565b506001949350505050565b600082815260056020526040902060010154610d2181612a97565b610d2b8383612aa1565b505050565b6001600160a01b0381163314610da05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ce5565b610daa8282612b27565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4e918590610de5908690613599565b6121b6565b610e0260008051602061391f83398151915233611680565b610e1e5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282610d06565b50565b610e9960008051602061391f83398151915233611680565b610eb55760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610f1a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610ce5565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b610f7c60008051602061393f83398151915233611680565b610f985760405162461bcd60e51b8152600401610ce5906135d3565b60005b81811015610d2b576000600e6000858585818110610fbb57610fbb613601565b9050602002016020810190610fd091906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100281613617565b915050610f9b565b61102260008051602061391f83398151915233611680565b61103e5760405162461bcd60e51b8152600401610ce5906135ac565b604051600090339047908381818185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50505050565b6110a360008051602061393f83398151915233611680565b6110bf5760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166110e85760405162461bcd60e51b8152600401610ce590613630565b6001600160a01b0381166000908152600e602052604090205460ff16156111515760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61118d60008051602061393f83398151915233611680565b6111a95760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166111d25760405162461bcd60e51b8152600401610ce590613630565b60005b81811015610d2b576001600e60008585858181106111f5576111f5613601565b905060200201602081019061120a91906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061123c81613617565b9150506111d5565b6001600160a01b031660009081526020819052604090205490565b61127760008051602061391f83398151915233611680565b6112935760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19169055565b6112b760008051602061391f83398151915233611680565b6112d35760405162461bcd60e51b8152600401610ce5906135ac565b8061134657600a546001600160a01b03908116908316036113465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce5565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600061138b60008051602061391f83398151915233611680565b6113a75760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0383166113fd5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce5565b6001600160a01b0383163014158061141d5750600f54610100900460ff16155b6114865760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f1919061367b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115689190613694565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6115cc60008051602061393f83398151915233611680565b6115e85760405162461bcd60e51b8152600401610ce5906135d3565b600f54610100900460ff16156116405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce5565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610bbe90613549565b6116d260008051602061391f83398151915233611680565b6116ee5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282612094565b61176660008051602061391f83398151915233611680565b6117825760405162461bcd60e51b8152600401610ce5906135ac565b600f54610100900460ff16156117ee5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ce5565b6000466001036118135750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4662aa36a7036118385750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4660380361185b57507310ed43c718714eb63d5aa57b78b54704e256024e6118e1565b4660610361187e575073d99d1c33f9fc3444f8101754abc46c52416550d16118e1565b4661a4b1036118a25750731b02da8cb0d097eb8d57a175b88c7d8b479975066118e1565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610ce5565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e91906136b1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906136b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5591906136b1565b600a80546001600160a01b0319166001600160a01b03929092169182179055611a7f906001612b8e565b600a54611a96906001600160a01b03166001612bf1565b600954611aad906001600160a01b03166001612b8e565b600954611ac4906001600160a01b03166001612001565b60004711611b205760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ce5565b6000611b2b30611244565b11611b875760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ce5565b600954611ba29030906001600160a01b0316610de582611244565b6009546001600160a01b031663f305d7194730611bbe81611244565b60008033426040518863ffffffff1660e01b8152600401611be4969594939291906136ce565b60606040518083038185885af1158015611c02573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110859190613709565b611c3f60008051602061391f83398151915233611680565b611c5b5760405162461bcd60e51b8152600401610ce5906135ac565b600a546001600160a01b0390811690831603611cdf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce5565b611ce98282612bf1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611d3d60008051602061391f83398151915233611680565b611d595760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611dea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce5565b611df733858584036121b6565b5060019392505050565b6000610c4e3384846122da565b611e2660008051602061391f83398151915233611680565b611e425760405162461bcd60e51b8152600401610ce5906135ac565b600f546301000000900460ff16611eb85760405162461bcd60e51b815260206004820152603460248201527f466c616720736e697065722066756e6374696f6e616c69747920616c72656164604482015273792064697361626c656420666f7265766572212160601b6064820152608401610ce5565b600f805463ff00000019169055565b611edf60008051602061391f83398151915233611680565b611efb5760405162461bcd60e51b8152600401610ce5906135ac565b60138290556014819055611f0f8183613599565b6012819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b611f7c60008051602061391f83398151915233611680565b611f985760405162461bcd60e51b8152600401610ce5906135ac565b60168290556017819055611fac8183613599565b6015819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b61201960008051602061391f83398151915233611680565b6120355760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000828152600560205260409020600101546120af81612a97565b610d2b8383612b27565b6120d160008051602061393f83398151915233611680565b6120ed5760405162461bcd60e51b8152600401610ce5906135d3565b6001600160a01b0381166000908152600e602052604090205460ff166121555760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b61218e60008051602061391f83398151915233611680565b6121aa5760405162461bcd60e51b8152600401610ce5906135ac565b6011805460ff19169055565b6001600160a01b0383166122185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b0382166122795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b0382166123265760405162461bcd60e51b8152600401610ce59061377c565b600081116123765760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce5565b600f54610100900460ff1661240e576001600160a01b0383166000908152601a602052604090205460ff16806123c457506001600160a01b0382166000908152601a602052604090205460ff165b6124095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce5565b612477565b6001600160a01b0383166000908152600e602052604090205460ff16156124775760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610ce5565b600f5460ff1615612821576001600160a01b03821661dead148015906124b657506001600160a01b0383166000908152601a602052604090205460ff16155b80156124db57506001600160a01b0382166000908152601a602052604090205460ff16155b156128215760115460ff16156125f4576009546001600160a01b038381169116148015906125175750600a546001600160a01b03838116911614155b156125f4576125276002436137bf565b32600090815260106020526040902054108015612565575061254a6002436137bf565b6001600160a01b038316600090815260106020526040902054105b6125cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce5565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601c602052604090205460ff16801561263557506001600160a01b0382166000908152601b602052604090205460ff16155b156126fc5760065481111561269d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce5565b6008546126a983611244565b6126b39083613599565b11156126f75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b612821565b6001600160a01b0382166000908152601c602052604090205460ff16801561273d57506001600160a01b0383166000908152601b602052604090205460ff16155b156127a7576007548111156126f75760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce5565b6001600160a01b0382166000908152601b602052604090205460ff16612821576008546127d383611244565b6127dd9083613599565b11156128215760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b600061282c30611244565b600b549091508110801590819061284b5750600f5462010000900460ff165b80156128615750600a54600160a01b900460ff16155b801561288557506001600160a01b0384166000908152601c602052604090205460ff165b156128b357600a805460ff60a01b1916600160a01b1790556128a5612c1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601a602052604090205460019060ff16806128f557506001600160a01b0385166000908152601a602052604090205460ff165b156128fe575060005b60008115612a83576001600160a01b0386166000908152601c602052604090205460ff16801561293057506000601554115b156129b85760646015548661294591906137d2565b61294f91906137e9565b90506015546017548261296291906137d2565b61296c91906137e9565b6019600082825461297d9190613599565b909155505060155460165461299290836137d2565b61299c91906137e9565b601860008282546129ad9190613599565b90915550612a659050565b6001600160a01b0387166000908152601c602052604090205460ff1680156129e257506000601254115b15612a65576064601254866129f791906137d2565b612a0191906137e9565b905060125460145482612a1491906137d2565b612a1e91906137e9565b60196000828254612a2f9190613599565b9091555050601254601354612a4490836137d2565b612a4e91906137e9565b60186000828254612a5f9190613599565b90915550505b8015612a7657612a76873083612d81565b612a8081866137bf565b94505b612a8e878787612d81565b50505050505050565b610e7e8133612ed6565b612aab8282611680565b610daa5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ae33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b318282611680565b15610daa5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055611ce98282612b8e565b6000612c2a30611244565b90506000601854601954612c3e9190613599565b9050811580612c4b575080155b15612c54575050565b600b54612c6290600f6137d2565b821115612c7a57600b54612c7790600f6137d2565b91505b60008060028360195486612c8e91906137d2565b612c9891906137e9565b612ca291906137e9565b9050612cb6612cb182866137bf565b612f2f565b60195447908190600090612ccc906002906137e9565b612cd690876137bf565b601854612ce390856137d2565b612ced91906137e9565b9050612cf981836137bf565b6000601981905560185591508315801590612d145750600082115b15612d2357612d238483613089565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b50505050505050505050565b6001600160a01b038316612da75760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b038216612dcd5760405162461bcd60e51b8152600401610ce59061377c565b6001600160a01b03831660009081526020819052604090205481811015612e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e7c908490613599565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ec891815260200190565b60405180910390a350505050565b612ee08282611680565b610daa57612eed8161312a565b612ef883602061313c565b604051602001612f0992919061380b565b60408051601f198184030181529082905262461bcd60e51b8252610ce59160040161332d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6457612f64613601565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe191906136b1565b81600181518110612ff457612ff4613601565b6001600160a01b03928316602091820292909201015260095461301a91309116846121b6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613053908590600090869030904290600401613896565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6009546130a19030906001600160a01b0316846121b6565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906130e09030908790600090819061dead9042906004016136ce565b60606040518083038185885af11580156130fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131239190613709565b5050505050565b6060610ba96001600160a01b03831660145b6060600061314b8360026137d2565b613156906002613599565b67ffffffffffffffff81111561316e5761316e613880565b6040519080825280601f01601f191660200182016040528015613198576020820181803683370190505b509050600360fc1b816000815181106131b3576131b3613601565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131e2576131e2613601565b60200101906001600160f81b031916908160001a90535060006132068460026137d2565b613211906001613599565b90505b6001811115613289576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061324557613245613601565b1a60f81b82828151811061325b5761325b613601565b60200101906001600160f81b031916908160001a90535060049490941c9361328281613907565b9050613214565b5083156132d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce5565b9392505050565b6000602082840312156132f157600080fd5b81356001600160e01b0319811681146132d857600080fd5b60005b8381101561332457818101518382015260200161330c565b50506000910152565b602081526000825180602084015261334c816040850160208701613309565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610e7e57600080fd5b6000806040838503121561338857600080fd5b823561339381613360565b946020939093013593505050565b6000602082840312156133b357600080fd5b81356132d881613360565b6000806000606084860312156133d357600080fd5b83356133de81613360565b925060208401356133ee81613360565b929592945050506040919091013590565b60006020828403121561341157600080fd5b5035919050565b6000806040838503121561342b57600080fd5b82359150602083013561343d81613360565b809150509250929050565b6000806020838503121561345b57600080fd5b823567ffffffffffffffff8082111561347357600080fd5b818501915085601f83011261348757600080fd5b81358181111561349657600080fd5b8660208260051b85010111156134ab57600080fd5b60209290920196919550909350505050565b8015158114610e7e57600080fd5b600080604083850312156134de57600080fd5b82356134e981613360565b9150602083013561343d816134bd565b6000806040838503121561350c57600080fd5b823561351781613360565b9150602083013561343d81613360565b6000806040838503121561353a57600080fd5b50508035926020909101359150565b600181811c9082168061355d57607f821691505b60208210810361357d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba957610ba9613583565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161362957613629613583565b5060010190565b6020808252602b908201527f466c616720736e697065722066756e6374696f6e616c6974792064697361626c60408201526a656420666f72657665722160a81b606082015260800190565b60006020828403121561368d57600080fd5b5051919050565b6000602082840312156136a657600080fd5b81516132d8816134bd565b6000602082840312156136c357600080fd5b81516132d881613360565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561371e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba957610ba9613583565b8082028115828204841417610ba957610ba9613583565b60008261380657634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613843816017850160208801613309565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613874816028840160208801613309565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e65784516001600160a01b0316835293830193918301916001016138c1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008161391657613916613583565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a26469706673582212200504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f64736f6c63430008130033241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c02466681161010d578063e884f260116100a0578063f11a24d31161006f578063f11a24d314610b20578063f637434214610b36578063f8b45b0514610b4c578063fb002c9714610b6257600080fd5b8063e884f26014610ab3578063ea4cfe1214610ac8578063ec87621c14610ae8578063ee40166e14610b0a57600080fd5b8063d85ba063116100dc578063d85ba06314610a21578063d86c9fec14610a37578063dd62ed3e14610a57578063e2f4560514610a9d57600080fd5b8063c024666814610997578063c44a24dd146109b7578063c876d0b9146109e7578063d547741f14610a0157600080fd5b8063a457c2d711610185578063b62496f511610154578063b62496f514610906578063b65c5e8d14610936578063b79c188614610958578063bbc0c7421461097857600080fd5b8063a457c2d714610891578063a9059cbb146108b1578063af4641ed146108d1578063b38d5ef4146108e657600080fd5b806396c58b7c116101c157806396c58b7c146108325780639a7a23d614610847578063a217fddf14610867578063a28e86d31461087c57600080fd5b80638a8c523c146107c857806391d14854146107dd57806395d89b41146107fd5780639699a82d1461081257600080fd5b80634a62bb65116102e25780636a486a8e11610275578063751039fc11610244578063751039fc1461075d5780637571336a146107725780638366e79a1461079257806388e765ff146107b257600080fd5b80636a486a8e146106e75780636ddd1713146106fd5780636e55c13f1461071d57806370a082311461073d57600080fd5b806357bd8bb3116102b157806357bd8bb31461067a5780635a139dd41461069a57806361b6b94f146106b057806366d602ae146106d157600080fd5b80634a62bb65146106155780634be813e61461062f5780634eaa60011461064f5780634f77f6c01461066457600080fd5b8063248a9ca31161035a57806339509351116103295780633950935114610595578063410b2724146105b5578063452ed4f1146105d5578063499b8394146105f557600080fd5b8063248a9ca3146105075780632f2ff15d14610537578063313ce5671461055957806336568abe1461057557600080fd5b806310d5de531161039657806310d5de531461048257806318160ddd146104b25780631a8145bb146104d157806323b872dd146104e757600080fd5b806301ffc9a7146103d357806306fdde03146104085780630758d9241461042a578063095ea7b31461046257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132df565b610b78565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610baf565b6040516103ff919061332d565b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b506103f361047d366004613375565b610c41565b34801561048e57600080fd5b506103f361049d3660046133a1565b601b6020526000908152604090205460ff1681565b3480156104be57600080fd5b506002545b6040519081526020016103ff565b3480156104dd57600080fd5b506104c360195481565b3480156104f357600080fd5b506103f36105023660046133be565b610c57565b34801561051357600080fd5b506104c36105223660046133ff565b60009081526005602052604090206001015490565b34801561054357600080fd5b50610557610552366004613418565b610d06565b005b34801561056557600080fd5b50604051601281526020016103ff565b34801561058157600080fd5b50610557610590366004613418565b610d30565b3480156105a157600080fd5b506103f36105b0366004613375565b610dae565b3480156105c157600080fd5b506105576105d03660046133a1565b610dea565b3480156105e157600080fd5b50600a5461044a906001600160a01b031681565b34801561060157600080fd5b506105576106103660046133a1565b610e81565b34801561062157600080fd5b50600f546103f39060ff1681565b34801561063b57600080fd5b5061055761064a366004613448565b610f64565b34801561065b57600080fd5b5061055761100a565b34801561067057600080fd5b506104c360165481565b34801561068657600080fd5b506105576106953660046133a1565b61108b565b3480156106a657600080fd5b506104c360135481565b3480156106bc57600080fd5b50600f546103f3906301000000900460ff1681565b3480156106dd57600080fd5b506104c360075481565b3480156106f357600080fd5b506104c360155481565b34801561070957600080fd5b50600f546103f39062010000900460ff1681565b34801561072957600080fd5b50610557610738366004613448565b611175565b34801561074957600080fd5b506104c36107583660046133a1565b611244565b34801561076957600080fd5b5061055761125f565b34801561077e57600080fd5b5061055761078d3660046134cb565b61129f565b34801561079e57600080fd5b506103f36107ad3660046134f9565b611371565b3480156107be57600080fd5b506104c360065481565b3480156107d457600080fd5b506105576115b4565b3480156107e957600080fd5b506103f36107f8366004613418565b611680565b34801561080957600080fd5b5061041d6116ab565b34801561081e57600080fd5b5061055761082d3660046133a1565b6116ba565b34801561083e57600080fd5b5061055761174e565b34801561085357600080fd5b506105576108623660046134cb565b611c27565b34801561087357600080fd5b506104c3600081565b34801561088857600080fd5b50610557611d25565b34801561089d57600080fd5b506103f36108ac366004613375565b611d68565b3480156108bd57600080fd5b506103f36108cc366004613375565b611e01565b3480156108dd57600080fd5b50610557611e0e565b3480156108f257600080fd5b50610557610901366004613527565b611ec7565b34801561091257600080fd5b506103f36109213660046133a1565b601c6020526000908152604090205460ff1681565b34801561094257600080fd5b506104c360008051602061393f83398151915281565b34801561096457600080fd5b50610557610973366004613527565b611f64565b34801561098457600080fd5b50600f546103f390610100900460ff1681565b3480156109a357600080fd5b506105576109b23660046134cb565b612001565b3480156109c357600080fd5b506103f36109d23660046133a1565b600e6020526000908152604090205460ff1681565b3480156109f357600080fd5b506011546103f39060ff1681565b348015610a0d57600080fd5b50610557610a1c366004613418565b612094565b348015610a2d57600080fd5b506104c360125481565b348015610a4357600080fd5b50610557610a523660046133a1565b6120b9565b348015610a6357600080fd5b506104c3610a723660046134f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506104c3600b5481565b348015610abf57600080fd5b50610557612176565b348015610ad457600080fd5b50600c5461044a906001600160a01b031681565b348015610af457600080fd5b506104c360008051602061391f83398151915281565b348015610b1657600080fd5b506104c3600d5481565b348015610b2c57600080fd5b506104c360145481565b348015610b4257600080fd5b506104c360175481565b348015610b5857600080fd5b506104c360085481565b348015610b6e57600080fd5b506104c360185481565b60006001600160e01b03198216637965db0b60e01b1480610ba957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610bbe90613549565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90613549565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4e3384846121b6565b50600192915050565b6000610c648484846122da565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cfb85338584036121b6565b506001949350505050565b600082815260056020526040902060010154610d2181612a97565b610d2b8383612aa1565b505050565b6001600160a01b0381163314610da05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ce5565b610daa8282612b27565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4e918590610de5908690613599565b6121b6565b610e0260008051602061391f83398151915233611680565b610e1e5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282610d06565b50565b610e9960008051602061391f83398151915233611680565b610eb55760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610f1a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610ce5565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b610f7c60008051602061393f83398151915233611680565b610f985760405162461bcd60e51b8152600401610ce5906135d3565b60005b81811015610d2b576000600e6000858585818110610fbb57610fbb613601565b9050602002016020810190610fd091906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100281613617565b915050610f9b565b61102260008051602061391f83398151915233611680565b61103e5760405162461bcd60e51b8152600401610ce5906135ac565b604051600090339047908381818185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50505050565b6110a360008051602061393f83398151915233611680565b6110bf5760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166110e85760405162461bcd60e51b8152600401610ce590613630565b6001600160a01b0381166000908152600e602052604090205460ff16156111515760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61118d60008051602061393f83398151915233611680565b6111a95760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166111d25760405162461bcd60e51b8152600401610ce590613630565b60005b81811015610d2b576001600e60008585858181106111f5576111f5613601565b905060200201602081019061120a91906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061123c81613617565b9150506111d5565b6001600160a01b031660009081526020819052604090205490565b61127760008051602061391f83398151915233611680565b6112935760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19169055565b6112b760008051602061391f83398151915233611680565b6112d35760405162461bcd60e51b8152600401610ce5906135ac565b8061134657600a546001600160a01b03908116908316036113465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce5565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600061138b60008051602061391f83398151915233611680565b6113a75760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0383166113fd5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce5565b6001600160a01b0383163014158061141d5750600f54610100900460ff16155b6114865760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f1919061367b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115689190613694565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6115cc60008051602061393f83398151915233611680565b6115e85760405162461bcd60e51b8152600401610ce5906135d3565b600f54610100900460ff16156116405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce5565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610bbe90613549565b6116d260008051602061391f83398151915233611680565b6116ee5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282612094565b61176660008051602061391f83398151915233611680565b6117825760405162461bcd60e51b8152600401610ce5906135ac565b600f54610100900460ff16156117ee5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ce5565b6000466001036118135750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4662aa36a7036118385750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4660380361185b57507310ed43c718714eb63d5aa57b78b54704e256024e6118e1565b4660610361187e575073d99d1c33f9fc3444f8101754abc46c52416550d16118e1565b4661a4b1036118a25750731b02da8cb0d097eb8d57a175b88c7d8b479975066118e1565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610ce5565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e91906136b1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906136b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5591906136b1565b600a80546001600160a01b0319166001600160a01b03929092169182179055611a7f906001612b8e565b600a54611a96906001600160a01b03166001612bf1565b600954611aad906001600160a01b03166001612b8e565b600954611ac4906001600160a01b03166001612001565b60004711611b205760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ce5565b6000611b2b30611244565b11611b875760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ce5565b600954611ba29030906001600160a01b0316610de582611244565b6009546001600160a01b031663f305d7194730611bbe81611244565b60008033426040518863ffffffff1660e01b8152600401611be4969594939291906136ce565b60606040518083038185885af1158015611c02573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110859190613709565b611c3f60008051602061391f83398151915233611680565b611c5b5760405162461bcd60e51b8152600401610ce5906135ac565b600a546001600160a01b0390811690831603611cdf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce5565b611ce98282612bf1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611d3d60008051602061391f83398151915233611680565b611d595760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611dea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce5565b611df733858584036121b6565b5060019392505050565b6000610c4e3384846122da565b611e2660008051602061391f83398151915233611680565b611e425760405162461bcd60e51b8152600401610ce5906135ac565b600f546301000000900460ff16611eb85760405162461bcd60e51b815260206004820152603460248201527f466c616720736e697065722066756e6374696f6e616c69747920616c72656164604482015273792064697361626c656420666f7265766572212160601b6064820152608401610ce5565b600f805463ff00000019169055565b611edf60008051602061391f83398151915233611680565b611efb5760405162461bcd60e51b8152600401610ce5906135ac565b60138290556014819055611f0f8183613599565b6012819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b611f7c60008051602061391f83398151915233611680565b611f985760405162461bcd60e51b8152600401610ce5906135ac565b60168290556017819055611fac8183613599565b6015819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b61201960008051602061391f83398151915233611680565b6120355760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000828152600560205260409020600101546120af81612a97565b610d2b8383612b27565b6120d160008051602061393f83398151915233611680565b6120ed5760405162461bcd60e51b8152600401610ce5906135d3565b6001600160a01b0381166000908152600e602052604090205460ff166121555760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b61218e60008051602061391f83398151915233611680565b6121aa5760405162461bcd60e51b8152600401610ce5906135ac565b6011805460ff19169055565b6001600160a01b0383166122185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b0382166122795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b0382166123265760405162461bcd60e51b8152600401610ce59061377c565b600081116123765760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce5565b600f54610100900460ff1661240e576001600160a01b0383166000908152601a602052604090205460ff16806123c457506001600160a01b0382166000908152601a602052604090205460ff165b6124095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce5565b612477565b6001600160a01b0383166000908152600e602052604090205460ff16156124775760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610ce5565b600f5460ff1615612821576001600160a01b03821661dead148015906124b657506001600160a01b0383166000908152601a602052604090205460ff16155b80156124db57506001600160a01b0382166000908152601a602052604090205460ff16155b156128215760115460ff16156125f4576009546001600160a01b038381169116148015906125175750600a546001600160a01b03838116911614155b156125f4576125276002436137bf565b32600090815260106020526040902054108015612565575061254a6002436137bf565b6001600160a01b038316600090815260106020526040902054105b6125cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce5565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601c602052604090205460ff16801561263557506001600160a01b0382166000908152601b602052604090205460ff16155b156126fc5760065481111561269d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce5565b6008546126a983611244565b6126b39083613599565b11156126f75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b612821565b6001600160a01b0382166000908152601c602052604090205460ff16801561273d57506001600160a01b0383166000908152601b602052604090205460ff16155b156127a7576007548111156126f75760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce5565b6001600160a01b0382166000908152601b602052604090205460ff16612821576008546127d383611244565b6127dd9083613599565b11156128215760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b600061282c30611244565b600b549091508110801590819061284b5750600f5462010000900460ff165b80156128615750600a54600160a01b900460ff16155b801561288557506001600160a01b0384166000908152601c602052604090205460ff165b156128b357600a805460ff60a01b1916600160a01b1790556128a5612c1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601a602052604090205460019060ff16806128f557506001600160a01b0385166000908152601a602052604090205460ff165b156128fe575060005b60008115612a83576001600160a01b0386166000908152601c602052604090205460ff16801561293057506000601554115b156129b85760646015548661294591906137d2565b61294f91906137e9565b90506015546017548261296291906137d2565b61296c91906137e9565b6019600082825461297d9190613599565b909155505060155460165461299290836137d2565b61299c91906137e9565b601860008282546129ad9190613599565b90915550612a659050565b6001600160a01b0387166000908152601c602052604090205460ff1680156129e257506000601254115b15612a65576064601254866129f791906137d2565b612a0191906137e9565b905060125460145482612a1491906137d2565b612a1e91906137e9565b60196000828254612a2f9190613599565b9091555050601254601354612a4490836137d2565b612a4e91906137e9565b60186000828254612a5f9190613599565b90915550505b8015612a7657612a76873083612d81565b612a8081866137bf565b94505b612a8e878787612d81565b50505050505050565b610e7e8133612ed6565b612aab8282611680565b610daa5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ae33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b318282611680565b15610daa5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055611ce98282612b8e565b6000612c2a30611244565b90506000601854601954612c3e9190613599565b9050811580612c4b575080155b15612c54575050565b600b54612c6290600f6137d2565b821115612c7a57600b54612c7790600f6137d2565b91505b60008060028360195486612c8e91906137d2565b612c9891906137e9565b612ca291906137e9565b9050612cb6612cb182866137bf565b612f2f565b60195447908190600090612ccc906002906137e9565b612cd690876137bf565b601854612ce390856137d2565b612ced91906137e9565b9050612cf981836137bf565b6000601981905560185591508315801590612d145750600082115b15612d2357612d238483613089565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b50505050505050505050565b6001600160a01b038316612da75760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b038216612dcd5760405162461bcd60e51b8152600401610ce59061377c565b6001600160a01b03831660009081526020819052604090205481811015612e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e7c908490613599565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ec891815260200190565b60405180910390a350505050565b612ee08282611680565b610daa57612eed8161312a565b612ef883602061313c565b604051602001612f0992919061380b565b60408051601f198184030181529082905262461bcd60e51b8252610ce59160040161332d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6457612f64613601565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe191906136b1565b81600181518110612ff457612ff4613601565b6001600160a01b03928316602091820292909201015260095461301a91309116846121b6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613053908590600090869030904290600401613896565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6009546130a19030906001600160a01b0316846121b6565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906130e09030908790600090819061dead9042906004016136ce565b60606040518083038185885af11580156130fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131239190613709565b5050505050565b6060610ba96001600160a01b03831660145b6060600061314b8360026137d2565b613156906002613599565b67ffffffffffffffff81111561316e5761316e613880565b6040519080825280601f01601f191660200182016040528015613198576020820181803683370190505b509050600360fc1b816000815181106131b3576131b3613601565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131e2576131e2613601565b60200101906001600160f81b031916908160001a90535060006132068460026137d2565b613211906001613599565b90505b6001811115613289576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061324557613245613601565b1a60f81b82828151811061325b5761325b613601565b60200101906001600160f81b031916908160001a90535060049490941c9361328281613907565b9050613214565b5083156132d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce5565b9392505050565b6000602082840312156132f157600080fd5b81356001600160e01b0319811681146132d857600080fd5b60005b8381101561332457818101518382015260200161330c565b50506000910152565b602081526000825180602084015261334c816040850160208701613309565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610e7e57600080fd5b6000806040838503121561338857600080fd5b823561339381613360565b946020939093013593505050565b6000602082840312156133b357600080fd5b81356132d881613360565b6000806000606084860312156133d357600080fd5b83356133de81613360565b925060208401356133ee81613360565b929592945050506040919091013590565b60006020828403121561341157600080fd5b5035919050565b6000806040838503121561342b57600080fd5b82359150602083013561343d81613360565b809150509250929050565b6000806020838503121561345b57600080fd5b823567ffffffffffffffff8082111561347357600080fd5b818501915085601f83011261348757600080fd5b81358181111561349657600080fd5b8660208260051b85010111156134ab57600080fd5b60209290920196919550909350505050565b8015158114610e7e57600080fd5b600080604083850312156134de57600080fd5b82356134e981613360565b9150602083013561343d816134bd565b6000806040838503121561350c57600080fd5b823561351781613360565b9150602083013561343d81613360565b6000806040838503121561353a57600080fd5b50508035926020909101359150565b600181811c9082168061355d57607f821691505b60208210810361357d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba957610ba9613583565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161362957613629613583565b5060010190565b6020808252602b908201527f466c616720736e697065722066756e6374696f6e616c6974792064697361626c60408201526a656420666f72657665722160a81b606082015260800190565b60006020828403121561368d57600080fd5b5051919050565b6000602082840312156136a657600080fd5b81516132d8816134bd565b6000602082840312156136c357600080fd5b81516132d881613360565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561371e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba957610ba9613583565b8082028115828204841417610ba957610ba9613583565b60008261380657634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613843816017850160208801613309565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613874816028840160208801613309565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e65784516001600160a01b0316835293830193918301916001016138c1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008161391657613916613583565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a26469706673582212200504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f64736f6c63430008130033

Deployed Bytecode Sourcemap

20597:18323:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11244:204;;;;;;;;;;-1:-1:-1;11244:204:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;11244:204:0;;;;;;;;15216:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20744:27::-;;;;;;;;;;-1:-1:-1;20744:27:0;;;;-1:-1:-1;;;;;20744:27:0;;;;;;-1:-1:-1;;;;;1336:32:1;;;1318:51;;1306:2;1291:18;20744:27:0;1153:222:1;16196:194:0;;;;;;;;;;-1:-1:-1;16196:194:0;;;;;:::i;:::-;;:::i;21835:63::-;;;;;;;;;;-1:-1:-1;21835:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15537:108;;;;;;;;;;-1:-1:-1;15625:12:0;;15537:108;;;2234:25:1;;;2222:2;2207:18;15537:108:0;2088:177:1;21734:33:0;;;;;;;;;;;;;;;;16398:529;;;;;;;;;;-1:-1:-1;16398:529:0;;;;;:::i;:::-;;:::i;12224:131::-;;;;;;;;;;-1:-1:-1;12224:131:0;;;;;:::i;:::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;;12224:131;12363:147;;;;;;;;;;-1:-1:-1;12363:147:0;;;;;:::i;:::-;;:::i;:::-;;15436:93;;;;;;;;;;-1:-1:-1;15436:93:0;;15519:2;3560:36:1;;3548:2;3533:18;15436:93:0;3418:184:1;12675:218:0;;;;;;;;;;-1:-1:-1;12675:218:0;;;;;:::i;:::-;;:::i;16935:290::-;;;;;;;;;;-1:-1:-1;16935:290:0;;;;;:::i;:::-;;:::i;24492:202::-;;;;;;;;;;-1:-1:-1;24492:202:0;;;;;:::i;:::-;;:::i;20778:21::-;;;;;;;;;;-1:-1:-1;20778:21:0;;;;-1:-1:-1;;;;;20778:21:0;;;34490:352;;;;;;;;;;-1:-1:-1;34490:352:0;;;;;:::i;:::-;;:::i;21185:33::-;;;;;;;;;;-1:-1:-1;21185:33:0;;;;;;;;35920:221;;;;;;;;;;-1:-1:-1;35920:221:0;;;;;:::i;:::-;;:::i;36401:191::-;;;;;;;;;;;;;:::i;21614:32::-;;;;;;;;;;;;;;;;35039:309;;;;;;;;;;-1:-1:-1;35039:309:0;;;;;:::i;:::-;;:::i;21502:31::-;;;;;;;;;;;;;;;;21303:37;;;;;;;;;;-1:-1:-1;21303:37:0;;;;;;;;;;;20676:28;;;;;;;;;;;;;;;;21579;;;;;;;;;;;;;;;;21265:31;;;;;;;;;;-1:-1:-1;21265:31:0;;;;;;;;;;;35356:350;;;;;;;;;;-1:-1:-1;35356:350:0;;;;;:::i;:::-;;:::i;15653:143::-;;;;;;;;;;-1:-1:-1;15653:143:0;;;;;:::i;:::-;;:::i;34850:86::-;;;;;;;;;;;;;:::i;25321:338::-;;;;;;;;;;-1:-1:-1;25321:338:0;;;;;:::i;:::-;;:::i;33920:562::-;;;;;;;;;;-1:-1:-1;33920:562:0;;;;;:::i;:::-;;:::i;20642:27::-;;;;;;;;;;;;;;;;38653:258;;;;;;;;;;;;;:::i;11456:147::-;;;;;;;;;;-1:-1:-1;11456:147:0;;;;;:::i;:::-;;:::i;15324:104::-;;;;;;;;;;;;;:::i;24702:206::-;;;;;;;;;;-1:-1:-1;24702:206:0;;;;;:::i;:::-;;:::i;36606:2039::-;;;;;;;;;;;;;:::i;25911:357::-;;;;;;;;;;-1:-1:-1;25911:357:0;;;;;:::i;:::-;;:::i;11099:49::-;;;;;;;;;;-1:-1:-1;11099:49:0;11144:4;11099:49;;34944:87;;;;;;;;;;;;;:::i;17233:475::-;;;;;;;;;;-1:-1:-1;17233:475:0;;;;;:::i;:::-;;:::i;15804:200::-;;;;;;;;;;-1:-1:-1;15804:200:0;;;;;:::i;:::-;;:::i;36153:236::-;;;;;;;;;;;;;:::i;26284:340::-;;;;;;;;;;-1:-1:-1;26284:340:0;;;;;:::i;:::-;;:::i;21905:57::-;;;;;;;;;;-1:-1:-1;21905:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21087:85;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21087:85:0;;26632:347;;;;;;;;;;-1:-1:-1;26632:347:0;;;;;:::i;:::-;;:::i;21225:33::-;;;;;;;;;;-1:-1:-1;21225:33:0;;;;;;;;;;;26991:184;;;;;;;;;;-1:-1:-1;26991:184:0;;;;;:::i;:::-;;:::i;20961:46::-;;;;;;;;;;-1:-1:-1;20961:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21420:39;;;;;;;;;;-1:-1:-1;21420:39:0;;;;;;;;12518:149;;;;;;;;;;-1:-1:-1;12518:149:0;;;;;:::i;:::-;;:::i;21468:27::-;;;;;;;;;;;;;;;;35714:190;;;;;;;;;;-1:-1:-1;35714:190:0;;;;;:::i;:::-;;:::i;16012:176::-;;;;;;;;;;-1:-1:-1;16012:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;16153:18:0;;;16126:7;16153:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16012:176;20836:33;;;;;;;;;;;;;;;;24973:100;;;;;;;;;;;;;:::i;20876:32::-;;;;;;;;;;-1:-1:-1;20876:32:0;;;;-1:-1:-1;;;;;20876:32:0;;;21016:64;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21016:64:0;;20917:37;;;;;;;;;;;;;;;;21540:30;;;;;;;;;;;;;;;;21653:31;;;;;;;;;;;;;;;;20711:24;;;;;;;;;;;;;;;;21693:34;;;;;;;;;;;;;;;;11244:204;11329:4;-1:-1:-1;;;;;;11353:47:0;;-1:-1:-1;;;11353:47:0;;:87;;-1:-1:-1;;;;;;;;;;855:40:0;;;11404:36;11346:94;11244:204;-1:-1:-1;;11244:204:0:o;15216:100::-;15270:13;15303:5;15296:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15216:100;:::o;16196:194::-;16304:4;16321:39;323:10;16344:7;16353:6;16321:8;:39::i;:::-;-1:-1:-1;16378:4:0;16196:194;;;;:::o;16398:529::-;16538:4;16555:36;16565:6;16573:9;16584:6;16555:9;:36::i;:::-;-1:-1:-1;;;;;16631:19:0;;16604:24;16631:19;;;:11;:19;;;;;;;;323:10;16631:33;;;;;;;;16697:26;;;;16675:116;;;;-1:-1:-1;;;16675:116:0;;6178:2:1;16675:116:0;;;6160:21:1;6217:2;6197:18;;;6190:30;6256:34;6236:18;;;6229:62;-1:-1:-1;;;6307:18:1;;;6300:38;6355:19;;16675:116:0;;;;;;;;;16827:57;16836:6;323:10;16877:6;16858:16;:25;16827:8;:57::i;:::-;-1:-1:-1;16915:4:0;;16398:529;-1:-1:-1;;;;16398:529:0:o;12363:147::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;11200:16;11211:4;11200:10;:16::i;:::-;12477:25:::1;12488:4;12494:7;12477:10;:25::i;:::-;12363:147:::0;;;:::o;12675:218::-;-1:-1:-1;;;;;12771:23:0;;323:10;12771:23;12763:83;;;;-1:-1:-1;;;12763:83:0;;6587:2:1;12763:83:0;;;6569:21:1;6626:2;6606:18;;;6599:30;6665:34;6645:18;;;6638:62;-1:-1:-1;;;6716:18:1;;;6709:45;6771:19;;12763:83:0;6385:411:1;12763:83:0;12859:26;12871:4;12877:7;12859:11;:26::i;:::-;12675:218;;:::o;16935:290::-;323:10;17048:4;17137:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17137:34:0;;;;;;;;;;17048:4;;17065:130;;17115:7;;17137:47;;17174:10;;17137:47;:::i;:::-;17065:8;:130::i;24492:202::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24582:28:0;::::1;24574:56;;;::::0;-1:-1:-1;;;24574:56:0;;7607:2:1;24574:56:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;-1:-1:-1;;;7665:18:1;;;7658:45;7720:18;;24574:56:0::1;7405:339:1::0;24574:56:0::1;24641:45;-1:-1:-1::0;;;;;;;;;;;24671:14:0::1;24641:9;:45::i;:::-;24492:202:::0;:::o;34490:352::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34618:32:0;::::1;34596:120;;;::::0;-1:-1:-1;;;34596:120:0;;7951:2:1;34596:120:0::1;::::0;::::1;7933:21:1::0;7990:2;7970:18;;;7963:30;8029:34;8009:18;;;8002:62;-1:-1:-1;;;8080:18:1;;;8073:36;8126:19;;34596:120:0::1;7749:402:1::0;34596:120:0::1;34727:17;:47:::0;;-1:-1:-1;;;;;;34727:47:0::1;-1:-1:-1::0;;;;;34727:47:0;::::1;::::0;;::::1;::::0;;;34790:44:::1;::::0;::::1;::::0;-1:-1:-1;;34790:44:0::1;34490:352:::0;:::o;35920:221::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;36033:9:::1;36028:106;36048:18:::0;;::::1;36028:106;;;36117:5;36088:14;:26;36103:7;;36111:1;36103:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36088:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36088:26:0;:34;;-1:-1:-1;;36088:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36068:3;::::1;::::0;::::1;:::i;:::-;;;;36028:106;;36401:191:::0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36502:82:::1;::::0;36465:12:::1;::::0;36510:10:::1;::::0;36534:21:::1;::::0;36465:12;36502:82;36465:12;36502:82;36534:21;36510:10;36502:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;36401:191:0:o;35039:309::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;35136:18:::1;::::0;;;::::1;;;35114:111;;;;-1:-1:-1::0;;;35114:111:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35247:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;35246:23;35238:62;;;::::0;-1:-1:-1;;;35238:62:0;;9601:2:1;35238:62:0::1;::::0;::::1;9583:21:1::0;9640:2;9620:18;;;9613:30;9679:28;9659:18;;;9652:56;9725:18;;35238:62:0::1;9399:350:1::0;35238:62:0::1;-1:-1:-1::0;;;;;35311:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;35311:29:0::1;35336:4;35311:29;::::0;;35039:309::o;35356:350::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;35484:18:::1;::::0;;;::::1;;;35462:111;;;;-1:-1:-1::0;;;35462:111:0::1;;;;;;;:::i;:::-;35599:9;35594:105;35614:18:::0;;::::1;35594:105;;;35683:4;35654:14;:26;35669:7;;35677:1;35669:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35654:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35654:26:0;:33;;-1:-1:-1;;35654:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35634:3;::::1;::::0;::::1;:::i;:::-;;;;35594:105;;15653:143:::0;-1:-1:-1;;;;;15770:18:0;15743:7;15770:18;;;;;;;;;;;;15653:143::o;34850:86::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;34906:14:::1;:22:::0;;-1:-1:-1;;34906:22:0::1;::::0;;34850:86::o;25321:338::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;25445:4:::1;25440:155;;25502:6;::::0;-1:-1:-1;;;;;25502:6:0;;::::1;25492:16:::0;;::::1;::::0;25466:117:::1;;;::::0;-1:-1:-1;;;25466:117:0;;9956:2:1;25466:117:0::1;::::0;::::1;9938:21:1::0;9995:2;9975:18;;;9968:30;10034:34;10014:18;;;10007:62;-1:-1:-1;;;10085:18:1;;;10078:37;10132:19;;25466:117:0::1;9754:403:1::0;25466:117:0::1;-1:-1:-1::0;;;;;25605:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25605:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25321:338::o;33920:562::-;34034:10;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34065:20:0;::::1;34057:59;;;::::0;-1:-1:-1;;;34057:59:0;;10364:2:1;34057:59:0::1;::::0;::::1;10346:21:1::0;10403:2;10383:18;;;10376:30;10442:28;10422:18;;;10415:56;10488:18;;34057:59:0::1;10162:350:1::0;34057:59:0::1;-1:-1:-1::0;;;;;34149:23:0;::::1;34167:4;34149:23;;::::0;:41:::1;;-1:-1:-1::0;34177:13:0::1;::::0;::::1;::::0;::::1;;;34176:14;34149:41;34127:143;;;::::0;-1:-1:-1;;;34127:143:0;;10719:2:1;34127:143:0::1;::::0;::::1;10701:21:1::0;10758:2;10738:18;;;10731:30;10797:34;10777:18;;;10770:62;-1:-1:-1;;;10848:18:1;;;10841:50;10908:19;;34127:143:0::1;10517:416:1::0;34127:143:0::1;34308:39;::::0;-1:-1:-1;;;34308:39:0;;34341:4:::1;34308:39;::::0;::::1;1318:51:1::0;34281:24:0::1;::::0;-1:-1:-1;;;;;34308:24:0;::::1;::::0;::::1;::::0;1291:18:1;;34308:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34366:46;::::0;-1:-1:-1;;;34366:46:0;;-1:-1:-1;;;;;11319:32:1;;;34366:46:0::1;::::0;::::1;11301:51:1::0;11368:18;;;11361:34;;;34281:66:0;;-1:-1:-1;34366:23:0;;::::1;::::0;::::1;::::0;11274:18:1;;34366:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34428;::::0;;-1:-1:-1;;;;;11319:32:1;;11301:51;;11383:2;11368:18;;11361:34;;;34358:54:0;;-1:-1:-1;34428:46:0::1;::::0;11274:18:1;34428:46:0::1;;;;;;;34046:436;33920:562:::0;;;;:::o;38653:258::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;38726:13:::1;::::0;::::1;::::0;::::1;;;38725:14;38717:50;;;::::0;-1:-1:-1;;;38717:50:0;;11858:2:1;38717:50:0::1;::::0;::::1;11840:21:1::0;11897:2;11877:18;;;11870:30;11936:25;11916:18;;;11909:53;11979:18;;38717:50:0::1;11656:347:1::0;38717:50:0::1;38778:13;:20:::0;;-1:-1:-1;;38809:18:0;;;;;38859:12:::1;38838:18;:33:::0;38887:16:::1;::::0;::::1;::::0;-1:-1:-1;;38887:16:0::1;38653:258::o:0;11456:147::-;11542:4;11566:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;11566:29:0;;;;;;;;;;;;;;;11456:147::o;15324:104::-;15380:13;15413:7;15406:14;;;;;:::i;24702:206::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24795:28:0;::::1;24787:56;;;::::0;-1:-1:-1;;;24787:56:0;;7607:2:1;24787:56:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;-1:-1:-1;;;7665:18:1;;;7658:45;7720:18;;24787:56:0::1;7405:339:1::0;24787:56:0::1;24854:46;-1:-1:-1::0;;;;;;;;;;;24885:14:0::1;24854:10;:46::i;36606:2039::-:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36672:13:::1;::::0;::::1;::::0;::::1;;;36671:14;36663:70;;;::::0;-1:-1:-1;;;36663:70:0;;12210:2:1;36663:70:0::1;::::0;::::1;12192:21:1::0;12249:2;12229:18;;;12222:30;12288:34;12268:18;;;12261:62;-1:-1:-1;;;12339:18:1;;;12332:41;12390:19;;36663:70:0::1;12008:407:1::0;36663:70:0::1;36751:18;36786:13;36803:1;36786:18:::0;36782:730:::1;;-1:-1:-1::0;36834:42:0::1;36782:730;;;36917:13;36934:8;36917:25:::0;36913:599:::1;;-1:-1:-1::0;36972:42:0::1;36913:599;;;37052:13;37069:2;37052:19:::0;37048:464:::1;;-1:-1:-1::0;37101:42:0::1;37048:464;;;37186:13;37203:2;37186:19:::0;37182:330:::1;;-1:-1:-1::0;37235:42:0::1;37182:330;;;37320:13;37337:5;37320:22:::0;37316:196:::1;;-1:-1:-1::0;37372:42:0::1;37316:196;;;37470:30;::::0;-1:-1:-1;;;37470:30:0;;12622:2:1;37470:30:0::1;::::0;::::1;12604:21:1::0;12661:2;12641:18;;;12634:30;-1:-1:-1;;;12680:18:1;;;12673:50;12740:18;;37470:30:0::1;12420:344:1::0;37316:196:0::1;37554:9;:34:::0;;-1:-1:-1;;;;;;37554:34:0::1;-1:-1:-1::0;;;;;37554:34:0;::::1;::::0;;::::1;::::0;;;37654:19:::1;::::0;;-1:-1:-1;;;37654:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;37554:34;37654:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37642:43:0::1;;37708:4;37728:9;;;;;;;;;-1:-1:-1::0;;;;;37728:9:0::1;-1:-1:-1::0;;;;;37728:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37642:113;::::0;-1:-1:-1;;;;;;37642:113:0::1;::::0;;;;;;-1:-1:-1;;;;;13255:15:1;;;37642:113:0::1;::::0;::::1;13237:34:1::0;13307:15;;13287:18;;;13280:43;13172:18;;37642:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37633:6;:122:::0;;-1:-1:-1;;;;;;37633:122:0::1;-1:-1:-1::0;;;;;37633:122:0;;;::::1;::::0;;::::1;::::0;;37768:49:::1;::::0;-1:-1:-1;37768:26:0::1;:49::i;:::-;37865:6;::::0;37828:51:::1;::::0;-1:-1:-1;;;;;37865:6:0::1;::::0;37828:28:::1;:51::i;:::-;37935:9;::::0;37900:52:::1;::::0;-1:-1:-1;;;;;37935:9:0::1;::::0;37900:26:::1;:52::i;:::-;37987:9;::::0;37963:41:::1;::::0;-1:-1:-1;;;;;37987:9:0::1;::::0;37963:15:::1;:41::i;:::-;38065:1;38041:21;:25;38019:110;;;::::0;-1:-1:-1;;;38019:110:0;;13536:2:1;38019:110:0::1;::::0;::::1;13518:21:1::0;13575:2;13555:18;;;13548:30;13614:34;13594:18;;;13587:62;-1:-1:-1;;;13665:18:1;;;13658:33;13708:19;;38019:110:0::1;13334:399:1::0;38019:110:0::1;38189:1;38162:24;38180:4;38162:9;:24::i;:::-;:28;38140:116;;;::::0;-1:-1:-1;;;38140:116:0;;13940:2:1;38140:116:0::1;::::0;::::1;13922:21:1::0;13979:2;13959:18;;;13952:30;14018:34;13998:18;;;13991:62;-1:-1:-1;;;14069:18:1;;;14062:36;14115:19;;38140:116:0::1;13738:402:1::0;38140:116:0::1;38312:9;::::0;38280:69:::1;::::0;38297:4:::1;::::0;-1:-1:-1;;;;;38312:9:0::1;38324:24;38297:4:::0;38324:9:::1;:24::i;38280:69::-;38362:9;::::0;-1:-1:-1;;;;;38362:9:0::1;:25;38395:21;38440:4;38460:24;38440:4:::0;38460:9:::1;:24::i;:::-;38499:1;38542::::0;38585:10:::1;38610:15;38362:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25911:357::-:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26061:6:::1;::::0;-1:-1:-1;;;;;26061:6:0;;::::1;26053:14:::0;;::::1;::::0;26031:121:::1;;;::::0;-1:-1:-1;;;26031:121:0;;15270:2:1;26031:121:0::1;::::0;::::1;15252:21:1::0;15309:2;15289:18;;;15282:30;15348:34;15328:18;;;15321:62;15419:27;15399:18;;;15392:55;15464:19;;26031:121:0::1;15068:421:1::0;26031:121:0::1;26163:41;26192:4;26198:5;26163:28;:41::i;:::-;26220:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;26220:40:0;::::1;::::0;::::1;::::0;;;::::1;25911:357:::0;;:::o;34944:87::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;35002:14:::1;:21:::0;;-1:-1:-1;;35002:21:0::1;35019:4;35002:21;::::0;;34944:87::o;17233:475::-;323:10;17351:4;17395:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17395:34:0;;;;;;;;;;17462:35;;;;17440:122;;;;-1:-1:-1;;;17440:122:0;;15696:2:1;17440:122:0;;;15678:21:1;15735:2;15715:18;;;15708:30;15774:34;15754:18;;;15747:62;-1:-1:-1;;;15825:18:1;;;15818:35;15870:19;;17440:122:0;15494:401:1;17440:122:0;17598:67;323:10;17621:7;17649:15;17630:16;:34;17598:8;:67::i;:::-;-1:-1:-1;17696:4:0;;17233:475;-1:-1:-1;;;17233:475:0:o;15804:200::-;15915:4;15932:42;323:10;15956:9;15967:6;15932:9;:42::i;36153:236::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36244:18:::1;::::0;;;::::1;;;36222:120;;;::::0;-1:-1:-1;;;36222:120:0;;16102:2:1;36222:120:0::1;::::0;::::1;16084:21:1::0;16141:2;16121:18;;;16114:30;16180:34;16160:18;;;16153:62;-1:-1:-1;;;16231:18:1;;;16224:50;16291:19;;36222:120:0::1;15900:416:1::0;36222:120:0::1;36355:18;:26:::0;;-1:-1:-1;;36355:26:0::1;::::0;;36153:236::o;26284:340::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26410:16:::1;:33:::0;;;26454:15:::1;:31:::0;;;26511:34:::1;26472:13:::0;26429:14;26511:34:::1;:::i;:::-;26496:12;:49:::0;;;26580:2:::1;-1:-1:-1::0;26564:18:0::1;26556:60;;;::::0;-1:-1:-1;;;26556:60:0;;16523:2:1;26556:60:0::1;::::0;::::1;16505:21:1::0;16562:2;16542:18;;;16535:30;16601:31;16581:18;;;16574:59;16650:18;;26556:60:0::1;16321:353:1::0;26632:347:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26759:17:::1;:34:::0;;;26804:16:::1;:32:::0;;;26863:36:::1;26823:13:::0;26779:14;26863:36:::1;:::i;:::-;26847:13;:52:::0;;;26935:2:::1;-1:-1:-1::0;26918:19:0::1;26910:61;;;::::0;-1:-1:-1;;;26910:61:0;;16523:2:1;26910:61:0::1;::::0;::::1;16505:21:1::0;16562:2;16542:18;;;16535:30;16601:31;16581:18;;;16574:59;16650:18;;26910:61:0::1;16321:353:1::0;26991:184:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27078:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;27078:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27133:34;;445:41:1;;;27133:34:0::1;::::0;418:18:1;27133:34:0::1;;;;;;;26991:184:::0;;:::o;12518:149::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;11200:16;11211:4;11200:10;:16::i;:::-;12633:26:::1;12645:4;12651:7;12633:11;:26::i;35714:190::-:0;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35799:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;35791:64;;;::::0;-1:-1:-1;;;35791:64:0;;16881:2:1;35791:64:0::1;::::0;::::1;16863:21:1::0;16920:2;16900:18;;;16893:30;16959:31;16939:18;;;16932:59;17008:18;;35791:64:0::1;16679:353:1::0;35791:64:0::1;-1:-1:-1::0;;;;;35866:22:0::1;35891:5;35866:22:::0;;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;35866:30:0::1;::::0;;35714:190::o;24973:100::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;25037:20:::1;:28:::0;;-1:-1:-1;;25037:28:0::1;::::0;;24973:100::o;18699:380::-;-1:-1:-1;;;;;18835:19:0;;18827:68;;;;-1:-1:-1;;;18827:68:0;;17239:2:1;18827:68:0;;;17221:21:1;17278:2;17258:18;;;17251:30;17317:34;17297:18;;;17290:62;-1:-1:-1;;;17368:18:1;;;17361:34;17412:19;;18827:68:0;17037:400:1;18827:68:0;-1:-1:-1;;;;;18914:21:0;;18906:68;;;;-1:-1:-1;;;18906:68:0;;17644:2:1;18906:68:0;;;17626:21:1;17683:2;17663:18;;;17656:30;17722:34;17702:18;;;17695:62;-1:-1:-1;;;17773:18:1;;;17766:32;17815:19;;18906:68:0;17442:398:1;18906:68:0;-1:-1:-1;;;;;18987:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19039:32;;2234:25:1;;;19039:32:0;;2207:18:1;19039:32:0;;;;;;;18699:380;;;:::o;27183:4356::-;-1:-1:-1;;;;;27315:18:0;;27307:68;;;;-1:-1:-1;;;27307:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27394:16:0;;27386:64;;;;-1:-1:-1;;;27386:64:0;;;;;;;:::i;:::-;27478:1;27469:6;:10;27461:52;;;;-1:-1:-1;;;27461:52:0;;18857:2:1;27461:52:0;;;18839:21:1;18896:2;18876:18;;;18869:30;18935:31;18915:18;;;18908:59;18984:18;;27461:52:0;18655:353:1;27461:52:0;27531:13;;;;;;;27526:329;;-1:-1:-1;;;;;27587:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27616:23:0;;;;;;:19;:23;;;;;;;;27587:52;27561:136;;;;-1:-1:-1;;;27561:136:0;;19215:2:1;27561:136:0;;;19197:21:1;19254:2;19234:18;;;19227:30;-1:-1:-1;;;19273:18:1;;;19266:52;19335:18;;27561:136:0;19013:346:1;27561:136:0;27526:329;;;-1:-1:-1;;;;;27757:20:0;;;;;;:14;:20;;;;;;;;27756:21;27730:113;;;;-1:-1:-1;;;27730:113:0;;19566:2:1;27730:113:0;;;19548:21:1;19605:2;19585:18;;;19578:30;19644:32;19624:18;;;19617:60;19694:18;;27730:113:0;19364:354:1;27730:113:0;27871:14;;;;27867:2060;;;-1:-1:-1;;;;;27906:21:0;;27920:6;27906:21;;;;:68;;-1:-1:-1;;;;;;27949:25:0;;;;;;:19;:25;;;;;;;;27948:26;27906:68;:113;;;;-1:-1:-1;;;;;;27996:23:0;;;;;;:19;:23;;;;;;;;27995:24;27906:113;27902:2014;;;28058:20;;;;28054:692;;;28121:9;;-1:-1:-1;;;;;28107:24:0;;;28121:9;;28107:24;;;;:49;;-1:-1:-1;28149:6:0;;-1:-1:-1;;;;;28135:21:0;;;28149:6;;28135:21;;28107:49;28103:624;;;28298:16;28313:1;28298:12;:16;:::i;:::-;28252:9;28223:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;28419:16:0;28434:1;28419:12;:16;:::i;:::-;-1:-1:-1;;;;;28351:32:0;;;;;;:28;:32;;;;;;:84;28223:212;28185:363;;;;-1:-1:-1;;;28185:363:0;;20058:2:1;28185:363:0;;;20040:21:1;20097:2;20077:18;;;20070:30;20136:34;20116:18;;;20109:62;-1:-1:-1;;;20187:18:1;;;20180:51;20248:19;;28185:363:0;19856:417:1;28185:363:0;28604:9;28575:39;;;;:28;:39;;;;;;28617:12;28575:54;;;;-1:-1:-1;;;;;28656:32:0;;;;;;:47;28103:624;-1:-1:-1;;;;;28820:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;28877:35:0;;;;;;:31;:35;;;;;;;;28876:36;28820:92;28794:1107;;;28999:12;;28989:6;:22;;28955:148;;;;-1:-1:-1;;;28955:148:0;;20480:2:1;28955:148:0;;;20462:21:1;20519:2;20499:18;;;20492:30;20558:34;20538:18;;;20531:62;-1:-1:-1;;;20609:18:1;;;20602:38;20657:19;;28955:148:0;20278:404:1;28955:148:0;29186:9;;29169:13;29179:2;29169:9;:13::i;:::-;29160:22;;:6;:22;:::i;:::-;:35;;29126:140;;;;-1:-1:-1;;;29126:140:0;;20889:2:1;29126:140:0;;;20871:21:1;20928:2;20908:18;;;20901:30;-1:-1:-1;;;20947:18:1;;;20940:49;21006:18;;29126:140:0;20687:343:1;29126:140:0;28794:1107;;;-1:-1:-1;;;;;29364:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;29419:37:0;;;;;;:31;:37;;;;;;;;29418:38;29364:92;29338:563;;;29543:13;;29533:6;:23;;29499:151;;;;-1:-1:-1;;;29499:151:0;;21237:2:1;29499:151:0;;;21219:21:1;21276:2;21256:18;;;21249:30;21315:34;21295:18;;;21288:62;-1:-1:-1;;;21366:18:1;;;21359:40;21416:19;;29499:151:0;21035:406:1;29338:563:0;-1:-1:-1;;;;;29681:35:0;;;;;;:31;:35;;;;;;;;29676:225;;29801:9;;29784:13;29794:2;29784:9;:13::i;:::-;29775:22;;:6;:22;:::i;:::-;:35;;29741:140;;;;-1:-1:-1;;;29741:140:0;;20889:2:1;29741:140:0;;;20871:21:1;20928:2;20908:18;;;20901:30;-1:-1:-1;;;20947:18:1;;;20940:49;21006:18;;29741:140:0;20687:343:1;29741:140:0;29939:28;29970:24;29988:4;29970:9;:24::i;:::-;30046:18;;29939:55;;-1:-1:-1;30022:42:0;;;;;;;30095:22;;-1:-1:-1;30106:11:0;;;;;;;30095:22;:35;;;;-1:-1:-1;30122:8:0;;-1:-1:-1;;;30122:8:0;;;;30121:9;30095:35;:68;;;;-1:-1:-1;;;;;;30134:29:0;;;;;;:25;:29;;;;;;;;30095:68;30077:196;;;30190:8;:15;;-1:-1:-1;;;;30190:15:0;-1:-1:-1;;;30190:15:0;;;30220:10;:8;:10::i;:::-;30245:8;:16;;-1:-1:-1;;;;30245:16:0;;;30077:196;-1:-1:-1;;;;;30404:25:0;;30285:12;30404:25;;;:19;:25;;;;;;30300:4;;30404:25;;;:52;;-1:-1:-1;;;;;;30433:23:0;;;;;;:19;:23;;;;;;;;30404:52;30400:100;;;-1:-1:-1;30483:5:0;30400:100;30512:12;30617:7;30613:873;;;-1:-1:-1;;;;;30673:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;30722:1;30706:13;;:17;30673:50;30669:668;;;30778:3;30761:13;;30752:6;:22;;;;:::i;:::-;30751:30;;;;:::i;:::-;30744:37;;30850:13;;30830:16;;30823:4;:23;;;;:::i;:::-;30822:41;;;;:::i;:::-;30800:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30976:13:0;;30934:17;;30927:24;;:4;:24;:::i;:::-;30926:63;;;;:::i;:::-;30882:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;30669:668:0;;-1:-1:-1;30669:668:0;;-1:-1:-1;;;;;31051:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;31101:1;31086:12;;:16;31051:51;31047:290;;;31156:3;31140:12;;31131:6;:21;;;;:::i;:::-;31130:29;;;;:::i;:::-;31123:36;;31227:12;;31208:15;;31201:4;:22;;;;:::i;:::-;31200:39;;;;:::i;:::-;31178:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;31309:12:0;;31289:16;;31282:23;;:4;:23;:::i;:::-;31281:40;;;;:::i;:::-;31258:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;31047:290:0;31357:8;;31353:91;;31386:42;31402:4;31416;31423;31386:15;:42::i;:::-;31460:14;31470:4;31460:14;;:::i;:::-;;;30613:873;31498:33;31514:4;31520:2;31524:6;31498:15;:33::i;:::-;27296:4243;;;;27183:4356;;;:::o;11611:105::-;11678:30;11689:4;323:10;11678;:30::i;13280:238::-;13364:22;13372:4;13378:7;13364;:22::i;:::-;13359:152;;13403:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13403:29:0;;;;;;;;;:36;;-1:-1:-1;;13403:36:0;13435:4;13403:36;;;13486:12;323:10;;243:98;13486:12;-1:-1:-1;;;;;13459:40:0;13477:7;-1:-1:-1;;;;;13459:40:0;13471:4;13459:40;;;;;;;;;;13280:238;;:::o;13526:239::-;13610:22;13618:4;13624:7;13610;:22::i;:::-;13606:152;;;13681:5;13649:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13649:29:0;;;;;;;;;;:37;;-1:-1:-1;;13649:37:0;;;13706:40;323:10;;13649:12;;13706:40;;13681:5;13706:40;13526:239;;:::o;25081:232::-;-1:-1:-1;;;;;25194:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;25194:52:0;;;;;;;;;;25262:43;;22009:51:1;;;22076:18;;;22069:50;25262:43:0;;21982:18:1;25262:43:0;;;;;;;25081:232;;:::o;25667:236::-;-1:-1:-1;;;;;25750:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25750:39:0;;;;;;;25800;25750:31;:39;25800:26;:39::i;32643:1269::-;32682:23;32708:24;32726:4;32708:9;:24::i;:::-;32682:50;;32743:25;32792:19;;32771:18;;:40;;;;:::i;:::-;32743:68;-1:-1:-1;32828:20:0;;;:46;;-1:-1:-1;32852:22:0;;32828:46;32824:85;;;32891:7;;32643:1269::o;32824:85::-;32943:18;;:23;;32964:2;32943:23;:::i;:::-;32925:15;:41;32921:115;;;33001:18;;:23;;33022:2;33001:23;:::i;:::-;32983:41;;32921:115;33048:12;33122:23;33235:1;33202:17;33167:18;;33149:15;:36;;;;:::i;:::-;33148:71;;;;:::i;:::-;:88;;;;:::i;:::-;33122:114;-1:-1:-1;33249:51:0;33266:33;33122:114;33266:15;:33;:::i;:::-;33249:16;:51::i;:::-;33514:18;;33334:21;;;;33313:18;;33514:22;;33535:1;;33514:22;:::i;:::-;33493:44;;:17;:44;:::i;:::-;33456:19;;33443:32;;:10;:32;:::i;:::-;33442:96;;;;:::i;:::-;33415:123;-1:-1:-1;33551:35:0;33415:123;33551:35;;:::i;:::-;33620:1;33599:18;:22;;;33632:19;:23;33551:35;-1:-1:-1;33672:19:0;;;;;:42;;;33713:1;33695:15;:19;33672:42;33668:121;;;33731:46;33744:15;33761;33731:12;:46::i;:::-;33823:17;;33815:89;;-1:-1:-1;;;;;33823:17:0;;;;33868:21;;33815:89;;;;33868:21;33823:17;33815:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;32643:1269:0:o;17716:651::-;-1:-1:-1;;;;;17856:20:0;;17848:70;;;;-1:-1:-1;;;17848:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17937:23:0;;17929:71;;;;-1:-1:-1;;;17929:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18037:17:0;;18013:21;18037:17;;;;;;;;;;;18087:23;;;;18065:111;;;;-1:-1:-1;;;18065:111:0;;22332:2:1;18065:111:0;;;22314:21:1;22371:2;22351:18;;;22344:30;22410:34;22390:18;;;22383:62;-1:-1:-1;;;22461:18:1;;;22454:36;22507:19;;18065:111:0;22130:402:1;18065:111:0;-1:-1:-1;;;;;18212:17:0;;;:9;:17;;;;;;;;;;;18232:22;;;18212:42;;18276:20;;;;;;;;:30;;18248:6;;18212:9;18276:30;;18248:6;;18276:30;:::i;:::-;;;;;;;;18341:9;-1:-1:-1;;;;;18324:35:0;18333:6;-1:-1:-1;;;;;18324:35:0;;18352:6;18324:35;;;;2234:25:1;;2222:2;2207:18;;2088:177;18324:35:0;;;;;;;;17837:530;17716:651;;;:::o;11724:492::-;11813:22;11821:4;11827:7;11813;:22::i;:::-;11808:401;;12001:28;12021:7;12001:19;:28::i;:::-;12102:38;12130:4;12137:2;12102:19;:38::i;:::-;11906:257;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11906:257:0;;;;;;;;;;-1:-1:-1;;;11852:345:0;;;;;;;:::i;31547:571::-;31697:16;;;31711:1;31697:16;;;;;;;;31673:21;;31697:16;;;;;;;;;;-1:-1:-1;31697:16:0;31673:40;;31742:4;31724;31729:1;31724:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31724:23:0;;;:7;;;;;;;;;;:23;;;;31768:9;;:16;;;-1:-1:-1;;;31768:16:0;;;;:9;;;;;:14;;:16;;;;;31724:7;;31768:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31758:4;31763:1;31758:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31758:26:0;;;:7;;;;;;;;;:26;31829:9;;31797:56;;31814:4;;31829:9;31841:11;31797:8;:56::i;:::-;31892:9;;:218;;-1:-1:-1;;;31892:218:0;;-1:-1:-1;;;;;31892:9:0;;;;:60;;:218;;31967:11;;31892:9;;32037:4;;32064;;32084:15;;31892:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31602:516;31547:571;:::o;32126:509::-;32306:9;;32274:56;;32291:4;;-1:-1:-1;;;;;32306:9:0;32318:11;32274:8;:56::i;:::-;32373:9;;:254;;-1:-1:-1;;;32373:254:0;;-1:-1:-1;;;;;32373:9:0;;;;:25;;32406:9;;32373:254;;32439:4;;32459:11;;32373:9;;;;32579:6;;32601:15;;32373:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32126:509;;:::o;10558:151::-;10616:13;10649:52;-1:-1:-1;;;;;10661:22:0;;9095:2;10103:447;10178:13;10204:19;10236:10;10240:6;10236:1;:10;:::i;:::-;:14;;10249:1;10236:14;:::i;:::-;10226:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10226:25:0;;10204:47;;-1:-1:-1;;;10262:6:0;10269:1;10262:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10262:15:0;;;;;;;;;-1:-1:-1;;;10288:6:0;10295:1;10288:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10288:15:0;;;;;;;;-1:-1:-1;10319:9:0;10331:10;10335:6;10331:1;:10;:::i;:::-;:14;;10344:1;10331:14;:::i;:::-;10319:26;;10314:131;10351:1;10347;:5;10314:131;;;-1:-1:-1;;;10395:5:0;10403:3;10395:11;10386:21;;;;;;;:::i;:::-;;;;10374:6;10381:1;10374:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;10374:33:0;;;;;;;;-1:-1:-1;10432:1:0;10422:11;;;;;10354:3;;;:::i;:::-;;;10314:131;;;-1:-1:-1;10463:10:0;;10455:55;;;;-1:-1:-1;;;10455:55:0;;24814:2:1;10455:55:0;;;24796:21:1;;;24833:18;;;24826:30;24892:34;24872:18;;;24865:62;24944:18;;10455:55:0;24612:356:1;10455:55:0;10535:6;10103:447;-1:-1:-1;;;10103:447:0:o;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;497:250;582:1;592:113;606:6;603:1;600:13;592:113;;;682:11;;;676:18;663:11;;;656:39;628:2;621:10;592:113;;;-1:-1:-1;;739:1:1;721:16;;714:27;497:250::o;752:396::-;901:2;890:9;883:21;864:4;933:6;927:13;976:6;971:2;960:9;956:18;949:34;992:79;1064:6;1059:2;1048:9;1044:18;1039:2;1031:6;1027:15;992:79;:::i;:::-;1132:2;1111:15;-1:-1:-1;;1107:29:1;1092:45;;;;1139:2;1088:54;;752:396;-1:-1:-1;;752:396:1:o;1380:131::-;-1:-1:-1;;;;;1455:31:1;;1445:42;;1435:70;;1501:1;1498;1491:12;1516:315;1584:6;1592;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;1700:9;1687:23;1719:31;1744:5;1719:31;:::i;:::-;1769:5;1821:2;1806:18;;;;1793:32;;-1:-1:-1;;;1516:315:1:o;1836:247::-;1895:6;1948:2;1936:9;1927:7;1923:23;1919:32;1916:52;;;1964:1;1961;1954:12;1916:52;2003:9;1990:23;2022:31;2047:5;2022:31;:::i;2270:456::-;2347:6;2355;2363;2416:2;2404:9;2395:7;2391:23;2387:32;2384:52;;;2432:1;2429;2422:12;2384:52;2471:9;2458:23;2490:31;2515:5;2490:31;:::i;:::-;2540:5;-1:-1:-1;2597:2:1;2582:18;;2569:32;2610:33;2569:32;2610:33;:::i;:::-;2270:456;;2662:7;;-1:-1:-1;;;2716:2:1;2701:18;;;;2688:32;;2270:456::o;2731:180::-;2790:6;2843:2;2831:9;2822:7;2818:23;2814:32;2811:52;;;2859:1;2856;2849:12;2811:52;-1:-1:-1;2882:23:1;;2731:180;-1:-1:-1;2731:180:1:o;3098:315::-;3166:6;3174;3227:2;3215:9;3206:7;3202:23;3198:32;3195:52;;;3243:1;3240;3233:12;3195:52;3279:9;3266:23;3256:33;;3339:2;3328:9;3324:18;3311:32;3352:31;3377:5;3352:31;:::i;:::-;3402:5;3392:15;;;3098:315;;;;;:::o;3815:615::-;3901:6;3909;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;4018:9;4005:23;4047:18;4088:2;4080:6;4077:14;4074:34;;;4104:1;4101;4094:12;4074:34;4142:6;4131:9;4127:22;4117:32;;4187:7;4180:4;4176:2;4172:13;4168:27;4158:55;;4209:1;4206;4199:12;4158:55;4249:2;4236:16;4275:2;4267:6;4264:14;4261:34;;;4291:1;4288;4281:12;4261:34;4344:7;4339:2;4329:6;4326:1;4322:14;4318:2;4314:23;4310:32;4307:45;4304:65;;;4365:1;4362;4355:12;4304:65;4396:2;4388:11;;;;;4418:6;;-1:-1:-1;3815:615:1;;-1:-1:-1;;;;3815:615:1:o;4435:118::-;4521:5;4514:13;4507:21;4500:5;4497:32;4487:60;;4543:1;4540;4533:12;4558:382;4623:6;4631;4684:2;4672:9;4663:7;4659:23;4655:32;4652:52;;;4700:1;4697;4690:12;4652:52;4739:9;4726:23;4758:31;4783:5;4758:31;:::i;:::-;4808:5;-1:-1:-1;4865:2:1;4850:18;;4837:32;4878:30;4837:32;4878:30;:::i;4945:388::-;5013:6;5021;5074:2;5062:9;5053:7;5049:23;5045:32;5042:52;;;5090:1;5087;5080:12;5042:52;5129:9;5116:23;5148:31;5173:5;5148:31;:::i;:::-;5198:5;-1:-1:-1;5255:2:1;5240:18;;5227:32;5268:33;5227:32;5268:33;:::i;5338:248::-;5406:6;5414;5467:2;5455:9;5446:7;5442:23;5438:32;5435:52;;;5483:1;5480;5473:12;5435:52;-1:-1:-1;;5506:23:1;;;5576:2;5561:18;;;5548:32;;-1:-1:-1;5338:248:1:o;5591:380::-;5670:1;5666:12;;;;5713;;;5734:61;;5788:4;5780:6;5776:17;5766:27;;5734:61;5841:2;5833:6;5830:14;5810:18;5807:38;5804:161;;5887:10;5882:3;5878:20;5875:1;5868:31;5922:4;5919:1;5912:15;5950:4;5947:1;5940:15;5804:161;;5591:380;;;:::o;6801:127::-;6862:10;6857:3;6853:20;6850:1;6843:31;6893:4;6890:1;6883:15;6917:4;6914:1;6907:15;6933:125;6998:9;;;7019:10;;;7016:36;;;7032:18;;:::i;7063:337::-;7265:2;7247:21;;;7304:2;7284:18;;;7277:30;-1:-1:-1;;;7338:2:1;7323:18;;7316:43;7391:2;7376:18;;7063:337::o;8156:344::-;8358:2;8340:21;;;8397:2;8377:18;;;8370:30;-1:-1:-1;;;8431:2:1;8416:18;;8409:50;8491:2;8476:18;;8156:344::o;8505:127::-;8566:10;8561:3;8557:20;8554:1;8547:31;8597:4;8594:1;8587:15;8621:4;8618:1;8611:15;8637:135;8676:3;8697:17;;;8694:43;;8717:18;;:::i;:::-;-1:-1:-1;8764:1:1;8753:13;;8637:135::o;8987:407::-;9189:2;9171:21;;;9228:2;9208:18;;;9201:30;9267:34;9262:2;9247:18;;9240:62;-1:-1:-1;;;9333:2:1;9318:18;;9311:41;9384:3;9369:19;;8987:407::o;10938:184::-;11008:6;11061:2;11049:9;11040:7;11036:23;11032:32;11029:52;;;11077:1;11074;11067:12;11029:52;-1:-1:-1;11100:16:1;;10938:184;-1:-1:-1;10938:184:1:o;11406:245::-;11473:6;11526:2;11514:9;11505:7;11501:23;11497:32;11494:52;;;11542:1;11539;11532:12;11494:52;11574:9;11568:16;11593:28;11615:5;11593:28;:::i;12769:251::-;12839:6;12892:2;12880:9;12871:7;12867:23;12863:32;12860:52;;;12908:1;12905;12898:12;12860:52;12940:9;12934:16;12959:31;12984:5;12959:31;:::i;14145:607::-;-1:-1:-1;;;;;14504:15:1;;;14486:34;;14551:2;14536:18;;14529:34;;;;14594:2;14579:18;;14572:34;;;;14637:2;14622:18;;14615:34;;;;14686:15;;;14680:3;14665:19;;14658:44;14466:3;14718:19;;14711:35;;;;14435:3;14420:19;;14145:607::o;14757:306::-;14845:6;14853;14861;14914:2;14902:9;14893:7;14889:23;14885:32;14882:52;;;14930:1;14927;14920:12;14882:52;14959:9;14953:16;14943:26;;15009:2;14998:9;14994:18;14988:25;14978:35;;15053:2;15042:9;15038:18;15032:25;15022:35;;14757:306;;;;;:::o;17845:401::-;18047:2;18029:21;;;18086:2;18066:18;;;18059:30;18125:34;18120:2;18105:18;;18098:62;-1:-1:-1;;;18191:2:1;18176:18;;18169:35;18236:3;18221:19;;17845:401::o;18251:399::-;18453:2;18435:21;;;18492:2;18472:18;;;18465:30;18531:34;18526:2;18511:18;;18504:62;-1:-1:-1;;;18597:2:1;18582:18;;18575:33;18640:3;18625:19;;18251:399::o;19723:128::-;19790:9;;;19811:11;;;19808:37;;;19825:18;;:::i;21446:168::-;21519:9;;;21550;;21567:15;;;21561:22;;21547:37;21537:71;;21588:18;;:::i;21619:217::-;21659:1;21685;21675:132;;21729:10;21724:3;21720:20;21717:1;21710:31;21764:4;21761:1;21754:15;21792:4;21789:1;21782:15;21675:132;-1:-1:-1;21821:9:1;;21619:217::o;22537:812::-;22948:25;22943:3;22936:38;22918:3;23003:6;22997:13;23019:75;23087:6;23082:2;23077:3;23073:12;23066:4;23058:6;23054:17;23019:75;:::i;:::-;-1:-1:-1;;;23153:2:1;23113:16;;;23145:11;;;23138:40;23203:13;;23225:76;23203:13;23287:2;23279:11;;23272:4;23260:17;;23225:76;:::i;:::-;23321:17;23340:2;23317:26;;22537:812;-1:-1:-1;;;;22537:812:1:o;23354:127::-;23415:10;23410:3;23406:20;23403:1;23396:31;23446:4;23443:1;23436:15;23470:4;23467:1;23460:15;23486:980;23748:4;23796:3;23785:9;23781:19;23827:6;23816:9;23809:25;23853:2;23891:6;23886:2;23875:9;23871:18;23864:34;23934:3;23929:2;23918:9;23914:18;23907:31;23958:6;23993;23987:13;24024:6;24016;24009:22;24062:3;24051:9;24047:19;24040:26;;24101:2;24093:6;24089:15;24075:29;;24122:1;24132:195;24146:6;24143:1;24140:13;24132:195;;;24211:13;;-1:-1:-1;;;;;24207:39:1;24195:52;;24302:15;;;;24267:12;;;;24243:1;24161:9;24132:195;;;-1:-1:-1;;;;;;;24383:32:1;;;;24378:2;24363:18;;24356:60;-1:-1:-1;;;24447:3:1;24432:19;24425:35;24344:3;23486:980;-1:-1:-1;;;23486:980:1:o;24471:136::-;24510:3;24538:5;24528:39;;24547:18;;:::i;:::-;-1:-1:-1;;;24583:18:1;;24471:136::o

Swarm Source

ipfs://0504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.