ETH Price: $3,482.53 (+0.98%)

Token

Project Orion (ORN)
 

Overview

Max Total Supply

300,000 ORN

Holders

192

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 ORN

Value
$0.00
0xd5fc43352440b197c76fe5b00c147c03012752c7
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ORN

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-12-23
*/

// SPDX-License-Identifier: MIT
/**
 * https://t.me/projectorioneth
 * https://x.com/ProjectOrionETH
 * https://www.projectorion.online/
 */
pragma solidity 0.8.19;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface INodeManager {
    struct NodeEntity {
        string name;
        uint256 creationTime;
        uint256 lastClaimTime;
        uint256 amount;
        uint256 tier;
        uint256 totalClaimed;
    }

    function getNodePrice(uint256 _tierIndex) external view returns (uint256);

    function createNode(
        address account,
        string memory nodeName,
        uint256 tier
    ) external;

    function getNodeReward(
        address account,
        uint256 _creationTime
    ) external view returns (uint256);

    function getAllNodesRewards(
        address account
    ) external view returns (uint256[2] memory);

    function cashoutNodeReward(address account, uint256 _creationTime) external;

    function cashoutAllNodesRewards(address account) external;

    function getAllNodes(
        address account
    ) external view returns (NodeEntity[] memory);

    function getNodeFee(
        address account,
        uint256 _creationTime,
        uint256 _rewardAmount
    ) external returns (uint256);

    function getAllNodesFee(
        address account,
        uint256 _rewardAmount
    ) external returns (uint256);

    function borrowRewards(
        address account,
        uint256 blocktime,
        uint256 amount
    ) external;

    function getNodeTier(
        address account,
        uint256 blocktime
    ) external view returns (uint256);

    function upgradeNode(
        address account,
        uint256 blocktime
    ) external;

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

    function isNodeOwner(address account) external view returns (bool);

    function updateTiersRewards(uint256[] memory newVal) external;

    function getNodesNames(
        address account
    ) external view returns (string memory);

    function getNodesCreationTime(
        address account
    ) external view returns (string memory);

    function getNodesRewards(
        address account
    ) external view returns (string memory);

    function getNodesLastClaimTime(
        address account
    ) external view returns (string memory);

    function totalStaked() external view returns (uint256);

    function totalNodesCreated() external view returns (uint256);
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

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

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

library SafeERC20 {
    using Address for address;

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

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

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        _afterTokenTransfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

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

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IAliens {
    function mint(uint256 numberOfToken) external payable;

    function setPriceForSale(
        uint256 _tokenId,
        uint256 _newPrice,
        bool isForSale
    ) external;

    function buyToken(uint256 _tokenId) external payable;

    function tokenOfOwnerByIndex(
        address nodeOwner,
        uint256 index
    ) external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function setAlienKind(
        uint256[] memory _tokens,
        uint256[] memory _kinds
    ) external;

    function getAllSaleTokens() external view returns (uint256[] memory);

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

    function changeUrl(string memory url) external;

    function getAlienLevel(uint256 _tokenId) external view returns (uint256);

    function getAlienKind(uint256 _tokenId) external view returns (uint256);

    function growAlien(uint256 _tokenId) external;

}

contract ORN is ERC20, Ownable {
    using SafeMath for uint256;

    INodeManager public nodeManager;
    IAliens public aliens;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public marketingWallet;
    address public distributionPool;
    address public devPool;

    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    uint256 public rewardsFee;
    uint256 public liquidityPoolFee;
    uint256 public futurFee;

    uint256 public buyTax = 35;
    uint256 public sellTax = 55;

    uint256 private devShare = 25;
    bool private swapping = false;
    bool private swapLiquify = true;
    uint256 public swapTokensAmount;
    uint256 public growMultiplier = 10e18;

    bool private tradingOpen = false;
    uint256 private maxTx = 375;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

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

    event LiquidityWalletUpdated(
        address indexed newLiquidityWallet,
        address indexed oldLiquidityWallet
    );

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

    constructor() ERC20("Project Orion", "ORN")  {
        marketingWallet = 0x2AF5DFf2Ff0b71816E9E552a4e8EBE807016C2C0;
        distributionPool = 0x5A45348CBDde5D073Dab1A2D30f695f21FAadfFC;
        devPool = msg.sender;

        address uniV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        require(uniV2Router != address(0), "ROUTER CANNOT BE ZERO");
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniV2Router);

        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        futurFee = 89;
        rewardsFee = 1;
        liquidityPoolFee = 10;


        _mint(_msgSender(), 300000e18);

        require(
            totalSupply() == 300000e18,
            "CONSTR: totalSupply must equal 300,000"
        );
        swapTokensAmount = 100 * (10 ** 18);
    }

    receive() external payable virtual {}

    function setNodeManagement(address nodeManagement) external onlyOwner {
        nodeManager = INodeManager(nodeManagement);
    }

    function setAliens(address aliensAddress) external onlyOwner {
        aliens = IAliens(aliensAddress);
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "ELEMENTS: The router already has that address"
        );
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function updateSwapTokensAmount(uint256 newVal) external onlyOwner {
        swapTokensAmount = newVal;
    }

    function updateFuturWall(address payable wall) external onlyOwner {
        marketingWallet = wall;
    }

    function updateDevWall(address payable wall) external onlyOwner {
        devPool = wall;
    }

    function updateRewardsWall(address payable wall) external onlyOwner {
        distributionPool = wall;
    }

    function updateFeeSplit(uint256 _rewardsFee, uint256 _liquidityPoolFee, uint256 _futurFee) external onlyOwner {
        require(_rewardsFee.add(_liquidityPoolFee).add(_futurFee) == 100, "Fees must add up to 100");
        rewardsFee = _rewardsFee;
        liquidityPoolFee = _liquidityPoolFee;
        futurFee = _futurFee;
    }
    
    function updateSellTax(uint256 value) external onlyOwner {
        require(value <= 6, "TAX: sell tax cannot exceed 6%");
        sellTax = value;
    }

    function updateBuyTax(uint256 value) external onlyOwner {
        require(value <= 6, "TAX: buy tax cannot exceed 6%");
        buyTax = value;
    }

    function lowerFeesOnLaunch(uint256 newBuy, uint256 newSell) external onlyOwner {
        require (newBuy <= buyTax, "Taxes only go down");
        require (newSell <= sellTax, "Taxes only go down");
        buyTax = newBuy;
        sellTax = newSell;
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "ELEMENTS: The DEX pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "ELEMENTS: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    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");
        if (
            automatedMarketMakerPairs[to] &&
            (from != address(this) && from != owner())
        ) {
            uint256 sellTaxAmount = amount.mul(sellTax).div(100);
            super._transfer(from, address(this), sellTaxAmount);
            amount = amount.sub(sellTaxAmount);
        } else if (
            automatedMarketMakerPairs[from] &&
            (to != address(this) && to != owner())
        ) {
            uint256 buyTaxAmount = amount.mul(buyTax).div(100);
            super._transfer(from, address(this), buyTaxAmount);
            amount = amount.sub(buyTaxAmount);
        }
        uint256 amount2 = amount;
        uint256 contractTokenBalance = balanceOf(address(this));
        bool swapAmountOk = contractTokenBalance >= swapTokensAmount;

        if (
            swapAmountOk &&
            swapLiquify &&
            !swapping &&
            from != owner() &&
            !automatedMarketMakerPairs[from]
        ) {
            swapContractTokens();
        }

        if (
            from != owner() &&
            to != uniswapV2Pair &&
            to != address(uniswapV2Router) &&
            to != address(this) &&
            from != address(this)
        ) {
            require(tradingOpen, "Trading not yet enabled.");

            if (
                to != marketingWallet &&
                to != distributionPool &&
                to != devPool &&
                from != marketingWallet &&
                from != distributionPool &&
                from != devPool
            ) {
                uint256 walletBalance = balanceOf(address(to));
                require(
                    amount2.add(walletBalance) <= maxTx.mul(1e18),
                    "wallet limit."
                );
            }
        }
        super._transfer(from, to, amount2);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);

        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            distributionPool,
            block.timestamp
        );
    }

    function swapContractTokens() private {
        swapping = true;
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 fdTokens = contractTokenBalance.mul(futurFee).div(100);
        uint256 devTokens = fdTokens.mul(devShare).div(100);
        uint256 mktTokens = fdTokens.sub(devTokens);

        uint256 rewardsPoolTokens = contractTokenBalance.mul(rewardsFee).div(
            100
        );

        super._transfer(
            address(this),
            distributionPool,
            rewardsPoolTokens
        );

        uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div(
            100
        );

        swapAndLiquify(swapTokens);

        swapTokensForEth(balanceOf(address(this)));
        uint256 totalTaxTokens = devTokens
            .add(mktTokens);

        uint256 ETHBalance = address(this).balance;

        bool success;

        (success, ) =  devPool.call{value: ETHBalance.mul(devTokens).div(totalTaxTokens)}("");
        
        (success, ) =  marketingWallet.call{value: (address(this)).balance}("");


        swapping = false;
    }

    function createNodeWithTokens(string memory _name, uint256 tier) public {
        require(
            bytes(_name).length > 3 && bytes(_name).length < 32,
            "NODE CREATION: NAME SIZE INVALID"
        );
        address sender = _msgSender();
        require(
            sender != address(0),
            "NODE CREATION:  creation from the zero address"
        );
        require(
            sender != distributionPool,
            "NODE CREATION: futur, dev and rewardsPool cannot create node"
        );

        uint256 nodePrice = nodeManager.getNodePrice(tier);
        require(
            balanceOf(sender) >= nodePrice.mul(1e18),
            "NODE CREATION: Balance too low for creation. Try lower tier."
        );

        super._transfer(sender, distributionPool, nodePrice.mul(1e18));
        nodeManager.createNode(sender, _name, tier);
    }

    function createNodeWithRewards(
        uint256 blocktime,
        string memory _name,
        uint256 tier
    ) public {
        require(
            bytes(_name).length > 3 && bytes(_name).length < 32,
            "NODE CREATION: NAME SIZE INVALID"
        );
        address sender = _msgSender();
        require(
            sender != address(0),
            "NODE CREATION:  creation from the zero address"
        );
        require(
            sender != distributionPool,
            "NODE CREATION: rewardsPool cannot create node"
        );
        uint256 nodePrice = nodeManager.getNodePrice(tier);
        uint256 rewardOf = nodeManager.getNodeReward(sender, blocktime);
        require(
            rewardOf >= nodePrice.mul(1e18),
            "NODE CREATION: Reward Balance too low for creation."
        );
        nodeManager.borrowRewards(
            sender,
            blocktime,
            nodeManager.getNodePrice(tier).mul(1e18)
        );
        nodeManager.createNode(sender, _name, tier);
    }

    function upgradeNode(uint256 blocktime) public {
        address sender = _msgSender();
        require(sender != address(0), "Zero address not permitted");
        require(sender != distributionPool, "Cannot upgrade nodes");
        uint256 currentTier = nodeManager.getNodeTier(sender, blocktime);
        require(currentTier < 4, "Your Node is already at max level");
        uint256 nextTier = currentTier.add(1);
        uint256 currentPrice = nodeManager.getNodePrice(currentTier);
        uint256 newPrice = nodeManager.getNodePrice(nextTier);
        uint256 priceDiff = (newPrice.sub(currentPrice)).mul(1e18);
        uint256 rewardOf = nodeManager.getNodeReward(sender, blocktime);
        if (rewardOf > priceDiff) {
            upgradeNodeCashout(sender, blocktime, rewardOf.sub(priceDiff));
            nodeManager.cashoutNodeReward(sender, blocktime);
        } else if (rewardOf < priceDiff) {
            upgradeNodeAddOn(sender, blocktime, priceDiff.sub(rewardOf));
            nodeManager.cashoutNodeReward(sender, blocktime);
        }
    }

    function upgradeNodeCashout(
        address account,
        uint256 blocktime,
        uint256 cashOutAmount
    ) internal {
        uint256 taxAmount = nodeManager.getNodeFee(
            account,
            blocktime,
            cashOutAmount
        );
        super._transfer(
            distributionPool,
            account,
            cashOutAmount.sub(taxAmount)
        );
        nodeManager.upgradeNode(account, blocktime);
    }

    function upgradeNodeAddOn(
        address account,
        uint256 blocktime,
        uint256 AddAmount
    ) internal {
        super._transfer(account, distributionPool, AddAmount);
        nodeManager.upgradeNode(account, blocktime);
    }

    function setGrowMultiplier(uint256 newVal) external onlyOwner {
        growMultiplier = newVal;
    }

    function growAlien(uint256 _tokenId) external {
        address sender = _msgSender();
        uint256 artifLevel = aliens.getAlienLevel(_tokenId);
        uint256 growPrice = artifLevel.mul(growMultiplier);
        require(
            balanceOf(sender) > growPrice,
            "Not enough ELEMENTS to grow your Alien"
        );
        super._transfer(sender, distributionPool, growPrice);
        aliens.growAlien(_tokenId);
    }

    function cashoutReward(uint256 blocktime) public {
        address sender = _msgSender();
        require(sender != address(0), "CSHT:  can't from the zero address");
        require(
            sender != marketingWallet && sender != distributionPool,
            "CSHT: futur and rewardsPool cannot cashout rewards"
        );
        uint256 rewardAmount = nodeManager.getNodeReward(sender, blocktime);
        require(
            rewardAmount > 0,
            "CSHT: You don't have enough reward to cash out"
        );

        uint256 taxAmount = nodeManager.getNodeFee(
            sender,
            blocktime,
            rewardAmount
        );
        super._transfer(distributionPool, sender, rewardAmount.sub(taxAmount));
        nodeManager.cashoutNodeReward(sender, blocktime);
    }

    function cashoutAll() public {
        address sender = _msgSender();
        require(sender != address(0), "ELEMENTS:  creation from the zero address");
        require(
            sender != marketingWallet && sender != distributionPool,
            "ELEMENTS: futur and rewardsPool cannot cashout rewards"
        );
        uint256[2] memory rewardTax = nodeManager.getAllNodesRewards(sender);
        uint256 rewardAmount = rewardTax[0];
        require(
            rewardAmount > 0,
            "ELEMENTS: You don't have enough reward to cash out"
        );
        super._transfer(distributionPool, sender, rewardAmount);
        nodeManager.cashoutAllNodesRewards(sender);
    }

    function rescueFunds(uint amount) public onlyOwner {
        if (amount > address(this).balance) amount = address(this).balance;
        payable(owner()).transfer(amount);
    }

    function changeSwapLiquify(bool newVal) public onlyOwner {
        swapLiquify = newVal;
    }

    function getNodeNumberOf(address account) public view returns (uint256) {
        return nodeManager.getNodeNumberOf(account);
    }

    function getRewardAmountOf(
        address account
    ) public view onlyOwner returns (uint256[2] memory) {
        return nodeManager.getAllNodesRewards(account);
    }

    function getRewardAmount() public view returns (uint256[2] memory) {
        require(_msgSender() != address(0), "SENDER CAN'T BE ZERO");
        require(nodeManager.isNodeOwner(_msgSender()), "NO NODE OWNER");
        return nodeManager.getAllNodesRewards(_msgSender());
    }

    function updateTiersRewards(uint256[] memory newVal) external onlyOwner {
        require(newVal.length == 5, "Wrong length");
        nodeManager.updateTiersRewards(newVal);
    }

    function getNodesNames() public view returns (string memory) {
        require(_msgSender() != address(0), "SENDER CAN'T BE ZERO");
        require(nodeManager.isNodeOwner(_msgSender()), "NO NODE OWNER");
        return nodeManager.getNodesNames(_msgSender());
    }

    function getNodesCreatime() public view returns (string memory) {
        require(_msgSender() != address(0), "SENDER CAN'T BE ZERO");
        require(nodeManager.isNodeOwner(_msgSender()), "NO NODE OWNER");
        return nodeManager.getNodesCreationTime(_msgSender());
    }

    function getNodesRewards() public view returns (string memory) {
        require(_msgSender() != address(0), "SENDER CAN'T BE ZERO");
        require(nodeManager.isNodeOwner(_msgSender()), "NO NODE OWNER");
        return nodeManager.getNodesRewards(_msgSender());
    }

    function getNodesLastClaims() public view returns (string memory) {
        require(_msgSender() != address(0), "SENDER CAN'T BE ZERO");
        require(nodeManager.isNodeOwner(_msgSender()), "NO NODE OWNER");
        return nodeManager.getNodesLastClaimTime(_msgSender());
    }

    function getTotalStakedReward() public view returns (uint256) {
        return nodeManager.totalStaked();
    }

    function getTotalCreatedNodes() public view returns (uint256) {
        return nodeManager.totalNodesCreated();
    }

    function openTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        tradingOpen = true;
    }

    function updateMaxTxAmount(uint256 newVal) public onlyOwner {
        maxTx = newVal;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"tokensIntoLiqudity","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"aliens","outputs":[{"internalType":"contract IAliens","name":"","type":"address"}],"stateMutability":"view","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":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cashoutAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"cashoutReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"changeSwapLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"createNodeWithRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"createNodeWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"futurFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getNodeNumberOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesCreatime","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesLastClaims","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesRewards","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardAmount","outputs":[{"internalType":"uint256[2]","name":"","type":"uint256[2]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getRewardAmountOf","outputs":[{"internalType":"uint256[2]","name":"","type":"uint256[2]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalCreatedNodes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStakedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"growAlien","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"growMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"liquidityPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuy","type":"uint256"},{"internalType":"uint256","name":"newSell","type":"uint256"}],"name":"lowerFeesOnLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodeManager","outputs":[{"internalType":"contract INodeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aliensAddress","type":"address"}],"name":"setAliens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGrowMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nodeManagement","type":"address"}],"name":"setNodeManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateDevWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityPoolFee","type":"uint256"},{"internalType":"uint256","name":"_futurFee","type":"uint256"}],"name":"updateFeeSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateFuturWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateRewardsWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newVal","type":"uint256[]"}],"name":"updateTiersRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"upgradeNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600d80546001600160a01b03191661dead1790556023601155603760125560196013556014805461ffff1916610100179055678ac7230489e800006016556017805460ff191690556101776018553480156200005f57600080fd5b506040518060400160405280600d81526020016c283937b532b1ba1027b934b7b760991b8152506040518060400160405280600381526020016227a92760e91b8152508160039081620000b391906200066a565b506004620000c282826200066a565b505050620000df620000d96200038f60201b60201c565b62000393565b600a80546001600160a01b0319908116732af5dff2ff0b71816e9e552a4e8ebe807016c2c017909155600b80548216735a45348cbdde5d073dab1a2d30f695f21faadffc179055600c805490911633179055737a250d5630b4cf539739df2c5dacb4c659f2488d62000155565b60405180910390fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c1919062000736565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000736565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a9919062000736565b600880546001600160a01b038086166001600160a01b03199283161790925560098054928416929091169190911790559050620002e8816001620003e5565b60596010556001600e55600a600f556200030d33693f870857a3e0e3800000620004dc565b600254693f870857a3e0e380000014620003795760405162461bcd60e51b815260206004820152602660248201527f434f4e5354523a20746f74616c537570706c79206d75737420657175616c2033604482015265030302c3030360d41b60648201526084016200014c565b505068056bc75e2d631000006015555062000790565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503620004885760405162461bcd60e51b815260206004820152604260248201527f454c454d454e54533a204175746f6d61746564206d61726b6574206d616b657260448201527f207061697220697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4016200014c565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620005345760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200014c565b806002600082825462000548919062000768565b90915550506001600160a01b038216600090815260208190526040812080548392906200057790849062000768565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005f157607f821691505b6020821081036200061257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005c157600081815260208120601f850160051c81016020861015620006415750805b601f850160051c820191505b8181101562000662578281556001016200064d565b505050505050565b81516001600160401b03811115620006865762000686620005c6565b6200069e81620006978454620005dc565b8462000618565b602080601f831160018114620006d65760008415620006bd5750858301515b600019600386901b1c1916600185901b17855562000662565b600085815260208120601f198616915b828110156200070757888601518255948401946001909101908401620006e6565b5085821015620007265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200074957600080fd5b81516001600160a01b03811681146200076157600080fd5b9392505050565b808201808211156200078a57634e487b7160e01b600052601160045260246000fd5b92915050565b61458680620007a06000396000f3fe6080604052600436106103bc5760003560e01c806365bfe430116101f2578063a9059cbb1161010d578063c5ca7d6d116100a0578063ee1afdbf1161006f578063ee1afdbf14610ae1578063f2fde38b14610af6578063f74c993414610b16578063fb0a749414610b3657600080fd5b8063c5ca7d6d14610a50578063c9567bf914610a70578063cc1776d314610a85578063dd62ed3e14610a9b57600080fd5b8063b62496f5116100dc578063b62496f5146109cb578063b96392c1146109fb578063bbc6799814610a1b578063bdf24a5314610a3b57600080fd5b8063a9059cbb14610955578063ab57476114610975578063af1531821461098b578063b5838a27146109ab57600080fd5b80638da5cb5b116101855780639a7a23d6116101545780639a7a23d6146108e05780639bb5cd3f14610900578063a0a8fe6514610920578063a457c2d71461093557600080fd5b80638da5cb5b146108775780639349c47d1461089557806395d89b41146108b557806399b08a3c146108ca57600080fd5b8063719803b4116101c1578063719803b4146107f757806375f0a874146108175780637d69f2f41461083757806385141a771461085757600080fd5b806365bfe430146107825780636770474b146107a257806370a08231146107c2578063715018a6146107e257600080fd5b806339509351116102e257806354f12f1f116102755780635b0d4674116102445780635b0d4674146107175780635f1c31821461072c5780636256d1811461074257806365b8dbc01461076257600080fd5b806354f12f1f146106a15780635770fa8f146106b7578063581f95a0146106d7578063583bd7a6146106f757600080fd5b806348e5642b116102b157806348e5642b1461064157806349bd5a5e146106565780634f7041a514610676578063545579731461068c57600080fd5b806339509351146105c15780633dadb1bd146105e15780633f84568914610601578063436d33401461062157600080fd5b8063138a634a1161035a57806323b872dd1161032957806323b872dd1461054f5780632594531d1461056f5780632bb14e1d1461058f578063313ce567146105a557600080fd5b8063138a634a146104db5780631694505e146104f057806318160ddd14610510578063217ff5d81461052f57600080fd5b8063095ea7b311610396578063095ea7b31461044957806309a69f57146104795780630c08f3001461049b57806312185a39146104bb57600080fd5b806301360e02146103c85780630605c4791461040557806306fdde031461042757600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506007546103e8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041157600080fd5b50610425610420366004613c9e565b610b56565b005b34801561043357600080fd5b5061043c610b8e565b6040516103fc9190613d07565b34801561045557600080fd5b50610469610464366004613d2f565b610c20565b60405190151581526020016103fc565b34801561048557600080fd5b5061048e610c37565b6040516103fc9190613d5b565b3480156104a757600080fd5b506104256104b6366004613d8c565b610d70565b3480156104c757600080fd5b506104256104d6366004613c9e565b610dbc565b3480156104e757600080fd5b5061043c610e3c565b3480156104fc57600080fd5b506008546103e8906001600160a01b031681565b34801561051c57600080fd5b506002545b6040519081526020016103fc565b34801561053b57600080fd5b5061042561054a366004613d8c565b610f70565b34801561055b57600080fd5b5061046961056a366004613da9565b610fbc565b34801561057b57600080fd5b5061042561058a366004613c9e565b611066565b34801561059b57600080fd5b50610521600e5481565b3480156105b157600080fd5b50604051601281526020016103fc565b3480156105cd57600080fd5b506104696105dc366004613d2f565b6110d9565b3480156105ed57600080fd5b506104256105fc366004613eaf565b611115565b34801561060d57600080fd5b5061042561061c366004613eff565b6114ce565b34801561062d57600080fd5b5061042561063c366004613c9e565b611569565b34801561064d57600080fd5b506105216115e9565b34801561066257600080fd5b506009546103e8906001600160a01b031681565b34801561068257600080fd5b5061052160115481565b34801561069857600080fd5b50610425611657565b3480156106ad57600080fd5b50610521600f5481565b3480156106c357600080fd5b506104256106d2366004613f2b565b6118a5565b3480156106e357600080fd5b506104256106f2366004613fd1565b611974565b34801561070357600080fd5b50610425610712366004614001565b611a37565b34801561072357600080fd5b5061043c611a7b565b34801561073857600080fd5b5061052160155481565b34801561074e57600080fd5b5061042561075d366004613c9e565b611b47565b34801561076e57600080fd5b5061042561077d366004613d8c565b611b76565b34801561078e57600080fd5b5061042561079d366004613c9e565b611dea565b3480156107ae57600080fd5b506104256107bd366004613c9e565b6120c4565b3480156107ce57600080fd5b506105216107dd366004613d8c565b6120f3565b3480156107ee57600080fd5b5061042561210e565b34801561080357600080fd5b50610425610812366004613c9e565b612144565b34801561082357600080fd5b50600a546103e8906001600160a01b031681565b34801561084357600080fd5b50610425610852366004613c9e565b612556565b34801561086357600080fd5b50600d546103e8906001600160a01b031681565b34801561088357600080fd5b506005546001600160a01b03166103e8565b3480156108a157600080fd5b506104256108b0366004613d8c565b612696565b3480156108c157600080fd5b5061043c6126e2565b3480156108d657600080fd5b5061052160165481565b3480156108ec57600080fd5b506104256108fb36600461401e565b6126f1565b34801561090c57600080fd5b506006546103e8906001600160a01b031681565b34801561092c57600080fd5b506105216127b9565b34801561094157600080fd5b50610469610950366004613d2f565b612803565b34801561096157600080fd5b50610469610970366004613d2f565b61289c565b34801561098157600080fd5b5061052160105481565b34801561099757600080fd5b506104256109a6366004613d8c565b6128a9565b3480156109b757600080fd5b50600c546103e8906001600160a01b031681565b3480156109d757600080fd5b506104696109e6366004613d8c565b60196020526000908152604090205460ff1681565b348015610a0757600080fd5b5061048e610a16366004613d8c565b6128f5565b348015610a2757600080fd5b50610425610a36366004614057565b612994565b348015610a4757600080fd5b5061043c612beb565b348015610a5c57600080fd5b50600b546103e8906001600160a01b031681565b348015610a7c57600080fd5b50610425612cb7565b348015610a9157600080fd5b5061052160125481565b348015610aa757600080fd5b50610521610ab636600461409c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aed57600080fd5b5061043c612d43565b348015610b0257600080fd5b50610425610b11366004613d8c565b612e0f565b348015610b2257600080fd5b50610521610b31366004613d8c565b612eaa565b348015610b4257600080fd5b50610425610b51366004613d8c565b612f19565b6005546001600160a01b03163314610b895760405162461bcd60e51b8152600401610b80906140ca565b60405180910390fd5b601655565b606060038054610b9d906140ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc9906140ff565b8015610c165780601f10610beb57610100808354040283529160200191610c16565b820191906000526020600020905b815481529060010190602001808311610bf957829003601f168201915b5050505050905090565b6000610c2d338484612f65565b5060015b92915050565b610c3f613c80565b33610c5c5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd69190614167565b610cf25760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663956de887336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b91906141ab565b905090565b6005546001600160a01b03163314610d9a5760405162461bcd60e51b8152600401610b80906140ca565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610de65760405162461bcd60e51b8152600401610b80906140ca565b6006811115610e375760405162461bcd60e51b815260206004820152601e60248201527f5441583a2073656c6c207461782063616e6e6f742065786365656420362500006044820152606401610b80565b601255565b606033610e5b5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190614167565b610ef15760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663ebb3c67a335b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381865afa158015610f48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d6b919081019061422b565b6005546001600160a01b03163314610f9a5760405162461bcd60e51b8152600401610b80906140ca565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fc9848484613089565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561104e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b80565b61105b8533858403612f65565b506001949350505050565b6005546001600160a01b031633146110905760405162461bcd60e51b8152600401610b80906140ca565b4781111561109b5750475b6005546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156110d5573d6000803e3d6000fd5b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c2d9185906111109086906142b8565b612f65565b60038251118015611127575060208251105b6111735760405162461bcd60e51b815260206004820181905260248201527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c49446044820152606401610b80565b33806111915760405162461bcd60e51b8152600401610b80906142cb565b600b546001600160a01b03908116908216036112055760405162461bcd60e51b815260206004820152602d60248201527f4e4f4445204352454154494f4e3a2072657761726473506f6f6c2063616e6e6f60448201526c7420637265617465206e6f646560981b6064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018490526000916001600160a01b03169063615cf8b890602401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190614319565b60065460405163939c6bfb60e01b81526001600160a01b038581166004830152602482018990529293506000929091169063939c6bfb90604401602060405180830381865afa1580156112ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ee9190614319565b905061130282670de0b6b3a7640000613450565b81101561136d5760405162461bcd60e51b815260206004820152603360248201527f4e4f4445204352454154494f4e3a205265776172642042616c616e636520746f60448201527237903637bb903337b91031b932b0ba34b7b71760691b6064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018690526001600160a01b039091169063d40614a990859089906113fa90670de0b6b3a764000090869063615cf8b890602401602060405180830381865afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f49190614319565b90613450565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b5050600654604051634810cb9960e11b81526001600160a01b0390911692506390219732915061149490869089908990600401614332565b600060405180830381600087803b1580156114ae57600080fd5b505af11580156114c2573d6000803e3d6000fd5b50505050505050505050565b6005546001600160a01b031633146114f85760405162461bcd60e51b8152600401610b80906140ca565b61150c816115068585613463565b90613463565b60641461155b5760405162461bcd60e51b815260206004820152601760248201527f46656573206d7573742061646420757020746f203130300000000000000000006044820152606401610b80565b600e92909255600f55601055565b6005546001600160a01b031633146115935760405162461bcd60e51b8152600401610b80906140ca565b60068111156115e45760405162461bcd60e51b815260206004820152601d60248201527f5441583a20627579207461782063616e6e6f74206578636565642036250000006044820152606401610b80565b601155565b600654604080516340bd8e6960e11b815290516000926001600160a01b03169163817b1cd29160048083019260209291908290030181865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b9190614319565b33806116b75760405162461bcd60e51b815260206004820152602960248201527f454c454d454e54533a20206372656174696f6e2066726f6d20746865207a65726044820152686f206164647265737360b81b6064820152608401610b80565b600a546001600160a01b038281169116148015906116e35750600b546001600160a01b03828116911614155b61174e5760405162461bcd60e51b815260206004820152603660248201527f454c454d454e54533a20667574757220616e642072657761726473506f6f6c2060448201527563616e6e6f7420636173686f7574207265776172647360501b6064820152608401610b80565b60065460405163956de88760e01b81526001600160a01b038381166004830152600092169063956de887906024016040805180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc91906141ab565b8051909150806118295760405162461bcd60e51b815260206004820152603260248201527f454c454d454e54533a20596f7520646f6e2774206861766520656e6f756768206044820152711c995dd85c99081d1bc818d85cda081bdd5d60721b6064820152608401610b80565b600b54611840906001600160a01b0316848361346f565b60065460405163d3b0dba960e01b81526001600160a01b0385811660048301529091169063d3b0dba9906024015b600060405180830381600087803b15801561188857600080fd5b505af115801561189c573d6000803e3d6000fd5b50505050505050565b6005546001600160a01b031633146118cf5760405162461bcd60e51b8152600401610b80906140ca565b805160051461190f5760405162461bcd60e51b815260206004820152600c60248201526b0aee4dedcce40d8cadccee8d60a31b6044820152606401610b80565b600654604051635770fa8f60e01b81526001600160a01b0390911690635770fa8f9061193f90849060040161437c565b600060405180830381600087803b15801561195957600080fd5b505af115801561196d573d6000803e3d6000fd5b5050505050565b6005546001600160a01b0316331461199e5760405162461bcd60e51b8152600401610b80906140ca565b6011548211156119e55760405162461bcd60e51b81526020600482015260126024820152712a30bc32b99037b7363c9033b7903237bbb760711b6044820152606401610b80565b601254811115611a2c5760405162461bcd60e51b81526020600482015260126024820152712a30bc32b99037b7363c9033b7903237bbb760711b6044820152606401610b80565b601191909155601255565b6005546001600160a01b03163314611a615760405162461bcd60e51b8152600401610b80906140ca565b601480549115156101000261ff0019909216919091179055565b606033611a9a5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b149190614167565b611b305760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663cc66ccea33610f04565b6005546001600160a01b03163314611b715760405162461bcd60e51b8152600401610b80906140ca565b601855565b6005546001600160a01b03163314611ba05760405162461bcd60e51b8152600401610b80906140ca565b6008546001600160a01b0390811690821603611c145760405162461bcd60e51b815260206004820152602d60248201527f454c454d454e54533a2054686520726f7574657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610b80565b6008546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906143c0565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5591906143c0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611da2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc691906143c0565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b3380611e435760405162461bcd60e51b815260206004820152602260248201527f435348543a202063616e27742066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610b80565b600a546001600160a01b03828116911614801590611e6f5750600b546001600160a01b03828116911614155b611ed65760405162461bcd60e51b815260206004820152603260248201527f435348543a20667574757220616e642072657761726473506f6f6c2063616e6e6044820152716f7420636173686f7574207265776172647360701b6064820152608401610b80565b60065460405163939c6bfb60e01b81526001600160a01b03838116600483015260248201859052600092169063939c6bfb90604401602060405180830381865afa158015611f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4c9190614319565b905060008111611fb55760405162461bcd60e51b815260206004820152602e60248201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160448201526d1c99081d1bc818d85cda081bdd5d60921b6064820152608401610b80565b60065460405163b769ec5560e01b81526001600160a01b0384811660048301526024820186905260448201849052600092169063b769ec55906064016020604051808303816000875af1158015612010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120349190614319565b600b54909150612057906001600160a01b03168461205285856135c4565b61346f565b600654604051633bcf707b60e01b81526001600160a01b0385811660048301526024820187905290911690633bcf707b906044015b600060405180830381600087803b1580156120a657600080fd5b505af11580156120ba573d6000803e3d6000fd5b5050505050505050565b6005546001600160a01b031633146120ee5760405162461bcd60e51b8152600401610b80906140ca565b601555565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146121385760405162461bcd60e51b8152600401610b80906140ca565b61214260006135d0565b565b33806121925760405162461bcd60e51b815260206004820152601a60248201527f5a65726f2061646472657373206e6f74207065726d69747465640000000000006044820152606401610b80565b600b546001600160a01b03908116908216036121e75760405162461bcd60e51b815260206004820152601460248201527343616e6e6f742075706772616465206e6f64657360601b6044820152606401610b80565b60065460405163a3078e6b60e01b81526001600160a01b03838116600483015260248201859052600092169063a3078e6b90604401602060405180830381865afa158015612239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225d9190614319565b9050600481106122b95760405162461bcd60e51b815260206004820152602160248201527f596f7572204e6f646520697320616c7265616479206174206d6178206c6576656044820152601b60fa1b6064820152608401610b80565b60006122c6826001613463565b600654604051630c2b9f1760e31b8152600481018590529192506000916001600160a01b039091169063615cf8b890602401602060405180830381865afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190614319565b600654604051630c2b9f1760e31b8152600481018590529192506000916001600160a01b039091169063615cf8b890602401602060405180830381865afa158015612388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ac9190614319565b905060006123c6670de0b6b3a76400006113f484866135c4565b60065460405163939c6bfb60e01b81526001600160a01b038981166004830152602482018b90529293506000929091169063939c6bfb90604401602060405180830381865afa15801561241d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124419190614319565b9050818111156124ca5761245f878961245a84866135c4565b613622565b600654604051633bcf707b60e01b81526001600160a01b038981166004830152602482018b905290911690633bcf707b90604401600060405180830381600087803b1580156124ad57600080fd5b505af11580156124c1573d6000803e3d6000fd5b505050506120ba565b818110156120ba576124e687896124e185856135c4565b6136f8565b600654604051633bcf707b60e01b81526001600160a01b038981166004830152602482018b905290911690633bcf707b90604401600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b505050505050505050505050565b60003360075460405163e51862dd60e01b8152600481018590529192506000916001600160a01b039091169063e51862dd90602401602060405180830381865afa1580156125a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cc9190614319565b905060006125e56016548361345090919063ffffffff16565b9050806125f1846120f3565b1161264d5760405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f75676820454c454d454e545320746f2067726f7720796f75726044820152651020b634b2b760d11b6064820152608401610b80565b600b546126659084906001600160a01b03168361346f565b600754604051631f5a7cbd60e21b8152600481018690526001600160a01b0390911690637d69f2f49060240161208c565b6005546001600160a01b031633146126c05760405162461bcd60e51b8152600401610b80906140ca565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610b9d906140ff565b6005546001600160a01b0316331461271b5760405162461bcd60e51b8152600401610b80906140ca565b6009546001600160a01b03908116908316036127af5760405162461bcd60e51b815260206004820152604760248201527f454c454d454e54533a205468652044455820706169722063616e6e6f7420626560448201527f2072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6064820152666572506169727360c81b608482015260a401610b80565b6110d58282613749565b6006546040805163b8527aef60e01b815290516000926001600160a01b03169163b8527aef9160048083019260209291908290030181865afa158015611633573d6000803e3d6000fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156128855760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b80565b6128923385858403612f65565b5060019392505050565b6000610c2d338484613089565b6005546001600160a01b031633146128d35760405162461bcd60e51b8152600401610b80906140ca565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6128fd613c80565b6005546001600160a01b031633146129275760405162461bcd60e51b8152600401610b80906140ca565b60065460405163956de88760e01b81526001600160a01b0384811660048301529091169063956de887906024016040805180830381865afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3191906141ab565b600382511180156129a6575060208251105b6129f25760405162461bcd60e51b815260206004820181905260248201527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c49446044820152606401610b80565b3380612a105760405162461bcd60e51b8152600401610b80906142cb565b600b546001600160a01b0390811690821603612a945760405162461bcd60e51b815260206004820152603c60248201527f4e4f4445204352454154494f4e3a2066757475722c2064657620616e6420726560448201527f7761726473506f6f6c2063616e6e6f7420637265617465206e6f6465000000006064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018490526000916001600160a01b03169063615cf8b890602401602060405180830381865afa158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b029190614319565b9050612b1681670de0b6b3a7640000613450565b612b1f836120f3565b1015612b935760405162461bcd60e51b815260206004820152603c60248201527f4e4f4445204352454154494f4e3a2042616c616e636520746f6f206c6f77206660448201527f6f72206372656174696f6e2e20547279206c6f77657220746965722e000000006064820152608401610b80565b600b54612bb79083906001600160a01b031661205284670de0b6b3a7640000613450565b600654604051634810cb9960e11b81526001600160a01b039091169063902197329061208c90859088908890600401614332565b606033612c0a5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c849190614167565b612ca05760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b0316639dab00f733610f04565b6005546001600160a01b03163314612ce15760405162461bcd60e51b8152600401610b80906140ca565b60175460ff1615612d345760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610b80565b6017805460ff19166001179055565b606033612d625760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddc9190614167565b612df85760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663b19197f733610f04565b6005546001600160a01b03163314612e395760405162461bcd60e51b8152600401610b80906140ca565b6001600160a01b038116612e9e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b80565b612ea7816135d0565b50565b600654604051633dd3264d60e21b81526001600160a01b038381166004830152600092169063f74c993490602401602060405180830381865afa158015612ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190614319565b6005546001600160a01b03163314612f435760405162461bcd60e51b8152600401610b80906140ca565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316612fc75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b80565b6001600160a01b0382166130285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b80565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166130af5760405162461bcd60e51b8152600401610b80906143dd565b6001600160a01b0382166130d55760405162461bcd60e51b8152600401610b8090614422565b6001600160a01b03821660009081526019602052604090205460ff16801561311f57506001600160a01b038316301480159061311f57506005546001600160a01b03848116911614155b1561316557600061314660646131406012548561345090919063ffffffff16565b9061383e565b905061315384308361346f565b61315d82826135c4565b9150506131eb565b6001600160a01b03831660009081526019602052604090205460ff1680156131af57506001600160a01b03821630148015906131af57506005546001600160a01b03838116911614155b156131eb5760006131d060646131406011548561345090919063ffffffff16565b90506131dd84308361346f565b6131e782826135c4565b9150505b8060006131f7306120f3565b601554909150811080159081906132155750601454610100900460ff165b8015613224575060145460ff16155b801561323e57506005546001600160a01b03878116911614155b801561326357506001600160a01b03861660009081526019602052604090205460ff16155b156132705761327061384a565b6005546001600160a01b0387811691161480159061329c57506009546001600160a01b03868116911614155b80156132b657506008546001600160a01b03868116911614155b80156132cb57506001600160a01b0385163014155b80156132e057506001600160a01b0386163014155b1561343d5760175460ff166133375760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b80565b600a546001600160a01b038681169116148015906133635750600b546001600160a01b03868116911614155b801561337d5750600c546001600160a01b03868116911614155b80156133975750600a546001600160a01b03878116911614155b80156133b15750600b546001600160a01b03878116911614155b80156133cb5750600c546001600160a01b03878116911614155b1561343d5760006133db866120f3565b6018549091506133f390670de0b6b3a7640000613450565b6133fd8583613463565b111561343b5760405162461bcd60e51b815260206004820152600d60248201526c3bb0b63632ba103634b6b4ba1760991b6044820152606401610b80565b505b61344886868561346f565b505050505050565b600061345c8284614465565b9392505050565b600061345c82846142b8565b6001600160a01b0383166134955760405162461bcd60e51b8152600401610b80906143dd565b6001600160a01b0382166134bb5760405162461bcd60e51b8152600401610b8090614422565b6001600160a01b038316600090815260208190526040902054818110156135335760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b80565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061356a9084906142b8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135b691815260200190565b60405180910390a350505050565b600061345c828461447c565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60065460405163b769ec5560e01b81526001600160a01b0385811660048301526024820185905260448201849052600092169063b769ec55906064016020604051808303816000875af115801561367d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a19190614319565b600b549091506136bf906001600160a01b03168561205285856135c4565b60065460405163dd12698f60e01b81526001600160a01b038681166004830152602482018690529091169063dd12698f9060440161208c565b600b546137109084906001600160a01b03168361346f565b60065460405163dd12698f60e01b81526001600160a01b038581166004830152602482018590529091169063dd12698f9060440161186e565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036137ea5760405162461bcd60e51b815260206004820152604260248201527f454c454d454e54533a204175746f6d61746564206d61726b6574206d616b657260448201527f207061697220697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610b80565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600061345c828461448f565b6014805460ff191660011790556000613862306120f3565b9050600061388060646131406010548561345090919063ffffffff16565b9050600061389e60646131406013548561345090919063ffffffff16565b905060006138ac83836135c4565b905060006138ca6064613140600e548861345090919063ffffffff16565b600b549091506138e59030906001600160a01b03168361346f565b60006139016064613140600f548961345090919063ffffffff16565b905061390c816139fa565b61391d613918306120f3565b613a81565b60006139298585613463565b600c5490915047906000906001600160a01b031661394b84613140858b613450565b604051600081818185875af1925050503d8060008114613987576040519150601f19603f3d011682016040523d82523d6000602084013e61398c565b606091505b5050600a546040519192506001600160a01b031690303190600081818185875af1925050503d80600081146139dd576040519150601f19603f3d011682016040523d82523d6000602084013e6139e2565b606091505b50506014805460ff1916905550505050505050505050565b6000613a0782600261383e565b90506000613a1583836135c4565b905047613a2183613a81565b6000613a2d47836135c4565b9050613a398382613bd3565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ab657613ab6614366565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3391906143c0565b81600181518110613b4657613b46614366565b6001600160a01b039283166020918202929092010152600854613b6c9130911684612f65565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790613ba59085906000908690309042906004016144b1565b600060405180830381600087803b158015613bbf57600080fd5b505af1158015613448573d6000803e3d6000fd5b600854613beb9030906001600160a01b031684612f65565b600854600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613c5b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061196d9190614522565b60405180604001604052806002906020820280368337509192915050565b600060208284031215613cb057600080fd5b5035919050565b60005b83811015613cd2578181015183820152602001613cba565b50506000910152565b60008151808452613cf3816020860160208601613cb7565b601f01601f19169290920160200192915050565b60208152600061345c6020830184613cdb565b6001600160a01b0381168114612ea757600080fd5b60008060408385031215613d4257600080fd5b8235613d4d81613d1a565b946020939093013593505050565b60408101818360005b6002811015613d83578151835260209283019290910190600101613d64565b50505092915050565b600060208284031215613d9e57600080fd5b813561345c81613d1a565b600080600060608486031215613dbe57600080fd5b8335613dc981613d1a565b92506020840135613dd981613d1a565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e2957613e29613dea565b604052919050565b600067ffffffffffffffff821115613e4b57613e4b613dea565b50601f01601f191660200190565b600082601f830112613e6a57600080fd5b8135613e7d613e7882613e31565b613e00565b818152846020838601011115613e9257600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613ec457600080fd5b83359250602084013567ffffffffffffffff811115613ee257600080fd5b613eee86828701613e59565b925050604084013590509250925092565b600080600060608486031215613f1457600080fd5b505081359360208301359350604090920135919050565b60006020808385031215613f3e57600080fd5b823567ffffffffffffffff80821115613f5657600080fd5b818501915085601f830112613f6a57600080fd5b813581811115613f7c57613f7c613dea565b8060051b9150613f8d848301613e00565b8181529183018401918481019088841115613fa757600080fd5b938501935b83851015613fc557843582529385019390850190613fac565b98975050505050505050565b60008060408385031215613fe457600080fd5b50508035926020909101359150565b8015158114612ea757600080fd5b60006020828403121561401357600080fd5b813561345c81613ff3565b6000806040838503121561403157600080fd5b823561403c81613d1a565b9150602083013561404c81613ff3565b809150509250929050565b6000806040838503121561406a57600080fd5b823567ffffffffffffffff81111561408157600080fd5b61408d85828601613e59565b95602094909401359450505050565b600080604083850312156140af57600080fd5b82356140ba81613d1a565b9150602083013561404c81613d1a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061411357607f821691505b60208210810361413357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526014908201527353454e4445522043414e2754204245205a45524f60601b604082015260600190565b60006020828403121561417957600080fd5b815161345c81613ff3565b6020808252600d908201526c2727902727a2229027aba722a960991b604082015260600190565b6000604082840312156141bd57600080fd5b82601f8301126141cc57600080fd5b6040516040810181811067ffffffffffffffff821117156141ef576141ef613dea565b806040525080604084018581111561420657600080fd5b845b81811015614220578051835260209283019201614208565b509195945050505050565b60006020828403121561423d57600080fd5b815167ffffffffffffffff81111561425457600080fd5b8201601f8101841361426557600080fd5b8051614273613e7882613e31565b81815285602083850101111561428857600080fd5b614299826020830160208601613cb7565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3157610c316142a2565b6020808252602e908201527f4e4f4445204352454154494f4e3a20206372656174696f6e2066726f6d20746860408201526d65207a65726f206164647265737360901b606082015260800190565b60006020828403121561432b57600080fd5b5051919050565b6001600160a01b038416815260606020820181905260009061435690830185613cdb565b9050826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156143b457835183529284019291840191600101614398565b50909695505050505050565b6000602082840312156143d257600080fd5b815161345c81613d1a565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610c3157610c316142a2565b81810381811115610c3157610c316142a2565b6000826144ac57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156145015784516001600160a01b0316835293830193918301916001016144dc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561453757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220196c9aa2616d071f00062df5ce807c0f16e48d53d178082192525385c4f41f1964736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806365bfe430116101f2578063a9059cbb1161010d578063c5ca7d6d116100a0578063ee1afdbf1161006f578063ee1afdbf14610ae1578063f2fde38b14610af6578063f74c993414610b16578063fb0a749414610b3657600080fd5b8063c5ca7d6d14610a50578063c9567bf914610a70578063cc1776d314610a85578063dd62ed3e14610a9b57600080fd5b8063b62496f5116100dc578063b62496f5146109cb578063b96392c1146109fb578063bbc6799814610a1b578063bdf24a5314610a3b57600080fd5b8063a9059cbb14610955578063ab57476114610975578063af1531821461098b578063b5838a27146109ab57600080fd5b80638da5cb5b116101855780639a7a23d6116101545780639a7a23d6146108e05780639bb5cd3f14610900578063a0a8fe6514610920578063a457c2d71461093557600080fd5b80638da5cb5b146108775780639349c47d1461089557806395d89b41146108b557806399b08a3c146108ca57600080fd5b8063719803b4116101c1578063719803b4146107f757806375f0a874146108175780637d69f2f41461083757806385141a771461085757600080fd5b806365bfe430146107825780636770474b146107a257806370a08231146107c2578063715018a6146107e257600080fd5b806339509351116102e257806354f12f1f116102755780635b0d4674116102445780635b0d4674146107175780635f1c31821461072c5780636256d1811461074257806365b8dbc01461076257600080fd5b806354f12f1f146106a15780635770fa8f146106b7578063581f95a0146106d7578063583bd7a6146106f757600080fd5b806348e5642b116102b157806348e5642b1461064157806349bd5a5e146106565780634f7041a514610676578063545579731461068c57600080fd5b806339509351146105c15780633dadb1bd146105e15780633f84568914610601578063436d33401461062157600080fd5b8063138a634a1161035a57806323b872dd1161032957806323b872dd1461054f5780632594531d1461056f5780632bb14e1d1461058f578063313ce567146105a557600080fd5b8063138a634a146104db5780631694505e146104f057806318160ddd14610510578063217ff5d81461052f57600080fd5b8063095ea7b311610396578063095ea7b31461044957806309a69f57146104795780630c08f3001461049b57806312185a39146104bb57600080fd5b806301360e02146103c85780630605c4791461040557806306fdde031461042757600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506007546103e8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041157600080fd5b50610425610420366004613c9e565b610b56565b005b34801561043357600080fd5b5061043c610b8e565b6040516103fc9190613d07565b34801561045557600080fd5b50610469610464366004613d2f565b610c20565b60405190151581526020016103fc565b34801561048557600080fd5b5061048e610c37565b6040516103fc9190613d5b565b3480156104a757600080fd5b506104256104b6366004613d8c565b610d70565b3480156104c757600080fd5b506104256104d6366004613c9e565b610dbc565b3480156104e757600080fd5b5061043c610e3c565b3480156104fc57600080fd5b506008546103e8906001600160a01b031681565b34801561051c57600080fd5b506002545b6040519081526020016103fc565b34801561053b57600080fd5b5061042561054a366004613d8c565b610f70565b34801561055b57600080fd5b5061046961056a366004613da9565b610fbc565b34801561057b57600080fd5b5061042561058a366004613c9e565b611066565b34801561059b57600080fd5b50610521600e5481565b3480156105b157600080fd5b50604051601281526020016103fc565b3480156105cd57600080fd5b506104696105dc366004613d2f565b6110d9565b3480156105ed57600080fd5b506104256105fc366004613eaf565b611115565b34801561060d57600080fd5b5061042561061c366004613eff565b6114ce565b34801561062d57600080fd5b5061042561063c366004613c9e565b611569565b34801561064d57600080fd5b506105216115e9565b34801561066257600080fd5b506009546103e8906001600160a01b031681565b34801561068257600080fd5b5061052160115481565b34801561069857600080fd5b50610425611657565b3480156106ad57600080fd5b50610521600f5481565b3480156106c357600080fd5b506104256106d2366004613f2b565b6118a5565b3480156106e357600080fd5b506104256106f2366004613fd1565b611974565b34801561070357600080fd5b50610425610712366004614001565b611a37565b34801561072357600080fd5b5061043c611a7b565b34801561073857600080fd5b5061052160155481565b34801561074e57600080fd5b5061042561075d366004613c9e565b611b47565b34801561076e57600080fd5b5061042561077d366004613d8c565b611b76565b34801561078e57600080fd5b5061042561079d366004613c9e565b611dea565b3480156107ae57600080fd5b506104256107bd366004613c9e565b6120c4565b3480156107ce57600080fd5b506105216107dd366004613d8c565b6120f3565b3480156107ee57600080fd5b5061042561210e565b34801561080357600080fd5b50610425610812366004613c9e565b612144565b34801561082357600080fd5b50600a546103e8906001600160a01b031681565b34801561084357600080fd5b50610425610852366004613c9e565b612556565b34801561086357600080fd5b50600d546103e8906001600160a01b031681565b34801561088357600080fd5b506005546001600160a01b03166103e8565b3480156108a157600080fd5b506104256108b0366004613d8c565b612696565b3480156108c157600080fd5b5061043c6126e2565b3480156108d657600080fd5b5061052160165481565b3480156108ec57600080fd5b506104256108fb36600461401e565b6126f1565b34801561090c57600080fd5b506006546103e8906001600160a01b031681565b34801561092c57600080fd5b506105216127b9565b34801561094157600080fd5b50610469610950366004613d2f565b612803565b34801561096157600080fd5b50610469610970366004613d2f565b61289c565b34801561098157600080fd5b5061052160105481565b34801561099757600080fd5b506104256109a6366004613d8c565b6128a9565b3480156109b757600080fd5b50600c546103e8906001600160a01b031681565b3480156109d757600080fd5b506104696109e6366004613d8c565b60196020526000908152604090205460ff1681565b348015610a0757600080fd5b5061048e610a16366004613d8c565b6128f5565b348015610a2757600080fd5b50610425610a36366004614057565b612994565b348015610a4757600080fd5b5061043c612beb565b348015610a5c57600080fd5b50600b546103e8906001600160a01b031681565b348015610a7c57600080fd5b50610425612cb7565b348015610a9157600080fd5b5061052160125481565b348015610aa757600080fd5b50610521610ab636600461409c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aed57600080fd5b5061043c612d43565b348015610b0257600080fd5b50610425610b11366004613d8c565b612e0f565b348015610b2257600080fd5b50610521610b31366004613d8c565b612eaa565b348015610b4257600080fd5b50610425610b51366004613d8c565b612f19565b6005546001600160a01b03163314610b895760405162461bcd60e51b8152600401610b80906140ca565b60405180910390fd5b601655565b606060038054610b9d906140ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc9906140ff565b8015610c165780601f10610beb57610100808354040283529160200191610c16565b820191906000526020600020905b815481529060010190602001808311610bf957829003601f168201915b5050505050905090565b6000610c2d338484612f65565b5060015b92915050565b610c3f613c80565b33610c5c5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd69190614167565b610cf25760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663956de887336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b91906141ab565b905090565b6005546001600160a01b03163314610d9a5760405162461bcd60e51b8152600401610b80906140ca565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610de65760405162461bcd60e51b8152600401610b80906140ca565b6006811115610e375760405162461bcd60e51b815260206004820152601e60248201527f5441583a2073656c6c207461782063616e6e6f742065786365656420362500006044820152606401610b80565b601255565b606033610e5b5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190614167565b610ef15760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663ebb3c67a335b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381865afa158015610f48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d6b919081019061422b565b6005546001600160a01b03163314610f9a5760405162461bcd60e51b8152600401610b80906140ca565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fc9848484613089565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561104e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b80565b61105b8533858403612f65565b506001949350505050565b6005546001600160a01b031633146110905760405162461bcd60e51b8152600401610b80906140ca565b4781111561109b5750475b6005546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156110d5573d6000803e3d6000fd5b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c2d9185906111109086906142b8565b612f65565b60038251118015611127575060208251105b6111735760405162461bcd60e51b815260206004820181905260248201527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c49446044820152606401610b80565b33806111915760405162461bcd60e51b8152600401610b80906142cb565b600b546001600160a01b03908116908216036112055760405162461bcd60e51b815260206004820152602d60248201527f4e4f4445204352454154494f4e3a2072657761726473506f6f6c2063616e6e6f60448201526c7420637265617465206e6f646560981b6064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018490526000916001600160a01b03169063615cf8b890602401602060405180830381865afa15801561124f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112739190614319565b60065460405163939c6bfb60e01b81526001600160a01b038581166004830152602482018990529293506000929091169063939c6bfb90604401602060405180830381865afa1580156112ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ee9190614319565b905061130282670de0b6b3a7640000613450565b81101561136d5760405162461bcd60e51b815260206004820152603360248201527f4e4f4445204352454154494f4e3a205265776172642042616c616e636520746f60448201527237903637bb903337b91031b932b0ba34b7b71760691b6064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018690526001600160a01b039091169063d40614a990859089906113fa90670de0b6b3a764000090869063615cf8b890602401602060405180830381865afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f49190614319565b90613450565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b5050600654604051634810cb9960e11b81526001600160a01b0390911692506390219732915061149490869089908990600401614332565b600060405180830381600087803b1580156114ae57600080fd5b505af11580156114c2573d6000803e3d6000fd5b50505050505050505050565b6005546001600160a01b031633146114f85760405162461bcd60e51b8152600401610b80906140ca565b61150c816115068585613463565b90613463565b60641461155b5760405162461bcd60e51b815260206004820152601760248201527f46656573206d7573742061646420757020746f203130300000000000000000006044820152606401610b80565b600e92909255600f55601055565b6005546001600160a01b031633146115935760405162461bcd60e51b8152600401610b80906140ca565b60068111156115e45760405162461bcd60e51b815260206004820152601d60248201527f5441583a20627579207461782063616e6e6f74206578636565642036250000006044820152606401610b80565b601155565b600654604080516340bd8e6960e11b815290516000926001600160a01b03169163817b1cd29160048083019260209291908290030181865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b9190614319565b33806116b75760405162461bcd60e51b815260206004820152602960248201527f454c454d454e54533a20206372656174696f6e2066726f6d20746865207a65726044820152686f206164647265737360b81b6064820152608401610b80565b600a546001600160a01b038281169116148015906116e35750600b546001600160a01b03828116911614155b61174e5760405162461bcd60e51b815260206004820152603660248201527f454c454d454e54533a20667574757220616e642072657761726473506f6f6c2060448201527563616e6e6f7420636173686f7574207265776172647360501b6064820152608401610b80565b60065460405163956de88760e01b81526001600160a01b038381166004830152600092169063956de887906024016040805180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc91906141ab565b8051909150806118295760405162461bcd60e51b815260206004820152603260248201527f454c454d454e54533a20596f7520646f6e2774206861766520656e6f756768206044820152711c995dd85c99081d1bc818d85cda081bdd5d60721b6064820152608401610b80565b600b54611840906001600160a01b0316848361346f565b60065460405163d3b0dba960e01b81526001600160a01b0385811660048301529091169063d3b0dba9906024015b600060405180830381600087803b15801561188857600080fd5b505af115801561189c573d6000803e3d6000fd5b50505050505050565b6005546001600160a01b031633146118cf5760405162461bcd60e51b8152600401610b80906140ca565b805160051461190f5760405162461bcd60e51b815260206004820152600c60248201526b0aee4dedcce40d8cadccee8d60a31b6044820152606401610b80565b600654604051635770fa8f60e01b81526001600160a01b0390911690635770fa8f9061193f90849060040161437c565b600060405180830381600087803b15801561195957600080fd5b505af115801561196d573d6000803e3d6000fd5b5050505050565b6005546001600160a01b0316331461199e5760405162461bcd60e51b8152600401610b80906140ca565b6011548211156119e55760405162461bcd60e51b81526020600482015260126024820152712a30bc32b99037b7363c9033b7903237bbb760711b6044820152606401610b80565b601254811115611a2c5760405162461bcd60e51b81526020600482015260126024820152712a30bc32b99037b7363c9033b7903237bbb760711b6044820152606401610b80565b601191909155601255565b6005546001600160a01b03163314611a615760405162461bcd60e51b8152600401610b80906140ca565b601480549115156101000261ff0019909216919091179055565b606033611a9a5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b149190614167565b611b305760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663cc66ccea33610f04565b6005546001600160a01b03163314611b715760405162461bcd60e51b8152600401610b80906140ca565b601855565b6005546001600160a01b03163314611ba05760405162461bcd60e51b8152600401610b80906140ca565b6008546001600160a01b0390811690821603611c145760405162461bcd60e51b815260206004820152602d60248201527f454c454d454e54533a2054686520726f7574657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610b80565b6008546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906143c0565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5591906143c0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611da2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc691906143c0565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b3380611e435760405162461bcd60e51b815260206004820152602260248201527f435348543a202063616e27742066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610b80565b600a546001600160a01b03828116911614801590611e6f5750600b546001600160a01b03828116911614155b611ed65760405162461bcd60e51b815260206004820152603260248201527f435348543a20667574757220616e642072657761726473506f6f6c2063616e6e6044820152716f7420636173686f7574207265776172647360701b6064820152608401610b80565b60065460405163939c6bfb60e01b81526001600160a01b03838116600483015260248201859052600092169063939c6bfb90604401602060405180830381865afa158015611f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4c9190614319565b905060008111611fb55760405162461bcd60e51b815260206004820152602e60248201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160448201526d1c99081d1bc818d85cda081bdd5d60921b6064820152608401610b80565b60065460405163b769ec5560e01b81526001600160a01b0384811660048301526024820186905260448201849052600092169063b769ec55906064016020604051808303816000875af1158015612010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120349190614319565b600b54909150612057906001600160a01b03168461205285856135c4565b61346f565b600654604051633bcf707b60e01b81526001600160a01b0385811660048301526024820187905290911690633bcf707b906044015b600060405180830381600087803b1580156120a657600080fd5b505af11580156120ba573d6000803e3d6000fd5b5050505050505050565b6005546001600160a01b031633146120ee5760405162461bcd60e51b8152600401610b80906140ca565b601555565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146121385760405162461bcd60e51b8152600401610b80906140ca565b61214260006135d0565b565b33806121925760405162461bcd60e51b815260206004820152601a60248201527f5a65726f2061646472657373206e6f74207065726d69747465640000000000006044820152606401610b80565b600b546001600160a01b03908116908216036121e75760405162461bcd60e51b815260206004820152601460248201527343616e6e6f742075706772616465206e6f64657360601b6044820152606401610b80565b60065460405163a3078e6b60e01b81526001600160a01b03838116600483015260248201859052600092169063a3078e6b90604401602060405180830381865afa158015612239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225d9190614319565b9050600481106122b95760405162461bcd60e51b815260206004820152602160248201527f596f7572204e6f646520697320616c7265616479206174206d6178206c6576656044820152601b60fa1b6064820152608401610b80565b60006122c6826001613463565b600654604051630c2b9f1760e31b8152600481018590529192506000916001600160a01b039091169063615cf8b890602401602060405180830381865afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190614319565b600654604051630c2b9f1760e31b8152600481018590529192506000916001600160a01b039091169063615cf8b890602401602060405180830381865afa158015612388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ac9190614319565b905060006123c6670de0b6b3a76400006113f484866135c4565b60065460405163939c6bfb60e01b81526001600160a01b038981166004830152602482018b90529293506000929091169063939c6bfb90604401602060405180830381865afa15801561241d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124419190614319565b9050818111156124ca5761245f878961245a84866135c4565b613622565b600654604051633bcf707b60e01b81526001600160a01b038981166004830152602482018b905290911690633bcf707b90604401600060405180830381600087803b1580156124ad57600080fd5b505af11580156124c1573d6000803e3d6000fd5b505050506120ba565b818110156120ba576124e687896124e185856135c4565b6136f8565b600654604051633bcf707b60e01b81526001600160a01b038981166004830152602482018b905290911690633bcf707b90604401600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b505050505050505050505050565b60003360075460405163e51862dd60e01b8152600481018590529192506000916001600160a01b039091169063e51862dd90602401602060405180830381865afa1580156125a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cc9190614319565b905060006125e56016548361345090919063ffffffff16565b9050806125f1846120f3565b1161264d5760405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f75676820454c454d454e545320746f2067726f7720796f75726044820152651020b634b2b760d11b6064820152608401610b80565b600b546126659084906001600160a01b03168361346f565b600754604051631f5a7cbd60e21b8152600481018690526001600160a01b0390911690637d69f2f49060240161208c565b6005546001600160a01b031633146126c05760405162461bcd60e51b8152600401610b80906140ca565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610b9d906140ff565b6005546001600160a01b0316331461271b5760405162461bcd60e51b8152600401610b80906140ca565b6009546001600160a01b03908116908316036127af5760405162461bcd60e51b815260206004820152604760248201527f454c454d454e54533a205468652044455820706169722063616e6e6f7420626560448201527f2072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6064820152666572506169727360c81b608482015260a401610b80565b6110d58282613749565b6006546040805163b8527aef60e01b815290516000926001600160a01b03169163b8527aef9160048083019260209291908290030181865afa158015611633573d6000803e3d6000fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156128855760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b80565b6128923385858403612f65565b5060019392505050565b6000610c2d338484613089565b6005546001600160a01b031633146128d35760405162461bcd60e51b8152600401610b80906140ca565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6128fd613c80565b6005546001600160a01b031633146129275760405162461bcd60e51b8152600401610b80906140ca565b60065460405163956de88760e01b81526001600160a01b0384811660048301529091169063956de887906024016040805180830381865afa158015612970573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3191906141ab565b600382511180156129a6575060208251105b6129f25760405162461bcd60e51b815260206004820181905260248201527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c49446044820152606401610b80565b3380612a105760405162461bcd60e51b8152600401610b80906142cb565b600b546001600160a01b0390811690821603612a945760405162461bcd60e51b815260206004820152603c60248201527f4e4f4445204352454154494f4e3a2066757475722c2064657620616e6420726560448201527f7761726473506f6f6c2063616e6e6f7420637265617465206e6f6465000000006064820152608401610b80565b600654604051630c2b9f1760e31b8152600481018490526000916001600160a01b03169063615cf8b890602401602060405180830381865afa158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b029190614319565b9050612b1681670de0b6b3a7640000613450565b612b1f836120f3565b1015612b935760405162461bcd60e51b815260206004820152603c60248201527f4e4f4445204352454154494f4e3a2042616c616e636520746f6f206c6f77206660448201527f6f72206372656174696f6e2e20547279206c6f77657220746965722e000000006064820152608401610b80565b600b54612bb79083906001600160a01b031661205284670de0b6b3a7640000613450565b600654604051634810cb9960e11b81526001600160a01b039091169063902197329061208c90859088908890600401614332565b606033612c0a5760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c849190614167565b612ca05760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b0316639dab00f733610f04565b6005546001600160a01b03163314612ce15760405162461bcd60e51b8152600401610b80906140ca565b60175460ff1615612d345760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610b80565b6017805460ff19166001179055565b606033612d625760405162461bcd60e51b8152600401610b8090614139565b6006546001600160a01b03166315f7aaab336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddc9190614167565b612df85760405162461bcd60e51b8152600401610b8090614184565b6006546001600160a01b031663b19197f733610f04565b6005546001600160a01b03163314612e395760405162461bcd60e51b8152600401610b80906140ca565b6001600160a01b038116612e9e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b80565b612ea7816135d0565b50565b600654604051633dd3264d60e21b81526001600160a01b038381166004830152600092169063f74c993490602401602060405180830381865afa158015612ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190614319565b6005546001600160a01b03163314612f435760405162461bcd60e51b8152600401610b80906140ca565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316612fc75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b80565b6001600160a01b0382166130285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b80565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166130af5760405162461bcd60e51b8152600401610b80906143dd565b6001600160a01b0382166130d55760405162461bcd60e51b8152600401610b8090614422565b6001600160a01b03821660009081526019602052604090205460ff16801561311f57506001600160a01b038316301480159061311f57506005546001600160a01b03848116911614155b1561316557600061314660646131406012548561345090919063ffffffff16565b9061383e565b905061315384308361346f565b61315d82826135c4565b9150506131eb565b6001600160a01b03831660009081526019602052604090205460ff1680156131af57506001600160a01b03821630148015906131af57506005546001600160a01b03838116911614155b156131eb5760006131d060646131406011548561345090919063ffffffff16565b90506131dd84308361346f565b6131e782826135c4565b9150505b8060006131f7306120f3565b601554909150811080159081906132155750601454610100900460ff165b8015613224575060145460ff16155b801561323e57506005546001600160a01b03878116911614155b801561326357506001600160a01b03861660009081526019602052604090205460ff16155b156132705761327061384a565b6005546001600160a01b0387811691161480159061329c57506009546001600160a01b03868116911614155b80156132b657506008546001600160a01b03868116911614155b80156132cb57506001600160a01b0385163014155b80156132e057506001600160a01b0386163014155b1561343d5760175460ff166133375760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b80565b600a546001600160a01b038681169116148015906133635750600b546001600160a01b03868116911614155b801561337d5750600c546001600160a01b03868116911614155b80156133975750600a546001600160a01b03878116911614155b80156133b15750600b546001600160a01b03878116911614155b80156133cb5750600c546001600160a01b03878116911614155b1561343d5760006133db866120f3565b6018549091506133f390670de0b6b3a7640000613450565b6133fd8583613463565b111561343b5760405162461bcd60e51b815260206004820152600d60248201526c3bb0b63632ba103634b6b4ba1760991b6044820152606401610b80565b505b61344886868561346f565b505050505050565b600061345c8284614465565b9392505050565b600061345c82846142b8565b6001600160a01b0383166134955760405162461bcd60e51b8152600401610b80906143dd565b6001600160a01b0382166134bb5760405162461bcd60e51b8152600401610b8090614422565b6001600160a01b038316600090815260208190526040902054818110156135335760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b80565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061356a9084906142b8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135b691815260200190565b60405180910390a350505050565b600061345c828461447c565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60065460405163b769ec5560e01b81526001600160a01b0385811660048301526024820185905260448201849052600092169063b769ec55906064016020604051808303816000875af115801561367d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a19190614319565b600b549091506136bf906001600160a01b03168561205285856135c4565b60065460405163dd12698f60e01b81526001600160a01b038681166004830152602482018690529091169063dd12698f9060440161208c565b600b546137109084906001600160a01b03168361346f565b60065460405163dd12698f60e01b81526001600160a01b038581166004830152602482018590529091169063dd12698f9060440161186e565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036137ea5760405162461bcd60e51b815260206004820152604260248201527f454c454d454e54533a204175746f6d61746564206d61726b6574206d616b657260448201527f207061697220697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a401610b80565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600061345c828461448f565b6014805460ff191660011790556000613862306120f3565b9050600061388060646131406010548561345090919063ffffffff16565b9050600061389e60646131406013548561345090919063ffffffff16565b905060006138ac83836135c4565b905060006138ca6064613140600e548861345090919063ffffffff16565b600b549091506138e59030906001600160a01b03168361346f565b60006139016064613140600f548961345090919063ffffffff16565b905061390c816139fa565b61391d613918306120f3565b613a81565b60006139298585613463565b600c5490915047906000906001600160a01b031661394b84613140858b613450565b604051600081818185875af1925050503d8060008114613987576040519150601f19603f3d011682016040523d82523d6000602084013e61398c565b606091505b5050600a546040519192506001600160a01b031690303190600081818185875af1925050503d80600081146139dd576040519150601f19603f3d011682016040523d82523d6000602084013e6139e2565b606091505b50506014805460ff1916905550505050505050505050565b6000613a0782600261383e565b90506000613a1583836135c4565b905047613a2183613a81565b6000613a2d47836135c4565b9050613a398382613bd3565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ab657613ab6614366565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3391906143c0565b81600181518110613b4657613b46614366565b6001600160a01b039283166020918202929092010152600854613b6c9130911684612f65565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac94790613ba59085906000908690309042906004016144b1565b600060405180830381600087803b158015613bbf57600080fd5b505af1158015613448573d6000803e3d6000fd5b600854613beb9030906001600160a01b031684612f65565b600854600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613c5b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061196d9190614522565b60405180604001604052806002906020820280368337509192915050565b600060208284031215613cb057600080fd5b5035919050565b60005b83811015613cd2578181015183820152602001613cba565b50506000910152565b60008151808452613cf3816020860160208601613cb7565b601f01601f19169290920160200192915050565b60208152600061345c6020830184613cdb565b6001600160a01b0381168114612ea757600080fd5b60008060408385031215613d4257600080fd5b8235613d4d81613d1a565b946020939093013593505050565b60408101818360005b6002811015613d83578151835260209283019290910190600101613d64565b50505092915050565b600060208284031215613d9e57600080fd5b813561345c81613d1a565b600080600060608486031215613dbe57600080fd5b8335613dc981613d1a565b92506020840135613dd981613d1a565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e2957613e29613dea565b604052919050565b600067ffffffffffffffff821115613e4b57613e4b613dea565b50601f01601f191660200190565b600082601f830112613e6a57600080fd5b8135613e7d613e7882613e31565b613e00565b818152846020838601011115613e9257600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613ec457600080fd5b83359250602084013567ffffffffffffffff811115613ee257600080fd5b613eee86828701613e59565b925050604084013590509250925092565b600080600060608486031215613f1457600080fd5b505081359360208301359350604090920135919050565b60006020808385031215613f3e57600080fd5b823567ffffffffffffffff80821115613f5657600080fd5b818501915085601f830112613f6a57600080fd5b813581811115613f7c57613f7c613dea565b8060051b9150613f8d848301613e00565b8181529183018401918481019088841115613fa757600080fd5b938501935b83851015613fc557843582529385019390850190613fac565b98975050505050505050565b60008060408385031215613fe457600080fd5b50508035926020909101359150565b8015158114612ea757600080fd5b60006020828403121561401357600080fd5b813561345c81613ff3565b6000806040838503121561403157600080fd5b823561403c81613d1a565b9150602083013561404c81613ff3565b809150509250929050565b6000806040838503121561406a57600080fd5b823567ffffffffffffffff81111561408157600080fd5b61408d85828601613e59565b95602094909401359450505050565b600080604083850312156140af57600080fd5b82356140ba81613d1a565b9150602083013561404c81613d1a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061411357607f821691505b60208210810361413357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526014908201527353454e4445522043414e2754204245205a45524f60601b604082015260600190565b60006020828403121561417957600080fd5b815161345c81613ff3565b6020808252600d908201526c2727902727a2229027aba722a960991b604082015260600190565b6000604082840312156141bd57600080fd5b82601f8301126141cc57600080fd5b6040516040810181811067ffffffffffffffff821117156141ef576141ef613dea565b806040525080604084018581111561420657600080fd5b845b81811015614220578051835260209283019201614208565b509195945050505050565b60006020828403121561423d57600080fd5b815167ffffffffffffffff81111561425457600080fd5b8201601f8101841361426557600080fd5b8051614273613e7882613e31565b81815285602083850101111561428857600080fd5b614299826020830160208601613cb7565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3157610c316142a2565b6020808252602e908201527f4e4f4445204352454154494f4e3a20206372656174696f6e2066726f6d20746860408201526d65207a65726f206164647265737360901b606082015260800190565b60006020828403121561432b57600080fd5b5051919050565b6001600160a01b038416815260606020820181905260009061435690830185613cdb565b9050826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b818110156143b457835183529284019291840191600101614398565b50909695505050505050565b6000602082840312156143d257600080fd5b815161345c81613d1a565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610c3157610c316142a2565b81810381811115610c3157610c316142a2565b6000826144ac57634e487b7160e01b600052601260045260246000fd5b500490565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156145015784516001600160a01b0316835293830193918301916001016144dc565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561453757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220196c9aa2616d071f00062df5ce807c0f16e48d53d178082192525385c4f41f1964736f6c63430008130033

Deployed Bytecode Sourcemap

26295:18708:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26406:21;;;;;;;;;;-1:-1:-1;26406:21:0;;;;-1:-1:-1;;;;;26406:21:0;;;;;;-1:-1:-1;;;;;194:32:1;;;176:51;;164:2;149:18;26406:21:0;;;;;;;;40173:104;;;;;;;;;;-1:-1:-1;40173:104:0;;;;;:::i;:::-;;:::i;:::-;;16765:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17745:194::-;;;;;;;;;;-1:-1:-1;17745:194:0;;;;;:::i;:::-;;:::i;:::-;;;1800:14:1;;1793:22;1775:41;;1763:2;1748:18;17745:194:0;1635:187:1;42894:281:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29735:107::-;;;;;;;;;;-1:-1:-1;29735:107:0;;;;;:::i;:::-;;:::i;30419:155::-;;;;;;;;;;-1:-1:-1;30419:155:0;;;;;:::i;:::-;;:::i;43374:270::-;;;;;;;;;;;;;:::i;26436:41::-;;;;;;;;;;-1:-1:-1;26436:41:0;;;;-1:-1:-1;;;;;26436:41:0;;;17086:108;;;;;;;;;;-1:-1:-1;17174:12:0;;17086:108;;;2966:25:1;;;2954:2;2939:18;17086:108:0;2820:177:1;28950:111:0;;;;;;;;;;-1:-1:-1;28950:111:0;;;;;:::i;:::-;;:::i;17947:529::-;;;;;;;;;;-1:-1:-1;17947:529:0;;;;;:::i;:::-;;:::i;42277:180::-;;;;;;;;;;-1:-1:-1;42277:180:0;;;;;:::i;:::-;;:::i;26706:25::-;;;;;;;;;;;;;;;;16985:93;;;;;;;;;;-1:-1:-1;16985:93:0;;17068:2;3857:36:1;;3845:2;3830:18;16985:93:0;3715:184:1;18484:290:0;;;;;;;;;;-1:-1:-1;18484:290:0;;;;;:::i;:::-;;:::i;37294:1056::-;;;;;;;;;;-1:-1:-1;37294:1056:0;;;;;:::i;:::-;;:::i;30073:334::-;;;;;;;;;;-1:-1:-1;30073:334:0;;;;;:::i;:::-;;:::i;30582:152::-;;;;;;;;;;-1:-1:-1;30582:152:0;;;;;:::i;:::-;;:::i;44513:113::-;;;;;;;;;;;;;:::i;26486:28::-;;;;;;;;;;-1:-1:-1;26486:28:0;;;;-1:-1:-1;;;;;26486:28:0;;;26808:26;;;;;;;;;;;;;;;;41566:703;;;;;;;;;;;;;:::i;26738:31::-;;;;;;;;;;;;;;;;43183:183;;;;;;;;;;-1:-1:-1;43183:183:0;;;;;:::i;:::-;;:::i;30742:261::-;;;;;;;;;;-1:-1:-1;30742:261:0;;;;;:::i;:::-;;:::i;42465:96::-;;;;;;;;;;-1:-1:-1;42465:96:0;;;;;:::i;:::-;;:::i;43940:274::-;;;;;;;;;;;;;:::i;26987:31::-;;;;;;;;;;;;;;;;44907:93;;;;;;;;;;-1:-1:-1;44907:93:0;;;;;:::i;:::-;;:::i;29069:539::-;;;;;;;;;;-1:-1:-1;29069:539:0;;;;;:::i;:::-;;:::i;40738:820::-;;;;;;;;;;-1:-1:-1;40738:820:0;;;;;:::i;:::-;;:::i;29616:111::-;;;;;;;;;;-1:-1:-1;29616:111:0;;;;;:::i;:::-;;:::i;17202:143::-;;;;;;;;;;-1:-1:-1;17202:143:0;;;;;:::i;:::-;;:::i;22189:103::-;;;;;;;;;;;;;:::i;38358:1078::-;;;;;;;;;;-1:-1:-1;38358:1078:0;;;;;:::i;:::-;;:::i;26521:30::-;;;;;;;;;;-1:-1:-1;26521:30:0;;;;-1:-1:-1;;;;;26521:30:0;;;40285:445;;;;;;;;;;-1:-1:-1;40285:445:0;;;;;:::i;:::-;;:::i;26627:70::-;;;;;;;;;;-1:-1:-1;26627:70:0;;;;-1:-1:-1;;;;;26627:70:0;;;21966:87;;;;;;;;;;-1:-1:-1;22039:6:0;;-1:-1:-1;;;;;22039:6:0;21966:87;;29955:110;;;;;;;;;;-1:-1:-1;29955:110:0;;;;;:::i;:::-;;:::i;16873:104::-;;;;;;;;;;;;;:::i;27025:37::-;;;;;;;;;;;;;;;;31011:320;;;;;;;;;;-1:-1:-1;31011:320:0;;;;;:::i;:::-;;:::i;26368:31::-;;;;;;;;;;-1:-1:-1;26368:31:0;;;;-1:-1:-1;;;;;26368:31:0;;;44634:119;;;;;;;;;;;;;:::i;18782:475::-;;;;;;;;;;-1:-1:-1;18782:475:0;;;;;:::i;:::-;;:::i;17353:200::-;;;;;;;;;;-1:-1:-1;17353:200:0;;;;;:::i;:::-;;:::i;26776:23::-;;;;;;;;;;;;;;;;29850:97;;;;;;;;;;-1:-1:-1;29850:97:0;;;;;:::i;:::-;;:::i;26596:22::-;;;;;;;;;;-1:-1:-1;26596:22:0;;;;-1:-1:-1;;;;;26596:22:0;;;27146:57;;;;;;;;;;-1:-1:-1;27146:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42711:175;;;;;;;;;;-1:-1:-1;42711:175:0;;;;;:::i;:::-;;:::i;36395:891::-;;;;;;;;;;-1:-1:-1;36395:891:0;;;;;:::i;:::-;;:::i;43652:280::-;;;;;;;;;;;;;:::i;26558:31::-;;;;;;;;;;-1:-1:-1;26558:31:0;;;;-1:-1:-1;;;;;26558:31:0;;;44761:138;;;;;;;;;;;;;:::i;26841:27::-;;;;;;;;;;;;;;;;17561:176;;;;;;;;;;-1:-1:-1;17561:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;17702:18:0;;;17675:7;17702:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17561:176;44222:283;;;;;;;;;;;;;:::i;22300:238::-;;;;;;;;;;-1:-1:-1;22300:238:0;;;;;:::i;:::-;;:::i;42569:134::-;;;;;;;;;;-1:-1:-1;42569:134:0;;;;;:::i;:::-;;:::i;28811:131::-;;;;;;;;;;-1:-1:-1;28811:131:0;;;;;:::i;:::-;;:::i;40173:104::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;;;;;;;;;40246:14:::1;:23:::0;40173:104::o;16765:100::-;16819:13;16852:5;16845:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16765:100;:::o;17745:194::-;17853:4;17870:39;16225:10;17893:7;17902:6;17870:8;:39::i;:::-;-1:-1:-1;17927:4:0;17745:194;;;;;:::o;42894:281::-;42942:17;;:::i;:::-;16225:10;42972:59;;;;-1:-1:-1;;;42972:59:0;;;;;;;:::i;:::-;43050:11;;-1:-1:-1;;;;;43050:11:0;:23;16225:10;43050:37;;-1:-1:-1;;;;;;43050:37:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;43050:37:0;;;176:51:1;149:18;;43050:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43042:63;;;;-1:-1:-1;;;43042:63:0;;;;;;;:::i;:::-;43123:11;;-1:-1:-1;;;;;43123:11:0;:30;16225:10;43123:44;;-1:-1:-1;;;;;;43123:44:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;43123:44:0;;;176:51:1;149:18;;43123:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43116:51;;42894:281;:::o;29735:107::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;29812:15:::1;:22:::0;;-1:-1:-1;;;;;;29812:22:0::1;-1:-1:-1::0;;;;;29812:22:0;;;::::1;::::0;;;::::1;::::0;;29735:107::o;30419:155::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;30504:1:::1;30495:5;:10;;30487:53;;;::::0;-1:-1:-1;;;30487:53:0;;11601:2:1;30487:53:0::1;::::0;::::1;11583:21:1::0;11640:2;11620:18;;;11613:30;11679:32;11659:18;;;11652:60;11729:18;;30487:53:0::1;11399:354:1::0;30487:53:0::1;30551:7;:15:::0;30419:155::o;43374:270::-;43420:13;16225:10;43446:59;;;;-1:-1:-1;;;43446:59:0;;;;;;;:::i;:::-;43524:11;;-1:-1:-1;;;;;43524:11:0;:23;16225:10;43524:37;;-1:-1:-1;;;;;;43524:37:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;43524:37:0;;;176:51:1;149:18;;43524:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43516:63;;;;-1:-1:-1;;;43516:63:0;;;;;;;:::i;:::-;43597:11;;-1:-1:-1;;;;;43597:11:0;:25;16225:10;43623:12;43597:39;;-1:-1:-1;;;;;;43597:39:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;43597:39:0;;;176:51:1;149:18;;43597:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43597:39:0;;;;;;;;;;;;:::i;28950:111::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;29022:6:::1;:31:::0;;-1:-1:-1;;;;;;29022:31:0::1;-1:-1:-1::0;;;;;29022:31:0;;;::::1;::::0;;;::::1;::::0;;28950:111::o;17947:529::-;18087:4;18104:36;18114:6;18122:9;18133:6;18104:9;:36::i;:::-;-1:-1:-1;;;;;18180:19:0;;18153:24;18180:19;;;:11;:19;;;;;;;;16225:10;18180:33;;;;;;;;18246:26;;;;18224:116;;;;-1:-1:-1;;;18224:116:0;;12614:2:1;18224:116:0;;;12596:21:1;12653:2;12633:18;;;12626:30;12692:34;12672:18;;;12665:62;-1:-1:-1;;;12743:18:1;;;12736:38;12791:19;;18224:116:0;12412:404:1;18224:116:0;18376:57;18385:6;16225:10;18426:6;18407:16;:25;18376:8;:57::i;:::-;-1:-1:-1;18464:4:0;;17947:529;-1:-1:-1;;;;17947:529:0:o;42277:180::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;42352:21:::1;42343:6;:30;42339:66;;;-1:-1:-1::0;42384:21:0::1;42339:66;22039:6:::0;;42416:33:::1;::::0;-1:-1:-1;;;;;22039:6:0;;;;42416:33;::::1;;;::::0;42442:6;;42416:33:::1;::::0;;;42442:6;22039;42416:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;42277:180:::0;:::o;18484:290::-;16225:10;18597:4;18686:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18686:34:0;;;;;;;;;;18597:4;;18614:130;;18664:7;;18686:47;;18723:10;;18686:47;:::i;:::-;18614:8;:130::i;37294:1056::-;37475:1;37459:5;37453:19;:23;:51;;;;;37502:2;37486:5;37480:19;:24;37453:51;37431:133;;;;-1:-1:-1;;;37431:133:0;;13285:2:1;37431:133:0;;;13267:21:1;;;13304:18;;;13297:30;13363:34;13343:18;;;13336:62;13415:18;;37431:133:0;13083:356:1;37431:133:0;16225:10;;37615:116;;;;-1:-1:-1;;;37615:116:0;;;;;;;:::i;:::-;37774:16;;-1:-1:-1;;;;;37774:16:0;;;37764:26;;;;37742:121;;;;-1:-1:-1;;;37742:121:0;;14061:2:1;37742:121:0;;;14043:21:1;14100:2;14080:18;;;14073:30;14139:34;14119:18;;;14112:62;-1:-1:-1;;;14190:18:1;;;14183:43;14243:19;;37742:121:0;13859:409:1;37742:121:0;37894:11;;:30;;-1:-1:-1;;;37894:30:0;;;;;2966:25:1;;;37874:17:0;;-1:-1:-1;;;;;37894:11:0;;:24;;2939:18:1;;37894:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37954:11;;:44;;-1:-1:-1;;;37954:44:0;;-1:-1:-1;;;;;14654:32:1;;;37954:44:0;;;14636:51:1;14703:18;;;14696:34;;;37874:50:0;;-1:-1:-1;37935:16:0;;37954:11;;;;:25;;14609:18:1;;37954:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37935:63;-1:-1:-1;38043:19:0;:9;38057:4;38043:13;:19::i;:::-;38031:8;:31;;38009:132;;;;-1:-1:-1;;;38009:132:0;;14943:2:1;38009:132:0;;;14925:21:1;14982:2;14962:18;;;14955:30;15021:34;15001:18;;;14994:62;-1:-1:-1;;;15072:18:1;;;15065:49;15131:19;;38009:132:0;14741:415:1;38009:132:0;38152:11;;38237:30;;-1:-1:-1;;;38237:30:0;;;;;2966:25:1;;;-1:-1:-1;;;;;38152:11:0;;;;:25;;38192:6;;38213:9;;38237:40;;38272:4;;38152:11;;38237:24;;2939:18:1;;38237:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;:40::i;:::-;38152:136;;-1:-1:-1;;;;;;38152:136:0;;;;;;;-1:-1:-1;;;;;15381:32:1;;;38152:136:0;;;15363:51:1;15430:18;;;15423:34;;;;15473:18;;;15466:34;15336:18;;38152:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38299:11:0;;:43;;-1:-1:-1;;;38299:43:0;;-1:-1:-1;;;;;38299:11:0;;;;-1:-1:-1;38299:22:0;;-1:-1:-1;38299:43:0;;38322:6;;38330:5;;38337:4;;38299:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37420:930;;;37294:1056;;;:::o;30073:334::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;30202:49:::1;30241:9:::0;30202:34:::1;:11:::0;30218:17;30202:15:::1;:34::i;:::-;:38:::0;::::1;:49::i;:::-;30255:3;30202:56;30194:92;;;::::0;-1:-1:-1;;;30194:92:0;;16106:2:1;30194:92:0::1;::::0;::::1;16088:21:1::0;16145:2;16125:18;;;16118:30;16184:25;16164:18;;;16157:53;16227:18;;30194:92:0::1;15904:347:1::0;30194:92:0::1;30297:10;:24:::0;;;;30332:16:::1;:36:::0;30379:8:::1;:20:::0;30073:334::o;30582:152::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;30666:1:::1;30657:5;:10;;30649:52;;;::::0;-1:-1:-1;;;30649:52:0;;16458:2:1;30649:52:0::1;::::0;::::1;16440:21:1::0;16497:2;16477:18;;;16470:30;16536:31;16516:18;;;16509:59;16585:18;;30649:52:0::1;16256:353:1::0;30649:52:0::1;30712:6;:14:::0;30582:152::o;44513:113::-;44593:11;;:25;;;-1:-1:-1;;;44593:25:0;;;;44566:7;;-1:-1:-1;;;;;44593:11:0;;:23;;:25;;;;;;;;;;;;;;:11;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41566:703::-;16225:10;;41646:74;;;;-1:-1:-1;;;41646:74:0;;16816:2:1;41646:74:0;;;16798:21:1;16855:2;16835:18;;;16828:30;16894:34;16874:18;;;16867:62;-1:-1:-1;;;16945:18:1;;;16938:39;16994:19;;41646:74:0;16614:405:1;41646:74:0;41763:15;;-1:-1:-1;;;;;41753:25:0;;;41763:15;;41753:25;;;;:55;;-1:-1:-1;41792:16:0;;-1:-1:-1;;;;;41782:26:0;;;41792:16;;41782:26;;41753:55;41731:159;;;;-1:-1:-1;;;41731:159:0;;17226:2:1;41731:159:0;;;17208:21:1;17265:2;17245:18;;;17238:30;17304:34;17284:18;;;17277:62;-1:-1:-1;;;17355:18:1;;;17348:52;17417:19;;41731:159:0;17024:418:1;41731:159:0;41931:11;;:38;;-1:-1:-1;;;41931:38:0;;-1:-1:-1;;;;;194:32:1;;;41931:38:0;;;176:51:1;41901:27:0;;41931:11;;:30;;149:18:1;;41931:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42003:12;;41901:68;;-1:-1:-1;42048:16:0;42026:116;;;;-1:-1:-1;;;42026:116:0;;17781:2:1;42026:116:0;;;17763:21:1;17820:2;17800:18;;;17793:30;17859:34;17839:18;;;17832:62;-1:-1:-1;;;17910:18:1;;;17903:48;17968:19;;42026:116:0;17579:414:1;42026:116:0;42169:16;;42153:55;;-1:-1:-1;;;;;42169:16:0;42187:6;42195:12;42153:15;:55::i;:::-;42219:11;;:42;;-1:-1:-1;;;42219:42:0;;-1:-1:-1;;;;;194:32:1;;;42219:42:0;;;176:51:1;42219:11:0;;;;:34;;149:18:1;;42219:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41595:674;;;41566:703::o;43183:183::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;43274:6:::1;:13;43291:1;43274:18;43266:43;;;::::0;-1:-1:-1;;;43266:43:0;;18200:2:1;43266:43:0::1;::::0;::::1;18182:21:1::0;18239:2;18219:18;;;18212:30;-1:-1:-1;;;18258:18:1;;;18251:42;18310:18;;43266:43:0::1;17998:336:1::0;43266:43:0::1;43320:11;::::0;:38:::1;::::0;-1:-1:-1;;;43320:38:0;;-1:-1:-1;;;;;43320:11:0;;::::1;::::0;:30:::1;::::0;:38:::1;::::0;43351:6;;43320:38:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43183:183:::0;:::o;30742:261::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;30851:6:::1;;30841;:16;;30832:48;;;::::0;-1:-1:-1;;;30832:48:0;;19178:2:1;30832:48:0::1;::::0;::::1;19160:21:1::0;19217:2;19197:18;;;19190:30;-1:-1:-1;;;19236:18:1;;;19229:48;19294:18;;30832:48:0::1;18976:342:1::0;30832:48:0::1;30911:7;;30900;:18;;30891:50;;;::::0;-1:-1:-1;;;30891:50:0;;19178:2:1;30891:50:0::1;::::0;::::1;19160:21:1::0;19217:2;19197:18;;;19190:30;-1:-1:-1;;;19236:18:1;;;19229:48;19294:18;;30891:50:0::1;18976:342:1::0;30891:50:0::1;30952:6;:15:::0;;;;30978:7:::1;:17:::0;30742:261::o;42465:96::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;42533:11:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;42533:20:0;;::::1;::::0;;;::::1;::::0;;42465:96::o;43940:274::-;43988:13;16225:10;44014:59;;;;-1:-1:-1;;;44014:59:0;;;;;;;:::i;:::-;44092:11;;-1:-1:-1;;;;;44092:11:0;:23;16225:10;44092:37;;-1:-1:-1;;;;;;44092:37:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;44092:37:0;;;176:51:1;149:18;;44092:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44084:63;;;;-1:-1:-1;;;44084:63:0;;;;;;;:::i;:::-;44165:11;;-1:-1:-1;;;;;44165:11:0;:27;16225:10;44193:12;16145:98;44907:93;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;44978:5:::1;:14:::0;44907:93::o;29069:539::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;29192:15:::1;::::0;-1:-1:-1;;;;;29192:15:0;;::::1;29170:38:::0;;::::1;::::0;29148:133:::1;;;::::0;-1:-1:-1;;;29148:133:0;;19525:2:1;29148:133:0::1;::::0;::::1;19507:21:1::0;19564:2;19544:18;;;19537:30;19603:34;19583:18;;;19576:62;-1:-1:-1;;;19654:18:1;;;19647:43;19707:19;;29148:133:0::1;19323:409:1::0;29148:133:0::1;29339:15;::::0;29297:59:::1;::::0;-1:-1:-1;;;;;29339:15:0;;::::1;::::0;29297:59;::::1;::::0;::::1;::::0;29339:15:::1;::::0;29297:59:::1;29367:15;:48:::0;;-1:-1:-1;;;;;;29367:48:0::1;-1:-1:-1::0;;;;;29367:48:0;::::1;::::0;;::::1;::::0;;;29469:25:::1;::::0;;-1:-1:-1;;;29469:25:0;;;;-1:-1:-1;;29367:48:0;29469:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;29367:48;29469:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29451:69:0::1;;29529:4;29536:15;;;;;;;;;-1:-1:-1::0;;;;;29536:15:0::1;-1:-1:-1::0;;;;;29536:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29451:108;::::0;-1:-1:-1;;;;;;29451:108:0::1;::::0;;;;;;-1:-1:-1;;;;;20223:15:1;;;29451:108:0::1;::::0;::::1;20205:34:1::0;20275:15;;20255:18;;;20248:43;20140:18;;29451:108:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29570:13;:30:::0;;-1:-1:-1;;;;;;29570:30:0::1;-1:-1:-1::0;;;;;29570:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;29069:539:0:o;40738:820::-;16225:10;;40838:67;;;;-1:-1:-1;;;40838:67:0;;20504:2:1;40838:67:0;;;20486:21:1;20543:2;20523:18;;;20516:30;20582:34;20562:18;;;20555:62;-1:-1:-1;;;20633:18:1;;;20626:32;20675:19;;40838:67:0;20302:398:1;40838:67:0;40948:15;;-1:-1:-1;;;;;40938:25:0;;;40948:15;;40938:25;;;;:55;;-1:-1:-1;40977:16:0;;-1:-1:-1;;;;;40967:26:0;;;40977:16;;40967:26;;40938:55;40916:155;;;;-1:-1:-1;;;40916:155:0;;20907:2:1;40916:155:0;;;20889:21:1;20946:2;20926:18;;;20919:30;20985:34;20965:18;;;20958:62;-1:-1:-1;;;21036:18:1;;;21029:48;21094:19;;40916:155:0;20705:414:1;40916:155:0;41105:11;;:44;;-1:-1:-1;;;41105:44:0;;-1:-1:-1;;;;;14654:32:1;;;41105:44:0;;;14636:51:1;14703:18;;;14696:34;;;41082:20:0;;41105:11;;:25;;14609:18:1;;41105:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41082:67;;41197:1;41182:12;:16;41160:112;;;;-1:-1:-1;;;41160:112:0;;21326:2:1;41160:112:0;;;21308:21:1;21365:2;21345:18;;;21338:30;21404:34;21384:18;;;21377:62;-1:-1:-1;;;21455:18:1;;;21448:44;21509:19;;41160:112:0;21124:410:1;41160:112:0;41305:11;;:105;;-1:-1:-1;;;41305:105:0;;-1:-1:-1;;;;;15381:32:1;;;41305:105:0;;;15363:51:1;15430:18;;;15423:34;;;15473:18;;;15466:34;;;41285:17:0;;41305:11;;:22;;15336:18:1;;41305:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41437:16;;41285:125;;-1:-1:-1;41421:70:0;;-1:-1:-1;;;;;41437:16:0;41455:6;41463:27;:12;41285:125;41463:16;:27::i;:::-;41421:15;:70::i;:::-;41502:11;;:48;;-1:-1:-1;;;41502:48:0;;-1:-1:-1;;;;;14654:32:1;;;41502:48:0;;;14636:51:1;14703:18;;;14696:34;;;41502:11:0;;;;:29;;14609:18:1;;41502:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40787:771;;;40738:820;:::o;29616:111::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;29694:16:::1;:25:::0;29616:111::o;17202:143::-;-1:-1:-1;;;;;17319:18:0;17292:7;17319:18;;;;;;;;;;;;17202:143::o;22189:103::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;22254:30:::1;22281:1;22254:18;:30::i;:::-;22189:103::o:0;38358:1078::-;16225:10;;38456:59;;;;-1:-1:-1;;;38456:59:0;;21741:2:1;38456:59:0;;;21723:21:1;21780:2;21760:18;;;21753:30;21819:28;21799:18;;;21792:56;21865:18;;38456:59:0;21539:350:1;38456:59:0;38544:16;;-1:-1:-1;;;;;38544:16:0;;;38534:26;;;;38526:59;;;;-1:-1:-1;;;38526:59:0;;22096:2:1;38526:59:0;;;22078:21:1;22135:2;22115:18;;;22108:30;-1:-1:-1;;;22154:18:1;;;22147:50;22214:18;;38526:59:0;21894:344:1;38526:59:0;38618:11;;:42;;-1:-1:-1;;;38618:42:0;;-1:-1:-1;;;;;14654:32:1;;;38618:42:0;;;14636:51:1;14703:18;;;14696:34;;;38596:19:0;;38618:11;;:23;;14609:18:1;;38618:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38596:64;;38693:1;38679:11;:15;38671:61;;;;-1:-1:-1;;;38671:61:0;;22445:2:1;38671:61:0;;;22427:21:1;22484:2;22464:18;;;22457:30;22523:34;22503:18;;;22496:62;-1:-1:-1;;;22574:18:1;;;22567:31;22615:19;;38671:61:0;22243:397:1;38671:61:0;38743:16;38762:18;:11;38778:1;38762:15;:18::i;:::-;38814:11;;:37;;-1:-1:-1;;;38814:37:0;;;;;2966:25:1;;;38743:37:0;;-1:-1:-1;38791:20:0;;-1:-1:-1;;;;;38814:11:0;;;;:24;;2939:18:1;;38814:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38881:11;;:34;;-1:-1:-1;;;38881:34:0;;;;;2966:25:1;;;38791:60:0;;-1:-1:-1;38862:16:0;;-1:-1:-1;;;;;38881:11:0;;;;:24;;2939:18:1;;38881:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38862:53;-1:-1:-1;38926:17:0;38946:38;38979:4;38947:26;38862:53;38960:12;38947;:26::i;38946:38::-;39014:11;;:44;;-1:-1:-1;;;39014:44:0;;-1:-1:-1;;;;;14654:32:1;;;39014:44:0;;;14636:51:1;14703:18;;;14696:34;;;38926:58:0;;-1:-1:-1;38995:16:0;;39014:11;;;;:25;;14609:18:1;;39014:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38995:63;;39084:9;39073:8;:20;39069:360;;;39110:62;39129:6;39137:9;39148:23;:8;39161:9;39148:12;:23::i;:::-;39110:18;:62::i;:::-;39187:11;;:48;;-1:-1:-1;;;39187:48:0;;-1:-1:-1;;;;;14654:32:1;;;39187:48:0;;;14636:51:1;14703:18;;;14696:34;;;39187:11:0;;;;:29;;14609:18:1;;39187:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39069:360;;;39268:9;39257:8;:20;39253:176;;;39294:60;39311:6;39319:9;39330:23;:9;39344:8;39330:13;:23::i;:::-;39294:16;:60::i;:::-;39369:11;;:48;;-1:-1:-1;;;39369:48:0;;-1:-1:-1;;;;;14654:32:1;;;39369:48:0;;;14636:51:1;14703:18;;;14696:34;;;39369:11:0;;;;:29;;14609:18:1;;39369:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38405:1031;;;;;;;38358:1078;:::o;40285:445::-;40342:14;16225:10;40403:6;;:30;;-1:-1:-1;;;40403:30:0;;;;;2966:25:1;;;40342:29:0;;-1:-1:-1;40382:18:0;;-1:-1:-1;;;;;40403:6:0;;;;:20;;2939:18:1;;40403:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40382:51;;40444:17;40464:30;40479:14;;40464:10;:14;;:30;;;;:::i;:::-;40444:50;;40547:9;40527:17;40537:6;40527:9;:17::i;:::-;:29;40505:117;;;;-1:-1:-1;;;40505:117:0;;22847:2:1;40505:117:0;;;22829:21:1;22886:2;22866:18;;;22859:30;22925:34;22905:18;;;22898:62;-1:-1:-1;;;22976:18:1;;;22969:36;23022:19;;40505:117:0;22645:402:1;40505:117:0;40657:16;;40633:52;;40649:6;;-1:-1:-1;;;;;40657:16:0;40675:9;40633:15;:52::i;:::-;40696:6;;:26;;-1:-1:-1;;;40696:26:0;;;;;2966:25:1;;;-1:-1:-1;;;;;40696:6:0;;;;:16;;2939:18:1;;40696:26:0;2820:177:1;29955:110:0;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;30034:16:::1;:23:::0;;-1:-1:-1;;;;;;30034:23:0::1;-1:-1:-1::0;;;;;30034:23:0;;;::::1;::::0;;;::::1;::::0;;29955:110::o;16873:104::-;16929:13;16962:7;16955:14;;;;;:::i;31011:320::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;31157:13:::1;::::0;-1:-1:-1;;;;;31157:13:0;;::::1;31149:21:::0;;::::1;::::0;31127:142:::1;;;::::0;-1:-1:-1;;;31127:142:0;;23254:2:1;31127:142:0::1;::::0;::::1;23236:21:1::0;23293:2;23273:18;;;23266:30;23332:34;23312:18;;;23305:62;23403:34;23383:18;;;23376:62;-1:-1:-1;;;23454:19:1;;;23447:38;23502:19;;31127:142:0::1;23052:475:1::0;31127:142:0::1;31282:41;31311:4;31317:5;31282:28;:41::i;44634:119::-:0;44714:11;;:31;;;-1:-1:-1;;;44714:31:0;;;;44687:7;;-1:-1:-1;;;;;44714:11:0;;:29;;:31;;;;;;;;;;;;;;:11;:31;;;;;;;;;;;;;;18782:475;16225:10;18900:4;18944:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18944:34:0;;;;;;;;;;19011:35;;;;18989:122;;;;-1:-1:-1;;;18989:122:0;;23734:2:1;18989:122:0;;;23716:21:1;23773:2;23753:18;;;23746:30;23812:34;23792:18;;;23785:62;-1:-1:-1;;;23863:18:1;;;23856:35;23908:19;;18989:122:0;23532:401:1;18989:122:0;19147:67;16225:10;19170:7;19198:15;19179:16;:34;19147:8;:67::i;:::-;-1:-1:-1;19245:4:0;;18782:475;-1:-1:-1;;;18782:475:0:o;17353:200::-;17464:4;17481:42;16225:10;17505:9;17516:6;17481:9;:42::i;29850:97::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;29925:7:::1;:14:::0;;-1:-1:-1;;;;;;29925:14:0::1;-1:-1:-1::0;;;;;29925:14:0;;;::::1;::::0;;;::::1;::::0;;29850:97::o;42711:175::-;42802:17;;:::i;:::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;42839:11:::1;::::0;:39:::1;::::0;-1:-1:-1;;;42839:39:0;;-1:-1:-1;;;;;194:32:1;;;42839:39:0::1;::::0;::::1;176:51:1::0;42839:11:0;;::::1;::::0;:30:::1;::::0;149:18:1;;42839:39:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36395:891::-:0;36522:1;36506:5;36500:19;:23;:51;;;;;36549:2;36533:5;36527:19;:24;36500:51;36478:133;;;;-1:-1:-1;;;36478:133:0;;13285:2:1;36478:133:0;;;13267:21:1;;;13304:18;;;13297:30;13363:34;13343:18;;;13336:62;13415:18;;36478:133:0;13083:356:1;36478:133:0;16225:10;;36662:116;;;;-1:-1:-1;;;36662:116:0;;;;;;;:::i;:::-;36821:16;;-1:-1:-1;;;;;36821:16:0;;;36811:26;;;;36789:136;;;;-1:-1:-1;;;36789:136:0;;24140:2:1;36789:136:0;;;24122:21:1;24179:2;24159:18;;;24152:30;24218:34;24198:18;;;24191:62;24289:30;24269:18;;;24262:58;24337:19;;36789:136:0;23938:424:1;36789:136:0;36958:11;;:30;;-1:-1:-1;;;36958:30:0;;;;;2966:25:1;;;36938:17:0;;-1:-1:-1;;;;;36958:11:0;;:24;;2939:18:1;;36958:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36938:50;-1:-1:-1;37042:19:0;36938:50;37056:4;37042:13;:19::i;:::-;37021:17;37031:6;37021:9;:17::i;:::-;:40;;36999:150;;;;-1:-1:-1;;;36999:150:0;;24569:2:1;36999:150:0;;;24551:21:1;24608:2;24588:18;;;24581:30;24647:34;24627:18;;;24620:62;24718:30;24698:18;;;24691:58;24766:19;;36999:150:0;24367:424:1;36999:150:0;37186:16;;37162:62;;37178:6;;-1:-1:-1;;;;;37186:16:0;37204:19;:9;37218:4;37204:13;:19::i;37162:62::-;37235:11;;:43;;-1:-1:-1;;;37235:43:0;;-1:-1:-1;;;;;37235:11:0;;;;:22;;:43;;37258:6;;37266:5;;37273:4;;37235:43;;;:::i;43652:280::-;43701:13;16225:10;43727:59;;;;-1:-1:-1;;;43727:59:0;;;;;;;:::i;:::-;43805:11;;-1:-1:-1;;;;;43805:11:0;:23;16225:10;43805:37;;-1:-1:-1;;;;;;43805:37:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;43805:37:0;;;176:51:1;149:18;;43805:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43797:63;;;;-1:-1:-1;;;43797:63:0;;;;;;;:::i;:::-;43878:11;;-1:-1:-1;;;;;43878:11:0;:32;16225:10;43911:12;16145:98;44761:138;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;44823:11:::1;::::0;::::1;;44822:12;44814:48;;;::::0;-1:-1:-1;;;44814:48:0;;24998:2:1;44814:48:0::1;::::0;::::1;24980:21:1::0;25037:2;25017:18;;;25010:30;25076:25;25056:18;;;25049:53;25119:18;;44814:48:0::1;24796:347:1::0;44814:48:0::1;44873:11;:18:::0;;-1:-1:-1;;44873:18:0::1;44887:4;44873:18;::::0;;44761:138::o;44222:283::-;44273:13;16225:10;44299:59;;;;-1:-1:-1;;;44299:59:0;;;;;;;:::i;:::-;44377:11;;-1:-1:-1;;;;;44377:11:0;:23;16225:10;44377:37;;-1:-1:-1;;;;;;44377:37:0;;;;;;;-1:-1:-1;;;;;194:32:1;;;44377:37:0;;;176:51:1;149:18;;44377:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44369:63;;;;-1:-1:-1;;;44369:63:0;;;;;;;:::i;:::-;44450:11;;-1:-1:-1;;;;;44450:11:0;:33;16225:10;44484:12;16145:98;22300:238;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22403:22:0;::::1;22381:110;;;::::0;-1:-1:-1;;;22381:110:0;;25350:2:1;22381:110:0::1;::::0;::::1;25332:21:1::0;25389:2;25369:18;;;25362:30;25428:34;25408:18;;;25401:62;-1:-1:-1;;;25479:18:1;;;25472:36;25525:19;;22381:110:0::1;25148:402:1::0;22381:110:0::1;22502:28;22521:8;22502:18;:28::i;:::-;22300:238:::0;:::o;42569:134::-;42659:11;;:36;;-1:-1:-1;;;42659:36:0;;-1:-1:-1;;;;;194:32:1;;;42659:36:0;;;176:51:1;42632:7:0;;42659:11;;:27;;149:18:1;;42659:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28811:131::-;22039:6;;-1:-1:-1;;;;;22039:6:0;16225:10;22101:23;22093:68;;;;-1:-1:-1;;;22093:68:0;;;;;;;:::i;:::-;28892:11:::1;:42:::0;;-1:-1:-1;;;;;;28892:42:0::1;-1:-1:-1::0;;;;;28892:42:0;;;::::1;::::0;;;::::1;::::0;;28811:131::o;21049:380::-;-1:-1:-1;;;;;21185:19:0;;21177:68;;;;-1:-1:-1;;;21177:68:0;;25757:2:1;21177:68:0;;;25739:21:1;25796:2;25776:18;;;25769:30;25835:34;25815:18;;;25808:62;-1:-1:-1;;;25886:18:1;;;25879:34;25930:19;;21177:68:0;25555:400:1;21177:68:0;-1:-1:-1;;;;;21264:21:0;;21256:68;;;;-1:-1:-1;;;21256:68:0;;26162:2:1;21256:68:0;;;26144:21:1;26201:2;26181:18;;;26174:30;26240:34;26220:18;;;26213:62;-1:-1:-1;;;26291:18:1;;;26284:32;26333:19;;21256:68:0;25960:398:1;21256:68:0;-1:-1:-1;;;;;21337:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21389:32;;2966:25:1;;;21389:32:0;;2939:18:1;21389:32:0;;;;;;;21049:380;;;:::o;31702:2160::-;-1:-1:-1;;;;;31834:18:0;;31826:68;;;;-1:-1:-1;;;31826:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31913:16:0;;31905:64;;;;-1:-1:-1;;;31905:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31998:29:0;;;;;;:25;:29;;;;;;;;:88;;;;-1:-1:-1;;;;;;32045:21:0;;32061:4;32045:21;;;;:40;;-1:-1:-1;22039:6:0;;-1:-1:-1;;;;;32070:15:0;;;22039:6;;32070:15;;32045:40;31980:624;;;32113:21;32137:28;32161:3;32137:19;32148:7;;32137:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;32113:52;;32180:51;32196:4;32210;32217:13;32180:15;:51::i;:::-;32255:25;:6;32266:13;32255:10;:25::i;:::-;32246:34;;32098:194;31980:624;;;-1:-1:-1;;;;;32316:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;32365:19:0;;32379:4;32365:19;;;;:36;;-1:-1:-1;22039:6:0;;-1:-1:-1;;;;;32388:13:0;;;22039:6;;32388:13;;32365:36;32298:306;;;32429:20;32452:27;32475:3;32452:18;32463:6;;32452;:10;;:18;;;;:::i;:27::-;32429:50;;32494;32510:4;32524;32531:12;32494:15;:50::i;:::-;32568:24;:6;32579:12;32568:10;:24::i;:::-;32559:33;;32414:190;32298:306;32632:6;32614:15;32680:24;32698:4;32680:9;:24::i;:::-;32759:16;;32649:55;;-1:-1:-1;32735:40:0;;;;;;;32806;;-1:-1:-1;32835:11:0;;;;;;;32806:40;:66;;;;-1:-1:-1;32864:8:0;;;;32863:9;32806:66;:98;;;;-1:-1:-1;22039:6:0;;-1:-1:-1;;;;;32889:15:0;;;22039:6;;32889:15;;32806:98;:147;;;;-1:-1:-1;;;;;;32922:31:0;;;;;;:25;:31;;;;;;;;32921:32;32806:147;32788:224;;;32980:20;:18;:20::i;:::-;22039:6;;-1:-1:-1;;;;;33042:15:0;;;22039:6;;33042:15;;;;:51;;-1:-1:-1;33080:13:0;;-1:-1:-1;;;;;33074:19:0;;;33080:13;;33074:19;;33042:51;:98;;;;-1:-1:-1;33124:15:0;;-1:-1:-1;;;;;33110:30:0;;;33124:15;;33110:30;;33042:98;:134;;;;-1:-1:-1;;;;;;33157:19:0;;33171:4;33157:19;;33042:134;:172;;;;-1:-1:-1;;;;;;33193:21:0;;33209:4;33193:21;;33042:172;33024:786;;;33249:11;;;;33241:48;;;;-1:-1:-1;;;33241:48:0;;27375:2:1;33241:48:0;;;27357:21:1;27414:2;27394:18;;;27387:30;27453:26;27433:18;;;27426:54;27497:18;;33241:48:0;27173:348:1;33241:48:0;33334:15;;-1:-1:-1;;;;;33328:21:0;;;33334:15;;33328:21;;;;:64;;-1:-1:-1;33376:16:0;;-1:-1:-1;;;;;33370:22:0;;;33376:16;;33370:22;;33328:64;:98;;;;-1:-1:-1;33419:7:0;;-1:-1:-1;;;;;33413:13:0;;;33419:7;;33413:13;;33328:98;:142;;;;-1:-1:-1;33455:15:0;;-1:-1:-1;;;;;33447:23:0;;;33455:15;;33447:23;;33328:142;:187;;;;-1:-1:-1;33499:16:0;;-1:-1:-1;;;;;33491:24:0;;;33499:16;;33491:24;;33328:187;:223;;;;-1:-1:-1;33544:7:0;;-1:-1:-1;;;;;33536:15:0;;;33544:7;;33536:15;;33328:223;33306:493;;;33586:21;33610:22;33628:2;33610:9;:22::i;:::-;33711:5;;33586:46;;-1:-1:-1;33711:15:0;;33721:4;33711:9;:15::i;:::-;33681:26;:7;33693:13;33681:11;:26::i;:::-;:45;;33651:132;;;;-1:-1:-1;;;33651:132:0;;27728:2:1;33651:132:0;;;27710:21:1;27767:2;27747:18;;;27740:30;-1:-1:-1;;;27786:18:1;;;27779:43;27839:18;;33651:132:0;27526:337:1;33651:132:0;33567:232;33306:493;33820:34;33836:4;33842:2;33846:7;33820:15;:34::i;:::-;31815:2047;;;31702:2160;;;:::o;24221:98::-;24279:7;24306:5;24310:1;24306;:5;:::i;:::-;24299:12;24221:98;-1:-1:-1;;;24221:98:0:o;24009:::-;24067:7;24094:5;24098:1;24094;:5;:::i;19265:770::-;-1:-1:-1;;;;;19405:20:0;;19397:70;;;;-1:-1:-1;;;19397:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19486:23:0;;19478:71;;;;-1:-1:-1;;;19478:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19646:17:0;;19622:21;19646:17;;;;;;;;;;;19696:23;;;;19674:111;;;;-1:-1:-1;;;19674:111:0;;28243:2:1;19674:111:0;;;28225:21:1;28282:2;28262:18;;;28255:30;28321:34;28301:18;;;28294:62;-1:-1:-1;;;28372:18:1;;;28365:36;28418:19;;19674:111:0;28041:402:1;19674:111:0;-1:-1:-1;;;;;19821:17:0;;;:9;:17;;;;;;;;;;;19841:22;;;19821:42;;19885:20;;;;;;;;:30;;19857:6;;19821:9;19885:30;;19857:6;;19885:30;:::i;:::-;;;;;;;;19950:9;-1:-1:-1;;;;;19933:35:0;19942:6;-1:-1:-1;;;;;19933:35:0;;19961:6;19933:35;;;;2966:25:1;;2954:2;2939:18;;2820:177;19933:35:0;;;;;;;;19386:649;19265:770;;;:::o;24115:98::-;24173:7;24200:5;24204:1;24200;:5;:::i;22546:191::-;22639:6;;;-1:-1:-1;;;;;22656:17:0;;;-1:-1:-1;;;;;;22656:17:0;;;;;;;22689:40;;22639:6;;;22656:17;22639:6;;22689:40;;22620:16;;22689:40;22609:128;22546:191;:::o;39444:463::-;39605:11;;:107;;-1:-1:-1;;;39605:107:0;;-1:-1:-1;;;;;15381:32:1;;;39605:107:0;;;15363:51:1;15430:18;;;15423:34;;;15473:18;;;15466:34;;;39585:17:0;;39605:11;;:22;;15336:18:1;;39605:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39753:16;;39585:127;;-1:-1:-1;39723:122:0;;-1:-1:-1;;;;;39753:16:0;39784:7;39806:28;:13;39585:127;39806:17;:28::i;39723:122::-;39856:11;;:43;;-1:-1:-1;;;39856:43:0;;-1:-1:-1;;;;;14654:32:1;;;39856:43:0;;;14636:51:1;14703:18;;;14696:34;;;39856:11:0;;;;:23;;14609:18:1;;39856:43:0;14462:274:1;39915:250:0;40075:16;;40050:53;;40066:7;;-1:-1:-1;;;;;40075:16:0;40093:9;40050:15;:53::i;:::-;40114:11;;:43;;-1:-1:-1;;;40114:43:0;;-1:-1:-1;;;;;14654:32:1;;;40114:43:0;;;14636:51:1;14703:18;;;14696:34;;;40114:11:0;;;;:23;;14609:18:1;;40114:43:0;14462:274:1;31339:355:0;-1:-1:-1;;;;;31444:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;31422:156;;;;-1:-1:-1;;;31422:156:0;;28783:2:1;31422:156:0;;;28765:21:1;28822:2;28802:18;;;28795:30;28861:34;28841:18;;;28834:62;28932:34;28912:18;;;28905:62;-1:-1:-1;;;28983:19:1;;;28976:33;29026:19;;31422:156:0;28581:470:1;31422:156:0;-1:-1:-1;;;;;31589:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;31589:39:0;;;;;;;;;;31646:40;;31589:39;;:31;31646:40;;;31339:355;;:::o;24327:98::-;24385:7;24412:5;24416:1;24412;:5;:::i;35242:1145::-;35291:8;:15;;-1:-1:-1;;35291:15:0;35302:4;35291:15;;;:8;35348:24;35366:4;35348:9;:24::i;:::-;35317:55;;35383:16;35402:43;35441:3;35402:34;35427:8;;35402:20;:24;;:34;;;;:::i;:43::-;35383:62;;35456:17;35476:31;35503:3;35476:22;35489:8;;35476;:12;;:22;;;;:::i;:31::-;35456:51;-1:-1:-1;35518:17:0;35538:23;:8;35456:51;35538:12;:23::i;:::-;35518:43;;35574:25;35602:69;35657:3;35602:36;35627:10;;35602:20;:24;;:36;;;;:::i;:69::-;35742:16;;35574:97;;-1:-1:-1;35684:117:0;;35722:4;;-1:-1:-1;;;;;35742:16:0;35574:97;35684:15;:117::i;:::-;35814:18;35835:75;35896:3;35835:42;35860:16;;35835:20;:24;;:42;;;;:::i;:75::-;35814:96;;35923:26;35938:10;35923:14;:26::i;:::-;35962:42;35979:24;35997:4;35979:9;:24::i;:::-;35962:16;:42::i;:::-;36015:22;36040:38;:9;36068;36040:27;:38::i;:::-;36186:7;;36015:63;;-1:-1:-1;36112:21:0;;36091:18;;-1:-1:-1;;;;;36186:7:0;36206:45;36015:63;36206:25;36112:21;36221:9;36206:14;:25::i;:45::-;36186:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36292:15:0;;:56;;36171:85;;-1:-1:-1;;;;;;36292:15:0;;36329:4;36320:23;;36292:56;;;;36320:23;36292:15;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36363:8:0;:16;;-1:-1:-1;;36363:16:0;;;-1:-1:-1;;;;;;;;;;35242:1145:0:o;33870:420::-;33929:12;33944:13;:6;33955:1;33944:10;:13::i;:::-;33929:28;-1:-1:-1;33968:17:0;33988:16;:6;33929:28;33988:10;:16::i;:::-;33968:36;-1:-1:-1;34042:21:0;34076:22;34093:4;34076:16;:22::i;:::-;34111:18;34132:41;:21;34158:14;34132:25;:41::i;:::-;34111:62;;34186:35;34199:9;34210:10;34186:12;:35::i;:::-;34239:43;;;29690:25:1;;;29746:2;29731:18;;29724:34;;;29774:18;;;29767:34;;;34239:43:0;;29678:2:1;29663:18;34239:43:0;;;;;;;33918:372;;;;33870:420;:::o;34298:503::-;34388:16;;;34402:1;34388:16;;;;;;;;34364:21;;34388:16;;;;;;;;;;-1:-1:-1;34388:16:0;34364:40;;34433:4;34415;34420:1;34415:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34415:23:0;;;:7;;;;;;;;;;:23;;;;34459:15;;:22;;;-1:-1:-1;;;34459:22:0;;;;:15;;;;;:20;;:22;;;;;34415:7;;34459:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34449:4;34454:1;34449:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34449:32:0;;;:7;;;;;;;;;:32;34526:15;;34494:62;;34511:4;;34526:15;34544:11;34494:8;:62::i;:::-;34569:15;;:224;;-1:-1:-1;;;34569:224:0;;-1:-1:-1;;;;;34569:15:0;;;;:66;;:224;;34650:11;;34569:15;;34720:4;;34747;;34767:15;;34569:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34809:425;34922:15;;34890:62;;34907:4;;-1:-1:-1;;;;;34922:15:0;34940:11;34890:8;:62::i;:::-;34965:15;;35169:16;;34965:261;;-1:-1:-1;;;34965:261:0;;35037:4;34965:261;;;31138:34:1;31188:18;;;31181:34;;;34965:15:0;31231:18:1;;;31224:34;;;31274:18;;;31267:34;-1:-1:-1;;;;;35169:16:0;;;31317:19:1;;;31310:44;35200:15:0;31370:19:1;;;31363:35;34965:15:0;;;:31;;35004:9;;31072:19:1;;34965:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;238:180:1:-;297:6;350:2;338:9;329:7;325:23;321:32;318:52;;;366:1;363;356:12;318:52;-1:-1:-1;389:23:1;;238:180;-1:-1:-1;238:180:1:o;423:250::-;508:1;518:113;532:6;529:1;526:13;518:113;;;608:11;;;602:18;589:11;;;582:39;554:2;547:10;518:113;;;-1:-1:-1;;665:1:1;647:16;;640:27;423:250::o;678:271::-;720:3;758:5;752:12;785:6;780:3;773:19;801:76;870:6;863:4;858:3;854:14;847:4;840:5;836:16;801:76;:::i;:::-;931:2;910:15;-1:-1:-1;;906:29:1;897:39;;;;938:4;893:50;;678:271;-1:-1:-1;;678:271:1:o;954:220::-;1103:2;1092:9;1085:21;1066:4;1123:45;1164:2;1153:9;1149:18;1141:6;1123:45;:::i;1179:131::-;-1:-1:-1;;;;;1254:31:1;;1244:42;;1234:70;;1300:1;1297;1290:12;1315:315;1383:6;1391;1444:2;1432:9;1423:7;1419:23;1415:32;1412:52;;;1460:1;1457;1450:12;1412:52;1499:9;1486:23;1518:31;1543:5;1518:31;:::i;:::-;1568:5;1620:2;1605:18;;;;1592:32;;-1:-1:-1;;;1315:315:1:o;1827:494::-;2007:2;1992:18;;1996:9;2087:6;1965:4;2121:194;2135:4;2132:1;2129:11;2121:194;;;2194:13;;2182:26;;2231:4;2255:12;;;;2290:15;;;;2155:1;2148:9;2121:194;;;2125:3;;;1827:494;;;;:::o;2326:255::-;2393:6;2446:2;2434:9;2425:7;2421:23;2417:32;2414:52;;;2462:1;2459;2452:12;2414:52;2501:9;2488:23;2520:31;2545:5;2520:31;:::i;3254:456::-;3331:6;3339;3347;3400:2;3388:9;3379:7;3375:23;3371:32;3368:52;;;3416:1;3413;3406:12;3368:52;3455:9;3442:23;3474:31;3499:5;3474:31;:::i;:::-;3524:5;-1:-1:-1;3581:2:1;3566:18;;3553:32;3594:33;3553:32;3594:33;:::i;:::-;3254:456;;3646:7;;-1:-1:-1;;;3700:2:1;3685:18;;;;3672:32;;3254:456::o;3904:127::-;3965:10;3960:3;3956:20;3953:1;3946:31;3996:4;3993:1;3986:15;4020:4;4017:1;4010:15;4036:275;4107:2;4101:9;4172:2;4153:13;;-1:-1:-1;;4149:27:1;4137:40;;4207:18;4192:34;;4228:22;;;4189:62;4186:88;;;4254:18;;:::i;:::-;4290:2;4283:22;4036:275;;-1:-1:-1;4036:275:1:o;4316:187::-;4365:4;4398:18;4390:6;4387:30;4384:56;;;4420:18;;:::i;:::-;-1:-1:-1;4486:2:1;4465:15;-1:-1:-1;;4461:29:1;4492:4;4457:40;;4316:187::o;4508:464::-;4551:5;4604:3;4597:4;4589:6;4585:17;4581:27;4571:55;;4622:1;4619;4612:12;4571:55;4658:6;4645:20;4689:49;4705:32;4734:2;4705:32;:::i;:::-;4689:49;:::i;:::-;4763:2;4754:7;4747:19;4809:3;4802:4;4797:2;4789:6;4785:15;4781:26;4778:35;4775:55;;;4826:1;4823;4816:12;4775:55;4891:2;4884:4;4876:6;4872:17;4865:4;4856:7;4852:18;4839:55;4939:1;4914:16;;;4932:4;4910:27;4903:38;;;;4918:7;4508:464;-1:-1:-1;;;4508:464:1:o;4977:458::-;5064:6;5072;5080;5133:2;5121:9;5112:7;5108:23;5104:32;5101:52;;;5149:1;5146;5139:12;5101:52;5185:9;5172:23;5162:33;;5246:2;5235:9;5231:18;5218:32;5273:18;5265:6;5262:30;5259:50;;;5305:1;5302;5295:12;5259:50;5328;5370:7;5361:6;5350:9;5346:22;5328:50;:::i;:::-;5318:60;;;5425:2;5414:9;5410:18;5397:32;5387:42;;4977:458;;;;;:::o;5440:316::-;5517:6;5525;5533;5586:2;5574:9;5565:7;5561:23;5557:32;5554:52;;;5602:1;5599;5592:12;5554:52;-1:-1:-1;;5625:23:1;;;5695:2;5680:18;;5667:32;;-1:-1:-1;5746:2:1;5731:18;;;5718:32;;5440:316;-1:-1:-1;5440:316:1:o;5969:946::-;6053:6;6084:2;6127;6115:9;6106:7;6102:23;6098:32;6095:52;;;6143:1;6140;6133:12;6095:52;6183:9;6170:23;6212:18;6253:2;6245:6;6242:14;6239:34;;;6269:1;6266;6259:12;6239:34;6307:6;6296:9;6292:22;6282:32;;6352:7;6345:4;6341:2;6337:13;6333:27;6323:55;;6374:1;6371;6364:12;6323:55;6410:2;6397:16;6432:2;6428;6425:10;6422:36;;;6438:18;;:::i;:::-;6484:2;6481:1;6477:10;6467:20;;6507:28;6531:2;6527;6523:11;6507:28;:::i;:::-;6569:15;;;6639:11;;;6635:20;;;6600:12;;;;6667:19;;;6664:39;;;6699:1;6696;6689:12;6664:39;6723:11;;;;6743:142;6759:6;6754:3;6751:15;6743:142;;;6825:17;;6813:30;;6776:12;;;;6863;;;;6743:142;;;6904:5;5969:946;-1:-1:-1;;;;;;;;5969:946:1:o;6920:248::-;6988:6;6996;7049:2;7037:9;7028:7;7024:23;7020:32;7017:52;;;7065:1;7062;7055:12;7017:52;-1:-1:-1;;7088:23:1;;;7158:2;7143:18;;;7130:32;;-1:-1:-1;6920:248:1:o;7173:118::-;7259:5;7252:13;7245:21;7238:5;7235:32;7225:60;;7281:1;7278;7271:12;7296:241;7352:6;7405:2;7393:9;7384:7;7380:23;7376:32;7373:52;;;7421:1;7418;7411:12;7373:52;7460:9;7447:23;7479:28;7501:5;7479:28;:::i;7542:382::-;7607:6;7615;7668:2;7656:9;7647:7;7643:23;7639:32;7636:52;;;7684:1;7681;7674:12;7636:52;7723:9;7710:23;7742:31;7767:5;7742:31;:::i;:::-;7792:5;-1:-1:-1;7849:2:1;7834:18;;7821:32;7862:30;7821:32;7862:30;:::i;:::-;7911:7;7901:17;;;7542:382;;;;;:::o;8157:390::-;8235:6;8243;8296:2;8284:9;8275:7;8271:23;8267:32;8264:52;;;8312:1;8309;8302:12;8264:52;8352:9;8339:23;8385:18;8377:6;8374:30;8371:50;;;8417:1;8414;8407:12;8371:50;8440;8482:7;8473:6;8462:9;8458:22;8440:50;:::i;:::-;8430:60;8537:2;8522:18;;;;8509:32;;-1:-1:-1;;;;8157:390:1:o;8552:388::-;8620:6;8628;8681:2;8669:9;8660:7;8656:23;8652:32;8649:52;;;8697:1;8694;8687:12;8649:52;8736:9;8723:23;8755:31;8780:5;8755:31;:::i;:::-;8805:5;-1:-1:-1;8862:2:1;8847:18;;8834:32;8875:33;8834:32;8875:33;:::i;8945:356::-;9147:2;9129:21;;;9166:18;;;9159:30;9225:34;9220:2;9205:18;;9198:62;9292:2;9277:18;;8945:356::o;9306:380::-;9385:1;9381:12;;;;9428;;;9449:61;;9503:4;9495:6;9491:17;9481:27;;9449:61;9556:2;9548:6;9545:14;9525:18;9522:38;9519:161;;9602:10;9597:3;9593:20;9590:1;9583:31;9637:4;9634:1;9627:15;9665:4;9662:1;9655:15;9519:161;;9306:380;;;:::o;9691:344::-;9893:2;9875:21;;;9932:2;9912:18;;;9905:30;-1:-1:-1;;;9966:2:1;9951:18;;9944:50;10026:2;10011:18;;9691:344::o;10040:245::-;10107:6;10160:2;10148:9;10139:7;10135:23;10131:32;10128:52;;;10176:1;10173;10166:12;10128:52;10208:9;10202:16;10227:28;10249:5;10227:28;:::i;10290:337::-;10492:2;10474:21;;;10531:2;10511:18;;;10504:30;-1:-1:-1;;;10565:2:1;10550:18;;10543:43;10618:2;10603:18;;10290:337::o;10632:762::-;10725:6;10778:2;10766:9;10757:7;10753:23;10749:32;10746:52;;;10794:1;10791;10784:12;10746:52;10843:7;10836:4;10825:9;10821:20;10817:34;10807:62;;10865:1;10862;10855:12;10807:62;10898:2;10892:9;10940:2;10932:6;10928:15;11009:6;10997:10;10994:22;10973:18;10961:10;10958:34;10955:62;10952:88;;;11020:18;;:::i;:::-;11060:10;11056:2;11049:22;;11091:6;11135:2;11124:9;11120:18;11161:7;11153:6;11150:19;11147:39;;;11182:1;11179;11172:12;11147:39;11206:9;11224:139;11240:6;11235:3;11232:15;11224:139;;;11308:10;;11296:23;;11348:4;11339:14;;;;11257;11224:139;;;-1:-1:-1;11382:6:1;;10632:762;-1:-1:-1;;;;;10632:762:1:o;11758:649::-;11838:6;11891:2;11879:9;11870:7;11866:23;11862:32;11859:52;;;11907:1;11904;11897:12;11859:52;11940:9;11934:16;11973:18;11965:6;11962:30;11959:50;;;12005:1;12002;11995:12;11959:50;12028:22;;12081:4;12073:13;;12069:27;-1:-1:-1;12059:55:1;;12110:1;12107;12100:12;12059:55;12139:2;12133:9;12164:49;12180:32;12209:2;12180:32;:::i;12164:49::-;12236:2;12229:5;12222:17;12276:7;12271:2;12266;12262;12258:11;12254:20;12251:33;12248:53;;;12297:1;12294;12287:12;12248:53;12310:67;12374:2;12369;12362:5;12358:14;12353:2;12349;12345:11;12310:67;:::i;:::-;12396:5;11758:649;-1:-1:-1;;;;;11758:649:1:o;12821:127::-;12882:10;12877:3;12873:20;12870:1;12863:31;12913:4;12910:1;12903:15;12937:4;12934:1;12927:15;12953:125;13018:9;;;13039:10;;;13036:36;;;13052:18;;:::i;13444:410::-;13646:2;13628:21;;;13685:2;13665:18;;;13658:30;13724:34;13719:2;13704:18;;13697:62;-1:-1:-1;;;13790:2:1;13775:18;;13768:44;13844:3;13829:19;;13444:410::o;14273:184::-;14343:6;14396:2;14384:9;14375:7;14371:23;14367:32;14364:52;;;14412:1;14409;14402:12;14364:52;-1:-1:-1;14435:16:1;;14273:184;-1:-1:-1;14273:184:1:o;15511:388::-;-1:-1:-1;;;;;15716:32:1;;15698:51;;15785:2;15780;15765:18;;15758:30;;;-1:-1:-1;;15805:45:1;;15831:18;;15823:6;15805:45;:::i;:::-;15797:53;;15886:6;15881:2;15870:9;15866:18;15859:34;15511:388;;;;;;:::o;17447:127::-;17508:10;17503:3;17499:20;17496:1;17489:31;17539:4;17536:1;17529:15;17563:4;17560:1;17553:15;18339:632;18510:2;18562:21;;;18632:13;;18535:18;;;18654:22;;;18481:4;;18510:2;18733:15;;;;18707:2;18692:18;;;18481:4;18776:169;18790:6;18787:1;18784:13;18776:169;;;18851:13;;18839:26;;18920:15;;;;18885:12;;;;18812:1;18805:9;18776:169;;;-1:-1:-1;18962:3:1;;18339:632;-1:-1:-1;;;;;;18339:632:1:o;19737:251::-;19807:6;19860:2;19848:9;19839:7;19835:23;19831:32;19828:52;;;19876:1;19873;19866:12;19828:52;19908:9;19902:16;19927:31;19952:5;19927:31;:::i;26363:401::-;26565:2;26547:21;;;26604:2;26584:18;;;26577:30;26643:34;26638:2;26623:18;;26616:62;-1:-1:-1;;;26709:2:1;26694:18;;26687:35;26754:3;26739:19;;26363:401::o;26769:399::-;26971:2;26953:21;;;27010:2;26990:18;;;26983:30;27049:34;27044:2;27029:18;;27022:62;-1:-1:-1;;;27115:2:1;27100:18;;27093:33;27158:3;27143:19;;26769:399::o;27868:168::-;27941:9;;;27972;;27989:15;;;27983:22;;27969:37;27959:71;;28010:18;;:::i;28448:128::-;28515:9;;;28536:11;;;28533:37;;;28550:18;;:::i;29056:217::-;29096:1;29122;29112:132;;29166:10;29161:3;29157:20;29154:1;29147:31;29201:4;29198:1;29191:15;29229:4;29226:1;29219:15;29112:132;-1:-1:-1;29258:9:1;;29056:217::o;29812:980::-;30074:4;30122:3;30111:9;30107:19;30153:6;30142:9;30135:25;30179:2;30217:6;30212:2;30201:9;30197:18;30190:34;30260:3;30255:2;30244:9;30240:18;30233:31;30284:6;30319;30313:13;30350:6;30342;30335:22;30388:3;30377:9;30373:19;30366:26;;30427:2;30419:6;30415:15;30401:29;;30448:1;30458:195;30472:6;30469:1;30466:13;30458:195;;;30537:13;;-1:-1:-1;;;;;30533:39:1;30521:52;;30628:15;;;;30593:12;;;;30569:1;30487:9;30458:195;;;-1:-1:-1;;;;;;;30709:32:1;;;;30704:2;30689:18;;30682:60;-1:-1:-1;;;30773:3:1;30758:19;30751:35;30670:3;29812:980;-1:-1:-1;;;29812:980:1:o;31409:306::-;31497:6;31505;31513;31566:2;31554:9;31545:7;31541:23;31537:32;31534:52;;;31582:1;31579;31572:12;31534:52;31611:9;31605:16;31595:26;;31661:2;31650:9;31646:18;31640:25;31630:35;;31705:2;31694:9;31690:18;31684:25;31674:35;;31409:306;;;;;:::o

Swarm Source

ipfs://196c9aa2616d071f00062df5ce807c0f16e48d53d178082192525385c4f41f19
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.