ETH Price: $2,948.54 (+0.41%)
 

Overview

Max Total Supply

409,831,836,953 QUEEN

Holders

797

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
QUEEN

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-06-06
*/

/*────────────────────────────┐
Developed by @Coinsult_tg                      
 _____     _             _ _   
|     |___|_|___ ___ _ _| | |_ 
|   --| . | |   |_ -| | | |  _|
|_____|___|_|_|_|___|___|_|_|  
                               
tg: @queenonbase
──────────────────────────────┘

 SPDX-License-Identifier: MIT */

pragma solidity 0.8.21;

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

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

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 add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key) public view returns (int) {
        if(!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint index) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);

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

}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

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

    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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        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);
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

interface DividendPayingTokenInterface {
    function dividendOf(address _owner) external view returns(uint256);
    function withdrawDividend() external;
  
    event DividendsDistributed(
        address indexed from,
        uint256 weiAmount
    );
    event DividendWithdrawn(
        address indexed to,
        uint256 weiAmount
    );
}

interface DividendPayingTokenOptionalInterface {
    function withdrawableDividendOf(address _owner) external view returns(uint256);
    function withdrawnDividendOf(address _owner) external view returns(uint256);
    function accumulativeDividendOf(address _owner) external view returns(uint256);
}

contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 constant internal magnitude = 2**128;
    uint256 internal magnifiedDividendPerShare;
    uint256 public totalDividendsDistributed;
    
    address public immutable rewardToken;
    
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    constructor(string memory _name, string memory _symbol, address _rewardToken) ERC20(_name, _symbol) { 
        rewardToken = _rewardToken;
    }

    function distributeDividends(uint256 amount) public onlyOwner{
        require(totalSupply() > 0);

        if (amount > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (amount).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, amount);

            totalDividendsDistributed = totalDividendsDistributed.add(amount);
        }
    }

    function withdrawDividend() public virtual override {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            bool success = IERC20(rewardToken).transfer(user, _withdrawableDividend);

            if(!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }

            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view override returns(uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view override returns(uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view override returns(uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view override returns(uint256) {
        return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function _transfer(address from, address to, uint256 value) internal virtual override {
        require(false);

        int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
        magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
        magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);

        if(newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if(newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }
}

contract DividendTracker is Ownable, DividendPayingToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;
    uint256 public lastProcessedIndex;

    mapping (address => bool) public excludedFromDividends;
    mapping (address => uint256) public lastClaimTimes;

    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor(uint256 minBalance, address _rewardToken) DividendPayingToken("Reward Tracker", "DividendTracker", _rewardToken) {
        claimWait = 3600;
        minimumTokenBalanceForDividends = minBalance * 10 ** 9;
    }

    function _transfer(address, address, uint256) internal pure override {
        require(false, "No transfers allowed");
    }

    function withdrawDividend() public pure override {
        require(false, "withdrawDividend disabled. Use the 'claim' function on the main contract.");
    }

    function updateMinimumTokenBalanceForDividends(uint256 _newMinimumBalance) external onlyOwner {
        require(_newMinimumBalance != minimumTokenBalanceForDividends, "New mimimum balance for dividend cannot be same as current minimum balance");
        minimumTokenBalanceForDividends = _newMinimumBalance;
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;

        _setBalance(account, 0);
        tokenHoldersMap.remove(account);

        emit ExcludeFromDividends(account);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3_600 && newClaimWait <= 86_400, "claimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function setLastProcessedIndex(uint256 index) external onlyOwner {
        lastProcessedIndex = index;
    }

    function getLastProcessedIndex() external view returns(uint256) {
        return lastProcessedIndex;
    }

    function getNumberOfTokenHolders() external view returns(uint256) {
        return tokenHoldersMap.keys.length;
    }

    function getAccount(address _account)
        public view returns (
            address account,
            int256 index,
            int256 iterationsUntilProcessed,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 lastClaimTime,
            uint256 nextClaimTime,
            uint256 secondsUntilAutoClaimAvailable) {
        account = _account;

        index = tokenHoldersMap.getIndexOfKey(account);

        iterationsUntilProcessed = -1;

        if(index >= 0) {
            if(uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ?
                                                        tokenHoldersMap.keys.length.sub(lastProcessedIndex) :
                                                        0;


                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }


        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);

        lastClaimTime = lastClaimTimes[account];

        nextClaimTime = lastClaimTime > 0 ?
                                    lastClaimTime.add(claimWait) :
                                    0;

        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ?
                                                    nextClaimTime.sub(block.timestamp) :
                                                    0;
    }

    function getAccountAtIndex(uint256 index)
        public view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        if(index >= tokenHoldersMap.size()) {
            return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0);
        }

        address account = tokenHoldersMap.getKeyAtIndex(index);

        return getAccount(account);
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if(lastClaimTime > block.timestamp)  {
            return false;
        }

        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function setBalance(address payable account, uint256 newBalance) external onlyOwner {
        if(excludedFromDividends[account]) {
            return;
        }

        if(newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        }
        else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }

        processAccount(account, true);
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;

        if(numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }

        uint256 _lastProcessedIndex = lastProcessedIndex;

        uint256 gasUsed = 0;

        uint256 gasLeft = gasleft();

        uint256 iterations = 0;
        uint256 claims = 0;

        while(gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;

            if(_lastProcessedIndex >= tokenHoldersMap.keys.length) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_lastProcessedIndex];

            if(canAutoClaim(lastClaimTimes[account])) {
                if(processAccount(payable(account), true)) {
                    claims++;
                }
            }

            iterations++;

            uint256 newGasLeft = gasleft();

            if(gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }

            gasLeft = newGasLeft;
        }

        lastProcessedIndex = _lastProcessedIndex;

        return (iterations, claims, lastProcessedIndex);
    }

    function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);

        if(amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }

        return false;
    }
}

contract QUEEN is ERC20, Ownable {
    uint256 public liquidityFeeOnBuy;
    uint256 public treasuryFeeOnBuy;
    uint256 public rewardsFeeOnBuy;

    uint256 private totalBuyFee;

    uint256 public liquidityFeeOnSell;
    uint256 public treasuryFeeOnSell;
    uint256 public rewardsFeeOnSell;

    uint256 private totalSellFee;

    address public treasuryWallet;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;
    
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    bool    private swapping;
    uint256 public swapTokensAtAmount;

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

    DividendTracker public dividendTracker;
    address public immutable rewardToken;
    uint256 public gasForProcessing = 300_000;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event TreasuryWalletChanged(address treasuryWallet);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SellFeesUpdated(uint256 totalSellFee);
    event BuyFeesUpdated(uint256 totalBuyFee);
    event TransferFeesUpdated(uint256 fee1, uint256 fee2);

    event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity);
    event SendMarketing(uint256 bnbSend);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event SendDividends(uint256 amount);
    event ProcessedDividendTracker(
        uint256 iterations,
        uint256 claims,
        uint256 lastProcessedIndex,
        bool indexed automatic,
        uint256 gas,
        address indexed processor
    );

    constructor() payable ERC20("Queen Of Memes", "QUEEN") {

        rewardToken = 0x420b0FA3dE2EFCf2b2Fd04152Eb1Df36a09717cD; // KING

        liquidityFeeOnBuy   = 1;
        treasuryFeeOnBuy    = 2;
        rewardsFeeOnBuy     = 1;

        totalBuyFee         = liquidityFeeOnBuy + treasuryFeeOnBuy + rewardsFeeOnBuy;

        liquidityFeeOnSell  = 1;
        treasuryFeeOnSell   = 2;
        rewardsFeeOnSell    = 1;

        totalSellFee        = liquidityFeeOnSell + treasuryFeeOnSell + rewardsFeeOnSell;

        treasuryWallet = 0x3689F467f6ca67518bBDCabc8445fC1394046567;

        dividendTracker = new DividendTracker(5_000_000, rewardToken);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24); // BASE Mainnet
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(DEAD);
        dividendTracker.excludeFromDividends(address(_uniswapV2Router));

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[treasuryWallet] = true;
        _isExcludedFromFees[address(this)] = true;

        maxTransactionLimitEnabled = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[address(0xdead)] = true;
        _isExcludedFromMaxTxLimit[treasuryWallet] = true;
        _isExcludedFromMaxTxLimit[address(dividendTracker)] = true;
    
        _mint(owner(), 420e9 * (10 ** 9));
        swapTokensAtAmount = totalSupply() / 5000;

        maxTransactionAmountBuy     = totalSupply() * 10 / 1000;
        maxTransactionAmountSell    = totalSupply() * 10 / 1000;
    }

    receive() external payable {}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            sendBNB(payable(msg.sender), address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function burn(uint256 amount) external onlyOwner {
        super._burn(msg.sender, amount);
    }

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

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

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }

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

        if(value) {
            dividendTracker.excludeFromDividends(pair);
        }

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already set to that state");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function updateBuyFees(uint256 _liquidityFeeOnBuy, uint256 _treasuryFeeOnBuy, uint256 _rewardsFeeOnBuy) external onlyOwner {
        liquidityFeeOnBuy   = _liquidityFeeOnBuy;
        treasuryFeeOnBuy    = _treasuryFeeOnBuy;
        rewardsFeeOnBuy     = _rewardsFeeOnBuy;

        totalBuyFee = _liquidityFeeOnBuy + _treasuryFeeOnBuy + _rewardsFeeOnBuy;

        require(totalBuyFee <= 5, "Buy fee cannot be more than 5%");

        emit BuyFeesUpdated(totalBuyFee);
    }

    function updateSellFees(uint256 _liquidityFeeOnSell, uint256 _treasuryFeeOnSell, uint256 _rewardsFeeOnSell) external onlyOwner {
        liquidityFeeOnSell   = _liquidityFeeOnSell;
        treasuryFeeOnSell    = _treasuryFeeOnSell;
        rewardsFeeOnSell     = _rewardsFeeOnSell;

        totalSellFee = _liquidityFeeOnSell + _treasuryFeeOnSell + _rewardsFeeOnSell;

        require(totalSellFee <= 5, "Sell fee cannot be more than 5%");

        emit SellFeesUpdated(totalSellFee);
    }

    function changeTreasuryWallet(address _treasuryWallet) external onlyOwner {
        require(_treasuryWallet != treasuryWallet, "Marketing wallet is already that address");
        require(!isContract(_treasuryWallet), "Marketing wallet cannot be a contract");
        require(_treasuryWallet != address(0), "Marketing wallet cannot be the zero address");
        treasuryWallet = _treasuryWallet;
        emit TreasuryWalletChanged(treasuryWallet);
    }
    
    bool public swapEnabled = true;

    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(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                !_isExcludedFromMaxTxLimit[from] && 
                !_isExcludedFromMaxTxLimit[to]
            ) {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( canSwap &&
            !swapping &&
            automatedMarketMakerPairs[to] &&
            swapEnabled &&
            totalBuyFee + totalSellFee > 0
        ) {
            swapping = true;
            
            uint256 liquidityTokens;

            if(liquidityFeeOnBuy + liquidityFeeOnSell > 0) {
                liquidityTokens = contractTokenBalance * (liquidityFeeOnBuy + liquidityFeeOnSell) / (totalBuyFee + totalSellFee);
                swapAndLiquify(liquidityTokens);
            }

            contractTokenBalance -= liquidityTokens;

            uint256 bnbShare = (treasuryFeeOnBuy + treasuryFeeOnSell) + (rewardsFeeOnBuy + rewardsFeeOnSell);
            
            if(contractTokenBalance > 0 && bnbShare > 0) {
                uint256 initialBalance = address(this).balance;

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

                try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                    contractTokenBalance,
                    0,
                    path,
                    address(this),
                    block.timestamp
                ) {} catch {}
                
                uint256 newBalance = address(this).balance - initialBalance;

                if((treasuryFeeOnBuy + treasuryFeeOnSell) > 0) {
                    uint256 treasuryBNB = newBalance * (treasuryFeeOnBuy + treasuryFeeOnSell) / bnbShare;
                    sendBNB(payable(treasuryWallet), treasuryBNB);
                    emit SendMarketing(treasuryBNB);
                }

                if((rewardsFeeOnBuy + rewardsFeeOnSell) > 0) {
                    uint256 rewardBNB = newBalance * (rewardsFeeOnBuy + rewardsFeeOnSell) / bnbShare;
                    swapAndSendDividends(rewardBNB);
                }
            }

            swapping = false;
        }

        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        // w2w & not excluded from fees
        if(from != uniswapV2Pair && to != uniswapV2Pair && takeFee) {
            takeFee = false;
        }

        if(takeFee) {
            uint256 _totalFees;
            if(from == uniswapV2Pair) {
                _totalFees = totalBuyFee;
            } else {
                _totalFees = totalSellFee;
            }
            uint256 fees = amount * _totalFees / 100;
            
            amount = amount - fees;

            super._transfer(from, address(this), fees);
        }

        super._transfer(from, to, amount);

        try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}

        if(!swapping) {
            uint256 gas = gasForProcessing;

            try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin);
            }
            catch {

            }
        }
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

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

        try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        ) {} catch {}
        
        uint256 newBalance = address(this).balance - initialBalance;

        try uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        ) {} catch {}

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendDividends(uint256 amount) private{
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = rewardToken;

        try uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {}
        
        uint256 balanceRewardToken = IERC20(rewardToken).balanceOf(address(this));
        bool success = IERC20(rewardToken).transfer(address(dividendTracker), balanceRewardToken);

        if (success) {
            dividendTracker.distributeDividends(balanceRewardToken);
            emit SendDividends(balanceRewardToken);
        }
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 100_000, "SwapTokensAtAmount must be greater than 0.001% of total supply");
        swapTokensAtAmount = newAmount;
    }
    
    function setSwapEnabled(bool _enabled) external onlyOwner{
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue >= 200_000 && newValue <= 500_000, "gasForProcessing must be between 200,000 and 500,000");
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    function updateMinimumBalanceForDividends(uint256 newMinimumBalance) external onlyOwner {
        dividendTracker.updateMinimumTokenBalanceForDividends(newMinimumBalance);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3_600 && newClaimWait <= 86_400, "claimWait must be updated to between 1 and 24 hours");
        dividendTracker.updateClaimWait(newClaimWait);
    }

    function getClaimWait() external view returns(uint256) {
        return dividendTracker.claimWait();
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

    function withdrawableDividendOf(address account) public view returns(uint256) {
        return dividendTracker.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account) public view returns (uint256) {
        return dividendTracker.balanceOf(account);
    }

    function totalRewardsEarned(address account) public view returns (uint256) {
        return dividendTracker.accumulativeDividendOf(account);
    }

    function excludeFromDividends(address account) external onlyOwner{
        dividendTracker.excludeFromDividends(account);
    }

    function getAccountDividendsInfo(address account)
        external view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccount(account);
    }

    function getAccountDividendsInfoAtIndex(uint256 index)
        external view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccountAtIndex(index);
    }

    function processDividendTracker(uint256 gas) external {
        (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) = dividendTracker.process(gas);
        emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, false, gas, tx.origin);
    }

    function claim() external {
        dividendTracker.processAccount(payable(msg.sender), false);
    }

    function claimAddress(address claimee) external onlyOwner {
        dividendTracker.processAccount(payable(claimee), false);
    }

    function getLastProcessedIndex() external view returns(uint256) {
        return dividendTracker.getLastProcessedIndex();
    }

    function setLastProcessedIndex(uint256 index) external onlyOwner {
        dividendTracker.setLastProcessedIndex(index);
    }

    function getNumberOfDividendTokenHolders() external view returns(uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }

    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell);

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(enable != maxTransactionLimitEnabled, "Max transaction limit is already set to that state");
        maxTransactionLimitEnabled = enable;

        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner {
        require(
            _maxTransactionAmountBuy  >= (totalSupply() / (10 ** decimals())) / 200 && 
            _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals())) / 200, 
            "Max Transaction limit cannot be lower than 0.5% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());

        emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function excludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxTxLimit[account] = exclude;

        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBuyFee","type":"uint256"}],"name":"BuyFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalSellFee","type":"uint256"}],"name":"SellFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SendMarketing","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":"bnbReceived","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":false,"internalType":"uint256","name":"fee1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee2","type":"uint256"}],"name":"TransferFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasuryWallet","type":"address"}],"name":"TreasuryWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","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":[{"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"changeTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"claimee","type":"address"}],"name":"claimAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"setLastProcessedIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"totalRewardsEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"treasuryFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_treasuryFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_rewardsFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newClaimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinimumBalance","type":"uint256"}],"name":"updateMinimumBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_treasuryFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_rewardsFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

620493e06015556016805460ff19166001179055600e60a09081526d517565656e204f66204d656d657360901b60c052610120604052600560e09081526428aaa2a2a760d91b61010052600362000057838262000b71565b50600462000066828262000b71565b505050620000836200007d6200068760201b60201c565b6200068b565b73420b0fa3de2efcf2b2fd04152eb1df36a09717cd60805260016006819055600260078190556008829055620000ba908262000c4d565b620000c6919062000c4d565b6009556001600a8190556002600b819055600c829055620000e8908262000c4d565b620000f4919062000c4d565b600d55600e80546001600160a01b031916733689f467f6ca67518bbdcabc8445fc1394046567179055608051604051624c4b409190620001349062000ac4565b9182526001600160a01b03166020820152604001604051809103905ff08015801562000162573d5f803e3d5ffd5b5060145f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505f734752ba5dbc23f44d87826276bf6fd6b1c372ad2490505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001de573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000204919062000c63565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000250573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000276919062000c63565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002c1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002e7919062000c63565b600f80546001600160a01b038086166001600160a01b031992831681179093556010805491851691909216179055909150620003279030905f19620006dc565b6200033481600162000807565b60145460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db0906024015f604051808303815f87803b15801562000378575f80fd5b505af11580156200038b573d5f803e3d5ffd5b505060145460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db091506024015f604051808303815f87803b158015620003d2575f80fd5b505af1158015620003e5573d5f803e3d5ffd5b505060145460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db091506024015f604051808303815f87803b1580156200042e575f80fd5b505af115801562000441573d5f803e3d5ffd5b505060145460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db091506024015f604051808303815f87803b1580156200048a575f80fd5b505af11580156200049d573d5f803e3d5ffd5b50505050600160125f620004b66200096360201b60201c565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905560129093527f1120e10407cab1193d7c5139d9aae5536deb3d83e855f25f8e42f811c01f56f7805485166001908117909155600e54909116835281832080548516821790553083529082208054841682179055601880549093168117909255601790620005586005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905530815260179093528183208054851660019081179091557f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b03038054861682179055600e5482168452828420805486168217905560145490911683529120805490921617905562000610620006006005546001600160a01b031690565b6816c4abbebea010000062000972565b6113886200061d60025490565b62000629919062000c8b565b6011556103e86200063960025490565b6200064690600a62000cab565b62000652919062000c8b565b6019556103e86200066260025490565b6200066f90600a62000cab565b6200067b919062000c8b565b601a555062000cc59050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038316620007445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620007a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200073b565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382165f9081526013602052604090205481151560ff9091161515036200089e5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084016200073b565b6001600160a01b0382165f908152601360205260409020805460ff19168215801591909117909155620009285760145460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db0906024015f604051808303815f87803b15801562000910575f80fd5b505af115801562000923573d5f803e3d5ffd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b031690565b6001600160a01b038216620009ca5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200073b565b600254620009d9908262000a59565b6002556001600160a01b0382165f9081526020819052604090205462000a00908262000a59565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f8062000a67838562000c4d565b90508381101562000abb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016200073b565b90505b92915050565b6125508062004cac83390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168062000afb57607f821691505b60208210810362000b1a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000a54575f81815260208120601f850160051c8101602086101562000b485750805b601f850160051c820191505b8181101562000b695782815560010162000b54565b505050505050565b81516001600160401b0381111562000b8d5762000b8d62000ad2565b62000ba58162000b9e845462000ae6565b8462000b20565b602080601f83116001811462000bdb575f841562000bc35750858301515b5f19600386901b1c1916600185901b17855562000b69565b5f85815260208120601f198616915b8281101562000c0b5788860151825594840194600190910190840162000bea565b508582101562000c2957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082018082111562000abe5762000abe62000c39565b5f6020828403121562000c74575f80fd5b81516001600160a01b038116811462000abb575f80fd5b5f8262000ca657634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141762000abe5762000abe62000c39565b608051613fb962000cf35f395f8181610b2f015281816136f3015281816137c401526138630152613fb95ff3fe6080604052600436106103a0575f3560e01c80637b3c83b1116101de578063b6f7f68111610108578063e4893fdc1161009d578063f27fd2541161006d578063f27fd25414610ae0578063f2fde38b14610aff578063f7c618c114610b1e578063f9d0831a14610b51575f80fd5b8063e4893fdc14610a79578063e4f24cb014610a8e578063e7841ec014610aad578063e98030c714610ac1575f80fd5b8063cdd4bd79116100d8578063cdd4bd79146109ec578063dd62ed3e14610a01578063e01af92c14610a45578063e2f4560514610a64575f80fd5b8063b6f7f6811461097a578063b94315ff14610999578063c0246668146109ae578063c17b5b8c146109cd575f80fd5b80639c1b8af51161017e578063a9059cbb1161014e578063a9059cbb146108aa578063ad56c13c146108c9578063afa4f3b21461092d578063b62496f51461094c575f80fd5b80639c1b8af514610843578063a26579ad14610858578063a457c2d71461086c578063a8b9d2401461088b575f80fd5b8063871c128d116101b9578063871c128d146107d4578063880bcbc1146107f35780638da5cb5b1461081257806395d89b411461082f575f80fd5b80637b3c83b11461078b5780638095d564146107a0578063824e4605146107bf575f80fd5b80633b364da8116102ca57806356a6cabf1161025f5780636ddd17131161022f5780636ddd17131461070b578063700bb1911461072457806370a0823114610743578063715018a614610777575f80fd5b806356a6cabf146106a457806359136fa5146106c357806364b0f653146106d85780636843cd84146106ec575f80fd5b806349bd5a5e1161029a57806349bd5a5e1461061b5780634e71d92d1461063a5780634fbee1931461064e578063537c1ac714610685575f80fd5b80633b364da81461059f5780633f249df0146105be57806342966c68146105dd5780634626402b146105fc575f80fd5b8063286b3aa01161034057806330bb4cff1161031057806330bb4cff14610532578063313ce5671461054657806331e79db0146105615780633950935114610580575f80fd5b8063286b3aa0146104c45780632ba86bf2146104e55780632c1f5216146104fe5780632ce86fbf1461051d575f80fd5b80631694505e1161037b5780631694505e1461042357806318160ddd1461045a57806318d9ceae1461046e57806323b872dd146104a5575f80fd5b80630105d0fd146103ab57806306fdde03146103d3578063095ea7b3146103f4575f80fd5b366103a757005b5f80fd5b3480156103b6575f80fd5b506103c060195481565b6040519081526020015b60405180910390f35b3480156103de575f80fd5b506103e7610b70565b6040516103ca91906139c9565b3480156103ff575f80fd5b5061041361040e366004613a28565b610c00565b60405190151581526020016103ca565b34801561042e575f80fd5b50600f54610442906001600160a01b031681565b6040516001600160a01b0390911681526020016103ca565b348015610465575f80fd5b506002546103c0565b348015610479575f80fd5b50610413610488366004613a52565b6001600160a01b03165f9081526017602052604090205460ff1690565b3480156104b0575f80fd5b506104136104bf366004613a6d565b610c16565b3480156104cf575f80fd5b506104e36104de366004613aab565b610c7d565b005b3480156104f0575f80fd5b506018546104139060ff1681565b348015610509575f80fd5b50601454610442906001600160a01b031681565b348015610528575f80fd5b506103c0600a5481565b34801561053d575f80fd5b506103c0610d3f565b348015610551575f80fd5b50604051600981526020016103ca565b34801561056c575f80fd5b506104e361057b366004613a52565b610dc8565b34801561058b575f80fd5b5061041361059a366004613a28565b610e5a565b3480156105aa575f80fd5b506104e36105b9366004613aab565b610e8f565b3480156105c9575f80fd5b506104e36105d8366004613a52565b610f20565b3480156105e8575f80fd5b506104e36105f7366004613aab565b610fde565b348015610607575f80fd5b50600e54610442906001600160a01b031681565b348015610626575f80fd5b50601054610442906001600160a01b031681565b348015610645575f80fd5b506104e3611032565b348015610659575f80fd5b50610413610668366004613a52565b6001600160a01b03165f9081526012602052604090205460ff1690565b348015610690575f80fd5b506104e361069f366004613a52565b6110a3565b3480156106af575f80fd5b506104e36106be366004613acf565b6112ca565b3480156106ce575f80fd5b506103c0601a5481565b3480156106e3575f80fd5b506103c06113d6565b3480156106f7575f80fd5b506103c0610706366004613a52565b611436565b348015610716575f80fd5b506016546104139060ff1681565b34801561072f575f80fd5b506104e361073e366004613aab565b6114a3565b34801561074e575f80fd5b506103c061075d366004613a52565b6001600160a01b03165f9081526020819052604090205490565b348015610782575f80fd5b506104e3611586565b348015610796575f80fd5b506103c060065481565b3480156107ab575f80fd5b506104e36107ba366004613aea565b6115d8565b3480156107ca575f80fd5b506103c060075481565b3480156107df575f80fd5b506104e36107ee366004613aab565b6116d8565b3480156107fe575f80fd5b506104e361080d366004613b13565b611850565b34801561081d575f80fd5b506005546001600160a01b0316610442565b34801561083a575f80fd5b506103e76119c9565b34801561084e575f80fd5b506103c060155481565b348015610863575f80fd5b506103c06119d8565b348015610877575f80fd5b50610413610886366004613a28565b611a38565b348015610896575f80fd5b506103c06108a5366004613a52565b611a85565b3480156108b5575f80fd5b506104136108c4366004613a28565b611ad0565b3480156108d4575f80fd5b506108e86108e3366004613a52565b611adc565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016103ca565b348015610938575f80fd5b506104e3610947366004613aab565b611b8d565b348015610957575f80fd5b50610413610966366004613a52565b60136020525f908152604090205460ff1681565b348015610985575f80fd5b506104e3610994366004613b4a565b611c64565b3480156109a4575f80fd5b506103c0600c5481565b3480156109b9575f80fd5b506104e36109c8366004613b13565b611dee565b3480156109d8575f80fd5b506104e36109e7366004613aea565b611f07565b3480156109f7575f80fd5b506103c0600b5481565b348015610a0c575f80fd5b506103c0610a1b366004613b6a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a50575f80fd5b506104e3610a5f366004613acf565b611ffa565b348015610a6f575f80fd5b506103c060115481565b348015610a84575f80fd5b506103c060085481565b348015610a99575f80fd5b506103c0610aa8366004613a52565b6120d4565b348015610ab8575f80fd5b506103c061211f565b348015610acc575f80fd5b506104e3610adb366004613aab565b61217f565b348015610aeb575f80fd5b506108e8610afa366004613aab565b612297565b348015610b0a575f80fd5b506104e3610b19366004613a52565b6122f1565b348015610b29575f80fd5b506104427f000000000000000000000000000000000000000000000000000000000000000081565b348015610b5c575f80fd5b506104e3610b6b366004613a52565b6123bd565b606060038054610b7f90613b96565b80601f0160208091040260200160405190810160405280929190818152602001828054610bab90613b96565b8015610bf65780601f10610bcd57610100808354040283529160200191610bf6565b820191905f5260205f20905b815481529060010190602001808311610bd957829003601f168201915b5050505050905090565b5f610c0c338484612555565b5060015b92915050565b5f610c228484846126ad565b610c738433610c6e85604051806060016040528060288152602001613f17602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190612f9d565b612555565b5060019392505050565b6005546001600160a01b03163314610cc95760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f83398151915260448201526064015b60405180910390fd5b6014546040517f286b3aa0000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063286b3aa0906024015b5f604051808303815f87803b158015610d26575f80fd5b505af1158015610d38573d5f803e3d5ffd5b5050505050565b601454604080517f85a6b3ae00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610d9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc39190613bce565b905090565b6005546001600160a01b03163314610e0f5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6014546040517f31e79db00000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906331e79db090602401610d0f565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610c0c918590610c6e9086612fd5565b6005546001600160a01b03163314610ed65760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6014546040517f0dcb2e89000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690630dcb2e8990602401610d0f565b6005546001600160a01b03163314610f675760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b60145460405163bc4c4b3760e01b81526001600160a01b0383811660048301525f60248301529091169063bc4c4b37906044016020604051808303815f875af1158015610fb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fda9190613be5565b5050565b6005546001600160a01b031633146110255760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b61102f338261303a565b50565b60145460405163bc4c4b3760e01b81523360048201525f60248201526001600160a01b039091169063bc4c4b37906044016020604051808303815f875af115801561107f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102f9190613be5565b6005546001600160a01b031633146110ea5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b600e546001600160a01b039081169082160361116e5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610cc0565b6001600160a01b0381163b156111ec5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f74726163740000000000000000000000000000000000000000000000000000006064820152608401610cc0565b6001600160a01b0381166112685760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610cc0565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f2551960305e8f85b09658bb3075878e3e3cef37a5f7b5d43261f5e6f36b3d6a4906020015b60405180910390a150565b6005546001600160a01b031633146113115760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b60185460ff1615158115150361138f5760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960448201527f2073657420746f207468617420737461746500000000000000000000000000006064820152608401610cc0565b6018805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf906020016112bf565b601454604080517f09bbedde00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610d9f573d5f803e3d5ffd5b6014546040516370a0823160e01b81526001600160a01b0383811660048301525f9216906370a08231906024015b602060405180830381865afa15801561147f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c109190613bce565b6014546040517fffb2c479000000000000000000000000000000000000000000000000000000008152600481018390525f91829182916001600160a01b03169063ffb2c479906024016060604051808303815f875af1158015611508573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c9190613c00565b604080518481526020810184905290810182905260608101889052929550909350915032905f907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6005546001600160a01b031633146115cd5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6115d65f61315e565b565b6005546001600160a01b0316331461161f5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b600683905560078290556008819055806116398385613c3f565b6116439190613c3f565b6009819055600510156116985760405162461bcd60e51b815260206004820152601e60248201527f427579206665652063616e6e6f74206265206d6f7265207468616e20352500006044820152606401610cc0565b7f491005465ab6f82fd10f4b13a1b1e5ca452bc4856b019f63775e33a6b1ad2feb6009546040516116cb91815260200190565b60405180910390a1505050565b6005546001600160a01b0316331461171f5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b62030d40811015801561173557506207a1208111155b6117a75760405162461bcd60e51b815260206004820152603460248201527f676173466f7250726f63657373696e67206d757374206265206265747765656e60448201527f203230302c30303020616e64203530302c3030300000000000000000000000006064820152608401610cc0565b601554810361181e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201527f6f2073616d652076616c756500000000000000000000000000000000000000006064820152608401610cc0565b60155460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db7905f90a3601555565b6005546001600160a01b031633146118975760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6001600160a01b0382165f9081526017602052604090205481151560ff9091161515036119125760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b6064820152608401610cc0565b306001600160a01b0383160361196a5760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610cc0565b6001600160a01b0382165f81815260176020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b606060048054610b7f90613b96565b601454604080517f6f2789ec00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610d9f573d5f803e3d5ffd5b5f610c0c3384610c6e85604051806060016040528060258152602001613f5f60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190612f9d565b6014546040517fa8b9d2400000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301525f92169063a8b9d24090602401611464565b5f610c0c3384846126ad565b6014546040517ffbcbc0f10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301525f92839283928392839283928392839291169063fbcbc0f1906024015b61010060405180830381865afa158015611b4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b729190613c52565b97509750975097509750975097509750919395975091939597565b6005546001600160a01b03163314611bd45760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b620186a0611be160025490565b611beb9190613cb7565b8111611c5f5760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610cc0565b601155565b6005546001600160a01b03163314611cab5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b60c8611cb96009600a613db6565b600254611cc69190613cb7565b611cd09190613cb7565b8210158015611d03575060c8611ce86009600a613db6565b600254611cf59190613cb7565b611cff9190613cb7565b8110155b611d755760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69742063616e6e6f742062652060448201527f6c6f776572207468616e20302e3525206f6620746f74616c20737570706c79006064820152608401610cc0565b611d816009600a613db6565b611d8b9083613dc4565b601955611d9a6009600a613db6565b611da49082613dc4565b601a8190556019546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13192611de2928252602082015260400190565b60405180910390a15050565b6005546001600160a01b03163314611e355760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6001600160a01b0382165f9081526012602052604090205481151560ff909116151503611eb05760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b6064820152608401610cc0565b6001600160a01b0382165f81815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016119bd565b6005546001600160a01b03163314611f4e5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b600a839055600b829055600c81905580611f688385613c3f565b611f729190613c3f565b600d81905560051015611fc75760405162461bcd60e51b815260206004820152601f60248201527f53656c6c206665652063616e6e6f74206265206d6f7265207468616e203525006044820152606401610cc0565b7f16df2c25b3392f376a685a3826b941b25140108d95899d6b1bd983feafbc1c55600d546040516116cb91815260200190565b6005546001600160a01b031633146120415760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b60165481151560ff9091161515036120c15760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c72656164792061742074686973207374617460448201527f652e0000000000000000000000000000000000000000000000000000000000006064820152608401610cc0565b6016805460ff1916911515919091179055565b6014546040517f27ce01470000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301525f9216906327ce014790602401611464565b601454604080517fe7841ec000000000000000000000000000000000000000000000000000000000815290515f926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610d9f573d5f803e3d5ffd5b6005546001600160a01b031633146121c65760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b610e1081101580156121db5750620151808111155b61224d5760405162461bcd60e51b815260206004820152603360248201527f636c61696d57616974206d757374206265207570646174656420746f2062657460448201527f7765656e203120616e6420323420686f757273000000000000000000000000006064820152608401610cc0565b6014546040517fe98030c7000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063e98030c790602401610d0f565b6014546040517f5183d6fd000000000000000000000000000000000000000000000000000000008152600481018390525f9182918291829182918291829182916001600160a01b0390911690635183d6fd90602401611b32565b6005546001600160a01b031633146123385760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6001600160a01b0381166123b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cc0565b61102f8161315e565b6005546001600160a01b031633146124045760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b306001600160a01b0382160361245c5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610cc0565b6001600160a01b03811661247457610fda33476131bc565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156124ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124de9190613bce565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303815f875af115801561252b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061254f9190613be5565b50505050565b6001600160a01b0383166125d05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cc0565b6001600160a01b03821661264c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cc0565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166127115760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cc0565b6001600160a01b0382166127735760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cc0565b805f0361278a5761278583835f613266565b505050565b60185460ff1615612916576010546001600160a01b03848116911614806127be57506010546001600160a01b038381169116145b80156127e257506001600160a01b0383165f9081526017602052604090205460ff16155b801561280657506001600160a01b0382165f9081526017602052604090205460ff16155b15612916576010546001600160a01b039081169084160361289e576019548111156128995760405162461bcd60e51b815260206004820152603b60248201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e7400000000006064820152608401610cc0565b612916565b601a548111156129165760405162461bcd60e51b815260206004820152603b60248201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e7400000000006064820152608401610cc0565b305f90815260208190526040902054601154811080159081906129435750601054600160a01b900460ff16155b801561296657506001600160a01b0384165f9081526013602052604090205460ff165b8015612974575060165460ff165b801561298e57505f600d5460095461298c9190613c3f565b115b15612c75576010805460ff60a01b1916600160a01b179055600a546006545f9182916129ba9190613c3f565b11156129ff57600d546009546129d09190613c3f565b600a546006546129e09190613c3f565b6129ea9085613dc4565b6129f49190613cb7565b90506129ff816133e6565b612a098184613ddb565b92505f600c54600854612a1c9190613c3f565b600b54600754612a2c9190613c3f565b612a369190613c3f565b90505f84118015612a4657505f81115b15612c655760408051600280825260608201835247925f92919060208301908036833701905050905030815f81518110612a8257612a82613dee565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612afd9190613e02565b81600181518110612b1057612b10613dee565b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b815291169063791ac94790612b559089905f90869030904290600401613e5f565b5f604051808303815f87803b158015612b6c575f80fd5b505af1925050508015612b7d575060015b505f612b898347613ddb565b90505f600b54600754612b9c9190613c3f565b1115612c17575f84600b54600754612bb49190613c3f565b612bbe9084613dc4565b612bc89190613cb7565b600e54909150612be1906001600160a01b0316826131bc565b506040518181527fddce3d5e4f18a9c2902704a38b56baadd81a9af59b8ded8a3220b6a6c1696b6b9060200160405180910390a1505b5f600c54600854612c289190613c3f565b1115612c61575f84600c54600854612c409190613c3f565b612c4a9084613dc4565b612c549190613cb7565b9050612c5f81613634565b505b5050505b50506010805460ff60a01b191690555b6010546001600160a01b0386165f9081526012602052604090205460ff600160a01b909204821615911680612cc157506001600160a01b0385165f9081526012602052604090205460ff165b15612cc957505f5b6010546001600160a01b03878116911614801590612cf557506010546001600160a01b03868116911614155b8015612cfe5750805b15612d0657505f5b8015612d65576010545f906001600160a01b0390811690881603612d2d5750600954612d32565b50600d545b5f6064612d3f8388613dc4565b612d499190613cb7565b9050612d558187613ddb565b9550612d62883083613266565b50505b612d70868686613266565b6014546001600160a01b031663e30443bc87612da0816001600160a01b03165f9081526020819052604090205490565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015612dfb575f80fd5b505af1925050508015612e0c575060015b506014546001600160a01b031663e30443bc86612e3d816001600160a01b03165f9081526020819052604090205490565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015612e98575f80fd5b505af1925050508015612ea9575060015b50601054600160a01b900460ff16612f95576015546014546040517fffb2c479000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303815f875af1925050508015612f3d575060408051601f3d908101601f19168201909252612f3a91810190613c00565b60015b15612f935760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b505050505050565b5f8184841115612fc05760405162461bcd60e51b8152600401610cc091906139c9565b505f612fcc8486613ddb565b95945050505050565b5f80612fe18385613c3f565b9050838110156130335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cc0565b9392505050565b6001600160a01b0382166130b65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610cc0565b6130f281604051806060016040528060228152602001613ecf602291396001600160a01b0385165f908152602081905260409020549190612f9d565b6001600160a01b0383165f908152602081905260409020556002546131179082613988565b6002556040518181525f906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8147101561320d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610cc0565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f8114613256576040519150601f19603f3d011682016040523d82523d5f602084013e61325b565b606091505b509095945050505050565b6001600160a01b0383166132ca5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cc0565b6001600160a01b03821661332c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cc0565b61336881604051806060016040528060268152602001613ef1602691396001600160a01b0386165f908152602081905260409020549190612f9d565b6001600160a01b038085165f9081526020819052604080822093909355908416815220546133969082612fd5565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016126a0565b5f6133f2600283613cb7565b90505f6133ff8284613ddb565b60408051600280825260608201835292935047925f9260208301908036833701905050905030815f8151811061343757613437613dee565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561348e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134b29190613e02565b816001815181106134c5576134c5613dee565b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b815291169063791ac9479061350a9087905f90869030904290600401613e5f565b5f604051808303815f87803b158015613521575f80fd5b505af1925050508015613532575060015b505f61353e8347613ddb565b600f546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018790525f60448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af1935050505080156135e2575060408051601f3d908101601f191682019092526135df91810190613c00565b60015b156135eb575050505b60408051868152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1505050505050565b6040805160028082526060820183525f926020830190803683375050600f54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561369b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136bf9190613e02565b815f815181106136d1576136d1613dee565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061372557613725613dee565b6001600160a01b039283166020918202929092010152600f546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de95908490613783905f90869030904290600401613e9a565b5f604051808303818588803b15801561379a575f80fd5b505af1935050505080156137ac575060015b506040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015613811573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138359190613bce565b60145460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192505f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af11580156138ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138cf9190613be5565b9050801561254f576014546040517f3243c791000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690633243c791906024015f604051808303815f87803b158015613933575f80fd5b505af1158015613945573d5f803e3d5ffd5b505050507fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161397a91815260200190565b60405180910390a150505050565b5f61303383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f9d565b5f6020808352835180828501525f5b818110156139f4578581018301518582016040015282016139d8565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461102f575f80fd5b5f8060408385031215613a39575f80fd5b8235613a4481613a14565b946020939093013593505050565b5f60208284031215613a62575f80fd5b813561303381613a14565b5f805f60608486031215613a7f575f80fd5b8335613a8a81613a14565b92506020840135613a9a81613a14565b929592945050506040919091013590565b5f60208284031215613abb575f80fd5b5035919050565b801515811461102f575f80fd5b5f60208284031215613adf575f80fd5b813561303381613ac2565b5f805f60608486031215613afc575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215613b24575f80fd5b8235613b2f81613a14565b91506020830135613b3f81613ac2565b809150509250929050565b5f8060408385031215613b5b575f80fd5b50508035926020909101359150565b5f8060408385031215613b7b575f80fd5b8235613b8681613a14565b91506020830135613b3f81613a14565b600181811c90821680613baa57607f821691505b602082108103613bc857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613bde575f80fd5b5051919050565b5f60208284031215613bf5575f80fd5b815161303381613ac2565b5f805f60608486031215613c12575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610c1057610c10613c2b565b5f805f805f805f80610100898b031215613c6a575f80fd5b8851613c7581613a14565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b5f82613cd157634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b80851115613d1057815f1904821115613cf657613cf6613c2b565b80851615613d0357918102915b93841c9390800290613cdb565b509250929050565b5f82613d2657506001610c10565b81613d3257505f610c10565b8160018114613d485760028114613d5257613d6e565b6001915050610c10565b60ff841115613d6357613d63613c2b565b50506001821b610c10565b5060208310610133831016604e8410600b8410161715613d91575081810a610c10565b613d9b8383613cd6565b805f1904821115613dae57613dae613c2b565b029392505050565b5f61303360ff841683613d18565b8082028115828204841417610c1057610c10613c2b565b81810381811115610c1057610c10613c2b565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613e12575f80fd5b815161303381613a14565b5f8151808452602080850194508084015f5b83811015613e545781516001600160a01b031687529582019590820190600101613e2f565b509495945050505050565b85815284602082015260a060408201525f613e7d60a0830186613e1d565b6001600160a01b0394909416606083015250608001529392505050565b848152608060208201525f613eb26080830186613e1d565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d44c26f52f0547cdf0f8beca3aad9b48622b3de23a0dc85f148fa8f525bfc6d364736f6c6343000815003360a060405234801562000010575f80fd5b506040516200255038038062002550833981016040819052620000339162000147565b6040518060400160405280600e81526020016d2932bbb0b932102a3930b1b5b2b960911b8152506040518060400160405280600f81526020016e2234bb34b232b7322a3930b1b5b2b960891b815250828282816003908162000096919062000223565b506004620000a5828262000223565b505050620000c2620000bc620000f260201b60201c565b620000f6565b6001600160a01b03166080525050610e10601155620000e682633b9aca00620002eb565b60125550620003159050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f806040838503121562000159575f80fd5b825160208401519092506001600160a01b038116811462000178575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620001ac57607f821691505b602082108103620001cb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200021e575f81815260208120601f850160051c81016020861015620001f95750805b601f850160051c820191505b818110156200021a5782815560010162000205565b5050505b505050565b81516001600160401b038111156200023f576200023f62000183565b620002578162000250845462000197565b84620001d1565b602080601f8311600181146200028d575f8415620002755750858301515b5f19600386901b1c1916600185901b1785556200021a565b5f85815260208120601f198616915b82811015620002bd578886015182559484019460019091019084016200029c565b5085821015620002db57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176200030f57634e487b7160e01b5f52601160045260245ffd5b92915050565b60805161221b620003355f395f818161059f0152611acb015261221b5ff3fe608060405234801561000f575f80fd5b5060043610610283575f3560e01c8063715018a611610157578063bc4c4b37116100d2578063e98030c711610088578063f7c618c11161006e578063f7c618c11461059a578063fbcbc0f1146105c1578063ffb2c479146105d4575f80fd5b8063e98030c714610574578063f2fde38b14610587575f80fd5b8063dd62ed3e116100b8578063dd62ed3e14610521578063e30443bc14610559578063e7841ec01461056c575f80fd5b8063bc4c4b3714610505578063be10b61414610518575f80fd5b806395d89b4111610127578063a8b9d2401161010d578063a8b9d240146104b7578063a9059cbb146104ca578063aafd847a146104dd575f80fd5b806395d89b411461049c578063a457c2d7146104a4575f80fd5b8063715018a61461045357806385a6b3ae1461045b5780638da5cb5b1461046457806391b89fba14610489575f80fd5b80633009a609116102015780634e7b827f116101b75780636a4740021161019d5780636a4740021461041a5780636f2789ec1461042257806370a082311461042b575f80fd5b80634e7b827f146103a05780635183d6fd146103c2575f80fd5b806331e79db0116101e757806331e79db0146103675780633243c7911461037a578063395093511461038d575f80fd5b80633009a6091461034f578063313ce56714610358575f80fd5b806318160ddd1161025657806323b872dd1161023c57806323b872dd1461031657806327ce014714610329578063286b3aa01461033c575f80fd5b806318160ddd146102ef578063226cfa3d146102f7575f80fd5b806306fdde0314610287578063095ea7b3146102a557806309bbedde146102c85780630dcb2e89146102da575b5f80fd5b61028f610602565b60405161029c9190611ea6565b60405180910390f35b6102b86102b3366004611f05565b610692565b604051901515815260200161029c565b600a545b60405190815260200161029c565b6102ed6102e8366004611f2f565b6106a8565b005b6002546102cc565b6102cc610305366004611f46565b60106020525f908152604090205481565b6102b8610324366004611f61565b6107a9565b6102cc610337366004611f46565b610810565b6102ed61034a366004611f2f565b610878565b6102cc600e5481565b6040516009815260200161029c565b6102ed610375366004611f46565b6108d7565b6102ed610388366004611f2f565b610a26565b6102b861039b366004611f05565b610b1f565b6102b86103ae366004611f46565b600f6020525f908152604090205460ff1681565b6103d56103d0366004611f2f565b610b54565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161029c565b6102ed610cb6565b6102cc60115481565b6102cc610439366004611f46565b6001600160a01b03165f9081526020819052604090205490565b6102ed610d4c565b6102cc60075481565b6005546001600160a01b03165b6040516001600160a01b03909116815260200161029c565b6102cc610497366004611f46565b610daf565b61028f610db9565b6102b86104b2366004611f05565b610dc8565b6102cc6104c5366004611f46565b610e15565b6102b86104d8366004611f05565b610e40565b6102cc6104eb366004611f46565b6001600160a01b03165f9081526009602052604090205490565b6102b8610513366004611fac565b610e4c565b6102cc60125481565b6102cc61052f366004611fe3565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6102ed610567366004611f05565b610f26565b600e546102cc565b6102ed610582366004611f2f565b6110cf565b6102ed610595366004611f46565b611259565b6104717f000000000000000000000000000000000000000000000000000000000000000081565b6103d56105cf366004611f46565b611338565b6105e76105e2366004611f2f565b6114b0565b6040805193845260208401929092529082015260600161029c565b6060600380546106119061200f565b80601f016020809104026020016040519081016040528092919081815260200182805461063d9061200f565b80156106885780601f1061065f57610100808354040283529160200191610688565b820191905f5260205f20905b81548152906001019060200180831161066b57829003601f168201915b5050505050905090565b5f61069e3384846115c4565b5060015b92915050565b6005546001600160a01b031633146107075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60125481036107a45760405162461bcd60e51b815260206004820152604a60248201527f4e6577206d696d696d756d2062616c616e636520666f72206469766964656e6460448201527f2063616e6e6f742062652073616d652061732063757272656e74206d696e696d60648201527f756d2062616c616e636500000000000000000000000000000000000000000000608482015260a4016106fe565b601255565b5f6107b584848461171b565b610806843361080185604051806060016040528060288152602001612199602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611763565b6115c4565b5060019392505050565b6001600160a01b0381165f90815260086020908152604080832054918390528220546006547001000000000000000000000000000000009261086e92610869926108639161085e919061179b565b61183c565b9061184a565b611884565b6106a2919061205b565b6005546001600160a01b031633146108d25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b600e55565b6005546001600160a01b031633146109315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b6001600160a01b0381165f908152600f602052604090205460ff1615610955575f80fd5b6001600160a01b0381165f908152600f60205260408120805460ff19166001179055610982908290611895565b60405163131836e760e21b8152600a60048201526001600160a01b0382166024820152739582458eb892d7a3e47e8ecd031f37afab6bd2e390634c60db9c906044015f6040518083038186803b1580156109da575f80fd5b505af41580156109ec573d5f803e3d5ffd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2591505f90a250565b6005546001600160a01b03163314610a805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b5f610a8a60025490565b11610a93575f80fd5b8015610b1c57610ad3610aa560025490565b610ac08370010000000000000000000000000000000061179b565b610aca919061205b565b600654906118f7565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610b1890826118f7565b6007555b50565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909161069e91859061080190866118f7565b5f805f805f805f80600a739582458eb892d7a3e47e8ecd031f37afab6bd2e363deb3d89690916040518263ffffffff1660e01b8152600401610b9891815260200190565b602060405180830381865af4158015610bb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd7919061207a565b8910610bfa57505f96505f19955085945086935083925082915081905080610cab565b6040517fd1aa9e7e000000000000000000000000000000000000000000000000000000008152600a6004820152602481018a90525f90739582458eb892d7a3e47e8ecd031f37afab6bd2e39063d1aa9e7e90604401602060405180830381865af4158015610c6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8e9190612091565b9050610c9981611338565b98509850985098509850985098509850505b919395975091939597565b60405162461bcd60e51b815260206004820152604960248201527f77697468647261774469766964656e642064697361626c65642e20557365207460448201527f68652027636c61696d272066756e6374696f6e206f6e20746865206d61696e2060648201527f636f6e74726163742e0000000000000000000000000000000000000000000000608482015260a4016106fe565b565b6005546001600160a01b03163314610da65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b610d4a5f611955565b5f6106a282610e15565b6060600480546106119061200f565b5f61069e3384610801856040518060600160405280602581526020016121c160259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611763565b6001600160a01b0381165f908152600960205260408120546106a290610e3a84610810565b906119be565b5f61069e33848461171b565b6005545f906001600160a01b03163314610ea85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b5f610eb2846119ff565b90508015610f1d576001600160a01b0384165f81815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610f0b9085815260200190565b60405180910390a360019150506106a2565b505f9392505050565b6005546001600160a01b03163314610f805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b6001600160a01b0382165f908152600f602052604090205460ff166110cb57601254811061104557610fb28282611895565b6040517fbc2b405c000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b038316602482015260448101829052739582458eb892d7a3e47e8ecd031f37afab6bd2e39063bc2b405c906064015f6040518083038186803b15801561102a575f80fd5b505af415801561103c573d5f803e3d5ffd5b505050506110be565b61104f825f611895565b60405163131836e760e21b8152600a60048201526001600160a01b0383166024820152739582458eb892d7a3e47e8ecd031f37afab6bd2e390634c60db9c906044015f6040518083038186803b1580156110a7575f80fd5b505af41580156110b9573d5f803e3d5ffd5b505050505b6110c9826001610e4c565b505b5050565b6005546001600160a01b031633146111295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b610e10811015801561113e5750620151808111155b6111b05760405162461bcd60e51b815260206004820152603360248201527f636c61696d57616974206d757374206265207570646174656420746f2062657460448201527f7765656e203120616e6420323420686f7572730000000000000000000000000060648201526084016106fe565b60115481036112275760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060448201527f76616c756500000000000000000000000000000000000000000000000000000060648201526084016106fe565b60115460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f905f90a3601155565b6005546001600160a01b031633146112b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b6001600160a01b03811661132f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106fe565b610b1c81611955565b6040517f17e142d1000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b038216602482015281905f90819081908190819081908190739582458eb892d7a3e47e8ecd031f37afab6bd2e3906317e142d190604401602060405180830381865af41580156113be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e2919061207a565b96505f1995505f871261144057600e5487111561140e57600e54611407908890611b93565b9550611440565b600e54600a545f9110611421575f611430565b600e54600a54611430916119be565b905061143c888261184a565b9650505b61144988610e15565b945061145488610810565b6001600160a01b0389165f9081526010602052604090205490945092508261147c575f61148a565b60115461148a9084906118f7565b9150428211611499575f6114a3565b6114a382426119be565b9050919395975091939597565b600a545f90819081908082036114d0575050600e545f92508291506115bd565b600e545f805a90505f805b89841080156114e957508582105b156115ac57846114f8816120ac565b600a549096508610905061150a575f94505b5f600a5f018681548110611520576115206120c4565b5f9182526020808320909101546001600160a01b0316808352601090915260409091205490915061155090611bcc565b1561157357611560816001610e4c565b15611573578161156f816120ac565b9250505b8261157d816120ac565b9350505f5a9050808511156115a3576115a061159986836119be565b87906118f7565b95505b93506114db9050565b600e85905590975095509193505050505b9193909250565b6001600160a01b03831661163f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106fe565b6001600160a01b0382166116bb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106fe565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152601460248201527f4e6f207472616e736665727320616c6c6f77656400000000000000000000000060448201526064016106fe565b5f81848411156117865760405162461bcd60e51b81526004016106fe9190611ea6565b505f61179284866120d8565b95945050505050565b5f825f036117aa57505f6106a2565b5f6117b583856120eb565b9050826117c2858361205b565b146118355760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f770000000000000000000000000000000000000000000000000000000000000060648201526084016106fe565b9392505050565b5f81818112156106a2575f80fd5b5f806118568385612102565b90505f83121580156118685750838112155b8061187c57505f8312801561187c57508381125b611835575f80fd5b5f80821215611891575f80fd5b5090565b6001600160a01b0382165f90815260208190526040902054808211156118d2575f6118c083836119be565b90506118cc8482611bf1565b506110c9565b808210156110c9575f6118e582846119be565b90506118f18482611c53565b50505050565b5f806119038385612129565b9050838110156118355760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106fe565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f61183583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611763565b5f80611a0a83610e15565b90508015611b8b576001600160a01b0383165f90815260096020526040902054611a3490826118f7565b6001600160a01b0384165f81815260096020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d90611a829084815260200190565b60405180910390a26040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611b13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b37919061213c565b905080611b84576001600160a01b0384165f90815260096020526040902054611b6090836119be565b6001600160a01b039094165f90815260096020526040812094909455509192915050565b5092915050565b505f92915050565b5f80611b9f8385612157565b90505f8312158015611bb15750838113155b8061187c57505f8312801561187c5750838113611835575f80fd5b5f42821115611bdc57505f919050565b601154611be942846119be565b101592915050565b611bfb8282611c96565b611c34611c1661085e8360065461179b90919063ffffffff16565b6001600160a01b0384165f9081526008602052604090205490611b93565b6001600160a01b039092165f9081526008602052604090209190915550565b611c5d8282611d7e565b611c34611c7861085e8360065461179b90919063ffffffff16565b6001600160a01b0384165f908152600860205260409020549061184a565b6001600160a01b038216611cec5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106fe565b611cf75f83836110c9565b600254611d0490826118f7565b6002556001600160a01b0382165f90815260208190526040902054611d2990826118f7565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b038216611dfa5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106fe565b611e05825f836110c9565b611e4181604051806060016040528060228152602001612177602291396001600160a01b0385165f908152602081905260409020549190611763565b6001600160a01b0383165f90815260208190526040902055600254611e6690826119be565b6002556040518181525f906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611d72565b5f6020808352835180828501525f5b81811015611ed157858101830151858201604001528201611eb5565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610b1c575f80fd5b5f8060408385031215611f16575f80fd5b8235611f2181611ef1565b946020939093013593505050565b5f60208284031215611f3f575f80fd5b5035919050565b5f60208284031215611f56575f80fd5b813561183581611ef1565b5f805f60608486031215611f73575f80fd5b8335611f7e81611ef1565b92506020840135611f8e81611ef1565b929592945050506040919091013590565b8015158114610b1c575f80fd5b5f8060408385031215611fbd575f80fd5b8235611fc881611ef1565b91506020830135611fd881611f9f565b809150509250929050565b5f8060408385031215611ff4575f80fd5b8235611fff81611ef1565b91506020830135611fd881611ef1565b600181811c9082168061202357607f821691505b60208210810361204157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b5f8261207557634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561208a575f80fd5b5051919050565b5f602082840312156120a1575f80fd5b815161183581611ef1565b5f600182016120bd576120bd612047565b5060010190565b634e487b7160e01b5f52603260045260245ffd5b818103818111156106a2576106a2612047565b80820281158282048414176106a2576106a2612047565b8082018281125f83128015821682158216171561212157612121612047565b505092915050565b808201808211156106a2576106a2612047565b5f6020828403121561214c575f80fd5b815161183581611f9f565b8181035f831280158383131683831282161715611b8457611b8461204756fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122059ec59d2b6609feb73dbd2f9e5887bd06b1205f44e28181c70d9ea5d6e1531c864736f6c63430008150033

Deployed Bytecode

0x6080604052600436106103a0575f3560e01c80637b3c83b1116101de578063b6f7f68111610108578063e4893fdc1161009d578063f27fd2541161006d578063f27fd25414610ae0578063f2fde38b14610aff578063f7c618c114610b1e578063f9d0831a14610b51575f80fd5b8063e4893fdc14610a79578063e4f24cb014610a8e578063e7841ec014610aad578063e98030c714610ac1575f80fd5b8063cdd4bd79116100d8578063cdd4bd79146109ec578063dd62ed3e14610a01578063e01af92c14610a45578063e2f4560514610a64575f80fd5b8063b6f7f6811461097a578063b94315ff14610999578063c0246668146109ae578063c17b5b8c146109cd575f80fd5b80639c1b8af51161017e578063a9059cbb1161014e578063a9059cbb146108aa578063ad56c13c146108c9578063afa4f3b21461092d578063b62496f51461094c575f80fd5b80639c1b8af514610843578063a26579ad14610858578063a457c2d71461086c578063a8b9d2401461088b575f80fd5b8063871c128d116101b9578063871c128d146107d4578063880bcbc1146107f35780638da5cb5b1461081257806395d89b411461082f575f80fd5b80637b3c83b11461078b5780638095d564146107a0578063824e4605146107bf575f80fd5b80633b364da8116102ca57806356a6cabf1161025f5780636ddd17131161022f5780636ddd17131461070b578063700bb1911461072457806370a0823114610743578063715018a614610777575f80fd5b806356a6cabf146106a457806359136fa5146106c357806364b0f653146106d85780636843cd84146106ec575f80fd5b806349bd5a5e1161029a57806349bd5a5e1461061b5780634e71d92d1461063a5780634fbee1931461064e578063537c1ac714610685575f80fd5b80633b364da81461059f5780633f249df0146105be57806342966c68146105dd5780634626402b146105fc575f80fd5b8063286b3aa01161034057806330bb4cff1161031057806330bb4cff14610532578063313ce5671461054657806331e79db0146105615780633950935114610580575f80fd5b8063286b3aa0146104c45780632ba86bf2146104e55780632c1f5216146104fe5780632ce86fbf1461051d575f80fd5b80631694505e1161037b5780631694505e1461042357806318160ddd1461045a57806318d9ceae1461046e57806323b872dd146104a5575f80fd5b80630105d0fd146103ab57806306fdde03146103d3578063095ea7b3146103f4575f80fd5b366103a757005b5f80fd5b3480156103b6575f80fd5b506103c060195481565b6040519081526020015b60405180910390f35b3480156103de575f80fd5b506103e7610b70565b6040516103ca91906139c9565b3480156103ff575f80fd5b5061041361040e366004613a28565b610c00565b60405190151581526020016103ca565b34801561042e575f80fd5b50600f54610442906001600160a01b031681565b6040516001600160a01b0390911681526020016103ca565b348015610465575f80fd5b506002546103c0565b348015610479575f80fd5b50610413610488366004613a52565b6001600160a01b03165f9081526017602052604090205460ff1690565b3480156104b0575f80fd5b506104136104bf366004613a6d565b610c16565b3480156104cf575f80fd5b506104e36104de366004613aab565b610c7d565b005b3480156104f0575f80fd5b506018546104139060ff1681565b348015610509575f80fd5b50601454610442906001600160a01b031681565b348015610528575f80fd5b506103c0600a5481565b34801561053d575f80fd5b506103c0610d3f565b348015610551575f80fd5b50604051600981526020016103ca565b34801561056c575f80fd5b506104e361057b366004613a52565b610dc8565b34801561058b575f80fd5b5061041361059a366004613a28565b610e5a565b3480156105aa575f80fd5b506104e36105b9366004613aab565b610e8f565b3480156105c9575f80fd5b506104e36105d8366004613a52565b610f20565b3480156105e8575f80fd5b506104e36105f7366004613aab565b610fde565b348015610607575f80fd5b50600e54610442906001600160a01b031681565b348015610626575f80fd5b50601054610442906001600160a01b031681565b348015610645575f80fd5b506104e3611032565b348015610659575f80fd5b50610413610668366004613a52565b6001600160a01b03165f9081526012602052604090205460ff1690565b348015610690575f80fd5b506104e361069f366004613a52565b6110a3565b3480156106af575f80fd5b506104e36106be366004613acf565b6112ca565b3480156106ce575f80fd5b506103c0601a5481565b3480156106e3575f80fd5b506103c06113d6565b3480156106f7575f80fd5b506103c0610706366004613a52565b611436565b348015610716575f80fd5b506016546104139060ff1681565b34801561072f575f80fd5b506104e361073e366004613aab565b6114a3565b34801561074e575f80fd5b506103c061075d366004613a52565b6001600160a01b03165f9081526020819052604090205490565b348015610782575f80fd5b506104e3611586565b348015610796575f80fd5b506103c060065481565b3480156107ab575f80fd5b506104e36107ba366004613aea565b6115d8565b3480156107ca575f80fd5b506103c060075481565b3480156107df575f80fd5b506104e36107ee366004613aab565b6116d8565b3480156107fe575f80fd5b506104e361080d366004613b13565b611850565b34801561081d575f80fd5b506005546001600160a01b0316610442565b34801561083a575f80fd5b506103e76119c9565b34801561084e575f80fd5b506103c060155481565b348015610863575f80fd5b506103c06119d8565b348015610877575f80fd5b50610413610886366004613a28565b611a38565b348015610896575f80fd5b506103c06108a5366004613a52565b611a85565b3480156108b5575f80fd5b506104136108c4366004613a28565b611ad0565b3480156108d4575f80fd5b506108e86108e3366004613a52565b611adc565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016103ca565b348015610938575f80fd5b506104e3610947366004613aab565b611b8d565b348015610957575f80fd5b50610413610966366004613a52565b60136020525f908152604090205460ff1681565b348015610985575f80fd5b506104e3610994366004613b4a565b611c64565b3480156109a4575f80fd5b506103c0600c5481565b3480156109b9575f80fd5b506104e36109c8366004613b13565b611dee565b3480156109d8575f80fd5b506104e36109e7366004613aea565b611f07565b3480156109f7575f80fd5b506103c0600b5481565b348015610a0c575f80fd5b506103c0610a1b366004613b6a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a50575f80fd5b506104e3610a5f366004613acf565b611ffa565b348015610a6f575f80fd5b506103c060115481565b348015610a84575f80fd5b506103c060085481565b348015610a99575f80fd5b506103c0610aa8366004613a52565b6120d4565b348015610ab8575f80fd5b506103c061211f565b348015610acc575f80fd5b506104e3610adb366004613aab565b61217f565b348015610aeb575f80fd5b506108e8610afa366004613aab565b612297565b348015610b0a575f80fd5b506104e3610b19366004613a52565b6122f1565b348015610b29575f80fd5b506104427f000000000000000000000000420b0fa3de2efcf2b2fd04152eb1df36a09717cd81565b348015610b5c575f80fd5b506104e3610b6b366004613a52565b6123bd565b606060038054610b7f90613b96565b80601f0160208091040260200160405190810160405280929190818152602001828054610bab90613b96565b8015610bf65780601f10610bcd57610100808354040283529160200191610bf6565b820191905f5260205f20905b815481529060010190602001808311610bd957829003601f168201915b5050505050905090565b5f610c0c338484612555565b5060015b92915050565b5f610c228484846126ad565b610c738433610c6e85604051806060016040528060288152602001613f17602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190612f9d565b612555565b5060019392505050565b6005546001600160a01b03163314610cc95760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f83398151915260448201526064015b60405180910390fd5b6014546040517f286b3aa0000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063286b3aa0906024015b5f604051808303815f87803b158015610d26575f80fd5b505af1158015610d38573d5f803e3d5ffd5b5050505050565b601454604080517f85a6b3ae00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610d9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc39190613bce565b905090565b6005546001600160a01b03163314610e0f5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6014546040517f31e79db00000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906331e79db090602401610d0f565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610c0c918590610c6e9086612fd5565b6005546001600160a01b03163314610ed65760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6014546040517f0dcb2e89000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690630dcb2e8990602401610d0f565b6005546001600160a01b03163314610f675760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b60145460405163bc4c4b3760e01b81526001600160a01b0383811660048301525f60248301529091169063bc4c4b37906044016020604051808303815f875af1158015610fb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fda9190613be5565b5050565b6005546001600160a01b031633146110255760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b61102f338261303a565b50565b60145460405163bc4c4b3760e01b81523360048201525f60248201526001600160a01b039091169063bc4c4b37906044016020604051808303815f875af115801561107f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102f9190613be5565b6005546001600160a01b031633146110ea5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b600e546001600160a01b039081169082160361116e5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610cc0565b6001600160a01b0381163b156111ec5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f74726163740000000000000000000000000000000000000000000000000000006064820152608401610cc0565b6001600160a01b0381166112685760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610cc0565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527f2551960305e8f85b09658bb3075878e3e3cef37a5f7b5d43261f5e6f36b3d6a4906020015b60405180910390a150565b6005546001600160a01b031633146113115760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b60185460ff1615158115150361138f5760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960448201527f2073657420746f207468617420737461746500000000000000000000000000006064820152608401610cc0565b6018805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf906020016112bf565b601454604080517f09bbedde00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610d9f573d5f803e3d5ffd5b6014546040516370a0823160e01b81526001600160a01b0383811660048301525f9216906370a08231906024015b602060405180830381865afa15801561147f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c109190613bce565b6014546040517fffb2c479000000000000000000000000000000000000000000000000000000008152600481018390525f91829182916001600160a01b03169063ffb2c479906024016060604051808303815f875af1158015611508573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152c9190613c00565b604080518481526020810184905290810182905260608101889052929550909350915032905f907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6005546001600160a01b031633146115cd5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6115d65f61315e565b565b6005546001600160a01b0316331461161f5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b600683905560078290556008819055806116398385613c3f565b6116439190613c3f565b6009819055600510156116985760405162461bcd60e51b815260206004820152601e60248201527f427579206665652063616e6e6f74206265206d6f7265207468616e20352500006044820152606401610cc0565b7f491005465ab6f82fd10f4b13a1b1e5ca452bc4856b019f63775e33a6b1ad2feb6009546040516116cb91815260200190565b60405180910390a1505050565b6005546001600160a01b0316331461171f5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b62030d40811015801561173557506207a1208111155b6117a75760405162461bcd60e51b815260206004820152603460248201527f676173466f7250726f63657373696e67206d757374206265206265747765656e60448201527f203230302c30303020616e64203530302c3030300000000000000000000000006064820152608401610cc0565b601554810361181e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201527f6f2073616d652076616c756500000000000000000000000000000000000000006064820152608401610cc0565b60155460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db7905f90a3601555565b6005546001600160a01b031633146118975760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6001600160a01b0382165f9081526017602052604090205481151560ff9091161515036119125760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b6064820152608401610cc0565b306001600160a01b0383160361196a5760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610cc0565b6001600160a01b0382165f81815260176020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b606060048054610b7f90613b96565b601454604080517f6f2789ec00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610d9f573d5f803e3d5ffd5b5f610c0c3384610c6e85604051806060016040528060258152602001613f5f60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190612f9d565b6014546040517fa8b9d2400000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301525f92169063a8b9d24090602401611464565b5f610c0c3384846126ad565b6014546040517ffbcbc0f10000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301525f92839283928392839283928392839291169063fbcbc0f1906024015b61010060405180830381865afa158015611b4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b729190613c52565b97509750975097509750975097509750919395975091939597565b6005546001600160a01b03163314611bd45760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b620186a0611be160025490565b611beb9190613cb7565b8111611c5f5760405162461bcd60e51b815260206004820152603e60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e30303125206f6620746f74616c20737570706c7900006064820152608401610cc0565b601155565b6005546001600160a01b03163314611cab5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b60c8611cb96009600a613db6565b600254611cc69190613cb7565b611cd09190613cb7565b8210158015611d03575060c8611ce86009600a613db6565b600254611cf59190613cb7565b611cff9190613cb7565b8110155b611d755760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69742063616e6e6f742062652060448201527f6c6f776572207468616e20302e3525206f6620746f74616c20737570706c79006064820152608401610cc0565b611d816009600a613db6565b611d8b9083613dc4565b601955611d9a6009600a613db6565b611da49082613dc4565b601a8190556019546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13192611de2928252602082015260400190565b60405180910390a15050565b6005546001600160a01b03163314611e355760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6001600160a01b0382165f9081526012602052604090205481151560ff909116151503611eb05760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b6064820152608401610cc0565b6001600160a01b0382165f81815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016119bd565b6005546001600160a01b03163314611f4e5760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b600a839055600b829055600c81905580611f688385613c3f565b611f729190613c3f565b600d81905560051015611fc75760405162461bcd60e51b815260206004820152601f60248201527f53656c6c206665652063616e6e6f74206265206d6f7265207468616e203525006044820152606401610cc0565b7f16df2c25b3392f376a685a3826b941b25140108d95899d6b1bd983feafbc1c55600d546040516116cb91815260200190565b6005546001600160a01b031633146120415760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b60165481151560ff9091161515036120c15760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c72656164792061742074686973207374617460448201527f652e0000000000000000000000000000000000000000000000000000000000006064820152608401610cc0565b6016805460ff1916911515919091179055565b6014546040517f27ce01470000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301525f9216906327ce014790602401611464565b601454604080517fe7841ec000000000000000000000000000000000000000000000000000000000815290515f926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610d9f573d5f803e3d5ffd5b6005546001600160a01b031633146121c65760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b610e1081101580156121db5750620151808111155b61224d5760405162461bcd60e51b815260206004820152603360248201527f636c61696d57616974206d757374206265207570646174656420746f2062657460448201527f7765656e203120616e6420323420686f757273000000000000000000000000006064820152608401610cc0565b6014546040517fe98030c7000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063e98030c790602401610d0f565b6014546040517f5183d6fd000000000000000000000000000000000000000000000000000000008152600481018390525f9182918291829182918291829182916001600160a01b0390911690635183d6fd90602401611b32565b6005546001600160a01b031633146123385760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b6001600160a01b0381166123b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cc0565b61102f8161315e565b6005546001600160a01b031633146124045760405162461bcd60e51b815260206004820181905260248201525f80516020613f3f8339815191526044820152606401610cc0565b306001600160a01b0382160361245c5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610cc0565b6001600160a01b03811661247457610fda33476131bc565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156124ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124de9190613bce565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303815f875af115801561252b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061254f9190613be5565b50505050565b6001600160a01b0383166125d05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cc0565b6001600160a01b03821661264c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cc0565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166127115760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cc0565b6001600160a01b0382166127735760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cc0565b805f0361278a5761278583835f613266565b505050565b60185460ff1615612916576010546001600160a01b03848116911614806127be57506010546001600160a01b038381169116145b80156127e257506001600160a01b0383165f9081526017602052604090205460ff16155b801561280657506001600160a01b0382165f9081526017602052604090205460ff16155b15612916576010546001600160a01b039081169084160361289e576019548111156128995760405162461bcd60e51b815260206004820152603b60248201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e7400000000006064820152608401610cc0565b612916565b601a548111156129165760405162461bcd60e51b815260206004820152603b60248201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e7400000000006064820152608401610cc0565b305f90815260208190526040902054601154811080159081906129435750601054600160a01b900460ff16155b801561296657506001600160a01b0384165f9081526013602052604090205460ff165b8015612974575060165460ff165b801561298e57505f600d5460095461298c9190613c3f565b115b15612c75576010805460ff60a01b1916600160a01b179055600a546006545f9182916129ba9190613c3f565b11156129ff57600d546009546129d09190613c3f565b600a546006546129e09190613c3f565b6129ea9085613dc4565b6129f49190613cb7565b90506129ff816133e6565b612a098184613ddb565b92505f600c54600854612a1c9190613c3f565b600b54600754612a2c9190613c3f565b612a369190613c3f565b90505f84118015612a4657505f81115b15612c655760408051600280825260608201835247925f92919060208301908036833701905050905030815f81518110612a8257612a82613dee565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612afd9190613e02565b81600181518110612b1057612b10613dee565b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b815291169063791ac94790612b559089905f90869030904290600401613e5f565b5f604051808303815f87803b158015612b6c575f80fd5b505af1925050508015612b7d575060015b505f612b898347613ddb565b90505f600b54600754612b9c9190613c3f565b1115612c17575f84600b54600754612bb49190613c3f565b612bbe9084613dc4565b612bc89190613cb7565b600e54909150612be1906001600160a01b0316826131bc565b506040518181527fddce3d5e4f18a9c2902704a38b56baadd81a9af59b8ded8a3220b6a6c1696b6b9060200160405180910390a1505b5f600c54600854612c289190613c3f565b1115612c61575f84600c54600854612c409190613c3f565b612c4a9084613dc4565b612c549190613cb7565b9050612c5f81613634565b505b5050505b50506010805460ff60a01b191690555b6010546001600160a01b0386165f9081526012602052604090205460ff600160a01b909204821615911680612cc157506001600160a01b0385165f9081526012602052604090205460ff165b15612cc957505f5b6010546001600160a01b03878116911614801590612cf557506010546001600160a01b03868116911614155b8015612cfe5750805b15612d0657505f5b8015612d65576010545f906001600160a01b0390811690881603612d2d5750600954612d32565b50600d545b5f6064612d3f8388613dc4565b612d499190613cb7565b9050612d558187613ddb565b9550612d62883083613266565b50505b612d70868686613266565b6014546001600160a01b031663e30443bc87612da0816001600160a01b03165f9081526020819052604090205490565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015612dfb575f80fd5b505af1925050508015612e0c575060015b506014546001600160a01b031663e30443bc86612e3d816001600160a01b03165f9081526020819052604090205490565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015612e98575f80fd5b505af1925050508015612ea9575060015b50601054600160a01b900460ff16612f95576015546014546040517fffb2c479000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303815f875af1925050508015612f3d575060408051601f3d908101601f19168201909252612f3a91810190613c00565b60015b15612f935760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b505050505050565b5f8184841115612fc05760405162461bcd60e51b8152600401610cc091906139c9565b505f612fcc8486613ddb565b95945050505050565b5f80612fe18385613c3f565b9050838110156130335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cc0565b9392505050565b6001600160a01b0382166130b65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610cc0565b6130f281604051806060016040528060228152602001613ecf602291396001600160a01b0385165f908152602081905260409020549190612f9d565b6001600160a01b0383165f908152602081905260409020556002546131179082613988565b6002556040518181525f906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8147101561320d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610cc0565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f8114613256576040519150601f19603f3d011682016040523d82523d5f602084013e61325b565b606091505b509095945050505050565b6001600160a01b0383166132ca5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cc0565b6001600160a01b03821661332c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cc0565b61336881604051806060016040528060268152602001613ef1602691396001600160a01b0386165f908152602081905260409020549190612f9d565b6001600160a01b038085165f9081526020819052604080822093909355908416815220546133969082612fd5565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016126a0565b5f6133f2600283613cb7565b90505f6133ff8284613ddb565b60408051600280825260608201835292935047925f9260208301908036833701905050905030815f8151811061343757613437613dee565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561348e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134b29190613e02565b816001815181106134c5576134c5613dee565b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b815291169063791ac9479061350a9087905f90869030904290600401613e5f565b5f604051808303815f87803b158015613521575f80fd5b505af1925050508015613532575060015b505f61353e8347613ddb565b600f546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018790525f60448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af1935050505080156135e2575060408051601f3d908101601f191682019092526135df91810190613c00565b60015b156135eb575050505b60408051868152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1505050505050565b6040805160028082526060820183525f926020830190803683375050600f54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561369b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136bf9190613e02565b815f815181106136d1576136d1613dee565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000420b0fa3de2efcf2b2fd04152eb1df36a09717cd8160018151811061372557613725613dee565b6001600160a01b039283166020918202929092010152600f546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de95908490613783905f90869030904290600401613e9a565b5f604051808303818588803b15801561379a575f80fd5b505af1935050505080156137ac575060015b506040516370a0823160e01b81523060048201525f907f000000000000000000000000420b0fa3de2efcf2b2fd04152eb1df36a09717cd6001600160a01b0316906370a0823190602401602060405180830381865afa158015613811573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138359190613bce565b60145460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192505f917f000000000000000000000000420b0fa3de2efcf2b2fd04152eb1df36a09717cd9091169063a9059cbb906044016020604051808303815f875af11580156138ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138cf9190613be5565b9050801561254f576014546040517f3243c791000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690633243c791906024015f604051808303815f87803b158015613933575f80fd5b505af1158015613945573d5f803e3d5ffd5b505050507fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161397a91815260200190565b60405180910390a150505050565b5f61303383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f9d565b5f6020808352835180828501525f5b818110156139f4578581018301518582016040015282016139d8565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461102f575f80fd5b5f8060408385031215613a39575f80fd5b8235613a4481613a14565b946020939093013593505050565b5f60208284031215613a62575f80fd5b813561303381613a14565b5f805f60608486031215613a7f575f80fd5b8335613a8a81613a14565b92506020840135613a9a81613a14565b929592945050506040919091013590565b5f60208284031215613abb575f80fd5b5035919050565b801515811461102f575f80fd5b5f60208284031215613adf575f80fd5b813561303381613ac2565b5f805f60608486031215613afc575f80fd5b505081359360208301359350604090920135919050565b5f8060408385031215613b24575f80fd5b8235613b2f81613a14565b91506020830135613b3f81613ac2565b809150509250929050565b5f8060408385031215613b5b575f80fd5b50508035926020909101359150565b5f8060408385031215613b7b575f80fd5b8235613b8681613a14565b91506020830135613b3f81613a14565b600181811c90821680613baa57607f821691505b602082108103613bc857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613bde575f80fd5b5051919050565b5f60208284031215613bf5575f80fd5b815161303381613ac2565b5f805f60608486031215613c12575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610c1057610c10613c2b565b5f805f805f805f80610100898b031215613c6a575f80fd5b8851613c7581613a14565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b5f82613cd157634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b80851115613d1057815f1904821115613cf657613cf6613c2b565b80851615613d0357918102915b93841c9390800290613cdb565b509250929050565b5f82613d2657506001610c10565b81613d3257505f610c10565b8160018114613d485760028114613d5257613d6e565b6001915050610c10565b60ff841115613d6357613d63613c2b565b50506001821b610c10565b5060208310610133831016604e8410600b8410161715613d91575081810a610c10565b613d9b8383613cd6565b805f1904821115613dae57613dae613c2b565b029392505050565b5f61303360ff841683613d18565b8082028115828204841417610c1057610c10613c2b565b81810381811115610c1057610c10613c2b565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613e12575f80fd5b815161303381613a14565b5f8151808452602080850194508084015f5b83811015613e545781516001600160a01b031687529582019590820190600101613e2f565b509495945050505050565b85815284602082015260a060408201525f613e7d60a0830186613e1d565b6001600160a01b0394909416606083015250608001529392505050565b848152608060208201525f613eb26080830186613e1d565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d44c26f52f0547cdf0f8beca3aad9b48622b3de23a0dc85f148fa8f525bfc6d364736f6c63430008150033

Library Used


Deployed Bytecode Sourcemap

31571:19638:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49281:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;49281:39:0;;;;;;;;15662:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16575:169::-;;;;;;;;;;-1:-1:-1;16575:169:0;;;;;:::i;:::-;;:::i;:::-;;;1393:14:1;;1386:22;1368:41;;1356:2;1341:18;16575:169:0;1228:187:1;31957:41:0;;;;;;;;;;-1:-1:-1;31957:41:0;;;;-1:-1:-1;;;;;31957:41:0;;;;;;-1:-1:-1;;;;;1611:55:1;;;1593:74;;1581:2;1566:18;31957:41:0;1420:253:1;15982:108:0;;;;;;;;;;-1:-1:-1;16070:12:0;;15982:108;;51065:141;;;;;;;;;;-1:-1:-1;51065:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;51164:34:0;51140:4;51164:34;;;:25;:34;;;;;;;;;51065:141;16752:355;;;;;;;;;;-1:-1:-1;16752:355:0;;;;;:::i;:::-;;:::i;48882:128::-;;;;;;;;;;-1:-1:-1;48882:128:0;;;;;:::i;:::-;;:::i;:::-;;49232:42;;;;;;;;;;-1:-1:-1;49232:42:0;;;;;;;;32330:38;;;;;;;;;;-1:-1:-1;32330:38:0;;;;-1:-1:-1;;;;;32330:38:0;;;31763:33;;;;;;;;;;;;;;;;46805:141;;;;;;;;;;;;;:::i;15882:92::-;;;;;;;;;;-1:-1:-1;15882:92:0;;15965:1;2973:36:1;;2961:2;2946:18;15882:92:0;2831:184:1;47416:129:0;;;;;;;;;;-1:-1:-1;47416:129:0;;;;;:::i;:::-;;:::i;17115:218::-;;;;;;;;;;-1:-1:-1;17115:218:0;;;;;:::i;:::-;;:::i;46242:179::-;;;;;;;;;;-1:-1:-1;46242:179:0;;;;;:::i;:::-;;:::i;48605:132::-;;;;;;;;;;-1:-1:-1;48605:132:0;;;;;:::i;:::-;;:::i;36240:99::-;;;;;;;;;;-1:-1:-1;36240:99:0;;;;;:::i;:::-;;:::i;31919:29::-;;;;;;;;;;-1:-1:-1;31919:29:0;;;;-1:-1:-1;;;;;31919:29:0;;;32005;;;;;;;;;;-1:-1:-1;32005:29:0;;;;-1:-1:-1;;;;;32005:29:0;;;48494:103;;;;;;;;;;;;;:::i;37443:125::-;;;;;;;;;;-1:-1:-1;37443:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;37532:28:0;37508:4;37532:28;;;:19;:28;;;;;;;;;37443:125;38574:460;;;;;;;;;;-1:-1:-1;38574:460:0;;;;;:::i;:::-;;:::i;49646:311::-;;;;;;;;;;-1:-1:-1;49646:311:0;;;;;:::i;:::-;;:::i;49327:40::-;;;;;;;;;;;;;;;;49018:141;;;;;;;;;;;;;:::i;47113:139::-;;;;;;;;;;-1:-1:-1;47113:139:0;;;;;:::i;:::-;;:::i;39046:30::-;;;;;;;;;;-1:-1:-1;39046:30:0;;;;;;;;48215:271;;;;;;;;;;-1:-1:-1;48215:271:0;;;;;:::i;:::-;;:::i;16098:127::-;;;;;;;;;;-1:-1:-1;16098:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;16199:18:0;16172:7;16199:18;;;;;;;;;;;;16098:127;1193:103;;;;;;;;;;;;;:::i;31611:32::-;;;;;;;;;;;;;;;;37576:482;;;;;;;;;;-1:-1:-1;37576:482:0;;;;;:::i;:::-;;:::i;31650:31::-;;;;;;;;;;;;;;;;45840:394;;;;;;;;;;-1:-1:-1;45840:394:0;;;;;:::i;:::-;;:::i;50658:399::-;;;;;;;;;;-1:-1:-1;50658:399:0;;;;;:::i;:::-;;:::i;970:87::-;;;;;;;;;;-1:-1:-1;1043:6:0;;-1:-1:-1;;;;;1043:6:0;970:87;;15770:104;;;;;;;;;;;;;:::i;32418:41::-;;;;;;;;;;;;;;;;46689:108;;;;;;;;;;;;;:::i;17341:269::-;;;;;;;;;;-1:-1:-1;17341:269:0;;;;;:::i;:::-;;:::i;46954:151::-;;;;;;;;;;-1:-1:-1;46954:151:0;;;;;:::i;:::-;;:::i;16233:175::-;;;;;;;;;;-1:-1:-1;16233:175:0;;;;;:::i;:::-;;:::i;47553:318::-;;;;;;;;;;-1:-1:-1;47553:318:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4685:55:1;;;4667:74;;4772:2;4757:18;;4750:34;;;;4800:18;;;4793:34;;;;4858:2;4843:18;;4836:34;;;;4901:3;4886:19;;4879:35;4945:3;4930:19;;4923:35;4989:3;4974:19;;4967:35;5033:3;5018:19;;5011:35;4654:3;4639:19;47553:318:0;4328:724:1;45403:238:0;;;;;;;;;;-1:-1:-1;45403:238:0;;;;;:::i;:::-;;:::i;32263:58::-;;;;;;;;;;-1:-1:-1;32263:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;49965:685;;;;;;;;;;-1:-1:-1;49965:685:0;;;;;:::i;:::-;;:::i;31842:31::-;;;;;;;;;;;;;;;;37149:286;;;;;;;;;;-1:-1:-1;37149:286:0;;;;;:::i;:::-;;:::i;38066:500::-;;;;;;;;;;-1:-1:-1;38066:500:0;;;;;:::i;:::-;;:::i;31803:32::-;;;;;;;;;;;;;;;;16416:151;;;;;;;;;;-1:-1:-1;16416:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;16532:18:0;;;16505:7;16532:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16416:151;45653:179;;;;;;;;;;-1:-1:-1;45653:179:0;;;;;:::i;:::-;;:::i;32161:33::-;;;;;;;;;;;;;;;;31688:30;;;;;;;;;;;;;;;;47260:148;;;;;;;;;;-1:-1:-1;47260:148:0;;;;;:::i;:::-;;:::i;48745:129::-;;;;;;;;;;;;;:::i;46429:252::-;;;;;;;;;;-1:-1:-1;46429:252:0;;;;;:::i;:::-;;:::i;47879:328::-;;;;;;;;;;-1:-1:-1;47879:328:0;;;;;:::i;:::-;;:::i;1304:201::-;;;;;;;;;;-1:-1:-1;1304:201:0;;;;;:::i;:::-;;:::i;32375:36::-;;;;;;;;;;;;;;;35791:441;;;;;;;;;;-1:-1:-1;35791:441:0;;;;;:::i;:::-;;:::i;15662:100::-;15716:13;15749:5;15742:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15662:100;:::o;16575:169::-;16658:4;16675:39;596:10;16698:7;16707:6;16675:8;:39::i;:::-;-1:-1:-1;16732:4:0;16575:169;;;;;:::o;16752:355::-;16892:4;16909:36;16919:6;16927:9;16938:6;16909:9;:36::i;:::-;16956:121;16965:6;596:10;16987:89;17025:6;16987:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16987:19:0;;;;;;:11;:19;;;;;;;;596:10;16987:33;;;;;;;;;;:37;:89::i;:::-;16956:8;:121::i;:::-;-1:-1:-1;17095:4:0;16752:355;;;;;:::o;48882:128::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;;;;;;;;;48958:15:::1;::::0;:44:::1;::::0;;;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;48958:15:0;;::::1;::::0;:37:::1;::::0;133:18:1;;48958:44:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48882:128:::0;:::o;46805:141::-;46895:15;;:43;;;;;;;;46868:7;;-1:-1:-1;;;;;46895:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46888:50;;46805:141;:::o;47416:129::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;47492:15:::1;::::0;:45:::1;::::0;;;;-1:-1:-1;;;;;1611:55:1;;;47492:45:0::1;::::0;::::1;1593:74:1::0;47492:15:0;;::::1;::::0;:36:::1;::::0;1566:18:1;;47492:45:0::1;1420:253:1::0;17115:218:0;596:10;17203:4;17252:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17252:34:0;;;;;;;;;;17203:4;;17220:83;;17243:7;;17252:50;;17291:10;17252:38;:50::i;46242:179::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;46341:15:::1;::::0;:72:::1;::::0;;;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;46341:15:0;;::::1;::::0;:53:::1;::::0;133:18:1;;46341:72:0::1;14:177:1::0;48605:132:0;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;48674:15:::1;::::0;:55:::1;::::0;-1:-1:-1;;;48674:55:0;;-1:-1:-1;;;;;6897:55:1;;;48674::0::1;::::0;::::1;6879:74:1::0;48674:15:0::1;6969:18:1::0;;;6962:50;48674:15:0;;::::1;::::0;:30:::1;::::0;6852:18:1;;48674:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48605:132:::0;:::o;36240:99::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;36300:31:::1;36312:10;36324:6;36300:11;:31::i;:::-;36240:99:::0;:::o;48494:103::-;48531:15;;:58;;-1:-1:-1;;;48531:58:0;;48570:10;48531:58;;;6879:74:1;48531:15:0;6969:18:1;;;6962:50;-1:-1:-1;;;;;48531:15:0;;;;:30;;6852:18:1;;48531:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38574:460::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;38686:14:::1;::::0;-1:-1:-1;;;;;38686:14:0;;::::1;38667:33:::0;;::::1;::::0;38659:86:::1;;;::::0;-1:-1:-1;;;38659:86:0;;7475:2:1;38659:86:0::1;::::0;::::1;7457:21:1::0;7514:2;7494:18;;;7487:30;7553:34;7533:18;;;7526:62;7624:10;7604:18;;;7597:38;7652:19;;38659:86:0::1;7273:404:1::0;38659:86:0::1;-1:-1:-1::0;;;;;36431:19:0;;;:23;38756:78:::1;;;::::0;-1:-1:-1;;;38756:78:0;;7884:2:1;38756:78:0::1;::::0;::::1;7866:21:1::0;7923:2;7903:18;;;7896:30;7962:34;7942:18;;;7935:62;8033:7;8013:18;;;8006:35;8058:19;;38756:78:0::1;7682:401:1::0;38756:78:0::1;-1:-1:-1::0;;;;;38853:29:0;::::1;38845:85;;;::::0;-1:-1:-1;;;38845:85:0;;8290:2:1;38845:85:0::1;::::0;::::1;8272:21:1::0;8329:2;8309:18;;;8302:30;8368:34;8348:18;;;8341:62;8439:13;8419:18;;;8412:41;8470:19;;38845:85:0::1;8088:407:1::0;38845:85:0::1;38941:14;:32:::0;;-1:-1:-1;;38941:32:0::1;-1:-1:-1::0;;;;;38941:32:0;::::1;::::0;;::::1;::::0;;;38989:37:::1;::::0;1593:74:1;;;38989:37:0::1;::::0;1581:2:1;1566:18;38989:37:0::1;;;;;;;;38574:460:::0;:::o;49646:311::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;49745:26:::1;::::0;::::1;;49735:36;;::::0;::::1;;::::0;49727:99:::1;;;::::0;-1:-1:-1;;;49727:99:0;;8702:2:1;49727:99:0::1;::::0;::::1;8684:21:1::0;8741:2;8721:18;;;8714:30;8780:34;8760:18;;;8753:62;8851:20;8831:18;;;8824:48;8889:19;;49727:99:0::1;8500:414:1::0;49727:99:0::1;49837:26;:35:::0;;-1:-1:-1;;49837:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;49890:59:::1;::::0;49837:35:::1;49922:26:::0;;;1393:14:1;1386:22;1368:41;;49890:59:0::1;::::0;1356:2:1;1341:18;49890:59:0::1;1228:187:1::0;49018:141:0;49110:15;;:41;;;;;;;;49083:7;;-1:-1:-1;;;;;49110:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;47113:139;47210:15;;:34;;-1:-1:-1;;;47210:34:0;;-1:-1:-1;;;;;1611:55:1;;;47210:34:0;;;1593:74:1;47183:7:0;;47210:15;;:25;;1566:18:1;;47210:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;48215:271::-;48347:15;;:28;;;;;;;;160:25:1;;;48281:18:0;;;;;;-1:-1:-1;;;;;48347:15:0;;:23;;133:18:1;;48347:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48391:87;;;9461:25:1;;;9517:2;9502:18;;9495:34;;;9545:18;;;9538:34;;;9603:2;9588:18;;9581:34;;;48280:95:0;;-1:-1:-1;48280:95:0;;-1:-1:-1;48280:95:0;-1:-1:-1;48468:9:0;;48456:5;;48391:87;;9448:3:1;9433:19;48391:87:0;;;;;;;48269:217;;;48215:271;:::o;1193:103::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;1258:30:::1;1285:1;1258:18;:30::i;:::-;1193:103::o:0;37576:482::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;37710:17:::1;:40:::0;;;37761:16:::1;:39:::0;;;37811:15:::1;:38:::0;;;37833:16;37876:38:::1;37783:17:::0;37732:18;37876:38:::1;:::i;:::-;:57;;;;:::i;:::-;37862:11;:71:::0;;;37969:1:::1;-1:-1:-1::0;37954:16:0::1;37946:59;;;::::0;-1:-1:-1;;;37946:59:0;;10147:2:1;37946:59:0::1;::::0;::::1;10129:21:1::0;10186:2;10166:18;;;10159:30;10225:32;10205:18;;;10198:60;10275:18;;37946:59:0::1;9945:354:1::0;37946:59:0::1;38023:27;38038:11;;38023:27;;;;160:25:1::0;;148:2;133:18;;14:177;38023:27:0::1;;;;;;;;37576:482:::0;;;:::o;45840:394::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;45938:7:::1;45926:8;:19;;:42;;;;;45961:7;45949:8;:19;;45926:42;45918:107;;;::::0;-1:-1:-1;;;45918:107:0;;10506:2:1;45918:107:0::1;::::0;::::1;10488:21:1::0;10545:2;10525:18;;;10518:30;10584:34;10564:18;;;10557:62;10655:22;10635:18;;;10628:50;10695:19;;45918:107:0::1;10304:416:1::0;45918:107:0::1;46056:16;;46044:8;:28:::0;46036:85:::1;;;::::0;-1:-1:-1;;;46036:85:0;;10927:2:1;46036:85:0::1;::::0;::::1;10909:21:1::0;10966:2;10946:18;;;10939:30;11005:34;10985:18;;;10978:62;11076:14;11056:18;;;11049:42;11108:19;;46036:85:0::1;10725:408:1::0;46036:85:0::1;46171:16;::::0;46137:51:::1;::::0;46161:8;;46137:51:::1;::::0;;;::::1;46199:16;:27:::0;45840:394::o;50658:399::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;-1:-1:-1;;;;;50768:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;:45;::::1;;:34;::::0;;::::1;:45;;::::0;50759:95:::1;;;::::0;-1:-1:-1;;;50759:95:0;;11340:2:1;50759:95:0::1;::::0;::::1;11322:21:1::0;11379:2;11359:18;;;11352:30;11418:34;11398:18;;;11391:62;-1:-1:-1;;;11469:18:1;;;11462:34;11513:19;;50759:95:0::1;11138:400:1::0;50759:95:0::1;50892:4;-1:-1:-1::0;;;;;50873:24:0;::::1;::::0;50865:60:::1;;;::::0;-1:-1:-1;;;50865:60:0;;11745:2:1;50865:60:0::1;::::0;::::1;11727:21:1::0;11784:2;11764:18;;;11757:30;11823:25;11803:18;;;11796:53;11866:18;;50865:60:0::1;11543:347:1::0;50865:60:0::1;-1:-1:-1::0;;;;;50938:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:44;;-1:-1:-1;;50938:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;51000:49;;1368:41:1;;;51000:49:0::1;::::0;1341:18:1;51000:49:0::1;;;;;;;;50658:399:::0;;:::o;15770:104::-;15826:13;15859:7;15852:14;;;;;:::i;46689:108::-;46762:15;;:27;;;;;;;;46735:7;;-1:-1:-1;;;;;46762:15:0;;:25;;:27;;;;;;;;;;;;;;:15;:27;;;;;;;;;;;;;;17341:269;17434:4;17451:129;596:10;17474:7;17483:96;17522:15;17483:96;;;;;;;;;;;;;;;;;596:10;17483:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17483:34:0;;;;;;;;;;;;:38;:96::i;46954:151::-;47050:15;;:47;;;;;-1:-1:-1;;;;;1611:55:1;;;47050:47:0;;;1593:74:1;47023:7:0;;47050:15;;:38;;1566:18:1;;47050:47:0;1420:253:1;16233:175:0;16319:4;16336:42;596:10;16360:9;16371:6;16336:9;:42::i;47553:318::-;47828:15;;:35;;;;;-1:-1:-1;;;;;1611:55:1;;;47828:35:0;;;1593:74:1;47649:7:0;;;;;;;;;;;;;;;;47828:15;;;:26;;1566:18:1;;47828:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47821:42;;;;;;;;;;;;;;;;47553:318;;;;;;;;;:::o;45403:238::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;45518:7:::1;45502:13;16070:12:::0;;;15982:108;45502:13:::1;:23;;;;:::i;:::-;45490:9;:35;45482:110;;;::::0;-1:-1:-1;;;45482:110:0;;13062:2:1;45482:110:0::1;::::0;::::1;13044:21:1::0;13101:2;13081:18;;;13074:30;13140:34;13120:18;;;13113:62;13211:32;13191:18;;;13184:60;13261:19;;45482:110:0::1;12860:426:1::0;45482:110:0::1;45603:18;:30:::0;45403:238::o;49965:685::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;50188:3:::1;50167:16;15965:1:::0;50167:2:::1;:16;:::i;:::-;16070:12:::0;;50150:34:::1;;;;:::i;:::-;50149:42;;;;:::i;:::-;50120:24;:71;;:160;;;;-1:-1:-1::0;50277:3:0::1;50256:16;15965:1:::0;50256:2:::1;:16;:::i;:::-;16070:12:::0;;50239:34:::1;;;;:::i;:::-;50238:42;;;;:::i;:::-;50209:25;:71;;50120:160;50098:274;;;::::0;-1:-1:-1;;;50098:274:0;;14876:2:1;50098:274:0::1;::::0;::::1;14858:21:1::0;14915:2;14895:18;;;14888:30;14954:34;14934:18;;;14927:62;15025:33;15005:18;;;14998:61;15076:19;;50098:274:0::1;14674:427:1::0;50098:274:0::1;50440:16;15965:1:::0;50440:2:::1;:16;:::i;:::-;50411:46;::::0;:24;:46:::1;:::i;:::-;50384:23;:73:::0;50524:16:::1;15965:1:::0;50524:2:::1;:16;:::i;:::-;50495:46;::::0;:25;:46:::1;:::i;:::-;50468:24;:73:::0;;;50592:23:::1;::::0;50559:83:::1;::::0;::::1;::::0;::::1;::::0;15453:25:1;;15509:2;15494:18;;15487:34;15441:2;15426:18;;15279:248;50559:83:0::1;;;;;;;;49965:685:::0;;:::o;37149:286::-;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;-1:-1:-1;;;;;37244:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;37236:89:::1;;;::::0;-1:-1:-1;;;37236:89:0;;11340:2:1;37236:89:0::1;::::0;::::1;11322:21:1::0;11379:2;11359:18;;;11352:30;11418:34;11398:18;;;11391:62;-1:-1:-1;;;11469:18:1;;;11462:34;11513:19;;37236:89:0::1;11138:400:1::0;37236:89:0::1;-1:-1:-1::0;;;;;37336:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;37336:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37393:34;;1368:41:1;;;37393:34:0::1;::::0;1341:18:1;37393:34:0::1;1228:187:1::0;38066:500:0;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;38204:18:::1;:42:::0;;;38257:17:::1;:41:::0;;;38309:16:::1;:40:::0;;;38332:17;38377:40:::1;38280:18:::0;38227:19;38377:40:::1;:::i;:::-;:60;;;;:::i;:::-;38362:12;:75:::0;;;38474:1:::1;-1:-1:-1::0;38458:17:0::1;38450:61;;;::::0;-1:-1:-1;;;38450:61:0;;15734:2:1;38450:61:0::1;::::0;::::1;15716:21:1::0;15773:2;15753:18;;;15746:30;15812:33;15792:18;;;15785:61;15863:18;;38450:61:0::1;15532:355:1::0;38450:61:0::1;38529:29;38545:12;;38529:29;;;;160:25:1::0;;148:2;133:18;;14:177;45653:179:0;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;45729:11:::1;::::0;:23;::::1;;:11;::::0;;::::1;:23;;::::0;45721:70:::1;;;::::0;-1:-1:-1;;;45721:70:0;;16094:2:1;45721:70:0::1;::::0;::::1;16076:21:1::0;16133:2;16113:18;;;16106:30;16172:34;16152:18;;;16145:62;16243:4;16223:18;;;16216:32;16265:19;;45721:70:0::1;15892:398:1::0;45721:70:0::1;45802:11;:22:::0;;-1:-1:-1;;45802:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45653:179::o;47260:148::-;47353:15;;:47;;;;;-1:-1:-1;;;;;1611:55:1;;;47353:47:0;;;1593:74:1;47326:7:0;;47353:15;;:38;;1566:18:1;;47353:47:0;1420:253:1;48745:129:0;48827:15;;:39;;;;;;;;48800:7;;-1:-1:-1;;;;;48827:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;46429:252;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;46530:5:::1;46514:12;:21;;:47;;;;;46555:6;46539:12;:22;;46514:47;46506:111;;;::::0;-1:-1:-1;;;46506:111:0;;16497:2:1;46506:111:0::1;::::0;::::1;16479:21:1::0;16536:2;16516:18;;;16509:30;16575:34;16555:18;;;16548:62;16646:21;16626:18;;;16619:49;16685:19;;46506:111:0::1;16295:415:1::0;46506:111:0::1;46628:15;::::0;:45:::1;::::0;;;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;46628:15:0;;::::1;::::0;:31:::1;::::0;133:18:1;;46628:45:0::1;14:177:1::0;47879:328:0;48159:15;;:40;;;;;;;;160:25:1;;;47980:7:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48159:15:0;;;;:33;;133:18:1;;48159:40:0;14:177:1;1304:201:0;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;-1:-1:-1;;;;;1393:22:0;::::1;1385:73;;;::::0;-1:-1:-1;;;1385:73:0;;16917:2:1;1385:73:0::1;::::0;::::1;16899:21:1::0;16956:2;16936:18;;;16929:30;16995:34;16975:18;;;16968:62;17066:8;17046:18;;;17039:36;17092:19;;1385:73:0::1;16715:402:1::0;1385:73:0::1;1469:28;1488:8;1469:18;:28::i;35791:441::-:0;1043:6;;-1:-1:-1;;;;;1043:6:0;596:10;1105:23;1097:68;;;;-1:-1:-1;;;1097:68:0;;6347:2:1;1097:68:0;;;6329:21:1;;;6366:18;;;6359:30;-1:-1:-1;;;;;;;;;;;6405:18:1;;;6398:62;6477:18;;1097:68:0;6145:356:1;1097:68:0;35887:4:::1;-1:-1:-1::0;;;;;35870:22:0;::::1;::::0;35862:67:::1;;;::::0;-1:-1:-1;;;35862:67:0;;17324:2:1;35862:67:0::1;::::0;::::1;17306:21:1::0;;;17343:18;;;17336:30;17402:34;17382:18;;;17375:62;17454:18;;35862:67:0::1;17122:356:1::0;35862:67:0::1;-1:-1:-1::0;;;;;35944:21:0;::::1;35940:126;;35982:51;35998:10;36011:21;35982:7;:51::i;35940:126::-;36138:35;::::0;-1:-1:-1;;;36138:35:0;;36167:4:::1;36138:35;::::0;::::1;1593:74:1::0;36103:5:0;;36076:17:::1;::::0;-1:-1:-1;;;;;36138:20:0;::::1;::::0;::::1;::::0;1566:18:1;;36138:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36184:40;::::0;-1:-1:-1;;;36184:40:0;;36204:10:::1;36184:40;::::0;::::1;17657:74:1::0;17747:18;;;17740:34;;;36120:53:0;;-1:-1:-1;;;;;;36184:19:0;::::1;::::0;::::1;::::0;17630:18:1;;36184:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35851:381;;35791:441:::0;:::o;18999:378::-;-1:-1:-1;;;;;19135:19:0;;19127:68;;;;-1:-1:-1;;;19127:68:0;;17987:2:1;19127:68:0;;;17969:21:1;18026:2;18006:18;;;17999:30;18065:34;18045:18;;;18038:62;18136:6;18116:18;;;18109:34;18160:19;;19127:68:0;17785:400:1;19127:68:0;-1:-1:-1;;;;;19214:21:0;;19206:68;;;;-1:-1:-1;;;19206:68:0;;18392:2:1;19206:68:0;;;18374:21:1;18431:2;18411:18;;;18404:30;18470:34;18450:18;;;18443:62;18541:4;18521:18;;;18514:32;18563:19;;19206:68:0;18190:398:1;19206:68:0;-1:-1:-1;;;;;19285:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19337:32;;160:25:1;;;19337:32:0;;133:18:1;19337:32:0;;;;;;;;18999:378;;;:::o;39085:4553::-;-1:-1:-1;;;;;39217:18:0;;39209:68;;;;-1:-1:-1;;;39209:68:0;;18795:2:1;39209:68:0;;;18777:21:1;18834:2;18814:18;;;18807:30;18873:34;18853:18;;;18846:62;-1:-1:-1;;;18924:18:1;;;18917:35;18969:19;;39209:68:0;18593:401:1;39209:68:0;-1:-1:-1;;;;;39296:16:0;;39288:64;;;;-1:-1:-1;;;39288:64:0;;19201:2:1;39288:64:0;;;19183:21:1;19240:2;19220:18;;;19213:30;19279:34;19259:18;;;19252:62;-1:-1:-1;;;19330:18:1;;;19323:33;19373:19;;39288:64:0;18999:399:1;39288:64:0;39368:6;39378:1;39368:11;39365:92;;39396:28;39412:4;39418:2;39422:1;39396:15;:28::i;:::-;39085:4553;;;:::o;39365:92::-;39473:26;;;;39469:752;;;39539:13;;-1:-1:-1;;;;;39531:21:0;;;39539:13;;39531:21;;:44;;-1:-1:-1;39562:13:0;;-1:-1:-1;;;;;39556:19:0;;;39562:13;;39556:19;39531:44;39530:99;;;;-1:-1:-1;;;;;;39598:31:0;;;;;;:25;:31;;;;;;;;39597:32;39530:99;:151;;;;-1:-1:-1;;;;;;39652:29:0;;;;;;:25;:29;;;;;;;;39651:30;39530:151;39526:684;;;39728:13;;-1:-1:-1;;;;;39728:13:0;;;39720:21;;;;39716:479;;39810:23;;39800:6;:33;;39766:180;;;;-1:-1:-1;;;39766:180:0;;19605:2:1;39766:180:0;;;19587:21:1;19644:2;19624:18;;;19617:30;19683:34;19663:18;;;19656:62;19754:29;19734:18;;;19727:57;19801:19;;39766:180:0;19403:423:1;39766:180:0;39716:479;;;40039:24;;40029:6;:34;;39995:180;;;;-1:-1:-1;;;39995:180:0;;19605:2:1;39995:180:0;;;19587:21:1;19644:2;19624:18;;;19617:30;19683:34;19663:18;;;19656:62;19754:29;19734:18;;;19727:57;19801:19;;39995:180:0;19403:423:1;39995:180:0;40282:4;40233:28;16199:18;;;;;;;;;;;40340;;40316:42;;;;;;;40375:33;;-1:-1:-1;40400:8:0;;-1:-1:-1;;;40400:8:0;;;;40399:9;40375:33;:79;;;;-1:-1:-1;;;;;;40425:29:0;;;;;;:25;:29;;;;;;;;40375:79;:107;;;;-1:-1:-1;40471:11:0;;;;40375:107;:154;;;;;40528:1;40513:12;;40499:11;;:26;;;;:::i;:::-;:30;40375:154;40371:1977;;;40556:8;:15;;-1:-1:-1;;;;40556:15:0;-1:-1:-1;;;40556:15:0;;;40663:18;;40643:17;;40556:15;;;;40643:38;;40663:18;40643:38;:::i;:::-;:42;40640:244;;;40805:12;;40791:11;;:26;;;;:::i;:::-;40768:18;;40748:17;;:38;;;;:::i;:::-;40724:63;;:20;:63;:::i;:::-;:94;;;;:::i;:::-;40706:112;;40837:31;40852:15;40837:14;:31::i;:::-;40900:39;40924:15;40900:39;;:::i;:::-;;;40956:16;41035;;41017:15;;:34;;;;:::i;:::-;40995:17;;40976:16;;:36;;;;:::i;:::-;40975:77;;;;:::i;:::-;40956:96;;41107:1;41084:20;:24;:40;;;;;41123:1;41112:8;:12;41084:40;41081:1223;;;41236:16;;;41250:1;41236:16;;;;;;;;41170:21;;41145:22;;41236:16;41250:1;41236:16;;;;;;;;;;-1:-1:-1;41236:16:0;41212:40;;41289:4;41271;41276:1;41271:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41271:23:0;;;:7;;;;;;;;;;:23;;;;41323:15;;:22;;;-1:-1:-1;;;41323:22:0;;;;:15;;;;;:20;;:22;;;;;41271:7;;41323:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41313:4;41318:1;41313:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41313:32:0;;;:7;;;;;;;;;:32;41370:15;;:253;;-1:-1:-1;;;41370:253:0;;:15;;;:66;;:253;;41459:20;;41370:15;;41526:4;;41561;;41589:15;;41370:253;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41366:269;41671:18;41692:38;41716:14;41692:21;:38;:::i;:::-;41671:59;;41795:1;41774:17;;41755:16;;:36;;;;:::i;:::-;41754:42;41751:296;;;41821:19;41897:8;41876:17;;41857:16;;:36;;;;:::i;:::-;41843:51;;:10;:51;:::i;:::-;:62;;;;:::i;:::-;41944:14;;41821:84;;-1:-1:-1;41928:45:0;;-1:-1:-1;;;;;41944:14:0;41821:84;41928:7;:45::i;:::-;-1:-1:-1;42001:26:0;;160:25:1;;;42001:26:0;;148:2:1;133:18;42001:26:0;;;;;;;41798:249;41751:296;42109:1;42089:16;;42071:15;;:34;;;;:::i;:::-;42070:40;42067:222;;;42135:17;42207:8;42187:16;;42169:15;;:34;;;;:::i;:::-;42155:49;;:10;:49;:::i;:::-;:60;;;;:::i;:::-;42135:80;;42238:31;42259:9;42238:20;:31::i;:::-;42112:177;42067:222;41126:1178;;;41081:1223;-1:-1:-1;;42320:8:0;:16;;-1:-1:-1;;;;42320:16:0;;;40371:1977;42376:8;;-1:-1:-1;;;;;42400:25:0;;42360:12;42400:25;;;:19;:25;;;;;;42376:8;-1:-1:-1;;;42376:8:0;;;;;42375:9;;42400:25;;:52;;-1:-1:-1;;;;;;42429:23:0;;;;;;:19;:23;;;;;;;;42400:52;42397:99;;;-1:-1:-1;42479:5:0;42397:99;42560:13;;-1:-1:-1;;;;;42552:21:0;;;42560:13;;42552:21;;;;:44;;-1:-1:-1;42583:13:0;;-1:-1:-1;;;;;42577:19:0;;;42583:13;;42577:19;;42552:44;:55;;;;;42600:7;42552:55;42549:102;;;-1:-1:-1;42634:5:0;42549:102;42666:7;42663:387;;;42734:13;;42690:18;;-1:-1:-1;;;;;42734:13:0;;;42726:21;;;;42723:151;;-1:-1:-1;42781:11:0;;42723:151;;;-1:-1:-1;42846:12:0;;42723:151;42888:12;42925:3;42903:19;42912:10;42903:6;:19;:::i;:::-;:25;;;;:::i;:::-;42888:40;-1:-1:-1;42966:13:0;42888:40;42966:6;:13;:::i;:::-;42957:22;;42996:42;43012:4;43026;43033;42996:15;:42::i;:::-;42675:375;;42663:387;43062:33;43078:4;43084:2;43088:6;43062:15;:33::i;:::-;43112:15;;-1:-1:-1;;;;;43112:15:0;:26;43147:4;43154:15;43147:4;-1:-1:-1;;;;;16199:18:0;16172:7;16199:18;;;;;;;;;;;;16098:127;43154:15;43112:58;;;;;;;;;;-1:-1:-1;;;;;17675:55:1;;;43112:58:0;;;17657:74:1;17747:18;;;17740:34;17630:18;;43112:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43108:74;43196:15;;-1:-1:-1;;;;;43196:15:0;:26;43231:2;43236:13;43231:2;-1:-1:-1;;;;;16199:18:0;16172:7;16199:18;;;;;;;;;;;;16098:127;43236:13;43196:54;;;;;;;;;;-1:-1:-1;;;;;17675:55:1;;;43196:54:0;;;17657:74:1;17747:18;;;17740:34;17630:18;;43196:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43192:70;43278:8;;-1:-1:-1;;;43278:8:0;;;;43274:357;;43317:16;;43354:15;;:28;;;;;;;;160:25:1;;;-1:-1:-1;;;;;43354:15:0;;;;:23;;133:18:1;;43354:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;43354:28:0;;;;;;;;-1:-1:-1;;43354:28:0;;;;;;;;;;;;:::i;:::-;;;43350:270;;;43480:86;;;9461:25:1;;;9517:2;9502:18;;9495:34;;;9545:18;;;9538:34;;;9603:2;9588:18;;9581:34;;;43556:9:0;;43545:4;;43480:86;;9448:3:1;9433:19;43480:86:0;;;;;;;43383:199;;;43350:270;43288:343;43274:357;39198:4440;;;39085:4553;;;:::o;2068:192::-;2154:7;2190:12;2182:6;;;;2174:29;;;;-1:-1:-1;;;2174:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2214:9:0;2226:5;2230:1;2226;:5;:::i;:::-;2214:17;2068:192;-1:-1:-1;;;;;2068:192:0:o;1735:181::-;1793:7;;1825:5;1829:1;1825;:5;:::i;:::-;1813:17;;1854:1;1849;:6;;1841:46;;;;-1:-1:-1;;;1841:46:0;;22217:2:1;1841:46:0;;;22199:21:1;22256:2;22236:18;;;22229:30;22295:29;22275:18;;;22268:57;22342:18;;1841:46:0;22015:351:1;1841:46:0;1907:1;1735:181;-1:-1:-1;;;1735:181:0:o;18577:414::-;-1:-1:-1;;;;;18661:21:0;;18653:67;;;;-1:-1:-1;;;18653:67:0;;22573:2:1;18653:67:0;;;22555:21:1;22612:2;22592:18;;;22585:30;22651:34;22631:18;;;22624:62;22722:3;22702:18;;;22695:31;22743:19;;18653:67:0;22371:397:1;18653:67:0;18812:68;18835:6;18812:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18812:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;18791:18:0;;:9;:18;;;;;;;;;;:89;18906:12;;:24;;18923:6;18906:16;:24::i;:::-;18891:12;:39;18946:37;;160:25:1;;;18972:1:0;;-1:-1:-1;;;;;18946:37:0;;;;;148:2:1;133:18;18946:37:0;;;;;;;18577:414;;:::o;1513:191::-;1606:6;;;-1:-1:-1;;;;;1623:17:0;;;-1:-1:-1;;1623:17:0;;;;;;;1656:40;;1606:6;;;1623:17;1606:6;;1656:40;;1587:16;;1656:40;1576:128;1513:191;:::o;36470:264::-;36547:4;36596:6;36571:21;:31;;36563:73;;;;-1:-1:-1;;;36563:73:0;;22975:2:1;36563:73:0;;;22957:21:1;23014:2;22994:18;;;22987:30;23053:31;23033:18;;;23026:59;23102:18;;36563:73:0;22773:353:1;36563:73:0;36650:12;36668:9;-1:-1:-1;;;;;36668:14:0;36690:6;36668:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36649:52:0;;36470:264;-1:-1:-1;;;;;36470:264:0:o;17618:569::-;-1:-1:-1;;;;;17758:20:0;;17750:70;;;;-1:-1:-1;;;17750:70:0;;18795:2:1;17750:70:0;;;18777:21:1;18834:2;18814:18;;;18807:30;18873:34;18853:18;;;18846:62;-1:-1:-1;;;18924:18:1;;;18917:35;18969:19;;17750:70:0;18593:401:1;17750:70:0;-1:-1:-1;;;;;17839:23:0;;17831:71;;;;-1:-1:-1;;;17831:71:0;;19201:2:1;17831:71:0;;;19183:21:1;19240:2;19220:18;;;19213:30;19279:34;19259:18;;;19252:62;-1:-1:-1;;;19330:18:1;;;19323:33;19373:19;;17831:71:0;18999:399:1;17831:71:0;17991;18013:6;17991:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17991:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;17971:17:0;;;:9;:17;;;;;;;;;;;:91;;;;18096:20;;;;;;;:32;;18121:6;18096:24;:32::i;:::-;-1:-1:-1;;;;;18073:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;18144:35;160:25:1;;;18073:20:0;;18144:35;;;;;;133:18:1;18144:35:0;14:177:1;43646:987:0;43705:12;43720:10;43729:1;43720:6;:10;:::i;:::-;43705:25;-1:-1:-1;43741:17:0;43761:13;43705:25;43761:6;:13;:::i;:::-;43870:16;;;43884:1;43870:16;;;;;;;;43741:33;;-1:-1:-1;43812:21:0;;43787:22;;43870:16;;;;;;;;;;-1:-1:-1;43870:16:0;43846:40;;43915:4;43897;43902:1;43897:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43897:23:0;;;:7;;;;;;;;;;:23;;;;43941:15;;:22;;;-1:-1:-1;;;43941:22:0;;;;:15;;;;;:20;;:22;;;;;43897:7;;43941:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43931:4;43936:1;43931:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43931:32:0;;;:7;;;;;;;;;:32;43980:15;;:217;;-1:-1:-1;;;43980:217:0;;:15;;;:66;;:217;;44061:4;;43980:15;;44124:4;;44151;;44171:15;;43980:217;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43976:233;44229:18;44250:38;44274:14;44250:21;:38;:::i;:::-;44305:15;;:248;;;;;44378:4;44305:248;;;23705:34:1;23755:18;;;23748:34;;;44305:15:0;23798:18:1;;;23791:34;;;23841:18;;;23834:34;32079:42:0;23884:19:1;;;23877:44;44527:15:0;23937:19:1;;;23930:35;44229:59:0;;-1:-1:-1;;;;;;44305:15:0;;:31;;44229:59;;23616:19:1;;44305:248:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44305:248:0;;;;;;;;-1:-1:-1;;44305:248:0;;;;;;;;;;;;:::i;:::-;;;44301:264;;;;;;;44582:43;;;24178:25:1;;;24234:2;24219:18;;24212:34;;;24262:18;;;24255:34;;;44582:43:0;;24166:2:1;24151:18;44582:43:0;;;;;;;43694:939;;;;;43646:987;:::o;44641:754::-;44729:16;;;44743:1;44729:16;;;;;;;;44705:21;;44729:16;;;;;;;;-1:-1:-1;;44766:15:0;;:22;;;-1:-1:-1;;;44766:22:0;;;;44705:40;;-1:-1:-1;;;;;;44766:15:0;;;;:20;;-1:-1:-1;44766:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44756:4;44761:1;44756:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;44756:32:0;;;-1:-1:-1;;;;;44756:32:0;;;;;44809:11;44799:4;44804:1;44799:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44799:21:0;;;:7;;;;;;;;;:21;44837:15;;:185;;;;;:15;;;:66;;44911:6;;44837:185;;:15;;44949:4;;44976;;44996:15;;44837:185;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44833:201;45083:44;;-1:-1:-1;;;45083:44:0;;45121:4;45083:44;;;1593:74:1;45054:26:0;;45090:11;-1:-1:-1;;;;;45083:29:0;;;;1566:18:1;;45083:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45190:15;;45153:74;;-1:-1:-1;;;45153:74:0;;-1:-1:-1;;;;;45190:15:0;;;45153:74;;;17657::1;17747:18;;;17740:34;;;45054:73:0;;-1:-1:-1;45138:12:0;;45160:11;45153:28;;;;;;17630:18:1;;45153:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45138:89;;45244:7;45240:148;;;45268:15;;:55;;;;;;;;160:25:1;;;-1:-1:-1;;;;;45268:15:0;;;;:35;;133:18:1;;45268:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45343:33;45357:18;45343:33;;;;160:25:1;;148:2;133:18;;14:177;45343:33:0;;;;;;;;44694:701;;;44641:754;:::o;1924:136::-;1982:7;2009:43;2013:1;2016;2009:43;;;;;;;;;;;;;;;;;:3;:43::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:154::-;-1:-1:-1;;;;;828:5:1;824:54;817:5;814:65;804:93;;893:1;890;883:12;908:315;976:6;984;1037:2;1025:9;1016:7;1012:23;1008:32;1005:52;;;1053:1;1050;1043:12;1005:52;1092:9;1079:23;1111:31;1136:5;1111:31;:::i;:::-;1161:5;1213:2;1198:18;;;;1185:32;;-1:-1:-1;;;908:315:1:o;1678:247::-;1737:6;1790:2;1778:9;1769:7;1765:23;1761:32;1758:52;;;1806:1;1803;1796:12;1758:52;1845:9;1832:23;1864:31;1889:5;1864:31;:::i;1930:456::-;2007:6;2015;2023;2076:2;2064:9;2055:7;2051:23;2047:32;2044:52;;;2092:1;2089;2082:12;2044:52;2131:9;2118:23;2150:31;2175:5;2150:31;:::i;:::-;2200:5;-1:-1:-1;2257:2:1;2242:18;;2229:32;2270:33;2229:32;2270:33;:::i;:::-;1930:456;;2322:7;;-1:-1:-1;;;2376:2:1;2361:18;;;;2348:32;;1930:456::o;2391:180::-;2450:6;2503:2;2491:9;2482:7;2478:23;2474:32;2471:52;;;2519:1;2516;2509:12;2471:52;-1:-1:-1;2542:23:1;;2391:180;-1:-1:-1;2391:180:1:o;3251:118::-;3337:5;3330:13;3323:21;3316:5;3313:32;3303:60;;3359:1;3356;3349:12;3374:241;3430:6;3483:2;3471:9;3462:7;3458:23;3454:32;3451:52;;;3499:1;3496;3489:12;3451:52;3538:9;3525:23;3557:28;3579:5;3557:28;:::i;3620:316::-;3697:6;3705;3713;3766:2;3754:9;3745:7;3741:23;3737:32;3734:52;;;3782:1;3779;3772:12;3734:52;-1:-1:-1;;3805:23:1;;;3875:2;3860:18;;3847:32;;-1:-1:-1;3926:2:1;3911:18;;;3898:32;;3620:316;-1:-1:-1;3620:316:1:o;3941:382::-;4006:6;4014;4067:2;4055:9;4046:7;4042:23;4038:32;4035:52;;;4083:1;4080;4073:12;4035:52;4122:9;4109:23;4141:31;4166:5;4141:31;:::i;:::-;4191:5;-1:-1:-1;4248:2:1;4233:18;;4220:32;4261:30;4220:32;4261:30;:::i;:::-;4310:7;4300:17;;;3941:382;;;;;:::o;5057:248::-;5125:6;5133;5186:2;5174:9;5165:7;5161:23;5157:32;5154:52;;;5202:1;5199;5192:12;5154:52;-1:-1:-1;;5225:23:1;;;5295:2;5280:18;;;5267:32;;-1:-1:-1;5057:248:1:o;5310:388::-;5378:6;5386;5439:2;5427:9;5418:7;5414:23;5410:32;5407:52;;;5455:1;5452;5445:12;5407:52;5494:9;5481:23;5513:31;5538:5;5513:31;:::i;:::-;5563:5;-1:-1:-1;5620:2:1;5605:18;;5592:32;5633:33;5592:32;5633:33;:::i;5703:437::-;5782:1;5778:12;;;;5825;;;5846:61;;5900:4;5892:6;5888:17;5878:27;;5846:61;5953:2;5945:6;5942:14;5922:18;5919:38;5916:218;;-1:-1:-1;;;5987:1:1;5980:88;6091:4;6088:1;6081:15;6119:4;6116:1;6109:15;5916:218;;5703:437;;;:::o;6506:184::-;6576:6;6629:2;6617:9;6608:7;6604:23;6600:32;6597:52;;;6645:1;6642;6635:12;6597:52;-1:-1:-1;6668:16:1;;6506:184;-1:-1:-1;6506:184:1:o;7023:245::-;7090:6;7143:2;7131:9;7122:7;7118:23;7114:32;7111:52;;;7159:1;7156;7149:12;7111:52;7191:9;7185:16;7210:28;7232:5;7210:28;:::i;8919:306::-;9007:6;9015;9023;9076:2;9064:9;9055:7;9051:23;9047:32;9044:52;;;9092:1;9089;9082:12;9044:52;9121:9;9115:16;9105:26;;9171:2;9160:9;9156:18;9150:25;9140:35;;9215:2;9204:9;9200:18;9194:25;9184:35;;8919:306;;;;;:::o;9626:184::-;-1:-1:-1;;;9675:1:1;9668:88;9775:4;9772:1;9765:15;9799:4;9796:1;9789:15;9815:125;9880:9;;;9901:10;;;9898:36;;;9914:18;;:::i;11895:681::-;12026:6;12034;12042;12050;12058;12066;12074;12082;12135:3;12123:9;12114:7;12110:23;12106:33;12103:53;;;12152:1;12149;12142:12;12103:53;12184:9;12178:16;12203:31;12228:5;12203:31;:::i;:::-;12253:5;12243:15;;;12298:2;12287:9;12283:18;12277:25;12267:35;;12342:2;12331:9;12327:18;12321:25;12311:35;;12386:2;12375:9;12371:18;12365:25;12355:35;;12430:3;12419:9;12415:19;12409:26;12399:36;;12475:3;12464:9;12460:19;12454:26;12444:36;;12520:3;12509:9;12505:19;12499:26;12489:36;;12565:3;12554:9;12550:19;12544:26;12534:36;;11895:681;;;;;;;;;;;:::o;12581:274::-;12621:1;12647;12637:189;;-1:-1:-1;;;12679:1:1;12672:88;12783:4;12780:1;12773:15;12811:4;12808:1;12801:15;12637:189;-1:-1:-1;12840:9:1;;12581:274::o;13291:422::-;13380:1;13423:5;13380:1;13437:270;13458:7;13448:8;13445:21;13437:270;;;13517:4;13513:1;13509:6;13505:17;13499:4;13496:27;13493:53;;;13526:18;;:::i;:::-;13576:7;13566:8;13562:22;13559:55;;;13596:16;;;;13559:55;13675:22;;;;13635:15;;;;13437:270;;;13441:3;13291:422;;;;;:::o;13718:806::-;13767:5;13797:8;13787:80;;-1:-1:-1;13838:1:1;13852:5;;13787:80;13886:4;13876:76;;-1:-1:-1;13923:1:1;13937:5;;13876:76;13968:4;13986:1;13981:59;;;;14054:1;14049:130;;;;13961:218;;13981:59;14011:1;14002:10;;14025:5;;;14049:130;14086:3;14076:8;14073:17;14070:43;;;14093:18;;:::i;:::-;-1:-1:-1;;14149:1:1;14135:16;;14164:5;;13961:218;;14263:2;14253:8;14250:16;14244:3;14238:4;14235:13;14231:36;14225:2;14215:8;14212:16;14207:2;14201:4;14198:12;14194:35;14191:77;14188:159;;;-1:-1:-1;14300:19:1;;;14332:5;;14188:159;14379:34;14404:8;14398:4;14379:34;:::i;:::-;14449:6;14445:1;14441:6;14437:19;14428:7;14425:32;14422:58;;;14460:18;;:::i;:::-;14498:20;;13718:806;-1:-1:-1;;;13718:806:1:o;14529:140::-;14587:5;14616:47;14657:4;14647:8;14643:19;14637:4;14616:47;:::i;15106:168::-;15179:9;;;15210;;15227:15;;;15221:22;;15207:37;15197:71;;15248:18;;:::i;19831:128::-;19898:9;;;19919:11;;;19916:37;;;19933:18;;:::i;20153:184::-;-1:-1:-1;;;20202:1:1;20195:88;20302:4;20299:1;20292:15;20326:4;20323:1;20316:15;20342:251;20412:6;20465:2;20453:9;20444:7;20440:23;20436:32;20433:52;;;20481:1;20478;20471:12;20433:52;20513:9;20507:16;20532:31;20557:5;20532:31;:::i;20598:484::-;20651:3;20689:5;20683:12;20716:6;20711:3;20704:19;20742:4;20771:2;20766:3;20762:12;20755:19;;20808:2;20801:5;20797:14;20829:1;20839:218;20853:6;20850:1;20847:13;20839:218;;;20918:13;;-1:-1:-1;;;;;20914:62:1;20902:75;;20997:12;;;;21032:15;;;;20875:1;20868:9;20839:218;;;-1:-1:-1;21073:3:1;;20598:484;-1:-1:-1;;;;;20598:484:1:o;21087:605::-;21386:6;21375:9;21368:25;21429:6;21424:2;21413:9;21409:18;21402:34;21472:3;21467:2;21456:9;21452:18;21445:31;21349:4;21493:57;21545:3;21534:9;21530:19;21522:6;21493:57;:::i;:::-;-1:-1:-1;;;;;21586:55:1;;;;21581:2;21566:18;;21559:83;-1:-1:-1;21673:3:1;21658:19;21651:35;21485:65;21087:605;-1:-1:-1;;;21087:605:1:o;24300:533::-;24571:6;24560:9;24553:25;24614:3;24609:2;24598:9;24594:18;24587:31;24534:4;24635:57;24687:3;24676:9;24672:19;24664:6;24635:57;:::i;:::-;-1:-1:-1;;;;;24728:55:1;;;;24723:2;24708:18;;24701:83;-1:-1:-1;24815:2:1;24800:18;24793:34;24627:65;24300:533;-1:-1:-1;;24300:533:1:o

Swarm Source

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